segments[i].fnIdx = -1;
segments[i].dev = 0;
segments[i].ino = 0;
- segments[i].symtab = NULL;
+ segments[i].seginfo = NULL;
}
if (s1->prot != s2->prot)
return False;
- if (s1->symtab != s2->symtab)
+ if (s1->seginfo != s2->seginfo)
return False;
if (s1->flags & SF_FILE){
static void freeseg(Segment *s)
{
recycleseg(s);
- if (s->symtab != NULL) {
- VG_(symtab_decref)(s->symtab, s->addr);
- s->symtab = NULL;
+ if (s->seginfo != NULL) {
+ VG_(seginfo_decref)(s->seginfo, s->addr);
+ s->seginfo = NULL;
}
VG_(SkipNode_Free)(&sk_segments, s);
s->filename = s->fnIdx==-1 ? NULL : &segnames[s->fnIdx].fname[0];
s->dev = dev;
s->ino = ino;
- s->symtab = NULL;
+ s->seginfo = NULL;
/* Clean up right now */
preen_segments();
Valgrind, is at least readable and seems to contain an object
file, then try reading symbols from it.
*/
- if (s->symtab == NULL
+ if (s->seginfo == NULL
&& (addr+len < VG_(valgrind_base) || addr > VG_(valgrind_last))
&& (flags & (SF_MMAP|SF_NOSYMS)) == SF_MMAP) {
if (off == 0
&& (prot & (VKI_PROT_READ|VKI_PROT_EXEC)) == (VKI_PROT_READ|VKI_PROT_EXEC)
&& len >= VKI_PAGE_SIZE
&& VG_(is_object_file)((void *)addr)) {
- s->symtab = VG_(read_seg_symbols)(s);
- if (s->symtab != NULL) {
+ s->seginfo = VG_(read_seg_symbols)(s);
+ if (s->seginfo != NULL) {
s->flags |= SF_DYNLIB;
}
} else if (flags & SF_MMAP) {
#if 0
const SegInfo *info;
- /* Otherwise see if an existing symtab applies to this Segment */
+ /* Otherwise see if an existing SegInfo applies to this Segment */
for(info = VG_(next_seginfo)(NULL);
info != NULL;
info = VG_(next_seginfo)(info)) {
if (VG_(seg_overlaps)(s, VG_(seg_start)(info), VG_(seg_size)(info)))
{
- s->symtab = (SegInfo *)info;
- VG_(symtab_incref)((SegInfo *)info);
+ s->seginfo = (SegInfo *)info;
+ VG_(seginfo_incref)((SegInfo *)info);
}
}
#endif
continue;
if (seg->symtab != NULL)
- VG_(symtab_decref)(seg->symtab, seg->addr);
+ VG_(seginfo_decref)(seg->symtab, seg->addr);
VG_(symtab_incref)(si);
seg->symtab = si;
else FIND(".plt", si->plt_start, si->plt_size, dummy_addr, 1, Addr)
# undef FIND
-
- /* Check some sizes */
- vg_assert((o_dynsym_sz % sizeof(ElfXX_Sym)) == 0);
- vg_assert((o_symtab_sz % sizeof(ElfXX_Sym)) == 0);
}
+
+ /* Check some sizes */
+ vg_assert((o_dynsym_sz % sizeof(ElfXX_Sym)) == 0);
+ vg_assert((o_symtab_sz % sizeof(ElfXX_Sym)) == 0);
read_symtab(si, "symbol table", False,
o_symtab, o_symtab_sz,
else FIND(".line", dwarf1l, dwarf1l_sz, UChar*)
# undef FIND
-
- /* Check some sizes */
- vg_assert((o_dynsym_sz % sizeof(ElfXX_Sym)) == 0);
- vg_assert((o_symtab_sz % sizeof(ElfXX_Sym)) == 0);
}
}
}
{
SegInfo* si;
- vg_assert(seg->symtab == NULL);
+ vg_assert(seg->seginfo == NULL);
VGP_PUSHCC(VgpReadSyms);
return;
}
-void VG_(symtab_decref)(SegInfo *si, Addr start)
+void VG_(seginfo_decref)(SegInfo *si, Addr start)
{
vg_assert(si->ref >= 1);
if (--si->ref == 0)
unload_symbols(si->start, si->size);
}
-void VG_(symtab_incref)(SegInfo *si)
+void VG_(seginfo_incref)(SegInfo *si)
{
vg_assert(si->ref > 0);
si->ref++;
s = VG_(find_segment)(ptr);
- if (s == NULL || s->symtab == NULL)
+ if (s == NULL || s->seginfo == NULL)
goto not_found;
- si = s->symtab;
+ si = s->seginfo;
sno = search_one_symtab ( si, ptr, match_anywhere_in_fun );
if (sno == -1) goto not_found;
/*--- SegInfo accessor functions ---*/
/*------------------------------------------------------------*/
-const SegInfo* VG_(next_seginfo)(const SegInfo* seg)
+const SegInfo* VG_(next_seginfo)(const SegInfo* si)
{
- if (seg == NULL)
+ if (si == NULL)
return segInfo;
- return seg->next;
+ return si->next;
}
-Addr VG_(seg_start)(const SegInfo* seg)
+Addr VG_(seg_start)(const SegInfo* si)
{
- return seg->start;
+ return si->start;
}
-SizeT VG_(seg_size)(const SegInfo* seg)
+SizeT VG_(seg_size)(const SegInfo* si)
{
- return seg->size;
+ return si->size;
}
-const UChar* VG_(seg_filename)(const SegInfo* seg)
+const UChar* VG_(seg_filename)(const SegInfo* si)
{
- return seg->filename;
+ return si->filename;
}
-ULong VG_(seg_sym_offset)(const SegInfo* seg)
+ULong VG_(seg_sym_offset)(const SegInfo* si)
{
- return seg->offset;
+ return si->offset;
}
VgSectKind VG_(seg_sect_kind)(Addr a)
{
- SegInfo* seg;
+ SegInfo* si;
VgSectKind ret = Vg_SectUnknown;
- for(seg = segInfo; seg != NULL; seg = seg->next) {
- if (a >= seg->start && a < (seg->start + seg->size)) {
+ for(si = segInfo; si != NULL; si = si->next) {
+ if (a >= si->start && a < (si->start + si->size)) {
if (0)
- VG_(printf)("addr=%p seg=%p %s got=%p %d plt=%p %d data=%p %d bss=%p %d\n",
- a, seg, seg->filename,
- seg->got_start, seg->got_size,
- seg->plt_start, seg->plt_size,
- seg->data_start, seg->data_size,
- seg->bss_start, seg->bss_size);
+ VG_(printf)("addr=%p si=%p %s got=%p %d plt=%p %d data=%p %d bss=%p %d\n",
+ a, si, si->filename,
+ si->got_start, si->got_size,
+ si->plt_start, si->plt_size,
+ si->data_start, si->data_size,
+ si->bss_start, si->bss_size);
ret = Vg_SectText;
- if (a >= seg->data_start && a < (seg->data_start + seg->data_size))
+ if (a >= si->data_start && a < (si->data_start + si->data_size))
ret = Vg_SectData;
- else if (a >= seg->bss_start && a < (seg->bss_start + seg->bss_size))
+ else if (a >= si->bss_start && a < (si->bss_start + si->bss_size))
ret = Vg_SectBSS;
- else if (a >= seg->plt_start && a < (seg->plt_start + seg->plt_size))
+ else if (a >= si->plt_start && a < (si->plt_start + si->plt_size))
ret = Vg_SectPLT;
- else if (a >= seg->got_start && a < (seg->got_start + seg->got_size))
+ else if (a >= si->got_start && a < (si->got_start + si->got_size))
ret = Vg_SectGOT;
}
}