1 /* 2 * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 #ifndef _PICO_BINARY_INFO_DEFS_H 8 #define _PICO_BINARY_INFO_DEFS_H 9 10 // this file is for pre-processor definitions only 11 12 // should be found within the first 256 bytes of the real binary (i.e. after the flash second stage if a flash binary) 13 // 14 // Note the layout is: 15 // 16 // addr : BINARY_INFO_MARKER_START 17 // addr+0x04 : __binary_info_start 18 // addr+0x08 : __binary_info_end 19 // addr+0x0c : __address_mapping_table 20 // addr+0x10 | BINARY_INFO_MARKER_END 21 // 22 // __binary_info_start to __binary_info_end are the start, end (non inclusive) of an array 23 // of pointers to binary_info_t structures 24 // 25 // __address_mapping_table is an array of the following items: 26 // 27 // uint32_t source_addr_start 28 // uint32_t dest_addr_start 29 // uint32_t dest_addr_end 30 // 31 // representing a mapping from the stored address in the binary/flash to addresses at runtime. 32 // The linker will store pointers within the binary using their runtime values, however because of 33 // "AT" mapping in the link script these addresses actually correspond to a different address in the binary 34 // image. This mapping (which in the case of crt0.S is simply the data copy table used at initialization 35 // to copy data into its runtime location) can be used by picotool or others to reverse the mapping to find data 36 // within the binary. 37 // 38 // Note the above array is terminated with a NULL source_addr_start 39 40 #define BINARY_INFO_MARKER_START 0x7188ebf2 41 #define BINARY_INFO_MARKER_END 0xe71aa390 42 43 #endif 44