summaryrefslogtreecommitdiffstats
path: root/src/include
diff options
context:
space:
mode:
authorMichael Brown2023-02-06 00:55:14 +0100
committerMichael Brown2023-02-06 00:55:14 +0100
commitc6901792f009cfd824707724b687e99edd4c8ecd (patch)
tree8d58b90398ad5a2ffff18becc2a1025a90585916 /src/include
parent[xen] Allow for platforms that have no Xen support (diff)
downloadipxe-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/include')
-rw-r--r--src/include/errno.h4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/include/errno.h b/src/include/errno.h
index decde38e..ac012a69 100644
--- a/src/include/errno.h
+++ b/src/include/errno.h
@@ -262,10 +262,10 @@ static inline void eplatform_discard ( int dummy __unused, ... ) {}
".balign 8\n\t" \
"\n1:\n\t" \
".long ( 4f - 1b )\n\t" \
- ".long %c0\n\t" \
+ ".long %" ASM_NO_PREFIX "0\n\t" \
".long ( 2f - 1b )\n\t" \
".long ( 3f - 1b )\n\t" \
- ".long %c1\n\t" \
+ ".long %" ASM_NO_PREFIX "1\n\t" \
"\n2:\t.asciz \"" __einfo_desc ( einfo ) "\"\n\t" \
"\n3:\t.asciz \"" __FILE__ "\"\n\t" \
".balign 8\n\t" \