aboutsummaryrefslogtreecommitdiff
path: root/llvm/tools/llvm-objdump/llvm-objdump.cpp
diff options
context:
space:
mode:
authorTim Renouf <tim.renouf@amd.com>2021-04-26 18:49:33 +0100
committerTim Renouf <tim.renouf@amd.com>2021-04-26 18:50:21 +0100
commit1128311a19179ceca799ff0fbc4dd206ab56e560 (patch)
treef52ecbca6b7f7cbe16ae65a3474549cf4b363610 /llvm/tools/llvm-objdump/llvm-objdump.cpp
parent50b523cb2ceee4ca7279b4ce22ddb0d0b05df313 (diff)
downloadllvm-1128311a19179ceca799ff0fbc4dd206ab56e560.zip
llvm-1128311a19179ceca799ff0fbc4dd206ab56e560.tar.gz
llvm-1128311a19179ceca799ff0fbc4dd206ab56e560.tar.bz2
[AMDGPU][llvm-objdump] Fix memory leak in recent commit
Hopefully stops sanitizer fail in AMDGPU llvm-objdump test. Change-Id: I7331151d1cb65292bd06b6ae283349fe7231cf6b
Diffstat (limited to 'llvm/tools/llvm-objdump/llvm-objdump.cpp')
-rw-r--r--llvm/tools/llvm-objdump/llvm-objdump.cpp17
1 files changed, 9 insertions, 8 deletions
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp
index 4b2ca65..2d5a728 100644
--- a/llvm/tools/llvm-objdump/llvm-objdump.cpp
+++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp
@@ -975,11 +975,11 @@ collectLocalBranchTargets(ArrayRef<uint8_t> Bytes, const MCInstrAnalysis *MIA,
// Create an MCSymbolizer for the target and add it to the MCDisassembler.
// This is currently only used on AMDGPU, and assumes the format of the
// void * argument passed to AMDGPU's createMCSymbolizer.
-static void addSymbolizer(MCContext &Ctx, const Target *Target,
- StringRef TripleName, MCDisassembler *DisAsm,
- uint64_t SectionAddr, ArrayRef<uint8_t> Bytes,
- SectionSymbolsTy &Symbols,
- std::vector<std::string *> &SynthesizedLabelNames) {
+static void addSymbolizer(
+ MCContext &Ctx, const Target *Target, StringRef TripleName,
+ MCDisassembler *DisAsm, uint64_t SectionAddr, ArrayRef<uint8_t> Bytes,
+ SectionSymbolsTy &Symbols,
+ std::vector<std::unique_ptr<std::string>> &SynthesizedLabelNames) {
std::unique_ptr<MCRelocationInfo> RelInfo(
Target->createMCRelocationInfo(TripleName, Ctx));
@@ -1015,8 +1015,9 @@ static void addSymbolizer(MCContext &Ctx, const Target *Target,
LabelAddrs.begin());
// Add the labels.
for (unsigned LabelNum = 0; LabelNum != LabelAddrs.size(); ++LabelNum) {
- SynthesizedLabelNames.push_back(
- new std::string((Twine("L") + Twine(LabelNum)).str()));
+ std::unique_ptr<std::string> Name(new std::string);
+ *Name = (Twine("L") + Twine(LabelNum)).str();
+ SynthesizedLabelNames.push_back(std::move(Name));
Symbols.push_back(SymbolInfoTy(
LabelAddrs[LabelNum], *SynthesizedLabelNames.back(), ELF::STT_NOTYPE));
}
@@ -1193,7 +1194,7 @@ static void disassembleObject(const Target *TheTarget, const ObjectFile *Obj,
ArrayRef<uint8_t> Bytes = arrayRefFromStringRef(
unwrapOrError(Section.getContents(), Obj->getFileName()));
- std::vector<std::string *> SynthesizedLabelNames;
+ std::vector<std::unique_ptr<std::string>> SynthesizedLabelNames;
if (Obj->isELF() && Obj->getArch() == Triple::amdgcn) {
// AMDGPU disassembler uses symbolizer for printing labels
addSymbolizer(Ctx, TheTarget, TripleName, DisAsm, SectionAddr, Bytes,