2006-07-27 Arjan van de Ven <arjan@linux.intel.com>

* config/i386/i386.md (stack_tls_protect_set_di) Use %gs rather than
	%fs for -mcmodel=kernel.
	(stack_tls_protect_test_di): Likewise.

	* testsuite/gcc.target/i386/stack-prot-kernel.c: New test.

From-SVN: r115782
This commit is contained in:
Arjan van de Ven 2006-07-27 23:12:08 +00:00 committed by Christopher Faylor
parent ab7efd9148
commit fa6adcab9d
4 changed files with 40 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2006-07-27 Arjan van de Ven <arjan@linux.intel.com>
* config/i386/i386.md (stack_tls_protect_set_di) Use %gs rather than
%fs for -mcmodel=kernel.
(stack_tls_protect_test_di): Likewise.
2006-07-27 Carlos O'Donell <carlos@codesourcery.com>
* Makefile.in: Use mkinstalldirs.

View File

@ -20393,7 +20393,15 @@
(set (match_scratch:DI 2 "=&r") (const_int 0))
(clobber (reg:CC FLAGS_REG))]
"TARGET_64BIT"
"mov{q}\t{%%fs:%P1, %2|%2, QWORD PTR %%fs:%P1}\;mov{q}\t{%2, %0|%0, %2}\;xor{l}\t%k2, %k2"
{
/* The kernel uses a different segment register for performance reasons; a
system call would not have to trash the userspace segment register,
which would be expensive */
if (ix86_cmodel != CM_KERNEL)
return "mov{q}\t{%%fs:%P1, %2|%2, QWORD PTR %%fs:%P1}\;mov{q}\t{%2, %0|%0, %2}\;xor{l}\t%k2, %k2";
else
return "mov{q}\t{%%gs:%P1, %2|%2, QWORD PTR %%gs:%P1}\;mov{q}\t{%2, %0|%0, %2}\;xor{l}\t%k2, %k2";
}
[(set_attr "type" "multi")])
(define_expand "stack_protect_test"
@ -20461,7 +20469,15 @@
UNSPEC_SP_TLS_TEST))
(clobber (match_scratch:DI 3 "=r"))]
"TARGET_64BIT"
"mov{q}\t{%1, %3|%3, %1}\;xor{q}\t{%%fs:%P2, %3|%3, QWORD PTR %%fs:%P2}"
{
/* The kernel uses a different segment register for performance reasons; a
system call would not have to trash the userspace segment register,
which would be expensive */
if (ix86_cmodel != CM_KERNEL)
return "mov{q}\t{%1, %3|%3, %1}\;xor{q}\t{%%fs:%P2, %3|%3, QWORD PTR %%fs:%P2}";
else
return "mov{q}\t{%1, %3|%3, %1}\;xor{q}\t{%%gs:%P2, %3|%3, QWORD PTR %%gs:%P2}";
}
[(set_attr "type" "multi")])
(include "sse.md")

View File

@ -1,3 +1,7 @@
2006-07-27 Arjan van de Ven <arjan@linux.intel.com>
* gcc.target/i386/stack-prot-kernel.c: New test.
2006-07-27 Roger Sayle <roger@eyesopen.com>
* gcc.dg/builtins-55.c: New test case.

View File

@ -0,0 +1,12 @@
/* { dg-do compile { target lp64 } } */
/* { dg-options "-O2 -fstack-protector-all -mcmodel=kernel" } */
void test1 (int x)
{
char p[40];
int i;
for (i=0; i<40; i++)
p[i] = x;
}
/* { dg-final { scan-assembler-not "%fs" } } */