Changeset 6521


Ignore:
Timestamp:
May 9, 2007, 8:49:34 AM (15 years ago)
Author:
gb
Message:

New tra handling.

File:
1 edited

Legend:

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

    r4581 r6521  
    2727print_lisp_frame(lisp_frame *frame)
    2828{
    29   LispObj pc = frame->tra, fun;
     29  LispObj pc = frame->tra, fun=0;
    3030  int delta = 0;
    3131
     
    3434  }
    3535  if (tag_of(pc) == tag_tra) {
    36     fun = pc - (((unsigned *)pc)[-1]);
     36    if ((*((unsigned short *)pc) == RECOVER_FN_FROM_RIP_WORD0) &&
     37        (*((unsigned char *)(pc+2)) == RECOVER_FN_FROM_RIP_BYTE2)) {
     38      int sdisp = (*(int *) (pc+3));
     39      fun = RECOVER_FN_FROM_RIP_LENGTH+pc+sdisp;
     40    }
    3741    if (fulltag_of(fun) == fulltag_function) {
    3842      delta = pc - fun;
     
    5357  LispObj fun, ra;
    5458  unsigned offset;
     59  int sdisp;
    5560
    5661  if (f) {
     
    5964      ra = f->xtra;
    6065    }
     66
    6167    if (tag_of(ra) == tag_tra) {
    62       offset = (((unsigned *)ra)[-1]);
    63       if (offset == 0) {
    64         return true;
    65       } else {
    66         fun = ra - (((unsigned *)ra)[-1]);
    67         if (fulltag_of(fun) == fulltag_function) {
    68           return true;
    69         }
     68      if ((*((unsigned short *)ra) == RECOVER_FN_FROM_RIP_WORD0) &&
     69          (*((unsigned char *)(ra+2)) == RECOVER_FN_FROM_RIP_BYTE2)) {
     70        sdisp = (*(int *) (ra+3));
     71        fun = RECOVER_FN_FROM_RIP_LENGTH+ra+sdisp;
     72      }
     73      if (fulltag_of(fun) == fulltag_function) {
     74        return true;
    7075      }
    7176    } else if ((ra == lisp_global(LEXPR_RETURN)) ||
Note: See TracChangeset for help on using the changeset viewer.