| /* Copyright (C) 2008-2025 Free Software Foundation, Inc. | 
 |  | 
 |    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_WINDOWS_TDEP_H | 
 | #define GDB_WINDOWS_TDEP_H | 
 |  | 
 | #include "frame-unwind.h" | 
 |  | 
 | struct gdbarch; | 
 |  | 
 | extern struct cmd_list_element *info_w32_cmdlist; | 
 |  | 
 | extern void init_w32_command_list (void); | 
 |  | 
 | extern void windows_xfer_shared_library (const char* so_name, | 
 | 					 CORE_ADDR load_addr, | 
 | 					 CORE_ADDR *text_offset_cached, | 
 | 					 struct gdbarch *gdbarch, | 
 | 					 std::string &xml); | 
 |  | 
 | extern ULONGEST windows_core_xfer_shared_libraries (struct gdbarch *gdbarch, | 
 | 						    gdb_byte *readbuf, | 
 | 						    ULONGEST offset, | 
 | 						    ULONGEST len); | 
 |  | 
 | extern std::string windows_core_pid_to_str (struct gdbarch *gdbarch, | 
 | 					    ptid_t ptid); | 
 |  | 
 | /* To be called from the various GDB_OSABI_WINDOWS handlers for the | 
 |    various Windows architectures and machine types.  */ | 
 |  | 
 | extern void windows_init_abi (struct gdbarch_info info, | 
 | 			      struct gdbarch *gdbarch); | 
 |  | 
 | /* To be called from the various GDB_OSABI_CYGWIN handlers for the | 
 |    various Windows architectures and machine types.  */ | 
 |  | 
 | extern void cygwin_init_abi (struct gdbarch_info info, | 
 | 			     struct gdbarch *gdbarch); | 
 |  | 
 | /* Return true if the Portable Executable behind ABFD uses the Cygwin dll | 
 |    (cygwin1.dll).  */ | 
 |  | 
 | extern bool is_linked_with_cygwin_dll (bfd *abfd); | 
 |  | 
 | /* Cygwin sigwapper unwinder.  Unwinds signal frames over | 
 |    sigbe/sigdelayed.  */ | 
 |  | 
 | class cygwin_sigwrapper_frame_unwind : public frame_unwind | 
 | { | 
 | public: | 
 |   explicit cygwin_sigwrapper_frame_unwind | 
 |     (gdb::array_view<const gdb::array_view<const gdb_byte>> patterns_list); | 
 |  | 
 |   /* Architecture-specific list of instruction patterns to match. | 
 |      It's a list of patterns instead of single pattern because some | 
 |      architectures want to match more than one function | 
 |      (sigbe/sigdelayed & friends).  Each potential instruction | 
 |      sequence is assumed to be followed by 4 bytes for tls::stackptr. | 
 |      If any pattern in the list matches, then the frame is assumed to | 
 |      be a sigwrapper frame.  */ | 
 |   gdb::array_view<const gdb::array_view<const gdb_byte>> patterns_list; | 
 |  | 
 |   /* Calculate the frame ID of a cygwin wrapper.  */ | 
 |   void this_id (const frame_info_ptr &this_frame, void **this_prologue_cache, | 
 | 		struct frame_id *id) const override; | 
 |  | 
 |   /* Sniff the frame to tell if this unwinder should be used.  */ | 
 |   int sniff (const frame_info_ptr &this_frame, | 
 | 	       void **this_prologue_cache) const override; | 
 |  | 
 |   /* Calculate the value of a given register in the previous frame.  */ | 
 |   struct value *prev_register (const frame_info_ptr &this_frame, | 
 | 			       void **this_cache, | 
 | 			       int regnum) const override; | 
 | }; | 
 |  | 
 | #endif /* GDB_WINDOWS_TDEP_H */ |