diff --git a/src/apps/debugger/dwarf/Dwarf.h b/src/apps/debugger/dwarf/Dwarf.h index f8765019b0..1d83cbaffd 100644 --- a/src/apps/debugger/dwarf/Dwarf.h +++ b/src/apps/debugger/dwarf/Dwarf.h @@ -404,11 +404,12 @@ enum { // line number extended opcode enum { - DW_LNE_end_sequence = 0x01, - DW_LNE_set_address = 0x02, - DW_LNE_define_file = 0x03, - DW_LNE_lo_user = 0x80, - DW_LNE_hi_user = 0xff + DW_LNE_end_sequence = 0x01, + DW_LNE_set_address = 0x02, + DW_LNE_define_file = 0x03, + DW_LNE_set_discriminator = 0x04, + DW_LNE_lo_user = 0x80, + DW_LNE_hi_user = 0xff }; // macro information type diff --git a/src/apps/debugger/dwarf/LineNumberProgram.cpp b/src/apps/debugger/dwarf/LineNumberProgram.cpp index 963f247a7d..922e2e2507 100644 --- a/src/apps/debugger/dwarf/LineNumberProgram.cpp +++ b/src/apps/debugger/dwarf/LineNumberProgram.cpp @@ -99,6 +99,7 @@ LineNumberProgram::GetNextRow(State& state) const state.isBasicBlock = false; state.isPrologueEnd = false; state.isEpilogueBegin = false; + state.discriminator = 0; appendRow = true; } else if (opcode > 0) { // standard opcode @@ -108,6 +109,7 @@ LineNumberProgram::GetNextRow(State& state) const state.isPrologueEnd = false; state.isEpilogueBegin = false; appendRow = true; + state.discriminator = 0; break; case DW_LNS_advance_pc: state.address += dataReader.ReadUnsignedLEB128(0) @@ -175,6 +177,11 @@ LineNumberProgram::GetNextRow(State& state) const state.file = -1; break; } + case DW_LNE_set_discriminator: + { + state.discriminator = dataReader.ReadUnsignedLEB128(0); + break; + } default: WARNING("unsupported extended opcode: %u\n", extendedOpcode); @@ -209,4 +216,5 @@ LineNumberProgram::_SetToInitial(State& state) const state.isPrologueEnd = false; state.isEpilogueBegin = false; state.instructionSet = 0; + state.discriminator = 0; } diff --git a/src/apps/debugger/dwarf/LineNumberProgram.h b/src/apps/debugger/dwarf/LineNumberProgram.h index e1e3a64297..6ed9c7e8c3 100644 --- a/src/apps/debugger/dwarf/LineNumberProgram.h +++ b/src/apps/debugger/dwarf/LineNumberProgram.h @@ -54,6 +54,7 @@ struct LineNumberProgram::State { bool isPrologueEnd; bool isEpilogueBegin; uint32 instructionSet; + uint32 discriminator; // when file is set to -1 const char* explicitFile;