]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[build] Allow assembler section type character to vary by architecture
authorMichael Brown <mcb30@ipxe.org>
Sun, 13 Mar 2016 11:09:01 +0000 (11:09 +0000)
committerMichael Brown <mcb30@ipxe.org>
Sun, 13 Mar 2016 11:20:53 +0000 (11:20 +0000)
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>
src/Makefile.housekeeping
src/arch/x86/Makefile
src/crypto/certstore.c
src/crypto/privkey.c
src/image/embedded.c
src/include/compiler.h
src/include/errno.h

index 0a80d2ac9a202456b066edd9db45efce1581ba4a..4280f398ed0b52e8d6f8e5e28b6dbbb630ebffc5 100644 (file)
@@ -491,6 +491,11 @@ LDFLAGS            += -static
 #
 CFLAGS         += -include include/compiler.h
 
+# The section type character (e.g. "@" in "@progbits") varies by
+# architecture.
+#
+CFLAGS         += -DASM_TCHAR='$(ASM_TCHAR)' -DASM_TCHAR_OPS='$(ASM_TCHAR_OPS)'
+
 # CFLAGS for specific object types
 #
 CFLAGS_c       +=
@@ -896,7 +901,7 @@ endif
 # Device ID tables (using IDs from ROM definition file)
 #
 define obj_pci_id_asm
-       .section ".pci_devlist.$(1)", "a", @progbits
+       .section ".pci_devlist.$(1)", "a", $(ASM_TCHAR)progbits
        .globl pci_devlist_$(1)
 pci_devlist_$(1):
        .short ( 0x$(1) & 0xffff )
index 6ad8031fd813bd36eef805cfae8b17be7040169c..e933f4a4f48cc27a59c7f6a39d6847d0dd6cde49 100644 (file)
@@ -1,3 +1,8 @@
+# Assembler section type character
+#
+ASM_TCHAR      := @
+ASM_TCHAR_OPS  := @
+
 # Include common x86 headers
 #
 INCDIRS                += arch/x86/include
index 503ce499ee57e71a0a756f035029640e43b25786..e62d8330b255d206d54b4a3ca1c1fc195eeda2f9 100644 (file)
@@ -45,7 +45,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
 #define CERT( _index, _path )                                          \
        extern char stored_cert_ ## _index ## _data[];                  \
        extern char stored_cert_ ## _index ## _len[];                   \
-       __asm__ ( ".section \".rodata\", \"a\", @progbits\n\t"          \
+       __asm__ ( ".section \".rodata\", \"a\", " PROGBITS "\n\t"       \
                  "\nstored_cert_" #_index "_data:\n\t"                 \
                  ".incbin \"" _path "\"\n\t"                           \
                  "\nstored_cert_" #_index "_end:\n\t"                  \
index a6043bd1e3859b6ed1578fd44be03b955374ca7d..0b10e9cf84545230b00838829eb45bb7172606a3 100644 (file)
@@ -54,7 +54,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
 /* Raw private key data */
 extern char private_key_data[];
 extern char private_key_len[];
-__asm__ ( ".section \".rodata\", \"a\", @progbits\n\t"
+__asm__ ( ".section \".rodata\", \"a\", " PROGBITS "\n\t"
          "\nprivate_key_data:\n\t"
 #ifdef PRIVATE_KEY
          ".incbin \"" PRIVATE_KEY "\"\n\t"
index 48dd868511f3a837652be672aa0c3245f2af76ad..376e5d299ffb7971fad4db3b783f4389a503262b 100644 (file)
@@ -18,7 +18,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
 #define EMBED( _index, _path, _name )                                  \
        extern char embedded_image_ ## _index ## _data[];               \
        extern char embedded_image_ ## _index ## _len[];                \
-       __asm__ ( ".section \".rodata\", \"a\", @progbits\n\t"          \
+       __asm__ ( ".section \".rodata\", \"a\", " PROGBITS "\n\t"       \
                  "\nembedded_image_" #_index "_data:\n\t"              \
                  ".incbin \"" _path "\"\n\t"                           \
                  "\nembedded_image_" #_index "_end:\n\t"               \
index ca82f9523c7ddaa2e07b698100d9b26d7986674c..32afb64cfb9d22c6af8ae1f370ae57317e4ded54 100644 (file)
 /** 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: ;                                               \
  */
 #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"            \
index 036479aff43bbb6a8cfe1b4bed49c669307a914f..342384fa433e62f9d1c7bae001c7333266d01992 100644 (file)
@@ -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"                               \