symfile.c revision 1.1.1.4 1 1.1 christos /* Generic symbol file reading for the GNU debugger, GDB.
2 1.1 christos
3 1.1.1.4 christos Copyright (C) 1990-2016 Free Software Foundation, Inc.
4 1.1 christos
5 1.1 christos Contributed by Cygnus Support, using pieces from other GDB modules.
6 1.1 christos
7 1.1 christos This file is part of GDB.
8 1.1 christos
9 1.1 christos This program is free software; you can redistribute it and/or modify
10 1.1 christos it under the terms of the GNU General Public License as published by
11 1.1 christos the Free Software Foundation; either version 3 of the License, or
12 1.1 christos (at your option) any later version.
13 1.1 christos
14 1.1 christos This program is distributed in the hope that it will be useful,
15 1.1 christos but WITHOUT ANY WARRANTY; without even the implied warranty of
16 1.1 christos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 1.1 christos GNU General Public License for more details.
18 1.1 christos
19 1.1 christos You should have received a copy of the GNU General Public License
20 1.1 christos along with this program. If not, see <http://www.gnu.org/licenses/>. */
21 1.1 christos
22 1.1 christos #include "defs.h"
23 1.1 christos #include "arch-utils.h"
24 1.1 christos #include "bfdlink.h"
25 1.1 christos #include "symtab.h"
26 1.1 christos #include "gdbtypes.h"
27 1.1 christos #include "gdbcore.h"
28 1.1 christos #include "frame.h"
29 1.1 christos #include "target.h"
30 1.1 christos #include "value.h"
31 1.1 christos #include "symfile.h"
32 1.1 christos #include "objfiles.h"
33 1.1 christos #include "source.h"
34 1.1 christos #include "gdbcmd.h"
35 1.1 christos #include "breakpoint.h"
36 1.1 christos #include "language.h"
37 1.1 christos #include "complaints.h"
38 1.1 christos #include "demangle.h"
39 1.1 christos #include "inferior.h"
40 1.1 christos #include "regcache.h"
41 1.1 christos #include "filenames.h" /* for DOSish file names */
42 1.1 christos #include "gdb-stabs.h"
43 1.1 christos #include "gdb_obstack.h"
44 1.1 christos #include "completer.h"
45 1.1 christos #include "bcache.h"
46 1.1 christos #include "hashtab.h"
47 1.1 christos #include "readline/readline.h"
48 1.1 christos #include "block.h"
49 1.1 christos #include "observer.h"
50 1.1 christos #include "exec.h"
51 1.1 christos #include "parser-defs.h"
52 1.1 christos #include "varobj.h"
53 1.1 christos #include "elf-bfd.h"
54 1.1 christos #include "solib.h"
55 1.1 christos #include "remote.h"
56 1.1 christos #include "stack.h"
57 1.1 christos #include "gdb_bfd.h"
58 1.1 christos #include "cli/cli-utils.h"
59 1.1 christos
60 1.1 christos #include <sys/types.h>
61 1.1 christos #include <fcntl.h>
62 1.1 christos #include <sys/stat.h>
63 1.1 christos #include <ctype.h>
64 1.1 christos #include <time.h>
65 1.1.1.4 christos #include "gdb_sys_time.h"
66 1.1 christos
67 1.1 christos #include "psymtab.h"
68 1.1 christos
69 1.1 christos int (*deprecated_ui_load_progress_hook) (const char *section,
70 1.1 christos unsigned long num);
71 1.1 christos void (*deprecated_show_load_progress) (const char *section,
72 1.1 christos unsigned long section_sent,
73 1.1 christos unsigned long section_size,
74 1.1 christos unsigned long total_sent,
75 1.1 christos unsigned long total_size);
76 1.1 christos void (*deprecated_pre_add_symbol_hook) (const char *);
77 1.1 christos void (*deprecated_post_add_symbol_hook) (void);
78 1.1 christos
79 1.1 christos static void clear_symtab_users_cleanup (void *ignore);
80 1.1 christos
81 1.1 christos /* Global variables owned by this file. */
82 1.1 christos int readnow_symbol_files; /* Read full symbols immediately. */
83 1.1 christos
84 1.1 christos /* Functions this file defines. */
85 1.1 christos
86 1.1 christos static void load_command (char *, int);
87 1.1 christos
88 1.1 christos static void symbol_file_add_main_1 (const char *args, int from_tty, int flags);
89 1.1 christos
90 1.1 christos static void add_symbol_file_command (char *, int);
91 1.1 christos
92 1.1 christos static const struct sym_fns *find_sym_fns (bfd *);
93 1.1 christos
94 1.1 christos static void decrement_reading_symtab (void *);
95 1.1 christos
96 1.1 christos static void overlay_invalidate_all (void);
97 1.1 christos
98 1.1 christos static void overlay_auto_command (char *, int);
99 1.1 christos
100 1.1 christos static void overlay_manual_command (char *, int);
101 1.1 christos
102 1.1 christos static void overlay_off_command (char *, int);
103 1.1 christos
104 1.1 christos static void overlay_load_command (char *, int);
105 1.1 christos
106 1.1 christos static void overlay_command (char *, int);
107 1.1 christos
108 1.1 christos static void simple_free_overlay_table (void);
109 1.1 christos
110 1.1 christos static void read_target_long_array (CORE_ADDR, unsigned int *, int, int,
111 1.1 christos enum bfd_endian);
112 1.1 christos
113 1.1 christos static int simple_read_overlay_table (void);
114 1.1 christos
115 1.1 christos static int simple_overlay_update_1 (struct obj_section *);
116 1.1 christos
117 1.1 christos static void info_ext_lang_command (char *args, int from_tty);
118 1.1 christos
119 1.1 christos static void symfile_find_segment_sections (struct objfile *objfile);
120 1.1 christos
121 1.1 christos void _initialize_symfile (void);
122 1.1 christos
123 1.1 christos /* List of all available sym_fns. On gdb startup, each object file reader
124 1.1 christos calls add_symtab_fns() to register information on each format it is
125 1.1 christos prepared to read. */
126 1.1 christos
127 1.1 christos typedef struct
128 1.1 christos {
129 1.1 christos /* BFD flavour that we handle. */
130 1.1 christos enum bfd_flavour sym_flavour;
131 1.1 christos
132 1.1 christos /* The "vtable" of symbol functions. */
133 1.1 christos const struct sym_fns *sym_fns;
134 1.1 christos } registered_sym_fns;
135 1.1 christos
136 1.1 christos DEF_VEC_O (registered_sym_fns);
137 1.1 christos
138 1.1 christos static VEC (registered_sym_fns) *symtab_fns = NULL;
139 1.1 christos
140 1.1.1.2 christos /* Values for "set print symbol-loading". */
141 1.1.1.2 christos
142 1.1.1.2 christos const char print_symbol_loading_off[] = "off";
143 1.1.1.2 christos const char print_symbol_loading_brief[] = "brief";
144 1.1.1.2 christos const char print_symbol_loading_full[] = "full";
145 1.1.1.2 christos static const char *print_symbol_loading_enums[] =
146 1.1.1.2 christos {
147 1.1.1.2 christos print_symbol_loading_off,
148 1.1.1.2 christos print_symbol_loading_brief,
149 1.1.1.2 christos print_symbol_loading_full,
150 1.1.1.2 christos NULL
151 1.1.1.2 christos };
152 1.1.1.2 christos static const char *print_symbol_loading = print_symbol_loading_full;
153 1.1.1.2 christos
154 1.1 christos /* If non-zero, shared library symbols will be added automatically
155 1.1 christos when the inferior is created, new libraries are loaded, or when
156 1.1 christos attaching to the inferior. This is almost always what users will
157 1.1 christos want to have happen; but for very large programs, the startup time
158 1.1 christos will be excessive, and so if this is a problem, the user can clear
159 1.1 christos this flag and then add the shared library symbols as needed. Note
160 1.1 christos that there is a potential for confusion, since if the shared
161 1.1 christos library symbols are not loaded, commands like "info fun" will *not*
162 1.1 christos report all the functions that are actually present. */
163 1.1 christos
164 1.1 christos int auto_solib_add = 1;
165 1.1 christos
166 1.1 christos
168 1.1.1.2 christos /* Return non-zero if symbol-loading messages should be printed.
169 1.1.1.2 christos FROM_TTY is the standard from_tty argument to gdb commands.
170 1.1.1.2 christos If EXEC is non-zero the messages are for the executable.
171 1.1.1.2 christos Otherwise, messages are for shared libraries.
172 1.1.1.2 christos If FULL is non-zero then the caller is printing a detailed message.
173 1.1.1.2 christos E.g., the message includes the shared library name.
174 1.1.1.2 christos Otherwise, the caller is printing a brief "summary" message. */
175 1.1.1.2 christos
176 1.1.1.2 christos int
177 1.1.1.2 christos print_symbol_loading_p (int from_tty, int exec, int full)
178 1.1.1.2 christos {
179 1.1.1.2 christos if (!from_tty && !info_verbose)
180 1.1.1.2 christos return 0;
181 1.1.1.2 christos
182 1.1.1.2 christos if (exec)
183 1.1.1.2 christos {
184 1.1.1.2 christos /* We don't check FULL for executables, there are few such
185 1.1.1.2 christos messages, therefore brief == full. */
186 1.1.1.2 christos return print_symbol_loading != print_symbol_loading_off;
187 1.1.1.2 christos }
188 1.1.1.2 christos if (full)
189 1.1.1.2 christos return print_symbol_loading == print_symbol_loading_full;
190 1.1.1.2 christos return print_symbol_loading == print_symbol_loading_brief;
191 1.1.1.2 christos }
192 1.1 christos
193 1.1 christos /* True if we are reading a symbol table. */
194 1.1 christos
195 1.1 christos int currently_reading_symtab = 0;
196 1.1 christos
197 1.1 christos static void
198 1.1 christos decrement_reading_symtab (void *dummy)
199 1.1 christos {
200 1.1 christos currently_reading_symtab--;
201 1.1 christos gdb_assert (currently_reading_symtab >= 0);
202 1.1 christos }
203 1.1 christos
204 1.1 christos /* Increment currently_reading_symtab and return a cleanup that can be
205 1.1 christos used to decrement it. */
206 1.1 christos
207 1.1 christos struct cleanup *
208 1.1 christos increment_reading_symtab (void)
209 1.1 christos {
210 1.1 christos ++currently_reading_symtab;
211 1.1 christos gdb_assert (currently_reading_symtab > 0);
212 1.1 christos return make_cleanup (decrement_reading_symtab, NULL);
213 1.1 christos }
214 1.1 christos
215 1.1 christos /* Remember the lowest-addressed loadable section we've seen.
216 1.1 christos This function is called via bfd_map_over_sections.
217 1.1 christos
218 1.1 christos In case of equal vmas, the section with the largest size becomes the
219 1.1 christos lowest-addressed loadable section.
220 1.1 christos
221 1.1 christos If the vmas and sizes are equal, the last section is considered the
222 1.1 christos lowest-addressed loadable section. */
223 1.1 christos
224 1.1 christos void
225 1.1 christos find_lowest_section (bfd *abfd, asection *sect, void *obj)
226 1.1 christos {
227 1.1 christos asection **lowest = (asection **) obj;
228 1.1 christos
229 1.1 christos if (0 == (bfd_get_section_flags (abfd, sect) & (SEC_ALLOC | SEC_LOAD)))
230 1.1 christos return;
231 1.1 christos if (!*lowest)
232 1.1 christos *lowest = sect; /* First loadable section */
233 1.1 christos else if (bfd_section_vma (abfd, *lowest) > bfd_section_vma (abfd, sect))
234 1.1 christos *lowest = sect; /* A lower loadable section */
235 1.1 christos else if (bfd_section_vma (abfd, *lowest) == bfd_section_vma (abfd, sect)
236 1.1 christos && (bfd_section_size (abfd, (*lowest))
237 1.1 christos <= bfd_section_size (abfd, sect)))
238 1.1 christos *lowest = sect;
239 1.1 christos }
240 1.1 christos
241 1.1 christos /* Create a new section_addr_info, with room for NUM_SECTIONS. The
242 1.1 christos new object's 'num_sections' field is set to 0; it must be updated
243 1.1 christos by the caller. */
244 1.1 christos
245 1.1 christos struct section_addr_info *
246 1.1 christos alloc_section_addr_info (size_t num_sections)
247 1.1 christos {
248 1.1 christos struct section_addr_info *sap;
249 1.1 christos size_t size;
250 1.1 christos
251 1.1 christos size = (sizeof (struct section_addr_info)
252 1.1 christos + sizeof (struct other_sections) * (num_sections - 1));
253 1.1 christos sap = (struct section_addr_info *) xmalloc (size);
254 1.1 christos memset (sap, 0, size);
255 1.1 christos
256 1.1 christos return sap;
257 1.1 christos }
258 1.1 christos
259 1.1 christos /* Build (allocate and populate) a section_addr_info struct from
260 1.1 christos an existing section table. */
261 1.1 christos
262 1.1 christos extern struct section_addr_info *
263 1.1 christos build_section_addr_info_from_section_table (const struct target_section *start,
264 1.1 christos const struct target_section *end)
265 1.1 christos {
266 1.1 christos struct section_addr_info *sap;
267 1.1 christos const struct target_section *stp;
268 1.1 christos int oidx;
269 1.1 christos
270 1.1 christos sap = alloc_section_addr_info (end - start);
271 1.1 christos
272 1.1 christos for (stp = start, oidx = 0; stp != end; stp++)
273 1.1 christos {
274 1.1 christos struct bfd_section *asect = stp->the_bfd_section;
275 1.1 christos bfd *abfd = asect->owner;
276 1.1 christos
277 1.1 christos if (bfd_get_section_flags (abfd, asect) & (SEC_ALLOC | SEC_LOAD)
278 1.1 christos && oidx < end - start)
279 1.1 christos {
280 1.1 christos sap->other[oidx].addr = stp->addr;
281 1.1 christos sap->other[oidx].name = xstrdup (bfd_section_name (abfd, asect));
282 1.1 christos sap->other[oidx].sectindex = gdb_bfd_section_index (abfd, asect);
283 1.1 christos oidx++;
284 1.1 christos }
285 1.1 christos }
286 1.1 christos
287 1.1 christos sap->num_sections = oidx;
288 1.1 christos
289 1.1 christos return sap;
290 1.1 christos }
291 1.1 christos
292 1.1 christos /* Create a section_addr_info from section offsets in ABFD. */
293 1.1 christos
294 1.1 christos static struct section_addr_info *
295 1.1 christos build_section_addr_info_from_bfd (bfd *abfd)
296 1.1 christos {
297 1.1 christos struct section_addr_info *sap;
298 1.1 christos int i;
299 1.1 christos struct bfd_section *sec;
300 1.1 christos
301 1.1 christos sap = alloc_section_addr_info (bfd_count_sections (abfd));
302 1.1 christos for (i = 0, sec = abfd->sections; sec != NULL; sec = sec->next)
303 1.1 christos if (bfd_get_section_flags (abfd, sec) & (SEC_ALLOC | SEC_LOAD))
304 1.1 christos {
305 1.1 christos sap->other[i].addr = bfd_get_section_vma (abfd, sec);
306 1.1 christos sap->other[i].name = xstrdup (bfd_get_section_name (abfd, sec));
307 1.1 christos sap->other[i].sectindex = gdb_bfd_section_index (abfd, sec);
308 1.1 christos i++;
309 1.1 christos }
310 1.1 christos
311 1.1 christos sap->num_sections = i;
312 1.1 christos
313 1.1 christos return sap;
314 1.1 christos }
315 1.1 christos
316 1.1 christos /* Create a section_addr_info from section offsets in OBJFILE. */
317 1.1 christos
318 1.1 christos struct section_addr_info *
319 1.1 christos build_section_addr_info_from_objfile (const struct objfile *objfile)
320 1.1 christos {
321 1.1 christos struct section_addr_info *sap;
322 1.1 christos int i;
323 1.1 christos
324 1.1 christos /* Before reread_symbols gets rewritten it is not safe to call:
325 1.1 christos gdb_assert (objfile->num_sections == bfd_count_sections (objfile->obfd));
326 1.1 christos */
327 1.1 christos sap = build_section_addr_info_from_bfd (objfile->obfd);
328 1.1 christos for (i = 0; i < sap->num_sections; i++)
329 1.1 christos {
330 1.1 christos int sectindex = sap->other[i].sectindex;
331 1.1 christos
332 1.1 christos sap->other[i].addr += objfile->section_offsets->offsets[sectindex];
333 1.1 christos }
334 1.1 christos return sap;
335 1.1 christos }
336 1.1 christos
337 1.1 christos /* Free all memory allocated by build_section_addr_info_from_section_table. */
338 1.1 christos
339 1.1 christos extern void
340 1.1 christos free_section_addr_info (struct section_addr_info *sap)
341 1.1 christos {
342 1.1 christos int idx;
343 1.1 christos
344 1.1 christos for (idx = 0; idx < sap->num_sections; idx++)
345 1.1 christos xfree (sap->other[idx].name);
346 1.1 christos xfree (sap);
347 1.1 christos }
348 1.1 christos
349 1.1 christos /* Initialize OBJFILE's sect_index_* members. */
350 1.1 christos
351 1.1 christos static void
352 1.1 christos init_objfile_sect_indices (struct objfile *objfile)
353 1.1 christos {
354 1.1 christos asection *sect;
355 1.1 christos int i;
356 1.1 christos
357 1.1 christos sect = bfd_get_section_by_name (objfile->obfd, ".text");
358 1.1 christos if (sect)
359 1.1 christos objfile->sect_index_text = sect->index;
360 1.1 christos
361 1.1 christos sect = bfd_get_section_by_name (objfile->obfd, ".data");
362 1.1 christos if (sect)
363 1.1 christos objfile->sect_index_data = sect->index;
364 1.1 christos
365 1.1 christos sect = bfd_get_section_by_name (objfile->obfd, ".bss");
366 1.1 christos if (sect)
367 1.1 christos objfile->sect_index_bss = sect->index;
368 1.1 christos
369 1.1 christos sect = bfd_get_section_by_name (objfile->obfd, ".rodata");
370 1.1 christos if (sect)
371 1.1 christos objfile->sect_index_rodata = sect->index;
372 1.1 christos
373 1.1 christos /* This is where things get really weird... We MUST have valid
374 1.1 christos indices for the various sect_index_* members or gdb will abort.
375 1.1 christos So if for example, there is no ".text" section, we have to
376 1.1 christos accomodate that. First, check for a file with the standard
377 1.1 christos one or two segments. */
378 1.1 christos
379 1.1 christos symfile_find_segment_sections (objfile);
380 1.1 christos
381 1.1 christos /* Except when explicitly adding symbol files at some address,
382 1.1 christos section_offsets contains nothing but zeros, so it doesn't matter
383 1.1 christos which slot in section_offsets the individual sect_index_* members
384 1.1 christos index into. So if they are all zero, it is safe to just point
385 1.1 christos all the currently uninitialized indices to the first slot. But
386 1.1 christos beware: if this is the main executable, it may be relocated
387 1.1 christos later, e.g. by the remote qOffsets packet, and then this will
388 1.1 christos be wrong! That's why we try segments first. */
389 1.1 christos
390 1.1 christos for (i = 0; i < objfile->num_sections; i++)
391 1.1 christos {
392 1.1 christos if (ANOFFSET (objfile->section_offsets, i) != 0)
393 1.1 christos {
394 1.1 christos break;
395 1.1 christos }
396 1.1 christos }
397 1.1 christos if (i == objfile->num_sections)
398 1.1 christos {
399 1.1 christos if (objfile->sect_index_text == -1)
400 1.1 christos objfile->sect_index_text = 0;
401 1.1 christos if (objfile->sect_index_data == -1)
402 1.1 christos objfile->sect_index_data = 0;
403 1.1 christos if (objfile->sect_index_bss == -1)
404 1.1 christos objfile->sect_index_bss = 0;
405 1.1 christos if (objfile->sect_index_rodata == -1)
406 1.1 christos objfile->sect_index_rodata = 0;
407 1.1 christos }
408 1.1 christos }
409 1.1 christos
410 1.1 christos /* The arguments to place_section. */
411 1.1 christos
412 1.1 christos struct place_section_arg
413 1.1 christos {
414 1.1 christos struct section_offsets *offsets;
415 1.1 christos CORE_ADDR lowest;
416 1.1 christos };
417 1.1 christos
418 1.1 christos /* Find a unique offset to use for loadable section SECT if
419 1.1 christos the user did not provide an offset. */
420 1.1 christos
421 1.1 christos static void
422 1.1 christos place_section (bfd *abfd, asection *sect, void *obj)
423 1.1.1.4 christos {
424 1.1 christos struct place_section_arg *arg = (struct place_section_arg *) obj;
425 1.1 christos CORE_ADDR *offsets = arg->offsets->offsets, start_addr;
426 1.1 christos int done;
427 1.1 christos ULONGEST align = ((ULONGEST) 1) << bfd_get_section_alignment (abfd, sect);
428 1.1 christos
429 1.1 christos /* We are only interested in allocated sections. */
430 1.1 christos if ((bfd_get_section_flags (abfd, sect) & SEC_ALLOC) == 0)
431 1.1 christos return;
432 1.1 christos
433 1.1 christos /* If the user specified an offset, honor it. */
434 1.1 christos if (offsets[gdb_bfd_section_index (abfd, sect)] != 0)
435 1.1 christos return;
436 1.1 christos
437 1.1 christos /* Otherwise, let's try to find a place for the section. */
438 1.1 christos start_addr = (arg->lowest + align - 1) & -align;
439 1.1 christos
440 1.1 christos do {
441 1.1 christos asection *cur_sec;
442 1.1 christos
443 1.1 christos done = 1;
444 1.1 christos
445 1.1 christos for (cur_sec = abfd->sections; cur_sec != NULL; cur_sec = cur_sec->next)
446 1.1 christos {
447 1.1 christos int indx = cur_sec->index;
448 1.1 christos
449 1.1 christos /* We don't need to compare against ourself. */
450 1.1 christos if (cur_sec == sect)
451 1.1 christos continue;
452 1.1 christos
453 1.1 christos /* We can only conflict with allocated sections. */
454 1.1 christos if ((bfd_get_section_flags (abfd, cur_sec) & SEC_ALLOC) == 0)
455 1.1 christos continue;
456 1.1 christos
457 1.1 christos /* If the section offset is 0, either the section has not been placed
458 1.1 christos yet, or it was the lowest section placed (in which case LOWEST
459 1.1 christos will be past its end). */
460 1.1 christos if (offsets[indx] == 0)
461 1.1 christos continue;
462 1.1 christos
463 1.1 christos /* If this section would overlap us, then we must move up. */
464 1.1 christos if (start_addr + bfd_get_section_size (sect) > offsets[indx]
465 1.1 christos && start_addr < offsets[indx] + bfd_get_section_size (cur_sec))
466 1.1 christos {
467 1.1 christos start_addr = offsets[indx] + bfd_get_section_size (cur_sec);
468 1.1 christos start_addr = (start_addr + align - 1) & -align;
469 1.1 christos done = 0;
470 1.1 christos break;
471 1.1 christos }
472 1.1 christos
473 1.1 christos /* Otherwise, we appear to be OK. So far. */
474 1.1 christos }
475 1.1 christos }
476 1.1 christos while (!done);
477 1.1 christos
478 1.1 christos offsets[gdb_bfd_section_index (abfd, sect)] = start_addr;
479 1.1 christos arg->lowest = start_addr + bfd_get_section_size (sect);
480 1.1 christos }
481 1.1 christos
482 1.1 christos /* Store struct section_addr_info as prepared (made relative and with SECTINDEX
483 1.1 christos filled-in) by addr_info_make_relative into SECTION_OFFSETS of NUM_SECTIONS
484 1.1 christos entries. */
485 1.1 christos
486 1.1 christos void
487 1.1 christos relative_addr_info_to_section_offsets (struct section_offsets *section_offsets,
488 1.1 christos int num_sections,
489 1.1 christos const struct section_addr_info *addrs)
490 1.1 christos {
491 1.1 christos int i;
492 1.1 christos
493 1.1 christos memset (section_offsets, 0, SIZEOF_N_SECTION_OFFSETS (num_sections));
494 1.1 christos
495 1.1 christos /* Now calculate offsets for section that were specified by the caller. */
496 1.1 christos for (i = 0; i < addrs->num_sections; i++)
497 1.1 christos {
498 1.1 christos const struct other_sections *osp;
499 1.1 christos
500 1.1 christos osp = &addrs->other[i];
501 1.1 christos if (osp->sectindex == -1)
502 1.1 christos continue;
503 1.1 christos
504 1.1 christos /* Record all sections in offsets. */
505 1.1 christos /* The section_offsets in the objfile are here filled in using
506 1.1 christos the BFD index. */
507 1.1 christos section_offsets->offsets[osp->sectindex] = osp->addr;
508 1.1 christos }
509 1.1 christos }
510 1.1 christos
511 1.1 christos /* Transform section name S for a name comparison. prelink can split section
512 1.1 christos `.bss' into two sections `.dynbss' and `.bss' (in this order). Similarly
513 1.1 christos prelink can split `.sbss' into `.sdynbss' and `.sbss'. Use virtual address
514 1.1 christos of the new `.dynbss' (`.sdynbss') section as the adjacent new `.bss'
515 1.1 christos (`.sbss') section has invalid (increased) virtual address. */
516 1.1 christos
517 1.1 christos static const char *
518 1.1 christos addr_section_name (const char *s)
519 1.1 christos {
520 1.1 christos if (strcmp (s, ".dynbss") == 0)
521 1.1 christos return ".bss";
522 1.1 christos if (strcmp (s, ".sdynbss") == 0)
523 1.1 christos return ".sbss";
524 1.1 christos
525 1.1 christos return s;
526 1.1 christos }
527 1.1 christos
528 1.1 christos /* qsort comparator for addrs_section_sort. Sort entries in ascending order by
529 1.1 christos their (name, sectindex) pair. sectindex makes the sort by name stable. */
530 1.1 christos
531 1.1 christos static int
532 1.1 christos addrs_section_compar (const void *ap, const void *bp)
533 1.1 christos {
534 1.1 christos const struct other_sections *a = *((struct other_sections **) ap);
535 1.1 christos const struct other_sections *b = *((struct other_sections **) bp);
536 1.1 christos int retval;
537 1.1 christos
538 1.1 christos retval = strcmp (addr_section_name (a->name), addr_section_name (b->name));
539 1.1 christos if (retval)
540 1.1 christos return retval;
541 1.1 christos
542 1.1 christos return a->sectindex - b->sectindex;
543 1.1 christos }
544 1.1 christos
545 1.1 christos /* Provide sorted array of pointers to sections of ADDRS. The array is
546 1.1 christos terminated by NULL. Caller is responsible to call xfree for it. */
547 1.1 christos
548 1.1 christos static struct other_sections **
549 1.1 christos addrs_section_sort (struct section_addr_info *addrs)
550 1.1 christos {
551 1.1 christos struct other_sections **array;
552 1.1 christos int i;
553 1.1 christos
554 1.1.1.4 christos /* `+ 1' for the NULL terminator. */
555 1.1 christos array = XNEWVEC (struct other_sections *, addrs->num_sections + 1);
556 1.1 christos for (i = 0; i < addrs->num_sections; i++)
557 1.1 christos array[i] = &addrs->other[i];
558 1.1 christos array[i] = NULL;
559 1.1 christos
560 1.1 christos qsort (array, i, sizeof (*array), addrs_section_compar);
561 1.1 christos
562 1.1 christos return array;
563 1.1 christos }
564 1.1 christos
565 1.1 christos /* Relativize absolute addresses in ADDRS into offsets based on ABFD. Fill-in
566 1.1 christos also SECTINDEXes specific to ABFD there. This function can be used to
567 1.1 christos rebase ADDRS to start referencing different BFD than before. */
568 1.1 christos
569 1.1 christos void
570 1.1 christos addr_info_make_relative (struct section_addr_info *addrs, bfd *abfd)
571 1.1 christos {
572 1.1 christos asection *lower_sect;
573 1.1 christos CORE_ADDR lower_offset;
574 1.1 christos int i;
575 1.1 christos struct cleanup *my_cleanup;
576 1.1 christos struct section_addr_info *abfd_addrs;
577 1.1 christos struct other_sections **addrs_sorted, **abfd_addrs_sorted;
578 1.1 christos struct other_sections **addrs_to_abfd_addrs;
579 1.1 christos
580 1.1 christos /* Find lowest loadable section to be used as starting point for
581 1.1 christos continguous sections. */
582 1.1 christos lower_sect = NULL;
583 1.1 christos bfd_map_over_sections (abfd, find_lowest_section, &lower_sect);
584 1.1 christos if (lower_sect == NULL)
585 1.1 christos {
586 1.1 christos warning (_("no loadable sections found in added symbol-file %s"),
587 1.1 christos bfd_get_filename (abfd));
588 1.1 christos lower_offset = 0;
589 1.1 christos }
590 1.1 christos else
591 1.1 christos lower_offset = bfd_section_vma (bfd_get_filename (abfd), lower_sect);
592 1.1 christos
593 1.1 christos /* Create ADDRS_TO_ABFD_ADDRS array to map the sections in ADDRS to sections
594 1.1 christos in ABFD. Section names are not unique - there can be multiple sections of
595 1.1 christos the same name. Also the sections of the same name do not have to be
596 1.1 christos adjacent to each other. Some sections may be present only in one of the
597 1.1 christos files. Even sections present in both files do not have to be in the same
598 1.1 christos order.
599 1.1 christos
600 1.1 christos Use stable sort by name for the sections in both files. Then linearly
601 1.1 christos scan both lists matching as most of the entries as possible. */
602 1.1 christos
603 1.1 christos addrs_sorted = addrs_section_sort (addrs);
604 1.1 christos my_cleanup = make_cleanup (xfree, addrs_sorted);
605 1.1 christos
606 1.1 christos abfd_addrs = build_section_addr_info_from_bfd (abfd);
607 1.1 christos make_cleanup_free_section_addr_info (abfd_addrs);
608 1.1 christos abfd_addrs_sorted = addrs_section_sort (abfd_addrs);
609 1.1 christos make_cleanup (xfree, abfd_addrs_sorted);
610 1.1 christos
611 1.1 christos /* Now create ADDRS_TO_ABFD_ADDRS from ADDRS_SORTED and
612 1.1 christos ABFD_ADDRS_SORTED. */
613 1.1.1.4 christos
614 1.1 christos addrs_to_abfd_addrs = XCNEWVEC (struct other_sections *, addrs->num_sections);
615 1.1 christos make_cleanup (xfree, addrs_to_abfd_addrs);
616 1.1 christos
617 1.1 christos while (*addrs_sorted)
618 1.1 christos {
619 1.1 christos const char *sect_name = addr_section_name ((*addrs_sorted)->name);
620 1.1 christos
621 1.1 christos while (*abfd_addrs_sorted
622 1.1 christos && strcmp (addr_section_name ((*abfd_addrs_sorted)->name),
623 1.1 christos sect_name) < 0)
624 1.1 christos abfd_addrs_sorted++;
625 1.1 christos
626 1.1 christos if (*abfd_addrs_sorted
627 1.1 christos && strcmp (addr_section_name ((*abfd_addrs_sorted)->name),
628 1.1 christos sect_name) == 0)
629 1.1 christos {
630 1.1 christos int index_in_addrs;
631 1.1 christos
632 1.1 christos /* Make the found item directly addressable from ADDRS. */
633 1.1 christos index_in_addrs = *addrs_sorted - addrs->other;
634 1.1 christos gdb_assert (addrs_to_abfd_addrs[index_in_addrs] == NULL);
635 1.1 christos addrs_to_abfd_addrs[index_in_addrs] = *abfd_addrs_sorted;
636 1.1 christos
637 1.1 christos /* Never use the same ABFD entry twice. */
638 1.1 christos abfd_addrs_sorted++;
639 1.1 christos }
640 1.1 christos
641 1.1 christos addrs_sorted++;
642 1.1 christos }
643 1.1 christos
644 1.1 christos /* Calculate offsets for the loadable sections.
645 1.1 christos FIXME! Sections must be in order of increasing loadable section
646 1.1 christos so that contiguous sections can use the lower-offset!!!
647 1.1 christos
648 1.1 christos Adjust offsets if the segments are not contiguous.
649 1.1 christos If the section is contiguous, its offset should be set to
650 1.1 christos the offset of the highest loadable section lower than it
651 1.1 christos (the loadable section directly below it in memory).
652 1.1 christos this_offset = lower_offset = lower_addr - lower_orig_addr */
653 1.1 christos
654 1.1 christos for (i = 0; i < addrs->num_sections; i++)
655 1.1 christos {
656 1.1 christos struct other_sections *sect = addrs_to_abfd_addrs[i];
657 1.1 christos
658 1.1 christos if (sect)
659 1.1 christos {
660 1.1 christos /* This is the index used by BFD. */
661 1.1 christos addrs->other[i].sectindex = sect->sectindex;
662 1.1 christos
663 1.1 christos if (addrs->other[i].addr != 0)
664 1.1 christos {
665 1.1 christos addrs->other[i].addr -= sect->addr;
666 1.1 christos lower_offset = addrs->other[i].addr;
667 1.1 christos }
668 1.1 christos else
669 1.1 christos addrs->other[i].addr = lower_offset;
670 1.1 christos }
671 1.1 christos else
672 1.1 christos {
673 1.1 christos /* addr_section_name transformation is not used for SECT_NAME. */
674 1.1 christos const char *sect_name = addrs->other[i].name;
675 1.1 christos
676 1.1 christos /* This section does not exist in ABFD, which is normally
677 1.1 christos unexpected and we want to issue a warning.
678 1.1 christos
679 1.1 christos However, the ELF prelinker does create a few sections which are
680 1.1 christos marked in the main executable as loadable (they are loaded in
681 1.1 christos memory from the DYNAMIC segment) and yet are not present in
682 1.1 christos separate debug info files. This is fine, and should not cause
683 1.1 christos a warning. Shared libraries contain just the section
684 1.1 christos ".gnu.liblist" but it is not marked as loadable there. There is
685 1.1 christos no other way to identify them than by their name as the sections
686 1.1 christos created by prelink have no special flags.
687 1.1 christos
688 1.1 christos For the sections `.bss' and `.sbss' see addr_section_name. */
689 1.1 christos
690 1.1 christos if (!(strcmp (sect_name, ".gnu.liblist") == 0
691 1.1 christos || strcmp (sect_name, ".gnu.conflict") == 0
692 1.1 christos || (strcmp (sect_name, ".bss") == 0
693 1.1 christos && i > 0
694 1.1 christos && strcmp (addrs->other[i - 1].name, ".dynbss") == 0
695 1.1 christos && addrs_to_abfd_addrs[i - 1] != NULL)
696 1.1 christos || (strcmp (sect_name, ".sbss") == 0
697 1.1 christos && i > 0
698 1.1 christos && strcmp (addrs->other[i - 1].name, ".sdynbss") == 0
699 1.1 christos && addrs_to_abfd_addrs[i - 1] != NULL)))
700 1.1 christos warning (_("section %s not found in %s"), sect_name,
701 1.1 christos bfd_get_filename (abfd));
702 1.1 christos
703 1.1 christos addrs->other[i].addr = 0;
704 1.1 christos addrs->other[i].sectindex = -1;
705 1.1 christos }
706 1.1 christos }
707 1.1 christos
708 1.1 christos do_cleanups (my_cleanup);
709 1.1 christos }
710 1.1 christos
711 1.1 christos /* Parse the user's idea of an offset for dynamic linking, into our idea
712 1.1 christos of how to represent it for fast symbol reading. This is the default
713 1.1 christos version of the sym_fns.sym_offsets function for symbol readers that
714 1.1 christos don't need to do anything special. It allocates a section_offsets table
715 1.1 christos for the objectfile OBJFILE and stuffs ADDR into all of the offsets. */
716 1.1 christos
717 1.1 christos void
718 1.1 christos default_symfile_offsets (struct objfile *objfile,
719 1.1 christos const struct section_addr_info *addrs)
720 1.1 christos {
721 1.1 christos objfile->num_sections = gdb_bfd_count_sections (objfile->obfd);
722 1.1 christos objfile->section_offsets = (struct section_offsets *)
723 1.1 christos obstack_alloc (&objfile->objfile_obstack,
724 1.1 christos SIZEOF_N_SECTION_OFFSETS (objfile->num_sections));
725 1.1 christos relative_addr_info_to_section_offsets (objfile->section_offsets,
726 1.1 christos objfile->num_sections, addrs);
727 1.1 christos
728 1.1 christos /* For relocatable files, all loadable sections will start at zero.
729 1.1 christos The zero is meaningless, so try to pick arbitrary addresses such
730 1.1 christos that no loadable sections overlap. This algorithm is quadratic,
731 1.1 christos but the number of sections in a single object file is generally
732 1.1 christos small. */
733 1.1 christos if ((bfd_get_file_flags (objfile->obfd) & (EXEC_P | DYNAMIC)) == 0)
734 1.1 christos {
735 1.1 christos struct place_section_arg arg;
736 1.1 christos bfd *abfd = objfile->obfd;
737 1.1 christos asection *cur_sec;
738 1.1 christos
739 1.1 christos for (cur_sec = abfd->sections; cur_sec != NULL; cur_sec = cur_sec->next)
740 1.1 christos /* We do not expect this to happen; just skip this step if the
741 1.1 christos relocatable file has a section with an assigned VMA. */
742 1.1 christos if (bfd_section_vma (abfd, cur_sec) != 0)
743 1.1 christos break;
744 1.1 christos
745 1.1 christos if (cur_sec == NULL)
746 1.1 christos {
747 1.1 christos CORE_ADDR *offsets = objfile->section_offsets->offsets;
748 1.1 christos
749 1.1 christos /* Pick non-overlapping offsets for sections the user did not
750 1.1 christos place explicitly. */
751 1.1 christos arg.offsets = objfile->section_offsets;
752 1.1 christos arg.lowest = 0;
753 1.1 christos bfd_map_over_sections (objfile->obfd, place_section, &arg);
754 1.1 christos
755 1.1 christos /* Correctly filling in the section offsets is not quite
756 1.1 christos enough. Relocatable files have two properties that
757 1.1 christos (most) shared objects do not:
758 1.1 christos
759 1.1 christos - Their debug information will contain relocations. Some
760 1.1 christos shared libraries do also, but many do not, so this can not
761 1.1 christos be assumed.
762 1.1 christos
763 1.1 christos - If there are multiple code sections they will be loaded
764 1.1 christos at different relative addresses in memory than they are
765 1.1 christos in the objfile, since all sections in the file will start
766 1.1 christos at address zero.
767 1.1 christos
768 1.1 christos Because GDB has very limited ability to map from an
769 1.1 christos address in debug info to the correct code section,
770 1.1 christos it relies on adding SECT_OFF_TEXT to things which might be
771 1.1 christos code. If we clear all the section offsets, and set the
772 1.1 christos section VMAs instead, then symfile_relocate_debug_section
773 1.1 christos will return meaningful debug information pointing at the
774 1.1 christos correct sections.
775 1.1 christos
776 1.1 christos GDB has too many different data structures for section
777 1.1 christos addresses - a bfd, objfile, and so_list all have section
778 1.1 christos tables, as does exec_ops. Some of these could probably
779 1.1 christos be eliminated. */
780 1.1 christos
781 1.1 christos for (cur_sec = abfd->sections; cur_sec != NULL;
782 1.1 christos cur_sec = cur_sec->next)
783 1.1 christos {
784 1.1 christos if ((bfd_get_section_flags (abfd, cur_sec) & SEC_ALLOC) == 0)
785 1.1 christos continue;
786 1.1 christos
787 1.1 christos bfd_set_section_vma (abfd, cur_sec, offsets[cur_sec->index]);
788 1.1 christos exec_set_section_address (bfd_get_filename (abfd),
789 1.1 christos cur_sec->index,
790 1.1 christos offsets[cur_sec->index]);
791 1.1 christos offsets[cur_sec->index] = 0;
792 1.1 christos }
793 1.1 christos }
794 1.1 christos }
795 1.1 christos
796 1.1 christos /* Remember the bfd indexes for the .text, .data, .bss and
797 1.1 christos .rodata sections. */
798 1.1 christos init_objfile_sect_indices (objfile);
799 1.1 christos }
800 1.1 christos
801 1.1 christos /* Divide the file into segments, which are individual relocatable units.
802 1.1 christos This is the default version of the sym_fns.sym_segments function for
803 1.1 christos symbol readers that do not have an explicit representation of segments.
804 1.1 christos It assumes that object files do not have segments, and fully linked
805 1.1 christos files have a single segment. */
806 1.1 christos
807 1.1 christos struct symfile_segment_data *
808 1.1 christos default_symfile_segments (bfd *abfd)
809 1.1 christos {
810 1.1 christos int num_sections, i;
811 1.1 christos asection *sect;
812 1.1 christos struct symfile_segment_data *data;
813 1.1 christos CORE_ADDR low, high;
814 1.1 christos
815 1.1 christos /* Relocatable files contain enough information to position each
816 1.1 christos loadable section independently; they should not be relocated
817 1.1 christos in segments. */
818 1.1 christos if ((bfd_get_file_flags (abfd) & (EXEC_P | DYNAMIC)) == 0)
819 1.1 christos return NULL;
820 1.1 christos
821 1.1 christos /* Make sure there is at least one loadable section in the file. */
822 1.1 christos for (sect = abfd->sections; sect != NULL; sect = sect->next)
823 1.1 christos {
824 1.1 christos if ((bfd_get_section_flags (abfd, sect) & SEC_ALLOC) == 0)
825 1.1 christos continue;
826 1.1 christos
827 1.1 christos break;
828 1.1 christos }
829 1.1 christos if (sect == NULL)
830 1.1 christos return NULL;
831 1.1 christos
832 1.1 christos low = bfd_get_section_vma (abfd, sect);
833 1.1 christos high = low + bfd_get_section_size (sect);
834 1.1.1.2 christos
835 1.1 christos data = XCNEW (struct symfile_segment_data);
836 1.1.1.2 christos data->num_segments = 1;
837 1.1.1.2 christos data->segment_bases = XCNEW (CORE_ADDR);
838 1.1 christos data->segment_sizes = XCNEW (CORE_ADDR);
839 1.1 christos
840 1.1.1.2 christos num_sections = bfd_count_sections (abfd);
841 1.1 christos data->segment_info = XCNEWVEC (int, num_sections);
842 1.1 christos
843 1.1 christos for (i = 0, sect = abfd->sections; sect != NULL; i++, sect = sect->next)
844 1.1 christos {
845 1.1 christos CORE_ADDR vma;
846 1.1 christos
847 1.1 christos if ((bfd_get_section_flags (abfd, sect) & SEC_ALLOC) == 0)
848 1.1 christos continue;
849 1.1 christos
850 1.1 christos vma = bfd_get_section_vma (abfd, sect);
851 1.1 christos if (vma < low)
852 1.1 christos low = vma;
853 1.1 christos if (vma + bfd_get_section_size (sect) > high)
854 1.1 christos high = vma + bfd_get_section_size (sect);
855 1.1 christos
856 1.1 christos data->segment_info[i] = 1;
857 1.1 christos }
858 1.1 christos
859 1.1 christos data->segment_bases[0] = low;
860 1.1 christos data->segment_sizes[0] = high - low;
861 1.1 christos
862 1.1 christos return data;
863 1.1 christos }
864 1.1 christos
865 1.1 christos /* This is a convenience function to call sym_read for OBJFILE and
866 1.1 christos possibly force the partial symbols to be read. */
867 1.1 christos
868 1.1 christos static void
869 1.1 christos read_symbols (struct objfile *objfile, int add_flags)
870 1.1 christos {
871 1.1.1.2 christos (*objfile->sf->sym_read) (objfile, add_flags);
872 1.1 christos objfile->per_bfd->minsyms_read = 1;
873 1.1 christos
874 1.1 christos /* find_separate_debug_file_in_section should be called only if there is
875 1.1 christos single binary with no existing separate debug info file. */
876 1.1 christos if (!objfile_has_partial_symbols (objfile)
877 1.1 christos && objfile->separate_debug_objfile == NULL
878 1.1 christos && objfile->separate_debug_objfile_backlink == NULL)
879 1.1 christos {
880 1.1 christos bfd *abfd = find_separate_debug_file_in_section (objfile);
881 1.1 christos struct cleanup *cleanup = make_cleanup_bfd_unref (abfd);
882 1.1 christos
883 1.1 christos if (abfd != NULL)
884 1.1 christos {
885 1.1 christos /* find_separate_debug_file_in_section uses the same filename for the
886 1.1 christos virtual section-as-bfd like the bfd filename containing the
887 1.1 christos section. Therefore use also non-canonical name form for the same
888 1.1 christos file containing the section. */
889 1.1 christos symbol_file_add_separate (abfd, objfile->original_name, add_flags,
890 1.1 christos objfile);
891 1.1 christos }
892 1.1 christos
893 1.1 christos do_cleanups (cleanup);
894 1.1 christos }
895 1.1 christos if ((add_flags & SYMFILE_NO_READ) == 0)
896 1.1 christos require_partial_symbols (objfile, 0);
897 1.1 christos }
898 1.1 christos
899 1.1 christos /* Initialize entry point information for this objfile. */
900 1.1 christos
901 1.1 christos static void
902 1.1 christos init_entry_point_info (struct objfile *objfile)
903 1.1.1.2 christos {
904 1.1.1.2 christos struct entry_info *ei = &objfile->per_bfd->ei;
905 1.1.1.2 christos
906 1.1.1.2 christos if (ei->initialized)
907 1.1.1.2 christos return;
908 1.1.1.2 christos ei->initialized = 1;
909 1.1 christos
910 1.1 christos /* Save startup file's range of PC addresses to help blockframe.c
911 1.1 christos decide where the bottom of the stack is. */
912 1.1 christos
913 1.1 christos if (bfd_get_file_flags (objfile->obfd) & EXEC_P)
914 1.1 christos {
915 1.1 christos /* Executable file -- record its entry point so we'll recognize
916 1.1.1.2 christos the startup file because it contains the entry point. */
917 1.1.1.2 christos ei->entry_point = bfd_get_start_address (objfile->obfd);
918 1.1 christos ei->entry_point_p = 1;
919 1.1 christos }
920 1.1 christos else if (bfd_get_file_flags (objfile->obfd) & DYNAMIC
921 1.1 christos && bfd_get_start_address (objfile->obfd) != 0)
922 1.1 christos {
923 1.1 christos /* Some shared libraries may have entry points set and be
924 1.1 christos runnable. There's no clear way to indicate this, so just check
925 1.1.1.2 christos for values other than zero. */
926 1.1.1.2 christos ei->entry_point = bfd_get_start_address (objfile->obfd);
927 1.1 christos ei->entry_point_p = 1;
928 1.1 christos }
929 1.1 christos else
930 1.1 christos {
931 1.1.1.2 christos /* Examination of non-executable.o files. Short-circuit this stuff. */
932 1.1 christos ei->entry_point_p = 0;
933 1.1 christos }
934 1.1.1.2 christos
935 1.1 christos if (ei->entry_point_p)
936 1.1.1.2 christos {
937 1.1.1.2 christos struct obj_section *osect;
938 1.1.1.2 christos CORE_ADDR entry_point = ei->entry_point;
939 1.1 christos int found;
940 1.1 christos
941 1.1 christos /* Make certain that the address points at real code, and not a
942 1.1 christos function descriptor. */
943 1.1 christos entry_point
944 1.1 christos = gdbarch_convert_from_func_ptr_addr (get_objfile_arch (objfile),
945 1.1 christos entry_point,
946 1.1 christos ¤t_target);
947 1.1 christos
948 1.1 christos /* Remove any ISA markers, so that this matches entries in the
949 1.1.1.2 christos symbol table. */
950 1.1 christos ei->entry_point
951 1.1.1.2 christos = gdbarch_addr_bits_remove (get_objfile_arch (objfile), entry_point);
952 1.1.1.2 christos
953 1.1.1.2 christos found = 0;
954 1.1.1.2 christos ALL_OBJFILE_OSECTIONS (objfile, osect)
955 1.1.1.2 christos {
956 1.1.1.2 christos struct bfd_section *sect = osect->the_bfd_section;
957 1.1.1.2 christos
958 1.1.1.2 christos if (entry_point >= bfd_get_section_vma (objfile->obfd, sect)
959 1.1.1.2 christos && entry_point < (bfd_get_section_vma (objfile->obfd, sect)
960 1.1.1.2 christos + bfd_get_section_size (sect)))
961 1.1.1.2 christos {
962 1.1.1.2 christos ei->the_bfd_section_index
963 1.1.1.2 christos = gdb_bfd_section_index (objfile->obfd, sect);
964 1.1.1.2 christos found = 1;
965 1.1.1.2 christos break;
966 1.1.1.2 christos }
967 1.1.1.2 christos }
968 1.1.1.2 christos
969 1.1.1.2 christos if (!found)
970 1.1 christos ei->the_bfd_section_index = SECT_OFF_TEXT (objfile);
971 1.1 christos }
972 1.1 christos }
973 1.1 christos
974 1.1 christos /* Process a symbol file, as either the main file or as a dynamically
975 1.1 christos loaded file.
976 1.1 christos
977 1.1 christos This function does not set the OBJFILE's entry-point info.
978 1.1 christos
979 1.1 christos OBJFILE is where the symbols are to be read from.
980 1.1 christos
981 1.1 christos ADDRS is the list of section load addresses. If the user has given
982 1.1 christos an 'add-symbol-file' command, then this is the list of offsets and
983 1.1 christos addresses he or she provided as arguments to the command; or, if
984 1.1 christos we're handling a shared library, these are the actual addresses the
985 1.1 christos sections are loaded at, according to the inferior's dynamic linker
986 1.1 christos (as gleaned by GDB's shared library code). We convert each address
987 1.1 christos into an offset from the section VMA's as it appears in the object
988 1.1 christos file, and then call the file's sym_offsets function to convert this
989 1.1 christos into a format-specific offset table --- a `struct section_offsets'.
990 1.1 christos
991 1.1 christos ADD_FLAGS encodes verbosity level, whether this is main symbol or
992 1.1 christos an extra symbol file such as dynamically loaded code, and wether
993 1.1 christos breakpoint reset should be deferred. */
994 1.1 christos
995 1.1 christos static void
996 1.1 christos syms_from_objfile_1 (struct objfile *objfile,
997 1.1 christos struct section_addr_info *addrs,
998 1.1 christos int add_flags)
999 1.1 christos {
1000 1.1 christos struct section_addr_info *local_addr = NULL;
1001 1.1 christos struct cleanup *old_chain;
1002 1.1 christos const int mainline = add_flags & SYMFILE_MAINLINE;
1003 1.1 christos
1004 1.1 christos objfile_set_sym_fns (objfile, find_sym_fns (objfile->obfd));
1005 1.1 christos
1006 1.1 christos if (objfile->sf == NULL)
1007 1.1 christos {
1008 1.1 christos /* No symbols to load, but we still need to make sure
1009 1.1 christos that the section_offsets table is allocated. */
1010 1.1 christos int num_sections = gdb_bfd_count_sections (objfile->obfd);
1011 1.1 christos size_t size = SIZEOF_N_SECTION_OFFSETS (num_sections);
1012 1.1 christos
1013 1.1 christos objfile->num_sections = num_sections;
1014 1.1.1.4 christos objfile->section_offsets
1015 1.1.1.4 christos = (struct section_offsets *) obstack_alloc (&objfile->objfile_obstack,
1016 1.1 christos size);
1017 1.1 christos memset (objfile->section_offsets, 0, size);
1018 1.1 christos return;
1019 1.1 christos }
1020 1.1 christos
1021 1.1 christos /* Make sure that partially constructed symbol tables will be cleaned up
1022 1.1 christos if an error occurs during symbol reading. */
1023 1.1 christos old_chain = make_cleanup_free_objfile (objfile);
1024 1.1 christos
1025 1.1 christos /* If ADDRS is NULL, put together a dummy address list.
1026 1.1 christos We now establish the convention that an addr of zero means
1027 1.1 christos no load address was specified. */
1028 1.1 christos if (! addrs)
1029 1.1 christos {
1030 1.1 christos local_addr = alloc_section_addr_info (1);
1031 1.1 christos make_cleanup (xfree, local_addr);
1032 1.1 christos addrs = local_addr;
1033 1.1 christos }
1034 1.1 christos
1035 1.1 christos if (mainline)
1036 1.1 christos {
1037 1.1 christos /* We will modify the main symbol table, make sure that all its users
1038 1.1 christos will be cleaned up if an error occurs during symbol reading. */
1039 1.1 christos make_cleanup (clear_symtab_users_cleanup, 0 /*ignore*/);
1040 1.1 christos
1041 1.1 christos /* Since no error yet, throw away the old symbol table. */
1042 1.1 christos
1043 1.1 christos if (symfile_objfile != NULL)
1044 1.1 christos {
1045 1.1 christos free_objfile (symfile_objfile);
1046 1.1 christos gdb_assert (symfile_objfile == NULL);
1047 1.1 christos }
1048 1.1 christos
1049 1.1 christos /* Currently we keep symbols from the add-symbol-file command.
1050 1.1 christos If the user wants to get rid of them, they should do "symbol-file"
1051 1.1 christos without arguments first. Not sure this is the best behavior
1052 1.1 christos (PR 2207). */
1053 1.1 christos
1054 1.1 christos (*objfile->sf->sym_new_init) (objfile);
1055 1.1 christos }
1056 1.1 christos
1057 1.1 christos /* Convert addr into an offset rather than an absolute address.
1058 1.1 christos We find the lowest address of a loaded segment in the objfile,
1059 1.1 christos and assume that <addr> is where that got loaded.
1060 1.1 christos
1061 1.1 christos We no longer warn if the lowest section is not a text segment (as
1062 1.1 christos happens for the PA64 port. */
1063 1.1 christos if (addrs->num_sections > 0)
1064 1.1 christos addr_info_make_relative (addrs, objfile->obfd);
1065 1.1 christos
1066 1.1 christos /* Initialize symbol reading routines for this objfile, allow complaints to
1067 1.1 christos appear for this new file, and record how verbose to be, then do the
1068 1.1 christos initial symbol reading for this file. */
1069 1.1 christos
1070 1.1 christos (*objfile->sf->sym_init) (objfile);
1071 1.1 christos clear_complaints (&symfile_complaints, 1, add_flags & SYMFILE_VERBOSE);
1072 1.1 christos
1073 1.1 christos (*objfile->sf->sym_offsets) (objfile, addrs);
1074 1.1 christos
1075 1.1 christos read_symbols (objfile, add_flags);
1076 1.1 christos
1077 1.1 christos /* Discard cleanups as symbol reading was successful. */
1078 1.1 christos
1079 1.1 christos discard_cleanups (old_chain);
1080 1.1 christos xfree (local_addr);
1081 1.1 christos }
1082 1.1 christos
1083 1.1 christos /* Same as syms_from_objfile_1, but also initializes the objfile
1084 1.1 christos entry-point info. */
1085 1.1 christos
1086 1.1 christos static void
1087 1.1 christos syms_from_objfile (struct objfile *objfile,
1088 1.1 christos struct section_addr_info *addrs,
1089 1.1 christos int add_flags)
1090 1.1 christos {
1091 1.1 christos syms_from_objfile_1 (objfile, addrs, add_flags);
1092 1.1 christos init_entry_point_info (objfile);
1093 1.1 christos }
1094 1.1 christos
1095 1.1 christos /* Perform required actions after either reading in the initial
1096 1.1 christos symbols for a new objfile, or mapping in the symbols from a reusable
1097 1.1 christos objfile. ADD_FLAGS is a bitmask of enum symfile_add_flags. */
1098 1.1.1.3 christos
1099 1.1.1.3 christos static void
1100 1.1 christos finish_new_objfile (struct objfile *objfile, int add_flags)
1101 1.1 christos {
1102 1.1 christos /* If this is the main symbol file we have to clean up all users of the
1103 1.1 christos old main symbol file. Otherwise it is sufficient to fixup all the
1104 1.1 christos breakpoints that may have been redefined by this symbol file. */
1105 1.1 christos if (add_flags & SYMFILE_MAINLINE)
1106 1.1 christos {
1107 1.1 christos /* OK, make it the "real" symbol file. */
1108 1.1 christos symfile_objfile = objfile;
1109 1.1 christos
1110 1.1 christos clear_symtab_users (add_flags);
1111 1.1 christos }
1112 1.1 christos else if ((add_flags & SYMFILE_DEFER_BP_RESET) == 0)
1113 1.1 christos {
1114 1.1 christos breakpoint_re_set ();
1115 1.1 christos }
1116 1.1 christos
1117 1.1 christos /* We're done reading the symbol file; finish off complaints. */
1118 1.1 christos clear_complaints (&symfile_complaints, 0, add_flags & SYMFILE_VERBOSE);
1119 1.1 christos }
1120 1.1 christos
1121 1.1 christos /* Process a symbol file, as either the main file or as a dynamically
1122 1.1 christos loaded file.
1123 1.1 christos
1124 1.1 christos ABFD is a BFD already open on the file, as from symfile_bfd_open.
1125 1.1 christos A new reference is acquired by this function.
1126 1.1 christos
1127 1.1 christos For NAME description see allocate_objfile's definition.
1128 1.1 christos
1129 1.1 christos ADD_FLAGS encodes verbosity, whether this is main symbol file or
1130 1.1 christos extra, such as dynamically loaded code, and what to do with breakpoins.
1131 1.1 christos
1132 1.1 christos ADDRS is as described for syms_from_objfile_1, above.
1133 1.1 christos ADDRS is ignored when SYMFILE_MAINLINE bit is set in ADD_FLAGS.
1134 1.1 christos
1135 1.1 christos PARENT is the original objfile if ABFD is a separate debug info file.
1136 1.1 christos Otherwise PARENT is NULL.
1137 1.1 christos
1138 1.1 christos Upon success, returns a pointer to the objfile that was added.
1139 1.1 christos Upon failure, jumps back to command level (never returns). */
1140 1.1 christos
1141 1.1 christos static struct objfile *
1142 1.1 christos symbol_file_add_with_addrs (bfd *abfd, const char *name, int add_flags,
1143 1.1 christos struct section_addr_info *addrs,
1144 1.1 christos int flags, struct objfile *parent)
1145 1.1 christos {
1146 1.1 christos struct objfile *objfile;
1147 1.1 christos const int from_tty = add_flags & SYMFILE_VERBOSE;
1148 1.1.1.2 christos const int mainline = add_flags & SYMFILE_MAINLINE;
1149 1.1 christos const int should_print = (print_symbol_loading_p (from_tty, mainline, 1)
1150 1.1 christos && (readnow_symbol_files
1151 1.1 christos || (add_flags & SYMFILE_NO_READ) == 0));
1152 1.1 christos
1153 1.1 christos if (readnow_symbol_files)
1154 1.1 christos {
1155 1.1 christos flags |= OBJF_READNOW;
1156 1.1 christos add_flags &= ~SYMFILE_NO_READ;
1157 1.1 christos }
1158 1.1 christos
1159 1.1 christos /* Give user a chance to burp if we'd be
1160 1.1 christos interactively wiping out any existing symbols. */
1161 1.1 christos
1162 1.1 christos if ((have_full_symbols () || have_partial_symbols ())
1163 1.1 christos && mainline
1164 1.1 christos && from_tty
1165 1.1 christos && !query (_("Load new symbol table from \"%s\"? "), name))
1166 1.1 christos error (_("Not confirmed."));
1167 1.1 christos
1168 1.1 christos objfile = allocate_objfile (abfd, name,
1169 1.1 christos flags | (mainline ? OBJF_MAINLINE : 0));
1170 1.1 christos
1171 1.1 christos if (parent)
1172 1.1 christos add_separate_debug_objfile (objfile, parent);
1173 1.1 christos
1174 1.1 christos /* We either created a new mapped symbol table, mapped an existing
1175 1.1 christos symbol table file which has not had initial symbol reading
1176 1.1 christos performed, or need to read an unmapped symbol table. */
1177 1.1 christos if (should_print)
1178 1.1 christos {
1179 1.1 christos if (deprecated_pre_add_symbol_hook)
1180 1.1 christos deprecated_pre_add_symbol_hook (name);
1181 1.1 christos else
1182 1.1 christos {
1183 1.1 christos printf_unfiltered (_("Reading symbols from %s..."), name);
1184 1.1 christos wrap_here ("");
1185 1.1 christos gdb_flush (gdb_stdout);
1186 1.1 christos }
1187 1.1 christos }
1188 1.1 christos syms_from_objfile (objfile, addrs, add_flags);
1189 1.1 christos
1190 1.1 christos /* We now have at least a partial symbol table. Check to see if the
1191 1.1 christos user requested that all symbols be read on initial access via either
1192 1.1 christos the gdb startup command line or on a per symbol file basis. Expand
1193 1.1 christos all partial symbol tables for this objfile if so. */
1194 1.1 christos
1195 1.1 christos if ((flags & OBJF_READNOW))
1196 1.1 christos {
1197 1.1 christos if (should_print)
1198 1.1 christos {
1199 1.1 christos printf_unfiltered (_("expanding to full symbols..."));
1200 1.1 christos wrap_here ("");
1201 1.1 christos gdb_flush (gdb_stdout);
1202 1.1 christos }
1203 1.1 christos
1204 1.1 christos if (objfile->sf)
1205 1.1 christos objfile->sf->qf->expand_all_symtabs (objfile);
1206 1.1 christos }
1207 1.1 christos
1208 1.1 christos if (should_print && !objfile_has_symbols (objfile))
1209 1.1 christos {
1210 1.1 christos wrap_here ("");
1211 1.1 christos printf_unfiltered (_("(no debugging symbols found)..."));
1212 1.1 christos wrap_here ("");
1213 1.1 christos }
1214 1.1 christos
1215 1.1 christos if (should_print)
1216 1.1 christos {
1217 1.1 christos if (deprecated_post_add_symbol_hook)
1218 1.1 christos deprecated_post_add_symbol_hook ();
1219 1.1 christos else
1220 1.1 christos printf_unfiltered (_("done.\n"));
1221 1.1 christos }
1222 1.1 christos
1223 1.1 christos /* We print some messages regardless of whether 'from_tty ||
1224 1.1 christos info_verbose' is true, so make sure they go out at the right
1225 1.1 christos time. */
1226 1.1 christos gdb_flush (gdb_stdout);
1227 1.1 christos
1228 1.1 christos if (objfile->sf == NULL)
1229 1.1 christos {
1230 1.1 christos observer_notify_new_objfile (objfile);
1231 1.1 christos return objfile; /* No symbols. */
1232 1.1 christos }
1233 1.1.1.3 christos
1234 1.1 christos finish_new_objfile (objfile, add_flags);
1235 1.1 christos
1236 1.1 christos observer_notify_new_objfile (objfile);
1237 1.1 christos
1238 1.1 christos bfd_cache_close_all ();
1239 1.1 christos return (objfile);
1240 1.1 christos }
1241 1.1 christos
1242 1.1 christos /* Add BFD as a separate debug file for OBJFILE. For NAME description
1243 1.1 christos see allocate_objfile's definition. */
1244 1.1 christos
1245 1.1 christos void
1246 1.1 christos symbol_file_add_separate (bfd *bfd, const char *name, int symfile_flags,
1247 1.1 christos struct objfile *objfile)
1248 1.1 christos {
1249 1.1 christos struct section_addr_info *sap;
1250 1.1 christos struct cleanup *my_cleanup;
1251 1.1 christos
1252 1.1 christos /* Create section_addr_info. We can't directly use offsets from OBJFILE
1253 1.1 christos because sections of BFD may not match sections of OBJFILE and because
1254 1.1 christos vma may have been modified by tools such as prelink. */
1255 1.1 christos sap = build_section_addr_info_from_objfile (objfile);
1256 1.1 christos my_cleanup = make_cleanup_free_section_addr_info (sap);
1257 1.1.1.4 christos
1258 1.1 christos symbol_file_add_with_addrs
1259 1.1 christos (bfd, name, symfile_flags, sap,
1260 1.1 christos objfile->flags & (OBJF_REORDERED | OBJF_SHARED | OBJF_READNOW
1261 1.1 christos | OBJF_USERLOADED),
1262 1.1 christos objfile);
1263 1.1 christos
1264 1.1 christos do_cleanups (my_cleanup);
1265 1.1 christos }
1266 1.1 christos
1267 1.1 christos /* Process the symbol file ABFD, as either the main file or as a
1268 1.1 christos dynamically loaded file.
1269 1.1 christos See symbol_file_add_with_addrs's comments for details. */
1270 1.1 christos
1271 1.1 christos struct objfile *
1272 1.1 christos symbol_file_add_from_bfd (bfd *abfd, const char *name, int add_flags,
1273 1.1 christos struct section_addr_info *addrs,
1274 1.1 christos int flags, struct objfile *parent)
1275 1.1 christos {
1276 1.1 christos return symbol_file_add_with_addrs (abfd, name, add_flags, addrs, flags,
1277 1.1 christos parent);
1278 1.1 christos }
1279 1.1 christos
1280 1.1 christos /* Process a symbol file, as either the main file or as a dynamically
1281 1.1 christos loaded file. See symbol_file_add_with_addrs's comments for details. */
1282 1.1 christos
1283 1.1 christos struct objfile *
1284 1.1 christos symbol_file_add (const char *name, int add_flags,
1285 1.1 christos struct section_addr_info *addrs, int flags)
1286 1.1 christos {
1287 1.1 christos bfd *bfd = symfile_bfd_open (name);
1288 1.1 christos struct cleanup *cleanup = make_cleanup_bfd_unref (bfd);
1289 1.1 christos struct objfile *objf;
1290 1.1 christos
1291 1.1 christos objf = symbol_file_add_from_bfd (bfd, name, add_flags, addrs, flags, NULL);
1292 1.1 christos do_cleanups (cleanup);
1293 1.1 christos return objf;
1294 1.1 christos }
1295 1.1 christos
1296 1.1 christos /* Call symbol_file_add() with default values and update whatever is
1297 1.1 christos affected by the loading of a new main().
1298 1.1 christos Used when the file is supplied in the gdb command line
1299 1.1 christos and by some targets with special loading requirements.
1300 1.1 christos The auxiliary function, symbol_file_add_main_1(), has the flags
1301 1.1 christos argument for the switches that can only be specified in the symbol_file
1302 1.1 christos command itself. */
1303 1.1 christos
1304 1.1 christos void
1305 1.1 christos symbol_file_add_main (const char *args, int from_tty)
1306 1.1 christos {
1307 1.1 christos symbol_file_add_main_1 (args, from_tty, 0);
1308 1.1 christos }
1309 1.1 christos
1310 1.1 christos static void
1311 1.1 christos symbol_file_add_main_1 (const char *args, int from_tty, int flags)
1312 1.1 christos {
1313 1.1 christos const int add_flags = (current_inferior ()->symfile_flags
1314 1.1 christos | SYMFILE_MAINLINE | (from_tty ? SYMFILE_VERBOSE : 0));
1315 1.1 christos
1316 1.1 christos symbol_file_add (args, add_flags, NULL, flags);
1317 1.1 christos
1318 1.1 christos /* Getting new symbols may change our opinion about
1319 1.1 christos what is frameless. */
1320 1.1 christos reinit_frame_cache ();
1321 1.1 christos
1322 1.1 christos if ((flags & SYMFILE_NO_READ) == 0)
1323 1.1 christos set_initial_language ();
1324 1.1 christos }
1325 1.1 christos
1326 1.1 christos void
1327 1.1 christos symbol_file_clear (int from_tty)
1328 1.1 christos {
1329 1.1 christos if ((have_full_symbols () || have_partial_symbols ())
1330 1.1 christos && from_tty
1331 1.1 christos && (symfile_objfile
1332 1.1 christos ? !query (_("Discard symbol table from `%s'? "),
1333 1.1 christos objfile_name (symfile_objfile))
1334 1.1 christos : !query (_("Discard symbol table? "))))
1335 1.1 christos error (_("Not confirmed."));
1336 1.1 christos
1337 1.1 christos /* solib descriptors may have handles to objfiles. Wipe them before their
1338 1.1 christos objfiles get stale by free_all_objfiles. */
1339 1.1 christos no_shared_libraries (NULL, from_tty);
1340 1.1 christos
1341 1.1 christos free_all_objfiles ();
1342 1.1 christos
1343 1.1 christos gdb_assert (symfile_objfile == NULL);
1344 1.1 christos if (from_tty)
1345 1.1 christos printf_unfiltered (_("No symbol file now.\n"));
1346 1.1 christos }
1347 1.1 christos
1348 1.1 christos static int
1349 1.1 christos separate_debug_file_exists (const char *name, unsigned long crc,
1350 1.1 christos struct objfile *parent_objfile)
1351 1.1 christos {
1352 1.1 christos unsigned long file_crc;
1353 1.1 christos int file_crc_p;
1354 1.1 christos bfd *abfd;
1355 1.1 christos struct stat parent_stat, abfd_stat;
1356 1.1 christos int verified_as_different;
1357 1.1 christos
1358 1.1 christos /* Find a separate debug info file as if symbols would be present in
1359 1.1 christos PARENT_OBJFILE itself this function would not be called. .gnu_debuglink
1360 1.1 christos section can contain just the basename of PARENT_OBJFILE without any
1361 1.1 christos ".debug" suffix as "/usr/lib/debug/path/to/file" is a separate tree where
1362 1.1 christos the separate debug infos with the same basename can exist. */
1363 1.1 christos
1364 1.1 christos if (filename_cmp (name, objfile_name (parent_objfile)) == 0)
1365 1.1 christos return 0;
1366 1.1.1.3 christos
1367 1.1 christos abfd = gdb_bfd_open (name, gnutarget, -1);
1368 1.1 christos
1369 1.1 christos if (!abfd)
1370 1.1 christos return 0;
1371 1.1 christos
1372 1.1 christos /* Verify symlinks were not the cause of filename_cmp name difference above.
1373 1.1 christos
1374 1.1 christos Some operating systems, e.g. Windows, do not provide a meaningful
1375 1.1.1.3 christos st_ino; they always set it to zero. (Windows does provide a
1376 1.1.1.3 christos meaningful st_dev.) Files accessed from gdbservers that do not
1377 1.1.1.3 christos support the vFile:fstat packet will also have st_ino set to zero.
1378 1.1.1.3 christos Do not indicate a duplicate library in either case. While there
1379 1.1.1.3 christos is no guarantee that a system that provides meaningful inode
1380 1.1.1.3 christos numbers will never set st_ino to zero, this is merely an
1381 1.1 christos optimization, so we do not need to worry about false negatives. */
1382 1.1 christos
1383 1.1 christos if (bfd_stat (abfd, &abfd_stat) == 0
1384 1.1 christos && abfd_stat.st_ino != 0
1385 1.1 christos && bfd_stat (parent_objfile->obfd, &parent_stat) == 0)
1386 1.1 christos {
1387 1.1 christos if (abfd_stat.st_dev == parent_stat.st_dev
1388 1.1 christos && abfd_stat.st_ino == parent_stat.st_ino)
1389 1.1 christos {
1390 1.1 christos gdb_bfd_unref (abfd);
1391 1.1 christos return 0;
1392 1.1 christos }
1393 1.1 christos verified_as_different = 1;
1394 1.1 christos }
1395 1.1 christos else
1396 1.1 christos verified_as_different = 0;
1397 1.1 christos
1398 1.1 christos file_crc_p = gdb_bfd_crc (abfd, &file_crc);
1399 1.1 christos
1400 1.1 christos gdb_bfd_unref (abfd);
1401 1.1 christos
1402 1.1 christos if (!file_crc_p)
1403 1.1 christos return 0;
1404 1.1 christos
1405 1.1 christos if (crc != file_crc)
1406 1.1 christos {
1407 1.1 christos unsigned long parent_crc;
1408 1.1.1.3 christos
1409 1.1.1.3 christos /* If the files could not be verified as different with
1410 1.1.1.3 christos bfd_stat then we need to calculate the parent's CRC
1411 1.1 christos to verify whether the files are different or not. */
1412 1.1 christos
1413 1.1 christos if (!verified_as_different)
1414 1.1 christos {
1415 1.1 christos if (!gdb_bfd_crc (parent_objfile->obfd, &parent_crc))
1416 1.1 christos return 0;
1417 1.1 christos }
1418 1.1 christos
1419 1.1 christos if (verified_as_different || parent_crc != file_crc)
1420 1.1 christos warning (_("the debug information found in \"%s\""
1421 1.1 christos " does not match \"%s\" (CRC mismatch).\n"),
1422 1.1 christos name, objfile_name (parent_objfile));
1423 1.1 christos
1424 1.1 christos return 0;
1425 1.1 christos }
1426 1.1 christos
1427 1.1 christos return 1;
1428 1.1 christos }
1429 1.1 christos
1430 1.1 christos char *debug_file_directory = NULL;
1431 1.1 christos static void
1432 1.1 christos show_debug_file_directory (struct ui_file *file, int from_tty,
1433 1.1 christos struct cmd_list_element *c, const char *value)
1434 1.1 christos {
1435 1.1 christos fprintf_filtered (file,
1436 1.1 christos _("The directory where separate debug "
1437 1.1 christos "symbols are searched for is \"%s\".\n"),
1438 1.1 christos value);
1439 1.1 christos }
1440 1.1 christos
1441 1.1 christos #if ! defined (DEBUG_SUBDIRECTORY)
1442 1.1 christos #define DEBUG_SUBDIRECTORY ".debug"
1443 1.1 christos #endif
1444 1.1 christos
1445 1.1 christos /* Find a separate debuginfo file for OBJFILE, using DIR as the directory
1446 1.1 christos where the original file resides (may not be the same as
1447 1.1 christos dirname(objfile->name) due to symlinks), and DEBUGLINK as the file we are
1448 1.1 christos looking for. CANON_DIR is the "realpath" form of DIR.
1449 1.1 christos DIR must contain a trailing '/'.
1450 1.1 christos Returns the path of the file with separate debug info, of NULL. */
1451 1.1 christos
1452 1.1 christos static char *
1453 1.1 christos find_separate_debug_file (const char *dir,
1454 1.1 christos const char *canon_dir,
1455 1.1 christos const char *debuglink,
1456 1.1 christos unsigned long crc32, struct objfile *objfile)
1457 1.1 christos {
1458 1.1 christos char *debugdir;
1459 1.1 christos char *debugfile;
1460 1.1 christos int i;
1461 1.1 christos VEC (char_ptr) *debugdir_vec;
1462 1.1 christos struct cleanup *back_to;
1463 1.1 christos int ix;
1464 1.1 christos
1465 1.1 christos /* Set I to max (strlen (canon_dir), strlen (dir)). */
1466 1.1 christos i = strlen (dir);
1467 1.1 christos if (canon_dir != NULL && strlen (canon_dir) > i)
1468 1.1 christos i = strlen (canon_dir);
1469 1.1.1.4 christos
1470 1.1.1.4 christos debugfile
1471 1.1.1.4 christos = (char *) xmalloc (strlen (debug_file_directory) + 1
1472 1.1.1.4 christos + i
1473 1.1.1.4 christos + strlen (DEBUG_SUBDIRECTORY)
1474 1.1.1.4 christos + strlen ("/")
1475 1.1.1.4 christos + strlen (debuglink)
1476 1.1 christos + 1);
1477 1.1 christos
1478 1.1 christos /* First try in the same directory as the original file. */
1479 1.1 christos strcpy (debugfile, dir);
1480 1.1 christos strcat (debugfile, debuglink);
1481 1.1 christos
1482 1.1 christos if (separate_debug_file_exists (debugfile, crc32, objfile))
1483 1.1 christos return debugfile;
1484 1.1 christos
1485 1.1 christos /* Then try in the subdirectory named DEBUG_SUBDIRECTORY. */
1486 1.1 christos strcpy (debugfile, dir);
1487 1.1 christos strcat (debugfile, DEBUG_SUBDIRECTORY);
1488 1.1 christos strcat (debugfile, "/");
1489 1.1 christos strcat (debugfile, debuglink);
1490 1.1 christos
1491 1.1 christos if (separate_debug_file_exists (debugfile, crc32, objfile))
1492 1.1 christos return debugfile;
1493 1.1 christos
1494 1.1 christos /* Then try in the global debugfile directories.
1495 1.1 christos
1496 1.1 christos Keep backward compatibility so that DEBUG_FILE_DIRECTORY being "" will
1497 1.1 christos cause "/..." lookups. */
1498 1.1 christos
1499 1.1 christos debugdir_vec = dirnames_to_char_ptr_vec (debug_file_directory);
1500 1.1 christos back_to = make_cleanup_free_char_ptr_vec (debugdir_vec);
1501 1.1 christos
1502 1.1 christos for (ix = 0; VEC_iterate (char_ptr, debugdir_vec, ix, debugdir); ++ix)
1503 1.1 christos {
1504 1.1 christos strcpy (debugfile, debugdir);
1505 1.1 christos strcat (debugfile, "/");
1506 1.1 christos strcat (debugfile, dir);
1507 1.1 christos strcat (debugfile, debuglink);
1508 1.1 christos
1509 1.1 christos if (separate_debug_file_exists (debugfile, crc32, objfile))
1510 1.1 christos {
1511 1.1 christos do_cleanups (back_to);
1512 1.1 christos return debugfile;
1513 1.1 christos }
1514 1.1 christos
1515 1.1 christos /* If the file is in the sysroot, try using its base path in the
1516 1.1 christos global debugfile directory. */
1517 1.1 christos if (canon_dir != NULL
1518 1.1 christos && filename_ncmp (canon_dir, gdb_sysroot,
1519 1.1 christos strlen (gdb_sysroot)) == 0
1520 1.1 christos && IS_DIR_SEPARATOR (canon_dir[strlen (gdb_sysroot)]))
1521 1.1 christos {
1522 1.1 christos strcpy (debugfile, debugdir);
1523 1.1 christos strcat (debugfile, canon_dir + strlen (gdb_sysroot));
1524 1.1 christos strcat (debugfile, "/");
1525 1.1 christos strcat (debugfile, debuglink);
1526 1.1 christos
1527 1.1 christos if (separate_debug_file_exists (debugfile, crc32, objfile))
1528 1.1 christos {
1529 1.1 christos do_cleanups (back_to);
1530 1.1 christos return debugfile;
1531 1.1 christos }
1532 1.1 christos }
1533 1.1 christos }
1534 1.1 christos
1535 1.1 christos do_cleanups (back_to);
1536 1.1 christos xfree (debugfile);
1537 1.1 christos return NULL;
1538 1.1 christos }
1539 1.1 christos
1540 1.1 christos /* Modify PATH to contain only "[/]directory/" part of PATH.
1541 1.1 christos If there were no directory separators in PATH, PATH will be empty
1542 1.1 christos string on return. */
1543 1.1 christos
1544 1.1 christos static void
1545 1.1 christos terminate_after_last_dir_separator (char *path)
1546 1.1 christos {
1547 1.1 christos int i;
1548 1.1 christos
1549 1.1 christos /* Strip off the final filename part, leaving the directory name,
1550 1.1 christos followed by a slash. The directory can be relative or absolute. */
1551 1.1 christos for (i = strlen(path) - 1; i >= 0; i--)
1552 1.1 christos if (IS_DIR_SEPARATOR (path[i]))
1553 1.1 christos break;
1554 1.1 christos
1555 1.1 christos /* If I is -1 then no directory is present there and DIR will be "". */
1556 1.1 christos path[i + 1] = '\0';
1557 1.1 christos }
1558 1.1 christos
1559 1.1 christos /* Find separate debuginfo for OBJFILE (using .gnu_debuglink section).
1560 1.1 christos Returns pathname, or NULL. */
1561 1.1 christos
1562 1.1 christos char *
1563 1.1 christos find_separate_debug_file_by_debuglink (struct objfile *objfile)
1564 1.1 christos {
1565 1.1 christos char *debuglink;
1566 1.1 christos char *dir, *canon_dir;
1567 1.1 christos char *debugfile;
1568 1.1 christos unsigned long crc32;
1569 1.1 christos struct cleanup *cleanups;
1570 1.1 christos
1571 1.1 christos debuglink = bfd_get_debug_link_info (objfile->obfd, &crc32);
1572 1.1 christos
1573 1.1 christos if (debuglink == NULL)
1574 1.1 christos {
1575 1.1 christos /* There's no separate debug info, hence there's no way we could
1576 1.1 christos load it => no warning. */
1577 1.1 christos return NULL;
1578 1.1 christos }
1579 1.1 christos
1580 1.1 christos cleanups = make_cleanup (xfree, debuglink);
1581 1.1 christos dir = xstrdup (objfile_name (objfile));
1582 1.1 christos make_cleanup (xfree, dir);
1583 1.1 christos terminate_after_last_dir_separator (dir);
1584 1.1 christos canon_dir = lrealpath (dir);
1585 1.1 christos
1586 1.1 christos debugfile = find_separate_debug_file (dir, canon_dir, debuglink,
1587 1.1 christos crc32, objfile);
1588 1.1 christos xfree (canon_dir);
1589 1.1 christos
1590 1.1 christos if (debugfile == NULL)
1591 1.1 christos {
1592 1.1 christos /* For PR gdb/9538, try again with realpath (if different from the
1593 1.1 christos original). */
1594 1.1 christos
1595 1.1 christos struct stat st_buf;
1596 1.1 christos
1597 1.1 christos if (lstat (objfile_name (objfile), &st_buf) == 0
1598 1.1 christos && S_ISLNK (st_buf.st_mode))
1599 1.1 christos {
1600 1.1 christos char *symlink_dir;
1601 1.1 christos
1602 1.1 christos symlink_dir = lrealpath (objfile_name (objfile));
1603 1.1 christos if (symlink_dir != NULL)
1604 1.1 christos {
1605 1.1 christos make_cleanup (xfree, symlink_dir);
1606 1.1 christos terminate_after_last_dir_separator (symlink_dir);
1607 1.1 christos if (strcmp (dir, symlink_dir) != 0)
1608 1.1 christos {
1609 1.1 christos /* Different directory, so try using it. */
1610 1.1 christos debugfile = find_separate_debug_file (symlink_dir,
1611 1.1 christos symlink_dir,
1612 1.1 christos debuglink,
1613 1.1 christos crc32,
1614 1.1 christos objfile);
1615 1.1 christos }
1616 1.1 christos }
1617 1.1 christos }
1618 1.1 christos }
1619 1.1 christos
1620 1.1 christos do_cleanups (cleanups);
1621 1.1 christos return debugfile;
1622 1.1 christos }
1623 1.1 christos
1624 1.1 christos /* This is the symbol-file command. Read the file, analyze its
1625 1.1 christos symbols, and add a struct symtab to a symtab list. The syntax of
1626 1.1 christos the command is rather bizarre:
1627 1.1 christos
1628 1.1 christos 1. The function buildargv implements various quoting conventions
1629 1.1 christos which are undocumented and have little or nothing in common with
1630 1.1 christos the way things are quoted (or not quoted) elsewhere in GDB.
1631 1.1 christos
1632 1.1 christos 2. Options are used, which are not generally used in GDB (perhaps
1633 1.1 christos "set mapped on", "set readnow on" would be better)
1634 1.1 christos
1635 1.1 christos 3. The order of options matters, which is contrary to GNU
1636 1.1 christos conventions (because it is confusing and inconvenient). */
1637 1.1 christos
1638 1.1 christos void
1639 1.1 christos symbol_file_command (char *args, int from_tty)
1640 1.1 christos {
1641 1.1 christos dont_repeat ();
1642 1.1 christos
1643 1.1 christos if (args == NULL)
1644 1.1 christos {
1645 1.1 christos symbol_file_clear (from_tty);
1646 1.1 christos }
1647 1.1 christos else
1648 1.1 christos {
1649 1.1 christos char **argv = gdb_buildargv (args);
1650 1.1 christos int flags = OBJF_USERLOADED;
1651 1.1 christos struct cleanup *cleanups;
1652 1.1 christos char *name = NULL;
1653 1.1 christos
1654 1.1 christos cleanups = make_cleanup_freeargv (argv);
1655 1.1 christos while (*argv != NULL)
1656 1.1 christos {
1657 1.1 christos if (strcmp (*argv, "-readnow") == 0)
1658 1.1 christos flags |= OBJF_READNOW;
1659 1.1 christos else if (**argv == '-')
1660 1.1 christos error (_("unknown option `%s'"), *argv);
1661 1.1 christos else
1662 1.1 christos {
1663 1.1 christos symbol_file_add_main_1 (*argv, from_tty, flags);
1664 1.1 christos name = *argv;
1665 1.1 christos }
1666 1.1 christos
1667 1.1 christos argv++;
1668 1.1 christos }
1669 1.1 christos
1670 1.1 christos if (name == NULL)
1671 1.1 christos error (_("no symbol file name was specified"));
1672 1.1 christos
1673 1.1 christos do_cleanups (cleanups);
1674 1.1 christos }
1675 1.1 christos }
1676 1.1 christos
1677 1.1 christos /* Set the initial language.
1678 1.1 christos
1679 1.1 christos FIXME: A better solution would be to record the language in the
1680 1.1 christos psymtab when reading partial symbols, and then use it (if known) to
1681 1.1 christos set the language. This would be a win for formats that encode the
1682 1.1 christos language in an easily discoverable place, such as DWARF. For
1683 1.1 christos stabs, we can jump through hoops looking for specially named
1684 1.1 christos symbols or try to intuit the language from the specific type of
1685 1.1 christos stabs we find, but we can't do that until later when we read in
1686 1.1 christos full symbols. */
1687 1.1 christos
1688 1.1 christos void
1689 1.1 christos set_initial_language (void)
1690 1.1.1.2 christos {
1691 1.1 christos enum language lang = main_language ();
1692 1.1.1.2 christos
1693 1.1 christos if (lang == language_unknown)
1694 1.1 christos {
1695 1.1.1.4 christos char *name = main_name ();
1696 1.1 christos struct symbol *sym = lookup_symbol (name, NULL, VAR_DOMAIN, NULL).symbol;
1697 1.1 christos
1698 1.1 christos if (sym != NULL)
1699 1.1 christos lang = SYMBOL_LANGUAGE (sym);
1700 1.1 christos }
1701 1.1 christos
1702 1.1 christos if (lang == language_unknown)
1703 1.1 christos {
1704 1.1 christos /* Make C the default language */
1705 1.1 christos lang = language_c;
1706 1.1 christos }
1707 1.1 christos
1708 1.1 christos set_language (lang);
1709 1.1 christos expected_language = current_language; /* Don't warn the user. */
1710 1.1 christos }
1711 1.1 christos
1712 1.1 christos /* Open the file specified by NAME and hand it off to BFD for
1713 1.1 christos preliminary analysis. Return a newly initialized bfd *, which
1714 1.1 christos includes a newly malloc'd` copy of NAME (tilde-expanded and made
1715 1.1 christos absolute). In case of trouble, error() is called. */
1716 1.1 christos
1717 1.1.1.3 christos bfd *
1718 1.1 christos symfile_bfd_open (const char *name)
1719 1.1 christos {
1720 1.1.1.3 christos bfd *sym_bfd;
1721 1.1.1.3 christos int desc = -1;
1722 1.1 christos struct cleanup *back_to = make_cleanup (null_cleanup, 0);
1723 1.1.1.3 christos
1724 1.1 christos if (!is_target_filename (name))
1725 1.1.1.3 christos {
1726 1.1 christos char *expanded_name, *absolute_name;
1727 1.1.1.3 christos
1728 1.1 christos expanded_name = tilde_expand (name); /* Returns 1st new malloc'd copy. */
1729 1.1.1.3 christos
1730 1.1.1.3 christos /* Look down path for it, allocate 2nd new malloc'd copy. */
1731 1.1.1.3 christos desc = openp (getenv ("PATH"),
1732 1.1.1.3 christos OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH,
1733 1.1 christos expanded_name, O_RDONLY | O_BINARY, &absolute_name);
1734 1.1.1.3 christos #if defined(__GO32__) || defined(_WIN32) || defined (__CYGWIN__)
1735 1.1.1.3 christos if (desc < 0)
1736 1.1.1.4 christos {
1737 1.1 christos char *exename = (char *) alloca (strlen (expanded_name) + 5);
1738 1.1.1.3 christos
1739 1.1.1.3 christos strcat (strcpy (exename, expanded_name), ".exe");
1740 1.1.1.3 christos desc = openp (getenv ("PATH"),
1741 1.1.1.3 christos OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH,
1742 1.1.1.3 christos exename, O_RDONLY | O_BINARY, &absolute_name);
1743 1.1 christos }
1744 1.1.1.3 christos #endif
1745 1.1.1.3 christos if (desc < 0)
1746 1.1.1.3 christos {
1747 1.1.1.3 christos make_cleanup (xfree, expanded_name);
1748 1.1.1.3 christos perror_with_name (expanded_name);
1749 1.1 christos }
1750 1.1.1.3 christos
1751 1.1.1.3 christos xfree (expanded_name);
1752 1.1.1.3 christos make_cleanup (xfree, absolute_name);
1753 1.1.1.3 christos name = absolute_name;
1754 1.1 christos }
1755 1.1 christos
1756 1.1 christos sym_bfd = gdb_bfd_open (name, gnutarget, desc);
1757 1.1 christos if (!sym_bfd)
1758 1.1 christos error (_("`%s': can't open to read symbols: %s."), name,
1759 1.1.1.3 christos bfd_errmsg (bfd_get_error ()));
1760 1.1.1.3 christos
1761 1.1.1.3 christos if (!gdb_bfd_has_target_filename (sym_bfd))
1762 1.1 christos bfd_set_cacheable (sym_bfd, 1);
1763 1.1 christos
1764 1.1 christos if (!bfd_check_format (sym_bfd, bfd_object))
1765 1.1 christos {
1766 1.1 christos make_cleanup_bfd_unref (sym_bfd);
1767 1.1 christos error (_("`%s': can't read symbols: %s."), name,
1768 1.1 christos bfd_errmsg (bfd_get_error ()));
1769 1.1 christos }
1770 1.1 christos
1771 1.1 christos do_cleanups (back_to);
1772 1.1 christos
1773 1.1 christos return sym_bfd;
1774 1.1 christos }
1775 1.1 christos
1776 1.1 christos /* Return the section index for SECTION_NAME on OBJFILE. Return -1 if
1777 1.1 christos the section was not found. */
1778 1.1 christos
1779 1.1 christos int
1780 1.1 christos get_section_index (struct objfile *objfile, char *section_name)
1781 1.1 christos {
1782 1.1 christos asection *sect = bfd_get_section_by_name (objfile->obfd, section_name);
1783 1.1 christos
1784 1.1 christos if (sect)
1785 1.1 christos return sect->index;
1786 1.1 christos else
1787 1.1 christos return -1;
1788 1.1 christos }
1789 1.1 christos
1790 1.1 christos /* Link SF into the global symtab_fns list.
1791 1.1 christos FLAVOUR is the file format that SF handles.
1792 1.1 christos Called on startup by the _initialize routine in each object file format
1793 1.1 christos reader, to register information about each format the reader is prepared
1794 1.1 christos to handle. */
1795 1.1 christos
1796 1.1 christos void
1797 1.1 christos add_symtab_fns (enum bfd_flavour flavour, const struct sym_fns *sf)
1798 1.1 christos {
1799 1.1 christos registered_sym_fns fns = { flavour, sf };
1800 1.1 christos
1801 1.1 christos VEC_safe_push (registered_sym_fns, symtab_fns, &fns);
1802 1.1 christos }
1803 1.1 christos
1804 1.1 christos /* Initialize OBJFILE to read symbols from its associated BFD. It
1805 1.1 christos either returns or calls error(). The result is an initialized
1806 1.1 christos struct sym_fns in the objfile structure, that contains cached
1807 1.1 christos information about the symbol file. */
1808 1.1 christos
1809 1.1 christos static const struct sym_fns *
1810 1.1 christos find_sym_fns (bfd *abfd)
1811 1.1 christos {
1812 1.1 christos registered_sym_fns *rsf;
1813 1.1 christos enum bfd_flavour our_flavour = bfd_get_flavour (abfd);
1814 1.1 christos int i;
1815 1.1 christos
1816 1.1 christos if (our_flavour == bfd_target_srec_flavour
1817 1.1 christos || our_flavour == bfd_target_ihex_flavour
1818 1.1 christos || our_flavour == bfd_target_tekhex_flavour)
1819 1.1 christos return NULL; /* No symbols. */
1820 1.1 christos
1821 1.1 christos for (i = 0; VEC_iterate (registered_sym_fns, symtab_fns, i, rsf); ++i)
1822 1.1 christos if (our_flavour == rsf->sym_flavour)
1823 1.1 christos return rsf->sym_fns;
1824 1.1 christos
1825 1.1 christos error (_("I'm sorry, Dave, I can't do that. Symbol format `%s' unknown."),
1826 1.1 christos bfd_get_target (abfd));
1827 1.1 christos }
1828 1.1 christos
1829 1.1 christos
1831 1.1 christos /* This function runs the load command of our current target. */
1832 1.1 christos
1833 1.1 christos static void
1834 1.1 christos load_command (char *arg, int from_tty)
1835 1.1 christos {
1836 1.1 christos struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
1837 1.1 christos
1838 1.1 christos dont_repeat ();
1839 1.1 christos
1840 1.1 christos /* The user might be reloading because the binary has changed. Take
1841 1.1 christos this opportunity to check. */
1842 1.1 christos reopen_exec_file ();
1843 1.1 christos reread_symbols ();
1844 1.1 christos
1845 1.1 christos if (arg == NULL)
1846 1.1 christos {
1847 1.1 christos char *parg;
1848 1.1 christos int count = 0;
1849 1.1 christos
1850 1.1 christos parg = arg = get_exec_file (1);
1851 1.1 christos
1852 1.1 christos /* Count how many \ " ' tab space there are in the name. */
1853 1.1 christos while ((parg = strpbrk (parg, "\\\"'\t ")))
1854 1.1 christos {
1855 1.1 christos parg++;
1856 1.1 christos count++;
1857 1.1 christos }
1858 1.1 christos
1859 1.1 christos if (count)
1860 1.1.1.4 christos {
1861 1.1 christos /* We need to quote this string so buildargv can pull it apart. */
1862 1.1 christos char *temp = (char *) xmalloc (strlen (arg) + count + 1 );
1863 1.1 christos char *ptemp = temp;
1864 1.1 christos char *prev;
1865 1.1 christos
1866 1.1 christos make_cleanup (xfree, temp);
1867 1.1 christos
1868 1.1 christos prev = parg = arg;
1869 1.1 christos while ((parg = strpbrk (parg, "\\\"'\t ")))
1870 1.1 christos {
1871 1.1 christos strncpy (ptemp, prev, parg - prev);
1872 1.1 christos ptemp += parg - prev;
1873 1.1 christos prev = parg++;
1874 1.1 christos *ptemp++ = '\\';
1875 1.1 christos }
1876 1.1 christos strcpy (ptemp, prev);
1877 1.1 christos
1878 1.1 christos arg = temp;
1879 1.1 christos }
1880 1.1 christos }
1881 1.1 christos
1882 1.1 christos target_load (arg, from_tty);
1883 1.1 christos
1884 1.1 christos /* After re-loading the executable, we don't really know which
1885 1.1 christos overlays are mapped any more. */
1886 1.1 christos overlay_cache_invalid = 1;
1887 1.1 christos
1888 1.1 christos do_cleanups (cleanup);
1889 1.1 christos }
1890 1.1 christos
1891 1.1 christos /* This version of "load" should be usable for any target. Currently
1892 1.1 christos it is just used for remote targets, not inftarg.c or core files,
1893 1.1 christos on the theory that only in that case is it useful.
1894 1.1 christos
1895 1.1 christos Avoiding xmodem and the like seems like a win (a) because we don't have
1896 1.1 christos to worry about finding it, and (b) On VMS, fork() is very slow and so
1897 1.1 christos we don't want to run a subprocess. On the other hand, I'm not sure how
1898 1.1 christos performance compares. */
1899 1.1 christos
1900 1.1 christos static int validate_download = 0;
1901 1.1 christos
1902 1.1 christos /* Callback service function for generic_load (bfd_map_over_sections). */
1903 1.1 christos
1904 1.1 christos static void
1905 1.1.1.4 christos add_section_size_callback (bfd *abfd, asection *asec, void *data)
1906 1.1 christos {
1907 1.1 christos bfd_size_type *sum = (bfd_size_type *) data;
1908 1.1 christos
1909 1.1 christos *sum += bfd_get_section_size (asec);
1910 1.1 christos }
1911 1.1 christos
1912 1.1 christos /* Opaque data for load_section_callback. */
1913 1.1 christos struct load_section_data {
1914 1.1 christos CORE_ADDR load_offset;
1915 1.1 christos struct load_progress_data *progress_data;
1916 1.1 christos VEC(memory_write_request_s) *requests;
1917 1.1 christos };
1918 1.1 christos
1919 1.1 christos /* Opaque data for load_progress. */
1920 1.1 christos struct load_progress_data {
1921 1.1 christos /* Cumulative data. */
1922 1.1 christos unsigned long write_count;
1923 1.1 christos unsigned long data_count;
1924 1.1 christos bfd_size_type total_size;
1925 1.1 christos };
1926 1.1 christos
1927 1.1 christos /* Opaque data for load_progress for a single section. */
1928 1.1 christos struct load_progress_section_data {
1929 1.1 christos struct load_progress_data *cumulative;
1930 1.1 christos
1931 1.1 christos /* Per-section data. */
1932 1.1 christos const char *section_name;
1933 1.1 christos ULONGEST section_sent;
1934 1.1 christos ULONGEST section_size;
1935 1.1 christos CORE_ADDR lma;
1936 1.1 christos gdb_byte *buffer;
1937 1.1 christos };
1938 1.1 christos
1939 1.1 christos /* Target write callback routine for progress reporting. */
1940 1.1 christos
1941 1.1 christos static void
1942 1.1.1.4 christos load_progress (ULONGEST bytes, void *untyped_arg)
1943 1.1.1.4 christos {
1944 1.1 christos struct load_progress_section_data *args
1945 1.1 christos = (struct load_progress_section_data *) untyped_arg;
1946 1.1 christos struct load_progress_data *totals;
1947 1.1 christos
1948 1.1 christos if (args == NULL)
1949 1.1 christos /* Writing padding data. No easy way to get at the cumulative
1950 1.1 christos stats, so just ignore this. */
1951 1.1 christos return;
1952 1.1 christos
1953 1.1 christos totals = args->cumulative;
1954 1.1 christos
1955 1.1 christos if (bytes == 0 && args->section_sent == 0)
1956 1.1 christos {
1957 1.1 christos /* The write is just starting. Let the user know we've started
1958 1.1 christos this section. */
1959 1.1 christos ui_out_message (current_uiout, 0, "Loading section %s, size %s lma %s\n",
1960 1.1 christos args->section_name, hex_string (args->section_size),
1961 1.1 christos paddress (target_gdbarch (), args->lma));
1962 1.1 christos return;
1963 1.1 christos }
1964 1.1 christos
1965 1.1 christos if (validate_download)
1966 1.1 christos {
1967 1.1 christos /* Broken memories and broken monitors manifest themselves here
1968 1.1 christos when bring new computers to life. This doubles already slow
1969 1.1 christos downloads. */
1970 1.1 christos /* NOTE: cagney/1999-10-18: A more efficient implementation
1971 1.1 christos might add a verify_memory() method to the target vector and
1972 1.1.1.4 christos then use that. remote.c could implement that method using
1973 1.1 christos the ``qCRC'' packet. */
1974 1.1 christos gdb_byte *check = (gdb_byte *) xmalloc (bytes);
1975 1.1 christos struct cleanup *verify_cleanups = make_cleanup (xfree, check);
1976 1.1 christos
1977 1.1 christos if (target_read_memory (args->lma, check, bytes) != 0)
1978 1.1 christos error (_("Download verify read failed at %s"),
1979 1.1 christos paddress (target_gdbarch (), args->lma));
1980 1.1 christos if (memcmp (args->buffer, check, bytes) != 0)
1981 1.1 christos error (_("Download verify compare failed at %s"),
1982 1.1 christos paddress (target_gdbarch (), args->lma));
1983 1.1 christos do_cleanups (verify_cleanups);
1984 1.1 christos }
1985 1.1 christos totals->data_count += bytes;
1986 1.1 christos args->lma += bytes;
1987 1.1 christos args->buffer += bytes;
1988 1.1 christos totals->write_count += 1;
1989 1.1 christos args->section_sent += bytes;
1990 1.1 christos if (check_quit_flag ()
1991 1.1 christos || (deprecated_ui_load_progress_hook != NULL
1992 1.1 christos && deprecated_ui_load_progress_hook (args->section_name,
1993 1.1 christos args->section_sent)))
1994 1.1 christos error (_("Canceled the download"));
1995 1.1 christos
1996 1.1 christos if (deprecated_show_load_progress != NULL)
1997 1.1 christos deprecated_show_load_progress (args->section_name,
1998 1.1 christos args->section_sent,
1999 1.1 christos args->section_size,
2000 1.1 christos totals->data_count,
2001 1.1 christos totals->total_size);
2002 1.1 christos }
2003 1.1 christos
2004 1.1 christos /* Callback service function for generic_load (bfd_map_over_sections). */
2005 1.1 christos
2006 1.1 christos static void
2007 1.1 christos load_section_callback (bfd *abfd, asection *asec, void *data)
2008 1.1.1.4 christos {
2009 1.1 christos struct memory_write_request *new_request;
2010 1.1 christos struct load_section_data *args = (struct load_section_data *) data;
2011 1.1 christos struct load_progress_section_data *section_data;
2012 1.1 christos bfd_size_type size = bfd_get_section_size (asec);
2013 1.1 christos gdb_byte *buffer;
2014 1.1 christos const char *sect_name = bfd_get_section_name (abfd, asec);
2015 1.1 christos
2016 1.1 christos if ((bfd_get_section_flags (abfd, asec) & SEC_LOAD) == 0)
2017 1.1 christos return;
2018 1.1 christos
2019 1.1 christos if (size == 0)
2020 1.1 christos return;
2021 1.1 christos
2022 1.1 christos new_request = VEC_safe_push (memory_write_request_s,
2023 1.1.1.4 christos args->requests, NULL);
2024 1.1 christos memset (new_request, 0, sizeof (struct memory_write_request));
2025 1.1 christos section_data = XCNEW (struct load_progress_section_data);
2026 1.1 christos new_request->begin = bfd_section_lma (abfd, asec) + args->load_offset;
2027 1.1.1.4 christos new_request->end = new_request->begin + size; /* FIXME Should size
2028 1.1 christos be in instead? */
2029 1.1 christos new_request->data = (gdb_byte *) xmalloc (size);
2030 1.1 christos new_request->baton = section_data;
2031 1.1 christos
2032 1.1 christos buffer = new_request->data;
2033 1.1 christos
2034 1.1 christos section_data->cumulative = args->progress_data;
2035 1.1 christos section_data->section_name = sect_name;
2036 1.1 christos section_data->section_size = size;
2037 1.1 christos section_data->lma = new_request->begin;
2038 1.1 christos section_data->buffer = buffer;
2039 1.1 christos
2040 1.1 christos bfd_get_section_contents (abfd, asec, buffer, 0, size);
2041 1.1 christos }
2042 1.1 christos
2043 1.1 christos /* Clean up an entire memory request vector, including load
2044 1.1 christos data and progress records. */
2045 1.1 christos
2046 1.1 christos static void
2047 1.1.1.4 christos clear_memory_write_data (void *arg)
2048 1.1 christos {
2049 1.1 christos VEC(memory_write_request_s) **vec_p = (VEC(memory_write_request_s) **) arg;
2050 1.1 christos VEC(memory_write_request_s) *vec = *vec_p;
2051 1.1 christos int i;
2052 1.1 christos struct memory_write_request *mr;
2053 1.1 christos
2054 1.1 christos for (i = 0; VEC_iterate (memory_write_request_s, vec, i, mr); ++i)
2055 1.1 christos {
2056 1.1 christos xfree (mr->data);
2057 1.1 christos xfree (mr->baton);
2058 1.1 christos }
2059 1.1 christos VEC_free (memory_write_request_s, vec);
2060 1.1 christos }
2061 1.1.1.2 christos
2062 1.1 christos void
2063 1.1 christos generic_load (const char *args, int from_tty)
2064 1.1 christos {
2065 1.1 christos bfd *loadfile_bfd;
2066 1.1 christos struct timeval start_time, end_time;
2067 1.1 christos char *filename;
2068 1.1 christos struct cleanup *old_cleanups = make_cleanup (null_cleanup, 0);
2069 1.1 christos struct load_section_data cbdata;
2070 1.1 christos struct load_progress_data total_progress;
2071 1.1 christos struct ui_out *uiout = current_uiout;
2072 1.1 christos
2073 1.1 christos CORE_ADDR entry;
2074 1.1 christos char **argv;
2075 1.1 christos
2076 1.1 christos memset (&cbdata, 0, sizeof (cbdata));
2077 1.1 christos memset (&total_progress, 0, sizeof (total_progress));
2078 1.1 christos cbdata.progress_data = &total_progress;
2079 1.1 christos
2080 1.1 christos make_cleanup (clear_memory_write_data, &cbdata.requests);
2081 1.1 christos
2082 1.1 christos if (args == NULL)
2083 1.1 christos error_no_arg (_("file to load"));
2084 1.1 christos
2085 1.1 christos argv = gdb_buildargv (args);
2086 1.1 christos make_cleanup_freeargv (argv);
2087 1.1 christos
2088 1.1 christos filename = tilde_expand (argv[0]);
2089 1.1 christos make_cleanup (xfree, filename);
2090 1.1 christos
2091 1.1 christos if (argv[1] != NULL)
2092 1.1 christos {
2093 1.1 christos const char *endptr;
2094 1.1 christos
2095 1.1 christos cbdata.load_offset = strtoulst (argv[1], &endptr, 0);
2096 1.1 christos
2097 1.1 christos /* If the last word was not a valid number then
2098 1.1 christos treat it as a file name with spaces in. */
2099 1.1 christos if (argv[1] == endptr)
2100 1.1 christos error (_("Invalid download offset:%s."), argv[1]);
2101 1.1 christos
2102 1.1 christos if (argv[2] != NULL)
2103 1.1 christos error (_("Too many parameters."));
2104 1.1 christos }
2105 1.1 christos
2106 1.1 christos /* Open the file for loading. */
2107 1.1 christos loadfile_bfd = gdb_bfd_open (filename, gnutarget, -1);
2108 1.1 christos if (loadfile_bfd == NULL)
2109 1.1 christos {
2110 1.1 christos perror_with_name (filename);
2111 1.1 christos return;
2112 1.1 christos }
2113 1.1 christos
2114 1.1 christos make_cleanup_bfd_unref (loadfile_bfd);
2115 1.1 christos
2116 1.1 christos if (!bfd_check_format (loadfile_bfd, bfd_object))
2117 1.1 christos {
2118 1.1 christos error (_("\"%s\" is not an object file: %s"), filename,
2119 1.1 christos bfd_errmsg (bfd_get_error ()));
2120 1.1 christos }
2121 1.1 christos
2122 1.1 christos bfd_map_over_sections (loadfile_bfd, add_section_size_callback,
2123 1.1 christos (void *) &total_progress.total_size);
2124 1.1 christos
2125 1.1 christos bfd_map_over_sections (loadfile_bfd, load_section_callback, &cbdata);
2126 1.1 christos
2127 1.1 christos gettimeofday (&start_time, NULL);
2128 1.1 christos
2129 1.1 christos if (target_write_memory_blocks (cbdata.requests, flash_discard,
2130 1.1 christos load_progress) != 0)
2131 1.1 christos error (_("Load failed"));
2132 1.1 christos
2133 1.1 christos gettimeofday (&end_time, NULL);
2134 1.1 christos
2135 1.1 christos entry = bfd_get_start_address (loadfile_bfd);
2136 1.1 christos entry = gdbarch_addr_bits_remove (target_gdbarch (), entry);
2137 1.1 christos ui_out_text (uiout, "Start address ");
2138 1.1 christos ui_out_field_fmt (uiout, "address", "%s", paddress (target_gdbarch (), entry));
2139 1.1 christos ui_out_text (uiout, ", load size ");
2140 1.1 christos ui_out_field_fmt (uiout, "load-size", "%lu", total_progress.data_count);
2141 1.1 christos ui_out_text (uiout, "\n");
2142 1.1 christos regcache_write_pc (get_current_regcache (), entry);
2143 1.1 christos
2144 1.1 christos /* Reset breakpoints, now that we have changed the load image. For
2145 1.1 christos instance, breakpoints may have been set (or reset, by
2146 1.1 christos post_create_inferior) while connected to the target but before we
2147 1.1 christos loaded the program. In that case, the prologue analyzer could
2148 1.1 christos have read instructions from the target to find the right
2149 1.1 christos breakpoint locations. Loading has changed the contents of that
2150 1.1 christos memory. */
2151 1.1 christos
2152 1.1 christos breakpoint_re_set ();
2153 1.1 christos
2154 1.1 christos print_transfer_performance (gdb_stdout, total_progress.data_count,
2155 1.1 christos total_progress.write_count,
2156 1.1 christos &start_time, &end_time);
2157 1.1 christos
2158 1.1 christos do_cleanups (old_cleanups);
2159 1.1 christos }
2160 1.1 christos
2161 1.1 christos /* Report how fast the transfer went. */
2162 1.1 christos
2163 1.1 christos void
2164 1.1 christos print_transfer_performance (struct ui_file *stream,
2165 1.1 christos unsigned long data_count,
2166 1.1 christos unsigned long write_count,
2167 1.1 christos const struct timeval *start_time,
2168 1.1 christos const struct timeval *end_time)
2169 1.1 christos {
2170 1.1 christos ULONGEST time_count;
2171 1.1 christos struct ui_out *uiout = current_uiout;
2172 1.1 christos
2173 1.1 christos /* Compute the elapsed time in milliseconds, as a tradeoff between
2174 1.1 christos accuracy and overflow. */
2175 1.1 christos time_count = (end_time->tv_sec - start_time->tv_sec) * 1000;
2176 1.1 christos time_count += (end_time->tv_usec - start_time->tv_usec) / 1000;
2177 1.1 christos
2178 1.1 christos ui_out_text (uiout, "Transfer rate: ");
2179 1.1 christos if (time_count > 0)
2180 1.1 christos {
2181 1.1 christos unsigned long rate = ((ULONGEST) data_count * 1000) / time_count;
2182 1.1 christos
2183 1.1 christos if (ui_out_is_mi_like_p (uiout))
2184 1.1 christos {
2185 1.1 christos ui_out_field_fmt (uiout, "transfer-rate", "%lu", rate * 8);
2186 1.1 christos ui_out_text (uiout, " bits/sec");
2187 1.1 christos }
2188 1.1 christos else if (rate < 1024)
2189 1.1 christos {
2190 1.1 christos ui_out_field_fmt (uiout, "transfer-rate", "%lu", rate);
2191 1.1 christos ui_out_text (uiout, " bytes/sec");
2192 1.1 christos }
2193 1.1 christos else
2194 1.1 christos {
2195 1.1 christos ui_out_field_fmt (uiout, "transfer-rate", "%lu", rate / 1024);
2196 1.1 christos ui_out_text (uiout, " KB/sec");
2197 1.1 christos }
2198 1.1 christos }
2199 1.1 christos else
2200 1.1 christos {
2201 1.1 christos ui_out_field_fmt (uiout, "transferred-bits", "%lu", (data_count * 8));
2202 1.1 christos ui_out_text (uiout, " bits in <1 sec");
2203 1.1 christos }
2204 1.1 christos if (write_count > 0)
2205 1.1 christos {
2206 1.1 christos ui_out_text (uiout, ", ");
2207 1.1 christos ui_out_field_fmt (uiout, "write-rate", "%lu", data_count / write_count);
2208 1.1 christos ui_out_text (uiout, " bytes/write");
2209 1.1 christos }
2210 1.1 christos ui_out_text (uiout, ".\n");
2211 1.1 christos }
2212 1.1 christos
2213 1.1 christos /* This function allows the addition of incrementally linked object files.
2214 1.1 christos It does not modify any state in the target, only in the debugger. */
2215 1.1 christos /* Note: ezannoni 2000-04-13 This function/command used to have a
2216 1.1 christos special case syntax for the rombug target (Rombug is the boot
2217 1.1 christos monitor for Microware's OS-9 / OS-9000, see remote-os9k.c). In the
2218 1.1 christos rombug case, the user doesn't need to supply a text address,
2219 1.1 christos instead a call to target_link() (in target.c) would supply the
2220 1.1 christos value to use. We are now discontinuing this type of ad hoc syntax. */
2221 1.1 christos
2222 1.1 christos static void
2223 1.1 christos add_symbol_file_command (char *args, int from_tty)
2224 1.1 christos {
2225 1.1.1.2 christos struct gdbarch *gdbarch = get_current_arch ();
2226 1.1 christos char *filename = NULL;
2227 1.1 christos int flags = OBJF_USERLOADED | OBJF_SHARED;
2228 1.1 christos char *arg;
2229 1.1 christos int section_index = 0;
2230 1.1 christos int argcnt = 0;
2231 1.1 christos int sec_num = 0;
2232 1.1 christos int i;
2233 1.1 christos int expecting_sec_name = 0;
2234 1.1 christos int expecting_sec_addr = 0;
2235 1.1 christos char **argv;
2236 1.1 christos struct objfile *objf;
2237 1.1 christos
2238 1.1 christos struct sect_opt
2239 1.1 christos {
2240 1.1 christos char *name;
2241 1.1 christos char *value;
2242 1.1 christos };
2243 1.1 christos
2244 1.1 christos struct section_addr_info *section_addrs;
2245 1.1 christos struct sect_opt *sect_opts = NULL;
2246 1.1 christos size_t num_sect_opts = 0;
2247 1.1 christos struct cleanup *my_cleanups = make_cleanup (null_cleanup, NULL);
2248 1.1.1.4 christos
2249 1.1 christos num_sect_opts = 16;
2250 1.1 christos sect_opts = XNEWVEC (struct sect_opt, num_sect_opts);
2251 1.1 christos
2252 1.1 christos dont_repeat ();
2253 1.1 christos
2254 1.1 christos if (args == NULL)
2255 1.1 christos error (_("add-symbol-file takes a file name and an address"));
2256 1.1 christos
2257 1.1 christos argv = gdb_buildargv (args);
2258 1.1 christos make_cleanup_freeargv (argv);
2259 1.1 christos
2260 1.1 christos for (arg = argv[0], argcnt = 0; arg != NULL; arg = argv[++argcnt])
2261 1.1 christos {
2262 1.1 christos /* Process the argument. */
2263 1.1 christos if (argcnt == 0)
2264 1.1 christos {
2265 1.1 christos /* The first argument is the file name. */
2266 1.1 christos filename = tilde_expand (arg);
2267 1.1 christos make_cleanup (xfree, filename);
2268 1.1 christos }
2269 1.1 christos else if (argcnt == 1)
2270 1.1 christos {
2271 1.1 christos /* The second argument is always the text address at which
2272 1.1 christos to load the program. */
2273 1.1 christos sect_opts[section_index].name = ".text";
2274 1.1 christos sect_opts[section_index].value = arg;
2275 1.1 christos if (++section_index >= num_sect_opts)
2276 1.1 christos {
2277 1.1 christos num_sect_opts *= 2;
2278 1.1 christos sect_opts = ((struct sect_opt *)
2279 1.1 christos xrealloc (sect_opts,
2280 1.1 christos num_sect_opts
2281 1.1 christos * sizeof (struct sect_opt)));
2282 1.1 christos }
2283 1.1 christos }
2284 1.1 christos else
2285 1.1 christos {
2286 1.1 christos /* It's an option (starting with '-') or it's an argument
2287 1.1 christos to an option. */
2288 1.1 christos if (expecting_sec_name)
2289 1.1 christos {
2290 1.1 christos sect_opts[section_index].name = arg;
2291 1.1 christos expecting_sec_name = 0;
2292 1.1 christos }
2293 1.1 christos else if (expecting_sec_addr)
2294 1.1 christos {
2295 1.1 christos sect_opts[section_index].value = arg;
2296 1.1 christos expecting_sec_addr = 0;
2297 1.1 christos if (++section_index >= num_sect_opts)
2298 1.1 christos {
2299 1.1 christos num_sect_opts *= 2;
2300 1.1 christos sect_opts = ((struct sect_opt *)
2301 1.1 christos xrealloc (sect_opts,
2302 1.1 christos num_sect_opts
2303 1.1 christos * sizeof (struct sect_opt)));
2304 1.1 christos }
2305 1.1 christos }
2306 1.1 christos else if (strcmp (arg, "-readnow") == 0)
2307 1.1 christos flags |= OBJF_READNOW;
2308 1.1 christos else if (strcmp (arg, "-s") == 0)
2309 1.1 christos {
2310 1.1 christos expecting_sec_name = 1;
2311 1.1 christos expecting_sec_addr = 1;
2312 1.1 christos }
2313 1.1 christos else
2314 1.1 christos error (_("USAGE: add-symbol-file <filename> <textaddress>"
2315 1.1 christos " [-readnow] [-s <secname> <addr>]*"));
2316 1.1 christos }
2317 1.1 christos }
2318 1.1 christos
2319 1.1 christos /* This command takes at least two arguments. The first one is a
2320 1.1 christos filename, and the second is the address where this file has been
2321 1.1 christos loaded. Abort now if this address hasn't been provided by the
2322 1.1 christos user. */
2323 1.1 christos if (section_index < 1)
2324 1.1 christos error (_("The address where %s has been loaded is missing"), filename);
2325 1.1 christos
2326 1.1 christos /* Print the prompt for the query below. And save the arguments into
2327 1.1 christos a sect_addr_info structure to be passed around to other
2328 1.1 christos functions. We have to split this up into separate print
2329 1.1 christos statements because hex_string returns a local static
2330 1.1 christos string. */
2331 1.1 christos
2332 1.1 christos printf_unfiltered (_("add symbol table from file \"%s\" at\n"), filename);
2333 1.1 christos section_addrs = alloc_section_addr_info (section_index);
2334 1.1 christos make_cleanup (xfree, section_addrs);
2335 1.1 christos for (i = 0; i < section_index; i++)
2336 1.1 christos {
2337 1.1 christos CORE_ADDR addr;
2338 1.1 christos char *val = sect_opts[i].value;
2339 1.1 christos char *sec = sect_opts[i].name;
2340 1.1 christos
2341 1.1 christos addr = parse_and_eval_address (val);
2342 1.1 christos
2343 1.1 christos /* Here we store the section offsets in the order they were
2344 1.1 christos entered on the command line. */
2345 1.1 christos section_addrs->other[sec_num].name = sec;
2346 1.1 christos section_addrs->other[sec_num].addr = addr;
2347 1.1 christos printf_unfiltered ("\t%s_addr = %s\n", sec,
2348 1.1 christos paddress (gdbarch, addr));
2349 1.1 christos sec_num++;
2350 1.1 christos
2351 1.1 christos /* The object's sections are initialized when a
2352 1.1 christos call is made to build_objfile_section_table (objfile).
2353 1.1 christos This happens in reread_symbols.
2354 1.1 christos At this point, we don't know what file type this is,
2355 1.1 christos so we can't determine what section names are valid. */
2356 1.1 christos }
2357 1.1 christos section_addrs->num_sections = sec_num;
2358 1.1 christos
2359 1.1 christos if (from_tty && (!query ("%s", "")))
2360 1.1 christos error (_("Not confirmed."));
2361 1.1 christos
2362 1.1 christos objf = symbol_file_add (filename, from_tty ? SYMFILE_VERBOSE : 0,
2363 1.1 christos section_addrs, flags);
2364 1.1 christos
2365 1.1 christos add_target_sections_of_objfile (objf);
2366 1.1 christos
2367 1.1 christos /* Getting new symbols may change our opinion about what is
2368 1.1 christos frameless. */
2369 1.1 christos reinit_frame_cache ();
2370 1.1 christos do_cleanups (my_cleanups);
2371 1.1 christos }
2372 1.1 christos
2373 1.1 christos
2375 1.1 christos /* This function removes a symbol file that was added via add-symbol-file. */
2376 1.1 christos
2377 1.1 christos static void
2378 1.1 christos remove_symbol_file_command (char *args, int from_tty)
2379 1.1 christos {
2380 1.1 christos char **argv;
2381 1.1 christos struct objfile *objf = NULL;
2382 1.1 christos struct cleanup *my_cleanups;
2383 1.1 christos struct program_space *pspace = current_program_space;
2384 1.1 christos
2385 1.1 christos dont_repeat ();
2386 1.1 christos
2387 1.1 christos if (args == NULL)
2388 1.1 christos error (_("remove-symbol-file: no symbol file provided"));
2389 1.1 christos
2390 1.1 christos my_cleanups = make_cleanup (null_cleanup, NULL);
2391 1.1 christos
2392 1.1 christos argv = gdb_buildargv (args);
2393 1.1 christos
2394 1.1 christos if (strcmp (argv[0], "-a") == 0)
2395 1.1 christos {
2396 1.1 christos /* Interpret the next argument as an address. */
2397 1.1 christos CORE_ADDR addr;
2398 1.1 christos
2399 1.1 christos if (argv[1] == NULL)
2400 1.1 christos error (_("Missing address argument"));
2401 1.1 christos
2402 1.1 christos if (argv[2] != NULL)
2403 1.1 christos error (_("Junk after %s"), argv[1]);
2404 1.1 christos
2405 1.1 christos addr = parse_and_eval_address (argv[1]);
2406 1.1.1.2 christos
2407 1.1.1.2 christos ALL_OBJFILES (objf)
2408 1.1 christos {
2409 1.1 christos if ((objf->flags & OBJF_USERLOADED) != 0
2410 1.1 christos && (objf->flags & OBJF_SHARED) != 0
2411 1.1 christos && objf->pspace == pspace && is_addr_in_objfile (addr, objf))
2412 1.1 christos break;
2413 1.1 christos }
2414 1.1 christos }
2415 1.1 christos else if (argv[0] != NULL)
2416 1.1 christos {
2417 1.1 christos /* Interpret the current argument as a file name. */
2418 1.1 christos char *filename;
2419 1.1 christos
2420 1.1 christos if (argv[1] != NULL)
2421 1.1 christos error (_("Junk after %s"), argv[0]);
2422 1.1 christos
2423 1.1 christos filename = tilde_expand (argv[0]);
2424 1.1 christos make_cleanup (xfree, filename);
2425 1.1.1.2 christos
2426 1.1.1.2 christos ALL_OBJFILES (objf)
2427 1.1 christos {
2428 1.1 christos if ((objf->flags & OBJF_USERLOADED) != 0
2429 1.1 christos && (objf->flags & OBJF_SHARED) != 0
2430 1.1 christos && objf->pspace == pspace
2431 1.1 christos && filename_cmp (filename, objfile_name (objf)) == 0)
2432 1.1 christos break;
2433 1.1 christos }
2434 1.1 christos }
2435 1.1 christos
2436 1.1 christos if (objf == NULL)
2437 1.1 christos error (_("No symbol file found"));
2438 1.1 christos
2439 1.1 christos if (from_tty
2440 1.1 christos && !query (_("Remove symbol table from file \"%s\"? "),
2441 1.1 christos objfile_name (objf)))
2442 1.1 christos error (_("Not confirmed."));
2443 1.1 christos
2444 1.1 christos free_objfile (objf);
2445 1.1 christos clear_symtab_users (0);
2446 1.1 christos
2447 1.1 christos do_cleanups (my_cleanups);
2448 1.1 christos }
2449 1.1 christos
2450 1.1 christos typedef struct objfile *objfilep;
2451 1.1 christos
2452 1.1 christos DEF_VEC_P (objfilep);
2453 1.1 christos
2454 1.1 christos /* Re-read symbols if a symbol-file has changed. */
2455 1.1 christos
2456 1.1 christos void
2457 1.1 christos reread_symbols (void)
2458 1.1 christos {
2459 1.1 christos struct objfile *objfile;
2460 1.1 christos long new_modtime;
2461 1.1 christos struct stat new_statbuf;
2462 1.1 christos int res;
2463 1.1 christos VEC (objfilep) *new_objfiles = NULL;
2464 1.1 christos struct cleanup *all_cleanups;
2465 1.1 christos
2466 1.1 christos all_cleanups = make_cleanup (VEC_cleanup (objfilep), &new_objfiles);
2467 1.1 christos
2468 1.1 christos /* With the addition of shared libraries, this should be modified,
2469 1.1 christos the load time should be saved in the partial symbol tables, since
2470 1.1 christos different tables may come from different source files. FIXME.
2471 1.1 christos This routine should then walk down each partial symbol table
2472 1.1 christos and see if the symbol table that it originates from has been changed. */
2473 1.1 christos
2474 1.1 christos for (objfile = object_files; objfile; objfile = objfile->next)
2475 1.1 christos {
2476 1.1 christos if (objfile->obfd == NULL)
2477 1.1 christos continue;
2478 1.1 christos
2479 1.1 christos /* Separate debug objfiles are handled in the main objfile. */
2480 1.1 christos if (objfile->separate_debug_objfile_backlink)
2481 1.1 christos continue;
2482 1.1 christos
2483 1.1 christos /* If this object is from an archive (what you usually create with
2484 1.1 christos `ar', often called a `static library' on most systems, though
2485 1.1 christos a `shared library' on AIX is also an archive), then you should
2486 1.1 christos stat on the archive name, not member name. */
2487 1.1 christos if (objfile->obfd->my_archive)
2488 1.1 christos res = stat (objfile->obfd->my_archive->filename, &new_statbuf);
2489 1.1 christos else
2490 1.1 christos res = stat (objfile_name (objfile), &new_statbuf);
2491 1.1 christos if (res != 0)
2492 1.1 christos {
2493 1.1 christos /* FIXME, should use print_sys_errmsg but it's not filtered. */
2494 1.1 christos printf_unfiltered (_("`%s' has disappeared; keeping its symbols.\n"),
2495 1.1 christos objfile_name (objfile));
2496 1.1 christos continue;
2497 1.1 christos }
2498 1.1 christos new_modtime = new_statbuf.st_mtime;
2499 1.1 christos if (new_modtime != objfile->mtime)
2500 1.1 christos {
2501 1.1 christos struct cleanup *old_cleanups;
2502 1.1 christos struct section_offsets *offsets;
2503 1.1 christos int num_offsets;
2504 1.1 christos char *original_name;
2505 1.1 christos
2506 1.1 christos printf_unfiltered (_("`%s' has changed; re-reading symbols.\n"),
2507 1.1 christos objfile_name (objfile));
2508 1.1 christos
2509 1.1 christos /* There are various functions like symbol_file_add,
2510 1.1 christos symfile_bfd_open, syms_from_objfile, etc., which might
2511 1.1 christos appear to do what we want. But they have various other
2512 1.1 christos effects which we *don't* want. So we just do stuff
2513 1.1 christos ourselves. We don't worry about mapped files (for one thing,
2514 1.1 christos any mapped file will be out of date). */
2515 1.1 christos
2516 1.1 christos /* If we get an error, blow away this objfile (not sure if
2517 1.1 christos that is the correct response for things like shared
2518 1.1 christos libraries). */
2519 1.1 christos old_cleanups = make_cleanup_free_objfile (objfile);
2520 1.1 christos /* We need to do this whenever any symbols go away. */
2521 1.1 christos make_cleanup (clear_symtab_users_cleanup, 0 /*ignore*/);
2522 1.1 christos
2523 1.1 christos if (exec_bfd != NULL
2524 1.1 christos && filename_cmp (bfd_get_filename (objfile->obfd),
2525 1.1 christos bfd_get_filename (exec_bfd)) == 0)
2526 1.1 christos {
2527 1.1 christos /* Reload EXEC_BFD without asking anything. */
2528 1.1 christos
2529 1.1 christos exec_file_attach (bfd_get_filename (objfile->obfd), 0);
2530 1.1 christos }
2531 1.1 christos
2532 1.1 christos /* Keep the calls order approx. the same as in free_objfile. */
2533 1.1 christos
2534 1.1 christos /* Free the separate debug objfiles. It will be
2535 1.1 christos automatically recreated by sym_read. */
2536 1.1 christos free_objfile_separate_debug (objfile);
2537 1.1 christos
2538 1.1 christos /* Remove any references to this objfile in the global
2539 1.1 christos value lists. */
2540 1.1 christos preserve_values (objfile);
2541 1.1 christos
2542 1.1 christos /* Nuke all the state that we will re-read. Much of the following
2543 1.1 christos code which sets things to NULL really is necessary to tell
2544 1.1 christos other parts of GDB that there is nothing currently there.
2545 1.1 christos
2546 1.1 christos Try to keep the freeing order compatible with free_objfile. */
2547 1.1 christos
2548 1.1 christos if (objfile->sf != NULL)
2549 1.1 christos {
2550 1.1 christos (*objfile->sf->sym_finish) (objfile);
2551 1.1 christos }
2552 1.1 christos
2553 1.1 christos clear_objfile_data (objfile);
2554 1.1 christos
2555 1.1 christos /* Clean up any state BFD has sitting around. */
2556 1.1 christos {
2557 1.1 christos struct bfd *obfd = objfile->obfd;
2558 1.1 christos char *obfd_filename;
2559 1.1 christos
2560 1.1.1.3 christos obfd_filename = bfd_get_filename (objfile->obfd);
2561 1.1 christos /* Open the new BFD before freeing the old one, so that
2562 1.1 christos the filename remains live. */
2563 1.1 christos objfile->obfd = gdb_bfd_open (obfd_filename, gnutarget, -1);
2564 1.1 christos if (objfile->obfd == NULL)
2565 1.1 christos {
2566 1.1 christos /* We have to make a cleanup and error here, rather
2567 1.1 christos than erroring later, because once we unref OBFD,
2568 1.1 christos OBFD_FILENAME will be freed. */
2569 1.1 christos make_cleanup_bfd_unref (obfd);
2570 1.1 christos error (_("Can't open %s to read symbols."), obfd_filename);
2571 1.1 christos }
2572 1.1 christos gdb_bfd_unref (obfd);
2573 1.1 christos }
2574 1.1 christos
2575 1.1 christos original_name = xstrdup (objfile->original_name);
2576 1.1 christos make_cleanup (xfree, original_name);
2577 1.1 christos
2578 1.1 christos /* bfd_openr sets cacheable to true, which is what we want. */
2579 1.1 christos if (!bfd_check_format (objfile->obfd, bfd_object))
2580 1.1 christos error (_("Can't read symbols from %s: %s."), objfile_name (objfile),
2581 1.1 christos bfd_errmsg (bfd_get_error ()));
2582 1.1 christos
2583 1.1 christos /* Save the offsets, we will nuke them with the rest of the
2584 1.1 christos objfile_obstack. */
2585 1.1 christos num_offsets = objfile->num_sections;
2586 1.1 christos offsets = ((struct section_offsets *)
2587 1.1 christos alloca (SIZEOF_N_SECTION_OFFSETS (num_offsets)));
2588 1.1 christos memcpy (offsets, objfile->section_offsets,
2589 1.1 christos SIZEOF_N_SECTION_OFFSETS (num_offsets));
2590 1.1 christos
2591 1.1 christos /* FIXME: Do we have to free a whole linked list, or is this
2592 1.1 christos enough? */
2593 1.1 christos if (objfile->global_psymbols.list)
2594 1.1 christos xfree (objfile->global_psymbols.list);
2595 1.1 christos memset (&objfile->global_psymbols, 0,
2596 1.1 christos sizeof (objfile->global_psymbols));
2597 1.1 christos if (objfile->static_psymbols.list)
2598 1.1 christos xfree (objfile->static_psymbols.list);
2599 1.1 christos memset (&objfile->static_psymbols, 0,
2600 1.1 christos sizeof (objfile->static_psymbols));
2601 1.1 christos
2602 1.1 christos /* Free the obstacks for non-reusable objfiles. */
2603 1.1 christos psymbol_bcache_free (objfile->psymbol_cache);
2604 1.1.1.2 christos objfile->psymbol_cache = psymbol_bcache_init ();
2605 1.1 christos obstack_free (&objfile->objfile_obstack, 0);
2606 1.1 christos objfile->sections = NULL;
2607 1.1 christos objfile->compunit_symtabs = NULL;
2608 1.1 christos objfile->psymtabs = NULL;
2609 1.1 christos objfile->psymtabs_addrmap = NULL;
2610 1.1 christos objfile->free_psymtabs = NULL;
2611 1.1 christos objfile->template_symbols = NULL;
2612 1.1 christos
2613 1.1 christos /* obstack_init also initializes the obstack so it is
2614 1.1 christos empty. We could use obstack_specify_allocation but
2615 1.1 christos gdb_obstack.h specifies the alloc/dealloc functions. */
2616 1.1 christos obstack_init (&objfile->objfile_obstack);
2617 1.1 christos
2618 1.1 christos /* set_objfile_per_bfd potentially allocates the per-bfd
2619 1.1 christos data on the objfile's obstack (if sharing data across
2620 1.1 christos multiple users is not possible), so it's important to
2621 1.1.1.4 christos do it *after* the obstack has been initialized. */
2622 1.1.1.4 christos set_objfile_per_bfd (objfile);
2623 1.1.1.4 christos
2624 1.1 christos objfile->original_name
2625 1.1 christos = (char *) obstack_copy0 (&objfile->objfile_obstack, original_name,
2626 1.1 christos strlen (original_name));
2627 1.1 christos
2628 1.1 christos /* Reset the sym_fns pointer. The ELF reader can change it
2629 1.1 christos based on whether .gdb_index is present, and we need it to
2630 1.1 christos start over. PR symtab/15885 */
2631 1.1 christos objfile_set_sym_fns (objfile, find_sym_fns (objfile->obfd));
2632 1.1 christos
2633 1.1 christos build_objfile_section_table (objfile);
2634 1.1 christos terminate_minimal_symbol_table (objfile);
2635 1.1 christos
2636 1.1 christos /* We use the same section offsets as from last time. I'm not
2637 1.1 christos sure whether that is always correct for shared libraries. */
2638 1.1 christos objfile->section_offsets = (struct section_offsets *)
2639 1.1 christos obstack_alloc (&objfile->objfile_obstack,
2640 1.1 christos SIZEOF_N_SECTION_OFFSETS (num_offsets));
2641 1.1 christos memcpy (objfile->section_offsets, offsets,
2642 1.1 christos SIZEOF_N_SECTION_OFFSETS (num_offsets));
2643 1.1 christos objfile->num_sections = num_offsets;
2644 1.1 christos
2645 1.1 christos /* What the hell is sym_new_init for, anyway? The concept of
2646 1.1 christos distinguishing between the main file and additional files
2647 1.1 christos in this way seems rather dubious. */
2648 1.1 christos if (objfile == symfile_objfile)
2649 1.1 christos {
2650 1.1 christos (*objfile->sf->sym_new_init) (objfile);
2651 1.1 christos }
2652 1.1 christos
2653 1.1 christos (*objfile->sf->sym_init) (objfile);
2654 1.1 christos clear_complaints (&symfile_complaints, 1, 1);
2655 1.1 christos
2656 1.1 christos objfile->flags &= ~OBJF_PSYMTABS_READ;
2657 1.1 christos read_symbols (objfile, 0);
2658 1.1 christos
2659 1.1 christos if (!objfile_has_symbols (objfile))
2660 1.1 christos {
2661 1.1 christos wrap_here ("");
2662 1.1 christos printf_unfiltered (_("(no debugging symbols found)\n"));
2663 1.1 christos wrap_here ("");
2664 1.1 christos }
2665 1.1 christos
2666 1.1 christos /* We're done reading the symbol file; finish off complaints. */
2667 1.1 christos clear_complaints (&symfile_complaints, 0, 1);
2668 1.1 christos
2669 1.1 christos /* Getting new symbols may change our opinion about what is
2670 1.1 christos frameless. */
2671 1.1 christos
2672 1.1 christos reinit_frame_cache ();
2673 1.1 christos
2674 1.1 christos /* Discard cleanups as symbol reading was successful. */
2675 1.1 christos discard_cleanups (old_cleanups);
2676 1.1 christos
2677 1.1 christos /* If the mtime has changed between the time we set new_modtime
2678 1.1 christos and now, we *want* this to be out of date, so don't call stat
2679 1.1 christos again now. */
2680 1.1 christos objfile->mtime = new_modtime;
2681 1.1 christos init_entry_point_info (objfile);
2682 1.1 christos
2683 1.1 christos VEC_safe_push (objfilep, new_objfiles, objfile);
2684 1.1 christos }
2685 1.1 christos }
2686 1.1 christos
2687 1.1 christos if (new_objfiles)
2688 1.1 christos {
2689 1.1 christos int ix;
2690 1.1 christos
2691 1.1 christos /* Notify objfiles that we've modified objfile sections. */
2692 1.1 christos objfiles_changed ();
2693 1.1 christos
2694 1.1 christos clear_symtab_users (0);
2695 1.1 christos
2696 1.1 christos /* clear_objfile_data for each objfile was called before freeing it and
2697 1.1 christos observer_notify_new_objfile (NULL) has been called by
2698 1.1 christos clear_symtab_users above. Notify the new files now. */
2699 1.1 christos for (ix = 0; VEC_iterate (objfilep, new_objfiles, ix, objfile); ix++)
2700 1.1 christos observer_notify_new_objfile (objfile);
2701 1.1 christos
2702 1.1 christos /* At least one objfile has changed, so we can consider that
2703 1.1 christos the executable we're debugging has changed too. */
2704 1.1 christos observer_notify_executable_changed ();
2705 1.1 christos }
2706 1.1 christos
2707 1.1 christos do_cleanups (all_cleanups);
2708 1.1 christos }
2709 1.1 christos
2710 1.1 christos
2712 1.1.1.4 christos typedef struct
2713 1.1 christos {
2714 1.1.1.4 christos char *ext;
2715 1.1 christos enum language lang;
2716 1.1.1.4 christos } filename_language;
2717 1.1.1.4 christos
2718 1.1.1.4 christos DEF_VEC_O (filename_language);
2719 1.1.1.4 christos
2720 1.1.1.4 christos static VEC (filename_language) *filename_language_table;
2721 1.1.1.4 christos
2722 1.1 christos /* See symfile.h. */
2723 1.1.1.4 christos
2724 1.1.1.4 christos void
2725 1.1.1.4 christos add_filename_language (const char *ext, enum language lang)
2726 1.1.1.4 christos {
2727 1.1 christos filename_language entry;
2728 1.1.1.4 christos
2729 1.1 christos entry.ext = xstrdup (ext);
2730 1.1 christos entry.lang = lang;
2731 1.1 christos
2732 1.1 christos VEC_safe_push (filename_language, filename_language_table, &entry);
2733 1.1 christos }
2734 1.1 christos
2735 1.1 christos static char *ext_args;
2736 1.1 christos static void
2737 1.1 christos show_ext_args (struct ui_file *file, int from_tty,
2738 1.1 christos struct cmd_list_element *c, const char *value)
2739 1.1 christos {
2740 1.1 christos fprintf_filtered (file,
2741 1.1 christos _("Mapping between filename extension "
2742 1.1 christos "and source language is \"%s\".\n"),
2743 1.1 christos value);
2744 1.1 christos }
2745 1.1 christos
2746 1.1 christos static void
2747 1.1 christos set_ext_lang_command (char *args, int from_tty, struct cmd_list_element *e)
2748 1.1.1.4 christos {
2749 1.1 christos int i;
2750 1.1 christos char *cp = ext_args;
2751 1.1 christos enum language lang;
2752 1.1 christos filename_language *entry;
2753 1.1 christos
2754 1.1 christos /* First arg is filename extension, starting with '.' */
2755 1.1 christos if (*cp != '.')
2756 1.1 christos error (_("'%s': Filename extension must begin with '.'"), ext_args);
2757 1.1 christos
2758 1.1 christos /* Find end of first arg. */
2759 1.1 christos while (*cp && !isspace (*cp))
2760 1.1 christos cp++;
2761 1.1 christos
2762 1.1 christos if (*cp == '\0')
2763 1.1 christos error (_("'%s': two arguments required -- "
2764 1.1 christos "filename extension and language"),
2765 1.1 christos ext_args);
2766 1.1 christos
2767 1.1 christos /* Null-terminate first arg. */
2768 1.1 christos *cp++ = '\0';
2769 1.1 christos
2770 1.1 christos /* Find beginning of second arg, which should be a source language. */
2771 1.1 christos cp = skip_spaces (cp);
2772 1.1 christos
2773 1.1 christos if (*cp == '\0')
2774 1.1 christos error (_("'%s': two arguments required -- "
2775 1.1 christos "filename extension and language"),
2776 1.1 christos ext_args);
2777 1.1 christos
2778 1.1.1.4 christos /* Lookup the language from among those we know. */
2779 1.1.1.4 christos lang = language_enum (cp);
2780 1.1.1.4 christos
2781 1.1.1.4 christos /* Now lookup the filename extension: do we already know it? */
2782 1.1.1.4 christos for (i = 0;
2783 1.1.1.4 christos VEC_iterate (filename_language, filename_language_table, i, entry);
2784 1.1.1.4 christos ++i)
2785 1.1 christos {
2786 1.1.1.4 christos if (0 == strcmp (ext_args, entry->ext))
2787 1.1 christos break;
2788 1.1 christos }
2789 1.1 christos
2790 1.1 christos if (entry == NULL)
2791 1.1 christos {
2792 1.1 christos /* New file extension. */
2793 1.1 christos add_filename_language (ext_args, lang);
2794 1.1 christos }
2795 1.1 christos else
2796 1.1 christos {
2797 1.1 christos /* Redefining a previously known filename extension. */
2798 1.1 christos
2799 1.1.1.4 christos /* if (from_tty) */
2800 1.1.1.4 christos /* query ("Really make files of type %s '%s'?", */
2801 1.1.1.4 christos /* ext_args, language_str (lang)); */
2802 1.1 christos
2803 1.1 christos xfree (entry->ext);
2804 1.1 christos entry->ext = xstrdup (ext_args);
2805 1.1 christos entry->lang = lang;
2806 1.1 christos }
2807 1.1 christos }
2808 1.1 christos
2809 1.1.1.4 christos static void
2810 1.1 christos info_ext_lang_command (char *args, int from_tty)
2811 1.1 christos {
2812 1.1 christos int i;
2813 1.1.1.4 christos filename_language *entry;
2814 1.1.1.4 christos
2815 1.1.1.4 christos printf_filtered (_("Filename extensions and the languages they represent:"));
2816 1.1.1.4 christos printf_filtered ("\n\n");
2817 1.1 christos for (i = 0;
2818 1.1 christos VEC_iterate (filename_language, filename_language_table, i, entry);
2819 1.1 christos ++i)
2820 1.1 christos printf_filtered ("\t%s\t- %s\n", entry->ext, language_str (entry->lang));
2821 1.1 christos }
2822 1.1 christos
2823 1.1.1.4 christos enum language
2824 1.1 christos deduce_language_from_filename (const char *filename)
2825 1.1 christos {
2826 1.1 christos int i;
2827 1.1.1.4 christos const char *cp;
2828 1.1.1.4 christos
2829 1.1.1.4 christos if (filename != NULL)
2830 1.1.1.4 christos if ((cp = strrchr (filename, '.')) != NULL)
2831 1.1.1.4 christos {
2832 1.1.1.4 christos filename_language *entry;
2833 1.1.1.4 christos
2834 1.1.1.4 christos for (i = 0;
2835 1.1.1.4 christos VEC_iterate (filename_language, filename_language_table, i, entry);
2836 1.1 christos ++i)
2837 1.1 christos if (strcmp (cp, entry->ext) == 0)
2838 1.1 christos return entry->lang;
2839 1.1 christos }
2840 1.1.1.2 christos
2841 1.1.1.2 christos return language_unknown;
2842 1.1 christos }
2843 1.1 christos
2844 1.1.1.2 christos /* Allocate and initialize a new symbol table.
2846 1.1.1.2 christos CUST is from the result of allocate_compunit_symtab. */
2847 1.1.1.2 christos
2848 1.1.1.2 christos struct symtab *
2849 1.1 christos allocate_symtab (struct compunit_symtab *cust, const char *filename)
2850 1.1.1.4 christos {
2851 1.1.1.4 christos struct objfile *objfile = cust->objfile;
2852 1.1 christos struct symtab *symtab
2853 1.1 christos = OBSTACK_ZALLOC (&objfile->objfile_obstack, struct symtab);
2854 1.1 christos
2855 1.1 christos symtab->filename
2856 1.1 christos = (const char *) bcache (filename, strlen (filename) + 1,
2857 1.1 christos objfile->per_bfd->filename_cache);
2858 1.1 christos symtab->fullname = NULL;
2859 1.1 christos symtab->language = deduce_language_from_filename (filename);
2860 1.1 christos
2861 1.1 christos /* This can be very verbose with lots of headers.
2862 1.1 christos Only print at higher debug levels. */
2863 1.1 christos if (symtab_create_debug >= 2)
2864 1.1 christos {
2865 1.1 christos /* Be a bit clever with debugging messages, and don't print objfile
2866 1.1 christos every time, only when it changes. */
2867 1.1 christos static char *last_objfile_name = NULL;
2868 1.1 christos
2869 1.1 christos if (last_objfile_name == NULL
2870 1.1 christos || strcmp (last_objfile_name, objfile_name (objfile)) != 0)
2871 1.1 christos {
2872 1.1 christos xfree (last_objfile_name);
2873 1.1 christos last_objfile_name = xstrdup (objfile_name (objfile));
2874 1.1 christos fprintf_unfiltered (gdb_stdlog,
2875 1.1 christos "Creating one or more symtabs for objfile %s ...\n",
2876 1.1 christos last_objfile_name);
2877 1.1 christos }
2878 1.1.1.2 christos fprintf_unfiltered (gdb_stdlog,
2879 1.1.1.2 christos "Created symtab %s for module %s.\n",
2880 1.1.1.2 christos host_address_to_string (symtab), filename);
2881 1.1.1.2 christos }
2882 1.1.1.2 christos
2883 1.1.1.2 christos /* Add it to CUST's list of symtabs. */
2884 1.1.1.2 christos if (cust->filetabs == NULL)
2885 1.1.1.2 christos {
2886 1.1.1.2 christos cust->filetabs = symtab;
2887 1.1.1.2 christos cust->last_filetab = symtab;
2888 1.1.1.2 christos }
2889 1.1.1.2 christos else
2890 1.1.1.2 christos {
2891 1.1.1.2 christos cust->last_filetab->next = symtab;
2892 1.1.1.2 christos cust->last_filetab = symtab;
2893 1.1.1.2 christos }
2894 1.1.1.2 christos
2895 1.1.1.2 christos /* Backlink to the containing compunit symtab. */
2896 1.1.1.2 christos symtab->compunit_symtab = cust;
2897 1.1.1.2 christos
2898 1.1.1.2 christos return symtab;
2899 1.1.1.2 christos }
2900 1.1.1.2 christos
2901 1.1.1.2 christos /* Allocate and initialize a new compunit.
2902 1.1.1.2 christos NAME is the name of the main source file, if there is one, or some
2903 1.1.1.2 christos descriptive text if there are no source files. */
2904 1.1.1.2 christos
2905 1.1.1.2 christos struct compunit_symtab *
2906 1.1.1.2 christos allocate_compunit_symtab (struct objfile *objfile, const char *name)
2907 1.1.1.2 christos {
2908 1.1.1.2 christos struct compunit_symtab *cu = OBSTACK_ZALLOC (&objfile->objfile_obstack,
2909 1.1.1.2 christos struct compunit_symtab);
2910 1.1.1.2 christos const char *saved_name;
2911 1.1.1.2 christos
2912 1.1.1.2 christos cu->objfile = objfile;
2913 1.1.1.4 christos
2914 1.1.1.4 christos /* The name we record here is only for display/debugging purposes.
2915 1.1.1.4 christos Just save the basename to avoid path issues (too long for display,
2916 1.1.1.2 christos relative vs absolute, etc.). */
2917 1.1.1.2 christos saved_name = lbasename (name);
2918 1.1.1.2 christos cu->name
2919 1.1.1.2 christos = (const char *) obstack_copy0 (&objfile->objfile_obstack, saved_name,
2920 1.1.1.2 christos strlen (saved_name));
2921 1.1.1.2 christos
2922 1.1.1.2 christos COMPUNIT_DEBUGFORMAT (cu) = "unknown";
2923 1.1.1.2 christos
2924 1.1.1.2 christos if (symtab_create_debug)
2925 1.1.1.2 christos {
2926 1.1.1.2 christos fprintf_unfiltered (gdb_stdlog,
2927 1.1.1.2 christos "Created compunit symtab %s for %s.\n",
2928 1.1.1.2 christos host_address_to_string (cu),
2929 1.1.1.2 christos cu->name);
2930 1.1.1.2 christos }
2931 1.1.1.2 christos
2932 1.1.1.2 christos return cu;
2933 1.1.1.2 christos }
2934 1.1.1.2 christos
2935 1.1.1.2 christos /* Hook CU to the objfile it comes from. */
2936 1.1.1.2 christos
2937 1.1 christos void
2938 1.1 christos add_compunit_symtab_to_objfile (struct compunit_symtab *cu)
2939 1.1 christos {
2940 1.1 christos cu->next = cu->objfile->compunit_symtabs;
2941 1.1 christos cu->objfile->compunit_symtabs = cu;
2942 1.1 christos }
2943 1.1 christos
2944 1.1 christos
2946 1.1 christos /* Reset all data structures in gdb which may contain references to symbol
2947 1.1 christos table data. ADD_FLAGS is a bitmask of enum symfile_add_flags. */
2948 1.1 christos
2949 1.1 christos void
2950 1.1 christos clear_symtab_users (int add_flags)
2951 1.1 christos {
2952 1.1 christos /* Someday, we should do better than this, by only blowing away
2953 1.1 christos the things that really need to be blown. */
2954 1.1 christos
2955 1.1 christos /* Clear the "current" symtab first, because it is no longer valid.
2956 1.1 christos breakpoint_re_set may try to access the current symtab. */
2957 1.1 christos clear_current_source_symtab_and_line ();
2958 1.1 christos
2959 1.1 christos clear_displays ();
2960 1.1 christos clear_last_displayed_sal ();
2961 1.1 christos clear_pc_function_cache ();
2962 1.1 christos observer_notify_new_objfile (NULL);
2963 1.1 christos
2964 1.1 christos /* Clear globals which might have pointed into a removed objfile.
2965 1.1 christos FIXME: It's not clear which of these are supposed to persist
2966 1.1 christos between expressions and which ought to be reset each time. */
2967 1.1.1.2 christos expression_context_block = NULL;
2968 1.1.1.2 christos innermost_block = NULL;
2969 1.1.1.2 christos
2970 1.1.1.2 christos /* Varobj may refer to old symbols, perform a cleanup. */
2971 1.1 christos varobj_invalidate ();
2972 1.1 christos
2973 1.1 christos /* Now that the various caches have been cleared, we can re_set
2974 1.1 christos our breakpoints without risking it using stale data. */
2975 1.1 christos if ((add_flags & SYMFILE_DEFER_BP_RESET) == 0)
2976 1.1 christos breakpoint_re_set ();
2977 1.1 christos }
2978 1.1 christos
2979 1.1 christos static void
2980 1.1 christos clear_symtab_users_cleanup (void *ignore)
2981 1.1 christos {
2982 1.1 christos clear_symtab_users (0);
2983 1.1 christos }
2984 1.1 christos
2985 1.1 christos /* OVERLAYS:
2987 1.1 christos The following code implements an abstraction for debugging overlay sections.
2988 1.1 christos
2989 1.1 christos The target model is as follows:
2990 1.1 christos 1) The gnu linker will permit multiple sections to be mapped into the
2991 1.1 christos same VMA, each with its own unique LMA (or load address).
2992 1.1 christos 2) It is assumed that some runtime mechanism exists for mapping the
2993 1.1 christos sections, one by one, from the load address into the VMA address.
2994 1.1 christos 3) This code provides a mechanism for gdb to keep track of which
2995 1.1 christos sections should be considered to be mapped from the VMA to the LMA.
2996 1.1 christos This information is used for symbol lookup, and memory read/write.
2997 1.1 christos For instance, if a section has been mapped then its contents
2998 1.1 christos should be read from the VMA, otherwise from the LMA.
2999 1.1 christos
3000 1.1 christos Two levels of debugger support for overlays are available. One is
3001 1.1 christos "manual", in which the debugger relies on the user to tell it which
3002 1.1 christos overlays are currently mapped. This level of support is
3003 1.1 christos implemented entirely in the core debugger, and the information about
3004 1.1 christos whether a section is mapped is kept in the objfile->obj_section table.
3005 1.1 christos
3006 1.1 christos The second level of support is "automatic", and is only available if
3007 1.1 christos the target-specific code provides functionality to read the target's
3008 1.1 christos overlay mapping table, and translate its contents for the debugger
3009 1.1 christos (by updating the mapped state information in the obj_section tables).
3010 1.1 christos
3011 1.1 christos The interface is as follows:
3012 1.1 christos User commands:
3013 1.1 christos overlay map <name> -- tell gdb to consider this section mapped
3014 1.1 christos overlay unmap <name> -- tell gdb to consider this section unmapped
3015 1.1 christos overlay list -- list the sections that GDB thinks are mapped
3016 1.1 christos overlay read-target -- get the target's state of what's mapped
3017 1.1 christos overlay off/manual/auto -- set overlay debugging state
3018 1.1 christos Functional interface:
3019 1.1 christos find_pc_mapped_section(pc): if the pc is in the range of a mapped
3020 1.1 christos section, return that section.
3021 1.1 christos find_pc_overlay(pc): find any overlay section that contains
3022 1.1 christos the pc, either in its VMA or its LMA
3023 1.1 christos section_is_mapped(sect): true if overlay is marked as mapped
3024 1.1 christos section_is_overlay(sect): true if section's VMA != LMA
3025 1.1 christos pc_in_mapped_range(pc,sec): true if pc belongs to section's VMA
3026 1.1 christos pc_in_unmapped_range(...): true if pc belongs to section's LMA
3027 1.1 christos sections_overlap(sec1, sec2): true if mapped sec1 and sec2 ranges overlap
3028 1.1 christos overlay_mapped_address(...): map an address from section's LMA to VMA
3029 1.1 christos overlay_unmapped_address(...): map an address from section's VMA to LMA
3030 1.1 christos symbol_overlayed_address(...): Return a "current" address for symbol:
3031 1.1 christos either in VMA or LMA depending on whether
3032 1.1 christos the symbol's section is currently mapped. */
3033 1.1 christos
3034 1.1 christos /* Overlay debugging state: */
3035 1.1 christos
3036 1.1 christos enum overlay_debugging_state overlay_debugging = ovly_off;
3037 1.1 christos int overlay_cache_invalid = 0; /* True if need to refresh mapped state. */
3038 1.1 christos
3039 1.1 christos /* Function: section_is_overlay (SECTION)
3040 1.1 christos Returns true if SECTION has VMA not equal to LMA, ie.
3041 1.1 christos SECTION is loaded at an address different from where it will "run". */
3042 1.1 christos
3043 1.1 christos int
3044 1.1 christos section_is_overlay (struct obj_section *section)
3045 1.1 christos {
3046 1.1 christos if (overlay_debugging && section)
3047 1.1 christos {
3048 1.1 christos bfd *abfd = section->objfile->obfd;
3049 1.1 christos asection *bfd_section = section->the_bfd_section;
3050 1.1 christos
3051 1.1 christos if (bfd_section_lma (abfd, bfd_section) != 0
3052 1.1 christos && bfd_section_lma (abfd, bfd_section)
3053 1.1 christos != bfd_section_vma (abfd, bfd_section))
3054 1.1 christos return 1;
3055 1.1 christos }
3056 1.1 christos
3057 1.1 christos return 0;
3058 1.1 christos }
3059 1.1 christos
3060 1.1 christos /* Function: overlay_invalidate_all (void)
3061 1.1 christos Invalidate the mapped state of all overlay sections (mark it as stale). */
3062 1.1 christos
3063 1.1 christos static void
3064 1.1 christos overlay_invalidate_all (void)
3065 1.1 christos {
3066 1.1 christos struct objfile *objfile;
3067 1.1 christos struct obj_section *sect;
3068 1.1 christos
3069 1.1 christos ALL_OBJSECTIONS (objfile, sect)
3070 1.1 christos if (section_is_overlay (sect))
3071 1.1 christos sect->ovly_mapped = -1;
3072 1.1 christos }
3073 1.1 christos
3074 1.1 christos /* Function: section_is_mapped (SECTION)
3075 1.1 christos Returns true if section is an overlay, and is currently mapped.
3076 1.1 christos
3077 1.1 christos Access to the ovly_mapped flag is restricted to this function, so
3078 1.1 christos that we can do automatic update. If the global flag
3079 1.1 christos OVERLAY_CACHE_INVALID is set (by wait_for_inferior), then call
3080 1.1 christos overlay_invalidate_all. If the mapped state of the particular
3081 1.1 christos section is stale, then call TARGET_OVERLAY_UPDATE to refresh it. */
3082 1.1 christos
3083 1.1 christos int
3084 1.1 christos section_is_mapped (struct obj_section *osect)
3085 1.1 christos {
3086 1.1 christos struct gdbarch *gdbarch;
3087 1.1 christos
3088 1.1 christos if (osect == 0 || !section_is_overlay (osect))
3089 1.1 christos return 0;
3090 1.1 christos
3091 1.1 christos switch (overlay_debugging)
3092 1.1 christos {
3093 1.1 christos default:
3094 1.1 christos case ovly_off:
3095 1.1 christos return 0; /* overlay debugging off */
3096 1.1 christos case ovly_auto: /* overlay debugging automatic */
3097 1.1 christos /* Unles there is a gdbarch_overlay_update function,
3098 1.1 christos there's really nothing useful to do here (can't really go auto). */
3099 1.1 christos gdbarch = get_objfile_arch (osect->objfile);
3100 1.1 christos if (gdbarch_overlay_update_p (gdbarch))
3101 1.1 christos {
3102 1.1 christos if (overlay_cache_invalid)
3103 1.1 christos {
3104 1.1 christos overlay_invalidate_all ();
3105 1.1 christos overlay_cache_invalid = 0;
3106 1.1 christos }
3107 1.1 christos if (osect->ovly_mapped == -1)
3108 1.1 christos gdbarch_overlay_update (gdbarch, osect);
3109 1.1 christos }
3110 1.1 christos /* fall thru to manual case */
3111 1.1 christos case ovly_on: /* overlay debugging manual */
3112 1.1 christos return osect->ovly_mapped == 1;
3113 1.1 christos }
3114 1.1 christos }
3115 1.1 christos
3116 1.1 christos /* Function: pc_in_unmapped_range
3117 1.1 christos If PC falls into the lma range of SECTION, return true, else false. */
3118 1.1 christos
3119 1.1 christos CORE_ADDR
3120 1.1 christos pc_in_unmapped_range (CORE_ADDR pc, struct obj_section *section)
3121 1.1 christos {
3122 1.1 christos if (section_is_overlay (section))
3123 1.1 christos {
3124 1.1 christos bfd *abfd = section->objfile->obfd;
3125 1.1 christos asection *bfd_section = section->the_bfd_section;
3126 1.1 christos
3127 1.1 christos /* We assume the LMA is relocated by the same offset as the VMA. */
3128 1.1 christos bfd_vma size = bfd_get_section_size (bfd_section);
3129 1.1 christos CORE_ADDR offset = obj_section_offset (section);
3130 1.1 christos
3131 1.1 christos if (bfd_get_section_lma (abfd, bfd_section) + offset <= pc
3132 1.1 christos && pc < bfd_get_section_lma (abfd, bfd_section) + offset + size)
3133 1.1 christos return 1;
3134 1.1 christos }
3135 1.1 christos
3136 1.1 christos return 0;
3137 1.1 christos }
3138 1.1 christos
3139 1.1 christos /* Function: pc_in_mapped_range
3140 1.1 christos If PC falls into the vma range of SECTION, return true, else false. */
3141 1.1 christos
3142 1.1 christos CORE_ADDR
3143 1.1 christos pc_in_mapped_range (CORE_ADDR pc, struct obj_section *section)
3144 1.1 christos {
3145 1.1 christos if (section_is_overlay (section))
3146 1.1 christos {
3147 1.1 christos if (obj_section_addr (section) <= pc
3148 1.1 christos && pc < obj_section_endaddr (section))
3149 1.1 christos return 1;
3150 1.1 christos }
3151 1.1 christos
3152 1.1 christos return 0;
3153 1.1 christos }
3154 1.1 christos
3155 1.1 christos /* Return true if the mapped ranges of sections A and B overlap, false
3156 1.1 christos otherwise. */
3157 1.1 christos
3158 1.1 christos static int
3159 1.1 christos sections_overlap (struct obj_section *a, struct obj_section *b)
3160 1.1 christos {
3161 1.1 christos CORE_ADDR a_start = obj_section_addr (a);
3162 1.1 christos CORE_ADDR a_end = obj_section_endaddr (a);
3163 1.1 christos CORE_ADDR b_start = obj_section_addr (b);
3164 1.1 christos CORE_ADDR b_end = obj_section_endaddr (b);
3165 1.1 christos
3166 1.1 christos return (a_start < b_end && b_start < a_end);
3167 1.1 christos }
3168 1.1 christos
3169 1.1 christos /* Function: overlay_unmapped_address (PC, SECTION)
3170 1.1 christos Returns the address corresponding to PC in the unmapped (load) range.
3171 1.1 christos May be the same as PC. */
3172 1.1 christos
3173 1.1 christos CORE_ADDR
3174 1.1 christos overlay_unmapped_address (CORE_ADDR pc, struct obj_section *section)
3175 1.1 christos {
3176 1.1 christos if (section_is_overlay (section) && pc_in_mapped_range (pc, section))
3177 1.1 christos {
3178 1.1 christos bfd *abfd = section->objfile->obfd;
3179 1.1 christos asection *bfd_section = section->the_bfd_section;
3180 1.1 christos
3181 1.1 christos return pc + bfd_section_lma (abfd, bfd_section)
3182 1.1 christos - bfd_section_vma (abfd, bfd_section);
3183 1.1 christos }
3184 1.1 christos
3185 1.1 christos return pc;
3186 1.1 christos }
3187 1.1 christos
3188 1.1 christos /* Function: overlay_mapped_address (PC, SECTION)
3189 1.1 christos Returns the address corresponding to PC in the mapped (runtime) range.
3190 1.1 christos May be the same as PC. */
3191 1.1 christos
3192 1.1 christos CORE_ADDR
3193 1.1 christos overlay_mapped_address (CORE_ADDR pc, struct obj_section *section)
3194 1.1 christos {
3195 1.1 christos if (section_is_overlay (section) && pc_in_unmapped_range (pc, section))
3196 1.1 christos {
3197 1.1 christos bfd *abfd = section->objfile->obfd;
3198 1.1 christos asection *bfd_section = section->the_bfd_section;
3199 1.1 christos
3200 1.1 christos return pc + bfd_section_vma (abfd, bfd_section)
3201 1.1 christos - bfd_section_lma (abfd, bfd_section);
3202 1.1 christos }
3203 1.1 christos
3204 1.1 christos return pc;
3205 1.1 christos }
3206 1.1 christos
3207 1.1 christos /* Function: symbol_overlayed_address
3208 1.1 christos Return one of two addresses (relative to the VMA or to the LMA),
3209 1.1 christos depending on whether the section is mapped or not. */
3210 1.1 christos
3211 1.1 christos CORE_ADDR
3212 1.1 christos symbol_overlayed_address (CORE_ADDR address, struct obj_section *section)
3213 1.1 christos {
3214 1.1 christos if (overlay_debugging)
3215 1.1 christos {
3216 1.1 christos /* If the symbol has no section, just return its regular address. */
3217 1.1 christos if (section == 0)
3218 1.1 christos return address;
3219 1.1 christos /* If the symbol's section is not an overlay, just return its
3220 1.1 christos address. */
3221 1.1 christos if (!section_is_overlay (section))
3222 1.1 christos return address;
3223 1.1 christos /* If the symbol's section is mapped, just return its address. */
3224 1.1 christos if (section_is_mapped (section))
3225 1.1 christos return address;
3226 1.1 christos /*
3227 1.1 christos * HOWEVER: if the symbol is in an overlay section which is NOT mapped,
3228 1.1 christos * then return its LOADED address rather than its vma address!!
3229 1.1 christos */
3230 1.1 christos return overlay_unmapped_address (address, section);
3231 1.1 christos }
3232 1.1 christos return address;
3233 1.1 christos }
3234 1.1 christos
3235 1.1 christos /* Function: find_pc_overlay (PC)
3236 1.1 christos Return the best-match overlay section for PC:
3237 1.1 christos If PC matches a mapped overlay section's VMA, return that section.
3238 1.1 christos Else if PC matches an unmapped section's VMA, return that section.
3239 1.1 christos Else if PC matches an unmapped section's LMA, return that section. */
3240 1.1 christos
3241 1.1.1.4 christos struct obj_section *
3242 1.1.1.4 christos find_pc_overlay (CORE_ADDR pc)
3243 1.1.1.4 christos {
3244 1.1 christos struct objfile *objfile;
3245 1.1.1.4 christos struct obj_section *osect, *best_match = NULL;
3246 1.1.1.4 christos
3247 1.1.1.4 christos if (overlay_debugging)
3248 1.1.1.4 christos {
3249 1.1.1.4 christos ALL_OBJSECTIONS (objfile, osect)
3250 1.1.1.4 christos if (section_is_overlay (osect))
3251 1.1.1.4 christos {
3252 1.1.1.4 christos if (pc_in_mapped_range (pc, osect))
3253 1.1 christos {
3254 1.1 christos if (section_is_mapped (osect))
3255 1.1.1.4 christos return osect;
3256 1.1 christos else
3257 1.1 christos best_match = osect;
3258 1.1 christos }
3259 1.1 christos else if (pc_in_unmapped_range (pc, osect))
3260 1.1 christos best_match = osect;
3261 1.1 christos }
3262 1.1 christos }
3263 1.1 christos return best_match;
3264 1.1 christos }
3265 1.1 christos
3266 1.1 christos /* Function: find_pc_mapped_section (PC)
3267 1.1 christos If PC falls into the VMA address range of an overlay section that is
3268 1.1 christos currently marked as MAPPED, return that section. Else return NULL. */
3269 1.1 christos
3270 1.1.1.4 christos struct obj_section *
3271 1.1.1.4 christos find_pc_mapped_section (CORE_ADDR pc)
3272 1.1.1.4 christos {
3273 1.1.1.4 christos struct objfile *objfile;
3274 1.1.1.4 christos struct obj_section *osect;
3275 1.1 christos
3276 1.1 christos if (overlay_debugging)
3277 1.1 christos {
3278 1.1 christos ALL_OBJSECTIONS (objfile, osect)
3279 1.1 christos if (pc_in_mapped_range (pc, osect) && section_is_mapped (osect))
3280 1.1 christos return osect;
3281 1.1 christos }
3282 1.1 christos
3283 1.1 christos return NULL;
3284 1.1 christos }
3285 1.1 christos
3286 1.1 christos /* Function: list_overlays_command
3287 1.1 christos Print a list of mapped sections and their PC ranges. */
3288 1.1 christos
3289 1.1 christos static void
3290 1.1.1.4 christos list_overlays_command (char *args, int from_tty)
3291 1.1.1.4 christos {
3292 1.1 christos int nmapped = 0;
3293 1.1.1.4 christos struct objfile *objfile;
3294 1.1.1.4 christos struct obj_section *osect;
3295 1.1.1.4 christos
3296 1.1.1.4 christos if (overlay_debugging)
3297 1.1.1.4 christos {
3298 1.1.1.4 christos ALL_OBJSECTIONS (objfile, osect)
3299 1.1.1.4 christos if (section_is_mapped (osect))
3300 1.1.1.4 christos {
3301 1.1.1.4 christos struct gdbarch *gdbarch = get_objfile_arch (objfile);
3302 1.1.1.4 christos const char *name;
3303 1.1.1.4 christos bfd_vma lma, vma;
3304 1.1.1.4 christos int size;
3305 1.1.1.4 christos
3306 1.1.1.4 christos vma = bfd_section_vma (objfile->obfd, osect->the_bfd_section);
3307 1.1.1.4 christos lma = bfd_section_lma (objfile->obfd, osect->the_bfd_section);
3308 1.1.1.4 christos size = bfd_get_section_size (osect->the_bfd_section);
3309 1.1.1.4 christos name = bfd_section_name (objfile->obfd, osect->the_bfd_section);
3310 1.1.1.4 christos
3311 1.1.1.4 christos printf_filtered ("Section %s, loaded at ", name);
3312 1.1.1.4 christos fputs_filtered (paddress (gdbarch, lma), gdb_stdout);
3313 1.1 christos puts_filtered (" - ");
3314 1.1.1.4 christos fputs_filtered (paddress (gdbarch, lma + size), gdb_stdout);
3315 1.1.1.4 christos printf_filtered (", mapped at ");
3316 1.1.1.4 christos fputs_filtered (paddress (gdbarch, vma), gdb_stdout);
3317 1.1 christos puts_filtered (" - ");
3318 1.1 christos fputs_filtered (paddress (gdbarch, vma + size), gdb_stdout);
3319 1.1 christos puts_filtered ("\n");
3320 1.1 christos
3321 1.1 christos nmapped++;
3322 1.1 christos }
3323 1.1 christos }
3324 1.1 christos if (nmapped == 0)
3325 1.1 christos printf_filtered (_("No sections are mapped.\n"));
3326 1.1 christos }
3327 1.1 christos
3328 1.1 christos /* Function: map_overlay_command
3329 1.1 christos Mark the named section as mapped (ie. residing at its VMA address). */
3330 1.1 christos
3331 1.1 christos static void
3332 1.1 christos map_overlay_command (char *args, int from_tty)
3333 1.1 christos {
3334 1.1 christos struct objfile *objfile, *objfile2;
3335 1.1 christos struct obj_section *sec, *sec2;
3336 1.1 christos
3337 1.1 christos if (!overlay_debugging)
3338 1.1 christos error (_("Overlay debugging not enabled. Use "
3339 1.1 christos "either the 'overlay auto' or\n"
3340 1.1 christos "the 'overlay manual' command."));
3341 1.1 christos
3342 1.1 christos if (args == 0 || *args == 0)
3343 1.1 christos error (_("Argument required: name of an overlay section"));
3344 1.1 christos
3345 1.1 christos /* First, find a section matching the user supplied argument. */
3346 1.1 christos ALL_OBJSECTIONS (objfile, sec)
3347 1.1 christos if (!strcmp (bfd_section_name (objfile->obfd, sec->the_bfd_section), args))
3348 1.1 christos {
3349 1.1 christos /* Now, check to see if the section is an overlay. */
3350 1.1 christos if (!section_is_overlay (sec))
3351 1.1 christos continue; /* not an overlay section */
3352 1.1 christos
3353 1.1 christos /* Mark the overlay as "mapped". */
3354 1.1 christos sec->ovly_mapped = 1;
3355 1.1 christos
3356 1.1 christos /* Next, make a pass and unmap any sections that are
3357 1.1 christos overlapped by this new section: */
3358 1.1 christos ALL_OBJSECTIONS (objfile2, sec2)
3359 1.1 christos if (sec2->ovly_mapped && sec != sec2 && sections_overlap (sec, sec2))
3360 1.1 christos {
3361 1.1 christos if (info_verbose)
3362 1.1 christos printf_unfiltered (_("Note: section %s unmapped by overlap\n"),
3363 1.1 christos bfd_section_name (objfile->obfd,
3364 1.1 christos sec2->the_bfd_section));
3365 1.1 christos sec2->ovly_mapped = 0; /* sec2 overlaps sec: unmap sec2. */
3366 1.1 christos }
3367 1.1 christos return;
3368 1.1 christos }
3369 1.1 christos error (_("No overlay section called %s"), args);
3370 1.1 christos }
3371 1.1 christos
3372 1.1 christos /* Function: unmap_overlay_command
3373 1.1.1.3 christos Mark the overlay section as unmapped
3374 1.1 christos (ie. resident in its LMA address range, rather than the VMA range). */
3375 1.1 christos
3376 1.1 christos static void
3377 1.1 christos unmap_overlay_command (char *args, int from_tty)
3378 1.1 christos {
3379 1.1 christos struct objfile *objfile;
3380 1.1 christos struct obj_section *sec = NULL;
3381 1.1 christos
3382 1.1 christos if (!overlay_debugging)
3383 1.1 christos error (_("Overlay debugging not enabled. "
3384 1.1 christos "Use either the 'overlay auto' or\n"
3385 1.1 christos "the 'overlay manual' command."));
3386 1.1 christos
3387 1.1 christos if (args == 0 || *args == 0)
3388 1.1 christos error (_("Argument required: name of an overlay section"));
3389 1.1 christos
3390 1.1 christos /* First, find a section matching the user supplied argument. */
3391 1.1 christos ALL_OBJSECTIONS (objfile, sec)
3392 1.1 christos if (!strcmp (bfd_section_name (objfile->obfd, sec->the_bfd_section), args))
3393 1.1 christos {
3394 1.1 christos if (!sec->ovly_mapped)
3395 1.1 christos error (_("Section %s is not mapped"), args);
3396 1.1 christos sec->ovly_mapped = 0;
3397 1.1 christos return;
3398 1.1 christos }
3399 1.1 christos error (_("No overlay section called %s"), args);
3400 1.1 christos }
3401 1.1 christos
3402 1.1 christos /* Function: overlay_auto_command
3403 1.1 christos A utility command to turn on overlay debugging.
3404 1.1 christos Possibly this should be done via a set/show command. */
3405 1.1 christos
3406 1.1 christos static void
3407 1.1 christos overlay_auto_command (char *args, int from_tty)
3408 1.1 christos {
3409 1.1 christos overlay_debugging = ovly_auto;
3410 1.1 christos enable_overlay_breakpoints ();
3411 1.1 christos if (info_verbose)
3412 1.1 christos printf_unfiltered (_("Automatic overlay debugging enabled."));
3413 1.1 christos }
3414 1.1 christos
3415 1.1 christos /* Function: overlay_manual_command
3416 1.1 christos A utility command to turn on overlay debugging.
3417 1.1 christos Possibly this should be done via a set/show command. */
3418 1.1 christos
3419 1.1 christos static void
3420 1.1 christos overlay_manual_command (char *args, int from_tty)
3421 1.1 christos {
3422 1.1 christos overlay_debugging = ovly_on;
3423 1.1 christos disable_overlay_breakpoints ();
3424 1.1 christos if (info_verbose)
3425 1.1 christos printf_unfiltered (_("Overlay debugging enabled."));
3426 1.1 christos }
3427 1.1 christos
3428 1.1 christos /* Function: overlay_off_command
3429 1.1 christos A utility command to turn on overlay debugging.
3430 1.1 christos Possibly this should be done via a set/show command. */
3431 1.1 christos
3432 1.1 christos static void
3433 1.1 christos overlay_off_command (char *args, int from_tty)
3434 1.1 christos {
3435 1.1 christos overlay_debugging = ovly_off;
3436 1.1 christos disable_overlay_breakpoints ();
3437 1.1 christos if (info_verbose)
3438 1.1 christos printf_unfiltered (_("Overlay debugging disabled."));
3439 1.1 christos }
3440 1.1 christos
3441 1.1 christos static void
3442 1.1 christos overlay_load_command (char *args, int from_tty)
3443 1.1 christos {
3444 1.1 christos struct gdbarch *gdbarch = get_current_arch ();
3445 1.1 christos
3446 1.1 christos if (gdbarch_overlay_update_p (gdbarch))
3447 1.1 christos gdbarch_overlay_update (gdbarch, NULL);
3448 1.1 christos else
3449 1.1 christos error (_("This target does not know how to read its overlay state."));
3450 1.1 christos }
3451 1.1 christos
3452 1.1 christos /* Function: overlay_command
3453 1.1 christos A place-holder for a mis-typed command. */
3454 1.1 christos
3455 1.1 christos /* Command list chain containing all defined "overlay" subcommands. */
3456 1.1.1.2 christos static struct cmd_list_element *overlaylist;
3457 1.1 christos
3458 1.1 christos static void
3459 1.1 christos overlay_command (char *args, int from_tty)
3460 1.1 christos {
3461 1.1 christos printf_unfiltered
3462 1.1 christos ("\"overlay\" must be followed by the name of an overlay command.\n");
3463 1.1 christos help_list (overlaylist, "overlay ", all_commands, gdb_stdout);
3464 1.1 christos }
3465 1.1 christos
3466 1.1 christos /* Target Overlays for the "Simplest" overlay manager:
3467 1.1 christos
3468 1.1 christos This is GDB's default target overlay layer. It works with the
3469 1.1 christos minimal overlay manager supplied as an example by Cygnus. The
3470 1.1 christos entry point is via a function pointer "gdbarch_overlay_update",
3471 1.1 christos so targets that use a different runtime overlay manager can
3472 1.1 christos substitute their own overlay_update function and take over the
3473 1.1 christos function pointer.
3474 1.1 christos
3475 1.1.1.4 christos The overlay_update function pokes around in the target's data structures
3476 1.1 christos to see what overlays are mapped, and updates GDB's overlay mapping with
3477 1.1 christos this information.
3478 1.1 christos
3479 1.1 christos In this simple implementation, the target data structures are as follows:
3480 1.1.1.4 christos unsigned _novlys; /# number of overlay sections #/
3481 1.1 christos unsigned _ovly_table[_novlys][4] = {
3482 1.1 christos {VMA, OSIZE, LMA, MAPPED}, /# one entry per overlay section #/
3483 1.1 christos {..., ..., ..., ...},
3484 1.1 christos }
3485 1.1 christos unsigned _novly_regions; /# number of overlay regions #/
3486 1.1 christos unsigned _ovly_region_table[_novly_regions][3] = {
3487 1.1 christos {VMA, OSIZE, MAPPED_TO_LMA}, /# one entry per overlay region #/
3488 1.1 christos {..., ..., ...},
3489 1.1 christos }
3490 1.1 christos These functions will attempt to update GDB's mappedness state in the
3491 1.1 christos symbol section table, based on the target's mappedness state.
3492 1.1 christos
3493 1.1 christos To do this, we keep a cached copy of the target's _ovly_table, and
3494 1.1 christos attempt to detect when the cached copy is invalidated. The main
3495 1.1 christos entry point is "simple_overlay_update(SECT), which looks up SECT in
3496 1.1 christos the cached table and re-reads only the entry for that section from
3497 1.1 christos the target (whenever possible). */
3498 1.1.1.4 christos
3499 1.1 christos /* Cached, dynamically allocated copies of the target data structures: */
3500 1.1 christos static unsigned (*cache_ovly_table)[4] = 0;
3501 1.1 christos static unsigned cache_novlys = 0;
3502 1.1 christos static CORE_ADDR cache_ovly_table_base = 0;
3503 1.1 christos enum ovly_index
3504 1.1 christos {
3505 1.1 christos VMA, OSIZE, LMA, MAPPED
3506 1.1 christos };
3507 1.1 christos
3508 1.1 christos /* Throw away the cached copy of _ovly_table. */
3509 1.1 christos
3510 1.1 christos static void
3511 1.1 christos simple_free_overlay_table (void)
3512 1.1 christos {
3513 1.1 christos if (cache_ovly_table)
3514 1.1 christos xfree (cache_ovly_table);
3515 1.1 christos cache_novlys = 0;
3516 1.1 christos cache_ovly_table = NULL;
3517 1.1 christos cache_ovly_table_base = 0;
3518 1.1 christos }
3519 1.1 christos
3520 1.1 christos /* Read an array of ints of size SIZE from the target into a local buffer.
3521 1.1.1.4 christos Convert to host order. int LEN is number of ints. */
3522 1.1 christos
3523 1.1 christos static void
3524 1.1 christos read_target_long_array (CORE_ADDR memaddr, unsigned int *myaddr,
3525 1.1 christos int len, int size, enum bfd_endian byte_order)
3526 1.1 christos {
3527 1.1 christos /* FIXME (alloca): Not safe if array is very large. */
3528 1.1 christos gdb_byte *buf = (gdb_byte *) alloca (len * size);
3529 1.1 christos int i;
3530 1.1 christos
3531 1.1 christos read_memory (memaddr, buf, len * size);
3532 1.1 christos for (i = 0; i < len; i++)
3533 1.1 christos myaddr[i] = extract_unsigned_integer (size * i + buf, size, byte_order);
3534 1.1 christos }
3535 1.1.1.2 christos
3536 1.1 christos /* Find and grab a copy of the target _ovly_table
3537 1.1 christos (and _novlys, which is needed for the table's size). */
3538 1.1 christos
3539 1.1 christos static int
3540 1.1 christos simple_read_overlay_table (void)
3541 1.1 christos {
3542 1.1 christos struct bound_minimal_symbol novlys_msym;
3543 1.1.1.2 christos struct bound_minimal_symbol ovly_table_msym;
3544 1.1 christos struct gdbarch *gdbarch;
3545 1.1 christos int word_size;
3546 1.1 christos enum bfd_endian byte_order;
3547 1.1 christos
3548 1.1 christos simple_free_overlay_table ();
3549 1.1 christos novlys_msym = lookup_minimal_symbol ("_novlys", NULL, NULL);
3550 1.1 christos if (! novlys_msym.minsym)
3551 1.1 christos {
3552 1.1 christos error (_("Error reading inferior's overlay table: "
3553 1.1 christos "couldn't find `_novlys' variable\n"
3554 1.1 christos "in inferior. Use `overlay manual' mode."));
3555 1.1 christos return 0;
3556 1.1 christos }
3557 1.1 christos
3558 1.1 christos ovly_table_msym = lookup_bound_minimal_symbol ("_ovly_table");
3559 1.1 christos if (! ovly_table_msym.minsym)
3560 1.1 christos {
3561 1.1 christos error (_("Error reading inferior's overlay table: couldn't find "
3562 1.1 christos "`_ovly_table' array\n"
3563 1.1 christos "in inferior. Use `overlay manual' mode."));
3564 1.1.1.2 christos return 0;
3565 1.1 christos }
3566 1.1 christos
3567 1.1.1.4 christos gdbarch = get_objfile_arch (ovly_table_msym.objfile);
3568 1.1.1.2 christos word_size = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
3569 1.1 christos byte_order = gdbarch_byte_order (gdbarch);
3570 1.1 christos
3571 1.1 christos cache_novlys = read_memory_integer (BMSYMBOL_VALUE_ADDRESS (novlys_msym),
3572 1.1 christos 4, byte_order);
3573 1.1 christos cache_ovly_table
3574 1.1 christos = (unsigned int (*)[4]) xmalloc (cache_novlys * sizeof (*cache_ovly_table));
3575 1.1 christos cache_ovly_table_base = BMSYMBOL_VALUE_ADDRESS (ovly_table_msym);
3576 1.1 christos read_target_long_array (cache_ovly_table_base,
3577 1.1 christos (unsigned int *) cache_ovly_table,
3578 1.1 christos cache_novlys * 4, word_size, byte_order);
3579 1.1 christos
3580 1.1 christos return 1; /* SUCCESS */
3581 1.1 christos }
3582 1.1 christos
3583 1.1 christos /* Function: simple_overlay_update_1
3584 1.1 christos A helper function for simple_overlay_update. Assuming a cached copy
3585 1.1 christos of _ovly_table exists, look through it to find an entry whose vma,
3586 1.1 christos lma and size match those of OSECT. Re-read the entry and make sure
3587 1.1.1.4 christos it still matches OSECT (else the table may no longer be valid).
3588 1.1 christos Set OSECT's mapped state to match the entry. Return: 1 for
3589 1.1 christos success, 0 for failure. */
3590 1.1 christos
3591 1.1 christos static int
3592 1.1 christos simple_overlay_update_1 (struct obj_section *osect)
3593 1.1 christos {
3594 1.1 christos int i;
3595 1.1 christos bfd *obfd = osect->objfile->obfd;
3596 1.1.1.4 christos asection *bsect = osect->the_bfd_section;
3597 1.1 christos struct gdbarch *gdbarch = get_objfile_arch (osect->objfile);
3598 1.1 christos int word_size = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
3599 1.1 christos enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3600 1.1 christos
3601 1.1 christos for (i = 0; i < cache_novlys; i++)
3602 1.1.1.4 christos if (cache_ovly_table[i][VMA] == bfd_section_vma (obfd, bsect)
3603 1.1 christos && cache_ovly_table[i][LMA] == bfd_section_lma (obfd, bsect))
3604 1.1 christos {
3605 1.1 christos read_target_long_array (cache_ovly_table_base + i * word_size,
3606 1.1 christos (unsigned int *) cache_ovly_table[i],
3607 1.1 christos 4, word_size, byte_order);
3608 1.1 christos if (cache_ovly_table[i][VMA] == bfd_section_vma (obfd, bsect)
3609 1.1 christos && cache_ovly_table[i][LMA] == bfd_section_lma (obfd, bsect))
3610 1.1 christos {
3611 1.1 christos osect->ovly_mapped = cache_ovly_table[i][MAPPED];
3612 1.1 christos return 1;
3613 1.1 christos }
3614 1.1 christos else /* Warning! Warning! Target's ovly table has changed! */
3615 1.1 christos return 0;
3616 1.1 christos }
3617 1.1 christos return 0;
3618 1.1 christos }
3619 1.1 christos
3620 1.1 christos /* Function: simple_overlay_update
3621 1.1 christos If OSECT is NULL, then update all sections' mapped state
3622 1.1 christos (after re-reading the entire target _ovly_table).
3623 1.1 christos If OSECT is non-NULL, then try to find a matching entry in the
3624 1.1 christos cached ovly_table and update only OSECT's mapped state.
3625 1.1 christos If a cached entry can't be found or the cache isn't valid, then
3626 1.1 christos re-read the entire cache, and go ahead and update all sections. */
3627 1.1 christos
3628 1.1 christos void
3629 1.1 christos simple_overlay_update (struct obj_section *osect)
3630 1.1 christos {
3631 1.1 christos struct objfile *objfile;
3632 1.1 christos
3633 1.1.1.2 christos /* Were we given an osect to look up? NULL means do all of them. */
3634 1.1 christos if (osect)
3635 1.1 christos /* Have we got a cached copy of the target's overlay table? */
3636 1.1.1.2 christos if (cache_ovly_table != NULL)
3637 1.1 christos {
3638 1.1 christos /* Does its cached location match what's currently in the
3639 1.1 christos symtab? */
3640 1.1 christos struct bound_minimal_symbol minsym
3641 1.1.1.2 christos = lookup_minimal_symbol ("_ovly_table", NULL, NULL);
3642 1.1 christos
3643 1.1 christos if (minsym.minsym == NULL)
3644 1.1 christos error (_("Error reading inferior's overlay table: couldn't "
3645 1.1 christos "find `_ovly_table' array\n"
3646 1.1 christos "in inferior. Use `overlay manual' mode."));
3647 1.1 christos
3648 1.1 christos if (cache_ovly_table_base == BMSYMBOL_VALUE_ADDRESS (minsym))
3649 1.1 christos /* Then go ahead and try to look up this single section in
3650 1.1 christos the cache. */
3651 1.1 christos if (simple_overlay_update_1 (osect))
3652 1.1 christos /* Found it! We're done. */
3653 1.1 christos return;
3654 1.1 christos }
3655 1.1 christos
3656 1.1 christos /* Cached table no good: need to read the entire table anew.
3657 1.1 christos Or else we want all the sections, in which case it's actually
3658 1.1 christos more efficient to read the whole table in one block anyway. */
3659 1.1 christos
3660 1.1.1.4 christos if (! simple_read_overlay_table ())
3661 1.1 christos return;
3662 1.1 christos
3663 1.1 christos /* Now may as well update all sections, even if only one was requested. */
3664 1.1 christos ALL_OBJSECTIONS (objfile, osect)
3665 1.1 christos if (section_is_overlay (osect))
3666 1.1.1.4 christos {
3667 1.1 christos int i;
3668 1.1 christos bfd *obfd = osect->objfile->obfd;
3669 1.1 christos asection *bsect = osect->the_bfd_section;
3670 1.1 christos
3671 1.1 christos for (i = 0; i < cache_novlys; i++)
3672 1.1 christos if (cache_ovly_table[i][VMA] == bfd_section_vma (obfd, bsect)
3673 1.1 christos && cache_ovly_table[i][LMA] == bfd_section_lma (obfd, bsect))
3674 1.1 christos { /* obj_section matches i'th entry in ovly_table. */
3675 1.1 christos osect->ovly_mapped = cache_ovly_table[i][MAPPED];
3676 1.1 christos break; /* finished with inner for loop: break out. */
3677 1.1 christos }
3678 1.1 christos }
3679 1.1 christos }
3680 1.1 christos
3681 1.1 christos /* Set the output sections and output offsets for section SECTP in
3682 1.1 christos ABFD. The relocation code in BFD will read these offsets, so we
3683 1.1 christos need to be sure they're initialized. We map each section to itself,
3684 1.1 christos with no offset; this means that SECTP->vma will be honored. */
3685 1.1 christos
3686 1.1 christos static void
3687 1.1 christos symfile_dummy_outputs (bfd *abfd, asection *sectp, void *dummy)
3688 1.1 christos {
3689 1.1 christos sectp->output_section = sectp;
3690 1.1 christos sectp->output_offset = 0;
3691 1.1 christos }
3692 1.1 christos
3693 1.1 christos /* Default implementation for sym_relocate. */
3694 1.1 christos
3695 1.1 christos bfd_byte *
3696 1.1 christos default_symfile_relocate (struct objfile *objfile, asection *sectp,
3697 1.1 christos bfd_byte *buf)
3698 1.1 christos {
3699 1.1 christos /* Use sectp->owner instead of objfile->obfd. sectp may point to a
3700 1.1 christos DWO file. */
3701 1.1 christos bfd *abfd = sectp->owner;
3702 1.1 christos
3703 1.1 christos /* We're only interested in sections with relocation
3704 1.1 christos information. */
3705 1.1 christos if ((sectp->flags & SEC_RELOC) == 0)
3706 1.1 christos return NULL;
3707 1.1 christos
3708 1.1 christos /* We will handle section offsets properly elsewhere, so relocate as if
3709 1.1 christos all sections begin at 0. */
3710 1.1 christos bfd_map_over_sections (abfd, symfile_dummy_outputs, NULL);
3711 1.1 christos
3712 1.1 christos return bfd_simple_get_relocated_section_contents (abfd, sectp, buf, NULL);
3713 1.1 christos }
3714 1.1 christos
3715 1.1 christos /* Relocate the contents of a debug section SECTP in ABFD. The
3716 1.1 christos contents are stored in BUF if it is non-NULL, or returned in a
3717 1.1 christos malloc'd buffer otherwise.
3718 1.1 christos
3719 1.1 christos For some platforms and debug info formats, shared libraries contain
3720 1.1 christos relocations against the debug sections (particularly for DWARF-2;
3721 1.1 christos one affected platform is PowerPC GNU/Linux, although it depends on
3722 1.1 christos the version of the linker in use). Also, ELF object files naturally
3723 1.1 christos have unresolved relocations for their debug sections. We need to apply
3724 1.1 christos the relocations in order to get the locations of symbols correct.
3725 1.1 christos Another example that may require relocation processing, is the
3726 1.1 christos DWARF-2 .eh_frame section in .o files, although it isn't strictly a
3727 1.1 christos debug section. */
3728 1.1 christos
3729 1.1 christos bfd_byte *
3730 1.1 christos symfile_relocate_debug_section (struct objfile *objfile,
3731 1.1 christos asection *sectp, bfd_byte *buf)
3732 1.1 christos {
3733 1.1 christos gdb_assert (objfile->sf->sym_relocate);
3734 1.1 christos
3735 1.1 christos return (*objfile->sf->sym_relocate) (objfile, sectp, buf);
3736 1.1 christos }
3737 1.1 christos
3738 1.1 christos struct symfile_segment_data *
3739 1.1 christos get_symfile_segment_data (bfd *abfd)
3740 1.1 christos {
3741 1.1 christos const struct sym_fns *sf = find_sym_fns (abfd);
3742 1.1 christos
3743 1.1 christos if (sf == NULL)
3744 1.1 christos return NULL;
3745 1.1 christos
3746 1.1 christos return sf->sym_segments (abfd);
3747 1.1 christos }
3748 1.1 christos
3749 1.1 christos void
3750 1.1 christos free_symfile_segment_data (struct symfile_segment_data *data)
3751 1.1 christos {
3752 1.1 christos xfree (data->segment_bases);
3753 1.1 christos xfree (data->segment_sizes);
3754 1.1 christos xfree (data->segment_info);
3755 1.1 christos xfree (data);
3756 1.1 christos }
3757 1.1 christos
3758 1.1 christos /* Given:
3759 1.1 christos - DATA, containing segment addresses from the object file ABFD, and
3760 1.1 christos the mapping from ABFD's sections onto the segments that own them,
3761 1.1 christos and
3762 1.1 christos - SEGMENT_BASES[0 .. NUM_SEGMENT_BASES - 1], holding the actual
3763 1.1 christos segment addresses reported by the target,
3764 1.1 christos store the appropriate offsets for each section in OFFSETS.
3765 1.1 christos
3766 1.1 christos If there are fewer entries in SEGMENT_BASES than there are segments
3767 1.1 christos in DATA, then apply SEGMENT_BASES' last entry to all the segments.
3768 1.1 christos
3769 1.1 christos If there are more entries, then ignore the extra. The target may
3770 1.1 christos not be able to distinguish between an empty data segment and a
3771 1.1 christos missing data segment; a missing text segment is less plausible. */
3772 1.1 christos
3773 1.1 christos int
3774 1.1 christos symfile_map_offsets_to_segments (bfd *abfd,
3775 1.1 christos const struct symfile_segment_data *data,
3776 1.1 christos struct section_offsets *offsets,
3777 1.1 christos int num_segment_bases,
3778 1.1 christos const CORE_ADDR *segment_bases)
3779 1.1 christos {
3780 1.1 christos int i;
3781 1.1 christos asection *sect;
3782 1.1 christos
3783 1.1 christos /* It doesn't make sense to call this function unless you have some
3784 1.1 christos segment base addresses. */
3785 1.1 christos gdb_assert (num_segment_bases > 0);
3786 1.1 christos
3787 1.1 christos /* If we do not have segment mappings for the object file, we
3788 1.1 christos can not relocate it by segments. */
3789 1.1 christos gdb_assert (data != NULL);
3790 1.1 christos gdb_assert (data->num_segments > 0);
3791 1.1 christos
3792 1.1 christos for (i = 0, sect = abfd->sections; sect != NULL; i++, sect = sect->next)
3793 1.1 christos {
3794 1.1 christos int which = data->segment_info[i];
3795 1.1 christos
3796 1.1 christos gdb_assert (0 <= which && which <= data->num_segments);
3797 1.1 christos
3798 1.1 christos /* Don't bother computing offsets for sections that aren't
3799 1.1 christos loaded as part of any segment. */
3800 1.1 christos if (! which)
3801 1.1 christos continue;
3802 1.1 christos
3803 1.1 christos /* Use the last SEGMENT_BASES entry as the address of any extra
3804 1.1 christos segments mentioned in DATA->segment_info. */
3805 1.1 christos if (which > num_segment_bases)
3806 1.1 christos which = num_segment_bases;
3807 1.1 christos
3808 1.1 christos offsets->offsets[i] = (segment_bases[which - 1]
3809 1.1 christos - data->segment_bases[which - 1]);
3810 1.1 christos }
3811 1.1 christos
3812 1.1 christos return 1;
3813 1.1 christos }
3814 1.1 christos
3815 1.1 christos static void
3816 1.1 christos symfile_find_segment_sections (struct objfile *objfile)
3817 1.1 christos {
3818 1.1 christos bfd *abfd = objfile->obfd;
3819 1.1 christos int i;
3820 1.1 christos asection *sect;
3821 1.1 christos struct symfile_segment_data *data;
3822 1.1 christos
3823 1.1 christos data = get_symfile_segment_data (objfile->obfd);
3824 1.1 christos if (data == NULL)
3825 1.1 christos return;
3826 1.1 christos
3827 1.1 christos if (data->num_segments != 1 && data->num_segments != 2)
3828 1.1 christos {
3829 1.1 christos free_symfile_segment_data (data);
3830 1.1 christos return;
3831 1.1 christos }
3832 1.1 christos
3833 1.1 christos for (i = 0, sect = abfd->sections; sect != NULL; i++, sect = sect->next)
3834 1.1 christos {
3835 1.1 christos int which = data->segment_info[i];
3836 1.1 christos
3837 1.1 christos if (which == 1)
3838 1.1 christos {
3839 1.1 christos if (objfile->sect_index_text == -1)
3840 1.1 christos objfile->sect_index_text = sect->index;
3841 1.1 christos
3842 1.1 christos if (objfile->sect_index_rodata == -1)
3843 1.1 christos objfile->sect_index_rodata = sect->index;
3844 1.1 christos }
3845 1.1 christos else if (which == 2)
3846 1.1 christos {
3847 1.1 christos if (objfile->sect_index_data == -1)
3848 1.1 christos objfile->sect_index_data = sect->index;
3849 1.1 christos
3850 1.1 christos if (objfile->sect_index_bss == -1)
3851 1.1 christos objfile->sect_index_bss = sect->index;
3852 1.1 christos }
3853 1.1 christos }
3854 1.1 christos
3855 1.1 christos free_symfile_segment_data (data);
3856 1.1.1.2 christos }
3857 1.1.1.2 christos
3858 1.1 christos /* Listen for free_objfile events. */
3859 1.1 christos
3860 1.1 christos static void
3861 1.1.1.2 christos symfile_free_objfile (struct objfile *objfile)
3862 1.1.1.2 christos {
3863 1.1.1.2 christos /* Remove the target sections owned by this objfile. */
3864 1.1.1.2 christos if (objfile != NULL)
3865 1.1.1.2 christos remove_target_sections ((void *) objfile);
3866 1.1.1.2 christos }
3867 1.1.1.2 christos
3868 1.1.1.3 christos /* Wrapper around the quick_symbol_functions expand_symtabs_matching "method".
3869 1.1.1.2 christos Expand all symtabs that match the specified criteria.
3870 1.1.1.2 christos See quick_symbol_functions.expand_symtabs_matching for details. */
3871 1.1.1.2 christos
3872 1.1.1.2 christos void
3873 1.1.1.2 christos expand_symtabs_matching (expand_symtabs_file_matcher_ftype *file_matcher,
3874 1.1.1.2 christos expand_symtabs_symbol_matcher_ftype *symbol_matcher,
3875 1.1.1.2 christos expand_symtabs_exp_notify_ftype *expansion_notify,
3876 1.1.1.2 christos enum search_domain kind,
3877 1.1.1.2 christos void *data)
3878 1.1.1.3 christos {
3879 1.1.1.3 christos struct objfile *objfile;
3880 1.1.1.2 christos
3881 1.1.1.2 christos ALL_OBJFILES (objfile)
3882 1.1.1.2 christos {
3883 1.1.1.2 christos if (objfile->sf)
3884 1.1.1.2 christos objfile->sf->qf->expand_symtabs_matching (objfile, file_matcher,
3885 1.1.1.2 christos symbol_matcher,
3886 1.1.1.2 christos expansion_notify, kind,
3887 1.1.1.2 christos data);
3888 1.1.1.2 christos }
3889 1.1.1.2 christos }
3890 1.1.1.2 christos
3891 1.1.1.2 christos /* Wrapper around the quick_symbol_functions map_symbol_filenames "method".
3892 1.1.1.2 christos Map function FUN over every file.
3893 1.1.1.2 christos See quick_symbol_functions.map_symbol_filenames for details. */
3894 1.1.1.2 christos
3895 1.1.1.2 christos void
3896 1.1.1.2 christos map_symbol_filenames (symbol_filename_ftype *fun, void *data,
3897 1.1.1.2 christos int need_fullname)
3898 1.1.1.2 christos {
3899 1.1.1.2 christos struct objfile *objfile;
3900 1.1.1.2 christos
3901 1.1.1.2 christos ALL_OBJFILES (objfile)
3902 1.1 christos {
3903 1.1 christos if (objfile->sf)
3904 1.1 christos objfile->sf->qf->map_symbol_filenames (objfile, fun, data,
3905 1.1 christos need_fullname);
3906 1.1 christos }
3907 1.1 christos }
3908 1.1 christos
3909 1.1 christos void
3910 1.1 christos _initialize_symfile (void)
3911 1.1 christos {
3912 1.1 christos struct cmd_list_element *c;
3913 1.1 christos
3914 1.1 christos observer_attach_free_objfile (symfile_free_objfile);
3915 1.1 christos
3916 1.1 christos c = add_cmd ("symbol-file", class_files, symbol_file_command, _("\
3917 1.1 christos Load symbol table from executable file FILE.\n\
3918 1.1 christos The `file' command can also load symbol tables, as well as setting the file\n\
3919 1.1 christos to execute."), &cmdlist);
3920 1.1 christos set_cmd_completer (c, filename_completer);
3921 1.1 christos
3922 1.1 christos c = add_cmd ("add-symbol-file", class_files, add_symbol_file_command, _("\
3923 1.1 christos Load symbols from FILE, assuming FILE has been dynamically loaded.\n\
3924 1.1 christos Usage: add-symbol-file FILE ADDR [-s <SECT> <SECT_ADDR> -s <SECT> <SECT_ADDR>\
3925 1.1 christos ...]\nADDR is the starting address of the file's text.\n\
3926 1.1 christos The optional arguments are section-name section-address pairs and\n\
3927 1.1 christos should be specified if the data and bss segments are not contiguous\n\
3928 1.1 christos with the text. SECT is a section name to be loaded at SECT_ADDR."),
3929 1.1 christos &cmdlist);
3930 1.1 christos set_cmd_completer (c, filename_completer);
3931 1.1 christos
3932 1.1 christos c = add_cmd ("remove-symbol-file", class_files,
3933 1.1 christos remove_symbol_file_command, _("\
3934 1.1 christos Remove a symbol file added via the add-symbol-file command.\n\
3935 1.1 christos Usage: remove-symbol-file FILENAME\n\
3936 1.1 christos remove-symbol-file -a ADDRESS\n\
3937 1.1 christos The file to remove can be identified by its filename or by an address\n\
3938 1.1 christos that lies within the boundaries of this symbol file in memory."),
3939 1.1 christos &cmdlist);
3940 1.1 christos
3941 1.1 christos c = add_cmd ("load", class_files, load_command, _("\
3942 1.1 christos Dynamically load FILE into the running program, and record its symbols\n\
3943 1.1 christos for access from GDB.\n\
3944 1.1 christos A load OFFSET may also be given."), &cmdlist);
3945 1.1 christos set_cmd_completer (c, filename_completer);
3946 1.1 christos
3947 1.1 christos add_prefix_cmd ("overlay", class_support, overlay_command,
3948 1.1 christos _("Commands for debugging overlays."), &overlaylist,
3949 1.1 christos "overlay ", 0, &cmdlist);
3950 1.1 christos
3951 1.1 christos add_com_alias ("ovly", "overlay", class_alias, 1);
3952 1.1 christos add_com_alias ("ov", "overlay", class_alias, 1);
3953 1.1 christos
3954 1.1 christos add_cmd ("map-overlay", class_support, map_overlay_command,
3955 1.1 christos _("Assert that an overlay section is mapped."), &overlaylist);
3956 1.1 christos
3957 1.1 christos add_cmd ("unmap-overlay", class_support, unmap_overlay_command,
3958 1.1 christos _("Assert that an overlay section is unmapped."), &overlaylist);
3959 1.1 christos
3960 1.1 christos add_cmd ("list-overlays", class_support, list_overlays_command,
3961 1.1 christos _("List mappings of overlay sections."), &overlaylist);
3962 1.1 christos
3963 1.1 christos add_cmd ("manual", class_support, overlay_manual_command,
3964 1.1 christos _("Enable overlay debugging."), &overlaylist);
3965 1.1 christos add_cmd ("off", class_support, overlay_off_command,
3966 1.1 christos _("Disable overlay debugging."), &overlaylist);
3967 1.1 christos add_cmd ("auto", class_support, overlay_auto_command,
3968 1.1 christos _("Enable automatic overlay debugging."), &overlaylist);
3969 1.1 christos add_cmd ("load-target", class_support, overlay_load_command,
3970 1.1 christos _("Read the overlay mapping state from the target."), &overlaylist);
3971 1.1 christos
3972 1.1 christos /* Filename extension to source language lookup table: */
3973 1.1 christos add_setshow_string_noescape_cmd ("extension-language", class_files,
3974 1.1 christos &ext_args, _("\
3975 1.1 christos Set mapping between filename extension and source language."), _("\
3976 1.1 christos Show mapping between filename extension and source language."), _("\
3977 1.1 christos Usage: set extension-language .foo bar"),
3978 1.1 christos set_ext_lang_command,
3979 1.1 christos show_ext_args,
3980 1.1 christos &setlist, &showlist);
3981 1.1 christos
3982 1.1 christos add_info ("extensions", info_ext_lang_command,
3983 1.1 christos _("All filename extensions associated with a source language."));
3984 1.1 christos
3985 1.1 christos add_setshow_optional_filename_cmd ("debug-file-directory", class_support,
3986 1.1 christos &debug_file_directory, _("\
3987 1.1 christos Set the directories where separate debug symbols are searched for."), _("\
3988 1.1 christos Show the directories where separate debug symbols are searched for."), _("\
3989 1.1.1.2 christos Separate debug symbols are first searched for in the same\n\
3990 1.1.1.2 christos directory as the binary, then in the `" DEBUG_SUBDIRECTORY "' subdirectory,\n\
3991 1.1.1.2 christos and lastly at the path of the directory of the binary with\n\
3992 1.1.1.2 christos each global debug-file-directory component prepended."),
3993 1.1.1.2 christos NULL,
3994 1.1.1.2 christos show_debug_file_directory,
3995 1.1.1.2 christos &setlist, &showlist);
3996 1.1.1.2 christos
3997 1.1.1.2 christos add_setshow_enum_cmd ("symbol-loading", no_class,
3998 1.1.1.2 christos print_symbol_loading_enums, &print_symbol_loading,
3999 1.1.1.2 christos _("\
4000 1.1.1.2 christos Set printing of symbol loading messages."), _("\
4001 1.1.1.2 christos Show printing of symbol loading messages."), _("\
4002 1.1.1.2 christos off == turn all messages off\n\
4003 1.1 christos brief == print messages for the executable,\n\
4004 and brief messages for shared libraries\n\
4005 full == print messages for the executable,\n\
4006 and messages for each shared library."),
4007 NULL,
4008 NULL,
4009 &setprintlist, &showprintlist);
4010 }
4011