summaryrefslogtreecommitdiff
path: root/src/liblink/ld.c
diff options
context:
space:
mode:
authorTianon Gravi <admwiggin@gmail.com>2015-01-15 11:54:00 -0700
committerTianon Gravi <admwiggin@gmail.com>2015-01-15 11:54:00 -0700
commitf154da9e12608589e8d5f0508f908a0c3e88a1bb (patch)
treef8255d51e10c6f1e0ed69702200b966c9556a431 /src/liblink/ld.c
parent8d8329ed5dfb9622c82a9fbec6fd99a580f9c9f6 (diff)
downloadgolang-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.c36
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)
{