diff options
author | Ulrich Drepper <drepper@redhat.com> | 2009-07-26 16:10:00 -0700 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2009-07-26 16:10:00 -0700 |
commit | 16d2ea4c821502948d193a152c8b151f5497a0d3 (patch) | |
tree | b2e680691addcd8cbfc8f4be5d0d6d7ca27baf49 /sysdeps/x86_64/rtld-strcmp.S | |
parent | dc8e5eb6edc936647b8135e7176df5455e5ff112 (diff) |
Make sure no code in ld.so uses xmm/ymm registers on x86-64.
This patch introduces a test to make sure no function modifies the
xmm/ymm registers. With the exception of the auditing functions.
The test is probably too pessimistic. All code linked into ld.so
is checked. Perhaps at some point the callgraph starting from
_dl_fixup and _dl_profile_fixup is checked and we can start using
faster SSE-using functions in parts of ld.so.
Diffstat (limited to 'sysdeps/x86_64/rtld-strcmp.S')
-rw-r--r-- | sysdeps/x86_64/rtld-strcmp.S | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/sysdeps/x86_64/rtld-strcmp.S b/sysdeps/x86_64/rtld-strcmp.S new file mode 100644 index 0000000000..a25535c161 --- /dev/null +++ b/sysdeps/x86_64/rtld-strcmp.S @@ -0,0 +1,28 @@ +#include <sysdep.h> +#include "asm-syntax.h" +#include "bp-sym.h" +#include "bp-asm.h" + +#ifndef LABEL +#define LABEL(l) L(l) +#endif + + .text +ENTRY (BP_SYM (STRCMP)) +/* Simple version since we can't use SSE registers in ld.so. */ +L(oop): movb (%rdi), %al + cmpb (%rsi), %al + jne L(neq) + incq %rdi + incq %rsi + testb %al, %al + jnz L(oop) + + xorl %eax, %eax + ret + +L(neq): movl $1, %eax + movl $-1, %ecx + cmovbl %ecx, %eax + ret +END (BP_SYM (STRCMP)) |