This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Use flag_general_regs_only with -mgeneral-regs-only
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: Rainer Orth <ro at cebitec dot uni-bielefeld dot de>
- Cc: Sandra Loosemore <sandra at codesourcery dot com>, "Koval, Julia" <julia dot koval at intel dot com>, "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>, "Lu, Hongjiu" <hongjiu dot lu at intel dot com>, "vaalfreja at gmail dot com" <vaalfreja at gmail dot com>, "ubizjak at gmail dot com" <ubizjak at gmail dot com>, "law at redhat dot com" <law at redhat dot com>, "Zamyatin, Igor" <igor dot zamyatin at intel dot com>
- Date: Fri, 20 May 2016 10:49:49 -0700
- Subject: [PATCH] Use flag_general_regs_only with -mgeneral-regs-only
- Authentication-results: sourceware.org; auth=none
On Fri, May 20, 2016 at 10:15 AM, Rainer Orth
<ro@cebitec.uni-bielefeld.de> wrote:
> "H.J. Lu" <hjl.tools@gmail.com> writes:
>
>> On Thu, May 12, 2016 at 10:54 AM, H.J. Lu <hjl.tools@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.tools@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