This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Fix -Os feof_unlocked linknamespace, localplt issues (bug 15105, bug 19463)



On 07/02/2018 15:34, Joseph Myers wrote:
> Continuing the fixes for linknamespace and localplt test failures with
> -Os that arise from functions not being inlined in that case, this
> patch fixes such failures for feof_unlocked.
> 
> The usual approach is followed of adding __feof_unlocked (inlined when
> feof_unlocked is), making calls use it when required for namespace
> reasons, and using libc_hidden_proto / libc_hidden_weak for the
> feof_unlocked weak alias when only localplt but not namespace issues
> are involved.  In the case of getaddrinfo.c, use of __feof_unlocked
> needs to be conditional since that code is also used in nscd (where
> __feof_unlocked is not available).
> 
> Tested for x86_64 (both without -Os to make sure that case continues
> to work, and with -Os to make sure all the relevant linknamespace and
> localplt test failures are resolved).  Because of other such failures
> that remain after this patch, neither of the bugs can yet be closed.
> 
> 2018-02-07  Joseph Myers  <joseph@codesourcery.com>
> 
> 	[BZ #15105]
> 	[BZ #19463]
> 	* libio/feof_u.c (feof_unlocked): Rename to __feof_unlocked and
> 	define as weak alias of __feof_unlocked.  Use libc_hidden_weak.
> 	* include/stdio.h (feof_unlocked): Use libc_hidden_proto.
> 	(__feof_unlocked): New declaration, and inline function if
> 	[__USE_EXTERN_INLINES].
> 	* iconv/gconv_conf.c (read_conf_file): Call __feof_unlocked
> 	instead of feof_unlocked.
> 	* intl/localealias.c [_LIBC] (FEOF): Likewise.
> 	* nss/nsswitch.c (nss_parse_file): Likewise.
> 	* sysdeps/unix/sysv/linux/readonly-area.c (__readonly_area):
> 	Likewise.
> 	* time/getdate.c (__getdate_r): Likewise.
> 	* sysdeps/posix/getaddrinfo.c [IS_IN (libc)] (feof_unlocked):
> 	Define as macro to call __feof_unlocked.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>

> 
> diff --git a/iconv/gconv_conf.c b/iconv/gconv_conf.c
> index d6cf9d2..f173cde 100644
> --- a/iconv/gconv_conf.c
> +++ b/iconv/gconv_conf.c
> @@ -374,7 +374,7 @@ read_conf_file (const char *filename, const char *directory, size_t dir_len,
>  
>    /* Process the known entries of the file.  Comments start with `#' and
>       end with the end of the line.  Empty lines are ignored.  */
> -  while (!feof_unlocked (fp))
> +  while (!__feof_unlocked (fp))
>      {
>        char *rp, *endp, *word;
>        ssize_t n = __getdelim (&line, &line_len, '\n', fp);
> diff --git a/include/stdio.h b/include/stdio.h
> index 94bc2fd..7ab3ddd 100644
> --- a/include/stdio.h
> +++ b/include/stdio.h
> @@ -179,6 +179,8 @@ libc_hidden_proto (__fgets_unlocked)
>  libc_hidden_proto (fputs_unlocked)
>  extern __typeof (fputs_unlocked) __fputs_unlocked;
>  libc_hidden_proto (__fputs_unlocked)
> +libc_hidden_proto (feof_unlocked)
> +extern __typeof (feof_unlocked) __feof_unlocked attribute_hidden;
>  libc_hidden_proto (fmemopen)
>  /* The prototype needs repeating instead of using __typeof to use
>     __THROW in C++ tests.  */
> @@ -199,5 +201,13 @@ libc_hidden_proto (__fmemopen)
>  extern int __gen_tempfd (int flags);
>  libc_hidden_proto (__gen_tempfd)
>  
> +#  ifdef __USE_EXTERN_INLINES
> +__extern_inline int
> +__NTH (__feof_unlocked (FILE *__stream))
> +{
> +  return __feof_unlocked_body (__stream);
> +}
> +#  endif
> +
>  # endif /* not _ISOMAC */
>  #endif /* stdio.h */
> diff --git a/intl/localealias.c b/intl/localealias.c
> index f0fefe4..09e7894 100644
> --- a/intl/localealias.c
> +++ b/intl/localealias.c
> @@ -90,7 +90,7 @@ char *alloca ();
>  
>  /* Some optimizations for glibc.  */
>  #ifdef _LIBC
> -# define FEOF(fp)		feof_unlocked (fp)
> +# define FEOF(fp)		__feof_unlocked (fp)
>  # define FGETS(buf, n, fp)	__fgets_unlocked (buf, n, fp)
>  #else
>  # define FEOF(fp)		feof (fp)
> diff --git a/libio/feof_u.c b/libio/feof_u.c
> index 581808e..9239144 100644
> --- a/libio/feof_u.c
> +++ b/libio/feof_u.c
> @@ -30,8 +30,10 @@
>  #undef feof_unlocked
>  
>  int
> -feof_unlocked (_IO_FILE *fp)
> +__feof_unlocked (_IO_FILE *fp)
>  {
>    CHECK_FILE (fp, EOF);
>    return _IO_feof_unlocked (fp);
>  }
> +weak_alias (__feof_unlocked, feof_unlocked)
> +libc_hidden_weak (feof_unlocked)
> diff --git a/nss/nsswitch.c b/nss/nsswitch.c
> index d5e6559..4b8deed 100644
> --- a/nss/nsswitch.c
> +++ b/nss/nsswitch.c
> @@ -599,7 +599,7 @@ nss_parse_file (const char *fname)
>  	  last = this;
>  	}
>      }
> -  while (!feof_unlocked (fp));
> +  while (!__feof_unlocked (fp));
>  
>    /* Free the buffer.  */
>    free (line);
> diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c
> index c15f76e..740bdd1 100644
> --- a/sysdeps/posix/getaddrinfo.c
> +++ b/sysdeps/posix/getaddrinfo.c
> @@ -89,6 +89,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
>  # include <idna.h>
>  #endif
>  
> +#if IS_IN (libc)
> +# define feof_unlocked(fp) __feof_unlocked (fp)
> +#endif
> +
>  struct gaih_service
>    {
>      const char *name;
> diff --git a/sysdeps/unix/sysv/linux/readonly-area.c b/sysdeps/unix/sysv/linux/readonly-area.c
> index 9cbb6e9..5546bf7 100644
> --- a/sysdeps/unix/sysv/linux/readonly-area.c
> +++ b/sysdeps/unix/sysv/linux/readonly-area.c
> @@ -53,7 +53,7 @@ __readonly_area (const char *ptr, size_t size)
>    char *line = NULL;
>    size_t linelen = 0;
>  
> -  while (! feof_unlocked (fp))
> +  while (! __feof_unlocked (fp))
>      {
>        if (_IO_getdelim (&line, &linelen, '\n', fp) <= 0)
>  	break;
> diff --git a/time/getdate.c b/time/getdate.c
> index cde93f7..29ad760 100644
> --- a/time/getdate.c
> +++ b/time/getdate.c
> @@ -198,7 +198,7 @@ __getdate_r (const char *string, struct tm *tp)
>        if (result && *result == '\0')
>  	break;
>      }
> -  while (!feof_unlocked (fp));
> +  while (!__feof_unlocked (fp));
>  
>    free (instr);
>  
> 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]