17 onlyundef = fp->nsym > 0;
18 for(i=0; elfsym(elf, i, &esym) >= 0; i++){
21 if(onlyundef && esym.shndx != ElfSymShnNone)
23 if(esym.type != ElfSymTypeObject && esym.type != ElfSymTypeFunc)
25 if(strchr(esym.name, '@'))
27 memset(&sym, 0, sizeof sym);
30 sym.loc.addr = esym.value;
32 sym.hiloc.type = LADDR;
33 sym.hiloc.addr = esym.value+esym.size;
36 if(esym.type==ElfSymTypeObject){
39 if(&elf->sect[esym.shndx] == elf->bss)
41 }else if(esym.type==ElfSymTypeFunc){
45 if(esym.shndx == ElfSymShnNone)
47 if(esym.bind==ElfSymBindLocal)
48 sym.type += 'a' - 'A';
52 for(i=0; i<elf->nprog; i++){
54 if(p->type != ElfProgDynamic)
56 elf->dynamic = p->vaddr;
57 memset(&sym, 0, sizeof sym);
58 sym.name = "_DYNAMIC";
59 sym.loc = locaddr(p->vaddr);
60 sym.hiloc = locaddr(p->vaddr+p->filesz);
69 elfsymlookup(Elf *elf, char *name, ulong *addr)
74 for(i=0; elfsym(elf, i, &esym) >= 0; i++){
77 if(strcmp(esym.name, name) == 0){
95 fprint(2, "dwarf symbols...\n");
96 if(symdwarf(fhdr) < 0)
97 fprint(2, "initializing dwarf: %r");
103 if(fhdr->stabs.stabbase){
105 fprint(2, "stabs symbols...\n");
106 if(symstabs(fhdr) < 0)
107 fprint(2, "initializing stabs: %r");
113 fprint(2, "elf symbols...\n");
115 if(elfsyminit(fhdr) < 0)
116 fprint(2, "initializing elf: %r");