[PATCH 2/5] cast5-amd64: use 64-bit relocation with large PIC memory model
Jussi Kivilinna
jussi.kivilinna at iki.fi
Thu May 18 19:27:34 CEST 2017
* cipher/cast5-amd64.S [__code_model_large__]
(GET_EXTERN_POINTER): New.
--
Signed-off-by: Jussi Kivilinna <jussi.kivilinna at iki.fi>
---
cipher/cast5-amd64.S | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/cipher/cast5-amd64.S b/cipher/cast5-amd64.S
index 608fb64e..c04015a2 100644
--- a/cipher/cast5-amd64.S
+++ b/cipher/cast5-amd64.S
@@ -26,7 +26,20 @@
#if defined(HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS) || !defined(__PIC__)
# define GET_EXTERN_POINTER(name, reg) movabsq $name, reg
#else
-# define GET_EXTERN_POINTER(name, reg) movq name at GOTPCREL(%rip), reg
+# ifdef __code_model_large__
+# define GET_EXTERN_POINTER(name, reg) \
+ pushq %r15; \
+ pushq %r14; \
+ 1: leaq 1b(%rip), reg; \
+ movabsq $_GLOBAL_OFFSET_TABLE_-1b, %r14; \
+ movabsq $name at GOT, %r15; \
+ addq %r14, reg; \
+ popq %r14; \
+ movq (reg, %r15), reg; \
+ popq %r15;
+# else
+# define GET_EXTERN_POINTER(name, reg) movq name at GOTPCREL(%rip), reg
+# endif
#endif
#ifdef HAVE_COMPATIBLE_GCC_AMD64_PLATFORM_AS
More information about the Gcrypt-devel
mailing list