From: Hiroshi Shimamoto <[email protected]>
Make and use macro FIX_EFLAGS, instead of immediate value 0x40DD5 in
ia32_restore_sigcontext().
Signed-off-by: Hiroshi Shimamoto <[email protected]>
---
arch/x86/ia32/ia32_signal.c | 13 ++++++++++++-
1 files changed, 12 insertions(+), 1 deletions(-)
diff --git a/arch/x86/ia32/ia32_signal.c b/arch/x86/ia32/ia32_signal.c
index cb3856a..7cf50cb 100644
--- a/arch/x86/ia32/ia32_signal.c
+++ b/arch/x86/ia32/ia32_signal.c
@@ -36,6 +36,17 @@
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
+#define __FIX_EFLAGS (X86_EFLAGS_AC | X86_EFLAGS_OF | \
+ X86_EFLAGS_DF | X86_EFLAGS_TF | X86_EFLAGS_SF | \
+ X86_EFLAGS_ZF | X86_EFLAGS_AF | X86_EFLAGS_PF | \
+ X86_EFLAGS_CF)
+
+#ifdef CONFIG_X86_32
+# define FIX_EFLAGS (__FIX_EFLAGS | X86_EFLAGS_RF)
+#else
+# define FIX_EFLAGS __FIX_EFLAGS
+#endif
+
asmlinkage int do_signal(struct pt_regs *regs, sigset_t *oldset);
void signal_fault(struct pt_regs *regs, void __user *frame, char *where);
@@ -248,7 +259,7 @@ static int ia32_restore_sigcontext(struct pt_regs *regs,
regs->ss |= 3;
err |= __get_user(tmpflags, &sc->flags);
- regs->flags = (regs->flags & ~0x40DD5) | (tmpflags & 0x40DD5);
+ regs->flags = (regs->flags & ~FIX_EFLAGS) | (tmpflags & FIX_EFLAGS);
/* disable syscall checks */
regs->orig_ax = -1;
--
1.5.4.1
Hiroshi Shimamoto wrote:
> From: Hiroshi Shimamoto <[email protected]>
>
> Make and use macro FIX_EFLAGS, instead of immediate value 0x40DD5 in
> ia32_restore_sigcontext().
>
> +
> +#ifdef CONFIG_X86_32
> +# define FIX_EFLAGS (__FIX_EFLAGS | X86_EFLAGS_RF)
> +#else
> +# define FIX_EFLAGS __FIX_EFLAGS
> +#endif
> +
Where did this come from? First of all, this is in a 64-bit-only file,
so CONFIG_X86_32 will never be set; second of all, it seems a bit fishy
that these should be different.
-hpa
H. Peter Anvin wrote:
> Hiroshi Shimamoto wrote:
>> From: Hiroshi Shimamoto <[email protected]>
>>
>> Make and use macro FIX_EFLAGS, instead of immediate value 0x40DD5 in
>> ia32_restore_sigcontext().
>>
>> +
>> +#ifdef CONFIG_X86_32
>> +# define FIX_EFLAGS (__FIX_EFLAGS | X86_EFLAGS_RF)
>> +#else
>> +# define FIX_EFLAGS __FIX_EFLAGS
>> +#endif
>> +
>
> Where did this come from? First of all, this is in a 64-bit-only file,
> so CONFIG_X86_32 will never be set; second of all, it seems a bit fishy
> that these should be different.
It came from arch/x86/kernel/signal_64.c. (And signal_32.c has the same one.)
And yes, CONFIG_X86_32 is not set, I compiled and compare the results,
the macro was replaced by 0x40dd5, no RF.
I guess, someone made it same on signal_32.c and signal_64.c.
Thanks,
Hiroshi Shimamoto
Hiroshi Shimamoto wrote:
> H. Peter Anvin wrote:
>> Hiroshi Shimamoto wrote:
>>> From: Hiroshi Shimamoto <[email protected]>
>>>
>>> Make and use macro FIX_EFLAGS, instead of immediate value 0x40DD5 in
>>> ia32_restore_sigcontext().
>>>
>>> +
>>> +#ifdef CONFIG_X86_32
>>> +# define FIX_EFLAGS (__FIX_EFLAGS | X86_EFLAGS_RF)
>>> +#else
>>> +# define FIX_EFLAGS __FIX_EFLAGS
>>> +#endif
>>> +
>> Where did this come from? First of all, this is in a 64-bit-only file,
>> so CONFIG_X86_32 will never be set; second of all, it seems a bit fishy
>> that these should be different.
>
> It came from arch/x86/kernel/signal_64.c. (And signal_32.c has the same one.)
> And yes, CONFIG_X86_32 is not set, I compiled and compare the results,
> the macro was replaced by 0x40dd5, no RF.
> I guess, someone made it same on signal_32.c and signal_64.c.
>
Yes, it's working toward unification (and ia32signal.c is obviously also
a candidate for unification.) However, please make that a separate patch.
-hpa
H. Peter Anvin wrote:
> Hiroshi Shimamoto wrote:
>> H. Peter Anvin wrote:
>>> Hiroshi Shimamoto wrote:
>>>> From: Hiroshi Shimamoto <[email protected]>
>>>>
>>>> Make and use macro FIX_EFLAGS, instead of immediate value 0x40DD5 in
>>>> ia32_restore_sigcontext().
>>>>
>>>> +
>>>> +#ifdef CONFIG_X86_32
>>>> +# define FIX_EFLAGS (__FIX_EFLAGS | X86_EFLAGS_RF)
>>>> +#else
>>>> +# define FIX_EFLAGS __FIX_EFLAGS
>>>> +#endif
>>>> +
>>> Where did this come from? First of all, this is in a 64-bit-only file,
>>> so CONFIG_X86_32 will never be set; second of all, it seems a bit fishy
>>> that these should be different.
>> It came from arch/x86/kernel/signal_64.c. (And signal_32.c has the same one.)
>> And yes, CONFIG_X86_32 is not set, I compiled and compare the results,
>> the macro was replaced by 0x40dd5, no RF.
>> I guess, someone made it same on signal_32.c and signal_64.c.
>>
>
> Yes, it's working toward unification (and ia32signal.c is obviously also
> a candidate for unification.) However, please make that a separate patch.
OK. Will do.
Thanks,
Hiroshi Shimamoto
From: Hiroshi Shimamoto <[email protected]>
Make and use macro FIX_EFLAGS, instead of immediate value 0x40DD5 in
ia32_restore_sigcontext().
Signed-off-by: Hiroshi Shimamoto <[email protected]>
---
arch/x86/ia32/ia32_signal.c | 7 ++++++-
1 files changed, 6 insertions(+), 1 deletions(-)
diff --git a/arch/x86/ia32/ia32_signal.c b/arch/x86/ia32/ia32_signal.c
index cb3856a..dc9b9b9 100644
--- a/arch/x86/ia32/ia32_signal.c
+++ b/arch/x86/ia32/ia32_signal.c
@@ -36,6 +36,11 @@
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
+#define FIX_EFLAGS (X86_EFLAGS_AC | X86_EFLAGS_OF | \
+ X86_EFLAGS_DF | X86_EFLAGS_TF | X86_EFLAGS_SF | \
+ X86_EFLAGS_ZF | X86_EFLAGS_AF | X86_EFLAGS_PF | \
+ X86_EFLAGS_CF)
+
asmlinkage int do_signal(struct pt_regs *regs, sigset_t *oldset);
void signal_fault(struct pt_regs *regs, void __user *frame, char *where);
@@ -248,7 +253,7 @@ static int ia32_restore_sigcontext(struct pt_regs *regs,
regs->ss |= 3;
err |= __get_user(tmpflags, &sc->flags);
- regs->flags = (regs->flags & ~0x40DD5) | (tmpflags & 0x40DD5);
+ regs->flags = (regs->flags & ~FIX_EFLAGS) | (tmpflags & FIX_EFLAGS);
/* disable syscall checks */
regs->orig_ax = -1;
--
1.5.4.1
* Hiroshi Shimamoto <[email protected]> wrote:
> From: Hiroshi Shimamoto <[email protected]>
>
> Make and use macro FIX_EFLAGS, instead of immediate value 0x40DD5 in
> ia32_restore_sigcontext().
applied to tip/x86/cleanups - thanks!
Ingo