From 7d51a5cbc8c44482cd5735bab1c364038c6e8e08 Mon Sep 17 00:00:00 2001 From: Petar Jovanovic Date: Fri, 28 Apr 2017 12:53:00 +0000 Subject: [PATCH] mips: add missing assembler directives to please Clang 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 | 1 + coregrind/m_syscall.c | 69 ++++++++++++++++++++++------------------ 2 files changed, 39 insertions(+), 31 deletions(-) diff --git a/coregrind/m_libcsetjmp.c b/coregrind/m_libcsetjmp.c index 39d6415dba..c7f8f45a84 100644 --- a/coregrind/m_libcsetjmp.c +++ b/coregrind/m_libcsetjmp.c @@ -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 */ diff --git a/coregrind/m_syscall.c b/coregrind/m_syscall.c index 308fcfef7c..2a9dd781e3 100644 --- a/coregrind/m_syscall.c +++ b/coregrind/m_syscall.c @@ -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) -- 2.47.2