1
我不明白爲什麼GCC甚至ESP觸及%,此代碼:它是一個堆棧框架嗎?
int foo(char *);
int bar(char** a)
{
if (!a[1]) {
return 1;
}
if (foo(a[1]) == -1) {
return 1;
}
return 0;
}
與-O2
產生:
bar:
.LFB0:
.cfi_startproc
movq 8(%rdi), %rdi
movl $1, %eax
testq %rdi, %rdi
je .L7
subq $8, %rsp
.cfi_def_cfa_offset 16
call foo
cmpl $-1, %eax
sete %al
addq $8, %rsp
.cfi_def_cfa_offset 8
movzbl %al, %eax
.L7:
rep ret
而且鐺做一些事情,甚至瘋狂的開始和後來推%rax
將其彈入%rdx
。
它是分配一個堆棧幀嗎?這與這些.cfi
指令有關嗎?
這是爲了對齊 – harold