arm: avoid conditional branch to PLT in sigsetjmp.s

Submitted by Andre McCurdy on Sept. 18, 2019, 6:04 a.m.

Details

Message ID 20190918060405.17630-1-armccurdy@gmail.com
State New
Series "arm: avoid conditional branch to PLT in sigsetjmp.s"
Headers show

Commit Message

Andre McCurdy Sept. 18, 2019, 6:04 a.m.
The R_ARM_THM_JUMP19 relocation type generated for the original code
when targeting Thumb 2 is not supported by the gold linker:

 | .../arm-oe-linux-musleabi/9.2.0/ld: error: conditional branch to PLT in THUMB-2 not supported yet.
 | src/signal/arm/sigsetjmp.s:9: error: unexpected opcode while processing relocation R_ARM_THM_JUMP19
---
 src/signal/arm/sigsetjmp.s | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

Patch hide | download patch | download mbox

diff --git a/src/signal/arm/sigsetjmp.s b/src/signal/arm/sigsetjmp.s
index 318addba..69ebbf49 100644
--- a/src/signal/arm/sigsetjmp.s
+++ b/src/signal/arm/sigsetjmp.s
@@ -6,9 +6,10 @@ 
 sigsetjmp:
 __sigsetjmp:
 	tst r1,r1
-	beq setjmp
+	bne 1f
+	b setjmp
 
-	str lr,[r0,#256]
+1:	str lr,[r0,#256]
 	str r4,[r0,#260+8]
 	mov r4,r0
 

Comments

Khem Raj Sept. 18, 2019, 2:28 p.m.
On Tue, Sep 17, 2019 at 11:04 PM Andre McCurdy <armccurdy@gmail.com> wrote:
>
> The R_ARM_THM_JUMP19 relocation type generated for the original code
> when targeting Thumb 2 is not supported by the gold linker:
>
>  | .../arm-oe-linux-musleabi/9.2.0/ld: error: conditional branch to PLT in THUMB-2 not supported yet.
>  | src/signal/arm/sigsetjmp.s:9: error: unexpected opcode while processing relocation R_ARM_THM_JUMP19

if it is thumb2 specific another option could be to use `it eq` before
beq which should turn branch into an unconditional branch, which then
uses R_ARM_THM_JUMP24 relocation that has a range of 16MB.

> ---
>  src/signal/arm/sigsetjmp.s | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/src/signal/arm/sigsetjmp.s b/src/signal/arm/sigsetjmp.s
> index 318addba..69ebbf49 100644
> --- a/src/signal/arm/sigsetjmp.s
> +++ b/src/signal/arm/sigsetjmp.s
> @@ -6,9 +6,10 @@
>  sigsetjmp:
>  __sigsetjmp:
>         tst r1,r1
> -       beq setjmp
> +       bne 1f
> +       b setjmp
>
> -       str lr,[r0,#256]
> +1:     str lr,[r0,#256]
>         str r4,[r0,#260+8]
>         mov r4,r0
>
> --
> 2.23.0
>
Andre McCurdy Sept. 18, 2019, 5:52 p.m.
On Wed, Sep 18, 2019 at 7:29 AM Khem Raj <raj.khem@gmail.com> wrote:
> On Tue, Sep 17, 2019 at 11:04 PM Andre McCurdy <armccurdy@gmail.com> wrote:
> >
> > The R_ARM_THM_JUMP19 relocation type generated for the original code
> > when targeting Thumb 2 is not supported by the gold linker:
> >
> >  | .../arm-oe-linux-musleabi/9.2.0/ld: error: conditional branch to PLT in THUMB-2 not supported yet.
> >  | src/signal/arm/sigsetjmp.s:9: error: unexpected opcode while processing relocation R_ARM_THM_JUMP19
>
> if it is thumb2 specific another option could be to use `it eq` before
> beq which should turn branch into an unconditional branch, which then
> uses R_ARM_THM_JUMP24 relocation that has a range of 16MB.

That would work too. Thumb 2 specific code would need to be guarded by
#ifdef __thumb2__ though (which I think implies also renaming the file
from .s to .S ?) and I'm not sure if the extra complexity justifies
saving one instruction in the ARM case.
Rich Felker Sept. 18, 2019, 7:54 p.m.
On Wed, Sep 18, 2019 at 10:52:13AM -0700, Andre McCurdy wrote:
> On Wed, Sep 18, 2019 at 7:29 AM Khem Raj <raj.khem@gmail.com> wrote:
> > On Tue, Sep 17, 2019 at 11:04 PM Andre McCurdy <armccurdy@gmail.com> wrote:
> > >
> > > The R_ARM_THM_JUMP19 relocation type generated for the original code
> > > when targeting Thumb 2 is not supported by the gold linker:
> > >
> > >  | .../arm-oe-linux-musleabi/9.2.0/ld: error: conditional branch to PLT in THUMB-2 not supported yet.
> > >  | src/signal/arm/sigsetjmp.s:9: error: unexpected opcode while processing relocation R_ARM_THM_JUMP19
> >
> > if it is thumb2 specific another option could be to use `it eq` before
> > beq which should turn branch into an unconditional branch, which then
> > uses R_ARM_THM_JUMP24 relocation that has a range of 16MB.
> 
> That would work too. Thumb 2 specific code would need to be guarded by
> #ifdef __thumb2__ though (which I think implies also renaming the file
> from .s to .S ?) and I'm not sure if the extra complexity justifies
> saving one instruction in the ARM case.

I don't think it does. Also, current style is not to use "it" at all,
but rather -Wa,-mimplicit-it=always. I'm not sure if unified syntax
accepts "it" in arm mode when the following insn has a matching
condition suffix, but here it wouldn't I think...

Rich