summaryrefslogtreecommitdiff
path: root/src/liblink/ld.c
diff options
context:
space:
mode:
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)
{