@@ -13,12 +13,12 @@ package luajit // import "go.opentelemetry.io/ebpf-profiler/interpreter/luajit"
1313
1414import (
1515 "errors"
16- "fmt"
1716 "path"
1817 "strings"
1918 "sync"
2019 "unsafe"
2120
21+ log "github.com/sirupsen/logrus"
2222 "go.opentelemetry.io/ebpf-profiler/host"
2323 "go.opentelemetry.io/ebpf-profiler/interpreter"
2424 "go.opentelemetry.io/ebpf-profiler/libpf"
@@ -285,6 +285,7 @@ func (l *luajitInstance) processVMs(ebpf interpreter.EbpfHandler, pid libpf.PID)
285285 hash , traces , err := loadTraces (g + libpf .Address (l .g2Traces ), l .rm )
286286 if err != nil {
287287 // if g is bad remove it
288+ log .Warnf ("LuaJIT instance (%v) deleted: %v" , g , err )
288289 badVMs = append (badVMs , g )
289290 continue
290291 }
@@ -301,6 +302,7 @@ func (l *luajitInstance) processVMs(ebpf interpreter.EbpfHandler, pid libpf.PID)
301302 }
302303
303304 newPrefixes := []lpm.Prefix {}
305+ traceLoop:
304306 for i := range traces {
305307 t := traces [i ]
306308 // Validate the trace
@@ -310,14 +312,16 @@ func (l *luajitInstance) processVMs(ebpf interpreter.EbpfHandler, pid libpf.PID)
310312 foundRegion = true
311313 end := t .mcode + uint64 (t .szmcode )
312314 if end > reg .Vaddr + reg .Length {
313- return fmt .Errorf ("trace %v end goes beyond JIT region" , t )
315+ log .Errorf ("trace %v end goes beyond JIT region, bad szmcode" , t )
316+ continue traceLoop
314317 }
315318 break
316319 }
317320 }
318321
319322 if ! foundRegion {
320- return fmt .Errorf ("trace %v not in a JIT region" , t )
323+ log .Errorf ("trace %v not in a JIT region" , t )
324+ continue
321325 }
322326
323327 stackDelta := uint64 (t .spadjust ) + uint64 (cframeSizeJIT )
@@ -329,12 +333,13 @@ func (l *luajitInstance) processVMs(ebpf interpreter.EbpfHandler, pid libpf.PID)
329333 }
330334 p , err := l .addTrace (ebpf , pid , t , uint64 (g ), stackDelta )
331335 if err != nil {
332- return err
336+ log .Errorf ("Error adding trace(%d): %v" , t .traceno , err )
337+ continue
333338 }
334339 newPrefixes = append (newPrefixes , p ... )
335340 }
336341
337- logf ( "lj: new traces detected pid(%v) added: %d with %d prefixes and removed %d prefixes" ,
342+ log . Infof ( "LuaJIT traces for pid(%v) added: %d with %d prefixes and removed %d prefixes" ,
338343 pid , len (traces ), len (newPrefixes ), len (prefixes ))
339344
340345 l .prefixesByG [g ] = newPrefixes
@@ -417,8 +422,11 @@ func (l *luajitInstance) Symbolize(symbolReporter reporter.SymbolReporter, frame
417422 g := libpf .Address (frame .Lineno )
418423 if g != 0 {
419424 unseen := l .addVM (g )
420- if unseen && l .ebpf .CoredumpTest () {
421- return interpreter .ErrLJRestart
425+ if unseen {
426+ log .Infof ("New LuaJIT instance detected: %v" , g )
427+ if l .ebpf .CoredumpTest () {
428+ return interpreter .ErrLJRestart
429+ }
422430 }
423431 }
424432 return nil
0 commit comments