This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Please include ada-hurd.diff upstream (try2)
- From: Eric Botcazou <ebotcazou at adacore dot com>
- To: gcc-patches at gcc dot gnu dot org, svante dot signell at gmail dot com
- Cc: Arnaud Charlet <charlet at adacore dot com>, Samuel Thibault <samuel dot thibault at gnu dot org>, Matthias Klose <doko at debian dot org>
- Date: Wed, 27 Apr 2016 09:41:24 +0200
- Subject: Re: Please include ada-hurd.diff upstream (try2)
- Authentication-results: sourceware.org; auth=none
- References: <1456875776 dot 5852 dot 194 dot camel at gmail dot com> <20160425095016 dot GB17357 at adacore dot com> <1461580096 dot 8664 dot 262 dot camel at gmail dot com>
> Attaching the modified ada-hurd.diff. Maybe it is ready for inclusion in
> upstream now?
Upstream already contains the first set of changes though. Here's what I have
installed on mainline and 6 branch (not sure it will be in the 6.1 release).
2016-04-27 Svante Signell <svante.signell@gmail.com>
* gcc-interface/Makefile.in (x86 GNU/Hurd): Use s-osinte-gnu.adb.
* s-osinte-gnu.ads: Small tweaks.
* s-osinte-gnu.adb: New file.
--
Eric Botcazou
Index: gcc-interface/Makefile.in
===================================================================
--- gcc-interface/Makefile.in (revision 235394)
+++ gcc-interface/Makefile.in (working copy)
@@ -1426,7 +1426,7 @@ ifeq ($(strip $(filter-out %86 pc gnu,$(
a-intnam.ads<a-intnam-freebsd.ads \
s-inmaop.adb<s-inmaop-posix.adb \
s-intman.adb<s-intman-posix.adb \
- s-osinte.adb<s-osinte-posix.adb \
+ s-osinte.adb<s-osinte-gnu.adb \
s-osinte.ads<s-osinte-gnu.ads \
s-osprim.adb<s-osprim-posix.adb \
s-taprop.adb<s-taprop-posix.adb \
Index: s-osinte-gnu.adb
===================================================================
--- s-osinte-gnu.adb (revision 0)
+++ s-osinte-gnu.adb (working copy)
@@ -0,0 +1,144 @@
+------------------------------------------------------------------------------
+-- --
+-- 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) 2015-2016, Free Software Foundation, Inc. --
+-- --
+-- GNAT 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. --
+-- Extensive contributions were provided by Ada Core Technologies, Inc. --
+-- --
+------------------------------------------------------------------------------
+
+-- This is the GNU/Hurd version of this package.
+
+pragma Polling (Off);
+-- Turn off polling, we do not want ATC polling to take place during
+-- tasking operations. It causes infinite loops and other problems.
+
+-- This package encapsulates all direct interfaces to OS services
+-- that are needed by children of System.
+
+package body System.OS_Interface is
+
+ --------------------
+ -- Get_Stack_Base --
+ --------------------
+
+ function Get_Stack_Base (thread : pthread_t) return Address is
+ pragma Warnings (Off, thread);
+
+ begin
+ return Null_Address;
+ end Get_Stack_Base;
+
+ ------------------
+ -- pthread_init --
+ ------------------
+
+ procedure pthread_init is
+ begin
+ null;
+ end pthread_init;
+
+ --------------------------------------
+ -- pthread_mutexattr_setprioceiling --
+ --------------------------------------
+
+ function pthread_mutexattr_setprioceiling
+ (attr : access pthread_mutexattr_t;
+ prioceiling : int) return int is
+ pragma Unreferenced (attr, prioceiling);
+ begin
+ return 0;
+ end pthread_mutexattr_setprioceiling;
+
+ --------------------------------------
+ -- pthread_mutexattr_getprioceiling --
+ --------------------------------------
+
+ function pthread_mutexattr_getprioceiling
+ (attr : access pthread_mutexattr_t;
+ prioceiling : access int) return int is
+ pragma Unreferenced (attr, prioceiling);
+ begin
+ return 0;
+ end pthread_mutexattr_getprioceiling;
+
+ ---------------------------
+ -- pthread_setschedparam --
+ ---------------------------
+
+ function pthread_setschedparam
+ (thread : pthread_t;
+ policy : int;
+ param : access struct_sched_param) return int is
+ pragma Unreferenced (thread, policy, param);
+ begin
+ return 0;
+ end pthread_setschedparam;
+
+ -----------------
+ -- To_Duration --
+ -----------------
+
+ function To_Duration (TS : timespec) return Duration is
+ begin
+ return Duration (TS.tv_sec) + Duration (TS.tv_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
+ -- value.
+
+ if F < 0.0 then
+ S := S - 1;
+ F := F + 1.0;
+ end if;
+
+ return timespec'(tv_sec => S,
+ tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
+ end To_Timespec;
+
+end System.OS_Interface;
Index: s-osinte-gnu.ads
===================================================================
--- s-osinte-gnu.ads (revision 235394)
+++ s-osinte-gnu.ads (working copy)
@@ -344,8 +344,9 @@ package System.OS_Interface is
-- returns the stack base of the specified thread. Only call this function
-- when Stack_Base_Available is True.
- -- From: /usr/include/unistd.h __getpagesize or getpagesize??
- function Get_Page_Size return int;
+ -- From: /usr/include/i386-gnu/bits/shm.h __getpagesize or getpagesize??
+ function Get_Page_Size return size_t;
+ function Get_Page_Size return Address;
pragma Import (C, Get_Page_Size, "__getpagesize");
-- Returns the size of a page
@@ -498,7 +499,11 @@ package System.OS_Interface is
PTHREAD_PRIO_PROTECT : constant := 2;
PTHREAD_PRIO_INHERIT : constant := 1;
+ -- GNU/Hurd does not support Thread Priority Protection or Thread
+ -- Priority Inheritance and lacks some pthread_mutexattr_* functions.
+ -- Replace them with dummy versions.
-- From: /usr/include/pthread/pthread.h
+
function pthread_mutexattr_setprotocol
(attr : access pthread_mutexattr_t;
protocol : int) return int;
@@ -514,14 +519,10 @@ package System.OS_Interface is
function pthread_mutexattr_setprioceiling
(attr : access pthread_mutexattr_t;
prioceiling : int) return int;
- pragma Import (C, pthread_mutexattr_setprioceiling,
- "pthread_mutexattr_setprioceiling");
function pthread_mutexattr_getprioceiling
(attr : access pthread_mutexattr_t;
prioceiling : access int) return int;
- pragma Import (C, pthread_mutexattr_getprioceiling,
- "pthread_mutexattr_getprioceiling");
type struct_sched_param is record
sched_priority : int; -- scheduling priority
@@ -532,7 +533,6 @@ package System.OS_Interface is
(thread : pthread_t;
policy : int;
param : access struct_sched_param) return int;
- pragma Import (C, pthread_setschedparam, "pthread_setschedparam");
function pthread_attr_setscope
(attr : access pthread_attr_t;