Commit d6ff3c11 authored by Russ Cox's avatar Russ Cox

gopack: do not look for Go metadata in non-Go objects

Fixes #2333.

R=r
CC=golang-dev
https://golang.org/cl/5316075
parent 1738dc0e
...@@ -654,7 +654,7 @@ matchhdr(char *p, char **lastp) ...@@ -654,7 +654,7 @@ matchhdr(char *p, char **lastp)
void void
scanobj(Biobuf *b, Arfile *ap, long size) scanobj(Biobuf *b, Arfile *ap, long size)
{ {
int obj; int obj, goobject;
vlong offset, offset1; vlong offset, offset1;
Dir *d; Dir *d;
static int lastobj = -1; static int lastobj = -1;
...@@ -695,9 +695,19 @@ scanobj(Biobuf *b, Arfile *ap, long size) ...@@ -695,9 +695,19 @@ scanobj(Biobuf *b, Arfile *ap, long size)
return; return;
} }
goobject = 1;
offset1 = Boffset(b); offset1 = Boffset(b);
Bseek(b, offset, 0); Bseek(b, offset, 0);
p = Brdstr(b, '\n', 1); 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); Bseek(b, offset1, 0);
if(p == nil || strncmp(p, "go object ", 10) != 0) { if(p == nil || strncmp(p, "go object ", 10) != 0) {
fprint(2, "gopack: malformed object file %s\n", file); fprint(2, "gopack: malformed object file %s\n", file);
...@@ -734,7 +744,7 @@ scanobj(Biobuf *b, Arfile *ap, long size) ...@@ -734,7 +744,7 @@ scanobj(Biobuf *b, Arfile *ap, long size)
} }
Bseek(b, offset, 0); Bseek(b, offset, 0);
objtraverse(objsym, ap); objtraverse(objsym, ap);
if (gflag) { if (gflag && goobject) {
scanpkg(b, size); scanpkg(b, size);
Bseek(b, offset, 0); Bseek(b, offset, 0);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment