mirror of
https://github.com/ipxe/ipxe
synced 2025-12-22 21:11:03 +03:00
[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 <mcb30@ipxe.org>
This commit is contained in:
@@ -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" \
|
||||
|
||||
@@ -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" \
|
||||
|
||||
Reference in New Issue
Block a user