这是 Linux 内核函数的编译器输出(使用 编译-mno-red-zone
):
load_balance:
.LFB2408:
.loc 2 6487 0
.cfi_startproc
.LVL1355:
pushq %rbp #
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp #,
.cfi_def_cfa_register 6
pushq %r15 #
pushq %r14 #
pushq %r13 #
pushq %r12 #
.cfi_offset 15, -24
.cfi_offset 14, -32
.cfi_offset 13, -40
.cfi_offset 12, -48
movq %rdx, %r12 # sd, sd
pushq %rbx #
.LBB2877:
.loc 2 6493 0
movq $load_balance_mask, -136(%rbp) #, %sfp
.LBE2877:
.loc 2 6487 0
subq $184, %rsp #,
.cfi_offset 3, -56
.loc 2 6489 0
....
注意编译器已经溢出到堆栈之后的“subq $184, %rsp” (溢出是疯狂的,顺便说一句,因为它溢出了一个常量值!)
Linus 2 天前向 gcc 报告了这个错误。但我不明白错误是什么。 为什么这是subq
错的?
编辑:错误报告在这里:抱歉在 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61904之前没有包含这个