| /* Copyright (C) 2009-2024 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 NAT_AARCH64_LINUX_H |
| #define 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 /* NAT_AARCH64_LINUX_H */ |