mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-03-11 22:29:00 +07:00
![]() Setting a kprobe on getname_flags() failed: $ echo 'p:tmr1 getname_flags +0(%r2):ustring' > kprobe_events -bash: echo: write error: Invalid argument Debugging the kprobes code showed that the address of getname_flags() is contained in the __bug_table. Kprobes doesn't allow to set probes at BUG() locations. $ objdump -j __bug_table -x build/fs/namei.o [..] 0000000000000108 R_390_PC32 .text+0x00000000000075a8 000000000000010c R_390_PC32 .L223+0x0000000000000004 I was expecting getname_flags() to start with a BUG(), but: 7598: e3 20 10 00 00 04 lg %r2,0(%r1) 759e: c0 f4 00 00 00 00 jg 759e <putname+0x7e> 75a0: R_390_PLT32DBL kmem_cache_free+0x2 75a4: a7 f4 00 01 j 75a6 <putname+0x86> 00000000000075a8 <getname_flags>: 75a8: c0 04 00 00 00 00 brcl 0,75a8 <getname_flags> 75ae: eb 6f f0 48 00 24 stmg %r6,%r15,72(%r15) 75b4: b9 04 00 ef lgr %r14,%r15 75b8: e3 f0 ff a8 ff 71 lay %r15,-88(%r15) So the BUG() is actually the last opcode of the previous function. Fix this by switching to using the MONITOR CALL (MC) instruction, and set the entry in __bug_table to the beginning of that MC. Reviewed-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Sven Schnelle <svens@linux.ibm.com> Signed-off-by: Vasily Gorbik <gor@linux.ibm.com> |
||
---|---|---|
.. | ||
syscalls | ||
vdso64 | ||
.gitignore | ||
alternative.c | ||
asm-offsets.c | ||
audit.c | ||
audit.h | ||
base.S | ||
cache.c | ||
compat_audit.c | ||
compat_linux.c | ||
compat_linux.h | ||
compat_ptrace.h | ||
compat_signal.c | ||
cpcmd.c | ||
crash_dump.c | ||
debug.c | ||
diag.c | ||
dis.c | ||
dumpstack.c | ||
early_printk.c | ||
early.c | ||
ebcdic.c | ||
entry.h | ||
entry.S | ||
fpu.c | ||
ftrace.c | ||
guarded_storage.c | ||
head64.S | ||
idle.c | ||
ima_arch.c | ||
ipl_vmparm.c | ||
ipl.c | ||
irq.c | ||
jump_label.c | ||
kdebugfs.c | ||
kexec_elf.c | ||
kexec_image.c | ||
kprobes.c | ||
lgr.c | ||
machine_kexec_file.c | ||
machine_kexec_reloc.c | ||
machine_kexec.c | ||
Makefile | ||
mcount.S | ||
module.c | ||
nmi.c | ||
nospec-branch.c | ||
nospec-sysfs.c | ||
os_info.c | ||
perf_cpum_cf_common.c | ||
perf_cpum_cf_diag.c | ||
perf_cpum_cf_events.c | ||
perf_cpum_cf.c | ||
perf_cpum_sf.c | ||
perf_event.c | ||
perf_regs.c | ||
pgm_check.S | ||
process.c | ||
processor.c | ||
ptrace.c | ||
reipl.S | ||
relocate_kernel.S | ||
runtime_instr.c | ||
setup.c | ||
signal.c | ||
smp.c | ||
stacktrace.c | ||
sthyi.c | ||
suspend.c | ||
swsusp.S | ||
sys_s390.c | ||
sysinfo.c | ||
time.c | ||
topology.c | ||
trace.c | ||
traps.c | ||
unwind_bc.c | ||
uprobes.c | ||
vdso.c | ||
vmlinux.lds.S | ||
vtime.c |