+2021-06-28 Simon Marchi <simon.marchi@polymtl.ca>
+
+ * objfiles.h (struct obj_section): Move down.
+ <offset, set_offset, addr, endaddr>: New.
+ (obj_section_offset, obj_section_addr, obj_section_endaddr),
+ replace all users to use obj_section methods.
+ (struct objfile) <section_offset, set_section_offset>: New.
+
+2021-06-28 Simon Marchi <simon.marchi@polymtl.ca>
+
+ * objfiles.h (struct obj_section): Move down.
+ <offset, set_offset, addr, endaddr>: New.
+ (obj_section_offset, obj_section_addr, obj_section_endaddr),
+ replace all users to use obj_section methods.
+ (struct objfile) <section_offset, set_section_offset>: New.
+
2021-06-28 Simon Marchi <simon.marchi@polymtl.ca>
* .flake8: New.
data->section_maps_sorted[section_idx] = true;
}
- struct arm_mapping_symbol map_key
- = { memaddr - obj_section_addr (sec), 0 };
+ arm_mapping_symbol map_key = { memaddr - sec->addr (), 0 };
arm_mapping_symbol_vec::const_iterator it
= std::lower_bound (map.begin (), map.end (), map_key);
if (it->value == map_key.value)
{
if (start)
- *start = it->value + obj_section_addr (sec);
+ *start = it->value + sec->addr ();
return it->type;
}
}
= it - 1;
if (start)
- *start = prev_it->value + obj_section_addr (sec);
+ *start = prev_it->value + sec->addr ();
return prev_it->type;
}
}
NULL
};
- CORE_ADDR pc = pers + obj_section_offset (pers_sec);
+ CORE_ADDR pc = pers + pers_sec->offset ();
int k;
for (k = 0; personality[k]; k++)
if (sec != NULL)
{
struct arm_exidx_data *data;
- struct arm_exidx_entry map_key = { memaddr - obj_section_addr (sec), 0 };
+ struct arm_exidx_entry map_key = { memaddr - sec->addr (), 0 };
data = arm_exidx_data_key.get (sec->objfile->obfd);
if (data != NULL)
if (idx->addr == map_key.addr)
{
if (start)
- *start = idx->addr + obj_section_addr (sec);
+ *start = idx->addr + sec->addr ();
return idx->entry;
}
}
{
idx = idx - 1;
if (start)
- *start = idx->addr + obj_section_addr (sec);
+ *start = idx->addr + sec->addr ();
return idx->entry;
}
}
if (bfd_section_size (osect->the_bfd_section) == 0)
continue;
- m_target_sections.emplace_back (obj_section_addr (osect),
- obj_section_endaddr (osect),
+ m_target_sections.emplace_back (osect->addr (), osect->endaddr (),
osect->the_bfd_section, (void *) objfile);
}
}
bfd *abfd = objfile->obfd;
asection *asec = objsec->the_bfd_section;
bfd_vma align = (bfd_vma) 1 << bfd_section_alignment (asec);
- bfd_vma start = obj_section_addr (objsec) & -align;
- bfd_vma end = (obj_section_endaddr (objsec) + align - 1) & -align;
+ bfd_vma start = objsec->addr () & -align;
+ bfd_vma end = (objsec->endaddr () + align - 1) & -align;
/* Match if either the entire memory region lies inside the
section (i.e. a mapping covering some pages of a large
int size = bfd_section_size (isec);
int ret;
- ret = (*func) (obj_section_addr (objsec), size,
+ ret = (*func) (objsec->addr (), size,
1, /* All sections will be readable. */
(flags & SEC_READONLY) == 0, /* Writable. */
(flags & SEC_CODE) != 0, /* Executable. */
if (sec < faddr_sec->objfile->sections_end)
{
- CORE_ADDR addr = obj_section_addr (sec);
- CORE_ADDR endaddr = obj_section_endaddr (sec);
+ CORE_ADDR addr = sec->addr ();
+ CORE_ADDR endaddr = sec->endaddr ();
while (addr < endaddr)
{
{
CORE_ADDR addr, endaddr;
- addr = obj_section_addr (osect);
- endaddr = obj_section_endaddr (osect);
+ addr = osect->addr ();
+ endaddr = osect->endaddr ();
while (addr < endaddr)
{
if (opd < sec->objfile->sections_end)
{
- CORE_ADDR addr;
-
- for (addr = obj_section_addr (opd);
- addr < obj_section_endaddr (opd);
- addr += 2 * 8)
+ for (CORE_ADDR addr = opd->addr (); addr < opd->endaddr (); addr += 2 * 8)
{
ULONGEST opdaddr;
gdb_byte tmp[8];
void *buf = NULL;
text_sec = objfile->sections + SECT_OFF_TEXT (objfile);
- ip = obj_section_addr (text_sec);
+ ip = text_sec->addr ();
ret = ia64_find_unwind_table (objfile, ip, &di, &buf);
if (ret >= 0)
{
if (osect < faddr_sect->objfile->sections_end)
{
- CORE_ADDR addr, endaddr;
-
- addr = obj_section_addr (osect);
- endaddr = obj_section_endaddr (osect);
+ CORE_ADDR addr = osect->addr ();
+ CORE_ADDR endaddr = osect->endaddr ();
while (addr < endaddr)
{
if (osect < faddr_sect->objfile->sections_end)
{
- CORE_ADDR addr, endaddr;
-
- addr = obj_section_addr (osect);
- endaddr = obj_section_endaddr (osect);
+ CORE_ADDR addr = osect->addr ();
+ CORE_ADDR endaddr = osect->endaddr ();
while (addr < endaddr)
{
if (bfd_sect_name == addrs[i].name)
{
- obj_section_offset (osect) = addrs[i].addr;
+ osect->set_offset (addrs[i].addr);
break;
}
}
print_section_index (abfd, asect->the_bfd_section, index_digits);
maint_print_section_info (name, flags,
- obj_section_addr (asect),
- obj_section_endaddr (asect),
+ asect->addr (), asect->endaddr (),
asect->the_bfd_section->filepos,
addr_size);
}
ALL_OBJFILE_OSECTIONS (objfile, iter)
{
- if (*pc >= obj_section_addr (iter) && *pc < obj_section_endaddr (iter))
+ if (*pc >= iter->addr () && *pc < iter->endaddr ())
{
- *pc -= obj_section_offset (iter);
+ *pc -= iter->offset ();
return 1;
}
}
obj_section = minsym.obj_section ();
if (iter != past_the_end
&& (MSYMBOL_VALUE_ADDRESS (minsym.objfile, iter)
- < obj_section_endaddr (obj_section)))
+ < obj_section->endaddr ()))
result = MSYMBOL_VALUE_ADDRESS (minsym.objfile, iter);
else
/* We got the start address from the last msymbol in the objfile.
So the end address is the end of the section. */
- result = obj_section_endaddr (obj_section);
+ result = obj_section->endaddr ();
return result;
}
int idx = s - objfile->sections;
exec_set_section_address (bfd_get_filename (objfile->obfd), idx,
- obj_section_addr (s));
+ s->addr ());
}
/* Data changed. */
static bool
sort_cmp (const struct obj_section *sect1, const obj_section *sect2)
{
- const CORE_ADDR sect1_addr = obj_section_addr (sect1);
- const CORE_ADDR sect2_addr = obj_section_addr (sect2);
+ const CORE_ADDR sect1_addr = sect1->addr ();
+ const CORE_ADDR sect2_addr = sect2->addr ();
if (sect1_addr < sect2_addr)
return true;
static struct obj_section *
preferred_obj_section (struct obj_section *a, struct obj_section *b)
{
- gdb_assert (obj_section_addr (a) == obj_section_addr (b));
+ gdb_assert (a->addr () == b->addr ());
gdb_assert ((a->objfile->separate_debug_objfile == b->objfile)
|| (b->objfile->separate_debug_objfile == a->objfile));
gdb_assert ((a->objfile->separate_debug_objfile_backlink == b->objfile)
struct obj_section *const sect2 = map[i + 1];
const struct objfile *const objfile1 = sect1->objfile;
const struct objfile *const objfile2 = sect2->objfile;
- const CORE_ADDR sect1_addr = obj_section_addr (sect1);
- const CORE_ADDR sect2_addr = obj_section_addr (sect2);
+ const CORE_ADDR sect1_addr = sect1->addr ();
+ const CORE_ADDR sect2_addr = sect2->addr ();
if (sect1_addr == sect2_addr
&& (objfile1->separate_debug_objfile == objfile2
{
struct obj_section *const sect1 = map[i];
struct obj_section *const sect2 = map[k];
- const CORE_ADDR sect1_addr = obj_section_addr (sect1);
- const CORE_ADDR sect2_addr = obj_section_addr (sect2);
- const CORE_ADDR sect1_endaddr = obj_section_endaddr (sect1);
+ const CORE_ADDR sect1_addr = sect1->addr ();
+ const CORE_ADDR sect2_addr = sect2->addr ();
+ const CORE_ADDR sect1_endaddr = sect1->endaddr ();
gdb_assert (sect1_addr <= sect2_addr);
const struct bfd_section *const bfds1 = sect1->the_bfd_section;
const struct bfd_section *const bfds2 = sect2->the_bfd_section;
- const CORE_ADDR sect2_endaddr = obj_section_endaddr (sect2);
+ const CORE_ADDR sect2_endaddr = sect2->endaddr ();
struct gdbarch *const gdbarch = objf1->arch ();
const CORE_ADDR pc = *(CORE_ADDR *) key;
const struct obj_section *section = *(const struct obj_section **) elt;
- if (pc < obj_section_addr (section))
+ if (pc < section->addr ())
return -1;
- if (pc < obj_section_endaddr (section))
+ if (pc < section->endaddr ())
return 0;
return 1;
}
if (section_is_overlay (osect) && !section_is_mapped (osect))
continue;
- if (obj_section_addr (osect) <= addr
- && addr < obj_section_endaddr (osect))
+ if (osect->addr () <= addr && addr < osect->endaddr ())
return true;
}
return false;
unsigned initialized : 1;
};
-/* Sections in an objfile. The section offsets are stored in the
- OBJFILE. */
-
-struct obj_section
-{
- /* BFD section pointer */
- struct bfd_section *the_bfd_section;
-
- /* Objfile this section is part of. */
- struct objfile *objfile;
-
- /* True if this "overlay section" is mapped into an "overlay region". */
- int ovly_mapped;
-};
-
-/* Relocation offset applied to S. */
-#define obj_section_offset(s) \
- (((s)->objfile->section_offsets)[gdb_bfd_section_index ((s)->objfile->obfd, (s)->the_bfd_section)])
-
-/* The memory address of section S (vma + offset). */
-#define obj_section_addr(s) \
- (bfd_section_vma (s->the_bfd_section) \
- + obj_section_offset (s))
-
-/* The one-passed-the-end memory address of section S
- (vma + size + offset). */
-#define obj_section_endaddr(s) \
- (bfd_section_vma (s->the_bfd_section) \
- + bfd_section_size ((s)->the_bfd_section) \
- + obj_section_offset (s))
-
#define ALL_OBJFILE_OSECTIONS(objfile, osect) \
for (osect = objfile->sections; osect < objfile->sections_end; osect++) \
if (osect->the_bfd_section == NULL) \
/* See quick_symbol_functions. */
void require_partial_symbols (bool verbose);
+ /* Return the relocation offset applied to SECTION. */
+ CORE_ADDR section_offset (bfd_section *section) const
+ {
+ /* The section's owner can be nullptr if it is one of the _bfd_std_section
+ section. */
+ gdb_assert (section->owner == nullptr || section->owner == this->obfd);
+
+ int idx = gdb_bfd_section_index (this->obfd, section);
+ return this->section_offsets[idx];
+ }
+
+ /* Set the relocation offset applied to SECTION. */
+ void set_section_offset (bfd_section *section, CORE_ADDR offset)
+ {
+ /* The section's owner can be nullptr if it is one of the _bfd_std_section
+ section. */
+ gdb_assert (section->owner == nullptr || section->owner == this->obfd);
+
+ int idx = gdb_bfd_section_index (this->obfd, section);
+ this->section_offsets[idx] = offset;
+ }
/* The object file's original name as specified by the user,
made absolute, and tilde-expanded. However, it is not canonicalized
typedef std::unique_ptr<objfile, objfile_deleter> objfile_up;
+
+/* Sections in an objfile. The section offsets are stored in the
+ OBJFILE. */
+
+struct obj_section
+{
+ /* Relocation offset applied to the section. */
+ CORE_ADDR offset () const
+ {
+ return this->objfile->section_offset (this->the_bfd_section);
+ }
+
+ /* Set the relocation offset applied to the section. */
+ void set_offset (CORE_ADDR offset)
+ {
+ this->objfile->set_section_offset (this->the_bfd_section, offset);
+ }
+
+ /* The memory address of the section (vma + offset). */
+ CORE_ADDR addr () const
+ {
+ return bfd_section_vma (this->the_bfd_section) + this->offset ();
+ }
+
+ /* The one-passed-the-end memory address of the section
+ (vma + size + offset). */
+ CORE_ADDR endaddr () const
+ {
+ return this->addr () + bfd_section_size (this->the_bfd_section);
+ }
+
+ /* BFD section pointer */
+ struct bfd_section *the_bfd_section;
+
+ /* Objfile this section is part of. */
+ struct objfile *objfile;
+
+ /* True if this "overlay section" is mapped into an "overlay region". */
+ int ovly_mapped;
+};
+
/* Declarations for functions defined in objfiles.c */
extern int entry_point_address_query (CORE_ADDR *entry_p);
sect_addr = overlay_mapped_address (addr, osect);
- if (obj_section_addr (osect) <= sect_addr
- && sect_addr < obj_section_endaddr (osect)
+ if (osect->addr () <= sect_addr && sect_addr < osect->endaddr ()
&& (msymbol
= lookup_minimal_symbol_by_pc_section (sect_addr,
osect).minsym))
"(%s has no data section)"),
core_addr_to_string (pc), objfile_name (pc_osect->objfile));
- result = (obj_section_addr (data_osect)
- + xcoff_get_toc_offset (pc_osect->objfile));
+ result = data_osect->addr () + xcoff_get_toc_offset (pc_osect->objfile);
solib_aix_debug_printf ("pc=%s -> %s", core_addr_to_string (pc),
core_addr_to_string (result));
osect_idx = osect - objf->sections;
/* Current address of section. */
- addr = obj_section_addr (osect);
+ addr = osect->addr ();
/* Offset from where this section started. */
offset = objf->section_offsets[osect_idx];
/* Original address prior to any past relocations. */
osect_idx = osect - objf->sections;
/* Current address of section. */
- addr = obj_section_addr (osect);
+ addr = osect->addr ();
/* Offset from where this section started. */
offset = objf->section_offsets[osect_idx];
/* Original address prior to any past relocations. */
/* We assume the LMA is relocated by the same offset as the VMA. */
bfd_vma size = bfd_section_size (bfd_section);
- CORE_ADDR offset = obj_section_offset (section);
+ CORE_ADDR offset = section->offset ();
if (bfd_section_lma (bfd_section) + offset <= pc
&& pc < bfd_section_lma (bfd_section) + offset + size)
{
if (section_is_overlay (section))
{
- if (obj_section_addr (section) <= pc
- && pc < obj_section_endaddr (section))
+ if (section->addr () <= pc
+ && pc < section->endaddr ())
return 1;
}
static int
sections_overlap (struct obj_section *a, struct obj_section *b)
{
- CORE_ADDR a_start = obj_section_addr (a);
- CORE_ADDR a_end = obj_section_endaddr (a);
- CORE_ADDR b_start = obj_section_addr (b);
- CORE_ADDR b_end = obj_section_endaddr (b);
+ CORE_ADDR a_start = a->addr ();
+ CORE_ADDR a_end = a->endaddr ();
+ CORE_ADDR b_start = b->addr ();
+ CORE_ADDR b_end = b->endaddr ();
return (a_start < b_end && b_start < a_end);
}
if (fallback == -1)
fallback = idx;
- if (obj_section_addr (s) - offset <= addr
- && addr < obj_section_endaddr (s) - offset)
+ if (s->addr () - offset <= addr && addr < s->endaddr () - offset)
{
ginfo->set_section_index (idx);
return;
s = find_pc_section (start_pc);
end_pc = start_pc + 8 * TILEGX_BUNDLE_SIZE_IN_BYTES;
if (s != NULL)
- end_pc = std::min (end_pc, obj_section_endaddr (s));
+ end_pc = std::min (end_pc, s->endaddr ());
/* Otherwise, try to skip prologue the hard way. */
return tilegx_analyze_prologue (gdbarch,
section. */
struct obj_section *section = find_pc_section (addr);
if (section != NULL)
- return obj_section_addr (section);
+ return section->addr ();
return addr;
}
{
CORE_ADDR addr, endaddr;
- addr = obj_section_addr (osect);
- endaddr = obj_section_endaddr (osect);
+ addr = osect->addr ();
+ endaddr = osect->endaddr ();
for (; addr < endaddr; addr += 2 * xstormy16_inst_size)
{