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