On Mon, May 20, 2019 at 04:19:54PM +0930, Alan Modra wrote:
> On Thu, May 16, 2019 at 05:52:42PM -0500, Segher Boessenkool wrote:
> > Hi Umesh,
> > 
> > On Thu, May 16, 2019 at 06:12:48PM +0530, Umesh Kalappa wrote:
> > > We are very new to Power abi and we are thinking to handle this case
> > > in loader  like  go through the  relocations like R_PPC64_REL24 and
> > > found symbol has the localentry ,then compute the delta (GEP - LEP )
> > > and patch the caller address like (sym.value - delta).
> > 
> > I wonder if you have found a bug in the compiler after all.  Most things
> > are supposed to work without the linker/loader having to do special
> > things; e.g. using the global entry point should always work, using the
> > local entry point is just an optimisation.
> 
> That isn't true for direct calls.  If using the global entry point,
> the linker must provide stub code to load up r12 with the global entry
> address and modify the nop after the bl.  The linker must also adjust
> calls using the local entry point; the call instruction (and
> relocation) specify the function symbol not the function plus local
> entry offset.
> 
> So I don't think there is any compiler bug here, just a broken kernel
> module loader.  Incidentally, if thunks are broken then it's very
> likely local function calls are broken too.

The ABI says

"When a linker causes control to transfer to a global entry point, it
must insert a glue code sequence that loads r12 with the global
entry-point address. Code at the global entry point can assume that
register r12 points to the GEP."

But in the testcase the jump *already* was to the global entry point:

        .globl _ZN12Intermediate1vEv
...
        .set    .LTHUNK0,_ZN12Intermediate1vEv
...
        .globl _ZThn8_N12Intermediate1vEv
        .type   _ZThn8_N12Intermediate1vEv, @function
_ZThn8_N12Intermediate1vEv:
        .cfi_startproc
.LCF2:
0:      addis 2,12,.TOC.-.LCF2@ha
        addi 2,2,.TOC.-.LCF2@l
        .localentry _ZThn8_N12Intermediate1vEv,.-_ZThn8_N12Intermediate1vEv
        addi 3,3,-8
        b .LTHUNK0
        .cfi_endproc
.LFE27:
        .size   _ZThn8_N12Intermediate1vEv,.-_ZThn8_N12Intermediate1vEv


Segher

Reply via email to