[llvm] r353846 - [llvm-dwp] Abort when dwo_id is unset
Jordan Rupprecht via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 12 07:01:07 PST 2019
Author: rupprecht
Date: Tue Feb 12 07:01:07 2019
New Revision: 353846
URL: http://llvm.org/viewvc/llvm-project?rev=353846&view=rev
Log:
[llvm-dwp] Abort when dwo_id is unset
Summary:
An empty dwo_id indicates a degenerate .dwo file that should not have been generated in the first place. Instead of discovering this error later when merging with another degenerate .dwo file, print an error immediately when noticing an unset dwo_id, including the filename of the offending file.
Test case created by compiling a trivial file w/ `-fno-split-dwarf-inlining -gmlt -gsplit-dwarf -c` prior to r353771
Reviewers: dblaikie
Reviewed By: dblaikie
Subscribers: jdoerfert, aprantl, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D58085
Added:
llvm/trunk/test/tools/llvm-dwp/Inputs/missing_dwo_id.dwo (with props)
llvm/trunk/test/tools/llvm-dwp/X86/missing_dwo_id.test
Modified:
llvm/trunk/test/tools/llvm-dwp/X86/invalid_string_form.test
llvm/trunk/test/tools/llvm-dwp/X86/non_cu_top_level.test
llvm/trunk/tools/llvm-dwp/llvm-dwp.cpp
Added: llvm/trunk/test/tools/llvm-dwp/Inputs/missing_dwo_id.dwo
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-dwp/Inputs/missing_dwo_id.dwo?rev=353846&view=auto
==============================================================================
Binary file - no diff available.
Propchange: llvm/trunk/test/tools/llvm-dwp/Inputs/missing_dwo_id.dwo
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Modified: llvm/trunk/test/tools/llvm-dwp/X86/invalid_string_form.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-dwp/X86/invalid_string_form.test?rev=353846&r1=353845&r2=353846&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-dwp/X86/invalid_string_form.test (original)
+++ llvm/trunk/test/tools/llvm-dwp/X86/invalid_string_form.test Tue Feb 12 07:01:07 2019
@@ -1,3 +1,3 @@
RUN: not llvm-dwp %p/../Inputs/invalid_string_form.dwo -o %t 2>&1 | FileCheck %s
-CHECK: error: string field encoded without DW_FORM_string or DW_FORM_GNU_str_index
+CHECK: error: {{.*}}invalid_string_form.dwo': string field encoded without DW_FORM_string or DW_FORM_GNU_str_index
Added: llvm/trunk/test/tools/llvm-dwp/X86/missing_dwo_id.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-dwp/X86/missing_dwo_id.test?rev=353846&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-dwp/X86/missing_dwo_id.test (added)
+++ llvm/trunk/test/tools/llvm-dwp/X86/missing_dwo_id.test Tue Feb 12 07:01:07 2019
@@ -0,0 +1,3 @@
+RUN: not llvm-dwp %p/../Inputs/missing_dwo_id.dwo -o %t 2>&1 | FileCheck %s
+
+CHECK: error: {{.*}}missing_dwo_id.dwo': compile unit missing dwo_id
Modified: llvm/trunk/test/tools/llvm-dwp/X86/non_cu_top_level.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-dwp/X86/non_cu_top_level.test?rev=353846&r1=353845&r2=353846&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-dwp/X86/non_cu_top_level.test (original)
+++ llvm/trunk/test/tools/llvm-dwp/X86/non_cu_top_level.test Tue Feb 12 07:01:07 2019
@@ -1,3 +1,3 @@
RUN: not llvm-dwp %p/../Inputs/non_cu_top_level.dwo -o %t 2>&1 | FileCheck %s
-CHECK: error: top level DIE is not a compile unit
+CHECK: error: {{.*}}non_cu_top_level.dwo': top level DIE is not a compile unit
Modified: llvm/trunk/tools/llvm-dwp/llvm-dwp.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-dwp/llvm-dwp.cpp?rev=353846&r1=353845&r2=353846&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-dwp/llvm-dwp.cpp (original)
+++ llvm/trunk/tools/llvm-dwp/llvm-dwp.cpp Tue Feb 12 07:01:07 2019
@@ -13,6 +13,7 @@
#include "DWPError.h"
#include "DWPStringPool.h"
#include "llvm/ADT/MapVector.h"
+#include "llvm/ADT/Optional.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/DebugInfo/DWARF/DWARFContext.h"
#include "llvm/DebugInfo/DWARF/DWARFFormValue.h"
@@ -159,6 +160,7 @@ static Expected<CompileUnitIdentifiers>
uint32_t Name;
dwarf::Form Form;
CompileUnitIdentifiers ID;
+ Optional<uint64_t> Signature = None;
while ((Name = AbbrevData.getULEB128(&AbbrevOffset)) |
(Form = static_cast<dwarf::Form>(AbbrevData.getULEB128(&AbbrevOffset))) &&
(Name != 0 || Form != 0)) {
@@ -180,13 +182,16 @@ static Expected<CompileUnitIdentifiers>
break;
}
case dwarf::DW_AT_GNU_dwo_id:
- ID.Signature = InfoData.getU64(&Offset);
+ Signature = InfoData.getU64(&Offset);
break;
default:
DWARFFormValue::skipValue(Form, InfoData, &Offset,
dwarf::FormParams({Version, AddrSize, Format}));
}
}
+ if (!Signature)
+ return make_error<DWPError>("compile unit missing dwo_id");
+ ID.Signature = *Signature;
return ID;
}
@@ -560,7 +565,7 @@ static Error write(MCStreamer &Out, Arra
Expected<CompileUnitIdentifiers> EID = getCUIdentifiers(
AbbrevSection, InfoSection, CurStrOffsetSection, CurStrSection);
if (!EID)
- return EID.takeError();
+ return createFileError(Input, EID.takeError());
const auto &ID = *EID;
auto P = IndexEntries.insert(std::make_pair(ID.Signature, CurEntry));
if (!P.second)
@@ -588,7 +593,7 @@ static Error write(MCStreamer &Out, Arra
getSubsection(CurStrOffsetSection, E, DW_SECT_STR_OFFSETS),
CurStrSection);
if (!EID)
- return EID.takeError();
+ return createFileError(Input, EID.takeError());
const auto &ID = *EID;
if (!P.second)
return buildDuplicateError(*P.first, ID, Input);
More information about the llvm-commits
mailing list