Hi Yann,
Yann Sionneau wrote,

> This patch fixes segfault of all user space processes (including init, which 
> caused a panic) on recent buildroot powerpc32 builds.
> 
> The issue has been reported by Romain Naour in this thread: 
> https://mailman.uclibc-ng.org/pipermail/devel/2021-May/002068.html
> 
> Recent buildroot toolchain enables secure PLT in powerpc gcc.
> The latter will then supply -msecure-plt to gas invocations by default.
> Recent buildroot also enables PIE by defaults.
> 
> For the secure PLT to work in PIC, the r30 register needs to point to the GOT.
> Old "bss plt" was just a one-instruction-wide PLT slot, pointed-to by a 
> R_PPC_JMP_SLOT relocation, which was written on-the-fly to contain a branch 
> instruction to the correct address. It therefore had to stay writable.
> New secure PLT only contains read-only code which loads the branch address 
> from the writable GOT.
> 
> Note: secure PLT without PIC does not need r30 to be set. Because offset 
> between plt stub code and got is known at link-time. In this case the PLT 
> entry looks like:
> 1009b3e0 <__uClibc_main@plt>:
> 1009b3e0:       3d 60 10 0e     lis     r11,4110
> 1009b3e4:       81 6b 03 74     lwz     r11,884(r11)
> 1009b3e8:       7d 69 03 a6     mtctr   r11
> 1009b3ec:       4e 80 04 20     bctr
> 
> Whereas secure PLT with PIC - offset between plt and got is unknown at 
> link-time - looks like this:
> 000af800 <00000000.plt_pic32.__uClibc_main>:
>    af800:       81 7e 03 80     lwz     r11,896(r30)
>    af804:       7d 69 03 a6     mtctr   r11
>    af808:       4e 80 04 20     bctr
>    af80c:       60 00 00 00     nop
> 
> Signed-off-by: Yann Sionneau <y...@sionneau.net>

Thanks, applied and pushed.
 best regards
  Waldemar
_______________________________________________
devel mailing list
devel@uclibc-ng.org
https://mailman.uclibc-ng.org/cgi-bin/mailman/listinfo/devel

Reply via email to