54#include "elf/common.h"
73 gdb_assert ((ssize_t) len == len);
85 size_t size,
const char *
name,
int from_tty)
89 struct bfd_section *sec;
93 if (bfd_get_flavour (templ) != bfd_target_elf_flavour)
94 error (_(
"add-symbol-file-from-memory not supported for this target"));
96 nbfd = bfd_elf_bfd_from_remote_memory (templ, addr,
size, &loadbase,
99 error (_(
"Failed to read a valid object file image from memory."));
105 name =
"shared object read from target memory";
106 bfd_set_filename (nbfd,
name);
108 if (!bfd_check_format (nbfd, bfd_object))
109 error (_(
"Got object file from memory but can't read symbols: %s."),
110 bfd_errmsg (bfd_get_error ()));
113 for (sec = nbfd->sections; sec != NULL; sec = sec->next)
114 if ((bfd_section_flags (sec) & (SEC_ALLOC|SEC_LOAD)) != 0)
115 sai.emplace_back (bfd_section_vma (sec) + loadbase,
116 bfd_section_name (sec),
141 error (_(
"add-symbol-file-from-memory requires an expression argument"));
151 error (_(
"Must use symbol-file or exec-file "
152 "before add-symbol-file-from-memory."));
181 warning (_(
"Could not load vsyscall page "
182 "because no executable was specified"));
186 std::string
name = string_printf (
"system-supplied DSO at %s",
188 vsyscall_range.
start));
195 vsyscall_range.
start,
200 catch (
const gdb_exception_error &ex)
213 _(
"Load the symbols out of memory from a "
214 "dynamically loaded object file.\n"
215 "Give an expression for the address "
216 "of the file's shared object file header."),
struct gdbarch * target_gdbarch(void)
struct cmd_list_element * cmdlist
struct cmd_list_element * add_cmd(const char *name, enum command_class theclass, const char *doc, struct cmd_list_element **list)
CORE_ADDR parse_and_eval_address(const char *exp)
void exception_print(struct ui_file *file, const struct gdb_exception &e)
void reinit_frame_cache(void)
gdb::ref_ptr< struct bfd, gdb_bfd_ref_policy > gdb_bfd_ref_ptr
int gdbarch_vsyscall_range(struct gdbarch *gdbarch, struct mem_range *range)
observable< inferior * > inferior_created
struct program_space * current_program_space
void add_target_sections(void *owner, const target_section_table §ions)
struct objfile * symfile_object_file
static void add_symbol_file_from_memory_command(const char *args, int from_tty)
static int target_read_memory_bfd(bfd_vma memaddr, bfd_byte *myaddr, bfd_size_type len)
static void add_vsyscall_page(inferior *inf)
static struct objfile * symbol_file_add_from_memory(struct bfd *templ, CORE_ADDR addr, size_t size, const char *name, int from_tty)
void _initialize_symfile_mem()
gdb_static_assert(sizeof(CORE_ADDR) >=sizeof(bfd_vma))
struct objfile * symbol_file_add_from_bfd(const gdb_bfd_ref_ptr &abfd, const char *name, symfile_add_flags add_flags, section_addr_info *addrs, objfile_flags flags, struct objfile *parent)
std::vector< other_sections > section_addr_info
int target_read_memory(CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
const char * paddress(struct gdbarch *gdbarch, CORE_ADDR addr)