> Add -mindirect-branch-register to force indirect branch via register. > This is implemented by disabling patterns of indirect branch via memory, > similar to TARGET_X32. > > -mindirect-branch= and -mfunction-return= tests are updated with > -mno-indirect-branch-register to avoid false test failures when > -mindirect-branch-register is added to RUNTESTFLAGS for "make check". > > gcc/ > > * config/i386/constraints.md (Bs): Disallow memory operand for > -mindirect-branch-register. > (Bw): Likewise. > * config/i386/predicates.md (indirect_branch_operand): Likewise. > (GOT_memory_operand): Likewise. > (call_insn_operand): Likewise. > (sibcall_insn_operand): Likewise. > (GOT32_symbol_operand): Likewise. > * config/i386/i386.md (indirect_jump): Call convert_memory_address > for -mindirect-branch-register. > (tablejump): Likewise. > (*sibcall_memory): Likewise. > (*sibcall_value_memory): Likewise. > Disallow peepholes of indirect call and jump via memory for > -mindirect-branch-register. > (*call_pop): Replace m with Bw. > (*call_value_pop): Likewise. > (*sibcall_pop_memory): Replace m with Bs. > * config/i386/i386.opt (mindirect-branch-register): New option. > * doc/invoke.texi: Document -mindirect-branch-register option. > diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi > index df945989fe8..d16006e653a 100644 > --- a/gcc/doc/invoke.texi > +++ b/gcc/doc/invoke.texi > @@ -1230,7 +1230,8 @@ See RS/6000 and PowerPC Options. > -mstack-protector-guard-offset=@var{offset} @gol > -mstack-protector-guard-symbol=@var{symbol} -mmitigate-rop @gol > -mgeneral-regs-only -mcall-ms2sysv-xlogues @gol > --mindirect-branch=@var{choice} -mfunction-return==@var{choice}} > +-mindirect-branch=@var{choice} -mfunction-return==@var{choice} @gol > +-mindirect-branch-register} > > @emph{x86 Windows Options} > @gccoptlist{-mconsole -mcygwin -mno-cygwin -mdll @gol > @@ -26861,6 +26862,10 @@ object file. You can control this behavior for a > specific function by > using the function attribute @code{function_return}. > @xref{Function Attributes}. > > +@item -mindirect-branch-register > +@opindex -mindirect-branch-register > +Force indirect call and jump via register.
Again I think this option needs better documentation. It is not quite clear to me why it is needed at first place? Honza