const ElfW(Sym) * elf_sym = reinterpret_cast<const ElfW(Sym) *>(base_address);
                
                for (ElfW(Word) sym_index = 0; sym_index < ElfW(Word)(sym_cnt); ++sym_index)
                {
                    /* Get the name of the sym_index-th symbol.
                     * This is located at the address of st_name relative to the beginning of the string table.
                     */
                    const char * sym_name = &strtab[elf_sym[sym_index].st_name];
                    if (!sym_name)
                        continue;
                    SymbolIndex::Symbol symbol;
                    symbol.address_begin = reinterpret_cast<const void *>(
                        info->dlpi_addr + elf_sym[sym_index].st_value);
                    symbol.address_end = reinterpret_cast<const void *>(
                        info->dlpi_addr + elf_sym[sym_index].st_value + elf_sym[sym_index].st_size);
                    symbol.name = sym_name;
                    
                    if (elf_sym[sym_index].st_size)
                        symbols.push_back(symbol);
                    
                    updateResources(base_address, info->dlpi_name, symbol.name, symbol.address_begin, resources);
                }
                break;
            }
        }
    }
}
#if !defined USE_MUSL
String getBuildIDFromProgramHeaders(dl_phdr_info * info)