Re: R_PPC_ADDR16_HI relocs in PPC modules ?
From: Simon Vallet <hidden>
Date: 2007-01-02 18:09:54
On Tue, 2 Jan 2007 18:16:01 +0100 Segher Boessenkool [off-list ref] wrote:
Well you normally never end up with an add with an @h -- you're typically adding it to something that is loaded with "li", i.e., something that's the sign-extended version of the low 16 bits of the 32-bit thing you're loading totally.
Mmm... I might need to get a deeper understanding of apply_relocate_add(), but if I'm not mistaken, ha also uses high bits
I'm interested how (and why :-) ) Darwin ends up doing it; could you send me the (original) file in question? Or an otool -tvV of it, or part thereof that shows the problem.
Sure. As an example, here is some output of otool -rV and the corresponding
disassembled text section part
Relocation information (__TEXT,__text) 61126 entries
address pcrel length extern type scattered symbolnum/value
00000664 False long False LO16 False 1 (__TEXT,__text)
False long False PAIR False half = 0x0000
00000660 False long False HI16 False 1 (__TEXT,__text)
False long False PAIR False half = 0x2738
00000654 False long False LO16 False 1 (__TEXT,__text)
False long False PAIR False half = 0x0000
00000650 False long False HI16 False 1 (__TEXT,__text)
False long False PAIR False half = 0x83fc
00000650 lis r12,hi16(_msw_report_event)
00000654 ori r12,r12,lo16(_msw_report_event)
00000658 mtspr ctr,r12
0000065c bctr
00000660 lis r12,hi16(_PRINT_ERROR)
00000664 ori r12,r12,lo16(_PRINT_ERROR)
00000668 mtspr ctr,r12
0000066c bctr
As for the two symbols:
000083fc T _msw_report_event
00002738 T _PRINT_ERROR
Just tell me if you need more info.
Simon