[1/3] posix: Add internal symbols for posix_spawn interface

Message ID 20180915151622.17789-1-adhemerval.zanella@linaro.org
State Superseded
Headers show
Series
  • [1/3] posix: Add internal symbols for posix_spawn interface
Related show

Commit Message

Adhemerval Zanella Sept. 15, 2018, 3:16 p.m.
This patch adds internal hidden definition for mostly of the posix_spawn
function so it can be used internally on both popen and system
implementations.

Checked on x86_64-linux-gnu.

	* include/spawn.h (__posix_spawn, posix_spawn_file_actions_addclose,
	__posix_spawn_file_actions_adddup2, __posix_spawn_file_actions_destroy,
	__posix_spawn_file_actions_init, __posix_spawnattr_init,
	__posix_spawnattr_destroy, __posix_spawnattr_setflags,
	__posix_spawnattr_setsigdefault, __posix_spawnattr_setsigmask): New
	prototype.
	* posix/spawn.c (__posix_spawn): Add libc_hidden_def.
	* posix/spawn_faction_addclose.c
	(__posix_spawn_file_actions_addclose): Add hidden definition.
	* posix/spawn_faction_adddup2.c
	(__posix_spawn_file_actions_adddup2): Likewise.
	* posix/spawn_faction_destroy.c
	(__posix_spawn_file_actions_destroy): Likewise.
	* posix/spawn_faction_init.c (__posix_spawn_file_actions_init):
	Likewise.
	* posix/spawnattr_destroy.c (__posix_spawnattr_destroy): Likewise.
	* posix/spawnattr_init.c (__posix_spawnattr_init): Likewise.
	* posix/spawnattr_setdefault.c (__posix_spawnattr_setsigdefault):
	Likewise.
	* posix/spawnattr_setflags.c (__posix_spawnattr_setflags): Likewise.
	* posix/spawnattr_setsigmask.c (__posix_spawnattr_setsigmask):
	Likewise.
---
 ChangeLog                      | 25 ++++++++++++++++++++++++
 include/spawn.h                | 35 ++++++++++++++++++++++++++++++++++
 posix/spawn.c                  |  1 +
 posix/spawn_faction_addclose.c |  6 ++++--
 posix/spawn_faction_adddup2.c  |  6 ++++--
 posix/spawn_faction_destroy.c  |  4 +++-
 posix/spawn_faction_init.c     |  3 ++-
 posix/spawnattr_destroy.c      |  3 ++-
 posix/spawnattr_init.c         |  3 ++-
 posix/spawnattr_setdefault.c   |  5 +++--
 posix/spawnattr_setflags.c     |  3 ++-
 posix/spawnattr_setsigmask.c   |  3 ++-
 12 files changed, 85 insertions(+), 12 deletions(-)

-- 
2.17.1

Comments

Florian Weimer Sept. 17, 2018, 12:12 p.m. | #1
On 09/15/2018 05:16 PM, Adhemerval Zanella wrote:
> +__typeof (posix_spawn) __posix_spawn;

> +libc_hidden_proto (__posix_spawn)


I think libc_hidden_proto without a GLIBC_PRIVATE export doesn't make 
much sense.  Why can't you use attribute_hidden here, like for the other 
new function symbols?

Thanks,
Florian
Adhemerval Zanella Sept. 17, 2018, 7:10 p.m. | #2
On 17/09/2018 05:12, Florian Weimer wrote:
> On 09/15/2018 05:16 PM, Adhemerval Zanella wrote:

>> +__typeof (posix_spawn) __posix_spawn;

>> +libc_hidden_proto (__posix_spawn)

> 

> I think libc_hidden_proto without a GLIBC_PRIVATE export doesn't make much sense.  Why can't you use attribute_hidden here, like for the other new function symbols?

> 

> Thanks,

> Florian


I had to use libc_hidden_proto because versioned_symbol with a hidden 
symbol produces only a local one:

$ cat foo.c 
void __foo () __attribute__ ((visibility ("hidden")));

void __foo ()
{
}
__asm__ (".symver __foo, foo@@LIBFOO_1.0");
$ cat libfoo.map 
LIBFOO_1.0 {
  global:
    foo;
};
$ gcc -Wall -fpic -shared foo.c -o libfoo.so -Wl,-version-script=libfoo.map
$ objdump -t libfoo.so | grep -w foo
0000000000000000 l    df *ABS*  0000000000000000              foo.c
00000000000005da l     F .text  0000000000000007              foo@@LIBFOO_1.0
Florian Weimer Sept. 21, 2018, 1:09 p.m. | #3
* Adhemerval Zanella:

> On 17/09/2018 05:12, Florian Weimer wrote:

>> On 09/15/2018 05:16 PM, Adhemerval Zanella wrote:

>>> +__typeof (posix_spawn) __posix_spawn;

>>> +libc_hidden_proto (__posix_spawn)

>> 

>> I think libc_hidden_proto without a GLIBC_PRIVATE export doesn't

>> make much sense.  Why can't you use attribute_hidden here, like for

>> the other new function symbols?

>> 

>> Thanks,

>> Florian

>

> I had to use libc_hidden_proto because versioned_symbol with a hidden 

> symbol produces only a local one:


I see, I had forgotten about this.

Thanks,
Florian
Adhemerval Zanella Oct. 17, 2018, 5:11 p.m. | #4
Ping.

On 15/09/2018 12:16, Adhemerval Zanella wrote:
> This patch adds internal hidden definition for mostly of the posix_spawn

> function so it can be used internally on both popen and system

> implementations.

> 

> Checked on x86_64-linux-gnu.

> 

> 	* include/spawn.h (__posix_spawn, posix_spawn_file_actions_addclose,

> 	__posix_spawn_file_actions_adddup2, __posix_spawn_file_actions_destroy,

> 	__posix_spawn_file_actions_init, __posix_spawnattr_init,

> 	__posix_spawnattr_destroy, __posix_spawnattr_setflags,

> 	__posix_spawnattr_setsigdefault, __posix_spawnattr_setsigmask): New

> 	prototype.

> 	* posix/spawn.c (__posix_spawn): Add libc_hidden_def.

> 	* posix/spawn_faction_addclose.c

> 	(__posix_spawn_file_actions_addclose): Add hidden definition.

> 	* posix/spawn_faction_adddup2.c

> 	(__posix_spawn_file_actions_adddup2): Likewise.

> 	* posix/spawn_faction_destroy.c

> 	(__posix_spawn_file_actions_destroy): Likewise.

> 	* posix/spawn_faction_init.c (__posix_spawn_file_actions_init):

> 	Likewise.

> 	* posix/spawnattr_destroy.c (__posix_spawnattr_destroy): Likewise.

> 	* posix/spawnattr_init.c (__posix_spawnattr_init): Likewise.

> 	* posix/spawnattr_setdefault.c (__posix_spawnattr_setsigdefault):

> 	Likewise.

> 	* posix/spawnattr_setflags.c (__posix_spawnattr_setflags): Likewise.

> 	* posix/spawnattr_setsigmask.c (__posix_spawnattr_setsigmask):

> 	Likewise.

> ---

>  ChangeLog                      | 25 ++++++++++++++++++++++++

>  include/spawn.h                | 35 ++++++++++++++++++++++++++++++++++

>  posix/spawn.c                  |  1 +

>  posix/spawn_faction_addclose.c |  6 ++++--

>  posix/spawn_faction_adddup2.c  |  6 ++++--

>  posix/spawn_faction_destroy.c  |  4 +++-

>  posix/spawn_faction_init.c     |  3 ++-

>  posix/spawnattr_destroy.c      |  3 ++-

>  posix/spawnattr_init.c         |  3 ++-

>  posix/spawnattr_setdefault.c   |  5 +++--

>  posix/spawnattr_setflags.c     |  3 ++-

>  posix/spawnattr_setsigmask.c   |  3 ++-

>  12 files changed, 85 insertions(+), 12 deletions(-)

> 

> diff --git a/include/spawn.h b/include/spawn.h

> index a6c7a8adc3..7fdd965bd7 100644

> --- a/include/spawn.h

> +++ b/include/spawn.h

> @@ -1 +1,36 @@

> +#ifndef _SPAWN_H

>  #include <posix/spawn.h>

> +

> +# ifndef _ISOMAC

> +__typeof (posix_spawn) __posix_spawn;

> +libc_hidden_proto (__posix_spawn)

> +

> +__typeof (posix_spawn_file_actions_addclose)

> +  __posix_spawn_file_actions_addclose attribute_hidden;

> +

> +__typeof (posix_spawn_file_actions_adddup2)

> +  __posix_spawn_file_actions_adddup2 attribute_hidden;

> +

> +__typeof (posix_spawn_file_actions_destroy)

> +  __posix_spawn_file_actions_destroy attribute_hidden;

> +

> +__typeof (posix_spawn_file_actions_init) __posix_spawn_file_actions_init

> +  attribute_hidden;

> +

> +__typeof (posix_spawnattr_init) __posix_spawnattr_init

> +  attribute_hidden;

> +

> +__typeof (posix_spawnattr_destroy) __posix_spawnattr_destroy

> +  attribute_hidden;

> +

> +__typeof (posix_spawnattr_setflags) __posix_spawnattr_setflags

> +  attribute_hidden;

> +

> +__typeof (posix_spawnattr_setsigdefault) __posix_spawnattr_setsigdefault

> +  attribute_hidden;

> +

> +__typeof (posix_spawnattr_setsigmask) __posix_spawnattr_setsigmask

> +  attribute_hidden;

> +

> +# endif /* !_ISOMAC  */

> +#endif /* spawn.h  */

> diff --git a/posix/spawn.c b/posix/spawn.c

> index 51f67b2755..a82f1c84e2 100644

> --- a/posix/spawn.c

> +++ b/posix/spawn.c

> @@ -30,6 +30,7 @@ __posix_spawn (pid_t *pid, const char *path,

>    return __spawni (pid, path, file_actions, attrp, argv, envp, 0);

>  }

>  versioned_symbol (libc, __posix_spawn, posix_spawn, GLIBC_2_15);

> +libc_hidden_def (__posix_spawn)

>  

>  

>  #if SHLIB_COMPAT (libc, GLIBC_2_2, GLIBC_2_15)

> diff --git a/posix/spawn_faction_addclose.c b/posix/spawn_faction_addclose.c

> index 21081e19b5..e1fafe438c 100644

> --- a/posix/spawn_faction_addclose.c

> +++ b/posix/spawn_faction_addclose.c

> @@ -24,8 +24,8 @@

>  /* Add an action to FILE-ACTIONS which tells the implementation to call

>     `close' for the given file descriptor during the `spawn' call.  */

>  int

> -posix_spawn_file_actions_addclose (posix_spawn_file_actions_t *file_actions,

> -				   int fd)

> +__posix_spawn_file_actions_addclose (posix_spawn_file_actions_t *file_actions,

> +				     int fd)

>  {

>    struct __spawn_action *rec;

>  

> @@ -48,3 +48,5 @@ posix_spawn_file_actions_addclose (posix_spawn_file_actions_t *file_actions,

>  

>    return 0;

>  }

> +weak_alias (__posix_spawn_file_actions_addclose,

> +	    posix_spawn_file_actions_addclose)

> diff --git a/posix/spawn_faction_adddup2.c b/posix/spawn_faction_adddup2.c

> index 363bc29ae5..371b1de3e6 100644

> --- a/posix/spawn_faction_adddup2.c

> +++ b/posix/spawn_faction_adddup2.c

> @@ -24,8 +24,8 @@

>  /* Add an action to FILE-ACTIONS which tells the implementation to call

>     `dup2' for the given file descriptors during the `spawn' call.  */

>  int

> -posix_spawn_file_actions_adddup2 (posix_spawn_file_actions_t *file_actions,

> -				  int fd, int newfd)

> +__posix_spawn_file_actions_adddup2 (posix_spawn_file_actions_t *file_actions,

> +				    int fd, int newfd)

>  {

>    struct __spawn_action *rec;

>  

> @@ -49,3 +49,5 @@ posix_spawn_file_actions_adddup2 (posix_spawn_file_actions_t *file_actions,

>  

>    return 0;

>  }

> +weak_alias (__posix_spawn_file_actions_adddup2,

> +	    posix_spawn_file_actions_adddup2)

> diff --git a/posix/spawn_faction_destroy.c b/posix/spawn_faction_destroy.c

> index 46061ee347..2a2de4e41d 100644

> --- a/posix/spawn_faction_destroy.c

> +++ b/posix/spawn_faction_destroy.c

> @@ -22,7 +22,7 @@

>  

>  /* Deallocate the file actions.  */

>  int

> -posix_spawn_file_actions_destroy (posix_spawn_file_actions_t *file_actions)

> +__posix_spawn_file_actions_destroy (posix_spawn_file_actions_t *file_actions)

>  {

>    /* Free the paths in the open actions.  */

>    for (int i = 0; i < file_actions->__used; ++i)

> @@ -44,3 +44,5 @@ posix_spawn_file_actions_destroy (posix_spawn_file_actions_t *file_actions)

>    free (file_actions->__actions);

>    return 0;

>  }

> +weak_alias (__posix_spawn_file_actions_destroy,

> +	    posix_spawn_file_actions_destroy)

> diff --git a/posix/spawn_faction_init.c b/posix/spawn_faction_init.c

> index ddb42e6a77..98432067c6 100644

> --- a/posix/spawn_faction_init.c

> +++ b/posix/spawn_faction_init.c

> @@ -45,9 +45,10 @@ __posix_spawn_file_actions_realloc (posix_spawn_file_actions_t *file_actions)

>  

>  /* Initialize data structure for file attribute for `spawn' call.  */

>  int

> -posix_spawn_file_actions_init (posix_spawn_file_actions_t *file_actions)

> +__posix_spawn_file_actions_init (posix_spawn_file_actions_t *file_actions)

>  {

>    /* Simply clear all the elements.  */

>    memset (file_actions, '\0', sizeof (*file_actions));

>    return 0;

>  }

> +weak_alias (__posix_spawn_file_actions_init, posix_spawn_file_actions_init)

> diff --git a/posix/spawnattr_destroy.c b/posix/spawnattr_destroy.c

> index 603e00fffe..0433867785 100644

> --- a/posix/spawnattr_destroy.c

> +++ b/posix/spawnattr_destroy.c

> @@ -19,8 +19,9 @@

>  

>  /* Initialize data structure for file attribute for `spawn' call.  */

>  int

> -posix_spawnattr_destroy (posix_spawnattr_t *attr)

> +__posix_spawnattr_destroy (posix_spawnattr_t *attr)

>  {

>    /* Nothing to do in the moment.  */

>    return 0;

>  }

> +weak_alias (__posix_spawnattr_destroy, posix_spawnattr_destroy)

> diff --git a/posix/spawnattr_init.c b/posix/spawnattr_init.c

> index bab464e62b..4e1218ab44 100644

> --- a/posix/spawnattr_init.c

> +++ b/posix/spawnattr_init.c

> @@ -20,7 +20,7 @@

>  

>  /* Initialize data structure for file attribute for `spawn' call.  */

>  int

> -posix_spawnattr_init (posix_spawnattr_t *attr)

> +__posix_spawnattr_init (posix_spawnattr_t *attr)

>  {

>    /* All elements have to be initialized to the default values which

>       is generally zero.  */

> @@ -28,3 +28,4 @@ posix_spawnattr_init (posix_spawnattr_t *attr)

>  

>    return 0;

>  }

> +weak_alias (__posix_spawnattr_init, posix_spawnattr_init)

> diff --git a/posix/spawnattr_setdefault.c b/posix/spawnattr_setdefault.c

> index c77cda59be..174bcfa423 100644

> --- a/posix/spawnattr_setdefault.c

> +++ b/posix/spawnattr_setdefault.c

> @@ -20,11 +20,12 @@

>  

>  /* Set signal mask for signals with default handling in ATTR to SIGDEFAULT.  */

>  int

> -posix_spawnattr_setsigdefault (posix_spawnattr_t *attr,

> -			       const sigset_t *sigdefault)

> +__posix_spawnattr_setsigdefault (posix_spawnattr_t *attr,

> +				 const sigset_t *sigdefault)

>  {

>    /* Copy the sigset_t data to the user buffer.  */

>    memcpy (&attr->__sd, sigdefault, sizeof (sigset_t));

>  

>    return 0;

>  }

> +weak_alias (__posix_spawnattr_setsigdefault, posix_spawnattr_setsigdefault)

> diff --git a/posix/spawnattr_setflags.c b/posix/spawnattr_setflags.c

> index cf9a60181d..0a42e94770 100644

> --- a/posix/spawnattr_setflags.c

> +++ b/posix/spawnattr_setflags.c

> @@ -30,7 +30,7 @@

>  

>  /* Store flags in the attribute structure.  */

>  int

> -posix_spawnattr_setflags (posix_spawnattr_t *attr, short int flags)

> +__posix_spawnattr_setflags (posix_spawnattr_t *attr, short int flags)

>  {

>    /* Check no invalid bits are set.  */

>    if (flags & ~ALL_FLAGS)

> @@ -41,3 +41,4 @@ posix_spawnattr_setflags (posix_spawnattr_t *attr, short int flags)

>  

>    return 0;

>  }

> +weak_alias (__posix_spawnattr_setflags, posix_spawnattr_setflags)

> diff --git a/posix/spawnattr_setsigmask.c b/posix/spawnattr_setsigmask.c

> index 7ae81ad470..12c0111af4 100644

> --- a/posix/spawnattr_setsigmask.c

> +++ b/posix/spawnattr_setsigmask.c

> @@ -20,7 +20,7 @@

>  

>  /* Set signal mask for the new process in ATTR to SIGMASK.  */

>  int

> -posix_spawnattr_setsigmask (posix_spawnattr_t *attr,

> +__posix_spawnattr_setsigmask (posix_spawnattr_t *attr,

>  			    const sigset_t *sigmask)

>  {

>    /* Copy the sigset_t data to the user buffer.  */

> @@ -28,3 +28,4 @@ posix_spawnattr_setsigmask (posix_spawnattr_t *attr,

>  

>    return 0;

>  }

> +weak_alias (__posix_spawnattr_setsigmask, posix_spawnattr_setsigmask)

>

Patch

diff --git a/include/spawn.h b/include/spawn.h
index a6c7a8adc3..7fdd965bd7 100644
--- a/include/spawn.h
+++ b/include/spawn.h
@@ -1 +1,36 @@ 
+#ifndef _SPAWN_H
 #include <posix/spawn.h>
+
+# ifndef _ISOMAC
+__typeof (posix_spawn) __posix_spawn;
+libc_hidden_proto (__posix_spawn)
+
+__typeof (posix_spawn_file_actions_addclose)
+  __posix_spawn_file_actions_addclose attribute_hidden;
+
+__typeof (posix_spawn_file_actions_adddup2)
+  __posix_spawn_file_actions_adddup2 attribute_hidden;
+
+__typeof (posix_spawn_file_actions_destroy)
+  __posix_spawn_file_actions_destroy attribute_hidden;
+
+__typeof (posix_spawn_file_actions_init) __posix_spawn_file_actions_init
+  attribute_hidden;
+
+__typeof (posix_spawnattr_init) __posix_spawnattr_init
+  attribute_hidden;
+
+__typeof (posix_spawnattr_destroy) __posix_spawnattr_destroy
+  attribute_hidden;
+
+__typeof (posix_spawnattr_setflags) __posix_spawnattr_setflags
+  attribute_hidden;
+
+__typeof (posix_spawnattr_setsigdefault) __posix_spawnattr_setsigdefault
+  attribute_hidden;
+
+__typeof (posix_spawnattr_setsigmask) __posix_spawnattr_setsigmask
+  attribute_hidden;
+
+# endif /* !_ISOMAC  */
+#endif /* spawn.h  */
diff --git a/posix/spawn.c b/posix/spawn.c
index 51f67b2755..a82f1c84e2 100644
--- a/posix/spawn.c
+++ b/posix/spawn.c
@@ -30,6 +30,7 @@  __posix_spawn (pid_t *pid, const char *path,
   return __spawni (pid, path, file_actions, attrp, argv, envp, 0);
 }
 versioned_symbol (libc, __posix_spawn, posix_spawn, GLIBC_2_15);
+libc_hidden_def (__posix_spawn)
 
 
 #if SHLIB_COMPAT (libc, GLIBC_2_2, GLIBC_2_15)
diff --git a/posix/spawn_faction_addclose.c b/posix/spawn_faction_addclose.c
index 21081e19b5..e1fafe438c 100644
--- a/posix/spawn_faction_addclose.c
+++ b/posix/spawn_faction_addclose.c
@@ -24,8 +24,8 @@ 
 /* Add an action to FILE-ACTIONS which tells the implementation to call
    `close' for the given file descriptor during the `spawn' call.  */
 int
-posix_spawn_file_actions_addclose (posix_spawn_file_actions_t *file_actions,
-				   int fd)
+__posix_spawn_file_actions_addclose (posix_spawn_file_actions_t *file_actions,
+				     int fd)
 {
   struct __spawn_action *rec;
 
@@ -48,3 +48,5 @@  posix_spawn_file_actions_addclose (posix_spawn_file_actions_t *file_actions,
 
   return 0;
 }
+weak_alias (__posix_spawn_file_actions_addclose,
+	    posix_spawn_file_actions_addclose)
diff --git a/posix/spawn_faction_adddup2.c b/posix/spawn_faction_adddup2.c
index 363bc29ae5..371b1de3e6 100644
--- a/posix/spawn_faction_adddup2.c
+++ b/posix/spawn_faction_adddup2.c
@@ -24,8 +24,8 @@ 
 /* Add an action to FILE-ACTIONS which tells the implementation to call
    `dup2' for the given file descriptors during the `spawn' call.  */
 int
-posix_spawn_file_actions_adddup2 (posix_spawn_file_actions_t *file_actions,
-				  int fd, int newfd)
+__posix_spawn_file_actions_adddup2 (posix_spawn_file_actions_t *file_actions,
+				    int fd, int newfd)
 {
   struct __spawn_action *rec;
 
@@ -49,3 +49,5 @@  posix_spawn_file_actions_adddup2 (posix_spawn_file_actions_t *file_actions,
 
   return 0;
 }
+weak_alias (__posix_spawn_file_actions_adddup2,
+	    posix_spawn_file_actions_adddup2)
diff --git a/posix/spawn_faction_destroy.c b/posix/spawn_faction_destroy.c
index 46061ee347..2a2de4e41d 100644
--- a/posix/spawn_faction_destroy.c
+++ b/posix/spawn_faction_destroy.c
@@ -22,7 +22,7 @@ 
 
 /* Deallocate the file actions.  */
 int
-posix_spawn_file_actions_destroy (posix_spawn_file_actions_t *file_actions)
+__posix_spawn_file_actions_destroy (posix_spawn_file_actions_t *file_actions)
 {
   /* Free the paths in the open actions.  */
   for (int i = 0; i < file_actions->__used; ++i)
@@ -44,3 +44,5 @@  posix_spawn_file_actions_destroy (posix_spawn_file_actions_t *file_actions)
   free (file_actions->__actions);
   return 0;
 }
+weak_alias (__posix_spawn_file_actions_destroy,
+	    posix_spawn_file_actions_destroy)
diff --git a/posix/spawn_faction_init.c b/posix/spawn_faction_init.c
index ddb42e6a77..98432067c6 100644
--- a/posix/spawn_faction_init.c
+++ b/posix/spawn_faction_init.c
@@ -45,9 +45,10 @@  __posix_spawn_file_actions_realloc (posix_spawn_file_actions_t *file_actions)
 
 /* Initialize data structure for file attribute for `spawn' call.  */
 int
-posix_spawn_file_actions_init (posix_spawn_file_actions_t *file_actions)
+__posix_spawn_file_actions_init (posix_spawn_file_actions_t *file_actions)
 {
   /* Simply clear all the elements.  */
   memset (file_actions, '\0', sizeof (*file_actions));
   return 0;
 }
+weak_alias (__posix_spawn_file_actions_init, posix_spawn_file_actions_init)
diff --git a/posix/spawnattr_destroy.c b/posix/spawnattr_destroy.c
index 603e00fffe..0433867785 100644
--- a/posix/spawnattr_destroy.c
+++ b/posix/spawnattr_destroy.c
@@ -19,8 +19,9 @@ 
 
 /* Initialize data structure for file attribute for `spawn' call.  */
 int
-posix_spawnattr_destroy (posix_spawnattr_t *attr)
+__posix_spawnattr_destroy (posix_spawnattr_t *attr)
 {
   /* Nothing to do in the moment.  */
   return 0;
 }
+weak_alias (__posix_spawnattr_destroy, posix_spawnattr_destroy)
diff --git a/posix/spawnattr_init.c b/posix/spawnattr_init.c
index bab464e62b..4e1218ab44 100644
--- a/posix/spawnattr_init.c
+++ b/posix/spawnattr_init.c
@@ -20,7 +20,7 @@ 
 
 /* Initialize data structure for file attribute for `spawn' call.  */
 int
-posix_spawnattr_init (posix_spawnattr_t *attr)
+__posix_spawnattr_init (posix_spawnattr_t *attr)
 {
   /* All elements have to be initialized to the default values which
      is generally zero.  */
@@ -28,3 +28,4 @@  posix_spawnattr_init (posix_spawnattr_t *attr)
 
   return 0;
 }
+weak_alias (__posix_spawnattr_init, posix_spawnattr_init)
diff --git a/posix/spawnattr_setdefault.c b/posix/spawnattr_setdefault.c
index c77cda59be..174bcfa423 100644
--- a/posix/spawnattr_setdefault.c
+++ b/posix/spawnattr_setdefault.c
@@ -20,11 +20,12 @@ 
 
 /* Set signal mask for signals with default handling in ATTR to SIGDEFAULT.  */
 int
-posix_spawnattr_setsigdefault (posix_spawnattr_t *attr,
-			       const sigset_t *sigdefault)
+__posix_spawnattr_setsigdefault (posix_spawnattr_t *attr,
+				 const sigset_t *sigdefault)
 {
   /* Copy the sigset_t data to the user buffer.  */
   memcpy (&attr->__sd, sigdefault, sizeof (sigset_t));
 
   return 0;
 }
+weak_alias (__posix_spawnattr_setsigdefault, posix_spawnattr_setsigdefault)
diff --git a/posix/spawnattr_setflags.c b/posix/spawnattr_setflags.c
index cf9a60181d..0a42e94770 100644
--- a/posix/spawnattr_setflags.c
+++ b/posix/spawnattr_setflags.c
@@ -30,7 +30,7 @@ 
 
 /* Store flags in the attribute structure.  */
 int
-posix_spawnattr_setflags (posix_spawnattr_t *attr, short int flags)
+__posix_spawnattr_setflags (posix_spawnattr_t *attr, short int flags)
 {
   /* Check no invalid bits are set.  */
   if (flags & ~ALL_FLAGS)
@@ -41,3 +41,4 @@  posix_spawnattr_setflags (posix_spawnattr_t *attr, short int flags)
 
   return 0;
 }
+weak_alias (__posix_spawnattr_setflags, posix_spawnattr_setflags)
diff --git a/posix/spawnattr_setsigmask.c b/posix/spawnattr_setsigmask.c
index 7ae81ad470..12c0111af4 100644
--- a/posix/spawnattr_setsigmask.c
+++ b/posix/spawnattr_setsigmask.c
@@ -20,7 +20,7 @@ 
 
 /* Set signal mask for the new process in ATTR to SIGMASK.  */
 int
-posix_spawnattr_setsigmask (posix_spawnattr_t *attr,
+__posix_spawnattr_setsigmask (posix_spawnattr_t *attr,
 			    const sigset_t *sigmask)
 {
   /* Copy the sigset_t data to the user buffer.  */
@@ -28,3 +28,4 @@  posix_spawnattr_setsigmask (posix_spawnattr_t *attr,
 
   return 0;
 }
+weak_alias (__posix_spawnattr_setsigmask, posix_spawnattr_setsigmask)