platform/upstream/glibc.git
6 years agolibc-abis: Define ABSOLUTE ABI [BZ #19818][BZ #23307]
Maciej W. Rozycki [Thu, 5 Jul 2018 17:06:43 +0000 (18:06 +0100)]
libc-abis: Define ABSOLUTE ABI [BZ #19818][BZ #23307]

Define a new ABSOLUTE ABI for static linker's use with EI_ABIVERSION
where correct absolute (SHN_ABS) symbol run-time load semantics is
required.  This way it can be ensured at static link time that a program
or DSO will not suffer from previous semantics where absolute symbols
were relocated by the base address, or symbols whose `st_value' is zero
silently ignored leading to a confusing "undefined symbol" error message
at load time, and instead "ELF file ABI version invalid" is printed with
old dynamic loaders, making it clear that there is an ABI version
incompatibility.

[BZ #19818]
[BZ #23307]
* libc-abis (ABSOLUTE): New ABI.
* sysdeps/unix/sysv/linux/mips/libc-abis (ABSOLUTE): New ABI.
* NEWS: Mention the new ABI.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
6 years agoAdd renameat2 function [BZ #17662]
Florian Weimer [Thu, 5 Jul 2018 16:59:02 +0000 (18:59 +0200)]
Add renameat2 function [BZ #17662]

The implementation falls back to renameat if renameat2 is not available
in the kernel (or in the kernel headers) and the flags argument is zero.
Without kernel support, a non-zero argument returns EINVAL, not ENOSYS.
This mirrors what the kernel does for invalid renameat2 flags.

6 years agoposix: Fix bug-regex33 after regex sync
Adhemerval Zanella [Wed, 4 Jul 2018 20:26:22 +0000 (17:26 -0300)]
posix: Fix bug-regex33 after regex sync

On some platforms the inclusion of regex-internal.h in bug-regex33
testcase show a MAX redefinition if test-skeleton.c is include later.
This patch fixes by removing regex-internal.h inclusion and using
SBC_MAX value directly.

Checked on aarch64-linux-gnu.

* posix/bug-regex33.c: Fix build after regex sync.

6 years agolocale: XFAIL newlocale usage in static binary (Bug 23164)
Carlos O'Donell [Mon, 14 May 2018 12:25:46 +0000 (08:25 -0400)]
locale: XFAIL newlocale usage in static binary (Bug 23164)

There is a glibc optimization which allows for locale categories
to be removed during static compilation. There have been various
bugs for this support over the years, with bug 16915 being the
most recent. The solution there was to emit a reference to all the
categories to avoid any being removed. This fix, although it's in
the generic __nl_langinfo_l function, doesn't appear to be enough
to fix the case for a statically linked program that uses newlocale
and nl_langinfo_l. This commit doesn't fix the problem, but it does
add a XFAIL'd test case such that a fix can be applied against this
and the XFAIL removed. It's not entirely clear that the problem is
the same as that which was seen in bug 16915.

6 years agotestrun.sh: Implement --tool=strace, --tool=valgrind
Florian Weimer [Wed, 4 Jul 2018 13:27:24 +0000 (15:27 +0200)]
testrun.sh: Implement --tool=strace, --tool=valgrind

$(file …) appears to be the only convenient way to create files
with newlines and make substitution variables.  This needs make 4.0
(released in 2013), so update the requirement to match.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
6 years agoposix: Sync gnulib regex implementation
Adhemerval Zanella [Wed, 20 Dec 2017 11:47:44 +0000 (09:47 -0200)]
posix: Sync gnulib regex implementation

This patch syncs the regex implementation with gnulib (commit 0ee5212).
Only two changes in GLIBC regex testing are required:

  1. posix/bug-regex28.c: as previously discussed [1] the change of
     expected results on the pattern should be safe.

  2. posix/PCRE.tests: the ERE (a)|\1 is malformed (in the sense that
     the \1 doesn't mean anything) and although current GLIBC accepts
     it has undefined behavior.  This patch removes the specific test.

This sync contains some patches from thread 'Regex: Make libc regex
more usable outside GLIBC.' [2] which have been pushed upstream in
gnulib.  This patches also fixes some regex issues (BZ #23233,
BZ #21163, BZ #18986, BZ #13762) and I did not add testcases for
both #23233 and #13762 because I couldn't think a simple way to
trigger the expected failure path to trigger them.

Checked on x86_64-linux-gnu and i686-linux-gnu.

[BZ #23233]
[BZ #21163]
[BZ #18986]
[BZ #13762]
* posix/Makefile (tests): Add bug-regex37 and bug-regex38.
* posix/PCRE.tests: Remove invalid test.
* posix/bug-regex28.c: Fix expected values for used syntax.
* posix/bug-regex37.c: New file.
* posix/bug-regex38.c: Likewise.
* posix/regcomp.c: Sync with gnulib.
* posix/regex.c: Likewise.
* posix/regex.h: Likewise.
* posix/regex_internal.c: Likewise.
* posix/regex_internal.h: Likewise.
* posix/regexec.c: Likewise.

[1] https://sourceware.org/ml/libc-alpha/2017-12/msg00807.html
[2] https://sourceware.org/ml/libc-alpha/2017-12/msg00237.html

6 years agoBug 23308: Update to Unicode 11.0.0
Mike FABIAN [Mon, 18 Jun 2018 16:23:44 +0000 (18:23 +0200)]
Bug 23308: Update to Unicode 11.0.0

Unicode 11.0.0 Support: Character encoding, character type info, and
transliteration tables are all updated to Unicode 11.0.0, using
the generator scripts contributed by Mike FABIAN (Red Hat).

Some info about the number of characters added:

Total added characters in newly generated CHARMAP: 684
Total added characters in newly generated WIDTH: 119
alpha: Added 380 characters in new ctype which were not in old ctype
combining: Added 56 characters in new ctype which were not in old ctype
combining_level3: Added 37 characters in new ctype which were not in old ctype
graph: Added 684 characters in new ctype which were not in old ctype
lower: Added 82 characters in new ctype which were not in old ctype
print: Added 684 characters in new ctype which were not in old ctype
punct: Added 304 characters in new ctype which were not in old ctype
tolower: Added 79 characters in new ctype which were not in old ctype
totitle: Added 33 characters in new ctype which were not in old ctype
toupper: Added 79 characters in new ctype which were not in old ctype
upper: Added 79 characters in new ctype which were not in old ctype

No characters were removed.

[BZ #23308]
* unicode-gen/Makefile (UNICODE_VERSION): Set to 11.0.0.
* localedata/unicode-gen/DerivedCoreProperties.txt: Update to Unicode 11.0.0.
* localedata/unicode-gen/EastAsianWidth.txt: likewise.
* localedata/unicode-gen/PropList.txt: likewise.
* localedata/unicode-gen/UnicodeData.txt: likewise.
* localedata/charmaps/UTF-8: Regenerate.
* localedata/locales/i18n_ctype: likewise.
* localedata/locales/tr_TR: likewise.
* localedata/locales/translit_circle: likewise.
* localedata/locales/translit_cjk_compat: likewise.
* localedata/locales/translit_combining: likewise.
* localedata/locales/translit_compat: likewise.
* localedata/locales/translit_font: likewise.
* localedata/locales/translit_fraction: likewise.

6 years agostdio-common/tst-printf.c: Remove part under a non-free license [BZ #23363]
Florian Weimer [Tue, 3 Jul 2018 16:29:16 +0000 (18:29 +0200)]
stdio-common/tst-printf.c: Remove part under a non-free license [BZ #23363]

The license does not allow modification.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
6 years agoFix hurd expected fcntl version
Adhemerval Zanella [Mon, 2 Jul 2018 19:45:53 +0000 (16:45 -0300)]
Fix hurd expected fcntl version

Different than Linux, hurd does not need the OFD locks fix from
06ab719d30b (since OFD locks are current Linux specific). This in
turn allows hurd to not provide a fcntl compat symbol.

Checked on a i686-gnu with check-abi.

* sysdeps/mach/hurd/i386/libc.abilist [GLIBC_2.28] (fcntl): Remove
symbol.

6 years agoldbl-128ibm-compat: Add printf_size
Gabriel F. T. Gomes [Fri, 29 Jun 2018 01:38:55 +0000 (22:38 -0300)]
ldbl-128ibm-compat: Add printf_size

Since the addition of the _Float128 API, strfromf128 and printf_size use
__printf_fp to print _Float128 values.  This is achieved by setting the
'is_binary128' member of the 'printf_info' structure to one.  Now that
the format of long double on powerpc64le is getting a third option, this
mechanism is reused for long double values that have binary128 format
(i.e.: when -mabi=ieeelongdouble).

This patch adds __printf_sizeieee128 as an exported symbol, but doesn't
provide redirections from printf_size, yet.  All redirections will be
installed in a future commit, once all other functions that print or
read long double values with binary128 format are ready.  In
__printf_fp, when 'is_binary128' is one, the floating-point argument is
treated as if it was of _Float128 type, regardless of the value of
'is_long_double', thus __printf_sizeieee128 sets 'is_binary128' to the
same value of 'is_long_double'.  Otherwise, double values would not be
printed correctly.

Tested for powerpc64le.

6 years agoUse uint32_t sign in single precision math error handling functions
Szabolcs Nagy [Wed, 13 Jun 2018 14:07:21 +0000 (15:07 +0100)]
Use uint32_t sign in single precision math error handling functions

Ideally sign should be bool, but sometimes (e.g. in powf) it's more
efficient to pass a non-zero value than 1 to indicate that the sign
should be set.  The fixed size int is less ambigous than unsigned
long.

* sysdeps/ieee754/flt-32/e_powf.c (__powf): Use uint32_t.
(exp2f_inline): Likewise.
* sysdeps/ieee754/flt-32/math_config.h (__math_oflowf): Likewise.
(__math_uflowf): Likewise.
(__math_may_uflowf): Likewise.
(__math_divzerof): Likewise.
(__math_invalidf): Likewise.
* sysdeps/ieee754/flt-32/math_errf.c (xflowf): Likewise.
(__math_oflowf): Likewise.
(__math_uflowf): Likewise.
(__math_may_uflowf): Likewise.
(__math_divzerof): Likewise.
(__math_invalidf): Likewise.

6 years agolibc: Extend __libc_freeres framework (Bug 23329).
Carlos O'Donell [Fri, 22 Jun 2018 13:28:47 +0000 (09:28 -0400)]
libc: Extend __libc_freeres framework (Bug 23329).

The __libc_freeres framework does not extend to non-libc.so objects.
This causes problems in general for valgrind and mtrace detecting
unfreed objects in both libdl.so and libpthread.so.  This change is
a pre-requisite to properly moving the malloc hooks out of malloc
since such a move now requires precise accounting of all allocated
data before destructors are run.

This commit adds a proper hook in libc.so.6 for both libdl.so and
for libpthread.so, this ensures that shm-directory.c which uses
freeit () to free memory is called properly.  We also remove the
nptl_freeres hook and fall back to using weak-ref-and-check idiom
for a loaded libpthread.so, thus making this process similar for
all DSOs.

Lastly we follow best practice and use explicit free calls for
both libdl.so and libpthread.so instead of the generic hook process
which has undefined order.

Tested on x86_64 with no regressions.

Signed-off-by: DJ Delorie <dj@redhat.com>
Signed-off-by: Carlos O'Donell <carlos@redhat.com>
6 years agoAdd long double input for strfmon test
Rajalakshmi Srinivasaraghavan [Sat, 30 Jun 2018 01:24:34 +0000 (06:54 +0530)]
Add long double input for strfmon test

This patch adds long double type inputs in strfmon_l test
which will help in long double migration.

Tested for powerpc64le.

6 years agoNew locale: Lower Sorbian (dsb_DE) [BZ #23208]
Michael Wolf [Thu, 7 Jun 2018 23:26:43 +0000 (01:26 +0200)]
New locale: Lower Sorbian (dsb_DE) [BZ #23208]

[BZ #23208]
* localedata/SUPPORTED (dsb_DE/UTF-8): New entry.
* localedata/locales/dsb_DE: New file.

6 years agohy_AM: Add alternative month names (bug 23140).
Rafal Luzynski [Fri, 24 Feb 2017 02:13:15 +0000 (03:13 +0100)]
hy_AM: Add alternative month names (bug 23140).

This locale already contained correct data in mon array.  Updated from
CLDR to start the month names with the lowercase letters.

alt_mon is a new import from CLDR.  The change has been consulted
off-list with a native speaker.

[BZ #23140]
* localedata/locales/hy_AM (mon): Synchronize with CLDR (lowercase,
genitive case).
(alt_mon): New entry, import from CLDR (nominative case).

6 years agoes_BO locale: Change LC_PAPER to en_US (bug 22996).
Sylvain Lesage [Fri, 29 Jun 2018 18:55:59 +0000 (20:55 +0200)]
es_BO locale: Change LC_PAPER to en_US (bug 22996).

[BZ #22996]
* localedata/locales/es_BO (LC_PAPER): Change to “copy "en_US"”.

6 years agoaarch64,falkor: Use vector registers for memcpy
Siddhesh Poyarekar [Fri, 29 Jun 2018 17:15:59 +0000 (22:45 +0530)]
aarch64,falkor: Use vector registers for memcpy

Vector registers perform better than scalar register pairs for copying
data so prefer them instead.  This results in a time reduction of over
50% (i.e. 2x speed improvemnet) for some smaller sizes for memcpy-walk.
Larger sizes show improvements of around 1% to 2%.  memcpy-random shows
a very small improvement, in the range of 1-2%.

* sysdeps/aarch64/multiarch/memcpy_falkor.S (__memcpy_falkor):
Use vector registers.

6 years agoaarch64,falkor: Use vector registers for memmove
Siddhesh Poyarekar [Fri, 29 Jun 2018 17:15:07 +0000 (22:45 +0530)]
aarch64,falkor: Use vector registers for memmove

Vector registers perform much better for moves compared to pairs of
registers on falkor, so use them instead.  This results in a time
reduction of up to 50% (i.e. 2x improvement) for a lot of the smaller
sizes, i.e. up to 1K in memmove-walk.  Improvements for larger sizes are
smaller, at about 1%-2%.

* sysdeps/aarch64/multiarch/memmove_falkor.S
(__memcpy_falkor): Use vector registers.

6 years agoDocument interaction with GCC built-ins in the Customizing Printf
Martin Sebor [Fri, 29 Jun 2018 16:45:19 +0000 (10:45 -0600)]
Document interaction with GCC built-ins in the Customizing Printf
section of the manual.

6 years agoelf: Accept absolute (SHN_ABS) symbols whose value is zero [BZ #23307]
Maciej W. Rozycki [Fri, 29 Jun 2018 16:10:43 +0000 (17:10 +0100)]
elf: Accept absolute (SHN_ABS) symbols whose value is zero [BZ #23307]

We have this condition in `check_match' (in elf/dl-lookup.c):

  if (__glibc_unlikely ((sym->st_value == 0 /* No value.  */
                         && stt != STT_TLS)
                        || ELF_MACHINE_SYM_NO_MATCH (sym)
                        || (type_class & (sym->st_shndx == SHN_UNDEF))))
    return NULL;

which causes all !STT_TLS symbols whose value is zero to be silently
ignored in lookup.  This may make sense for regular symbols, however not
for absolute (SHN_ABS) ones, where zero is like any value, there's no
special meaning attached to it.

Consequently legitimate programs fail, for example taking the
`elf/tst-absolute-sym' test case, substituting 0 for 0x55aa in
`elf/tst-absolute-sym-lib.lds' and then trying to run the resulting
program we get this:

$ .../elf/tst-absolute-sym
.../elf/tst-absolute-sym: symbol lookup error: .../elf/tst-absolute-sym-lib.so: undefined symbol: absolute
$

even though the symbol clearly is there:

$ readelf --dyn-syms .../elf/tst-absolute-sym-lib.so | grep '\babsolute\b'
     7: 00000000     0 NOTYPE  GLOBAL DEFAULT  ABS absolute
$

The check for the zero value has been there since forever or commit
d66e34cd4234/08162fa88891 ("Implemented runtime dynamic linker to
support ELF shared libraries.") dating back to May 2nd 1995, and the
problem triggers regardless of commit e7feec374c63 ("elf: Correct
absolute (SHN_ABS) symbol run-time calculation [BZ #19818]") being
present or not.

Fix the issue then, by permitting `sym->st_value' to be 0 for SHN_ABS
symbols in lookup.

[BZ #23307]
* elf/dl-lookup.c (check_match): Do not reject a symbol whose
`st_value' is 0 if `st_shndx' is SHN_ABS.
* elf/tst-absolute-zero.c: New file.
* elf/tst-absolute-zero-lib.c: New file.
* elf/tst-absolute-zero-lib.lds: New file.
* elf/Makefile (tests): Add `tst-absolute-zero'.
(modules-names): Add `tst-absolute-zero-lib'.
(LDLIBS-tst-absolute-zero-lib.so): New variable.
($(objpfx)tst-absolute-zero-lib.so): New dependency.
($(objpfx)tst-absolute-zero: New dependency.

6 years agoNew configure option --disable-crypt.
Zack Weinberg [Fri, 29 Jun 2018 14:53:47 +0000 (16:53 +0200)]
New configure option --disable-crypt.

Some Linux distributions are experimenting with a new, separately
maintained and hopefully more agile implementation of the crypt
API.  To facilitate this, add a configure option which disables
glibc's embedded libcrypt.  When this option is given, libcrypt.*
and crypt.h will not be built nor installed.

6 years agomanual: Revise crypt.texi.
Zack Weinberg [Fri, 29 Jun 2018 14:53:37 +0000 (16:53 +0200)]
manual: Revise crypt.texi.

This is a major rewrite of the description of 'crypt', 'getentropy',
and 'getrandom'.

A few highlights of the content changes:

 - Throughout the manual, public headers, and user-visible messages,
   I replaced the term "password" with "passphrase", the term
   "password database" with "user database", and the term
   "encrypt(ion)" with "(one-way) hashing" whenever it was applied to
   passphrases.  I didn't bother making this change in internal code
   or tests.  The use of the term "password" in ruserpass.c survives,
   because that refers to a keyword in netrc files, but it is adjusted
   to make this clearer.

   There is a note in crypt.texi explaining that they were
   traditionally called passwords but single words are not good enough
   anymore, and a note in users.texi explaining that actual passphrase
   hashes are found in a "shadow" database nowadays.

 - There is a new short introduction to the "Cryptographic Functions"
   section, explaining how we do not intend to be a general-purpose
   cryptography library, and cautioning that there _are_, or have
   been, legal restrictions on the use of cryptography in many
   countries, without getting into any kind of detail that we can't
   promise to keep up to date.

 - I added more detail about what a "one-way function" is, and why
   they are used to obscure passphrases for storage.  I removed the
   paragraph saying that systems not connected to a network need no
   user authentication, because that's a pretty rare situation
   nowadays.  (It still says "sometimes it is necessary" to
   authenticate the user, though.)

 - I added documentation for all of the hash functions that glibc
   actually supports, but not for the additional hash functions
   supported by libxcrypt.  If we're going to keep this manual section
   around after the transition is more advanced, it would probably
   make sense to add them then.

 - There is much more detailed discussion of how to generate a salt,
   and the failure behavior for crypt is documented.  (Returning an
   invalid hash on failure is what libxcrypt does; Solar Designer's
   notes say that this was done "for compatibility with old programs
   that assume crypt can never fail".)

 - As far as I can tell, the header 'crypt.h' is entirely a GNU
   invention, and never existed on any other Unix lineage.  The
   function 'crypt', however, was in Issue 1 of the SVID and is now
   in the XSI component of POSIX.  I tried to make all of the
   @standards annotations consistent with this, but I'm not sure I got
   them perfectly right.

 - The genpass.c example has been improved to use getentropy instead
   of the current time to generate the salt, and to use a SHA-256 hash
   instead of MD5. It uses more random bytes than is strictly
   necessary because I didn't want to complicate the code with proper
   base64 encoding.

 - The testpass.c example has three hardwired hashes now, to
   demonstrate that different one-way functions produce different
   hashes for the same input.  It also demonstrates how DES hashing
   only pays attention to the first eight characters of the input.

 - There is new text explaining in more detail how a CSPRNG differs
   from a regular random number generator, and how
   getentropy/getrandom are not exactly a CSPRNG.  I tried not to make
   specific falsifiable claims here.  I also tried to make the
   blocking/cancellation/error behavior of both getentropy and
   getrandom clearer.

6 years agomanual: Reorganize crypt.texi.
Zack Weinberg [Fri, 29 Jun 2018 14:53:29 +0000 (16:53 +0200)]
manual: Reorganize crypt.texi.

In preparation for a major revision of the documentation for
crypt(_r), getentropy, and getrandom, reorganize crypt.texi.  This
patch does not change any text; it only deletes and moves text.

The description of 'getpass' moves to terminal.texi, since all it does
is read a password from the controlling terminal with echo disabled.
The "Legal Problems" section of crypt.texi is dropped, and the
introductory text is shifted down to the "Encrypting Passwords"
section; the next patch will add some new introductory text.

Also, it is no longer true that crypt.texi's top @node needs to have
no pointers.  That was a vestige of crypt/ being an add-on.  (makeinfo
itself doesn't need @node pointers anymore, but the scripts that
assemble the libc manual's topmost node rely on each chapter-level
node having them.)

6 years agoDisallow use of DES encryption functions in new programs.
Zack Weinberg [Fri, 29 Jun 2018 14:53:18 +0000 (16:53 +0200)]
Disallow use of DES encryption functions in new programs.

The functions encrypt, setkey, encrypt_r, setkey_r, cbc_crypt,
ecb_crypt, and des_setparity should not be used in new programs,
because they use the DES block cipher, which is unacceptably weak by
modern standards.  Demote all of them to compatibility symbols, and
remove their prototypes from installed headers.  cbc_crypt, ecb_crypt,
and des_setparity were already compat symbols when glibc was
configured with --disable-obsolete-rpc.

POSIX requires encrypt and setkey to be available when _XOPEN_CRYPT
is defined, so this change also removes the definition of X_OPEN_CRYPT
from <unistd.h>.

The entire "DES Encryption" section is dropped from the manual, as is
the mention of AUTH_DES and FIPS 140-2 in the introduction to
crypt.texi.  The documentation of 'memfrob' cross-referenced the DES
Encryption section, which is replaced by a hyperlink to libgcrypt, and
while I was in there I spruced up the actual documentation of
'memfrob' and 'strfry' a little.  It's still fairly jokey, because
those functions _are_ jokes, but they do also have real use cases, so
people trying to use them for real should have all the information
they need.

DES-based authentication for Sun RPC is also insecure and should be
deprecated or even removed, but maybe that can be left as TI-RPC's
problem.

6 years agomalloc: Update heap dumping/undumping comments [BZ #23351]
Florian Weimer [Fri, 29 Jun 2018 12:54:59 +0000 (14:54 +0200)]
malloc: Update heap dumping/undumping comments [BZ #23351]

Also remove a few now-unused declarations and definitions.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
6 years agoast_ES: Add alternative month names (bug 23140).
Rafal Luzynski [Tue, 30 Jan 2018 11:31:12 +0000 (12:31 +0100)]
ast_ES: Add alternative month names (bug 23140).

[BZ #23140]
* localedata/locales/ast_ES (mon): Rename to...
(alt_mon): This.
(mon): Import from CLDR (genitive case).

6 years agogetifaddrs: Don't return ifa entries with NULL names [BZ #21812]
Daniel Alvarez [Fri, 29 Jun 2018 07:44:55 +0000 (09:44 +0200)]
getifaddrs: Don't return ifa entries with NULL names [BZ #21812]

A lookup operation in map_newlink could turn into an insert because of
holes in the interface part of the map.  This leads to incorrectly set
the name of the interface to NULL when the interface is not present
for the address being processed (most likely because the interface was
added between the RTM_GETLINK and RTM_GETADDR calls to the kernel).
When such changes are detected by the kernel, it'll mark the dump as
"inconsistent" by setting NLM_F_DUMP_INTR flag on the next netlink
message.

This patch checks this condition and retries the whole operation.
Hopes are that next time the interface corresponding to the address
entry is present in the list and correct name is returned.

6 years agoFix documentation build with old makeinfo
Szabolcs Nagy [Thu, 28 Jun 2018 12:27:31 +0000 (13:27 +0100)]
Fix documentation build with old makeinfo

With old makeinfo '@code {' fails because of the extra space.

* manual/llio.texi: Remove spurious space.

6 years agoUse _STRUCT_TIMESPEC as guard in <bits/types/struct_timespec.h> [BZ #23349]
Florian Weimer [Thu, 28 Jun 2018 11:12:16 +0000 (13:12 +0200)]
Use _STRUCT_TIMESPEC as guard in <bits/types/struct_timespec.h> [BZ #23349]

After commit d76d3703551a362b472c866b5b6089f66f8daa8e ("Fix missing
timespec definition for sys/stat.h (BZ #21371)") in combination with
kernel UAPI changes, GCC sanitizer builds start to fail due to a
conflicting definition of struct timespec in <linux/time.h>.  Use
_STRUCT_TIMESPEC as the header file inclusion guard, which is already
checked in the kernel header, to support including <linux/time.h> and
<sys/stat.h> in the same translation unit.

6 years agoldbl-128ibm-compat: Introduce ieee128 symbols
Rajalakshmi Srinivasaraghavan [Thu, 28 Jun 2018 08:27:50 +0000 (13:57 +0530)]
ldbl-128ibm-compat: Introduce ieee128 symbols

This patch adds __*ieee128 symbols for strfrom, strtold, strtold_l, wcstold
and wcstold_l functions.  Redirection from *l to *ieee128 will be handled
in separate patch once we start building these new files.

2018-06-28  Rajalakshmi Srinivasaraghavan  <raji@linux.vnet.ibm.com>

* sysdeps/ieee754/ldbl-128ibm-compat/Versions: Add __strfromieee128,
 __strtoieee128, __strtoieee128_l,__wcstoieee128 and __wcstoieee128_l.
* sysdeps/ieee754/ldbl-128ibm-compat/strfromf128.c: New file.
* sysdeps/ieee754/ldbl-128ibm-compat/strtof128.c: New file.
* sysdeps/ieee754/ldbl-128ibm-compat/strtof128_l.c: New file.
* sysdeps/ieee754/ldbl-128ibm-compat/wcstof128.c: New file.
* sysdeps/ieee754/ldbl-128ibm-compat/wcstof128_l.c: New file.

6 years agonisplus: Correct pwent parsing issue and resulting build error [BZ #23266]
Maciej W. Rozycki [Wed, 27 Jun 2018 20:12:16 +0000 (21:12 +0100)]
nisplus: Correct pwent parsing issue and resulting build error [BZ #23266]

Copy and null-terminate NIS+ password file UID and GID entries whose
length is non-zero and are not terminated, in addition to empty ones,
fixing a bug and a compilation issue causing an error with GCC 8:

nss_nisplus/nisplus-parser.c: In function '_nss_nisplus_parse_pwent':
nss_nisplus/nisplus-parser.c:90:7: error: 'strncpy' destination unchanged after copying no bytes [-Werror=stringop-truncation]
       strncpy (first_unused, numstr, len);
       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
nss_nisplus/nisplus-parser.c:106:7: error: 'strncpy' destination unchanged after copying no bytes [-Werror=stringop-truncation]
       strncpy (first_unused, numstr, len);
       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

introduced with commit ac05397075f6:

commit ac05397075f621cfdbe1db527c96167a58b6d18e
Author: Ulrich Drepper <drepper@redhat.com>
Date:   Sun Apr 30 07:01:26 2006 +0000

* nis/nss_nisplus/nisplus-parser.c: Minor optimizations and
cleanups.  Avoid copying data if it can be used in the old place.

(no mailing list reference available).  Obviously regardless of the
recently added compiler diagnostics causing a build error this code has
been long non-functional, so I guess NIS+ servers have been supplying
strings that are non-empty and have already been null-terminated.
Which in turn made it unnecessary to make a null-terminated copy,
masking this bug.

[BZ #23266]
* nis/nss_nisplus/nisplus-parser.c (_nss_nisplus_parse_pwent):
Copy and null-terminate entries that are not terminated, in
addition to empty ones.

6 years agoRemove macros extend_alloca, extend_alloca_account [BZ #18023]
Florian Weimer [Wed, 27 Jun 2018 16:39:05 +0000 (18:39 +0200)]
Remove macros extend_alloca, extend_alloca_account [BZ #18023]

The unused macro definition in posix/glob.c comes from gnulib and will
have to be removed there.

6 years agoRemove nptl/sockperf.c.
Joseph Myers [Wed, 27 Jun 2018 17:01:06 +0000 (17:01 +0000)]
Remove nptl/sockperf.c.

This patch removes nptl/sockperf.c, an unused, x86-specific program
with a hardcoded path in /tmp.  If someone finds some of this code in
future for adding a proper benchmark, that does not of course rule out
adding it back in that form, but for now I think it's best to
eliminate this code with the hardcoded /tmp path.

Tested for x86_64.

* nptl/sockperf.c: Remove file.

6 years ago_dl_map_object_deps: Use struct scratch_buffer [BZ #18023]
Florian Weimer [Wed, 27 Jun 2018 15:55:55 +0000 (17:55 +0200)]
_dl_map_object_deps: Use struct scratch_buffer [BZ #18023]

The function comment suggests that _dl_map_object_deps cannot use
malloc, but it already allocates the l_initfini array on the heap, so
the additional allocation should be acceptable.

6 years agogethostid (Linux variant): Switch to struct scratch_buffer [BZ #18023]
Florian Weimer [Wed, 27 Jun 2018 15:55:38 +0000 (17:55 +0200)]
gethostid (Linux variant): Switch to struct scratch_buffer [BZ #18023]

Previously, extend_alloca was used without alloca accounting,
which could have been problematic with large NSS results.

6 years agowordexp: Rewrite parse_tilde to use struct scratch_buffer [BZ #18023]
Florian Weimer [Wed, 27 Jun 2018 15:54:44 +0000 (17:54 +0200)]
wordexp: Rewrite parse_tilde to use struct scratch_buffer [BZ #18023]

6 years agoRevert hurd errno.h changes
Adhemerval Zanella [Tue, 26 Jun 2018 23:09:17 +0000 (20:09 -0300)]
Revert hurd errno.h changes

Patch 06ab719d30b01 wrongly added mach errno.h changes.

6 years agoFix hardcoded /tmp paths in testing (bug 13888).
Joseph Myers [Tue, 26 Jun 2018 21:48:48 +0000 (21:48 +0000)]
Fix hardcoded /tmp paths in testing (bug 13888).

As noted in bug 13888, and as I noted previously in
<https://sourceware.org/ml/libc-alpha/2000-10/msg00111.html>, various
tests used hardcoded paths in /tmp, so posing issues for simultaneous
test runs from different build directories.

This patch fixes such uses of hardcoded file names to put them in the
build directory instead (in the case of stdio-common/bug5 the file
names are changed as well, to avoid a conflict with the name bug5.out
also used for the automatic test output redirection).  It also fixes
test-installation.pl likewise (that was using filenames with $$ in
them rather than strictly hardcoded names, but that's still not good
practice for temporary file naming).

Note that my list of files changed is not identical to that in bug
13888.  I added tst-spawn3.c and test-installation.pl, and removed
some tests that seem to me (now) to create temporary files securely
(simply using /tmp is not itself a problem if the temporary files are
handled properly with mkstemp; I haven't checked whether those tests
used to do things insecurely).  conformtest is not changed because the
makefiles always pass a --tmpdir option so the /tmp default is
irrelevant, and for the same reason there is no actual problem with
nptl/tst-umask1.c because again the makefiles always override the
default.

nptl/sockperf.c is ignored because there is no code to run it;
probably that file should actually be removed.

Some tests use the mktemp function, but I think they all use it in a
way that *is* secure (for generating names for directories / sockets /
fifos / symlinks, where the operation using the name will not follow
symlinks and so there is no potential for a symlink attack on the
account running the testsuite).

Some tests use the tmpnam function to generate temporary file names.
This is in principle insecure, but not addressed by this patch (I
consider it a separate issue from the fully hardcoded paths).

Tested for x86_64.

[BZ #13888]
* posix/Makefile (CFLAGS-tst-spawn3.c): New variable.
* posix/tst-spawn3.c (do_test): Put tst-spwan3.pid in OBJPFX, not
/tmp.
* scripts/test-installation.pl: Put temporary files in build
directory, not /tmp.
* stdio-common/Makefile (CFLAGS-bug3.c): New variable.
(CFLAGS-bug4.c): Likewise.
(CFLAGS-bug5.c): Likewise.
(CFLAGS-test-fseek.c): Likewise.
(CFLAGS-test-popen.c): Likewise.
(CFLAGS-test_rdwr.c): Likewise.
* stdio-common/bug3.c (main): Put temporary file in OBJPFX, not
/tmp.
* stdio-common/bug4.c (main): Likewise.
* stdio-common/bug5.c (main): Likewise.
* stdio-common/test-fseek.c (TESTFILE): Likewise.
* stdio-common/test-popen.c (do_test): Likewise.
* stdio-common/test_rdwr.c (main): Likewise.

6 years agoIn sem_open.c, pad was not initialized when __HAVE_64B_ATOMICS was
Patsy Franklin [Tue, 26 Jun 2018 14:35:03 +0000 (10:35 -0400)]
In sem_open.c,  pad was not initialized when __HAVE_64B_ATOMICS was
true.  On some arches this caused valgrind to warn about uninitialized
bytes when the struct was written to the file system.

This patch moves the initialization of pad outside of the
conditional.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
6 years agoFix Linux fcntl OFD locks for non-LFS architectures (BZ#20251)
Adhemerval Zanella [Wed, 4 Apr 2018 14:24:15 +0000 (11:24 -0300)]
Fix Linux fcntl OFD locks for non-LFS architectures (BZ#20251)

This patch fixes the OFD ("file private") locks for architectures that
support non-LFS flock definition (__USE_FILE_OFFSET64 not defined). The
issue in this case is both F_OFD_{GETLK,SETLK,SETLKW} and
F_{SET,GET}L{W}K64 expects a flock64 argument and when using old
F_OFD_* flags with a non LFS flock argument the kernel might interpret
the underlying data wrongly.  Kernel idea originally was to avoid using
such flags in non-LFS syscall, but since GLIBC uses fcntl with LFS
semantic as default it is possible to provide the functionality and
avoid the bogus struct kernel passing by adjusting the struct manually
for the required flags.

The idea follows other LFS interfaces that provide two symbols:

  1. A new LFS fcntl64 is added on default ABI with the usual macros to
     select it for FILE_OFFSET_BITS=64.

  2. The Linux non-LFS fcntl use a stack allocated struct flock64 for
     F_OFD_{GETLK,SETLK,SETLKW} copy the results on the user provided
     struct.

  3. Keep a compat symbol with old broken semantic for architectures
     that do not define __OFF_T_MATCHES_OFF64_T.

So for architectures which defines __USE_FILE_OFFSET64, fcntl64 will
aliased to fcntl and no adjustment would be required.  So to actually
use F_OFD_* with LFS support the source must be built with LFS support
(_FILE_OFFSET_BITS=64).

Also F_OFD_SETLKW command is handled a cancellation point, as for
F_SETLKW{64}.

Checked on x86_64-linux-gnu and i686-linux-gnu.

[BZ #20251]
* NEWS: Mention fcntl64 addition.
* csu/check_fds.c: Replace __fcntl_nocancel by __fcntl64_nocancel.
* login/utmp_file.c: Likewise.
* sysdeps/posix/fdopendir.c: Likewise.
* sysdeps/posix/opendir.c: Likewise.
* sysdeps/unix/pt-fcntl.c: Likewise.
* include/fcntl.h (__libc_fcntl64, __fcntl64,
__fcntl64_nocancel_adjusted): New prototype.
(__fcntl_nocancel_adjusted): Remove prototype.
* io/Makefile (routines): Add fcntl64.
(CFLAGS-fcntl64.c): New rule.
* io/Versions [GLIBC_2.28] (fcntl64): New symbol.
[GLIBC_PRIVATE] (__libc_fcntl): Rename to __libc_fcntl64.
* io/fcntl.h (fcntl64): Add prototype and redirect if
__USE_FILE_OFFSET64 is defined.
* io/fcntl64.c: New file.
* manual/llio.text: Add a note for which commands fcntl acts a
cancellation point.
* nptl/Makefile (CFLAGS-fcntl64.c): New rule.
* sysdeps/mach/hurd/fcntl.c: Alias fcntl to fcntl64 symbols.
* sysdeps/mach/hurd/i386/libc.abilist [GLIBC_2.28] (fcntl, fcntl64):
New symbols.
* sysdeps/unix/sysv/linux/fcntl.c (__libc_fcntl): Fix F_GETLK64,
F_OFD_GETLK, F_SETLK64, F_SETLKW64, F_OFD_SETLK, and F_OFD_SETLKW for
non-LFS case.
* sysdeps/unix/sysv/linux/fcntl64.c: New file.
* sysdeps/unix/sysv/linux/fcntl_nocancel.c (__fcntl_nocancel): Rename
to __fcntl64_nocancel.
(__fcntl_nocancel_adjusted): Rename to __fcntl64_nocancel_adjusted.
* sysdeps/unix/sysv/linux/not-cancel.h (__fcntl_nocancel): Rename
to __fcntl64_nocancel.
* sysdeps/unix/sysv/linux/tst-ofdlocks.c: New file.
* sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c: Likewise.
* sysdeps/unix/sysv/linux/Makefile (tests): Add tst-ofdlocks.
(tests-internal): Add tst-ofdlocks-compat.
* sysdeps/unix/sysv/linux/aarch64/libc.abilist [GLIBC_2.28]
(fcntl64): New symbol.
* sysdeps/unix/sysv/linux/alpha/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/ia64/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist: Likewise.
* sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/x86_64/64/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/arm/libc.abilist [GLIBC_2.28] (fcntl,
fcntl64): Likewise.
* sysdeps/unix/sysv/linux/hppa/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/i386/libc.abilis: Likewise.
* sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/microblaze/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/nios2/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist:
Likewise.
* sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/sh/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist: Likewise.

6 years agoRun thread shutdown functions in an explicit order
Florian Weimer [Tue, 26 Jun 2018 13:13:54 +0000 (15:13 +0200)]
Run thread shutdown functions in an explicit order

This removes the __libc_thread_subfreeres hook in favor of explict
calls.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
6 years agosunrpc: Remove always-defined _RPC_THREAD_SAFE_ macro
Florian Weimer [Tue, 26 Jun 2018 13:27:03 +0000 (15:27 +0200)]
sunrpc: Remove always-defined _RPC_THREAD_SAFE_ macro

Header and C source file changes were generated using:

unifdef -m -D_RPC_THREAD_SAFE_ include/rpc/rpc.h sunrpc/*.c

6 years agolibio: Add tst-vtables, tst-vtables-interposed
Florian Weimer [Tue, 26 Jun 2018 10:20:44 +0000 (12:20 +0200)]
libio: Add tst-vtables, tst-vtables-interposed

6 years agosupport: Add TEST_NO_SETVBUF
Florian Weimer [Tue, 26 Jun 2018 10:05:21 +0000 (12:05 +0200)]
support: Add TEST_NO_SETVBUF

This is sometimes needed for testing stdio streams, where the
setvbuf call in the test driver could interfere with the test.

6 years agolibio: Disable vtable validation in case of interposition [BZ #23313]
Florian Weimer [Tue, 26 Jun 2018 08:24:52 +0000 (10:24 +0200)]
libio: Disable vtable validation in case of interposition [BZ #23313]

6 years agonss_files: Use struct scratch_buffer instead of extend_alloca [BZ #18023]
Florian Weimer [Mon, 25 Jun 2018 17:29:11 +0000 (19:29 +0200)]
nss_files: Use struct scratch_buffer instead of extend_alloca [BZ #18023]

6 years agogetent: Use dynarray in initgroups_keys [BZ #18023]
Florian Weimer [Mon, 25 Jun 2018 17:22:46 +0000 (19:22 +0200)]
getent: Use dynarray in initgroups_keys [BZ #18023]

6 years ago_nss_nis_initgroups_dyn: Use struct scratch_buffer [BZ #18023]
Florian Weimer [Mon, 25 Jun 2018 17:14:09 +0000 (19:14 +0200)]
_nss_nis_initgroups_dyn: Use struct scratch_buffer [BZ #18023]

Remove extend_alloca usage.  Also adjusts the internal function get_uid.

6 years agogetgrent_next_nss (compat-initgroups): Remove alloca fallback [BZ #18023]
Florian Weimer [Mon, 25 Jun 2018 16:56:42 +0000 (18:56 +0200)]
getgrent_next_nss (compat-initgroups): Remove alloca fallback [BZ #18023]

If the caller-supplied buffer is not large enough, fall back directly
malloc.

The previous __libc_use_alloca check was incorrect because it did not
take into account that extend_alloca may fail to merge allocations, so
it would underestimate the stack space being used by roughly a factor
of two.

6 years agonscd: Switch to struct scratch_buffer in adhstaiX [BZ #18023]
Florian Weimer [Mon, 25 Jun 2018 14:05:46 +0000 (16:05 +0200)]
nscd: Switch to struct scratch_buffer in adhstaiX [BZ #18023]

The pre-allocation of the three scratch buffers increased the initial
stack size somewhat, but if retries are needed, the previous version
used more stack space if extend_alloca could not merge allocations.
Lack of alloca accounting also means could be problematic with
extremely large NSS responses, too.

[BZ #18023]
* nscd/aicache.c (addhstaiX): Use struct scratch_buffer instead
of extend_alloca.

6 years agonscd: Use struct scratch_buffer, not extend_alloca in most caches [BZ #18023]
Florian Weimer [Mon, 25 Jun 2018 14:04:29 +0000 (16:04 +0200)]
nscd: Use struct scratch_buffer, not extend_alloca in most caches [BZ #18023]

This replaces the ERANGE retry loops with loops which have heap
fallback.  Heap allocation might actually be required for extremely
large NSS results.

6 years agonscd restart: Use malloc instead of extend_alloca [BZ #18023]
Florian Weimer [Mon, 25 Jun 2018 15:10:15 +0000 (17:10 +0200)]
nscd restart: Use malloc instead of extend_alloca [BZ #18023]

This introduces a separate function, read_cmdline, which reads the
contents of /proc/self/cmdline into a heap-allocated buffer.

6 years agocsb_PL: Add alternative month names (bug 23140).
Rafal Luzynski [Tue, 30 Jan 2018 11:31:12 +0000 (12:31 +0100)]
csb_PL: Add alternative month names (bug 23140).

Kashubian language is not supported by CLDR, data copied from Wikipedia
and documents released by RJK (official Kashubian Language Council),
also consulted with a native speaker.

Note that this language also needs ab_alt_mon feature due to the month
May: nominative "môj", genitive "maja"; abbreviated nominative "môj",
abbreviated genitive "maj".

[BZ #23140]
* localedata/locales/csb_PL (mon): Rename to...
(alt_mon): This.
(abmon): Rename to...
(ab_alt_mon): This.
(mon): Add with proper genitive forms, copy from Wikipedia.
(abmon): Likewise.

6 years agocsb_PL: Update month translations + add yesstr/nostr (bug 19485).
Rafal Luzynski [Thu, 21 Jun 2018 10:29:13 +0000 (12:29 +0200)]
csb_PL: Update month translations + add yesstr/nostr (bug 19485).

Thank you Michal Ostrowski for the feedback.

[BZ #19485]
* localedata/locales/csb_PL (mon): Fix typos:
"łżëkwiôt" -> "łżëkwiat" (April); "lëpinc" -> "lëpińc" (July).
(yesstr): Add, value is "jo".
(nostr): Add, value is "nié".

6 years agom68k: Reorganize log1p and significand implementations
Tulio Magno Quites Machado Filho [Fri, 22 Jun 2018 21:18:21 +0000 (18:18 -0300)]
m68k: Reorganize log1p and significand implementations

Commit 5e79e0292bfb03f40e43379fd92581ad8eae9cb8 broke m68k after
s_significand.c became available in the build directory.  All m68k
implementations of log1p and significand were including s_significand.c
and stopped working after the inclusion of the the auto-generated file.

This patch reorganizes the implementation of log1p and significand for
m680x0 in order to avoid hitting this problem.

* sysdeps/m68k/m680x0/fpu/s_log1p.c: Set as the generic file for
all log1p and significand functions on m680x0.
* sysdeps/m68k/m680x0/fpu/s_log1pf.c: Include s_log1p.c instead
of s_significand.c..
* sysdeps/m68k/m680x0/fpu/s_log1pl.c: Likewise.
* sysdeps/m68k/m680x0/fpu/s_significandf.c: Likewise.
* sysdeps/m68k/m680x0/fpu/s_significandl.c: Likewise.
* sysdeps/m68k/m680x0/fpu/s_significand.c: Move all the code to
s_log1p.c and include it..

Signed-off-by: Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
6 years agoAdd Andes nds32 dynamic relocations to elf.h
Vincent Chen [Thu, 21 Jun 2018 20:44:43 +0000 (20:44 +0000)]
Add Andes nds32 dynamic relocations to elf.h

* elf/elf.h (R_NDS32_NONE): New define.
(R_NDS32_32_RELA): Likewise.
(R_NDS32_COPY): Likewise.
(R_NDS32_GLOB_DAT): Likewise.
(R_NDS32_JUMP_SLOT): Likewise.
(R_NDS32_RELATIVE): Likewise.
(R_NDS32_TLS_TPOFF): Likewise.
(R_NDS32_TLS_DESC): Likewise.

6 years agoelf.h: Add BPF relocation types.
Mark Wielaard [Sat, 16 Jun 2018 21:34:13 +0000 (23:34 +0200)]
elf.h: Add BPF relocation types.

The BPF ELF format has new relocation types R_BPF_64_64 and R_BPF_64_32.
The existing R_BPF_MAP_FD was an extension that never got implemented.
Remove it, because the constant conflicts with the official R_BPF_64_64.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
6 years agomath: Set 387 and SSE2 rounding mode for tgamma on i386 [BZ #23253]
Florian Weimer [Thu, 21 Jun 2018 06:04:29 +0000 (08:04 +0200)]
math: Set 387 and SSE2 rounding mode for tgamma on i386 [BZ #23253]

Previously, only the SSE2 rounding mode was set, so the assembler
implementations using 387 were not following the expecting rounding
mode.

6 years agoFix tst-cmp.c build with GCC mainline.
Joseph Myers [Wed, 20 Jun 2018 22:19:50 +0000 (22:19 +0000)]
Fix tst-cmp.c build with GCC mainline.

Building the testsuite with GCC mainline fails with
-Wstringop-overflow= errors in string/tst-cmp.c.  These are for calls
to strncmp and strncasecmp with SIZE_MAX size argument.  The tests are
deliberately using this size that would be dubious in normal code, so
this patch disables the warning for the calls in question.

Tested with build-many-glibcs.py for aarch64-linux-gnu.

* string/tst-cmp.c: Include <libc-diag.h>.
(strncmp_max): Disable -Wstringop-overflow= around call to
strncmp.
(strncasecmp_max): Disable -Wstringop-overflow= around call to
strncasecmp.

6 years agoFix bug-strspn1.c, bug-strpbrk1.c build with GCC mainline.
Joseph Myers [Wed, 20 Jun 2018 22:18:22 +0000 (22:18 +0000)]
Fix bug-strspn1.c, bug-strpbrk1.c build with GCC mainline.

Building the testsuite with GCC mainline fails with:

bug-strspn1.c: In function 'main':
bug-strspn1.c:14:3: error: right-hand operand of comma expression has no effect [-Werror=unused-value]
   strspn (b++, "");
   ^~~~~~~~~~~~~~~~

and a similar error for bug-strpbrk1.c.  I'm not sure what GCC change
introduced this, and the wording of the message is a bit off (in the
source it's not a comma expression, that must reflect GCC's IR).  But
the warning is correct (strspn is a pure function, the call is
useless, and if there wasn't an argument with a side effect much older
GCC would have warned); the point of the test is to verify that the
side effect in an argument still occurs for this useless call that can
otherwise be optimized to an (unused) constant (testing for a bug
there once was in an old strspn macro).  This patch duly arranges for
the warning to be disabled for this code.

Tested with build-many-glibcs.py for aarch64-linux-gnu.

* string/bug-strpbrk1.c: Include <libc-diag.h>.
(main): Disable -Wunused-value around call to strpbrk.
* string/bug-strspn1.c: Include <libc-diag.h>.
(main): Disable -Wunused-value around call to strspn.

6 years agoldbl-128ibm-compat: Create libm-alias-float128.h
Tulio Magno Quites Machado Filho [Wed, 20 Jun 2018 21:35:35 +0000 (18:35 -0300)]
ldbl-128ibm-compat: Create libm-alias-float128.h

Add a new libm-alias-float128.h in order to provide the __*ieee128
aliases for the existing *f128 that do not have a globally exported
symbol.

* sysdeps/ieee754/ldbl-128ibm-compat/Versions: New file.
* sysdeps/ieee754/ldbl-128ibm-compat/libm-alias-float128.h: New file.

6 years agoAdd a generic significand implementation
Tulio Magno Quites Machado Filho [Wed, 20 Jun 2018 21:15:06 +0000 (18:15 -0300)]
Add a generic significand implementation

Create a template for significand.

* math/Makefile (libm-calls): Move s_significandF to...
(gen-libm-calls): ... here.
* math/s_significand_template.c: New file.
* math/s_significand.c: Removed.
* math/s_significandf.c: Removed.
* math/s_significandl.c: Removed.
* sysdeps/ieee754/ldbl-opt/s_significand.c: Removed.
* sysdeps/ieee754/ldbl-opt/s_significandl.c: Removed.

Signed-off-by: Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
6 years agoMove declare_mgen_finite_alias definition
Tulio Magno Quites Machado Filho [Wed, 20 Jun 2018 20:42:47 +0000 (17:42 -0300)]
Move declare_mgen_finite_alias definition

Move declare_mgen_finite_alias, declare_mgen_finite_alias_s and
declare_mgen_finite_alias_x to a shared place in order to reuse them in
other files that also declare _finite aliases.

* math/e_exp2_template.c (declare_mgen_finite_alias,
declare_mgen_finite_alias_s, declare_mgen_finite_alias_x): Move to...
* sysdeps/generic/math-type-macros.h (declare_mgen_finite_alias,
declare_mgen_finite_alias_s, declare_mgen_finite_alias_x): ... here.

Signed-off-by: Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
6 years agolibio: Avoid ptrdiff_t overflow in IO_validate_vtable
Florian Weimer [Wed, 20 Jun 2018 07:45:19 +0000 (09:45 +0200)]
libio: Avoid ptrdiff_t overflow in IO_validate_vtable

If the candidate pointer is sufficiently far away from
__start___libc_IO_vtables, the result might not fit into ptrdiff_t.

6 years agoFix scanf rounding of negative floating-point numbers (bug 23280).
Joseph Myers [Tue, 19 Jun 2018 11:52:18 +0000 (11:52 +0000)]
Fix scanf rounding of negative floating-point numbers (bug 23280).

As reported in bug 23280, scanf functions produce incorrectly rounded
result for floating-point formats in FE_UPWARD and FE_DOWNWARD modes,
because they pass the input with sign removed to strtod functions, and
then negate the result if there was a '-' at the start of the input.

This patch fixes this by arranging for the sign to be passed to strtod
rather than scanf doing the negation itself.  In turn, keeping the
sign around in the buffer being built up for strtod requires updating
places that examine char_buffer_size (&charbuf) to allow for the sign
being there as an extra character.

Tested for x86_64.

[BZ #23280]
* stdio-common/vfscanf.c (_IO_vfscanf_internal): Pass sign of
floating-point number to strtod functions rather than possibly
negating result of those functions.
* stdio-common/tst-scanf-round.c: New file.
* stdio-common/Makefile (tests): Add tst-scanf-round.
($(objpfx)tst-scanf-round): Depend on $(libm).

6 years agohurd: fix localplt.data format
Samuel Thibault [Tue, 19 Jun 2018 00:37:23 +0000 (02:37 +0200)]
hurd: fix localplt.data format

* sysdeps/mach/hurd/i386/localplt.data: Drop empty line.

6 years agohurd: Fix "Missing required PLT reference"
Samuel Thibault [Tue, 19 Jun 2018 00:32:41 +0000 (02:32 +0200)]
hurd: Fix "Missing required PLT reference"

* sysdeps/mach/hurd/localplt.data: Move to...
* sysdeps/mach/hurd/i386/localplt.data: new file. Add + REL
R_386_GLOB_DAT like on Linux i386.

6 years agoAdd SHM_STAT_ANY from Linux 4.17 to bits/shm.h.
Joseph Myers [Mon, 18 Jun 2018 13:37:57 +0000 (13:37 +0000)]
Add SHM_STAT_ANY from Linux 4.17 to bits/shm.h.

Linux 4.17 adds a SHM_STAT_ANY constant (ipcs command).  This patch
adds it to the relevant bits/shm.h headers.

Tested for x86_64.

* sysdeps/unix/sysv/linux/alpha/bits/shm.h [__USE_MISC]
(SHM_STAT_ANY): New macro.
* sysdeps/unix/sysv/linux/arm/bits/shm.h [__USE_MISC]
(SHM_STAT_ANY): Likewise.
* sysdeps/unix/sysv/linux/bits/shm.h [__USE_MISC]
(SHM_STAT_ANY): Likewise.
* sysdeps/unix/sysv/linux/generic/bits/shm.h [__USE_MISC]
(SHM_STAT_ANY): Likewise.
* sysdeps/unix/sysv/linux/hppa/bits/shm.h [__USE_MISC]
(SHM_STAT_ANY): Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/shm.h [__USE_MISC]
(SHM_STAT_ANY): Likewise.
* sysdeps/unix/sysv/linux/mips/bits/shm.h [__USE_MISC]
(SHM_STAT_ANY): Likewise.
* sysdeps/unix/sysv/linux/powerpc/bits/shm.h [__USE_MISC]
(SHM_STAT_ANY): Likewise.
* sysdeps/unix/sysv/linux/s390/bits/shm.h [__USE_MISC]
(SHM_STAT_ANY): Likewise.
* sysdeps/unix/sysv/linux/sh/bits/shm.h [__USE_MISC]
(SHM_STAT_ANY): Likewise.
* sysdeps/unix/sysv/linux/sparc/bits/shm.h [__USE_MISC]
(SHM_STAT_ANY): Likewise.
* sysdeps/unix/sysv/linux/x86/bits/shm.h [__USE_MISC]
(SHM_STAT_ANY): Likewise.

6 years agoAdd SEM_STAT_ANY from Linux 4.17 to bits/sem.h.
Joseph Myers [Mon, 18 Jun 2018 13:36:41 +0000 (13:36 +0000)]
Add SEM_STAT_ANY from Linux 4.17 to bits/sem.h.

Linux 4.17 adds a SEM_STAT_ANY constant (ipcs command).  This patch
adds it to the relevant bits/sem.h headers.

Tested for x86_64.

* sysdeps/unix/sysv/linux/alpha/bits/sem.h [__USE_MISC]
(SEM_STAT_ANY): New macro.
* sysdeps/unix/sysv/linux/bits/sem.h [__USE_MISC]
(SEM_STAT_ANY): Likewise.
* sysdeps/unix/sysv/linux/generic/bits/sem.h [__USE_MISC]
(SEM_STAT_ANY): Likewise.
* sysdeps/unix/sysv/linux/hppa/bits/sem.h [__USE_MISC]
(SEM_STAT_ANY): Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/sem.h [__USE_MISC]
(SEM_STAT_ANY): Likewise.
* sysdeps/unix/sysv/linux/mips/bits/sem.h [__USE_MISC]
(SEM_STAT_ANY): Likewise.
* sysdeps/unix/sysv/linux/powerpc/bits/sem.h [__USE_MISC]
(SEM_STAT_ANY): Likewise.
* sysdeps/unix/sysv/linux/s390/bits/sem.h [__USE_MISC]
(SEM_STAT_ANY): Likewise.
* sysdeps/unix/sysv/linux/sparc/bits/sem.h [__USE_MISC]
(SEM_STAT_ANY): Likewise.
* sysdeps/unix/sysv/linux/x86/bits/sem.h [__USE_MISC]
(SEM_STAT_ANY): Likewise.

6 years agoAdd MSG_STAT_ANY from Linux 4.17 to bits/msq.h.
Joseph Myers [Mon, 18 Jun 2018 13:34:52 +0000 (13:34 +0000)]
Add MSG_STAT_ANY from Linux 4.17 to bits/msq.h.

Linux 4.17 adds a MSG_STAT_ANY constant (ipcs command).  This patch
adds it to the relevant bits/msq.h headers.

Tested for x86_64.

* sysdeps/unix/sysv/linux/alpha/bits/msq.h [__USE_MISC]
(MSG_STAT_ANY): New macro.
* sysdeps/unix/sysv/linux/bits/msq.h [__USE_MISC]
(MSG_STAT_ANY): Likewise.
* sysdeps/unix/sysv/linux/generic/bits/msq.h [__USE_MISC]
(MSG_STAT_ANY): Likewise.
* sysdeps/unix/sysv/linux/hppa/bits/msq.h [__USE_MISC]
(MSG_STAT_ANY): Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/msq.h [__USE_MISC]
(MSG_STAT_ANY): Likewise.
* sysdeps/unix/sysv/linux/mips/bits/msq.h [__USE_MISC]
(MSG_STAT_ANY): Likewise.
* sysdeps/unix/sysv/linux/powerpc/bits/msq.h [__USE_MISC]
(MSG_STAT_ANY): Likewise.
* sysdeps/unix/sysv/linux/s390/bits/msq.h [__USE_MISC]
(MSG_STAT_ANY): Likewise.
* sysdeps/unix/sysv/linux/sparc/bits/msq.h [__USE_MISC]
(MSG_STAT_ANY): Likewise.
* sysdeps/unix/sysv/linux/x86/bits/msq.h [__USE_MISC]
(MSG_STAT_ANY): Likewise.

6 years agoUpdate MAP_TYPE value for hppa from Linux 4.17.
Joseph Myers [Mon, 18 Jun 2018 13:33:52 +0000 (13:33 +0000)]
Update MAP_TYPE value for hppa from Linux 4.17.

This patch updates the hppa definition of MAP_TYPE to reflect a
corresponding change in the Linux kernel in 4.17 (so the value now has
four bits set, as it does on other architectures, although they are
different from other architectures because of hppa differences in
other MAP_* bits).

Tested with build-many-glibcs.py for hppa.

* sysdeps/unix/sysv/linux/hppa/bits/mman.h [__USE_MISC]
(MAP_TYPE): Change value to 0x2b.

6 years agoLinux: Create Netlink socket with SOCK_CLOEXEC in __check_pf [BZ #15722]
Florian Weimer [Mon, 18 Jun 2018 11:08:08 +0000 (13:08 +0200)]
Linux: Create Netlink socket with SOCK_CLOEXEC in __check_pf [BZ #15722]

6 years agoFix powerpc64le build of nan-sign tests (bug 23303).
Joseph Myers [Mon, 18 Jun 2018 11:27:51 +0000 (11:27 +0000)]
Fix powerpc64le build of nan-sign tests (bug 23303).

My recent nan-sign tests fail to build for powerpc64le with GCC 8
because of the special compile / link options needed there for any
test using _Float128.  This patch arranges for these tests to be
handled on powerpc64le similarly to other such tests.

Tested with build-many-glibcs.py for powerpc64le.

[BZ #23303]
* sysdeps/powerpc/powerpc64/le/Makefile
(CFLAGS-tst-strtod-nan-sign.c): Add -mfloat128.
(CFLAGS-tst-wcstod-nan-sign.c): Likewise.
(gnulib-tests): Also add $(f128-loader-link) for
tst-strtod-nan-sign abd tst-wcstod-nan-sign.

6 years agohurd: Fix reference to _hurd_self_sigstate
Samuel Thibault [Sat, 16 Jun 2018 14:07:23 +0000 (14:07 +0000)]
hurd: Fix reference to _hurd_self_sigstate

* sysdeps/hurd/include/hurd/signal.h (_hurd_self_sigstate): Add hidden
prototype and definition.
* sysdeps/mach/hurd/i386/____longjmp_chk.S (____longjmp_chk): Use
hidden target for _hurd_self_sigstate.

6 years agohurd: Fix missing __pthread_get_cleanup_stack symbol
Samuel Thibault [Sat, 16 Jun 2018 08:52:04 +0000 (10:52 +0200)]
hurd: Fix missing __pthread_get_cleanup_stack symbol

Rework 57e1651557e8 ("hurd: Avoid PLT ref for __pthread_get_cleanup_stack")
to keep the __pthread_get_cleanup_stack symbol.

        * htl/pt-cleanup.c (__pthread_get_cleanup_stack): Rename to
        ___pthread_get_cleanup_stack.
        (__pthread_get_cleanup_stack): Remove hidden def, add alias.
        * htl/pt-exit.c (__pthread_exit): Use ___pthread_get_cleanup_stack
        instead of __pthread_get_cleanup_stack.
        * sysdeps/htl/pthread-functions.h [libpthread]
        (__pthread_get_cleanup_stack): Remove hidden proto.
        * sysdeps/htl/pthreadP.h (___pthread_get_cleanup_stack): Add
        prototype.
* sysdeps/htl/pthreadP.h (___pthread_get_cleanup_stack): Add hidden
attribute.
* htl/pt-join.c (__pthread_get_cleanup_stack): Define to
___pthread_get_cleanup_stack.

6 years agohurd: Whitelist PLT refs which are difficult to avoid
Samuel Thibault [Sat, 16 Jun 2018 00:59:14 +0000 (02:59 +0200)]
hurd: Whitelist PLT refs which are difficult to avoid

* sysdeps/mach/hurd/localplt.data (siglongjmp, longjmp,
__libc_lseek64, _IO_funlockfile): Whitelist PLT references.

6 years agohurd: Avoid PLT references to syscalls
Samuel Thibault [Sat, 16 Jun 2018 00:47:51 +0000 (02:47 +0200)]
hurd: Avoid PLT references to syscalls

* mach/Makefile ($(mach-syscalls:%=$(objpfx))): Add hidden definition.
* sysdeps/mach/include/mach/mach_traps.h (__mach_reply_port,
__mach_thread_self, __mach_task_self, __mach_host_self, __swtch,
__swtch_pri, __thread_switch, __evc_wait): Add hidden prototypes.

6 years agohurd: Avoid PLT ref to __mach_msg
Samuel Thibault [Sat, 16 Jun 2018 00:35:17 +0000 (02:35 +0200)]
hurd: Avoid PLT ref to __mach_msg

* sysdeps/mach/include/mach.h (__mach_msg): Add hidden prototype.
* mach/msg.c: Include <mach.h>.
(__mach_msg): Add hidden definition.

6 years agohurd: Avoid PLT references to shortcuts
Samuel Thibault [Sat, 16 Jun 2018 00:19:47 +0000 (02:19 +0200)]
hurd: Avoid PLT references to shortcuts

* sysdeps/mach/include/mach-shortcuts-hidden.h: New file.
* mach/shortcut.awk: Make syscall stubs include
<mach-shortcuts-hidden.h> and add hidden definition.
* sysdeps/mach/include/mach.h: Include <mach-shortcuts-hidden.h>.

6 years agohurd: Avoid missing PLT ref from ld.so requirement
Samuel Thibault [Fri, 15 Jun 2018 23:49:29 +0000 (01:49 +0200)]
hurd: Avoid missing PLT ref from ld.so requirement

* sysdeps/mach/hurd/localplt.data (ld.so): Make ref to __open optional.

6 years agohurd: Avoid PLT ref for __pthread_get_cleanup_stack
Samuel Thibault [Fri, 15 Jun 2018 23:22:43 +0000 (01:22 +0200)]
hurd: Avoid PLT ref for __pthread_get_cleanup_stack

* htl/pt-cleanup.c (___pthread_get_cleanup_stack): Rename to
__pthread_get_cleanup_stack.
(__pthread_get_cleanup_stack): Remove alias, add hidden def.
* htl/pt-exit.c (__pthread_exit): Use __pthread_get_cleanup_stack
instead of ___pthread_get_cleanup_stack.
* sysdeps/htl/pthread-functions.h [libpthread]
(__pthread_get_cleanup_stack): Add hidden proto.
* sysdeps/htl/pthreadP.h (___pthread_get_cleanup_stack): Remove
prototype.

6 years agohurd: Detect 32bit overflow in value returned by lseek
Samuel Thibault [Fri, 15 Jun 2018 23:00:00 +0000 (01:00 +0200)]
hurd: Detect 32bit overflow in value returned by lseek

* sysdeps/mach/hurd/lseek.c: Include <errno.h>.
* sysdeps/mach/hurd/lseek.c (__libc_lseek): Check that the value returned
by __lseek64 can fit off_t, return EOVERFLOW otherwise.

6 years agohurd: avoid PLT ref between sendfile and sendfile64
Samuel Thibault [Fri, 15 Jun 2018 22:44:17 +0000 (00:44 +0200)]
hurd: avoid PLT ref between sendfile and sendfile64

* include/sys/sendfile.h (__sendfile64): Declare hidden prototype.
* sysdeps/mach/hurd/sendfile.c (sendfile): Call __sendfile64 instead
of sendfile.
* sysdeps/mach/hurd/sendfile64.c (sendfile64): Rename to __sendfile64.
(sendfile64): New strong alias.

6 years agoAdd tests for sign of NaN returned by strtod (bug 23007).
Joseph Myers [Fri, 15 Jun 2018 17:36:21 +0000 (17:36 +0000)]
Add tests for sign of NaN returned by strtod (bug 23007).

This patch adds tests for bug 23007, strtod ignoring any sign in the
input string in the case of a NaN result.

Tested for x86_64.

[BZ #23007]
* stdlib/tst-strtod-nan-sign-main.c: New file.
* stdlib/tst-strtod-nan-sign.c: Likewise.
* wcsmbs/tst-wcstod-nan-sign.c: Likewise.
* stdlib/Makefile (tests): Add tst-strtod-nan-sign.
($(objpfx)tst-strtod-nan-sign): Depend on $(libm).
* wcsmbs/Makefile (tests) Add tst-wcstod-nan-sign.
($(objpfx)tst-wcstod-nan-sign): Depend on $(libm).

6 years agoFix sign of NaN returned by strtod (bug 23007).
Herman ten Brugge [Fri, 15 Jun 2018 17:35:17 +0000 (17:35 +0000)]
Fix sign of NaN returned by strtod (bug 23007).

As reported in bug 23007, strtod ignores any sign in the input string
in the case of a NaN result.  Thes patch fixes this.

Tested for x86_64 (in conjunction with tests to be added separately).

[BZ #23007]
* stdlib/strtod_l.c (____STRTOF_INTERNAL): Return NaN of
appropriate sign.

6 years agolocaledata: Make IBM273 compatible with ISO-8859-1 [BZ #23290]
Florian Weimer [Thu, 14 Jun 2018 20:34:09 +0000 (22:34 +0200)]
localedata: Make IBM273 compatible with ISO-8859-1 [BZ #23290]

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
6 years agohurd: Fix htl link failure
Samuel Thibault [Thu, 14 Jun 2018 15:09:18 +0000 (17:09 +0200)]
hurd: Fix htl link failure

126b3ec370f0 ("hurd: Avoid PLTs for __mach_thread_self and
__mach_reply_port") made mach traps hidden, but htl actually uses two of
them. Re-expose them for now. Exposing them properly will be more involved
since their definition is generated.

* sysdeps/mach/include/mach/mach_traps.h (__mach_thread_self,
__mach_task_self): Remove attribute_hidden.

6 years agoIgnore -Wrestrict for one strncat test.
Joseph Myers [Thu, 14 Jun 2018 14:20:00 +0000 (14:20 +0000)]
Ignore -Wrestrict for one strncat test.

With current GCC mainline, one strncat test involving a size close to
SIZE_MAX results in a -Wrestrict warning that that buffer size would
imply that the two buffers must overlap.  This patch fixes the build
by adding disabling of -Wrestrict (for GCC versions supporting that
option) to the already-present disabling of -Wstringop-overflow= and
-Warray-bounds for this test.

Tested with build-many-glibcs.py that this restores the testsuite
build with GCC mainline for aarch64-linux-gnu.

* string/tester.c (test_strncat) [__GNUC_PREREQ (7, 0)]: Also
ignore -Wrestrict for one test.

6 years agoaarch64: Use an ifunc/VDSO to implement gettimeofday in shared glibc.
Steve Ellcey [Thu, 14 Jun 2018 07:18:42 +0000 (08:18 +0100)]
aarch64: Use an ifunc/VDSO to implement gettimeofday in shared glibc.

This patch uses an ifunc to implement gettimeofday in the shared libc.
This is faster compared to the vsyscall mechanism that has to check a
global pointer, demangle it and call it indirectly when the VDSO is
present. Resolving the gettimeofday symbol directly to the VDSO code
is safe because there are no failures that the libc has to handle by
setting errno like in a generic vsyscall (the only failure when the
VDSO code falls back to a syscall is EFAULT, but passing an invalid
pointer is undefined behaviour so returning -EFAULT is fine).

If the kernel supports the VDSO interface we use it for extern calls,
otherwise the old vsyscall method is used which falls back to a syscall.
The static version of gettimeofday continues to use a syscall, libc.so
internal calls use the old vsyscall method.

* sysdeps/unix/sysv/linux/aarch64/gettimeofday.c: New file.

6 years agoscripts/update-abilist.sh: Accept empty list of files to patch
Florian Weimer [Thu, 14 Jun 2018 07:37:31 +0000 (09:37 +0200)]
scripts/update-abilist.sh: Accept empty list of files to patch

Commit b289cd9db8286fa6c670104dd5dfcfc68d5d00d6 (“Ignore absolute
symbols in ABI tests.”) broke “make update-all-abi” because an empty
list of files is now passed to scripts/update-abilist.sh.

6 years agohurd: Avoid a PLT reference
Samuel Thibault [Wed, 13 Jun 2018 23:43:04 +0000 (01:43 +0200)]
hurd: Avoid a PLT reference

* sysdeps/mach/hurd/i386/____longjmp_chk.S (____longjmp_chk): Do not
use PLT to call _hurd_self_sigstate.

6 years agohurd: Avoid PLTs for __mach_thread_self and __mach_reply_port
Samuel Thibault [Wed, 13 Jun 2018 23:01:57 +0000 (01:01 +0200)]
hurd: Avoid PLTs for __mach_thread_self and __mach_reply_port

* mach/mach/mach_traps.h (__mach_reply_port, __mach_thread_self,
__mach_task_self, __mach_host_self, __swtch, __swtch_pri,
__thread_switch, __evc_wait): Move declarations to...
* sysdeps/mach/include/mach/mach_traps.h: ... new file, and add
attribute_hidden.

6 years agohurd: Avoid PLTs for _hurd_port_locked_get/set
Samuel Thibault [Wed, 13 Jun 2018 22:28:03 +0000 (00:28 +0200)]
hurd: Avoid PLTs for _hurd_port_locked_get/set

* sysdeps/hurd/include/hurd/port.h: New file.

6 years agohurd: update localplt.data
Samuel Thibault [Wed, 13 Jun 2018 22:22:20 +0000 (00:22 +0200)]
hurd: update localplt.data

after 329ea513b451 ("Avoid cancellable I/O primitives in ld.so.")

* sysdeps/mach/hurd/localplt.data (ld.so): Add __open64, rename
__libc_read and __libc_write to __read and __write.

6 years agohurd: xfail missing abilist for libmachuser and libhurduser
Samuel Thibault [Wed, 13 Jun 2018 19:12:23 +0000 (21:12 +0200)]
hurd: xfail missing abilist for libmachuser and libhurduser

They need more work to implement, see bug 23286.

* sysdeps/mach/hurd/i386/Makefile (test-xfail-check-abi-libhurduser,
test-xfail-check-abi-libmachuser): Add.

6 years agoFix strtod overflow detection (bug 23279).
Joseph Myers [Wed, 13 Jun 2018 16:06:14 +0000 (16:06 +0000)]
Fix strtod overflow detection (bug 23279).

As shown by bug 23279, strtod's round_and_return has an off-by-one
error in its overflow detection, only counting an exponent greater
than MAX_EXP as overflowing when an exponent of MAX_EXP also means
overflow (recall the ISO C definition of DBL_MAX_EXP etc. is based on
a floating-point model where 2^exp is multiplied by a value in the
interval [0.5, 1), so 2^MAX_EXP is not representable).

For decimal arguments to strtod, a separate overflow check in the main
implementation covers the case where the integer part of the argument
(truncated to the nearest integer towards zero) has more than MAX_EXP
bits, meaning that this issue in round_and_return only affects cases
(arguments with absolute value strictly between the maximum
representable value and 2^MAX_EXP) where overflow depends on the
rounding mode; in such cases, the returned value would still have been
correct on overflow but without the overflow exception being raised or
errno being set to ERANGE.  For hex float arguments, however, other
cases can arise, as shown in bug 23279, where a value with exponent
already set to MAX_EXP is passed into round_and_return and a result
can wrongly end up being NaN, or infinity instead of the largest
finite value.

This patch fixes the off-by-one error, adds testing of overflow
exceptions to the tst-strtod-round framework, and adds tests of these
issues.

Tested for x86_64.  Also ran the tst-strtod-round tests for powerpc to
make sure the new tests didn't introduce any new failures for IBM long
double.

[BZ #23279]
* stdlib/strtod_l.c (round_and_return): Handle an exponent of
MAX_EXP as overflowing.
* stdlib/gen-tst-strtod-round.c (string_to_fp): Clear MPFR
overflow flag.
(round_str): Output also whether result overflows in each rounding
mode.
* stdlib/tst-strtod-round-data: Add more tests.
* stdlib/tst-strtod-round-data.h: Regenerated.
* stdlib/tst-strtod-round-skeleton.c (_XNTRY): Update comment.
(TEST): Handle extra arguments for overflow flags.
(struct test_overflow): New type.
[!FE_OVERFLOW] (FE_OVERFLOW): Define to 0.
(GEN_ONE_TEST): Clear all exceptions.  Test overflow flag.
(test_in_one_mode): Take argument with overflow information.
(do_test): Update calls to test_in_one_mode.

6 years agoFix comments in _dl_dst_count and _dl_dst_substitute.
Carlos O'Donell [Wed, 13 Jun 2018 03:31:02 +0000 (23:31 -0400)]
Fix comments in _dl_dst_count and _dl_dst_substitute.

The comments in _dl_dst_count is adjusted to match what the code does
which is count DSTs from the start of the string. With the removal of
DL_DST_COUNT we no longer accept an input that starts at the first $.

In _dl_dst_substitute we adjust the comment to indicate that both
conditions must be true for the SUID/SGID $ORIGIN exception.

6 years agoFix fallback path in __pthread_mutex_timedlock ().
Carlos O'Donell [Tue, 12 Jun 2018 20:17:05 +0000 (16:17 -0400)]
Fix fallback path in __pthread_mutex_timedlock ().

Fix the typo in the fallback path in __pthread_mutex_timedlock ()
whic hcalls lll_futex_timed_wait ().  This is only useful for cases
where the patch is being backported to older distributions where
only lll_futex_timed_wait () is available.

6 years agoDo not use const attribute for nan functions (bug 23277).
Joseph Myers [Tue, 12 Jun 2018 16:57:26 +0000 (16:57 +0000)]
Do not use const attribute for nan functions (bug 23277).

As in https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86113 for
__builtin_nan, bits/mathcalls.h wrongly declares the nan function with
the __const__ attribute.  Because the function reads memory pointed to
by an argument, it's only pure, not const.  This patch removes the
incorrect attribute and adds a testcase for the bug.  No __pure__
attribute is added to replace the incorrect __const__ one, since that
would introduce problems when using GCC versions that have the
incorrect built-in __const__ attribute and warn for the combination of
those two attributes.

Tested for x86_64.

[BZ #23277]
* math/bits/mathcalls.h [__USE_ISOC99] (nan): Do not use __const__
attribute.
* math/test-nan-const.c: New file.
* math/Makefile (tests): Add test-nan-const.
(CFLAGS-test-nan-const.c): New variable.

6 years agobenchtests: Add -f/--functions argument
H.J. Lu [Tue, 12 Jun 2018 16:10:28 +0000 (09:10 -0700)]
benchtests: Add -f/--functions argument

On x86-64, there may be multiple IFUNC implementations for a given
function.  But we may be only interested in a subset of them.  This
patch adds -f/--functions argument to compare a subset of IFUNC
implementations.

* benchtests/scripts/compare_strings.py (process_results): Add
funcs argument.  Compare only functions which are selected.
(main): Check if base function is among selected functions.
Pass selected functions to process_results.
(__main__): Add -f/--functions argument.