|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v8 2/7] x86: Clear AC bit in RFLAGS to protect Xen itself by SMAP
>>> On 09.05.14 at 11:32, <JBeulich@xxxxxxxx> wrote:
>>>> On 09.05.14 at 07:34, <feng.wu@xxxxxxxxx> wrote:
>> --- a/xen/include/asm-x86/asm_defns.h
>> +++ b/xen/include/asm-x86/asm_defns.h
>> @@ -190,7 +190,12 @@ static inline void stac(void)
>> #endif
>>
>> #ifdef __ASSEMBLY__
>> -.macro SAVE_ALL
>> +.macro SAVE_ALL op=0
>> +.if \op == CLAC
>> + ASM_CLAC
>> +.elseif \op == STAC
>> + ASM_STAC
>> +.endif
>
> If this really works with all assembler versions we support, that's of
> course fine; I wouldn't have thought this is being accepted by gas.
Just tried it out - it sort of works, but leverages what as far as I know
is undefined behavior: It ends up inserting undefined symbols CLAC
and STAC into the symbol table, which the linker is free to error out
on.
So instead of (just giving the example I experimented with)
.macro m1 a=0
.if \a == A
.byte 1
.elseif \a == B
.byte -1
.else
.byte 0
.endif
.endm
please use
.macro m2 a
.ifeqs "\a", "A"
.byte 2
.exitm
.endif
.ifeqs "\a", "B"
.byte -2
.exitm
.endif
.ifnb \a
.err
.endif
.endm
(except of course you can't use .exitm directly in SAVE_ALL, i.e. you
either need to use nested if/else constructs or a second helper macro.
Yet another option would be to simply use the concatenation ASM_\a
if \a is non-empty, but that would require ASM_STAC and ASM_CLAC to
become assembler equates or some such rather than C preprocessor
symbols.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |