public inbox for glibc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug nptl/26566] New: nptl/tst-thread-exit-clobber fails on powerpc/powerpc64 with GCC 10.2
@ 2020-09-02 13:52 msc at linux dot ibm.com
  2020-09-04 22:11 ` [Bug nptl/26566] " adhemerval.zanella at linaro dot org
                   ` (15 more replies)
  0 siblings, 16 replies; 17+ messages in thread
From: msc at linux dot ibm.com @ 2020-09-02 13:52 UTC (permalink / raw)
  To: glibc-bugs

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

            Bug ID: 26566
           Summary: nptl/tst-thread-exit-clobber fails on
                    powerpc/powerpc64 with GCC 10.2
           Product: glibc
           Version: unspecified
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: nptl
          Assignee: unassigned at sourceware dot org
          Reporter: msc at linux dot ibm.com
                CC: drepper.fsp at gmail dot com
  Target Milestone: ---

FAIL: nptl/tst-thread-exit-clobber
original exit status 1
info: unsigned int, direct pthread_exit call
error: tst-thread-exit-clobber.cc:125: not true: value ==
magic_values_double.v4
error: tst-thread-exit-clobber.cc:122: not true: value ==
magic_values_double.v3
error: tst-thread-exit-clobber.cc:119: not true: value ==
magic_values_double.v2
error: tst-thread-exit-clobber.cc:116: not true: value ==
magic_values_double.v1
error: tst-thread-exit-clobber.cc:113: not true: value ==
magic_values_double.v0
error: 5 test failures

I can only reproduce this error on ppc and ppc64, not ppc64le. Also, it works
with GCC 9.3, but fails with GCC 10.2

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

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Bug nptl/26566] nptl/tst-thread-exit-clobber fails on powerpc/powerpc64 with GCC 10.2
  2020-09-02 13:52 [Bug nptl/26566] New: nptl/tst-thread-exit-clobber fails on powerpc/powerpc64 with GCC 10.2 msc at linux dot ibm.com
@ 2020-09-04 22:11 ` adhemerval.zanella at linaro dot org
  2020-09-15 15:10 ` tuliom at ascii dot art.br
                   ` (14 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: adhemerval.zanella at linaro dot org @ 2020-09-04 22:11 UTC (permalink / raw)
  To: glibc-bugs

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

Adhemerval Zanella <adhemerval.zanella at linaro dot org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |adhemerval.zanella at linaro dot o
                   |                            |rg

--- Comment #1 from Adhemerval Zanella <adhemerval.zanella at linaro dot org> ---
I can't reproduce it with gcc-10 from the build-many-glibcs.py on the gccfarm
gcc203.  I also tried with -fstack-clash-protection (as indicated by the test
itself where it was added due
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83641) but it also work as
expected.

In any case, this seems most likely a compiler or libgcc issue, could you check
if it is the case?

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

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Bug nptl/26566] nptl/tst-thread-exit-clobber fails on powerpc/powerpc64 with GCC 10.2
  2020-09-02 13:52 [Bug nptl/26566] New: nptl/tst-thread-exit-clobber fails on powerpc/powerpc64 with GCC 10.2 msc at linux dot ibm.com
  2020-09-04 22:11 ` [Bug nptl/26566] " adhemerval.zanella at linaro dot org
@ 2020-09-15 15:10 ` tuliom at ascii dot art.br
  2024-01-22 15:51 ` carlos at redhat dot com
                   ` (13 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: tuliom at ascii dot art.br @ 2020-09-15 15:10 UTC (permalink / raw)
  To: glibc-bugs

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

Tulio Magno Quites Machado Filho <tuliom at ascii dot art.br> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |tuliom at ascii dot art.br

--- Comment #2 from Tulio Magno Quites Machado Filho <tuliom at ascii dot art.br> ---
(In reply to Adhemerval Zanella from comment #1)
> I can't reproduce it with gcc-10 from the build-many-glibcs.py on the
> gccfarm gcc203.

I reproduced on gcc203 with a normal build using:
configure --prefix=/usr --with-cpu=power8 CC=gcc-10 CXX=g++-10

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

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Bug nptl/26566] nptl/tst-thread-exit-clobber fails on powerpc/powerpc64 with GCC 10.2
  2020-09-02 13:52 [Bug nptl/26566] New: nptl/tst-thread-exit-clobber fails on powerpc/powerpc64 with GCC 10.2 msc at linux dot ibm.com
  2020-09-04 22:11 ` [Bug nptl/26566] " adhemerval.zanella at linaro dot org
  2020-09-15 15:10 ` tuliom at ascii dot art.br
@ 2024-01-22 15:51 ` carlos at redhat dot com
  2024-03-21 12:59 ` mmatti at linux dot vnet.ibm.com
                   ` (12 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: carlos at redhat dot com @ 2024-01-22 15:51 UTC (permalink / raw)
  To: glibc-bugs

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

Carlos O'Donell <carlos at redhat dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2024-01-22
                 CC|                            |carlos at redhat dot com
             Status|UNCONFIRMED                 |NEW
     Ever confirmed|0                           |1

--- Comment #3 from Carlos O'Donell <carlos at redhat dot com> ---
This came up again when reviewing the test results for glibc 2.39.

The problem is still present.

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

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Bug nptl/26566] nptl/tst-thread-exit-clobber fails on powerpc/powerpc64 with GCC 10.2
  2020-09-02 13:52 [Bug nptl/26566] New: nptl/tst-thread-exit-clobber fails on powerpc/powerpc64 with GCC 10.2 msc at linux dot ibm.com
                   ` (2 preceding siblings ...)
  2024-01-22 15:51 ` carlos at redhat dot com
@ 2024-03-21 12:59 ` mmatti at linux dot vnet.ibm.com
  2024-04-24  5:49 ` mmatti at linux dot vnet.ibm.com
                   ` (11 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: mmatti at linux dot vnet.ibm.com @ 2024-03-21 12:59 UTC (permalink / raw)
  To: glibc-bugs

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

Manjunath S Matti <mmatti at linux dot vnet.ibm.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |bergner at linux dot ibm.com,
                   |                            |mmatti at linux dot vnet.ibm.com

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

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Bug nptl/26566] nptl/tst-thread-exit-clobber fails on powerpc/powerpc64 with GCC 10.2
  2020-09-02 13:52 [Bug nptl/26566] New: nptl/tst-thread-exit-clobber fails on powerpc/powerpc64 with GCC 10.2 msc at linux dot ibm.com
                   ` (3 preceding siblings ...)
  2024-03-21 12:59 ` mmatti at linux dot vnet.ibm.com
@ 2024-04-24  5:49 ` mmatti at linux dot vnet.ibm.com
  2024-05-08  6:15 ` mmatti at linux dot vnet.ibm.com
                   ` (10 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: mmatti at linux dot vnet.ibm.com @ 2024-04-24  5:49 UTC (permalink / raw)
  To: glibc-bugs

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

--- Comment #4 from Manjunath S Matti <mmatti at linux dot vnet.ibm.com> ---
I observe this failure even with gcc version 13.2.0, but only when glibc is
configured with either --with-cpu=power8 or --with-cpu=power9. But when I
simply configure glibc without mention of any specific Architecture like 

../glibc/configure --enable-debug --prefix=/usr then I am unable to reproduce
this failure.

I suspect that the code generated is causing the issue

107 void
108 check_magic (int index, double value)
109 {
110   switch (index)
111     {
112     case 0:
113       TEST_VERIFY (value == magic_values_double.v0);

Assembly :

  5d4:  7c 69 1b 78     mr      r9,r3
- 5d8:  7f 64 db 78     mr      r4,r27
+ 5d8:  7b 64 00 20     clrldi  r4,r27,32 -->generating this code fixes the
issue
  5dc:  38 60 ff ff     li      r3,-1

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

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Bug nptl/26566] nptl/tst-thread-exit-clobber fails on powerpc/powerpc64 with GCC 10.2
  2020-09-02 13:52 [Bug nptl/26566] New: nptl/tst-thread-exit-clobber fails on powerpc/powerpc64 with GCC 10.2 msc at linux dot ibm.com
                   ` (4 preceding siblings ...)
  2024-04-24  5:49 ` mmatti at linux dot vnet.ibm.com
@ 2024-05-08  6:15 ` mmatti at linux dot vnet.ibm.com
  2024-05-08  6:16 ` mmatti at linux dot vnet.ibm.com
                   ` (9 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: mmatti at linux dot vnet.ibm.com @ 2024-05-08  6:15 UTC (permalink / raw)
  To: glibc-bugs

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

--- Comment #5 from Manjunath S Matti <mmatti at linux dot vnet.ibm.com> ---
I have some more info here:

I have run make check on both x86 and PPC64le, this particular testcase is
marked as
UNSUPPORTED: nptl/tst-thread-exit-clobber


Also this testcase compares 2 doubles is this ok ?

106 __attribute__ ((noinline, noclone, weak))
107 void
108 check_magic (int index, double value)
109 {
110   switch (index)
111     {
112     case 0:
113       TEST_VERIFY (value == magic_values_double.v0); -> here
114       break;

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

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Bug nptl/26566] nptl/tst-thread-exit-clobber fails on powerpc/powerpc64 with GCC 10.2
  2020-09-02 13:52 [Bug nptl/26566] New: nptl/tst-thread-exit-clobber fails on powerpc/powerpc64 with GCC 10.2 msc at linux dot ibm.com
                   ` (5 preceding siblings ...)
  2024-05-08  6:15 ` mmatti at linux dot vnet.ibm.com
@ 2024-05-08  6:16 ` mmatti at linux dot vnet.ibm.com
  2024-05-08  9:58 ` fweimer at redhat dot com
                   ` (8 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: mmatti at linux dot vnet.ibm.com @ 2024-05-08  6:16 UTC (permalink / raw)
  To: glibc-bugs

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

Manjunath S Matti <mmatti at linux dot vnet.ibm.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jeevitha at linux dot ibm.com

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

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Bug nptl/26566] nptl/tst-thread-exit-clobber fails on powerpc/powerpc64 with GCC 10.2
  2020-09-02 13:52 [Bug nptl/26566] New: nptl/tst-thread-exit-clobber fails on powerpc/powerpc64 with GCC 10.2 msc at linux dot ibm.com
                   ` (6 preceding siblings ...)
  2024-05-08  6:16 ` mmatti at linux dot vnet.ibm.com
@ 2024-05-08  9:58 ` fweimer at redhat dot com
  2024-05-17 14:08 ` jeevitha at linux dot ibm.com
                   ` (7 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: fweimer at redhat dot com @ 2024-05-08  9:58 UTC (permalink / raw)
  To: glibc-bugs

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

Florian Weimer <fweimer at redhat dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |fweimer at redhat dot com

--- Comment #6 from Florian Weimer <fweimer at redhat dot com> ---
(In reply to Manjunath S Matti from comment #5)
> I have some more info here:
> 
> I have run make check on both x86 and PPC64le, this particular testcase is
> marked as
> UNSUPPORTED: nptl/tst-thread-exit-clobber

I think this happens because it's a C++ tested, and you either do not have a
g++ installed, or libstdc++-static is missing (yes, we should probably fixed
that, and not disable all C++ tests if C++ static linking is unsupported).

> Also this testcase compares 2 doubles is this ok ?
> 
> 106 __attribute__ ((noinline, noclone, weak))
> 107 void
> 108 check_magic (int index, double value)
> 109 {
> 110   switch (index)
> 111     {
> 112     case 0:
> 113       TEST_VERIFY (value == magic_values_double.v0); -> here
> 114       break;

Are you asking because of a general rule that says not to compare floating
point numbers for equality? In this case, we want to make sure that the test
case preserves the bit pattern exactly.

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

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Bug nptl/26566] nptl/tst-thread-exit-clobber fails on powerpc/powerpc64 with GCC 10.2
  2020-09-02 13:52 [Bug nptl/26566] New: nptl/tst-thread-exit-clobber fails on powerpc/powerpc64 with GCC 10.2 msc at linux dot ibm.com
                   ` (7 preceding siblings ...)
  2024-05-08  9:58 ` fweimer at redhat dot com
@ 2024-05-17 14:08 ` jeevitha at linux dot ibm.com
  2024-05-17 16:28 ` fweimer at redhat dot com
                   ` (6 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: jeevitha at linux dot ibm.com @ 2024-05-17 14:08 UTC (permalink / raw)
  To: glibc-bugs

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

--- Comment #7 from Jeevitha P. <jeevitha at linux dot ibm.com> ---
This test case fails with glibc built using the following configuration:

configure --enable-debug --with-cpu=power8 --prefix=/usr

High-Level Information:

The issue lies in the callee-saved registers, which are not properly restored
by `__unwind_resume` from `libgcc_s.so.1`.

Test Case Flow:[Skipped integer cases since we don't have issues there]

In this test case, the `threadfunc` function calls `call_pthread_exit` under
certain conditions, which eventually calls `pthread_exit`.

 1. A thread is created and it calls `threadfunc` with an initial structure
containing five values.
 2. In threadfunc, the `checker` constructor is called five times to set those
initial values.
 3. Based on a condition, either `call_pthread_exit` or `pthread_exit` is
called. The failure occurs when `call_pthread_exit` is called.
 4. `call_pthread_exit` creates a new structure with five new values and passes
it to `call_pthread_exit_1` where  the `checker` is constructor called again
five more times with these new values. 
 5. `pthread_exit` is then called, which tries to destroy the objects created
by this thread. Since the thread called the `checker` constructor ten times, it
will call the corresponding destructor ten times to destroy them:
       First, it destroys the five objects in call_pthread_exit_1.
       Then, it destroys the five objects in threadfunc.
 6. The destructors check that the values passed during the function calls
matches the original struct values.

Assembly Perspective:

 1. In `threadfunc`, the structure values are stored in vector registers
(vs59-vs63) during the constructor calls.
 2. When `call_pthread_exit_1` is called, the callee-saved registers (v27-v31),
which overlap with (vs59-vs63), are saved in the stack. Then the same registers
(vs59-vs63) are then used to load the new structure values during the
constructor calls in `call_pthread_exit_1`.
 4. After that, `pthread_exit` is called, which invokes the destructor. 
 5. After all destructors are called in `call_pthread_exit_1`,
`__unwind_resume` is called to unwind the stack to restore the callee-saved
registers. However, `__unwind_resume` does not restore the vector registers, so
they do not have the original values which was set in `threadfunc`.
 6. When the destructors for the checker objects in `threadfunc` are called,
the values are overridden because of the same register usage in
`call_pthread_exit_1`. The checker destructor fails because the values do not
match.


If we disable vector instruction generation using -mno-vsx for the test case,
the issue does not occur. This is because the floating point registers, used
instead of vector registers, which are properly restored after the destructor
in `__unwind_resume`.


Backtrace for `_Unwind_resume` call from glibc,

gdb) bt
#2  0x00007ffff7b7132c in ._Unwind_Resume () from
/lib/powerpc64-linux-gnu/libgcc_s.so.1
#3  0x00007ffff7f324c4 in ?? ()//call_pthread_exit_1
#4  0x00007ffff7f32558 in ?? ()
#5  0x00007ffff7f325e4 in ?? ()
#6  0x00007ffff79bc958 in start_thread (arg=0x7ffff784f100) at
pthread_create.c:447
#7  0x00007ffff7a55dcc in .LY__clone3 () at
../sysdeps/unix/sysv/linux/powerpc/powerpc64/clone3.S:114

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

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Bug nptl/26566] nptl/tst-thread-exit-clobber fails on powerpc/powerpc64 with GCC 10.2
  2020-09-02 13:52 [Bug nptl/26566] New: nptl/tst-thread-exit-clobber fails on powerpc/powerpc64 with GCC 10.2 msc at linux dot ibm.com
                   ` (8 preceding siblings ...)
  2024-05-17 14:08 ` jeevitha at linux dot ibm.com
@ 2024-05-17 16:28 ` fweimer at redhat dot com
  2024-05-19 18:21 ` jskumari at linux dot ibm.com
                   ` (5 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: fweimer at redhat dot com @ 2024-05-17 16:28 UTC (permalink / raw)
  To: glibc-bugs

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

--- Comment #8 from Florian Weimer <fweimer at redhat dot com> ---
I suspect this happens if the libgcc unwinder has been built in such a way that
it doesn't require a CPU with VSX support. In that case, it's not safe to build
code with -mcpu=power8 if it catches exceptions, as the test shows.

I really don't think this is a glibc bug. The libgcc unwinder should have
conditional vector register processing even if built with -mno-vsx.

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

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Bug nptl/26566] nptl/tst-thread-exit-clobber fails on powerpc/powerpc64 with GCC 10.2
  2020-09-02 13:52 [Bug nptl/26566] New: nptl/tst-thread-exit-clobber fails on powerpc/powerpc64 with GCC 10.2 msc at linux dot ibm.com
                   ` (9 preceding siblings ...)
  2024-05-17 16:28 ` fweimer at redhat dot com
@ 2024-05-19 18:21 ` jskumari at linux dot ibm.com
  2024-05-19 19:46 ` fweimer at redhat dot com
                   ` (4 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: jskumari at linux dot ibm.com @ 2024-05-19 18:21 UTC (permalink / raw)
  To: glibc-bugs

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

Surya Kumari J <jskumari at linux dot ibm.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jskumari at linux dot ibm.com

--- Comment #9 from Surya Kumari J <jskumari at linux dot ibm.com> ---
Adding some more details:

  In this testcase, we have the following call chain:
threadfunc()->call_pthread_exit()->call_pthread_exit1()->pthread_exit()

  The threadfunc() function is passed a struct containing 5 values. 5 local
objects of type “class checker” are created in threadfunc() and the instance
variable in each object is initialized with a value from the struct passed as
parameter. The values in the struct are stored in vector registers vs59-vs63
during the constructor calls.

  The call_pthread_exit1() routine too is passed a struct containing 5 values
(these values are different from those in the struct passed to threadfunc()).
The prolog in this routine stores the registers v27-v31 as these are
non-volatile registers. Note that v27-v31 overlap with vs59-vs63. This routine
creates 5 local objects of type ‘class checker’. The instance variable in each
object is initialized with a value from the struct passed as parameter. The
values in the struct are stored in vector registers vs59-vs63 during the
constructor calls.

  The destructor for ‘class checker’ has ‘inline’ attribute and hence we have
code to destroy the objects inlined into threadfunc() and call_pthread_exit1().
4. The destructor checks if the instance variable in the object is the same as
what it was initialized to, and the test fails if the value is not the same.
Since the destructor code is inlined, the value of the instance variable is
compared with the value in the vector register.

  While the checks in the destructors pass in call_pthread_exit1(), the checks
fail in threadfunc(). In threadfunc(), the vector registers do not contain the
expected values.

The assembly code for call_pthread_exit1 looks as follows:

call_pthread_exit1() {
     prolog code (contains code to save non-volatile vector registers)
     code to copy values from ‘struct parameter’ to vector registers
     code to call constructors
     call to pthread_exit()
  landing pad:
     inlined destructor code which reads vector registers
     call to _Unwind_Resume()
}

Assembly code for threadfunc():

threadfunc() {
     code to copy values from ‘struct parameter’ to vector registers
     code to call constructors
  landing pad:
     inlined destructor code which reads vector registers
}

  Pthread_exit() has to destroy all the objects created in the call chain. So
the landing pad code in call_pthread_exit1() is executed to destroy the objects
created in call_pthread_exit1(). After the destructors finish executing,
_Unwind_Resume is called because we have to unwind the stack.

  When the stack is unwound and we reach the landing pad in threadfunc(), the
vector registers no longer contain the correct values.  This is because the
vector registers have been rewritten in call_pthread_exit1(). Of course,
call_pthread_exit1()’s prolog saves these registers on stack before writing to
them. When we unwind and go from call_pthread_exit1()’s frame to the previous
frame (call_pthread_exit()), these vector registers have to be restored to
their original values from the stack.

  The issue can either be in unwinding (unwind is not restoring vector
registers correctly when unwinding the stack frames) or in gcc (gcc does not
produce correct unwind info thereby leading to incorrect unwinding) .

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

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Bug nptl/26566] nptl/tst-thread-exit-clobber fails on powerpc/powerpc64 with GCC 10.2
  2020-09-02 13:52 [Bug nptl/26566] New: nptl/tst-thread-exit-clobber fails on powerpc/powerpc64 with GCC 10.2 msc at linux dot ibm.com
                   ` (10 preceding siblings ...)
  2024-05-19 18:21 ` jskumari at linux dot ibm.com
@ 2024-05-19 19:46 ` fweimer at redhat dot com
  2024-05-21  7:43 ` jeevitha at linux dot ibm.com
                   ` (3 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: fweimer at redhat dot com @ 2024-05-19 19:46 UTC (permalink / raw)
  To: glibc-bugs

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

--- Comment #10 from Florian Weimer <fweimer at redhat dot com> ---
Please check the disassembly of _Unwind_RaiseException in libgcc_s.so.1 to
check whether it contains code to save vector registers, perhaps like this:

gdb -batch -ex "disassemble/s _Unwind_RaiseException" /lib64/libgcc_s.so.1

If GCC defaults to POWER8 instructions, it looks like this:

Dump of assembler code for function _Unwind_RaiseException:
../../../libgcc/unwind.inc:
87      {
   0x000000000000c610 <+0>:     addis   r2,r12,3
   0x000000000000c614 <+4>:     addi    r2,r2,-18704
   0x000000000000c618 <+8>:     mr      r0,r1
   0x000000000000c61c <+12>:    stdu    r1,-4096(r1)
   0x000000000000c620 <+16>:    stdu    r0,-528(r1)
   0x000000000000c624 <+20>:    mflr    r0
   0x000000000000c628 <+24>:    stfd    f14,4480(r1)
   0x000000000000c62c <+28>:    stfd    f15,4488(r1)
   0x000000000000c630 <+32>:    stfd    f16,4496(r1)
   0x000000000000c634 <+36>:    stfd    f17,4504(r1)
   0x000000000000c638 <+40>:    stfd    f18,4512(r1)
[…]
   0x000000000000c6cc <+188>:   beq     0xc6d4 <_Unwind_RaiseException+196>
   0x000000000000c6d0 <+192>:   std     r2,4648(r1)

88        struct _Unwind_Context this_context, cur_context;
89        _Unwind_Reason_Code code;
90        unsigned long frames;
91      
92        /* Set up this_context to describe the current stack frame.  */
93        uw_init_context (&this_context);
   0x000000000000c6d4 <+196>:   mfcr    r0
   0x000000000000c6d8 <+200>:   mflr    r5
   0x000000000000c6dc <+204>:   addi    r27,r1,3000
   0x000000000000c6e0 <+208>:   addi    r4,r1,4624
   0x000000000000c6e4 <+212>:   mr      r28,r3
   0x000000000000c6e8 <+216>:   mr      r3,r27
   0x000000000000c6ec <+220>:   addi    r30,r1,1920
   0x000000000000c6f0 <+224>:   addi    r29,r1,32
   0x000000000000c6f4 <+228>:   stw     r0,4088(r1)
   0x000000000000c6f8 <+232>:   stw     r0,4096(r1)
   0x000000000000c6fc <+236>:   stw     r0,4104(r1)
   0x000000000000c700 <+240>:   li      r0,4144
   0x000000000000c704 <+244>:   stvx    v20,r1,r0
   0x000000000000c708 <+248>:   li      r0,4160
   0x000000000000c70c <+252>:   stvx    v21,r1,r0
[…]

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

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Bug nptl/26566] nptl/tst-thread-exit-clobber fails on powerpc/powerpc64 with GCC 10.2
  2020-09-02 13:52 [Bug nptl/26566] New: nptl/tst-thread-exit-clobber fails on powerpc/powerpc64 with GCC 10.2 msc at linux dot ibm.com
                   ` (11 preceding siblings ...)
  2024-05-19 19:46 ` fweimer at redhat dot com
@ 2024-05-21  7:43 ` jeevitha at linux dot ibm.com
  2024-05-21  7:53 ` fweimer at redhat dot com
                   ` (2 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: jeevitha at linux dot ibm.com @ 2024-05-21  7:43 UTC (permalink / raw)
  To: glibc-bugs

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

--- Comment #11 from Jeevitha P. <jeevitha at linux dot ibm.com> ---
I was able to run this test on a little-endian machine, and it did not fail
there.

In _Unwind_Resume() from /lib/powerpc64le-linux-gnu/libgcc_s.so.1, I can see
that the vector (VSX) non-volatile registers are restored properly. Below is
the assembly for that: 

000000000000ce60 <_Unwind_Resume_or_Rethrow@@GCC_3.3>:
    ce60:       03 00 4c 3c     addis   r2,r12,3
    ce64:       a0 ae 42 38     addi    r2,r2,-20832
    ce68:       41 f5 21 f8     stdu    r1,-2752(r1)
    ce6c:       a6 02 08 7c     mflr    r0
    ce70:       30 0a c1 d9     stfd    f14,2608(r1)
    ce74:       38 0a e1 d9     stfd    f15,2616(r1)
    ce78:       40 0a 01 da     stfd    f16,2624(r1)
    ce7c:       48 0a 21 da     stfd    f17,2632(r1)
    ce80:       50 0a 41 da     stfd    f18,2640(r1)
    ce84:       58 0a 61 da     stfd    f19,2648(r1)
    ce88:       60 0a 81 da     stfd    f20,2656(r1)
    ce8c:       68 0a a1 da     stfd    f21,2664(r1)
    ce90:       70 0a c1 da     stfd    f22,2672(r1)
    ce94:       78 0a e1 da     stfd    f23,2680(r1)
    ce98:       80 0a 01 db     stfd    f24,2688(r1)
    ce9c:       88 0a 21 db     stfd    f25,2696(r1)
    cea0:       90 0a 41 db     stfd    f26,2704(r1)
    cea4:       98 0a 61 db     stfd    f27,2712(r1)
    cea8:       a0 0a 81 db     stfd    f28,2720(r1)
    ceac:       a8 0a a1 db     stfd    f29,2728(r1)
    ceb0:       b0 0a c1 db     stfd    f30,2736(r1)
    ceb4:       b8 0a e1 db     stfd    f31,2744(r1)
    ceb8:       a0 09 c1 f9     std     r14,2464(r1)
    cebc:       a8 09 e1 f9     std     r15,2472(r1)
    cec0:       b0 09 01 fa     std     r16,2480(r1)
    cec4:       b8 09 21 fa     std     r17,2488(r1)
    cec8:       c0 09 41 fa     std     r18,2496(r1)
    cecc:       c8 09 61 fa     std     r19,2504(r1)
    ced0:       d0 0a 01 f8     std     r0,2768(r1)
    ced4:       d0 09 81 fa     std     r20,2512(r1)
    ced8:       d8 09 a1 fa     std     r21,2520(r1)
    cedc:       e0 09 c1 fa     std     r22,2528(r1)
    cee0:       e8 09 e1 fa     std     r23,2536(r1)
    cee4:       f0 09 01 fb     std     r24,2544(r1)
    cee8:       f8 09 21 fb     std     r25,2552(r1)
    ceec:       00 0a 41 fb     std     r26,2560(r1)
    cef0:       08 0a 61 fb     std     r27,2568(r1)
    cef4:       10 0a 81 fb     std     r28,2576(r1)
    cef8:       18 0a a1 fb     std     r29,2584(r1)
    cefc:       20 0a c1 fb     std     r30,2592(r1)
    cf00:       28 0a e1 fb     std     r31,2600(r1)
    cf04:       a6 02 68 7d     mflr    r11
    cf08:       00 00 6b 81     lwz     r11,0(r11)
    cf0c:       41 e8 6b 6d     xoris   r11,r11,59457
    cf10:       18 00 0b 28     cmplwi  r11,24
    cf14:       08 00 82 41     beq     cf1c
<_Unwind_Resume_or_Rethrow@@GCC_3.3+0xbc>
    cf18:       d8 0a 41 f8     std     r2,2776(r1)
    cf1c:       10 00 23 e9     ld      r9,16(r3)
    cf20:       a6 02 a8 7c     mflr    r5
    cf24:       78 1b 7f 7c     mr      r31,r3
    cf28:       ed 08 81 f6     stxv    vs52,2272(r1)
    cf2c:       fd 08 a1 f6     stxv    vs53,2288(r1)
    cf30:       0d 09 c1 f6     stxv    vs54,2304(r1)
    cf34:       1d 09 e1 f6     stxv    vs55,2320(r1)
    cf38:       2d 09 01 f7     stxv    vs56,2336(r1)
    cf3c:       26 00 00 7c     mfcr    r0
    cf40:       00 00 29 2c     cmpdi   r9,0
    cf44:       3d 09 21 f7     stxv    vs57,2352(r1)
    cf48:       4d 09 41 f7     stxv    vs58,2368(r1)
    cf4c:       5d 09 61 f7     stxv    vs59,2384(r1)
    cf50:       6d 09 81 f7     stxv    vs60,2400(r1)
    cf54:       7d 09 a1 f7     stxv    vs61,2416(r1)
    cf58:       8d 09 c1 f7     stxv    vs62,2432(r1)
    cf5c:       9d 09 e1 f7     stxv    vs63,2448(r1)
    cf60:       a8 08 01 90     stw     r0,2216(r1)
    cf64:       b0 08 01 90     stw     r0,2224(r1)
    cf68:       b8 08 01 90     stw     r0,2232(r1)
    cf6c:       10 01 82 40     bne     d07c
<_Unwind_Resume_or_Rethrow@@GCC_3.3+0x21c>
    cf70:       d1 5f ff 4b     bl      2f40 <GCC_3.0@@GCC_3.0+0x2f40>
    cf74:       18 00 41 e8     ld      r2,24(r1)
    cf78:       00 00 40 39     li      r10,0
    cf7c:       a8 08 01 80     lwz     r0,2216(r1)
    cf80:       e9 08 81 f6     lxv     vs52,2272(r1)
    cf84:       d8 0a 41 e8     ld      r2,2776(r1)
    cf88:       f9 08 a1 f6     lxv     vs53,2288(r1)
    cf8c:       09 09 c1 f6     lxv     vs54,2304(r1)
    cf90:       19 09 e1 f6     lxv     vs55,2320(r1)
    cf94:       29 09 01 f7     lxv     vs56,2336(r1)
    cf98:       39 09 21 f7     lxv     vs57,2352(r1)
    cf9c:       49 09 41 f7     lxv     vs58,2368(r1)
    cfa0:       20 01 12 7c     mtocrf  32,r0
    cfa4:       b0 08 01 80     lwz     r0,2224(r1)
    cfa8:       59 09 61 f7     lxv     vs59,2384(r1)
    cfac:       c0 08 61 e8     ld      r3,2240(r1)
    cfb0:       69 09 81 f7     lxv     vs60,2400(r1)
    cfb4:       79 09 a1 f7     lxv     vs61,2416(r1)
    cfb8:       89 09 c1 f7     lxv     vs62,2432(r1)
    cfbc:       99 09 e1 f7     lxv     vs63,2448(r1)
    cfc0:       c8 08 81 e8     ld      r4,2248(r1)
    cfc4:       d0 08 a1 e8     ld      r5,2256(r1)
    cfc8:       d8 08 c1 e8     ld      r6,2264(r1)
    cfcc:       a0 09 c1 e9     ld      r14,2464(r1)
    cfd0:       20 01 11 7c     mtocrf  16,r0
    cfd4:       b8 08 01 80     lwz     r0,2232(r1)


Sample assembly on big-endian where we don't have a vector register storing in
._Unwind_Resume() from /lib/powerpc64-linux-gnu/libgcc_s.so.1

0000000000011430 <._Unwind_Resume_or_Rethrow>:

   1143c:       f8 01 0a 40     std     r0,2624(r1)
   11440:       d9 c1 09 a0     stfd    f14,2464(r1)
   11444:       d9 e1 09 a8     stfd    f15,2472(r1)
   11448:       da 01 09 b0     stfd    f16,2480(r1)
   1144c:       da 21 09 b8     stfd    f17,2488(r1)
   11450:       da 41 09 c0     stfd    f18,2496(r1)
   11454:       da 61 09 c8     stfd    f19,2504(r1)
   11458:       da 81 09 d0     stfd    f20,2512(r1)
   1145c:       da a1 09 d8     stfd    f21,2520(r1)
   11460:       da c1 09 e0     stfd    f22,2528(r1)
   11464:       da e1 09 e8     stfd    f23,2536(r1)
   11468:       db 01 09 f0     stfd    f24,2544(r1)
   1146c:       db 21 09 f8     stfd    f25,2552(r1)
   11470:       db 41 0a 00     stfd    f26,2560(r1)
   11474:       db 61 0a 08     stfd    f27,2568(r1)
   11478:       db 81 0a 10     stfd    f28,2576(r1)
   1147c:       db a1 0a 18     stfd    f29,2584(r1)
   11480:       db c1 0a 20     stfd    f30,2592(r1)
   11484:       db e1 0a 28     stfd    f31,2600(r1)
   11488:       f9 c1 09 10     std     r14,2320(r1)
   1148c:       f9 e1 09 18     std     r15,2328(r1)
   11490:       fa 01 09 20     std     r16,2336(r1)
   11494:       fa 21 09 28     std     r17,2344(r1)
   11498:       fa 41 09 30     std     r18,2352(r1)
   1149c:       fa 61 09 38     std     r19,2360(r1)
   114a0:       fa 81 09 40     std     r20,2368(r1)
   114a4:       fa a1 09 48     std     r21,2376(r1)
   114a8:       fa c1 09 50     std     r22,2384(r1)
   114ac:       fa e1 09 58     std     r23,2392(r1)
   114b0:       fb 01 09 60     std     r24,2400(r1)
   114b4:       fb 21 09 68     std     r25,2408(r1)
   114b8:       fb 41 09 70     std     r26,2416(r1)
   114bc:       fb 61 09 78     std     r27,2424(r1)
   114c0:       fb 81 09 80     std     r28,2432(r1)
   114c4:       fb a1 09 88     std     r29,2440(r1)
   114c8:       fb c1 09 90     std     r30,2448(r1)
   114cc:       fb e1 09 98     std     r31,2456(r1)
   114d0:       7d 68 02 a6     mflr    r11
   114d4:       81 6b 00 00     lwz     r11,0(r11)
   114d8:       6d 6b e8 41     xoris   r11,r11,59457
   114dc:       28 0b 00 28     cmplwi  r11,40
   114e0:       41 82 00 08     beq     114e8 <._Unwind_Resume_or_Rethrow+0xb8>
   114e4:       f8 41 0a 58     std     r2,2648(r1)
   114e8:       7c a8 02 a6     mflr    r5
   114ec:       7c 7f 1b 78     mr      r31,r3
   114f0:       e9 23 00 10     ld      r9,16(r3)
   114f4:       91 81 0a 38     stw     r12,2616(r1)
   114f8:       2c 29 00 00     cmpdi   r9,0
   114fc:       40 82 00 d8     bne     115d4
<._Unwind_Resume_or_Rethrow+0x1a4>
   11500:       4b ff 3e e1     bl      53e0 <GCC_14.0.0@@GCC_14.0.0+0x53e0>
   11504:       e8 41 00 28     ld      r2,40(r1)
   11508:       39 40 00 00     li      r10,0
   1150c:       81 81 0a 38     lwz     r12,2616(r1)
   11510:       e8 01 0a 40     ld      r0,2624(r1)
   11514:       c9 c1 09 a0     lfd     f14,2464(r1)
   11518:       c9 e1 09 a8     lfd     f15,2472(r1)
   1151c:       ca 01 09 b0     lfd     f16,2480(r1)
   11520:       ca 21 09 b8     lfd     f17,2488(r1)
   11524:       e8 41 0a 58     ld      r2,2648(r1)
   11528:       e8 61 08 f0     ld      r3,2288(r1)
   1152c:       ca 41 09 c0     lfd     f18,2496(r1)
   11530:       ca 61 09 c8     lfd     f19,2504(r1)
   11534:       e8 81 08 f8     ld      r4,2296(r1)
   11538:       e8 a1 09 00     ld      r5,2304(r1)
   1153c:       7c 08 03 a6     mtlr    r0
   11540:       ca 81 09 d0     lfd     f20,2512(r1)
   11544:       e8 c1 09 08     ld      r6,2312(r1)
   11548:       e9 c1 09 10     ld      r14,2320(r1)
   1154c:       e9 e1 09 18     ld      r15,2328(r1)
   11550:       7d 92 01 20     mtocrf  32,r12
   11554:       7d 91 01 20     mtocrf  16,r12
   11558:       ea 01 09 20     ld      r16,2336(r1)
   1155c:       ea 21 09 28     ld      r17,2344(r1)
   11560:       ea 41 09 30     ld      r18,2352(r1)
   11564:       ea 61 09 38     ld      r19,2360(r1)
   11568:       ea 81 09 40     ld      r20,2368(r1)
   1156c:       ea a1 09 48     ld      r21,2376(r1)
   11570:       ea c1 09 50     ld      r22,2384(r1)
   11574:       ea e1 09 58     ld      r23,2392(r1)
   11578:       eb 01 09 60     ld      r24,2400(r1)
   1157c:       eb 21 09 68     ld      r25,2408(r1)
   11580:       eb 41 09 70     ld      r26,2416(r1)
   11584:       eb 61 09 78     ld      r27,2424(r1)
   11588:       eb 81 09 80     ld      r28,2432(r1)
   1158c:       eb a1 09 88     ld      r29,2440(r1)
   11590:       eb c1 09 90     ld      r30,2448(r1)
   11594:       eb e1 09 98     ld      r31,2456(r1)
   11598:       ca a1 09 d8     lfd     f21,2520(r1)
   1159c:       ca c1 09 e0     lfd     f22,2528(r1)
   115a0:       7d 90 81 20     mtocrf  8,r12
   115a4:       ca e1 09 e8     lfd     f23,2536(r1)
   115a8:       cb 01 09 f0     lfd     f24,2544(r1)
   115ac:       cb 21 09 f8     lfd     f25,2552(r1)
   115b0:       cb 41 0a 00     lfd     f26,2560(r1)
   115b4:       cb 61 0a 08     lfd     f27,2568(r1)
   115b8:       cb 81 0a 10     lfd     f28,2576(r1)
   115bc:       cb a1 0a 18     lfd     f29,2584(r1)
   115c0:       cb c1 0a 20     lfd     f30,2592(r1)
   115c4:       cb e1 0a 28     lfd     f31,2600(r1)
   115c8:       38 21 0a 30     addi    r1,r1,2608

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

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Bug nptl/26566] nptl/tst-thread-exit-clobber fails on powerpc/powerpc64 with GCC 10.2
  2020-09-02 13:52 [Bug nptl/26566] New: nptl/tst-thread-exit-clobber fails on powerpc/powerpc64 with GCC 10.2 msc at linux dot ibm.com
                   ` (12 preceding siblings ...)
  2024-05-21  7:43 ` jeevitha at linux dot ibm.com
@ 2024-05-21  7:53 ` fweimer at redhat dot com
  2024-06-24 14:54 ` bergner at linux dot ibm.com
  2024-06-25  1:04 ` sam at gentoo dot org
  15 siblings, 0 replies; 17+ messages in thread
From: fweimer at redhat dot com @ 2024-05-21  7:53 UTC (permalink / raw)
  To: glibc-bugs

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

Florian Weimer <fweimer at redhat dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         Resolution|---                         |MOVED
             Status|NEW                         |RESOLVED

--- Comment #12 from Florian Weimer <fweimer at redhat dot com> ---
The powerpc64le-*-linux-gnu target has a baseline of POWER8, so vector support
is always compiled into libgcc_s.so.1.

On powerpc64-*-linux-gnu and powerpc-*-linux-gnu, vector support is only
present if GCC is built to a minimum baseline with vector support. This is a
GCC bug: it needs to do run-time dispatch based on CPU capabilities and be able
to save vector registers, independently of how GCC was built.

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

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Bug nptl/26566] nptl/tst-thread-exit-clobber fails on powerpc/powerpc64 with GCC 10.2
  2020-09-02 13:52 [Bug nptl/26566] New: nptl/tst-thread-exit-clobber fails on powerpc/powerpc64 with GCC 10.2 msc at linux dot ibm.com
                   ` (13 preceding siblings ...)
  2024-05-21  7:53 ` fweimer at redhat dot com
@ 2024-06-24 14:54 ` bergner at linux dot ibm.com
  2024-06-25  1:04 ` sam at gentoo dot org
  15 siblings, 0 replies; 17+ messages in thread
From: bergner at linux dot ibm.com @ 2024-06-24 14:54 UTC (permalink / raw)
  To: glibc-bugs

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

--- Comment #13 from Peter Bergner <bergner at linux dot ibm.com> ---
(In reply to Florian Weimer from comment #12)
> The powerpc64le-*-linux-gnu target has a baseline of POWER8, so vector
> support is always compiled into libgcc_s.so.1.
> 
> On powerpc64-*-linux-gnu and powerpc-*-linux-gnu, vector support is only
> present if GCC is built to a minimum baseline with vector support. This is a
> GCC bug: it needs to do run-time dispatch based on CPU capabilities and be
> able to save vector registers, independently of how GCC was built.

FYI, we've opened https://gcc.gnu.org/PR115242 to track this.

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

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Bug nptl/26566] nptl/tst-thread-exit-clobber fails on powerpc/powerpc64 with GCC 10.2
  2020-09-02 13:52 [Bug nptl/26566] New: nptl/tst-thread-exit-clobber fails on powerpc/powerpc64 with GCC 10.2 msc at linux dot ibm.com
                   ` (14 preceding siblings ...)
  2024-06-24 14:54 ` bergner at linux dot ibm.com
@ 2024-06-25  1:04 ` sam at gentoo dot org
  15 siblings, 0 replies; 17+ messages in thread
From: sam at gentoo dot org @ 2024-06-25  1:04 UTC (permalink / raw)
  To: glibc-bugs

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

Sam James <sam at gentoo dot org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           See Also|                            |https://gcc.gnu.org/bugzill
                   |                            |a/show_bug.cgi?id=115242

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

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2024-06-25  1:04 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-02 13:52 [Bug nptl/26566] New: nptl/tst-thread-exit-clobber fails on powerpc/powerpc64 with GCC 10.2 msc at linux dot ibm.com
2020-09-04 22:11 ` [Bug nptl/26566] " adhemerval.zanella at linaro dot org
2020-09-15 15:10 ` tuliom at ascii dot art.br
2024-01-22 15:51 ` carlos at redhat dot com
2024-03-21 12:59 ` mmatti at linux dot vnet.ibm.com
2024-04-24  5:49 ` mmatti at linux dot vnet.ibm.com
2024-05-08  6:15 ` mmatti at linux dot vnet.ibm.com
2024-05-08  6:16 ` mmatti at linux dot vnet.ibm.com
2024-05-08  9:58 ` fweimer at redhat dot com
2024-05-17 14:08 ` jeevitha at linux dot ibm.com
2024-05-17 16:28 ` fweimer at redhat dot com
2024-05-19 18:21 ` jskumari at linux dot ibm.com
2024-05-19 19:46 ` fweimer at redhat dot com
2024-05-21  7:43 ` jeevitha at linux dot ibm.com
2024-05-21  7:53 ` fweimer at redhat dot com
2024-06-24 14:54 ` bergner at linux dot ibm.com
2024-06-25  1:04 ` sam at gentoo dot org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).