# HG changeset patch # User kono # Date 1048015543 -32400 # Node ID fb502a0071f8b1ed3a63c5da449c0463f729d46f # Parent e09f9de6f5d348c4da2dc079e43da69fc50f0889 first binary run diff -r e09f9de6f5d3 -r fb502a0071f8 .gdbinit --- a/.gdbinit Wed Mar 19 02:22:33 2003 +0900 +++ b/.gdbinit Wed Mar 19 04:25:43 2003 +0900 @@ -1,16 +1,17 @@ tb main define regs -call fprintf(stderr,"eax=%08x ebx=%08x ecx=%08x edx=%08x\nesi=%08x edi=%08x ebp=%08x esp=%08x eip=%08x\n",$eax,$ebx,$ecx,$edx,$esi,$edi,$ebp,$esp,$eip) +printf "r0=%08x r1=%08x r2=%08x r3=%08x\n",$r0,$r1,$r2,$r3 +printf "lr=%08x pc=%08x r4=%08x r5=%08x\n",$lr,$pc,$r4,$r5 end define si stepi regs -x/1i $eip +x/1i $pc end define ni nexti regs -x/1i $eip +x/1i $pc end b errmsg -r -s test/basic.c +r -s mc-code-powerpc.c diff -r e09f9de6f5d3 -r fb502a0071f8 .gdbinit.ia32 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.gdbinit.ia32 Wed Mar 19 04:25:43 2003 +0900 @@ -0,0 +1,16 @@ +tb main +define regs +call fprintf(stderr,"eax=%08x ebx=%08x ecx=%08x edx=%08x\nesi=%08x edi=%08x ebp=%08x esp=%08x eip=%08x\n",$eax,$ebx,$ecx,$edx,$esi,$edi,$ebp,$esp,$eip) +end +define si +stepi +regs +x/1i $eip +end +define ni +nexti +regs +x/1i $eip +end +b errmsg +r -s mc-code-powerpc.c diff -r e09f9de6f5d3 -r fb502a0071f8 Changes --- a/Changes Wed Mar 19 02:22:33 2003 +0900 +++ b/Changes Wed Mar 19 04:25:43 2003 +0900 @@ -2315,5 +2315,9 @@ ませんでした。これも、どうすればいいんだ... まぁ、get_register_var するのが簡単だよね。 - save register が狂っているようだね。max_register_var あたり? + +Wed Mar 19 02:22:51 JST 2003 + +なんだか、struct のtag listが、int a,b,c; のようになっているのを +一つと数えているらしい。困ったものだ。 diff -r e09f9de6f5d3 -r fb502a0071f8 mc-code-powerpc.c --- a/mc-code-powerpc.c Wed Mar 19 02:22:33 2003 +0900 +++ b/mc-code-powerpc.c Wed Mar 19 04:25:43 2003 +0900 @@ -388,7 +388,7 @@ emit_init(void) { free_all_register(); - max_reg_var=0; max_freg_var=0; + max_reg_var=-1; max_freg_var=-1; reg_sp = 0; text_mode(); } @@ -1569,6 +1569,7 @@ } static int code_setup; +static int func_disp_label; void enter(char *name) @@ -1588,6 +1589,8 @@ printf("\tbl L_%d\n",code_setup); code_base=fwdlabel(); lvar_offset = fwdlabel(); + func_disp_label = fwdlabel(); + printf("\tstwu r1,lo16(L_%d)(r1)\n",func_disp_label); printf("\tmr r30,r1\n"); printf("\tmflr r31\n"); } @@ -1603,7 +1606,7 @@ reg_save_offset() { return -( - (REAL_MAX_REGISTER-(REG_VAR_BASE-max_reg_var))*size_of_int+ + (REAL_MAX_REGISTER-(REG_VAR_BASE-max_reg_var))*size_of_int*2+ (REAL_MAX_FREGISTER-(FREG_VAR_BASE-max_freg_var))*size_of_double ); } @@ -1617,9 +1620,8 @@ if (retcont) fwddef(retcont); fwddef(retlabel); printf("\tlwz r1,0(r1)\n"); - if (max_freg_var>0) { - if (max_reg_var>0) - printf("\tlmw r%d,%d(r1)\n", + if (max_freg_var>=0) { + printf("\tlmw r%d,%d(r1)\n", REG_VAR_BASE-max_reg_var,reg_save_offset()); printf("\tb restFP+%d ; restore f%d-f31\n", 68-(31-FREG_VAR_BASE-max_freg_var)*4, @@ -1627,26 +1629,26 @@ } else { printf("\tlwz r0,8(r1)\n"); printf("\tmtlr r0\n"); - if (max_reg_var>0) - printf("\tlmw r%d,%d(r1)\n", - REG_VAR_BASE-max_reg_var,reg_save_offset()); + printf("\tlmw r%d,%d(r1)\n", + REG_VAR_BASE-max_reg_var,reg_save_offset()); printf("\tblr\n"); } disp &= -size_of_int; fwddef(code_setup); fwddef(code_base); - if (max_reg_var>0) - printf("\tstmw r%d,%d(r1)\n", - REG_VAR_BASE-max_reg_var,reg_save_offset()); - printf("\tstwu r1,%d(r1)\n",disp+disp_offset+reg_save_offset()); - if (max_freg_var>0) + printf("\tstmw r%d,%d(r1)\n", + REG_VAR_BASE-max_reg_var,reg_save_offset()); + printf("\tstw r0,8(r1)\n"); + if (max_freg_var>=0) printf("\tb saveFP+%d ; save f%d-f31\n", 68-(31-FREG_VAR_BASE-max_freg_var)*4, FREG_VAR_BASE-max_freg_var); - else + else { printf("\tblr\n"); + } + printf(".set L_%d,%d\n",func_disp_label,disp+disp_offset+reg_save_offset()); printf(".set L_%d,%d\n",lvar_offset, arg_offset+disp+disp_offset+reg_save_offset()); /* diff -r e09f9de6f5d3 -r fb502a0071f8 mc.h --- a/mc.h Wed Mar 19 02:22:33 2003 +0900 +++ b/mc.h Wed Mar 19 04:25:43 2003 +0900 @@ -253,9 +253,15 @@ EXTERN FILE *obuf; +#if 0 typedef struct nametable { char *nm; int sc,ty,dsp; } NMTBL; +#else +typedef struct nametable { + char *nm; + int sc; int ty; int dsp; } NMTBL; +#endif EXTERN NMTBL mtable[MSYMS]; EXTERN NMTBL ntable[GSYMS+LSYMS];