summaryrefslogtreecommitdiff
path: root/sysdeps/x86_64/rtld-strcmp.S
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2009-07-26 16:10:00 -0700
committerUlrich Drepper <drepper@redhat.com>2009-07-26 16:10:00 -0700
commit16d2ea4c821502948d193a152c8b151f5497a0d3 (patch)
treeb2e680691addcd8cbfc8f4be5d0d6d7ca27baf49 /sysdeps/x86_64/rtld-strcmp.S
parentdc8e5eb6edc936647b8135e7176df5455e5ff112 (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.S28
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))