[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