54 #include "elf/common.h"
85 size_t size,
char *
name,
int from_tty)
89 struct bfd_section *sec;
95 if (bfd_get_flavour (templ) != bfd_target_elf_flavour)
96 error (
_(
"add-symbol-file-from-memory not supported for this target"));
98 nbfd = bfd_elf_bfd_from_remote_memory (templ, addr, size, &loadbase,
101 error (
_(
"Failed to read a valid object file image from memory."));
104 xfree (bfd_get_filename (nbfd));
106 nbfd->filename = xstrdup (
"shared object read from target memory");
108 nbfd->filename =
name;
112 if (!bfd_check_format (nbfd, bfd_object))
113 error (
_(
"Got object file from memory but can't read symbols: %s."),
114 bfd_errmsg (bfd_get_error ()));
119 for (sec = nbfd->sections; sec != NULL; sec = sec->next)
120 if ((bfd_get_section_flags (nbfd, sec) & (SEC_ALLOC|SEC_LOAD)) != 0)
122 sai->
other[i].
addr = bfd_get_section_vma (nbfd, sec) + loadbase;
123 sai->
other[i].
name = (
char *) bfd_get_section_name (nbfd, sec);
150 error (
_(
"add-symbol-file-from-memory requires an expression argument"));
160 error (
_(
"Must use symbol-file or exec-file "
161 "before add-symbol-file-from-memory."));
215 warning (
_(
"Could not load vsyscall page "
216 "because no executable was specified\n"
217 "try using the \"file\" command first."));
245 _(
"Load the symbols out of memory from a "
246 "dynamically loaded object file.\n"
247 "Give an expression for the address "
248 "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)
struct objfile * symbol_file_add_from_bfd(bfd *abfd, const char *name, int add_flags, struct section_addr_info *addrs, int flags, struct objfile *parent)
void warning(const char *fmt,...)
int catch_exceptions(struct ui_out *uiout, catch_exceptions_ftype *func, void *func_args, return_mask mask)
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 * cmdlist
int gdbarch_vsyscall_range(struct gdbarch *gdbarch, struct mem_range *range)
const char * paddress(struct gdbarch *gdbarch, CORE_ADDR addr)
static void add_symbol_file_from_memory_command(char *args, int from_tty)
void gdb_bfd_ref(struct bfd *abfd)
struct observer * observer_attach_inferior_created(observer_inferior_created_ftype *f)
void initialize_file_ftype(void)
struct cmd_list_element * add_cmd(const char *name, enum command_class theclass, cmd_cfunc_ftype *fun, const char *doc, struct cmd_list_element **list)
struct cleanup * make_cleanup(make_cleanup_ftype *function, void *arg)
static int symbol_file_add_from_memory_wrapper(struct ui_out *uiout, void *data)
char * xstrprintf(const char *format,...)
struct cleanup * make_cleanup_bfd_unref(bfd *abfd)
initialize_file_ftype _initialize_symfile_mem
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)
struct ui_out * current_uiout
void error(const char *fmt,...)
void do_cleanups(struct cleanup *old_chain)
struct section_addr_info * alloc_section_addr_info(size_t num_sections)
const ULONGEST const LONGEST len