From: Will Newton <w...@linaro.org> --- 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 mailing list Gcl-devel@gnu.org https://lists.gnu.org/mailman/listinfo/gcl-devel