@@ -2121,8 +2121,26 @@ bool SignalContext::IsTrueFaultingAddress() const {
2121
2121
UNUSED
2122
2122
static const char *RegNumToRegName (int reg) {
2123
2123
switch (reg) {
2124
- # if SANITIZER_LINUX && SANITIZER_GLIBC
2124
+ # if SANITIZER_LINUX && SANITIZER_GLIBC || SANITIZER_NETBSD
2125
2125
# if defined(__x86_64__)
2126
+ # if SANITIZER_NETBSD
2127
+ # define REG_RAX _REG_RAX
2128
+ # define REG_RBX _REG_RBX
2129
+ # define REG_RCX _REG_RCX
2130
+ # define REG_RDX _REG_RDX
2131
+ # define REG_RDI _REG_RDI
2132
+ # define REG_RSI _REG_RSI
2133
+ # define REG_RBP _REG_RBP
2134
+ # define REG_RSP _REG_RSP
2135
+ # define REG_R8 _REG_R8
2136
+ # define REG_R9 _REG_R9
2137
+ # define REG_R10 _REG_R10
2138
+ # define REG_R11 _REG_R11
2139
+ # define REG_R12 _REG_R12
2140
+ # define REG_R13 _REG_R13
2141
+ # define REG_R14 _REG_R14
2142
+ # define REG_R15 _REG_R15
2143
+ # endif
2126
2144
case REG_RAX:
2127
2145
return " rax" ;
2128
2146
case REG_RBX:
@@ -2156,6 +2174,16 @@ static const char *RegNumToRegName(int reg) {
2156
2174
case REG_R15:
2157
2175
return " r15" ;
2158
2176
# elif defined(__i386__)
2177
+ # if SANITIZER_NETBSD
2178
+ # define REG_EAX _REG_EAX
2179
+ # define REG_EBX _REG_EBX
2180
+ # define REG_ECX _REG_ECX
2181
+ # define REG_EDX _REG_EDX
2182
+ # define REG_EDI _REG_EDI
2183
+ # define REG_ESI _REG_ESI
2184
+ # define REG_EBP _REG_EBP
2185
+ # define REG_ESP _REG_ESP
2186
+ # endif
2159
2187
case REG_EAX:
2160
2188
return " eax" ;
2161
2189
case REG_EBX:
@@ -2296,11 +2324,23 @@ static uptr GetArmRegister(ucontext_t *ctx, int RegNum) {
2296
2324
UNUSED
2297
2325
static void DumpSingleReg (ucontext_t *ctx, int RegNum) {
2298
2326
const char *RegName = RegNumToRegName (RegNum);
2299
- # if defined(__x86_64__)
2327
+ # if defined(__x86_64__)
2300
2328
Printf (" %s%s = 0x%016llx " , internal_strlen (RegName) == 2 ? " " : " " ,
2301
- RegName, ctx->uc_mcontext .gregs [RegNum]);
2302
- # elif defined(__i386__)
2303
- Printf (" %s = 0x%08x " , RegName, ctx->uc_mcontext .gregs [RegNum]);
2329
+ RegName,
2330
+ # if SANITIZER_LINUX
2331
+ ctx->uc_mcontext .gregs [RegNum]
2332
+ # elif SANITIZER_NETBSD
2333
+ ctx->uc_mcontext .__gregs [RegNum]
2334
+ # endif
2335
+ );
2336
+ # elif defined(__i386__)
2337
+ Printf (" %s = 0x%08x " , RegName,
2338
+ # if SANITIZER_LINUX
2339
+ ctx->uc_mcontext .gregs [RegNum]
2340
+ # elif SANITIZER_NETBSD
2341
+ ctx->uc_mcontext .__gregs [RegNum]
2342
+ # endif
2343
+ );
2304
2344
# elif defined(__arm__)
2305
2345
Printf (" %s%s = 0x%08zx " , internal_strlen (RegName) == 2 ? " " : " " , RegName,
2306
2346
GetArmRegister (ctx, RegNum));
@@ -2314,7 +2354,7 @@ static void DumpSingleReg(ucontext_t *ctx, int RegNum) {
2314
2354
2315
2355
void SignalContext::DumpAllRegisters (void *context) {
2316
2356
ucontext_t *ucontext = (ucontext_t *)context;
2317
- # if SANITIZER_LINUX && SANITIZER_GLIBC
2357
+ # if SANITIZER_LINUX && SANITIZER_GLIBC || SANITIZER_NETBSD
2318
2358
# if defined(__x86_64__)
2319
2359
Report (" Register values:\n " );
2320
2360
DumpSingleReg (ucontext, REG_RAX);
@@ -2353,7 +2393,7 @@ void SignalContext::DumpAllRegisters(void *context) {
2353
2393
DumpSingleReg (ucontext, REG_EBP);
2354
2394
DumpSingleReg (ucontext, REG_ESP);
2355
2395
Printf (" \n " );
2356
- # elif defined(__arm__)
2396
+ # elif defined(__arm__) && !SANITIZER_NETBSD
2357
2397
Report (" Register values:\n " );
2358
2398
DumpSingleReg (ucontext, REG_R0);
2359
2399
DumpSingleReg (ucontext, REG_R1);
@@ -2375,7 +2415,7 @@ void SignalContext::DumpAllRegisters(void *context) {
2375
2415
DumpSingleReg (ucontext, REG_R14);
2376
2416
DumpSingleReg (ucontext, REG_R15);
2377
2417
Printf (" \n " );
2378
- # elif defined(__aarch64__)
2418
+ # elif defined(__aarch64__) && !SANITIZER_NETBSD
2379
2419
Report (" Register values:\n " );
2380
2420
for (int i = 0 ; i <= 31 ; ++i) {
2381
2421
DumpSingleReg (ucontext, i);
0 commit comments