diff options
| author | forsyth <forsyth@vitanuova.com> | 2010-04-27 13:33:26 +0100 |
|---|---|---|
| committer | forsyth <forsyth@vitanuova.com> | 2010-04-27 13:33:26 +0100 |
| commit | 647adfbc462388549008eda6af62f2e74b260d63 (patch) | |
| tree | 4bacc33214dc2ec331d2d49243ea995000337bbc /utils/ql/obj.c | |
| parent | fb27fba1aefc0e561bc26b89d2fec334efac2293 (diff) | |
20100427-1333
Diffstat (limited to 'utils/ql/obj.c')
| -rw-r--r-- | utils/ql/obj.c | 53 |
1 files changed, 44 insertions, 9 deletions
diff --git a/utils/ql/obj.c b/utils/ql/obj.c index adff8dfd..8026a0de 100644 --- a/utils/ql/obj.c +++ b/utils/ql/obj.c @@ -17,10 +17,13 @@ char *thestring = "power"; /* * -H0 -T0x200000 -R0 is boot * -H1 -T0x100000 -R4 is Be boot - * -H2 -T4128 -R4096 is plan9 format + * -H2 -T0x100020 -R0x100000 is plan9 format (was -T4128 -R4096) * -H3 -T0x02010000 -D0x00001000 is raw * -H4 -T0x1000200 -D0x20000e00 -R4 is aix xcoff executable * -H5 -T0x80010000 -t0x10000 ELF, phys = 10000, vaddr = 0x8001... + * appropriate for blue gene (bg/l anyway) + * -H6 -T0xfffe2100 -R4 ELF, phys = vaddr = 0xfffe2100 + * appropriate for virtex 4 boot */ static int @@ -150,11 +153,11 @@ main(int argc, char *argv[]) case 2: /* plan 9 */ HEADR = 32L; if(INITTEXT == -1) - INITTEXT = 4128; + INITTEXT = 0x100020; if(INITDAT == -1) INITDAT = 0; if(INITRND == -1) - INITRND = 4096; + INITRND = 0x100000; break; case 3: /* raw */ HEADR = 0; @@ -177,6 +180,7 @@ main(int argc, char *argv[]) INITRND = 0; break; case 5: /* elf executable */ + case 6: /* elf for virtex 4 */ HEADR = rnd(52L+3*32L, 16); if(INITTEXT == -1) INITTEXT = 0x00400000L+HEADR; @@ -1220,16 +1224,24 @@ void doprof2(void) { Sym *s2, *s4; - Prog *p, *q, *ps2, *ps4; + Prog *p, *q, *q2, *ps2, *ps4; if(debug['v']) Bprint(&bso, "%5.2f profile 2\n", cputime()); Bflush(&bso); - s2 = lookup("_profin", 0); - s4 = lookup("_profout", 0); + if(debug['e']){ + s2 = lookup("_tracein", 0); + s4 = lookup("_traceout", 0); + }else{ + s2 = lookup("_profin", 0); + s4 = lookup("_profout", 0); + } if(s2->type != STEXT || s4->type != STEXT) { - diag("_profin/_profout not defined"); + if(debug['e']) + diag("_tracein/_traceout not defined %d %d", s2->type, s4->type); + else + diag("_profin/_profout not defined"); return; } @@ -1270,7 +1282,20 @@ doprof2(void) q->line = p->line; q->pc = p->pc; q->link = p->link; - p->link = q; + if(debug['e']){ /* embedded tracing */ + q2 = prg(); + p->link = q2; + q2->link = q; + + q2->line = p->line; + q2->pc = p->pc; + + q2->as = ABR; + q2->to.type = D_BRANCH; + q2->to.sym = p->to.sym; + q2->cond = q->link; + }else + p->link = q; p = q; p->as = ABL; p->to.type = D_BRANCH; @@ -1280,7 +1305,17 @@ doprof2(void) continue; } if(p->as == ARETURN) { - + /* + * RETURN (default) + */ + if(debug['e']){ /* embedded tracing */ + q = prg(); + q->line = p->line; + q->pc = p->pc; + q->link = p->link; + p->link = q; + p = q; + } /* * RETURN */ |
