xref: /xnu-12377.41.6/osfmk/kdp/core_notes.h (revision bbb1b6f9e71b8cdde6e5cd6f4841f207dee3d828)
1*bbb1b6f9SApple OSS Distributions /*
2*bbb1b6f9SApple OSS Distributions  * Copyright (c) 2022 Apple Computer, Inc. All rights reserved.
3*bbb1b6f9SApple OSS Distributions  *
4*bbb1b6f9SApple OSS Distributions  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5*bbb1b6f9SApple OSS Distributions  *
6*bbb1b6f9SApple OSS Distributions  * This file contains Original Code and/or Modifications of Original Code
7*bbb1b6f9SApple OSS Distributions  * as defined in and that are subject to the Apple Public Source License
8*bbb1b6f9SApple OSS Distributions  * Version 2.0 (the 'License'). You may not use this file except in
9*bbb1b6f9SApple OSS Distributions  * compliance with the License. The rights granted to you under the License
10*bbb1b6f9SApple OSS Distributions  * may not be used to create, or enable the creation or redistribution of,
11*bbb1b6f9SApple OSS Distributions  * unlawful or unlicensed copies of an Apple operating system, or to
12*bbb1b6f9SApple OSS Distributions  * circumvent, violate, or enable the circumvention or violation of, any
13*bbb1b6f9SApple OSS Distributions  * terms of an Apple operating system software license agreement.
14*bbb1b6f9SApple OSS Distributions  *
15*bbb1b6f9SApple OSS Distributions  * Please obtain a copy of the License at
16*bbb1b6f9SApple OSS Distributions  * http://www.opensource.apple.com/apsl/ and read it before using this file.
17*bbb1b6f9SApple OSS Distributions  *
18*bbb1b6f9SApple OSS Distributions  * The Original Code and all software distributed under the License are
19*bbb1b6f9SApple OSS Distributions  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20*bbb1b6f9SApple OSS Distributions  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21*bbb1b6f9SApple OSS Distributions  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22*bbb1b6f9SApple OSS Distributions  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23*bbb1b6f9SApple OSS Distributions  * Please see the License for the specific language governing rights and
24*bbb1b6f9SApple OSS Distributions  * limitations under the License.
25*bbb1b6f9SApple OSS Distributions  *
26*bbb1b6f9SApple OSS Distributions  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27*bbb1b6f9SApple OSS Distributions  */
28*bbb1b6f9SApple OSS Distributions 
29*bbb1b6f9SApple OSS Distributions /* Common LC_NOTE defintions for core files. */
30*bbb1b6f9SApple OSS Distributions #ifndef _CORE_NOTES_H_
31*bbb1b6f9SApple OSS Distributions #define _CORE_NOTES_H_
32*bbb1b6f9SApple OSS Distributions 
33*bbb1b6f9SApple OSS Distributions /*
34*bbb1b6f9SApple OSS Distributions  * Format of the "main bin spec" LC_NOTE payload as expected by LLDB
35*bbb1b6f9SApple OSS Distributions  */
36*bbb1b6f9SApple OSS Distributions #define MAIN_BIN_SPEC_DATA_OWNER "main bin spec"
37*bbb1b6f9SApple OSS Distributions 
38*bbb1b6f9SApple OSS Distributions typedef struct main_bin_spec_note {
39*bbb1b6f9SApple OSS Distributions 	uint32_t version;       // currently 1
40*bbb1b6f9SApple OSS Distributions 	uint32_t type;          // 0 == unspecified, 1 == kernel, 2 == user process, 3 == standalone (ie FW)
41*bbb1b6f9SApple OSS Distributions 	uint64_t address;       // UINT64_MAX if address not specified
42*bbb1b6f9SApple OSS Distributions 	uuid_t   uuid;          // all zeros if uuid not specified
43*bbb1b6f9SApple OSS Distributions 	uint32_t log2_pagesize; // process page size in log base 2, e.g. 4k pages are 12. 0 for unspecified
44*bbb1b6f9SApple OSS Distributions 	uint32_t unused;        // leave set to 0
45*bbb1b6f9SApple OSS Distributions } __attribute__((packed)) main_bin_spec_note_t;
46*bbb1b6f9SApple OSS Distributions 
47*bbb1b6f9SApple OSS Distributions #define MAIN_BIN_SPEC_VERSION 1
48*bbb1b6f9SApple OSS Distributions #define MAIN_BIN_SPEC_TYPE_KERNEL 1
49*bbb1b6f9SApple OSS Distributions #define MAIN_BIN_SPEC_TYPE_USER 2
50*bbb1b6f9SApple OSS Distributions #define MAIN_BIN_SPEC_TYPE_STANDALONE 3
51*bbb1b6f9SApple OSS Distributions 
52*bbb1b6f9SApple OSS Distributions 
53*bbb1b6f9SApple OSS Distributions /*
54*bbb1b6f9SApple OSS Distributions  * Format of the "load binary" LC_NOTE payload as expected by LLDB
55*bbb1b6f9SApple OSS Distributions  */
56*bbb1b6f9SApple OSS Distributions #define LOAD_BINARY_SPEC_DATA_OWNER "load binary"
57*bbb1b6f9SApple OSS Distributions 
58*bbb1b6f9SApple OSS Distributions #define LOAD_BINARY_NAME_BUF_SIZE 32
59*bbb1b6f9SApple OSS Distributions typedef struct load_binary_spec_note {
60*bbb1b6f9SApple OSS Distributions 	uint32_t version;    // currently 1
61*bbb1b6f9SApple OSS Distributions 	uuid_t   uuid;       // all zeroes if uuid not specified
62*bbb1b6f9SApple OSS Distributions 	uint64_t address;    // virtual address where the macho is loaded, UINT64_MAX if unavail
63*bbb1b6f9SApple OSS Distributions 	uint64_t slide;      // UINT64_MAX if slide not specified/unknown
64*bbb1b6f9SApple OSS Distributions 	                     // 0 if there is no slide (the binary loaded at
65*bbb1b6f9SApple OSS Distributions 	                     // the vmaddr in the file)
66*bbb1b6f9SApple OSS Distributions 	/*
67*bbb1b6f9SApple OSS Distributions 	 * name_cstring must be a NUL terminated C string, or empty ('\0')
68*bbb1b6f9SApple OSS Distributions 	 * if unavailable.  NOTE: lldb's spec does not specify a length
69*bbb1b6f9SApple OSS Distributions 	 * for the name, it just wants a NUL terminated string. But we
70*bbb1b6f9SApple OSS Distributions 	 * specify a (maximum) length to avoid notes with dynamic length.
71*bbb1b6f9SApple OSS Distributions 	 */
72*bbb1b6f9SApple OSS Distributions 	char     name_cstring[LOAD_BINARY_NAME_BUF_SIZE];
73*bbb1b6f9SApple OSS Distributions } __attribute__((packed)) load_binary_spec_note_t;
74*bbb1b6f9SApple OSS Distributions 
75*bbb1b6f9SApple OSS Distributions #define LOAD_BINARY_SPEC_VERSION 1
76*bbb1b6f9SApple OSS Distributions 
77*bbb1b6f9SApple OSS Distributions /*
78*bbb1b6f9SApple OSS Distributions  * Format of the "addrable bits" LC_NOTE payload as expected by LLDB.
79*bbb1b6f9SApple OSS Distributions  */
80*bbb1b6f9SApple OSS Distributions #define ADDRABLE_BITS_DATA_OWNER "addrable bits"
81*bbb1b6f9SApple OSS Distributions 
82*bbb1b6f9SApple OSS Distributions typedef struct addrable_bits_note {
83*bbb1b6f9SApple OSS Distributions 	uint32_t version;            // CURRENTLY 3
84*bbb1b6f9SApple OSS Distributions 	uint32_t addressing_bits;    // # of bits in use for addressing
85*bbb1b6f9SApple OSS Distributions 	uint64_t unused;             // zeroed
86*bbb1b6f9SApple OSS Distributions } __attribute__((packed)) addrable_bits_note_t;
87*bbb1b6f9SApple OSS Distributions 
88*bbb1b6f9SApple OSS Distributions #define ADDRABLE_BITS_VER 3
89*bbb1b6f9SApple OSS Distributions 
90*bbb1b6f9SApple OSS Distributions 
91*bbb1b6f9SApple OSS Distributions #define PANIC_CONTEXT_DATA_OWNER "panic context"
92*bbb1b6f9SApple OSS Distributions 
93*bbb1b6f9SApple OSS Distributions typedef struct panic_context_note {
94*bbb1b6f9SApple OSS Distributions 	uuid_string_t kernel_uuid_string;
95*bbb1b6f9SApple OSS Distributions } __attribute__((packed)) panic_context_note_t;
96*bbb1b6f9SApple OSS Distributions 
97*bbb1b6f9SApple OSS Distributions #endif /* _CORE_NOTES_H_ */
98