[Bug target/65779] [5/6 Regression] undefined local symbol on powerpc [regression]
amodra at gmail dot com
gcc-bugzilla@gcc.gnu.org
Fri Apr 17 01:51:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65779
Alan Modra <amodra at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |amodra at gmail dot com
--- Comment #2 from Alan Modra <amodra at gmail dot com> ---
The underlying problem here is that this sequence setting up the GOT/TOC
pointer in adler32():
(insn 358 357 359 2 (parallel [
(set (reg:SI 65 lr)
(symbol_ref:SI ("*.LCF2")))
(use (unspec [
(symbol_ref:SI ("*.LCF2"))
] UNSPEC_TOC))
])
../../../../../../../../../rtems/c/src/lib/libbsp/powerpc/motorola_p\
owerpc/bootloader/../../../powerpc/shared/bootloader/zlib.c:2081 -1
(nil))
(insn 359 358 360 2 (set (reg:SI 30 30)
(reg:SI 65 lr))
../../../../../../../../../rtems/c/src/lib/libbsp/power\
pc/motorola_powerpc/bootloader/../../../powerpc/shared/bootloader/zlib.c:2081
-\
1
(expr_list:REG_DEAD (reg:SI 65 lr)
(nil)))
(insn 360 359 376 2 (set (reg:SI 0 0)
(mem:SI (plus:SI (reg:SI 30 30)
(minus:SI (symbol_ref:SI ("*.LCL2"))
(symbol_ref:SI ("*.LCF2")))) [0 S4 A8]))
../../../../../..\
/../../../rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/bootloader/../../../p\
owerpc/shared/bootloader/zlib.c:2081 -1
(nil))
(debug_insn 376 360 361 2 (var_location:SI D#37 (reg/v:SI 0 0 [orig:239 s2 ]
[2\
39])) -1
(nil))
(insn 361 376 362 2 (set (reg:SI 30 30)
(plus:SI (reg:SI 0 0)
(reg:SI 30 30)))
../../../../../../../../../rtems/c/src/lib/libbsp/\
powerpc/motorola_powerpc/bootloader/../../../powerpc/shared/bootloader/zlib.c:2\
081 -1
(expr_list:REG_DEAD (reg:SI 0 0)
(expr_list:REG_UNUSED (reg:SI 30 30)
(nil))))
is deleted by peephole2
DCE: Deleting insn 361
deleting insn with uid = 361.
DCE: Deleting insn 360
deleting insn with uid = 360.
DCE: Deleting insn 359
deleting insn with uid = 359.
DCE: Deleting insn 358
deleting insn with uid = 358.
resulting in uses_TOC() returning false due to not finding UNSPEC_TOC, and thus
not emitting the labels. Deleting the insns is correct; we don't need the GOI
pointer set up in adler32(). gcc-4.9 also does the same thing, but doesn't
leak the labels into debug insns.
More information about the Gcc-bugs
mailing list