summaryrefslogtreecommitdiff
path: root/tools/prelink-riscv.c
diff options
context:
space:
mode:
authorMarcus Comstedt <marcus@mc.pp.se>2019-08-02 19:45:16 +0200
committerAndes <uboot@andestech.com>2019-08-15 13:42:28 +0800
commit4539926a9c47638951f29f550f3a640e4c223032 (patch)
treec15cd3ea46c783dc668e0faeea309da9c8a00c5e /tools/prelink-riscv.c
parente604410d3eafc77e1b9a7fbb0580a23e528f0037 (diff)
riscv: tools: Add big endian target support to prelink-riscv
Signed-off-by: Marcus Comstedt <marcus@mc.pp.se> Cc: Rick Chen <rick@andestech.com> Reviewed-by: Rick Chen <rick@andestech.com>
Diffstat (limited to 'tools/prelink-riscv.c')
-rw-r--r--tools/prelink-riscv.c34
1 files changed, 29 insertions, 5 deletions
diff --git a/tools/prelink-riscv.c b/tools/prelink-riscv.c
index a900a1497a..b0467949eb 100644
--- a/tools/prelink-riscv.c
+++ b/tools/prelink-riscv.c
@@ -47,12 +47,28 @@ const char *argv0;
exit(EXIT_FAILURE); \
} while (0)
+#define PRELINK_BYTEORDER le
#define PRELINK_INC_BITS 32
#include "prelink-riscv.inc"
+#undef PRELINK_BYTEORDER
#undef PRELINK_INC_BITS
+#define PRELINK_BYTEORDER le
#define PRELINK_INC_BITS 64
#include "prelink-riscv.inc"
+#undef PRELINK_BYTEORDER
+#undef PRELINK_INC_BITS
+
+#define PRELINK_BYTEORDER be
+#define PRELINK_INC_BITS 32
+#include "prelink-riscv.inc"
+#undef PRELINK_BYTEORDER
+#undef PRELINK_INC_BITS
+
+#define PRELINK_BYTEORDER be
+#define PRELINK_INC_BITS 64
+#include "prelink-riscv.inc"
+#undef PRELINK_BYTEORDER
#undef PRELINK_INC_BITS
int main(int argc, const char *const *argv)
@@ -88,11 +104,19 @@ int main(int argc, const char *const *argv)
die("Invalid ELF file %s", argv[1]);
bool is64 = e_ident[EI_CLASS] == ELFCLASS64;
-
- if (is64)
- prelink64(data);
- else
- prelink32(data);
+ bool isbe = e_ident[EI_DATA] == ELFDATA2MSB;
+
+ if (is64) {
+ if (isbe)
+ prelink_be64(data);
+ else
+ prelink_le64(data);
+ } else {
+ if (isbe)
+ prelink_be32(data);
+ else
+ prelink_le32(data);
+ }
return 0;
}