232 lines
7.8 KiB
Plaintext
232 lines
7.8 KiB
Plaintext
#! /bin/sh -e
|
|
|
|
# Description: Ada support for GNU/k*BSD
|
|
# Author: Aurelien Jarno <aurel32@debian.Org>
|
|
# Status: submitted.
|
|
|
|
dir=
|
|
if [ $# -eq 3 -a "$2" = '-d' ]; then
|
|
pdir="-d $3"
|
|
dir="$3/"
|
|
elif [ $# -ne 1 ]; then
|
|
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
|
|
exit 1
|
|
fi
|
|
case "$1" in
|
|
-patch)
|
|
patch $pdir -f --no-backup-if-mismatch -p1 < $0
|
|
;;
|
|
-unpatch)
|
|
patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
|
|
;;
|
|
*)
|
|
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
|
|
exit 1
|
|
esac
|
|
exit 0
|
|
|
|
# append the patch here and adjust the -p? flag in the patch calls.
|
|
|
|
--- src/gcc/ada/Makefile.in.orig 2008-02-09 13:03:14 +0100
|
|
+++ src/gcc/ada/Makefile.in 2008-02-09 13:03:33 +0100
|
|
@@ -866,6 +866,8 @@
|
|
s-osinte.ads<s-osinte-kfreebsd-gnu.ads \
|
|
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-taspri.ads<s-taspri-posix.ads \
|
|
s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
|
|
system.ads<system-freebsd-x86.ads
|
|
--- src/gcc/ada/s-osinte-kfreebsd-gnu.ads.orig 2008-02-09 12:18:43 +0100
|
|
+++ src/gcc/ada/s-osinte-kfreebsd-gnu.ads 2008-02-09 13:00:36 +0100
|
|
@@ -223,7 +223,8 @@
|
|
function sysconf (name : int) return long;
|
|
pragma Import (C, sysconf);
|
|
|
|
- SC_CLK_TCK : constant := 2;
|
|
+ SC_CLK_TCK : constant := 2;
|
|
+ SC_NPROCESSORS_ONLN : constant := 84;
|
|
|
|
-------------------------
|
|
-- Priority Scheduling --
|
|
@@ -235,7 +236,7 @@
|
|
|
|
function To_Target_Priority
|
|
(Prio : System.Any_Priority) return Interfaces.C.int;
|
|
- -- Maps System.Any_Priority to a POSIX priority.
|
|
+ -- Maps System.Any_Priority to a POSIX priority
|
|
|
|
-------------
|
|
-- Process --
|
|
@@ -255,6 +256,7 @@
|
|
|
|
type Thread_Body is access
|
|
function (arg : System.Address) return System.Address;
|
|
+ pragma Convention (C, Thread_Body);
|
|
|
|
function Thread_Body_Access is new
|
|
Unchecked_Conversion (System.Address, Thread_Body);
|
|
@@ -438,12 +440,31 @@
|
|
pragma Import (C, pthread_getspecific, "pthread_getspecific");
|
|
|
|
type destructor_pointer is access procedure (arg : System.Address);
|
|
+ pragma Convention (C, destructor_pointer);
|
|
|
|
function pthread_key_create
|
|
(key : access pthread_key_t;
|
|
destructor : destructor_pointer) return int;
|
|
pragma Import (C, pthread_key_create, "pthread_key_create");
|
|
|
|
+ CPU_SETSIZE : constant := 1_024;
|
|
+
|
|
+ type bit_field is array (1 .. CPU_SETSIZE) of Boolean;
|
|
+ for bit_field'Size use CPU_SETSIZE;
|
|
+ pragma Pack (bit_field);
|
|
+ pragma Convention (C, bit_field);
|
|
+
|
|
+ type cpu_set_t is record
|
|
+ bits : bit_field;
|
|
+ end record;
|
|
+ pragma Convention (C, cpu_set_t);
|
|
+
|
|
+ function pthread_setaffinity_np
|
|
+ (thread : pthread_t;
|
|
+ cpusetsize : size_t;
|
|
+ cpuset : access cpu_set_t) return int;
|
|
+ pragma Import (C, pthread_setaffinity_np, "__gnat_pthread_setaffinity_np");
|
|
+
|
|
private
|
|
|
|
type sigset_t is array (1 .. 4) of unsigned;
|
|
--- src/gcc/ada/adaint.c 2008-02-10 03:14:20 +0100
|
|
+++ src/gcc/ada/adaint.c 2008-02-09 18:22:02 +0100
|
|
@@ -888,7 +888,7 @@
|
|
strcpy (path, "GNAT-XXXXXX");
|
|
|
|
#if (defined (__FreeBSD__) || defined (__NetBSD__) || defined (__OpenBSD__) \
|
|
- || defined (linux)) && !defined (__vxworks)
|
|
+ || defined (linux) || defined(__GLIBC__)) && !defined (__vxworks)
|
|
return mkstemp (path);
|
|
#elif defined (__Lynx__)
|
|
mktemp (path);
|
|
@@ -981,7 +981,7 @@
|
|
}
|
|
|
|
#elif defined (linux) || defined (__FreeBSD__) || defined (__NetBSD__) \
|
|
- || defined (__OpenBSD__)
|
|
+ || defined (__OpenBSD__) || defined(__GLIBC__)
|
|
#define MAX_SAFE_PATH 1000
|
|
char *tmpdir = getenv ("TMPDIR");
|
|
|
|
@@ -3001,7 +3001,7 @@
|
|
}
|
|
#endif
|
|
|
|
-#if defined (linux)
|
|
+#if defined (linux) || defined(__GLIBC__)
|
|
/* pthread affinity support */
|
|
|
|
#ifdef CPU_SETSIZE
|
|
--- src/gcc/ada/socket.c 2007-10-19 15:14:33 +0200
|
|
+++ src/gcc/ada/socket.c 2008-02-09 18:23:40 +0100
|
|
@@ -206,7 +206,7 @@
|
|
struct hostent *rh;
|
|
int ri;
|
|
|
|
-#ifdef __linux__
|
|
+#if defined(__linux__) || defined(__GLIBC__)
|
|
(void) gethostbyname_r (name, ret, buf, buflen, &rh, h_errnop);
|
|
#else
|
|
rh = gethostbyname_r (name, ret, buf, buflen, h_errnop);
|
|
@@ -223,7 +223,7 @@
|
|
struct hostent *rh;
|
|
int ri;
|
|
|
|
-#ifdef __linux__
|
|
+#if defined(__linux__) || defined(__GLIBC__)
|
|
(void) gethostbyaddr_r (addr, len, type, ret, buf, buflen, &rh, h_errnop);
|
|
#else
|
|
rh = gethostbyaddr_r (addr, len, type, ret, buf, buflen, h_errnop);
|
|
@@ -239,7 +239,7 @@
|
|
struct servent *rh;
|
|
int ri;
|
|
|
|
-#ifdef __linux__
|
|
+#if defined(__linux__) || defined(__GLIBC__)
|
|
(void) getservbyname_r (name, proto, ret, buf, buflen, &rh);
|
|
#else
|
|
rh = getservbyname_r (name, proto, ret, buf, buflen);
|
|
@@ -255,7 +255,7 @@
|
|
struct servent *rh;
|
|
int ri;
|
|
|
|
-#ifdef __linux__
|
|
+#if defined(__linux__) || defined(__GLIBC__)
|
|
(void) getservbyport_r (port, proto, ret, buf, buflen, &rh);
|
|
#else
|
|
rh = getservbyport_r (port, proto, ret, buf, buflen);
|
|
--- src/gcc/ada/gsocket.h.orig 2008-02-10 11:50:18 +0100
|
|
+++ src/gcc/ada/gsocket.h 2008-02-10 11:50:38 +0100
|
|
@@ -167,7 +167,7 @@
|
|
|
|
#if defined (_AIX) || defined (__FreeBSD__) || defined (__hpux__) || defined (__osf__) || defined (_WIN32) || defined (__APPLE__)
|
|
# define HAVE_THREAD_SAFE_GETxxxBYyyy 1
|
|
-#elif defined (sgi) || defined (linux) || (defined (sun) && defined (__SVR4) && !defined (__vxworks))
|
|
+#elif defined (sgi) || defined (linux) || defined (__GLIBC__) || (defined (sun) && defined (__SVR4) && !defined (__vxworks))
|
|
# define HAVE_GETxxxBYyyy_R 1
|
|
#endif
|
|
|
|
--- src/gcc/ada/sysdep.c.orig 2008-02-10 11:55:28 +0100
|
|
+++ src/gcc/ada/sysdep.c 2008-02-10 11:58:15 +0100
|
|
@@ -342,7 +342,8 @@
|
|
|| (defined (__osf__) && ! defined (__alpha_vxworks)) || defined (WINNT) \
|
|
|| defined (__MACHTEN__) || defined (__hpux__) || defined (_AIX) \
|
|
|| (defined (__svr4__) && defined (i386)) || defined (__Lynx__) \
|
|
- || defined (__CYGWIN__) || defined (__FreeBSD__) || defined (__OpenBSD__)
|
|
+ || defined (__CYGWIN__) || defined (__FreeBSD__) || defined (__OpenBSD__) \
|
|
+ || defined (__GLIBC__)
|
|
|
|
#ifdef __MINGW32__
|
|
#if OLD_MINGW
|
|
@@ -399,7 +400,8 @@
|
|
|| (defined (__osf__) && ! defined (__alpha_vxworks)) \
|
|
|| defined (__CYGWIN32__) || defined (__MACHTEN__) || defined (__hpux__) \
|
|
|| defined (_AIX) || (defined (__svr4__) && defined (i386)) \
|
|
- || defined (__Lynx__) || defined (__FreeBSD__) || defined (__OpenBSD__)
|
|
+ || defined (__Lynx__) || defined (__FreeBSD__) || defined (__OpenBSD__) \
|
|
+ || defined (__GLIBC__)
|
|
char c;
|
|
int nread;
|
|
int good_one = 0;
|
|
@@ -418,7 +420,8 @@
|
|
#if defined(linux) || defined (sun) || defined (sgi) || defined (__EMX__) \
|
|
|| defined (__osf__) || defined (__MACHTEN__) || defined (__hpux__) \
|
|
|| defined (_AIX) || (defined (__svr4__) && defined (i386)) \
|
|
- || defined (__Lynx__) || defined (__FreeBSD__) || defined (__OpenBSD__)
|
|
+ || defined (__Lynx__) || defined (__FreeBSD__) || defined (__OpenBSD__) \
|
|
+ || defined (__GLIBC__)
|
|
eof_ch = termios_rec.c_cc[VEOF];
|
|
|
|
/* If waiting (i.e. Get_Immediate (Char)), set MIN = 1 and wait for
|
|
@@ -845,7 +848,7 @@
|
|
/* Darwin, Free BSD, Linux, Tru64, where there exists a component tm_gmtoff
|
|
in struct tm */
|
|
#elif defined (__APPLE__) || defined (__FreeBSD__) || defined (linux) ||\
|
|
- (defined (__alpha__) && defined (__osf__))
|
|
+ (defined (__alpha__) && defined (__osf__)) || defined (__GLIBC__)
|
|
*off = tp->tm_gmtoff;
|
|
|
|
/* All other platforms: Treat all time values in GMT */
|
|
--- src/gcc/ada/link.c.orig 2008-02-10 11:59:07 +0100
|
|
+++ src/gcc/ada/link.c 2008-02-10 11:59:14 +0100
|
|
@@ -153,7 +153,7 @@
|
|
unsigned char __gnat_using_gnu_linker = 1;
|
|
const char *__gnat_object_library_extension = ".a";
|
|
|
|
-#elif defined (linux)
|
|
+#elif defined (linux) || defined(__GLIBC__)
|
|
const char *__gnat_object_file_option = "";
|
|
const char *__gnat_run_path_option = "";
|
|
char __gnat_shared_libgnat_default = SHARED;
|