@@ -464,8 +464,8 @@ fill_lines(int num_traces, void **traces, int check_debuglink,
464464 int fd ;
465465 off_t filesize ;
466466 char * file ;
467- ElfW (Shdr ) * symtab_shdr = NULL ;
468- ElfW (Shdr ) * strtab_shdr = NULL ;
467+ ElfW (Shdr ) * symtab_shdr = NULL , * strtab_shdr = NULL ;
468+ ElfW (Shdr ) * dynsym_shdr = NULL , * dynstr_shdr = NULL ;
469469
470470 fd = open (binary_filename , O_RDONLY );
471471 if (fd < 0 ) {
@@ -532,11 +532,18 @@ fill_lines(int num_traces, void **traces, int check_debuglink,
532532 if (!strcmp (section_name , ".strtab" )) {
533533 strtab_shdr = shdr + i ;
534534 }
535+ else if (!strcmp (section_name , ".dynstr" )) {
536+ dynstr_shdr = shdr + i ;
537+ }
535538 break ;
536539 case SHT_SYMTAB :
537540 /* if (!strcmp(section_name, ".symtab")) */
538541 symtab_shdr = shdr + i ;
539542 break ;
543+ case SHT_DYNSYM :
544+ /* if (!strcmp(section_name, ".dynsym")) */
545+ dynsym_shdr = shdr + i ;
546+ break ;
540547 case SHT_PROGBITS :
541548 if (!strcmp (section_name , ".debug_line" )) {
542549 debug_line_shdr = shdr + i ;
@@ -548,6 +555,11 @@ fill_lines(int num_traces, void **traces, int check_debuglink,
548555 }
549556 }
550557
558+ if (!symtab_shdr ) {
559+ symtab_shdr = dynsym_shdr ;
560+ strtab_shdr = dynstr_shdr ;
561+ }
562+
551563 if (symtab_shdr && strtab_shdr ) {
552564 char * strtab = file + strtab_shdr -> sh_offset ;
553565 ElfW (Sym ) * symtab = (ElfW (Sym ) * )(file + symtab_shdr -> sh_offset );
0 commit comments