aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/adaint.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/ada/adaint.c')
-rw-r--r--gcc/ada/adaint.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/gcc/ada/adaint.c b/gcc/ada/adaint.c
index a9a5b68..2c47f00 100644
--- a/gcc/ada/adaint.c
+++ b/gcc/ada/adaint.c
@@ -3101,6 +3101,30 @@ __gnat_lwp_self (void)
}
#endif
+#if defined (__APPLE__)
+#include <mach/thread_info.h>
+#include <mach/mach_init.h>
+#include <mach/thread_act.h>
+
+/* System-wide thread identifier. Note it could be truncated on 32 bit
+ hosts.
+ Previously was: pthread_mach_thread_np (pthread_self ()). */
+void *
+__gnat_lwp_self (void)
+{
+ thread_identifier_info_data_t data;
+ mach_msg_type_number_t count = THREAD_IDENTIFIER_INFO_COUNT;
+ kern_return_t kret;
+
+ kret = thread_info (mach_thread_self (), THREAD_IDENTIFIER_INFO,
+ (thread_info_t) &data, &count);
+ if (kret == KERN_SUCCESS)
+ return (void *)(uintptr_t)data.thread_id;
+ else
+ return 0;
+}
+#endif
+
#if defined (__linux__)
#include <sched.h>