2017-06-28 10:11:05 -05:00
/*
* Copyright ( C ) 2017 Josh Poimboeuf < jpoimboe @ redhat . com >
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; either version 2
* of the License , or ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , see < http : //www.gnu.org/licenses/>.
*/
# ifndef _CHECK_H
# define _CHECK_H
# include <stdbool.h>
# include "elf.h"
2017-06-28 10:11:07 -05:00
# include "cfi.h"
2017-06-28 10:11:05 -05:00
# include "arch.h"
# include <linux/hashtable.h>
2017-06-28 10:11:07 -05:00
struct insn_state {
struct cfi_reg cfa ;
struct cfi_reg regs [ CFI_NUM_REGS ] ;
int stack_size ;
bool bp_scratch ;
bool drap ;
int drap_reg ;
} ;
2017-06-28 10:11:05 -05:00
struct instruction {
struct list_head list ;
struct hlist_node hash ;
struct section * sec ;
unsigned long offset ;
2017-06-28 10:11:07 -05:00
unsigned int len ;
2017-06-28 10:11:05 -05:00
unsigned char type ;
unsigned long immediate ;
2017-06-28 10:11:07 -05:00
bool alt_group , visited , dead_end , ignore ;
2017-06-28 10:11:05 -05:00
struct symbol * call_dest ;
struct instruction * jump_dest ;
struct list_head alts ;
struct symbol * func ;
2017-06-28 10:11:07 -05:00
struct stack_op stack_op ;
struct insn_state state ;
2017-06-28 10:11:05 -05:00
} ;
struct objtool_file {
struct elf * elf ;
struct list_head insn_list ;
DECLARE_HASHTABLE ( insn_hash , 16 ) ;
struct section * rodata , * whitelist ;
bool ignore_unreachables , c_file ;
} ;
int check ( const char * objname , bool nofp ) ;
2017-06-28 10:11:07 -05:00
# define for_each_insn(file, insn) \
list_for_each_entry ( insn , & file - > insn_list , list )
2017-06-28 10:11:05 -05:00
# endif /* _CHECK_H */