]> git.ipfire.org Git - thirdparty/elfutils.git/commitdiff
libdw: ignore really large discriminator
authorMark Wielaard <mark@klomp.org>
Thu, 26 Oct 2023 14:49:08 +0000 (16:49 +0200)
committerMark Wielaard <mark@klomp.org>
Tue, 31 Oct 2023 23:15:19 +0000 (00:15 +0100)
llvm can create really large discriminator values. We used to flag those
as invalid when the value wouldn't fit in 24 bits. Just truncate the value.

* libdw/dwarf_getsrclines.c (add_new_line): Define SETX.
Use SETX to set discriminator.

https://sourceware.org/bugzilla/show_bug.cgi?id=30967

Signed-off-by: Mark Wielaard <mark@klomp.org>
libdw/dwarf_getsrclines.c

index df003c5fd69a71fa9e316ee6cd9ef628373be588..69e10c7b13e4a7e9cab09f3a0dd90648dff7e93a 100644 (file)
@@ -129,6 +129,12 @@ add_new_line (struct line_state *state, struct linelist *new_line)
        return true;                                                  \
    } while (0)
 
+  /* Same as above, but don't flag as "invalid" just use truncated
+     value.  Used for discriminator for which llvm might use a value
+     that won't fit 24 bits.  */
+#define SETX(field)                                                  \
+     new_line->line.field = state->field;                            \
+
   SET (addr);
   SET (op_index);
   SET (file);
@@ -140,7 +146,7 @@ add_new_line (struct line_state *state, struct linelist *new_line)
   SET (prologue_end);
   SET (epilogue_begin);
   SET (isa);
-  SET (discriminator);
+  SETX (discriminator);
   SET (context);
   SET (function_name);