diff options
Diffstat (limited to 'src/cmd')
| -rw-r--r-- | src/cmd/ld/ldelf.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/cmd/ld/ldelf.c b/src/cmd/ld/ldelf.c index 894b9ee2f4..90da4aeb8f 100644 --- a/src/cmd/ld/ldelf.c +++ b/src/cmd/ld/ldelf.c @@ -327,7 +327,7 @@ ldelf(Biobuf *f, char *pkg, int64 len, char *pn) int32 base; uint64 add, info; char *name; - int i, j, rela, is64, n; + int i, j, rela, is64, n, flag; uchar hdrbuf[64]; uchar *p; ElfHdrBytes *hdr; @@ -616,6 +616,13 @@ ldelf(Biobuf *f, char *pkg, int64 len, char *pn) diag("%s: duplicate definition of %s", pn, s->name); s->external = 1; } + if(obj->machine == ElfMachPower64) { + flag = sym.other >> 5; + if(2 <= flag && flag <= 6) + s->localentry = 1 << (flag - 2); + else if(flag == 7) + diag("%s: invalid sym.other 0x%x for %s", pn, sym.other, s->name); + } } // Sort outer lists by address, adding to textp. |
