http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46865
Summary: Using -save-temps (or ccache, distcc) produces
different results with multiline macros containing asm
code
Product: gcc
Version: 4.5.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: other
AssignedTo: [email protected]
ReportedBy: [email protected]
Created attachment 22691
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=22691
example case
See the attached example case.
Also reported here:
https://bugs.launchpad.net/gcc-linaro/+bug/687406
When a piece of code containing a multiline macro construct with embedded asm
code is first preprocessed then compiled into an object or asm file, the
results are different than directly compiling them into an object file or asm
code.
The preprocessor step could take place when using -save-temps. It also happens
when using ccache or distcc.
Linux kernel arm parts have this kind of code at least in
local_irq_restore() [include/linux/irqflags.h]
-> raw_local_irq_restore() [arch/arm/include/asm/irqflags.h]
----
Result of example case without -save-temps:
.file "test.c"
.text
.globl optimized
.type optimized, @function
optimized:
.LFB0:
.cfi_startproc
#APP
# 15 "/tmp/test.c" 1
nop
# 0 "" 2
#NO_APP
ret
.cfi_endproc
.LFE0:
.size optimized, .-optimized
.ident "GCC: (GNU) 4.5.1"
.section .note.GNU-stack,"",@progbits
----
Result of example case with -save-temps:
.file "test.c"
.text
.globl optimized
.type optimized, @function
optimized:
.LFB0:
.cfi_startproc
testb $1, flags(%rip)
je .L2
#APP
# 15 "/tmp/test.c" 1
nop
# 0 "" 2
#NO_APP
ret
.L2:
#APP
# 15 "/tmp/test.c" 1
nop
# 0 "" 2
#NO_APP
ret
.cfi_endproc
.LFE0:
.size optimized, .-optimized
.ident "GCC: (GNU) 4.5.1"
.section .note.GNU-stack,"",@progbits