Team Ai
Datasetpublic

hschumann2/TempleOS-Source-Code

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes847downloads
ADbg.txt272 linesDownload Raw Back to Adam
1 2#help_index "Debugging/Dump"3Bool ClassRep2(CDoc *doc,U8 *_d,U8 *class_name=lastclass,4        I64 depth,I64 max_depth,Bool dynamic,I64 types=HTT_CLASS,I64 offset=0)5{//See ::/Demo/LastClass.HC.6  I64 i,j,stars,*ptr;7  CMemberLst *ml;8  CDocEntry *doc_e;9  Bool unlock;10  CHashClass *tmpc,*tmpc2;11  if (depth>=max_depth) return TRUE;12  if (!(tmpc=HashFind(class_name,Fs->hash_table,types))) {13    DocPrint(doc,"Class Not Found.\n");14    return FALSE;15  }16  if (!ChkPtr(_d) || !ChkPtr(_d(U8 *)+tmpc->size)) {17    DocPrint(doc,"Bad Ptr:%016X\n",_d);18    return FALSE;19  }20  if (tmpc->base_class && !ClassRep2(doc,_d,tmpc->base_class->str,21        depth,max_depth,dynamic,types,offset))22    return FALSE;23  unlock=DocLock(doc);24  DocPrint(doc,"Class:\"%s\"\n",class_name);25  ml=tmpc->member_lst_and_root;26  while (ml) {27    tmpc2=ml->member_class;28    ptr=_d(U8 *)+ml->offset;29    DocPrint(doc,"%08X ",ptr(U8 *)+offset);30    stars=tmpc2->ptr_stars_cnt;31    tmpc2=OptClassFwd(tmpc2);32    tmpc2-=tmpc2->ptr_stars_cnt;33    if (tmpc2->type & HTT_INTERNAL_TYPE) {34      DocPrint(doc,"$GREEN$%-20ts:$FG$",ml->str);35      if (stars==1 && (tmpc2->raw_type==RT_I8 || tmpc2->raw_type==RT_U8)) {36        ptr=*ptr;37        if (ChkPtr(ptr)) {38          if (dynamic) {39            doc_e=DocPrint(doc,"$DA-TRM-P+RD,LEN=64,A=\"%%40ts\"$\n");40            doc_e->data=ptr;41            DocDataFmt(doc,doc_e);42          } else43            DocPrint(doc,"%40ts\n",ptr);44        }45      } else if (!stars) {46        j=MinI64(ml->dim.total_cnt,32);47        if (tmpc2->raw_type==RT_I8 || tmpc2->raw_type==RT_U8) {48          if (j==1) {49            if (dynamic) {50              doc_e=DocPrint(doc,"$DA-TRM+RD+UD,RT=U8,A=\"%%c\"$\n");51              doc_e->data=ptr;52            } else53              DocPrint(doc,"%c\n",*ptr(U8 *));54          } else {55            if (dynamic) {56              doc_e=DocPrint(doc,"$DA-TRM-P+RD,LEN=64,A=\"%%40ts\"$\n");57              doc_e->data=ptr;58              DocDataFmt(doc,doc_e);59            } else60              DocPrint(doc,"%40ts\n",ptr);61          }62        }63        for (i=0;i<j;i++) {64          switch (tmpc2->raw_type) {65            case RT_I0:66            case RT_U0:67              break;68            case RT_I8:69              if (dynamic) {70                doc_e=DocPrint(doc,"$DA-TRM+RD+UD,RT=I8,A=\"%%02X\"$ ");71                doc_e->data=ptr(I8 *)++;72              } else73                DocPrint(doc,"%02X ",*ptr(I8 *)++);74              break;75            case RT_U8:76              if (dynamic) {77                doc_e=DocPrint(doc,"$DA-TRM+RD+UD,RT=U8,A=\"%%02X\"$ ");78                doc_e->data=ptr(U8 *)++;79              } else80                DocPrint(doc,"%02X ",*ptr(U8 *)++);81              break;82            case RT_I16:83              if (dynamic) {84                doc_e=DocPrint(doc,"$DA-TRM+RD+UD,RT=I16,A=\"%%04X\"$ ");85                doc_e->data=ptr(I16 *)++;86              } else87                DocPrint(doc,"%04X ",*ptr(I16 *)++);88              break;89            case RT_U16:90              if (dynamic) {91                doc_e=DocPrint(doc,"$DA-TRM+RD+UD,RT=U16,A=\"%%04X\"$ ");92                doc_e->data=ptr(U16 *)++;93              } else94                DocPrint(doc,"%04X ",*ptr(U16 *)++);95              break;96            case RT_I32:97              if (dynamic) {98                doc_e=DocPrint(doc,"$DA-TRM+RD+UD,RT=I32,A=\"%%08X\"$ ");99                doc_e->data=ptr(I32 *)++;100              } else101                DocPrint(doc,"%08X ",*ptr(I32 *)++);102              break;103            case RT_U32:104              if (dynamic) {105                doc_e=DocPrint(doc,"$DA-TRM+RD+UD,RT=U32,A=\"%%08X\"$ ");106                doc_e->data=ptr(U32 *)++;107              } else108                DocPrint(doc,"%08X ",*ptr(U32 *)++);109              break;110            case RT_U64:111              if (dynamic) {112                doc_e=DocPrint(doc,"$DA-TRM+RD+UD,RT=U64,A=\"%%08X\"$ ");113                doc_e->data=ptr(U64 *)++;114              } else115                DocPrint(doc,"%08X ",*ptr(U64 *)++);116              break;117            case RT_F64:118              if (dynamic) {119                doc_e=DocPrint(doc,"$DA-TRM+RD+UD,RT=F64,A=\"%%16g\"$ ");120                doc_e->data=ptr(F64 *)++;121              } else122                DocPrint(doc,"%16g ",*ptr(I64 *)++);123              break;124            default:125              if (dynamic) {126                doc_e=DocPrint(doc,"$DA-TRM+RD+UD,A=\"%%016X\"$ ");127                doc_e->data=ptr(I64 *)++;128              } else129                DocPrint(doc,"%016X ",*ptr(I64 *)++);130          }131          if (dynamic)132            DocDataFmt(doc,doc_e);133        }134        if (j<ml->dim.total_cnt)135          DocPrint(doc,"...");136      } else137        DocPrint(doc,"%016X",*ptr);138      DocPrint(doc,"\n");139    } else {140      if (depth<2) {141        if (stars==1 && !ChkPtr(*ptr))142          DocPrint(doc,"%-20ts:%016X\n",ml->str,*ptr);143        else {144          DocPrint(doc,"$TR,\"%s\"$\n",ml->str);145          DocPrint(doc,"$ID,2$");146          if (!stars)147            ClassRep2(doc,ptr,tmpc2->str,depth+1,max_depth,dynamic);148          else if (stars==1)149            ClassRep2(doc,*ptr,tmpc2->str,depth+1,max_depth,dynamic);150          DocPrint(doc,"$ID,-2$");151        }152      } else153        DocPrint(doc,"%-20ts\n",ml->str);154    }155    ml=ml->next;156  }157  if (unlock)158    DocUnlock(doc);159  return TRUE;160}161 162public U0 ClassRep(U8 *_d,U8 *class_name=lastclass,163        I64 max_depth=2,Bool fun=FALSE,I64 offset=0)164{//Displays members of a record by using the compiler's info.165  CDoc *doc;166  if (IsRaw)167    doc=DocNew;168  else {169    DocMax;170    doc=DocPut;171  }172  if (fun)173    ClassRep2(doc,_d,class_name,0,max_depth,FALSE,HTT_FUN,offset);174  else175    ClassRep2(doc,_d,class_name,0,max_depth,FALSE,HTT_CLASS,offset);176  DocPrint(doc,"\n");177  DocRecalc(doc);178  if (IsRaw) {179    DocDump(doc,100000);180    DocDel(doc);181  }182}183 184public U0 ClassRepD(U8 *_d,U8 *class_name=lastclass,185        I64 max_depth=2,Bool fun=FALSE,I64 offset=0)186{//Dynamic ClassRep. Uses hex_ed widgit for live changes.187  CDoc *doc;188  if (IsRaw)189    doc=DocNew;190  else {191    DocMax;192    doc=DocPut;193  }194  if (fun)195    ClassRep2(doc,_d,class_name,0,max_depth,TRUE,HTT_FUN,offset);196  else197    ClassRep2(doc,_d,class_name,0,max_depth,TRUE,HTT_CLASS,offset);198  DocPrint(doc,"\n");199  DocRecalc(doc);200  if (IsRaw) {201    DocDump(doc,100000);202    DocDel(doc);203  }204}205 206U0 UpdateRegVarImg(CHashFun *tmpf,U8 *_b,CTask *task)207{208  CMemberLst *ml;209  CHashClass *tmpc;210  ml=tmpf->member_lst_and_root;211  while (ml) {212    if (ml->reg!=REG_NONE) {213      tmpc=OptClassFwd(ml->member_class);214      MemCpy(_b+ml->offset,TaskRegAddr(task,ml->reg),tmpc->size);215    }216    ml=ml->next;217  }218}219 220public U0 FunRep(U8 *st,U8 *rbp=NULL,I64 max_depth=2,CTask *task=NULL)221{//Shows names and vals of a fun's local vars using compiler's info.222  I64 size;223  U8 *img;224  CHashFun *tmpf=HashFind(st,Fs->hash_table,HTT_FUN);225  CMemberLst *tmpm;226  if (tmpf) {227    if (rbp) {228      if (task) {229//tmpf->size is negative.  It's the bottom230        //of the fun local var space relative to RBP .231        size=tmpf->arg_cnt*8-tmpf->size+16;232 233        img=MAlloc(size);234        MemCpy(img,rbp+tmpf->size,size);235        UpdateRegVarImg(tmpf,img-tmpf->size,task);236        ClassRep(img-tmpf->size,st,max_depth,TRUE,rbp-img+tmpf->size);237        Free(img);238      } else239        ClassRep(rbp,st,max_depth,TRUE);240    } else {241      tmpm=tmpf->member_lst_and_root;242      while (tmpm) {243        if (0<=tmpm->reg<REG_REGS_NUM)244          "%08Z %s\n",tmpm->reg,"ST_U64_REGS",tmpm->str;245        else246          "%08tX %s\n",tmpm->offset,tmpm->str;247        tmpm=tmpm->next;248      }249      "%08tX Stk Size\n",tmpf->size;250    }251  }252}253 254#help_index "Debugging/Unassemble"255public U0 Uf(U8 *st)256{//Unassembles a named fun257  I64 i;258  CHashSrcSym *tmpf;259  CDbgInfo *dbg_info;260  if (tmpf=HashFind(st,Fs->hash_table,HTT_FUN|HTT_EXPORT_SYS_SYM)) {261    if (tmpf->type&HTT_FUN)262      FunRep(st);263    if (dbg_info=tmpf->dbg_info) {264      i=dbg_info->body[dbg_info->max_line+1-dbg_info->min_line]265            -dbg_info->body[0];266      Un(dbg_info->body[0],i);267      "Code Size:%04X\n",i;268    } else269      U(HashVal(tmpf));270  }271}272