From: <sv...@va...> - 2009-04-25 03:01:58
|
Author: njn Date: 2009-04-25 04:01:33 +0100 (Sat, 25 Apr 2009) New Revision: 9621 Log: Move int3-x86 into x86-linux/. Added: branches/DARWIN/memcheck/tests/x86-linux/int3-x86.c branches/DARWIN/memcheck/tests/x86-linux/int3-x86.stderr.exp branches/DARWIN/memcheck/tests/x86-linux/int3-x86.stdout.exp branches/DARWIN/memcheck/tests/x86-linux/int3-x86.vgtest Removed: branches/DARWIN/memcheck/tests/x86/int3-x86.c branches/DARWIN/memcheck/tests/x86/int3-x86.stderr.exp branches/DARWIN/memcheck/tests/x86/int3-x86.stdout.exp branches/DARWIN/memcheck/tests/x86/int3-x86.vgtest Modified: branches/DARWIN/memcheck/tests/x86-linux/Makefile.am branches/DARWIN/memcheck/tests/x86/Makefile.am Modified: branches/DARWIN/memcheck/tests/x86/Makefile.am =================================================================== --- branches/DARWIN/memcheck/tests/x86/Makefile.am 2009-04-25 00:07:37 UTC (rev 9620) +++ branches/DARWIN/memcheck/tests/x86/Makefile.am 2009-04-25 03:01:33 UTC (rev 9621) @@ -13,7 +13,6 @@ $(addsuffix .stderr.exp,$(INSN_TESTS)) \ $(addsuffix .stdout.exp,$(INSN_TESTS)) \ $(addsuffix .vgtest,$(INSN_TESTS)) \ - int3-x86.vgtest int3-x86.stderr.exp int3-x86.stdout.exp \ pushfpopf.stderr.exp pushfpopf.stdout.exp pushfpopf.vgtest \ pushfw_x86.vgtest pushfw_x86.stdout.exp pushfw_x86.stderr.exp \ pushpopmem.stderr.exp pushpopmem.stdout.exp pushpopmem.vgtest \ @@ -39,13 +38,6 @@ tronical \ xor-undef-x86 -# DDD: not sure if these ones should work on Darwin or not... if not, should -# be moved into x86-linux/. -if ! VGCONF_OS_IS_DARWIN - check_PROGRAMS += \ - int3-x86 -endif - AM_CFLAGS += @FLAG_M32@ $(FLAG_MMMX) $(FLAG_MSSE) AM_CXXFLAGS += @FLAG_M32@ $(FLAG_MMMX) $(FLAG_MSSE) AM_CCASFLAGS += @FLAG_M32@ Deleted: branches/DARWIN/memcheck/tests/x86/int3-x86.c =================================================================== --- branches/DARWIN/memcheck/tests/x86/int3-x86.c 2009-04-25 00:07:37 UTC (rev 9620) +++ branches/DARWIN/memcheck/tests/x86/int3-x86.c 2009-04-25 03:01:33 UTC (rev 9621) @@ -1,52 +0,0 @@ - -#undef _GNU_SOURCE -#define _GNU_SOURCE 1 - -#include <signal.h> -#include <stdio.h> -#include <sys/ucontext.h> - -static char* eip_at_sig = NULL; - -static void int_handler(int signum, siginfo_t *si, void *uc_arg) -{ - ucontext_t *uc = (ucontext_t *)uc_arg; - /* Note that uc->uc_mcontext is an embedded struct, not a pointer */ - mcontext_t *mc = &(uc->uc_mcontext); - void *pc = (void*)mc->gregs[REG_EIP]; - printf("in int_handler, EIP is ...\n"); - eip_at_sig = pc; -} - -static void register_handler(int sig, void *handler) -{ - struct sigaction sa; - sa.sa_flags = SA_RESTART | SA_SIGINFO; - sigfillset(&sa.sa_mask); - sa.sa_sigaction = handler; - sigaction(sig, &sa, NULL); -} - -int main(void) { - char *intaddr = NULL; - puts("main"); - register_handler(SIGTRAP, int_handler); - asm volatile( - "movl $zz_int, %%edx\n" - "mov %%edx, %0\n" - "zz_int:\n" - "int $3\n" - : /* no outputs */ - : "m" (intaddr) /* input: address of var to store target addr to */ - : /* clobbers */ "edx" - ); - /* intaddr is the address of the int 3 insn. eip_at_sig is the PC - after the exception, which should be the next insn along. - Hence: */ - if (intaddr != NULL && eip_at_sig != NULL - && eip_at_sig == intaddr+1) - printf("PASS\n"); - else - printf("FAIL\n"); - return 0; -} Deleted: branches/DARWIN/memcheck/tests/x86/int3-x86.stderr.exp =================================================================== Deleted: branches/DARWIN/memcheck/tests/x86/int3-x86.stdout.exp =================================================================== --- branches/DARWIN/memcheck/tests/x86/int3-x86.stdout.exp 2009-04-25 00:07:37 UTC (rev 9620) +++ branches/DARWIN/memcheck/tests/x86/int3-x86.stdout.exp 2009-04-25 03:01:33 UTC (rev 9621) @@ -1,3 +0,0 @@ -main -in int_handler, EIP is ... -PASS Deleted: branches/DARWIN/memcheck/tests/x86/int3-x86.vgtest =================================================================== --- branches/DARWIN/memcheck/tests/x86/int3-x86.vgtest 2009-04-25 00:07:37 UTC (rev 9620) +++ branches/DARWIN/memcheck/tests/x86/int3-x86.vgtest 2009-04-25 03:01:33 UTC (rev 9621) @@ -1,2 +0,0 @@ -prog: int3-x86 -vgopts: -q Modified: branches/DARWIN/memcheck/tests/x86-linux/Makefile.am =================================================================== --- branches/DARWIN/memcheck/tests/x86-linux/Makefile.am 2009-04-25 00:07:37 UTC (rev 9620) +++ branches/DARWIN/memcheck/tests/x86-linux/Makefile.am 2009-04-25 03:01:33 UTC (rev 9621) @@ -9,6 +9,7 @@ EXTRA_DIST = $(noinst_SCRIPTS) \ bug133694.vgtest bug133694.stderr.exp bug133694.stdout.exp \ + int3-x86.vgtest int3-x86.stderr.exp int3-x86.stdout.exp \ scalar.stderr.exp scalar.vgtest \ scalar_fork.stderr.exp scalar_fork.vgtest \ scalar_exit_group.stderr.exp \ @@ -19,6 +20,7 @@ check_PROGRAMS = \ bug133694 \ + int3-x86 \ scalar scalar_exit_group scalar_fork scalar_supp scalar_vfork Copied: branches/DARWIN/memcheck/tests/x86-linux/int3-x86.c (from rev 9616, branches/DARWIN/memcheck/tests/x86/int3-x86.c) =================================================================== --- branches/DARWIN/memcheck/tests/x86-linux/int3-x86.c (rev 0) +++ branches/DARWIN/memcheck/tests/x86-linux/int3-x86.c 2009-04-25 03:01:33 UTC (rev 9621) @@ -0,0 +1,52 @@ + +#undef _GNU_SOURCE +#define _GNU_SOURCE 1 + +#include <signal.h> +#include <stdio.h> +#include <sys/ucontext.h> + +static char* eip_at_sig = NULL; + +static void int_handler(int signum, siginfo_t *si, void *uc_arg) +{ + ucontext_t *uc = (ucontext_t *)uc_arg; + /* Note that uc->uc_mcontext is an embedded struct, not a pointer */ + mcontext_t *mc = &(uc->uc_mcontext); + void *pc = (void*)mc->gregs[REG_EIP]; + printf("in int_handler, EIP is ...\n"); + eip_at_sig = pc; +} + +static void register_handler(int sig, void *handler) +{ + struct sigaction sa; + sa.sa_flags = SA_RESTART | SA_SIGINFO; + sigfillset(&sa.sa_mask); + sa.sa_sigaction = handler; + sigaction(sig, &sa, NULL); +} + +int main(void) { + char *intaddr = NULL; + puts("main"); + register_handler(SIGTRAP, int_handler); + asm volatile( + "movl $zz_int, %%edx\n" + "mov %%edx, %0\n" + "zz_int:\n" + "int $3\n" + : /* no outputs */ + : "m" (intaddr) /* input: address of var to store target addr to */ + : /* clobbers */ "edx" + ); + /* intaddr is the address of the int 3 insn. eip_at_sig is the PC + after the exception, which should be the next insn along. + Hence: */ + if (intaddr != NULL && eip_at_sig != NULL + && eip_at_sig == intaddr+1) + printf("PASS\n"); + else + printf("FAIL\n"); + return 0; +} Copied: branches/DARWIN/memcheck/tests/x86-linux/int3-x86.stderr.exp (from rev 9616, branches/DARWIN/memcheck/tests/x86/int3-x86.stderr.exp) =================================================================== Copied: branches/DARWIN/memcheck/tests/x86-linux/int3-x86.stdout.exp (from rev 9616, branches/DARWIN/memcheck/tests/x86/int3-x86.stdout.exp) =================================================================== --- branches/DARWIN/memcheck/tests/x86-linux/int3-x86.stdout.exp (rev 0) +++ branches/DARWIN/memcheck/tests/x86-linux/int3-x86.stdout.exp 2009-04-25 03:01:33 UTC (rev 9621) @@ -0,0 +1,3 @@ +main +in int_handler, EIP is ... +PASS Copied: branches/DARWIN/memcheck/tests/x86-linux/int3-x86.vgtest (from rev 9616, branches/DARWIN/memcheck/tests/x86/int3-x86.vgtest) =================================================================== --- branches/DARWIN/memcheck/tests/x86-linux/int3-x86.vgtest (rev 0) +++ branches/DARWIN/memcheck/tests/x86-linux/int3-x86.vgtest 2009-04-25 03:01:33 UTC (rev 9621) @@ -0,0 +1,2 @@ +prog: int3-x86 +vgopts: -q |