xref: /openbsd/gnu/usr.bin/binutils/gdb/solib-svr4.h (revision 11efff7f)
1b725ae77Skettenis /* Handle shared libraries for GDB, the GNU Debugger.
2b725ae77Skettenis 
3b725ae77Skettenis    Copyright 2000, 2004
4b725ae77Skettenis    Free Software Foundation, Inc.
5b725ae77Skettenis 
6b725ae77Skettenis    This file is part of GDB.
7b725ae77Skettenis 
8b725ae77Skettenis    This program is free software; you can redistribute it and/or modify
9b725ae77Skettenis    it under the terms of the GNU General Public License as published by
10b725ae77Skettenis    the Free Software Foundation; either version 2 of the License, or
11b725ae77Skettenis    (at your option) any later version.
12b725ae77Skettenis 
13b725ae77Skettenis    This program is distributed in the hope that it will be useful,
14b725ae77Skettenis    but WITHOUT ANY WARRANTY; without even the implied warranty of
15b725ae77Skettenis    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16b725ae77Skettenis    GNU General Public License for more details.
17b725ae77Skettenis 
18b725ae77Skettenis    You should have received a copy of the GNU General Public License
19b725ae77Skettenis    along with this program; if not, write to the Free Software
20b725ae77Skettenis    Foundation, Inc., 59 Temple Place - Suite 330,
21b725ae77Skettenis    Boston, MA 02111-1307, USA.  */
22b725ae77Skettenis 
23*11efff7fSkettenis #ifndef SOLIB_SVR4_H
24*11efff7fSkettenis #define SOLIB_SVR4_H
25*11efff7fSkettenis 
26b725ae77Skettenis struct objfile;
27b725ae77Skettenis 
28b725ae77Skettenis /* Critical offsets and sizes which describe struct r_debug and
29b725ae77Skettenis    struct link_map on SVR4-like targets.  All offsets and sizes are
30b725ae77Skettenis    in bytes unless otherwise specified.  */
31b725ae77Skettenis 
32b725ae77Skettenis struct link_map_offsets
33b725ae77Skettenis   {
34b725ae77Skettenis     /* Size of struct r_debug (or equivalent), or at least enough of it to
35b725ae77Skettenis        be able to obtain the r_map field.  */
36b725ae77Skettenis     int r_debug_size;
37b725ae77Skettenis 
38b725ae77Skettenis     /* Offset to the r_map field in struct r_debug.  */
39b725ae77Skettenis     int r_map_offset;
40b725ae77Skettenis 
41b725ae77Skettenis     /* Size of the r_map field in struct r_debug.  */
42b725ae77Skettenis     int r_map_size;
43b725ae77Skettenis 
44b725ae77Skettenis     /* Size of struct link_map (or equivalent), or at least enough of it
45b725ae77Skettenis        to be able to obtain the fields below.  */
46b725ae77Skettenis     int link_map_size;
47b725ae77Skettenis 
48b725ae77Skettenis     /* Offset to l_addr field in struct link_map.  */
49b725ae77Skettenis     int l_addr_offset;
50b725ae77Skettenis 
51b725ae77Skettenis     /* Size of l_addr field in struct link_map.  */
52b725ae77Skettenis     int l_addr_size;
53b725ae77Skettenis 
54b725ae77Skettenis     /* Offset to l_next field in struct link_map.  */
55b725ae77Skettenis     int l_next_offset;
56b725ae77Skettenis 
57b725ae77Skettenis     /* Size of l_next field in struct link_map.  */
58b725ae77Skettenis     int l_next_size;
59b725ae77Skettenis 
60b725ae77Skettenis     /* Offset to l_prev field in struct link_map.  */
61b725ae77Skettenis     int l_prev_offset;
62b725ae77Skettenis 
63b725ae77Skettenis     /* Size of l_prev field in struct link_map.  */
64b725ae77Skettenis     int l_prev_size;
65b725ae77Skettenis 
66b725ae77Skettenis     /* Offset to l_name field in struct link_map.  */
67b725ae77Skettenis     int l_name_offset;
68b725ae77Skettenis 
69b725ae77Skettenis     /* Size of l_name field in struct link_map.  */
70b725ae77Skettenis     int l_name_size;
71b725ae77Skettenis   };
72b725ae77Skettenis 
73b725ae77Skettenis /* set_solib_svr4_fetch_link_map_offsets() is intended to be called by
74b725ae77Skettenis    a <arch>_gdbarch_init() function.  It is used to establish an
75b725ae77Skettenis    architecture specific link_map_offsets fetcher for the architecture
76b725ae77Skettenis    being defined.  */
77b725ae77Skettenis 
78b725ae77Skettenis extern void set_solib_svr4_fetch_link_map_offsets
79b725ae77Skettenis   (struct gdbarch *gdbarch, struct link_map_offsets *(*func) (void));
80b725ae77Skettenis 
81b725ae77Skettenis /* This function is called by thread_db.c.  Return the address of the
82b725ae77Skettenis    link map for the given objfile.  */
83b725ae77Skettenis extern CORE_ADDR svr4_fetch_objfile_link_map (struct objfile *objfile);
84b725ae77Skettenis 
85b725ae77Skettenis /* legacy_svr4_fetch_link_map_offsets_hook is a pointer to a function
86b725ae77Skettenis    which is used to fetch link map offsets.  It will only be set
87b725ae77Skettenis    by solib-legacy.c, if at all. */
88b725ae77Skettenis extern struct link_map_offsets *(*legacy_svr4_fetch_link_map_offsets_hook)(void);
89b725ae77Skettenis 
90b725ae77Skettenis /* Fetch (and possibly build) an appropriate `struct link_map_offsets'
91b725ae77Skettenis    for ILP32 and LP64 SVR4 systems.  */
92b725ae77Skettenis extern struct link_map_offsets *svr4_ilp32_fetch_link_map_offsets (void);
93b725ae77Skettenis extern struct link_map_offsets *svr4_lp64_fetch_link_map_offsets (void);
94*11efff7fSkettenis 
95*11efff7fSkettenis #endif /* solib-svr4.h */
96