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