54 #include "elf/common.h" 85 size_t size,
char *
name,
int from_tty)
89 struct bfd_section *sec;
94 symfile_add_flags add_flags = 0;
96 if (bfd_get_flavour (templ) != bfd_target_elf_flavour)
97 error (
_(
"add-symbol-file-from-memory not supported for this target"));
99 nbfd = bfd_elf_bfd_from_remote_memory (templ, addr,
size, &loadbase,
102 error (
_(
"Failed to read a valid object file image from memory."));
107 xfree (bfd_get_filename (nbfd));
109 nbfd->filename = xstrdup (
"shared object read from target memory");
111 nbfd->filename =
name;
113 if (!bfd_check_format (nbfd, bfd_object))
114 error (
_(
"Got object file from memory but can't read symbols: %s."),
115 bfd_errmsg (bfd_get_error ()));
120 for (sec = nbfd->sections; sec != NULL; sec = sec->next)
121 if ((bfd_get_section_flags (nbfd, sec) & (SEC_ALLOC|SEC_LOAD)) != 0)
123 sai->
other[i].
addr = bfd_get_section_vma (nbfd, sec) + loadbase;
124 sai->
other[i].
name = (
char *) bfd_get_section_name (nbfd, sec);
153 error (
_(
"add-symbol-file-from-memory requires an expression argument"));
163 error (
_(
"Must use symbol-file or exec-file " 164 "before add-symbol-file-from-memory."));
193 warning (
_(
"Could not load vsyscall page " 194 "because no executable was specified"));
206 vsyscall_range.
start,
224 _(
"Load the symbols out of memory from a " 225 "dynamically loaded object file.\n" 226 "Give an expression for the address " 227 "of the file's shared object file header."),
struct gdbarch * target_gdbarch(void)
static int target_read_memory_bfd(bfd_vma memaddr, bfd_byte *myaddr, bfd_size_type len)
static void add_vsyscall_page(struct target_ops *target, int from_tty)
static void add_symbol_file_from_memory_command(const char *args, int from_tty)
void warning(const char *fmt,...)
static struct objfile * symbol_file_add_from_memory(struct bfd *templ, CORE_ADDR addr, size_t size, char *name, int from_tty)
struct cmd_list_element * add_cmd(const char *name, enum command_class theclass, const char *doc, struct cmd_list_element **list)
struct cmd_list_element * cmdlist
int gdbarch_vsyscall_range(struct gdbarch *gdbarch, struct mem_range *range)
const char * paddress(struct gdbarch *gdbarch, CORE_ADDR addr)
static gdb_bfd_ref_ptr new_bfd_ref(struct bfd *abfd)
struct observer * observer_attach_inferior_created(observer_inferior_created_ftype *f)
struct objfile * symbol_file_add_from_bfd(bfd *abfd, const char *name, symfile_add_flags add_flags, struct section_addr_info *addrs, objfile_flags flags, struct objfile *parent)
#define CATCH(EXCEPTION, MASK)
void _initialize_symfile_mem(void)
void exception_print(struct ui_file *file, struct gdb_exception e)
struct cleanup * make_cleanup(make_cleanup_ftype *function, void *arg)
char * xstrprintf(const char *format,...)
CORE_ADDR parse_and_eval_address(const char *exp)
int target_read_memory(CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
struct other_sections other[1]
gdb_static_assert(sizeof(CORE_ADDR)==sizeof(bfd_vma))
void add_target_sections_of_objfile(struct objfile *objfile)
void reinit_frame_cache(void)
void error(const char *fmt,...)
void do_cleanups(struct cleanup *old_chain)
struct section_addr_info * alloc_section_addr_info(size_t num_sections)