GDB (xrefs)
/tmp/gdb-7.10/gdb/solist.h
Go to the documentation of this file.
1 /* Shared library declarations for GDB, the GNU Debugger.
2  Copyright (C) 1990-2015 Free Software Foundation, Inc.
3 
4  This file is part of GDB.
5 
6  This program is free software; you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation; either version 3 of the License, or
9  (at your option) any later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with this program. If not, see <http://www.gnu.org/licenses/>. */
18 
19 #ifndef SOLIST_H
20 #define SOLIST_H
21 
22 #define SO_NAME_MAX_PATH_SIZE 512 /* FIXME: Should be dynamic */
23 /* For domain_enum domain. */
24 #include "symtab.h"
25 
26 /* Forward declaration for target specific link map information. This
27  struct is opaque to all but the target specific file. */
28 struct lm_info;
29 
30 struct so_list
31  {
32  /* The following fields of the structure come directly from the
33  dynamic linker's tables in the inferior, and are initialized by
34  current_sos. */
35 
36  struct so_list *next; /* next structure in linked list */
37 
38  /* A pointer to target specific link map information. Often this
39  will be a copy of struct link_map from the user process, but
40  it need not be; it can be any collection of data needed to
41  traverse the dynamic linker's data structures. */
42  struct lm_info *lm_info;
43 
44  /* Shared object file name, exactly as it appears in the
45  inferior's link map. This may be a relative path, or something
46  which needs to be looked up in LD_LIBRARY_PATH, etc. We use it
47  to tell which entries in the inferior's dynamic linker's link
48  map we've already loaded. */
50 
51  /* Shared object file name, expanded to something GDB can open. */
53 
54  /* Program space this shared library belongs to. */
56 
57  /* The following fields of the structure are built from
58  information gathered from the shared object file itself, and
59  are set when we actually add it to our symbol tables.
60 
61  current_sos must initialize these fields to 0. */
62 
63  bfd *abfd;
64  char symbols_loaded; /* flag: symbols read in yet? */
65 
66  /* objfile with symbols for a loaded library. Target memory is read from
67  ABFD. OBJFILE may be NULL either before symbols have been loaded, if
68  the file cannot be found or after the command "nosharedlibrary". */
69  struct objfile *objfile;
70 
73 
74  /* Record the range of addresses belonging to this shared library.
75  There may not be just one (e.g. if two segments are relocated
76  differently); but this is only used for "info sharedlibrary". */
78  };
79 
81  {
82  /* Adjust the section binding addresses by the base address at
83  which the object was actually mapped. */
84  void (*relocate_section_addresses) (struct so_list *so,
85  struct target_section *);
86 
87  /* Free the link map info and any other private data structures
88  associated with a so_list entry. */
89  void (*free_so) (struct so_list *so);
90 
91  /* Reset private data structures associated with SO.
92  This is called when SO is about to be reloaded.
93  It is also called before free_so when SO is about to be freed. */
94  void (*clear_so) (struct so_list *so);
95 
96  /* Reset or free private data structures not associated with
97  so_list entries. */
98  void (*clear_solib) (void);
99 
100  /* Target dependent code to run after child process fork. */
101  void (*solib_create_inferior_hook) (int from_tty);
102 
103  /* Do additional symbol handling, lookup, etc. after symbols for a
104  shared object have been loaded in the usual way. This is
105  called to do any system specific symbol handling that might be
106  needed. */
107  void (*special_symbol_handling) (void);
108 
109  /* Construct a list of the currently loaded shared objects. This
110  list does not include an entry for the main executable file.
111 
112  Note that we only gather information directly available from the
113  inferior --- we don't examine any of the shared library files
114  themselves. The declaration of `struct so_list' says which fields
115  we provide values for. */
116  struct so_list *(*current_sos) (void);
117 
118  /* Find, open, and read the symbols for the main executable. If
119  FROM_TTYP dereferences to a non-zero integer, allow messages to
120  be printed. This parameter is a pointer rather than an int
121  because open_symbol_file_object is called via catch_errors and
122  catch_errors requires a pointer argument. */
123  int (*open_symbol_file_object) (void *from_ttyp);
124 
125  /* Determine if PC lies in the dynamic symbol resolution code of
126  the run time loader. */
128 
129  /* Find and open shared library binary file. */
130  bfd *(*bfd_open) (char *pathname);
131 
132  /* Optional extra hook for finding and opening a solib.
133  If TEMP_PATHNAME is non-NULL: If the file is successfully opened a
134  pointer to a malloc'd and realpath'd copy of SONAME is stored there,
135  otherwise NULL is stored there. */
136  int (*find_and_open_solib) (char *soname,
137  unsigned o_flags, char **temp_pathname);
138 
139  /* Hook for looking up global symbols in a library-specific way. */
140  struct symbol * (*lookup_lib_global_symbol) (struct objfile *objfile,
141  const char *name,
142  const domain_enum domain);
143 
144  /* Given two so_list objects, one from the GDB thread list
145  and another from the list returned by current_sos, return 1
146  if they represent the same library.
147  Falls back to using strcmp on so_original_name field when set
148  to NULL. */
149  int (*same) (struct so_list *gdb, struct so_list *inferior);
150 
151  /* Return whether a region of memory must be kept in a core file
152  for shared libraries loaded before "gcore" is used to be
153  handled correctly when the core file is loaded. This only
154  applies when the section would otherwise not be kept in the
155  core file (in particular, for readonly sections). */
157  unsigned long size);
158 
159  /* Enable or disable optional solib event breakpoints as
160  appropriate. This should be called whenever
161  stop_on_solib_events is changed. This pointer can be
162  NULL, in which case no enabling or disabling is necessary
163  for this target. */
164  void (*update_breakpoints) (void);
165 
166  /* Target-specific processing of solib events that will be
167  performed before solib_add is called. This pointer can be
168  NULL, in which case no specific preprocessing is necessary
169  for this target. */
170  void (*handle_event) (void);
171  };
172 
173 /* Free the memory associated with a (so_list *). */
174 void free_so (struct so_list *so);
175 
176 /* Return address of first so_list entry in master shared object list. */
177 struct so_list *master_so_list (void);
178 
179 /* Find main executable binary file. */
180 extern char *exec_file_find (char *in_pathname, int *fd);
181 
182 /* Find shared library binary file. */
183 extern char *solib_find (char *in_pathname, int *fd);
184 
185 /* Open BFD for shared library file. */
186 extern bfd *solib_bfd_fopen (char *pathname, int fd);
187 
188 /* Find solib binary file and open it. */
189 extern bfd *solib_bfd_open (char *in_pathname);
190 
191 /* FIXME: gdbarch needs to control this variable. */
192 extern struct target_so_ops *current_target_so_ops;
193 
194 /* Handler for library-specific global symbol lookup in solib.c. */
195 struct symbol *solib_global_lookup (struct objfile *objfile,
196  const char *name,
197  const domain_enum domain);
198 
199 #endif
struct target_section * sections
Definition: solist.h:71
bfd_vma CORE_ADDR
Definition: common-types.h:41
char * solib_find(char *in_pathname, int *fd)
Definition: solib.c:419
struct so_list * master_so_list(void)
Definition: solib.c:659
struct so_list * next
Definition: solist.h:36
void(* update_breakpoints)(void)
Definition: solist.h:164
enum domain_enum_tag domain_enum
void(* relocate_section_addresses)(struct so_list *so, struct target_section *)
Definition: solist.h:84
bfd * solib_bfd_fopen(char *pathname, int fd)
Definition: solib.c:459
void(* solib_create_inferior_hook)(int from_tty)
Definition: solist.h:101
struct target_so_ops * current_target_so_ops
Definition: solib.c:88
Definition: solist.h:30
#define SO_NAME_MAX_PATH_SIZE
Definition: solist.h:22
int(* keep_data_in_core)(CORE_ADDR vaddr, unsigned long size)
Definition: solist.h:156
int(* open_symbol_file_object)(void *from_ttyp)
Definition: solist.h:123
bfd * abfd
Definition: solist.h:63
struct target_section * sections_end
Definition: solist.h:72
struct lm_info * lm_info
Definition: solist.h:42
void(* clear_solib)(void)
Definition: solist.h:98
const char *const name
Definition: aarch64-tdep.c:68
int(* in_dynsym_resolve_code)(CORE_ADDR pc)
Definition: solist.h:127
char so_original_name[SO_NAME_MAX_PATH_SIZE]
Definition: solist.h:49
void free_so(struct so_list *so)
Definition: solib.c:646
void(* handle_event)(void)
Definition: solist.h:170
char so_name[SO_NAME_MAX_PATH_SIZE]
Definition: solist.h:52
void(* clear_so)(struct so_list *so)
Definition: solist.h:94
int(* same)(struct so_list *gdb, struct so_list *inferior)
Definition: solist.h:149
struct program_space * pspace
Definition: solist.h:55
Definition: __init__.py:1
void(* special_symbol_handling)(void)
Definition: solist.h:107
char symbols_loaded
Definition: solist.h:64
const char const char int
Definition: command.h:229
CORE_ADDR addr_low
Definition: solist.h:77
bfd * solib_bfd_open(char *in_pathname)
Definition: solib.c:481
char * exec_file_find(char *in_pathname, int *fd)
Definition: solib.c:387
void(* free_so)(struct so_list *so)
Definition: solist.h:89
struct symbol * solib_global_lookup(struct objfile *objfile, const char *name, const domain_enum domain)
Definition: solib.c:1515
int(* find_and_open_solib)(char *soname, unsigned o_flags, char **temp_pathname)
Definition: solist.h:136
Definition: symtab.h:703
CORE_ADDR addr_high
Definition: solist.h:77
struct objfile * objfile
Definition: solist.h:69
size_t size
Definition: go32-nat.c:242
__extension__ enum domain_enum_tag domain
Definition: symtab.h:730