1- //go:generate go run ../../tools/csv2go.go ../../tools/complete_offsets.csv node_offsets_generated.go
2-
31// Copyright The OpenTelemetry Authors
42// SPDX-License-Identifier: Apache-2.0
53
@@ -156,7 +154,6 @@ package nodev8 // import "go.opentelemetry.io/ebpf-profiler/interpreter/nodev8"
156154
157155import (
158156 "bytes"
159- "encoding/binary"
160157 "errors"
161158 "fmt"
162159 "io"
@@ -475,13 +472,6 @@ type v8Data struct {
475472 // version contains the V8 version
476473 version uint32
477474
478- // Node.js environment offsets
479- contextHandleOffset uint32
480- nativeContextOffset uint32
481- embedderDataOffset uint32
482- environmentPointerOffset uint32
483- executionAsyncIdOffset uint32
484-
485475 // bytecodeSizes contains the V8 bytecode length data
486476 bytecodeSizes []byte
487477
@@ -490,9 +480,6 @@ type v8Data struct {
490480
491481 // frametypeToName caches frametype's name
492482 frametypeToName [MaxFrameType ]libpf.String
493-
494- // isolateSym is the symbol of the v8 thread-local current isolate
495- isolateSym libpf.Address
496483}
497484
498485type v8Instance struct {
@@ -1774,12 +1761,6 @@ func (d *v8Data) Attach(ebpf interpreter.EbpfHandler, pid libpf.PID, _ libpf.Add
17741761 data := support.V8ProcInfo {
17751762 Version : d .version ,
17761763
1777- Context_handle_offset : d .contextHandleOffset ,
1778- Native_context_offset : d .nativeContextOffset ,
1779- Embedder_data_offset : d .embedderDataOffset ,
1780- Environment_pointer_offset : d .environmentPointerOffset ,
1781- Execution_async_id_offset : d .executionAsyncIdOffset ,
1782-
17831764 Fp_marker : mapFramePointerOffset (vms .FramePointer .Context ),
17841765 Fp_function : mapFramePointerOffset (vms .FramePointer .Function ),
17851766 Fp_bytecode_offset : mapFramePointerOffset (vms .FramePointer .BytecodeOffset ),
@@ -1798,10 +1779,9 @@ func (d *v8Data) Attach(ebpf interpreter.EbpfHandler, pid libpf.PID, _ libpf.Add
17981779 Off_Code_instruction_size : uint8 (vms .Code .InstructionSize ),
17991780 Off_Code_flags : uint8 (vms .Code .Flags ),
18001781
1801- Codekind_shift : vms .CodeKind .FieldShift ,
1802- Codekind_mask : uint8 (vms .CodeKind .FieldMask ),
1803- Codekind_baseline : vms .CodeKind .Baseline ,
1804- Isolate_sym : uint64 (d .isolateSym ),
1782+ Codekind_shift : vms .CodeKind .FieldShift ,
1783+ Codekind_mask : uint8 (vms .CodeKind .FieldMask ),
1784+ Codekind_baseline : vms .CodeKind .Baseline ,
18051785 }
18061786 if err := ebpf .UpdateProcData (libpf .V8 , pid , unsafe .Pointer (& data )); err != nil {
18071787 return nil , err
@@ -2099,56 +2079,6 @@ func (d *v8Data) readIntrospectionData(ef *pfelf.File) error {
20992079 return nil
21002080}
21012081
2102- // loadNodeClData loads various offsets that are needed for custom labels handling.
2103- func (d * v8Data ) loadNodeClData (ef * pfelf.File ) error {
2104- offset , err := ef .LookupTLSSymbolOffset ("_ZN2v88internal18g_current_isolate_E" )
2105- if err != nil {
2106- return err
2107- }
2108- d .isolateSym = libpf .Address (offset )
2109-
2110- syms , err := ef .ReadSymbols ()
2111- if err != nil {
2112- return fmt .Errorf ("failed to read symbols: %w" , err )
2113- }
2114-
2115- sym , err := syms .LookupSymbol ("_ZZ21napi_get_node_versionE7version" )
2116- if err != nil {
2117- return fmt .Errorf ("failed to lookup Node version symbol: %w" , err )
2118- }
2119-
2120- if sym == nil {
2121- return errors .New ("Node version symbol not found" )
2122- }
2123-
2124- if sym .Size < 12 {
2125- return fmt .Errorf ("Node version symbol size too small: %d" , sym .Size )
2126- }
2127-
2128- versBuf := make ([]byte , 12 )
2129- if _ , err = ef .ReadVirtualMemory (versBuf , int64 (sym .Address )); err != nil {
2130- return fmt .Errorf ("failed to read Node version data: %w" , err )
2131- }
2132-
2133- major := binary .LittleEndian .Uint32 (versBuf [0 :4 ])
2134- minor := binary .LittleEndian .Uint32 (versBuf [4 :8 ])
2135- patch := binary .LittleEndian .Uint32 (versBuf [8 :12 ])
2136-
2137- // Construct version string and look up Node.js environment offsets
2138- nodeVersion := fmt .Sprintf ("v%d.%d.%d" , major , minor , patch )
2139- if offsets , found := nodeOffsetTable [nodeVersion ]; found {
2140- d .contextHandleOffset = offsets .contextHandle
2141- d .nativeContextOffset = offsets .nativeContext
2142- d .embedderDataOffset = offsets .embedderData
2143- d .environmentPointerOffset = offsets .environmentPointer
2144- d .executionAsyncIdOffset = offsets .executionAsyncId
2145- } else {
2146- return fmt .Errorf ("no offsets found for Node.js version %s" , nodeVersion )
2147- }
2148-
2149- return nil
2150- }
2151-
21522082func Loader (ebpf interpreter.EbpfHandler , info * interpreter.LoaderInfo ) (interpreter.Data , error ) {
21532083 if ! v8Regex .MatchString (info .FileName ()) {
21542084 return nil , nil
@@ -2217,10 +2147,6 @@ func Loader(ebpf interpreter.EbpfHandler, info *interpreter.LoaderInfo) (interpr
22172147 }
22182148 }
22192149
2220- if err = d .loadNodeClData (ef ); err != nil {
2221- log .Warnf ("Failed to load extra data for Node.js custom labels handling: %v" , err )
2222- }
2223-
22242150 // load introspection data
22252151 if err = d .readIntrospectionData (ef ); err != nil {
22262152 return nil , err
0 commit comments