[SDK] Use GAS SEH capabilities instead of CFI

Also remove a hack for x86 GAS which no longer holds
This commit is contained in:
Jérôme Gardou 2021-04-22 17:35:54 +02:00 committed by Jérôme Gardou
parent 5e29e98f91
commit 2413530acf

View file

@ -260,19 +260,22 @@ ENDM
/* To avoid reverse syntax we provide a new macro .PROC, replacing PROC... */ /* To avoid reverse syntax we provide a new macro .PROC, replacing PROC... */
.macro .PROC name .macro .PROC name
.func \name .func \name
#ifdef _X86_
/* x86 GAS expects a label with _ prefix */
_\name:
#endif
\name: \name:
#ifdef _X86_
.cfi_startproc .cfi_startproc
.equ cfa_current_offset, -8 #else
.seh_proc \name
#endif
.endm .endm
#define FUNC .PROC #define FUNC .PROC
/* ... and .ENDP, replacing ENDP */ /* ... and .ENDP, replacing ENDP */
.macro .ENDP .macro .ENDP
#ifdef _X86_
.cfi_endproc .cfi_endproc
#else
.seh_endproc
#endif
.endfunc .endfunc
.endm .endm
#define ENDFUNC .ENDP #define ENDFUNC .ENDP
@ -339,45 +342,36 @@ ENDM
.endm .endm
/* Macros for x64 stack unwind OPs */ /* Macros for x64 stack unwind OPs */
.macro .allocstack size .macro .allocstack size
.cfi_adjust_cfa_offset \size .seh_stackalloc \size
.set cfa_current_offset, cfa_current_offset - \size
.endm .endm
code = 1 .macro .pushframe param
.macro .pushframe param=0 /*
.if (\param) * FIXME. .seh_pushframe doesn't accept code argument.
.cfi_adjust_cfa_offset 0x30 * Patch sent.
.set cfa_current_offset, cfa_current_offset - 0x30 */
.else .seh_pushframe \param
.cfi_adjust_cfa_offset 0x28
.set cfa_current_offset, cfa_current_offset - 0x28
.endif
.endm .endm
.macro .pushreg reg .macro .pushreg reg
.cfi_adjust_cfa_offset 8 .seh_pushreg \reg
.equ cfa_current_offset, cfa_current_offset - 8
.cfi_offset \reg, cfa_current_offset
.endm .endm
.macro .savereg reg, offset .macro .savereg reg, offset
// checkme!!! .seh_savereg \reg, \offset
.cfi_offset \reg, \offset
.endm .endm
.macro .savexmm128 reg, offset .macro .savexmm128 reg, offset
// checkme!!! .seh_savexmm \reg, \offset
.cfi_offset \reg, \offset
.endm .endm
.macro .setframe reg, offset .macro .setframe reg, offset
.cfi_def_cfa reg, \offset .seh_setframe \reg, \offset
.equ cfa_current_offset, \offset
.endm .endm
.macro .endprolog .macro .endprolog
.seh_endprologue
.endm .endm
.macro absolute address .macro absolute address