使 gcc 不在函数末尾发出 'ret' 指令
Make gcc not issue a 'ret' instruction at the end of function
如果我编译这段C代码:
void _start() {
}
通过这次 gcc 调用:
gcc -nostdlib -Os -S foo.c
我得到这个装配清单:
.file "foo.c"
.section .text.unlikely,"x"
LCOLDB0:
.text
LHOTB0:
.globl __start
.def __start; .scl 2; .type 32; .endef
__start:
pushl %ebp
movl %esp, %ebp
popl %ebp
ret
.section .text.unlikely,"x"
LCOLDE0:
.text
LHOTE0:
.ident "GCC: (GNU) 4.9.2"
如您所见,gcc 在代码末尾发出了 'ret' 指令。有没有办法让它不发出?
在你的函数中调用 __builtin_unreachable();
告诉 gcc 它不需要在最后 return,因为它不会到达最后。
如果我编译这段C代码:
void _start() {
}
通过这次 gcc 调用:
gcc -nostdlib -Os -S foo.c
我得到这个装配清单:
.file "foo.c"
.section .text.unlikely,"x"
LCOLDB0:
.text
LHOTB0:
.globl __start
.def __start; .scl 2; .type 32; .endef
__start:
pushl %ebp
movl %esp, %ebp
popl %ebp
ret
.section .text.unlikely,"x"
LCOLDE0:
.text
LHOTE0:
.ident "GCC: (GNU) 4.9.2"
如您所见,gcc 在代码末尾发出了 'ret' 指令。有没有办法让它不发出?
在你的函数中调用 __builtin_unreachable();
告诉 gcc 它不需要在最后 return,因为它不会到达最后。