Changeset 9902


Ignore:
Timestamp:
Jul 6, 2008, 8:59:14 AM (11 years ago)
Author:
gb
Message:

If the arg to plbt_sp() is outside of the lisp stack area (as it often
is when a foreign exception caused entry to kernel debugger), try
to use tcr->save_rbp instead (so that we can at least see lisp backtrace
up to the point of an ff-call.)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/lisp-kernel/xlbt.c

    r6910 r9902  
    1818#include <stdio.h>
    1919
    20 const char *
    21 foreign_name_and_offset(void *frame, unsigned *delta)
    22 {
    23 }
    2420
    2521
     
    5551lisp_frame_p(lisp_frame *f)
    5652{
    57   LispObj fun, ra;
    58   unsigned offset;
    59   int sdisp;
     53  LispObj ra;
    6054
    6155  if (f) {
     
    6660
    6761    if (tag_of(ra) == tag_tra) {
    68 #if 0
    69       if ((*((unsigned short *)ra) == RECOVER_FN_FROM_RIP_WORD0) &&
    70           (*((unsigned char *)(ra+2)) == RECOVER_FN_FROM_RIP_BYTE2)) {
    71         sdisp = (*(int *) (ra+3));
    72         fun = RECOVER_FN_FROM_RIP_LENGTH+ra+sdisp;
    73       }
    74       if (fulltag_of(fun) == fulltag_function) {
    75         return true;
    76       }
    77 #endif
    7862      return true;
    7963    } else if ((ra == lisp_global(LEXPR_RETURN)) ||
     
    142126    if ((((LispObj) ptr_to_lispobj(vs_area->low)) > currentRBP) ||
    143127        (((LispObj) ptr_to_lispobj(vs_area->high)) < currentRBP)) {
     128      currentRBP = (LispObj) (tcr->save_rbp);
     129    }
     130    if ((((LispObj) ptr_to_lispobj(vs_area->low)) > currentRBP) ||
     131        (((LispObj) ptr_to_lispobj(vs_area->high)) < currentRBP)) {
    144132      Dprintf("\nFramepointer [#x%lX] in unknown area.", currentRBP);
    145133    } else {
Note: See TracChangeset for help on using the changeset viewer.