Message ID | 20180915151622.17789-1-adhemerval.zanella@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | [1/3] posix: Add internal symbols for posix_spawn interface | expand |
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
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
* 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
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) >
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)