MCPcopy Create free account
hub / github.com/F-Stack/f-stack / link_elf_symbol_values

Function link_elf_symbol_values

freebsd/kern/link_elf.c:1566–1597  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1564}
1565
1566static int
1567link_elf_symbol_values(linker_file_t lf, c_linker_sym_t sym,
1568 linker_symval_t *symval)
1569{
1570 elf_file_t ef;
1571 const Elf_Sym *es;
1572 caddr_t val;
1573
1574 ef = (elf_file_t)lf;
1575 es = (const Elf_Sym *)sym;
1576 if (es >= ef->symtab && es < (ef->symtab + ef->nchains)) {
1577 symval->name = ef->strtab + es->st_name;
1578 val = (caddr_t)ef->address + es->st_value;
1579 if (ELF_ST_TYPE(es->st_info) == STT_GNU_IFUNC)
1580 val = ((caddr_t (*)(void))val)();
1581 symval->value = val;
1582 symval->size = es->st_size;
1583 return (0);
1584 }
1585 if (ef->symtab == ef->ddbsymtab)
1586 return (ENOENT);
1587 if (es >= ef->ddbsymtab && es < (ef->ddbsymtab + ef->ddbsymcnt)) {
1588 symval->name = ef->ddbstrtab + es->st_name;
1589 val = (caddr_t)ef->address + es->st_value;
1590 if (ELF_ST_TYPE(es->st_info) == STT_GNU_IFUNC)
1591 val = ((caddr_t (*)(void))val)();
1592 symval->value = val;
1593 symval->size = es->st_size;
1594 return (0);
1595 }
1596 return (ENOENT);
1597}
1598
1599static int
1600link_elf_search_symbol(linker_file_t lf, caddr_t value,

Callers 2

link_elf_lookup_setFunction · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected