From cd303963aec7291de8aabf9aa04d1423fe7dcac4 Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Thu, 7 Nov 2019 01:34:06 +0000 Subject: [PATCH] base/regdump.[ch]: Add a feature for printing plain messages. Introduce a `REGSRC_NONE' which just prints the message, and add a `msg' macro which invokes this. --- base/regdump.c | 6 ++++++ base/regdump.h | 29 +++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/base/regdump.c b/base/regdump.c index c591fd5a..89edbcd1 100644 --- a/base/regdump.c +++ b/base/regdump.c @@ -213,6 +213,7 @@ static const char *regname(char *buf, uint32 f) switch (src) { + case REGSRC_NONE: case REGSRC_ABS: return (0); @@ -803,6 +804,11 @@ void regdump(const void *base, const char *lbl, uint32 f) } switch (f®F_SRCMASK) { + + case REGSRC_NONE: + printf(";; %s\n", lbl); + return; + case REGSRC_ABS: p = base; break; diff --git a/base/regdump.h b/base/regdump.h index 3ada7eac..e0568202 100644 --- a/base/regdump.h +++ b/base/regdump.h @@ -135,6 +135,7 @@ union gp64 { uint64 u64; int64 i64; PTR64 }; #define REGSRC_SIMD 0x04000000 /* SIMD vector register */ #define REGSRC_STMMX 0x05000000 /* x86-specific: x87/MMX register */ #define REGSRC_SEG 0x06000000 /* x86-specific: segment register */ +#define REGSRC_NONE 0x0f000000 /* just a message */ /* Where to find the values. */ #define REGF_WDMASK 0xf0000000 @@ -432,6 +433,17 @@ DO8(REGDEF_SIMD) lea SP, [SP + REGDUMP_SPADJ] .endm +.macro _nilbase +# if CPUFAM_X86 + xor eax, eax + mov [SP + 0], eax +# elif ABI_SYSV + xor edi, edi +# elif ABI_WIN + xor ecx, ecx +# endif +.endm + .macro _regbase # if CPUFAM_X86 mov [SP + 0], BP @@ -625,6 +637,10 @@ DO16(REGDEF_NEONQ) add r13, r13, #REGDUMP_GPSIZE .endm +.macro _nilbase + mov r0, #0 +.endm + .macro _regbase mov r0, r5 .endm @@ -776,6 +792,10 @@ DO32(REGDEF_FP) add sp, sp, #REGDUMP_GPSIZE .endm +.macro _nilbase + mov x0, #0 +.endm + .macro _regbase mov x0, x21 .endm @@ -889,6 +909,15 @@ extern void regdump_freshline(void); _rstrregs .endm +.macro msg lbl + _saveregs + _nilbase + _reglbl "\lbl" + _regfmt REGSRC_NONE | (1 << REGF_WDSHIFT) + callext F(regdump) + _rstrregs +.endm + .macro reg lbl, rn, fmt=0 _saveregs _regbase -- 2.11.0