summaryrefslogtreecommitdiff
path: root/third_party/llvm-project/include
diff options
context:
space:
mode:
authorAlon Zakai <azakai@google.com>2020-08-07 10:45:15 -0700
committerGitHub <noreply@github.com>2020-08-07 10:45:15 -0700
commita355a7ea6151d4bd6dbb7895317fba0f3e8e422f (patch)
tree5953bc902dfa2c968ba26b614ef8e39eb14e3f70 /third_party/llvm-project/include
parentcdc38d3162eb62cb313704f264f17d230989084b (diff)
downloadbinaryen-a355a7ea6151d4bd6dbb7895317fba0f3e8e422f.tar.gz
binaryen-a355a7ea6151d4bd6dbb7895317fba0f3e8e422f.tar.bz2
binaryen-a355a7ea6151d4bd6dbb7895317fba0f3e8e422f.zip
DWARF: Fix debug_info references to the abbreviations section (#2997)
The previous code assumed that each compile unit had its own abbreviation section, and they are all in order. That's normally how LLVM emits things, but in #2992 there is a testcase in which linking of object files with IR files somehow ends up with a different order. The proper fix is to track the binary offsets of abbreviations in the abbreviation section. That section is comprised of null-terminated lists, which each CU has an offset to the beginning of. With those offsets, we can match things properly. Add a testcase that crashes without this, to prevent regressions. Fixes #2992 Fixes #3007
Diffstat (limited to 'third_party/llvm-project/include')
-rw-r--r--third_party/llvm-project/include/llvm/ObjectYAML/DWARFYAML.h10
1 files changed, 10 insertions, 0 deletions
diff --git a/third_party/llvm-project/include/llvm/ObjectYAML/DWARFYAML.h b/third_party/llvm-project/include/llvm/ObjectYAML/DWARFYAML.h
index bd4aa2007..818bddede 100644
--- a/third_party/llvm-project/include/llvm/ObjectYAML/DWARFYAML.h
+++ b/third_party/llvm-project/include/llvm/ObjectYAML/DWARFYAML.h
@@ -55,6 +55,16 @@ struct Abbrev {
llvm::dwarf::Tag Tag;
llvm::dwarf::Constants Children;
std::vector<AttributeAbbrev> Attributes;
+ // XXX BINARYEN: Represent the binary offset in the abbreviation section for
+ // this abbreviation's list. The abbreviation section has multiple lists,
+ // each null-terminated, and those lists are what are referred to by compile
+ // units by offset. We need to match the offset in a compile unit to the
+ // abbreviation at that offset (which must be the beginning of an
+ // abbreviation list, that is, either the very first element, or after a null
+ // terminator). All abbreviations in the same list have the same offset
+ // (DWARFAbbreviationDeclarationSet does not track anything else, and we don't
+ // need it).
+ uint64_t ListOffset;
};
struct ARangeDescriptor {