Raymond Toy pushed to branch master at cmucl / cmucl
Commits:
-
6b8df49b
by Raymond Toy at 2024-08-22T14:18:22+00:00
-
02430975
by Raymond Toy at 2024-08-22T14:18:49+00:00
1 changed file:
Changes:
| ... | ... | @@ -29,7 +29,13 @@ |
| 29 | 29 | * included here.
|
| 30 | 30 | */
|
| 31 | 31 | static const unsigned char ud1[] = {0x0f, 0xb9};
|
| 32 | -
|
|
| 32 | + |
|
| 33 | +/*
|
|
| 34 | + * Extract the error trap code from the UD1 instruction. BYTE must be
|
|
| 35 | + * the 3rd byte of the UD1 instruction that represents the mod r/m
|
|
| 36 | + * byte.
|
|
| 37 | + */
|
|
| 38 | +#define UD1_CODE(modrm) ((modrm) & 0x3f)
|
|
| 33 | 39 | |
| 34 | 40 | /*
|
| 35 | 41 | * Set to positive value to enabled debug prints related to the sigill
|
| ... | ... | @@ -161,7 +167,8 @@ arch_skip_instruction(os_context_t * context) |
| 161 | 167 | */
|
| 162 | 168 | pc += sizeof(ud1);
|
| 163 | 169 | |
| 164 | - code = *pc++;
|
|
| 170 | + code = UD1_CODE(*pc++);
|
|
| 171 | + |
|
| 165 | 172 | SC_PC(context) = (unsigned long) pc;
|
| 166 | 173 | |
| 167 | 174 | switch (code) {
|
| ... | ... | @@ -187,7 +194,7 @@ arch_skip_instruction(os_context_t * context) |
| 187 | 194 | break;
|
| 188 | 195 | |
| 189 | 196 | default:
|
| 190 | - fprintf(stderr, "[arch_skip_inst invalid code %d\n]\n", code);
|
|
| 197 | + fprintf(stderr, "[arch_skip_inst invalid code 0x%x\n]\n", code);
|
|
| 191 | 198 | break;
|
| 192 | 199 | }
|
| 193 | 200 | |
| ... | ... | @@ -387,7 +394,7 @@ sigill_handler(HANDLER_ARGS) |
| 387 | 394 | * number is placed in the low 6-bits of the 3rd byte of the
|
| 388 | 395 | * instruction.
|
| 389 | 396 | */
|
| 390 | - trap = *(((char *)SC_PC(context)) + 2) & 0x3f;
|
|
| 397 | + trap = UD1_CODE(*(((char *)SC_PC(context)) + sizeof(ud1)));
|
|
| 391 | 398 | |
| 392 | 399 | DPRINTF(debug_handlers, (stderr, "code = %x\n", trap));
|
| 393 | 400 |