mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-22 04:50:07 +00:00
Fix -Os feof_unlocked linknamespace, localplt issues (bug 15105, bug 19463).
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. [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.
This commit is contained in:
parent
0c8a67a573
commit
7fc03cf320
19
ChangeLog
19
ChangeLog
@ -1,3 +1,22 @@
|
|||||||
|
2018-02-15 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.
|
||||||
|
|
||||||
2018-02-15 Wilco Dijkstra <wdijkstr@arm.com>
|
2018-02-15 Wilco Dijkstra <wdijkstr@arm.com>
|
||||||
|
|
||||||
* sysdeps/aarch64/fpu/fpu_control.h: Use <> in include.
|
* sysdeps/aarch64/fpu/fpu_control.h: Use <> in include.
|
||||||
|
@ -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
|
/* Process the known entries of the file. Comments start with `#' and
|
||||||
end with the end of the line. Empty lines are ignored. */
|
end with the end of the line. Empty lines are ignored. */
|
||||||
while (!feof_unlocked (fp))
|
while (!__feof_unlocked (fp))
|
||||||
{
|
{
|
||||||
char *rp, *endp, *word;
|
char *rp, *endp, *word;
|
||||||
ssize_t n = __getdelim (&line, &line_len, '\n', fp);
|
ssize_t n = __getdelim (&line, &line_len, '\n', fp);
|
||||||
|
@ -179,6 +179,8 @@ libc_hidden_proto (__fgets_unlocked)
|
|||||||
libc_hidden_proto (fputs_unlocked)
|
libc_hidden_proto (fputs_unlocked)
|
||||||
extern __typeof (fputs_unlocked) __fputs_unlocked;
|
extern __typeof (fputs_unlocked) __fputs_unlocked;
|
||||||
libc_hidden_proto (__fputs_unlocked)
|
libc_hidden_proto (__fputs_unlocked)
|
||||||
|
libc_hidden_proto (feof_unlocked)
|
||||||
|
extern __typeof (feof_unlocked) __feof_unlocked attribute_hidden;
|
||||||
libc_hidden_proto (fmemopen)
|
libc_hidden_proto (fmemopen)
|
||||||
/* The prototype needs repeating instead of using __typeof to use
|
/* The prototype needs repeating instead of using __typeof to use
|
||||||
__THROW in C++ tests. */
|
__THROW in C++ tests. */
|
||||||
@ -199,5 +201,13 @@ libc_hidden_proto (__fmemopen)
|
|||||||
extern int __gen_tempfd (int flags);
|
extern int __gen_tempfd (int flags);
|
||||||
libc_hidden_proto (__gen_tempfd)
|
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 /* not _ISOMAC */
|
||||||
#endif /* stdio.h */
|
#endif /* stdio.h */
|
||||||
|
@ -90,7 +90,7 @@ char *alloca ();
|
|||||||
|
|
||||||
/* Some optimizations for glibc. */
|
/* Some optimizations for glibc. */
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
# define FEOF(fp) feof_unlocked (fp)
|
# define FEOF(fp) __feof_unlocked (fp)
|
||||||
# define FGETS(buf, n, fp) __fgets_unlocked (buf, n, fp)
|
# define FGETS(buf, n, fp) __fgets_unlocked (buf, n, fp)
|
||||||
#else
|
#else
|
||||||
# define FEOF(fp) feof (fp)
|
# define FEOF(fp) feof (fp)
|
||||||
|
@ -30,8 +30,10 @@
|
|||||||
#undef feof_unlocked
|
#undef feof_unlocked
|
||||||
|
|
||||||
int
|
int
|
||||||
feof_unlocked (_IO_FILE *fp)
|
__feof_unlocked (_IO_FILE *fp)
|
||||||
{
|
{
|
||||||
CHECK_FILE (fp, EOF);
|
CHECK_FILE (fp, EOF);
|
||||||
return _IO_feof_unlocked (fp);
|
return _IO_feof_unlocked (fp);
|
||||||
}
|
}
|
||||||
|
weak_alias (__feof_unlocked, feof_unlocked)
|
||||||
|
libc_hidden_weak (feof_unlocked)
|
||||||
|
@ -599,7 +599,7 @@ nss_parse_file (const char *fname)
|
|||||||
last = this;
|
last = this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (!feof_unlocked (fp));
|
while (!__feof_unlocked (fp));
|
||||||
|
|
||||||
/* Free the buffer. */
|
/* Free the buffer. */
|
||||||
free (line);
|
free (line);
|
||||||
|
@ -89,6 +89,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
# include <idna.h>
|
# include <idna.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if IS_IN (libc)
|
||||||
|
# define feof_unlocked(fp) __feof_unlocked (fp)
|
||||||
|
#endif
|
||||||
|
|
||||||
struct gaih_service
|
struct gaih_service
|
||||||
{
|
{
|
||||||
const char *name;
|
const char *name;
|
||||||
|
@ -53,7 +53,7 @@ __readonly_area (const char *ptr, size_t size)
|
|||||||
char *line = NULL;
|
char *line = NULL;
|
||||||
size_t linelen = 0;
|
size_t linelen = 0;
|
||||||
|
|
||||||
while (! feof_unlocked (fp))
|
while (! __feof_unlocked (fp))
|
||||||
{
|
{
|
||||||
if (_IO_getdelim (&line, &linelen, '\n', fp) <= 0)
|
if (_IO_getdelim (&line, &linelen, '\n', fp) <= 0)
|
||||||
break;
|
break;
|
||||||
|
@ -198,7 +198,7 @@ __getdate_r (const char *string, struct tm *tp)
|
|||||||
if (result && *result == '\0')
|
if (result && *result == '\0')
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
while (!feof_unlocked (fp));
|
while (!__feof_unlocked (fp));
|
||||||
|
|
||||||
free (instr);
|
free (instr);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user