[PATCH] Subject: perf jit: Fix incorrect file name in DWARF line table

From: elisabeth
Date: Wed May 31 2023 - 10:35:53 EST


Fix an issue where an incorrect file name was added in the DWARF line table
due to not checking the filename against the repeated name marker (/xff/0).
This can be seen with `objdump --dwarf=line` on the ELF file after perf inject.

Signed-off-by: elisabeth <paniii94@xxxxxxxxx>
Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
Cc: Ingo Molnar <mingo@xxxxxxxxxx>
Cc: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
Cc: Mark Rutland <mark.rutland@xxxxxxx>
Cc: Alexander Shishkin <alexander.shishkin@xxxxxxxxxxxxxxx>
Cc: Jiri Olsa <jolsa@xxxxxxxxxx>
Cc: Namhyung Kim <namhyung@xxxxxxxxxx>
---
tools/perf/util/genelf_debug.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/tools/perf/util/genelf_debug.c b/tools/perf/util/genelf_debug.c
index aa5dcc56b2ac..2928b59bb9a5 100644
--- a/tools/perf/util/genelf_debug.c
+++ b/tools/perf/util/genelf_debug.c
@@ -349,6 +349,7 @@ static void emit_lineno_info(struct buffer_ext *be,
*/

/* start state of the state machine we take care of */
+ char const repeated_name_marker[] = {'\xff', '\0'};
unsigned long last_vma = 0;
char const *cur_filename = NULL;
unsigned long cur_file_idx = 0;
@@ -363,7 +364,8 @@ static void emit_lineno_info(struct buffer_ext *be,
/*
* check if filename changed, if so add it
*/
- if (!cur_filename || strcmp(cur_filename, ent->name)) {
+ if ((!cur_filename || strcmp(cur_filename, ent->name)) &&
+ memcmp(repeated_name_marker, ent->name, sizeof(repeated_name_marker)) != 0) {
emit_lne_define_filename(be, ent->name);
cur_filename = ent->name;
emit_set_file(be, ++cur_file_idx);
--
2.34.1