mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-26 19:23:34 +08:00
ldbl-opt: Add argp_error and argp_failure (bug 23983)
The functions argp_error and argp_failure are missing support for printing long double values when long double has the same format as double. This patch adds the new functions __nldbl_argp_error and __nldbl_argp_failure, as well as header magic to redirect calls to them when -mlong-double-64 is in use. Tested for powerpc, powerpc64 and powerpc64le.
This commit is contained in:
parent
c259196b50
commit
6e1f6440b9
28
ChangeLog
28
ChangeLog
@ -1,3 +1,31 @@
|
||||
2019-03-01 Gabriel F. T. Gomes <gabriel@inconstante.eti.br>
|
||||
|
||||
[BZ #23983]
|
||||
* argp/Makefile (headers): Add bits/argp-ldbl.h.
|
||||
* argp/argp.h [defined __LDBL_COMPAT]: Include bits/argp-ldbl.h.
|
||||
* argp/bits/argp-ldbl.h: New file.
|
||||
* include/argp.h: Include stdarg.h. Add prototypes for internal
|
||||
functions: __argp_error_internal and __argp_failure_internal.
|
||||
* include/bits/argp-ldbl.h: New file.
|
||||
* sysdeps/ieee754/ldbl-opt/Versions (libc): Add
|
||||
__nldbl_argp_error and __nldbl_argp_failure.
|
||||
* sysdeps/ieee754/ldbl-opt/nldbl-compat.c: Include argp.h.
|
||||
(__nldbl_argp_error, __nldbl_argp_failure): New functions.
|
||||
* sysdeps/ieee754/ldbl-opt/nldbl-compat.h: Include argp.h.
|
||||
Redirect argp_error and argp_failure calls.
|
||||
* sysdeps/unix/sysv/linux/alpha/libc.abilist: Update.
|
||||
* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist:
|
||||
Likewise.
|
||||
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist:
|
||||
Likewise.
|
||||
* sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist:
|
||||
Likewise.
|
||||
* sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist:
|
||||
Likewise.
|
||||
* sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist: Likewise.
|
||||
|
||||
2019-03-01 Florian Weimer <fweimer@redhat.com>
|
||||
|
||||
[BZ #20419]
|
||||
|
@ -22,7 +22,7 @@ subdir := argp
|
||||
|
||||
include ../Makeconfig
|
||||
|
||||
headers = argp.h
|
||||
headers = argp.h bits/argp-ldbl.h
|
||||
routines = $(addprefix argp-, ba fmtstream fs-xinl help parse pv \
|
||||
pvh xinl eexst)
|
||||
|
||||
|
@ -554,6 +554,10 @@ __NTH (__option_is_end (const struct argp_option *__opt))
|
||||
# endif
|
||||
#endif /* Use extern inlines. */
|
||||
|
||||
#ifdef __LDBL_COMPAT
|
||||
# include <bits/argp-ldbl.h>
|
||||
#endif
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* argp.h */
|
||||
|
24
argp/bits/argp-ldbl.h
Normal file
24
argp/bits/argp-ldbl.h
Normal file
@ -0,0 +1,24 @@
|
||||
/* Redirections for argp functions for -mlong-double-64.
|
||||
Copyright (C) 2019 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef _ARGP_H
|
||||
# error "Never include <bits/argp-ldbl.h> directly; use <argp.h> instead."
|
||||
#endif
|
||||
|
||||
__LDBL_REDIR_DECL (argp_error)
|
||||
__LDBL_REDIR_DECL (argp_failure)
|
@ -1,6 +1,17 @@
|
||||
#ifndef _ARGP_H
|
||||
#include <argp/argp.h>
|
||||
|
||||
/* Prototypes for internal argp.h functions. */
|
||||
#include <stdarg.h>
|
||||
void
|
||||
__argp_error_internal (const struct argp_state *state, const char *fmt,
|
||||
va_list ap, unsigned int mode_flags);
|
||||
|
||||
void
|
||||
__argp_failure_internal (const struct argp_state *state, int status,
|
||||
int errnum, const char *fmt, va_list ap,
|
||||
unsigned int mode_flags);
|
||||
|
||||
#ifndef _ISOMAC
|
||||
extern __typeof (__argp_error) __argp_error attribute_hidden;
|
||||
extern __typeof (__argp_failure) __argp_failure attribute_hidden;
|
||||
|
1
include/bits/argp-ldbl.h
Normal file
1
include/bits/argp-ldbl.h
Normal file
@ -0,0 +1 @@
|
||||
#include <argp/bits/argp-ldbl.h>
|
@ -78,6 +78,9 @@ libc {
|
||||
__nldbl___dprintf_chk; __nldbl___vdprintf_chk;
|
||||
__nldbl___obstack_printf_chk; __nldbl___obstack_vprintf_chk;
|
||||
}
|
||||
GLIBC_2.30 {
|
||||
__nldbl_argp_error; __nldbl_argp_failure;
|
||||
}
|
||||
}
|
||||
libm {
|
||||
NLDBL_VERSION {
|
||||
|
@ -22,6 +22,7 @@
|
||||
#undef __GLIBC_USE_DEPRECATED_SCANF
|
||||
#define __GLIBC_USE_DEPRECATED_SCANF 1
|
||||
|
||||
#include <argp.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <libio/strfile.h>
|
||||
@ -990,6 +991,26 @@ __nldbl___isoc99_wscanf (const wchar_t *fmt, ...)
|
||||
return ret;
|
||||
}
|
||||
|
||||
void
|
||||
__nldbl_argp_error (const struct argp_state *state, const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
va_start (ap, fmt);
|
||||
__argp_error_internal (state, fmt, ap, PRINTF_LDBL_IS_DBL);
|
||||
va_end (ap);
|
||||
}
|
||||
|
||||
void
|
||||
__nldbl_argp_failure (const struct argp_state *state, int status,
|
||||
int errnum, const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
va_start (ap, fmt);
|
||||
__argp_failure_internal (state, status, errnum, fmt, ap,
|
||||
PRINTF_LDBL_IS_DBL);
|
||||
va_end (ap);
|
||||
}
|
||||
|
||||
#if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0)
|
||||
compat_symbol (libc, __nldbl__IO_printf, _IO_printf, GLIBC_2_0);
|
||||
compat_symbol (libc, __nldbl__IO_sprintf, _IO_sprintf, GLIBC_2_0);
|
||||
|
@ -26,6 +26,7 @@
|
||||
|
||||
/* Avoid long double prototypes. */
|
||||
#define __NO_LONG_DOUBLE_MATH 1
|
||||
#include <argp.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
@ -76,6 +77,8 @@ NLDBL_DECL (__isoc99_swscanf);
|
||||
NLDBL_DECL (__isoc99_vwscanf);
|
||||
NLDBL_DECL (__isoc99_vfwscanf);
|
||||
NLDBL_DECL (__isoc99_vswscanf);
|
||||
NLDBL_DECL (argp_error);
|
||||
NLDBL_DECL (argp_failure);
|
||||
|
||||
/* These do not exist in the normal interface, but must exist in the
|
||||
__nldbl interface so that they can be called from libnldbl. */
|
||||
|
@ -2204,6 +2204,8 @@ GLIBC_2.3.4 setipv4sourcefilter F
|
||||
GLIBC_2.3.4 setsourcefilter F
|
||||
GLIBC_2.3.4 xdr_quad_t F
|
||||
GLIBC_2.3.4 xdr_u_quad_t F
|
||||
GLIBC_2.30 __nldbl_argp_error F
|
||||
GLIBC_2.30 __nldbl_argp_failure F
|
||||
GLIBC_2.30 gettid F
|
||||
GLIBC_2.4 _IO_fprintf F
|
||||
GLIBC_2.4 _IO_printf F
|
||||
|
@ -2164,6 +2164,8 @@ GLIBC_2.3.4 siglongjmp F
|
||||
GLIBC_2.3.4 swapcontext F
|
||||
GLIBC_2.3.4 xdr_quad_t F
|
||||
GLIBC_2.3.4 xdr_u_quad_t F
|
||||
GLIBC_2.30 __nldbl_argp_error F
|
||||
GLIBC_2.30 __nldbl_argp_failure F
|
||||
GLIBC_2.30 gettid F
|
||||
GLIBC_2.4 _IO_fprintf F
|
||||
GLIBC_2.4 _IO_printf F
|
||||
|
@ -2197,6 +2197,8 @@ GLIBC_2.3.4 siglongjmp F
|
||||
GLIBC_2.3.4 swapcontext F
|
||||
GLIBC_2.3.4 xdr_quad_t F
|
||||
GLIBC_2.3.4 xdr_u_quad_t F
|
||||
GLIBC_2.30 __nldbl_argp_error F
|
||||
GLIBC_2.30 __nldbl_argp_failure F
|
||||
GLIBC_2.30 gettid F
|
||||
GLIBC_2.4 _IO_fprintf F
|
||||
GLIBC_2.4 _IO_printf F
|
||||
|
@ -2027,6 +2027,8 @@ GLIBC_2.3.4 siglongjmp F
|
||||
GLIBC_2.3.4 swapcontext F
|
||||
GLIBC_2.3.4 xdr_quad_t F
|
||||
GLIBC_2.3.4 xdr_u_quad_t F
|
||||
GLIBC_2.30 __nldbl_argp_error F
|
||||
GLIBC_2.30 __nldbl_argp_failure F
|
||||
GLIBC_2.30 gettid F
|
||||
GLIBC_2.4 _IO_fprintf F
|
||||
GLIBC_2.4 _IO_printf F
|
||||
|
@ -2231,4 +2231,6 @@ GLIBC_2.28 thrd_yield F
|
||||
GLIBC_2.29 getcpu F
|
||||
GLIBC_2.29 posix_spawn_file_actions_addchdir_np F
|
||||
GLIBC_2.29 posix_spawn_file_actions_addfchdir_np F
|
||||
GLIBC_2.30 __nldbl_argp_error F
|
||||
GLIBC_2.30 __nldbl_argp_failure F
|
||||
GLIBC_2.30 gettid F
|
||||
|
@ -2159,6 +2159,8 @@ GLIBC_2.3.4 setipv4sourcefilter F
|
||||
GLIBC_2.3.4 setsourcefilter F
|
||||
GLIBC_2.3.4 xdr_quad_t F
|
||||
GLIBC_2.3.4 xdr_u_quad_t F
|
||||
GLIBC_2.30 __nldbl_argp_error F
|
||||
GLIBC_2.30 __nldbl_argp_failure F
|
||||
GLIBC_2.30 gettid F
|
||||
GLIBC_2.4 _IO_fprintf F
|
||||
GLIBC_2.4 _IO_printf F
|
||||
|
@ -2063,6 +2063,8 @@ GLIBC_2.3.4 setipv4sourcefilter F
|
||||
GLIBC_2.3.4 setsourcefilter F
|
||||
GLIBC_2.3.4 xdr_quad_t F
|
||||
GLIBC_2.3.4 xdr_u_quad_t F
|
||||
GLIBC_2.30 __nldbl_argp_error F
|
||||
GLIBC_2.30 __nldbl_argp_failure F
|
||||
GLIBC_2.30 gettid F
|
||||
GLIBC_2.4 _IO_fprintf F
|
||||
GLIBC_2.4 _IO_printf F
|
||||
|
@ -2153,6 +2153,8 @@ GLIBC_2.3.4 setipv4sourcefilter F
|
||||
GLIBC_2.3.4 setsourcefilter F
|
||||
GLIBC_2.3.4 xdr_quad_t F
|
||||
GLIBC_2.3.4 xdr_u_quad_t F
|
||||
GLIBC_2.30 __nldbl_argp_error F
|
||||
GLIBC_2.30 __nldbl_argp_failure F
|
||||
GLIBC_2.30 gettid F
|
||||
GLIBC_2.4 _IO_fprintf F
|
||||
GLIBC_2.4 _IO_printf F
|
||||
|
Loading…
Reference in New Issue
Block a user