diff options
author | Will Newton <will.newton@linaro.org> | 2013-12-10 16:26:38 +0000 |
---|---|---|
committer | Will Newton <will.newton@linaro.org> | 2014-01-14 14:02:34 +0000 |
commit | 2f10c4d6901e7a4c4ad294cc5bb8ece6547f4f62 (patch) | |
tree | 9694325d2c26b777f46a0e6b68eedc818b731896 /ports/sysdeps/arm/include | |
parent | 497b1e69f9ad6d11341735d81b7c9181d168df90 (diff) | |
download | glibc-2f10c4d6901e7a4c4ad294cc5bb8ece6547f4f62.tar glibc-2f10c4d6901e7a4c4ad294cc5bb8ece6547f4f62.tar.gz glibc-2f10c4d6901e7a4c4ad294cc5bb8ece6547f4f62.tar.bz2 glibc-2f10c4d6901e7a4c4ad294cc5bb8ece6547f4f62.zip |
ARM: Don't apply pointer encryption to the frame pointer
The frame pointer register is rarely used for that purpose on ARM and
applications that look at the contents of the jmp_buf may be relying
on reading an unencrypted value. For example, Ruby uses the contents
of jmp_buf to find the root set for garbage collection so relies on
this pointer value being unencrypted. Without this patch the Ruby
testsuite fails with a segmentation fault.
ports/ChangeLog.arm:
2013-01-14 Will Newton <will.newton@linaro.org>
* sysdeps/arm/__longjmp.S: Don't apply pointer encryption
to fp register.
* sysdeps/arm/setjmp.S: Likewise.
* sysdeps/arm/include/bits/setjmp.h (JMP_BUF_REGLIST): Add
fp to register list, remove a4.
* sysdeps/unix/sysv/linux/arm/sysdep.h (PTR_MANGLE_LOAD):
New macro.
Diffstat (limited to 'ports/sysdeps/arm/include')
-rw-r--r-- | ports/sysdeps/arm/include/bits/setjmp.h | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/ports/sysdeps/arm/include/bits/setjmp.h b/ports/sysdeps/arm/include/bits/setjmp.h index 2f502457d8..220dfe8d96 100644 --- a/ports/sysdeps/arm/include/bits/setjmp.h +++ b/ports/sysdeps/arm/include/bits/setjmp.h @@ -26,9 +26,8 @@ #ifndef _ISOMAC /* Register list for a ldm/stm instruction to load/store - the general registers from a __jmp_buf. The a4 register - contains fp at this point. */ -# define JMP_BUF_REGLIST {a4, v1-v6, sl} + the general registers from a __jmp_buf. */ +# define JMP_BUF_REGLIST {v1-v6, sl, fp} /* Index of __jmp_buf where the sp register resides. */ # define __JMP_BUF_SP 8 |