[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gcl-devel] [PATCH 3/6] Add support for AArch64
From: |
Will Newton |
Subject: |
[Gcl-devel] [PATCH 3/6] Add support for AArch64 |
Date: |
Thu, 17 Jul 2014 13:44:53 +0100 |
From: Will Newton <address@hidden>
---
gcl/configure | 19 ++++++++++++++++++-
gcl/configure.in | 6 +++++-
gcl/h/aarch64-linux.h | 5 +++++
gcl/h/elf64_aarch64_reloc.h | 43 +++++++++++++++++++++++++++++++++++++++++++
4 files changed, 71 insertions(+), 2 deletions(-)
create mode 100755 gcl/h/aarch64-linux.h
create mode 100644 gcl/h/elf64_aarch64_reloc.h
diff --git a/gcl/configure b/gcl/configure
index 4b9327f..7ae3ef2 100755
--- a/gcl/configure
+++ b/gcl/configure
@@ -2882,6 +2882,9 @@ case $canonical in
arm*linux*)
use=arm-linux;;
+ aarch64*linux*)
+ use=aarch64-linux;;
+
s390*linux*)
use=s390-linux;;
@@ -8558,7 +8561,18 @@ _ACEOF
fi
- for ac_func in print_insn_alpha
+ for ac_func in print_insn_aarch64
+do :
+ ac_fn_c_check_func "$LINENO" "print_insn_aarch64"
"ac_cv_func_print_insn_aarch64"
+if test "x$ac_cv_func_print_insn_aarch64" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_PRINT_INSN_AARCH64 1
+_ACEOF
+
+$as_echo "#define PRINT_INSN print_insn_aarch64" >>confdefs.h
+
+else
+ for ac_func in print_insn_alpha
do :
ac_fn_c_check_func "$LINENO" "print_insn_alpha" "ac_cv_func_print_insn_alpha"
if test "x$ac_cv_func_print_insn_alpha" = xyes; then :
@@ -9244,6 +9258,9 @@ fi
done
fi
+done
+
+fi
done
diff --git a/gcl/configure.in b/gcl/configure.in
index b0c9cda..7514688 100644
--- a/gcl/configure.in
+++ b/gcl/configure.in
@@ -171,6 +171,9 @@ case $canonical in
arm*linux*)
use=arm-linux;;
+ aarch64*linux*)
+ use=aarch64-linux;;
+
s390*linux*)
use=s390-linux;;
@@ -2430,6 +2433,7 @@ AC_CHECK_FUNCS(feenableexcept)
AC_CHECK_HEADERS(dis-asm.h,
AC_CHECK_LIB(opcodes,init_disassemble_info)
+
AC_CHECK_FUNCS(print_insn_aarch64,AC_DEFINE([PRINT_INSN],[print_insn_aarch64],[instruction
disassemble routine]),
AC_CHECK_FUNCS(print_insn_alpha,AC_DEFINE([PRINT_INSN],[print_insn_alpha],[instruction
disassemble routine]),
AC_CHECK_FUNCS(print_insn_avr,AC_DEFINE([PRINT_INSN],[print_insn_avr],[instruction
disassemble routine]),
AC_CHECK_FUNCS(print_insn_big_arm,AC_DEFINE([PRINT_INSN],[insn_big_arm],[instruction
disassemble routine]),
@@ -2445,7 +2449,7 @@ AC_CHECK_HEADERS(dis-asm.h,
AC_CHECK_FUNCS(print_insn_s390,AC_DEFINE([PRINT_INSN],[print_insn_s390],[instruction
disassemble routine]),
AC_CHECK_FUNCS(print_insn_sh64,AC_DEFINE([PRINT_INSN],[print_insn_sh64],[instruction
disassemble routine]),
AC_CHECK_FUNCS(print_insn_sh,AC_DEFINE([PRINT_INSN],[print_insn_sh],[instruction
disassemble routine]),
-
AC_CHECK_FUNCS(print_insn_sparc,AC_DEFINE([PRINT_INSN],[print_insn_sparc],[instruction
disassemble routine]))))))))))))))))))
+
AC_CHECK_FUNCS(print_insn_sparc,AC_DEFINE([PRINT_INSN],[print_insn_sparc],[instruction
disassemble routine])))))))))))))))))))
#if test $use = "386-linux" ; then
AC_CHECK_HEADERS(asm/sigcontext.h)
diff --git a/gcl/h/aarch64-linux.h b/gcl/h/aarch64-linux.h
new file mode 100755
index 0000000..c2f0fe7
--- /dev/null
+++ b/gcl/h/aarch64-linux.h
@@ -0,0 +1,5 @@
+#include "linux.h"
+
+//#define SGC
+
+#define RELOC_H "elf64_aarch64_reloc.h"
diff --git a/gcl/h/elf64_aarch64_reloc.h b/gcl/h/elf64_aarch64_reloc.h
new file mode 100644
index 0000000..33bd60d
--- /dev/null
+++ b/gcl/h/elf64_aarch64_reloc.h
@@ -0,0 +1,43 @@
+/* .xword: (S+A) */
+#define R_AARCH64_ABS64 257
+/* .word: (S+A) */
+#define R_AARCH64_ABS32 258
+/* B: ((S+A-P) >> 2) & 0x3ffffff. */
+#define R_AARCH64_JUMP26 282
+/* BL: ((S+A-P) >> 2) & 0x3ffffff. */
+#define R_AARCH64_CALL26 283
+/* ADRH: ((PG(S+A)-PG(P)) >> 12) & 0x1fffff */
+#define R_AARCH64_ADR_PREL_PG_HI21 275
+/* ADD: (S+A) & 0xfff */
+#define R_AARCH64_ADD_ABS_LO12_NC 277
+/* LD/ST32: (S+A) & 0xffc */
+#define R_AARCH64_LDST32_ABS_LO12_NC 285
+/* LD/ST64: (S+A) & 0xff8 */
+#define R_AARCH64_LDST64_ABS_LO12_NC 286
+
+ case R_AARCH64_ABS64:
+ store_val(where,~0L,s+a);
+ break;
+ case R_AARCH64_ABS32:
+ store_val(where,MASK(32),s+a);
+ break;
+ case R_AARCH64_JUMP26:
+ case R_AARCH64_CALL26:
+ store_vals(where,MASK(26),((long)(s+a-p)) / 4);
+ break;
+ case R_AARCH64_ADR_PREL_PG_HI21:
+#define PG(x) ((x) & ~0xfff)
+ s = ((long)(PG(s+a)-PG(p))) / 0x1000;
+ store_val(where,MASK(2) << 29, (s & 0x3) << 29);
+ store_val(where,MASK(19) << 5, (s & 0x1ffffc) << 3);
+#undef PG
+ break;
+ case R_AARCH64_ADD_ABS_LO12_NC:
+ store_val(where,MASK(12) << 10,(s+a) << 10);
+ break;
+ case R_AARCH64_LDST32_ABS_LO12_NC:
+ store_val(where,MASK(12) << 10,((s+a) & 0xffc) << 8);
+ break;
+ case R_AARCH64_LDST64_ABS_LO12_NC:
+ store_val(where,MASK(12) << 10,((s+a) & 0xff8) << 7);
+ break;
--
1.9.3
- [Gcl-devel] [PATCH 0/6] ARM and AArch64 patches for 2.6.11, Will Newton, 2014/07/17
- [Gcl-devel] [PATCH 2/6] o/main.c: Ensure cs_org is always pointer aligned, Will Newton, 2014/07/17
- [Gcl-devel] [PATCH 1/6] config.{sub, guess}: Update to latest versions of GNU config, Will Newton, 2014/07/17
- [Gcl-devel] [PATCH 4/6] Check for preceding NULL in find_init_name1, Will Newton, 2014/07/17
- [Gcl-devel] [PATCH 3/6] Add support for AArch64,
Will Newton <=
- [Gcl-devel] [PATCH 5/6] Simplify print_insn logic in configure, Will Newton, 2014/07/17
- [Gcl-devel] [PATCH 6/6] Ensure that libgcc is linked dynamically on ARM, Will Newton, 2014/07/17