55#if !defined(HAVE_LIBEXPAT)
60 static int have_warned;
65 warning (_(
"Can not parse XML library list; XML support was disabled "
79library_list_start_segment (
struct gdb_xml_parser *parser,
88 CORE_ADDR address = (CORE_ADDR) *address_p;
92 _(
"Library list with both segments and sections"));
98library_list_start_section (
struct gdb_xml_parser *parser,
107 CORE_ADDR address = (CORE_ADDR) *address_p;
111 _(
"Library list with both segments and sections"));
119library_list_start_library (
struct gdb_xml_parser *parser,
129 list->emplace_back (item);
133library_list_end_library (
struct gdb_xml_parser *parser,
135 void *user_data,
const char *body_text)
141 gdb_xml_error (parser, _(
"No segment or section bases defined"));
148library_list_start_list (
struct gdb_xml_parser *parser,
158 const char *
string = (
const char *)
version->value.get ();
160 if (strcmp (
string,
"1.0") != 0)
162 _(
"Library list has unsupported version \"%s\""),
181 {
"segment", segment_attributes, NULL,
183 library_list_start_segment, NULL },
184 {
"section", section_attributes, NULL,
186 library_list_start_section, NULL },
196 {
"library", library_attributes, library_children,
198 library_list_start_library, library_list_end_library },
208 {
"library-list", library_list_attributes, library_list_children,
219 library_list_elements, library, &result) == 0)
233 struct so_list *new_solib, *start = NULL, *last = NULL;
236 gdb::optional<gdb::char_vector> library_document
239 if (!library_document)
246 if (library_list.empty ())
250 for (
auto &&info : library_list)
252 new_solib = XCNEW (
struct so_list);
253 strncpy (new_solib->
so_name, info->name.c_str (),
263 new_solib->
lm_info = info.release ();
267 last = start = new_solib;
270 last->
next = new_solib;
295 gdb_assert (li->
name.empty ());
313 li->
offsets.assign (num_sections, 0);
319 int num_alloc_sections = 0;
321 for (i = 0, sect = so->
abfd->sections;
323 i++, sect = sect->next)
324 if ((bfd_section_flags (sect) & SEC_ALLOC))
325 num_alloc_sections++;
329Could not relocate shared library \"%s\": wrong number of ALLOC sections"),
338 for (i = 0, sect = so->
abfd->sections;
340 i++, sect = sect->next)
342 if (!(bfd_section_flags (sect) & SEC_ALLOC))
344 if (bfd_section_size (sect) > 0)
349 high = low + bfd_section_size (sect) - 1;
373Could not relocate shared library \"%s\": no segments"), so->
so_name);
384Could not relocate shared library \"%s\": bad offsets"), so->
so_name);
392 for (i = 1; i < data->segments.size (); i++)
407 so->
addr_high = (data->segments[i - 1].base
408 + data->segments[i - 1].size
static struct @5 attributes[]
int gdb_bfd_section_index(bfd *abfd, asection *section)
int gdb_bfd_count_sections(bfd *abfd)
struct inferior * current_inferior(void)
static int in_plt_section(CORE_ADDR pc)
static void solib_target_relocate_section_addresses(struct so_list *so, struct target_section *sec)
static int solib_target_open_symbol_file_object(int from_tty)
static lm_info_vector solib_target_parse_libraries(const char *library)
static int solib_target_in_dynsym_resolve_code(CORE_ADDR pc)
static void solib_target_clear_solib(void)
static struct so_list * solib_target_current_sos(void)
static void solib_target_free_so(struct so_list *so)
std::vector< std::unique_ptr< lm_info_target > > lm_info_vector
const struct target_so_ops solib_target_so_ops
static void solib_target_solib_create_inferior_hook(int from_tty)
gdb_bfd_ref_ptr solib_bfd_open(const char *pathname)
#define SO_NAME_MAX_PATH_SIZE
gdb::unique_xmalloc_ptr< void > value
std::vector< CORE_ADDR > segment_bases
std::vector< CORE_ADDR > section_bases
char so_name[SO_NAME_MAX_PATH_SIZE]
char so_original_name[SO_NAME_MAX_PATH_SIZE]
struct bfd_section * the_bfd_section
symfile_segment_data_up get_symfile_segment_data(bfd *abfd)
int symfile_map_offsets_to_segments(bfd *abfd, const struct symfile_segment_data *data, section_offsets &offsets, int num_segment_bases, const CORE_ADDR *segment_bases)
std::unique_ptr< symfile_segment_data > symfile_segment_data_up
std::vector< CORE_ADDR > section_offsets
gdb::optional< gdb::char_vector > target_read_stralloc(struct target_ops *ops, enum target_object object, const char *annex)
@ TARGET_OBJECT_LIBRARIES
void void gdb_xml_error(struct gdb_xml_parser *parser, const char *format,...) ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF(2
void void struct gdb_xml_value * xml_find_attribute(std::vector< gdb_xml_value > &attributes, const char *name)
int gdb_xml_parse_quick(const char *name, const char *dtd_name, const struct gdb_xml_element *elements, const char *document, void *user_data)
gdb_xml_attribute_handler gdb_xml_parse_attr_ulongest