From: Russ Cox Date: Wed, 23 Jul 2014 14:17:59 +0000 (-0400) Subject: liblink: more precise literal word comparison on arm X-Git-Tag: go1.4beta1~1025 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=b916dc19921a799c3fc9d1bcc704cfd0b0bf08d0;p=gostls13.git liblink: more precise literal word comparison on arm There are fields in the Addr that do not matter for the purpose of deciding that the same word is already in the current literal pool. Copy only the fields that do matter. This came up when comparing against the Go version because the way it is invoked doesn't copy a few fields (like node) that are never directly used by liblink itself. Also remove a stray print that is not well-defined in the new liblink. (Cannot use %D outside of %P, because %D needs the outer Prog*.) LGTM=minux R=minux CC=golang-codereviews https://golang.org/cl/119000043 --- diff --git a/src/liblink/asm5.c b/src/liblink/asm5.c index 6ff29f2e60..73a31862f5 100644 --- a/src/liblink/asm5.c +++ b/src/liblink/asm5.c @@ -953,7 +953,11 @@ addpool(Link *ctxt, Prog *p, Addr *a) switch(c) { default: - t.to = *a; + t.to.offset = a->offset; + t.to.sym = a->sym; + t.to.type = a->type; + t.to.name = a->name; + if(ctxt->flag_shared && t.to.sym != nil) t.pcrel = p; break; @@ -1102,7 +1106,6 @@ aclass(Link *ctxt, Addr *a) case D_STATIC: if(a->sym == 0 || a->sym->name == 0) { print("null sym external\n"); - print("%D\n", a); return C_GOK; } ctxt->instoffset = 0; // s.b. unused but just in case