From ec55a5e7bb3e615726dfb633d134b2bacee138f2 Mon Sep 17 00:00:00 2001 From: Julian Seward Date: Fri, 5 Aug 2005 02:15:18 +0000 Subject: [PATCH] Fix up do_syscall_clone_ppc32_linux. Seems to improve thread exiting. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4327 --- coregrind/m_syswrap/syswrap-ppc32-linux.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c index 245104af96..a90077dd58 100644 --- a/coregrind/m_syswrap/syswrap-ppc32-linux.c +++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c @@ -312,7 +312,7 @@ static Int start_thread_NORETURN ( void* arg ) void* arg in r6 pid_t* child_tid in r7 pid_t* parent_tid in r8 - void* tls_ptr in r9 + void* ??? in r9 System call requires: @@ -320,8 +320,9 @@ static Int start_thread_NORETURN ( void* arg ) int flags in r3 (sc arg1) void* child_stack in r4 (sc arg2) pid_t* parent_tid in r5 (sc arg3) - pid_t* child_tid in r6 (sc arg4) - void* tls_ptr in r7 (sc arg5) + ?? child_tls in r6 (sc arg4) + pid_t* child_tid in r7 (sc arg5) + void* ??? in r8 (sc arg6) Returns an Int encoded in the linux-ppc32 way, not a SysRes. */ @@ -359,8 +360,10 @@ asm( " mr 3,5\n" // syscall arg1: flags // r4 already setup // syscall arg2: child_stack " mr 5,8\n" // syscall arg3: parent_tid -" mr 6,7\n" // syscall arg4: child_tid -" mr 7,9\n" // syscall arg5: tls_ptr +" mr 6,2\n" // syscall arg4: REAL THREAD tls +" mr 7,7\n" // syscall arg5: child_tid +" mr 8,8\n" // syscall arg6: ???? +" mr 9,9\n" // syscall arg7: ???? " sc\n" // clone() @@ -486,7 +489,7 @@ static SysRes do_clone ( ThreadId ptid, ctst->client_stack_szB = ctst->client_stack_highest_word - seg->addr; if (debug) - VG_(printf)("tid %d: guessed client stack range %p-%p\n", + VG_(printf)("\ntid %d: guessed client stack range %p-%p\n", ctid, seg->addr, VG_PGROUNDUP(sp)); } else { VG_(message)(Vg_UserMsg, "!? New thread %d starts with R1(%p) unmapped\n", @@ -1438,10 +1441,10 @@ PRE(sys_clone) PRINT("sys_clone ( %x, %p, %p, %p, %p )",ARG1,ARG2,ARG3,ARG4,ARG5); PRE_REG_READ5(int, "clone", unsigned long, flags, - void *, child_stack, - int *, parent_tidptr, - void *, child_tls, - int *, child_tidptr); + void *, child_stack, + int *, parent_tidptr, + void *, child_tls, + int *, child_tidptr); if (ARG1 & VKI_CLONE_PARENT_SETTID) { PRE_MEM_WRITE("clone(parent_tidptr)", ARG3, sizeof(Int)); -- 2.47.3