mirror of
https://github.com/apple/swift.git
synced 2026-03-04 18:24:35 +01:00
Fix a couple of typos and remove some `print()` statements that were added for debugging. rdar://101623384
267 lines
4.9 KiB
C++
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
|
|
|