mirror of
https://github.com/golang/go
synced 2024-11-02 11:50:30 +00:00
gopack: do not look for Go metadata in non-Go objects
Fixes #2333. R=r CC=golang-dev https://golang.org/cl/5316075
This commit is contained in:
parent
1738dc0e71
commit
d6ff3c1177
1 changed files with 12 additions and 2 deletions
|
@ -654,7 +654,7 @@ matchhdr(char *p, char **lastp)
|
|||
void
|
||||
scanobj(Biobuf *b, Arfile *ap, long size)
|
||||
{
|
||||
int obj;
|
||||
int obj, goobject;
|
||||
vlong offset, offset1;
|
||||
Dir *d;
|
||||
static int lastobj = -1;
|
||||
|
@ -695,9 +695,19 @@ scanobj(Biobuf *b, Arfile *ap, long size)
|
|||
return;
|
||||
}
|
||||
|
||||
goobject = 1;
|
||||
offset1 = Boffset(b);
|
||||
Bseek(b, offset, 0);
|
||||
p = Brdstr(b, '\n', 1);
|
||||
|
||||
// After the go object header comes the Go metadata,
|
||||
// followed by ! on a line by itself. If this is not a Go object,
|
||||
// the ! comes immediately. Catch that so we can avoid
|
||||
// the call to scanpkg below, since scanpkg assumes that the
|
||||
// Go metadata is present.
|
||||
if(Bgetc(b) == '!')
|
||||
goobject = 0;
|
||||
|
||||
Bseek(b, offset1, 0);
|
||||
if(p == nil || strncmp(p, "go object ", 10) != 0) {
|
||||
fprint(2, "gopack: malformed object file %s\n", file);
|
||||
|
@ -734,7 +744,7 @@ scanobj(Biobuf *b, Arfile *ap, long size)
|
|||
}
|
||||
Bseek(b, offset, 0);
|
||||
objtraverse(objsym, ap);
|
||||
if (gflag) {
|
||||
if (gflag && goobject) {
|
||||
scanpkg(b, size);
|
||||
Bseek(b, offset, 0);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue