Messages in this thread | | | Date | Mon, 18 May 2020 12:50:45 -0700 | From | Matt Helsley <> | Subject | Re: [RFC][PATCH 4/5] objtool: Enable compilation of objtool for all architectures |
| |
On Fri, May 15, 2020 at 03:56:10PM -0500, Josh Poimboeuf wrote: > On Mon, May 11, 2020 at 10:35:12AM -0700, Matt Helsley wrote: > > +struct insn_state { > > + struct cfi_reg cfa; > > + struct cfi_reg regs[CFI_NUM_REGS]; > > + int stack_size; > > + unsigned char type; > > + bool bp_scratch; > > + bool drap, end, uaccess, df; > > + bool noinstr; > > + s8 instr; > > + unsigned int uaccess_stack; > > + int drap_reg, drap_offset; > > + struct cfi_reg vals[CFI_NUM_REGS]; > > +}; > > + > > +struct instruction { > > + struct list_head list; > > + struct hlist_node hash; > > + struct section *sec; > > + unsigned long offset; > > + unsigned int len; > > + enum insn_type type; > > + unsigned long immediate; > > + bool alt_group, dead_end, ignore, hint, save, restore, ignore_alts; > > + bool retpoline_safe; > > + s8 instr; > > + u8 visited; > > + struct symbol *call_dest; > > + struct instruction *jump_dest; > > + struct instruction *first_jump_src; > > + struct rela *jump_table; > > + struct list_head alts; > > + struct symbol *func; > > + struct stack_op stack_op; > > + struct insn_state state; > > + struct orc_entry orc; > > +}; > > Why were these moved to arch.h? They're not necessarily arch-specific, > but rather "check"-specific, so I think they still belong in check.h, if > possible.
Ah, found it. They are arch specific due to struct orc_entry, which is presently not defined for any archs besides x86.
Prior to the patch (-> means "includes"): check.h -> asm/orc_types.h (defines struct orc_entry) orc_gen.c -> check,h
After patch: check.c -> asm/orc_types.h orc_gen.c -> asm/orc_types.h orc_gen.c -> check.h orc_gen.c -> arch.h { now weak.c } -> check.h
So this prevents the headers, which help us keep the weak definitions consistent with the strong definitions, from breaking compiles on archs that lack struct orc_entry.
I'm not sure what the best way to remove this dependency is without a nasty void * for the orc entry, or some #ifdef games related to checking for cpp defines from asm/orc_types.h. This approach neatly avoids conditional preprocessor games and type casting though I do agree it's surprising.
Do you have any advice here?
Cheers, -Matt Helsley
| |