X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gdb%2Fsolist.h;h=992986e9916f2849e2a1436ddbe61e3fbbdb0b69;hb=c54207d32681bb205c28facba73b6173ef15eabf;hp=1bdfbaf81c3836b7512003b6c3e1030f7064bff3;hpb=618f726fcb851883a0094aa7fa17003889b7189f;p=external%2Fbinutils.git diff --git a/gdb/solist.h b/gdb/solist.h index 1bdfbaf..992986e 100644 --- a/gdb/solist.h +++ b/gdb/solist.h @@ -1,5 +1,5 @@ /* Shared library declarations for GDB, the GNU Debugger. - Copyright (C) 1990-2016 Free Software Foundation, Inc. + Copyright (C) 1990-2017 Free Software Foundation, Inc. This file is part of GDB. @@ -22,10 +22,18 @@ #define SO_NAME_MAX_PATH_SIZE 512 /* FIXME: Should be dynamic */ /* For domain_enum domain. */ #include "symtab.h" +#include "gdb_bfd.h" -/* Forward declaration for target specific link map information. This - struct is opaque to all but the target specific file. */ -struct lm_info; +#define ALL_SO_LIBS(so) \ + for (so = so_list_head; \ + so != NULL; \ + so = so->next) + +/* Base class for target-specific link map information. */ + +struct lm_info_base +{ +}; struct so_list { @@ -39,7 +47,7 @@ struct so_list will be a copy of struct link_map from the user process, but it need not be; it can be any collection of data needed to traverse the dynamic linker's data structures. */ - struct lm_info *lm_info; + lm_info_base *lm_info; /* Shared object file name, exactly as it appears in the inferior's link map. This may be a relative path, or something @@ -73,7 +81,10 @@ struct so_list /* Record the range of addresses belonging to this shared library. There may not be just one (e.g. if two segments are relocated - differently); but this is only used for "info sharedlibrary". */ + differently). This is used for "info sharedlibrary" and + the MI command "-file-list-shared-libraries". The latter has a format + that supports outputting multiple segments once the related code + supports them. */ CORE_ADDR addr_low, addr_high; }; @@ -100,12 +111,6 @@ struct target_so_ops /* Target dependent code to run after child process fork. */ void (*solib_create_inferior_hook) (int from_tty); - /* Do additional symbol handling, lookup, etc. after symbols for a - shared object have been loaded in the usual way. This is - called to do any system specific symbol handling that might be - needed. */ - void (*special_symbol_handling) (void); - /* Construct a list of the currently loaded shared objects. This list does not include an entry for the main executable file. @@ -116,24 +121,21 @@ struct target_so_ops struct so_list *(*current_sos) (void); /* Find, open, and read the symbols for the main executable. If - FROM_TTYP dereferences to a non-zero integer, allow messages to - be printed. This parameter is a pointer rather than an int - because open_symbol_file_object is called via catch_errors and - catch_errors requires a pointer argument. */ - int (*open_symbol_file_object) (void *from_ttyp); + FROM_TTY is non-zero, allow messages to be printed. */ + int (*open_symbol_file_object) (int from_ttyp); /* Determine if PC lies in the dynamic symbol resolution code of the run time loader. */ int (*in_dynsym_resolve_code) (CORE_ADDR pc); /* Find and open shared library binary file. */ - bfd *(*bfd_open) (char *pathname); + gdb_bfd_ref_ptr (*bfd_open) (char *pathname); /* Optional extra hook for finding and opening a solib. If TEMP_PATHNAME is non-NULL: If the file is successfully opened a pointer to a malloc'd and realpath'd copy of SONAME is stored there, otherwise NULL is stored there. */ - int (*find_and_open_solib) (char *soname, + int (*find_and_open_solib) (const char *soname, unsigned o_flags, char **temp_pathname); /* Hook for looking up global symbols in a library-specific way. */ @@ -174,20 +176,32 @@ struct target_so_ops /* Free the memory associated with a (so_list *). */ void free_so (struct so_list *so); +/* A deleter that calls free_so. */ +struct so_deleter +{ + void operator() (struct so_list *so) const + { + free_so (so); + } +}; + +/* A unique pointer to a so_list. */ +typedef std::unique_ptr so_list_up; + /* Return address of first so_list entry in master shared object list. */ struct so_list *master_so_list (void); /* Find main executable binary file. */ -extern char *exec_file_find (char *in_pathname, int *fd); +extern char *exec_file_find (const char *in_pathname, int *fd); /* Find shared library binary file. */ -extern char *solib_find (char *in_pathname, int *fd); +extern char *solib_find (const char *in_pathname, int *fd); /* Open BFD for shared library file. */ -extern bfd *solib_bfd_fopen (char *pathname, int fd); +extern gdb_bfd_ref_ptr solib_bfd_fopen (char *pathname, int fd); /* Find solib binary file and open it. */ -extern bfd *solib_bfd_open (char *in_pathname); +extern gdb_bfd_ref_ptr solib_bfd_open (char *in_pathname); /* FIXME: gdbarch needs to control this variable. */ extern struct target_so_ops *current_target_so_ops;