summaryrefslogtreecommitdiff
path: root/gcc48-aarch64-ada.patch
diff options
context:
space:
mode:
Diffstat (limited to 'gcc48-aarch64-ada.patch')
-rw-r--r--gcc48-aarch64-ada.patch96
1 files changed, 96 insertions, 0 deletions
diff --git a/gcc48-aarch64-ada.patch b/gcc48-aarch64-ada.patch
new file mode 100644
index 0000000..4d2fb7d
--- /dev/null
+++ b/gcc48-aarch64-ada.patch
@@ -0,0 +1,96 @@
+2014-04-09 Richard Henderson <rth@redhat.com>
+
+ * gcc-interface/Makefile.in: Support aarch64-linux.
+ * init.c: Enable alternate stack support also on aarch64.
+ * types.h (Fat_Pointer): Remove aligned attribute.
+
+--- gcc/ada/gcc-interface/Makefile.in
++++ gcc/ada/gcc-interface/Makefile.in
+@@ -2123,6 +2123,44 @@ ifeq ($(strip $(filter-out alpha% linux%,$(arch) $(osys))),)
+ LIBRARY_VERSION := $(LIB_VERSION)
+ endif
+
++# AArch64 Linux
++ifeq ($(strip $(filter-out aarch64% linux%,$(arch) $(osys))),)
++ LIBGNAT_TARGET_PAIRS = \
++ a-exetim.adb<a-exetim-posix.adb \
++ a-exetim.ads<a-exetim-default.ads \
++ a-intnam.ads<a-intnam-linux.ads \
++ a-synbar.adb<a-synbar-posix.adb \
++ a-synbar.ads<a-synbar-posix.ads \
++ s-inmaop.adb<s-inmaop-posix.adb \
++ s-intman.adb<s-intman-posix.adb \
++ s-linux.ads<s-linux.ads \
++ s-mudido.adb<s-mudido-affinity.adb \
++ s-osinte.ads<s-osinte-linux.ads \
++ s-osinte.adb<s-osinte-posix.adb \
++ s-osprim.adb<s-osprim-posix.adb \
++ s-taprop.adb<s-taprop-linux.adb \
++ s-tasinf.ads<s-tasinf-linux.ads \
++ s-tasinf.adb<s-tasinf-linux.adb \
++ s-tpopsp.adb<s-tpopsp-tls.adb \
++ s-taspri.ads<s-taspri-posix.ads \
++ g-sercom.adb<g-sercom-linux.adb \
++ $(ATOMICS_TARGET_PAIRS) \
++ $(ATOMICS_BUILTINS_TARGET_PAIRS) \
++ system.ads<system-linux-x86_64.ads
++ ## ^^ Note the above is a pretty-close placeholder.
++
++ TOOLS_TARGET_PAIRS = \
++ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
++ indepsw.adb<indepsw-gnu.adb
++
++ EXTRA_GNATRTL_TASKING_OBJS=s-linux.o a-exetim.o
++ EH_MECHANISM=-gcc
++ THREADSLIB=-lpthread -lrt
++ GNATLIB_SHARED=gnatlib-shared-dual
++ GMEM_LIB = gmemlib
++ LIBRARY_VERSION := $(LIB_VERSION)
++endif
++
+ # x86-64 Linux
+ ifeq ($(strip $(filter-out %x86_64 linux%,$(arch) $(osys))),)
+ LIBGNAT_TARGET_PAIRS = \
+--- gcc/ada/init.c
++++ gcc/ada/init.c
+@@ -562,7 +562,9 @@ __gnat_error_handler (int sig, siginfo_t *si ATTRIBUTE_UNUSED, void *ucontext)
+ Raise_From_Signal_Handler (exception, msg);
+ }
+
+-#if defined (i386) || defined (__x86_64__) || defined (__powerpc__)
++#if defined (i386) || defined (__x86_64__) || defined (__powerpc__) \
++ || defined (__aarch64__)
++#define HAVE_GNAT_ALTERNATE_STACK 1
+ /* This must be in keeping with System.OS_Interface.Alternate_Stack_Size. */
+ char __gnat_alternate_stack[16 * 1024]; /* 2 * SIGSTKSZ */
+ #endif
+@@ -603,7 +605,7 @@ __gnat_install_handler (void)
+ handled properly, avoiding a SEGV generation from stack usage by the
+ handler itself. */
+
+-#if defined (i386) || defined (__x86_64__) || defined (__powerpc__)
++#ifdef HAVE_GNAT_ALTERNATE_STACK
+ stack_t stack;
+ stack.ss_sp = __gnat_alternate_stack;
+ stack.ss_size = sizeof (__gnat_alternate_stack);
+@@ -624,7 +626,7 @@ __gnat_install_handler (void)
+ sigaction (SIGILL, &act, NULL);
+ if (__gnat_get_interrupt_state (SIGBUS) != 's')
+ sigaction (SIGBUS, &act, NULL);
+-#if defined (i386) || defined (__x86_64__) || defined (__powerpc__)
++#ifdef HAVE_GNAT_ALTERNATE_STACK
+ act.sa_flags |= SA_ONSTACK;
+ #endif
+ if (__gnat_get_interrupt_state (SIGSEGV) != 's')
+--- gcc/ada/types.h
++++ gcc/ada/types.h
+@@ -79,8 +79,7 @@ typedef Char *Str_Ptr;
+ /* Types for the fat pointer used for strings and the template it
+ points to. */
+ typedef struct {int Low_Bound, High_Bound; } String_Template;
+-typedef struct {const char *Array; String_Template *Bounds; }
+- __attribute ((aligned (sizeof (char *) * 2))) Fat_Pointer;
++typedef struct {const char *Array; String_Template *Bounds; } Fat_Pointer;
+
+ /* Types for Node/Entity Kinds: */
+