Source file
src/debug/elf/symbols_test.go
1
2
3
4
5 package elf
6
7 import (
8 "io"
9 "path"
10 "reflect"
11 "testing"
12 )
13
14
15 func TestSymbols(t *testing.T) {
16 do := func(file string, ts []Symbol, getfunc func(*File) ([]Symbol, error)) {
17 var f *File
18 var err error
19 if path.Ext(file) == ".gz" {
20 var r io.ReaderAt
21 if r, err = decompress(file); err == nil {
22 f, err = NewFile(r)
23 }
24 } else {
25 f, err = Open(file)
26 }
27 if err != nil {
28 t.Errorf("TestSymbols: cannot open file %s: %v", file, err)
29 return
30 }
31 defer f.Close()
32 fs, err := getfunc(f)
33 if err != nil && err != ErrNoSymbols {
34 t.Error(err)
35 return
36 } else if err == ErrNoSymbols {
37 fs = []Symbol{}
38 }
39 if !reflect.DeepEqual(ts, fs) {
40 t.Errorf("%s: Symbols = %v, want %v", file, ts, fs)
41 }
42 }
43 for file, ts := range symbolsGolden {
44 do(file, ts, (*File).Symbols)
45 }
46 for file, ts := range dynamicSymbolsGolden {
47 do(file, ts, (*File).DynamicSymbols)
48 }
49 }
50
51
52
53 var symbolsGolden = map[string][]Symbol{
54 "testdata/gcc-amd64-linux-exec": {
55 Symbol{
56 Name: "",
57 Info: 0x3,
58 Other: 0x0,
59 Section: 0x1,
60 Value: 0x400200,
61 Size: 0x0,
62 },
63 Symbol{
64 Name: "",
65 Info: 0x3,
66 Other: 0x0,
67 Section: 0x2,
68 Value: 0x40021C,
69 Size: 0x0,
70 },
71 Symbol{
72 Name: "",
73 Info: 0x3,
74 Other: 0x0,
75 Section: 0x3,
76 Value: 0x400240,
77 Size: 0x0,
78 },
79 Symbol{
80 Name: "",
81 Info: 0x3,
82 Other: 0x0,
83 Section: 0x4,
84 Value: 0x400268,
85 Size: 0x0,
86 },
87 Symbol{
88 Name: "",
89 Info: 0x3,
90 Other: 0x0,
91 Section: 0x5,
92 Value: 0x400288,
93 Size: 0x0,
94 },
95 Symbol{
96 Name: "",
97 Info: 0x3,
98 Other: 0x0,
99 Section: 0x6,
100 Value: 0x4002E8,
101 Size: 0x0,
102 },
103 Symbol{
104 Name: "",
105 Info: 0x3,
106 Other: 0x0,
107 Section: 0x7,
108 Value: 0x400326,
109 Size: 0x0,
110 },
111 Symbol{
112 Name: "",
113 Info: 0x3,
114 Other: 0x0,
115 Section: 0x8,
116 Value: 0x400330,
117 Size: 0x0,
118 },
119 Symbol{
120 Name: "",
121 Info: 0x3,
122 Other: 0x0,
123 Section: 0x9,
124 Value: 0x400350,
125 Size: 0x0,
126 },
127 Symbol{
128 Name: "",
129 Info: 0x3,
130 Other: 0x0,
131 Section: 0xA,
132 Value: 0x400368,
133 Size: 0x0,
134 },
135 Symbol{
136 Name: "",
137 Info: 0x3,
138 Other: 0x0,
139 Section: 0xB,
140 Value: 0x400398,
141 Size: 0x0,
142 },
143 Symbol{
144 Name: "",
145 Info: 0x3,
146 Other: 0x0,
147 Section: 0xC,
148 Value: 0x4003B0,
149 Size: 0x0,
150 },
151 Symbol{
152 Name: "",
153 Info: 0x3,
154 Other: 0x0,
155 Section: 0xD,
156 Value: 0x4003E0,
157 Size: 0x0,
158 },
159 Symbol{
160 Name: "",
161 Info: 0x3,
162 Other: 0x0,
163 Section: 0xE,
164 Value: 0x400594,
165 Size: 0x0,
166 },
167 Symbol{
168 Name: "",
169 Info: 0x3,
170 Other: 0x0,
171 Section: 0xF,
172 Value: 0x4005A4,
173 Size: 0x0,
174 },
175 Symbol{
176 Name: "",
177 Info: 0x3,
178 Other: 0x0,
179 Section: 0x10,
180 Value: 0x4005B8,
181 Size: 0x0,
182 },
183 Symbol{
184 Name: "",
185 Info: 0x3,
186 Other: 0x0,
187 Section: 0x11,
188 Value: 0x4005E0,
189 Size: 0x0,
190 },
191 Symbol{
192 Name: "",
193 Info: 0x3,
194 Other: 0x0,
195 Section: 0x12,
196 Value: 0x600688,
197 Size: 0x0,
198 },
199 Symbol{
200 Name: "",
201 Info: 0x3,
202 Other: 0x0,
203 Section: 0x13,
204 Value: 0x600698,
205 Size: 0x0,
206 },
207 Symbol{
208 Name: "",
209 Info: 0x3,
210 Other: 0x0,
211 Section: 0x14,
212 Value: 0x6006A8,
213 Size: 0x0,
214 },
215 Symbol{
216 Name: "",
217 Info: 0x3,
218 Other: 0x0,
219 Section: 0x15,
220 Value: 0x6006B0,
221 Size: 0x0,
222 },
223 Symbol{
224 Name: "",
225 Info: 0x3,
226 Other: 0x0,
227 Section: 0x16,
228 Value: 0x600850,
229 Size: 0x0,
230 },
231 Symbol{
232 Name: "",
233 Info: 0x3,
234 Other: 0x0,
235 Section: 0x17,
236 Value: 0x600858,
237 Size: 0x0,
238 },
239 Symbol{
240 Name: "",
241 Info: 0x3,
242 Other: 0x0,
243 Section: 0x18,
244 Value: 0x600880,
245 Size: 0x0,
246 },
247 Symbol{
248 Name: "",
249 Info: 0x3,
250 Other: 0x0,
251 Section: 0x19,
252 Value: 0x600898,
253 Size: 0x0,
254 },
255 Symbol{
256 Name: "",
257 Info: 0x3,
258 Other: 0x0,
259 Section: 0x1A,
260 Value: 0x0,
261 Size: 0x0,
262 },
263 Symbol{
264 Name: "",
265 Info: 0x3,
266 Other: 0x0,
267 Section: 0x1B,
268 Value: 0x0,
269 Size: 0x0,
270 },
271 Symbol{
272 Name: "",
273 Info: 0x3,
274 Other: 0x0,
275 Section: 0x1C,
276 Value: 0x0,
277 Size: 0x0,
278 },
279 Symbol{
280 Name: "",
281 Info: 0x3,
282 Other: 0x0,
283 Section: 0x1D,
284 Value: 0x0,
285 Size: 0x0,
286 },
287 Symbol{
288 Name: "",
289 Info: 0x3,
290 Other: 0x0,
291 Section: 0x1E,
292 Value: 0x0,
293 Size: 0x0,
294 },
295 Symbol{
296 Name: "",
297 Info: 0x3,
298 Other: 0x0,
299 Section: 0x1F,
300 Value: 0x0,
301 Size: 0x0,
302 },
303 Symbol{
304 Name: "",
305 Info: 0x3,
306 Other: 0x0,
307 Section: 0x20,
308 Value: 0x0,
309 Size: 0x0,
310 },
311 Symbol{
312 Name: "",
313 Info: 0x3,
314 Other: 0x0,
315 Section: 0x21,
316 Value: 0x0,
317 Size: 0x0,
318 },
319 Symbol{
320 Name: "init.c",
321 Info: 0x4,
322 Other: 0x0,
323 Section: 0xFFF1,
324 Value: 0x0,
325 Size: 0x0,
326 },
327 Symbol{
328 Name: "initfini.c",
329 Info: 0x4,
330 Other: 0x0,
331 Section: 0xFFF1,
332 Value: 0x0,
333 Size: 0x0,
334 },
335 Symbol{
336 Name: "call_gmon_start",
337 Info: 0x2,
338 Other: 0x0,
339 Section: 0xD,
340 Value: 0x40040C,
341 Size: 0x0,
342 },
343 Symbol{
344 Name: "crtstuff.c",
345 Info: 0x4,
346 Other: 0x0,
347 Section: 0xFFF1,
348 Value: 0x0,
349 Size: 0x0,
350 },
351 Symbol{
352 Name: "__CTOR_LIST__",
353 Info: 0x1,
354 Other: 0x0,
355 Section: 0x12,
356 Value: 0x600688,
357 Size: 0x0,
358 },
359 Symbol{
360 Name: "__DTOR_LIST__",
361 Info: 0x1,
362 Other: 0x0,
363 Section: 0x13,
364 Value: 0x600698,
365 Size: 0x0,
366 },
367 Symbol{
368 Name: "__JCR_LIST__",
369 Info: 0x1,
370 Other: 0x0,
371 Section: 0x14,
372 Value: 0x6006A8,
373 Size: 0x0,
374 },
375 Symbol{
376 Name: "__do_global_dtors_aux",
377 Info: 0x2,
378 Other: 0x0,
379 Section: 0xD,
380 Value: 0x400430,
381 Size: 0x0,
382 },
383 Symbol{
384 Name: "completed.6183",
385 Info: 0x1,
386 Other: 0x0,
387 Section: 0x19,
388 Value: 0x600898,
389 Size: 0x1,
390 },
391 Symbol{
392 Name: "p.6181",
393 Info: 0x1,
394 Other: 0x0,
395 Section: 0x18,
396 Value: 0x600890,
397 Size: 0x0,
398 },
399 Symbol{
400 Name: "frame_dummy",
401 Info: 0x2,
402 Other: 0x0,
403 Section: 0xD,
404 Value: 0x400470,
405 Size: 0x0,
406 },
407 Symbol{
408 Name: "crtstuff.c",
409 Info: 0x4,
410 Other: 0x0,
411 Section: 0xFFF1,
412 Value: 0x0,
413 Size: 0x0,
414 },
415 Symbol{
416 Name: "__CTOR_END__",
417 Info: 0x1,
418 Other: 0x0,
419 Section: 0x12,
420 Value: 0x600690,
421 Size: 0x0,
422 },
423 Symbol{
424 Name: "__DTOR_END__",
425 Info: 0x1,
426 Other: 0x0,
427 Section: 0x13,
428 Value: 0x6006A0,
429 Size: 0x0,
430 },
431 Symbol{
432 Name: "__FRAME_END__",
433 Info: 0x1,
434 Other: 0x0,
435 Section: 0x11,
436 Value: 0x400680,
437 Size: 0x0,
438 },
439 Symbol{
440 Name: "__JCR_END__",
441 Info: 0x1,
442 Other: 0x0,
443 Section: 0x14,
444 Value: 0x6006A8,
445 Size: 0x0,
446 },
447 Symbol{
448 Name: "__do_global_ctors_aux",
449 Info: 0x2,
450 Other: 0x0,
451 Section: 0xD,
452 Value: 0x400560,
453 Size: 0x0,
454 },
455 Symbol{
456 Name: "initfini.c",
457 Info: 0x4,
458 Other: 0x0,
459 Section: 0xFFF1,
460 Value: 0x0,
461 Size: 0x0,
462 },
463 Symbol{
464 Name: "hello.c",
465 Info: 0x4,
466 Other: 0x0,
467 Section: 0xFFF1,
468 Value: 0x0,
469 Size: 0x0,
470 },
471 Symbol{
472 Name: "_GLOBAL_OFFSET_TABLE_",
473 Info: 0x1,
474 Other: 0x2,
475 Section: 0x17,
476 Value: 0x600858,
477 Size: 0x0,
478 },
479 Symbol{
480 Name: "__init_array_end",
481 Info: 0x0,
482 Other: 0x2,
483 Section: 0x12,
484 Value: 0x600684,
485 Size: 0x0,
486 },
487 Symbol{
488 Name: "__init_array_start",
489 Info: 0x0,
490 Other: 0x2,
491 Section: 0x12,
492 Value: 0x600684,
493 Size: 0x0,
494 },
495 Symbol{
496 Name: "_DYNAMIC",
497 Info: 0x1,
498 Other: 0x2,
499 Section: 0x15,
500 Value: 0x6006B0,
501 Size: 0x0,
502 },
503 Symbol{
504 Name: "data_start",
505 Info: 0x20,
506 Other: 0x0,
507 Section: 0x18,
508 Value: 0x600880,
509 Size: 0x0,
510 },
511 Symbol{
512 Name: "__libc_csu_fini",
513 Info: 0x12,
514 Other: 0x0,
515 Section: 0xD,
516 Value: 0x4004C0,
517 Size: 0x2,
518 },
519 Symbol{
520 Name: "_start",
521 Info: 0x12,
522 Other: 0x0,
523 Section: 0xD,
524 Value: 0x4003E0,
525 Size: 0x0,
526 },
527 Symbol{
528 Name: "__gmon_start__",
529 Info: 0x20,
530 Other: 0x0,
531 Section: 0x0,
532 Value: 0x0,
533 Size: 0x0,
534 },
535 Symbol{
536 Name: "_Jv_RegisterClasses",
537 Info: 0x20,
538 Other: 0x0,
539 Section: 0x0,
540 Value: 0x0,
541 Size: 0x0,
542 },
543 Symbol{
544 Name: "puts@@GLIBC_2.2.5",
545 Info: 0x12,
546 Other: 0x0,
547 Section: 0x0,
548 Value: 0x0,
549 Size: 0x18C,
550 },
551 Symbol{
552 Name: "_fini",
553 Info: 0x12,
554 Other: 0x0,
555 Section: 0xE,
556 Value: 0x400594,
557 Size: 0x0,
558 },
559 Symbol{
560 Name: "__libc_start_main@@GLIBC_2.2.5",
561 Info: 0x12,
562 Other: 0x0,
563 Section: 0x0,
564 Value: 0x0,
565 Size: 0x1C2,
566 },
567 Symbol{
568 Name: "_IO_stdin_used",
569 Info: 0x11,
570 Other: 0x0,
571 Section: 0xF,
572 Value: 0x4005A4,
573 Size: 0x4,
574 },
575 Symbol{
576 Name: "__data_start",
577 Info: 0x10,
578 Other: 0x0,
579 Section: 0x18,
580 Value: 0x600880,
581 Size: 0x0,
582 },
583 Symbol{
584 Name: "__dso_handle",
585 Info: 0x11,
586 Other: 0x2,
587 Section: 0x18,
588 Value: 0x600888,
589 Size: 0x0,
590 },
591 Symbol{
592 Name: "__libc_csu_init",
593 Info: 0x12,
594 Other: 0x0,
595 Section: 0xD,
596 Value: 0x4004D0,
597 Size: 0x89,
598 },
599 Symbol{
600 Name: "__bss_start",
601 Info: 0x10,
602 Other: 0x0,
603 Section: 0xFFF1,
604 Value: 0x600898,
605 Size: 0x0,
606 },
607 Symbol{
608 Name: "_end",
609 Info: 0x10,
610 Other: 0x0,
611 Section: 0xFFF1,
612 Value: 0x6008A0,
613 Size: 0x0,
614 },
615 Symbol{
616 Name: "_edata",
617 Info: 0x10,
618 Other: 0x0,
619 Section: 0xFFF1,
620 Value: 0x600898,
621 Size: 0x0,
622 },
623 Symbol{
624 Name: "main",
625 Info: 0x12,
626 Other: 0x0,
627 Section: 0xD,
628 Value: 0x400498,
629 Size: 0x1B,
630 },
631 Symbol{
632 Name: "_init",
633 Info: 0x12,
634 Other: 0x0,
635 Section: 0xB,
636 Value: 0x400398,
637 Size: 0x0,
638 },
639 },
640 "testdata/go-relocation-test-clang-x86.obj": {
641 Symbol{
642 Name: "go-relocation-test-clang.c",
643 Info: 0x4,
644 Other: 0x0,
645 Section: 0xFFF1,
646 Value: 0x0,
647 Size: 0x0,
648 },
649 Symbol{
650 Name: ".Linfo_string0",
651 Info: 0x0,
652 Other: 0x0,
653 Section: 0xC,
654 Value: 0x0,
655 Size: 0x0,
656 },
657 Symbol{
658 Name: ".Linfo_string1",
659 Info: 0x0,
660 Other: 0x0,
661 Section: 0xC,
662 Value: 0x2C,
663 Size: 0x0,
664 },
665 Symbol{
666 Name: ".Linfo_string2",
667 Info: 0x0,
668 Other: 0x0,
669 Section: 0xC,
670 Value: 0x47,
671 Size: 0x0,
672 },
673 Symbol{
674 Name: ".Linfo_string3",
675 Info: 0x0,
676 Other: 0x0,
677 Section: 0xC,
678 Value: 0x4C,
679 Size: 0x0,
680 },
681 Symbol{
682 Name: ".Linfo_string4",
683 Info: 0x0,
684 Other: 0x0,
685 Section: 0xC,
686 Value: 0x4E,
687 Size: 0x0,
688 },
689 Symbol{
690 Name: "",
691 Info: 0x3,
692 Other: 0x0,
693 Section: 0x1,
694 Value: 0x0,
695 Size: 0x0,
696 },
697 Symbol{
698 Name: "",
699 Info: 0x3,
700 Other: 0x0,
701 Section: 0x2,
702 Value: 0x0,
703 Size: 0x0,
704 },
705 Symbol{
706 Name: "",
707 Info: 0x3,
708 Other: 0x0,
709 Section: 0x3,
710 Value: 0x0,
711 Size: 0x0,
712 },
713 Symbol{
714 Name: "",
715 Info: 0x3,
716 Other: 0x0,
717 Section: 0x4,
718 Value: 0x0,
719 Size: 0x0,
720 },
721 Symbol{
722 Name: "",
723 Info: 0x3,
724 Other: 0x0,
725 Section: 0x6,
726 Value: 0x0,
727 Size: 0x0,
728 },
729 Symbol{
730 Name: "",
731 Info: 0x3,
732 Other: 0x0,
733 Section: 0x7,
734 Value: 0x0,
735 Size: 0x0,
736 },
737 Symbol{
738 Name: "",
739 Info: 0x3,
740 Other: 0x0,
741 Section: 0x8,
742 Value: 0x0,
743 Size: 0x0,
744 },
745 Symbol{
746 Name: "",
747 Info: 0x3,
748 Other: 0x0,
749 Section: 0xA,
750 Value: 0x0,
751 Size: 0x0,
752 },
753 Symbol{
754 Name: "",
755 Info: 0x3,
756 Other: 0x0,
757 Section: 0xC,
758 Value: 0x0,
759 Size: 0x0,
760 },
761 Symbol{
762 Name: "",
763 Info: 0x3,
764 Other: 0x0,
765 Section: 0xD,
766 Value: 0x0,
767 Size: 0x0,
768 },
769 Symbol{
770 Name: "",
771 Info: 0x3,
772 Other: 0x0,
773 Section: 0xE,
774 Value: 0x0,
775 Size: 0x0,
776 },
777 Symbol{
778 Name: "",
779 Info: 0x3,
780 Other: 0x0,
781 Section: 0xF,
782 Value: 0x0,
783 Size: 0x0,
784 },
785 Symbol{
786 Name: "",
787 Info: 0x3,
788 Other: 0x0,
789 Section: 0x10,
790 Value: 0x0,
791 Size: 0x0,
792 },
793 Symbol{
794 Name: "v",
795 Info: 0x11,
796 Other: 0x0,
797 Section: 0xFFF2,
798 Value: 0x4,
799 Size: 0x4,
800 },
801 },
802 "testdata/hello-world-core.gz": {},
803 }
804
805 var dynamicSymbolsGolden = map[string][]Symbol{
806 "testdata/gcc-amd64-linux-exec": {
807 Symbol{
808 Name: "__gmon_start__",
809 Info: 0x20,
810 Other: 0x0,
811 Section: 0x0,
812 Value: 0x0,
813 Size: 0x0,
814 },
815 Symbol{
816 Name: "puts",
817 Info: 0x12,
818 Other: 0x0,
819 Section: 0x0,
820 Value: 0x0,
821 Size: 0x18C,
822 Version: "GLIBC_2.2.5",
823 Library: "libc.so.6",
824 },
825 Symbol{
826 Name: "__libc_start_main",
827 Info: 0x12,
828 Other: 0x0,
829 Section: 0x0,
830 Value: 0x0,
831 Size: 0x1C2,
832 Version: "GLIBC_2.2.5",
833 Library: "libc.so.6",
834 },
835 },
836 "testdata/go-relocation-test-clang-x86.obj": {},
837 "testdata/hello-world-core.gz": {},
838 }
839
View as plain text