* solib-svr4.c (solib_break_names): Recognize the 64-bit PowerPC
[platform/upstream/binutils.git] / gdb / solib-svr4.c
1 /* Handle SVR4 shared libraries for GDB, the GNU Debugger.
2    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000,
3    2001
4    Free Software Foundation, Inc.
5
6    This file is part of GDB.
7
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 2 of the License, or
11    (at your option) any later version.
12
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with this program; if not, write to the Free Software
20    Foundation, Inc., 59 Temple Place - Suite 330,
21    Boston, MA 02111-1307, USA.  */
22
23 #include "defs.h"
24
25 #include "elf/external.h"
26 #include "elf/common.h"
27 #include "elf/mips.h"
28
29 #include "symtab.h"
30 #include "bfd.h"
31 #include "symfile.h"
32 #include "objfiles.h"
33 #include "gdbcore.h"
34 #include "target.h"
35 #include "inferior.h"
36
37 #include "solist.h"
38 #include "solib-svr4.h"
39
40 #ifndef SVR4_FETCH_LINK_MAP_OFFSETS
41 #define SVR4_FETCH_LINK_MAP_OFFSETS() svr4_fetch_link_map_offsets ()
42 #endif
43
44 static struct link_map_offsets *svr4_fetch_link_map_offsets (void);
45 static struct link_map_offsets *legacy_fetch_link_map_offsets (void);
46 static int svr4_have_link_map_offsets (void);
47
48 /* fetch_link_map_offsets_gdbarch_data is a handle used to obtain the
49    architecture specific link map offsets fetching function.  */
50
51 static struct gdbarch_data *fetch_link_map_offsets_gdbarch_data;
52
53 /* legacy_svr4_fetch_link_map_offsets_hook is a pointer to a function
54    which is used to fetch link map offsets.  It will only be set
55    by solib-legacy.c, if at all. */
56
57 struct link_map_offsets *(*legacy_svr4_fetch_link_map_offsets_hook)(void) = 0;
58
59 /* Link map info to include in an allocated so_list entry */
60
61 struct lm_info
62   {
63     /* Pointer to copy of link map from inferior.  The type is char *
64        rather than void *, so that we may use byte offsets to find the
65        various fields without the need for a cast.  */
66     char *lm;
67   };
68
69 /* On SVR4 systems, a list of symbols in the dynamic linker where
70    GDB can try to place a breakpoint to monitor shared library
71    events.
72
73    If none of these symbols are found, or other errors occur, then
74    SVR4 systems will fall back to using a symbol as the "startup
75    mapping complete" breakpoint address.  */
76
77 static char *solib_break_names[] =
78 {
79   "r_debug_state",
80   "_r_debug_state",
81   "_dl_debug_state",
82   "rtld_db_dlactivity",
83   "_rtld_debug_state",
84
85   /* On the 64-bit PowerPC, the linker symbol with the same name as
86      the C function points to a function descriptor, not to the entry
87      point.  The linker symbol whose name is the C function name
88      prefixed with a '.' points to the function's entry point.  So
89      when we look through this table, we ignore symbols that point
90      into the data section (thus skipping the descriptor's symbol),
91      and eventually try this one, giving us the real entry point
92      address.  */
93   "._dl_debug_state",
94
95   NULL
96 };
97
98 #define BKPT_AT_SYMBOL 1
99
100 #if defined (BKPT_AT_SYMBOL)
101 static char *bkpt_names[] =
102 {
103 #ifdef SOLIB_BKPT_NAME
104   SOLIB_BKPT_NAME,              /* Prefer configured name if it exists. */
105 #endif
106   "_start",
107   "__start",
108   "main",
109   NULL
110 };
111 #endif
112
113 static char *main_name_list[] =
114 {
115   "main_$main",
116   NULL
117 };
118
119 /* Macro to extract an address from a solib structure.  When GDB is
120    configured for some 32-bit targets (e.g. Solaris 2.7 sparc), BFD is
121    configured to handle 64-bit targets, so CORE_ADDR is 64 bits.  We
122    have to extract only the significant bits of addresses to get the
123    right address when accessing the core file BFD.
124
125    Assume that the address is unsigned.  */
126
127 #define SOLIB_EXTRACT_ADDRESS(MEMBER) \
128         extract_unsigned_integer (&(MEMBER), sizeof (MEMBER))
129
130 /* local data declarations */
131
132 /* link map access functions */
133
134 static CORE_ADDR
135 LM_ADDR (struct so_list *so)
136 {
137   struct link_map_offsets *lmo = SVR4_FETCH_LINK_MAP_OFFSETS ();
138
139   return (CORE_ADDR) extract_signed_integer (so->lm_info->lm + lmo->l_addr_offset, 
140                                              lmo->l_addr_size);
141 }
142
143 static CORE_ADDR
144 LM_NEXT (struct so_list *so)
145 {
146   struct link_map_offsets *lmo = SVR4_FETCH_LINK_MAP_OFFSETS ();
147
148   /* Assume that the address is unsigned.  */
149   return extract_unsigned_integer (so->lm_info->lm + lmo->l_next_offset,
150                                    lmo->l_next_size);
151 }
152
153 static CORE_ADDR
154 LM_NAME (struct so_list *so)
155 {
156   struct link_map_offsets *lmo = SVR4_FETCH_LINK_MAP_OFFSETS ();
157
158   /* Assume that the address is unsigned.  */
159   return extract_unsigned_integer (so->lm_info->lm + lmo->l_name_offset,
160                                    lmo->l_name_size);
161 }
162
163 static int
164 IGNORE_FIRST_LINK_MAP_ENTRY (struct so_list *so)
165 {
166   struct link_map_offsets *lmo = SVR4_FETCH_LINK_MAP_OFFSETS ();
167
168   /* Assume that the address is unsigned.  */
169   return extract_unsigned_integer (so->lm_info->lm + lmo->l_prev_offset,
170                                    lmo->l_prev_size) == 0;
171 }
172
173 static CORE_ADDR debug_base;    /* Base of dynamic linker structures */
174 static CORE_ADDR breakpoint_addr;       /* Address where end bkpt is set */
175
176 /* Local function prototypes */
177
178 static int match_main (char *);
179
180 static CORE_ADDR bfd_lookup_symbol (bfd *, char *);
181
182 /*
183
184    LOCAL FUNCTION
185
186    bfd_lookup_symbol -- lookup the value for a specific symbol
187
188    SYNOPSIS
189
190    CORE_ADDR bfd_lookup_symbol (bfd *abfd, char *symname)
191
192    DESCRIPTION
193
194    An expensive way to lookup the value of a single symbol for
195    bfd's that are only temporary anyway.  This is used by the
196    shared library support to find the address of the debugger
197    interface structures in the shared library.
198
199    Note that 0 is specifically allowed as an error return (no
200    such symbol).
201  */
202
203 static CORE_ADDR
204 bfd_lookup_symbol (bfd *abfd, char *symname)
205 {
206   long storage_needed;
207   asymbol *sym;
208   asymbol **symbol_table;
209   unsigned int number_of_symbols;
210   unsigned int i;
211   struct cleanup *back_to;
212   CORE_ADDR symaddr = 0;
213
214   storage_needed = bfd_get_symtab_upper_bound (abfd);
215
216   if (storage_needed > 0)
217     {
218       symbol_table = (asymbol **) xmalloc (storage_needed);
219       back_to = make_cleanup (xfree, symbol_table);
220       number_of_symbols = bfd_canonicalize_symtab (abfd, symbol_table);
221
222       for (i = 0; i < number_of_symbols; i++)
223         {
224           sym = *symbol_table++;
225           if (STREQ (sym->name, symname))
226             {
227               /* Bfd symbols are section relative. */
228               symaddr = sym->value + sym->section->vma;
229               break;
230             }
231         }
232       do_cleanups (back_to);
233     }
234
235   if (symaddr)
236     return symaddr;
237
238   /* On FreeBSD, the dynamic linker is stripped by default.  So we'll
239      have to check the dynamic string table too.  */
240
241   storage_needed = bfd_get_dynamic_symtab_upper_bound (abfd);
242
243   if (storage_needed > 0)
244     {
245       symbol_table = (asymbol **) xmalloc (storage_needed);
246       back_to = make_cleanup (xfree, symbol_table);
247       number_of_symbols = bfd_canonicalize_dynamic_symtab (abfd, symbol_table);
248
249       for (i = 0; i < number_of_symbols; i++)
250         {
251           sym = *symbol_table++;
252           if (STREQ (sym->name, symname))
253             {
254               /* Bfd symbols are section relative. */
255               symaddr = sym->value + sym->section->vma;
256               break;
257             }
258         }
259       do_cleanups (back_to);
260     }
261
262   return symaddr;
263 }
264
265 #ifdef HANDLE_SVR4_EXEC_EMULATORS
266
267 /*
268    Solaris BCP (the part of Solaris which allows it to run SunOS4
269    a.out files) throws in another wrinkle. Solaris does not fill
270    in the usual a.out link map structures when running BCP programs,
271    the only way to get at them is via groping around in the dynamic
272    linker.
273    The dynamic linker and it's structures are located in the shared
274    C library, which gets run as the executable's "interpreter" by
275    the kernel.
276
277    Note that we can assume nothing about the process state at the time
278    we need to find these structures.  We may be stopped on the first
279    instruction of the interpreter (C shared library), the first
280    instruction of the executable itself, or somewhere else entirely
281    (if we attached to the process for example).
282  */
283
284 static char *debug_base_symbols[] =
285 {
286   "r_debug",                    /* Solaris 2.3 */
287   "_r_debug",                   /* Solaris 2.1, 2.2 */
288   NULL
289 };
290
291 static int look_for_base (int, CORE_ADDR);
292
293 /*
294
295    LOCAL FUNCTION
296
297    look_for_base -- examine file for each mapped address segment
298
299    SYNOPSYS
300
301    static int look_for_base (int fd, CORE_ADDR baseaddr)
302
303    DESCRIPTION
304
305    This function is passed to proc_iterate_over_mappings, which
306    causes it to get called once for each mapped address space, with
307    an open file descriptor for the file mapped to that space, and the
308    base address of that mapped space.
309
310    Our job is to find the debug base symbol in the file that this
311    fd is open on, if it exists, and if so, initialize the dynamic
312    linker structure base address debug_base.
313
314    Note that this is a computationally expensive proposition, since
315    we basically have to open a bfd on every call, so we specifically
316    avoid opening the exec file.
317  */
318
319 static int
320 look_for_base (int fd, CORE_ADDR baseaddr)
321 {
322   bfd *interp_bfd;
323   CORE_ADDR address = 0;
324   char **symbolp;
325
326   /* If the fd is -1, then there is no file that corresponds to this
327      mapped memory segment, so skip it.  Also, if the fd corresponds
328      to the exec file, skip it as well. */
329
330   if (fd == -1
331       || (exec_bfd != NULL
332           && fdmatch (fileno ((FILE *) (exec_bfd->iostream)), fd)))
333     {
334       return (0);
335     }
336
337   /* Try to open whatever random file this fd corresponds to.  Note that
338      we have no way currently to find the filename.  Don't gripe about
339      any problems we might have, just fail. */
340
341   if ((interp_bfd = bfd_fdopenr ("unnamed", gnutarget, fd)) == NULL)
342     {
343       return (0);
344     }
345   if (!bfd_check_format (interp_bfd, bfd_object))
346     {
347       /* FIXME-leak: on failure, might not free all memory associated with
348          interp_bfd.  */
349       bfd_close (interp_bfd);
350       return (0);
351     }
352
353   /* Now try to find our debug base symbol in this file, which we at
354      least know to be a valid ELF executable or shared library. */
355
356   for (symbolp = debug_base_symbols; *symbolp != NULL; symbolp++)
357     {
358       address = bfd_lookup_symbol (interp_bfd, *symbolp);
359       if (address != 0)
360         {
361           break;
362         }
363     }
364   if (address == 0)
365     {
366       /* FIXME-leak: on failure, might not free all memory associated with
367          interp_bfd.  */
368       bfd_close (interp_bfd);
369       return (0);
370     }
371
372   /* Eureka!  We found the symbol.  But now we may need to relocate it
373      by the base address.  If the symbol's value is less than the base
374      address of the shared library, then it hasn't yet been relocated
375      by the dynamic linker, and we have to do it ourself.  FIXME: Note
376      that we make the assumption that the first segment that corresponds
377      to the shared library has the base address to which the library
378      was relocated. */
379
380   if (address < baseaddr)
381     {
382       address += baseaddr;
383     }
384   debug_base = address;
385   /* FIXME-leak: on failure, might not free all memory associated with
386      interp_bfd.  */
387   bfd_close (interp_bfd);
388   return (1);
389 }
390 #endif /* HANDLE_SVR4_EXEC_EMULATORS */
391
392 /*
393
394    LOCAL FUNCTION
395
396    elf_locate_base -- locate the base address of dynamic linker structs
397    for SVR4 elf targets.
398
399    SYNOPSIS
400
401    CORE_ADDR elf_locate_base (void)
402
403    DESCRIPTION
404
405    For SVR4 elf targets the address of the dynamic linker's runtime
406    structure is contained within the dynamic info section in the
407    executable file.  The dynamic section is also mapped into the
408    inferior address space.  Because the runtime loader fills in the
409    real address before starting the inferior, we have to read in the
410    dynamic info section from the inferior address space.
411    If there are any errors while trying to find the address, we
412    silently return 0, otherwise the found address is returned.
413
414  */
415
416 static CORE_ADDR
417 elf_locate_base (void)
418 {
419   sec_ptr dyninfo_sect;
420   int dyninfo_sect_size;
421   CORE_ADDR dyninfo_addr;
422   char *buf;
423   char *bufend;
424   int arch_size;
425
426   /* Find the start address of the .dynamic section.  */
427   dyninfo_sect = bfd_get_section_by_name (exec_bfd, ".dynamic");
428   if (dyninfo_sect == NULL)
429     return 0;
430   dyninfo_addr = bfd_section_vma (exec_bfd, dyninfo_sect);
431
432   /* Read in .dynamic section, silently ignore errors.  */
433   dyninfo_sect_size = bfd_section_size (exec_bfd, dyninfo_sect);
434   buf = alloca (dyninfo_sect_size);
435   if (target_read_memory (dyninfo_addr, buf, dyninfo_sect_size))
436     return 0;
437
438   /* Find the DT_DEBUG entry in the the .dynamic section.
439      For mips elf we look for DT_MIPS_RLD_MAP, mips elf apparently has
440      no DT_DEBUG entries.  */
441
442   arch_size = bfd_get_arch_size (exec_bfd);
443   if (arch_size == -1)  /* failure */
444     return 0;
445
446   if (arch_size == 32)
447     { /* 32-bit elf */
448       for (bufend = buf + dyninfo_sect_size;
449            buf < bufend;
450            buf += sizeof (Elf32_External_Dyn))
451         {
452           Elf32_External_Dyn *x_dynp = (Elf32_External_Dyn *) buf;
453           long dyn_tag;
454           CORE_ADDR dyn_ptr;
455
456           dyn_tag = bfd_h_get_32 (exec_bfd, (bfd_byte *) x_dynp->d_tag);
457           if (dyn_tag == DT_NULL)
458             break;
459           else if (dyn_tag == DT_DEBUG)
460             {
461               dyn_ptr = bfd_h_get_32 (exec_bfd, 
462                                       (bfd_byte *) x_dynp->d_un.d_ptr);
463               return dyn_ptr;
464             }
465           else if (dyn_tag == DT_MIPS_RLD_MAP)
466             {
467               char *pbuf;
468               int pbuf_size = TARGET_PTR_BIT / HOST_CHAR_BIT;
469
470               pbuf = alloca (pbuf_size);
471               /* DT_MIPS_RLD_MAP contains a pointer to the address
472                  of the dynamic link structure.  */
473               dyn_ptr = bfd_h_get_32 (exec_bfd, 
474                                       (bfd_byte *) x_dynp->d_un.d_ptr);
475               if (target_read_memory (dyn_ptr, pbuf, pbuf_size))
476                 return 0;
477               return extract_unsigned_integer (pbuf, pbuf_size);
478             }
479         }
480     }
481   else /* 64-bit elf */
482     {
483       for (bufend = buf + dyninfo_sect_size;
484            buf < bufend;
485            buf += sizeof (Elf64_External_Dyn))
486         {
487           Elf64_External_Dyn *x_dynp = (Elf64_External_Dyn *) buf;
488           long dyn_tag;
489           CORE_ADDR dyn_ptr;
490
491           dyn_tag = bfd_h_get_64 (exec_bfd, (bfd_byte *) x_dynp->d_tag);
492           if (dyn_tag == DT_NULL)
493             break;
494           else if (dyn_tag == DT_DEBUG)
495             {
496               dyn_ptr = bfd_h_get_64 (exec_bfd, 
497                                       (bfd_byte *) x_dynp->d_un.d_ptr);
498               return dyn_ptr;
499             }
500           else if (dyn_tag == DT_MIPS_RLD_MAP)
501             {
502               char *pbuf;
503               int pbuf_size = TARGET_PTR_BIT / HOST_CHAR_BIT;
504
505               pbuf = alloca (pbuf_size);
506               /* DT_MIPS_RLD_MAP contains a pointer to the address
507                  of the dynamic link structure.  */
508               dyn_ptr = bfd_h_get_64 (exec_bfd, 
509                                       (bfd_byte *) x_dynp->d_un.d_ptr);
510               if (target_read_memory (dyn_ptr, pbuf, pbuf_size))
511                 return 0;
512               return extract_unsigned_integer (pbuf, pbuf_size);
513             }
514         }
515     }
516
517   /* DT_DEBUG entry not found.  */
518   return 0;
519 }
520
521 /*
522
523    LOCAL FUNCTION
524
525    locate_base -- locate the base address of dynamic linker structs
526
527    SYNOPSIS
528
529    CORE_ADDR locate_base (void)
530
531    DESCRIPTION
532
533    For both the SunOS and SVR4 shared library implementations, if the
534    inferior executable has been linked dynamically, there is a single
535    address somewhere in the inferior's data space which is the key to
536    locating all of the dynamic linker's runtime structures.  This
537    address is the value of the debug base symbol.  The job of this
538    function is to find and return that address, or to return 0 if there
539    is no such address (the executable is statically linked for example).
540
541    For SunOS, the job is almost trivial, since the dynamic linker and
542    all of it's structures are statically linked to the executable at
543    link time.  Thus the symbol for the address we are looking for has
544    already been added to the minimal symbol table for the executable's
545    objfile at the time the symbol file's symbols were read, and all we
546    have to do is look it up there.  Note that we explicitly do NOT want
547    to find the copies in the shared library.
548
549    The SVR4 version is a bit more complicated because the address
550    is contained somewhere in the dynamic info section.  We have to go
551    to a lot more work to discover the address of the debug base symbol.
552    Because of this complexity, we cache the value we find and return that
553    value on subsequent invocations.  Note there is no copy in the
554    executable symbol tables.
555
556  */
557
558 static CORE_ADDR
559 locate_base (void)
560 {
561   /* Check to see if we have a currently valid address, and if so, avoid
562      doing all this work again and just return the cached address.  If
563      we have no cached address, try to locate it in the dynamic info
564      section for ELF executables.  There's no point in doing any of this
565      though if we don't have some link map offsets to work with.  */
566
567   if (debug_base == 0 && svr4_have_link_map_offsets ())
568     {
569       if (exec_bfd != NULL
570           && bfd_get_flavour (exec_bfd) == bfd_target_elf_flavour)
571         debug_base = elf_locate_base ();
572 #ifdef HANDLE_SVR4_EXEC_EMULATORS
573       /* Try it the hard way for emulated executables.  */
574       else if (!ptid_equal (inferior_ptid, null_ptid) && target_has_execution)
575         proc_iterate_over_mappings (look_for_base);
576 #endif
577     }
578   return (debug_base);
579 }
580
581 /*
582
583    LOCAL FUNCTION
584
585    first_link_map_member -- locate first member in dynamic linker's map
586
587    SYNOPSIS
588
589    static CORE_ADDR first_link_map_member (void)
590
591    DESCRIPTION
592
593    Find the first element in the inferior's dynamic link map, and
594    return its address in the inferior.  This function doesn't copy the
595    link map entry itself into our address space; current_sos actually
596    does the reading.  */
597
598 static CORE_ADDR
599 first_link_map_member (void)
600 {
601   CORE_ADDR lm = 0;
602   struct link_map_offsets *lmo = SVR4_FETCH_LINK_MAP_OFFSETS ();
603   char *r_map_buf = xmalloc (lmo->r_map_size);
604   struct cleanup *cleanups = make_cleanup (xfree, r_map_buf);
605
606   read_memory (debug_base + lmo->r_map_offset, r_map_buf, lmo->r_map_size);
607
608   /* Assume that the address is unsigned.  */
609   lm = extract_unsigned_integer (r_map_buf, lmo->r_map_size);
610
611   /* FIXME:  Perhaps we should validate the info somehow, perhaps by
612      checking r_version for a known version number, or r_state for
613      RT_CONSISTENT. */
614
615   do_cleanups (cleanups);
616
617   return (lm);
618 }
619
620 /*
621
622   LOCAL FUNCTION
623
624   open_symbol_file_object
625
626   SYNOPSIS
627
628   void open_symbol_file_object (void *from_tty)
629
630   DESCRIPTION
631
632   If no open symbol file, attempt to locate and open the main symbol
633   file.  On SVR4 systems, this is the first link map entry.  If its
634   name is here, we can open it.  Useful when attaching to a process
635   without first loading its symbol file.
636
637   If FROM_TTYP dereferences to a non-zero integer, allow messages to
638   be printed.  This parameter is a pointer rather than an int because
639   open_symbol_file_object() is called via catch_errors() and
640   catch_errors() requires a pointer argument. */
641
642 static int
643 open_symbol_file_object (void *from_ttyp)
644 {
645   CORE_ADDR lm, l_name;
646   char *filename;
647   int errcode;
648   int from_tty = *(int *)from_ttyp;
649   struct link_map_offsets *lmo = SVR4_FETCH_LINK_MAP_OFFSETS ();
650   char *l_name_buf = xmalloc (lmo->l_name_size);
651   struct cleanup *cleanups = make_cleanup (xfree, l_name_buf);
652
653   if (symfile_objfile)
654     if (!query ("Attempt to reload symbols from process? "))
655       return 0;
656
657   if ((debug_base = locate_base ()) == 0)
658     return 0;   /* failed somehow... */
659
660   /* First link map member should be the executable.  */
661   if ((lm = first_link_map_member ()) == 0)
662     return 0;   /* failed somehow... */
663
664   /* Read address of name from target memory to GDB.  */
665   read_memory (lm + lmo->l_name_offset, l_name_buf, lmo->l_name_size);
666
667   /* Convert the address to host format.  Assume that the address is
668      unsigned.  */
669   l_name = extract_unsigned_integer (l_name_buf, lmo->l_name_size);
670
671   /* Free l_name_buf.  */
672   do_cleanups (cleanups);
673
674   if (l_name == 0)
675     return 0;           /* No filename.  */
676
677   /* Now fetch the filename from target memory.  */
678   target_read_string (l_name, &filename, SO_NAME_MAX_PATH_SIZE - 1, &errcode);
679
680   if (errcode)
681     {
682       warning ("failed to read exec filename from attached file: %s",
683                safe_strerror (errcode));
684       return 0;
685     }
686
687   make_cleanup (xfree, filename);
688   /* Have a pathname: read the symbol file.  */
689   symbol_file_add_main (filename, from_tty);
690
691   return 1;
692 }
693
694 /* LOCAL FUNCTION
695
696    current_sos -- build a list of currently loaded shared objects
697
698    SYNOPSIS
699
700    struct so_list *current_sos ()
701
702    DESCRIPTION
703
704    Build a list of `struct so_list' objects describing the shared
705    objects currently loaded in the inferior.  This list does not
706    include an entry for the main executable file.
707
708    Note that we only gather information directly available from the
709    inferior --- we don't examine any of the shared library files
710    themselves.  The declaration of `struct so_list' says which fields
711    we provide values for.  */
712
713 static struct so_list *
714 svr4_current_sos (void)
715 {
716   CORE_ADDR lm;
717   struct so_list *head = 0;
718   struct so_list **link_ptr = &head;
719
720   /* Make sure we've looked up the inferior's dynamic linker's base
721      structure.  */
722   if (! debug_base)
723     {
724       debug_base = locate_base ();
725
726       /* If we can't find the dynamic linker's base structure, this
727          must not be a dynamically linked executable.  Hmm.  */
728       if (! debug_base)
729         return 0;
730     }
731
732   /* Walk the inferior's link map list, and build our list of
733      `struct so_list' nodes.  */
734   lm = first_link_map_member ();  
735   while (lm)
736     {
737       struct link_map_offsets *lmo = SVR4_FETCH_LINK_MAP_OFFSETS ();
738       struct so_list *new
739         = (struct so_list *) xmalloc (sizeof (struct so_list));
740       struct cleanup *old_chain = make_cleanup (xfree, new);
741
742       memset (new, 0, sizeof (*new));
743
744       new->lm_info = xmalloc (sizeof (struct lm_info));
745       make_cleanup (xfree, new->lm_info);
746
747       new->lm_info->lm = xmalloc (lmo->link_map_size);
748       make_cleanup (xfree, new->lm_info->lm);
749       memset (new->lm_info->lm, 0, lmo->link_map_size);
750
751       read_memory (lm, new->lm_info->lm, lmo->link_map_size);
752
753       lm = LM_NEXT (new);
754
755       /* For SVR4 versions, the first entry in the link map is for the
756          inferior executable, so we must ignore it.  For some versions of
757          SVR4, it has no name.  For others (Solaris 2.3 for example), it
758          does have a name, so we can no longer use a missing name to
759          decide when to ignore it. */
760       if (IGNORE_FIRST_LINK_MAP_ENTRY (new))
761         free_so (new);
762       else
763         {
764           int errcode;
765           char *buffer;
766
767           /* Extract this shared object's name.  */
768           target_read_string (LM_NAME (new), &buffer,
769                               SO_NAME_MAX_PATH_SIZE - 1, &errcode);
770           if (errcode != 0)
771             {
772               warning ("current_sos: Can't read pathname for load map: %s\n",
773                        safe_strerror (errcode));
774             }
775           else
776             {
777               strncpy (new->so_name, buffer, SO_NAME_MAX_PATH_SIZE - 1);
778               new->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0';
779               xfree (buffer);
780               strcpy (new->so_original_name, new->so_name);
781             }
782
783           /* If this entry has no name, or its name matches the name
784              for the main executable, don't include it in the list.  */
785           if (! new->so_name[0]
786               || match_main (new->so_name))
787             free_so (new);
788           else
789             {
790               new->next = 0;
791               *link_ptr = new;
792               link_ptr = &new->next;
793             }
794         }
795
796       discard_cleanups (old_chain);
797     }
798
799   return head;
800 }
801
802 /* Get the address of the link_map for a given OBJFILE.  Loop through
803    the link maps, and return the address of the one corresponding to
804    the given objfile.  Note that this function takes into account that
805    objfile can be the main executable, not just a shared library.  The
806    main executable has always an empty name field in the linkmap.  */
807
808 CORE_ADDR
809 svr4_fetch_objfile_link_map (struct objfile *objfile)
810 {
811   CORE_ADDR lm;
812
813   if ((debug_base = locate_base ()) == 0)
814     return 0;   /* failed somehow... */
815
816   /* Position ourselves on the first link map.  */
817   lm = first_link_map_member ();  
818   while (lm)
819     {
820       /* Get info on the layout of the r_debug and link_map structures. */
821       struct link_map_offsets *lmo = SVR4_FETCH_LINK_MAP_OFFSETS ();
822       int errcode;
823       char *buffer;
824       struct lm_info objfile_lm_info;
825       struct cleanup *old_chain;
826       CORE_ADDR name_address;
827       char *l_name_buf = xmalloc (lmo->l_name_size);
828       old_chain = make_cleanup (xfree, l_name_buf);
829
830       /* Set up the buffer to contain the portion of the link_map
831          structure that gdb cares about.  Note that this is not the
832          whole link_map structure.  */
833       objfile_lm_info.lm = xmalloc (lmo->link_map_size);
834       make_cleanup (xfree, objfile_lm_info.lm);
835       memset (objfile_lm_info.lm, 0, lmo->link_map_size);
836
837       /* Read the link map into our internal structure.  */
838       read_memory (lm, objfile_lm_info.lm, lmo->link_map_size);
839
840       /* Read address of name from target memory to GDB.  */
841       read_memory (lm + lmo->l_name_offset, l_name_buf, lmo->l_name_size);
842
843       /* Extract this object's name.  Assume that the address is
844          unsigned.  */
845       name_address = extract_unsigned_integer (l_name_buf, lmo->l_name_size);
846       target_read_string (name_address, &buffer,
847                           SO_NAME_MAX_PATH_SIZE - 1, &errcode);
848       make_cleanup (xfree, buffer);
849       if (errcode != 0)
850         {
851           warning ("svr4_fetch_objfile_link_map: Can't read pathname for load map: %s\n",
852                    safe_strerror (errcode));
853         }
854       else
855         {
856           /* Is this the linkmap for the file we want?  */
857           /* If the file is not a shared library and has no name,
858              we are sure it is the main executable, so we return that.  */
859           if ((buffer && strcmp (buffer, objfile->name) == 0)
860               || (!(objfile->flags & OBJF_SHARED) && (strcmp (buffer, "") == 0)))
861             {
862               do_cleanups (old_chain);
863               return lm;
864             }
865         }
866       /* Not the file we wanted, continue checking.  Assume that the
867          address is unsigned.  */
868       lm = extract_unsigned_integer (objfile_lm_info.lm + lmo->l_next_offset,
869                                      lmo->l_next_size);
870       do_cleanups (old_chain);
871     }
872   return 0;
873 }
874
875 /* On some systems, the only way to recognize the link map entry for
876    the main executable file is by looking at its name.  Return
877    non-zero iff SONAME matches one of the known main executable names.  */
878
879 static int
880 match_main (char *soname)
881 {
882   char **mainp;
883
884   for (mainp = main_name_list; *mainp != NULL; mainp++)
885     {
886       if (strcmp (soname, *mainp) == 0)
887         return (1);
888     }
889
890   return (0);
891 }
892
893 /* Return 1 if PC lies in the dynamic symbol resolution code of the
894    SVR4 run time loader.  */
895 static CORE_ADDR interp_text_sect_low;
896 static CORE_ADDR interp_text_sect_high;
897 static CORE_ADDR interp_plt_sect_low;
898 static CORE_ADDR interp_plt_sect_high;
899
900 static int
901 svr4_in_dynsym_resolve_code (CORE_ADDR pc)
902 {
903   return ((pc >= interp_text_sect_low && pc < interp_text_sect_high)
904           || (pc >= interp_plt_sect_low && pc < interp_plt_sect_high)
905           || in_plt_section (pc, NULL));
906 }
907
908
909 /*
910
911    LOCAL FUNCTION
912
913    enable_break -- arrange for dynamic linker to hit breakpoint
914
915    SYNOPSIS
916
917    int enable_break (void)
918
919    DESCRIPTION
920
921    Both the SunOS and the SVR4 dynamic linkers have, as part of their
922    debugger interface, support for arranging for the inferior to hit
923    a breakpoint after mapping in the shared libraries.  This function
924    enables that breakpoint.
925
926    For SunOS, there is a special flag location (in_debugger) which we
927    set to 1.  When the dynamic linker sees this flag set, it will set
928    a breakpoint at a location known only to itself, after saving the
929    original contents of that place and the breakpoint address itself,
930    in it's own internal structures.  When we resume the inferior, it
931    will eventually take a SIGTRAP when it runs into the breakpoint.
932    We handle this (in a different place) by restoring the contents of
933    the breakpointed location (which is only known after it stops),
934    chasing around to locate the shared libraries that have been
935    loaded, then resuming.
936
937    For SVR4, the debugger interface structure contains a member (r_brk)
938    which is statically initialized at the time the shared library is
939    built, to the offset of a function (_r_debug_state) which is guaran-
940    teed to be called once before mapping in a library, and again when
941    the mapping is complete.  At the time we are examining this member,
942    it contains only the unrelocated offset of the function, so we have
943    to do our own relocation.  Later, when the dynamic linker actually
944    runs, it relocates r_brk to be the actual address of _r_debug_state().
945
946    The debugger interface structure also contains an enumeration which
947    is set to either RT_ADD or RT_DELETE prior to changing the mapping,
948    depending upon whether or not the library is being mapped or unmapped,
949    and then set to RT_CONSISTENT after the library is mapped/unmapped.
950  */
951
952 static int
953 enable_break (void)
954 {
955   int success = 0;
956
957 #ifdef BKPT_AT_SYMBOL
958
959   struct minimal_symbol *msymbol;
960   char **bkpt_namep;
961   asection *interp_sect;
962
963   /* First, remove all the solib event breakpoints.  Their addresses
964      may have changed since the last time we ran the program.  */
965   remove_solib_event_breakpoints ();
966
967   interp_text_sect_low = interp_text_sect_high = 0;
968   interp_plt_sect_low = interp_plt_sect_high = 0;
969
970   /* Find the .interp section; if not found, warn the user and drop
971      into the old breakpoint at symbol code.  */
972   interp_sect = bfd_get_section_by_name (exec_bfd, ".interp");
973   if (interp_sect)
974     {
975       unsigned int interp_sect_size;
976       char *buf;
977       CORE_ADDR load_addr = 0;
978       int load_addr_found = 0;
979       struct so_list *inferior_sos;
980       bfd *tmp_bfd = NULL;
981       int tmp_fd = -1;
982       char *tmp_pathname = NULL;
983       CORE_ADDR sym_addr = 0;
984
985       /* Read the contents of the .interp section into a local buffer;
986          the contents specify the dynamic linker this program uses.  */
987       interp_sect_size = bfd_section_size (exec_bfd, interp_sect);
988       buf = alloca (interp_sect_size);
989       bfd_get_section_contents (exec_bfd, interp_sect,
990                                 buf, 0, interp_sect_size);
991
992       /* Now we need to figure out where the dynamic linker was
993          loaded so that we can load its symbols and place a breakpoint
994          in the dynamic linker itself.
995
996          This address is stored on the stack.  However, I've been unable
997          to find any magic formula to find it for Solaris (appears to
998          be trivial on GNU/Linux).  Therefore, we have to try an alternate
999          mechanism to find the dynamic linker's base address.  */
1000
1001       tmp_fd  = solib_open (buf, &tmp_pathname);
1002       if (tmp_fd >= 0)
1003         tmp_bfd = bfd_fdopenr (tmp_pathname, gnutarget, tmp_fd);
1004
1005       if (tmp_bfd == NULL)
1006         goto bkpt_at_symbol;
1007
1008       /* Make sure the dynamic linker's really a useful object.  */
1009       if (!bfd_check_format (tmp_bfd, bfd_object))
1010         {
1011           warning ("Unable to grok dynamic linker %s as an object file", buf);
1012           bfd_close (tmp_bfd);
1013           goto bkpt_at_symbol;
1014         }
1015
1016       /* If the entry in _DYNAMIC for the dynamic linker has already
1017          been filled in, we can read its base address from there. */
1018       inferior_sos = svr4_current_sos ();
1019       if (inferior_sos)
1020         {
1021           /* Connected to a running target.  Update our shared library table. */
1022           solib_add (NULL, 0, NULL, auto_solib_add);
1023         }
1024       while (inferior_sos)
1025         {
1026           if (strcmp (buf, inferior_sos->so_original_name) == 0)
1027             {
1028               load_addr_found = 1;
1029               load_addr = LM_ADDR (inferior_sos);
1030               break;
1031             }
1032           inferior_sos = inferior_sos->next;
1033         }
1034
1035       /* Otherwise we find the dynamic linker's base address by examining
1036          the current pc (which should point at the entry point for the
1037          dynamic linker) and subtracting the offset of the entry point.  */
1038       if (!load_addr_found)
1039         load_addr = read_pc () - tmp_bfd->start_address;
1040
1041       /* Record the relocated start and end address of the dynamic linker
1042          text and plt section for svr4_in_dynsym_resolve_code.  */
1043       interp_sect = bfd_get_section_by_name (tmp_bfd, ".text");
1044       if (interp_sect)
1045         {
1046           interp_text_sect_low =
1047             bfd_section_vma (tmp_bfd, interp_sect) + load_addr;
1048           interp_text_sect_high =
1049             interp_text_sect_low + bfd_section_size (tmp_bfd, interp_sect);
1050         }
1051       interp_sect = bfd_get_section_by_name (tmp_bfd, ".plt");
1052       if (interp_sect)
1053         {
1054           interp_plt_sect_low =
1055             bfd_section_vma (tmp_bfd, interp_sect) + load_addr;
1056           interp_plt_sect_high =
1057             interp_plt_sect_low + bfd_section_size (tmp_bfd, interp_sect);
1058         }
1059
1060       /* Now try to set a breakpoint in the dynamic linker.  */
1061       for (bkpt_namep = solib_break_names; *bkpt_namep != NULL; bkpt_namep++)
1062         {
1063           sym_addr = bfd_lookup_symbol (tmp_bfd, *bkpt_namep);
1064           if (sym_addr != 0)
1065             break;
1066         }
1067
1068       /* We're done with the temporary bfd.  */
1069       bfd_close (tmp_bfd);
1070
1071       if (sym_addr != 0)
1072         {
1073           create_solib_event_breakpoint (load_addr + sym_addr);
1074           return 1;
1075         }
1076
1077       /* For whatever reason we couldn't set a breakpoint in the dynamic
1078          linker.  Warn and drop into the old code.  */
1079     bkpt_at_symbol:
1080       warning ("Unable to find dynamic linker breakpoint function.\nGDB will be unable to debug shared library initializers\nand track explicitly loaded dynamic code.");
1081     }
1082
1083   /* Scan through the list of symbols, trying to look up the symbol and
1084      set a breakpoint there.  Terminate loop when we/if we succeed. */
1085
1086   breakpoint_addr = 0;
1087   for (bkpt_namep = bkpt_names; *bkpt_namep != NULL; bkpt_namep++)
1088     {
1089       msymbol = lookup_minimal_symbol (*bkpt_namep, NULL, symfile_objfile);
1090       if ((msymbol != NULL) && (SYMBOL_VALUE_ADDRESS (msymbol) != 0))
1091         {
1092           create_solib_event_breakpoint (SYMBOL_VALUE_ADDRESS (msymbol));
1093           return 1;
1094         }
1095     }
1096
1097   /* Nothing good happened.  */
1098   success = 0;
1099
1100 #endif /* BKPT_AT_SYMBOL */
1101
1102   return (success);
1103 }
1104
1105 /*
1106
1107    LOCAL FUNCTION
1108
1109    special_symbol_handling -- additional shared library symbol handling
1110
1111    SYNOPSIS
1112
1113    void special_symbol_handling ()
1114
1115    DESCRIPTION
1116
1117    Once the symbols from a shared object have been loaded in the usual
1118    way, we are called to do any system specific symbol handling that 
1119    is needed.
1120
1121    For SunOS4, this consisted of grunging around in the dynamic
1122    linkers structures to find symbol definitions for "common" symbols
1123    and adding them to the minimal symbol table for the runtime common
1124    objfile.
1125
1126    However, for SVR4, there's nothing to do.
1127
1128  */
1129
1130 static void
1131 svr4_special_symbol_handling (void)
1132 {
1133 }
1134
1135 /* Relocate the main executable.  This function should be called upon
1136    stopping the inferior process at the entry point to the program. 
1137    The entry point from BFD is compared to the PC and if they are
1138    different, the main executable is relocated by the proper amount. 
1139    
1140    As written it will only attempt to relocate executables which
1141    lack interpreter sections.  It seems likely that only dynamic
1142    linker executables will get relocated, though it should work
1143    properly for a position-independent static executable as well.  */
1144
1145 static void
1146 svr4_relocate_main_executable (void)
1147 {
1148   asection *interp_sect;
1149   CORE_ADDR pc = read_pc ();
1150
1151   /* Decide if the objfile needs to be relocated.  As indicated above,
1152      we will only be here when execution is stopped at the beginning
1153      of the program.  Relocation is necessary if the address at which
1154      we are presently stopped differs from the start address stored in
1155      the executable AND there's no interpreter section.  The condition
1156      regarding the interpreter section is very important because if
1157      there *is* an interpreter section, execution will begin there
1158      instead.  When there is an interpreter section, the start address
1159      is (presumably) used by the interpreter at some point to start
1160      execution of the program.
1161
1162      If there is an interpreter, it is normal for it to be set to an
1163      arbitrary address at the outset.  The job of finding it is
1164      handled in enable_break().
1165
1166      So, to summarize, relocations are necessary when there is no
1167      interpreter section and the start address obtained from the
1168      executable is different from the address at which GDB is
1169      currently stopped.
1170      
1171      [ The astute reader will note that we also test to make sure that
1172        the executable in question has the DYNAMIC flag set.  It is my
1173        opinion that this test is unnecessary (undesirable even).  It
1174        was added to avoid inadvertent relocation of an executable
1175        whose e_type member in the ELF header is not ET_DYN.  There may
1176        be a time in the future when it is desirable to do relocations
1177        on other types of files as well in which case this condition
1178        should either be removed or modified to accomodate the new file
1179        type.  (E.g, an ET_EXEC executable which has been built to be
1180        position-independent could safely be relocated by the OS if
1181        desired.  It is true that this violates the ABI, but the ABI
1182        has been known to be bent from time to time.)  - Kevin, Nov 2000. ]
1183      */
1184
1185   interp_sect = bfd_get_section_by_name (exec_bfd, ".interp");
1186   if (interp_sect == NULL 
1187       && (bfd_get_file_flags (exec_bfd) & DYNAMIC) != 0
1188       && bfd_get_start_address (exec_bfd) != pc)
1189     {
1190       struct cleanup *old_chain;
1191       struct section_offsets *new_offsets;
1192       int i, changed;
1193       CORE_ADDR displacement;
1194       
1195       /* It is necessary to relocate the objfile.  The amount to
1196          relocate by is simply the address at which we are stopped
1197          minus the starting address from the executable.
1198
1199          We relocate all of the sections by the same amount.  This
1200          behavior is mandated by recent editions of the System V ABI. 
1201          According to the System V Application Binary Interface,
1202          Edition 4.1, page 5-5:
1203
1204            ...  Though the system chooses virtual addresses for
1205            individual processes, it maintains the segments' relative
1206            positions.  Because position-independent code uses relative
1207            addressesing between segments, the difference between
1208            virtual addresses in memory must match the difference
1209            between virtual addresses in the file.  The difference
1210            between the virtual address of any segment in memory and
1211            the corresponding virtual address in the file is thus a
1212            single constant value for any one executable or shared
1213            object in a given process.  This difference is the base
1214            address.  One use of the base address is to relocate the
1215            memory image of the program during dynamic linking.
1216
1217          The same language also appears in Edition 4.0 of the System V
1218          ABI and is left unspecified in some of the earlier editions.  */
1219
1220       displacement = pc - bfd_get_start_address (exec_bfd);
1221       changed = 0;
1222
1223       new_offsets = xcalloc (symfile_objfile->num_sections,
1224                              sizeof (struct section_offsets));
1225       old_chain = make_cleanup (xfree, new_offsets);
1226
1227       for (i = 0; i < symfile_objfile->num_sections; i++)
1228         {
1229           if (displacement != ANOFFSET (symfile_objfile->section_offsets, i))
1230             changed = 1;
1231           new_offsets->offsets[i] = displacement;
1232         }
1233
1234       if (changed)
1235         objfile_relocate (symfile_objfile, new_offsets);
1236
1237       do_cleanups (old_chain);
1238     }
1239 }
1240
1241 /*
1242
1243    GLOBAL FUNCTION
1244
1245    svr4_solib_create_inferior_hook -- shared library startup support
1246
1247    SYNOPSIS
1248
1249    void svr4_solib_create_inferior_hook()
1250
1251    DESCRIPTION
1252
1253    When gdb starts up the inferior, it nurses it along (through the
1254    shell) until it is ready to execute it's first instruction.  At this
1255    point, this function gets called via expansion of the macro
1256    SOLIB_CREATE_INFERIOR_HOOK.
1257
1258    For SunOS executables, this first instruction is typically the
1259    one at "_start", or a similar text label, regardless of whether
1260    the executable is statically or dynamically linked.  The runtime
1261    startup code takes care of dynamically linking in any shared
1262    libraries, once gdb allows the inferior to continue.
1263
1264    For SVR4 executables, this first instruction is either the first
1265    instruction in the dynamic linker (for dynamically linked
1266    executables) or the instruction at "start" for statically linked
1267    executables.  For dynamically linked executables, the system
1268    first exec's /lib/libc.so.N, which contains the dynamic linker,
1269    and starts it running.  The dynamic linker maps in any needed
1270    shared libraries, maps in the actual user executable, and then
1271    jumps to "start" in the user executable.
1272
1273    For both SunOS shared libraries, and SVR4 shared libraries, we
1274    can arrange to cooperate with the dynamic linker to discover the
1275    names of shared libraries that are dynamically linked, and the
1276    base addresses to which they are linked.
1277
1278    This function is responsible for discovering those names and
1279    addresses, and saving sufficient information about them to allow
1280    their symbols to be read at a later time.
1281
1282    FIXME
1283
1284    Between enable_break() and disable_break(), this code does not
1285    properly handle hitting breakpoints which the user might have
1286    set in the startup code or in the dynamic linker itself.  Proper
1287    handling will probably have to wait until the implementation is
1288    changed to use the "breakpoint handler function" method.
1289
1290    Also, what if child has exit()ed?  Must exit loop somehow.
1291  */
1292
1293 static void
1294 svr4_solib_create_inferior_hook (void)
1295 {
1296   /* Relocate the main executable if necessary.  */
1297   svr4_relocate_main_executable ();
1298
1299   if (!svr4_have_link_map_offsets ())
1300     {
1301       warning ("no shared library support for this OS / ABI");
1302       return;
1303
1304     }
1305
1306   if (!enable_break ())
1307     {
1308       warning ("shared library handler failed to enable breakpoint");
1309       return;
1310     }
1311
1312 #if defined(_SCO_DS)
1313   /* SCO needs the loop below, other systems should be using the
1314      special shared library breakpoints and the shared library breakpoint
1315      service routine.
1316
1317      Now run the target.  It will eventually hit the breakpoint, at
1318      which point all of the libraries will have been mapped in and we
1319      can go groveling around in the dynamic linker structures to find
1320      out what we need to know about them. */
1321
1322   clear_proceed_status ();
1323   stop_soon = STOP_QUIETLY;
1324   stop_signal = TARGET_SIGNAL_0;
1325   do
1326     {
1327       target_resume (pid_to_ptid (-1), 0, stop_signal);
1328       wait_for_inferior ();
1329     }
1330   while (stop_signal != TARGET_SIGNAL_TRAP);
1331   stop_soon = NO_STOP_QUIETLY;
1332 #endif /* defined(_SCO_DS) */
1333 }
1334
1335 static void
1336 svr4_clear_solib (void)
1337 {
1338   debug_base = 0;
1339 }
1340
1341 static void
1342 svr4_free_so (struct so_list *so)
1343 {
1344   xfree (so->lm_info->lm);
1345   xfree (so->lm_info);
1346 }
1347
1348
1349 /* Clear any bits of ADDR that wouldn't fit in a target-format
1350    data pointer.  "Data pointer" here refers to whatever sort of
1351    address the dynamic linker uses to manage its sections.  At the
1352    moment, we don't support shared libraries on any processors where
1353    code and data pointers are different sizes.
1354
1355    This isn't really the right solution.  What we really need here is
1356    a way to do arithmetic on CORE_ADDR values that respects the
1357    natural pointer/address correspondence.  (For example, on the MIPS,
1358    converting a 32-bit pointer to a 64-bit CORE_ADDR requires you to
1359    sign-extend the value.  There, simply truncating the bits above
1360    TARGET_PTR_BIT, as we do below, is no good.)  This should probably
1361    be a new gdbarch method or something.  */
1362 static CORE_ADDR
1363 svr4_truncate_ptr (CORE_ADDR addr)
1364 {
1365   if (TARGET_PTR_BIT == sizeof (CORE_ADDR) * 8)
1366     /* We don't need to truncate anything, and the bit twiddling below
1367        will fail due to overflow problems.  */
1368     return addr;
1369   else
1370     return addr & (((CORE_ADDR) 1 << TARGET_PTR_BIT) - 1);
1371 }
1372
1373
1374 static void
1375 svr4_relocate_section_addresses (struct so_list *so,
1376                                  struct section_table *sec)
1377 {
1378   sec->addr    = svr4_truncate_ptr (sec->addr    + LM_ADDR (so));
1379   sec->endaddr = svr4_truncate_ptr (sec->endaddr + LM_ADDR (so));
1380 }
1381
1382
1383 /* Fetch a link_map_offsets structure for native targets using struct
1384    definitions from link.h.  See solib-legacy.c for the function
1385    which does the actual work.
1386    
1387    Note: For non-native targets (i.e. cross-debugging situations),
1388    a target specific fetch_link_map_offsets() function should be
1389    defined and registered via set_solib_svr4_fetch_link_map_offsets().  */
1390
1391 static struct link_map_offsets *
1392 legacy_fetch_link_map_offsets (void)
1393 {
1394   if (legacy_svr4_fetch_link_map_offsets_hook)
1395     return legacy_svr4_fetch_link_map_offsets_hook ();
1396   else
1397     {
1398       internal_error (__FILE__, __LINE__,
1399                       "legacy_fetch_link_map_offsets called without legacy "
1400                       "link_map support enabled.");
1401       return 0;
1402     }
1403 }
1404
1405 /* Fetch a link_map_offsets structure using the method registered in the
1406    architecture vector.  */
1407
1408 static struct link_map_offsets *
1409 svr4_fetch_link_map_offsets (void)
1410 {
1411   struct link_map_offsets *(*flmo)(void) =
1412     gdbarch_data (current_gdbarch, fetch_link_map_offsets_gdbarch_data);
1413
1414   if (flmo == NULL)
1415     {
1416       internal_error (__FILE__, __LINE__, 
1417                       "svr4_fetch_link_map_offsets: fetch_link_map_offsets "
1418                       "method not defined for this architecture.");
1419       return 0;
1420     }
1421   else
1422     return (flmo ());
1423 }
1424
1425 /* Return 1 if a link map offset fetcher has been defined, 0 otherwise.  */
1426 static int
1427 svr4_have_link_map_offsets (void)
1428 {
1429   struct link_map_offsets *(*flmo)(void) =
1430     gdbarch_data (current_gdbarch, fetch_link_map_offsets_gdbarch_data);
1431   if (flmo == NULL
1432       || (flmo == legacy_fetch_link_map_offsets 
1433           && legacy_svr4_fetch_link_map_offsets_hook == NULL))
1434     return 0;
1435   else
1436     return 1;
1437 }
1438
1439 /* set_solib_svr4_fetch_link_map_offsets() is intended to be called by
1440    a <arch>_gdbarch_init() function.  It is used to establish an
1441    architecture specific link_map_offsets fetcher for the architecture
1442    being defined.  */
1443
1444 void
1445 set_solib_svr4_fetch_link_map_offsets (struct gdbarch *gdbarch,
1446                                        struct link_map_offsets *(*flmo) (void))
1447 {
1448   set_gdbarch_data (gdbarch, fetch_link_map_offsets_gdbarch_data, flmo);
1449 }
1450
1451 /* Initialize the architecture-specific link_map_offsets fetcher.
1452    This is called after <arch>_gdbarch_init() has set up its `struct
1453    gdbarch' for the new architecture, and is only called if the
1454    link_map_offsets fetcher isn't already initialized (which is
1455    usually done by calling set_solib_svr4_fetch_link_map_offsets()
1456    above in <arch>_gdbarch_init()).  Therefore we attempt to provide a
1457    reasonable alternative (for native targets anyway) if the
1458    <arch>_gdbarch_init() fails to call
1459    set_solib_svr4_fetch_link_map_offsets().  */
1460
1461 static void *
1462 init_fetch_link_map_offsets (struct gdbarch *gdbarch)
1463 {
1464   return legacy_fetch_link_map_offsets;
1465 }
1466
1467 static struct target_so_ops svr4_so_ops;
1468
1469 extern initialize_file_ftype _initialize_svr4_solib; /* -Wmissing-prototypes */
1470
1471 void
1472 _initialize_svr4_solib (void)
1473 {
1474   fetch_link_map_offsets_gdbarch_data =
1475     register_gdbarch_data (init_fetch_link_map_offsets, 0);
1476
1477   svr4_so_ops.relocate_section_addresses = svr4_relocate_section_addresses;
1478   svr4_so_ops.free_so = svr4_free_so;
1479   svr4_so_ops.clear_solib = svr4_clear_solib;
1480   svr4_so_ops.solib_create_inferior_hook = svr4_solib_create_inferior_hook;
1481   svr4_so_ops.special_symbol_handling = svr4_special_symbol_handling;
1482   svr4_so_ops.current_sos = svr4_current_sos;
1483   svr4_so_ops.open_symbol_file_object = open_symbol_file_object;
1484   svr4_so_ops.in_dynsym_resolve_code = svr4_in_dynsym_resolve_code;
1485
1486   /* FIXME: Don't do this here.  *_gdbarch_init() should set so_ops. */
1487   current_target_so_ops = &svr4_so_ops;
1488 }