fix gotest by fixing nm -s to print in file order by storing a sequence number

as the .6 file is read.   now tests will be run in file order.

R=rsc
DELTA=9  (6 added, 1 deleted, 2 changed)
OCL=27542
CL=27544
This commit is contained in:
Rob Pike 2009-04-15 21:57:55 -07:00
parent 55faa5f10e
commit 57bff962d9
3 changed files with 8 additions and 3 deletions

View file

@ -85,6 +85,7 @@ struct Sym
char type;
char *name;
char *gotype;
int sequence; // order in file
};
/*
* End of Plan 9 a.out.h

View file

@ -185,11 +185,13 @@ cmp(void *vs, void *vt)
s = vs;
t = vt;
if(nflag)
if(nflag) // sort on address (numeric) order
if((*s)->value < (*t)->value)
return -1;
else
return (*s)->value > (*t)->value;
if(sflag) // sort on file order (sequence)
return (*s)->sequence - (*t)->sequence;
return strcmp((*s)->name, (*t)->name);
}
/*
@ -298,8 +300,7 @@ printsyms(Sym **symptr, long nsym)
char *cp;
char path[512];
if(!sflag)
qsort(symptr, nsym, sizeof(*symptr), (void*)cmp);
qsort(symptr, nsym, sizeof(*symptr), (void*)cmp);
wid = 0;
for (i=0; i<nsym; i++) {

View file

@ -108,6 +108,8 @@ static void objreset(void);
static void objlookup(int, char *, int, uint);
static void objupdate(int, int);
static int sequence;
int
objtype(Biobuf *bp, char **name)
{
@ -295,6 +297,7 @@ objlookup(int id, char *name, int type, uint sig)
sp->s.type = type;
sp->s.sig = sig;
sp->s.value = islocal(type) ? MAXOFF : 0;
sp->s.sequence = sequence++;
names[id] = &sp->s;
sp->next = hash[h];
hash[h] = sp;