|  | /* Copyright (C) 2009-2025 Free Software Foundation, Inc. | 
|  | Contributed by ARM Ltd. | 
|  |  | 
|  | This file is part of GDB. | 
|  |  | 
|  | This program is free software; you can redistribute it and/or modify | 
|  | it under the terms of the GNU General Public License as published by | 
|  | the Free Software Foundation; either version 3 of the License, or | 
|  | (at your option) any later version. | 
|  |  | 
|  | This program is distributed in the hope that it will be useful, | 
|  | but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|  | GNU General Public License for more details. | 
|  |  | 
|  | You should have received a copy of the GNU General Public License | 
|  | along with this program.  If not, see <http://www.gnu.org/licenses/>.  */ | 
|  |  | 
|  | #ifndef GDB_NAT_AARCH64_LINUX_H | 
|  | #define GDB_NAT_AARCH64_LINUX_H | 
|  |  | 
|  | #include <signal.h> | 
|  |  | 
|  | /* Defines ps_err_e, struct ps_prochandle.  */ | 
|  | #include "gdb_proc_service.h" | 
|  |  | 
|  | typedef int compat_int_t; | 
|  | typedef unsigned int compat_uptr_t; | 
|  |  | 
|  | typedef int compat_time_t; | 
|  | typedef int compat_timer_t; | 
|  | typedef int compat_clock_t; | 
|  |  | 
|  | struct compat_timeval | 
|  | { | 
|  | compat_time_t tv_sec; | 
|  | int tv_usec; | 
|  | }; | 
|  |  | 
|  | typedef union compat_sigval | 
|  | { | 
|  | compat_int_t sival_int; | 
|  | compat_uptr_t sival_ptr; | 
|  | } compat_sigval_t; | 
|  |  | 
|  | typedef struct compat_siginfo | 
|  | { | 
|  | int si_signo; | 
|  | int si_errno; | 
|  | int si_code; | 
|  |  | 
|  | union | 
|  | { | 
|  | int _pad[((128 / sizeof (int)) - 3)]; | 
|  |  | 
|  | /* kill() */ | 
|  | struct | 
|  | { | 
|  | unsigned int _pid; | 
|  | unsigned int _uid; | 
|  | } _kill; | 
|  |  | 
|  | /* POSIX.1b timers */ | 
|  | struct | 
|  | { | 
|  | compat_timer_t _tid; | 
|  | int _overrun; | 
|  | compat_sigval_t _sigval; | 
|  | } _timer; | 
|  |  | 
|  | /* POSIX.1b signals */ | 
|  | struct | 
|  | { | 
|  | unsigned int _pid; | 
|  | unsigned int _uid; | 
|  | compat_sigval_t _sigval; | 
|  | } _rt; | 
|  |  | 
|  | /* SIGCHLD */ | 
|  | struct | 
|  | { | 
|  | unsigned int _pid; | 
|  | unsigned int _uid; | 
|  | int _status; | 
|  | compat_clock_t _utime; | 
|  | compat_clock_t _stime; | 
|  | } _sigchld; | 
|  |  | 
|  | /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */ | 
|  | struct | 
|  | { | 
|  | unsigned int _addr; | 
|  | } _sigfault; | 
|  |  | 
|  | /* SIGPOLL */ | 
|  | struct | 
|  | { | 
|  | int _band; | 
|  | int _fd; | 
|  | } _sigpoll; | 
|  | } _sifields; | 
|  | } compat_siginfo_t; | 
|  |  | 
|  | #define cpt_si_pid _sifields._kill._pid | 
|  | #define cpt_si_uid _sifields._kill._uid | 
|  | #define cpt_si_timerid _sifields._timer._tid | 
|  | #define cpt_si_overrun _sifields._timer._overrun | 
|  | #define cpt_si_status _sifields._sigchld._status | 
|  | #define cpt_si_utime _sifields._sigchld._utime | 
|  | #define cpt_si_stime _sifields._sigchld._stime | 
|  | #define cpt_si_ptr _sifields._rt._sigval.sival_ptr | 
|  | #define cpt_si_addr _sifields._sigfault._addr | 
|  | #define cpt_si_band _sifields._sigpoll._band | 
|  | #define cpt_si_fd _sifields._sigpoll._fd | 
|  |  | 
|  | void aarch64_siginfo_from_compat_siginfo (siginfo_t *to, | 
|  | compat_siginfo_t *from); | 
|  | void aarch64_compat_siginfo_from_siginfo (compat_siginfo_t *to, | 
|  | siginfo_t *from); | 
|  |  | 
|  | void aarch64_linux_prepare_to_resume (struct lwp_info *lwp); | 
|  |  | 
|  | void aarch64_linux_new_thread (struct lwp_info *lwp); | 
|  |  | 
|  | /* Function to call when a thread is being deleted.  */ | 
|  | void aarch64_linux_delete_thread (struct arch_lwp_info *arch_lwp); | 
|  |  | 
|  | ps_err_e aarch64_ps_get_thread_area (struct ps_prochandle *ph, | 
|  | lwpid_t lwpid, int idx, void **base, | 
|  | int is_64bit_p); | 
|  |  | 
|  | /* Return the number of TLS registers in the NT_ARM_TLS set.  This is only | 
|  | used for aarch64 state.  */ | 
|  | int aarch64_tls_register_count (int tid); | 
|  |  | 
|  | #endif /* GDB_NAT_AARCH64_LINUX_H */ |