Changeset 10100


Ignore:
Timestamp:
Jul 18, 2008, 7:47:31 PM (11 years ago)
Author:
rme
Message:

Additions for Darwin/x8632.

File:
1 edited

Legend:

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

    r10021 r10100  
    147147#endif
    148148
     149#ifdef X8632
     150#ifdef DARWIN
     151char *Iregnames[] = {"eax", "ebx", "ecx", "edx", "edi", "esi",
     152                     "ebp", "???", "efl", "eip"};
     153#endif
     154#endif
     155
     156#ifdef X8632
     157int bit_for_regnum(int r)
     158{
     159  switch (r) {
     160  case REG_EAX: return 1<<0;
     161  case REG_ECX: return 1<<1;
     162  case REG_EDX: return 1<<2;
     163  case REG_EBX: return 1<<3;
     164  case REG_ESP: return 1<<4;
     165  case REG_EBP: return 1<<5;
     166  case REG_ESI: return 1<<6;
     167  case REG_EDI: return 1<<7;
     168  }
     169}
     170#endif
     171
    149172void
    150173show_lisp_register(ExceptionInformation *xp, char *label, int r)
     
    156179  fprintf(stderr, "r%02d (%s) = %s\n", r, label, print_lisp_object(val));
    157180#endif
    158 #ifdef X86
     181#ifdef X8664
    159182  fprintf(stderr, "%%%s (%s) = %s\n",Iregnames[r], label, print_lisp_object(val));
     183#endif
     184#ifdef X8632
     185  {
     186    TCR *tcr = get_tcr(false);
     187    char *s;
     188
     189    if (tcr && (tcr->node_regs_mask & bit_for_regnum(r)) == 0)
     190      s = "marked as unboxed";
     191    else
     192      s = print_lisp_object(val);
     193
     194    fprintf(stderr, "%%%s (%s) = %s\n", Iregnames[r], label, s);
     195  }
    160196#endif
    161197
     
    432468#endif
    433469  }
     470
     471#ifdef X8632
     472  show_lisp_register(xp, "arg_z", Iarg_z);
     473  show_lisp_register(xp, "arg_y", Iarg_y);
     474  fprintf(stderr,"------\n");
     475  show_lisp_register(xp, "fn", Ifn);
     476  fprintf(stderr,"------\n");
     477  show_lisp_register(xp, "temp0", Itemp0);
     478  show_lisp_register(xp, "temp1", Itemp1);
     479  fprintf(stderr,"------\n");
     480  if (tag_of(xpGPR(xp,Inargs)) == tag_fixnum) {
     481    fprintf(stderr,"%%edx (nargs) = %d (maybe)\n", unbox_fixnum(xpGPR(xp,Inargs)));
     482  }
     483#endif
     484 
    434485  return debug_continue;
    435486}
     
    630681          xpGPR(xp, Iip), xpGPR(xp, Iflags));
    631682#endif
     683
     684#ifdef X8632
     685  fprintf(stderr, "%%eax = 0x%08X\n", xpGPR(xp, REG_EAX));
     686  fprintf(stderr, "%%ecx = 0x%08X\n", xpGPR(xp, REG_ECX));
     687  fprintf(stderr, "%%edx = 0x%08X\n", xpGPR(xp, REG_EDX));
     688  fprintf(stderr, "%%ebx = 0x%08X\n", xpGPR(xp, REG_EBX));
     689  fprintf(stderr, "%%esp = 0x%08X\n", xpGPR(xp, REG_ESP));
     690  fprintf(stderr, "%%ebp = 0x%08X\n", xpGPR(xp, REG_EBP));
     691  fprintf(stderr, "%%esi = 0x%08X\n", xpGPR(xp, REG_ESI));
     692  fprintf(stderr, "%%edi = 0x%08X\n", xpGPR(xp, REG_EDI));
     693  fprintf(stderr, "%%eip = 0x%08X\n", xpGPR(xp, REG_EIP));
     694  fprintf(stderr, "%%eflags = 0x%08X\n", xpGPR(xp, REG_EFL));
     695#endif
     696
    632697  return debug_continue;
    633698}
     
    696761          );
    697762#endif 
     763#ifdef X8632
     764#ifdef DARWIN
     765  struct xmm {
     766    char fpdata[8];
     767  };
     768  struct xmm *xmmp = (struct xmm *)(xpFPRvector(xp));
     769
     770  for (i = 0; i < 8; i++, xmmp++) {
     771    float *sp = (float *)xmmp;
     772    dp = (double *)xmmp;
     773    np = (int *)xmmp;
     774    fprintf(stderr, "f%1d: 0x%08x (%e), 0x%08x%08x (%e)\n", i, *np,
     775            (double)(*sp), np[1], np[0], *dp);
     776  }
     777  fprintf(stderr, "mxcsr = 0x%08x\n", UC_MCONTEXT(xp)->__fs.__fpu_mxcsr);
     778#endif
     779#endif
     780
    698781  return debug_continue;
    699782}
     
    9421025    abort();
    9431026  }
     1027#ifdef DARWIN
     1028#ifdef X8664
     1029  if (xp) {
     1030    extern void *_sigtramp();
     1031    extern int os_major_version;
     1032
     1033    if (xpPC(xp) == (natural)_sigtramp) {
     1034      xp = (ExceptionInformation *) xpGPR(xp, REG_R8);
     1035      fprintf(stderr, "Exception raised at _sigtramp; using context passed to _sigtramp.  Raw register values (R) may be more interesting then lisp values or lisp backtrace\n");
     1036    }
     1037  }
     1038#endif
     1039#endif
     1040
     1041
    9441042  if (xp) {
    9451043    if (why > debug_entry_exception) {
Note: See TracChangeset for help on using the changeset viewer.