@@ -2,6 +2,7 @@ package blazesym_test
22
33import (
44 "debug/elf"
5+ "io"
56 "os"
67 "path/filepath"
78 "reflect"
@@ -97,16 +98,20 @@ func testElfDwarfSource(t *testing.T, source *blazesym.ElfSource, hasCodeInfo bo
9798 }
9899
99100 if hasCodeInfo {
100- if syms [0 ].CodeInfo .Dir == "" {
101- t .Errorf ("expected non-empty dir, got %q" , syms [0 ].CodeInfo .Dir )
102- }
101+ if syms [0 ].CodeInfo == nil {
102+ t .Error ("expected code info to be present" )
103+ } else {
104+ if syms [0 ].CodeInfo .Dir == "" {
105+ t .Errorf ("expected non-empty dir, got %q" , syms [0 ].CodeInfo .Dir )
106+ }
103107
104- if syms [0 ].CodeInfo .File != "test-stable-addrs.c" {
105- t .Errorf ("expected file to be test-stable-addrs.c, got %q" , syms [0 ].CodeInfo .File )
106- }
108+ if syms [0 ].CodeInfo .File != "test-stable-addrs.c" {
109+ t .Errorf ("expected file to be test-stable-addrs.c, got %q" , syms [0 ].CodeInfo .File )
110+ }
107111
108- if syms [0 ].CodeInfo .Line != 10 {
109- t .Errorf ("expected line to be 10, got %d" , syms [0 ].CodeInfo .Line )
112+ if syms [0 ].CodeInfo .Line != 10 {
113+ t .Errorf ("expected line to be 10, got %d" , syms [0 ].CodeInfo .Line )
114+ }
110115 }
111116 } else {
112117 if syms [0 ].CodeInfo != nil {
@@ -146,16 +151,20 @@ func testElfDwarfSource(t *testing.T, source *blazesym.ElfSource, hasCodeInfo bo
146151 }
147152
148153 if hasCodeInfo {
149- if syms [i ].CodeInfo .Dir == "" {
150- t .Errorf ("expected non-empty dir, got %q" , syms [i ].CodeInfo .Dir )
151- }
152-
153- if syms [i ].CodeInfo .File != "test-stable-addrs.c" {
154- t .Errorf ("expected file to be test-stable-addrs.c, got %q" , syms [i ].CodeInfo .File )
155- }
156-
157- if syms [i ].CodeInfo .Line == 0 {
158- t .Error ("expected line to non-zero" )
154+ if syms [i ].CodeInfo == nil {
155+ t .Error ("expected code info to be present" )
156+ } else {
157+ if syms [i ].CodeInfo .Dir == "" {
158+ t .Errorf ("expected non-empty dir, got %q" , syms [i ].CodeInfo .Dir )
159+ }
160+
161+ if syms [i ].CodeInfo .File != "test-stable-addrs.c" {
162+ t .Errorf ("expected file to be test-stable-addrs.c, got %q" , syms [i ].CodeInfo .File )
163+ }
164+
165+ if syms [i ].CodeInfo .Line == 0 {
166+ t .Error ("expected line to non-zero" )
167+ }
159168 }
160169 } else {
161170 if syms [i ].CodeInfo != nil {
@@ -186,3 +195,93 @@ func TestSymbolizeElfDwarf(t *testing.T) {
186195 })
187196 }
188197}
198+
199+ func copy (dst , src string ) error {
200+ s , err := os .Open (src )
201+ if err != nil {
202+ return err
203+ }
204+
205+ defer s .Close ()
206+
207+ d , err := os .Create (dst )
208+ if err != nil {
209+ return err
210+ }
211+
212+ defer d .Close ()
213+
214+ _ , err = io .Copy (d , s )
215+ if err != nil {
216+ return err
217+ }
218+
219+ return nil
220+ }
221+
222+ func TestConfigurableDebugDirs (t * testing.T ) {
223+ tmp , err := os .MkdirTemp (os .TempDir (), "*" )
224+ if err != nil {
225+ t .Fatal (err )
226+ }
227+
228+ dst := filepath .Join (tmp , "test-stable-addrs-stripped-with-link.bin" )
229+
230+ err = copy (dst , filepath .Join ("../data" , "test-stable-addrs-stripped-with-link.bin" ))
231+ if err != nil {
232+ t .Fatal (err )
233+ }
234+
235+ symbolizer , err := blazesym .NewSymbolizer (blazesym .WithDebugDirs ([]string {}))
236+ if err != nil {
237+ t .Fatal (err )
238+ }
239+
240+ syms , err := symbolizer .SymbolizeElfVirtOffsets (& blazesym.ElfSource {Path : dst , DebugSyms : true }, []uint64 {0x2000200 })
241+ if err != nil {
242+ t .Fatal (err )
243+ }
244+
245+ if syms [0 ].Name != "" {
246+ t .Errorf ("expected symbol to be not resolved, got %q" , syms [0 ].Name )
247+ }
248+
249+ if syms [0 ].Reason != blazesym .SymbolizeReasonMissingSyms {
250+ t .Errorf ("expected reason to be SymbolizeReasonMissingSyms, got %v" , syms [0 ].Reason )
251+ }
252+
253+ debugDir1 , err := os .MkdirTemp (os .TempDir (), "*" )
254+ if err != nil {
255+ t .Fatal (err )
256+ }
257+
258+ debugDir2 , err := os .MkdirTemp (os .TempDir (), "*" )
259+ if err != nil {
260+ t .Fatal (err )
261+ }
262+
263+ debugDst := filepath .Join (debugDir2 , "test-stable-addrs-dwarf-only.dbg" )
264+
265+ err = copy (debugDst , filepath .Join ("../data" , "test-stable-addrs-dwarf-only.dbg" ))
266+ if err != nil {
267+ t .Fatal (err )
268+ }
269+
270+ symbolizer , err = blazesym .NewSymbolizer (blazesym .WithDebugDirs ([]string {debugDir1 , debugDir2 }))
271+ if err != nil {
272+ t .Fatal (err )
273+ }
274+
275+ syms , err = symbolizer .SymbolizeElfVirtOffsets (& blazesym.ElfSource {Path : dst , DebugSyms : true }, []uint64 {0x2000200 })
276+ if err != nil {
277+ t .Fatal (err )
278+ }
279+
280+ if syms [0 ].Name != "factorial" {
281+ t .Errorf ("expected symbol to resolve to factorial, got %q" , syms [0 ].Name )
282+ }
283+
284+ if syms [0 ].Module != dst {
285+ t .Errorf ("expected module to be %q, got %q" , dst , syms [0 ].Module )
286+ }
287+ }
0 commit comments