]> Git Repo - binutils.git/blob - gdb/solib.c
solib.c relocation improvements
[binutils.git] / gdb / solib.c
1 /* Handle shared libraries for GDB, the GNU Debugger.
2    Copyright 1990, 91, 92, 93, 94, 95, 96, 98, 1999, 2000
3    Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program; if not, write to the Free Software
19    Foundation, Inc., 59 Temple Place - Suite 330,
20    Boston, MA 02111-1307, USA.  */
21
22 #include "defs.h"
23
24 #include <sys/types.h>
25 #include <fcntl.h>
26 #include "gdb_string.h"
27 #include "symtab.h"
28 #include "bfd.h"
29 #include "symfile.h"
30 #include "objfiles.h"
31 #include "gdbcore.h"
32 #include "command.h"
33 #include "target.h"
34 #include "frame.h"
35 #include "gdb_regex.h"
36 #include "inferior.h"
37 #include "environ.h"
38 #include "language.h"
39 #include "gdbcmd.h"
40
41 #include "solist.h"
42
43 /* external data declarations */
44
45 /* FIXME: gdbarch needs to control this variable */
46 struct target_so_ops *current_target_so_ops;
47
48 /* local data declarations */
49
50 static struct so_list *so_list_head;    /* List of known shared objects */
51
52 static int solib_cleanup_queued = 0;    /* make_run_cleanup called */
53
54 /* Local function prototypes */
55
56 static void do_clear_solib (PTR);
57
58 /* If non-zero, this is a prefix that will be added to the front of the name
59    shared libraries with an absolute filename for loading.  */
60 static char *solib_absolute_prefix = NULL;
61
62 /* If non-empty, this is a search path for loading non-absolute shared library
63    symbol files.  This takes precedence over the environment variables PATH
64    and LD_LIBRARY_PATH.  */
65 static char *solib_search_path = NULL;
66
67 /*
68
69    LOCAL FUNCTION
70
71    solib_map_sections -- open bfd and build sections for shared lib
72
73    SYNOPSIS
74
75    static int solib_map_sections (struct so_list *so)
76
77    DESCRIPTION
78
79    Given a pointer to one of the shared objects in our list
80    of mapped objects, use the recorded name to open a bfd
81    descriptor for the object, build a section table, and then
82    relocate all the section addresses by the base address at
83    which the shared object was mapped.
84
85    FIXMES
86
87    In most (all?) cases the shared object file name recorded in the
88    dynamic linkage tables will be a fully qualified pathname.  For
89    cases where it isn't, do we really mimic the systems search
90    mechanism correctly in the below code (particularly the tilde
91    expansion stuff?).
92  */
93
94 static int
95 solib_map_sections (PTR arg)
96 {
97   struct so_list *so = (struct so_list *) arg;  /* catch_errors bogon */
98   char *filename;
99   char *scratch_pathname;
100   int scratch_chan;
101   struct section_table *p;
102   struct cleanup *old_chain;
103   bfd *abfd;
104
105   filename = tilde_expand (so->so_name);
106
107   if (solib_absolute_prefix && ROOTED_P (filename))
108     /* Prefix shared libraries with absolute filenames with
109        SOLIB_ABSOLUTE_PREFIX.  */
110     {
111       char *pfxed_fn;
112       int pfx_len;
113
114       pfx_len = strlen (solib_absolute_prefix);
115
116       /* Remove trailing slashes.  */
117       while (pfx_len > 0 && SLASH_P (solib_absolute_prefix[pfx_len - 1]))
118         pfx_len--;
119
120       pfxed_fn = xmalloc (pfx_len + strlen (filename) + 1);
121       strcpy (pfxed_fn, solib_absolute_prefix);
122       strcat (pfxed_fn, filename);
123       free (filename);
124
125       filename = pfxed_fn;
126     }
127
128   old_chain = make_cleanup (free, filename);
129
130   scratch_chan = -1;
131
132   if (solib_search_path)
133     scratch_chan = openp (solib_search_path,
134                           1, filename, O_RDONLY, 0, &scratch_pathname);
135   if (scratch_chan < 0)
136     scratch_chan = openp (get_in_environ (inferior_environ, "PATH"),
137                           1, filename, O_RDONLY, 0, &scratch_pathname);
138   if (scratch_chan < 0)
139     {
140       scratch_chan = openp (get_in_environ
141                             (inferior_environ, "LD_LIBRARY_PATH"),
142                             1, filename, O_RDONLY, 0, &scratch_pathname);
143     }
144   if (scratch_chan < 0)
145     {
146       perror_with_name (filename);
147     }
148   /* Leave scratch_pathname allocated.  abfd->name will point to it.  */
149
150   abfd = bfd_fdopenr (scratch_pathname, gnutarget, scratch_chan);
151   if (!abfd)
152     {
153       close (scratch_chan);
154       error ("Could not open `%s' as an executable file: %s",
155              scratch_pathname, bfd_errmsg (bfd_get_error ()));
156     }
157   /* Leave bfd open, core_xfer_memory and "info files" need it.  */
158   so->abfd = abfd;
159   abfd->cacheable = true;
160
161   /* copy full path name into so_name, so that later symbol_file_add can find
162      it */
163   if (strlen (scratch_pathname) >= SO_NAME_MAX_PATH_SIZE)
164     error ("Full path name length of shared library exceeds SO_NAME_MAX_PATH_SIZE in so_list structure.");
165   strcpy (so->so_name, scratch_pathname);
166
167   if (!bfd_check_format (abfd, bfd_object))
168     {
169       error ("\"%s\": not in executable format: %s.",
170              scratch_pathname, bfd_errmsg (bfd_get_error ()));
171     }
172   if (build_section_table (abfd, &so->sections, &so->sections_end))
173     {
174       error ("Can't find the file sections in `%s': %s",
175              bfd_get_filename (abfd), bfd_errmsg (bfd_get_error ()));
176     }
177
178   for (p = so->sections; p < so->sections_end; p++)
179     {
180       /* Relocate the section binding addresses as recorded in the shared
181          object's file by the base address to which the object was actually
182          mapped. */
183       TARGET_SO_RELOCATE_SECTION_ADDRESSES (so, p);
184       if (STREQ (p->the_bfd_section->name, ".text"))
185         {
186           so->textsection = p;
187         }
188     }
189
190   /* Free the file names, close the file now.  */
191   do_cleanups (old_chain);
192
193   return (1);
194 }
195
196 /* LOCAL FUNCTION
197
198    free_so --- free a `struct so_list' object
199
200    SYNOPSIS
201
202    void free_so (struct so_list *so)
203
204    DESCRIPTION
205
206    Free the storage associated with the `struct so_list' object SO.
207    If we have opened a BFD for SO, close it.  
208
209    The caller is responsible for removing SO from whatever list it is
210    a member of.  If we have placed SO's sections in some target's
211    section table, the caller is responsible for removing them.
212
213    This function doesn't mess with objfiles at all.  If there is an
214    objfile associated with SO that needs to be removed, the caller is
215    responsible for taking care of that.  */
216
217 void
218 free_so (struct so_list *so)
219 {
220   char *bfd_filename = 0;
221
222   if (so->sections)
223     free (so->sections);
224       
225   if (so->abfd)
226     {
227       bfd_filename = bfd_get_filename (so->abfd);
228       if (! bfd_close (so->abfd))
229         warning ("cannot close \"%s\": %s",
230                  bfd_filename, bfd_errmsg (bfd_get_error ()));
231     }
232
233   if (bfd_filename)
234     free (bfd_filename);
235
236   TARGET_SO_FREE_SO (so);
237
238   free (so);
239 }
240
241
242 /* A small stub to get us past the arg-passing pinhole of catch_errors.  */
243
244 static int
245 symbol_add_stub (PTR arg)
246 {
247   register struct so_list *so = (struct so_list *) arg;  /* catch_errs bogon */
248   struct section_addr_info *sap;
249
250   /* Have we already loaded this shared object?  */
251   ALL_OBJFILES (so->objfile)
252     {
253       if (strcmp (so->objfile->name, so->so_name) == 0)
254         return 1;
255     }
256
257   sap = build_section_addr_info_from_section_table (so->sections,
258                                                     so->sections_end);
259
260   so->objfile = symbol_file_add (so->so_name, so->from_tty,
261                                  sap, 0, OBJF_SHARED);
262   free_section_addr_info (sap);
263
264   return (1);
265 }
266
267
268 /* LOCAL FUNCTION
269
270    update_solib_list --- synchronize GDB's shared object list with inferior's
271
272    SYNOPSIS
273
274    void update_solib_list (int from_tty, struct target_ops *TARGET)
275
276    Extract the list of currently loaded shared objects from the
277    inferior, and compare it with the list of shared objects currently
278    in GDB's so_list_head list.  Edit so_list_head to bring it in sync
279    with the inferior's new list.
280
281    If we notice that the inferior has unloaded some shared objects,
282    free any symbolic info GDB had read about those shared objects.
283
284    Don't load symbolic info for any new shared objects; just add them
285    to the list, and leave their symbols_loaded flag clear.
286
287    If FROM_TTY is non-null, feel free to print messages about what
288    we're doing.
289
290    If TARGET is non-null, add the sections of all new shared objects
291    to TARGET's section table.  Note that this doesn't remove any
292    sections for shared objects that have been unloaded, and it
293    doesn't check to see if the new shared objects are already present in
294    the section table.  But we only use this for core files and
295    processes we've just attached to, so that's okay.  */
296
297 void
298 update_solib_list (int from_tty, struct target_ops *target)
299 {
300   struct so_list *inferior = TARGET_SO_CURRENT_SOS ();
301   struct so_list *gdb, **gdb_link;
302
303   /* If we are attaching to a running process for which we 
304      have not opened a symbol file, we may be able to get its 
305      symbols now!  */
306   if (attach_flag &&
307       symfile_objfile == NULL)
308     catch_errors (TARGET_SO_OPEN_SYMBOL_FILE_OBJECT, (PTR) &from_tty, 
309                   "Error reading attached process's symbol file.\n",
310                   RETURN_MASK_ALL);
311
312   /* Since this function might actually add some elements to the
313      so_list_head list, arrange for it to be cleaned up when
314      appropriate.  */
315   if (!solib_cleanup_queued)
316     {
317       make_run_cleanup (do_clear_solib, NULL);
318       solib_cleanup_queued = 1;
319     }
320
321   /* GDB and the inferior's dynamic linker each maintain their own
322      list of currently loaded shared objects; we want to bring the
323      former in sync with the latter.  Scan both lists, seeing which
324      shared objects appear where.  There are three cases:
325
326      - A shared object appears on both lists.  This means that GDB
327      knows about it already, and it's still loaded in the inferior.
328      Nothing needs to happen.
329
330      - A shared object appears only on GDB's list.  This means that
331      the inferior has unloaded it.  We should remove the shared
332      object from GDB's tables.
333
334      - A shared object appears only on the inferior's list.  This
335      means that it's just been loaded.  We should add it to GDB's
336      tables.
337
338      So we walk GDB's list, checking each entry to see if it appears
339      in the inferior's list too.  If it does, no action is needed, and
340      we remove it from the inferior's list.  If it doesn't, the
341      inferior has unloaded it, and we remove it from GDB's list.  By
342      the time we're done walking GDB's list, the inferior's list
343      contains only the new shared objects, which we then add.  */
344
345   gdb = so_list_head;
346   gdb_link = &so_list_head;
347   while (gdb)
348     {
349       struct so_list *i = inferior;
350       struct so_list **i_link = &inferior;
351
352       /* Check to see whether the shared object *gdb also appears in
353          the inferior's current list.  */
354       while (i)
355         {
356           if (! strcmp (gdb->so_original_name, i->so_original_name))
357             break;
358
359           i_link = &i->next;
360           i = *i_link;
361         }
362
363       /* If the shared object appears on the inferior's list too, then
364          it's still loaded, so we don't need to do anything.  Delete
365          it from the inferior's list, and leave it on GDB's list.  */
366       if (i)
367         {
368           *i_link = i->next;
369           free_so (i);
370           gdb_link = &gdb->next;
371           gdb = *gdb_link;
372         }
373
374       /* If it's not on the inferior's list, remove it from GDB's tables.  */
375       else
376         {
377           *gdb_link = gdb->next;
378
379           /* Unless the user loaded it explicitly, free SO's objfile.  */
380           if (gdb->objfile && ! (gdb->objfile->flags & OBJF_USERLOADED))
381             free_objfile (gdb->objfile);
382
383           /* Some targets' section tables might be referring to
384              sections from so->abfd; remove them.  */
385           remove_target_sections (gdb->abfd);
386
387           free_so (gdb);
388           gdb = *gdb_link;
389         }
390     }
391
392   /* Now the inferior's list contains only shared objects that don't
393      appear in GDB's list --- those that are newly loaded.  Add them
394      to GDB's shared object list.  */
395   if (inferior)
396     {
397       struct so_list *i;
398
399       /* Add the new shared objects to GDB's list.  */
400       *gdb_link = inferior;
401
402       /* Fill in the rest of each of the `struct so_list' nodes.  */
403       for (i = inferior; i; i = i->next)
404         {
405           i->from_tty = from_tty;
406
407           /* Fill in the rest of the `struct so_list' node.  */
408           catch_errors (solib_map_sections, i,
409                         "Error while mapping shared library sections:\n",
410                         RETURN_MASK_ALL);
411         }
412
413       /* If requested, add the shared objects' sections to the the
414          TARGET's section table.  */
415       if (target)
416         {
417           int new_sections;
418
419           /* Figure out how many sections we'll need to add in total.  */
420           new_sections = 0;
421           for (i = inferior; i; i = i->next)
422             new_sections += (i->sections_end - i->sections);
423
424           if (new_sections > 0)
425             {
426               int space = target_resize_to_sections (target, new_sections);
427
428               for (i = inferior; i; i = i->next)
429                 {
430                   int count = (i->sections_end - i->sections);
431                   memcpy (target->to_sections + space,
432                           i->sections,
433                           count * sizeof (i->sections[0]));
434                   space += count;
435                 }
436             }
437         }
438     }
439 }
440
441
442 /* GLOBAL FUNCTION
443
444    solib_add -- read in symbol info for newly added shared libraries
445
446    SYNOPSIS
447
448    void solib_add (char *pattern, int from_tty, struct target_ops *TARGET)
449
450    DESCRIPTION
451
452    Read in symbolic information for any shared objects whose names
453    match PATTERN.  (If we've already read a shared object's symbol
454    info, leave it alone.)  If PATTERN is zero, read them all.
455
456    FROM_TTY and TARGET are as described for update_solib_list, above.  */
457
458 void
459 solib_add (char *pattern, int from_tty, struct target_ops *target)
460 {
461   struct so_list *gdb;
462
463   if (pattern)
464     {
465       char *re_err = re_comp (pattern);
466
467       if (re_err)
468         error ("Invalid regexp: %s", re_err);
469     }
470
471   update_solib_list (from_tty, target);
472
473   /* Walk the list of currently loaded shared libraries, and read
474      symbols for any that match the pattern --- or any whose symbols
475      aren't already loaded, if no pattern was given.  */
476   {
477     int any_matches = 0;
478     int loaded_any_symbols = 0;
479
480     for (gdb = so_list_head; gdb; gdb = gdb->next)
481       if (! pattern || re_exec (gdb->so_name))
482         {
483           any_matches = 1;
484
485           if (gdb->symbols_loaded)
486             {
487               if (from_tty)
488                 printf_unfiltered ("Symbols already loaded for %s\n",
489                                    gdb->so_name);
490             }
491           else
492             {
493               if (catch_errors
494                   (symbol_add_stub, gdb,
495                    "Error while reading shared library symbols:\n",
496                    RETURN_MASK_ALL))
497                 {
498                   if (from_tty)
499                     printf_unfiltered ("Loaded symbols for %s\n",
500                                        gdb->so_name);
501                   gdb->symbols_loaded = 1;
502                   loaded_any_symbols = 1;
503                 }
504             }
505         }
506
507     if (from_tty && pattern && ! any_matches)
508       printf_unfiltered
509         ("No loaded shared libraries match the pattern `%s'.\n", pattern);
510
511     if (loaded_any_symbols)
512       {
513         /* Getting new symbols may change our opinion about what is
514            frameless.  */
515         reinit_frame_cache ();
516
517         TARGET_SO_SPECIAL_SYMBOL_HANDLING ();
518       }
519   }
520 }
521
522
523 /*
524
525    LOCAL FUNCTION
526
527    info_sharedlibrary_command -- code for "info sharedlibrary"
528
529    SYNOPSIS
530
531    static void info_sharedlibrary_command ()
532
533    DESCRIPTION
534
535    Walk through the shared library list and print information
536    about each attached library.
537  */
538
539 static void
540 info_sharedlibrary_command (char *ignore, int from_tty)
541 {
542   register struct so_list *so = NULL;   /* link map state variable */
543   int header_done = 0;
544   int addr_width;
545   char *addr_fmt;
546   int arch_size;
547
548   if (exec_bfd == NULL)
549     {
550       printf_unfiltered ("No executable file.\n");
551       return;
552     }
553
554   arch_size = bfd_get_arch_size (exec_bfd);
555   /* Default to 32-bit in case of failure (non-elf). */
556   if (arch_size == 32 || arch_size == -1)
557     {
558       addr_width = 8 + 4;
559       addr_fmt = "08l";
560     }
561   else if (arch_size == 64)
562     {
563       addr_width = 16 + 4;
564       addr_fmt = "016l";
565     }
566
567   update_solib_list (from_tty, 0);
568
569   for (so = so_list_head; so; so = so->next)
570     {
571       if (so->so_name[0])
572         {
573           if (!header_done)
574             {
575               printf_unfiltered ("%-*s%-*s%-12s%s\n", addr_width, "From",
576                                  addr_width, "To", "Syms Read",
577                                  "Shared Object Library");
578               header_done++;
579             }
580
581           printf_unfiltered ("%-*s", addr_width,
582                              so->textsection != NULL 
583                                ? local_hex_string_custom (
584                                    (unsigned long) so->textsection->addr,
585                                    addr_fmt)
586                                : "");
587           printf_unfiltered ("%-*s", addr_width,
588                              so->textsection != NULL 
589                                ? local_hex_string_custom (
590                                    (unsigned long) so->textsection->endaddr,
591                                    addr_fmt)
592                                : "");
593           printf_unfiltered ("%-12s", so->symbols_loaded ? "Yes" : "No");
594           printf_unfiltered ("%s\n", so->so_name);
595         }
596     }
597   if (so_list_head == NULL)
598     {
599       printf_unfiltered ("No shared libraries loaded at this time.\n");
600     }
601 }
602
603 /*
604
605    GLOBAL FUNCTION
606
607    solib_address -- check to see if an address is in a shared lib
608
609    SYNOPSIS
610
611    char * solib_address (CORE_ADDR address)
612
613    DESCRIPTION
614
615    Provides a hook for other gdb routines to discover whether or
616    not a particular address is within the mapped address space of
617    a shared library.
618
619    For example, this routine is called at one point to disable
620    breakpoints which are in shared libraries that are not currently
621    mapped in.
622  */
623
624 char *
625 solib_address (CORE_ADDR address)
626 {
627   register struct so_list *so = 0;      /* link map state variable */
628
629   for (so = so_list_head; so; so = so->next)
630     {
631       struct section_table *p;
632
633       for (p = so->sections; p < so->sections_end; p++)
634         {
635           if (p->addr <= address && address < p->endaddr)
636             return (so->so_name);
637         }
638     }
639
640   return (0);
641 }
642
643 /* Called by free_all_symtabs */
644
645 void
646 clear_solib (void)
647 {
648   /* This function is expected to handle ELF shared libraries.  It is
649      also used on Solaris, which can run either ELF or a.out binaries
650      (for compatibility with SunOS 4), both of which can use shared
651      libraries.  So we don't know whether we have an ELF executable or
652      an a.out executable until the user chooses an executable file.
653
654      ELF shared libraries don't get mapped into the address space
655      until after the program starts, so we'd better not try to insert
656      breakpoints in them immediately.  We have to wait until the
657      dynamic linker has loaded them; we'll hit a bp_shlib_event
658      breakpoint (look for calls to create_solib_event_breakpoint) when
659      it's ready.
660
661      SunOS shared libraries seem to be different --- they're present
662      as soon as the process begins execution, so there's no need to
663      put off inserting breakpoints.  There's also nowhere to put a
664      bp_shlib_event breakpoint, so if we put it off, we'll never get
665      around to it.
666
667      So: disable breakpoints only if we're using ELF shared libs.  */
668   if (exec_bfd != NULL
669       && bfd_get_flavour (exec_bfd) != bfd_target_aout_flavour)
670     disable_breakpoints_in_shlibs (1);
671
672   while (so_list_head)
673     {
674       struct so_list *so = so_list_head;
675       so_list_head = so->next;
676       free_so (so);
677     }
678
679   TARGET_SO_CLEAR_SOLIB ();
680 }
681
682 static void
683 do_clear_solib (PTR dummy)
684 {
685   solib_cleanup_queued = 0;
686   clear_solib ();
687 }
688
689 /* GLOBAL FUNCTION
690
691    solib_create_inferior_hook -- shared library startup support
692
693    SYNOPSIS
694
695    void solib_create_inferior_hook()
696
697    DESCRIPTION
698
699    When gdb starts up the inferior, it nurses it along (through the
700    shell) until it is ready to execute it's first instruction.  At this
701    point, this function gets called via expansion of the macro
702    SOLIB_CREATE_INFERIOR_HOOK.  */
703
704 void
705 solib_create_inferior_hook (void)
706 {
707   TARGET_SO_SOLIB_CREATE_INFERIOR_HOOK ();
708 }
709
710
711 /*
712
713    LOCAL FUNCTION
714
715    sharedlibrary_command -- handle command to explicitly add library
716
717    SYNOPSIS
718
719    static void sharedlibrary_command (char *args, int from_tty)
720
721    DESCRIPTION
722
723  */
724
725 static void
726 sharedlibrary_command (char *args, int from_tty)
727 {
728   dont_repeat ();
729   solib_add (args, from_tty, (struct target_ops *) 0);
730 }
731
732
733 void
734 _initialize_solib (void)
735 {
736   add_com ("sharedlibrary", class_files, sharedlibrary_command,
737            "Load shared object library symbols for files matching REGEXP.");
738   add_info ("sharedlibrary", info_sharedlibrary_command,
739             "Status of loaded shared object libraries.");
740
741   add_show_from_set
742     (add_set_cmd ("auto-solib-add", class_support, var_zinteger,
743                   (char *) &auto_solib_add,
744                   "Set autoloading of shared library symbols.\n\
745 If nonzero, symbols from all shared object libraries will be loaded\n\
746 automatically when the inferior begins execution or when the dynamic linker\n\
747 informs gdb that a new library has been loaded.  Otherwise, symbols\n\
748 must be loaded manually, using `sharedlibrary'.",
749                   &setlist),
750      &showlist);
751
752   add_show_from_set
753     (add_set_cmd ("solib-absolute-prefix", class_support, var_filename,
754                   (char *) &solib_absolute_prefix,
755                   "Set prefix for loading absolute shared library symbol files.\n\
756 For other (relative) files, you can add values using `set solib-search-path'.",
757                   &setlist),
758      &showlist);
759   add_show_from_set
760     (add_set_cmd ("solib-search-path", class_support, var_string,
761                   (char *) &solib_search_path,
762                   "Set the search path for loading non-absolute shared library symbol files.\n\
763 This takes precedence over the environment variables PATH and LD_LIBRARY_PATH.",
764                   &setlist),
765      &showlist);
766
767 }
This page took 0.097705 seconds and 4 git commands to generate.