diff options
author | Russ Cox <rsc@golang.org> | 2013-03-10 18:19:53 -0400 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2013-03-10 18:19:53 -0400 |
commit | 1bf689a16154f8005d73896783e6e714ba9a1479 (patch) | |
tree | 67e36fbae246c382c6cc34eb2950ae2ca93195b8 /src/cmd/5l | |
parent | cd65be6085d94bc93514854c8d609871c5fa9376 (diff) | |
download | go-1bf689a16154f8005d73896783e6e714ba9a1479.tar.gz |
cmd/ld: replace dynimpname with extname
Dynimpname was getting too confusing.
Replace flag-like checks with tests of s->type.
R=ken2
CC=golang-dev
https://codereview.appspot.com/7594046
Diffstat (limited to 'src/cmd/5l')
-rw-r--r-- | src/cmd/5l/asm.c | 25 | ||||
-rw-r--r-- | src/cmd/5l/l.h | 2 |
2 files changed, 10 insertions, 17 deletions
diff --git a/src/cmd/5l/asm.c b/src/cmd/5l/asm.c index 097b74e31..4afbedfc4 100644 --- a/src/cmd/5l/asm.c +++ b/src/cmd/5l/asm.c @@ -125,7 +125,7 @@ adddynrel(Sym *s, Reloc *r) // Handle relocations found in ELF object files. case 256 + R_ARM_PLT32: r->type = D_CALL; - if(targ->dynimpname != nil && !(targ->cgoexport & CgoExportDynamic)) { + if(targ->type == SDYNIMPORT) { addpltsym(targ); r->sym = lookup(".plt", 0); r->add = braddoff(r->add, targ->plt / 4); @@ -138,7 +138,7 @@ adddynrel(Sym *s, Reloc *r) return; case 256 + R_ARM_GOT32: // R_ARM_GOT_BREL - if(targ->dynimpname == nil || (targ->cgoexport & CgoExportDynamic)) { + if(targ->type != SDYNIMPORT) { addgotsyminternal(targ); } else { addgotsym(targ); @@ -149,7 +149,7 @@ adddynrel(Sym *s, Reloc *r) return; case 256 + R_ARM_GOT_PREL: // GOT(S) + A - P - if(targ->dynimpname == nil || (targ->cgoexport & CgoExportDynamic)) { + if(targ->type != SDYNIMPORT) { addgotsyminternal(targ); } else { addgotsym(targ); @@ -171,7 +171,7 @@ adddynrel(Sym *s, Reloc *r) case 256 + R_ARM_CALL: r->type = D_CALL; - if(targ->dynimpname != nil && !(targ->cgoexport & CgoExportDynamic)) { + if(targ->type == SDYNIMPORT) { addpltsym(targ); r->sym = lookup(".plt", 0); r->add = braddoff(r->add, targ->plt / 4); @@ -184,7 +184,7 @@ adddynrel(Sym *s, Reloc *r) return; case 256 + R_ARM_ABS32: - if(targ->dynimpname != nil && !(targ->cgoexport & CgoExportDynamic)) + if(targ->type == SDYNIMPORT) diag("unexpected R_ARM_ABS32 relocation for dynamic symbol %s", targ->name); r->type = D_ADDR; return; @@ -201,7 +201,7 @@ adddynrel(Sym *s, Reloc *r) case 256 + R_ARM_PC24: case 256 + R_ARM_JUMP24: r->type = D_CALL; - if(targ->dynimpname != nil && !(targ->cgoexport & CgoExportDynamic)) { + if(targ->type == SDYNIMPORT) { addpltsym(targ); r->sym = lookup(".plt", 0); r->add = braddoff(r->add, targ->plt / 4); @@ -210,7 +210,7 @@ adddynrel(Sym *s, Reloc *r) } // Handle references to ELF symbols from our own object files. - if(targ->dynimpname == nil || (targ->cgoexport & CgoExportDynamic)) + if(targ->type != SDYNIMPORT) return; switch(r->type) { @@ -437,20 +437,13 @@ adddynsym(Sym *s) if(s->dynid >= 0) return; - if(s->dynimpname == nil) { - s->dynimpname = s->name; - //diag("adddynsym: no dynamic name for %s", s->name); - } - if(iself) { s->dynid = nelfsym++; d = lookup(".dynsym", 0); /* name */ - name = s->dynimpname; - if(name == nil) - name = s->name; + name = s->extname; adduint32(d, addstring(lookup(".dynstr", 0), name)); /* value */ @@ -472,7 +465,7 @@ adddynsym(Sym *s) adduint8(d, 0); /* shndx */ - if(!(s->cgoexport & CgoExportDynamic) && s->dynimpname != nil) + if(s->type == SDYNIMPORT) adduint16(d, SHN_UNDEF); else { switch(s->type) { diff --git a/src/cmd/5l/l.h b/src/cmd/5l/l.h index 0b31b07ab..78f99d873 100644 --- a/src/cmd/5l/l.h +++ b/src/cmd/5l/l.h @@ -134,6 +134,7 @@ struct Prog struct Sym { char* name; + char* extname; // name used in external object files short type; short version; uchar dupok; @@ -163,7 +164,6 @@ struct Sym Sym* reachparent; Sym* queue; char* file; - char* dynimpname; char* dynimplib; char* dynimpvers; struct Section* sect; |