symtab
struct symtab dynsymtab;
struct symtab symtab;
if (file->symtab.nsyms > 0)
free(file->symtab.index);
struct symtab *symtab;
(void)gelf_getsym(thunk->symtab->data, i1, &sym1);
(void)gelf_getsym(thunk->symtab->data, i2, &sym2);
s1 = elf_strptr(thunk->e, thunk->symtab->stridx, sym1.st_name);
s2 = elf_strptr(thunk->e, thunk->symtab->stridx, sym2.st_name);
load_symtab(Elf *e, struct symtab *symtab, u_long sh_type)
if ((symtab->data = elf_getdata(scn, NULL)) == NULL)
symtab->index = calloc(nsyms, sizeof(u_int));
if (symtab->index == NULL)
symtab->index[i] = i;
symtab->nsyms = nsyms;
symtab->stridx = shdr.sh_link;
thunk.symtab = symtab;
qsort_r(symtab->index, nsyms, sizeof(u_int), symvalcmp, &thunk);
file->symtab.nsyms = file->dynsymtab.nsyms = 0;
(void)load_symtab(file->elf, &file->symtab, SHT_SYMTAB);
lookup_symbol_by_addr(Elf *e, struct symtab *symtab, uintptr_t addr,
if (symtab->nsyms == 0)
data = symtab->data;
max = symtab->nsyms - 1;
(void)gelf_getsym(data, symtab->index[mid], &sym);
for (i = mid; i < symtab->nsyms; i++) {
(void)gelf_getsym(data, symtab->index[i], &sym);
(void)gelf_getsym(data, symtab->index[i - 1], symp);
s = elf_strptr(e, symtab->stridx, symp->st_name);
error = lookup_symbol_by_addr(file->elf, &file->symtab, addr,
lookup_symbol_by_name(Elf *elf, struct symtab *symtab, const char *symbol,
if (symtab->nsyms == 0)
data = symtab->data;
s = elf_strptr(elf, symtab->stridx, sym.st_name);
error = lookup_symbol_by_name(file->elf, &file->symtab, symbol,
struct symtab *symtab;
symtab = which == PR_SYMTAB ? &file->symtab : &file->dynsymtab;
if (symtab->nsyms == 0)
for (i = 0; gelf_getsym(symtab->data, i, &sym) != NULL; i++) {
s = elf_strptr(file->elf, symtab->stridx, sym.st_name);
dstsym = dstobj->symtab + ELF_R_SYM(rela->r_info);
sym = &obj->symtab[ELF_R_SYM(rela->r_info)];
dstsym = dstobj->symtab + ELF_R_SYM(rela->r_info);
obj->strtab + obj->symtab[symnum].st_name,
obj->strtab + obj->symtab[symnum].st_name,
obj->strtab + obj->symtab[symnum].st_name,
obj->strtab + obj->symtab[symnum].st_name,
obj->strtab + obj->symtab[symnum].st_name,
obj->strtab + obj->symtab[symnum].st_name,
obj->strtab + obj->symtab[symnum].st_name);
dstsym = dstobj->symtab + ELF_R_SYM(rel->r_info);
sym = obj->symtab + ELF_R_SYM(rel->r_info);
sym = obj->symtab + ELF_R_SYM(rela->r_info);
dstsym = dstobj->symtab + ELF_R_SYM(rel->r_info);
dstsym = dstobj->symtab + ELF_R_SYM(rela->r_info);
dstsym = dstobj->symtab + ELF_R_SYM(rela->r_info);
dstsym = dstobj->symtab + ELF_R_SYM(rela->r_info);
obj->symtab = (const Elf_Sym *)(obj->relocbase +
ref = refobj->symtab + symnum;
if (obj->symtab == NULL || obj->strtab == NULL ||
def = obj->symtab + symoffset;
symp = obj->symtab + symnum;
const Elf_Sym *symtab; /* Symbol table */
COPYOUT(ef->symtab + symnum, &sym, sizeof(sym));
Elf_Sym *symtab;
ef->symtab =
if (ef->hashtab == NULL || ef->symtab == NULL ||
vm_offset_t strtab, symtab, fdt_start;
sym_count = symtab = strtab = 0;
if (shdr[i].sh_type == SHT_DYNSYM && symtab == 0) {
symtab = shdr[i].sh_addr + offs;
COPYOUT(symtab, &sym, sizeof(sym));
symtab += sizeof(sym);
const Elf_Sym *symp = lc->symtab;
if (lc->symtab == NULL) {
const Elf_Sym *symtab, *symtab_end;
symtab = sd->lc.symtab;
symtab_end = symtab + sd->lc.nsym;
objtoff = sym_to_objtoff(&sd->lc, sd->sym, symtab, symtab_end);
sym_to_objtoff(linker_ctf_t *lc, const Elf_Sym *sym, const Elf_Sym *symtab,
if (!(sym >= symtab && sym <= symtab_end)) {
for (const Elf_Sym *symp = symtab; symp < symtab_end; symp++) {
X_db_search_symbol(db_symtab_t *symtab, db_addr_t off, db_strategy_t strat,
if (symtab->private == NULL) {
stoffs -= DB_PRIVATE(symtab)->relbase;
for (sym = (Elf_Sym*)symtab->start; (char*)sym < symtab->end; sym++) {
X_db_sym_numargs(db_symtab_t *symtab, c_db_sym_t sym, int *nargp,
X_db_symbol_values(db_symtab_t *symtab, c_db_sym_t sym, const char **namep,
if (symtab->private == NULL) {
*namep = (const char *)DB_PRIVATE(symtab)->strtab +
DB_PRIVATE(symtab)->relbase;
X_db_line_at_pc(db_symtab_t *symtab, c_db_sym_t sym, char **file, int *line,
X_db_lookup(db_symtab_t *symtab, const char *symbol)
if (symtab->private == NULL) {
sym = (Elf_Sym *)symtab->start;
while ((char *)sym < symtab->end) {
!strcmp(DB_PRIVATE(symtab)->strtab +
c_db_sym_t X_db_search_symbol(db_symtab_t *symtab, db_addr_t off,
void X_db_symbol_values(db_symtab_t *symtab, c_db_sym_t sym,
bool X_db_line_at_pc(db_symtab_t *symtab, c_db_sym_t cursym,
const Elf_Sym *symtab;
syms = LINKER_SYMTAB_GET(lf, &symtab);
const Elf_Sym *symtab;
numsyms = LINKER_SYMTAB_GET(lf, &symtab);
bcopy(symtab, buf, len);
(c_linker_sym_t)&symtab[i], &symval) == 0) {
symtab += nsyms;
lc->symtab = ef->ddbsymtab;
lc->symtab = ef->ddbsymtab;
lc->symtab = ef->ddbsymtab;
ref = ef->symtab + ELF_R_SYM(r_info);
ref = ef->symtab + ELF_R_SYM(r_info);
symp = ef->symtab + symnum;
if (es >= ef->symtab && es < ef->symtab + ef->nchains) {
if (ef->symtab == ef->ddbsymtab)
return (ef->symtab + symidx);
sym = ef->symtab + symidx;
sym = ef->symtab + symidx;
link_elf_symtab_get(linker_file_t lf, const Elf_Sym **symtab)
*symtab = ef->ddbsymtab;
if (*symtab == NULL)
symp = ef->symtab + symidx;
Elf_Sym *symtab;
symtab = (Elf_Sym *)base;
ef->ddbsymtab = symtab;
ef->symtab = (Elf_Sym*) (ef->address + dp->d_un.d_ptr);
ef->ddbsymtab = ef->symtab;
const Elf_Sym *symtab; /* DT_SYMTAB */
link_elf_symtab_get(linker_file_t lf, const Elf_Sym **symtab)
*symtab = ef->ddbsymtab;
if (*symtab == NULL)
const Elf_Sym *symtab; /* Ptr to the symbol table. */
if (wantsym(&symtab[i], strtab))
const Elf_Sym *sym = &symtab[i];
const Elf_Sym *symtab;
symtab = (const Elf_Sym *)(base + sh_symtab->sh_offset);