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