From 8ae4c946c49862151bf7fd6ae65b116ec62be606 Mon Sep 17 00:00:00 2001 Message-Id: <8ae4c946c49862151bf7fd6ae65b116ec62be606.1716352380.git.mdw@distorted.org.uk> From: Mark Wooding Date: Thu, 26 May 2016 09:26:09 +0100 Subject: [PATCH] base/asm-common.h, *.S: Introduce `AUXFN'/`ENDAUXFN'; abolish `gotaux'. Organization: Straylight/Edgeware From: Mark Wooding This change introduces a new macro pair `AUXFN' and `ENDAUXFN' which are mostly useful in other macros. They bracket an auxiliary function definition which will be put somewhere convenient (at the end of the text section), and defined exactly once. This is exactly what we need to make the `_where_am_i.GOTREG' macros automatically in `ldgot', so use this and abolish `gotaux' from the codebase. --- base/asm-common.h | 27 +++++++++++++++++---------- symm/rijndael-x86ish-aesni.S | 2 -- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/base/asm-common.h b/base/asm-common.h index 8ab0bc0a..0b5f2238 100644 --- a/base/asm-common.h +++ b/base/asm-common.h @@ -51,6 +51,19 @@ F(name): \ ENDFUNC_HOOK(name); \ _LTORG +// Make a helper function, if necessary. +#define AUXFN(name) \ + .ifndef .L$_auxfn_def.name; \ + .text 7128; \ + .macro _ENDAUXFN; _ENDAUXFN_TAIL(name); .endm; \ + FUNC_PREHOOK(name); \ +name: +#define _ENDAUXFN_TAIL(name) \ + .purgem _ENDAUXFN; \ + .text .L$_subsec; \ + .L$_auxfn_def.name = 1 +#define ENDAUXFN _ENDAUXFN; .endif + ///-------------------------------------------------------------------------- /// ELF-specific hacking. @@ -109,18 +122,12 @@ F(name): \ // Maybe load GOT address into GOT. .macro ldgot got=GOTREG #if WANT_PIC && CPUFAM_X86 - call _where_am_i.\got - add \got, offset _GLOBAL_OFFSET_TABLE_ -#endif -.endm - -// Maybe build a helper subroutine for `ldgot GOT'. -.macro gotaux got=GOTREG -#if WANT_PIC && CPUFAM_X86 - .align 16 -_where_am_i.\got : + AUXFN(_ldgot.\got) mov \got, [esp] ret + ENDAUXFN + call _ldgot.\got + add \got, offset _GLOBAL_OFFSET_TABLE_ #endif .endm diff --git a/symm/rijndael-x86ish-aesni.S b/symm/rijndael-x86ish-aesni.S index 5194c17d..12d4267f 100644 --- a/symm/rijndael-x86ish-aesni.S +++ b/symm/rijndael-x86ish-aesni.S @@ -546,8 +546,6 @@ bogus: callext F(abort) 0: hlt jmp 0b - gotaux ecx - ///-------------------------------------------------------------------------- /// Data tables. -- [mdw]