]> Cypherpunks repositories - gostls13.git/commitdiff
liblink: more precise literal word comparison on arm
authorRuss Cox <rsc@golang.org>
Wed, 23 Jul 2014 14:17:59 +0000 (10:17 -0400)
committerRuss Cox <rsc@golang.org>
Wed, 23 Jul 2014 14:17:59 +0000 (10:17 -0400)
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

src/liblink/asm5.c

index 6ff29f2e601bb05e8abb54bec09d6cf7dabe8691..73a31862f51856da69b9b5aa9bbab8d416949341 100644 (file)
@@ -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