mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-02 17:50:20 +00:00
7ed1ac6da3
12 Commits
Author | SHA1 | Message | Date | |
---|---|---|---|---|
Florian Weimer
|
c44838ebf8 |
Add libc ABI extension kludge for baseline-violating libdl symbols
Some targets have a GLIBC_2.0 baseline for libdl, while using GLIBC_2.2 for libc. This means that the generated libc.map file does not have any version nodes for GLIBC_2.0 or GLIBC_2.1. However, moving symbols from libdl into libc needs such version nodes. (Future symbol moves from librt will need this as well.) This kludge is only necessary for symbols predating GLIBC_2.2 because the affected targets use GLIBC_2.2 as the baseline for libc. Given the small number and fixed set of affected architectures, no generic mechanism is implemented, and instead the map file fragment is hard-coded in scripts/versions.mk. The compat_symbol macro already emits the appropriate version strings, so no adjustments are needed there. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org> |
||
Adhemerval Zanella
|
f13d260190 |
signal: Move sys_errlist to a compat symbol
The symbol is deprecated by strerror since its usage imposes some issues such as copy relocations. Its internal name is also changed to _sys_errlist_internal to avoid static linking usage. The compat code is also refactored by removing the over enginered errlist-compat.c generation from manual entried and extra comment token in linker script file. It disantangle the code generation from manual and simplify both Linux and Hurd compat code. The definitions from errlist.c are moved to errlist.h and a new test is added to avoid a new errno entry without an associated one in manual. Checked on x86_64-linux-gnu and i686-linux-gnu. I also run a check-abi on all affected platforms. Tested-by: Carlos O'Donell <carlos@redhat.com> Reviewed-by: Carlos O'Donell <carlos@redhat.com> |
||
Adhemerval Zanella
|
78880cc185 |
Revert {send,sendm,recv,recvm}msg conformance changes
After some discussion in libc-alpha about this POSIX compliance fix, I see that GLIBC should indeed revert back to previous definition of msghdr and cmsghdr and implementation of sendmsg, recvmsg, sendmmsg, recvmmsg due some reasons: * The possible issue where the syscalls wrapper add the compatibility layer is quite limited in scope and range. And kernel current also add some limits to the values on the internal msghdr and cmsghdr fields: - msghdr::msg_iovlen larger than UIO_MAXIOV (1024) returns EMSGSIZE. - msghdr::msg_controllen larger than INT_MAX returns ENOBUFS. * There is a small performance hit for recvmsg/sendmsg/recmmsg which is neglectable, but it is a big hit for sendmmsg since now instead of calling the syscall for the packed structure, GLIBC is calling multiple sendmsg. This defeat the very existence of the syscall. * It currently breaks libsanitizer build on GCC [1] (I fixed on compiler-rt). However the fix is incomplete because it does add any runtime check since libsanitizer currently does not have any facility to intercept symbols with multiple version [2]. This, along with incorret dlsym/dlvsym return for versioned symbol due another bug [3], makes hard to interpose versioned symbols. Also, current approach of fixing GCC PR#71445 leads to half-baked solutions without versioned symbol interposing. This patch basically reverts commits |
||
Adhemerval Zanella
|
2f0dc39029 |
network: Fix missing bits from {recv,send}{m}msg standard com,pliance
This patch fixes wrong/missing bits from the Fix {recv,send}{m}msg standard compliance (BZ#16919) patches: * nptl/Makefile sets CFLAGS-oldrecvfrom.c, but there's no such file as oldrecvfrom.c. It should be oldsendmsg.c as defined by ChangeLog. * sysdeps/unix/sysv/linux/hppa/Versions and sysdeps/unix/sysv/linux/i386/Versions list a symbol recvms instead of recvmsg at version GLIBC_2.24. * nptl/Makefile (CFLAGS-oldrecvfrom.c): Remove rule. (CFLAGS-oldsendmsg.c): Add rule. * sysdeps/unix/sysv/linux/hppa/Versions [libc] (GLIBC_2.24): Correct recvmsg symbol name. * sysdeps/unix/sysv/linux/i386/Versions [libc] (GLIBC_2.24): Likewise. |
||
Adhemerval Zanella
|
af7f7c7ec8 |
network: recvmsg and sendmsg standard compliance (BZ#16919)
POSIX specifies that both msghdr::msg_iovlen and msghdr::msg_controllen to be of size int and socklen_t respectively. However Linux defines it as both size_t and for 64-bit it requires some adjustments to make the functions standard compliance. This patch fixes it by creating a temporary header and zeroing the pad fields for 64-bits architecture where size of size_t exceeds the size of the int. Also the new recvmsg and sendmsg implementation is only added on libc, with libpthread only containing a compat symbol. Tested on x86_64, i686, aarch64, armhf, and powerpc64le. * conform/data/sys/socket.h-data (msghdr.msg_iovlen): Remove xfail- and change to correct expected type. (msghdr.msg_controllen): Likewise. (cmsghdr.cmsg_len): Likewise. * sysdeps/unix/sysv/linux/bits/socket.h (msghdr.msg_iovlen): Fix expected POSIX assumption about the size. (msghdr.msg_controllen): Likewise. (msghdr.__glibc_reserved1): Likewise. (msghdr.__glibc_reserved2): Likewise. (cmsghdr.cmsg_len): Likewise. (cmsghdr.__glibc_reserved1): Likewise. * nptl/Makefile (libpthread-routines): Remove ptw-recvmsg and ptw-sendmsg. Add ptw-oldrecvmsg and ptw-oldsendmsg. (CFLAGS-sendmsg.c): Remove rule. (CFLAGS-recvmsg.c): Likewise. (CFLAGS-oldsendmsg.c): Add rule. (CFLAGS-oldrecvmsg.c): Likewise. * sysdeps/unix/sysv/linux/alpha/Versions [libc] (GLIBC_2.24): Add recvmsg and sendmsg. * sysdeps/unix/sysv/linux/aarch64/Version [libc] (GLIBC_2.24): Likewise. * sysdeps/unix/sysv/linux/arm/Versions [libc] (GLIBC_2.24): Likewise. * sysdeps/unix/sysv/linux/hppa/Versions [libc] (GLIBC_2.24): Likewise. * sysdeps/unix/sysv/linux/i386/Versions [libc] (GLIBC_2.24): Likewise. * sysdeps/unix/sysv/linux/ia64/Versions [libc] (GLIBC_2.24): Likewise. * sysdeps/unix/sysv/linux/m68k/Versions [libc] (GLIBC_2.24): Likewise. * sysdeps/unix/sysv/linux/microblaze/Versions [libc] (GLIBC_2.24): Likewise. * sysdeps/unix/sysv/linux/mips/mips32/Versions [libc] (GLIBC_2.24): Likewise. * sysdeps/unix/sysv/linux/mips/mips64/n32/Versions [libc] (GLIBC_2.24): Likewise. * sysdeps/unix/sysv/linux/mips/mips64/Versions [libc] (GLIBC_2.24): Likewise. * sysdeps/unix/sysv/linux/nios2/Versions [libc] (GLIBC_2.24): Likewise. * sysdeps/unix/sysv/linux/powerpc/Versions [libc] (GLIBC_2.24): Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64/Versions [libc] (GLIBC_2.24): Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/Versions [libc] (GLIBC_2.24): Likewise. * sysdeps/unix/sysv/linux/s390/s390-64/Versions [libc] (GLIBC_2.24): Likewise. * sysdeps/unix/sysv/linux/sh/Versions [libc] (GLIBC_2.24): Likewise. * sysdeps/unix/sysv/linux/sparc/Versions [libc] (GLIBC_2.24): Likewise. * sysdeps/unix/sysv/linux/sparc/sparc64/Versions [libc] (GLIBC_2.24): Likewise. ( sysdeps/unix/sysv/linux/tile/Versions [libc] (GLIBC_2.24): Likewise. * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/Versions [libc] (GLIBC_2.24): Likewise. ( sysdeps/unix/sysv/linux/x86_64/64/Versions [libc] (GLIBC_2.24): Likewise. * sysdeps/unix/sysv/linux/x84_64/Versions [libc] (GLIBC_2.24): Likewise. * sysdeps/unix/sysv/linux/Makefile [$(subdir) = socket)] (sysdep_headers): Add oldrecvmsg and oldsendmsg. (CFLAGS-sendmsg.c): Add rule. (CFLAGS-recvmsg.c): Likewise. (CFLAGS-oldsendmsg.c): Likewise. (CFLAGS-oldrecvmsg.c): Likewise. * sysdeps/unix/sysv/linux/check_native.c (__check_native): Fix msghdr initialization. * sysdeps/unix/sysv/linux/check_pf.c (make_request): Likewise. * sysdeps/unix/sysv/linux/ifaddrs.c (__netlink_request): Likewise. * sysdeps/unix/sysv/linux/oldrecvmsg.c: New file. * sysdeps/unix/sysv/linux/oldsendmsg.c: Likewise. * sysdeps/unix/sysv/linux/recvmsg.c (__libc_recvmsg): Adjust msghdr iovlen and controllen fields to adjust to POSIX specification. * sysdeps/unix/sysv/linux/sendmsg.c (__libc_sendmsg): Likewise. * sysdeps/unix/sysv/linux/aarch64/libc.abilist: New version and added recvmsg and sendmsg. * sysdeps/unix/sysv/linux/alpha/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/hppa/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/i386/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/ia64/libc.abilist: 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/mips/mips64/n64/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/nios2/libc.abilist: Likewise * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist: Likewise. * sysdeps/unix/linux/powerpc/powerpc32/nofpu/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist: Likewise. * sysdepe/unix/sysv/linux/powerpc/powerpc64/libc.abilist: Likewise. Likewise. Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/sh/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilepro/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libc.abilist: Likewise. Likewise. * sysdeps/unix/sysv/linux/x86_64/64/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist: Likewise. |
||
Carlos O'Donell
|
ccf431ffe1 |
hppa: Add ABI baselines.
The following ABI baselines were tested against several old releases of debian and gentoo. Several problems were discovered and fixed as part of developing the ABI baselines. Firstly, libBrokenLocale on gentoo exports __ctype_get_mb_cur_max as @@GLIBC_2.0, but it should be @@GLIBC_2.2 since that's the minimum version defined in shlib-versions for hppa. I don't know when this broke, but master properly parses hppa's shlib-versions which clearly lists libBrokenLocale as defaulting to GLIBC_2.2. Therefore I'm accepting GLBIC_2.2 as the correct version for this symbol and setting the baseline to that, despite the fact that the present distribution is wrong. I don't expect that any new applications should be using libBrokenLocale, so it should match the oldest behaviour which is to export a GLIBC_2.2 symbol. For example in debian's 2.7 has it at version GLIBC_2.2. Secondly, aio_cancel and aio_cancel64 previously had a compat symbol at version @GLIBC_2.1 with a new symbol at @@GLIBC_2.3[1]. During the Linuxthreads to NPTL transition the file aio_cancel.c was lost for hppa and that resulted in just @@GLIBC_2.1 versions of these symbols being exported. The @@GLIBC_2.1 version works correctly and uses the right value of ECANCELLED. Therefore if I were to fix this today it might break correctly working applications using aio_cancel*@GLIBC_2.1 by causing those to use the old aio_cancel that used the older value of ECANCELLED. Thus the best option is to accept that the ABI changed and ignore older applications in favour of newer applications. The best thing to do is cleanup the version files (included in the patch). The rest of the ABI was as expected (ignoring __p_type_syms size change in 2008). |
||
Carlos O'Donell
|
5abebba403 | Relocate hppa from ports to libc. | ||
Roland McGrath
|
14d44b191f |
* sysdeps/hppa: Directory removed, saved in ports repository.
* sysdeps/mach/hppa: Likewise. * sysdeps/mach/hurd/hppa: Likewise. * sysdeps/unix/sysv/linux/hppa: Likewise. * configure.in (machine): Remove hppa* cases. * configure: Regenerated. * shlib-versions: Remove hppa cases. * sysdeps/m68k: Directory removed, saved in ports repository. * sysdeps/unix/bsd/m68k: Likewise. * sysdeps/unix/sysv/linux/m68k: Likewise. * configure.in (machine): Remove m68* cases. * configure: Regenerated. |
||
Ulrich Drepper
|
a334319f65 | (CFLAGS-tst-align.c): Add -mpreferred-stack-boundary=4. | ||
Jakub Jelinek
|
0ecb606cb6 | 2.5-18.1 | ||
Ulrich Drepper
|
5fe14d9670 |
Update.
* sysdeps/generic/ldsodefs.h (__rtld_global_attribute__): Define. (_rtld_global): Use it. * sysdeps/gnu/Dist: Remove errlist-compat.c. * sysdeps/gnu/Makefile (errlist-compat.c): Build this file in the object directory. Pass all Versions files to the awk script. * sysdeps/gnu/errlist-compat.c: Removed. * sysdeps/gnu/errlist.awk: Use #errlist-compat comments from the first Versions file in the search path which has them. Allow multiple errlist symbol versions to have the same count of errors. * sysdeps/gnu/errlist-compat.awk: Include <errlist-compat.c> instead of "errlist-compat.c". * sysdeps/gnu/errlist.c: Regenerated. * sysdeps/unix/sysv/linux/mips/Versions (libc): Add #errlist-compat comments at GLIBC_2.0, GLIBC_2.1 and GLIBC_2.3. * sysdeps/unix/sysv/linux/alpha/Versions: Likewise. (librt): Add aio_cancel and aio_cancel64 as GLIBC_2.3. * sysdeps/unix/sysv/linux/hppa/Versions: Likewise. * sysdeps/unix/sysv/linux/sparc/Versions: New file. * sysdeps/unix/sysv/linux/alpha/bits/errno.h: New file. * sysdeps/unix/sysv/linux/hppa/bits/errno.h (ECANCELED): Define to ECANCELLED if not defined by kernel headers. * sysdeps/unix/sysv/linux/bits/errno.h: Don't redefine ECANCELED if already defined by kernel headers. * sysdeps/unix/sysv/linux/sparc/bits/errno.h: New file. * sysdeps/pthread/aio_cancel.c: Don't include aio.h and its aio_cancel64 renaming hack nor provide weak_alias if aio_cancel is a macro. * Versions.def (GLIBC_2.3) [librt]: Add. * sysdeps/unix/sysv/linux/alpha/pipe.S: New file. 2002-08-28 Ulrich Drepper <drepper@redhat.com> * include/libc-symbols.h [!__ASSEMBLER__] (declare_symbol_1): Add missing comma to .type directive. 2002-08-28 Jakub Jelinek <jakub@redhat.com> |
||
Ulrich Drepper
|
b15cb49505 |
Update.
2000-10-14 Ulrich Drepper <drepper@redhat.com> * math/libm-test.inc (frexp_test): Add L suffix also to parameters. (hypot_test): Likewise. * sysdeps/generic/printf_fphex.c: Compute width of decimal point string correctly. Handle padding correctly. * sysdeps/ia64/fpu/printf_fphex.c: Use sizeof in _itowa parameters correctly. * sysdeps/ieee754/ldbl-128/printf_fphex.c: Likewise. * sysdeps/ieee754/ldbl-96/printf_fphex.c: Likewise. 2000-10-12 Alan Modra <alan@linuxcare.com.au> * FAQ.in: Add --start-group and --end-group. 2000-10-12 Alan Modra <alan@linuxcare.com.au> * malloc/memusage.c: Conditionalize stack usage calculation on stack direction. 2000-10-12 Alan Modra <alan@linuxcare.com.au> * config.h.in: Add ASM_LINE_SEP. * configure.in: Add test for comment and line separators. * include/libc-symbols.h: Define and use ASM_LINE_SEP, and add tabs to placate some hppa assemblers. * sysdeps/hppa/sysdep.h: Likewise. * sysdeps/gnu/siglist.c: Insert \n and \t into inline asm. * sysdeps/unix/sysv/linux/errlist.c: Likewise. 2000-10-12 David Huggins-Daines <dhd@linuxcare.com> * sysdeps/unix/sysv/linux/Makefile: Include <bits/initspin> in $(sysdep_headers). * sysdeps/unix/sysv/linux/bits/initspin.h: Dummy version for non-threaded platforms. 2000-10-12 David Huggins-Daines <dhd@linuxcare.com> * configure.in: Add definitions for hppa. * elf/elf.h: Add PLABEL32 relocation for hppa ELF32, comments for IPLT and EPLT relocations. * shlib-versions: Version symbol definitions for hppa-linux. * sysdeps/unix/sysv/linux/configure.in: Define $arch_minimum_kernel for hppa. 2000-10-12 David Huggins-Daines <dhd@linuxcare.com> * sysdeps/hppa/Makefile: New file. * sysdeps/hppa/Versions: New file. * sysdeps/hppa/setjmp.S: New file. * sysdeps/hppa/__longjmp.S: New file. * sysdeps/hppa/bits/setjmp.h: New file. * sysdeps/hppa/frame.h: New file. * sysdeps/hppa/add_n.s: Don't use %r19 (linkage table pointer). * sysdeps/hppa/sub_n.s: Likewise. * sysdeps/hppa/lshift.s: Likewise. * sysdeps/hppa/rshift.s: Likewise. * sysdeps/hppa/udiv_qrnnd.s: Likewise. * sysdeps/hppa/hppa1.1/addmul_1.s: Likewise. * sysdeps/hppa/hppa1.1/submul_1.s: Likewise. * sysdeps/hppa/hppa1.1/mul_1.s: Likewise. * sysdeps/hppa/hppa1.1/udiv_qrnnd.s: Likewise. * sysdeps/hppa/dl-machine.h: New file. * sysdeps/hppa/dl-fptr.c: New file (note that this is almost identical to the IA-64 one). * sysdeps/hppa/dl-lookupcfg.h: Likewise. * sysdeps/hppa/dl-symaddr.c: Likewise. * sysdeps/hppa/elf/initfini.c: New file. * sysdeps/hppa/elf/start.S: New file. * sysdeps/hppa/fpu/bits/fenv.h: New file. * sysdeps/hppa/fpu/fclrexcpt.c: New file. * sysdeps/hppa/fpu/fedisblxcpt.c: New file. * sysdeps/hppa/fpu/feenablxcpt.c: New file. * sysdeps/hppa/fpu/fegetenv.c: New file. * sysdeps/hppa/fpu/fegetexcept.c: New file. * sysdeps/hppa/fpu/fegetround.c: New file. * sysdeps/hppa/fpu/feholdexcpt.c: New file. * sysdeps/hppa/fpu/fesetenv.c: New file. * sysdeps/hppa/fpu/fesetround.c: New file. * sysdeps/hppa/fpu/feupdateenv.c: New file. * sysdeps/hppa/fpu/fegetexcptflg.c: New file. * sysdeps/hppa/fpu/fraiseexcpt.c: New file. * sysdeps/hppa/fpu/fsetexcptflg.c: New file. * sysdeps/hppa/fpu/ftestexcept.c: New file. * sysdeps/unix/sysv/linux/hppa/Makefile: New file. * sysdeps/unix/sysv/linux/hppa/Versions: New file. * sysdeps/unix/sysv/linux/hppa/syscalls.list: New file. * sysdeps/unix/sysv/linux/hppa/sysdep.c: New file. * sysdeps/unix/sysv/linux/hppa/sysdep.h: New file. * sysdeps/unix/sysv/linux/hppa/bits/fcntl.h: New file. * sysdeps/unix/sysv/linux/hppa/bits/ioctls.h: New file. * sysdeps/unix/sysv/linux/hppa/bits/mman.h: New file. * sysdeps/unix/sysv/linux/hppa/bits/sigaction.h: New file. * sysdeps/unix/sysv/linux/hppa/bits/signum.h: New file. * sysdeps/unix/sysv/linux/hppa/brk.c: New file. * sysdeps/unix/sysv/linux/hppa/clone.S: New file. * sysdeps/unix/sysv/linux/hppa/socket.S: New file. * sysdeps/unix/sysv/linux/hppa/syscall.S: New file. * sysdeps/unix/sysv/linux/hppa/setrlimit.c: New file. * sysdeps/unix/sysv/linux/hppa/getrlimit.c: New file. * sysdeps/unix/sysv/linux/hppa/getrlimit64.c: New file. * sysdeps/unix/sysv/linux/hppa/kernel_sigaction.h: New file. * sysdeps/unix/sysv/linux/hppa/kernel_stat.h: New file. * sysdeps/unix/sysv/linux/hppa/mmap.c: New file. * sysdeps/unix/sysv/linux/hppa/profil-counter.h: New file. * sysdeps/unix/sysv/linux/hppa/procfs.h: New file. * sysdeps/unix/sysv/linux/hppa/ucontext.h: New file. * sysdeps/unix/sysv/linux/hppa/umount.c: New file. 2000-10-12 Alan Modra <alan@linuxcare.com.au> * sysdeps/hppa/hppa1.1/Implies: New file. * sysdeps/hppa/memusage.h: New file. |