From 8345a76018851ba52e05216e3d7c772e24d5da44 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Sun, 1 Oct 2017 15:10:12 -0700 Subject: [PATCH] Mark internal argp functions with attribute_hidden [BZ #18822] Mark internal argp functions with attribute_hidden to allow direct access to them within libc.so and libc.a without using GOT nor PLT. [BZ #18822] * argp/argp-fmtstream.c: Include . * argp/argp-fs-xinl.c: Likewise. * argp/argp-help.c: Include and . * argp/argp-parse.c: Include . * argp/argp-xinl.c: Likewise. * include/argp-fmtstream.h: New file. * include/argp.h (__argp_error): Add attribute_hidden. (__argp_failure): Likewise. (__argp_input): Likewise. (__argp_state_help): Likewise. --- ChangeLog | 14 ++++++++++++++ argp/argp-fmtstream.c | 2 +- argp/argp-fs-xinl.c | 2 +- argp/argp-help.c | 4 ++-- argp/argp-parse.c | 2 +- argp/argp-xinl.c | 2 +- include/argp-fmtstream.h | 19 +++++++++++++++++++ include/argp.h | 10 ++++++++++ 8 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 include/argp-fmtstream.h diff --git a/ChangeLog b/ChangeLog index 15c90bcf8d..a877d9c997 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2017-10-01 H.J. Lu + + [BZ #18822] + * argp/argp-fmtstream.c: Include . + * argp/argp-fs-xinl.c: Likewise. + * argp/argp-help.c: Include and . + * argp/argp-parse.c: Include . + * argp/argp-xinl.c: Likewise. + * include/argp-fmtstream.h: New file. + * include/argp.h (__argp_error): Add attribute_hidden. + (__argp_failure): Likewise. + (__argp_input): Likewise. + (__argp_state_help): Likewise. + 2017-10-01 H.J. Lu [BZ #18822] diff --git a/argp/argp-fmtstream.c b/argp/argp-fmtstream.c index 9e41708cbd..f12c265196 100644 --- a/argp/argp-fmtstream.c +++ b/argp/argp-fmtstream.c @@ -30,7 +30,7 @@ #include #include -#include "argp-fmtstream.h" +#include #include "argp-namefrob.h" #ifndef ARGP_FMTSTREAM_USE_LINEWRAP diff --git a/argp/argp-fs-xinl.c b/argp/argp-fs-xinl.c index f0ce509040..8ebbb8eb1f 100644 --- a/argp/argp-fs-xinl.c +++ b/argp/argp-fs-xinl.c @@ -24,7 +24,7 @@ #define ARGP_FS_EI #undef __OPTIMIZE__ #define __OPTIMIZE__ 1 -#include "argp-fmtstream.h" +#include #if 0 /* Not exported. */ diff --git a/argp/argp-help.c b/argp/argp-help.c index e704c5a3aa..821d98c3d6 100644 --- a/argp/argp-help.c +++ b/argp/argp-help.c @@ -79,8 +79,8 @@ char *strerror (int errnum); # endif #endif -#include "argp.h" -#include "argp-fmtstream.h" +#include +#include #include "argp-namefrob.h" #ifndef SIZE_MAX diff --git a/argp/argp-parse.c b/argp/argp-parse.c index 662eed32ad..691c4623ac 100644 --- a/argp/argp-parse.c +++ b/argp/argp-parse.c @@ -62,7 +62,7 @@ char *alloca (); # define N_(msgid) (msgid) #endif -#include "argp.h" +#include #include "argp-namefrob.h" /* Getopt return values. */ diff --git a/argp/argp-xinl.c b/argp/argp-xinl.c index 0b45bdc86b..206d0e46c7 100644 --- a/argp/argp-xinl.c +++ b/argp/argp-xinl.c @@ -31,7 +31,7 @@ #define ARGP_EI #undef __OPTIMIZE__ #define __OPTIMIZE__ 1 -#include "argp.h" +#include /* Add weak aliases. */ #if _LIBC - 0 && defined (weak_alias) diff --git a/include/argp-fmtstream.h b/include/argp-fmtstream.h new file mode 100644 index 0000000000..45c65ce834 --- /dev/null +++ b/include/argp-fmtstream.h @@ -0,0 +1,19 @@ +#ifndef _ARGP_FMTSTREAM_H +#include + +#ifndef _ISOMAC +extern __typeof (__argp_fmtstream_ensure) __argp_fmtstream_ensure + attribute_hidden; +extern __typeof (__argp_fmtstream_free) __argp_fmtstream_free + attribute_hidden; +extern __typeof (__argp_fmtstream_printf) __argp_fmtstream_printf + attribute_hidden; +extern __typeof (__argp_fmtstream_update) __argp_fmtstream_update + attribute_hidden; +extern __typeof (__argp_fmtstream_write) __argp_fmtstream_write + attribute_hidden; +extern __typeof (__argp_make_fmtstream) __argp_make_fmtstream + attribute_hidden; +#endif + +#endif diff --git a/include/argp.h b/include/argp.h index 92be5f90f1..6cf8782060 100644 --- a/include/argp.h +++ b/include/argp.h @@ -1 +1,11 @@ +#ifndef _ARGP_H #include + +#ifndef _ISOMAC +extern __typeof (__argp_error) __argp_error attribute_hidden; +extern __typeof (__argp_failure) __argp_failure attribute_hidden; +extern __typeof (__argp_input) __argp_input attribute_hidden; +extern __typeof (__argp_state_help) __argp_state_help attribute_hidden; +#endif + +#endif