diff options
Diffstat (limited to 'sysdeps/unix/sysv/linux/ia64')
-rw-r--r-- | sysdeps/unix/sysv/linux/ia64/__ia64_longjmp.S | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/ia64/__longjmp.S | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/ia64/pointer_guard.h | 44 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/ia64/setjmp.S | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/ia64/sysdep.h | 20 |
5 files changed, 47 insertions, 20 deletions
diff --git a/sysdeps/unix/sysv/linux/ia64/__ia64_longjmp.S b/sysdeps/unix/sysv/linux/ia64/__ia64_longjmp.S index 9511c15945..4ef5129623 100644 --- a/sysdeps/unix/sysv/linux/ia64/__ia64_longjmp.S +++ b/sysdeps/unix/sysv/linux/ia64/__ia64_longjmp.S @@ -15,6 +15,7 @@ <https://www.gnu.org/licenses/>. */ #include <sysdep.h> +#include <pointer_guard.h> #include <features.h> LEAF(__ia64_flush_rbs) diff --git a/sysdeps/unix/sysv/linux/ia64/__longjmp.S b/sysdeps/unix/sysv/linux/ia64/__longjmp.S index 793dc98cc1..da9653d8a7 100644 --- a/sysdeps/unix/sysv/linux/ia64/__longjmp.S +++ b/sysdeps/unix/sysv/linux/ia64/__longjmp.S @@ -31,6 +31,7 @@ bits into ar.rnat after setting ar.bspstore. */ #include <sysdep.h> +#include <pointer_guard.h> #include <features.h> # define pPos p6 /* is rotate count positive? */ diff --git a/sysdeps/unix/sysv/linux/ia64/pointer_guard.h b/sysdeps/unix/sysv/linux/ia64/pointer_guard.h new file mode 100644 index 0000000000..8631f39374 --- /dev/null +++ b/sysdeps/unix/sysv/linux/ia64/pointer_guard.h @@ -0,0 +1,44 @@ +/* Pointer obfuscation implenentation. ia64 version. + Copyright (C) 2005-2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef POINTER_GUARD_H +#define POINTER_GUARD_H + +#if IS_IN (rtld) +/* We cannot use the thread descriptor because in ld.so we use setjmp + earlier than the descriptor is initialized. */ +# include <sysdeps/generic/pointer_guard.h> +#else +# ifdef __ASSEMBLER__ +# define PTR_MANGLE(reg, tmpreg) \ + add tmpreg=-16,r13 \ + ;; \ + ld8 tmpreg=[tmpreg] \ + ;; \ + xor reg=reg, tmpreg +# define PTR_DEMANGLE(reg, tmpreg) PTR_MANGLE (reg, tmpreg) +# else +# include <stdint.h> +# include <tls.h> +# define PTR_MANGLE(var) \ + (var) = (void *) ((uintptr_t) (var) ^ THREAD_GET_POINTER_GUARD ()) +# define PTR_DEMANGLE(var) PTR_MANGLE (var) +# endif +#endif + +#endif /* POINTER_GUARD_H */ diff --git a/sysdeps/unix/sysv/linux/ia64/setjmp.S b/sysdeps/unix/sysv/linux/ia64/setjmp.S index c29a31f7a6..a978dd4360 100644 --- a/sysdeps/unix/sysv/linux/ia64/setjmp.S +++ b/sysdeps/unix/sysv/linux/ia64/setjmp.S @@ -63,6 +63,7 @@ 0x1c0 f31 */ #include <sysdep.h> +#include <pointer_guard.h> #include <features.h> /* The following two entry points are the traditional entry points: */ diff --git a/sysdeps/unix/sysv/linux/ia64/sysdep.h b/sysdeps/unix/sysv/linux/ia64/sysdep.h index 14adbdf4ff..b450c6c224 100644 --- a/sysdeps/unix/sysv/linux/ia64/sysdep.h +++ b/sysdeps/unix/sysv/linux/ia64/sysdep.h @@ -324,24 +324,4 @@ #endif /* not __ASSEMBLER__ */ -/* Pointer mangling support. */ -#if IS_IN (rtld) -/* We cannot use the thread descriptor because in ld.so we use setjmp - earlier than the descriptor is initialized. */ -#else -# ifdef __ASSEMBLER__ -# define PTR_MANGLE(reg, tmpreg) \ - add tmpreg=-16,r13 \ - ;; \ - ld8 tmpreg=[tmpreg] \ - ;; \ - xor reg=reg, tmpreg -# define PTR_DEMANGLE(reg, tmpreg) PTR_MANGLE (reg, tmpreg) -# else -# define PTR_MANGLE(var) \ - (var) = (void *) ((uintptr_t) (var) ^ THREAD_GET_POINTER_GUARD ()) -# define PTR_DEMANGLE(var) PTR_MANGLE (var) -# endif -#endif - #endif /* linux/ia64/sysdep.h */ |