]> git.ipfire.org Git - thirdparty/glibc.git/commit - ports/sysdeps/arm/sysdep.h
ARM: Add pointer encryption support.
authorWill Newton <will.newton@linaro.org>
Wed, 7 Aug 2013 12:55:30 +0000 (13:55 +0100)
committerWill Newton <will.newton@linaro.org>
Thu, 3 Oct 2013 10:35:50 +0000 (11:35 +0100)
commitb7f2d27dbd85f6a0966dc389ad4f8205085b7ae8
tree5d08889f9d642580e01d529303ed56409982a221
parent29c793b3c2947badd9d05e45736e406fb12021e8
ARM: Add pointer encryption support.

Add support for pointer encryption in glibc internal structures in C
and assembler code. Pointer encryption is a glibc security feature
described here:

https://sourceware.org/glibc/wiki/PointerEncryption

The ARM implementation uses global variables instead of thread pointer
relative accesses to get the value of the pointer encryption guard
because accessing the thread pointer can be very expensive on older
ARM cores.

ports/ChangeLog.arm:

2013-10-03  Will Newton  <will.newton@linaro.org>

* sysdeps/arm/__longjmp.S (__longjmp): Demangle fp, sp
and lr when restoring register values.
* sysdeps/arm/include/bits/setjmp.h (JMP_BUF_REGLIST): Remove
sp and lr from list and replace fp with a4.
* sysdeps/arm/jmpbuf-unwind.h (_jmpbuf_sp): New function.
(_JMPBUF_UNWINDS_ADJ): Call _jmpbuf_sp.
* sysdeps/arm/setjmp.S (__sigsetjmp): Mangle fp, sp and lr
before storing register values.
* sysdeps/arm/sysdep.h (LDST_GLOBAL): New macro.
* sysdeps/unix/sysv/linux/arm/sysdep.h (PTR_MANGLE): New macro.
(PTR_DEMANGLE): Likewise. (PTR_MANGLE2): Likewise.
(PTR_DEMANGLE2): Likewise.
ports/ChangeLog.arm
ports/sysdeps/arm/__longjmp.S
ports/sysdeps/arm/include/bits/setjmp.h
ports/sysdeps/arm/jmpbuf-unwind.h
ports/sysdeps/arm/setjmp.S
ports/sysdeps/arm/sysdep.h
ports/sysdeps/unix/sysv/linux/arm/sysdep.h