Commit | Line | Data |
---|---|---|
4aa995e1 PA |
1 | /* Target-dependent code for GNU/Linux, architecture independent. |
2 | ||
3666a048 | 3 | Copyright (C) 2009-2021 Free Software Foundation, Inc. |
4aa995e1 PA |
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 | |
9 | the Free Software Foundation; either version 3 of the License, or | |
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 | |
18 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ | |
19 | ||
20 | #ifndef LINUX_TDEP_H | |
21 | #define LINUX_TDEP_H | |
22 | ||
6432734d | 23 | #include "bfd.h" |
187b041e | 24 | #include "displaced-stepping.h" |
6432734d | 25 | |
187b041e | 26 | struct inferior; |
6432734d UW |
27 | struct regcache; |
28 | ||
43564574 WT |
29 | /* Enum used to define the extra fields of the siginfo type used by an |
30 | architecture. */ | |
31 | enum linux_siginfo_extra_field_values | |
32 | { | |
33 | /* Add bound fields into the segmentation fault field. */ | |
34 | LINUX_SIGINFO_FIELD_ADDR_BND = 1 | |
35 | }; | |
36 | ||
37 | /* Defines a type for the values defined in linux_siginfo_extra_field_values. */ | |
38 | DEF_ENUM_FLAGS_TYPE (enum linux_siginfo_extra_field_values, | |
39 | linux_siginfo_extra_fields); | |
40 | ||
190b495d WT |
41 | /* This function is suitable for architectures that |
42 | extend/override the standard siginfo in a specific way. */ | |
43 | struct type *linux_get_siginfo_type_with_fields (struct gdbarch *gdbarch, | |
44 | linux_siginfo_extra_fields); | |
45 | ||
1e735120 LM |
46 | /* Return true if ADDRESS is within the boundaries of a page mapped with |
47 | memory tagging protection. */ | |
48 | bool linux_address_in_memtag_page (CORE_ADDR address); | |
49 | ||
6432734d UW |
50 | typedef char *(*linux_collect_thread_registers_ftype) (const struct regcache *, |
51 | ptid_t, | |
52 | bfd *, char *, int *, | |
2ea28649 | 53 | enum gdb_signal); |
6432734d | 54 | |
eb14d406 SDJ |
55 | extern enum gdb_signal linux_gdb_signal_from_target (struct gdbarch *gdbarch, |
56 | int signal); | |
57 | ||
58 | extern int linux_gdb_signal_to_target (struct gdbarch *gdbarch, | |
59 | enum gdb_signal signal); | |
60 | ||
906d60cf PA |
61 | /* Default GNU/Linux implementation of `displaced_step_location', as |
62 | defined in gdbarch.h. Determines the entry point from AT_ENTRY in | |
63 | the target auxiliary vector. */ | |
64 | extern CORE_ADDR linux_displaced_step_location (struct gdbarch *gdbarch); | |
65 | ||
187b041e SM |
66 | |
67 | /* Implementation of gdbarch_displaced_step_prepare. */ | |
68 | ||
69 | extern displaced_step_prepare_status linux_displaced_step_prepare | |
70 | (gdbarch *arch, thread_info *thread, CORE_ADDR &displaced_pc); | |
71 | ||
72 | /* Implementation of gdbarch_displaced_step_finish. */ | |
73 | ||
74 | extern displaced_step_finish_status linux_displaced_step_finish | |
75 | (gdbarch *arch, thread_info *thread, gdb_signal sig); | |
76 | ||
77 | /* Implementation of gdbarch_displaced_step_copy_insn_closure_by_addr. */ | |
78 | ||
79 | extern const displaced_step_copy_insn_closure * | |
80 | linux_displaced_step_copy_insn_closure_by_addr | |
81 | (inferior *inf, CORE_ADDR addr); | |
82 | ||
83 | /* Implementation of gdbarch_displaced_step_restore_all_in_ptid. */ | |
84 | ||
85 | extern void linux_displaced_step_restore_all_in_ptid (inferior *parent_inf, | |
86 | ptid_t ptid); | |
87 | ||
88 | extern void linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch, | |
480af54c | 89 | int num_disp_step_buffers); |
a5ee0f0c | 90 | |
c01cbb3d YQ |
91 | extern int linux_is_uclinux (void); |
92 | ||
0f83012e AH |
93 | /* Fetch the AT_HWCAP entry from the auxv vector for the given TARGET. On |
94 | error, 0 is returned. */ | |
95 | extern CORE_ADDR linux_get_hwcap (struct target_ops *target); | |
96 | ||
97 | /* Fetch the AT_HWCAP2 entry from the auxv vector for the given TARGET. On | |
98 | error, 0 is returned. */ | |
99 | extern CORE_ADDR linux_get_hwcap2 (struct target_ops *target); | |
100 | ||
4aa995e1 | 101 | #endif /* linux-tdep.h */ |