On Fri, May 20, 2016 at 10:15 AM, Rainer Orth <r...@cebitec.uni-bielefeld.de> wrote: > "H.J. Lu" <hjl.to...@gmail.com> writes: > >> On Thu, May 12, 2016 at 10:54 AM, H.J. Lu <hjl.to...@gmail.com> wrote: >>>>> Here is a patch to add >>>>> -mgeneral-regs-only option to x86 backend. We can update >>>>> spec for interrupt handle to recommend compiling interrupt handler >>>>> with -mgeneral-regs-only option and add a note for compiler >>>>> implementers. >>>>> >>>>> OK for trunk if there is no regression? >>>> >>>> >>>> I can't comment on the code patch, but for the documentation part: >>>> >>>>> @@ -24242,6 +24242,12 @@ opcodes, to mitigate against certain forms of >>>>> attack. At the moment, >>>>> this option is limited in what it can do and should not be relied >>>>> on to provide serious protection. >>>>> >>>>> +@item -mgeneral-regs-only >>>>> +@opindex mgeneral-regs-only >>>>> +Generate code which uses only the general-purpose registers. This will >>>> >>>> >>>> s/which/that/ >>>> >>>>> +prevent the compiler from using floating-point, vector, mask and bound >>>> >>>> >>>> s/will prevent/prevents/ >>>> >>>>> +registers, but will not impose any restrictions on the assembler. >>>> >>>> >>>> Maybe you mean to say "does not restrict use of those registers in inline >>>> assembly code"? In any case, please get rid of the future tense here, too. >>> >>> I changed it to >>> >>> --- >>> @item -mgeneral-regs-only >>> @opindex mgeneral-regs-only >>> Generate code that uses only the general-purpose registers. This >>> prevents the compiler from using floating-point, vector, mask and bound >>> registers. >>> --- >>> >> >> Here is the updated patch. Tested on x86-64. OK for trunk? > > This patch broke {i386,x86_64}-apple-darwin15.5.0 bootstrap: > > In file included from ./tm.h:16:0, > from /vol/gcc/src/hg/trunk/local/gcc/genattrtab.c:108: > ./options.h:5443:2: error: #error too many target masks > #error too many target masks > ^ > Makefile:2497: recipe for target 'build/genattrtab.o' failed > make[3]: *** [build/genattrtab.o] Error 1 > > options.h has > > #define OPTION_MASK_ISA_XSAVES (HOST_WIDE_INT_1 << 62) > #error too many target masks > > The tree bootstraps just fine at the previous revision. >
Tested on x86-64. OK for trunk? -- H.J.
From 174ef61afa610d7721d290a8a61136f86fa3987f Mon Sep 17 00:00:00 2001 From: "H.J. Lu" <hjl.to...@gmail.com> Date: Fri, 20 May 2016 10:45:12 -0700 Subject: [PATCH] Use flag_general_regs_only with -mgeneral-regs-only Since we run out of bits in target_flags for x86 Darwin targets, use flag_general_regs_only instead of target_flags. * config/i386/i386.c (ix86_option_override_internal): Check x_flag_general_regs_only instead of MASK_GENERAL_REGS_ONLY. * config/i386/i386.opt (-mgeneral-regs-only): Replace GENERAL_REGS_ONLY with flag_general_regs_only. --- gcc/config/i386/i386.c | 2 +- gcc/config/i386/i386.opt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 29a7941..e9b5182 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -5339,7 +5339,7 @@ ix86_option_override_internal (bool main_args_p, /* Don't enable x87 instructions if only the general registers are allowed. */ - if (!(opts_set->x_target_flags & MASK_GENERAL_REGS_ONLY) + if (!opts->x_flag_general_regs_only && !(opts_set->x_target_flags & MASK_80387)) { if (processor_alias_table[i].flags & PTA_NO_80387) diff --git a/gcc/config/i386/i386.opt b/gcc/config/i386/i386.opt index d12b29a..0fc7cf0 100644 --- a/gcc/config/i386/i386.opt +++ b/gcc/config/i386/i386.opt @@ -899,5 +899,5 @@ Target Var(flag_mitigate_rop) Init(0) Attempt to avoid generating instruction sequences containing ret bytes. mgeneral-regs-only -Target Report RejectNegative Mask(GENERAL_REGS_ONLY) Save +Target Report RejectNegative Var(flag_general_regs_only) Init(0) Generate code which uses only the general registers. -- 2.5.5