diff options
| author | forsyth <forsyth@vitanuova.com> | 2010-04-27 19:13:34 +0100 |
|---|---|---|
| committer | forsyth <forsyth@vitanuova.com> | 2010-04-27 19:13:34 +0100 |
| commit | 2303ddadf6e5cbf9705ccf25abe6114af1126b79 (patch) | |
| tree | 69ba2b94d272fd62869f0ce34703b972e3cf084f | |
| parent | ac618e3d372eaed038e4ca17b28993202bcfab1d (diff) | |
20100427-1913
| -rw-r--r-- | utils/6l/asm.c | 168 | ||||
| -rw-r--r-- | utils/6l/l.h | 5 | ||||
| -rw-r--r-- | utils/6l/obj.c | 20 | ||||
| -rw-r--r-- | utils/6l/optab.c | 267 | ||||
| -rw-r--r-- | utils/6l/span.c | 23 |
5 files changed, 194 insertions, 289 deletions
diff --git a/utils/6l/asm.c b/utils/6l/asm.c index 5aebd872..c4d46633 100644 --- a/utils/6l/asm.c +++ b/utils/6l/asm.c @@ -4,7 +4,7 @@ #define PADDR(a) ((ulong)(a) & ~0x80000000) -long +vlong entryvalue(void) { char *a; @@ -52,6 +52,13 @@ lput(long l) } void +llput(vlong v) +{ + lput(v>>32); + lput(v); +} + +void lputl(long l) { cput(l); @@ -80,6 +87,7 @@ asmb(void) long v, magic; int a; uchar *op1; + vlong vl; if(debug['v']) Bprint(&bso, "%5.2f asmb\n", cputime()); @@ -123,21 +131,10 @@ asmb(void) switch(HEADTYPE) { default: diag("unknown header type %ld", HEADTYPE); - case 0: - seek(cout, rnd(HEADR+textsize, 8192), 0); - break; - case 1: - textsize = rnd(HEADR+textsize, 4096)-HEADR; - seek(cout, textsize+HEADR, 0); - break; case 2: case 5: seek(cout, HEADR+textsize, 0); break; - case 3: - case 4: - seek(cout, HEADR+rnd(textsize, INITRND), 0); - break; } if(debug['v']) @@ -167,20 +164,10 @@ asmb(void) Bflush(&bso); switch(HEADTYPE) { default: - case 0: - seek(cout, rnd(HEADR+textsize, 8192)+datsize, 0); - break; - case 1: - seek(cout, rnd(HEADR+textsize, INITRND)+datsize, 0); - break; case 2: case 5: seek(cout, HEADR+textsize+datsize, 0); break; - case 3: - case 4: - debug['s'] = 1; - break; } if(!debug['s']) asmsym(); @@ -207,97 +194,23 @@ asmb(void) seek(cout, 0L, 0); switch(HEADTYPE) { default: - case 0: /* garbage */ - lput(0x160L<<16); /* magic and sections */ - lput(0L); /* time and date */ - lput(rnd(HEADR+textsize, 4096)+datsize); - lput(symsize); /* nsyms */ - lput((0x38L<<16)|7L); /* size of optional hdr and flags */ - lput((0413<<16)|0437L); /* magic and version */ - lput(rnd(HEADR+textsize, 4096)); /* sizes */ + case 2: /* plan9 */ + magic = 4*26*26+7; + magic |= 0x00008000; /* fat header */ + if(dlm) + magic |= 0x80000000; /* dlm */ + lput(magic); /* magic */ + lput(textsize); /* sizes */ lput(datsize); lput(bsssize); - lput(entryvalue()); /* va of entry */ - lput(INITTEXT-HEADR); /* va of base of text */ - lput(INITDAT); /* va of base of data */ - lput(INITDAT+datsize); /* va of base of bss */ - lput(~0L); /* gp reg mask */ - lput(0L); - lput(0L); - lput(0L); - lput(0L); - lput(~0L); /* gp value ?? */ - break; - lputl(0); /* x */ - case 1: /* unix coff */ - /* - * file header - */ - lputl(0x0004014c); /* 4 sections, magic */ - lputl(0); /* unix time stamp */ - lputl(0); /* symbol table */ - lputl(0); /* nsyms */ - lputl(0x0003001c); /* flags, sizeof a.out header */ - /* - * a.out header - */ - lputl(0x10b); /* magic, version stamp */ - lputl(rnd(textsize, INITRND)); /* text sizes */ - lputl(datsize); /* data sizes */ - lputl(bsssize); /* bss sizes */ - lput(entryvalue()); /* va of entry */ - lputl(INITTEXT); /* text start */ - lputl(INITDAT); /* data start */ - /* - * text section header - */ - strnput(".text", 8); - lputl(HEADR); /* pa */ - lputl(HEADR); /* va */ - lputl(textsize); /* text size */ - lputl(HEADR); /* file offset */ - lputl(0); /* relocation */ - lputl(0); /* line numbers */ - lputl(0); /* relocation, line numbers */ - lputl(0x20); /* flags text only */ - /* - * data section header - */ - strnput(".data", 8); - lputl(INITDAT); /* pa */ - lputl(INITDAT); /* va */ - lputl(datsize); /* data size */ - lputl(HEADR+textsize); /* file offset */ - lputl(0); /* relocation */ - lputl(0); /* line numbers */ - lputl(0); /* relocation, line numbers */ - lputl(0x40); /* flags data only */ - /* - * bss section header - */ - strnput(".bss", 8); - lputl(INITDAT+datsize); /* pa */ - lputl(INITDAT+datsize); /* va */ - lputl(bsssize); /* bss size */ - lputl(0); /* file offset */ - lputl(0); /* relocation */ - lputl(0); /* line numbers */ - lputl(0); /* relocation, line numbers */ - lputl(0x80); /* flags bss only */ - /* - * comment section header - */ - strnput(".comment", 8); - lputl(0); /* pa */ - lputl(0); /* va */ - lputl(symsize+lcsize); /* comment size */ - lputl(HEADR+textsize+datsize); /* file offset */ - lputl(HEADR+textsize+datsize); /* offset of syms */ - lputl(HEADR+textsize+datsize+symsize);/* offset of line numbers */ - lputl(0); /* relocation, line numbers */ - lputl(0x200); /* flags comment only */ + lput(symsize); /* nsyms */ + vl = entryvalue(); + lput(PADDR(vl)); /* va of entry */ + lput(spsize); /* sp offsets */ + lput(lcsize); /* line offsets */ + llput(vl); /* va of entry */ break; - case 2: /* plan9 */ + case 3: /* plan9 */ magic = 4*26*26+7; if(dlm) magic |= 0x80000000; @@ -310,31 +223,6 @@ asmb(void) lput(spsize); /* sp offsets */ lput(lcsize); /* line offsets */ break; - case 3: - /* MS-DOS .COM */ - break; - case 4: - /* fake MS-DOS .EXE */ - v = rnd(HEADR+textsize, INITRND)+datsize; - wputl(0x5A4D); /* 'MZ' */ - wputl(v % 512); /* bytes in last page */ - wputl(rnd(v, 512)/512); /* total number of pages */ - wputl(0x0000); /* number of reloc items */ - v = rnd(HEADR-(INITTEXT & 0xFFFF), 16); - wputl(v/16); /* size of header */ - wputl(0x0000); /* minimum allocation */ - wputl(0xFFFF); /* maximum allocation */ - wputl(0x0000); /* initial ss value */ - wputl(0x0100); /* initial sp value */ - wputl(0x0000); /* complemented checksum */ - v = entryvalue(); - wputl(v); /* initial ip value (!) */ - wputl(0x0000); /* initial cs value */ - wputl(0x0000); - wputl(0x0000); - wputl(0x003E); /* reloc table offset */ - wputl(0x0000); /* overlay number */ - break; case 5: strnput("\177ELF", 4); /* e_ident */ cput(1); /* class = 32 bit */ @@ -342,12 +230,12 @@ asmb(void) cput(1); /* version = CURRENT */ strnput("", 9); wputl(2); /* type = EXEC */ - wputl(3); /* machine = 386 */ + wputl(62); /* machine = AMD64 */ lputl(1L); /* version = CURRENT */ lputl(PADDR(entryvalue())); /* entry vaddr */ lputl(52L); /* offset to first phdr */ lputl(0L); /* offset to first shdr */ - lputl(0L); /* flags = 386 */ + lputl(0L); /* processor specific flags */ wputl(52); /* Ehdr size */ wputl(32); /* Phdr size */ wputl(3); /* # of Phdrs */ @@ -554,10 +442,10 @@ datblk(long s, long n) write(cout, buf.dbuf, n); } -long -rnd(long v, long r) +vlong +rnd(vlong v, vlong r) { - long c; + vlong c; if(r <= 0) return v; diff --git a/utils/6l/l.h b/utils/6l/l.h index be116463..115aa69d 100644 --- a/utils/6l/l.h +++ b/utils/6l/l.h @@ -287,7 +287,6 @@ EXTERN int reg[D_NONE]; EXTERN int regrex[D_NONE+1]; EXTERN Prog* lastp; EXTERN long lcsize; -EXTERN int maxop; EXTERN int nerrors; EXTERN long nhunk; EXTERN long nsymbol; @@ -347,7 +346,7 @@ void doprof1(void); void doprof2(void); void dostkoff(void); void dynreloc(Sym*, ulong, int); -long entryvalue(void); +vlong entryvalue(void); void errorexit(void); void export(void); int find1(long, int); @@ -375,7 +374,7 @@ Prog* prg(void); void readundefs(char*, int); int relinv(int); long reuse(Prog*, Sym*); -long rnd(long, long); +vlong rnd(vlong, vlong); void span(void); void undef(void); void undefsym(Sym*); diff --git a/utils/6l/obj.c b/utils/6l/obj.c index 30c39120..9f57d612 100644 --- a/utils/6l/obj.c +++ b/utils/6l/obj.c @@ -13,7 +13,8 @@ char *thestring = "amd64"; char *paramspace = "FP"; /* - * -H2 -T4128 -R4096 is plan9 format + * -H2 -T4136 -R4096 is plan9 64-bit format + * -H3 -T4128 -R4096 is plan9 32-bit format * -H5 -T0x80110000 -R4096 is ELF32 * * options used: 189BLQSWabcjlnpsvz @@ -122,9 +123,18 @@ main(int argc, char *argv[]) diag("unknown -H option"); errorexit(); case 2: /* plan 9 */ + HEADR = 32L+8L; + if(INITTEXT == -1) + INITTEXT = 4096+HEADR; + if(INITDAT == -1) + INITDAT = 0; + if(INITRND == -1) + INITRND = 4096; + break; + case 3: /* plan 9 */ HEADR = 32L; if(INITTEXT == -1) - INITTEXT = 1024*1024; + INITTEXT = 4096+32; if(INITDAT == -1) INITDAT = 0; if(INITRND == -1) @@ -500,7 +510,11 @@ zaddr(uchar *p, Adr *a, Sym *h[]) } a->offset = 0; if(t & T_OFFSET) { - l = (long)(p[c] | (p[c+1]<<8) | (p[c+2]<<16) | (p[c+3]<<24)); + /* + * Hack until Charles fixes the compiler. + a->offset = (long)(p[c] | (p[c+1]<<8) | (p[c+2]<<16) | (p[c+3]<<24)); + */ + l = p[c] | (p[c+1]<<8) | (p[c+2]<<16) | (p[c+3]<<24); a->offset = l; c += 4; if(t & T_64) { diff --git a/utils/6l/optab.c b/utils/6l/optab.c index 73bc02b0..db22ca67 100644 --- a/utils/6l/optab.c +++ b/utils/6l/optab.c @@ -608,11 +608,11 @@ Optab optab[] = { ACMOVWPS, yml_rl, Pq, 0x4a }, { ACMPB, ycmpb, Pb, 0x3c,0x80,(07),0x38,0x3a }, { ACMPL, ycmpl, Px, 0x83,(07),0x3d,0x81,(07),0x39,0x3b }, - { ACMPPD, yxcmpi, Px, Pe,0xc2 }, + { ACMPPD, yxcmpi, Px, Pe,0xc2 }, { ACMPPS, yxcmpi, Pm, 0xc2,0 }, { ACMPQ, ycmpl, Pw, 0x83,(07),0x3d,0x81,(07),0x39,0x3b }, { ACMPSB, ynone, Pb, 0xa6 }, - { ACMPSD, yxcmpi, Px, Pf2,0xc2 }, + { ACMPSD, yxcmpi, Px, Pf2,0xc2 }, { ACMPSL, ynone, Px, 0xa7 }, { ACMPSQ, ynone, Pw, 0xa7 }, { ACMPSS, yxcmpi, Px, Pf3,0xc2 }, @@ -620,13 +620,13 @@ Optab optab[] = { ACMPW, ycmpl, Pe, 0x83,(07),0x3d,0x81,(07),0x39,0x3b }, { ACOMISD, yxcmp, Pe, 0x2f }, { ACOMISS, yxcmp, Pm, 0x2f }, - { ACPUID, ynone, Pm, 0xa2 }, - { ACVTPL2PD, yxcvm2, Px, Pf3,0xe6,Pe,0x2a }, - { ACVTPL2PS, yxcvm2, Pm, 0x5b,0,0x2a,0, }, - { ACVTPD2PL, yxcvm1, Px, Pf2,0xe6,Pe,0x2d }, + { ACPUID, ynone, Pm, 0xa2 }, + { ACVTPL2PD, yxcvm2, Px, Pf3,0xe6,Pe,0x2a }, + { ACVTPL2PS, yxcvm2, Pm, 0x5b,0,0x2a,0, }, + { ACVTPD2PL, yxcvm1, Px, Pf2,0xe6,Pe,0x2d }, { ACVTPD2PS, yxm, Pe, 0x5a }, - { ACVTPS2PL, yxcvm1, Px, Pe,0x5b,Pm,0x2d }, - { ACVTPS2PD, yxm, Pm, 0x5a }, + { ACVTPS2PL, yxcvm1, Px, Pe,0x5b,Pm,0x2d }, + { ACVTPS2PD, yxm, Pm, 0x5a }, { API2FW, ymfp, Px, 0x0c }, { ACVTSD2SL, yxcvfl, Pf2, 0x2d }, { ACVTSD2SQ, yxcvfq, Pw, Pf2,0x2d }, @@ -638,8 +638,8 @@ Optab optab[] = { ACVTSS2SD, yxm, Pf3, 0x5a }, { ACVTSS2SL, yxcvfl, Pf3, 0x2d }, { ACVTSS2SQ, yxcvfq, Pw, Pf3,0x2d }, - { ACVTTPD2PL, yxcvm1, Px, Pe,0xe6,Pe,0x2c }, - { ACVTTPS2PL, yxcvm1, Px, Pf3,0x5b,Pm,0x2c }, + { ACVTTPD2PL, yxcvm1, Px, Pe,0xe6,Pe,0x2c }, + { ACVTTPS2PL, yxcvm1, Px, Pf3,0x5b,Pm,0x2c }, { ACVTTSD2SL, yxcvfl, Pf2, 0x2c }, { ACVTTSD2SQ, yxcvfq, Pw, Pf2,0x2c }, { ACVTTSS2SL, yxcvfl, Pf3, 0x2c }, @@ -659,7 +659,7 @@ Optab optab[] = { ADIVPS, yxm, Pm, 0x5e }, { ADIVQ, ydivl, Pw, 0xf7,(06) }, { ADIVSD, yxm, Pf2, 0x5e }, - { ADIVSS, yxm, Pf3, 0x5e }, + { ADIVSS, yxm, Pf3, 0x5e }, { ADIVW, ydivl, Pe, 0xf7,(06) }, { AEMMS, ynone, Pm, 0x77 }, { AENTER }, /* botch */ @@ -715,7 +715,7 @@ Optab optab[] = { ALAHF, ynone, Px, 0x9f }, { ALARL, yml_rl, Pm, 0x02 }, { ALARW, yml_rl, Pq, 0x02 }, - { ALDMXCSR, ystcw, Pm, 0xae,(02),0xae,(02) }, + { ALDMXCSR, ysvrs, Pm, 0xae,(02),0xae,(02) }, { ALEAL, ym_rl, Px, 0x8d }, { ALEAQ, ym_rl, Pw, 0x8d }, { ALEAVEL, ynone, P32, 0xc9 }, @@ -734,15 +734,15 @@ Optab optab[] = { ALSLL, yml_rl, Pm, 0x03 }, { ALSLW, yml_rl, Pq, 0x03 }, { AMASKMOVOU, yxr, Pe, 0xf7 }, - { AMASKMOVQ, ymr, Pm, 0xf7 }, + { AMASKMOVQ, ymr, Pm, 0xf7 }, { AMAXPD, yxm, Pe, 0x5f }, - { AMAXPS, yxm, Pm, 0x5f }, - { AMAXSD, yxm, Pf2, 0x5f }, - { AMAXSS, yxm, Pf3, 0x5f }, - { AMINPD, yxm, Pe, 0x5d }, - { AMINPS, yxm, Pm, 0x5d }, - { AMINSD, yxm, Pf2, 0x5d }, - { AMINSS, yxm, Pf3, 0x5d }, + { AMAXPS, yxm, Pm, 0x5f }, + { AMAXSD, yxm, Pf2, 0x5f }, + { AMAXSS, yxm, Pf3, 0x5f }, + { AMINPD, yxm, Pe, 0x5d }, + { AMINPS, yxm, Pm, 0x5d }, + { AMINSD, yxm, Pf2, 0x5d }, + { AMINSS, yxm, Pf3, 0x5d }, { AMOVAPD, yxmov, Pe, 0x28,0x29 }, { AMOVAPS, yxmov, Pm, 0x28,0x29 }, { AMOVB, ymovb, Pb, 0x88,0x8a,0xb0,0xc6,(00) }, @@ -770,7 +770,7 @@ Optab optab[] = { AMOVNTPS, yxr_ml, Pm, 0x2b }, { AMOVNTQ, ymr_ml, Pm, 0xe7 }, { AMOVQ, ymovq, Pw, 0x89,0x8b,0x31,0xc7,(00),0xb8,0xc7,(00),0x6f,0x7f,0x6e,0x7e,Pf2,0xd6,Pe,0xd6,Pe,0x6e,Pe,0x7e }, - { AMOVQOZX, ymrxr, Pf3, 0xd6,0x7e }, + { AMOVQOZX, ymrxr, Pf3, 0xd6,0x7e }, { AMOVSB, ynone, Pb, 0xa4 }, { AMOVSD, yxmov, Pf2, 0x10,0x11 }, { AMOVSL, ynone, Px, 0xa5 }, @@ -787,17 +787,17 @@ Optab optab[] = { AMULB, ydivb, Pb, 0xf6,(04) }, { AMULL, ydivl, Px, 0xf7,(04) }, { AMULPD, yxm, Pe, 0x59 }, - { AMULPS, yxm, Ym, 0x59 }, + { AMULPS, yxm, Ym, 0x59 }, { AMULQ, ydivl, Pw, 0xf7,(04) }, { AMULSD, yxm, Pf2, 0x59 }, - { AMULSS, yxm, Pf3, 0x59 }, + { AMULSS, yxm, Pf3, 0x59 }, { AMULW, ydivl, Pe, 0xf7,(04) }, { ANAME }, { ANEGB, yscond, Pb, 0xf6,(03) }, { ANEGL, yscond, Px, 0xf7,(03) }, { ANEGQ, yscond, Pw, 0xf7,(03) }, { ANEGW, yscond, Pe, 0xf7,(03) }, - { ANOP, ynop, Px,0,0 }, + { ANOP, ynop, Px, 0,0 }, { ANOTB, yscond, Pb, 0xf6,(02) }, { ANOTL, yscond, Px, 0xf7,(02) }, { ANOTQ, yscond, Pw, 0xf7,(02) }, @@ -814,60 +814,60 @@ Optab optab[] = { AOUTSL, ynone, Px, 0x6f }, { AOUTSW, ynone, Pe, 0x6f }, { AOUTW, yin, Pe, 0xe7,0xef }, - { APACKSSLW, ymm, Py, 0x6b,Pe,0x6b }, - { APACKSSWB, ymm, Py, 0x63,Pe,0x63 }, - { APACKUSWB, ymm, Py, 0x67,Pe,0x67 }, - { APADDB, ymm, Py, 0xfc,Pe,0xfc }, - { APADDL, ymm, Py, 0xfe,Pe,0xfe }, + { APACKSSLW, ymm, Py, 0x6b,Pe,0x6b }, + { APACKSSWB, ymm, Py, 0x63,Pe,0x63 }, + { APACKUSWB, ymm, Py, 0x67,Pe,0x67 }, + { APADDB, ymm, Py, 0xfc,Pe,0xfc }, + { APADDL, ymm, Py, 0xfe,Pe,0xfe }, { APADDQ, yxm, Pe, 0xd4 }, - { APADDSB, ymm, Py, 0xec,Pe,0xec }, - { APADDSW, ymm, Py, 0xed,Pe,0xed }, - { APADDUSB, ymm, Py, 0xdc,Pe,0xdc }, - { APADDUSW, ymm, Py, 0xdd,Pe,0xdd }, - { APADDW, ymm, Py, 0xfd,Pe,0xfd }, - { APAND, ymm, Py, 0xdb,Pe,0xdb }, - { APANDN, ymm, Py, 0xdf,Pe,0xdf }, - { APAVGB, ymm, Py, 0xe0,Pe,0xe0 }, - { APAVGW, ymm, Py, 0xe3,Pe,0xe3 }, - { APCMPEQB, ymm, Py, 0x74,Pe,0x74 }, - { APCMPEQL, ymm, Py, 0x76,Pe,0x76 }, - { APCMPEQW, ymm, Py, 0x75,Pe,0x75 }, - { APCMPGTB, ymm, Py, 0x64,Pe,0x64 }, - { APCMPGTL, ymm, Py, 0x66,Pe,0x66 }, - { APCMPGTW, ymm, Py, 0x65,Pe,0x65 }, - { APEXTRW, yextrw, Pq, 0xc5 }, - { APF2IL, ymfp, Px, 0x1d }, - { APF2IW, ymfp, Px, 0x1c }, - { API2FL, ymfp, Px, 0x0d }, - { APFACC, ymfp, Px, 0xae }, - { APFADD, ymfp, Px, 0x9e }, - { APFCMPEQ, ymfp, Px, 0xb0 }, - { APFCMPGE, ymfp, Px, 0x90 }, - { APFCMPGT, ymfp, Px, 0xa0 }, - { APFMAX, ymfp, Px, 0xa4 }, - { APFMIN, ymfp, Px, 0x94 }, - { APFMUL, ymfp, Px, 0xb4 }, - { APFNACC, ymfp, Px, 0x8a }, - { APFPNACC, ymfp, Px, 0x8e }, - { APFRCP, ymfp, Px, 0x96 }, - { APFRCPIT1, ymfp, Px, 0xa6 }, - { APFRCPI2T, ymfp, Px, 0xb6 }, - { APFRSQIT1, ymfp, Px, 0xa7 }, - { APFRSQRT, ymfp, Px, 0x97 }, - { APFSUB, ymfp, Px, 0x9a }, - { APFSUBR, ymfp, Px, 0xaa }, - { APINSRW, yextrw, Pq, 0xc4 }, - { APMADDWL, ymm, Py, 0xf5,Pe,0xf5 }, + { APADDSB, ymm, Py, 0xec,Pe,0xec }, + { APADDSW, ymm, Py, 0xed,Pe,0xed }, + { APADDUSB, ymm, Py, 0xdc,Pe,0xdc }, + { APADDUSW, ymm, Py, 0xdd,Pe,0xdd }, + { APADDW, ymm, Py, 0xfd,Pe,0xfd }, + { APAND, ymm, Py, 0xdb,Pe,0xdb }, + { APANDN, ymm, Py, 0xdf,Pe,0xdf }, + { APAVGB, ymm, Py, 0xe0,Pe,0xe0 }, + { APAVGW, ymm, Py, 0xe3,Pe,0xe3 }, + { APCMPEQB, ymm, Py, 0x74,Pe,0x74 }, + { APCMPEQL, ymm, Py, 0x76,Pe,0x76 }, + { APCMPEQW, ymm, Py, 0x75,Pe,0x75 }, + { APCMPGTB, ymm, Py, 0x64,Pe,0x64 }, + { APCMPGTL, ymm, Py, 0x66,Pe,0x66 }, + { APCMPGTW, ymm, Py, 0x65,Pe,0x65 }, + { APEXTRW, yextrw, Pq, 0xc5 }, + { APF2IL, ymfp, Px, 0x1d }, + { APF2IW, ymfp, Px, 0x1c }, + { API2FL, ymfp, Px, 0x0d }, + { APFACC, ymfp, Px, 0xae }, + { APFADD, ymfp, Px, 0x9e }, + { APFCMPEQ, ymfp, Px, 0xb0 }, + { APFCMPGE, ymfp, Px, 0x90 }, + { APFCMPGT, ymfp, Px, 0xa0 }, + { APFMAX, ymfp, Px, 0xa4 }, + { APFMIN, ymfp, Px, 0x94 }, + { APFMUL, ymfp, Px, 0xb4 }, + { APFNACC, ymfp, Px, 0x8a }, + { APFPNACC, ymfp, Px, 0x8e }, + { APFRCP, ymfp, Px, 0x96 }, + { APFRCPIT1, ymfp, Px, 0xa6 }, + { APFRCPI2T, ymfp, Px, 0xb6 }, + { APFRSQIT1, ymfp, Px, 0xa7 }, + { APFRSQRT, ymfp, Px, 0x97 }, + { APFSUB, ymfp, Px, 0x9a }, + { APFSUBR, ymfp, Px, 0xaa }, + { APINSRW, yextrw, Pq, 0xc4 }, + { APMADDWL, ymm, Py, 0xf5,Pe,0xf5 }, { APMAXSW, yxm, Pe, 0xee }, - { APMAXUB, yxm, Pe, 0xde }, - { APMINSW, yxm, Pe, 0xea }, - { APMINUB, yxm, Pe, 0xda }, - { APMOVMSKB, ymskb, Px, Pe,0xd7,0xd7 }, - { APMULHRW, ymfp, Px, 0xb7 }, - { APMULHUW, ymm, Py, 0xe4,Pe,0xe4 }, - { APMULHW, ymm, Py, 0xe5,Pe,0xe5 }, - { APMULLW, ymm, Py, 0xd5,Pe,0xd5 }, - { APMULULQ, ymm, Py, 0xf4,Pe,0xf4 }, + { APMAXUB, yxm, Pe, 0xde }, + { APMINSW, yxm, Pe, 0xea }, + { APMINUB, yxm, Pe, 0xda }, + { APMOVMSKB, ymskb, Px, Pe,0xd7,0xd7 }, + { APMULHRW, ymfp, Px, 0xb7 }, + { APMULHUW, ymm, Py, 0xe4,Pe,0xe4 }, + { APMULHW, ymm, Py, 0xe5,Pe,0xe5 }, + { APMULLW, ymm, Py, 0xd5,Pe,0xd5 }, + { APMULULQ, ymm, Py, 0xf4,Pe,0xf4 }, { APOPAL, ynone, P32, 0x61 }, { APOPAW, ynone, Pe, 0x61 }, { APOPFL, ynone, P32, 0x9d }, @@ -876,39 +876,39 @@ Optab optab[] = { APOPL, ypopl, P32, 0x58,0x8f,(00) }, { APOPQ, ypopl, Py, 0x58,0x8f,(00) }, { APOPW, ypopl, Pe, 0x58,0x8f,(00) }, - { APOR, ymm, Py, 0xeb,Pe,0xeb }, - { APSADBW, yxm, Pw, Pe,0xf6 }, + { APOR, ymm, Py, 0xeb,Pe,0xeb }, + { APSADBW, yxm, Pw, Pe,0xf6 }, { APSHUFHW, yxshuf, Pf3, 0x70 }, - { APSHUFL, yxm, Pw, Pe,0x70 }, + { APSHUFL, yxm, Pw, Pe,0x70 }, { APSHUFLW, yxshuf, Pf2, 0x70 }, - { APSHUFW, ymshuf, Pm, 0x70 }, + { APSHUFW, ymshuf, Pm, 0x70 }, { APSLLO, ypsdq, Pq, 0x73,(07) }, - { APSLLL, yps, Py, 0xf2, 0x72,(06), Pe,0xf2, Pe,0x72,(06) }, - { APSLLQ, yps, Py, 0xf3, 0x73,(06), Pe,0xf3, Pe,0x7e,(06) }, - { APSLLW, yps, Py, 0xf1, 0x71,(06), Pe,0xf1, Pe,0x71,(06) }, - { APSRAL, yps, Py, 0xe2, 0x72,(04), Pe,0xe2, Pe,0x72,(04) }, - { APSRAW, yps, Py, 0xe1, 0x71,(04), Pe,0xe1, Pe,0x71,(04) }, + { APSLLL, yps, Py, 0xf2, 0x72,(06), Pe,0xf2, Pe,0x72,(06) }, + { APSLLQ, yps, Py, 0xf3, 0x73,(06), Pe,0xf3, Pe,0x7e,(06) }, + { APSLLW, yps, Py, 0xf1, 0x71,(06), Pe,0xf1, Pe,0x71,(06) }, + { APSRAL, yps, Py, 0xe2, 0x72,(04), Pe,0xe2, Pe,0x72,(04) }, + { APSRAW, yps, Py, 0xe1, 0x71,(04), Pe,0xe1, Pe,0x71,(04) }, { APSRLO, ypsdq, Pq, 0x73,(03) }, - { APSRLL, yps, Py, 0xd2, 0x72,(02), Pe,0xd2, Pe,0x72,(02) }, - { APSRLQ, yps, Py, 0xd3, 0x73,(02), Pe,0xd3, Pe,0x73,(02) }, - { APSRLW, yps, Py, 0xd1, 0x71,(02), Pe,0xe1, Pe,0x71,(02) }, - { APSUBB, yxm, Pe, 0xf8 }, - { APSUBL, yxm, Pe, 0xfa }, - { APSUBQ, yxm, Pe, 0xfb }, - { APSUBSB, yxm, Pe, 0xe8 }, - { APSUBSW, yxm, Pe, 0xe9 }, - { APSUBUSB, yxm, Pe, 0xd8 }, - { APSUBUSW, yxm, Pe, 0xd9 }, - { APSUBW, yxm, Pe, 0xf9 }, - { APSWAPL, ymfp, Px, 0xbb }, - { APUNPCKHBW, ymm, Py, 0x68,Pe,0x68 }, - { APUNPCKHLQ, ymm, Py, 0x6a,Pe,0x6a }, - { APUNPCKHQDQ, yxm, Pe, 0x6d }, - { APUNPCKHWL, ymm, Py, 0x69,Pe,0x69 }, - { APUNPCKLBW, ymm, Py, 0x60,Pe,0x60 }, - { APUNPCKLLQ, ymm, Py, 0x62,Pe,0x62 }, - { APUNPCKLQDQ, yxm, Pe, 0x6c }, - { APUNPCKLWL, ymm, Py, 0x61,Pe,0x61 }, + { APSRLL, yps, Py, 0xd2, 0x72,(02), Pe,0xd2, Pe,0x72,(02) }, + { APSRLQ, yps, Py, 0xd3, 0x73,(02), Pe,0xd3, Pe,0x73,(02) }, + { APSRLW, yps, Py, 0xd1, 0x71,(02), Pe,0xe1, Pe,0x71,(02) }, + { APSUBB, yxm, Pe, 0xf8 }, + { APSUBL, yxm, Pe, 0xfa }, + { APSUBQ, yxm, Pe, 0xfb }, + { APSUBSB, yxm, Pe, 0xe8 }, + { APSUBSW, yxm, Pe, 0xe9 }, + { APSUBUSB, yxm, Pe, 0xd8 }, + { APSUBUSW, yxm, Pe, 0xd9 }, + { APSUBW, yxm, Pe, 0xf9 }, + { APSWAPL, ymfp, Px, 0xbb }, + { APUNPCKHBW, ymm, Py, 0x68,Pe,0x68 }, + { APUNPCKHLQ, ymm, Py, 0x6a,Pe,0x6a }, + { APUNPCKHQDQ, yxm, Pe, 0x6d }, + { APUNPCKHWL, ymm, Py, 0x69,Pe,0x69 }, + { APUNPCKLBW, ymm, Py, 0x60,Pe,0x60 }, + { APUNPCKLLQ, ymm, Py, 0x62,Pe,0x62 }, + { APUNPCKLQDQ, yxm, Pe, 0x6c }, + { APUNPCKLWL, ymm, Py, 0x61,Pe,0x61 }, { APUSHAL, ynone, P32, 0x60 }, { APUSHAW, ynone, Pe, 0x60 }, { APUSHFL, ynone, P32, 0x9c }, @@ -917,7 +917,7 @@ Optab optab[] = { APUSHL, ypushl, P32, 0x50,0xff,(06),0x6a,0x68 }, { APUSHQ, ypushl, Py, 0x50,0xff,(06),0x6a,0x68 }, { APUSHW, ypushl, Pe, 0x50,0xff,(06),0x6a,0x68 }, - { APXOR, ymm, Py, 0xef,Pe,0xef }, + { APXOR, ymm, Py, 0xef,Pe,0xef }, { AQUAD, ybyte, Px, 8 }, { ARCLB, yshb, Pb, 0xd0,(02),0xc0,(02),0xd2,(02) }, { ARCLL, yshl, Px, 0xd1,(02),0xc1,(02),0xd3,(02),0xd3,(02) }, @@ -932,9 +932,9 @@ Optab optab[] = { AREP, ynone, Px, 0xf3 }, { AREPN, ynone, Px, 0xf2 }, { ARET, ynone, Px, 0xc3 }, - { ARETFW, yret, Pe, 0xcb,0xca }, - { ARETFL, yret, Px, 0xcb,0xca }, - { ARETFQ, yret, Pw, 0xcb,0xca }, + { ARETFW, yret, Pe, 0xcb,0xca }, + { ARETFL, yret, Px, 0xcb,0xca }, + { ARETFQ, yret, Pw, 0xcb,0xca }, { AROLB, yshb, Pb, 0xd0,(00),0xc0,(00),0xd2,(00) }, { AROLL, yshl, Px, 0xd1,(00),0xc1,(00),0xd3,(00),0xd3,(00) }, { AROLQ, yshl, Pw, 0xd1,(00),0xc1,(00),0xd3,(00),0xd3,(00) }, @@ -989,13 +989,13 @@ Optab optab[] = { ASHUFPD, yxshuf, Pq, 0xc6 }, { ASHUFPS, yxshuf, Pm, 0xc6 }, { ASQRTPD, yxm, Pe, 0x51 }, - { ASQRTPS, yxm, Pm, 0x51 }, + { ASQRTPS, yxm, Pm, 0x51 }, { ASQRTSD, yxm, Pf2, 0x51 }, { ASQRTSS, yxm, Pf3, 0x51 }, { ASTC, ynone, Px, 0xf9 }, { ASTD, ynone, Px, 0xfd }, { ASTI, ynone, Px, 0xfb }, - { ASTMXCSR, ystcw, Pm, 0xae,(03),0xae,(03) }, + { ASTMXCSR, ysvrs, Pm, 0xae,(03),0xae,(03) }, { ASTOSB, ynone, Pb, 0xaa }, { ASTOSL, ynone, Px, 0xab }, { ASTOSQ, ynone, Pw, 0xab }, @@ -1008,8 +1008,7 @@ Optab optab[] = { ASUBSD, yxm, Pf2, 0x5c }, { ASUBSS, yxm, Pf3, 0x5c }, { ASUBW, yaddl, Pe, 0x83,(05),0x2d,0x81,(05),0x29,0x2b }, - { ASWAPGS, ynone, Pm, 0x01,0xf8 }, -/* { ASYSCALL, ynone, Px, 0xcd,0x40 },*/ /* INT $64, plan 9 syscall (32-bit) */ + { ASWAPGS, ynone, Pm, 0x01,0xf8 }, { ASYSCALL, ynone, Px, 0x0f,0x05 }, /* fast syscall */ { ATESTB, ytestb, Pb, 0xa8,0xf6,(00),0x84,0x84 }, { ATESTL, ytestl, Px, 0xa9,0xf7,(00),0x85,0x85 }, @@ -1027,7 +1026,7 @@ Optab optab[] = { AWAIT, ynone, Px, 0x9b }, { AWORD, ybyte, Px, 2 }, { AXCHGB, yml_mb, Pb, 0x86,0x86 }, - { AXCHGL, yml_ml, Px, 0x87,0x87 }, + { AXCHGL, yml_ml, Px, 0x87,0x87 }, { AXCHGQ, yml_ml, Pw, 0x87,0x87 }, { AXCHGW, yml_ml, Pe, 0x87,0x87 }, { AXLAT, ynone, Px, 0xd7 }, @@ -1148,27 +1147,27 @@ Optab optab[] = { ACMPXCHGB, yrb_mb, Pb, 0x0f,0xb0 }, { ACMPXCHGL, yrl_ml, Px, 0x0f,0xb1 }, { ACMPXCHGW, yrl_ml, Pe, 0x0f,0xb1 }, - { ACMPXCHGQ, yrl_ml, Pw, 0x0f,0xb1 }, - { ACMPXCHG8B, yscond, Pm, 0xc7,(01) }, - { AINVD, ynone, Pm, 0x08 }, - { AINVLPG, ymbs, Pm, 0x01,(07) }, - { ALFENCE, ynone, Pm, 0xae,0xe8 }, - { AMFENCE, ynone, Pm, 0xae,0xf0 }, - { AMOVNTIL, yrl_ml, Pm, 0xc3 }, - { AMOVNTIQ, yrl_ml, Pw, 0x0f,0xc3 }, - { ARDMSR, ynone, Pm, 0x32 }, - { ARDPMC, ynone, Pm, 0x33 }, - { ARDTSC, ynone, Pm, 0x31 }, - { ARSM, ynone, Pm, 0xaa }, - { ASFENCE, ynone, Pm, 0xae,0xf8 }, - { ASYSRET, ynone, Pm, 0x07 }, - { AWBINVD, ynone, Pm, 0x09 }, - { AWRMSR, ynone, Pm, 0x30 }, + { ACMPXCHGQ, yrl_ml, Pw, 0x0f,0xb1 }, + { ACMPXCHG8B, yscond, Pm, 0xc7,(01) }, + { AINVD, ynone, Pm, 0x08 }, + { AINVLPG, ymbs, Pm, 0x01,(07) }, + { ALFENCE, ynone, Pm, 0xae,0xe8 }, + { AMFENCE, ynone, Pm, 0xae,0xf0 }, + { AMOVNTIL, yrl_ml, Pm, 0xc3 }, + { AMOVNTIQ, yrl_ml, Pw, 0x0f,0xc3 }, + { ARDMSR, ynone, Pm, 0x32 }, + { ARDPMC, ynone, Pm, 0x33 }, + { ARDTSC, ynone, Pm, 0x31 }, + { ARSM, ynone, Pm, 0xaa }, + { ASFENCE, ynone, Pm, 0xae,0xf8 }, + { ASYSRET, ynone, Pm, 0x07 }, + { AWBINVD, ynone, Pm, 0x09 }, + { AWRMSR, ynone, Pm, 0x30 }, - { AXADDB, yrb_mb, Pb, 0x0f,0xc0 }, - { AXADDL, yrl_ml, Px, 0x0f,0xc1 }, - { AXADDQ, yrl_ml, Pw, 0x0f,0xc1 }, - { AXADDW, yrl_ml, Pe, 0x0f,0xc1 }, + { AXADDB, yrb_mb, Pb, 0x0f,0xc0 }, + { AXADDL, yrl_ml, Px, 0x0f,0xc1 }, + { AXADDQ, yrl_ml, Pw, 0x0f,0xc1 }, + { AXADDW, yrl_ml, Pe, 0x0f,0xc1 }, { AEND }, 0 diff --git a/utils/6l/span.c b/utils/6l/span.c index ed60673b..1ce533d0 100644 --- a/utils/6l/span.c +++ b/utils/6l/span.c @@ -120,12 +120,17 @@ xdefine(char *p, int t, vlong v) } void -putsymb(char *s, int t, long v, int ver) +putsymb(char *s, int t, vlong v, int ver) { - int i, f; + int i, f, l; if(t == 'f') s++; + l = 4; + if(!debug['8']){ + lput(v>>32); + l = 8; + } lput(v); if(ver) t += 'a' - 'A'; @@ -146,11 +151,11 @@ putsymb(char *s, int t, long v, int ver) cput(s[i]); cput(0); } - symsize += 4 + 1 + i + 1; + symsize += l + 1 + i + 1; if(debug['n']) { if(t == 'z' || t == 'Z') { - Bprint(&bso, "%c %.8lux ", t, v); + Bprint(&bso, "%c %.8llux ", t, v); for(i=1; s[i] != 0 || s[i+1] != 0; i+=2) { f = ((s[i]&0xff) << 8) | (s[i+1]&0xff); Bprint(&bso, "/%x", f); @@ -159,9 +164,9 @@ putsymb(char *s, int t, long v, int ver) return; } if(ver) - Bprint(&bso, "%c %.8lux %s<%d>\n", t, v, s, ver); + Bprint(&bso, "%c %.8llux %s<%d>\n", t, v, s, ver); else - Bprint(&bso, "%c %.8lux %s\n", t, v, s); + Bprint(&bso, "%c %.8llux %s\n", t, v, s); } } @@ -213,7 +218,7 @@ asmsym(void) putsymb(s->name, 'T', s->value, s->version); /* frame, auto and param after */ - putsymb(".frame", 'm', p->to.offset+4, 0); + putsymb(".frame", 'm', p->to.offset+8, 0); for(a=p->to.autom; a; a=a->link) if(a->type == D_AUTO) @@ -230,9 +235,9 @@ asmsym(void) void asmlc(void) { - long oldpc, oldlc; + vlong oldpc; Prog *p; - long v, s; + long oldlc, v, s; oldpc = INITTEXT; oldlc = 0; |
