2003-08-26 Jeff Johnston <jjohnstn@redhat.com>
[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
13437d4b
KB
180static 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
203static CORE_ADDR
204bfd_lookup_symbol (bfd *abfd, char *symname)
205{
435b259c 206 long storage_needed;
13437d4b
KB
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);
4efb68b1 219 back_to = make_cleanup (xfree, symbol_table);
13437d4b
KB
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);
4efb68b1 246 back_to = make_cleanup (xfree, symbol_table);
13437d4b
KB
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
284static char *debug_base_symbols[] =
285{
286 "r_debug", /* Solaris 2.3 */
287 "_r_debug", /* Solaris 2.1, 2.2 */
288 NULL
289};
290
291static 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
319static int
320look_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
416static CORE_ADDR
417elf_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 }
13437d4b
KB
465 else if (dyn_tag == DT_MIPS_RLD_MAP)
466 {
467 char *pbuf;
743b930b 468 int pbuf_size = TARGET_PTR_BIT / HOST_CHAR_BIT;
13437d4b 469
743b930b 470 pbuf = alloca (pbuf_size);
13437d4b
KB
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);
743b930b 475 if (target_read_memory (dyn_ptr, pbuf, pbuf_size))
13437d4b 476 return 0;
743b930b 477 return extract_unsigned_integer (pbuf, pbuf_size);
13437d4b 478 }
13437d4b
KB
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 }
743b930b
KB
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 }
13437d4b
KB
514 }
515 }
516
517 /* DT_DEBUG entry not found. */
518 return 0;
519}
520
13437d4b
KB
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
558static CORE_ADDR
559locate_base (void)
560{
13437d4b
KB
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
d5a921c9
KB
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. */
13437d4b 566
d5a921c9 567 if (debug_base == 0 && svr4_have_link_map_offsets ())
13437d4b
KB
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. */
39f77062 574 else if (!ptid_equal (inferior_ptid, null_ptid) && target_has_execution)
13437d4b
KB
575 proc_iterate_over_mappings (look_for_base);
576#endif
577 }
578 return (debug_base);
13437d4b
KB
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
598static CORE_ADDR
599first_link_map_member (void)
600{
601 CORE_ADDR lm = 0;
13437d4b
KB
602 struct link_map_offsets *lmo = SVR4_FETCH_LINK_MAP_OFFSETS ();
603 char *r_map_buf = xmalloc (lmo->r_map_size);
b8c9b27d 604 struct cleanup *cleanups = make_cleanup (xfree, r_map_buf);
13437d4b
KB
605
606 read_memory (debug_base + lmo->r_map_offset, r_map_buf, lmo->r_map_size);
607
ae0167b9
AC
608 /* Assume that the address is unsigned. */
609 lm = extract_unsigned_integer (r_map_buf, lmo->r_map_size);
13437d4b
KB
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
13437d4b
KB
617 return (lm);
618}
619
13437d4b
KB
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
642static int
643open_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);
b8c9b27d 651 struct cleanup *cleanups = make_cleanup (xfree, l_name_buf);
13437d4b
KB
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
ae0167b9
AC
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);
13437d4b
KB
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
b8c9b27d 687 make_cleanup (xfree, filename);
13437d4b 688 /* Have a pathname: read the symbol file. */
1adeb98a 689 symbol_file_add_main (filename, from_tty);
13437d4b
KB
690
691 return 1;
692}
13437d4b
KB
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
713static struct so_list *
714svr4_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));
b8c9b27d 740 struct cleanup *old_chain = make_cleanup (xfree, new);
13437d4b
KB
741
742 memset (new, 0, sizeof (*new));
743
744 new->lm_info = xmalloc (sizeof (struct lm_info));
b8c9b27d 745 make_cleanup (xfree, new->lm_info);
13437d4b
KB
746
747 new->lm_info->lm = xmalloc (lmo->link_map_size);
b8c9b27d 748 make_cleanup (xfree, new->lm_info->lm);
13437d4b
KB
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';
b8c9b27d 779 xfree (buffer);
13437d4b
KB
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
bc4a16ae
EZ
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
808CORE_ADDR
809svr4_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
ae0167b9
AC
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);
bc4a16ae
EZ
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 }
ae0167b9
AC
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);
bc4a16ae
EZ
870 do_cleanups (old_chain);
871 }
872 return 0;
873}
13437d4b
KB
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
879static int
880match_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
13437d4b
KB
893/* Return 1 if PC lies in the dynamic symbol resolution code of the
894 SVR4 run time loader. */
13437d4b
KB
895static CORE_ADDR interp_text_sect_low;
896static CORE_ADDR interp_text_sect_high;
897static CORE_ADDR interp_plt_sect_low;
898static CORE_ADDR interp_plt_sect_high;
899
d7fa2ae2
KB
900static int
901svr4_in_dynsym_resolve_code (CORE_ADDR pc)
13437d4b
KB
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}
13437d4b 907
13437d4b
KB
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
952static int
953enable_break (void)
954{
955 int success = 0;
956
13437d4b
KB
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
13437d4b
KB
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;
8ad2fcde
KB
977 CORE_ADDR load_addr = 0;
978 int load_addr_found = 0;
979 struct so_list *inferior_sos;
e4f7b8c8
MS
980 bfd *tmp_bfd = NULL;
981 int tmp_fd = -1;
982 char *tmp_pathname = NULL;
13437d4b
KB
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. */
e4f7b8c8
MS
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
13437d4b
KB
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
8ad2fcde
KB
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. */
990f9fe3 1022 solib_add (NULL, 0, NULL, auto_solib_add);
8ad2fcde
KB
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;
13437d4b
KB
1040
1041 /* Record the relocated start and end address of the dynamic linker
d7fa2ae2 1042 text and plt section for svr4_in_dynsym_resolve_code. */
13437d4b
KB
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 }
13437d4b
KB
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
13437d4b
KB
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
ab31aa69 1121 For SunOS4, this consisted of grunging around in the dynamic
13437d4b
KB
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
ab31aa69
KB
1126 However, for SVR4, there's nothing to do.
1127
13437d4b
KB
1128 */
1129
1130static void
1131svr4_special_symbol_handling (void)
1132{
13437d4b
KB
1133}
1134
e2a44558
KB
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
1145static void
1146svr4_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
13fc0c2f
KB
1223 new_offsets = xcalloc (symfile_objfile->num_sections,
1224 sizeof (struct section_offsets));
b8c9b27d 1225 old_chain = make_cleanup (xfree, new_offsets);
e2a44558
KB
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
13437d4b
KB
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
e2a44558 1293static void
13437d4b
KB
1294svr4_solib_create_inferior_hook (void)
1295{
e2a44558
KB
1296 /* Relocate the main executable if necessary. */
1297 svr4_relocate_main_executable ();
1298
d5a921c9
KB
1299 if (!svr4_have_link_map_offsets ())
1300 {
1301 warning ("no shared library support for this OS / ABI");
1302 return;
1303
1304 }
1305
13437d4b
KB
1306 if (!enable_break ())
1307 {
1308 warning ("shared library handler failed to enable breakpoint");
1309 return;
1310 }
1311
ab31aa69
KB
1312#if defined(_SCO_DS)
1313 /* SCO needs the loop below, other systems should be using the
13437d4b
KB
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 ();
c0236d92 1323 stop_soon = STOP_QUIETLY;
13437d4b
KB
1324 stop_signal = TARGET_SIGNAL_0;
1325 do
1326 {
39f77062 1327 target_resume (pid_to_ptid (-1), 0, stop_signal);
13437d4b
KB
1328 wait_for_inferior ();
1329 }
1330 while (stop_signal != TARGET_SIGNAL_TRAP);
c0236d92 1331 stop_soon = NO_STOP_QUIETLY;
ab31aa69 1332#endif /* defined(_SCO_DS) */
13437d4b
KB
1333}
1334
1335static void
1336svr4_clear_solib (void)
1337{
1338 debug_base = 0;
1339}
1340
1341static void
1342svr4_free_so (struct so_list *so)
1343{
b8c9b27d
KB
1344 xfree (so->lm_info->lm);
1345 xfree (so->lm_info);
13437d4b
KB
1346}
1347
6bb7be43
JB
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. */
1362static CORE_ADDR
1363svr4_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
749499cb
KB
1374static void
1375svr4_relocate_section_addresses (struct so_list *so,
1376 struct section_table *sec)
1377{
6bb7be43
JB
1378 sec->addr = svr4_truncate_ptr (sec->addr + LM_ADDR (so));
1379 sec->endaddr = svr4_truncate_ptr (sec->endaddr + LM_ADDR (so));
749499cb
KB
1380}
1381
6bb7be43 1382
e5e2b9ff
KB
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
1391static struct link_map_offsets *
1392legacy_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
1408static struct link_map_offsets *
1409svr4_fetch_link_map_offsets (void)
1410{
1411 struct link_map_offsets *(*flmo)(void) =
451fbdda 1412 gdbarch_data (current_gdbarch, fetch_link_map_offsets_gdbarch_data);
e5e2b9ff
KB
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
d5a921c9
KB
1425/* Return 1 if a link map offset fetcher has been defined, 0 otherwise. */
1426static int
1427svr4_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
1c4dcb57 1439/* set_solib_svr4_fetch_link_map_offsets() is intended to be called by
e5e2b9ff
KB
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. */
1c4dcb57 1443
21479ded 1444void
e5e2b9ff
KB
1445set_solib_svr4_fetch_link_map_offsets (struct gdbarch *gdbarch,
1446 struct link_map_offsets *(*flmo) (void))
21479ded 1447{
e5e2b9ff 1448 set_gdbarch_data (gdbarch, fetch_link_map_offsets_gdbarch_data, flmo);
21479ded
KB
1449}
1450
6ac5df3a
MK
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
e5e2b9ff 1459 set_solib_svr4_fetch_link_map_offsets(). */
1c4dcb57 1460
e5e2b9ff
KB
1461static void *
1462init_fetch_link_map_offsets (struct gdbarch *gdbarch)
21479ded 1463{
6ac5df3a 1464 return legacy_fetch_link_map_offsets;
21479ded
KB
1465}
1466
13437d4b
KB
1467static struct target_so_ops svr4_so_ops;
1468
a78f21af
AC
1469extern initialize_file_ftype _initialize_svr4_solib; /* -Wmissing-prototypes */
1470
13437d4b
KB
1471void
1472_initialize_svr4_solib (void)
1473{
e5e2b9ff 1474 fetch_link_map_offsets_gdbarch_data =
1062ca82 1475 register_gdbarch_data (init_fetch_link_map_offsets);
21479ded 1476
749499cb 1477 svr4_so_ops.relocate_section_addresses = svr4_relocate_section_addresses;
13437d4b
KB
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;
d7fa2ae2 1484 svr4_so_ops.in_dynsym_resolve_code = svr4_in_dynsym_resolve_code;
13437d4b
KB
1485
1486 /* FIXME: Don't do this here. *_gdbarch_init() should set so_ops. */
1487 current_target_so_ops = &svr4_so_ops;
1488}
This page took 0.477404 seconds and 4 git commands to generate.