intermittent build problems. Exception style affects Ada only. * Add better tasking support and sync OpenBSD specific changes from 4.8. * Call __errno() from librthread when using pthreads (Tero Koskinen) * Enable shared library support for OpenBSD (Tero Koskinen) bulk tested by landry@ and sthen@ ok pascal@ sorry for the delay guys
120 lines
4.5 KiB
Plaintext
120 lines
4.5 KiB
Plaintext
$OpenBSD: patch-gcc_ada_s-osinte-openbsd_adb,v 1.1 2013/07/18 16:54:08 tobiasu Exp $
|
|
--- gcc/ada/s-osinte-openbsd.adb.orig Tue Jun 18 17:49:18 2013
|
|
+++ gcc/ada/s-osinte-openbsd.adb Tue Jun 18 17:50:12 2013
|
|
@@ -0,0 +1,115 @@
|
|
+------------------------------------------------------------------------------
|
|
+-- --
|
|
+-- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
|
|
+-- --
|
|
+-- S Y S T E M . O S _ I N T E R F A C E --
|
|
+-- --
|
|
+-- B o d y --
|
|
+-- --
|
|
+-- Copyright (C) 1991-2009, Free Software Foundation, Inc. --
|
|
+-- --
|
|
+-- GNARL is free software; you can redistribute it and/or modify it under --
|
|
+-- terms of the GNU General Public License as published by the Free Soft- --
|
|
+-- ware Foundation; either version 3, or (at your option) any later ver- --
|
|
+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
|
|
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
|
|
+-- or FITNESS FOR A PARTICULAR PURPOSE. --
|
|
+-- --
|
|
+-- As a special exception under Section 7 of GPL version 3, you are granted --
|
|
+-- additional permissions described in the GCC Runtime Library Exception, --
|
|
+-- version 3.1, as published by the Free Software Foundation. --
|
|
+-- --
|
|
+-- You should have received a copy of the GNU General Public License and --
|
|
+-- a copy of the GCC Runtime Library Exception along with this program; --
|
|
+-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
|
|
+-- <http://www.gnu.org/licenses/>. --
|
|
+-- --
|
|
+-- GNARL was developed by the GNARL team at Florida State University. It is --
|
|
+-- now maintained by Ada Core Technologies Inc. in cooperation with Florida --
|
|
+-- State University (http://www.gnat.com). --
|
|
+-- --
|
|
+------------------------------------------------------------------------------
|
|
+
|
|
+-- This is the OpenBSD rthreads version of this package
|
|
+
|
|
+with Interfaces.C; use Interfaces.C;
|
|
+
|
|
+package body System.OS_Interface is
|
|
+
|
|
+ -----------
|
|
+ -- Errno --
|
|
+ -----------
|
|
+
|
|
+ function Errno return int is
|
|
+ type int_ptr is access all int;
|
|
+
|
|
+ function internal_errno return int_ptr;
|
|
+ pragma Import (C, internal_errno, "__errno");
|
|
+
|
|
+ begin
|
|
+ return (internal_errno.all);
|
|
+ end Errno;
|
|
+
|
|
+ --------------------
|
|
+ -- Get_Stack_Base --
|
|
+ --------------------
|
|
+
|
|
+ function Get_Stack_Base (thread : pthread_t) return Address is
|
|
+ pragma Unreferenced (thread);
|
|
+ begin
|
|
+ return (0);
|
|
+ end Get_Stack_Base;
|
|
+
|
|
+ ------------------
|
|
+ -- pthread_init --
|
|
+ ------------------
|
|
+
|
|
+ procedure pthread_init is
|
|
+ begin
|
|
+ null;
|
|
+ end pthread_init;
|
|
+
|
|
+ -----------------
|
|
+ -- To_Duration --
|
|
+ -----------------
|
|
+
|
|
+ function To_Duration (TS : timespec) return Duration is
|
|
+ begin
|
|
+ return Duration (TS.ts_sec) + Duration (TS.ts_nsec) / 10#1#E9;
|
|
+ end To_Duration;
|
|
+
|
|
+ ------------------------
|
|
+ -- To_Target_Priority --
|
|
+ ------------------------
|
|
+
|
|
+ function To_Target_Priority
|
|
+ (Prio : System.Any_Priority) return Interfaces.C.int
|
|
+ is
|
|
+ begin
|
|
+ return Interfaces.C.int (Prio);
|
|
+ end To_Target_Priority;
|
|
+
|
|
+ -----------------
|
|
+ -- To_Timespec --
|
|
+ -----------------
|
|
+
|
|
+ function To_Timespec (D : Duration) return timespec is
|
|
+ S : time_t;
|
|
+ F : Duration;
|
|
+
|
|
+ begin
|
|
+ S := time_t (Long_Long_Integer (D));
|
|
+ F := D - Duration (S);
|
|
+
|
|
+ -- If F has negative value due to a round-up, adjust for positive F
|
|
+
|
|
+ if F < 0.0 then
|
|
+ S := S - 1;
|
|
+ F := F + 1.0;
|
|
+ end if;
|
|
+
|
|
+ return timespec'(ts_sec => S,
|
|
+ ts_nsec => long (Long_Long_Integer (F * 10#1#E9)));
|
|
+ end To_Timespec;
|
|
+
|
|
+end System.OS_Interface;
|