From 1f65ed53da16e383416ae034b585fd52682f5ea7 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Sun, 13 Mar 2016 11:09:01 +0000 Subject: [build] Allow assembler section type character to vary by architecture On some architectures (such as ARM) the "@" character is used as a comment delimiter. A section type argument such as "@progbits" therefore becomes "%progbits". This is further complicated by the fact that the "%" character has special meaning for inline assembly when input or output operands are used, in which cases "@progbits" becomes "%%progbits". Allow the section type character(s) to be defined via Makefile variables. Signed-off-by: Michael Brown --- src/include/compiler.h | 17 ++++++++++++++--- src/include/errno.h | 2 +- 2 files changed, 15 insertions(+), 4 deletions(-) (limited to 'src/include') diff --git a/src/include/compiler.h b/src/include/compiler.h index ca82f9523..32afb64cf 100644 --- a/src/include/compiler.h +++ b/src/include/compiler.h @@ -52,6 +52,17 @@ /** Stringify expanded argument */ #define _S2( x ) _S1 ( x ) +/* Assembler section types */ +#ifdef ASSEMBLY +#define PROGBITS _C2 ( ASM_TCHAR, progbits ) +#define NOBITS _C2 ( ASM_TCHAR, nobits ) +#else +#define PROGBITS_OPS _S2 ( ASM_TCHAR_OPS ) "progbits" +#define PROGBITS _S2 ( ASM_TCHAR ) "progbits" +#define NOBITS_OPS _S2 ( ASM_TCHAR_OPS ) "nobits" +#define NOBITS _S2 ( ASM_TCHAR ) "nobits" +#endif + /** * @defgroup symmacros Macros to provide or require explicit symbols * @{ @@ -64,7 +75,7 @@ */ #ifdef ASSEMBLY #define PROVIDE_SYMBOL( symbol ) \ - .section ".provided", "a", @nobits ; \ + .section ".provided", "a", NOBITS ; \ .hidden symbol ; \ .globl symbol ; \ symbol: ; \ @@ -139,14 +150,14 @@ */ #ifdef ASSEMBLY #define PROVIDE_REQUIRING_SYMBOL() \ - .section ".tbl.requiring_symbols", "a", @progbits ; \ + .section ".tbl.requiring_symbols", "a", PROGBITS ; \ __requiring_symbol__: .byte 0 ; \ .size __requiring_symbol__, . - __requiring_symbol__ ; \ .previous #else #define PROVIDE_REQUIRING_SYMBOL() \ __asm__ ( ".section \".tbl.requiring_symbols\", " \ - " \"a\", @progbits\n" \ + " \"a\", " PROGBITS "\n" \ "__requiring_symbol__:\t.byte 0\n" \ ".size __requiring_symbol__, " \ " . - __requiring_symbol__\n" \ diff --git a/src/include/errno.h b/src/include/errno.h index 036479aff..342384fa4 100644 --- a/src/include/errno.h +++ b/src/include/errno.h @@ -258,7 +258,7 @@ static inline void eplatform_discard ( int dummy __unused, ... ) {} * @ret error Error */ #define __einfo_error( einfo ) ( { \ - __asm__ ( ".section \".einfo\", \"\", @progbits\n\t" \ + __asm__ ( ".section \".einfo\", \"\", " PROGBITS_OPS "\n\t" \ ".align 8\n\t" \ "\n1:\n\t" \ ".long ( 4f - 1b )\n\t" \ -- cgit v1.2.3-55-g7522