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