version 1.2, 2002/03/15 16:41:06 |
version 1.3, 2002/03/15 17:49:51 |
|
|
Elf_Word esh_strsize; |
Elf_Word esh_strsize; |
Elf_Sym *esh_symtab; |
Elf_Sym *esh_symtab; |
Elf_Word esh_symsize; |
Elf_Word esh_symsize; |
Elf_Addr esh_offs; |
|
}; |
}; |
|
|
#define ESH_TO_ST(esh) (&(esh)->esh_st) |
#define ESH_TO_ST(esh) (&(esh)->esh_st) |
|
|
int nsyms, i; |
int nsyms, i; |
char *symn; |
char *symn; |
|
|
#define SYMVAL(S) (unsigned long)((S)->st_value + esh->esh_offs) |
#define SYMVAL(S) (unsigned long)((S)->st_value + st->st_offs) |
|
|
nsyms = esh->esh_symsize / sizeof(Elf_Sym); |
nsyms = esh->esh_symsize / sizeof(Elf_Sym); |
|
|
|
|
} |
} |
|
|
if (s != NULL) { |
if (s != NULL) { |
*res = s->st_value + ST_TO_ESH(st)->esh_offs; |
*res = s->st_value + st->st_offs; |
return (0); |
return (0); |
} |
} |
|
|
|
|
#ifndef __NetBSD__ |
#ifndef __NetBSD__ |
pid_t pid = ps->ps_pid; |
pid_t pid = ps->ps_pid; |
struct elf_object_v1 eobj; |
struct elf_object_v1 eobj; |
struct sym_table *st; |
|
struct r_debug rdeb; |
struct r_debug rdeb; |
reg addr; |
reg addr; |
Elf_Dyn dyn; |
Elf_Dyn dyn; |
|
|
warnx("Can't find _DYNAMIC"); |
warnx("Can't find _DYNAMIC"); |
return; |
return; |
} |
} |
addr = s->st_value + ST_TO_ESH(ps->ps_sym_exe)->esh_offs; |
addr = s->st_value + ps->ps_sym_exe->st_offs; |
|
|
do { |
do { |
if (read_from_pid(pid, addr, &dyn, sizeof(dyn)) < 0) { |
if (read_from_pid(pid, addr, &dyn, sizeof(dyn)) < 0) { |
|
|
if (i == MAXPATHLEN) |
if (i == MAXPATHLEN) |
continue; |
continue; |
|
|
st = st_open(ps, fname); |
if (st_open(ps, fname, eobj.load_offs) == NULL) |
if (st == NULL) { |
|
warn("symbol loading failed"); |
warn("symbol loading failed"); |
continue; |
|
} |
|
ST_TO_ESH(st)->esh_offs = eobj.load_offs; |
|
} |
} |
#endif |
#endif |
} |
} |