diff options
author | Luuk van Dijk <lvd@golang.org> | 2010-09-20 18:44:19 +0200 |
---|---|---|
committer | Luuk van Dijk <lvd@golang.org> | 2010-09-20 18:44:19 +0200 |
commit | 2c971cf5619e2cef631983c7da0e9d317d4954e8 (patch) | |
tree | 742182a620da5686e5892fbd7a671fef1e75b019 /src/cmd/6l | |
parent | 5246c9617771931fa4c2ac0f2783595e1d5f9be4 (diff) | |
download | go-2c971cf5619e2cef631983c7da0e9d317d4954e8.tar.gz |
6l/8l: emit DWARF frame info.
R=rsc, ken2, r
CC=golang-dev
http://codereview.appspot.com/2151044
Diffstat (limited to 'src/cmd/6l')
-rw-r--r-- | src/cmd/6l/l.h | 11 | ||||
-rw-r--r-- | src/cmd/6l/pass.c | 12 |
2 files changed, 19 insertions, 4 deletions
diff --git a/src/cmd/6l/l.h b/src/cmd/6l/l.h index 22f266fe4..b8f47fc00 100644 --- a/src/cmd/6l/l.h +++ b/src/cmd/6l/l.h @@ -95,6 +95,7 @@ struct Prog Prog* dlink; Prog* pcond; /* work on this */ vlong pc; + int32 spadj; int32 line; short as; char ft; /* oclass cache */ @@ -102,7 +103,7 @@ struct Prog uchar mark; /* work on these */ uchar back; - char width; /* fake for DATA */ + char width; /* fake for DATA */ char mode; /* 16, 32, or 64 */ }; struct Auto @@ -397,7 +398,7 @@ void buildop(void); void cflush(void); void ckoff(Sym*, int32); Prog* copyp(Prog*); -vlong cpos(void); +vlong cpos(void); double cputime(void); void datblk(int32, int32); void deadcode(void); @@ -463,3 +464,9 @@ uint32 machheadr(void); #pragma varargck type "R" int #pragma varargck type "A" int #pragma varargck argpos diag 1 + +/* Used by ../ld/dwarf.c */ +enum +{ + DWARFREGSP = 7 +}; diff --git a/src/cmd/6l/pass.c b/src/cmd/6l/pass.c index ea3351239..d207e7483 100644 --- a/src/cmd/6l/pass.c +++ b/src/cmd/6l/pass.c @@ -692,7 +692,7 @@ dostkoff(void) p->from.type = D_INDIR+D_GS; p->from.offset = tlsoffset+0; p->to.type = D_CX; - + if(debug['K']) { // 6l -K means check not only for stack // overflow but stack underflow. @@ -843,6 +843,7 @@ dostkoff(void) p->as = AADJSP; p->from.type = D_CONST; p->from.offset = autoffset; + p->spadj = autoffset; if(q != P) q->pcond = p; } @@ -903,26 +904,32 @@ dostkoff(void) case APUSHL: case APUSHFL: deltasp += 4; + p->spadj = 4; continue; case APUSHQ: case APUSHFQ: deltasp += 8; + p->spadj = 8; continue; case APUSHW: case APUSHFW: deltasp += 2; + p->spadj = 2; continue; case APOPL: case APOPFL: deltasp -= 4; + p->spadj = -4; continue; case APOPQ: case APOPFQ: deltasp -= 8; + p->spadj = -8; continue; case APOPW: case APOPFW: deltasp -= 2; + p->spadj = -2; continue; case ARET: break; @@ -937,7 +944,7 @@ dostkoff(void) p->as = AADJSP; p->from.type = D_CONST; p->from.offset = -autoffset; - + p->spadj = -autoffset; p = appendp(p); p->as = ARET; } @@ -954,6 +961,7 @@ dostkoff(void) q->from = zprg.from; q->from.type = D_CONST; q->from.offset = -autoffset; + q->spadj = -autoffset; q->to = zprg.to; continue; } |