1 /* Handle OSF/1 shared libraries for GDB, the GNU Debugger.
2 Copyright 1993, 94, 95, 96, 98, 1999 Free Software Foundation, Inc.
4 This file is part of GDB.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. */
21 /* FIXME: Most of this code could be merged with solib.c by using
22 next_link_map_member and xfer_link_map_member in solib.c. */
26 #include <sys/types.h>
28 #include "gdb_string.h"
39 #include "gdb_regex.h"
44 #define MAX_PATH_SIZE 1024 /* FIXME: Should be dynamic */
46 /* When handling shared libraries, GDB has to find out the pathnames
47 of all shared libraries that are currently loaded (to read in their
48 symbols) and where the shared libraries are loaded in memory
49 (to relocate them properly from their prelinked addresses to the
50 current load address).
52 Under OSF/1 there are two possibilities to get at this information:
53 1) Peek around in the runtime loader structures.
54 These are not documented, and they are not defined in the system
55 header files. The definitions below were obtained by experimentation,
56 but they seem stable enough.
57 2) Use the undocumented libxproc.a library, which contains the
58 equivalent ldr_* routines.
59 This approach is somewhat cleaner, but it requires that the GDB
60 executable is dynamically linked. In addition it requires a
61 NAT_CLIBS= -lxproc -Wl,-expect_unresolved,ldr_process_context
62 linker specification for GDB and all applications that are using
64 We will use the peeking approach until it becomes unwieldy. */
66 #ifndef USE_LDR_ROUTINES
68 /* Definition of runtime loader structures, found by experimentation. */
69 #define RLD_CONTEXT_ADDRESS 0x3ffc0000000
77 CORE_ADDR modinfo_addr
;
82 CORE_ADDR regioninfo_addr
;
89 CORE_ADDR regionname_addr
;
107 static ldr_context_t ldr_context
;
112 static ldr_process_t fake_ldr_process
;
114 /* Called by ldr_* routines to read memory from the current target. */
116 static int ldr_read_memory (CORE_ADDR
, char *, int, int);
119 ldr_read_memory (CORE_ADDR memaddr
, char *myaddr
, int len
, int readstring
)
126 target_read_string (memaddr
, &buffer
, len
, &result
);
128 strcpy (myaddr
, buffer
);
132 result
= target_read_memory (memaddr
, myaddr
, len
);
141 /* Define our own link_map structure.
142 This will help to share code with solib.c. */
146 CORE_ADDR l_offset
; /* prelink to load address offset */
147 char *l_name
; /* full name of loaded object */
148 ldr_module_info_t module_info
; /* corresponding module info */
151 #define LM_OFFSET(so) ((so) -> lm.l_offset)
152 #define LM_NAME(so) ((so) -> lm.l_name)
156 struct so_list
*next
; /* next structure in linked list */
157 struct link_map lm
; /* copy of link map from inferior */
158 struct link_map
*lmaddr
; /* addr in inferior lm was read from */
159 CORE_ADDR lmend
; /* upper addr bound of mapped object */
160 char so_name
[MAX_PATH_SIZE
]; /* shared object lib name (FIXME) */
161 char symbols_loaded
; /* flag: symbols read in yet? */
162 char from_tty
; /* flag: print msgs? */
163 struct objfile
*objfile
; /* objfile for loaded lib */
164 struct section_table
*sections
;
165 struct section_table
*sections_end
;
166 struct section_table
*textsection
;
170 static struct so_list
*so_list_head
; /* List of known shared objects */
172 extern int fdmatch (int, int); /* In libiberty */
174 /* Local function prototypes */
176 static void sharedlibrary_command (char *, int);
178 static void info_sharedlibrary_command (char *, int);
180 static int symbol_add_stub (char *);
182 static struct so_list
*find_solib (struct so_list
*);
184 static struct link_map
*first_link_map_member (void);
186 static struct link_map
*next_link_map_member (struct so_list
*);
188 static void xfer_link_map_member (struct so_list
*, struct link_map
*);
190 static int solib_map_sections (char *);
196 solib_map_sections -- open bfd and build sections for shared lib
200 static int solib_map_sections (struct so_list *so)
204 Given a pointer to one of the shared objects in our list
205 of mapped objects, use the recorded name to open a bfd
206 descriptor for the object, build a section table, and then
207 relocate all the section addresses by the base address at
208 which the shared object was mapped.
212 In most (all?) cases the shared object file name recorded in the
213 dynamic linkage tables will be a fully qualified pathname. For
214 cases where it isn't, do we really mimic the systems search
215 mechanism correctly in the below code (particularly the tilde
220 solib_map_sections (char *arg
)
222 struct so_list
*so
= (struct so_list
*) arg
; /* catch_errors bogon */
224 char *scratch_pathname
;
226 struct section_table
*p
;
227 struct cleanup
*old_chain
;
230 filename
= tilde_expand (so
->so_name
);
231 old_chain
= make_cleanup (free
, filename
);
233 scratch_chan
= openp (getenv ("PATH"), 1, filename
, O_RDONLY
, 0,
235 if (scratch_chan
< 0)
237 scratch_chan
= openp (getenv ("LD_LIBRARY_PATH"), 1, filename
,
238 O_RDONLY
, 0, &scratch_pathname
);
240 if (scratch_chan
< 0)
242 perror_with_name (filename
);
244 /* Leave scratch_pathname allocated. bfd->name will point to it. */
246 abfd
= bfd_fdopenr (scratch_pathname
, gnutarget
, scratch_chan
);
249 close (scratch_chan
);
250 error ("Could not open `%s' as an executable file: %s",
251 scratch_pathname
, bfd_errmsg (bfd_get_error ()));
253 /* Leave bfd open, core_xfer_memory and "info files" need it. */
255 abfd
->cacheable
= true;
257 if (!bfd_check_format (abfd
, bfd_object
))
259 error ("\"%s\": not in executable format: %s.",
260 scratch_pathname
, bfd_errmsg (bfd_get_error ()));
262 if (build_section_table (abfd
, &so
->sections
, &so
->sections_end
))
264 error ("Can't find the file sections in `%s': %s",
265 bfd_get_filename (exec_bfd
), bfd_errmsg (bfd_get_error ()));
268 for (p
= so
->sections
; p
< so
->sections_end
; p
++)
270 /* Relocate the section binding addresses as recorded in the shared
271 object's file by the offset to get the address to which the
272 object was actually mapped. */
273 p
->addr
+= LM_OFFSET (so
);
274 p
->endaddr
+= LM_OFFSET (so
);
275 so
->lmend
= (CORE_ADDR
) max (p
->endaddr
, so
->lmend
);
276 if (STREQ (p
->the_bfd_section
->name
, ".text"))
282 /* Free the file names, close the file now. */
283 do_cleanups (old_chain
);
292 first_link_map_member -- locate first member in dynamic linker's map
296 static struct link_map *first_link_map_member (void)
300 Read in a copy of the first member in the inferior's dynamic
301 link map from the inferior's dynamic linker structures, and return
302 a pointer to the copy in our address space.
305 static struct link_map
*
306 first_link_map_member (void)
308 struct link_map
*lm
= NULL
;
309 static struct link_map first_lm
;
311 #ifdef USE_LDR_ROUTINES
312 ldr_module_t mod_id
= LDR_NULL_MODULE
;
315 fake_ldr_process
= ldr_core_process ();
316 ldr_set_core_reader (ldr_read_memory
);
317 ldr_xdetach (fake_ldr_process
);
318 if (ldr_xattach (fake_ldr_process
) != 0
319 || ldr_next_module (fake_ldr_process
, &mod_id
) != 0
320 || mod_id
== LDR_NULL_MODULE
321 || ldr_inq_module (fake_ldr_process
, mod_id
,
322 &first_lm
.module_info
, sizeof (ldr_module_info_t
),
326 CORE_ADDR ldr_context_addr
;
328 if (target_read_memory ((CORE_ADDR
) RLD_CONTEXT_ADDRESS
,
329 (char *) &ldr_context_addr
,
330 sizeof (CORE_ADDR
)) != 0
331 || target_read_memory (ldr_context_addr
,
332 (char *) &ldr_context
,
333 sizeof (ldr_context_t
)) != 0
334 || target_read_memory ((CORE_ADDR
) ldr_context
.head
,
335 (char *) &first_lm
.module_info
,
336 sizeof (ldr_module_info_t
)) != 0)
342 /* The first entry is for the main program and should be skipped. */
348 static struct link_map
*
349 next_link_map_member (struct so_list
*so_list_ptr
)
351 struct link_map
*lm
= NULL
;
352 static struct link_map next_lm
;
353 #ifdef USE_LDR_ROUTINES
354 ldr_module_t mod_id
= so_list_ptr
->lm
.module_info
.lmi_modid
;
357 if (ldr_next_module (fake_ldr_process
, &mod_id
) != 0
358 || mod_id
== LDR_NULL_MODULE
359 || ldr_inq_module (fake_ldr_process
, mod_id
,
360 &next_lm
.module_info
, sizeof (ldr_module_info_t
),
365 lm
->l_name
= lm
->module_info
.lmi_name
;
367 CORE_ADDR ldr_context_addr
;
369 /* Reread context in case ldr_context.tail was updated. */
371 if (target_read_memory ((CORE_ADDR
) RLD_CONTEXT_ADDRESS
,
372 (char *) &ldr_context_addr
,
373 sizeof (CORE_ADDR
)) != 0
374 || target_read_memory (ldr_context_addr
,
375 (char *) &ldr_context
,
376 sizeof (ldr_context_t
)) != 0
377 || so_list_ptr
->lm
.module_info
.modinfo_addr
== ldr_context
.tail
378 || target_read_memory (so_list_ptr
->lm
.module_info
.next
,
379 (char *) &next_lm
.module_info
,
380 sizeof (ldr_module_info_t
)) != 0)
384 lm
->l_name
= lm
->module_info
.module_name
;
390 xfer_link_map_member (struct so_list
*so_list_ptr
, struct link_map
*lm
)
393 so_list_ptr
->lm
= *lm
;
395 /* OSF/1 shared libraries are pre-linked to particular addresses,
396 but the runtime loader may have to relocate them if the
397 address ranges of the libraries used by the target executable clash,
398 or if the target executable is linked with the -taso option.
399 The offset is the difference between the address where the shared
400 library is mapped and the pre-linked address of the shared library.
402 FIXME: GDB is currently unable to relocate the shared library
403 sections by different offsets. If sections are relocated by
404 different offsets, put out a warning and use the offset of the
405 first section for all remaining sections. */
406 LM_OFFSET (so_list_ptr
) = 0;
408 /* There is one entry that has no name (for the inferior executable)
409 since it is not a shared object. */
410 if (LM_NAME (so_list_ptr
) != 0)
413 #ifdef USE_LDR_ROUTINES
414 int len
= strlen (LM_NAME (so_list_ptr
) + 1);
416 if (len
> MAX_PATH_SIZE
)
418 strncpy (so_list_ptr
->so_name
, LM_NAME (so_list_ptr
), MAX_PATH_SIZE
);
419 so_list_ptr
->so_name
[MAX_PATH_SIZE
- 1] = '\0';
421 for (i
= 0; i
< lm
->module_info
.lmi_nregion
; i
++)
423 ldr_region_info_t region_info
;
425 CORE_ADDR region_offset
;
427 if (ldr_inq_region (fake_ldr_process
, lm
->module_info
.lmi_modid
,
428 i
, ®ion_info
, sizeof (region_info
),
431 region_offset
= (CORE_ADDR
) region_info
.lri_mapaddr
432 - (CORE_ADDR
) region_info
.lri_vaddr
;
434 LM_OFFSET (so_list_ptr
) = region_offset
;
435 else if (LM_OFFSET (so_list_ptr
) != region_offset
)
436 warning ("cannot handle shared library relocation for %s (%s)",
437 so_list_ptr
->so_name
, region_info
.lri_name
);
442 target_read_string ((CORE_ADDR
) LM_NAME (so_list_ptr
), &buffer
,
443 MAX_PATH_SIZE
- 1, &errcode
);
445 error ("xfer_link_map_member: Can't read pathname for load map: %s\n",
446 safe_strerror (errcode
));
447 strncpy (so_list_ptr
->so_name
, buffer
, MAX_PATH_SIZE
- 1);
449 so_list_ptr
->so_name
[MAX_PATH_SIZE
- 1] = '\0';
451 for (i
= 0; i
< lm
->module_info
.region_count
; i
++)
453 ldr_region_info_t region_info
;
454 CORE_ADDR region_offset
;
456 if (target_read_memory (lm
->module_info
.regioninfo_addr
457 + i
* sizeof (region_info
),
458 (char *) ®ion_info
,
459 sizeof (region_info
)) != 0)
461 region_offset
= region_info
.mapaddr
- region_info
.vaddr
;
463 LM_OFFSET (so_list_ptr
) = region_offset
;
464 else if (LM_OFFSET (so_list_ptr
) != region_offset
)
467 target_read_string (region_info
.regionname_addr
, &buffer
,
468 MAX_PATH_SIZE
- 1, &errcode
);
470 region_name
= buffer
;
473 warning ("cannot handle shared library relocation for %s (%s)",
474 so_list_ptr
->so_name
, region_name
);
480 catch_errors (solib_map_sections
, (char *) so_list_ptr
,
481 "Error while mapping shared library sections:\n",
490 find_solib -- step through list of shared objects
494 struct so_list *find_solib (struct so_list *so_list_ptr)
498 This module contains the routine which finds the names of any
499 loaded "images" in the current process. The argument in must be
500 NULL on the first call, and then the returned value must be passed
501 in on subsequent calls. This provides the capability to "step" down
502 the list of loaded objects. On the last object, a NULL value is
505 The arg and return value are "struct link_map" pointers, as defined
509 static struct so_list
*
510 find_solib (so_list_ptr
)
511 struct so_list
*so_list_ptr
; /* Last lm or NULL for first one */
513 struct so_list
*so_list_next
= NULL
;
514 struct link_map
*lm
= NULL
;
517 if (so_list_ptr
== NULL
)
519 /* We are setting up for a new scan through the loaded images. */
520 if ((so_list_next
= so_list_head
) == NULL
)
522 /* Find the first link map list member. */
523 lm
= first_link_map_member ();
528 /* We have been called before, and are in the process of walking
529 the shared library list. Advance to the next shared object. */
530 lm
= next_link_map_member (so_list_ptr
);
531 so_list_next
= so_list_ptr
->next
;
533 if ((so_list_next
== NULL
) && (lm
!= NULL
))
535 /* Get next link map structure from inferior image and build a local
536 abbreviated load_map structure */
537 new = (struct so_list
*) xmalloc (sizeof (struct so_list
));
538 memset ((char *) new, 0, sizeof (struct so_list
));
540 /* Add the new node as the next node in the list, or as the root
541 node if this is the first one. */
542 if (so_list_ptr
!= NULL
)
544 so_list_ptr
->next
= new;
551 xfer_link_map_member (new, lm
);
553 return (so_list_next
);
556 /* A small stub to get us past the arg-passing pinhole of catch_errors. */
559 symbol_add_stub (char *arg
)
561 register struct so_list
*so
= (struct so_list
*) arg
; /* catch_errs bogon */
562 CORE_ADDR text_addr
= 0;
563 struct section_addr_info section_addrs
;
565 memset (§ion_addrs
, 0, sizeof (section_addrs
));
567 text_addr
= so
->textsection
->addr
;
568 else if (so
->abfd
!= NULL
)
570 asection
*lowest_sect
;
572 /* If we didn't find a mapped non zero sized .text section, set up
573 text_addr so that the relocation in symbol_file_add does no harm. */
575 lowest_sect
= bfd_get_section_by_name (so
->abfd
, ".text");
576 if (lowest_sect
== NULL
)
577 bfd_map_over_sections (so
->abfd
, find_lowest_section
,
580 text_addr
= bfd_section_vma (so
->abfd
, lowest_sect
) + LM_OFFSET (so
);
583 section_addrs
.other
[0].addr
= text_addr
;
584 section_addrs
.other
[0].name
= ".text";
585 so
->objfile
= symbol_file_add (so
->so_name
, so
->from_tty
,
586 §ion_addrs
, 0, OBJF_SHARED
);
594 solib_add -- add a shared library file to the symtab and section list
598 void solib_add (char *arg_string, int from_tty,
599 struct target_ops *target)
606 solib_add (char *arg_string
, int from_tty
, struct target_ops
*target
)
608 register struct so_list
*so
= NULL
; /* link map state variable */
610 /* Last shared library that we read. */
611 struct so_list
*so_last
= NULL
;
617 if ((re_err
= re_comp (arg_string
? arg_string
: ".")) != NULL
)
619 error ("Invalid regexp: %s", re_err
);
623 /* Add the shared library sections to the section table of the
624 specified target, if any. */
627 /* Count how many new section_table entries there are. */
630 while ((so
= find_solib (so
)) != NULL
)
634 count
+= so
->sections_end
- so
->sections
;
640 /* Add these section table entries to the target's table. */
642 old
= target_resize_to_sections (target
, count
);
644 while ((so
= find_solib (so
)) != NULL
)
648 count
= so
->sections_end
- so
->sections
;
649 memcpy ((char *) (target
->to_sections
+ old
),
651 (sizeof (struct section_table
)) * count
);
658 /* Now add the symbol files. */
660 while ((so
= find_solib (so
)) != NULL
)
662 if (so
->so_name
[0] && re_exec (so
->so_name
))
664 so
->from_tty
= from_tty
;
665 if (so
->symbols_loaded
)
669 printf_unfiltered ("Symbols already loaded for %s\n", so
->so_name
);
672 else if (catch_errors
673 (symbol_add_stub
, (char *) so
,
674 "Error while reading shared library symbols:\n",
678 so
->symbols_loaded
= 1;
683 /* Getting new symbols may change our opinion about what is
686 reinit_frame_cache ();
693 info_sharedlibrary_command -- code for "info sharedlibrary"
697 static void info_sharedlibrary_command ()
701 Walk through the shared library list and print information
702 about each attached library.
706 info_sharedlibrary_command (char *ignore
, int from_tty
)
708 register struct so_list
*so
= NULL
; /* link map state variable */
711 if (exec_bfd
== NULL
)
713 printf_unfiltered ("No executable file.\n");
716 while ((so
= find_solib (so
)) != NULL
)
720 unsigned long txt_start
= 0;
721 unsigned long txt_end
= 0;
725 printf_unfiltered ("%-20s%-20s%-12s%s\n", "From", "To", "Syms Read",
726 "Shared Object Library");
731 txt_start
= (unsigned long) so
->textsection
->addr
;
732 txt_end
= (unsigned long) so
->textsection
->endaddr
;
734 printf_unfiltered ("%-20s", local_hex_string_custom (txt_start
, "08l"));
735 printf_unfiltered ("%-20s", local_hex_string_custom (txt_end
, "08l"));
736 printf_unfiltered ("%-12s", so
->symbols_loaded
? "Yes" : "No");
737 printf_unfiltered ("%s\n", so
->so_name
);
740 if (so_list_head
== NULL
)
742 printf_unfiltered ("No shared libraries loaded at this time.\n");
750 solib_address -- check to see if an address is in a shared lib
754 char *solib_address (CORE_ADDR address)
758 Provides a hook for other gdb routines to discover whether or
759 not a particular address is within the mapped address space of
760 a shared library. Any address between the base mapping address
761 and the first address beyond the end of the last mapping, is
762 considered to be within the shared library address space, for
765 For example, this routine is called at one point to disable
766 breakpoints which are in shared libraries that are not currently
771 solib_address (CORE_ADDR address
)
773 register struct so_list
*so
= 0; /* link map state variable */
775 while ((so
= find_solib (so
)) != NULL
)
777 if (so
->so_name
[0] && so
->textsection
)
779 if ((address
>= (CORE_ADDR
) so
->textsection
->addr
) &&
780 (address
< (CORE_ADDR
) so
->textsection
->endaddr
))
781 return (so
->so_name
);
787 /* Called by free_all_symtabs */
792 struct so_list
*next
;
795 disable_breakpoints_in_shlibs (1);
799 if (so_list_head
->sections
)
801 free ((PTR
) so_list_head
->sections
);
803 if (so_list_head
->abfd
)
805 bfd_filename
= bfd_get_filename (so_list_head
->abfd
);
806 if (!bfd_close (so_list_head
->abfd
))
807 warning ("cannot close \"%s\": %s",
808 bfd_filename
, bfd_errmsg (bfd_get_error ()));
811 /* This happens for the executable on SVR4. */
814 next
= so_list_head
->next
;
816 free ((PTR
) bfd_filename
);
817 free ((PTR
) so_list_head
);
826 solib_create_inferior_hook -- shared library startup support
830 void solib_create_inferior_hook()
834 When gdb starts up the inferior, it nurses it along (through the
835 shell) until it is ready to execute it's first instruction. At this
836 point, this function gets called via expansion of the macro
837 SOLIB_CREATE_INFERIOR_HOOK.
838 For a statically bound executable, this first instruction is the
839 one at "_start", or a similar text label. No further processing is
841 For a dynamically bound executable, this first instruction is somewhere
842 in the rld, and the actual user executable is not yet mapped in.
843 We continue the inferior again, rld then maps in the actual user
844 executable and any needed shared libraries and then sends
846 At that point we discover the names of all shared libraries and
847 read their symbols in.
851 This code does not properly handle hitting breakpoints which the
852 user might have set in the rld itself. Proper handling would have
853 to check if the SIGTRAP happened due to a kill call.
855 Also, what if child has exit()ed? Must exit loop somehow.
859 solib_create_inferior_hook (void)
862 /* Nothing to do for statically bound executables. */
864 if (symfile_objfile
== NULL
865 || symfile_objfile
->obfd
== NULL
866 || ((bfd_get_file_flags (symfile_objfile
->obfd
) & DYNAMIC
) == 0))
869 /* Now run the target. It will eventually get a SIGTRAP, at
870 which point all of the libraries will have been mapped in and we
871 can go groveling around in the rld structures to find
872 out what we need to know about them. */
874 clear_proceed_status ();
875 stop_soon_quietly
= 1;
876 stop_signal
= TARGET_SIGNAL_0
;
879 target_resume (-1, 0, stop_signal
);
880 wait_for_inferior ();
882 while (stop_signal
!= TARGET_SIGNAL_TRAP
);
884 /* solib_add will call reinit_frame_cache.
885 But we are stopped in the runtime loader and we do not have symbols
886 for the runtime loader. So heuristic_proc_start will be called
887 and will put out an annoying warning.
888 Delaying the resetting of stop_soon_quietly until after symbol loading
889 suppresses the warning. */
891 solib_add ((char *) 0, 0, (struct target_ops
*) 0);
892 stop_soon_quietly
= 0;
900 sharedlibrary_command -- handle command to explicitly add library
904 static void sharedlibrary_command (char *args, int from_tty)
911 sharedlibrary_command (char *args
, int from_tty
)
914 solib_add (args
, from_tty
, (struct target_ops
*) 0);
918 _initialize_solib (void)
920 add_com ("sharedlibrary", class_files
, sharedlibrary_command
,
921 "Load shared object library symbols for files matching REGEXP.");
922 add_info ("sharedlibrary", info_sharedlibrary_command
,
923 "Status of loaded shared object libraries.");
926 (add_set_cmd ("auto-solib-add", class_support
, var_zinteger
,
927 (char *) &auto_solib_add
,
928 "Set autoloading of shared library symbols.\n\
929 If nonzero, symbols from all shared object libraries will be loaded\n\
930 automatically when the inferior begins execution or when the dynamic linker\n\
931 informs gdb that a new library has been loaded. Otherwise, symbols\n\
932 must be loaded manually, using `sharedlibrary'.",