forked from apple/swift
/
CrashInfo.h
98 lines (78 loc) · 2.39 KB
/
CrashInfo.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
//===--- CrashInfo.h - Swift Backtracing Crash Information ------*- 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
//
//===----------------------------------------------------------------------===//
//
// Defines the CrashInfo type that holds information about why the program
// crashed.
//
//===----------------------------------------------------------------------===//
#ifndef SWIFT_CRASHINFO_H
#define SWIFT_CRASHINFO_H
#include <inttypes.h>
#ifdef __cplusplus
namespace swift {
namespace runtime {
namespace backtrace {
extern "C" {
#endif
// Note: The "pointers" below are pointers in a different process's address
// space, which might not even share our bitness. That is why they are
// `uint64_t`s, rather than pointers or `uintptr_t`s.
// The address of this structure in memory is passed to swift-backtrace.
struct CrashInfo {
// The thread ID for the crashing thread.
uint64_t crashing_thread;
// The signal number corresponding to this crash.
uint64_t signal;
// The fault address.
uint64_t fault_address;
#ifdef __APPLE__
// Points to the mcontext_t structure for the crashing thread; other
// threads' contexts can be recovered using Mach APIs later.
uint64_t mctx;
#elif defined(__linux__)
// The head of the thread list; points at a "struct thread" (see below).
uint64_t thread_list;
#endif
};
#ifdef __linux__
// A memory server request packet.
struct memserver_req {
// Address to read.
uint64_t addr;
// Number of bytes to read.
uint64_t len;
};
// A memory server response packet.
struct memserver_resp {
// Address that was read from.
uint64_t addr;
// Number of bytes, *or* negative to indicate an error.
int64_t len;
// Followed by len bytes of data if len > 0
};
// Holds details of a running thread.
struct thread {
// Points at the next thread.
uint64_t next;
// The thread ID for this thread.
int64_t tid;
// Points to the Linux ucontext_t structure.
uint64_t uctx;
};
#endif
#ifdef __cplusplus
} // extern "C"
} // namespace backtrace
} // namespace runtime
} // namespace swift
#endif
#endif // SWIFT_CRASHINFO_H