Skip to content

Commit 605915d

Browse files
committed
Reuse the go version from GoOffsetLocator to avoid parsing build info multiple times
Signed-off-by: Dom Del Nano <ddelnano@gmail.com>
1 parent 2456312 commit 605915d

5 files changed

Lines changed: 13 additions & 17 deletions

File tree

src/stirling/source_connectors/socket_tracer/uprobe_manager.cc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -198,9 +198,9 @@ Status UProbeManager::UpdateGoHTTP2SymAddrs(ElfReader* elf_reader, GoOffsetLocat
198198
return Status::OK();
199199
}
200200

201-
Status UProbeManager::UpdateGoTLSSymAddrs(ElfReader* elf_reader, GoOffsetLocator* offset_locator,
201+
Status UProbeManager::UpdateGoTLSSymAddrs(GoOffsetLocator* offset_locator,
202202
const std::vector<int32_t>& pids) {
203-
PX_ASSIGN_OR_RETURN(struct go_tls_symaddrs_t symaddrs, GoTLSSymAddrs(elf_reader, offset_locator));
203+
PX_ASSIGN_OR_RETURN(struct go_tls_symaddrs_t symaddrs, GoTLSSymAddrs(offset_locator));
204204

205205
for (auto& pid : pids) {
206206
PX_RETURN_IF_ERROR(go_tls_symaddrs_map_->SetValue(pid, symaddrs));
@@ -527,7 +527,7 @@ StatusOr<int> UProbeManager::AttachGoTLSUProbes(const std::string& binary,
527527
GoOffsetLocator* offset_locator,
528528
const std::vector<int32_t>& pids) {
529529
// Step 1: Update BPF symbols_map on all new PIDs.
530-
Status s = UpdateGoTLSSymAddrs(elf_reader, offset_locator, pids);
530+
Status s = UpdateGoTLSSymAddrs(offset_locator, pids);
531531
if (!s.ok()) {
532532
// Doesn't appear to be a binary with the mandatory symbols.
533533
// Might not even be a golang binary.

src/stirling/source_connectors/socket_tracer/uprobe_manager.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -583,8 +583,7 @@ class UProbeManager {
583583
const std::vector<int32_t>& pids);
584584
Status UpdateGoHTTP2SymAddrs(obj_tools::ElfReader* elf_reader, GoOffsetLocator* offset_locator,
585585
const std::vector<int32_t>& pids);
586-
Status UpdateGoTLSSymAddrs(obj_tools::ElfReader* elf_reader, GoOffsetLocator* offset_locator,
587-
const std::vector<int32_t>& pids);
586+
Status UpdateGoTLSSymAddrs(GoOffsetLocator* offset_locator, const std::vector<int32_t>& pids);
588587
Status UpdateNodeTLSWrapSymAddrs(int32_t pid, const std::filesystem::path& node_exe,
589588
const SemVer& ver);
590589

src/stirling/source_connectors/socket_tracer/uprobe_symaddrs.cc

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -471,10 +471,9 @@ Status PopulateHTTP2DebugSymbols(GoOffsetLocator* offset_locator, std::string_vi
471471

472472
} // namespace
473473

474-
Status PopulateGoTLSDebugSymbols(ElfReader* elf_reader, GoOffsetLocator* offset_locator,
474+
Status PopulateGoTLSDebugSymbols(GoOffsetLocator* offset_locator,
475475
struct go_tls_symaddrs_t* symaddrs) {
476-
PX_ASSIGN_OR_RETURN(auto build_info, ReadGoBuildInfo(elf_reader));
477-
PX_ASSIGN_OR_RETURN(SemVer go_version, GetSemVer(build_info.first, false));
476+
PX_ASSIGN_OR_RETURN(SemVer go_version, GetSemVer(offset_locator->go_version(), false));
478477
std::string retval0_arg = "~r1";
479478
std::string retval1_arg = "~r2";
480479

@@ -541,11 +540,10 @@ StatusOr<struct go_http2_symaddrs_t> GoHTTP2SymAddrs(ElfReader* elf_reader,
541540
return symaddrs;
542541
}
543542

544-
StatusOr<struct go_tls_symaddrs_t> GoTLSSymAddrs(ElfReader* elf_reader,
545-
GoOffsetLocator* offset_locator) {
543+
StatusOr<struct go_tls_symaddrs_t> GoTLSSymAddrs(GoOffsetLocator* offset_locator) {
546544
struct go_tls_symaddrs_t symaddrs;
547545

548-
PX_RETURN_IF_ERROR(PopulateGoTLSDebugSymbols(elf_reader, offset_locator, &symaddrs));
546+
PX_RETURN_IF_ERROR(PopulateGoTLSDebugSymbols(offset_locator, &symaddrs));
549547

550548
return symaddrs;
551549
}

src/stirling/source_connectors/socket_tracer/uprobe_symaddrs.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ class GoOffsetLocator {
8787
return GetStructMemberOffsetFromOffsets(struct_name, member_name);
8888
}
8989

90+
const std::string& go_version() const { return go_version_; }
91+
9092
private:
9193
StatusOr<std::map<std::string, obj_tools::ArgInfo>> GetFunctionArgInfoFromOffsets(
9294
std::string_view function_symbol_name) {
@@ -175,8 +177,7 @@ StatusOr<struct go_http2_symaddrs_t> GoHTTP2SymAddrs(obj_tools::ElfReader* elf_r
175177
* Uses ELF and DWARF information to return the locations of all relevant symbols for Go TLS
176178
* uprobe deployment.
177179
*/
178-
StatusOr<struct go_tls_symaddrs_t> GoTLSSymAddrs(obj_tools::ElfReader* elf_reader,
179-
GoOffsetLocator* offset_locator);
180+
StatusOr<struct go_tls_symaddrs_t> GoTLSSymAddrs(GoOffsetLocator* offset_locator);
180181

181182
/**
182183
* Detects the version of OpenSSL to return the locations of all relevant symbols for OpenSSL uprobe
@@ -194,8 +195,7 @@ StatusOr<struct openssl_symaddrs_t> OpenSSLSymAddrs(obj_tools::RawFptrManager* f
194195
StatusOr<struct node_tlswrap_symaddrs_t> NodeTLSWrapSymAddrs(const std::filesystem::path& node_exe,
195196
const SemVer& ver);
196197

197-
px::Status PopulateGoTLSDebugSymbols(obj_tools::ElfReader* elf_reader,
198-
GoOffsetLocator* offset_locator,
198+
px::Status PopulateGoTLSDebugSymbols(GoOffsetLocator* offset_locator,
199199
struct go_tls_symaddrs_t* symaddrs);
200200

201201
} // namespace stirling

src/stirling/source_connectors/socket_tracer/uprobe_symaddrs_test.cc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,7 @@ TEST_F(UprobeSymaddrsTest, GoHTTP2SymAddrs) {
8787
}
8888

8989
TEST_F(UprobeSymaddrsTest, GoTLSSymAddrs) {
90-
ASSERT_OK_AND_ASSIGN(struct go_tls_symaddrs_t symaddrs,
91-
GoTLSSymAddrs(elf_reader_.get(), offset_locator_.get()));
90+
ASSERT_OK_AND_ASSIGN(struct go_tls_symaddrs_t symaddrs, GoTLSSymAddrs(offset_locator_.get()));
9291

9392
// Check some member offsets.
9493
// The values may change when golang version is updated.

0 commit comments

Comments
 (0)