X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fgdbcore.h;h=fef7879e99d1f8faac6c53680533f7f6129f572d;hb=632e107b32c0fe8aede62e070b00756e9fdd2c01;hp=a437c8af7b9152c5456683740354c32ce1c7655c;hpb=a10de6046fbd50e99742af428a815dcd94e2fba8;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/gdbcore.h b/gdb/gdbcore.h index a437c8af7b..fef7879e99 100644 --- a/gdb/gdbcore.h +++ b/gdb/gdbcore.h @@ -1,6 +1,6 @@ /* Machine independent variables that describe the core file under GDB. - Copyright (C) 1986-2015 Free Software Foundation, Inc. + Copyright (C) 1986-2018 Free Software Foundation, Inc. This file is part of GDB. @@ -29,12 +29,6 @@ struct regcache; #include "exec.h" #include "target.h" -/* Return the name of the executable file as a string. - ERR nonzero means get error if there is none specified; - otherwise return 0 in that case. */ - -extern char *get_exec_file (int err); - /* Nonzero if there is a core file. */ extern int have_core_file_p (void); @@ -43,11 +37,11 @@ extern int have_core_file_p (void); extern void memory_error (enum target_xfer_status status, CORE_ADDR memaddr); -/* The string 'memory_error' would use as exception message. Space - for the result is malloc'd, caller must free. */ +/* The string 'memory_error' would use as exception message. */ -extern char *memory_error_message (enum target_xfer_status err, - struct gdbarch *gdbarch, CORE_ADDR memaddr); +extern std::string memory_error_message (enum target_xfer_status err, + struct gdbarch *gdbarch, + CORE_ADDR memaddr); /* Like target_read_memory, but report an error if can't read. */ @@ -76,6 +70,9 @@ extern int safe_read_memory_integer (CORE_ADDR memaddr, int len, extern ULONGEST read_memory_unsigned_integer (CORE_ADDR memaddr, int len, enum bfd_endian byte_order); +extern int safe_read_memory_unsigned_integer (CORE_ADDR memaddr, int len, + enum bfd_endian byte_order, + ULONGEST *return_value); /* Read an integer from debugged code memory, given address, number of bytes, and byte order for code. */ @@ -101,10 +98,8 @@ extern void read_memory_string (CORE_ADDR, char *, int); CORE_ADDR read_memory_typed_address (CORE_ADDR addr, struct type *type); -/* This takes a char *, not void *. This is probably right, because - passing in an int * or whatever is wrong with respect to - byteswapping, alignment, different sizes for host vs. target types, - etc. */ +/* Same as target_write_memory, but report an error if can't + write. */ extern void write_memory (CORE_ADDR memaddr, const gdb_byte *myaddr, ssize_t len); @@ -132,7 +127,7 @@ extern void (*deprecated_exec_file_display_hook) (const char *filename); /* Hook for "file_command", which is more useful than above (because it is invoked AFTER symbols are read, not before). */ -extern void (*deprecated_file_changed_hook) (char *filename); +extern void (*deprecated_file_changed_hook) (const char *filename); extern void specify_exec_file_hook (void (*hook) (const char *filename)); @@ -146,16 +141,17 @@ extern struct target_ops *core_target; extern int write_files; -extern void core_file_command (char *filename, int from_tty); +extern void core_file_command (const char *filename, int from_tty); extern void exec_file_attach (const char *filename, int from_tty); /* If the filename of the main executable is unknown, attempt to determine it. If a filename is determined, proceed as though it was just specified with the "file" command. Do nothing if - the filename of the main executable is already known. */ + the filename of the main executable is already known. + DEFER_BP_RESET uses SYMFILE_DEFER_BP_RESET for the main symbol file. */ -extern void exec_file_locate_attach (int pid, int from_tty); +extern void exec_file_locate_attach (int pid, int defer_bp_reset, int from_tty); extern void exec_file_clear (int from_tty); @@ -165,7 +161,7 @@ extern void validate_files (void); extern char *gnutarget; -extern void set_gnutarget (char *); +extern void set_gnutarget (const char *); /* Structure to keep track of core register reading functions for various core file types. */ @@ -230,6 +226,49 @@ struct core_fns }; +/* Build either a single-thread or multi-threaded section name for + PTID. + + If ptid's lwp member is zero, we want to do the single-threaded + thing: look for a section named NAME (as passed to the + constructor). If ptid's lwp member is non-zero, we'll want do the + multi-threaded thing: look for a section named "NAME/LWP", where + LWP is the shortest ASCII decimal representation of ptid's lwp + member. */ + +class thread_section_name +{ +public: + /* NAME is the single-threaded section name. If PTID represents an + LWP, then the build section name is "NAME/LWP", otherwise it's + just "NAME" unmodified. */ + thread_section_name (const char *name, ptid_t ptid) + { + if (ptid.lwp_p ()) + { + m_storage = string_printf ("%s/%ld", name, ptid.lwp ()); + m_section_name = m_storage.c_str (); + } + else + m_section_name = name; + } + + /* Return the computed section name. The result is valid as long as + this thread_section_name object is live. */ + const char *c_str () const + { return m_section_name; } + + DISABLE_COPY_AND_ASSIGN (thread_section_name); + +private: + /* Either a pointer into M_STORAGE, or a pointer to the name passed + as parameter to the constructor. */ + const char *m_section_name; + /* If we need to build a new section name, this is where we store + it. */ + std::string m_storage; +}; + /* NOTE: cagney/2004-04-05: Replaced by "regset.h" and regset_from_core_section(). */ extern void deprecated_add_core_fns (struct core_fns *cf);