From b261877aa2bd3f3bf8e31490144c0dd05ebb0369 Mon Sep 17 00:00:00 2001 From: charlet Date: Tue, 6 Nov 2012 09:41:56 +0000 Subject: [PATCH] 2012-11-06 Bernard Banner * adaint.c Add file macro definitions missing on Android. * adaint.h Avoid definitions related to task affinity and CPU sets since this functionality is missing on the Android * errno.c (__set_errno): Android already contains such a named procedure so do include again. * gsocket.h: Sockets not supported on Android. * init.c: Avoid linux related code not supported on Android. * sysdep.c (sigismember, sigaddset, sigdelset, sigemptyset, sigfillset): wrapper functions since sig routines are defined as inline macros on Android. * terminals.c: Add stubs for terminal related functions not supported on Android. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@193213 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ada/ChangeLog | 15 +++++++++++++++ gcc/ada/adaint.c | 15 ++++++++++++--- gcc/ada/adaint.h | 6 +++++- gcc/ada/errno.c | 2 ++ gcc/ada/gsocket.h | 2 +- gcc/ada/init.c | 4 ++++ gcc/ada/sysdep.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++++ gcc/ada/terminals.c | 3 ++- 8 files changed, 95 insertions(+), 6 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index a07bc70..fb23cb3 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,18 @@ +2012-11-06 Bernard Banner + + * adaint.c Add file macro definitions missing on Android. + * adaint.h Avoid definitions related to task affinity and CPU + sets since this functionality is missing on the Android + * errno.c (__set_errno): Android already contains such a named + procedure so do include again. + * gsocket.h: Sockets not supported on Android. + * init.c: Avoid linux related code not supported on Android. + * sysdep.c (sigismember, sigaddset, sigdelset, sigemptyset, + sigfillset): wrapper functions since sig routines are defined + as inline macros on Android. + * terminals.c: Add stubs for terminal related functions not + supported on Android. + 2012-11-06 Hristian Kirtchev * sem_prag.adb (Analyze_Pragma): Do not diff --git a/gcc/ada/adaint.c b/gcc/ada/adaint.c index 54244bd..eab3ea5 100644 --- a/gcc/ada/adaint.c +++ b/gcc/ada/adaint.c @@ -87,8 +87,8 @@ extern "C" { #include #endif -#ifdef __vxworks -/* S_IREAD and S_IWRITE are not defined in VxWorks */ +#if defined (__vxworks) || defined (__ANDROID__) +/* S_IREAD and S_IWRITE are not defined in VxWorks or Android */ #ifndef S_IREAD #define S_IREAD (S_IRUSR | S_IRGRP | S_IROTH) #endif @@ -3763,7 +3763,16 @@ void __main (void) {} #endif #endif -#if defined (linux) +#if defined (__ANDROID__) + +#include + +void *__gnat_lwp_self (void) +{ + return (void *) pthread_self (); +} + +#elif defined (linux) /* There is no function in the glibc to retrieve the LWP of the current thread. We need to do a system call in order to retrieve this information. */ diff --git a/gcc/ada/adaint.h b/gcc/ada/adaint.h index 6097e61..7956e27 100644 --- a/gcc/ada/adaint.h +++ b/gcc/ada/adaint.h @@ -250,7 +250,11 @@ extern char * __gnat_locate_executable_file (char *, char *); extern char * __gnat_locate_file_with_predicate (char *, char *, int (*)(char*)); -#if defined (linux) +#if defined (__ANDROID__) +#undef linux +extern void *__gnat_lwp_self (void); + +#elif defined (linux) extern void *__gnat_lwp_self (void); /* Routines for interface to required CPU set primitives */ diff --git a/gcc/ada/errno.c b/gcc/ada/errno.c index 93c8660..2fbeacc 100644 --- a/gcc/ada/errno.c +++ b/gcc/ada/errno.c @@ -58,8 +58,10 @@ __get_errno(void) return errno; } +#ifndef __ANDROID__ void __set_errno(int err) { errno = err; } +#endif diff --git a/gcc/ada/gsocket.h b/gcc/ada/gsocket.h index c364fdb..e21d714 100644 --- a/gcc/ada/gsocket.h +++ b/gcc/ada/gsocket.h @@ -29,7 +29,7 @@ * * ****************************************************************************/ -#if defined(__nucleus__) || defined(VTHREADS) +#if defined(__nucleus__) || defined(VTHREADS) || defined(__ANDROID__) #warning Sockets not supported on these platforms #undef HAVE_SOCKETS diff --git a/gcc/ada/init.c b/gcc/ada/init.c index ad00e14..e7283a2 100644 --- a/gcc/ada/init.c +++ b/gcc/ada/init.c @@ -52,6 +52,10 @@ extern "C" { #include "vxWorks.h" #endif +#ifdef __ANDROID__ +#undef linux +#endif + #ifdef IN_RTS #include "tconfig.h" #include "tsystem.h" diff --git a/gcc/ada/sysdep.c b/gcc/ada/sysdep.c index ee31840..62a96dd 100644 --- a/gcc/ada/sysdep.c +++ b/gcc/ada/sysdep.c @@ -44,6 +44,10 @@ #include "vxWorks.h" #endif +#ifdef __ANDROID__ +#undef linux +#endif + #ifdef IN_RTS #define POSIX #include "tconfig.h" @@ -923,3 +927,53 @@ __gnat_is_file_not_found_error (int errno_val) { return 0; } } + +#ifdef __ANDROID__ + +/* Provide extern symbols for sig* as needed by the tasking run-time, instead + of static inline functions. */ + +#define sigismember android_sigismember +#define sigaddset android_sigaddset +#define sigdelset android_sigdelset +#define sigemptyset android_sigemptyset +#define sigfillset android_sigfillset + +#include + +#undef sigismember +#undef sigaddset +#undef sigdelset +#undef sigemptyset +#undef sigfillset + +int +sigismember (sigset_t *set, int signum) +{ + return android_sigismember (set, signum); +} + +int +sigaddset (sigset_t *set, int signum) +{ + return android_sigaddset (set, signum); +} + +int +sigdelset (sigset_t *set, int signum) +{ + return android_sigdelset (set, signum); +} + +int +sigemptyset (sigset_t *set) +{ + return android_sigemptyset (set); +} + +int +sigfillset(sigset_t *set) +{ + return android_sigfillset (set); +} +#endif diff --git a/gcc/ada/terminals.c b/gcc/ada/terminals.c index ca672c4..36b97a6 100644 --- a/gcc/ada/terminals.c +++ b/gcc/ada/terminals.c @@ -31,7 +31,8 @@ /* First all usupported platforms. Add stubs for exported routines. */ -#if defined (VMS) || defined (__vxworks) || defined (__Lynx__) +#if defined (VMS) || defined (__vxworks) || defined (__Lynx__) || \ + defined (__ANDROID__) void * __gnat_new_tty (void) { return (void*)0; } char * __gnat_tty_name (void* t) { return (char*)0; } -- 2.7.4