diff options
author | Tianon Gravi <admwiggin@gmail.com> | 2015-01-15 11:54:00 -0700 |
---|---|---|
committer | Tianon Gravi <admwiggin@gmail.com> | 2015-01-15 11:54:00 -0700 |
commit | f154da9e12608589e8d5f0508f908a0c3e88a1bb (patch) | |
tree | f8255d51e10c6f1e0ed69702200b966c9556a431 /src/liblink/ld.c | |
parent | 8d8329ed5dfb9622c82a9fbec6fd99a580f9c9f6 (diff) | |
download | golang-upstream/1.4.tar.gz |
Imported Upstream version 1.4upstream/1.4
Diffstat (limited to 'src/liblink/ld.c')
-rw-r--r-- | src/liblink/ld.c | 36 |
1 files changed, 27 insertions, 9 deletions
diff --git a/src/liblink/ld.c b/src/liblink/ld.c index 9ea0e9a73..6d0fe4a2a 100644 --- a/src/liblink/ld.c +++ b/src/liblink/ld.c @@ -130,16 +130,26 @@ find1(int32 l, int c) } void -nuxiinit(void) +nuxiinit(LinkArch *arch) { int i, c; + if(arch->endian != BigEndian && arch->endian != LittleEndian) + sysfatal("unknown endian (%#x) for arch %s", arch->endian, arch->name); + for(i=0; i<4; i++) { - c = find1(0x04030201L, i+1); - if(i < 2) - inuxi2[i] = c; - if(i < 1) - inuxi1[i] = c; + c = find1(arch->endian, i+1); + if(arch->endian == LittleEndian) { + if(i < 2) + inuxi2[i] = c; + if(i < 1) + inuxi1[i] = c; + } else { + if(i >= 2) + inuxi2[i-2] = c; + if(i >= 3) + inuxi1[i-3] = c; + } inuxi4[i] = c; if(c == i) { inuxi8[i] = c; @@ -149,8 +159,13 @@ nuxiinit(void) inuxi8[i+4] = c; } fnuxi4[i] = c; - fnuxi8[i] = c; - fnuxi8[i+4] = c+4; + if(c == i) { + fnuxi8[i] = c; + fnuxi8[i+4] = c+4; + } else { + fnuxi8[i] = c+4; + fnuxi8[i+4] = c; + } } } @@ -161,7 +176,10 @@ uchar inuxi2[2]; uchar inuxi4[4]; uchar inuxi8[8]; -#define LOG 5 +enum +{ + LOG = 5, +}; void mkfwd(LSym *sym) { |