1 //===- LookupResult.cpp -------------------------------------------------*-===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 #include "llvm/DebugInfo/GSYM/LookupResult.h"
10 #include "llvm/ADT/SmallString.h"
11 #include "llvm/DebugInfo/GSYM/ExtractRanges.h"
12 #include "llvm/Support/Path.h"
13 #include "llvm/Support/raw_ostream.h"
18 std::string
LookupResult::getSourceFile(uint32_t Index
) const {
20 if (Index
< Locations
.size()) {
21 if (!Locations
[Index
].Dir
.empty()) {
22 if (Locations
[Index
].Base
.empty()) {
23 Fullpath
= std::string(Locations
[Index
].Dir
);
25 llvm::SmallString
<64> Storage
;
26 llvm::sys::path::append(Storage
, Locations
[Index
].Dir
,
27 Locations
[Index
].Base
);
28 Fullpath
.assign(Storage
.begin(), Storage
.end());
30 } else if (!Locations
[Index
].Base
.empty())
31 Fullpath
= std::string(Locations
[Index
].Base
);
36 raw_ostream
&llvm::gsym::operator<<(raw_ostream
&OS
, const SourceLocation
&SL
) {
39 OS
<< " + " << SL
.Offset
;
40 if (SL
.Dir
.size() || SL
.Base
.size()) {
42 if (!SL
.Dir
.empty()) {
44 if (SL
.Dir
.contains('\\') && !SL
.Dir
.contains('/'))
50 OS
<< "<invalid-file>";
58 raw_ostream
&llvm::gsym::operator<<(raw_ostream
&OS
, const LookupResult
&LR
) {
59 OS
<< HEX64(LR
.LookupAddr
) << ": ";
60 auto NumLocations
= LR
.Locations
.size();
61 for (size_t I
= 0; I
< NumLocations
; ++I
) {
66 const bool IsInlined
= I
+ 1 != NumLocations
;
67 OS
<< LR
.Locations
[I
];
72 if (!LR
.CallSiteFuncRegex
.empty()) {
73 OS
<< "\n CallSites: ";
74 for (size_t i
= 0; i
< LR
.CallSiteFuncRegex
.size(); ++i
) {
77 OS
<< LR
.CallSiteFuncRegex
[i
];