@@ -2121,7 +2121,8 @@ bool SignalContext::IsTrueFaultingAddress() const {
2121
2121
UNUSED
2122
2122
static const char *RegNumToRegName (int reg) {
2123
2123
switch (reg) {
2124
- # if defined(__x86_64__)
2124
+ # if SANITIZER_LINUX
2125
+ # if defined(__x86_64__)
2125
2126
case REG_RAX:
2126
2127
return " rax" ;
2127
2128
case REG_RBX:
@@ -2154,7 +2155,7 @@ static const char *RegNumToRegName(int reg) {
2154
2155
return " r14" ;
2155
2156
case REG_R15:
2156
2157
return " r15" ;
2157
- # elif defined(__i386__)
2158
+ # elif defined(__i386__)
2158
2159
case REG_EAX:
2159
2160
return " eax" ;
2160
2161
case REG_EBX:
@@ -2171,29 +2172,32 @@ static const char *RegNumToRegName(int reg) {
2171
2172
return " ebp" ;
2172
2173
case REG_ESP:
2173
2174
return " esp" ;
2175
+ # endif
2174
2176
# endif
2175
2177
default :
2176
2178
return NULL ;
2177
2179
}
2178
2180
return NULL ;
2179
2181
}
2180
2182
2183
+ # if SANITIZER_LINUX
2181
2184
UNUSED
2182
2185
static void DumpSingleReg (ucontext_t *ctx, int RegNum) {
2183
2186
const char *RegName = RegNumToRegName (RegNum);
2184
- # if defined(__x86_64__)
2187
+ # if defined(__x86_64__)
2185
2188
Printf (" %s%s = 0x%016llx " , internal_strlen (RegName) == 2 ? " " : " " ,
2186
2189
RegName, ctx->uc_mcontext .gregs [RegNum]);
2187
- # elif defined(__i386__)
2190
+ # elif defined(__i386__)
2188
2191
Printf (" %s = 0x%08x " , RegName, ctx->uc_mcontext .gregs [RegNum]);
2189
- # else
2192
+ # else
2190
2193
(void )RegName;
2191
- # endif
2194
+ # endif
2192
2195
}
2196
+ # endif
2193
2197
2194
2198
void SignalContext::DumpAllRegisters (void *context) {
2195
- # if SANITIZER_LINUX
2196
2199
ucontext_t *ucontext = (ucontext_t *)context;
2200
+ # if SANITIZER_LINUX
2197
2201
# if defined(__x86_64__)
2198
2202
Report (" Register values:\n " );
2199
2203
DumpSingleReg (ucontext, REG_RAX);
@@ -2232,8 +2236,35 @@ void SignalContext::DumpAllRegisters(void *context) {
2232
2236
DumpSingleReg (ucontext, REG_EBP);
2233
2237
DumpSingleReg (ucontext, REG_ESP);
2234
2238
Printf (" \n " );
2239
+ # else
2240
+ (void )ucontext;
2235
2241
# endif
2242
+ # elif SANITIZER_FREEBSD
2243
+ # if defined(__x86_64__)
2244
+ Report (" Register values:\n " );
2245
+ Printf (" rax = 0x%016llx " , ucontext->uc_mcontext .mc_rax );
2246
+ Printf (" rbx = 0x%016llx " , ucontext->uc_mcontext .mc_rbx );
2247
+ Printf (" rcx = 0x%016llx " , ucontext->uc_mcontext .mc_rcx );
2248
+ Printf (" rdx = 0x%016llx " , ucontext->uc_mcontext .mc_rdx );
2249
+ Printf (" \n " );
2250
+ Printf (" rdi = 0x%016llx " , ucontext->uc_mcontext .mc_rdi );
2251
+ Printf (" rsi = 0x%016llx " , ucontext->uc_mcontext .mc_rsi );
2252
+ Printf (" rbp = 0x%016llx " , ucontext->uc_mcontext .mc_rbp );
2253
+ Printf (" rsp = 0x%016llx " , ucontext->uc_mcontext .mc_rsp );
2254
+ Printf (" \n " );
2255
+ Printf (" r8 = 0x%016llx " , ucontext->uc_mcontext .mc_r8 );
2256
+ Printf (" r9 = 0x%016llx " , ucontext->uc_mcontext .mc_r9 );
2257
+ Printf (" r10 = 0x%016llx " , ucontext->uc_mcontext .mc_r10 );
2258
+ Printf (" r11 = 0x%016llx " , ucontext->uc_mcontext .mc_r11 );
2259
+ Printf (" \n " );
2260
+ Printf (" r12 = 0x%016llx " , ucontext->uc_mcontext .mc_r12 );
2261
+ Printf (" r13 = 0x%016llx " , ucontext->uc_mcontext .mc_r13 );
2262
+ Printf (" r14 = 0x%016llx " , ucontext->uc_mcontext .mc_r14 );
2263
+ Printf (" r15 = 0x%016llx " , ucontext->uc_mcontext .mc_r15 );
2264
+ Printf (" \n " );
2265
+ # else
2236
2266
(void )ucontext;
2267
+ # endif
2237
2268
# endif
2238
2269
// FIXME: Implement this for other OSes and architectures.
2239
2270
}
0 commit comments