Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rebase onto glibc 2.32 #1

Open
FireBurn opened this issue Feb 4, 2020 · 2 comments
Open

Rebase onto glibc 2.32 #1

FireBurn opened this issue Feb 4, 2020 · 2 comments

Comments

@FireBurn
Copy link

FireBurn commented Feb 4, 2020

Hi

Are there any plans to rebase these patches onto 2.31

I'm seeing the following messages:

 * Applying pthread_mutex_lock_any.patch ...
patching file nptl/Makefile
Hunk #1 succeeded at 67 (offset -1 lines).
patching file nptl/Versions
Hunk #1 succeeded at 268 (offset -6 lines).
patching file nptl/pthreadP.h
patching file nptl/pthread_mutex_lock_any.c
patching file nptl/pthread_mutex_timedlock_any.c
patching file sysdeps/nptl/pthread.h
Hunk #1 succeeded at 738 (offset -25 lines).
can't find file to patch at input line 333
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|diff --git a/sysdeps/unix/sysv/linux/lowlevellock-futex.h b/sysdeps/unix/sysv/linux/lowlevellock-futex.h
|index cfa796be2b..2814072164 100644
|--- a/sysdeps/unix/sysv/linux/lowlevellock-futex.h
|+++ b/sysdeps/unix/sysv/linux/lowlevellock-futex.h
--------------------------
No file to patch.  Skipping patch.
3 out of 3 hunks ignored
patching file sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
Hunk #1 succeeded at 115 (offset -11 lines).
FireBurn pushed a commit to FireBurn/glibc that referenced this issue Feb 4, 2020
This patch adds a new make rule that generates a helper script for
debugging glibc test cases.  The new script, debugglibc.sh, is similar
to testrun.sh, in the sense that it allows the execution of the
specified test case, however, it opens the test case in GDB, setting the
library path the same way that testrun.sh does.  The commands are based
on the instructions on the wiki for glibc debugging [1,2].

By default, the script tells GDB to load the test case for symbol
information, so that, when a breakpoint is hit, the call stack is
displayed correctly (instead of printing lots of '??'s).  For instance,
after running 'make' and 'make check', one could do the following:

  $ ./debugglibc.sh nptl/tst-exec1 -b pthread_join

  Reading symbols from /home/gabriel/build/powerpc64le/glibc//elf/ld.so...done.
  Breakpoint 1 at 0x1444
  add symbol table from file "nptl/tst-exec1"
  [Thread debugging using libthread_db enabled]
  Using host libthread_db library "/home/gabriel/build/powerpc64le/glibc//nptl_db/libthread_db.so.1".

  Breakpoint 1, 0x00007ffff7fb1444 in _dl_start_user () from /home/gabriel/build/powerpc64le/glibc/elf/ld.so
  Breakpoint 2 at 0x7ffff7f49d48: file pthread_join.c, line 23.

Notice that the script will always start GDB with the program running
and halted at _dl_start_user.  So, in order to reach the actual
breakpoint of interest, one should hit 'c', not 'r':

  >>> c
  Continuing.
  [New Thread 0x7ffff7d1f180 (LWP 76443)]
  [Switching to Thread 0x7ffff7d1f180 (LWP 76443)]

  Thread 2 "ld.so" hit Breakpoint 2, __pthread_join (threadid=140737354087616, thread_return=0x0) at pthread_join.c:24
  24        return __pthread_timedjoin_ex (threadid, thread_return, NULL, true);

Then inspect the call stack with 'bt', as usual, and see symbols from
both the test case and from the libraries themselves:

  >>> bt
  #0  __pthread_join (threadid=140737354087616, thread_return=0x0) at pthread_join.c:24
  Plagman#1  0x0000000010001f4c in tf (arg=<optimized out>) at tst-exec1.c:37
  Plagman#2  0x00007ffff7f487e8 in start_thread (arg=0x7ffff7510000) at pthread_create.c:479
  Plagman#3  0x00007ffff7e523a8 in clone () at ../sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S:82

Tested for powerpc64le and x86_64.

[1] https://sourceware.org/glibc/wiki/Debugging/Loader_Debugging
[2] https://sourceware.org/glibc/wiki/Testing/Builds#Required_gdb_setup

Reviewed-by: Carlos O'Donell <[email protected]>
Reviewed-by: Dmitry V. Levin <[email protected]>
Reviewed-by: Joseph Myers <[email protected]>
Reviewed-by: Andreas Schwab <[email protected]>
@FireBurn
Copy link
Author

FireBurn commented Feb 4, 2020

Rebased it myself, doing some testing now

#2

@FireBurn FireBurn changed the title Rebase onto glibc 2.31 Rebase onto glibc 2.32 Aug 7, 2020
@FireBurn
Copy link
Author

FireBurn commented Aug 7, 2020

Now rebased onto 2.32

#3

FireBurn pushed a commit to FireBurn/glibc that referenced this issue Jun 3, 2021
After sp is updated, the CFA offset should be set before next instruction.
Tested in glibc-2.28:
Thread 2 "xxxxxxx" hit Breakpoint 1, _dl_tlsdesc_dynamic () at ../sysdeps/aarch64/dl-tlsdesc.S:149
149		stp	x1,  x2, [sp, #-32]!
Missing separate debuginfos, use: dnf debuginfo-install libgcc-7.3.0-20190804.h24.aarch64
(gdb) bt
#0  _dl_tlsdesc_dynamic () at ../sysdeps/aarch64/dl-tlsdesc.S:149
Plagman#1  0x0000ffffbe4fbb44 in OurFunction (threadId=3194870184)
    at /home/test/test_function.c:30
Plagman#2  0x0000000000400c08 in initaaa () at thread.c:58
Plagman#3  0x0000000000400c50 in thread_proc (param=0x0) at thread.c:71
#4  0x0000ffffbf6918bc in start_thread (arg=0xfffffffff29f) at pthread_create.c:486
#5  0x0000ffffbf5669ec in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:78
(gdb) ni
_dl_tlsdesc_dynamic () at ../sysdeps/aarch64/dl-tlsdesc.S:150
150		stp	x3,  x4, [sp, #16]
(gdb) bt
#0  _dl_tlsdesc_dynamic () at ../sysdeps/aarch64/dl-tlsdesc.S:150
Plagman#1  0x0000ffffbe4fbb44 in OurFunction (threadId=3194870184)
    at /home/test/test_function.c:30
Plagman#2  0x0000000000000000 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
(gdb) ni
_dl_tlsdesc_dynamic () at ../sysdeps/aarch64/dl-tlsdesc.S:157
157		mrs	x4, tpidr_el0
(gdb) bt
#0  _dl_tlsdesc_dynamic () at ../sysdeps/aarch64/dl-tlsdesc.S:157
Plagman#1  0x0000ffffbe4fbb44 in OurFunction (threadId=3194870184)
    at /home/test/test_function.c:30
Plagman#2  0x0000000000400c08 in initaaa () at thread.c:58
Plagman#3  0x0000000000400c50 in thread_proc (param=0x0) at thread.c:71
#4  0x0000ffffbf6918bc in start_thread (arg=0xfffffffff29f) at pthread_create.c:486
#5  0x0000ffffbf5669ec in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:78

Signed-off-by: liqingqing <[email protected]>
Signed-off-by: Shuo Wang <[email protected]>
FireBurn pushed a commit to FireBurn/glibc that referenced this issue Jun 3, 2021
It is supposed to save the rules for the instructions before falling into slow path.

Tested in glibc-2.28 before fixing:
Thread 2 "xxxxxxx" hit Breakpoint 1, _dl_tlsdesc_dynamic () at ../sysdeps/aarch64/dl-tlsdesc.S:149
149		stp	x1,  x2, [sp, #-32]!
Missing separate debuginfos, use: dnf debuginfo-install libgcc-7.3.0-20190804.h24.aarch64
(gdb) ni
_dl_tlsdesc_dynamic () at ../sysdeps/aarch64/dl-tlsdesc.S:150
150		stp	x3,  x4, [sp, #16]
(gdb)
_dl_tlsdesc_dynamic () at ../sysdeps/aarch64/dl-tlsdesc.S:157
157		mrs	x4, tpidr_el0
(gdb)
158		ldr	PTR_REG (1), [x0,#TLSDESC_ARG]
(gdb)
159		ldr	PTR_REG (0), [x4,#TCBHEAD_DTV]
(gdb)
160		ldr	PTR_REG (3), [x1,#TLSDESC_GEN_COUNT]
(gdb)
161		ldr	PTR_REG (2), [x0,#DTV_COUNTER]
(gdb)
162		cmp	PTR_REG (3), PTR_REG (2)
(gdb)
163		b.hi	2f
(gdb)
165		ldp	PTR_REG (2), PTR_REG (3), [x1,#TLSDESC_MODID]
(gdb)
166		add	PTR_REG (0), PTR_REG (0), PTR_REG (2), lsl #(PTR_LOG_SIZE + 1)
(gdb)
167		ldr	PTR_REG (0), [x0] /* Load val member of DTV entry.  */
(gdb)
168		cmp	PTR_REG (0), #TLS_DTV_UNALLOCATED
(gdb)
169		b.eq	2f
(gdb) bt
#0  _dl_tlsdesc_dynamic () at ../sysdeps/aarch64/dl-tlsdesc.S:169
Plagman#1  0x0000ffffbe4fbb44 in OurFunction (threadId=4294967295)
    at /home/test/test_function.c:30
Plagman#2  0x0000000000400c08 in initaaa () at thread.c:58
Plagman#3  0x0000000000400c50 in thread_proc (param=0x0) at thread.c:71
#4  0x0000ffffbf6918bc in start_thread (arg=0xfffffffff29f) at pthread_create.c:486
#5  0x0000ffffbf5669ec in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:78
(gdb) ni
_dl_tlsdesc_dynamic () at ../sysdeps/aarch64/dl-tlsdesc.S:184
184		stp	x29, x30, [sp,#-16*NSAVEXREGPAIRS]!
(gdb) bt
#0  _dl_tlsdesc_dynamic () at ../sysdeps/aarch64/dl-tlsdesc.S:184
Plagman#1  0x0000ffffbe4fbb44 in OurFunction (threadId=4294967295)
    at /home/test/test_function.c:30
Plagman#2  0x0000000000000000 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

Co-authored-by: liqingqing <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant