]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
ppc32-linux only: redirect strcmp right from the start.
authorJulian Seward <jseward@acm.org>
Sat, 1 Oct 2005 19:12:08 +0000 (19:12 +0000)
committerJulian Seward <jseward@acm.org>
Sat, 1 Oct 2005 19:12:08 +0000 (19:12 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4841

coregrind/m_redir.c
coregrind/m_trampoline.S
coregrind/pub_core_trampoline.h

index b69572fa4268e0f0309a7c36274243c2c39e8bae..493125862a653a193e72c88e8dd46698a51cf17d 100644 (file)
@@ -360,7 +360,6 @@ void VG_(setup_code_redirect_table) ( void )
       0xFFFFFFFFFF600000ULL,
       (Addr)&VG_(amd64_linux_REDIR_FOR_vgettimeofday) 
    );
-
    add_redirect_addr_to_addr( 
       0xFFFFFFFFFF600400ULL,
       (Addr)&VG_(amd64_linux_REDIR_FOR_vtime) 
@@ -372,6 +371,10 @@ void VG_(setup_code_redirect_table) ( void )
       "soname:ld.so.1", "strlen",
       (Addr)&VG_(ppc32_linux_REDIR_FOR_strlen)
    );   
+   add_redirect_sym_to_addr(
+      "soname:ld.so.1", "strcmp",
+      (Addr)&VG_(ppc32_linux_REDIR_FOR_strcmp)
+   );   
 
 #else
 #  error Unknown platform
index 2f9d46d264b70718d245ea9f60b03c680d0cb2c2..2d0ceb64a1c6fa32d28010cf3868c42aa541d7a2 100644 (file)
@@ -159,16 +159,53 @@ VG_(ppc32_linux_REDIR_FOR_strlen):
         lbz 4,0(3)
         li 9,0
         cmpwi 0,4,0
-        beq- 0,.L8
-.L9:
+        beq- 0,.L18
+.L19:
         lbzu 5,1(3)
         addi 9,9,1
         cmpwi 0,5,0
-        bne+ 0,.L9
-.L8:
+        bne+ 0,.L19
+.L18:
         mr 3,9
         blr
 
+/* Ditto strcmp */
+.global VG_(ppc32_linux_REDIR_FOR_strcmp)
+VG_(ppc32_linux_REDIR_FOR_strcmp):
+.L20:
+        lbz 0,0(3)
+        cmpwi 7,0,0
+        bne- 7,.L21
+        lbz 0,0(4)
+        li 11,0
+        cmpwi 7,0,0
+        beq- 7,.L22
+.L21:
+        lbz 0,0(3)
+        li 11,-1
+        cmpwi 7,0,0
+        beq- 7,.L22
+        lbz 0,0(4)
+        li 11,1
+        cmpwi 7,0,0
+        beq- 7,.L22
+        lbz 9,0(3)
+        lbz 0,0(4)
+        li 11,-1
+        cmplw 7,9,0
+        blt- 7,.L22
+        lbz 9,0(3)
+        lbz 0,0(4)
+        li 11,1
+        addi 3,3,1
+        addi 4,4,1
+        cmplw 7,9,0
+        ble+ 7,.L20
+.L22:
+        mr 3,11
+        blr
+
+
 .global VG_(trampoline_stuff_end)
 VG_(trampoline_stuff_end):
 
index 93467feae01b82058877353bdbd228f0b672bea7..666e1482a64b4b576072108c719e64b77f1b60e8 100644 (file)
@@ -61,6 +61,7 @@ extern void VG_(amd64_linux_REDIR_FOR_vtime);
 
 #if defined(VGP_ppc32_linux)
 extern UInt VG_(ppc32_linux_REDIR_FOR_strlen)( void* );
+extern UInt VG_(ppc32_linux_REDIR_FOR_strcmp)( void*, void* );
 #endif
  
 #endif   // __PUB_CORE_TRAMPOLINE_H