s-tpopsp-rtems.adb: Use ATCB_Key rather than RTEMS_Ada_Self variable for consistency with other ports.

2011-12-02  Joel Sherrill <joel.sherrill@oarcorp.com>

	* s-tpopsp-rtems.adb: Use ATCB_Key rather than RTEMS_Ada_Self variable
	for consistency with other ports.
	* s-osinte-rtems.adb: Add body for dummy implementation of
	pthread_rwlockattr_setkind_np().
	* s-osinte-rtems.ads: Add missing clock and rwlock bindings.
	* terminals.c: Add __rtems__ conditionals to account for differences
	in termios implementation.

From-SVN: r181924
This commit is contained in:
Joel Sherrill 2011-12-02 15:17:14 +00:00 committed by Joel Sherrill
parent d600ef1636
commit d0234c7ea5
5 changed files with 90 additions and 20 deletions

View File

@ -1,3 +1,13 @@
2011-12-02 Joel Sherrill <joel.sherrill@oarcorp.com>
* s-tpopsp-rtems.adb: Use ATCB_Key rather than RTEMS_Ada_Self variable
for consistency with other ports.
* s-osinte-rtems.adb: Add body for dummy implementation of
pthread_rwlockattr_setkind_np().
* s-osinte-rtems.ads: Add missing clock and rwlock bindings.
* terminals.c: Add __rtems__ conditionals to account for differences
in termios implementation.
2011-12-02 Robert Dewar <dewar@adacore.com>
* sem_ch3.adb, sem_attr.adb, a-comutr.adb, a-cbmutr.adb,

View File

@ -122,4 +122,17 @@ package body System.OS_Interface is
return 0;
end sigaltstack;
-----------------------------------
-- pthread_rwlockattr_setkind_np --
-----------------------------------
function pthread_rwlockattr_setkind_np
(attr : access pthread_rwlockattr_t;
pref : int) return int is
pragma Unreferenced (attr);
pragma Unreferenced (pref);
begin
return 0;
end pthread_rwlockattr_setkind_np;
end System.OS_Interface;

View File

@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
-- Copyright (C) 1997-2009 Free Software Foundation, Inc. --
-- Copyright (C) 1997-2011 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- --
@ -176,9 +176,10 @@ package System.OS_Interface is
type timespec is private;
type clockid_t is private;
type clockid_t is new int;
CLOCK_REALTIME : constant clockid_t;
CLOCK_MONOTONIC : constant clockid_t;
function clock_gettime
(clock_id : clockid_t;
@ -237,9 +238,11 @@ package System.OS_Interface is
subtype Thread_Id is pthread_t;
type pthread_mutex_t is limited private;
type pthread_rwlock_t is limited private;
type pthread_cond_t is limited private;
type pthread_attr_t is limited private;
type pthread_mutexattr_t is limited private;
type pthread_rwlockattr_t is limited private;
type pthread_condattr_t is limited private;
type pthread_key_t is private;
@ -353,6 +356,40 @@ package System.OS_Interface is
function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
function pthread_rwlockattr_init
(attr : access pthread_rwlockattr_t) return int;
pragma Import (C, pthread_rwlockattr_init, "pthread_rwlockattr_init");
function pthread_rwlockattr_destroy
(attr : access pthread_rwlockattr_t) return int;
pragma Import (C, pthread_rwlockattr_destroy, "pthread_rwlockattr_destroy");
PTHREAD_RWLOCK_PREFER_READER_NP : constant := 0;
PTHREAD_RWLOCK_PREFER_WRITER_NP : constant := 1;
PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP : constant := 2;
function pthread_rwlockattr_setkind_np
(attr : access pthread_rwlockattr_t;
pref : int) return int;
function pthread_rwlock_init
(mutex : access pthread_rwlock_t;
attr : access pthread_rwlockattr_t) return int;
pragma Import (C, pthread_rwlock_init, "pthread_rwlock_init");
function pthread_rwlock_destroy
(mutex : access pthread_rwlock_t) return int;
pragma Import (C, pthread_rwlock_destroy, "pthread_rwlock_destroy");
function pthread_rwlock_rdlock (mutex : access pthread_rwlock_t) return int;
pragma Import (C, pthread_rwlock_rdlock, "pthread_rwlock_rdlock");
function pthread_rwlock_wrlock (mutex : access pthread_rwlock_t) return int;
pragma Import (C, pthread_rwlock_wrlock, "pthread_rwlock_wrlock");
function pthread_rwlock_unlock (mutex : access pthread_rwlock_t) return int;
pragma Import (C, pthread_rwlock_unlock, "pthread_rwlock_unlock");
function pthread_condattr_init
(attr : access pthread_condattr_t) return int;
pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
@ -584,8 +621,8 @@ private
end record;
pragma Convention (C, timespec);
type clockid_t is new rtems_id;
CLOCK_REALTIME : constant clockid_t := 1;
CLOCK_MONOTONIC : constant clockid_t := 4;
type pthread_attr_t is record
is_initialized : int;
@ -616,10 +653,18 @@ private
end record;
pragma Convention (C, pthread_mutexattr_t);
type pthread_rwlockattr_t is record
is_initialized : int;
process_shared : int;
end record;
pragma Convention (C, pthread_rwlockattr_t);
type pthread_t is new rtems_id;
type pthread_mutex_t is new rtems_id;
type pthread_rwlock_t is new rtems_id;
type pthread_cond_t is new rtems_id;
type pthread_key_t is new rtems_id;

View File

@ -10,7 +10,7 @@
-- $Revision: 1.2 $
-- --
-- Copyright (C) 1991-2003, Florida State University --
-- Copyright (C) 2008, Free Software Foundation, Inc. --
-- Copyright (C) 2008-2011, 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- --
@ -48,8 +48,8 @@ package body Specific is
-- The following gives the Ada run-time direct access to a variable
-- context switched by RTEMS at the lowest level.
RTEMS_Ada_Self : System.Address;
pragma Import (C, RTEMS_Ada_Self, "rtems_ada_self");
ATCB_Key : System.Address;
pragma Import (C, ATCB_Key, "rtems_ada_self");
----------------
-- Initialize --
@ -59,8 +59,7 @@ package body Specific is
pragma Warnings (Off, Environment_Task);
begin
ATCB_Key := No_Key;
RTEMS_Ada_Self := To_Address (Environment_Task);
ATCB_Key := To_Address (Environment_Task);
end Initialize;
-------------------
@ -69,7 +68,7 @@ package body Specific is
function Is_Valid_Task return Boolean is
begin
return RTEMS_Ada_Self /= System.Null_Address;
return ATCB_Key /= System.Null_Address;
end Is_Valid_Task;
---------
@ -78,7 +77,7 @@ package body Specific is
procedure Set (Self_Id : Task_Id) is
begin
RTEMS_Ada_Self := To_Address (Self_Id);
ATCB_Key := To_Address (Self_Id);
end Set;
----------
@ -102,7 +101,7 @@ package body Specific is
Result : System.Address;
begin
Result := RTEMS_Ada_Self;
Result := ATCB_Key;
-- If the key value is Null, then it is a non-Ada task.

View File

@ -991,7 +991,8 @@ __gnat_setup_winsize (void *desc, int rows, int columns)
/* On some system termio is either absent or including it will disable termios
(HP-UX) */
#if ! defined (__hpux__) && ! defined (FREEBSD) && ! defined (__APPLE__)
#if ! defined (__hpux__) && ! defined (FREEBSD) && \
! defined (__APPLE__) && ! defined(__rtems__)
# include <termio.h>
#endif
@ -1142,10 +1143,12 @@ allocate_pty_desc (pty_desc **desc) {
return -1;
}
#if !defined(__rtems__)
/* grant access to the slave side */
grantpt (master_fd);
/* unlock the terminal */
unlockpt (master_fd);
#endif
/* set desc and return 0 */
result = malloc (sizeof (pty_desc));