summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornrootconauto <nrootconauto@gmail.com>2022-07-03 09:37:42 -0400
committernrootconauto <nrootconauto@gmail.com>2022-07-03 09:37:42 -0400
commite5c325c02e355f32fa172e7f0a15f69928bea759 (patch)
tree2eaadccca2479fe1e5c38fcaeaeeefa96289f615
parent1d531ce3f54aada2e2b8212cf432ba37d4c4819e (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.BINbin758880 -> 760880 bytes
-rw-r--r--T/ADBG.HC40
-rw-r--r--T/CHASH.HC59
-rw-r--r--T/FUNSEG.HC20
-rw-r--r--T/HCRT.DBG.Zbin152829 -> 197940 bytes
-rw-r--r--T/HCRT_TOS.HC1
-rw-r--r--T/KERNELA.HH6
-rw-r--r--T/Registry.HC.Zbin114 -> 140 bytes
8 files changed, 109 insertions, 17 deletions
diff --git a/HCRT.BIN b/HCRT.BIN
index 2788c16..f910866 100644
--- a/HCRT.BIN
+++ b/HCRT.BIN
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 ""
diff --git a/T/CHASH.HC b/T/CHASH.HC
index 0dce659..79d7de5 100644
--- a/T/CHASH.HC
+++ b/T/CHASH.HC
@@ -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
index d810d81..6a8400f 100644
--- a/T/HCRT.DBG.Z
+++ b/T/HCRT.DBG.Z
Binary files differ
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
index 9643502..6017654 100644
--- a/T/Registry.HC.Z
+++ b/T/Registry.HC.Z
Binary files differ