Skip to content

Commit

Permalink
Revert "[llvm-objdump] [NFC] Use a single vector to store all symbol …
Browse files Browse the repository at this point in the history
…mappings."

Breaks CSKY tests.

This reverts commit 948f205.
  • Loading branch information
cjacek committed Aug 2, 2023
1 parent bc08022 commit bf8cce6
Showing 1 changed file with 17 additions and 13 deletions.
30 changes: 17 additions & 13 deletions llvm/tools/llvm-objdump/llvm-objdump.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1116,20 +1116,22 @@ static bool shouldAdjustVA(const SectionRef &Section) {

typedef std::pair<uint64_t, char> MappingSymbolPair;
static char getMappingSymbolKind(ArrayRef<MappingSymbolPair> MappingSymbols,
uint64_t SectionAddress, uint64_t Index) {
auto It = partition_point(MappingSymbols, [=](const MappingSymbolPair &Val) {
return Val.first <= SectionAddress + Index;
});
uint64_t Address) {
auto It =
partition_point(MappingSymbols, [Address](const MappingSymbolPair &Val) {
return Val.first <= Address;
});
// Return zero for any address before the first mapping symbol; this means
// we should use the default disassembly mode, depending on the target.
if (It == MappingSymbols.begin() || (--It)->first < SectionAddress)
if (It == MappingSymbols.begin())
return '\x00';
return It->second;
return (It - 1)->second;
}

static uint64_t dumpARMELFData(uint64_t SectionAddr, uint64_t Index,
uint64_t End, const ObjectFile &Obj,
ArrayRef<uint8_t> Bytes,
ArrayRef<MappingSymbolPair> MappingSymbols,
const MCSubtargetInfo &STI, raw_ostream &OS) {
support::endianness Endian =
Obj.isLittleEndian() ? support::little : support::big;
Expand Down Expand Up @@ -1426,7 +1428,7 @@ disassembleObject(ObjectFile &Obj, const ObjectFile &DbgObj,
// Create a mapping from virtual address to symbol name. This is used to
// pretty print the symbols while disassembling.
std::map<SectionRef, SectionSymbolsTy> AllSymbols;
std::vector<MappingSymbolPair> MappingSymbols;
std::map<SectionRef, SmallVector<MappingSymbolPair, 0>> AllMappingSymbols;
SectionSymbolsTy AbsoluteSymbols;
const StringRef FileName = Obj.getFileName();
const MachOObjectFile *MachO = dyn_cast<const MachOObjectFile>(&Obj);
Expand All @@ -1446,17 +1448,19 @@ disassembleObject(ObjectFile &Obj, const ObjectFile &DbgObj,
// synthesize a section symbol if no symbol is defined at offset 0.
//
// For a mapping symbol, store it within both AllSymbols and
// MappingSymbols. If --show-all-symbols is unspecified, its label will
// AllMappingSymbols. If --show-all-symbols is unspecified, its label will
// not be printed in disassembly listing.
if (getElfSymbolType(Obj, Symbol) != ELF::STT_SECTION &&
hasMappingSymbols(Obj)) {
section_iterator SecI = unwrapOrError(Symbol.getSection(), FileName);
if (SecI != Obj.section_end()) {
uint64_t SectionAddr = SecI->getAddress();
uint64_t Address = cantFail(Symbol.getAddress());
StringRef Name = *NameOrErr;
if (Name.consume_front("$") && Name.size() &&
strchr("adtx", Name[0])) {
MappingSymbols.emplace_back(Address, Name[0]);
AllMappingSymbols[*SecI].emplace_back(Address - SectionAddr,
Name[0]);
AllSymbols[*SecI].push_back(
createSymbolInfo(Obj, Symbol, /*MappingSymbol=*/true));
}
Expand Down Expand Up @@ -1489,8 +1493,6 @@ disassembleObject(ObjectFile &Obj, const ObjectFile &DbgObj,
AbsoluteSymbols.push_back(createSymbolInfo(Obj, Symbol));
}

llvm::sort(MappingSymbols);

if (AllSymbols.empty() && Obj.isELF())
addDynamicElfSymbols(cast<ELFObjectFileBase>(Obj), AllSymbols);

Expand Down Expand Up @@ -1601,6 +1603,8 @@ disassembleObject(ObjectFile &Obj, const ObjectFile &DbgObj,

// Get the list of all the symbols in this section.
SectionSymbolsTy &Symbols = AllSymbols[Section];
auto &MappingSymbols = AllMappingSymbols[Section];
llvm::sort(MappingSymbols);

ArrayRef<uint8_t> Bytes = arrayRefFromStringRef(
unwrapOrError(Section.getContents(), Obj.getFileName()));
Expand Down Expand Up @@ -1894,7 +1898,7 @@ disassembleObject(ObjectFile &Obj, const ObjectFile &DbgObj,
// we need to dump. If the data marker is within a function, it is
// denoted as a word/short etc.
if (!MappingSymbols.empty()) {
char Kind = getMappingSymbolKind(MappingSymbols, SectionAddr, Index);
char Kind = getMappingSymbolKind(MappingSymbols, Index);
DumpARMELFData = Kind == 'd';
if (SecondaryTarget) {
if (Kind == 'a') {
Expand All @@ -1907,7 +1911,7 @@ disassembleObject(ObjectFile &Obj, const ObjectFile &DbgObj,

if (DumpARMELFData) {
Size = dumpARMELFData(SectionAddr, Index, End, Obj, Bytes,
*DT->SubtargetInfo, FOS);
MappingSymbols, *DT->SubtargetInfo, FOS);
} else {
// When -z or --disassemble-zeroes are given we always dissasemble
// them. Otherwise we might want to skip zero bytes we see.
Expand Down

0 comments on commit bf8cce6

Please sign in to comment.