Message ID | 1390477771-30826-1-git-send-email-will.newton@linaro.org |
---|---|
State | Accepted |
Headers | show |
On 23 January 2014 17:30, Carlos O'Donell <carlos@redhat.com> wrote: > On 01/23/2014 06:49 AM, Will Newton wrote: >> ARMv4 does not have the blx instruction, so use the BLX macro which >> handles abstracting this for us. >> >> ports/ChangeLog.arm: >> >> 2014-01-23 Will Newton <will.newton@linaro.org> >> >> [BZ #16499] >> * sysdeps/unix/sysv/linux/arm/clone.S: Use BLX macro instead >> of blx instruction directly. >> --- >> ports/sysdeps/unix/sysv/linux/arm/clone.S | 8 +------- >> 1 file changed, 1 insertion(+), 7 deletions(-) >> >> diff --git a/ports/sysdeps/unix/sysv/linux/arm/clone.S b/ports/sysdeps/unix/sysv/linux/arm/clone.S >> index 44286a5..03fe9ab 100644 >> --- a/ports/sysdeps/unix/sysv/linux/arm/clone.S >> +++ b/ports/sysdeps/unix/sysv/linux/arm/clone.S >> @@ -88,14 +88,8 @@ PSEUDO_END (__clone) >> #endif >> @ pick the function arg and call address off the stack and execute >> ldr r0, [sp, #4] >> -#if defined(__ARM_ARCH_4T__) && defined(__THUMB_INTERWORK__) >> ldr ip, [sp], #8 >> - mov lr, pc >> - bx ip >> -#else >> - ldr lr, [sp], #8 >> - blx lr >> -#endif >> + BLX (ip) > > Looks good. > >> >> @ and we are done, passing the return value through r0 >> b PLTJMP(HIDDEN_JUMPTARGET(_exit)) >> > > Did you test this or ask the submitter to test it? > > If he says it works then OK to commit. I have tested this on armv7, I don't have an armv4 capable toolchain at the moment to test it for that arch. I've added Mike to CC so he can take a look. Thanks,
On 23 January 2014 18:22, Will Newton <will.newton@linaro.org> wrote: > On 23 January 2014 17:30, Carlos O'Donell <carlos@redhat.com> wrote: >> On 01/23/2014 06:49 AM, Will Newton wrote: >>> ARMv4 does not have the blx instruction, so use the BLX macro which >>> handles abstracting this for us. >>> >>> ports/ChangeLog.arm: >>> >>> 2014-01-23 Will Newton <will.newton@linaro.org> >>> >>> [BZ #16499] >>> * sysdeps/unix/sysv/linux/arm/clone.S: Use BLX macro instead >>> of blx instruction directly. >>> --- >>> ports/sysdeps/unix/sysv/linux/arm/clone.S | 8 +------- >>> 1 file changed, 1 insertion(+), 7 deletions(-) >>> >>> diff --git a/ports/sysdeps/unix/sysv/linux/arm/clone.S b/ports/sysdeps/unix/sysv/linux/arm/clone.S >>> index 44286a5..03fe9ab 100644 >>> --- a/ports/sysdeps/unix/sysv/linux/arm/clone.S >>> +++ b/ports/sysdeps/unix/sysv/linux/arm/clone.S >>> @@ -88,14 +88,8 @@ PSEUDO_END (__clone) >>> #endif >>> @ pick the function arg and call address off the stack and execute >>> ldr r0, [sp, #4] >>> -#if defined(__ARM_ARCH_4T__) && defined(__THUMB_INTERWORK__) >>> ldr ip, [sp], #8 >>> - mov lr, pc >>> - bx ip >>> -#else >>> - ldr lr, [sp], #8 >>> - blx lr >>> -#endif >>> + BLX (ip) >> >> Looks good. >> >>> >>> @ and we are done, passing the return value through r0 >>> b PLTJMP(HIDDEN_JUMPTARGET(_exit)) >>> >> >> Did you test this or ask the submitter to test it? >> >> If he says it works then OK to commit. > > I have tested this on armv7, I don't have an armv4 capable toolchain > at the moment to test it for that arch. I figured out the correct value of CFLAGS to get a build for armv4 (and armv4t) and the patch fixes the issue, so I have committed it.
diff --git a/ports/sysdeps/unix/sysv/linux/arm/clone.S b/ports/sysdeps/unix/sysv/linux/arm/clone.S index 44286a5..03fe9ab 100644 --- a/ports/sysdeps/unix/sysv/linux/arm/clone.S +++ b/ports/sysdeps/unix/sysv/linux/arm/clone.S @@ -88,14 +88,8 @@ PSEUDO_END (__clone) #endif @ pick the function arg and call address off the stack and execute ldr r0, [sp, #4] -#if defined(__ARM_ARCH_4T__) && defined(__THUMB_INTERWORK__) ldr ip, [sp], #8 - mov lr, pc - bx ip -#else - ldr lr, [sp], #8 - blx lr -#endif + BLX (ip) @ and we are done, passing the return value through r0 b PLTJMP(HIDDEN_JUMPTARGET(_exit))