From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LKZG7-0005q7-Ck for qemu-devel@nongnu.org; Wed, 07 Jan 2009 09:19:47 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LKZG3-0005oZ-Aq for qemu-devel@nongnu.org; Wed, 07 Jan 2009 09:19:44 -0500 Received: from [199.232.76.173] (port=56841 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LKZG1-0005o6-BY for qemu-devel@nongnu.org; Wed, 07 Jan 2009 09:19:41 -0500 Received: from savannah.gnu.org ([199.232.41.3]:51039 helo=sv.gnu.org) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1LKZG1-0001b9-1x for qemu-devel@nongnu.org; Wed, 07 Jan 2009 09:19:41 -0500 Received: from cvs.savannah.gnu.org ([199.232.41.69]) by sv.gnu.org with esmtp (Exim 4.63) (envelope-from ) id 1LKZFz-00036F-Vo for qemu-devel@nongnu.org; Wed, 07 Jan 2009 14:19:40 +0000 Received: from edgar_igl by cvs.savannah.gnu.org with local (Exim 4.63) (envelope-from ) id 1LKZFz-00036B-Fj for qemu-devel@nongnu.org; Wed, 07 Jan 2009 14:19:39 +0000 MIME-Version: 1.0 Errors-To: edgar_igl Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: "Edgar E. Iglesias" Message-Id: Date: Wed, 07 Jan 2009 14:19:39 +0000 Subject: [Qemu-devel] [6210] CRIS: Implement set_thread_area for CRIS. Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Revision: 6210 http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=6210 Author: edgar_igl Date: 2009-01-07 14:19:38 +0000 (Wed, 07 Jan 2009) Log Message: ----------- CRIS: Implement set_thread_area for CRIS. Signed-off-by: Edgar E. Iglesias Modified Paths: -------------- trunk/linux-user/syscall.c trunk/target-cris/cpu.h trunk/tests/cris/Makefile Added Paths: ----------- trunk/tests/cris/check_settls1.c Modified: trunk/linux-user/syscall.c =================================================================== --- trunk/linux-user/syscall.c 2009-01-07 14:00:33 UTC (rev 6209) +++ trunk/linux-user/syscall.c 2009-01-07 14:19:38 UTC (rev 6210) @@ -5912,6 +5912,14 @@ ((CPUMIPSState *) cpu_env)->tls_value = arg1; ret = 0; break; +#elif defined(TARGET_CRIS) + if (arg1 & 0xff) + ret = -TARGET_EINVAL; + else { + ((CPUCRISState *) cpu_env)->pregs[PR_PID] = arg1; + ret = 0; + } + break; #elif defined(TARGET_I386) && defined(TARGET_ABI32) ret = do_set_thread_area(cpu_env, arg1); break; Modified: trunk/target-cris/cpu.h =================================================================== --- trunk/target-cris/cpu.h 2009-01-07 14:00:33 UTC (rev 6209) +++ trunk/target-cris/cpu.h 2009-01-07 14:19:38 UTC (rev 6210) @@ -225,6 +225,11 @@ } #endif +static inline void cpu_set_tls(CPUCRISState *env, target_ulong newtls) +{ + env->pregs[PR_PID] = (env->pregs[PR_PID] & 0xff) | newtls; +} + /* Support function regs. */ #define SFR_RW_GC_CFG 0][0 #define SFR_RW_MM_CFG env->pregs[PR_SRS]][0 Modified: trunk/tests/cris/Makefile =================================================================== --- trunk/tests/cris/Makefile 2009-01-07 14:00:33 UTC (rev 6209) +++ trunk/tests/cris/Makefile 2009-01-07 14:19:38 UTC (rev 6210) @@ -117,8 +117,8 @@ TESTCASES += check_sigalrm.ctst TESTCASES += check_time1.ctst TESTCASES += check_time2.ctst +TESTCASES += check_settls1.ctst - TESTCASES += check_gcctorture_pr28634-1.ctst #TESTCASES += check_gcctorture_pr28634.ctst Added: trunk/tests/cris/check_settls1.c =================================================================== --- trunk/tests/cris/check_settls1.c (rev 0) +++ trunk/tests/cris/check_settls1.c 2009-01-07 14:19:38 UTC (rev 6210) @@ -0,0 +1,39 @@ +#include +#include +#include +#include + +#include + +#ifndef SYS_set_thread_area +#define SYS_set_thread_area 243 +#endif + +int main (void) +{ + unsigned long tp; + int ret; + + ret = syscall (SYS_set_thread_area, 0xf0); + if (ret != -1 || errno != EINVAL) { + perror ("Invalid thread area accepted:"); + abort(); + } + + ret = syscall (SYS_set_thread_area, 0xeddeed00); + if (ret != 0) { + perror ("Valid thread area not accepted: "); + abort (); + } + + asm ("move $pid,%0" : "=r" (tp)); + tp &= ~0xff; + + if (tp != 0xeddeed00) { + perror ("tls2"); + abort (); + } + + printf ("pass\n"); + return EXIT_SUCCESS; +}