]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[build] Fix use of inline assembly on GCC 4.8 ARM64 builds
authorMichael Brown <mcb30@ipxe.org>
Fri, 28 Jul 2017 12:50:35 +0000 (13:50 +0100)
committerMichael Brown <mcb30@ipxe.org>
Fri, 28 Jul 2017 12:50:35 +0000 (13:50 +0100)
The inline assembly used in include/errno.h to generate the einfo
blocks requires the ability to generate an immediate constant with no
immediate-value prefix (such as the dollar sign for x86 assembly).

We currently achieve this via the undocumented "%c0" form of operand.
This causes an "invalid operand prefix" error on GCC 4.8 for ARM64
builds.

Fix by switching to the equally undocumented "%a0" form of operand,
which appears to work correctly on all tested versions of GCC.

Reported-by: Benjamin S. Allen <bsallen@alcf.anl.gov>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/include/errno.h

index 342384fa433e62f9d1c7bae001c7333266d01992..e80bf9ca5af9c562118e35e36bc57e683c7def44 100644 (file)
@@ -262,10 +262,10 @@ static inline void eplatform_discard ( int dummy __unused, ... ) {}
                  ".align 8\n\t"                                        \
                  "\n1:\n\t"                                            \
                  ".long ( 4f - 1b )\n\t"                               \
-                 ".long %c0\n\t"                                       \
+                 ".long %a0\n\t"                                       \
                  ".long ( 2f - 1b )\n\t"                               \
                  ".long ( 3f - 1b )\n\t"                               \
-                 ".long %c1\n\t"                                       \
+                 ".long %a1\n\t"                                       \
                  "\n2:\t.asciz \"" __einfo_desc ( einfo ) "\"\n\t"     \
                  "\n3:\t.asciz \"" __FILE__ "\"\n\t"                   \
                  ".align 8\n\t"                                        \