]> sourceware.org Git - glibc.git/log
glibc.git
3 years agosupport: Make support_process_state_wait wait less
Samuel Thibault [Mon, 28 Dec 2020 22:05:14 +0000 (23:05 +0100)]
support: Make support_process_state_wait wait less

Tests such as posix/tst-waitid.c make heavy use of
support_process_state_wait, and thus on non-Linux where it falls back
to sleeping, a 2s sleep makes such test time out, while 1s remains
fine enough.

3 years agohurd: set sigaction for signal preemptors in arch-independent file
Samuel Thibault [Sat, 26 Dec 2020 16:57:52 +0000 (17:57 +0100)]
hurd: set sigaction for signal preemptors in arch-independent file

Instead of having the arch-specific trampoline setup code detect whether
preemption happened or not, we'd rather pass it the sigaction. In the
future, this may also allow to change sa_flags from post_signal().

3 years agohurd: Fix spawni SPAWN_XFLAGS_TRY_SHELL with empty argv
Samuel Thibault [Sat, 26 Dec 2020 15:39:40 +0000 (16:39 +0100)]
hurd: Fix spawni SPAWN_XFLAGS_TRY_SHELL with empty argv

When argv is empty, we need to add the original script to be run on the
shell command line.

3 years agohurd: Try shell in posix_spawn* only in compat mode
Samuel Thibault [Sat, 26 Dec 2020 14:12:04 +0000 (15:12 +0100)]
hurd: Try shell in posix_spawn* only in compat mode

Reported by Bruno Haible <bruno@clisp.org>

3 years agoRemove _ISOMAC check from <cpu-features.h>
H.J. Lu [Thu, 24 Dec 2020 23:43:34 +0000 (15:43 -0800)]
Remove _ISOMAC check from <cpu-features.h>

Remove _ISOMAC check from <cpu-features.h> since it isn't an installer
header file.

3 years agox86: Remove the duplicated CPU_FEATURE_CPU_P
H.J. Lu [Thu, 24 Dec 2020 02:34:34 +0000 (18:34 -0800)]
x86: Remove the duplicated CPU_FEATURE_CPU_P

CPU_FEATURE_CPU_P is defined in sysdeps/x86/sys/platform/x86.h.  Remove
the duplicated CPU_FEATURE_CPU_P in sysdeps/x86/include/cpu-features.h.

3 years agoPartially revert 681900d29683722b1cb0a8e565a0585846ec5a61
Siddhesh Poyarekar [Tue, 15 Dec 2020 10:36:48 +0000 (16:06 +0530)]
Partially revert 681900d29683722b1cb0a8e565a0585846ec5a61

Do not attempt to fix the significand top bit in long double input
received in printf.  The code should never reach here because isnan
should now detect unnormals as NaN.  This is already a NOP for glibc
since it uses the gcc __builtin_isnan, which detects unnormals as NaN.

Reviewed-by: Florian Weimer <fweimer@redhat.com>
3 years agox86 long double: Support pseudo numbers in isnanl
Siddhesh Poyarekar [Wed, 23 Dec 2020 08:32:02 +0000 (14:02 +0530)]
x86 long double: Support pseudo numbers in isnanl

This syncs up isnanl behaviour with gcc.  Also move the isnanl
implementation to sysdeps/x86 and remove the sysdeps/x86_64 version.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agox86 long double: Support pseudo numbers in fpclassifyl
Siddhesh Poyarekar [Wed, 23 Dec 2020 08:23:34 +0000 (13:53 +0530)]
x86 long double: Support pseudo numbers in fpclassifyl

Also move sysdeps/i386/fpu/s_fpclassifyl.c to
sysdeps/x86/fpu/s_fpclassifyl.c and remove
sysdeps/x86_64/fpu/s_fpclassifyl.c

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agoMTE: Do not pad size in realloc_check
Siddhesh Poyarekar [Wed, 23 Dec 2020 02:11:17 +0000 (07:41 +0530)]
MTE: Do not pad size in realloc_check

The MTE patch to add malloc support incorrectly padded the size passed
to _int_realloc by SIZE_SZ when it ought to have sent just the
chunksize.  Revert that bit of the change so that realloc works
correctly with MALLOC_CHECK_ set.

This also brings the realloc_check implementation back in sync with
libc_realloc.

3 years agotests-mcheck: New variable to run tests with MALLOC_CHECK_=3
Siddhesh Poyarekar [Wed, 23 Dec 2020 07:34:45 +0000 (13:04 +0530)]
tests-mcheck: New variable to run tests with MALLOC_CHECK_=3

This new variable allows various subsystems in glibc to run all or
some of their tests with MALLOC_CHECK_=3.  This patch adds
infrastructure support for this variable as well as an implementation
in malloc/Makefile to allow running some of the tests with
MALLOC_CHECK_=3.

At present some tests in malloc/ have been excluded from the mcheck
tests either because they're specifically testing MALLOC_CHECK_ or
they are failing in master even without the Memory Tagging patches
that prompted this work.  Some tests were reviewed and found to need
specific error points that MALLOC_CHECK_ defeats by terminating early
but a thorough review of all tests is needed to bring them into mcheck
coverage.

The following failures are seen in current master:

FAIL: malloc/tst-malloc-fork-deadlock-mcheck
FAIL: malloc/tst-malloc-stats-cancellation-mcheck
FAIL: malloc/tst-malloc-thread-fail-mcheck
FAIL: malloc/tst-realloc-mcheck
FAIL: malloc/tst-reallocarray-mcheck

All of these are due to the Memory Tagging patchset and will be fixed
separately.

3 years agoelf: Account for glibc-hwcaps/ prefix in _dl_important_hwcaps
Florian Weimer [Wed, 23 Dec 2020 11:07:20 +0000 (12:07 +0100)]
elf: Account for glibc-hwcaps/ prefix in _dl_important_hwcaps

3 years agomisc: Use __ferror_unlocked instead of ferror
Siddhesh Poyarekar [Wed, 23 Dec 2020 01:33:42 +0000 (07:03 +0530)]
misc: Use __ferror_unlocked instead of ferror

The ferror results in an unnecessary PLT reference.  Use
__ferror_unlocked instead , which gets inlined.

3 years agos390x: Regenerate ulps
Florian Weimer [Tue, 22 Dec 2020 18:20:56 +0000 (19:20 +0100)]
s390x: Regenerate ulps

For new inputs added in commit cad5ad81d2f7f58a7ad0d8afa8c1b710,
as seen on a z13 system.

3 years agopowerpc: Regenerate ulps
Florian Weimer [Tue, 22 Dec 2020 18:20:56 +0000 (19:20 +0100)]
powerpc: Regenerate ulps

For new inputs added in commit cad5ad81d2f7f58a7ad0d8afa8c1b710,
as seen on a POWER8 system.

3 years agoaddmntent: Remove unbounded alloca usage from getmntent [BZ#27083]
Siddhesh Poyarekar [Tue, 22 Dec 2020 11:48:12 +0000 (17:18 +0530)]
addmntent: Remove unbounded alloca usage from getmntent [BZ#27083]

The addmntent function replicates elements of struct mnt on stack
using alloca, which is unsafe.  Put characters directly into the
stream, escaping them as they're being written out.

Also add a test to check all escaped characters with addmntent and
getmntent.

3 years ago<sys/platform/x86.h>: Add Intel LAM support
H.J. Lu [Tue, 22 Dec 2020 03:56:10 +0000 (19:56 -0800)]
<sys/platform/x86.h>: Add Intel LAM support

Add Intel Linear Address Masking (LAM) support to <sys/platform/x86.h>.
HAS_CPU_FEATURE (LAM) can be used to detect if LAM is enabled in CPU.

LAM modifies the checking that is applied to 64-bit linear addresses,
allowing software to use of the untranslated address bits for metadata.

3 years agoi386: Regenerate ulps
Florian Weimer [Mon, 21 Dec 2020 17:17:54 +0000 (18:17 +0100)]
i386: Regenerate ulps

For new inputs added in commit cad5ad81d2f7f58a7ad0d8afa8c1b710.

3 years agoaarch64: update ulps.
Szabolcs Nagy [Mon, 21 Dec 2020 16:39:20 +0000 (16:39 +0000)]
aarch64: update ulps.

For new test cases in
commit cad5ad81d2f7f58a7ad0d8afa8c1b7101a0301fb

3 years agoaarch64: Add aarch64-specific files for memory tagging support
Richard Earnshaw [Mon, 21 Dec 2020 15:03:03 +0000 (15:03 +0000)]
aarch64: Add aarch64-specific files for memory tagging support

This final patch provides the architecture-specific implementation of
the memory-tagging support hooks for aarch64.

3 years agoaarch64: Add sysv specific enabling code for memory tagging
Richard Earnshaw [Mon, 21 Dec 2020 15:03:03 +0000 (15:03 +0000)]
aarch64: Add sysv specific enabling code for memory tagging

Add various defines and stubs for enabling MTE on AArch64 sysv-like
systems such as Linux.  The HWCAP feature bit is copied over in the
same way as other feature bits.  Similarly we add a new wrapper header
for mman.h to define the PROT_MTE flag that can be used with mmap and
related functions.

We add a new field to struct cpu_features that can be used, for
example, to check whether or not certain ifunc'd routines should be
bound to MTE-safe versions.

Finally, if we detect that MTE should be enabled (ie via the glibc
tunable); we enable MTE during startup as required.

Support in the Linux kernel was added in version 5.10.

Reviewed-by: Szabolcs Nagy <szabolcs.nagy@arm.com>
3 years agolinux: Add compatibility definitions to sys/prctl.h for MTE
Richard Earnshaw [Mon, 21 Dec 2020 15:03:03 +0000 (15:03 +0000)]
linux: Add compatibility definitions to sys/prctl.h for MTE

Older versions of the Linux kernel headers obviously lack support for
memory tagging, but we still want to be able to build in support when
using those (obviously it can't be enabled on such systems).

The linux kernel extensions are made to the platform-independent
header (linux/prctl.h), so this patch takes a similar approach.

3 years agomalloc: Basic support for memory tagging in the malloc() family
Richard Earnshaw [Mon, 21 Dec 2020 15:03:03 +0000 (15:03 +0000)]
malloc: Basic support for memory tagging in the malloc() family

This patch adds the basic support for memory tagging.

Various flavours are supported, particularly being able to turn on
tagged memory at run-time: this allows the same code to be used on
systems where memory tagging support is not present without neededing
a separate build of glibc.  Also, depending on whether the kernel
supports it, the code will use mmap for the default arena if morecore
does not, or cannot support tagged memory (on AArch64 it is not
available).

All the hooks use function pointers to allow this to work without
needing ifuncs.

Reviewed-by: DJ Delorie <dj@redhat.com>
3 years agoelf: Add a tunable to control use of tagged memory
Richard Earnshaw [Mon, 21 Dec 2020 15:03:03 +0000 (15:03 +0000)]
elf: Add a tunable to control use of tagged memory

Add a new glibc tunable: mem.tagging.  This is a decimal constant in
the range 0-255 but used as a bit-field.

Bit 0 enables use of tagged memory in the malloc family of functions.
Bit 1 enables precise faulting of tag failure on platforms where this
can be controlled.
Other bits are currently unused, but if set will cause memory tag
checking for the current process to be enabled in the kernel.

3 years agoconfig: Allow memory tagging to be enabled when configuring glibc
Richard Earnshaw [Mon, 21 Dec 2020 15:03:03 +0000 (15:03 +0000)]
config: Allow memory tagging to be enabled when configuring glibc

This patch adds the configuration machinery to allow memory tagging to be
enabled from the command line via the configure option --enable-memory-tagging.

The current default is off, though in time we may change that once the API
is more stable.

3 years agoalpha: Remove anonymous union in struct stat [BZ #27042]
Matt Turner [Mon, 21 Dec 2020 12:09:43 +0000 (09:09 -0300)]
alpha: Remove anonymous union in struct stat [BZ #27042]

This is clever, but it confuses downstream detection in at least zstd
and GNOME's glib. zstd has preprocessor tests for the 'st_mtime' macro,
which is not provided by the path using the anonymous union; glib checks
for the presence of 'st_mtimensec' in struct stat but then tries to
access that field in struct statx (which might be a bug on its own).

Checked with a build for alpha-linux-gnu.

3 years agoadd inputs to auto-libm-test-in yielding larger errors (binary64, x86_64)
Paul Zimmermann [Wed, 25 Nov 2020 18:03:33 +0000 (19:03 +0100)]
add inputs to auto-libm-test-in yielding larger errors (binary64, x86_64)

3 years agom68k: fix clobbering a5 in setjmp() [BZ #24202]
Sergei Trofimovich [Mon, 21 Dec 2020 04:54:34 +0000 (10:24 +0530)]
m68k: fix clobbering a5 in setjmp() [BZ #24202]

setjmp() uses C code to store current registers into jmp_buf
environment. -fstack-protector-all places canary into setjmp()
prologue and clobbers 'a5' before it gets saved.

The change inhibits stack canary injection to avoid clobber.

3 years agoiconv add iconv_close before the function returned with bad value.
liqingqing [Mon, 21 Dec 2020 04:22:38 +0000 (09:52 +0530)]
iconv add iconv_close before the function returned with bad value.

add iconv_close before the function returned with bad value.

3 years agoiconv: use iconv_close after iconv_open
liqingqing [Sat, 14 Dec 2019 08:07:22 +0000 (16:07 +0800)]
iconv: use iconv_close after iconv_open

3 years agoFix buffer overrun in EUC-KR conversion module (bz #24973)
Andreas Schwab [Mon, 21 Dec 2020 03:26:43 +0000 (08:56 +0530)]
Fix buffer overrun in EUC-KR conversion module (bz #24973)

The byte 0xfe as input to the EUC-KR conversion denotes a user-defined
area and is not allowed.  The from_euc_kr function used to skip two bytes
when told to skip over the unknown designation, potentially running over
the buffer end.

3 years agohurd: Make trampoline fill siginfo ss_sp from sc_uesp
Samuel Thibault [Mon, 21 Dec 2020 02:15:38 +0000 (03:15 +0100)]
hurd: Make trampoline fill siginfo ss_sp from sc_uesp

Mach actually rather fills the uesp field, not esp.

3 years agoHurd: make sigstates hold a reference on thread ports
Richard Braun [Mon, 21 Dec 2020 01:10:16 +0000 (02:10 +0100)]
Hurd: make sigstates hold a reference on thread ports

This change is required in order to correctly release per-thread
resources. Directly reusing the threading library reference isn't
possible since the sigstate is also used early in the main thread,
before threading is initialized.

* hurd/hurd/signal.h (_hurd_self_sigstate): Drop thread reference after
calling _hurd_thread_sigstate.
(_hurd_critical_section_lock): Likewise.
* hurd/hurdsig.c (_hurd_thread_sigstate): Add a reference on the thread.
(_hurd_sigstate_delete): Drop thread reference.

3 years agoprofil-counter: Add missing SIGINFO case
Samuel Thibault [Mon, 21 Dec 2020 01:02:47 +0000 (02:02 +0100)]
profil-counter: Add missing SIGINFO case

When SA_SIGINFO is available, sysdeps/posix/s?profil.c use it, so we have to
fix the __profil_counter function accordingly, using sigcontextinfo.h's
sigcontext_get_pc.

3 years agohurd: implement SA_SIGINFO signal handlers.
Jeremie Koenig [Mon, 21 Dec 2020 00:41:55 +0000 (01:41 +0100)]
hurd: implement SA_SIGINFO signal handlers.

SA_SIGINFO is actually just another way of expressing what we were
already passing over with struct sigcontext. This just introduces the
SIGINFO interface and fixes the posix values when that interface is
requested by the application.

3 years agohurd: Fix ELF_MACHINE_USER_ADDRESS_MASK value
Samuel Thibault [Sun, 20 Dec 2020 00:47:47 +0000 (01:47 +0100)]
hurd: Fix ELF_MACHINE_USER_ADDRESS_MASK value

x86 binaries are linked at 0x08000000, so we need to let them get mapped
there.

3 years agohurd: Note when the vm_map kernel bug was fixed
Samuel Thibault [Sun, 20 Dec 2020 00:46:11 +0000 (01:46 +0100)]
hurd: Note when the vm_map kernel bug was fixed

dl-sysdep has been wanting to use high bits in the vm_map mask for decades,
but that was only implemented lately.

3 years agohurd: Also turn KERN_INVALID_ADDRESS to EINVAL
Samuel Thibault [Sat, 19 Dec 2020 17:57:47 +0000 (18:57 +0100)]
hurd: Also turn KERN_INVALID_ADDRESS to EINVAL

When e.g. mmap is passed an invalid address we would return
KERN_INVALID_ADDRESS, while POSIX applications would expect EINVAL.

3 years agoieee754: Remove unused __sin32 and __cos32
Anssi Hannula [Mon, 27 Jan 2020 10:45:11 +0000 (12:45 +0200)]
ieee754: Remove unused __sin32 and __cos32

The __sin32 and __cos32 functions were only used in the now removed slow
path of asin and acos.

3 years agoieee754: Remove slow paths from asin and acos
Anssi Hannula [Mon, 27 Jan 2020 10:45:10 +0000 (12:45 +0200)]
ieee754: Remove slow paths from asin and acos

asin and acos have slow paths for rounding the last bit that cause some
calls to be 500-1500x slower than average calls.

These slow paths are rare, a test of a trillion (1.000.000.000.000)
random inputs between -1 and 1 showed 32870 slow calls for acos and 4473
for asin, with most occurrences between -1.0 .. -0.9 and 0.9 .. 1.0.

The slow paths claim correct rounding and use __sin32() and __cos32()
(which compare two result candidates and return the closest one) as the
final step, with the second result candidate (res1) having a small offset
applied from res. This suggests that res and res1 are intended to be 1
ULP apart (which makes sense for rounding), barring bugs, allowing us to
pick either one and still remain within 1 ULP of the exact result.

Remove the slow paths as the accuracy is better than 1 ULP even without
them, which is enough for glibc.

Also remove code comments claiming correctly rounded results.

After slow path removal, checking the accuracy of 14.400.000.000 random
asin() and acos() inputs showed only three incorrectly rounded
(error > 0.5 ULP) results:
- asin(-0x1.ee2b43286db75p-1) (0.500002 ULP, same as before)
- asin(-0x1.f692ba202abcp-4)  (0.500003 ULP, same as before)
- asin(-0x1.9915e876fc062p-1) (0.50000000001 ULP, previously exact)
The first two had the same error even before this commit, and they did
not use the slow path at all.

Checking 4934 known randomly found previously-slow-path asin inputs
shows 25 calls with incorrectly rounded results, with a maximum error of
0.500000002 ULP (for 0x1.fcd5742999ab8p-1). The previous slow-path code
rounded all these inputs correctly (error < 0.5 ULP).
The observed average speed increase was 130x.

Checking 36240 known randomly found previously-slow-path acos inputs
shows 42 calls with incorrectly rounded results, with a maximum error of
0.500000008 ULP (for 0x1.f63845056f35ep-1). The previous "exact"
slow-path code showed 34 calls with incorrectly rounded results, with the
same maximum error of 0.500000008 ULP (for 0x1.f63845056f35ep-1).
The observed average speed increase was 130x.

The functions could likely be trimmed more while keeping acceptable
accuracy, but this at least gets rid of the egregiously slow cases.

Tested on x86_64.

3 years agogetenv: Move call to strlen to the branch it's used in.
Lode Willems [Fri, 18 Dec 2020 06:32:27 +0000 (12:02 +0530)]
getenv: Move call to strlen to the branch it's used in.

The len variable is only used in the else branch.
We don't need the call to strlen if the name is 0 or 1 characters long.

2019-10-02  Lode Willems  <Lode.Willems@UGent.be>

* tdlib/getenv.c: Move the call to strlen into the branch it's used.

3 years agoUpdate kernel version to 5.10 in tst-mman-consts.py.
Joseph Myers [Thu, 17 Dec 2020 16:17:59 +0000 (16:17 +0000)]
Update kernel version to 5.10 in tst-mman-consts.py.

This patch updates the kernel version in the test tst-mman-consts.py
to 5.10.  (There are no new MAP_* constants covered by this test in
5.10 that need any other header changes.)

Tested with build-many-glibcs.py.

3 years agos390x: Require GCC 7.1 or later to build glibc.
Stefan Liebler [Tue, 15 Dec 2020 14:18:03 +0000 (15:18 +0100)]
s390x: Require GCC 7.1 or later to build glibc.

GCC 6.5 fails to correctly build ldconfig with recent ld.so.cache
commits, e.g.:
785969a047ad2f23f758901c6816422573544453
elf: Implement a string table for ldconfig, with tail merging

If glibc is build with gcc 6.5.0:
__builtin_add_overflow is used in
<glibc>/elf/stringtable.c:stringtable_finalize()
which leads to ldconfig failing with "String table is too large".
This is also recognizable in following tests:
FAIL: elf/tst-glibc-hwcaps-cache
FAIL: elf/tst-glibc-hwcaps-prepend-cache
FAIL: elf/tst-ldconfig-X
FAIL: elf/tst-ldconfig-bad-aux-cache
FAIL: elf/tst-ldconfig-ld_so_conf-update
FAIL: elf/tst-stringtable

See gcc "Bug 98269 - gcc 6.5.0 __builtin_add_overflow() with small
uint32_t values incorrectly detects overflow"
(https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98269)

3 years agomalloc: Use __libc_initial to detect an inner libc
Florian Weimer [Wed, 16 Dec 2020 14:09:52 +0000 (15:09 +0100)]
malloc: Use __libc_initial to detect an inner libc

The secondary/non-primary/inner libc (loaded via dlmopen, LD_AUDIT,
static dlopen) must not use sbrk to allocate member because that would
interfere with allocations in the outer libc.  On Linux, this does not
matter because sbrk itself was changed to fail in secondary libcs.

 _dl_addr occasionally shows up in profiles, but had to be used before
because __libc_multiple_libs was unreliable.  So this change achieves
a slight reduction in startup time.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agoReplace __libc_multiple_libcs with __libc_initial flag
Florian Weimer [Wed, 16 Dec 2020 14:09:52 +0000 (15:09 +0100)]
Replace __libc_multiple_libcs with __libc_initial flag

Change sbrk to fail for !__libc_initial (in the generic
implementation).  As a result, sbrk is (relatively) safe to use
for the __libc_initial case (from the main libc).  It is therefore
no longer necessary to avoid using it in that case (or updating the
brk cache), and the __libc_initial flag does not need to be updated
as part of dlmopen or static dlopen.

As before, direct brk system calls on Linux may lead to memory
corruption.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years ago{nptl,htl}/semaphoreP.h: clean up
Samuel Thibault [Wed, 16 Dec 2020 13:36:19 +0000 (14:36 +0100)]
{nptl,htl}/semaphoreP.h: clean up

This removes "Contributed by", and uses a C99 flexible array instead of
char name[0];

3 years agohtl: Get sem_open/sem_close/sem_unlink support [BZ #25524]
Samuel Thibault [Sun, 13 Dec 2020 15:20:32 +0000 (15:20 +0000)]
htl: Get sem_open/sem_close/sem_unlink support [BZ #25524]

This just moves the existing nptl implementation to reuse as it is in
htl.

3 years agopthread: Move semaphore initialization for open to semaphoreP.h
Samuel Thibault [Sun, 13 Dec 2020 15:18:16 +0000 (15:18 +0000)]
pthread: Move semaphore initialization for open to semaphoreP.h

This allows to easily reuse all of the sem_open/sem_close/sem_unlink
implementations in the various ports.

3 years agoMark __libc_freeres_fn as used [BZ #27002]
H.J. Lu [Wed, 2 Dec 2020 22:26:28 +0000 (14:26 -0800)]
Mark __libc_freeres_fn as used [BZ #27002]

GCC 11 with

commit 6fbec038f7a7ddf29f074943611b53210d17c40c
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Mon Feb 3 11:55:43 2020 -0800

    Use SHF_GNU_RETAIN to preserve symbol definitions

places used symbols in SECTION_RETAIN sections if assembler supports it.
Mark __libc_freeres_fn as used to avoid

gconv_dl.c: In function 'free_mem':
gconv_dl.c:191:1: error: 'do_release_all' without 'used' attribute and 'free_mem' with 'used' attribute are placed in a section with the same name [-Werror=attributes]
  191 | do_release_all (void *nodep)
      | ^~~~~~~~~~~~~~
In file included from <command-line>:
gconv_dl.c:202:18: note: 'free_mem' was declared here
  202 | libc_freeres_fn (free_mem)
      |                  ^~~~~~~~
./../include/libc-symbols.h:316:15: note: in definition of macro 'libc_freeres_fn'
  316 |   static void name (void)
      |               ^~~~
cc1: all warnings being treated as errors

3 years agoUpdate syscall lists for Linux 5.10.
Joseph Myers [Wed, 16 Dec 2020 02:08:52 +0000 (02:08 +0000)]
Update syscall lists for Linux 5.10.

Linux 5.10 has one new syscall, process_madvise.  Update
syscall-names.list and regenerate the arch-syscall.h headers with
build-many-glibcs.py update-syscalls.

Tested with build-many-glibcs.py.

3 years agohtl: Add pshared semaphore support
Samuel Thibault [Sun, 13 Dec 2020 15:14:40 +0000 (15:14 +0000)]
htl: Add pshared semaphore support

The implementation is extremely similar to the nptl implementation, but
with slight differences in the futex interface. This fixes some of BZ
25521.

3 years agohurd: Add LLL_PRIVATE and LLL_SHARED
Samuel Thibault [Sun, 13 Dec 2020 13:31:22 +0000 (13:31 +0000)]
hurd: Add LLL_PRIVATE and LLL_SHARED

3 years agohurd: Add __libc_open and __libc_close
Samuel Thibault [Sun, 13 Dec 2020 13:29:25 +0000 (13:29 +0000)]
hurd: Add __libc_open and __libc_close

Needed by libpthread for sem_open and sem_close

3 years agohtl: Add futex-internal.h
Samuel Thibault [Sun, 13 Dec 2020 11:06:27 +0000 (11:06 +0000)]
htl: Add futex-internal.h

That provides futex_supports_pshared

3 years agohurd: Add __lll_abstimed_wait_intr
Samuel Thibault [Sun, 13 Dec 2020 11:01:52 +0000 (11:01 +0000)]
hurd: Add __lll_abstimed_wait_intr

For semaphores, we need an interruptible version of low-level locks.

3 years agohurd: make lll_* take a variable instead of a ptr
Samuel Thibault [Sun, 13 Dec 2020 10:37:24 +0000 (10:37 +0000)]
hurd: make lll_* take a variable instead of a ptr

To be coherent with other ports, let's make lll_* take a variable, and
rename those that keep taking a ptr into __lll_*.

3 years agohurd: Rename LLL_INITIALIZER to LLL_LOCK_INITIALIZER
Samuel Thibault [Sun, 13 Dec 2020 10:16:55 +0000 (10:16 +0000)]
hurd: Rename LLL_INITIALIZER to LLL_LOCK_INITIALIZER

To get coherent with other ports.

3 years agoUse Linux 5.10 in build-many-glibcs.py.
Joseph Myers [Tue, 15 Dec 2020 23:36:41 +0000 (23:36 +0000)]
Use Linux 5.10 in build-many-glibcs.py.

This patch makes build-many-glibcs.py use Linux 5.10.

Tested with build-many-glibcs.py (host-libraries, compilers and glibcs
builds).

3 years agoelf: Record libc.so link map when it is the main program (bug 20972)
Florian Weimer [Tue, 15 Dec 2020 19:56:04 +0000 (20:56 +0100)]
elf: Record libc.so link map when it is the main program (bug 20972)

Otherwise, it will not participate in the dependency sorting.

Fixes commit 9ffa50b26b0cb5d3043adf6d3d0b1ea735acc147
("elf: Include libc.so.6 as main program in dependency sort
(bug 20972)").

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
3 years agoUse GMP 6.2.1 in build-many-glibcs.py.
Joseph Myers [Tue, 15 Dec 2020 16:45:49 +0000 (16:45 +0000)]
Use GMP 6.2.1 in build-many-glibcs.py.

This patch makes build-many-glibcs.py use the recent GMP 6.2.1
release.

Tested with build-many-glibcs.py (host-libraries, compilers and glibcs
builds).

3 years agoaarch64: remove the strlen_asimd symbol
Szabolcs Nagy [Tue, 15 Dec 2020 10:36:56 +0000 (10:36 +0000)]
aarch64: remove the strlen_asimd symbol

This symbol is not in the implementation reserved namespace for static
linking and it was never used: it seems it was mistakenly added in the
orignal strlen_asimd commit 436e4d5b965abe592d26150cb518accf9ded8fe4

3 years agoaarch64: fix static PIE start code for BTI [BZ #27068]
Guillaume Gardet [Mon, 14 Dec 2020 15:38:22 +0000 (15:38 +0000)]
aarch64: fix static PIE start code for BTI [BZ #27068]

A bti c was missing from rcrt1.o which made all -static-pie
binaries fail at program startup on BTI enabled systems.

Fixes bug 27068.

3 years agoelf: Fix failure handling in _dl_map_object_from_fd
Szabolcs Nagy [Tue, 24 Nov 2020 12:34:39 +0000 (12:34 +0000)]
elf: Fix failure handling in _dl_map_object_from_fd

The failure paths in _dl_map_object_from_fd did not clean every
potentially allocated resource up.

Handle l_phdr, l_libname and mapped segments in the common failure
handling code.

There are various bits that may not be cleaned properly on failure
(e.g. executable stack, incomplete dl_map_segments) fixing those
need further changes.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agoelf: inline lose for error handling
Szabolcs Nagy [Tue, 24 Nov 2020 11:08:33 +0000 (11:08 +0000)]
elf: inline lose for error handling

_dl_map_object_from_fd has complex error handling with cleanups.
It was managed by a separate function to avoid code bloat at
every failure case, but since the code was changed to use gotos
there is no longer such code bloat from inlining.

Maintaining a separate error handling function is harder as it
needs to access local state which has to be passed down. And the
same lose function was used in open_verify which is error prone.

The goto labels are changed since there is no longer a call.
The new code generates slightly smaller binary.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agoRemove strtoimax, strtoumax, wcstoimax, wcstoumax inlines
Joseph Myers [Mon, 14 Dec 2020 17:51:38 +0000 (17:51 +0000)]
Remove strtoimax, strtoumax, wcstoimax, wcstoumax inlines

inttypes.h has inline implementations of the strtoimax, strtoumax,
wcstoimax and wcstoumax functions, despite the corresponding stdlib.h
and wchar.h inlines having been removed in 2007 (commit
9b2e9577b228350b15d88303b00097dd58e8d29b).

Remove those inlines, thereby eliminating all references to the
corresponding __*_internal functions from installed headers (so they
could be made into compat symbols in future if desired).

Tested for x86_64 and x86.

3 years agonsswitch: handle missing actions properly
DJ Delorie [Thu, 10 Dec 2020 02:46:30 +0000 (21:46 -0500)]
nsswitch: handle missing actions properly

Some internal functions need to know if a database has a nonzero
list of actions; success getting the database does not guarantee
that.  Add checks for such as needed.

Skip the ":" in each nsswitch.conf line so as not to add a dummy
action libnss_:.so

See also https://bugzilla.redhat.com/show_bug.cgi?id=1906066

Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
3 years agox86: Remove the default REP MOVSB threshold tunable value [BZ #27061]
H.J. Lu [Sun, 13 Dec 2020 12:56:41 +0000 (04:56 -0800)]
x86: Remove the default REP MOVSB threshold tunable value [BZ #27061]

Since we can't tell if the tunable value is set by user or not:

https://sourceware.org/bugzilla/show_bug.cgi?id=27069

remove the default REP MOVSB threshold tunable value so that the correct
default value will be set correctly by init_cacheinfo ().

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
3 years agoelf.h: Remove SHF_GNU_BUILD_NOTE.
Mark Wielaard [Fri, 11 Dec 2020 22:58:24 +0000 (23:58 +0100)]
elf.h: Remove SHF_GNU_BUILD_NOTE.

SHF_GNU_BUILD_NOTE was a binutils experiment.  And it is no longer
needed. It was also removed from binutils.

3 years agoelf.h: fix spelling typos in comments
Dmitry V. Levin [Sat, 12 Dec 2020 00:30:00 +0000 (00:30 +0000)]
elf.h: fix spelling typos in comments

Since elf.h is a public header file copied to other projects,
try to make it free from spelling typos.

This change fixes the following spelling typos in comments of elf.h:

Auxialiary -> Auxiliary
tenatively -> tentatively
compatability -> compatibility

3 years agoFix spelling and grammar in several comments
Jonny Grant [Sat, 12 Dec 2020 00:16:22 +0000 (01:16 +0100)]
Fix spelling and grammar in several comments

3 years agomalloc: Detect infinite-loop in _int_free when freeing tcache [BZ#27052]
W. Hashimoto [Fri, 11 Dec 2020 21:59:10 +0000 (16:59 -0500)]
malloc: Detect infinite-loop in _int_free when freeing tcache [BZ#27052]

If linked-list of tcache contains a loop, it invokes infinite
loop in _int_free when freeing tcache. The PoC which invokes
such infinite loop is on the Bugzilla(#27052). This loop
should terminate when the loop exceeds mp_.tcache_count and
the program should abort. The affected glibc version is
2.29 or later.

Reviewed-by: DJ Delorie <dj@redhat.com>
3 years agoelf: Fix dl-load.c
Szabolcs Nagy [Fri, 11 Dec 2020 17:30:49 +0000 (17:30 +0000)]
elf: Fix dl-load.c

Rebasing broke commit 38a3836011f3fe3290a94ab136dcb5f3c5c9f4e2
it was supposed to move code.

3 years agoelf: Include libc.so.6 as main program in dependency sort (bug 20972)
Florian Weimer [Fri, 11 Dec 2020 16:30:03 +0000 (17:30 +0100)]
elf: Include libc.so.6 as main program in dependency sort (bug 20972)

_dl_map_object_deps always sorts the initially loaded object first
during dependency sorting.  This means it is relocated last in
dl_open_worker.  This results in crashes in IFUNC resolvers without
lazy bindings if libraries are preloaded that refer to IFUNCs in
libc.so.6: the resolvers are called when libc.so.6 has not been
relocated yet, so references to _rtld_global_ro etc. crash.

The fix is to check against the libc.so.6 link map recorded by the
__libc_early_init framework, and let it participate in the dependency
sort.

This fixes bug 20972.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
3 years agosupport: Add support_slibdir_prefix variable
Florian Weimer [Fri, 11 Dec 2020 16:24:08 +0000 (17:24 +0100)]
support: Add support_slibdir_prefix variable

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
3 years agoaarch64: Use mmap to add PROT_BTI instead of mprotect [BZ #26831]
Szabolcs Nagy [Tue, 1 Dec 2020 10:13:18 +0000 (10:13 +0000)]
aarch64: Use mmap to add PROT_BTI instead of mprotect [BZ #26831]

Re-mmap executable segments if possible instead of using mprotect
to add PROT_BTI. This allows using BTI protection with security
policies that prevent mprotect with PROT_EXEC.

If the fd of the ELF module is not available because it was kernel
mapped then mprotect is used and failures are ignored.  To protect
the main executable even when mprotect is filtered the linux kernel
 will have to be changed to add PROT_BTI to it.

The delayed failure reporting is mainly needed because currently
_dl_process_gnu_properties does not propagate failures such that
the required cleanups happen. Using the link_map_machine struct for
error propagation is not ideal, but this seemed to be the least
intrusive solution.

Fixes bug 26831.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agoelf: Pass the fd to note processing
Szabolcs Nagy [Wed, 28 Oct 2020 15:17:06 +0000 (15:17 +0000)]
elf: Pass the fd to note processing

To handle GNU property notes on aarch64 some segments need to
be mmaped again, so the fd of the loaded ELF module is needed.

When the fd is not available (kernel loaded modules), then -1
is passed.

The fd is passed to both _dl_process_pt_gnu_property and
_dl_process_pt_note for consistency. Target specific note
processing functions are updated accordingly.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agoelf: Move note processing after l_phdr is updated
Szabolcs Nagy [Thu, 29 Oct 2020 13:29:15 +0000 (13:29 +0000)]
elf: Move note processing after l_phdr is updated

Program headers are processed in two pass: after the first pass
load segments are mmapped so in the second pass target specific
note processing logic can access the notes.

The second pass is moved later so various link_map fields are
set up that may be useful for note processing such as l_phdr.
The second pass should be before the fd is closed so that is
available.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agoaarch64: align address for BTI protection [BZ #26988]
Szabolcs Nagy [Tue, 1 Dec 2020 10:12:32 +0000 (10:12 +0000)]
aarch64: align address for BTI protection [BZ #26988]

Handle unaligned executable load segments (the bfd linker is not
expected to produce such binaries, but other linkers may).

Computing the mapping bounds follows _dl_map_object_from_fd more
closely now.

Fixes bug 26988.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agoaarch64: Fix missing BTI protection from dependencies [BZ #26926]
Szabolcs Nagy [Fri, 20 Nov 2020 15:27:06 +0000 (15:27 +0000)]
aarch64: Fix missing BTI protection from dependencies [BZ #26926]

The _dl_open_check and _rtld_main_check hooks are not called on the
dependencies of a loaded module, so BTI protection was missed on
every module other than the main executable and directly dlopened
libraries.

The fix just iterates over dependencies to enable BTI.

Fixes bug 26926.

3 years agoFix linknamespace errors in nss_database.c if build with -Os.
Stefan Liebler [Thu, 10 Dec 2020 10:31:57 +0000 (11:31 +0100)]
Fix linknamespace errors in nss_database.c if build with -Os.

Starting with recent commits, I get 43 conform/.../linknamespace FAILs:
- nss: Introduce <nss_module.h>
- <nss_action.h>: New abstraction for combining NSS modules and NSS actions
- nss: Implement <nss_database.h> (see nss/nss_database.c)
- nsswitch: use new internal API (core)
- nsswitch: user new internal API (tests)
- nsswitch: use new internal API (callers)

e.g. conform/XPG42/wordexp.h/linknamespace.out
[initial] wordexp -> [libc.a(wordexp.o)] __getpwnam_r -> [libc.a(getpwnam_r.o)] __nss_database_custom -> [libc.a(nsswitch.o)] __nss_database_get -> [libc.a(nss_database.o)] feof_unlocked
[initial] wordexp -> [libc.a(wordexp.o)] __getpwnam_r -> [libc.a(getpwnam_r.o)] __nss_database_custom -> [libc.a(nsswitch.o)] __nss_database_get -> [libc.a(nss_database.o)] ferror_unlocked

This patch is just using __ferror_unlocked and __feof_unlocked instead of the
non "__" prefixed ones.

Reviewed-by: DJ Delorie <dj@redhat.com>
3 years agotreewide: fix incorrect spelling of indices in comments
Dmitry V. Levin [Fri, 11 Dec 2020 02:00:00 +0000 (02:00 +0000)]
treewide: fix incorrect spelling of indices in comments

Replace 'indeces' with 'indices', the most annoying of these typos were
those found in elf.h which is a public header file copied to other
projects.

3 years agolinux: Consolidate brk implementation
Adhemerval Zanella [Fri, 26 Jun 2020 19:06:49 +0000 (16:06 -0300)]
linux: Consolidate brk implementation

It removes all the arch-specific assembly implementation.  The
outliers are alpha, where its kernel ABI explict return -ENOMEM
in case of failure; and i686, where it can't use
"call *%gs:SYSINFO_OFFSET" during statup in static PIE.

Also some ABIs exports an additional ___brk_addr symbol and to
handle it an internal HAVE_INTERNAL_BRK_ADDR_SYMBOL is added.

Checked on x86_64-linux-gnu, i686-linux-gnu, adn with builsd for
the affected ABIs.

Reviewed-by: Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
3 years agoelf: Include <sys/param.h> in cache.c
Florian Weimer [Thu, 10 Dec 2020 14:47:26 +0000 (15:47 +0100)]
elf: Include <sys/param.h> in cache.c

The roundup macro is defined there.  Relying on an indirect
definition is brittle.

3 years agos390x: Add glibc-hwcaps support
Florian Weimer [Thu, 10 Dec 2020 12:51:18 +0000 (13:51 +0100)]
s390x: Add glibc-hwcaps support

Subdirectories z13, z14, z15 can be selected, mostly based on the
level of support for vector instructions.

Co-Authored-By: Stefan Liebler <stli@linux.ibm.com>
3 years agoelf: Fix run-time dependencies of tst-dlopen-fail-2
Florian Weimer [Thu, 10 Dec 2020 11:24:53 +0000 (12:24 +0100)]
elf: Fix run-time dependencies of tst-dlopen-fail-2

The misattributed dependencies can cause failures in parallel testing
if the dependencies have not been built yet.

Fixes commit a332bd1518af518c984fad73eba6f46dc5b2b2d4
("elf: Add elf/tst-dlopenfail-2 [BZ #25396]").

3 years agoHandle out-of-memory case in svc_tcp.c/svc_unix.c:rendezvous_request.
Stefan Liebler [Fri, 4 Dec 2020 16:00:27 +0000 (17:00 +0100)]
Handle out-of-memory case in svc_tcp.c/svc_unix.c:rendezvous_request.

If glibc is build with -O3 on at least 390 (-m31) or x86 (-m32),
gcc 11 dumps this warning:
svc_tcp.c: In function 'rendezvous_request':
svc_tcp.c:274:3: error: 'memcpy' offset [0, 15] is out of the bounds [0, 0] [-Werror=array-bounds]
  274 |   memcpy (&xprt->xp_raddr, &addr, sizeof (addr));
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors

In out-of-memory case, if one of the mallocs in makefd_xprt function
returns NULL, a message is dumped, makefd_xprt returns NULL
and the subsequent memcpy would copy to NULL.

Instead of a segfaulting, we delay a bit (see also __svc_accept_failed
and Bug 14889 (CVE-2011-4609) - svc_run() produces high cpu usage when
accept() fails with EMFILE (CVE-2011-4609).

The same applies to svc_unix.c.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agoelf: Fix incorrect comparison in sort_priorities_by_name
Florian Weimer [Wed, 9 Dec 2020 17:56:14 +0000 (18:56 +0100)]
elf: Fix incorrect comparison in sort_priorities_by_name

Reported-By: Stefan Liebler <stli@linux.ibm.com>
3 years agoS390: Derive float_t from FLT_EVAL_METHOD
Marius Hillenbrand [Mon, 30 Nov 2020 14:53:59 +0000 (15:53 +0100)]
S390: Derive float_t from FLT_EVAL_METHOD

float_t supposedly represents the type that is used to evaluate float
expressions internally. While the isa supports single-precision float
operations, the port of glibc to s390 incorrectly deferred to the
generic definitions which, back then, tied float_t to double. gcc by
default evaluates float in single precision, so that scenario violates
the C standard (sections 5.2.4.2.2 and 7.12 in C11/C17). With
-fexcess-precision=standard, gcc evaluates float in double precision,
which aligns with the standard yet at the cost of added conversion
instructions.

With this patch, we drop the s390-specific definition of float_t and
defer to the default behavior, which aligns float_t with the
compiler-defined FLT_EVAL_METHOD in a standard-compliant way.

Checked on s390x-linux-gnu with 31-bit and 64-bit builds.

3 years agoFix parsing of /sys/devices/system/cpu/online (bug 25859)
Andreas Schwab [Tue, 8 Dec 2020 18:17:41 +0000 (19:17 +0100)]
Fix parsing of /sys/devices/system/cpu/online (bug 25859)

The file contains comma-separated ranges, not spaces.

3 years agoMake strtoimax, strtoumax, wcstoimax, wcstoumax into aliases
Joseph Myers [Tue, 8 Dec 2020 18:15:27 +0000 (18:15 +0000)]
Make strtoimax, strtoumax, wcstoimax, wcstoumax into aliases

The functions strtoimax, strtoumax, wcstoimax, wcstoumax currently
have three implementations each (wordsize-32, wordsize-64 and dummy
implementation in stdlib/ using #error), defining the functions as
thin wrappers round corresponding *_internal functions.  Simplify the
code by changing them into aliases of functions such as strtol and
wcstoull.  This is more consistent with how e.g. imaxdiv is handled.

Tested for x86_64 and x86.

3 years agoFixed typos in "NEWS for version 2.32"
Paul Zimmermann [Tue, 8 Dec 2020 14:56:32 +0000 (20:26 +0530)]
Fixed typos in "NEWS for version 2.32"

3 years agoAdd NEWS entry for CVE-2020-29562 (BZ #26923)
Siddhesh Poyarekar [Mon, 7 Dec 2020 16:59:18 +0000 (22:29 +0530)]
Add NEWS entry for CVE-2020-29562 (BZ #26923)

BZ #26923 now has a CVE entry, so add a NEWS entry for it.

3 years agoiconv: Fix incorrect UCS4 inner loop bounds (BZ#26923)
Michael Colavita [Thu, 19 Nov 2020 16:44:40 +0000 (11:44 -0500)]
iconv: Fix incorrect UCS4 inner loop bounds (BZ#26923)

Previously, in UCS4 conversion routines we limit the number of
characters we examine to the minimum of the number of characters in the
input and the number of characters in the output. This is not the
correct behavior when __GCONV_IGNORE_ERRORS is set, as we do not consume
an output character when we skip a code unit. Instead, track the input
and output pointers and terminate the loop when either reaches its
limit.

This resolves assertion failures when resetting the input buffer in a step of
iconv, which assumes that the input will be fully consumed given sufficient
output space.

3 years agox86: Rename readelflib.c
H.J. Lu [Fri, 4 Dec 2020 20:24:39 +0000 (12:24 -0800)]
x86: Rename readelflib.c

Rename linux/i386/readelflib.c to linux/x86/readelflib.c and remove
x86_64/readelflib.c.

3 years agonsswitch: use new internal API (callers)
DJ Delorie [Tue, 10 Nov 2020 03:09:34 +0000 (22:09 -0500)]
nsswitch: use new internal API (callers)

Stitch new ABI and types throughout all NSS callers.

Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
3 years agonsswitch: user new internal API (tests)
DJ Delorie [Tue, 10 Nov 2020 03:08:04 +0000 (22:08 -0500)]
nsswitch: user new internal API (tests)

Testsuite support and new test for new API.

Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
3 years agonsswitch: use new internal API (core)
DJ Delorie [Tue, 10 Nov 2020 03:06:57 +0000 (22:06 -0500)]
nsswitch: use new internal API (core)

Core changes to switch the NSS internals to use the new API.

Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
3 years agonss: Implement <nss_database.h>
Florian Weimer [Thu, 20 Feb 2020 12:20:32 +0000 (13:20 +0100)]
nss: Implement <nss_database.h>

This code manages the mappings of the available databases in NSS
(i.e. passwd, hosts, netgroup, etc) with the actions that should
be taken to do a query on those databases.

This is the main API between query functions scattered throughout
glibc and the underlying code (actions, modules, etc).

Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
3 years ago<nss_action.h>: New abstraction for combining NSS modules and NSS actions
Florian Weimer [Thu, 20 Feb 2020 08:32:27 +0000 (09:32 +0100)]
<nss_action.h>: New abstraction for combining NSS modules and NSS actions

nss_action manages a set of lists of actions; these are the portions
of the lines in nsswitch.conf to the right of the colons, like
"dns [!UNAVAIL=return] files".  Each permutation of actions and
conditionals is cached for reuse, which limits memory growth, and
refers to the static list of modules managed by nss_modules.

Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
3 years agonss: Introduce <nss_module.h>
Florian Weimer [Wed, 19 Feb 2020 19:55:48 +0000 (20:55 +0100)]
nss: Introduce <nss_module.h>

This provides the struct nss_module type, which combines the old
struct service_library type with the known_function tree, by
statically allocating space for all function pointers.

struct nss_module is fairly large (536 bytes), but it will be
shared across NSS databases.  The old known_function handling
had non-some per-function overhead (at least 32 bytes per looked-up
function, but more for long function anmes), so overall, this is not
too bad.  Resolving all functions at load time simplifies locking,
and the repeated lookups should be fast because the caches are hot
at this point.

Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
This page took 0.081945 seconds and 5 git commands to generate.