mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-02-19 20:26:45 +07:00
![]() When parsing lines from objdump a line containing source code starting with a numeric label is mistaken for a line of disassembly starting with a memory address. Current validation fails to recognise that the "memory address" is out of range and calculates an invalid offset which later causes this segfault: Program received signal SIGSEGV, Segmentation fault. 0x0000000000457315 in disasm__calc_percent (notes=0xc98970, evidx=0, offset=143705, end=2127526177, path=0x7fffffffbf50) at util/annotate.c:631 631 hits += h->addr[offset++]; (gdb) bt #0 0x0000000000457315 in disasm__calc_percent (notes=0xc98970, evidx=0, offset=143705, end=2127526177, path=0x7fffffffbf50) at util/annotate.c:631 #1 0x00000000004d65e3 in annotate_browser__calc_percent (browser=0x7fffffffd130, evsel=0xa01da0) at ui/browsers/annotate.c:364 #2 0x00000000004d7433 in annotate_browser__run (browser=0x7fffffffd130, evsel=0xa01da0, hbt=0x0) at ui/browsers/annotate.c:672 #3 0x00000000004d80c9 in symbol__tui_annotate (sym=0xc989a0, map=0xa02660, evsel=0xa01da0, hbt=0x0) at ui/browsers/annotate.c:962 #4 0x00000000004d7aa0 in hist_entry__tui_annotate (he=0xdf73f0, evsel=0xa01da0, hbt=0x0) at ui/browsers/annotate.c:823 #5 0x00000000004dd648 in perf_evsel__hists_browse (evsel=0xa01da0, nr_events=1, helpline= 0x58b768 "For a higher level overview, try: perf report --sort comm,dso", ev_name=0xa02cd0 "cycles", left_exits=false, hbt= 0x0, min_pcnt=0, env=0xa011e0) at ui/browsers/hists.c:1659 #6 0x00000000004de372 in perf_evlist__tui_browse_hists (evlist=0xa01520, help= 0x58b768 "For a higher level overview, try: perf report --sort comm,dso", hbt=0x0, min_pcnt=0, env=0xa011e0) at ui/browsers/hists.c:1950 #7 0x000000000042cf6b in __cmd_report (rep=0x7fffffffd6c0) at builtin-report.c:581 #8 0x000000000042e25d in cmd_report (argc=0, argv=0x7fffffffe4b0, prefix=0x0) at builtin-report.c:965 #9 0x000000000041a0e1 in run_builtin (p=0x801548, argc=1, argv=0x7fffffffe4b0) at perf.c:319 #10 0x000000000041a319 in handle_internal_command (argc=1, argv=0x7fffffffe4b0) at perf.c:376 #11 0x000000000041a465 in run_argv (argcp=0x7fffffffe38c, argv=0x7fffffffe380) at perf.c:420 #12 0x000000000041a707 in main (argc=1, argv=0x7fffffffe4b0) at perf.c:521 After the fix is applied the symbol can be annotated showing the problematic line "1: rep" copy_user_generic_string /usr/lib/debug/lib/modules/3.9.10-100.fc17.x86_64/vmlinux */ ENTRY(copy_user_generic_string) CFI_STARTPROC ASM_STAC andl %edx,%edx and %edx,%edx jz 4f je 37 cmpl $8,%edx cmp $0x8,%edx jb 2f /* less than 8 bytes, go to byte copy loop */ jb 33 ALIGN_DESTINATION mov %edi,%ecx and $0x7,%ecx je 28 sub $0x8,%ecx neg %ecx sub %ecx,%edx 1a: mov (%rsi),%al mov %al,(%rdi) inc %rsi inc %rdi dec %ecx jne 1a movl %edx,%ecx 28: mov %edx,%ecx shrl $3,%ecx shr $0x3,%ecx andl $7,%edx and $0x7,%edx 1: rep 100.00 rep movsq %ds:(%rsi),%es:(%rdi) movsq 2: movl %edx,%ecx 33: mov %edx,%ecx 3: rep rep movsb %ds:(%rsi),%es:(%rdi) movsb 4: xorl %eax,%eax 37: xor %eax,%eax data32 xchg %ax,%ax ASM_CLAC ret retq Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Cc: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Namhyung Kim <namhyung@gmail.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/r/1379009721-27667-1-git-send-email-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> |
||
---|---|---|
.. | ||
include | ||
scripting-engines | ||
abspath.c | ||
alias.c | ||
annotate.c | ||
annotate.h | ||
bitmap.c | ||
build-id.c | ||
build-id.h | ||
cache.h | ||
callchain.c | ||
callchain.h | ||
cgroup.c | ||
cgroup.h | ||
color.c | ||
color.h | ||
config.c | ||
cpumap.c | ||
cpumap.h | ||
ctype.c | ||
debug.c | ||
debug.h | ||
dso.c | ||
dso.h | ||
dwarf-aux.c | ||
dwarf-aux.h | ||
environment.c | ||
event.c | ||
event.h | ||
evlist.c | ||
evlist.h | ||
evsel.c | ||
evsel.h | ||
exec_cmd.c | ||
exec_cmd.h | ||
generate-cmdlist.sh | ||
header.c | ||
header.h | ||
help.c | ||
help.h | ||
hist.c | ||
hist.h | ||
hweight.c | ||
intlist.c | ||
intlist.h | ||
levenshtein.c | ||
levenshtein.h | ||
machine.c | ||
machine.h | ||
map.c | ||
map.h | ||
pager.c | ||
parse-events.c | ||
parse-events.h | ||
parse-events.l | ||
parse-events.y | ||
parse-options.c | ||
parse-options.h | ||
path.c | ||
perf_regs.h | ||
PERF-VERSION-GEN | ||
pmu.c | ||
pmu.h | ||
pmu.l | ||
pmu.y | ||
probe-event.c | ||
probe-event.h | ||
probe-finder.c | ||
probe-finder.h | ||
pstack.c | ||
pstack.h | ||
python-ext-sources | ||
python.c | ||
quote.c | ||
quote.h | ||
rblist.c | ||
rblist.h | ||
record.c | ||
run-command.c | ||
run-command.h | ||
session.c | ||
session.h | ||
setup.py | ||
sigchain.c | ||
sigchain.h | ||
sort.c | ||
sort.h | ||
stat.c | ||
stat.h | ||
strbuf.c | ||
strbuf.h | ||
strfilter.c | ||
strfilter.h | ||
string.c | ||
strlist.c | ||
strlist.h | ||
svghelper.c | ||
svghelper.h | ||
symbol-elf.c | ||
symbol-minimal.c | ||
symbol.c | ||
symbol.h | ||
sysfs.c | ||
sysfs.h | ||
target.c | ||
target.h | ||
thread_map.c | ||
thread_map.h | ||
thread.c | ||
thread.h | ||
tool.h | ||
top.c | ||
top.h | ||
trace-event-info.c | ||
trace-event-parse.c | ||
trace-event-read.c | ||
trace-event-scripting.c | ||
trace-event.h | ||
types.h | ||
unwind.c | ||
unwind.h | ||
usage.c | ||
util.c | ||
util.h | ||
values.c | ||
values.h | ||
vdso.c | ||
vdso.h | ||
wrapper.c | ||
xyarray.c | ||
xyarray.h |