aboutsummaryrefslogtreecommitdiff
path: root/llvm/tools/llvm-objdump
diff options
context:
space:
mode:
authorTim Northover <t.p.northover@gmail.com>2024-08-15 19:19:30 +0100
committerGitHub <noreply@github.com>2024-08-15 11:19:30 -0700
commit52337d5f9d108f04b2ed06069b21a255c232dc1f (patch)
treea09f78a9cb8c698b963b2155abb3cf443daee93d /llvm/tools/llvm-objdump
parent7493ea22f8027dc163ca521a71150d264891853c (diff)
downloadllvm-52337d5f9d108f04b2ed06069b21a255c232dc1f.zip
llvm-52337d5f9d108f04b2ed06069b21a255c232dc1f.tar.gz
llvm-52337d5f9d108f04b2ed06069b21a255c232dc1f.tar.bz2
llvm-objdump: ensure a MachO symbol isn't STAB before looking up secion (#86667)
The section field has been repurposed for some STAB symbol types, and if we blindly look it up we'll produce an error and terminate. Logic already existed Existing stabs test had a section that was in range. Unfortunately I don't know of an easy way to produce stabs entries in LLVM (I thought they died in the 90s until this came up) so I just binary-edited it to cause a failure on existing llvm-objdump.
Diffstat (limited to 'llvm/tools/llvm-objdump')
-rw-r--r--llvm/tools/llvm-objdump/llvm-objdump.cpp20
1 files changed, 10 insertions, 10 deletions
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp
index 768a976..b69d14b 100644
--- a/llvm/tools/llvm-objdump/llvm-objdump.cpp
+++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp
@@ -2885,16 +2885,6 @@ void Dumper::printSymbol(const SymbolRef &Symbol,
reportUniqueWarning(AddrOrErr.takeError());
return;
}
- uint64_t Address = *AddrOrErr;
- section_iterator SecI = unwrapOrError(Symbol.getSection(), FileName);
- if (SecI != O.section_end() && shouldAdjustVA(*SecI))
- Address += AdjustVMA;
- if ((Address < StartAddress) || (Address > StopAddress))
- return;
- SymbolRef::Type Type =
- unwrapOrError(Symbol.getType(), FileName, ArchiveName, ArchitectureName);
- uint32_t Flags =
- unwrapOrError(Symbol.getFlags(), FileName, ArchiveName, ArchitectureName);
// Don't ask a Mach-O STAB symbol for its section unless you know that
// STAB symbol's section field refers to a valid section index. Otherwise
@@ -2913,6 +2903,16 @@ void Dumper::printSymbol(const SymbolRef &Symbol,
: unwrapOrError(Symbol.getSection(), FileName,
ArchiveName, ArchitectureName);
+ uint64_t Address = *AddrOrErr;
+ if (Section != O.section_end() && shouldAdjustVA(*Section))
+ Address += AdjustVMA;
+ if ((Address < StartAddress) || (Address > StopAddress))
+ return;
+ SymbolRef::Type Type =
+ unwrapOrError(Symbol.getType(), FileName, ArchiveName, ArchitectureName);
+ uint32_t Flags =
+ unwrapOrError(Symbol.getFlags(), FileName, ArchiveName, ArchitectureName);
+
StringRef Name;
if (Type == SymbolRef::ST_Debug && Section != O.section_end()) {
if (Expected<StringRef> NameOrErr = Section->getName())