diff options
author | Jussi Kivilinna <jussi.kivilinna@iki.fi> | 2017-05-13 18:35:30 +0300 |
---|---|---|
committer | Jussi Kivilinna <jussi.kivilinna@iki.fi> | 2017-05-18 20:09:45 +0300 |
commit | ff02fca39c83bcf30c79368611ac65e273e77f6c (patch) | |
tree | 19b0f476a0284d4ca2fe0ad6624f0f76ddfed52b /cipher/cast5-amd64.S | |
parent | 434d4f2af39033fc626044ba9a060da298522293 (diff) | |
download | libgcrypt-ff02fca39c83bcf30c79368611ac65e273e77f6c.tar.gz |
cast5-amd64: use 64-bit relocation with large PIC memory model
* cipher/cast5-amd64.S [__code_model_large__]
(GET_EXTERN_POINTER): New.
--
Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
Diffstat (limited to 'cipher/cast5-amd64.S')
-rw-r--r-- | cipher/cast5-amd64.S | 15 |
1 files changed, 14 insertions, 1 deletions
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@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@GOT, %r15; \ + addq %r14, reg; \ + popq %r14; \ + movq (reg, %r15), reg; \ + popq %r15; +# else +# define GET_EXTERN_POINTER(name, reg) movq name@GOTPCREL(%rip), reg +# endif #endif #ifdef HAVE_COMPATIBLE_GCC_AMD64_PLATFORM_AS |