[committed] hppa: undef __ASSUME_SET_ROBUST_LIST

John David Anglin dave.anglin@bell.net
Wed Sep 21 13:52:56 GMT 2022


On 2022-09-21 3:41 a.m., Andreas Schwab wrote:
> On Sep 20 2022, John David Anglin wrote:
>
>> QEMU does not support support set_robust_list. Thus, we need
>> to enable detection of set_robust_list system call.
> This is actually a generic issue.  What are the symptoms?
This what Helge found building Debian glibc 2.23 under qemu:

    glibc is still building but here are some more failures:
    glibc-2.34/build-tree/hppa-libc/nptl/tst-align-clone.test-result:FAIL: nptl/tst-align-clone
    glibc-2.34/build-tree/hppa-libc/nptl/tst-cancel24-static.test-result:FAIL: nptl/tst-cancel24-static
    glibc-2.34/build-tree/hppa-libc/nptl/tst-cancel24.test-result:FAIL: nptl/tst-cancel24
    glibc-2.34/build-tree/hppa-libc/nptl/tst-cancelx17.test-result:FAIL: nptl/tst-cancelx17
    glibc-2.34/build-tree/hppa-libc/nptl/tst-cleanupx4.test-result:XFAIL: nptl/tst-cleanupx4
    glibc-2.34/build-tree/hppa-libc/nptl/tst-execstack.test-result:FAIL: nptl/tst-execstack
    glibc-2.34/build-tree/hppa-libc/nptl/tst-getpid1.test-result:FAIL: nptl/tst-getpid1
    glibc-2.34/build-tree/hppa-libc/nptl/tst-mutexpi10.test-result:FAIL: nptl/tst-mutexpi10
    glibc-2.34/build-tree/hppa-libc/nptl/tst-pthread-attr-affinity-fail.test-result:FAIL: nptl/tst-pthread-attr-affinity-fail
    glibc-2.34/build-tree/hppa-libc/nptl/tst-pthread-gdb-attach-static.test-result:FAIL: nptl/tst-pthread-gdb-attach-static
    glibc-2.34/build-tree/hppa-libc/nptl/tst-pthread-gdb-attach.test-result:FAIL: nptl/tst-pthread-gdb-attach
    glibc-2.34/build-tree/hppa-libc/nptl/tst-pthread-timedlock-lockloop.test-result:FAIL: nptl/tst-pthread-timedlock-lockloop
    glibc-2.34/build-tree/hppa-libc/nptl/tst-robust-fork.test-result:FAIL: nptl/tst-robust-fork

    tst-cancel24 triggered my interest, so I checked what's doing:
    #>  QEMU_LOG=strace ./glibc-2.34/build-tree/hppa-libc/nptl/tst-cancel24
    ...
    2080424 set_robust_list(-105721680,12,0,-105720464,-100671382,1) = -1 errno=251 (Function not implemented)
    ...
    This syscall isn't implemented in qemu, and probably won't either.
    Here is the comment from qemu sources:
         case TARGET_NR_set_robust_list:
         case TARGET_NR_get_robust_list:
             /* The ABI for supporting robust futexes has userspace pass
              * the kernel a pointer to a linked list which is updated by
              * userspace after the syscall; the list is walked by the kernel
              * when the thread exits. Since the linked list in QEMU guest
              * memory isn't a valid linked list for the host and we have
              * no way to reliably intercept the thread-death event, we can't
              * support these. Silently return ENOSYS so that guest userspace
              * falls back to a non-robust futex implementation (which should
              * be OK except in the corner case of the guest crashing while
              * holding a mutex that is shared with another process via
              * shared memory).
              */
             return -TARGET_ENOSYS;

    This basically means we never will be able to succeed this test
    when building glibc on qemu-linux-user - unless we disable such tests,
    which I think isn't a good idea.


Dave

-- 
John David Anglin  dave.anglin@bell.net



More information about the Libc-alpha mailing list