1 /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 /* 3 * Copyright (C) 2017 Josh Poimboeuf <jpoimboe@redhat.com> 4 */ 5 #ifndef _ORC_LOOKUP_H 6 #define _ORC_LOOKUP_H 7 8 /* 9 * This is a lookup table for speeding up access to the .orc_unwind table. 10 * Given an input address offset, the corresponding lookup table entry 11 * specifies a subset of the .orc_unwind table to search. 12 * 13 * Each block represents the end of the previous range and the start of the 14 * next range. An extra block is added to give the last range an end. 15 * 16 * The block size should be a power of 2 to avoid a costly 'div' instruction. 17 * 18 * A block size of 256 was chosen because it roughly doubles unwinder 19 * performance while only adding ~5% to the ORC data footprint. 20 */ 21 #define LOOKUP_BLOCK_ORDER 8 22 #define LOOKUP_BLOCK_SIZE (1 << LOOKUP_BLOCK_ORDER) 23 24 #ifndef LINKER_SCRIPT 25 26 extern unsigned int orc_lookup[]; 27 extern unsigned int orc_lookup_end[]; 28 29 #define LOOKUP_START_IP (unsigned long)_stext 30 #define LOOKUP_STOP_IP (unsigned long)_etext 31 32 #endif /* LINKER_SCRIPT */ 33 34 #endif /* _ORC_LOOKUP_H */ 35