1 /* Copyright (C) 2009-2023 Free Software Foundation, Inc. 2 Contributed by ARM Ltd. 3 4 This file is part of GDB. 5 6 This program is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 3 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 18 19 #ifndef NAT_AARCH64_LINUX_H 20 #define NAT_AARCH64_LINUX_H 21 22 #include <signal.h> 23 24 /* Defines ps_err_e, struct ps_prochandle. */ 25 #include "gdb_proc_service.h" 26 27 typedef int compat_int_t; 28 typedef unsigned int compat_uptr_t; 29 30 typedef int compat_time_t; 31 typedef int compat_timer_t; 32 typedef int compat_clock_t; 33 34 struct compat_timeval 35 { 36 compat_time_t tv_sec; 37 int tv_usec; 38 }; 39 40 typedef union compat_sigval 41 { 42 compat_int_t sival_int; 43 compat_uptr_t sival_ptr; 44 } compat_sigval_t; 45 46 typedef struct compat_siginfo 47 { 48 int si_signo; 49 int si_errno; 50 int si_code; 51 52 union 53 { 54 int _pad[((128 / sizeof (int)) - 3)]; 55 56 /* kill() */ 57 struct 58 { 59 unsigned int _pid; 60 unsigned int _uid; 61 } _kill; 62 63 /* POSIX.1b timers */ 64 struct 65 { 66 compat_timer_t _tid; 67 int _overrun; 68 compat_sigval_t _sigval; 69 } _timer; 70 71 /* POSIX.1b signals */ 72 struct 73 { 74 unsigned int _pid; 75 unsigned int _uid; 76 compat_sigval_t _sigval; 77 } _rt; 78 79 /* SIGCHLD */ 80 struct 81 { 82 unsigned int _pid; 83 unsigned int _uid; 84 int _status; 85 compat_clock_t _utime; 86 compat_clock_t _stime; 87 } _sigchld; 88 89 /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */ 90 struct 91 { 92 unsigned int _addr; 93 } _sigfault; 94 95 /* SIGPOLL */ 96 struct 97 { 98 int _band; 99 int _fd; 100 } _sigpoll; 101 } _sifields; 102 } compat_siginfo_t; 103 104 #define cpt_si_pid _sifields._kill._pid 105 #define cpt_si_uid _sifields._kill._uid 106 #define cpt_si_timerid _sifields._timer._tid 107 #define cpt_si_overrun _sifields._timer._overrun 108 #define cpt_si_status _sifields._sigchld._status 109 #define cpt_si_utime _sifields._sigchld._utime 110 #define cpt_si_stime _sifields._sigchld._stime 111 #define cpt_si_ptr _sifields._rt._sigval.sival_ptr 112 #define cpt_si_addr _sifields._sigfault._addr 113 #define cpt_si_band _sifields._sigpoll._band 114 #define cpt_si_fd _sifields._sigpoll._fd 115 116 void aarch64_siginfo_from_compat_siginfo (siginfo_t *to, 117 compat_siginfo_t *from); 118 void aarch64_compat_siginfo_from_siginfo (compat_siginfo_t *to, 119 siginfo_t *from); 120 121 void aarch64_linux_prepare_to_resume (struct lwp_info *lwp); 122 123 void aarch64_linux_new_thread (struct lwp_info *lwp); 124 125 /* Function to call when a thread is being deleted. */ 126 void aarch64_linux_delete_thread (struct arch_lwp_info *arch_lwp); 127 128 ps_err_e aarch64_ps_get_thread_area (struct ps_prochandle *ph, 129 lwpid_t lwpid, int idx, void **base, 130 int is_64bit_p); 131 132 /* Return the number of TLS registers in the NT_ARM_TLS set. This is only 133 used for aarch64 state. */ 134 int aarch64_tls_register_count (int tid); 135 136 #endif /* NAT_AARCH64_LINUX_H */ 137