[multiple changes]
2011-09-06 Vincent Celier <celier@adacore.com> * projects.texi: Add menus and @node lines. 2011-09-06 Ed Schonberg <schonberg@adacore.com> * exp_ch6.adb (Expand_Inlined_Call): Handle properly the case where the return type is an unconstrained array and the context is an assignment. Optimize the case when the target of the assignment is a selected component. 2011-09-06 Arnaud Charlet <charlet@adacore.com> * s-solita.adb: Update comments. 2011-09-06 Pascal Obry <obry@adacore.com> * s-linux.ads, s-linux-alpha.ads, s-linux-hppa.ads, s-linux-mipsel.ads, s-linux-sparc.ads: Remove hard coded and now wrong definitions. * s-oscons-tmplt.c: Add support for generating pthread related types size on GNU/Linux as done for Darwin. * s-osinte-linux.ads: Use s-oscons to define the pthread types. From-SVN: r178573
This commit is contained in:
parent
886b5a18d5
commit
77aa62e72f
@ -1,3 +1,26 @@
|
|||||||
|
2011-09-06 Vincent Celier <celier@adacore.com>
|
||||||
|
|
||||||
|
* projects.texi: Add menus and @node lines.
|
||||||
|
|
||||||
|
2011-09-06 Ed Schonberg <schonberg@adacore.com>
|
||||||
|
|
||||||
|
* exp_ch6.adb (Expand_Inlined_Call): Handle properly the case
|
||||||
|
where the return type is an unconstrained array and the context
|
||||||
|
is an assignment. Optimize the case when the target of the
|
||||||
|
assignment is a selected component.
|
||||||
|
|
||||||
|
2011-09-06 Arnaud Charlet <charlet@adacore.com>
|
||||||
|
|
||||||
|
* s-solita.adb: Update comments.
|
||||||
|
|
||||||
|
2011-09-06 Pascal Obry <obry@adacore.com>
|
||||||
|
|
||||||
|
* s-linux.ads, s-linux-alpha.ads, s-linux-hppa.ads, s-linux-mipsel.ads,
|
||||||
|
s-linux-sparc.ads: Remove hard coded and now wrong definitions.
|
||||||
|
* s-oscons-tmplt.c: Add support for generating pthread related
|
||||||
|
types size on GNU/Linux as done for Darwin.
|
||||||
|
* s-osinte-linux.ads: Use s-oscons to define the pthread types.
|
||||||
|
|
||||||
2011-09-06 Robert Dewar <dewar@adacore.com>
|
2011-09-06 Robert Dewar <dewar@adacore.com>
|
||||||
|
|
||||||
* exp_ch6.adb: Fix minor typo.
|
* exp_ch6.adb: Fix minor typo.
|
||||||
|
@ -4031,11 +4031,19 @@ package body Exp_Ch6 is
|
|||||||
|
|
||||||
Insert_After (Parent (Entity (N)), Blk);
|
Insert_After (Parent (Entity (N)), Blk);
|
||||||
|
|
||||||
|
-- If the context is an assignment, and the left-hand side is
|
||||||
|
-- free of side-effects, the replacement is also safe.
|
||||||
|
-- Can this be generalized further???
|
||||||
|
|
||||||
elsif Nkind (Parent (N)) = N_Assignment_Statement
|
elsif Nkind (Parent (N)) = N_Assignment_Statement
|
||||||
and then
|
and then
|
||||||
(Is_Entity_Name (Name (Parent (N)))
|
(Is_Entity_Name (Name (Parent (N)))
|
||||||
or else
|
or else
|
||||||
(Nkind (Name (Parent (N))) = N_Explicit_Dereference
|
(Nkind (Name (Parent (N))) = N_Explicit_Dereference
|
||||||
|
and then Is_Entity_Name (Prefix (Name (Parent (N)))))
|
||||||
|
|
||||||
|
or else
|
||||||
|
(Nkind (Name (Parent (N))) = N_Selected_Component
|
||||||
and then Is_Entity_Name (Prefix (Name (Parent (N))))))
|
and then Is_Entity_Name (Prefix (Name (Parent (N))))))
|
||||||
then
|
then
|
||||||
-- Replace assignment with the block
|
-- Replace assignment with the block
|
||||||
@ -4201,14 +4209,19 @@ package body Exp_Ch6 is
|
|||||||
Set_Declarations (Blk, New_List);
|
Set_Declarations (Blk, New_List);
|
||||||
end if;
|
end if;
|
||||||
|
|
||||||
-- For the unconstrained case, capture the name of the local
|
-- For the unconstrained case, capture the name of the local variable
|
||||||
-- variable that holds the result. This must be the first declaration
|
-- that holds the result. This must be the first declaration
|
||||||
-- in the block, because its bounds cannot depend on local variables.
|
-- in the block, because its bounds cannot depend on local variables.
|
||||||
-- Otherwise there is no way to declare the result outside of the
|
-- Otherwise there is no way to declare the result outside of the
|
||||||
-- block. Needless to say, in general the bounds will depend on the
|
-- block. Needless to say, in general the bounds will depend on the
|
||||||
-- actuals in the call.
|
-- actuals in the call.
|
||||||
|
-- If the context is an assignment statement, as is the case for the
|
||||||
|
-- expansion of an extended return, the left-hand side provides bounds
|
||||||
|
-- even if the return type is unconstrained.
|
||||||
|
|
||||||
if Is_Unc then
|
if Is_Unc
|
||||||
|
and then Nkind (Parent (N)) /= N_Assignment_Statement
|
||||||
|
then
|
||||||
Targ1 := Defining_Identifier (First (Declarations (Blk)));
|
Targ1 := Defining_Identifier (First (Declarations (Blk)));
|
||||||
end if;
|
end if;
|
||||||
|
|
||||||
@ -4372,6 +4385,12 @@ package body Exp_Ch6 is
|
|||||||
then
|
then
|
||||||
Targ := Name (Parent (N));
|
Targ := Name (Parent (N));
|
||||||
|
|
||||||
|
elsif Nkind (Parent (N)) = N_Assignment_Statement
|
||||||
|
and then Nkind (Name (Parent (N))) = N_Selected_Component
|
||||||
|
and then Is_Entity_Name (Prefix (Name (Parent (N))))
|
||||||
|
then
|
||||||
|
Targ := New_Copy_Tree (Name (Parent (N)));
|
||||||
|
|
||||||
elsif Nkind (Parent (N)) = N_Object_Declaration
|
elsif Nkind (Parent (N)) = N_Object_Declaration
|
||||||
and then Is_Limited_Type (Etype (Subp))
|
and then Is_Limited_Type (Etype (Subp))
|
||||||
then
|
then
|
||||||
@ -4388,7 +4407,9 @@ package body Exp_Ch6 is
|
|||||||
-- eventually be possible to remove that temporary and use the
|
-- eventually be possible to remove that temporary and use the
|
||||||
-- result variable directly.
|
-- result variable directly.
|
||||||
|
|
||||||
if Is_Unc then
|
if Is_Unc
|
||||||
|
and then Nkind (Parent (N)) /= N_Assignment_Statement
|
||||||
|
then
|
||||||
Decl :=
|
Decl :=
|
||||||
Make_Object_Declaration (Loc,
|
Make_Object_Declaration (Loc,
|
||||||
Defining_Identifier => Temp,
|
Defining_Identifier => Temp,
|
||||||
|
@ -2131,7 +2131,19 @@ meant to solve a few specific use cases that cannot be solved directly
|
|||||||
using standard projects. This section will go over a few of these use
|
using standard projects. This section will go over a few of these use
|
||||||
cases to try and explain what you can use aggregate projects for.
|
cases to try and explain what you can use aggregate projects for.
|
||||||
|
|
||||||
|
@menu
|
||||||
|
* Building all main units from a single project tree::
|
||||||
|
* Building a set of projects with a single command::
|
||||||
|
* Define a build environment::
|
||||||
|
* Performance improvements in builder::
|
||||||
|
* Syntax of aggregate projects::
|
||||||
|
* package Builder in aggregate projects::
|
||||||
|
@end menu
|
||||||
|
|
||||||
|
@c -----------------------------------------------------------
|
||||||
|
@node Building all main units from a single project tree
|
||||||
@subsection Building all main units from a single project tree
|
@subsection Building all main units from a single project tree
|
||||||
|
@c -----------------------------------------------------------
|
||||||
|
|
||||||
Most often, an application is organized into modules and submodules,
|
Most often, an application is organized into modules and submodules,
|
||||||
which are very conveniently represented as a project tree or graph
|
which are very conveniently represented as a project tree or graph
|
||||||
@ -2184,7 +2196,10 @@ aggregate project, you will need to add "p.gpr" in the list of project
|
|||||||
files for the aggregate project, or the main unit will not be built when
|
files for the aggregate project, or the main unit will not be built when
|
||||||
building the aggregate project.
|
building the aggregate project.
|
||||||
|
|
||||||
|
@c ---------------------------------------------------------
|
||||||
|
@node Building a set of projects with a single command
|
||||||
@subsection Building a set of projects with a single command
|
@subsection Building a set of projects with a single command
|
||||||
|
@c ---------------------------------------------------------
|
||||||
|
|
||||||
One other case is when you have multiple applications and libraries
|
One other case is when you have multiple applications and libraries
|
||||||
that are build independently from each other (but they can be build in
|
that are build independently from each other (but they can be build in
|
||||||
@ -2223,7 +2238,10 @@ with Annex E.
|
|||||||
Aggregate projects can be used to build multiple partitions
|
Aggregate projects can be used to build multiple partitions
|
||||||
@end smallexample
|
@end smallexample
|
||||||
|
|
||||||
|
@c ---------------------------------------------
|
||||||
|
@node Define a build environment
|
||||||
@subsection Define a build environment
|
@subsection Define a build environment
|
||||||
|
@c ---------------------------------------------
|
||||||
|
|
||||||
The environment variables at the time you launch gprbuild or gprbuild
|
The environment variables at the time you launch gprbuild or gprbuild
|
||||||
will influence the view these tools have of the project (PATH to find
|
will influence the view these tools have of the project (PATH to find
|
||||||
@ -2278,7 +2296,10 @@ project MyProject is
|
|||||||
end MyProject;
|
end MyProject;
|
||||||
@end smallexample
|
@end smallexample
|
||||||
|
|
||||||
|
@c --------------------------------------------
|
||||||
|
@node Performance improvements in builder
|
||||||
@subsection Performance improvements in builder
|
@subsection Performance improvements in builder
|
||||||
|
@c --------------------------------------------
|
||||||
|
|
||||||
The loading of aggregate projects is optimized in gprbuild and
|
The loading of aggregate projects is optimized in gprbuild and
|
||||||
gnatmake, so that all files are searched for only once on the disk
|
gnatmake, so that all files are searched for only once on the disk
|
||||||
@ -2294,7 +2315,10 @@ can be compiled in parallel (through the usual -j switch) and this can
|
|||||||
be done while maximizing the use of CPUs (compared to launching
|
be done while maximizing the use of CPUs (compared to launching
|
||||||
multiple gprbuild and gnatmake commands in parallel).
|
multiple gprbuild and gnatmake commands in parallel).
|
||||||
|
|
||||||
|
@c -------------------------------------
|
||||||
|
@node Syntax of aggregate projects
|
||||||
@subsection Syntax of aggregate projects
|
@subsection Syntax of aggregate projects
|
||||||
|
@c -------------------------------------
|
||||||
|
|
||||||
An aggregate project follows the general syntax of project files. The
|
An aggregate project follows the general syntax of project files. The
|
||||||
recommended extension is still @file{.gpr}. However, a special
|
recommended extension is still @file{.gpr}. However, a special
|
||||||
@ -2492,7 +2516,10 @@ P, which in particular might impact the list of source files in P.
|
|||||||
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
|
@c ----------------------------------------------
|
||||||
|
@node package Builder in aggregate projects
|
||||||
@subsection package Builder in aggregate projects
|
@subsection package Builder in aggregate projects
|
||||||
|
@c ----------------------------------------------
|
||||||
|
|
||||||
As we mentioned before, only the package Builder can be specified in
|
As we mentioned before, only the package Builder can be specified in
|
||||||
an aggregate project. In this package, only the following attributes
|
an aggregate project. In this package, only the following attributes
|
||||||
@ -2628,7 +2655,15 @@ project files (so possibly built with different compiler options) and
|
|||||||
yet create a single library (static or relocatable) out of the
|
yet create a single library (static or relocatable) out of the
|
||||||
corresponding object files.
|
corresponding object files.
|
||||||
|
|
||||||
|
@menu
|
||||||
|
* Building aggregate library projects::
|
||||||
|
* Syntax of aggregate library projects::
|
||||||
|
@end menu
|
||||||
|
|
||||||
|
@c ---------------------------------------------
|
||||||
|
@node Building aggregate library projects
|
||||||
@subsection Building aggregate library projects
|
@subsection Building aggregate library projects
|
||||||
|
@c ---------------------------------------------
|
||||||
|
|
||||||
For example, we can define an aggregate project Agg that groups A, B
|
For example, we can define an aggregate project Agg that groups A, B
|
||||||
and C:
|
and C:
|
||||||
@ -2674,7 +2709,10 @@ With the above aggregate library Builder package, the @code{-fPIC}
|
|||||||
option will be passed to the compiler when building any source code
|
option will be passed to the compiler when building any source code
|
||||||
from projects @file{a.gpr}, @file{b.gpr} and @file{c.gpr}.
|
from projects @file{a.gpr}, @file{b.gpr} and @file{c.gpr}.
|
||||||
|
|
||||||
|
@c ---------------------------------------------
|
||||||
|
@node Syntax of aggregate library projects
|
||||||
@subsection Syntax of aggregate library projects
|
@subsection Syntax of aggregate library projects
|
||||||
|
@c ---------------------------------------------
|
||||||
|
|
||||||
An aggregate library project follows the general syntax of project
|
An aggregate library project follows the general syntax of project
|
||||||
files. The recommended extension is still @file{.gpr}. However, a special
|
files. The recommended extension is still @file{.gpr}. However, a special
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
-- --
|
-- --
|
||||||
-- S p e c --
|
-- S p e c --
|
||||||
-- --
|
-- --
|
||||||
-- Copyright (C) 2009, Free Software Foundation, Inc. --
|
-- Copyright (C) 2009-2011, Free Software Foundation, Inc. --
|
||||||
-- --
|
-- --
|
||||||
-- GNARL is free software; you can redistribute it and/or modify it under --
|
-- 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- --
|
-- terms of the GNU General Public License as published by the Free Soft- --
|
||||||
@ -111,9 +111,4 @@ package System.Linux is
|
|||||||
SA_SIGINFO : constant := 16#40#;
|
SA_SIGINFO : constant := 16#40#;
|
||||||
SA_ONSTACK : constant := 16#01#;
|
SA_ONSTACK : constant := 16#01#;
|
||||||
|
|
||||||
type pthread_mutex_t is record
|
|
||||||
dum0, dum1, dum2, dum3, dum4 : Interfaces.C.unsigned_long;
|
|
||||||
end record;
|
|
||||||
pragma Convention (C, pthread_mutex_t);
|
|
||||||
|
|
||||||
end System.Linux;
|
end System.Linux;
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
-- --
|
-- --
|
||||||
-- S p e c --
|
-- S p e c --
|
||||||
-- --
|
-- --
|
||||||
-- Copyright (C) 2008-2009, 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 --
|
-- 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- --
|
-- terms of the GNU General Public License as published by the Free Soft- --
|
||||||
@ -103,26 +103,4 @@ package System.Linux is
|
|||||||
SA_SIGINFO : constant := 16#10#;
|
SA_SIGINFO : constant := 16#10#;
|
||||||
SA_ONSTACK : constant := 16#01#;
|
SA_ONSTACK : constant := 16#01#;
|
||||||
|
|
||||||
type lock_array is array (1 .. 4) of Integer;
|
|
||||||
type atomic_lock_t is record
|
|
||||||
lock : lock_array;
|
|
||||||
end record;
|
|
||||||
pragma Convention (C, atomic_lock_t);
|
|
||||||
for atomic_lock_t'Alignment use 16;
|
|
||||||
|
|
||||||
type struct_pthread_fast_lock is record
|
|
||||||
spinlock : atomic_lock_t;
|
|
||||||
status : Long_Integer;
|
|
||||||
end record;
|
|
||||||
pragma Convention (C, struct_pthread_fast_lock);
|
|
||||||
|
|
||||||
type pthread_mutex_t is record
|
|
||||||
m_reserved : Integer;
|
|
||||||
m_count : Integer;
|
|
||||||
m_owner : System.Address;
|
|
||||||
m_kind : Integer;
|
|
||||||
m_lock : struct_pthread_fast_lock;
|
|
||||||
end record;
|
|
||||||
pragma Convention (C, pthread_mutex_t);
|
|
||||||
|
|
||||||
end System.Linux;
|
end System.Linux;
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
-- --
|
-- --
|
||||||
-- S p e c --
|
-- S p e c --
|
||||||
-- --
|
-- --
|
||||||
-- Copyright (C) 2009, Free Software Foundation, Inc. --
|
-- Copyright (C) 2009-2011, Free Software Foundation, Inc. --
|
||||||
-- --
|
-- --
|
||||||
-- GNARL is free software; you can redistribute it and/or modify it under --
|
-- 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- --
|
-- terms of the GNU General Public License as published by the Free Soft- --
|
||||||
@ -100,19 +100,4 @@ package System.Linux is
|
|||||||
SA_SIGINFO : constant := 16#04#;
|
SA_SIGINFO : constant := 16#04#;
|
||||||
SA_ONSTACK : constant := 16#08000000#;
|
SA_ONSTACK : constant := 16#08000000#;
|
||||||
|
|
||||||
type struct_pthread_fast_lock is record
|
|
||||||
status : Long_Integer;
|
|
||||||
spinlock : Integer;
|
|
||||||
end record;
|
|
||||||
pragma Convention (C, struct_pthread_fast_lock);
|
|
||||||
|
|
||||||
type pthread_mutex_t is record
|
|
||||||
m_reserved : Integer;
|
|
||||||
m_count : Integer;
|
|
||||||
m_owner : System.Address;
|
|
||||||
m_kind : Integer;
|
|
||||||
m_lock : struct_pthread_fast_lock;
|
|
||||||
end record;
|
|
||||||
pragma Convention (C, pthread_mutex_t);
|
|
||||||
|
|
||||||
end System.Linux;
|
end System.Linux;
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
-- --
|
-- --
|
||||||
-- S p e c --
|
-- S p e c --
|
||||||
-- --
|
-- --
|
||||||
-- Copyright (C) 2009, Free Software Foundation, Inc. --
|
-- Copyright (C) 2009-2011, Free Software Foundation, Inc. --
|
||||||
-- --
|
-- --
|
||||||
-- GNARL is free software; you can redistribute it and/or modify it under --
|
-- 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- --
|
-- terms of the GNU General Public License as published by the Free Soft- --
|
||||||
@ -109,11 +109,4 @@ package System.Linux is
|
|||||||
SA_SIGINFO : constant := 16#200#;
|
SA_SIGINFO : constant := 16#200#;
|
||||||
SA_ONSTACK : constant := 16#001#;
|
SA_ONSTACK : constant := 16#001#;
|
||||||
|
|
||||||
type pthread_mutex_t is record
|
|
||||||
L1, L2, L3, L4 : Interfaces.C.long;
|
|
||||||
I1, I2 : Interfaces.C.int;
|
|
||||||
end record;
|
|
||||||
pragma Convention (C, pthread_mutex_t);
|
|
||||||
-- 24 bytes for 32-bit and 40 bytes for 64-bit, aligned like 'long'
|
|
||||||
|
|
||||||
end System.Linux;
|
end System.Linux;
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
-- --
|
-- --
|
||||||
-- S p e c --
|
-- S p e c --
|
||||||
-- --
|
-- --
|
||||||
-- Copyright (C) 2008-2009, 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 --
|
-- 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- --
|
-- terms of the GNU General Public License as published by the Free Soft- --
|
||||||
@ -101,19 +101,4 @@ package System.Linux is
|
|||||||
SA_SIGINFO : constant := 16#04#;
|
SA_SIGINFO : constant := 16#04#;
|
||||||
SA_ONSTACK : constant := 16#08000000#;
|
SA_ONSTACK : constant := 16#08000000#;
|
||||||
|
|
||||||
type struct_pthread_fast_lock is record
|
|
||||||
status : Long_Integer;
|
|
||||||
spinlock : Integer;
|
|
||||||
end record;
|
|
||||||
pragma Convention (C, struct_pthread_fast_lock);
|
|
||||||
|
|
||||||
type pthread_mutex_t is record
|
|
||||||
m_reserved : Integer;
|
|
||||||
m_count : Integer;
|
|
||||||
m_owner : System.Address;
|
|
||||||
m_kind : Integer;
|
|
||||||
m_lock : struct_pthread_fast_lock;
|
|
||||||
end record;
|
|
||||||
pragma Convention (C, pthread_mutex_t);
|
|
||||||
|
|
||||||
end System.Linux;
|
end System.Linux;
|
||||||
|
@ -163,6 +163,10 @@ pragma Style_Checks ("M32766");
|
|||||||
# include <_types.h>
|
# include <_types.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef __linux__
|
||||||
|
# include <pthread.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef NATIVE
|
#ifdef NATIVE
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
@ -1351,42 +1355,50 @@ CND(WSAEDISCON, "Disconnected")
|
|||||||
putchar ('\n');
|
putchar ('\n');
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined (__APPLE__) || defined (DUMMY)
|
#if defined (__APPLE__) || defined (__linux__) || defined (DUMMY)
|
||||||
/*
|
/*
|
||||||
|
|
||||||
-------------------------------
|
-- Sizes of pthread data types
|
||||||
-- Darwin-specific constants --
|
|
||||||
-------------------------------
|
|
||||||
|
|
||||||
-- These constants may be used only within the Darwin version of the GNAT
|
|
||||||
-- runtime library.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined (__APPLE__) || defined (DUMMY)
|
||||||
#define PTHREAD_SIZE __PTHREAD_SIZE__
|
#define PTHREAD_SIZE __PTHREAD_SIZE__
|
||||||
|
#define PTHREAD_ATTR_SIZE __PTHREAD_ATTR_SIZE__
|
||||||
|
#define PTHREAD_MUTEXATTR_SIZE __PTHREAD_MUTEXATTR_SIZE__
|
||||||
|
#define PTHREAD_MUTEX_SIZE __PTHREAD_MUTEX_SIZE__
|
||||||
|
#define PTHREAD_CONDATTR_SIZE __PTHREAD_CONDATTR_SIZE__
|
||||||
|
#define PTHREAD_COND_SIZE __PTHREAD_COND_SIZE__
|
||||||
|
#define PTHREAD_RWLOCKATTR_SIZE __PTHREAD_RWLOCKATTR_SIZE__
|
||||||
|
#define PTHREAD_RWLOCK_SIZE __PTHREAD_RWLOCK_SIZE__
|
||||||
|
#define PTHREAD_ONCE_SIZE __PTHREAD_ONCE_SIZE__
|
||||||
|
#else
|
||||||
|
#define PTHREAD_SIZE (sizeof (pthread_t))
|
||||||
|
#define PTHREAD_ATTR_SIZE __SIZEOF_PTHREAD_ATTR_T
|
||||||
|
#define PTHREAD_MUTEXATTR_SIZE __SIZEOF_PTHREAD_MUTEXATTR_T
|
||||||
|
#define PTHREAD_MUTEX_SIZE __SIZEOF_PTHREAD_MUTEX_T
|
||||||
|
#define PTHREAD_CONDATTR_SIZE __SIZEOF_PTHREAD_CONDATTR_T
|
||||||
|
#define PTHREAD_COND_SIZE __SIZEOF_PTHREAD_COND_T
|
||||||
|
#define PTHREAD_RWLOCKATTR_SIZE __SIZEOF_PTHREAD_RWLOCKATTR_T
|
||||||
|
#define PTHREAD_RWLOCK_SIZE __SIZEOF_PTHREAD_RWLOCK_T
|
||||||
|
#define PTHREAD_ONCE_SIZE (sizeof (pthread_once_t))
|
||||||
|
#endif
|
||||||
|
|
||||||
CND(PTHREAD_SIZE, "Pad in pthread_t")
|
CND(PTHREAD_SIZE, "Pad in pthread_t")
|
||||||
|
|
||||||
#define PTHREAD_ATTR_SIZE __PTHREAD_ATTR_SIZE__
|
|
||||||
CND(PTHREAD_ATTR_SIZE, "Pad in pthread_attr_t")
|
CND(PTHREAD_ATTR_SIZE, "Pad in pthread_attr_t")
|
||||||
|
|
||||||
#define PTHREAD_MUTEXATTR_SIZE __PTHREAD_MUTEXATTR_SIZE__
|
|
||||||
CND(PTHREAD_MUTEXATTR_SIZE, "Pad in pthread_mutexattr_t")
|
CND(PTHREAD_MUTEXATTR_SIZE, "Pad in pthread_mutexattr_t")
|
||||||
|
|
||||||
#define PTHREAD_MUTEX_SIZE __PTHREAD_MUTEX_SIZE__
|
|
||||||
CND(PTHREAD_MUTEX_SIZE, "Pad in pthread_mutex_t")
|
CND(PTHREAD_MUTEX_SIZE, "Pad in pthread_mutex_t")
|
||||||
|
|
||||||
#define PTHREAD_CONDATTR_SIZE __PTHREAD_CONDATTR_SIZE__
|
|
||||||
CND(PTHREAD_CONDATTR_SIZE, "Pad in pthread_condattr_t")
|
CND(PTHREAD_CONDATTR_SIZE, "Pad in pthread_condattr_t")
|
||||||
|
|
||||||
#define PTHREAD_COND_SIZE __PTHREAD_COND_SIZE__
|
|
||||||
CND(PTHREAD_COND_SIZE, "Pad in pthread_cond_t")
|
CND(PTHREAD_COND_SIZE, "Pad in pthread_cond_t")
|
||||||
|
|
||||||
#define PTHREAD_RWLOCKATTR_SIZE __PTHREAD_RWLOCKATTR_SIZE__
|
|
||||||
CND(PTHREAD_RWLOCKATTR_SIZE, "Pad in pthread_rwlockattr_t")
|
CND(PTHREAD_RWLOCKATTR_SIZE, "Pad in pthread_rwlockattr_t")
|
||||||
|
|
||||||
#define PTHREAD_RWLOCK_SIZE __PTHREAD_RWLOCK_SIZE__
|
|
||||||
CND(PTHREAD_RWLOCK_SIZE, "Pad in pthread_rwlock_t")
|
CND(PTHREAD_RWLOCK_SIZE, "Pad in pthread_rwlock_t")
|
||||||
|
|
||||||
#define PTHREAD_ONCE_SIZE __PTHREAD_ONCE_SIZE__
|
|
||||||
CND(PTHREAD_ONCE_SIZE, "Pad in pthread_once_t")
|
CND(PTHREAD_ONCE_SIZE, "Pad in pthread_once_t")
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -41,6 +41,7 @@
|
|||||||
with Ada.Unchecked_Conversion;
|
with Ada.Unchecked_Conversion;
|
||||||
with Interfaces.C;
|
with Interfaces.C;
|
||||||
with System.Linux;
|
with System.Linux;
|
||||||
|
with System.OS_Constants;
|
||||||
|
|
||||||
package System.OS_Interface is
|
package System.OS_Interface is
|
||||||
pragma Preelaborate;
|
pragma Preelaborate;
|
||||||
@ -557,35 +558,31 @@ private
|
|||||||
end record;
|
end record;
|
||||||
pragma Convention (C, timespec);
|
pragma Convention (C, timespec);
|
||||||
|
|
||||||
type pthread_attr_t is record
|
|
||||||
detachstate : int;
|
|
||||||
schedpolicy : int;
|
|
||||||
schedparam : struct_sched_param;
|
|
||||||
inheritsched : int;
|
|
||||||
scope : int;
|
|
||||||
guardsize : size_t;
|
|
||||||
stackaddr_set : int;
|
|
||||||
stackaddr : System.Address;
|
|
||||||
stacksize : size_t;
|
|
||||||
end record;
|
|
||||||
pragma Convention (C, pthread_attr_t);
|
|
||||||
|
|
||||||
type pthread_condattr_t is record
|
|
||||||
dummy : int;
|
|
||||||
end record;
|
|
||||||
pragma Convention (C, pthread_condattr_t);
|
|
||||||
|
|
||||||
type pthread_mutexattr_t is record
|
|
||||||
mutexkind : int;
|
|
||||||
end record;
|
|
||||||
pragma Convention (C, pthread_mutexattr_t);
|
|
||||||
|
|
||||||
type pthread_mutex_t is new System.Linux.pthread_mutex_t;
|
|
||||||
|
|
||||||
type unsigned_long_long_t is mod 2 ** 64;
|
type unsigned_long_long_t is mod 2 ** 64;
|
||||||
-- Local type only used to get it's 'Alignment below
|
-- Local type only used to get it's 'Alignment below
|
||||||
|
|
||||||
type pthread_cond_t is array (0 .. 47) of unsigned_char;
|
type pthread_attr_t is
|
||||||
|
array (1 .. OS_Constants.PTHREAD_ATTR_SIZE) of unsigned_char;
|
||||||
|
pragma Convention (C, pthread_attr_t);
|
||||||
|
for pthread_attr_t'Alignment use Interfaces.C.unsigned_long'Alignment;
|
||||||
|
|
||||||
|
type pthread_condattr_t is
|
||||||
|
array (1 .. OS_Constants.PTHREAD_CONDATTR_SIZE) of unsigned_char;
|
||||||
|
pragma Convention (C, pthread_condattr_t);
|
||||||
|
for pthread_condattr_t'Alignment use Interfaces.C.int'Alignment;
|
||||||
|
|
||||||
|
type pthread_mutexattr_t is
|
||||||
|
array (1 .. OS_Constants.PTHREAD_MUTEXATTR_SIZE) of unsigned_char;
|
||||||
|
pragma Convention (C, pthread_mutexattr_t);
|
||||||
|
for pthread_mutexattr_t'Alignment use Interfaces.C.int'Alignment;
|
||||||
|
|
||||||
|
type pthread_mutex_t is
|
||||||
|
array (1 .. OS_Constants.PTHREAD_MUTEX_SIZE) of unsigned_char;
|
||||||
|
pragma Convention (C, pthread_mutex_t);
|
||||||
|
for pthread_mutex_t'Alignment use Interfaces.C.unsigned_long'Alignment;
|
||||||
|
|
||||||
|
type pthread_cond_t is
|
||||||
|
array (1 .. OS_Constants.PTHREAD_COND_SIZE) of unsigned_char;
|
||||||
pragma Convention (C, pthread_cond_t);
|
pragma Convention (C, pthread_cond_t);
|
||||||
for pthread_cond_t'Alignment use unsigned_long_long_t'Alignment;
|
for pthread_cond_t'Alignment use unsigned_long_long_t'Alignment;
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
-- --
|
-- --
|
||||||
-- B o d y --
|
-- B o d y --
|
||||||
-- --
|
-- --
|
||||||
-- Copyright (C) 2004-2009, Free Software Foundation, Inc. --
|
-- Copyright (C) 2004-2011, Free Software Foundation, Inc. --
|
||||||
-- --
|
-- --
|
||||||
-- GNAT is free software; you can redistribute it and/or modify it under --
|
-- 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- --
|
-- terms of the GNU General Public License as published by the Free Soft- --
|
||||||
@ -153,6 +153,10 @@ package body System.Soft_Links.Tasking is
|
|||||||
-- We can only be here because we are terminating the environment task.
|
-- We can only be here because we are terminating the environment task.
|
||||||
-- Task termination for the rest of the tasks is handled in the
|
-- Task termination for the rest of the tasks is handled in the
|
||||||
-- Task_Wrapper.
|
-- Task_Wrapper.
|
||||||
|
-- We do not want to enable this check and e.g. call System.OS_Lib.Abort
|
||||||
|
-- here because some restricted run-times may not have system.os_lib
|
||||||
|
-- (e.g. JVM), and calling abort may do more harm than good to the
|
||||||
|
-- main application.
|
||||||
|
|
||||||
pragma Assert (Self_Id = STPO.Environment_Task);
|
pragma Assert (Self_Id = STPO.Environment_Task);
|
||||||
|
|
||||||
@ -212,7 +216,7 @@ package body System.Soft_Links.Tasking is
|
|||||||
SSL.Task_Termination_Handler := Task_Termination_Handler_T'Access;
|
SSL.Task_Termination_Handler := Task_Termination_Handler_T'Access;
|
||||||
|
|
||||||
-- No need to create a new Secondary Stack, since we will use the
|
-- No need to create a new Secondary Stack, since we will use the
|
||||||
-- default one created in s-secsta.adb
|
-- default one created in s-secsta.adb.
|
||||||
|
|
||||||
SSL.Set_Sec_Stack_Addr (SSL.Get_Sec_Stack_Addr_NT);
|
SSL.Set_Sec_Stack_Addr (SSL.Get_Sec_Stack_Addr_NT);
|
||||||
SSL.Set_Jmpbuf_Address (SSL.Get_Jmpbuf_Address_NT);
|
SSL.Set_Jmpbuf_Address (SSL.Get_Jmpbuf_Address_NT);
|
||||||
|
Loading…
Reference in New Issue
Block a user