mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-04-20 03:47:16 +02:00
replace all instances of `s-tsmona__linux.adb` with `s-tsmona.adb` Gnat has been tested to build on Loongarch, but bootstrapping it requires replacing main/gcc with the cross-compiled one, in addition to installing gcc-gnat and libgnat, so this can be done later when there is demand for it
247 lines
8.3 KiB
Diff
247 lines
8.3 KiB
Diff
From 3df4788c79c7429b196c7b284af2b4cf9a4b4f8d Mon Sep 17 00:00:00 2001
|
|
From: Ariadne Conill <ariadne@dereferenced.org>
|
|
Date: Fri, 21 Aug 2020 07:07:48 +0000
|
|
Subject: [PATCH 26/35] ada: musl support fixes
|
|
|
|
---
|
|
gcc/ada/Makefile.rtl | 16 ++++++++--------
|
|
gcc/ada/adaint.c | 34 +++++++++++++++++++---------------
|
|
gcc/ada/adaint.h | 10 ++++------
|
|
gcc/ada/terminals.c | 8 ++++----
|
|
4 files changed, 35 insertions(+), 33 deletions(-)
|
|
|
|
diff --git a/gcc/ada/Makefile.rtl b/gcc/ada/Makefile.rtl
|
|
index 32cbdb692..463028fbe 100644
|
|
--- a/gcc/ada/Makefile.rtl
|
|
+++ b/gcc/ada/Makefile.rtl
|
|
@@ -1558,7 +1558,7 @@ ifeq ($(strip $(filter-out %86 linux%,$(target_cpu) $(target_os))),)
|
|
s-intman.adb<libgnarl/s-intman__posix.adb \
|
|
s-tpopsp.adb<libgnarl/s-tpopsp__tls.adb \
|
|
$(TRASYM_DWARF_UNIX_PAIRS) \
|
|
- s-tsmona.adb<libgnat/s-tsmona__linux.adb \
|
|
+ s-tsmona.adb<libgnat/s-tsmona.adb \
|
|
a-exetim.adb<libgnarl/a-exetim__posix.adb \
|
|
a-exetim.ads<libgnarl/a-exetim__default.ads \
|
|
s-linux.ads<libgnarl/s-linux.ads \
|
|
@@ -2144,7 +2144,7 @@ ifeq ($(strip $(filter-out loongarch% linux%,$(target_cpu) $(target_os))),)
|
|
g-sercom.adb<libgnat/g-sercom__linux.adb \
|
|
$(TRASYM_DWARF_UNIX_PAIRS) \
|
|
$(GNATRTL_128BIT_PAIRS) \
|
|
- s-tsmona.adb<libgnat/s-tsmona__linux.adb \
|
|
+ s-tsmona.adb<libgnat/s-tsmona.adb \
|
|
$(ATOMICS_TARGET_PAIRS) \
|
|
$(ATOMICS_BUILTINS_TARGET_PAIRS) \
|
|
system.ads<libgnat/system-linux-loongarch.ads
|
|
@@ -2232,7 +2232,7 @@ ifeq ($(strip $(filter-out powerpc% linux%,$(target_cpu) $(target_os))),)
|
|
s-tasinf.adb<libgnarl/s-tasinf__linux.adb \
|
|
s-taspri.ads<libgnarl/s-taspri__posix.ads \
|
|
$(TRASYM_DWARF_UNIX_PAIRS) \
|
|
- s-tsmona.adb<libgnat/s-tsmona__linux.adb \
|
|
+ s-tsmona.adb<libgnat/s-tsmona.adb \
|
|
$(ATOMICS_TARGET_PAIRS) \
|
|
$(ATOMICS_BUILTINS_TARGET_PAIRS) \
|
|
system.ads<libgnat/system-linux-ppc.ads
|
|
@@ -2267,7 +2267,7 @@ ifeq ($(strip $(filter-out powerpc% linux%,$(target_cpu) $(target_os))),)
|
|
endif
|
|
|
|
# ARM linux, GNU eabi
|
|
-ifeq ($(strip $(filter-out arm% linux-gnueabi%,$(target_cpu) $(target_os))),)
|
|
+ifeq ($(strip $(filter-out arm% linux-gnueabi% linux-musleabi% linux-muslgnueabi%,$(target_cpu) $(target_os))),)
|
|
LIBGNAT_TARGET_PAIRS = \
|
|
a-intnam.ads<libgnarl/a-intnam__linux.ads \
|
|
s-inmaop.adb<libgnarl/s-inmaop__posix.adb \
|
|
@@ -2311,7 +2311,7 @@ ifeq ($(strip $(filter-out aarch64% linux%,$(target_cpu) $(target_os))),)
|
|
s-intman.adb<libgnarl/s-intman__posix.adb \
|
|
s-linux.ads<libgnarl/s-linux.ads \
|
|
$(TRASYM_DWARF_UNIX_PAIRS) \
|
|
- s-tsmona.adb<libgnat/s-tsmona__linux.adb \
|
|
+ s-tsmona.adb<libgnat/s-tsmona.adb \
|
|
s-mudido.adb<libgnarl/s-mudido__affinity.adb \
|
|
s-osinte.ads<libgnarl/s-osinte__linux.ads \
|
|
s-osinte.adb<libgnarl/s-osinte__posix.adb \
|
|
@@ -2488,7 +2488,7 @@ ifeq ($(strip $(filter-out %ia64 linux%,$(target_cpu) $(target_os))),)
|
|
s-tpopsp.adb<libgnarl/s-tpopsp__tls.adb \
|
|
s-taspri.ads<libgnarl/s-taspri__posix-noaltstack.ads \
|
|
$(TRASYM_DWARF_UNIX_PAIRS) \
|
|
- s-tsmona.adb<libgnat/s-tsmona__linux.adb \
|
|
+ s-tsmona.adb<libgnat/s-tsmona.adb \
|
|
$(ATOMICS_TARGET_PAIRS) \
|
|
$(ATOMICS_BUILTINS_TARGET_PAIRS) \
|
|
$(GNATRTL_128BIT_PAIRS) \
|
|
@@ -2592,7 +2592,7 @@ ifeq ($(strip $(filter-out %x86_64 linux%,$(target_cpu) $(target_os))),)
|
|
s-tpopsp.adb<libgnarl/s-tpopsp__tls.adb \
|
|
s-taspri.ads<libgnarl/s-taspri__posix.ads \
|
|
$(TRASYM_DWARF_UNIX_PAIRS) \
|
|
- s-tsmona.adb<libgnat/s-tsmona__linux.adb \
|
|
+ s-tsmona.adb<libgnat/s-tsmona.adb \
|
|
$(ATOMICS_TARGET_PAIRS) \
|
|
$(X86_64_TARGET_PAIRS) \
|
|
$(SIMD_PATH_TARGET_PAIRS) \
|
|
@@ -2637,7 +2637,7 @@ ifeq ($(strip $(filter-out %x32 linux%,$(target_cpu) $(target_os))),)
|
|
s-tpopsp.adb<libgnarl/s-tpopsp__tls.adb \
|
|
s-taspri.ads<libgnarl/s-taspri__posix.ads \
|
|
$(TRASYM_DWARF_UNIX_PAIRS) \
|
|
- s-tsmona.adb<libgnat/s-tsmona__linux.adb \
|
|
+ s-tsmona.adb<libgnat/s-tsmona.adb \
|
|
$(ATOMICS_TARGET_PAIRS) \
|
|
$(X86_64_TARGET_PAIRS) \
|
|
$(SIMD_PATH_TARGET_PAIRS) \
|
|
diff --git a/gcc/ada/adaint.c b/gcc/ada/adaint.c
|
|
index 74aa3c412..ef6118f37 100644
|
|
--- a/gcc/ada/adaint.c
|
|
+++ b/gcc/ada/adaint.c
|
|
@@ -94,6 +94,11 @@
|
|
#include <sys/param.h>
|
|
#include <sys/pstat.h>
|
|
#endif
|
|
+
|
|
+#if defined (linux) || defined(__linux__)
|
|
+#define _GNU_SOURCE 1
|
|
+#include <sched.h>
|
|
+#endif
|
|
|
|
#ifdef __PikeOS__
|
|
#define __BSD_VISIBLE 1
|
|
@@ -3465,7 +3470,6 @@ __gnat_lwp_self (void)
|
|
#endif
|
|
|
|
#if defined (__linux__)
|
|
-#include <sched.h>
|
|
|
|
/* glibc versions earlier than 2.7 do not define the routines to handle
|
|
dynamically allocated CPU sets. For these targets, we use the static
|
|
@@ -3475,7 +3479,7 @@ __gnat_lwp_self (void)
|
|
|
|
/* Dynamic cpu sets */
|
|
|
|
-cpu_set_t *
|
|
+void *
|
|
__gnat_cpu_alloc (size_t count)
|
|
{
|
|
return CPU_ALLOC (count);
|
|
@@ -3488,33 +3492,33 @@ __gnat_cpu_alloc_size (size_t count)
|
|
}
|
|
|
|
void
|
|
-__gnat_cpu_free (cpu_set_t *set)
|
|
+__gnat_cpu_free (void *set)
|
|
{
|
|
- CPU_FREE (set);
|
|
+ CPU_FREE ((cpu_set_t *) set);
|
|
}
|
|
|
|
void
|
|
-__gnat_cpu_zero (size_t count, cpu_set_t *set)
|
|
+__gnat_cpu_zero (size_t count, void *set)
|
|
{
|
|
- CPU_ZERO_S (count, set);
|
|
+ CPU_ZERO_S (count, (cpu_set_t *) set);
|
|
}
|
|
|
|
void
|
|
-__gnat_cpu_set (int cpu, size_t count, cpu_set_t *set)
|
|
+__gnat_cpu_set (int cpu, size_t count, void *set)
|
|
{
|
|
/* Ada handles CPU numbers starting from 1, while C identifies the first
|
|
CPU by a 0, so we need to adjust. */
|
|
- CPU_SET_S (cpu - 1, count, set);
|
|
+ CPU_SET_S (cpu - 1, count, (cpu_set_t *) set);
|
|
}
|
|
|
|
#else /* !CPU_ALLOC */
|
|
|
|
/* Static cpu sets */
|
|
|
|
-cpu_set_t *
|
|
+void *
|
|
__gnat_cpu_alloc (size_t count ATTRIBUTE_UNUSED)
|
|
{
|
|
- return (cpu_set_t *) xmalloc (sizeof (cpu_set_t));
|
|
+ return xmalloc (sizeof (cpu_set_t));
|
|
}
|
|
|
|
size_t
|
|
@@ -3524,23 +3528,23 @@ __gnat_cpu_alloc_size (size_t count ATTRIBUTE_UNUSED)
|
|
}
|
|
|
|
void
|
|
-__gnat_cpu_free (cpu_set_t *set)
|
|
+__gnat_cpu_free (void *set)
|
|
{
|
|
free (set);
|
|
}
|
|
|
|
void
|
|
-__gnat_cpu_zero (size_t count ATTRIBUTE_UNUSED, cpu_set_t *set)
|
|
+__gnat_cpu_zero (size_t count ATTRIBUTE_UNUSED, void *set)
|
|
{
|
|
- CPU_ZERO (set);
|
|
+ CPU_ZERO ((cpu_set_t *) set);
|
|
}
|
|
|
|
void
|
|
-__gnat_cpu_set (int cpu, size_t count ATTRIBUTE_UNUSED, cpu_set_t *set)
|
|
+__gnat_cpu_set (int cpu, size_t count ATTRIBUTE_UNUSED, void *set)
|
|
{
|
|
/* Ada handles CPU numbers starting from 1, while C identifies the first
|
|
CPU by a 0, so we need to adjust. */
|
|
- CPU_SET (cpu - 1, set);
|
|
+ CPU_SET (cpu - 1, (cpu_set_t *) set);
|
|
}
|
|
#endif /* !CPU_ALLOC */
|
|
#endif /* __linux__ */
|
|
diff --git a/gcc/ada/adaint.h b/gcc/ada/adaint.h
|
|
index 0cbfd0e15..f97ed905b 100644
|
|
--- a/gcc/ada/adaint.h
|
|
+++ b/gcc/ada/adaint.h
|
|
@@ -319,13 +319,11 @@ extern void *__gnat_lwp_self (void);
|
|
|
|
/* Routines for interface to required CPU set primitives */
|
|
|
|
-#include <sched.h>
|
|
-
|
|
-extern cpu_set_t *__gnat_cpu_alloc (size_t);
|
|
+extern void * __gnat_cpu_alloc (size_t);
|
|
extern size_t __gnat_cpu_alloc_size (size_t);
|
|
-extern void __gnat_cpu_free (cpu_set_t *);
|
|
-extern void __gnat_cpu_zero (size_t, cpu_set_t *);
|
|
-extern void __gnat_cpu_set (int, size_t, cpu_set_t *);
|
|
+extern void __gnat_cpu_free (void *);
|
|
+extern void __gnat_cpu_zero (size_t, void *);
|
|
+extern void __gnat_cpu_set (int, size_t, void *);
|
|
#endif
|
|
|
|
#if defined (_WIN32)
|
|
diff --git a/gcc/ada/terminals.c b/gcc/ada/terminals.c
|
|
index 05af82c27..626ac35bc 100644
|
|
--- a/gcc/ada/terminals.c
|
|
+++ b/gcc/ada/terminals.c
|
|
@@ -1134,7 +1134,7 @@ __gnat_setup_winsize (void *desc ATTRIBUTE_UNUSED,
|
|
/* POSIX does not specify how to open the master side of a terminal.Several
|
|
methods are available (system specific):
|
|
1- using a cloning device (USE_CLONE_DEVICE)
|
|
- 2- getpt (USE_GETPT)
|
|
+ 2- posix_openpt (USE_POSIX_OPENPT)
|
|
3- openpty (USE_OPENPTY)
|
|
|
|
When using the cloning device method, the macro USE_CLONE_DEVICE should
|
|
@@ -1148,7 +1148,7 @@ __gnat_setup_winsize (void *desc ATTRIBUTE_UNUSED,
|
|
#if defined (__APPLE__) || defined (BSD)
|
|
#define USE_OPENPTY
|
|
#elif defined (__linux__)
|
|
-#define USE_GETPT
|
|
+#define USE_POSIX_OPENPT
|
|
#elif defined (__sun__)
|
|
#define USE_CLONE_DEVICE "/dev/ptmx"
|
|
#elif defined (_AIX)
|
|
@@ -1197,8 +1197,8 @@ allocate_pty_desc (pty_desc **desc) {
|
|
int master_fd = -1;
|
|
char *slave_name = NULL;
|
|
|
|
-#ifdef USE_GETPT
|
|
- master_fd = getpt ();
|
|
+#if defined(USE_POSIX_OPENPT)
|
|
+ master_fd = posix_openpt(O_RDWR | O_NOCTTY);
|
|
#elif defined (USE_OPENPTY)
|
|
status = openpty (&master_fd, &slave_fd, NULL, NULL, NULL);
|
|
#elif defined (USE_CLONE_DEVICE)
|