From: Mark Wooding Date: Thu, 26 May 2016 08:26:09 +0000 (+0100) Subject: base/asm-common.h, *.S: Introduce `AUXFN'/`ENDAUXFN'; abolish `gotaux'. X-Git-Tag: 2.3.0~49 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/catacomb/commitdiff_plain/8ae4c946c49862151bf7fd6ae65b116ec62be606 base/asm-common.h, *.S: Introduce `AUXFN'/`ENDAUXFN'; abolish `gotaux'. 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. --- 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.