This is the mail archive of the glibc-bugs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug libc/16610] Inaccurate assumptions about recvmmsg availability


http://sourceware.org/bugzilla/show_bug.cgi?id=16610

--- Comment #1 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot gnu.org> ---
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  0e31b18ca280c6056d41d0235b85d6890367ff46 (commit)
      from  dd481ccffd926ea70b107a98a9f4eb00822070c4 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=0e31b18ca280c6056d41d0235b85d6890367ff46

commit 0e31b18ca280c6056d41d0235b85d6890367ff46
Author: Joseph Myers <joseph@codesourcery.com>
Date:   Thu Feb 20 17:53:08 2014 +0000

    Fix __ASSUME_RECVMMSG issues (bug 16610).

    Similar to the issues for accept4, __ASSUME_RECVMMSG is also confused
    about whether it relates to function availability or socketcall
    operation availability; this is now bug 16610.

    Nothing actually tests __ASSUME_RECVMMSG for function availability,
    but implicit in the definition in kernel-features.h is the idea that
    it makes sense when the syscall is available and socketcall is not
    being used.  As with accept4, there are architectures where the
    syscall was added later than the socketcall operation, meaning that
    assuming glibc is built with recent enough kernel headers, it does not
    attempt to use socketcall for these operations and __ASSUME_RECVMMSG
    gets defined for kernels >= 2.6.33 even when the syscall was only
    added later.

    This patch splits the macro into separate macros like those used for
    accept4; having similar macro structure in both cases (and for
    sendmmsg once I've dealt with that) seems likely to be less confusing
    than having a different structure on the basis of nothing actually
    needing to assume the recvmmsg function works.  Appropriate
    definitions are added for all architectures.

    Architecture-specific note: Tile's kernel-features.h says "TILE glibc
    support starts with 2.6.36", which is accurate in that 2.6.36 was the
    first kernel version with Tile support, and on that basis I've made
    that header define __ASSUME_RECVMMSG_SYSCALL unconditionally.
    However, Tile's configure.ac has arch_minimum_kernel=2.6.32.  Since
    arch_minimum_kernel is meant to reflect only kernel.org kernel
    versions, I think that should change to 2.6.36.  (If using glibc with
    kernel versions from before a port went in kernel.org, it's your
    responsibility to change arch_minimum_kernel in a local patch, and at
    the same time to adjust any __ASSUME_* definitions that may not be
    correct for your older kernel; for developing the official glibc it
    should only ever be necessary to consider what official kernel.org
    releases support.)

    Tested x86_64, including that disassembly of the installed shared
    libraries is unchanged by this patch.

        [BZ #16610]
        * sysdeps/unix/sysv/linux/kernel-features.h
        [__LINUX_KERNEL_VERSION >= 0x020621 && __ASSUME_SOCKETCALL]
        (__ASSUME_RECVMMSG_SOCKETCALL): Define.
        [(__LINUX_KERNEL_VERSION >= 0x020621 && (__i386__ || __x86_64__ ||
        __sparc__)) || (__LINUX_KERNEL_VERSION >= 0x020625 && (__powerpc__
        || __sh__))] (__ASSUME_RECVMMSG_SYSCALL): Likewise.
        [__i386__ || __sparc__]
        (__ASSUME_RECVMMSG_SYSCALL_WITH_SOCKETCALL): Likewise.
        [__ASSUME_RECVMMSG_SOCKETCALL || __ASSUME_RECVMMSG_SYSCALL]
        (__ASSUME_RECVMMSG): Define instead of using previous
        [__LINUX_KERNEL_VERSION >= 0x020621] condition.
        * sysdeps/unix/sysv/linux/aarch64/kernel-features.h
        (__ASSUME_RECVMMSG_SYSCALL): Define.
        * sysdeps/unix/sysv/linux/alpha/kernel-features.h
        [__LINUX_KERNEL_VERSION >= 0x020621] (__ASSUME_RECVMMSG_SYSCALL):
        Likewise.
        * sysdeps/unix/sysv/linux/arm/kernel-features.h
        [__LINUX_KERNEL_VERSION >= 0x020621] (__ASSUME_RECVMMSG_SYSCALL):
        Likewise.
        * sysdeps/unix/sysv/linux/ia64/kernel-features.h
        [__LINUX_KERNEL_VERSION >= 0x020621] (__ASSUME_RECVMMSG_SYSCALL):
        Likewise.
        * sysdeps/unix/sysv/linux/internal_recvmmsg.S [__ASSUME_SOCKETCALL
        && !__ASSUME_RECVMMSG_SYSCALL_WITH_SOCKETCALL &&
        !__ASSUME_RECVMMSG_SYSCALL] (__NR_recvmmsg): Undefine.
        [__ASSUME_RECVMMSG]: Change condition to
        [__ASSUME_RECVMMSG_SOCKETCALL].
        * sysdeps/unix/sysv/linux/microblaze/kernel-features.h
        [__LINUX_KERNEL_VERSION >= 0x020621] (__ASSUME_RECVMMSG_SYSCALL):
        Define.
        (__ASSUME_RECVMMSG_SYSCALL_WITH_SOCKETCALL): Likewise.
        * sysdeps/unix/sysv/linux/mips/kernel-features.h
        [__LINUX_KERNEL_VERSION >= 0x020621] (__ASSUME_RECVMMSG_SYSCALL):
        Likewise.
        * sysdeps/unix/sysv/linux/recvmmsg.c [__ASSUME_SOCKETCALL &&
        !__ASSUME_RECVMMSG_SYSCALL_WITH_SOCKETCALL &&
        !__ASSUME_RECVMMSG_SYSCALL] (__NR_recvmmsg): Undefine.
        [!__ASSUME_RECVMMSG]: Change condition to
        [!__ASSUME_RECVMMSG_SOCKETCALL].
        * sysdeps/unix/sysv/linux/tile/kernel-features.h
        (__ASSUME_RECVMMSG_SYSCALL): Define.

        * sysdeps/unix/sysv/linux/hppa/kernel-features.h
        [__LINUX_KERNEL_VERSION >= 0x020622] (__ASSUME_RECVMMSG_SYSCALL):
        Define.

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                          |   43 ++++++++++++++++++++
 NEWS                                               |    2 +-
 ports/ChangeLog.hppa                               |    5 ++
 .../sysdeps/unix/sysv/linux/hppa/kernel-features.h |    3 +-
 sysdeps/unix/sysv/linux/aarch64/kernel-features.h  |    1 +
 sysdeps/unix/sysv/linux/alpha/kernel-features.h    |    5 ++
 sysdeps/unix/sysv/linux/arm/kernel-features.h      |    5 ++
 sysdeps/unix/sysv/linux/ia64/kernel-features.h     |    5 ++
 sysdeps/unix/sysv/linux/internal_recvmmsg.S        |   12 +++++-
 sysdeps/unix/sysv/linux/kernel-features.h          |   21 +++++++++-
 .../unix/sysv/linux/microblaze/kernel-features.h   |    4 +-
 sysdeps/unix/sysv/linux/mips/kernel-features.h     |    5 ++
 sysdeps/unix/sysv/linux/recvmmsg.c                 |   13 +++++-
 sysdeps/unix/sysv/linux/tile/kernel-features.h     |    1 +
 14 files changed, 117 insertions(+), 8 deletions(-)

-- 
You are receiving this mail because:
You are on the CC list for the bug.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]