Skip to content

create_gcov ignores discriminators declared as DW_FORM_implicit_const #248

@janhubicka

Description

@janhubicka

If debug info contains

    .uleb128 0x2136 # (DW_AT_GNU_discriminator)
    .uleb128 0x21   # (DW_FORM_implicit_const)
    .sleb128 <XXX>

create_gcov will ignore it. See for testcases.
This can be fixed by handling discriminators both as signed and unsigned same way line numbers are handled already.

diff --git a/util/symbolize/addr2line_inlinestack.cc b/util/symbolize/addr2line_inlinestack.cc
index f68f6e1..8eeb8bd 100644
--- a/util/symbolize/addr2line_inlinestack.cc
+++ b/util/symbolize/addr2line_inlinestack.cc
@@ -493,6 +493,12 @@ void InlineStackHandler::ProcessAttributeSigned(
subprogram_stack_.back()->set_callsite_line(data);
break;

  •  // In case discriminator is implicit const, it is processed as signed
    
  •  // rather then unsigned value.
    
  •  case DW_AT_GNU_discriminator:
    
  •    CHECK(form == DW_FORM_implicit_const);
    
  •    subprogram_stack_.back()->set_callsite_discr(data);
    
  •    break;
     default:
       break;
    
    }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions