s/la_pltenter()/la_pltexit()/
la_pltenter() is called regardless of the value of
framesizep but la_pltexit() is called only if la_pltenter()
returns with non-zero framesizep set. I spent long time to
figure out why la_pltexit() is not called at all.
Quoting comments in glibc/sysdeps/x86_64/dl-trampoline.h:
/* There's nothing in the frame size, so there
will be no call to the _dl_call_pltexit. */
and
/* At this point we need to prepare new stack for the function
which has to be called. We copy the original stack to a
temporary buffer of the size specified by the 'framesize'
returned from _dl_profile_fixup */
I think it's because it needs to preserve 'inregs' to be passed to
la_pltexit().
The _dl_profile_fixup() sets the '*framesizep' to maximum value of
what la_pltenter() sets. Please see glibc/elf/dl-runtime.c file.
Signed-off-by: Namhyung Kim <namhyung@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
invocations for this symbol return different values,
then the maximum returned value is used.
The
-.BR la_pltenter ()
+.BR la_pltexit ()
function is called only if this buffer is
explicitly set to a suitable value.