mirror of https://gitee.com/openkylin/linux.git
42 lines
927 B
C
42 lines
927 B
C
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
/*
|
|
* Copyright (C) 2015 Josh Poimboeuf <jpoimboe@redhat.com>
|
|
*/
|
|
|
|
#ifndef _SPECIAL_H
|
|
#define _SPECIAL_H
|
|
|
|
#include <stdbool.h>
|
|
#include "check.h"
|
|
#include "elf.h"
|
|
|
|
#define C_JUMP_TABLE_SECTION ".rodata..c_jump_table"
|
|
|
|
struct special_alt {
|
|
struct list_head list;
|
|
|
|
bool group;
|
|
bool skip_orig;
|
|
bool skip_alt;
|
|
bool jump_or_nop;
|
|
|
|
struct section *orig_sec;
|
|
unsigned long orig_off;
|
|
|
|
struct section *new_sec;
|
|
unsigned long new_off;
|
|
|
|
unsigned int orig_len, new_len; /* group only */
|
|
};
|
|
|
|
int special_get_alts(struct elf *elf, struct list_head *alts);
|
|
|
|
void arch_handle_alternative(unsigned short feature, struct special_alt *alt);
|
|
|
|
bool arch_support_alt_relocation(struct special_alt *special_alt,
|
|
struct instruction *insn,
|
|
struct reloc *reloc);
|
|
struct reloc *arch_find_switch_table(struct objtool_file *file,
|
|
struct instruction *insn);
|
|
#endif /* _SPECIAL_H */
|