diff options
author | nrootconauto <nrootconauto@gmail.com> | 2022-07-03 09:37:42 -0400 |
---|---|---|
committer | nrootconauto <nrootconauto@gmail.com> | 2022-07-03 09:37:42 -0400 |
commit | e5c325c02e355f32fa172e7f0a15f69928bea759 (patch) | |
tree | 2eaadccca2479fe1e5c38fcaeaeeefa96289f615 | |
parent | 1d531ce3f54aada2e2b8212cf432ba37d4c4819e (diff) |
Added Man,and Uf. Updated debug info to include information about vairable layout.
Signed-off-by: nrootconauto <nrootconauto@gmail.com>
-rw-r--r-- | HCRT.BIN | bin | 758880 -> 760880 bytes | |||
-rw-r--r-- | T/ADBG.HC | 40 | ||||
-rw-r--r-- | T/CHASH.HC | 59 | ||||
-rw-r--r-- | T/FUNSEG.HC | 20 | ||||
-rw-r--r-- | T/HCRT.DBG.Z | bin | 152829 -> 197940 bytes | |||
-rw-r--r-- | T/HCRT_TOS.HC | 1 | ||||
-rw-r--r-- | T/KERNELA.HH | 6 | ||||
-rw-r--r-- | T/Registry.HC.Z | bin | 114 -> 140 bytes |
8 files changed, 109 insertions, 17 deletions
Binary files differ diff --git a/T/ADBG.HC b/T/ADBG.HC new file mode 100644 index 0000000..71a1eda --- /dev/null +++ b/T/ADBG.HC @@ -0,0 +1,40 @@ +public U0 FunRep(U8 *st,U8 *rbp=NULL,I64 max_depth=2,CTask *task=NULL) +{//Shows names and vals of a fun's local vars using compiler's info. + I64 size; + U8 *img; + CHashFun *tmpf=HashFind(st,Fs->hash_table,HTT_FUN); + CMemberLst *tmpm; + if (tmpf) { + if(1) { + tmpm=tmpf->member_lst_and_root; + while (tmpm) { + if (0<=tmpm->reg<REG_REGS_NUM) + "%08Z %s\n",tmpm->reg,"ST_U64_REGS",tmpm->str; + else + "%08tX %s\n",tmpm->offset,tmpm->str; + tmpm=tmpm->next; + } + "%08tX Stk Size\n",tmpf->size; + } + } +} + +#help_index "Debugging/Unassemble" +public U0 Uf(U8 *st) +{//Unassembles a named fun + I64 i; + CHashSrcSym *tmpf; + CDbgInfo *dbg_info; + if (tmpf=HashFind(st,Fs->hash_table,HTT_FUN|HTT_EXPORT_SYS_SYM)) { + if (tmpf->type&HTT_FUN) + FunRep(st); + if (dbg_info=tmpf->dbg_info) { + i=dbg_info->body[dbg_info->max_line+1-dbg_info->min_line] + -dbg_info->body[0]; + Un(dbg_info->body[0],i); + "Code Size:%04X\n",i; + } else + U(HashVal(tmpf)); + } +} +#help_index "" @@ -286,6 +286,12 @@ I64 FramePtrDel(U8 *name,CTask *t=NULL) * FUNC_HELP_IDX(U8[]) * U32 s,e; * U32 line_offsets[] + * U32 stk_size + * U32 var_cnt + * VAR_NAME(U8[]) + * Bool is_reg + * U32 reg/offset + * * if(HTT_HELP_FILE) * POINTS_TO_FILE(U8[]) * HELP_IDX(U8[]) @@ -294,8 +300,9 @@ I64 FramePtrDel(U8 *name,CTask *t=NULL) I64 __DbgInfoWrite(CHashTable *h,U8 *to) { I64 i,ln,size,min,max; CHashSrcSym *tmph; + CMemberLst *fun_mem; CDbgInfo *dbg_info; - U32 start_ptr; + U32 start_ptr,cnt; U8 *src_link,buffer[1024],*bptr=&buffer; for (i=0;i<=h->mask;i++) { for(tmph=h->body[i];tmph;tmph=tmph->next) @@ -327,6 +334,29 @@ I64 __DbgInfoWrite(CHashTable *h,U8 *to) { if(to) (to+size)(U32*)[0]=dbg_info->body[ln]-start_ptr; size+=4; } + if(to) (to+size)(U32*)[0]=tmph(CHashFun*)->size; + size+=4; + fun_mem=tmph(CHashFun*)->member_lst_and_root; + for(cnt=0;fun_mem;fun_mem=fun_mem->next) + cnt++; + if(to) (to+size)(U32*)[0]=cnt; + size+=4; + fun_mem=tmph(CHashFun*)->member_lst_and_root; + for(;fun_mem;fun_mem=fun_mem->next) { + if(to) StrCpy(to+size,fun_mem->str); + size+=StrLen(fun_mem->str)+1; + if(0<=fun_mem->reg<REG_REGS_NUM) { + if(to) (to+size)(U8*)[0]=TRUE; + size++; + if(to) (to+size)(U32*)[0]=fun_mem->reg; + size+=4; + } else { + if(to) (to+size)(U8*)[0]=FALSE; + size++; + if(to) (to+size)(U32*)[0]=fun_mem->offset; + size+=4; + } + } } } else if(tmph->type&HTT_HELP_FILE){ if(to) (to+size)(I64*)[0]=HTT_HELP_FILE; @@ -349,6 +379,7 @@ U0 DbgInfoWrite(CHashTable *h,U8 *name) { U0 DbgInfoRead(U8 *name) { I64 len,min,max,ln,type; CHashSrcSym *tmph; + CMemberLst *tmpm=NULL,*tmpm2=NULL; CDbgInfo *dbg_info; U8 *body=FileRead(name,&len),*ptr=body,*fn,*idx; while(ptr<body+len) { @@ -381,6 +412,32 @@ U0 DbgInfoRead(U8 *name) { } } ptr+=sizeof(U32)*(max-min+1+1); + if(tmph) tmph(CHashFun*)->size=ptr(U32*)[0]; + ptr+=sizeof(U32); + max=ptr(U32*)[0]; + ptr+=sizeof(U32); + for(min=0;min!=max;min++) { + tmpm2=tmpm; + if(tmph) tmpm=MAlloc(sizeof(CMemberLst)); + if(tmpm2) tmpm2->next=tmpm; + tmpm2=tmpm; + if(tmph) tmpm->str=StrNew(ptr); + ptr+=StrLen(ptr)+1; + if(*ptr++) { + if(tmph) tmpm->reg=ptr(U32*)[0]; + } else { + if(tmph) tmpm->offset=ptr(I32*)[0]; + } + ptr+=4; + } + if(tmph) { + tmpm=tmph(CHashFun*)->member_lst_and_root; + for(;tmpm&&tmpm->next;tmpm=tmpm->next); + if(tmpm) + tmpm->next=tmpm2; + else + tmph(CHashFun*)->member_lst_and_root=tmpm2; + } } else if(type&HTT_HELP_FILE) { tmph=MAlloc(sizeof(CHashSrcSym)); tmph->type=HTF_PUBLIC|HTT_HELP_FILE; diff --git a/T/FUNSEG.HC b/T/FUNSEG.HC index dcf811b..d962f4c 100644 --- a/T/FUNSEG.HC +++ b/T/FUNSEG.HC @@ -245,7 +245,6 @@ U8 *SrcEdLink(U8 *addr,I64 cnt=1,CTask *mt=NULL) } return NULL; } -/* Bool PutSrcLink(U8 *addr,I64 cnt=1,U8 *buf=NULL) {//Put to StdOut a \dLK,"DolDoc",A="FI:::/Doc/DolDocOverview.DD"\d file,line link to src of addr. U8 *src; @@ -260,17 +259,12 @@ Bool PutSrcLink(U8 *addr,I64 cnt=1,U8 *buf=NULL) *buf=0; return FALSE; } -*/ -/* Bool E(U8 *addr,I64 cnt=512,I64 edf_dof_flags=0) {//Edit src at addr. U8 *st; Bool res=FALSE; if (st=SrcEdLink(addr,cnt)) { - if (IsRaw) - res=EdLiteFileLine(st,edf_dof_flags); - else - res=Ed(st,edf_dof_flags); + res=Ed(st,edf_dof_flags); Free(st); } return res; @@ -281,14 +275,8 @@ Bool Man(U8 *st,I64 edf_dof_flags=0) Bool res=FALSE; U8 **st2; CHashSrcSym *tmph; - if (IsRaw) { - if ((tmph=HashFind(st,Fs->hash_table,HTG_SRC_SYM)) && tmph->src_link) - res=EdLiteFileLine(tmph->src_link,edf_dof_flags); - } else { - st2=MStrPrint("MN:%s",st); - res=Ed(st2,edf_dof_flags); - Free(st2); - } + st2=MStrPrint("MN:%s",st); + res=Ed(st2,edf_dof_flags); + Free(st2); return res; } -*/ diff --git a/T/HCRT.DBG.Z b/T/HCRT.DBG.Z Binary files differindex d810d81..6a8400f 100644 --- a/T/HCRT.DBG.Z +++ b/T/HCRT.DBG.Z diff --git a/T/HCRT_TOS.HC b/T/HCRT_TOS.HC index 412a412..9e2d217 100644 --- a/T/HCRT_TOS.HC +++ b/T/HCRT_TOS.HC @@ -149,5 +149,6 @@ U8 *MAllocIdent(U8 *s,CTask *t=0) { #include "ARegistry.HC" #include "AHash.HC" #include "ADskB.HC" +#include "ADBG.HC" ///#include "Training.HC"; #endif diff --git a/T/KERNELA.HH b/T/KERNELA.HH index 9b21632..3a046aa 100644 --- a/T/KERNELA.HH +++ b/T/KERNELA.HH @@ -5909,3 +5909,9 @@ public extern Bool WildMatch(U8 *test_str,U8 *wild_str); #define RIGHT_PLAIN 8 #define RIGHT_INFILE 9 public CTask *Noise(I64 mS,F64 min_ona,F64 max_ona); +extern Bool Man(U8 *st,I64 edf_dof_flags=0); +extern Bool E(U8 *addr,I64 cnt=512,I64 edf_dof_flags=0); +extern Bool PutSrcLink(U8 *addr,I64 cnt=1,U8 *buf=NULL); +extern U8 *U(U8 *rip,I64 cnt=20,I64 seg_size=64); +public U0 Uf(U8 *st); +public U0 FunRep(U8 *st,U8 *rbp=NULL,I64 max_depth=2,CTask *task=NULL); diff --git a/T/Registry.HC.Z b/T/Registry.HC.Z Binary files differindex 9643502..6017654 100644 --- a/T/Registry.HC.Z +++ b/T/Registry.HC.Z |