[Bug 1907298] Re: glibc 2.32-0ubuntu5 ADT test failure with linux 5.10.0-7.8
Bug Watch Updater
1907298 at bugs.launchpad.net
Fri Jan 22 01:54:54 UTC 2021
Launchpad has imported 2 comments from the remote bug at
https://sourceware.org/bugzilla/show_bug.cgi?id=27223.
If you reply to an imported comment from within Launchpad, your comment
will be sent to the remote bug automatically. Read more about
Launchpad's inter-bugtracker facilities at
https://help.launchpad.net/InterBugTracking.
------------------------------------------------------------------------
On 2021-01-21T20:10:30+00:00 Balint Reczey wrote:
Linux 5.10 includes an optimization that changes signal handling
breaking sigcontext_get_pc, which is detected by misc/tst-sigcontext-
get_pc:
commit 0138ba5783ae0dcc799ad401a1e8ac8333790df9
Author: Nicholas Piggin <npiggin at gmail.com>
Date: Mon May 11 20:19:52 2020 +1000
powerpc/64/signal: Balance return predictor stack in signal
trampoline
Returning from an interrupt or syscall to a signal handler currently
begins execution directly at the handler's entry point, with LR set to
the address of the sigreturn trampoline. When the signal handler
function returns, it runs the trampoline. It looks like this:
# interrupt at user address xyz
# kernel stuff... signal is raised
rfid
# void handler(int sig)
addis 2,12,.TOC.-.LCF0 at ha
addi 2,2,.TOC.-.LCF0 at l
mflr 0
std 0,16(1)
stdu 1,-96(1)
# handler stuff
ld 0,16(1)
mtlr 0
blr
# __kernel_sigtramp_rt64
addi r1,r1,__SIGNAL_FRAMESIZE
li r0,__NR_rt_sigreturn
sc
# kernel executes rt_sigreturn
rfid
# back to user address xyz
Note the blr with no matching bl. This can corrupt the return
predictor.
Solve this by instead resuming execution at the signal trampoline
which then calls the signal handler. qtrace-tools link_stack checker
confirms the entire user/kernel/vdso cycle is balanced after this
patch, whereas it's not upstream.
Alan confirms the dwarf unwind info still looks good. gdb still
recognises the signal frame and can step into parent frames if it
break inside a signal handler.
Performance is pretty noisy, not a very significant change on a POWER9
here, but branch misses are consistently a lot lower on a
microbenchmark:
Performance counter stats for './signal':
13,085.72 msec task-clock # 1.000 CPUs utilized
45,024,760,101 cycles # 3.441 GHz
65,102,895,542 instructions # 1.45 insn per cycle
11,271,673,787 branches # 861.372 M/sec
59,468,979 branch-misses # 0.53% of all branches
12,989.09 msec task-clock # 1.000 CPUs utilized
44,692,719,559 cycles # 3.441 GHz
65,109,984,964 instructions # 1.46 insn per cycle
11,282,136,057 branches # 868.585 M/sec
39,786,942 branch-misses # 0.35% of all branches
Signed-off-by: Nicholas Piggin <npiggin at gmail.com>
Signed-off-by: Michael Ellerman <mpe at ellerman.id.au>
Link: https://lore.kernel.org/r/20200511101952.1463138-1-npiggin@gmail.com
---
----------
FAIL: misc/tst-sigcontext-get_pc
original exit status 1
info: address in signal handler: 0x737faa11db44
info: call stack entry 0: 0x737faa311f58
info: call stack entry 1: 0x737faa3404c4
info: call stack entry 2: 0x0
info: call stack entry 3: 0x737faa312144
info: call stack entry 4: 0x737faa312870
info: call stack entry 5: 0x737faa313264
info: call stack entry 6: 0x737faa311c40
info: call stack entry 7: 0x737faa0f9e5c
info: call stack entry 8: 0x737faa0fa040
error: ../sysdeps/unix/sysv/linux/tst-sigcontext-get_pc.c:60: not true: found
error: 1 test failures
Reply at:
https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/1907298/comments/4
------------------------------------------------------------------------
On 2021-01-21T20:59:52+00:00 Andreas Schwab wrote:
Please report that to linuxppc-dev at lists.ozlabs.org.
Reply at:
https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/1907298/comments/6
** Changed in: glibc
Status: Unknown => New
** Changed in: glibc
Importance: Unknown => Medium
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to glibc in Ubuntu.
https://bugs.launchpad.net/bugs/1907298
Title:
glibc 2.32-0ubuntu5 ADT test failure with linux 5.10.0-7.8
Status in GLibC:
New
Status in glibc package in Ubuntu:
Confirmed
Bug description:
Testing failed on:
ppc64el: https://objectstorage.prodstack4-5.canonical.com/v1/AUTH_77e2ada1e7a84929a74ba3b87153c0ac/autopkgtest-hirsute-canonical-kernel-team-bootstrap/hirsute/ppc64el/g/glibc/20201208_192946_04f11@/log.gz
----------
FAIL: misc/tst-sigcontext-get_pc
original exit status 1
info: address in signal handler: 0x737faa11db44
info: call stack entry 0: 0x737faa311f58
info: call stack entry 1: 0x737faa3404c4
info: call stack entry 2: 0x0
info: call stack entry 3: 0x737faa312144
info: call stack entry 4: 0x737faa312870
info: call stack entry 5: 0x737faa313264
info: call stack entry 6: 0x737faa311c40
info: call stack entry 7: 0x737faa0f9e5c
info: call stack entry 8: 0x737faa0fa040
error: ../sysdeps/unix/sysv/linux/tst-sigcontext-get_pc.c:60: not true: found
error: 1 test failures
----------
To manage notifications about this bug go to:
https://bugs.launchpad.net/glibc/+bug/1907298/+subscriptions
More information about the foundations-bugs
mailing list