diff --git a/.github/workflows/synclibbpf.yaml b/.github/workflows/synclibbpf.yaml
index 45b6d2aa5..38d3a8f4a 100644
--- a/.github/workflows/synclibbpf.yaml
+++ b/.github/workflows/synclibbpf.yaml
@@ -17,7 +17,7 @@ jobs:
       - name: Setup Go
         uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5
         with:
-          go-version: "~1.23.1"
+          go-version: "~1.24.0"
           check-latest: true
           cache-dependency-path: "**/go.sum"
       - id: sync
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 763c4b379..3afaca3ff 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -33,6 +33,10 @@ OpenTelemetry Go Automatic Instrumentation adheres to [Semantic Versioning](http
   The `auto` package no longer supports process discovery (note: the built binary (`auto/cli`) still supports process discovery).
   Once a target process has been identified, use `WithPID` to configure `Instrumentation` instead. ([#1890](https://github.com/open-telemetry/opentelemetry-go-instrumentation/pull/1890))
 
+### Fixed
+
+- Fix spans parsing from eBPF for the legacy (go version < 1.24 otel-go < 1.33) otel global instrumentation. ([#1960](https://github.com/open-telemetry/opentelemetry-go-instrumentation/pull/1960))
+
 ## [v0.21.0] - 2025-02-18
 
 > [!WARNING]  
diff --git a/Makefile b/Makefile
index c770c4fb5..1d2f857e4 100644
--- a/Makefile
+++ b/Makefile
@@ -140,15 +140,6 @@ docker-build:
 docker-build-base:
 	docker buildx build -t $(IMG_NAME_BASE) --target base .
 
-.PHONY: sample-app/nethttp sample-app/gin sample-app/databasesql sample-app/nethttp-custom sample-app/otelglobal sample-app/autosdk sample-app/kafka-go
-sample-app/%: LIBRARY=$*
-sample-app/%:
-	if [ -f ./internal/test/e2e/$(LIBRARY)/build.sh ]; then \
-		./internal/test/e2e/$(LIBRARY)/build.sh; \
-	else \
-		cd internal/test/e2e/$(LIBRARY) && docker build -t sample-app . ;\
-	fi
-
 LIBBPF_VERSION ?= "< 1.5, >= 1.4.7"
 LIBBPF_DEST ?= "$(REPODIR)/internal/include/libbpf"
 .PHONY: synclibbpf
@@ -204,7 +195,12 @@ fixture-otelglobal: fixtures/otelglobal
 fixture-autosdk: fixtures/autosdk
 fixture-kafka-go: fixtures/kafka-go
 fixtures/%: LIBRARY=$*
-fixtures/%: docker-build sample-app/%
+fixtures/%: docker-build
+	if [ -f ./internal/test/e2e/$(LIBRARY)/build.sh ]; then \
+		./internal/test/e2e/$(LIBRARY)/build.sh; \
+	else \
+		cd internal/test/e2e/$(LIBRARY) && docker build -t sample-app . ;\
+	fi
 	kind create cluster
 	kind load docker-image otel-go-instrumentation sample-app
 	helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
diff --git a/examples/httpPlusdb/Dockerfile b/examples/httpPlusdb/Dockerfile
index 3100d7dbe..a02c689b0 100644
--- a/examples/httpPlusdb/Dockerfile
+++ b/examples/httpPlusdb/Dockerfile
@@ -1,4 +1,4 @@
-FROM golang:1.24.1@sha256:c5adecdb7b3f8c5ca3c88648a861882849cc8b02fed68ece31e25de88ad13418
+FROM golang:1.24.1@sha256:8678013a2add364dc3d5df2acc2b36893fbbd60ebafa5d5149bc22158512f021
 WORKDIR /app
 COPY ./*.go .
 RUN go mod init main
diff --git a/examples/kafka-go/Dockerfile b/examples/kafka-go/Dockerfile
index d3f58f5af..a1dfb0c35 100644
--- a/examples/kafka-go/Dockerfile
+++ b/examples/kafka-go/Dockerfile
@@ -1,4 +1,4 @@
-FROM golang:1.24.1@sha256:c5adecdb7b3f8c5ca3c88648a861882849cc8b02fed68ece31e25de88ad13418
+FROM golang:1.24.1@sha256:8678013a2add364dc3d5df2acc2b36893fbbd60ebafa5d5149bc22158512f021
 WORKDIR /app
 COPY . .
 ARG BINARY_NAME
diff --git a/examples/rolldice/docker-compose.yaml b/examples/rolldice/docker-compose.yaml
index 3f0c3bed8..5b88b1871 100644
--- a/examples/rolldice/docker-compose.yaml
+++ b/examples/rolldice/docker-compose.yaml
@@ -5,7 +5,7 @@ networks:
 
 services:
   jaeger:
-    image: jaegertracing/jaeger:2.3.0@sha256:6f578f9f7e3cfadf2f46a3c4ceb52614b8520b519eedcb465d63a08136b5cd24
+    image: jaegertracing/jaeger:2.4.0@sha256:81afdc6ae85f52a5f063c80fcdb201798bb283d81067211121291b64026c19c2
     ports:
       - "16686:16686"   # Web HTTP
     restart: unless-stopped
diff --git a/examples/rolldice/frontend/Dockerfile b/examples/rolldice/frontend/Dockerfile
index 3d0a0fc72..e9fbaa069 100644
--- a/examples/rolldice/frontend/Dockerfile
+++ b/examples/rolldice/frontend/Dockerfile
@@ -1,4 +1,4 @@
-FROM golang:1.24.1@sha256:c5adecdb7b3f8c5ca3c88648a861882849cc8b02fed68ece31e25de88ad13418
+FROM golang:1.24.1@sha256:8678013a2add364dc3d5df2acc2b36893fbbd60ebafa5d5149bc22158512f021
 
 WORKDIR /usr/src/user
 
diff --git a/examples/rolldice/user/Dockerfile b/examples/rolldice/user/Dockerfile
index 3500961ee..4383e719e 100644
--- a/examples/rolldice/user/Dockerfile
+++ b/examples/rolldice/user/Dockerfile
@@ -1,4 +1,4 @@
-FROM golang:1.24.1@sha256:c5adecdb7b3f8c5ca3c88648a861882849cc8b02fed68ece31e25de88ad13418
+FROM golang:1.24.1@sha256:8678013a2add364dc3d5df2acc2b36893fbbd60ebafa5d5149bc22158512f021
 
 WORKDIR /usr/src/user
 
diff --git a/go.mod b/go.mod
index 40a9beea3..7182b925d 100644
--- a/go.mod
+++ b/go.mod
@@ -25,7 +25,7 @@ require (
 	github.com/stretchr/testify v1.10.0
 	github.com/xwb1989/sqlparser v0.0.0-20180606152119-120387863bf2
 	go.opentelemetry.io/collector/pdata v1.27.0
-	go.opentelemetry.io/contrib/exporters/autoexport v0.59.0
+	go.opentelemetry.io/contrib/exporters/autoexport v0.60.0
 	go.opentelemetry.io/otel v1.35.0
 	go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.35.0
 	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.35.0
@@ -57,7 +57,7 @@ require (
 	github.com/prometheus/common v0.62.0 // indirect
 	github.com/prometheus/procfs v0.15.1 // indirect
 	go.opentelemetry.io/auto/sdk v1.1.0 // indirect
-	go.opentelemetry.io/contrib/bridges/prometheus v0.59.0 // indirect
+	go.opentelemetry.io/contrib/bridges/prometheus v0.60.0 // indirect
 	go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.11.0 // indirect
 	go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.11.0 // indirect
 	go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.35.0 // indirect
@@ -75,8 +75,8 @@ require (
 	go.uber.org/multierr v1.11.0 // indirect
 	golang.org/x/net v0.37.0 // indirect
 	golang.org/x/text v0.23.0 // indirect
-	google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb // indirect
-	google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb // indirect
+	google.golang.org/genproto/googleapis/api v0.0.0-20250311190419-81fb87f6b8bf // indirect
+	google.golang.org/genproto/googleapis/rpc v0.0.0-20250311190419-81fb87f6b8bf // indirect
 	google.golang.org/protobuf v1.36.5 // indirect
 )
 
diff --git a/go.sum b/go.sum
index 536f85bb9..9803b0922 100644
--- a/go.sum
+++ b/go.sum
@@ -80,10 +80,10 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
 github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 go.opentelemetry.io/collector/pdata v1.27.0 h1:66yI7FYkUDia74h48Fd2/KG2Vk8DxZnGw54wRXykCEU=
 go.opentelemetry.io/collector/pdata v1.27.0/go.mod h1:18e8/xDZsqyj00h/5HM5GLdJgBzzG9Ei8g9SpNoiMtI=
-go.opentelemetry.io/contrib/bridges/prometheus v0.59.0 h1:HY2hJ7yn3KuEBBBsKxvF3ViSmzLwsgeNvD+0utRMgzc=
-go.opentelemetry.io/contrib/bridges/prometheus v0.59.0/go.mod h1:H4H7vs8766kwFnOZVEGMJFVF+phpBSmTckvvNRdJeDI=
-go.opentelemetry.io/contrib/exporters/autoexport v0.59.0 h1:dKhAFwh7SSoOw+gwMtSv+XLkUGTFAwAGMT3X3XSE4FA=
-go.opentelemetry.io/contrib/exporters/autoexport v0.59.0/go.mod h1:fPl+qlrhRdRntIpPs9JoQ0iBKAsnH5VkgppU1f9kyF4=
+go.opentelemetry.io/contrib/bridges/prometheus v0.60.0 h1:x7sPooQCwSg27SjtQee8GyIIRTQcF4s7eSkac6F2+VA=
+go.opentelemetry.io/contrib/bridges/prometheus v0.60.0/go.mod h1:4K5UXgiHxV484efGs42ejD7E2J/sIlepYgdGoPXe7hE=
+go.opentelemetry.io/contrib/exporters/autoexport v0.60.0 h1:GuQXpvSXNjpswpweIem84U9BNauqHHi2w1GtNAalvpM=
+go.opentelemetry.io/contrib/exporters/autoexport v0.60.0/go.mod h1:CkmxekdHco4d7thFJNPQ7Mby4jMBgZUclnrxT4e+ryk=
 go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ=
 go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y=
 go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.11.0 h1:HMUytBT3uGhPKYY/u/G5MR9itrlSO2SMOsSD3Tk3k7A=
@@ -161,10 +161,10 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb h1:p31xT4yrYrSM/G4Sn2+TNUkVhFCbG9y8itM2S6Th950=
-google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb h1:TLPQVbx1GJ8VKZxz52VAxl1EBgKXXbTiU9Fc5fZeLn4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I=
+google.golang.org/genproto/googleapis/api v0.0.0-20250311190419-81fb87f6b8bf h1:BdIVRm+fyDUn8lrZLPSlBCfM/YKDwUBYgDoLv9+DYo0=
+google.golang.org/genproto/googleapis/api v0.0.0-20250311190419-81fb87f6b8bf/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250311190419-81fb87f6b8bf h1:dHDlF3CWxQkefK9IJx+O8ldY0gLygvrlYRBNbPqDWuY=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250311190419-81fb87f6b8bf/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I=
 google.golang.org/grpc v1.71.0 h1:kF77BGdPTQ4/JZWMlb9VpJ5pa25aqvVqogsxNHHdeBg=
 google.golang.org/grpc v1.71.0/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec=
 google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM=
diff --git a/instrumentation.go b/instrumentation.go
index bdc7d0e61..4d241c0c4 100644
--- a/instrumentation.go
+++ b/instrumentation.go
@@ -53,9 +53,7 @@ const (
 // Instrumentation manages and controls all OpenTelemetry Go
 // auto-instrumentation.
 type Instrumentation struct {
-	target   *process.Info
-	analyzer *process.Analyzer
-	manager  *instrumentation.Manager
+	manager *instrumentation.Manager
 
 	stopMu  sync.Mutex
 	stop    context.CancelFunc
@@ -97,42 +95,17 @@ func NewInstrumentation(ctx context.Context, opts ...InstrumentationOption) (*In
 	}
 
 	cp := convertConfigProvider(c.cp)
-	mngr, err := instrumentation.NewManager(c.logger, ctrl, cp, p...)
+	mngr, err := instrumentation.NewManager(c.logger, ctrl, c.pid, cp, p...)
 	if err != nil {
 		return nil, err
 	}
 
-	pa := process.NewAnalyzer(c.logger, c.pid)
-	pi, err := pa.Analyze(mngr.GetRelevantFuncs())
-	if err != nil {
-		return nil, err
-	}
-
-	alloc, err := process.Allocate(c.logger, c.pid)
-	if err != nil {
-		return nil, err
-	}
-	pi.Allocation = alloc
-
-	c.logger.Info(
-		"target process analysis completed",
-		"pid", pi.ID,
-		"go_version", pi.GoVersion,
-		"dependencies", pi.Modules,
-		"total_functions_found", len(pi.Functions),
-	)
-	mngr.FilterUnusedProbes(pi)
-
-	return &Instrumentation{
-		target:   pi,
-		analyzer: pa,
-		manager:  mngr,
-	}, nil
+	return &Instrumentation{manager: mngr}, nil
 }
 
 // Load loads and attaches the relevant probes to the target process.
 func (i *Instrumentation) Load(ctx context.Context) error {
-	return i.manager.Load(ctx, i.target)
+	return i.manager.Load(ctx)
 }
 
 // Run starts the instrumentation. It must be called after [Instrumentation.Load].
diff --git a/internal/pkg/instrumentation/bpf/go.opentelemetry.io/otel/traceglobal/bpf/probe.bpf.c b/internal/pkg/instrumentation/bpf/go.opentelemetry.io/otel/traceglobal/bpf/probe.bpf.c
index cca88512f..9fcd1f7e8 100644
--- a/internal/pkg/instrumentation/bpf/go.opentelemetry.io/otel/traceglobal/bpf/probe.bpf.c
+++ b/internal/pkg/instrumentation/bpf/go.opentelemetry.io/otel/traceglobal/bpf/probe.bpf.c
@@ -46,11 +46,11 @@ typedef struct tracer_id {
 } tracer_id_t;
 
 struct control_t {
-    u32 kind; // Required to be 1.
+    u64 kind; // Required to be 1.
 };
 
 struct otel_span_t {
-    u32 kind; // Required to be 0.
+    u64 kind; // Required to be 0.
     BASE_SPAN_PROPERTIES
     struct span_name_t span_name;
     otel_status_t status;
@@ -622,6 +622,7 @@ int uprobe_End(struct pt_regs *ctx) {
         return 0;
     }
     span->end_time = bpf_ktime_get_ns();
+    span->kind = 0;
     stop_tracking_span(&span->sc, &span->psc);
 
     output_span_event(ctx, span, sizeof(*span), &span->sc);
diff --git a/internal/pkg/instrumentation/bpf/go.opentelemetry.io/otel/traceglobal/bpf_arm64_bpfel.go b/internal/pkg/instrumentation/bpf/go.opentelemetry.io/otel/traceglobal/bpf_arm64_bpfel.go
index bcfb0a47e..b513ed20b 100644
--- a/internal/pkg/instrumentation/bpf/go.opentelemetry.io/otel/traceglobal/bpf_arm64_bpfel.go
+++ b/internal/pkg/instrumentation/bpf/go.opentelemetry.io/otel/traceglobal/bpf_arm64_bpfel.go
@@ -13,8 +13,7 @@ import (
 )
 
 type bpfOtelSpanT struct {
-	Kind      uint32
-	_         [4]byte
+	Kind      uint64
 	StartTime uint64
 	EndTime   uint64
 	Sc        bpfSpanContext
diff --git a/internal/pkg/instrumentation/bpf/go.opentelemetry.io/otel/traceglobal/bpf_x86_bpfel.go b/internal/pkg/instrumentation/bpf/go.opentelemetry.io/otel/traceglobal/bpf_x86_bpfel.go
index 6c88185f7..31a29a6db 100644
--- a/internal/pkg/instrumentation/bpf/go.opentelemetry.io/otel/traceglobal/bpf_x86_bpfel.go
+++ b/internal/pkg/instrumentation/bpf/go.opentelemetry.io/otel/traceglobal/bpf_x86_bpfel.go
@@ -13,8 +13,7 @@ import (
 )
 
 type bpfOtelSpanT struct {
-	Kind      uint32
-	_         [4]byte
+	Kind      uint64
 	StartTime uint64
 	EndTime   uint64
 	Sc        bpfSpanContext
diff --git a/internal/pkg/instrumentation/bpf/go.opentelemetry.io/otel/traceglobal/probe.go b/internal/pkg/instrumentation/bpf/go.opentelemetry.io/otel/traceglobal/probe.go
index bad9b4f57..5b72cc882 100644
--- a/internal/pkg/instrumentation/bpf/go.opentelemetry.io/otel/traceglobal/probe.go
+++ b/internal/pkg/instrumentation/bpf/go.opentelemetry.io/otel/traceglobal/probe.go
@@ -210,7 +210,7 @@ func New(logger *slog.Logger) probe.Probe {
 	}
 }
 
-type recordKind uint32
+type recordKind uint64
 
 const (
 	recordKindTelemetry recordKind = iota
@@ -236,7 +236,6 @@ func (c *converter) decodeEvent(record perf.Record) (*event, error) {
 	switch kind {
 	case recordKindTelemetry:
 		e = new(event)
-		reader.Reset(record.RawSample)
 		err = binary.Read(reader, binary.LittleEndian, e)
 	case recordKindConrol:
 		if c.uprobeNewStart != nil {
diff --git a/internal/pkg/instrumentation/manager.go b/internal/pkg/instrumentation/manager.go
index 875f30d53..4a95d1db3 100644
--- a/internal/pkg/instrumentation/manager.go
+++ b/internal/pkg/instrumentation/manager.go
@@ -55,7 +55,7 @@ type Manager struct {
 }
 
 // NewManager returns a new [Manager].
-func NewManager(logger *slog.Logger, otelController *opentelemetry.Controller, cp ConfigProvider, probes ...probe.Probe) (*Manager, error) {
+func NewManager(logger *slog.Logger, otelController *opentelemetry.Controller, pid process.ID, cp ConfigProvider, probes ...probe.Probe) (*Manager, error) {
 	m := &Manager{
 		logger:         logger,
 		probes:         make(map[probe.ID]probe.Probe),
@@ -63,11 +63,33 @@ func NewManager(logger *slog.Logger, otelController *opentelemetry.Controller, c
 		cp:             cp,
 	}
 
-	err := m.registerProbes(probes)
+	funcs := make(map[string]any)
+	for _, p := range probes {
+		if err := m.registerProbe(p); err != nil {
+			return nil, err
+		}
+
+		for _, s := range p.Manifest().Symbols {
+			funcs[s.Symbol] = nil
+		}
+	}
+
+	var err error
+	m.proc, err = process.NewInfo(pid, funcs)
 	if err != nil {
 		return nil, err
 	}
 
+	alloc, err := process.Allocate(logger, pid)
+	if err != nil {
+		return nil, err
+	}
+	m.proc.Allocation = alloc
+
+	m.logger.Info("loaded process info", "process", m.proc)
+
+	m.filterUnusedProbes()
+
 	return m, nil
 }
 
@@ -103,23 +125,11 @@ func (m *Manager) registerProbe(p probe.Probe) error {
 	return nil
 }
 
-// GetRelevantFuncs returns the instrumented functions for all managed probes.
-func (m *Manager) GetRelevantFuncs() map[string]interface{} {
-	funcsMap := make(map[string]interface{})
-	for _, i := range m.probes {
-		for _, s := range i.Manifest().Symbols {
-			funcsMap[s.Symbol] = nil
-		}
-	}
-
-	return funcsMap
-}
-
-// FilterUnusedProbes filterers probes whose functions are already instrumented
+// filterUnusedProbes filterers probes whose functions are already instrumented
 // out of the Manager.
-func (m *Manager) FilterUnusedProbes(target *process.Info) {
+func (m *Manager) filterUnusedProbes() {
 	existingFuncMap := make(map[string]interface{})
-	for _, f := range target.Functions {
+	for _, f := range m.proc.Functions {
 		existingFuncMap[f.Name] = nil
 	}
 
@@ -237,14 +247,14 @@ func (m *Manager) ConfigLoop(ctx context.Context) {
 	}
 }
 
-func (m *Manager) Load(ctx context.Context, target *process.Info) error {
+func (m *Manager) Load(ctx context.Context) error {
 	if len(m.probes) == 0 {
 		return errors.New("no instrumentation for target process")
 	}
 	if m.cp == nil {
 		return errors.New("no config provider set")
 	}
-	if target == nil {
+	if m.proc == nil {
 		return errors.New("target details not set - load is called on non-initialized instrumentation")
 	}
 	m.stateMu.Lock()
@@ -255,12 +265,11 @@ func (m *Manager) Load(ctx context.Context, target *process.Info) error {
 	}
 
 	m.currentConfig = m.cp.InitialConfig(ctx)
-	err := m.loadProbes(target)
+	err := m.loadProbes()
 	if err != nil {
 		return err
 	}
 
-	m.proc = target
 	m.state = managerStateLoaded
 
 	return nil
@@ -330,7 +339,7 @@ func (m *Manager) Stop() error {
 	defer m.probeMu.Unlock()
 
 	m.logger.Debug("Shutting down all probes")
-	err := m.cleanup(m.proc)
+	err := m.cleanup()
 
 	// Wait for all probes to stop.
 	m.runningProbesWG.Wait()
@@ -339,19 +348,19 @@ func (m *Manager) Stop() error {
 	return err
 }
 
-func (m *Manager) loadProbes(target *process.Info) error {
+func (m *Manager) loadProbes() error {
 	// Remove resource limits for kernels <5.11.
 	if err := rlimitRemoveMemlock(); err != nil {
 		return err
 	}
 
-	exe, err := openExecutable(target.ID.ExePath())
+	exe, err := openExecutable(m.proc.ID.ExePath())
 	if err != nil {
 		return err
 	}
 	m.exe = exe
 
-	if err := m.mount(target); err != nil {
+	if err := m.mount(); err != nil {
 		return err
 	}
 
@@ -359,10 +368,10 @@ func (m *Manager) loadProbes(target *process.Info) error {
 	for name, i := range m.probes {
 		if isProbeEnabled(name, m.currentConfig) {
 			m.logger.Info("loading probe", "name", name)
-			err := i.Load(exe, target, m.currentConfig.SamplingConfig)
+			err := i.Load(exe, m.proc, m.currentConfig.SamplingConfig)
 			if err != nil {
 				m.logger.Error("error while loading probes, cleaning up", "error", err, "name", name)
-				return errors.Join(err, m.cleanup(target))
+				return errors.Join(err, m.cleanup())
 			}
 		}
 	}
@@ -371,16 +380,16 @@ func (m *Manager) loadProbes(target *process.Info) error {
 	return nil
 }
 
-func (m *Manager) mount(target *process.Info) error {
-	if target.Allocation != nil {
-		m.logger.Debug("Mounting bpffs", "allocation", target.Allocation)
+func (m *Manager) mount() error {
+	if m.proc.Allocation != nil {
+		m.logger.Debug("Mounting bpffs", "allocation", m.proc.Allocation)
 	} else {
 		m.logger.Debug("Mounting bpffs")
 	}
-	return bpffsMount(target)
+	return bpffsMount(m.proc)
 }
 
-func (m *Manager) cleanup(target *process.Info) error {
+func (m *Manager) cleanup() error {
 	ctx := context.Background()
 	err := m.cp.Shutdown(context.Background())
 	for _, i := range m.probes {
@@ -394,14 +403,5 @@ func (m *Manager) cleanup(target *process.Info) error {
 	}
 
 	m.logger.Debug("Cleaning bpffs")
-	return errors.Join(err, bpffsCleanup(target))
-}
-
-func (m *Manager) registerProbes(probes []probe.Probe) error {
-	for _, p := range probes {
-		if err := m.registerProbe(p); err != nil {
-			return err
-		}
-	}
-	return nil
+	return errors.Join(err, bpffsCleanup(m.proc))
 }
diff --git a/internal/pkg/instrumentation/manager_load_test.go b/internal/pkg/instrumentation/manager_load_test.go
index 3e9b93184..24258c1ce 100644
--- a/internal/pkg/instrumentation/manager_load_test.go
+++ b/internal/pkg/instrumentation/manager_load_test.go
@@ -22,8 +22,11 @@ import (
 	grpcServer "go.opentelemetry.io/auto/internal/pkg/instrumentation/bpf/google.golang.org/grpc/server"
 	httpClient "go.opentelemetry.io/auto/internal/pkg/instrumentation/bpf/net/http/client"
 	httpServer "go.opentelemetry.io/auto/internal/pkg/instrumentation/bpf/net/http/server"
+	"go.opentelemetry.io/auto/internal/pkg/instrumentation/probe"
 	"go.opentelemetry.io/auto/internal/pkg/instrumentation/testutils"
 	"go.opentelemetry.io/auto/internal/pkg/instrumentation/utils"
+	"go.opentelemetry.io/auto/internal/pkg/process"
+	"go.opentelemetry.io/auto/internal/pkg/process/binary"
 )
 
 func TestLoadProbes(t *testing.T) {
@@ -51,10 +54,9 @@ func TestLoadProbes(t *testing.T) {
 	}
 }
 
-func fakeManager(t *testing.T) *Manager {
+func fakeManager(t *testing.T, fnNames ...string) *Manager {
 	logger := slog.Default()
-	m, err := NewManager(
-		logger, nil, NewNoopConfigProvider(nil),
+	probes := []probe.Probe{
 		grpcClient.New(logger, ""),
 		grpcServer.New(logger, ""),
 		httpServer.New(logger, ""),
@@ -64,9 +66,27 @@ func fakeManager(t *testing.T) *Manager {
 		kafkaConsumer.New(logger, ""),
 		autosdk.New(logger),
 		otelTraceGlobal.New(logger),
-	)
-	assert.NoError(t, err)
-	assert.NotNil(t, m)
+	}
+	ver := semver.New(1, 20, 0, "", "")
+	var fn []*binary.Func
+	for _, name := range fnNames {
+		fn = append(fn, &binary.Func{Name: name})
+	}
+	m := &Manager{
+		logger: slog.Default(),
+		cp:     NewNoopConfigProvider(nil),
+		probes: make(map[probe.ID]probe.Probe),
+		proc: &process.Info{
+			ID:        1,
+			Functions: fn,
+			GoVersion: ver,
+			Modules:   map[string]*semver.Version{},
+		},
+	}
+	for _, p := range probes {
+		m.probes[p.Manifest().ID] = p
+	}
+	m.filterUnusedProbes()
 
 	return m
 }
diff --git a/internal/pkg/instrumentation/manager_test.go b/internal/pkg/instrumentation/manager_test.go
index 2b68bcae0..1b0670a2f 100644
--- a/internal/pkg/instrumentation/manager_test.go
+++ b/internal/pkg/instrumentation/manager_test.go
@@ -39,72 +39,32 @@ import (
 )
 
 func TestProbeFiltering(t *testing.T) {
-	ver := semver.New(1, 20, 0, "", "")
-
 	t.Run("empty target details", func(t *testing.T) {
 		m := fakeManager(t)
-
-		info := process.Info{
-			ID:        1,
-			Functions: []*binary.Func{},
-			GoVersion: ver,
-			Modules:   map[string]*semver.Version{},
-		}
-		m.FilterUnusedProbes(&info)
 		assert.Empty(t, m.probes)
 	})
 
 	t.Run("only HTTP client target details", func(t *testing.T) {
-		m := fakeManager(t)
-
-		httpFuncs := []*binary.Func{
-			{Name: "net/http.(*Transport).roundTrip"},
-		}
-
-		info := process.Info{
-			ID:        1,
-			Functions: httpFuncs,
-			GoVersion: ver,
-			Modules:   map[string]*semver.Version{},
-		}
-		m.FilterUnusedProbes(&info)
+		m := fakeManager(t, "net/http.(*Transport).roundTrip")
 		assert.Len(t, m.probes, 1) // one function, single probe
 	})
 
 	t.Run("HTTP server and client target details", func(t *testing.T) {
-		m := fakeManager(t)
-
-		httpFuncs := []*binary.Func{
-			{Name: "net/http.(*Transport).roundTrip"},
-			{Name: "net/http.serverHandler.ServeHTTP"},
-		}
-
-		info := process.Info{
-			ID:        1,
-			Functions: httpFuncs,
-			GoVersion: ver,
-			Modules:   map[string]*semver.Version{},
-		}
-		m.FilterUnusedProbes(&info)
+		m := fakeManager(
+			t,
+			"net/http.(*Transport).roundTrip",
+			"net/http.serverHandler.ServeHTTP",
+		)
 		assert.Len(t, m.probes, 2)
 	})
 
 	t.Run("HTTP server and client dependent function only target details", func(t *testing.T) {
-		m := fakeManager(t)
-
-		httpFuncs := []*binary.Func{
+		m := fakeManager(
+			t,
 			// writeSubset depends on "net/http.(*Transport).roundTrip", it should be ignored without roundTrip
-			{Name: "net/http.Header.writeSubset"},
-			{Name: "net/http.serverHandler.ServeHTTP"},
-		}
-
-		info := process.Info{
-			ID:        1,
-			Functions: httpFuncs,
-			GoVersion: ver,
-			Modules:   map[string]*semver.Version{},
-		}
-		m.FilterUnusedProbes(&info)
+			"net/http.Header.writeSubset",
+			"net/http.serverHandler.ServeHTTP",
+		)
 		assert.Len(t, m.probes, 1)
 	})
 }
@@ -192,10 +152,9 @@ func TestDependencyChecks(t *testing.T) {
 	})
 }
 
-func fakeManager(t *testing.T) *Manager {
+func fakeManager(t *testing.T, fnNames ...string) *Manager {
 	logger := slog.Default()
-	m, err := NewManager(
-		logger, nil, NewNoopConfigProvider(nil),
+	probes := []probe.Probe{
 		grpcClient.New(logger, ""),
 		grpcServer.New(logger, ""),
 		httpServer.New(logger, ""),
@@ -205,9 +164,27 @@ func fakeManager(t *testing.T) *Manager {
 		kafkaConsumer.New(logger, ""),
 		autosdk.New(logger),
 		otelTraceGlobal.New(logger),
-	)
-	assert.NoError(t, err)
-	assert.NotNil(t, m)
+	}
+	ver := semver.New(1, 20, 0, "", "")
+	var fn []*binary.Func
+	for _, name := range fnNames {
+		fn = append(fn, &binary.Func{Name: name})
+	}
+	m := &Manager{
+		logger: slog.Default(),
+		cp:     NewNoopConfigProvider(nil),
+		probes: make(map[probe.ID]probe.Probe),
+		proc: &process.Info{
+			ID:        1,
+			Functions: fn,
+			GoVersion: ver,
+			Modules:   map[string]*semver.Version{},
+		},
+	}
+	for _, p := range probes {
+		m.probes[p.Manifest().ID] = p
+	}
+	m.filterUnusedProbes()
 
 	return m
 }
@@ -264,6 +241,7 @@ func TestRunStoppingByContext(t *testing.T) {
 		logger:         slog.Default(),
 		probes:         map[probe.ID]probe.Probe{{}: p},
 		cp:             NewNoopConfigProvider(nil),
+		proc:           new(process.Info),
 	}
 
 	mockExeAndBpffs(t)
@@ -271,7 +249,7 @@ func TestRunStoppingByContext(t *testing.T) {
 	ctx, stopCtx := context.WithCancel(context.Background())
 	errCh := make(chan error, 1)
 
-	err = m.Load(ctx, &process.Info{ID: 1000})
+	err = m.Load(ctx)
 	require.NoError(t, err)
 
 	go func() { errCh <- m.Run(ctx) }()
@@ -313,6 +291,7 @@ func TestRunStoppingByStop(t *testing.T) {
 		logger:         slog.Default(),
 		probes:         map[probe.ID]probe.Probe{{}: &p},
 		cp:             NewNoopConfigProvider(nil),
+		proc:           new(process.Info),
 	}
 
 	mockExeAndBpffs(t)
@@ -320,7 +299,7 @@ func TestRunStoppingByStop(t *testing.T) {
 	ctx := context.Background()
 	errCh := make(chan error, 1)
 
-	err = m.Load(ctx, &process.Info{ID: 1000})
+	err = m.Load(ctx)
 	require.NoError(t, err)
 
 	time.AfterFunc(100*time.Millisecond, func() {
@@ -445,12 +424,13 @@ func TestConfigProvider(t *testing.T) {
 				netHTTPClientLibID: {TracesEnabled: &falseVal},
 			},
 		}),
+		proc: new(process.Info),
 	}
 
 	mockExeAndBpffs(t)
 	runCtx, cancel := context.WithCancel(context.Background())
 
-	err := m.Load(runCtx, &process.Info{ID: 1000})
+	err := m.Load(runCtx)
 	require.NoError(t, err)
 
 	runErr := make(chan error, 1)
@@ -577,6 +557,7 @@ func TestRunStopDeadlock(t *testing.T) {
 		logger:         slog.Default(),
 		probes:         map[probe.ID]probe.Probe{{}: p},
 		cp:             NewNoopConfigProvider(nil),
+		proc:           new(process.Info),
 	}
 
 	mockExeAndBpffs(t)
@@ -584,7 +565,7 @@ func TestRunStopDeadlock(t *testing.T) {
 	ctx, stopCtx := context.WithCancel(context.Background())
 	errCh := make(chan error, 1)
 
-	err = m.Load(ctx, &process.Info{ID: 1000})
+	err = m.Load(ctx)
 	require.NoError(t, err)
 
 	go func() { errCh <- m.Run(ctx) }()
@@ -625,6 +606,7 @@ func TestStopBeforeLoad(t *testing.T) {
 		logger:         slog.Default(),
 		probes:         map[probe.ID]probe.Probe{{}: &p},
 		cp:             NewNoopConfigProvider(nil),
+		proc:           new(process.Info),
 	}
 
 	mockExeAndBpffs(t)
@@ -645,11 +627,12 @@ func TestStopBeforeRun(t *testing.T) {
 		logger:         slog.Default(),
 		probes:         map[probe.ID]probe.Probe{{}: &p},
 		cp:             NewNoopConfigProvider(nil),
+		proc:           new(process.Info),
 	}
 
 	mockExeAndBpffs(t)
 
-	err = m.Load(context.Background(), &process.Info{ID: 1000})
+	err = m.Load(context.Background())
 	require.NoError(t, err)
 	require.True(t, p.loaded.Load())
 
diff --git a/internal/pkg/opentelemetry/controller_test.go b/internal/pkg/opentelemetry/controller_test.go
index bee6f7147..327d80cd2 100644
--- a/internal/pkg/opentelemetry/controller_test.go
+++ b/internal/pkg/opentelemetry/controller_test.go
@@ -305,7 +305,7 @@ func TestTrace(t *testing.T) {
 			ctrl.Trace(tt.traces)
 			tp.ForceFlush(context.Background())
 			spans := exporter.GetSpans()
-			assert.Equal(t, len(tt.expected), len(spans))
+			assert.Len(t, spans, len(tt.expected))
 
 			// span contexts get modified by exporter, update expected with output
 			for i, span := range spans {
diff --git a/internal/pkg/process/analyze.go b/internal/pkg/process/analyze.go
deleted file mode 100644
index 4a959b3e2..000000000
--- a/internal/pkg/process/analyze.go
+++ /dev/null
@@ -1,106 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package process
-
-import (
-	"debug/elf"
-	"errors"
-	"fmt"
-
-	"github.com/Masterminds/semver/v3"
-
-	"go.opentelemetry.io/auto/internal/pkg/process/binary"
-)
-
-// Info are the details about a target process.
-type Info struct {
-	ID         ID
-	Functions  []*binary.Func
-	GoVersion  *semver.Version
-	Modules    map[string]*semver.Version
-	Allocation *Allocation
-}
-
-// GetFunctionOffset returns the offset for of the function with name.
-func (i *Info) GetFunctionOffset(name string) (uint64, error) {
-	for _, f := range i.Functions {
-		if f.Name == name {
-			return f.Offset, nil
-		}
-	}
-
-	return 0, fmt.Errorf("could not find offset for function %s", name)
-}
-
-// GetFunctionReturns returns the return value of the call for the function
-// with name.
-func (i *Info) GetFunctionReturns(name string) ([]uint64, error) {
-	for _, f := range i.Functions {
-		if f.Name == name {
-			return f.ReturnOffsets, nil
-		}
-	}
-
-	return nil, fmt.Errorf("could not find returns for function %s", name)
-}
-
-// Analyze returns the target details for an actively running process.
-func (a *Analyzer) Analyze(relevantFuncs map[string]interface{}) (*Info, error) {
-	result := &Info{ID: a.id}
-
-	elfF, err := elf.Open(a.id.ExePath())
-	if err != nil {
-		return nil, err
-	}
-	defer elfF.Close()
-
-	bi, err := a.id.BuildInfo()
-	if err != nil {
-		return nil, err
-	}
-
-	goVersion, err := semver.NewVersion(bi.GoVersion)
-	if err != nil {
-		return nil, err
-	}
-	result.GoVersion = goVersion
-	result.Modules = make(map[string]*semver.Version, len(bi.Deps)+1)
-	for _, dep := range bi.Deps {
-		depVersion, err := semver.NewVersion(dep.Version)
-		if err != nil {
-			a.logger.Error("parsing dependency version", "error", err, "dependency", dep)
-			continue
-		}
-		result.Modules[dep.Path] = depVersion
-	}
-	result.Modules["std"] = goVersion
-
-	funcs, err := a.findFunctions(elfF, relevantFuncs)
-	if err != nil {
-		return nil, err
-	}
-	for _, fn := range funcs {
-		a.logger.Debug("found function", "function_name", fn)
-	}
-
-	result.Functions = funcs
-	if len(result.Functions) == 0 {
-		return nil, errors.New("could not find function offsets for instrumenter")
-	}
-
-	return result, nil
-}
-
-func (a *Analyzer) findFunctions(elfF *elf.File, relevantFuncs map[string]interface{}) ([]*binary.Func, error) {
-	result, err := binary.FindFunctionsUnStripped(elfF, relevantFuncs)
-	if err != nil {
-		if errors.Is(err, elf.ErrNoSymbols) {
-			a.logger.Debug("No symbols found in binary, trying to find functions using .gosymtab")
-			return binary.FindFunctionsStripped(elfF, relevantFuncs)
-		}
-		return nil, err
-	}
-
-	return result, nil
-}
diff --git a/internal/pkg/process/discover.go b/internal/pkg/process/discover.go
deleted file mode 100644
index 3200f74c3..000000000
--- a/internal/pkg/process/discover.go
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package process
-
-import (
-	"log/slog"
-)
-
-// Analyzer is used to find actively running processes.
-type Analyzer struct {
-	id     ID
-	logger *slog.Logger
-}
-
-// NewAnalyzer returns a new [ProcessAnalyzer].
-func NewAnalyzer(logger *slog.Logger, id ID) *Analyzer {
-	return &Analyzer{id: id, logger: logger}
-}
diff --git a/internal/pkg/process/info.go b/internal/pkg/process/info.go
new file mode 100644
index 000000000..56c9ebbb4
--- /dev/null
+++ b/internal/pkg/process/info.go
@@ -0,0 +1,120 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package process
+
+import (
+	"debug/elf"
+	"errors"
+	"fmt"
+	"runtime/debug"
+
+	"github.com/Masterminds/semver/v3"
+
+	"go.opentelemetry.io/auto/internal/pkg/process/binary"
+)
+
+// Info are the details about a target process.
+type Info struct {
+	ID         ID
+	Functions  []*binary.Func
+	GoVersion  *semver.Version
+	Modules    map[string]*semver.Version
+	Allocation *Allocation
+}
+
+// NewInfo returns a new Info with information about the process identified by
+// id. The functions of the returned Info are filtered by relevantFuncs.
+//
+// A partial Info and error may be returned for dependencies that cannot be
+// parsed.
+func NewInfo(id ID, relevantFuncs map[string]interface{}) (*Info, error) {
+	elfF, err := elf.Open(id.ExePath())
+	if err != nil {
+		return nil, err
+	}
+	defer elfF.Close()
+
+	bi, err := id.BuildInfo()
+	if err != nil {
+		return nil, err
+	}
+
+	goVersion, err := semver.NewVersion(bi.GoVersion)
+	if err != nil {
+		return nil, err
+	}
+
+	result := &Info{
+		ID:        id,
+		GoVersion: goVersion,
+	}
+
+	result.Functions, err = findFunctions(elfF, relevantFuncs)
+	if err != nil {
+		return nil, err
+	}
+
+	result.Modules, err = findModules(goVersion, bi.Deps)
+	return result, err
+}
+
+func findModules(goVer *semver.Version, deps []*debug.Module) (map[string]*semver.Version, error) {
+	var err error
+	out := make(map[string]*semver.Version, len(deps)+1)
+	for _, dep := range deps {
+		depVersion, e := semver.NewVersion(dep.Version)
+		if e != nil {
+			err = errors.Join(
+				err,
+				fmt.Errorf("invalid dependency version %s (%s): %w", dep.Path, dep.Version, e),
+			)
+			continue
+		}
+		out[dep.Path] = depVersion
+	}
+	out["std"] = goVer
+	return out, err
+}
+
+func findFunctions(elfF *elf.File, relevantFuncs map[string]interface{}) ([]*binary.Func, error) {
+	found, err := binary.FindFunctionsUnStripped(elfF, relevantFuncs)
+	if err != nil {
+		if !errors.Is(err, elf.ErrNoSymbols) {
+			return nil, err
+		}
+		found, err = binary.FindFunctionsStripped(elfF, relevantFuncs)
+		if err != nil {
+			return nil, err
+		}
+	}
+
+	if len(found) == 0 {
+		return nil, errors.New("no functions found")
+	}
+
+	return found, nil
+}
+
+// GetFunctionOffset returns the offset for of the function with name.
+func (i *Info) GetFunctionOffset(name string) (uint64, error) {
+	for _, f := range i.Functions {
+		if f.Name == name {
+			return f.Offset, nil
+		}
+	}
+
+	return 0, fmt.Errorf("could not find offset for function %s", name)
+}
+
+// GetFunctionReturns returns the return value of the call for the function
+// with name.
+func (i *Info) GetFunctionReturns(name string) ([]uint64, error) {
+	for _, f := range i.Functions {
+		if f.Name == name {
+			return f.ReturnOffsets, nil
+		}
+	}
+
+	return nil, fmt.Errorf("could not find returns for function %s", name)
+}
diff --git a/internal/test/e2e/autosdk/Dockerfile b/internal/test/e2e/autosdk/Dockerfile
index 7b3adb54f..73498d4f5 100644
--- a/internal/test/e2e/autosdk/Dockerfile
+++ b/internal/test/e2e/autosdk/Dockerfile
@@ -1,4 +1,4 @@
-FROM golang:1.24.1@sha256:c5adecdb7b3f8c5ca3c88648a861882849cc8b02fed68ece31e25de88ad13418
+FROM golang:1.24.1@sha256:8678013a2add364dc3d5df2acc2b36893fbbd60ebafa5d5149bc22158512f021
 # Make sure this dir exists.
 WORKDIR /usr/src/go.opentelemetry.io/auto/internal/test/e2e/autosdk
 
diff --git a/internal/test/e2e/databasesql/Dockerfile b/internal/test/e2e/databasesql/Dockerfile
index 0c2b87ba4..5bb33bf4e 100644
--- a/internal/test/e2e/databasesql/Dockerfile
+++ b/internal/test/e2e/databasesql/Dockerfile
@@ -1,4 +1,4 @@
-FROM golang:1.24.1@sha256:c5adecdb7b3f8c5ca3c88648a861882849cc8b02fed68ece31e25de88ad13418
+FROM golang:1.24.1@sha256:8678013a2add364dc3d5df2acc2b36893fbbd60ebafa5d5149bc22158512f021
 
 # pre-copy/cache go.mod for pre-downloading dependencies and only redownloading
 # them in subsequent builds if they change
diff --git a/internal/test/e2e/gin/Dockerfile b/internal/test/e2e/gin/Dockerfile
index 6d4ce2c9f..3d12e217b 100644
--- a/internal/test/e2e/gin/Dockerfile
+++ b/internal/test/e2e/gin/Dockerfile
@@ -1,4 +1,4 @@
-FROM golang:1.24.1@sha256:c5adecdb7b3f8c5ca3c88648a861882849cc8b02fed68ece31e25de88ad13418
+FROM golang:1.24.1@sha256:8678013a2add364dc3d5df2acc2b36893fbbd60ebafa5d5149bc22158512f021
 
 # pre-copy/cache go.mod for pre-downloading dependencies and only redownloading
 # them in subsequent builds if they change
diff --git a/internal/test/e2e/gin/go.mod b/internal/test/e2e/gin/go.mod
index 92895db15..18a002829 100644
--- a/internal/test/e2e/gin/go.mod
+++ b/internal/test/e2e/gin/go.mod
@@ -5,8 +5,8 @@ go 1.23.0
 require github.com/gin-gonic/gin v1.10.0
 
 require (
-	github.com/bytedance/sonic v1.12.10 // indirect
-	github.com/bytedance/sonic/loader v0.2.3 // indirect
+	github.com/bytedance/sonic v1.13.1 // indirect
+	github.com/bytedance/sonic/loader v0.2.4 // indirect
 	github.com/cloudwego/base64x v0.1.5 // indirect
 	github.com/gabriel-vasile/mimetype v1.4.8 // indirect
 	github.com/gin-contrib/sse v1.0.0 // indirect
diff --git a/internal/test/e2e/gin/go.sum b/internal/test/e2e/gin/go.sum
index b25524857..f1b23c626 100644
--- a/internal/test/e2e/gin/go.sum
+++ b/internal/test/e2e/gin/go.sum
@@ -1,8 +1,8 @@
-github.com/bytedance/sonic v1.12.10 h1:uVCQr6oS5669E9ZVW0HyksTLfNS7Q/9hV6IVS4nEMsI=
-github.com/bytedance/sonic v1.12.10/go.mod h1:uVvFidNmlt9+wa31S1urfwwthTWteBgG0hWuoKAXTx8=
+github.com/bytedance/sonic v1.13.1 h1:Jyd5CIvdFnkOWuKXr+wm4Nyk2h0yAFsr8ucJgEasO3g=
+github.com/bytedance/sonic v1.13.1/go.mod h1:o68xyaF9u2gvVBuGHPlUVCy+ZfmNNO5ETf1+KgkJhz4=
 github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=
-github.com/bytedance/sonic/loader v0.2.3 h1:yctD0Q3v2NOGfSWPLPvG2ggA2kV6TS6s4wioyEqssH0=
-github.com/bytedance/sonic/loader v0.2.3/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI=
+github.com/bytedance/sonic/loader v0.2.4 h1:ZWCw4stuXUsn1/+zQDqeE7JKP+QO47tz7QCNan80NzY=
+github.com/bytedance/sonic/loader v0.2.4/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI=
 github.com/cloudwego/base64x v0.1.5 h1:XPciSp1xaq2VCSt6lF0phncD4koWyULpl5bUxbfCyP4=
 github.com/cloudwego/base64x v0.1.5/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=
 github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
diff --git a/internal/test/e2e/grpc/Dockerfile b/internal/test/e2e/grpc/Dockerfile
index 90b72b81a..f979db968 100644
--- a/internal/test/e2e/grpc/Dockerfile
+++ b/internal/test/e2e/grpc/Dockerfile
@@ -1,4 +1,4 @@
-FROM golang:1.24.1@sha256:c5adecdb7b3f8c5ca3c88648a861882849cc8b02fed68ece31e25de88ad13418
+FROM golang:1.24.1@sha256:8678013a2add364dc3d5df2acc2b36893fbbd60ebafa5d5149bc22158512f021
 
 # pre-copy/cache go.mod for pre-downloading dependencies and only redownloading
 # them in subsequent builds if they change
diff --git a/internal/test/e2e/grpc/go.mod b/internal/test/e2e/grpc/go.mod
index 7ab27af1d..29c8ad7e2 100644
--- a/internal/test/e2e/grpc/go.mod
+++ b/internal/test/e2e/grpc/go.mod
@@ -5,7 +5,7 @@ go 1.23.0
 require (
 	go.opentelemetry.io/otel v1.35.0
 	google.golang.org/grpc v1.71.0
-	google.golang.org/grpc/examples v0.0.0-20250305181404-8c080da92c4b
+	google.golang.org/grpc/examples v0.0.0-20250313062406-775150f68c17
 )
 
 require (
@@ -17,7 +17,7 @@ require (
 	golang.org/x/net v0.37.0 // indirect
 	golang.org/x/sys v0.31.0 // indirect
 	golang.org/x/text v0.23.0 // indirect
-	google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb // indirect
+	google.golang.org/genproto/googleapis/rpc v0.0.0-20250311190419-81fb87f6b8bf // indirect
 	google.golang.org/protobuf v1.36.5 // indirect
 )
 
diff --git a/internal/test/e2e/grpc/go.sum b/internal/test/e2e/grpc/go.sum
index 755e0c034..12e76e397 100644
--- a/internal/test/e2e/grpc/go.sum
+++ b/internal/test/e2e/grpc/go.sum
@@ -31,12 +31,12 @@ golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
 golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
 golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
 golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb h1:TLPQVbx1GJ8VKZxz52VAxl1EBgKXXbTiU9Fc5fZeLn4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250311190419-81fb87f6b8bf h1:dHDlF3CWxQkefK9IJx+O8ldY0gLygvrlYRBNbPqDWuY=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250311190419-81fb87f6b8bf/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I=
 google.golang.org/grpc v1.71.0 h1:kF77BGdPTQ4/JZWMlb9VpJ5pa25aqvVqogsxNHHdeBg=
 google.golang.org/grpc v1.71.0/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec=
-google.golang.org/grpc/examples v0.0.0-20250305181404-8c080da92c4b h1:lGeZKqXtSofY106YT2zHyumJOikXrCtF7KVh2RdAmBk=
-google.golang.org/grpc/examples v0.0.0-20250305181404-8c080da92c4b/go.mod h1:FAlqAXO1RibHnEmPJVE0uEPry64CkJtJikaCETqUfKM=
+google.golang.org/grpc/examples v0.0.0-20250313062406-775150f68c17 h1:0e3BNfSs+Wo4m5F4dy0EFSG6qX/lp5oecAnuLRAhqPk=
+google.golang.org/grpc/examples v0.0.0-20250313062406-775150f68c17/go.mod h1:FAlqAXO1RibHnEmPJVE0uEPry64CkJtJikaCETqUfKM=
 google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM=
 google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
diff --git a/internal/test/e2e/kafka-go/Dockerfile b/internal/test/e2e/kafka-go/Dockerfile
index 01db5c78d..fa99b1e40 100644
--- a/internal/test/e2e/kafka-go/Dockerfile
+++ b/internal/test/e2e/kafka-go/Dockerfile
@@ -1,4 +1,4 @@
-FROM golang:1.24.1@sha256:c5adecdb7b3f8c5ca3c88648a861882849cc8b02fed68ece31e25de88ad13418 AS builder
+FROM golang:1.24.1@sha256:8678013a2add364dc3d5df2acc2b36893fbbd60ebafa5d5149bc22158512f021 AS builder
 
 # pre-copy/cache go.mod for pre-downloading dependencies and only redownloading
 # them in subsequent builds if they change
diff --git a/internal/test/e2e/nethttp/Dockerfile b/internal/test/e2e/nethttp/Dockerfile
index 1110f29f3..162c4eb83 100644
--- a/internal/test/e2e/nethttp/Dockerfile
+++ b/internal/test/e2e/nethttp/Dockerfile
@@ -1,4 +1,4 @@
-FROM golang:1.24.1@sha256:c5adecdb7b3f8c5ca3c88648a861882849cc8b02fed68ece31e25de88ad13418
+FROM golang:1.24.1@sha256:8678013a2add364dc3d5df2acc2b36893fbbd60ebafa5d5149bc22158512f021
 
 # pre-copy/cache go.mod for pre-downloading dependencies and only redownloading
 # them in subsequent builds if they change
diff --git a/internal/test/e2e/nethttp_custom/Dockerfile b/internal/test/e2e/nethttp_custom/Dockerfile
index 5f02500ea..0b026fb03 100644
--- a/internal/test/e2e/nethttp_custom/Dockerfile
+++ b/internal/test/e2e/nethttp_custom/Dockerfile
@@ -1,4 +1,4 @@
-FROM golang:1.24.1@sha256:c5adecdb7b3f8c5ca3c88648a861882849cc8b02fed68ece31e25de88ad13418
+FROM golang:1.24.1@sha256:8678013a2add364dc3d5df2acc2b36893fbbd60ebafa5d5149bc22158512f021
 
 # pre-copy/cache go.mod for pre-downloading dependencies and only redownloading
 # them in subsequent builds if they change
diff --git a/internal/test/e2e/otelglobal/Dockerfile b/internal/test/e2e/otelglobal/Dockerfile
index ff2ad688a..553b4cbde 100644
--- a/internal/test/e2e/otelglobal/Dockerfile
+++ b/internal/test/e2e/otelglobal/Dockerfile
@@ -1,4 +1,4 @@
-FROM golang:1.24.1@sha256:c5adecdb7b3f8c5ca3c88648a861882849cc8b02fed68ece31e25de88ad13418
+FROM golang:1.24.1@sha256:8678013a2add364dc3d5df2acc2b36893fbbd60ebafa5d5149bc22158512f021
 
 # pre-copy/cache go.mod for pre-downloading dependencies and only redownloading
 # them in subsequent builds if they change
diff --git a/internal/tools/go.mod b/internal/tools/go.mod
index 8aefdc3eb..0cf25543c 100644
--- a/internal/tools/go.mod
+++ b/internal/tools/go.mod
@@ -5,7 +5,7 @@ go 1.23.0
 require (
 	github.com/Masterminds/semver/v3 v3.3.1
 	github.com/docker/docker v28.0.1+incompatible
-	github.com/golangci/golangci-lint v1.64.6
+	github.com/golangci/golangci-lint v1.64.7
 	github.com/google/go-licenses/v2 v2.0.0-alpha.1
 	go.opentelemetry.io/auto v0.21.0
 	go.opentelemetry.io/build-tools/crosslink v0.20.0
@@ -20,15 +20,15 @@ require (
 	dario.cat/mergo v1.0.1 // indirect
 	github.com/4meepo/tagalign v1.4.2 // indirect
 	github.com/Abirdcfly/dupword v0.1.3 // indirect
-	github.com/Antonboom/errname v1.0.0 // indirect
+	github.com/Antonboom/errname v1.1.0 // indirect
 	github.com/Antonboom/nilnil v1.0.1 // indirect
-	github.com/Antonboom/testifylint v1.5.2 // indirect
+	github.com/Antonboom/testifylint v1.6.0 // indirect
 	github.com/BurntSushi/toml v1.4.1-0.20241028111116-b7406c026f5a // indirect
 	github.com/Crocmagnon/fatcontext v0.7.1 // indirect
 	github.com/Djarvur/go-err113 v0.1.0 // indirect
 	github.com/GaijinEntertainment/go-exhaustruct/v3 v3.3.1 // indirect
 	github.com/Microsoft/go-winio v0.6.2 // indirect
-	github.com/OpenPeeDeeP/depguard/v2 v2.2.0 // indirect
+	github.com/OpenPeeDeeP/depguard/v2 v2.2.1 // indirect
 	github.com/ProtonMail/go-crypto v1.1.6 // indirect
 	github.com/alecthomas/go-check-sumtype v0.3.1 // indirect
 	github.com/alexkohler/nakedret/v2 v2.0.5 // indirect
@@ -41,11 +41,11 @@ require (
 	github.com/bkielbasa/cyclop v1.2.3 // indirect
 	github.com/blizzy78/varnamelen v0.8.0 // indirect
 	github.com/bombsimon/wsl/v4 v4.6.0 // indirect
-	github.com/breml/bidichk v0.3.2 // indirect
-	github.com/breml/errchkjson v0.4.0 // indirect
+	github.com/breml/bidichk v0.3.3 // indirect
+	github.com/breml/errchkjson v0.4.1 // indirect
 	github.com/butuzov/ireturn v0.3.1 // indirect
 	github.com/butuzov/mirror v1.3.0 // indirect
-	github.com/catenacyber/perfsprint v0.9.0 // indirect
+	github.com/catenacyber/perfsprint v0.9.1 // indirect
 	github.com/ccojocar/zxcvbn-go v1.0.2 // indirect
 	github.com/cespare/xxhash/v2 v2.3.0 // indirect
 	github.com/charithe/durationcheck v0.0.10 // indirect
@@ -70,7 +70,7 @@ require (
 	github.com/firefart/nonamedreturns v1.0.5 // indirect
 	github.com/fsnotify/fsnotify v1.8.0 // indirect
 	github.com/fzipp/gocyclo v0.6.0 // indirect
-	github.com/ghostiam/protogetter v0.3.9 // indirect
+	github.com/ghostiam/protogetter v0.3.10 // indirect
 	github.com/go-critic/go-critic v0.12.0 // indirect
 	github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
 	github.com/go-git/go-billy/v5 v5.6.2 // indirect
@@ -90,7 +90,7 @@ require (
 	github.com/gofrs/flock v0.12.1 // indirect
 	github.com/gogo/protobuf v1.3.2 // indirect
 	github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect
-	github.com/golangci/dupl v0.0.0-20250303184901-44c6a0ba7e6c // indirect
+	github.com/golangci/dupl v0.0.0-20250308024227-f665c8d69b32 // indirect
 	github.com/golangci/go-printf-func-name v0.1.0 // indirect
 	github.com/golangci/gofmt v0.0.0-20250106114630-d62b90e6713d // indirect
 	github.com/golangci/misspell v0.6.0 // indirect
@@ -219,7 +219,7 @@ require (
 	go.opentelemetry.io/auto/sdk v1.1.0 // indirect
 	go.opentelemetry.io/build-tools v0.20.0 // indirect
 	go.opentelemetry.io/collector/pdata v1.27.0 // indirect
-	go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 // indirect
+	go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 // indirect
 	go.opentelemetry.io/otel v1.35.0 // indirect
 	go.opentelemetry.io/otel/metric v1.35.0 // indirect
 	go.opentelemetry.io/otel/trace v1.35.0 // indirect
@@ -228,14 +228,14 @@ require (
 	go.uber.org/zap v1.27.0 // indirect
 	golang.org/x/arch v0.15.0 // indirect
 	golang.org/x/crypto v0.36.0 // indirect
-	golang.org/x/exp v0.0.0-20250228200357-dead58393ab7 // indirect
+	golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 // indirect
 	golang.org/x/exp/typeparams v0.0.0-20250305212735-054e65f0b394 // indirect
 	golang.org/x/mod v0.24.0 // indirect
 	golang.org/x/net v0.37.0 // indirect
 	golang.org/x/sys v0.31.0 // indirect
 	golang.org/x/text v0.23.0 // indirect
 	golang.org/x/tools v0.31.0 // indirect
-	google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb // indirect
+	google.golang.org/genproto/googleapis/rpc v0.0.0-20250311190419-81fb87f6b8bf // indirect
 	google.golang.org/grpc v1.71.0 // indirect
 	google.golang.org/protobuf v1.36.5 // indirect
 	gopkg.in/ini.v1 v1.67.0 // indirect
@@ -243,7 +243,7 @@ require (
 	gopkg.in/yaml.v2 v2.4.0 // indirect
 	gopkg.in/yaml.v3 v3.0.1 // indirect
 	gotest.tools/v3 v3.5.2 // indirect
-	honnef.co/go/tools v0.6.0 // indirect
+	honnef.co/go/tools v0.6.1 // indirect
 	k8s.io/klog/v2 v2.130.1 // indirect
 	mvdan.cc/gofumpt v0.7.0 // indirect
 	mvdan.cc/unparam v0.0.0-20250301125049-0df0534333a4 // indirect
diff --git a/internal/tools/go.sum b/internal/tools/go.sum
index 7e4e90329..ef5e212f2 100644
--- a/internal/tools/go.sum
+++ b/internal/tools/go.sum
@@ -9,12 +9,12 @@ github.com/4meepo/tagalign v1.4.2 h1:0hcLHPGMjDyM1gHG58cS73aQF8J4TdVR96TZViorO9E
 github.com/4meepo/tagalign v1.4.2/go.mod h1:+p4aMyFM+ra7nb41CnFG6aSDXqRxU/w1VQqScKqDARI=
 github.com/Abirdcfly/dupword v0.1.3 h1:9Pa1NuAsZvpFPi9Pqkd93I7LIYRURj+A//dFd5tgBeE=
 github.com/Abirdcfly/dupword v0.1.3/go.mod h1:8VbB2t7e10KRNdwTVoxdBaxla6avbhGzb8sCTygUMhw=
-github.com/Antonboom/errname v1.0.0 h1:oJOOWR07vS1kRusl6YRSlat7HFnb3mSfMl6sDMRoTBA=
-github.com/Antonboom/errname v1.0.0/go.mod h1:gMOBFzK/vrTiXN9Oh+HFs+e6Ndl0eTFbtsRTSRdXyGI=
+github.com/Antonboom/errname v1.1.0 h1:A+ucvdpMwlo/myWrkHEUEBWc/xuXdud23S8tmTb/oAE=
+github.com/Antonboom/errname v1.1.0/go.mod h1:O1NMrzgUcVBGIfi3xlVuvX8Q/VP/73sseCaAppfjqZw=
 github.com/Antonboom/nilnil v1.0.1 h1:C3Tkm0KUxgfO4Duk3PM+ztPncTFlOf0b2qadmS0s4xs=
 github.com/Antonboom/nilnil v1.0.1/go.mod h1:CH7pW2JsRNFgEh8B2UaPZTEPhCMuFowP/e8Udp9Nnb0=
-github.com/Antonboom/testifylint v1.5.2 h1:4s3Xhuv5AvdIgbd8wOOEeo0uZG7PbDKQyKY5lGoQazk=
-github.com/Antonboom/testifylint v1.5.2/go.mod h1:vxy8VJ0bc6NavlYqjZfmp6EfqXMtBgQ4+mhCojwC1P8=
+github.com/Antonboom/testifylint v1.6.0 h1:6rdILVPt4+rqcvhid8w9wJNynKLUgqHNpFyM67UeXyc=
+github.com/Antonboom/testifylint v1.6.0/go.mod h1:k+nEkathI2NFjKO6HvwmSrbzUcQ6FAnbZV+ZRrnXPLI=
 github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c h1:udKWzYgxTojEKWjV8V+WSxDXJ4NFATAsZjh8iIbsQIg=
 github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
@@ -31,8 +31,8 @@ github.com/Masterminds/semver/v3 v3.3.1/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lpr
 github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY=
 github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
 github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
-github.com/OpenPeeDeeP/depguard/v2 v2.2.0 h1:vDfG60vDtIuf0MEOhmLlLLSzqaRM8EMcgJPdp74zmpA=
-github.com/OpenPeeDeeP/depguard/v2 v2.2.0/go.mod h1:CIzddKRvLBC4Au5aYP/i3nyaWQ+ClszLIuVocRiCYFQ=
+github.com/OpenPeeDeeP/depguard/v2 v2.2.1 h1:vckeWVESWp6Qog7UZSARNqfu/cZqvki8zsuj3piCMx4=
+github.com/OpenPeeDeeP/depguard/v2 v2.2.1/go.mod h1:q4DKzC4UcVaAvcfd41CZh0PWpGgzrVxUYBlgKNGquUo=
 github.com/ProtonMail/go-crypto v1.1.6 h1:ZcV+Ropw6Qn0AX9brlQLAUXfqLBc7Bl+f/DmNxpLfdw=
 github.com/ProtonMail/go-crypto v1.1.6/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE=
 github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0=
@@ -65,16 +65,16 @@ github.com/blizzy78/varnamelen v0.8.0 h1:oqSblyuQvFsW1hbBHh1zfwrKe3kcSj0rnXkKzsQ
 github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k=
 github.com/bombsimon/wsl/v4 v4.6.0 h1:ew2R/N42su553DKTYqt3HSxaQN+uHQPv4xZ2MBmwaW4=
 github.com/bombsimon/wsl/v4 v4.6.0/go.mod h1:uV/+6BkffuzSAVYD+yGyld1AChO7/EuLrCF/8xTiapg=
-github.com/breml/bidichk v0.3.2 h1:xV4flJ9V5xWTqxL+/PMFF6dtJPvZLPsyixAoPe8BGJs=
-github.com/breml/bidichk v0.3.2/go.mod h1:VzFLBxuYtT23z5+iVkamXO386OB+/sVwZOpIj6zXGos=
-github.com/breml/errchkjson v0.4.0 h1:gftf6uWZMtIa/Is3XJgibewBm2ksAQSY/kABDNFTAdk=
-github.com/breml/errchkjson v0.4.0/go.mod h1:AuBOSTHyLSaaAFlWsRSuRBIroCh3eh7ZHh5YeelDIk8=
+github.com/breml/bidichk v0.3.3 h1:WSM67ztRusf1sMoqH6/c4OBCUlRVTKq+CbSeo0R17sE=
+github.com/breml/bidichk v0.3.3/go.mod h1:ISbsut8OnjB367j5NseXEGGgO/th206dVa427kR8YTE=
+github.com/breml/errchkjson v0.4.1 h1:keFSS8D7A2T0haP9kzZTi7o26r7kE3vymjZNeNDRDwg=
+github.com/breml/errchkjson v0.4.1/go.mod h1:a23OvR6Qvcl7DG/Z4o0el6BRAjKnaReoPQFciAl9U3s=
 github.com/butuzov/ireturn v0.3.1 h1:mFgbEI6m+9W8oP/oDdfA34dLisRFCj2G6o/yiI1yZrY=
 github.com/butuzov/ireturn v0.3.1/go.mod h1:ZfRp+E7eJLC0NQmk1Nrm1LOrn/gQlOykv+cVPdiXH5M=
 github.com/butuzov/mirror v1.3.0 h1:HdWCXzmwlQHdVhwvsfBb2Au0r3HyINry3bDWLYXiKoc=
 github.com/butuzov/mirror v1.3.0/go.mod h1:AEij0Z8YMALaq4yQj9CPPVYOyJQyiexpQEQgihajRfI=
-github.com/catenacyber/perfsprint v0.9.0 h1:IZj13sFjPdHcahlpOqcF5yLm2l4VBV2FttMo2H+wwWw=
-github.com/catenacyber/perfsprint v0.9.0/go.mod h1:q//VWC2fWbcdSLEY1R3l8n0zQCDPdE4IjZwyY1HMunM=
+github.com/catenacyber/perfsprint v0.9.1 h1:5LlTp4RwTooQjJCvGEFV6XksZvWE7wCOUvjD2z0vls0=
+github.com/catenacyber/perfsprint v0.9.1/go.mod h1:q//VWC2fWbcdSLEY1R3l8n0zQCDPdE4IjZwyY1HMunM=
 github.com/ccojocar/zxcvbn-go v1.0.2 h1:na/czXU8RrhXO4EZme6eQJLR4PzcGsahsBOAwU6I3Vg=
 github.com/ccojocar/zxcvbn-go v1.0.2/go.mod h1:g1qkXtUSvHP8lhHp5GrSmTz6uWALGRMQdw6Qnz/hi60=
 github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
@@ -143,8 +143,8 @@ github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/
 github.com/fsnotify/fsnotify v1.8.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
 github.com/fzipp/gocyclo v0.6.0 h1:lsblElZG7d3ALtGMx9fmxeTKZaLLpU8mET09yN4BBLo=
 github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA=
-github.com/ghostiam/protogetter v0.3.9 h1:j+zlLLWzqLay22Cz/aYwTHKQ88GE2DQ6GkWSYFOI4lQ=
-github.com/ghostiam/protogetter v0.3.9/go.mod h1:WZ0nw9pfzsgxuRsPOFQomgDVSWtDLJRfQJEhsGbmQMA=
+github.com/ghostiam/protogetter v0.3.10 h1:Zi944grvhejqK0rEQloLZPH5HDDoREFQlL+mSNP0jV0=
+github.com/ghostiam/protogetter v0.3.10/go.mod h1:WZ0nw9pfzsgxuRsPOFQomgDVSWtDLJRfQJEhsGbmQMA=
 github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c=
 github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU=
 github.com/go-critic/go-critic v0.12.0 h1:iLosHZuye812wnkEz1Xu3aBwn5ocCPfc9yqmFG9pa6w=
@@ -211,14 +211,14 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD
 github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
 github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
 github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
-github.com/golangci/dupl v0.0.0-20250303184901-44c6a0ba7e6c h1:BhAyQ4fBxnBDr0LwgEPVETkquPQW4BW6DiNBQq6CO5E=
-github.com/golangci/dupl v0.0.0-20250303184901-44c6a0ba7e6c/go.mod h1:NUw9Zr2Sy7+HxzdjIULge71wI6yEg1lWQr7Evcu8K0E=
+github.com/golangci/dupl v0.0.0-20250308024227-f665c8d69b32 h1:WUvBfQL6EW/40l6OmeSBYQJNSif4O11+bmWEz+C7FYw=
+github.com/golangci/dupl v0.0.0-20250308024227-f665c8d69b32/go.mod h1:NUw9Zr2Sy7+HxzdjIULge71wI6yEg1lWQr7Evcu8K0E=
 github.com/golangci/go-printf-func-name v0.1.0 h1:dVokQP+NMTO7jwO4bwsRwLWeudOVUPPyAKJuzv8pEJU=
 github.com/golangci/go-printf-func-name v0.1.0/go.mod h1:wqhWFH5mUdJQhweRnldEywnR5021wTdZSNgwYceV14s=
 github.com/golangci/gofmt v0.0.0-20250106114630-d62b90e6713d h1:viFft9sS/dxoYY0aiOTsLKO2aZQAPT4nlQCsimGcSGE=
 github.com/golangci/gofmt v0.0.0-20250106114630-d62b90e6713d/go.mod h1:ivJ9QDg0XucIkmwhzCDsqcnxxlDStoTl89jDMIoNxKY=
-github.com/golangci/golangci-lint v1.64.6 h1:jOLaQN41IV7bMzXuNC4UnQGll7N1xY6eFDXkXEPGKAs=
-github.com/golangci/golangci-lint v1.64.6/go.mod h1:Wz9q+6EVuqGQ94GQ96RB2mjpcZYTOGhBhbt4O7REPu4=
+github.com/golangci/golangci-lint v1.64.7 h1:Xk1EyxoXqZabn5b4vnjNKSjCx1whBK53NP+mzLfX7HA=
+github.com/golangci/golangci-lint v1.64.7/go.mod h1:5cEsUQBSr6zi8XI8OjmcY2Xmliqc4iYL7YoPrL+zLJ4=
 github.com/golangci/misspell v0.6.0 h1:JCle2HUTNWirNlDIAUO44hUsKhOFqGPoC4LZxlaSXDs=
 github.com/golangci/misspell v0.6.0/go.mod h1:keMNyY6R9isGaSAu+4Q8NMBwMPkh15Gtc8UCVoDtAWo=
 github.com/golangci/plugin-module-register v0.1.1 h1:TCmesur25LnyJkpsVrupv1Cdzo+2f7zX0H6Jkw1Ol6c=
@@ -566,8 +566,8 @@ go.opentelemetry.io/build-tools/multimod v0.20.0 h1:FETwv1AoxFIfRpblTNiBwxtGgE6l
 go.opentelemetry.io/build-tools/multimod v0.20.0/go.mod h1:lfXozgnnd6PRqZCCr3qvWW+clvy13XwaPGS8UrW5eIU=
 go.opentelemetry.io/collector/pdata v1.27.0 h1:66yI7FYkUDia74h48Fd2/KG2Vk8DxZnGw54wRXykCEU=
 go.opentelemetry.io/collector/pdata v1.27.0/go.mod h1:18e8/xDZsqyj00h/5HM5GLdJgBzzG9Ei8g9SpNoiMtI=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 h1:CV7UdSGJt/Ao6Gp4CXckLxVRRsRgDHoI8XjbL3PDl8s=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0/go.mod h1:FRmFuRJfag1IZ2dPkHnEoSFVgTVPUd2qf5Vi69hLb8I=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 h1:sbiXRNDSWJOTobXh5HyQKjq6wUC5tNybqjIqDpAY4CU=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0/go.mod h1:69uWxva0WgAA/4bu2Yy70SLDBwZXuQ6PbBpbsa5iZrQ=
 go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ=
 go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.35.0 h1:1fTNlAIJZGWLP5FVu0fikVry1IsiUnXjf7QFvoNN3Xw=
@@ -604,8 +604,8 @@ golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf
 golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
 golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20250228200357-dead58393ab7 h1:aWwlzYV971S4BXRS9AmqwDLAD85ouC6X+pocatKY58c=
-golang.org/x/exp v0.0.0-20250228200357-dead58393ab7/go.mod h1:BHOTPb3L19zxehTsLoJXVaTktb06DFgmdW6Wb9s8jqk=
+golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 h1:nDVHiLt8aIbd/VzvPWN6kSOPE7+F/fNFDSXLVYkE/Iw=
+golang.org/x/exp v0.0.0-20250305212735-054e65f0b394/go.mod h1:sIifuuw/Yco/y6yb6+bDNfyeQ/MdPUy/hKEMYQV17cM=
 golang.org/x/exp/typeparams v0.0.0-20220428152302-39d4317da171/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk=
 golang.org/x/exp/typeparams v0.0.0-20230203172020-98cc5a0785f9/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk=
 golang.org/x/exp/typeparams v0.0.0-20250305212735-054e65f0b394 h1:VI4qDpTkfFaCXEPrbojidLgVQhj2x4nzTccG0hjaLlU=
@@ -748,10 +748,10 @@ google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoA
 google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
 google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
 google.golang.org/genproto v0.0.0-20241118233622-e639e219e697 h1:ToEetK57OidYuqD4Q5w+vfEnPvPpuTwedCNVohYJfNk=
-google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb h1:p31xT4yrYrSM/G4Sn2+TNUkVhFCbG9y8itM2S6Th950=
-google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb h1:TLPQVbx1GJ8VKZxz52VAxl1EBgKXXbTiU9Fc5fZeLn4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I=
+google.golang.org/genproto/googleapis/api v0.0.0-20250311190419-81fb87f6b8bf h1:BdIVRm+fyDUn8lrZLPSlBCfM/YKDwUBYgDoLv9+DYo0=
+google.golang.org/genproto/googleapis/api v0.0.0-20250311190419-81fb87f6b8bf/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250311190419-81fb87f6b8bf h1:dHDlF3CWxQkefK9IJx+O8ldY0gLygvrlYRBNbPqDWuY=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250311190419-81fb87f6b8bf/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I=
 google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
 google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
 google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
@@ -789,8 +789,8 @@ gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q=
 gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA=
 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.6.0 h1:TAODvD3knlq75WCp2nyGJtT4LeRV/o7NN9nYPeVJXf8=
-honnef.co/go/tools v0.6.0/go.mod h1:3puzxxljPCe8RGJX7BIy1plGbxEOZni5mR2aXe3/uk4=
+honnef.co/go/tools v0.6.1 h1:R094WgE8K4JirYjBaOpz/AvTyUu/3wbmAoskKN/pxTI=
+honnef.co/go/tools v0.6.1/go.mod h1:3puzxxljPCe8RGJX7BIy1plGbxEOZni5mR2aXe3/uk4=
 k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
 k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
 mvdan.cc/gofumpt v0.7.0 h1:bg91ttqXmi9y2xawvkuMXyvAA/1ZGJqYAEGjXuP0JXU=
diff --git a/sdk/internal/telemetry/test/go.mod b/sdk/internal/telemetry/test/go.mod
index 2b1b71bd2..825e75797 100644
--- a/sdk/internal/telemetry/test/go.mod
+++ b/sdk/internal/telemetry/test/go.mod
@@ -20,7 +20,7 @@ require (
 	golang.org/x/net v0.37.0 // indirect
 	golang.org/x/sys v0.31.0 // indirect
 	golang.org/x/text v0.23.0 // indirect
-	google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb // indirect
+	google.golang.org/genproto/googleapis/rpc v0.0.0-20250311190419-81fb87f6b8bf // indirect
 	google.golang.org/grpc v1.71.0 // indirect
 	google.golang.org/protobuf v1.36.5 // indirect
 	gopkg.in/yaml.v3 v3.0.1 // indirect
diff --git a/sdk/internal/telemetry/test/go.sum b/sdk/internal/telemetry/test/go.sum
index ea4a80a1b..7d3b87dc1 100644
--- a/sdk/internal/telemetry/test/go.sum
+++ b/sdk/internal/telemetry/test/go.sum
@@ -85,8 +85,8 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb h1:TLPQVbx1GJ8VKZxz52VAxl1EBgKXXbTiU9Fc5fZeLn4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250311190419-81fb87f6b8bf h1:dHDlF3CWxQkefK9IJx+O8ldY0gLygvrlYRBNbPqDWuY=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250311190419-81fb87f6b8bf/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I=
 google.golang.org/grpc v1.71.0 h1:kF77BGdPTQ4/JZWMlb9VpJ5pa25aqvVqogsxNHHdeBg=
 google.golang.org/grpc v1.71.0/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec=
 google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM=
diff --git a/sdk/span_test.go b/sdk/span_test.go
index d24f8f341..0ab4fe1e0 100644
--- a/sdk/span_test.go
+++ b/sdk/span_test.go
@@ -391,7 +391,7 @@ func TestSpanAddLinkLimit(t *testing.T) {
 
 func TestSpanLinkAttrLimit(t *testing.T) {
 	nInt := len(tAttrs)
-	require.GreaterOrEqual(t, len(tAttrs), 0)
+	require.GreaterOrEqual(t, nInt, 0)
 	n := uint32(nInt) // nolint: gosec  // Bound checked.
 
 	tests := []struct {
@@ -523,7 +523,7 @@ func TestAddEventLimit(t *testing.T) {
 
 func TestAddEventAttrLimit(t *testing.T) {
 	nInt := len(tAttrs)
-	require.GreaterOrEqual(t, len(tAttrs), 0)
+	require.GreaterOrEqual(t, nInt, 0)
 	n := uint32(nInt) // nolint: gosec  // Bound checked.
 
 	tests := []struct {
@@ -612,7 +612,7 @@ func TestSpanSetAttributes(t *testing.T) {
 
 func TestSpanAttributeLimits(t *testing.T) {
 	nInt := len(tAttrs)
-	require.GreaterOrEqual(t, len(tAttrs), 0)
+	require.GreaterOrEqual(t, nInt, 0)
 	n := uint32(nInt) // nolint: gosec  // Bound checked.
 
 	tests := []struct {
diff --git a/sdk/tracer.go b/sdk/tracer.go
index 131b3ac83..d147e4121 100644
--- a/sdk/tracer.go
+++ b/sdk/tracer.go
@@ -23,14 +23,15 @@ type tracer struct {
 var _ trace.Tracer = tracer{}
 
 func (t tracer) Start(ctx context.Context, name string, opts ...trace.SpanStartOption) (context.Context, trace.Span) {
-	var psc trace.SpanContext
+	var psc, sc trace.SpanContext
 	sampled := true
 	span := new(span)
 
 	// Ask eBPF for sampling decision and span context info.
-	t.start(ctx, span, &psc, &sampled, &span.spanContext)
+	t.start(ctx, span, &psc, &sampled, &sc)
 
 	span.sampled.Store(sampled)
+	span.spanContext = sc
 
 	ctx = trace.ContextWithSpan(ctx, span)