diff options
| author | Michael Brown | 2023-02-06 00:55:14 +0100 |
|---|---|---|
| committer | Michael Brown | 2023-02-06 00:55:14 +0100 |
| commit | c6901792f009cfd824707724b687e99edd4c8ecd (patch) | |
| tree | 8d58b90398ad5a2ffff18becc2a1025a90585916 /src/arch | |
| parent | [xen] Allow for platforms that have no Xen support (diff) | |
| download | ipxe-c6901792f009cfd824707724b687e99edd4c8ecd.tar.gz ipxe-c6901792f009cfd824707724b687e99edd4c8ecd.tar.xz ipxe-c6901792f009cfd824707724b687e99edd4c8ecd.zip | |
[build] Allow for per-architecture unprefixed constant operand modifier
Over the years, the undocumented operand modifier used to produce the
unprefixed constant values in __einfo_error() has varied from "%c0" to
"%a0" in commit 1a77466 ("[build] Fix use of inline assembly on GCC
4.8 ARM64 builds") and back to "%c0" in commit 3fb3ffc ("[build] Fix
use of inline assembly on GCC 8 ARM64 builds"), according to the
evolving demands of the toolchain.
LoongArch64 suffers from a similar issue: GCC 13 will allow either,
but the currently released GCC 12 allows only the "%a0" form.
Introduce a macro ASM_NO_PREFIX, defined in bits/compiler.h, to
abstract away this difference and allow different architectures to use
different operand modifiers.
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/arch')
| -rw-r--r-- | src/arch/arm32/include/bits/compiler.h | 3 | ||||
| -rw-r--r-- | src/arch/arm64/include/bits/compiler.h | 3 | ||||
| -rw-r--r-- | src/arch/i386/include/bits/compiler.h | 3 | ||||
| -rw-r--r-- | src/arch/x86_64/include/bits/compiler.h | 3 |
4 files changed, 12 insertions, 0 deletions
diff --git a/src/arch/arm32/include/bits/compiler.h b/src/arch/arm32/include/bits/compiler.h index e420cf922..e119f0445 100644 --- a/src/arch/arm32/include/bits/compiler.h +++ b/src/arch/arm32/include/bits/compiler.h @@ -8,6 +8,9 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); #ifndef ASSEMBLY +/** Unprefixed constant operand modifier */ +#define ASM_NO_PREFIX "c" + #define __asmcall #define __libgcc diff --git a/src/arch/arm64/include/bits/compiler.h b/src/arch/arm64/include/bits/compiler.h index 3b129c2fd..b3e1b30a5 100644 --- a/src/arch/arm64/include/bits/compiler.h +++ b/src/arch/arm64/include/bits/compiler.h @@ -8,6 +8,9 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); #ifndef ASSEMBLY +/** Unprefixed constant operand modifier */ +#define ASM_NO_PREFIX "c" + #define __asmcall #define __libgcc diff --git a/src/arch/i386/include/bits/compiler.h b/src/arch/i386/include/bits/compiler.h index 87201135f..78c600428 100644 --- a/src/arch/i386/include/bits/compiler.h +++ b/src/arch/i386/include/bits/compiler.h @@ -8,6 +8,9 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); #ifndef ASSEMBLY +/** Unprefixed constant operand modifier */ +#define ASM_NO_PREFIX "c" + /** Declare a function with standard calling conventions */ #define __asmcall __attribute__ (( cdecl, regparm(0) )) diff --git a/src/arch/x86_64/include/bits/compiler.h b/src/arch/x86_64/include/bits/compiler.h index 5129f90d0..1c04a7b30 100644 --- a/src/arch/x86_64/include/bits/compiler.h +++ b/src/arch/x86_64/include/bits/compiler.h @@ -8,6 +8,9 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); #ifndef ASSEMBLY +/** Unprefixed constant operand modifier */ +#define ASM_NO_PREFIX "c" + /** Declare a function with standard calling conventions */ #define __asmcall __attribute__ (( regparm(0) )) |
