diff --git a/src/arch/x86_64/interrupt/handler.rs b/src/arch/x86_64/interrupt/handler.rs
index 3ff1ed608ee75a9a3441fffcad255232e5a7afe0..06d060b176ae1a11b3184a6ee32db90c050052e6 100644
--- a/src/arch/x86_64/interrupt/handler.rs
+++ b/src/arch/x86_64/interrupt/handler.rs
@@ -211,8 +211,12 @@ macro_rules! function {
     ($name:ident => { $($body:expr,)+ }) => {
         intel_asm!(
             ".global ", stringify!($name), "\n",
+            ".type ", stringify!($name), ", @function\n",
+            ".section .text.", stringify!($name), ", \"ax\", @progbits\n",
             stringify!($name), ":\n",
-            $($body,)+
+            $($body),+,
+            ".size ", stringify!($name), ", . - ", stringify!($name), "\n",
+            ".text\n",
         );
         extern "C" {
             pub fn $name();