]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
mips: add missing assembler directives to please Clang
authorPetar Jovanovic <mips32r2@gmail.com>
Fri, 28 Apr 2017 12:53:00 +0000 (12:53 +0000)
committerPetar Jovanovic <mips32r2@gmail.com>
Fri, 28 Apr 2017 12:53:00 +0000 (12:53 +0000)
Add missing assembler directives in VG_MINIMAL_SETJMP() and
do_syscall_WRK().
Minor rewrite of do_syscall_WRK() to use delay slots.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16316

coregrind/m_libcsetjmp.c
coregrind/m_syscall.c

index 39d6415dba10cf62f188a584661d0dd0bc97e140..c7f8f45a84ef78765681101e7f36df656ca0a0dd 100644 (file)
@@ -575,6 +575,7 @@ __asm__(
 "   nop                         \n\t"
 ".previous                      \n\t"
 "                               \n\t"
+".text                          \n\t"
 ".globl VG_MINIMAL_LONGJMP;     \n\t"
 ".align 2;                      \n\t"
 "VG_MINIMAL_LONGJMP:            \n\t"  /* a0 = jmp_buf */
index 308fcfef7cd845821d537f77bcb1e45b51c71205..2a9dd781e344b3809f524e5280de620ddbbf9fc9 100644 (file)
@@ -790,42 +790,49 @@ extern int do_syscall_WRK (
           int a4, int a5, int a6, int syscall_no, UWord *err,
           UWord *valHi, UWord* valLo
        );
-asm(
-".globl do_syscall_WRK\n"
-".ent do_syscall_WRK\n"
-".text\n"
-"do_syscall_WRK:\n"   
-"   lw $2, 24($29)\n"    
-"   syscall\n"
-"   lw $8, 28($29)\n" 
-"   sw $7, ($8)\n"
-"   lw $8, 32($29)\n" 
-"   sw $3, ($8)\n"   // store valHi
-"   lw $8, 36($29)\n" 
-"   sw $2, ($8)\n"   // store valLo
-"   jr $31\n"
-"   nop\n"
-".previous\n"
-".end do_syscall_WRK\n"
+asm (
+   ".text                                  \n\t"
+   ".globl do_syscall_WRK                  \n\t"
+   ".type  do_syscall_WRK, @function       \n\t"
+   ".set push                              \n\t"
+   ".set noreorder                         \n\t"
+   "do_syscall_WRK:                        \n\t"
+   "   lw $2, 24($29)                      \n\t"
+   "   syscall                             \n\t"
+   "   lw $8, 28($29)                      \n\t"
+   "   sw $7, ($8)                         \n\t"
+   "   lw $8, 32($29)                      \n\t"
+   "   sw $3, ($8)                         \n\t" /* store valHi */
+   "   lw $8, 36($29)                      \n\t"
+   "   jr $31                              \n\t"
+   "   sw $2, ($8)                         \n\t" /* store valLo */
+   ".size do_syscall_WRK, .-do_syscall_WRK \n\t"
+   ".set pop                               \n\t"
+   ".previous                              \n\t"
 );
 
 #elif defined(VGP_mips64_linux)
 extern UWord do_syscall_WRK ( UWord a1, UWord a2, UWord a3, UWord a4, UWord a5,
-                              UWord a6, UWord syscall_no, ULong* V1_val );
+                              UWord a6, UWord syscall_no, ULong* V1_A3_val );
 asm (
-".text\n"
-".globl do_syscall_WRK\n"
-"do_syscall_WRK:\n"
-"   daddiu $29, $29, -8\n"
-"   sd $11, 0($29)\n"
-"   move $2, $10\n"
-"   syscall\n"
-"   ld $11, 0($29)\n"
-"   daddiu $29, $29, 8\n"
-"   sd $3, 0($11)\n"  /* store vale of v1 in last param */
-"   sd $7, 8($11)\n"  /* store vale of a3 in last param */
-"   jr $31\n"
-".previous\n"
+   ".text                                  \n\t"
+   ".globl do_syscall_WRK                  \n\t"
+   ".type  do_syscall_WRK, @function       \n\t"
+   ".set push                              \n\t"
+   ".set noreorder                         \n\t"
+   "do_syscall_WRK:                        \n\t"
+   "   daddiu $29, $29, -8                 \n\t"
+   "   sd $11, 0($29)                      \n\t"
+   "   move $2, $10                        \n\t"
+   "   syscall                             \n\t"
+   "   ld $11, 0($29)                      \n\t"
+   "   daddiu $29, $29, 8                  \n\t"
+   "   sd $3, 0($11)                       \n\t" /* store v1 in last param */
+   "   jr $31                              \n\t"
+   "   sd $7, 8($11)                       \n\t" /* store a3 in last param */
+   ".size do_syscall_WRK, .-do_syscall_WRK \n\t"
+   ".set pop                               \n\t"
+   ".previous                              \n\t"
 );
 
 #elif defined(VGP_tilegx_linux)