]> git.ipfire.org Git - people/ms/gcc.git/commitdiff
libffi: Use #define instead of .macro in src/x86/win64.S [PR102874]
authorRainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
Mon, 15 Nov 2021 09:24:27 +0000 (10:24 +0100)
committerRainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
Mon, 15 Nov 2021 09:24:27 +0000 (10:24 +0100)
The libffi 3.4.2 import badly broke Solaris/x86 bootstrap with the native
assembler:

Assembler:
        "/vol/gcc/src/hg/master/local/libffi/src/x86/win64.S", line 88 :
Illegal mnemonic
        Near line: ".macro epilogue"
        "/vol/gcc/src/hg/master/local/libffi/src/x86/win64.S", line 88 : Syntax
error
        Near line: ".macro epilogue"
        "/vol/gcc/src/hg/master/local/libffi/src/x86/win64.S", line 95 :
Illegal mnemonic
        Near line: ".endm"
        "/vol/gcc/src/hg/master/local/libffi/src/x86/win64.S", line 95 : Syntax
error
        Near line: ".endm"
        "/vol/gcc/src/hg/master/local/libffi/src/x86/win64.S", line 100 :
Illegal mnemonic
        Near line: " epilogue"
        "/vol/gcc/src/hg/master/local/libffi/src/x86/win64.S", line 100 :
Syntax error
        Near line: "epilogue"

Solaris as doesn't support .macro/.endm.

Fixed by using #define instead of the unportable .macro.

Tested on i386-pc-solaris2.11 and x86_64-pc-linux-gnu.

The bug has been reported upstream
(https://github.com/libffi/libffi/issues/665); a corresponding pull
request is also pending (https://github.com/libffi/libffi/pull/669).

2021-10-21  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

libffi:
PR libffi/102874
* src/x86/win64.S (epilogue): Use #define instead of .macro.

libffi/src/x86/win64.S

index f3ace8d07733f0f6dc9179a50a5acca640c632d1..58ec6a155e3d076e507b1c00e8fccb83d040be46 100644 (file)
@@ -85,14 +85,13 @@ C(ffi_call_win64):
 
 /* Below, we're space constrained most of the time.  Thus we eschew the
    modern "mov, pop, ret" sequence (5 bytes) for "leave, ret" (2 bytes).  */
-.macro epilogue
-       leaveq
-       cfi_remember_state
-       cfi_def_cfa(%rsp, 8)
-       cfi_restore(%rbp)
-       ret
+#define epilogue               \
+       leaveq;                 \
+       cfi_remember_state;     \
+       cfi_def_cfa(%rsp, 8);   \
+       cfi_restore(%rbp);      \
+       ret;                    \
        cfi_restore_state
-.endm
 
        .align  8
 0: