Raymond Toy pushed to branch issue-97-define-ud2-inst at cmucl / cmucl

Commits:

3 changed files:

Changes:

  • src/code/debug-int.lisp
    ... ... @@ -4477,6 +4477,9 @@ The result is a symbol or nil if the routine cannot be found."
    4477 4477
     ;;;
    
    4478 4478
     (defun handle-breakpoint (offset component signal-context)
    
    4479 4479
       (let ((data (breakpoint-data component offset nil)))
    
    4480
    +    (format t "(handle-breakpoint ~A ~A ~A)~%"
    
    4481
    +	    offset component signal-context)
    
    4482
    +    (format t "  data = ~A~%" data)
    
    4480 4483
         (unless data
    
    4481 4484
           (error (intl:gettext "Unknown breakpoint in ~S at offset ~S.")
    
    4482 4485
     	      (debug-function-name (debug-function-from-pc component offset))
    

  • src/lisp/breakpoint.c
    ... ... @@ -192,6 +192,8 @@ compute_offset(os_context_t * scp, lispobj code, boolean function_end)
    192 192
     static int
    
    193 193
     compute_offset(os_context_t * scp, lispobj code, boolean function_end)
    
    194 194
     {
    
    195
    +    fprintf(stderr, "compute_offset: code = 0x%lx\n", code);
    
    196
    +    
    
    195 197
         if (code == NIL)
    
    196 198
     	return 0;
    
    197 199
         else {
    
    ... ... @@ -206,11 +208,18 @@ compute_offset(os_context_t * scp, lispobj code, boolean function_end)
    206 208
     
    
    207 209
     	code_start = (unsigned long) codeptr
    
    208 210
     	    + HeaderValue(codeptr->header) * sizeof(lispobj);
    
    211
    +
    
    212
    +        fprintf(stderr, "compute_offset: pc = 0x%lx, code_start = 0x%lx\n",
    
    213
    +                pc, code_start);
    
    214
    +        
    
    209 215
     	if (pc < code_start)
    
    210 216
     	    return 0;
    
    211 217
     	else {
    
    212 218
     	    int offset = pc - code_start;
    
    213 219
     
    
    220
    +            fprintf(stderr, "compute_offset: offset %d, size = %ld\n",
    
    221
    +                    offset, codeptr->code_size);
    
    222
    +            
    
    214 223
     	    if (offset >= codeptr->code_size) {
    
    215 224
                     return 0;
    
    216 225
     	    } else {
    
    ... ... @@ -250,6 +259,11 @@ handle_breakpoint(int signal, int subcode, os_context_t * scp)
    250 259
     
    
    251 260
         code = find_code(scp);
    
    252 261
     
    
    262
    +#if 1
    
    263
    +    fprintf(stderr, "handle_breakpoint\n");
    
    264
    +    fprintf(stderr, " offset = %d\n", compute_offset(scp, code, 0));
    
    265
    +#endif    
    
    266
    +
    
    253 267
         /*
    
    254 268
          * Don't disallow recursive breakpoint traps.  Otherwise, we can't
    
    255 269
          * use debugger breakpoints anywhere in here.
    

  • src/lisp/x86-arch.c
    ... ... @@ -209,6 +209,9 @@ arch_install_breakpoint(void *pc)
    209 209
         char* ptr = (char *) pc;
    
    210 210
         unsigned long result = *(unsigned long *) pc;
    
    211 211
     
    
    212
    +    fprintf(stderr, "arch_install_breakpoint at %p, old code = 0x%lx\n",
    
    213
    +            pc, result);
    
    214
    +    
    
    212 215
     #if 0
    
    213 216
         *(char *) pc = BREAKPOINT_INST;	/* x86 INT3       */
    
    214 217
         *((char *) pc + 1) = trap_Breakpoint;	/* Lisp trap code */
    
    ... ... @@ -216,8 +219,6 @@ arch_install_breakpoint(void *pc)
    216 219
         *ptr++ = 0x0f;              /* UD2 */
    
    217 220
         *ptr++ = 0x0b;
    
    218 221
         *ptr++ = trap_Breakpoint;   /* Lisp trap code */
    
    219
    -    *ptr++ = 1;                 /* Vector length */
    
    220
    -    *ptr++ = 0;                 /* Junk data */
    
    221 222
     #endif
    
    222 223
     
    
    223 224
         return result;
    
    ... ... @@ -300,7 +301,7 @@ sigill_handler(HANDLER_ARGS)
    300 301
     {
    
    301 302
         unsigned int trap;
    
    302 303
         os_context_t* os_context = (os_context_t *) context;
    
    303
    -#if 0
    
    304
    +#if 1
    
    304 305
     #if 0
    
    305 306
         fprintf(stderr, "x86sigtrap: %8x %x\n",
    
    306 307
                 SC_PC(os_os_context), *(unsigned char *) (SC_PC(os_context) - 1));
    
    ... ... @@ -374,7 +375,7 @@ sigill_handler(HANDLER_ARGS)
    374 375
          * arguments to follow.
    
    375 376
          */
    
    376 377
     
    
    377
    -#if 0
    
    378
    +#if 1
    
    378 379
         fprintf(stderr, "pc %x\n",  *(unsigned short *)SC_PC(context));
    
    379 380
     #endif    
    
    380 381
         if (*(unsigned short *) SC_PC(context) == 0x0b0f) {
    
    ... ... @@ -383,7 +384,7 @@ sigill_handler(HANDLER_ARGS)
    383 384
             abort();
    
    384 385
         }
    
    385 386
     
    
    386
    -#if 0
    
    387
    +#if 1
    
    387 388
         fprintf(stderr, "code = %x\n", trap);
    
    388 389
     #endif
    
    389 390
     
    
    ... ... @@ -415,19 +416,23 @@ sigill_handler(HANDLER_ARGS)
    415 416
     	  break;
    
    416 417
     
    
    417 418
           case trap_Breakpoint:
    
    418
    -#if 0
    
    419
    +#if 1
    
    419 420
     	  fprintf(stderr, "*C break\n");
    
    420 421
     #endif
    
    422
    +#if 0
    
    421 423
     	  SC_PC(os_context) -= 1;
    
    424
    +#endif          
    
    422 425
     
    
    423 426
     	  handle_breakpoint(signal, CODE(code), os_context);
    
    424
    -#if 0
    
    427
    +#if 1
    
    425 428
     	  fprintf(stderr, "*C break return\n");
    
    426 429
     #endif
    
    427 430
     	  break;
    
    428 431
     
    
    429 432
           case trap_FunctionEndBreakpoint:
    
    433
    +#if 0
    
    430 434
     	  SC_PC(os_context) -= 1;
    
    435
    +#endif          
    
    431 436
     	  SC_PC(os_context) =
    
    432 437
     	      (int) handle_function_end_breakpoint(signal, CODE(code), os_context);
    
    433 438
     	  break;