return v;
}
+void
+usage(void)
+{
+ fprint(2, "usage: 6l [-options] [-E entry] [-H head] [-L dir] [-T text] [-R rnd] [-o out] files...\n");
+ exits("usage");
+}
+
void
main(int argc, char *argv[])
{
INITDAT = -1;
INITRND = -1;
INITENTRY = 0;
- PKGDIR = nil;
+ LIBDIR = nil;
ARGBEGIN {
default:
debug[c]++;
break;
case 'o': /* output to (next arg) */
- outfile = ARGF();
+ outfile = EARGF(usage());
break;
case 'E':
- a = ARGF();
- if(a)
- INITENTRY = a;
+ INITENTRY = EARGF(usage());
break;
case 'H':
- a = ARGF();
- if(a)
- HEADTYPE = atolwhex(a);
+ HEADTYPE = atolwhex(EARGF(usage()));
+ break;
+ case 'L':
+ LIBDIR = EARGF(usage());
break;
case 'T':
- a = ARGF();
- if(a)
- INITTEXT = atolwhex(a);
+ INITTEXT = atolwhex(EARGF(usage()));
break;
case 'D':
- a = ARGF();
- if(a)
- INITDAT = atolwhex(a);
+ INITDAT = atolwhex(EARGF(usage()));
break;
case 'R':
- a = ARGF();
- if(a)
- INITRND = atolwhex(a);
+ INITRND = atolwhex(EARGF(usage()));
break;
- case 'P':
- a = ARGF();
- if(a)
- PKGDIR = a;
break;
case 'x': /* produce export table */
doexp = 1;
}
if(search) {
- // try dot, -P "pkgdir", and then goroot.
- snprint(pname, sizeof pname, ".%s", name);
- if(access(pname, AEXIST) < 0 && PKGDIR != nil)
- snprint(pname, sizeof pname, "%s/%s", PKGDIR, name);
+ // try dot, -L "libdir", and then goroot.
+ snprint(pname, sizeof pname, "./%s", name);
+ if(access(pname, AEXIST) < 0 && LIBDIR != nil)
+ snprint(pname, sizeof pname, "%s/%s", LIBDIR, name);
if(access(pname, AEXIST) < 0)
snprint(pname, sizeof pname, "%s/pkg/%s", goroot, name);
strcpy(name, pname);
if(p->line == oldlc || p->as == ATEXT || p->as == ANOP) {
if(p->as == ATEXT)
curtext = p;
- if(debug['L'])
+ if(debug['O'])
Bprint(&bso, "%6llux %P\n",
p->pc, p);
continue;
}
- if(debug['L'])
+ if(debug['O'])
Bprint(&bso, "\t\t%6ld", lcsize);
v = (p->pc - oldpc) / MINLC;
while(v) {
if(v < 127)
s = v;
cput(s+128); /* 129-255 +pc */
- if(debug['L'])
+ if(debug['O'])
Bprint(&bso, " pc+%ld*%d(%ld)", s, MINLC, s+128);
v -= s;
lcsize++;
cput(s>>16);
cput(s>>8);
cput(s);
- if(debug['L']) {
+ if(debug['O']) {
if(s > 0)
Bprint(&bso, " lc+%ld(%d,%ld)\n",
s, 0, s);
}
if(s > 0) {
cput(0+s); /* 1-64 +lc */
- if(debug['L']) {
+ if(debug['O']) {
Bprint(&bso, " lc+%ld(%ld)\n", s, 0+s);
Bprint(&bso, "%6llux %P\n",
p->pc, p);
}
} else {
cput(64-s); /* 65-128 -lc */
- if(debug['L']) {
+ if(debug['O']) {
Bprint(&bso, " lc%ld(%ld)\n", s, 64-s);
Bprint(&bso, "%6llux %P\n",
p->pc, p);
cput(s);
lcsize++;
}
- if(debug['v'] || debug['L'])
+ if(debug['v'] || debug['O'])
Bprint(&bso, "lcsize = %ld\n", lcsize);
Bflush(&bso);
}