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