X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb/blobdiff_plain/4bc8424a9fde81305a5bcd04708492f3a067b438..a90d420cbe87490c844ae422c966e746d3134b07:/base/regdump.h diff --git a/base/regdump.h b/base/regdump.h index 66933fcf..3ada7eac 100644 --- a/base/regdump.h +++ b/base/regdump.h @@ -271,11 +271,11 @@ struct regmap { regmap_avx = 2*WORDSZ regmap_size = 3*WORDSZ -#define REGDEF_GPX86_COMMON(rn, RN) \ - regsrc.e##rn = REGSRC_GP | REGIX_##RN; \ +#define REGDEF_GPX86_COMMON(rn, ix) \ + regsrc.e##rn = REGSRC_GP | ix; \ regty.e##rn = REGF_32; \ regfmt.e##rn = REGF_HEX; \ - regsrc.r##rn = REGSRC_GP | REGIX_##RN; \ + regsrc.r##rn = REGSRC_GP | ix; \ regty.r##rn = REGF_64; \ regfmt.r##rn = REGF_HEX @@ -289,7 +289,7 @@ struct regmap { regsrc.rn##x = REGSRC_GP | REGIX_##RN##X; \ regty.rn##x = REGF_16; \ regfmt.rn##x = REGF_HEX; \ - REGDEF_GPX86_COMMON(rn##x, RN##X) + REGDEF_GPX86_COMMON(rn##x, REGIX_##RN##X) REGDEF_GPX86_ABCD(a, A) REGDEF_GPX86_ABCD(b, B) REGDEF_GPX86_ABCD(c, C) @@ -297,12 +297,12 @@ REGDEF_GPX86_ABCD(d, D) regsrc.eflags = REGSRC_GP | REGIX_FLAGS regty.eflags = REGF_32 - regty.eflags = 0 + regfmt.eflags = 0 #if CPUFAM_AMD64 regsrc.rflags = REGSRC_GP | REGIX_FLAGS regty.rflags = REGF_64 - regty.rflags = 0 + regfmt.rflags = 0 #endif #define REGDEF_GPX86_XP(rn, RN) \ @@ -312,7 +312,7 @@ REGDEF_GPX86_ABCD(d, D) regsrc.rn = REGSRC_GP | REGIX_##RN; \ regty.rn = REGF_16; \ regfmt.rn = REGF_HEX; \ - REGDEF_GPX86_COMMON(rn, RN) + REGDEF_GPX86_COMMON(rn, REGIX_##RN) REGDEF_GPX86_XP(ip, IP) REGDEF_GPX86_XP(si, SI) REGDEF_GPX86_XP(di, DI) @@ -381,72 +381,72 @@ DO8(REGDEF_SIMD) // Stash r/eax. This is bletcherous: hope we don't get a signal in // the next few instructions. - mov [R_sp(r) - REGDUMP_SPADJ + (REGIX_AX - 1)*WORDSZ], R_a(r) + mov [SP - REGDUMP_SPADJ + (REGIX_AX - 1)*WORDSZ], AX .ifnes "\addr", "nil" // Collect the effective address for the following dump, leaving it // in the `addr' slot of the dump. - lea R_a(r), \addr - mov [R_sp(r) - REGDUMP_SPADJ + (REGIX_ADDR - 1)*WORDSZ], R_a(r) + lea AX, \addr + mov [SP - REGDUMP_SPADJ + (REGIX_ADDR - 1)*WORDSZ], AX .endif // Make space for the register save area. On AMD64 with System/V // ABI, also skip the red zone. Use `lea' here to preserve the // flags. - lea R_sp(r), [R_sp(r) - REGDUMP_SPADJ] + lea SP, [SP - REGDUMP_SPADJ] // Save flags and general-purpose registers. On 32-bit x86, we save // ebx here and establish a GOT pointer here for the benefit of the // PLT-indirect calls made later on. pushf # if CPUFAM_X86 - mov [esp + 4*REGIX_BX], ebx + mov [SP + 4*REGIX_BX], ebx ldgot # endif - callext regdump_gpsave + callext F(regdump_gpsave) // Make space for the extended registers. - sub R_sp(r), R_c(r) - callext regdump_xtsave + sub SP, CX + callext F(regdump_xtsave) // Prepare for calling back into C. On 32-bit x86, leave space for // the arguments and set up the GOT pointer; on AMD64 Windows, leave // the `shadow space' for the called-function's arguments. Also, // forcibly align the stack pointer to a 16-byte boundary. # if CPUFAM_X86 - sub esp, 16 + sub SP, 16 # elif ABI_WIN - sub rsp, 32 + sub SP, 32 # endif - and R_sp(r), ~15 + and SP, ~15 .endm .macro _rstrregs // Restore registers. // We assume r/ebp still points to the register map. - callext regdump_xtrstr - mov R_sp(r), R_bp(r) - callext regdump_gprstr + callext F(regdump_xtrstr) + mov SP, BP + callext F(regdump_gprstr) popf - lea R_sp(r), [R_sp(r) + REGDUMP_SPADJ] + lea SP, [SP + REGDUMP_SPADJ] .endm .macro _regbase # if CPUFAM_X86 - mov [esp + 0], ebp + mov [SP + 0], BP # elif ABI_SYSV - mov rdi, rbp + mov rdi, BP # elif ABI_WIN - mov rcx, rbp + mov rcx, BP # endif .endm .macro _membase - mov R_a(r), [R_bp(r) + regmap_gp] + mov AX, [BP + regmap_gp] # if CPUFAM_X86 mov eax, [eax + REGIX_ADDR*WORDSZ] - mov [esp + 0], eax + mov [SP + 0], eax # elif ABI_SYSV mov rdi, [rax + REGIX_ADDR*WORDSZ] # elif ABI_WIN @@ -457,7 +457,7 @@ DO8(REGDEF_SIMD) .macro _reglbl msg .ifeqs "\msg", "" # if CPUFAM_X86 - mov dword ptr [esp + 4], 0 + mov dword ptr [SP + 4], 0 # elif ABI_SYSV xor esi, esi # elif ABI_WIN @@ -466,7 +466,7 @@ DO8(REGDEF_SIMD) .else # if CPUFAM_X86 lea eax, [INTADDR(.L$_reglbl$\@)] - mov [esp + 4], eax + mov [SP + 4], eax # elif ABI_SYSV lea rsi, [INTADDR(.L$_reglbl$\@)] # elif ABI_WIN @@ -481,7 +481,7 @@ DO8(REGDEF_SIMD) .macro _regfmt arg # if CPUFAM_X86 - mov dword ptr [esp + 8], \arg + mov dword ptr [SP + 8], \arg # elif ABI_SYSV mov edx, \arg # elif ABI_WIN @@ -643,8 +643,8 @@ DO16(REGDEF_NEONQ) .endm .macro _regfmt arg - movw r2, #\arg&0xffff - movt r2, #(\arg >> 16)&0xffff + movw r2, #(\arg)&0xffff + movt r2, #((\arg) >> 16)&0xffff .endm #endif @@ -794,8 +794,8 @@ DO32(REGDEF_FP) .endm .macro _regfmt arg - movz w2, #\arg&0xffff - movk w2, #(\arg >> 16)&0xffff, lsl #16 + movz w2, #(\arg)&0xffff + movk w2, #((\arg) >> 16)&0xffff, lsl #16 .endm #endif @@ -885,7 +885,7 @@ extern void regdump_freshline(void); .macro terpri _saveregs - callext regdump_freshline + callext F(regdump_freshline) _rstrregs .endm @@ -897,7 +897,7 @@ extern void regdump_freshline(void); (((\fmt®F_TYMASK) == 0)®ty.\rn) | \ (((\fmt®F_FMTMASK) == 0)®fmt.\rn) _regfmt .L$reg.fmt$\@ - callext regdump + callext F(regdump) _rstrregs .endm @@ -909,7 +909,7 @@ extern void regdump_freshline(void); (((\fmt®F_TYMASK) == 0)®F_32) | \ (((\fmt®F_FMTMASK) == 0)®F_HEX) _regfmt .L$mem.fmt$\@ - callext regdump + callext F(regdump) _rstrregs .endm @@ -917,15 +917,15 @@ extern void regdump_freshline(void); _saveregs .ifnes "\gp", "nil" _regbase - callext regdump_gp + callext F(regdump_gp) .endif .ifnes "\fp", "nil" _regbase - callext regdump_fp + callext F(regdump_fp) .endif .ifnes "\simd", "nil" _regbase - callext regdump_simd + callext F(regdump_simd) .endif _rstrregs .endm