Files
swift-mirror/stdlib/public/RuntimeModule/modules/OS/Windows.h
Alastair Houghton 54f9cee919 [Backtracing] Fix typos, tidy up.
Fix a couple of typos and remove some `print()` statements that
were added for debugging.

rdar://101623384
2026-02-03 18:23:30 +00:00

267 lines
4.9 KiB
C++

//===--- Windows.h - Windows specifics --------------------------*- C++ -*-===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2023 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
//
// Windows specific includes and declarations.
//
//===----------------------------------------------------------------------===//
#ifndef SWIFT_BACKTRACING_WINDOWS_H
#define SWIFT_BACKTRACING_WINDOWS_H
#ifdef _WIN32
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
// The Windows headers unfortunately don't define the various context types
// in a reasonable manner (they're all defined as CONTEXT, and they don't
// have other names). Since we want all of them, we'll have to define our
// own variants here.
typedef struct {
uint64_t Low;
int64_t High;
} WIN32_M128A;
typedef struct {
uint16_t ControlWord;
uint16_t StatusWord;
uint8_t TagWord;
uint8_t Reserved1;
uint16_t ErrorOpcode;
uint32_t ErrorOffset;
uint16_t ErrorSelector;
uint16_t Reserved2;
uint32_t DataOffset;
uint16_t DataSelector;
uint16_t Reserved3;
uint32_t MxCsr;
uint32_t MxCsr_Mask;
WIN32_M128A FloatRegisters[8];
union {
struct {
WIN32_M128A XmmRegisters[16];
uint8_t Reserved4[96];
} AMD64;
struct {
WIN32_M128A XmmRegisters[8];
uint8_t Reserved4[224];
} I386;
};
} WIN32_XSAVE_FORMAT;
typedef struct {
uint64_t P1Home;
uint64_t P2Home;
uint64_t P3Home;
uint64_t P4Home;
uint64_t P5Home;
uint64_t P6Home;
uint32_t ContextFlags;
uint32_t MxCsr;
uint16_t SegCs;
uint16_t SegDs;
uint16_t SegEs;
uint16_t SegFs;
uint16_t SegGs;
uint16_t SegSs;
uint32_t EFlags;
uint64_t Dr0;
uint64_t Dr1;
uint64_t Dr2;
uint64_t Dr3;
uint64_t Dr6;
uint64_t Dr7;
uint64_t Rax;
uint64_t Rcx;
uint64_t Rdx;
uint64_t Rbx;
uint64_t Rsp;
uint64_t Rbp;
uint64_t Rsi;
uint64_t Rdi;
uint64_t R8;
uint64_t R9;
uint64_t R10;
uint64_t R11;
uint64_t R12;
uint64_t R13;
uint64_t R14;
uint64_t R15;
uint64_t Rip;
union {
WIN32_XSAVE_FORMAT FltSave;
struct {
WIN32_M128A HEader[2];
WIN32_M128A Legacy[8];
WIN32_M128A Xmm0;
WIN32_M128A Xmm1;
WIN32_M128A Xmm2;
WIN32_M128A Xmm3;
WIN32_M128A Xmm4;
WIN32_M128A Xmm5;
WIN32_M128A Xmm6;
WIN32_M128A Xmm7;
WIN32_M128A Xmm8;
WIN32_M128A Xmm9;
WIN32_M128A Xmm10;
WIN32_M128A Xmm11;
WIN32_M128A Xmm12;
WIN32_M128A Xmm13;
WIN32_M128A Xmm14;
WIN32_M128A Xmm15;
};
};
WIN32_M128A VectorRegister[26];
uint64_t VectorControl;
uint64_t DebugControl;
uint64_t LastBranchToRip;
uint64_t LastBranchFromRip;
uint64_t LastExceptionToRip;
uint64_t LastExceptionFromRip;
} WIN32_AMD64_CONTEXT;
typedef struct {
uint32_t ControlWord;
uint32_t StatusWord;
uint32_t TagWord;
uint32_t ErrorOffset;
uint32_t ErrorSelector;
uint32_t DataOffset;
uint32_t DataSelector;
uint8_t RegisterArea[80];
uint32_t Spare0;
} WIN32_I386_FLOATING_SAVE_AREA;
typedef struct {
uint32_t ContextFlags;
uint32_t Dr0;
uint32_t Dr1;
uint32_t Dr2;
uint32_t Dr3;
uint32_t Dr6;
uint32_t Dr7;
WIN32_I386_FLOATING_SAVE_AREA FloatSave;
uint32_t SegGs;
uint32_t SegFs;
uint32_t SegEs;
uint32_t SegDs;
uint32_t Edi;
uint32_t Esi;
uint32_t Ebx;
uint32_t Edx;
uint32_t Ecx;
uint32_t Eax;
uint32_t Ebp;
uint32_t Eip;
uint32_t SegCs;
uint32_t EFlags;
uint32_t Esp;
uint32_t SegSs;
uint8_t ExtendedRegisters[512];
} WIN32_I386_CONTEXT;
typedef union {
struct {
uint64_t Low;
int64_t High;
};
double D[2];
float S[4];
uint16_t W[8];
uint8_t B[16];
} WIN32_ARM64_NEON128;
typedef struct {
uint32_t ContextFlags;
uint32_t Cpsr;
uint64_t X[31];
uint64_t Sp;
uint64_t Pc;
WIN32_ARM64_NEON128 V[32];
uint32_t Fpcr;
uint32_t Fpsr;
uint32_t Bcr[8];
uint64_t Bvr[8];
uint32_t Wcr[2];
uint64_t Wvr[2];
} WIN32_ARM64_CONTEXT;
typedef struct {
uint64_t Low;
int64_t High;
} WIN32_NEON128;
typedef struct {
uint32_t ContextFlags;
uint32_t R0;
uint32_t R1;
uint32_t R2;
uint32_t R3;
uint32_t R4;
uint32_t R5;
uint32_t R6;
uint32_t R7;
uint32_t R8;
uint32_t R9;
uint32_t R10;
uint32_t R11;
uint32_t R12;
uint32_t Sp;
uint32_t Lr;
uint32_t Pc;
uint32_t Cpsr;
uint32_t Fpscr;
uint32_t Padding;
union {
WIN32_NEON128 Q[16];
uint64_t D[32];
uint32_t S[32];
};
uint32_t Bvr[8];
uint32_t Bcr[8];
uint32_t Wvr[1];
uint32_t Wcr[1];
uint32_t Padding2[2];
} WIN32_ARM_CONTEXT;
#ifdef __cplusplus
} // extern "C"
#endif
#endif // _WIN32
#endif // SWIFT_BACKTRACING_WINDOWS_H