]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/solib-svr4.h
Update copyright year range in all GDB files
[thirdparty/binutils-gdb.git] / gdb / solib-svr4.h
CommitLineData
13437d4b 1/* Handle shared libraries for GDB, the GNU Debugger.
e4bbbda8 2
3666a048 3 Copyright (C) 2000-2021 Free Software Foundation, Inc.
13437d4b
KB
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
13437d4b
KB
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
13437d4b 19
82b38f72
MK
20#ifndef SOLIB_SVR4_H
21#define SOLIB_SVR4_H
db1ea9ba 22
d0e449a1
SM
23#include "solist.h"
24
da3331ec 25struct objfile;
7d522c90
DJ
26struct target_so_ops;
27
28extern struct target_so_ops svr4_so_ops;
da3331ec 29
d0e449a1
SM
30/* Link map info to include in an allocated so_list entry. */
31
32struct lm_info_svr4 : public lm_info_base
33{
34 /* Amount by which addresses in the binary should be relocated to
35 match the inferior. The direct inferior value is L_ADDR_INFERIOR.
36 When prelinking is involved and the prelink base address changes,
37 we may need a different offset - the recomputed offset is in L_ADDR.
38 It is commonly the same value. It is cached as we want to warn about
39 the difference and compute it only once. L_ADDR is valid
40 iff L_ADDR_P. */
76e75227
SM
41 CORE_ADDR l_addr = 0, l_addr_inferior = 0;
42 bool l_addr_p = false;
d0e449a1
SM
43
44 /* The target location of lm. */
76e75227 45 CORE_ADDR lm_addr = 0;
d0e449a1
SM
46
47 /* Values read in from inferior's fields of the same name. */
76e75227 48 CORE_ADDR l_ld = 0, l_next = 0, l_prev = 0, l_name = 0;
d0e449a1
SM
49};
50
13437d4b
KB
51/* Critical offsets and sizes which describe struct r_debug and
52 struct link_map on SVR4-like targets. All offsets and sizes are
53 in bytes unless otherwise specified. */
54
55struct link_map_offsets
56 {
e4cd0d6a
MK
57 /* Offset and size of r_debug.r_version. */
58 int r_version_offset, r_version_size;
13437d4b 59
e4cd0d6a 60 /* Offset of r_debug.r_map. */
13437d4b
KB
61 int r_map_offset;
62
7cd25cfc
DJ
63 /* Offset of r_debug.r_brk. */
64 int r_brk_offset;
65
e4cd0d6a
MK
66 /* Offset of r_debug.r_ldsomap. */
67 int r_ldsomap_offset;
13437d4b
KB
68
69 /* Size of struct link_map (or equivalent), or at least enough of it
70 to be able to obtain the fields below. */
71 int link_map_size;
72
73 /* Offset to l_addr field in struct link_map. */
74 int l_addr_offset;
75
cc10cae3
AO
76 /* Offset to l_ld field in struct link_map. */
77 int l_ld_offset;
78
13437d4b
KB
79 /* Offset to l_next field in struct link_map. */
80 int l_next_offset;
81
13437d4b
KB
82 /* Offset to l_prev field in struct link_map. */
83 int l_prev_offset;
84
13437d4b
KB
85 /* Offset to l_name field in struct link_map. */
86 int l_name_offset;
13437d4b
KB
87 };
88
e5e2b9ff
KB
89/* set_solib_svr4_fetch_link_map_offsets() is intended to be called by
90 a <arch>_gdbarch_init() function. It is used to establish an
91 architecture specific link_map_offsets fetcher for the architecture
92 being defined. */
93
94extern void set_solib_svr4_fetch_link_map_offsets
95 (struct gdbarch *gdbarch, struct link_map_offsets *(*func) (void));
21479ded 96
550633cb
EZ
97/* This function is called by thread_db.c. Return the address of the
98 link map for the given objfile. */
99extern CORE_ADDR svr4_fetch_objfile_link_map (struct objfile *objfile);
100
e4bbbda8
MK
101/* Fetch (and possibly build) an appropriate `struct link_map_offsets'
102 for ILP32 and LP64 SVR4 systems. */
103extern struct link_map_offsets *svr4_ilp32_fetch_link_map_offsets (void);
104extern struct link_map_offsets *svr4_lp64_fetch_link_map_offsets (void);
db1ea9ba 105
7d522c90
DJ
106/* Return 1 if PC lies in the dynamic symbol resolution code of the
107 SVR4 run time loader. */
108int svr4_in_dynsym_resolve_code (CORE_ADDR pc);
109
82b38f72 110#endif /* solib-svr4.h */