aboutsummaryrefslogtreecommitdiff
path: root/llvm/tools/llvm-gsymutil/llvm-gsymutil.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/tools/llvm-gsymutil/llvm-gsymutil.cpp')
-rw-r--r--llvm/tools/llvm-gsymutil/llvm-gsymutil.cpp47
1 files changed, 30 insertions, 17 deletions
diff --git a/llvm/tools/llvm-gsymutil/llvm-gsymutil.cpp b/llvm/tools/llvm-gsymutil/llvm-gsymutil.cpp
index aed4ae7..654da68 100644
--- a/llvm/tools/llvm-gsymutil/llvm-gsymutil.cpp
+++ b/llvm/tools/llvm-gsymutil/llvm-gsymutil.cpp
@@ -98,7 +98,7 @@ static uint64_t SegmentSize;
static bool Quiet;
static std::vector<uint64_t> LookupAddresses;
static bool LookupAddressesFromStdin;
-static bool StoreMergedFunctionInfo = false;
+static bool UseMergedFunctions = false;
static bool LoadDwarfCallSites = false;
static std::string CallSiteYamlPath;
@@ -181,7 +181,7 @@ static void parseArgs(int argc, char **argv) {
}
LookupAddressesFromStdin = Args.hasArg(OPT_addresses_from_stdin);
- StoreMergedFunctionInfo = Args.hasArg(OPT_merged_functions);
+ UseMergedFunctions = Args.hasArg(OPT_merged_functions);
if (Args.hasArg(OPT_callsites_yaml_file_EQ)) {
CallSiteYamlPath = Args.getLastArgValue(OPT_callsites_yaml_file_EQ);
@@ -380,7 +380,7 @@ static llvm::Error handleObjectFile(ObjectFile &Obj, const std::string &OutFile,
// functions in the first FunctionInfo with that address range. Do this right
// after loading the DWARF data so we don't have to deal with functions from
// the symbol table.
- if (StoreMergedFunctionInfo)
+ if (UseMergedFunctions)
Gsym.prepareMergedFunctions(Out);
// Get the UUID and convert symbol table to GSYM.
@@ -508,24 +508,37 @@ static llvm::Error convertFileToGSYM(OutputAggregator &Out) {
}
static void doLookup(GsymReader &Gsym, uint64_t Addr, raw_ostream &OS) {
- if (auto Result = Gsym.lookup(Addr)) {
- // If verbose is enabled dump the full function info for the address.
- if (Verbose) {
- if (auto FI = Gsym.getFunctionInfo(Addr)) {
- OS << "FunctionInfo for " << HEX64(Addr) << ":\n";
- Gsym.dump(OS, *FI);
- OS << "\nLookupResult for " << HEX64(Addr) << ":\n";
+ if (UseMergedFunctions) {
+ if (auto Results = Gsym.lookupAll(Addr)) {
+ OS << "Found " << Results->size() << " functions at address "
+ << HEX64(Addr) << ":\n";
+ for (size_t i = 0; i < Results->size(); ++i) {
+ OS << " " << Results->at(i);
+
+ if (i != Results->size() - 1)
+ OS << "\n";
}
}
- OS << Result.get();
- } else {
+ } else { /* UseMergedFunctions == false */
+ if (auto Result = Gsym.lookup(Addr)) {
+ // If verbose is enabled dump the full function info for the address.
+ if (Verbose) {
+ if (auto FI = Gsym.getFunctionInfo(Addr)) {
+ OS << "FunctionInfo for " << HEX64(Addr) << ":\n";
+ Gsym.dump(OS, *FI);
+ OS << "\nLookupResult for " << HEX64(Addr) << ":\n";
+ }
+ }
+ OS << Result.get();
+ } else {
+ if (Verbose)
+ OS << "\nLookupResult for " << HEX64(Addr) << ":\n";
+ OS << HEX64(Addr) << ": ";
+ logAllUnhandledErrors(Result.takeError(), OS, "error: ");
+ }
if (Verbose)
- OS << "\nLookupResult for " << HEX64(Addr) << ":\n";
- OS << HEX64(Addr) << ": ";
- logAllUnhandledErrors(Result.takeError(), OS, "error: ");
+ OS << "\n";
}
- if (Verbose)
- OS << "\n";
}
int llvm_gsymutil_main(int argc, char **argv, const llvm::ToolContext &) {