|
From: <sv...@va...> - 2009-04-15 07:21:38
|
Author: njn
Date: 2009-04-15 08:21:34 +0100 (Wed, 15 Apr 2009)
New Revision: 9550
Log:
Moved seg_override and sigcontext to (newly created) x86-linux/ sub-dir, as
they are Linux-specific.
Added:
branches/DARWIN/none/tests/x86-linux/
branches/DARWIN/none/tests/x86-linux/Makefile.am
branches/DARWIN/none/tests/x86-linux/seg_override.c
branches/DARWIN/none/tests/x86-linux/seg_override.stderr.exp
branches/DARWIN/none/tests/x86-linux/seg_override.stdout.exp
branches/DARWIN/none/tests/x86-linux/seg_override.vgtest
branches/DARWIN/none/tests/x86-linux/sigcontext.c
branches/DARWIN/none/tests/x86-linux/sigcontext.stderr.exp
branches/DARWIN/none/tests/x86-linux/sigcontext.stdout.exp
branches/DARWIN/none/tests/x86-linux/sigcontext.vgtest
Removed:
branches/DARWIN/none/tests/x86/seg_override.c
branches/DARWIN/none/tests/x86/seg_override.stderr.exp
branches/DARWIN/none/tests/x86/seg_override.stdout.exp
branches/DARWIN/none/tests/x86/seg_override.vgtest
branches/DARWIN/none/tests/x86/sigcontext.c
branches/DARWIN/none/tests/x86/sigcontext.stderr.exp
branches/DARWIN/none/tests/x86/sigcontext.stdout.exp
branches/DARWIN/none/tests/x86/sigcontext.vgtest
Modified:
branches/DARWIN/none/tests/Makefile.am
branches/DARWIN/none/tests/x86/Makefile.am
Modified: branches/DARWIN/none/tests/Makefile.am
===================================================================
--- branches/DARWIN/none/tests/Makefile.am 2009-04-15 07:11:36 UTC (rev 9549)
+++ branches/DARWIN/none/tests/Makefile.am 2009-04-15 07:21:34 UTC (rev 9550)
@@ -22,6 +22,11 @@
SUBDIRS += linux
endif
+# Platform-specific tests
+if VGCONF_PLATFORMS_INCLUDE_X86_LINUX
+SUBDIRS += x86-linux
+endif
+
DIST_SUBDIRS = x86 amd64 ppc32 ppc64 linux .
noinst_SCRIPTS = \
Modified: branches/DARWIN/none/tests/x86/Makefile.am
===================================================================
--- branches/DARWIN/none/tests/x86/Makefile.am 2009-04-15 07:11:36 UTC (rev 9549)
+++ branches/DARWIN/none/tests/x86/Makefile.am 2009-04-15 07:21:34 UTC (rev 9550)
@@ -49,8 +49,6 @@
movx.stderr.exp movx.stdout.exp movx.vgtest \
pushpopseg.stderr.exp pushpopseg.stdout.exp pushpopseg.vgtest \
sbbmisc.stderr.exp sbbmisc.stdout.exp sbbmisc.vgtest \
- seg_override.stderr.exp seg_override.stdout.exp seg_override.vgtest \
- sigcontext.stdout.exp sigcontext.stderr.exp sigcontext.vgtest \
smc1.stderr.exp smc1.stdout.exp smc1.vgtest \
ssse3_misaligned.stderr.exp ssse3_misaligned.stdout.exp \
ssse3_misaligned.vgtest ssse3_misaligned.c \
@@ -92,9 +90,7 @@
if ! VGCONF_OS_IS_DARWIN
check_PROGRAMS += \
cpuid \
- faultstatus \
- seg_override \
- sigcontext
+ faultstatus
endif
AM_CFLAGS += @FLAG_M32@ $(FLAG_MMMX) $(FLAG_MSSE)
Deleted: branches/DARWIN/none/tests/x86/seg_override.c
===================================================================
--- branches/DARWIN/none/tests/x86/seg_override.c 2009-04-15 07:11:36 UTC (rev 9549)
+++ branches/DARWIN/none/tests/x86/seg_override.c 2009-04-15 07:21:34 UTC (rev 9550)
@@ -1,138 +0,0 @@
-
-#include <stdio.h>
-#include <errno.h>
-#include <string.h>
-
-/* Stuff from Wine. */
-
-typedef unsigned short WORD; /* I guess */
-typedef unsigned char BYTE;
-
-typedef struct _LDT_ENTRY {
- WORD LimitLow;
- WORD BaseLow;
- union {
- struct {
- BYTE BaseMid;
- BYTE Flags1;
- /*Declare as bytes to avoid alignment problems */
- BYTE Flags2;
- BYTE BaseHi;
- } Bytes;
- struct {
- unsigned BaseMid : 8;
- unsigned Type : 5;
- unsigned Dpl : 2;
- unsigned Pres : 1;
- unsigned LimitHi : 4;
- unsigned Sys : 1;
- unsigned Reserved_0 : 1;
- unsigned Default_Big : 1;
- unsigned Granularity : 1;
- unsigned BaseHi : 8;
- } Bits;
- } HighWord;
-} LDT_ENTRY;
-
-inline static void *wine_ldt_get_base( const LDT_ENTRY *ent )
-{
- return (void *)(ent->BaseLow |
- (unsigned long)ent->HighWord.Bits.BaseMid << 16 |
- (unsigned long)ent->HighWord.Bits.BaseHi << 24);
-}
-inline static unsigned int wine_ldt_get_limit( const LDT_ENTRY *ent )
-{
- unsigned int limit = ent->LimitLow | (ent->HighWord.Bits.LimitHi << 16);
- if (ent->HighWord.Bits.Granularity) limit = (limit << 12) | 0xfff;
- return limit;
-}
-
-
-/* our copy of the ldt */
-LDT_ENTRY ldt_copy[8192];
-
-/* System call to set LDT entry. */
-//extern int __modify_ldt (int, struct modify_ldt_ldt_s *, size_t);
-extern int __modify_ldt (int, void *, size_t);
-
-void print_ldt ( void )
-{
- int res;
- res = __modify_ldt( 0, ldt_copy, 8192*sizeof(LDT_ENTRY) );
- printf("got %d bytes\n", res );
- perror("error is");
-}
-
-/* Structure passed on `modify_ldt' call. */
-#define MODIFY_LDT_CONTENTS_DATA 0
-#define MODIFY_LDT_CONTENTS_STACK 1
-#define MODIFY_LDT_CONTENTS_CODE 2
-
-struct modify_ldt_ldt_s
-{
- unsigned int entry_number;
- unsigned long int base_addr;
- unsigned int limit;
- unsigned int seg_32bit:1;
- unsigned int contents:2;
- unsigned int read_exec_only:1;
- unsigned int limit_in_pages:1;
- unsigned int seg_not_present:1;
- unsigned int useable:1;
- unsigned int empty:25;
-};
-
-/* System call to set LDT entry. */
-//extern int __modify_ldt (int, struct modify_ldt_ldt_s *, size_t);
-
-void set_ldt1 ( void* base )
-{
- int stat;
- struct modify_ldt_ldt_s ldt_entry;
-
- /* stop valgrind yelping about initialised holes in this struct. */
- memset(&ldt_entry, 0, sizeof(ldt_entry));
-
- ldt_entry.entry_number = 1;
- ldt_entry.base_addr = (unsigned)base; //0x12345678;
- ldt_entry.limit = 10;
- ldt_entry.seg_32bit = 1;
- ldt_entry.contents = MODIFY_LDT_CONTENTS_DATA;
- ldt_entry.read_exec_only = 0;
- ldt_entry.limit_in_pages = 0;
- ldt_entry.seg_not_present = 0;
- stat = __modify_ldt (1, &ldt_entry, sizeof (ldt_entry));
- printf("stat = %d\n", stat);
-}
-
-
-void ldt_seg_write ( int ldt_entno, unsigned offset, unsigned val )
-{
- asm volatile("movl %2, %%eax\n\t"
- "movl %1, %%edx\n\t"
- "movl %0, %%fs\n\t"
- "movl %%eax, %%fs:(%%edx)\t"
- :
- : "r" (7 /* LDT(TI), least privilege */ + (ldt_entno << 3)),
- "r" (offset), "r" (val)
- : "eax", "edx", "cc" );
-}
-
-int main ( void )
-{
- int i;
- int arr[9];
-
- for (i = 0; i < 9; i++) arr[i] = 11*i;
-
- set_ldt1( &arr[4] );
- print_ldt();
-
- ldt_seg_write(1 /* ldt entry # */, 4 /* offset */, 4444);
-
- for (i = 0; i < 9; i++) printf("%d ", arr[i]);
- printf("\n");
-
- return 0;
-}
-
Deleted: branches/DARWIN/none/tests/x86/seg_override.stderr.exp
===================================================================
--- branches/DARWIN/none/tests/x86/seg_override.stderr.exp 2009-04-15 07:11:36 UTC (rev 9549)
+++ branches/DARWIN/none/tests/x86/seg_override.stderr.exp 2009-04-15 07:21:34 UTC (rev 9550)
@@ -1,3 +0,0 @@
-
-error is: Success
-
Deleted: branches/DARWIN/none/tests/x86/seg_override.stdout.exp
===================================================================
--- branches/DARWIN/none/tests/x86/seg_override.stdout.exp 2009-04-15 07:11:36 UTC (rev 9549)
+++ branches/DARWIN/none/tests/x86/seg_override.stdout.exp 2009-04-15 07:21:34 UTC (rev 9550)
@@ -1,3 +0,0 @@
-stat = 0
-got 65536 bytes
-0 11 22 33 44 4444 66 77 88
Deleted: branches/DARWIN/none/tests/x86/seg_override.vgtest
===================================================================
--- branches/DARWIN/none/tests/x86/seg_override.vgtest 2009-04-15 07:11:36 UTC (rev 9549)
+++ branches/DARWIN/none/tests/x86/seg_override.vgtest 2009-04-15 07:21:34 UTC (rev 9550)
@@ -1 +0,0 @@
-prog: seg_override
Deleted: branches/DARWIN/none/tests/x86/sigcontext.c
===================================================================
--- branches/DARWIN/none/tests/x86/sigcontext.c 2009-04-15 07:11:36 UTC (rev 9549)
+++ branches/DARWIN/none/tests/x86/sigcontext.c 2009-04-15 07:21:34 UTC (rev 9550)
@@ -1,92 +0,0 @@
-#define _GNU_SOURCE
-
-#include <stdio.h>
-#include <signal.h>
-#include <unistd.h>
-#include <sys/ucontext.h>
-#include <asm/unistd.h>
-
-#define VAL1 0x11223344
-#define VAL2 0x44332211
-
-static void handler1(int sig, siginfo_t *si, ucontext_t *uc)
-{
- /* Since the handler will be called as kill leaves the kernel,
- this is replacing the kill syscall's return value. */
- if (uc->uc_mcontext.gregs[REG_EAX] != 0)
- printf("FAILED: handler2 expected eax == 0, not %d\n", uc->uc_mcontext.gregs[REG_EAX]);
- uc->uc_mcontext.gregs[REG_EAX] = VAL1;
-
- asm volatile (
- "movl $0, %%edx\n"
- "movl $0, %%esi\n"
- "movl $0, %%edi\n"
- : : : "edx", "esi", "edi");
-}
-
-static void handler2(int sig, struct sigcontext sc)
-{
- /* Since the handler will be called as kill leaves the kernel,
- this is replacing the kill syscall's return value. */
- if (sc.eax != 0)
- printf("FAILED: handler2 expected eax == 0, not %p\n", (void*)sc.eax);
-
- sc.eax = VAL2;
-
- asm volatile (
- "movl $0, %%edx\n"
- "movl $0, %%esi\n"
- "movl $0, %%edi\n"
- : : : "edx", "esi", "edi");
-}
-
-int main()
-{
- struct sigaction sa;
- int ret;
- int v2, v3, v4;
-
- sa.sa_handler = (void*)handler1;
- sa.sa_flags = SA_SIGINFO;
- sigfillset(&sa.sa_mask);
-
- sigaction(SIGUSR1, &sa, NULL);
-
- sa.sa_handler = (void*)handler2;
- sa.sa_flags = 0;
- sigfillset(&sa.sa_mask);
-
- sigaction(SIGUSR2, &sa, NULL);
-
- asm volatile (
- //"movl $0x11111111, %%ebp\n"
- "movl $0x22222222, %%edx\n"
- "movl $0x33333333, %%esi\n"
- "movl $0x44444444, %%edi\n"
- "int $0x80"
- : "=a" (ret), "=d" (v2), "=S" (v3), "=D" (v4)
- : "0" (__NR_kill), "b" (getpid()), "c" (SIGUSR1));
- printf("v2=%x v3=%x v4=%x\n", v2, v3, v4);
-
- if (ret == VAL1)
- printf("PASS %x\n", ret);
- else
- printf("FAIL ret=%x not %x\n", ret, VAL1);
-
- asm volatile (
- //"movl $0x11111111, %%ebp\n"
- "movl $0x22222222, %%edx\n"
- "movl $0x33333333, %%esi\n"
- "movl $0x44444444, %%edi\n"
- "int $0x80"
- : "=a" (ret), "=d" (v2), "=S" (v3), "=D" (v4)
- : "0" (__NR_kill), "b" (getpid()), "c" (SIGUSR2));
- printf("v2=%x v3=%x v4=%x\n", v2, v3, v4);
-
- if (ret == VAL2)
- printf("PASS %x\n", ret);
- else
- printf("FAIL ret=%x not %x\n", ret, VAL2);
-
- return 0;
-}
Deleted: branches/DARWIN/none/tests/x86/sigcontext.stderr.exp
===================================================================
--- branches/DARWIN/none/tests/x86/sigcontext.stderr.exp 2009-04-15 07:11:36 UTC (rev 9549)
+++ branches/DARWIN/none/tests/x86/sigcontext.stderr.exp 2009-04-15 07:21:34 UTC (rev 9550)
@@ -1,2 +0,0 @@
-
-
Deleted: branches/DARWIN/none/tests/x86/sigcontext.stdout.exp
===================================================================
--- branches/DARWIN/none/tests/x86/sigcontext.stdout.exp 2009-04-15 07:11:36 UTC (rev 9549)
+++ branches/DARWIN/none/tests/x86/sigcontext.stdout.exp 2009-04-15 07:21:34 UTC (rev 9550)
@@ -1,4 +0,0 @@
-v2=22222222 v3=33333333 v4=44444444
-PASS 11223344
-v2=22222222 v3=33333333 v4=44444444
-PASS 44332211
Deleted: branches/DARWIN/none/tests/x86/sigcontext.vgtest
===================================================================
--- branches/DARWIN/none/tests/x86/sigcontext.vgtest 2009-04-15 07:11:36 UTC (rev 9549)
+++ branches/DARWIN/none/tests/x86/sigcontext.vgtest 2009-04-15 07:21:34 UTC (rev 9550)
@@ -1 +0,0 @@
-prog: sigcontext
Added: branches/DARWIN/none/tests/x86-linux/Makefile.am
===================================================================
--- branches/DARWIN/none/tests/x86-linux/Makefile.am (rev 0)
+++ branches/DARWIN/none/tests/x86-linux/Makefile.am 2009-04-15 07:21:34 UTC (rev 9550)
@@ -0,0 +1,19 @@
+
+include $(top_srcdir)/Makefile.tool-tests.am
+
+noinst_SCRIPTS = \
+ filter_stderr
+
+EXTRA_DIST = $(noinst_SCRIPTS) \
+ seg_override.stderr.exp seg_override.stdout.exp seg_override.vgtest \
+ sigcontext.stdout.exp sigcontext.stderr.exp sigcontext.vgtest
+
+check_PROGRAMS = \
+ seg_override \
+ sigcontext
+
+AM_CFLAGS += @FLAG_M32@ $(FLAG_MMMX) $(FLAG_MSSE)
+AM_CXXFLAGS += @FLAG_M32@ $(FLAG_MMMX) $(FLAG_MSSE)
+AM_CCASFLAGS = @FLAG_M32@
+
+
Copied: branches/DARWIN/none/tests/x86-linux/seg_override.c (from rev 9544, branches/DARWIN/none/tests/x86/seg_override.c)
===================================================================
--- branches/DARWIN/none/tests/x86-linux/seg_override.c (rev 0)
+++ branches/DARWIN/none/tests/x86-linux/seg_override.c 2009-04-15 07:21:34 UTC (rev 9550)
@@ -0,0 +1,138 @@
+
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+
+/* Stuff from Wine. */
+
+typedef unsigned short WORD; /* I guess */
+typedef unsigned char BYTE;
+
+typedef struct _LDT_ENTRY {
+ WORD LimitLow;
+ WORD BaseLow;
+ union {
+ struct {
+ BYTE BaseMid;
+ BYTE Flags1;
+ /*Declare as bytes to avoid alignment problems */
+ BYTE Flags2;
+ BYTE BaseHi;
+ } Bytes;
+ struct {
+ unsigned BaseMid : 8;
+ unsigned Type : 5;
+ unsigned Dpl : 2;
+ unsigned Pres : 1;
+ unsigned LimitHi : 4;
+ unsigned Sys : 1;
+ unsigned Reserved_0 : 1;
+ unsigned Default_Big : 1;
+ unsigned Granularity : 1;
+ unsigned BaseHi : 8;
+ } Bits;
+ } HighWord;
+} LDT_ENTRY;
+
+inline static void *wine_ldt_get_base( const LDT_ENTRY *ent )
+{
+ return (void *)(ent->BaseLow |
+ (unsigned long)ent->HighWord.Bits.BaseMid << 16 |
+ (unsigned long)ent->HighWord.Bits.BaseHi << 24);
+}
+inline static unsigned int wine_ldt_get_limit( const LDT_ENTRY *ent )
+{
+ unsigned int limit = ent->LimitLow | (ent->HighWord.Bits.LimitHi << 16);
+ if (ent->HighWord.Bits.Granularity) limit = (limit << 12) | 0xfff;
+ return limit;
+}
+
+
+/* our copy of the ldt */
+LDT_ENTRY ldt_copy[8192];
+
+/* System call to set LDT entry. */
+//extern int __modify_ldt (int, struct modify_ldt_ldt_s *, size_t);
+extern int __modify_ldt (int, void *, size_t);
+
+void print_ldt ( void )
+{
+ int res;
+ res = __modify_ldt( 0, ldt_copy, 8192*sizeof(LDT_ENTRY) );
+ printf("got %d bytes\n", res );
+ perror("error is");
+}
+
+/* Structure passed on `modify_ldt' call. */
+#define MODIFY_LDT_CONTENTS_DATA 0
+#define MODIFY_LDT_CONTENTS_STACK 1
+#define MODIFY_LDT_CONTENTS_CODE 2
+
+struct modify_ldt_ldt_s
+{
+ unsigned int entry_number;
+ unsigned long int base_addr;
+ unsigned int limit;
+ unsigned int seg_32bit:1;
+ unsigned int contents:2;
+ unsigned int read_exec_only:1;
+ unsigned int limit_in_pages:1;
+ unsigned int seg_not_present:1;
+ unsigned int useable:1;
+ unsigned int empty:25;
+};
+
+/* System call to set LDT entry. */
+//extern int __modify_ldt (int, struct modify_ldt_ldt_s *, size_t);
+
+void set_ldt1 ( void* base )
+{
+ int stat;
+ struct modify_ldt_ldt_s ldt_entry;
+
+ /* stop valgrind yelping about initialised holes in this struct. */
+ memset(&ldt_entry, 0, sizeof(ldt_entry));
+
+ ldt_entry.entry_number = 1;
+ ldt_entry.base_addr = (unsigned)base; //0x12345678;
+ ldt_entry.limit = 10;
+ ldt_entry.seg_32bit = 1;
+ ldt_entry.contents = MODIFY_LDT_CONTENTS_DATA;
+ ldt_entry.read_exec_only = 0;
+ ldt_entry.limit_in_pages = 0;
+ ldt_entry.seg_not_present = 0;
+ stat = __modify_ldt (1, &ldt_entry, sizeof (ldt_entry));
+ printf("stat = %d\n", stat);
+}
+
+
+void ldt_seg_write ( int ldt_entno, unsigned offset, unsigned val )
+{
+ asm volatile("movl %2, %%eax\n\t"
+ "movl %1, %%edx\n\t"
+ "movl %0, %%fs\n\t"
+ "movl %%eax, %%fs:(%%edx)\t"
+ :
+ : "r" (7 /* LDT(TI), least privilege */ + (ldt_entno << 3)),
+ "r" (offset), "r" (val)
+ : "eax", "edx", "cc" );
+}
+
+int main ( void )
+{
+ int i;
+ int arr[9];
+
+ for (i = 0; i < 9; i++) arr[i] = 11*i;
+
+ set_ldt1( &arr[4] );
+ print_ldt();
+
+ ldt_seg_write(1 /* ldt entry # */, 4 /* offset */, 4444);
+
+ for (i = 0; i < 9; i++) printf("%d ", arr[i]);
+ printf("\n");
+
+ return 0;
+}
+
Copied: branches/DARWIN/none/tests/x86-linux/seg_override.stderr.exp (from rev 9544, branches/DARWIN/none/tests/x86/seg_override.stderr.exp)
===================================================================
--- branches/DARWIN/none/tests/x86-linux/seg_override.stderr.exp (rev 0)
+++ branches/DARWIN/none/tests/x86-linux/seg_override.stderr.exp 2009-04-15 07:21:34 UTC (rev 9550)
@@ -0,0 +1,3 @@
+
+error is: Success
+
Copied: branches/DARWIN/none/tests/x86-linux/seg_override.stdout.exp (from rev 9544, branches/DARWIN/none/tests/x86/seg_override.stdout.exp)
===================================================================
--- branches/DARWIN/none/tests/x86-linux/seg_override.stdout.exp (rev 0)
+++ branches/DARWIN/none/tests/x86-linux/seg_override.stdout.exp 2009-04-15 07:21:34 UTC (rev 9550)
@@ -0,0 +1,3 @@
+stat = 0
+got 65536 bytes
+0 11 22 33 44 4444 66 77 88
Copied: branches/DARWIN/none/tests/x86-linux/seg_override.vgtest (from rev 9544, branches/DARWIN/none/tests/x86/seg_override.vgtest)
===================================================================
--- branches/DARWIN/none/tests/x86-linux/seg_override.vgtest (rev 0)
+++ branches/DARWIN/none/tests/x86-linux/seg_override.vgtest 2009-04-15 07:21:34 UTC (rev 9550)
@@ -0,0 +1 @@
+prog: seg_override
Copied: branches/DARWIN/none/tests/x86-linux/sigcontext.c (from rev 9544, branches/DARWIN/none/tests/x86/sigcontext.c)
===================================================================
--- branches/DARWIN/none/tests/x86-linux/sigcontext.c (rev 0)
+++ branches/DARWIN/none/tests/x86-linux/sigcontext.c 2009-04-15 07:21:34 UTC (rev 9550)
@@ -0,0 +1,92 @@
+#define _GNU_SOURCE
+
+#include <stdio.h>
+#include <signal.h>
+#include <unistd.h>
+#include <sys/ucontext.h>
+#include <asm/unistd.h>
+
+#define VAL1 0x11223344
+#define VAL2 0x44332211
+
+static void handler1(int sig, siginfo_t *si, ucontext_t *uc)
+{
+ /* Since the handler will be called as kill leaves the kernel,
+ this is replacing the kill syscall's return value. */
+ if (uc->uc_mcontext.gregs[REG_EAX] != 0)
+ printf("FAILED: handler2 expected eax == 0, not %d\n", uc->uc_mcontext.gregs[REG_EAX]);
+ uc->uc_mcontext.gregs[REG_EAX] = VAL1;
+
+ asm volatile (
+ "movl $0, %%edx\n"
+ "movl $0, %%esi\n"
+ "movl $0, %%edi\n"
+ : : : "edx", "esi", "edi");
+}
+
+static void handler2(int sig, struct sigcontext sc)
+{
+ /* Since the handler will be called as kill leaves the kernel,
+ this is replacing the kill syscall's return value. */
+ if (sc.eax != 0)
+ printf("FAILED: handler2 expected eax == 0, not %p\n", (void*)sc.eax);
+
+ sc.eax = VAL2;
+
+ asm volatile (
+ "movl $0, %%edx\n"
+ "movl $0, %%esi\n"
+ "movl $0, %%edi\n"
+ : : : "edx", "esi", "edi");
+}
+
+int main()
+{
+ struct sigaction sa;
+ int ret;
+ int v2, v3, v4;
+
+ sa.sa_handler = (void*)handler1;
+ sa.sa_flags = SA_SIGINFO;
+ sigfillset(&sa.sa_mask);
+
+ sigaction(SIGUSR1, &sa, NULL);
+
+ sa.sa_handler = (void*)handler2;
+ sa.sa_flags = 0;
+ sigfillset(&sa.sa_mask);
+
+ sigaction(SIGUSR2, &sa, NULL);
+
+ asm volatile (
+ //"movl $0x11111111, %%ebp\n"
+ "movl $0x22222222, %%edx\n"
+ "movl $0x33333333, %%esi\n"
+ "movl $0x44444444, %%edi\n"
+ "int $0x80"
+ : "=a" (ret), "=d" (v2), "=S" (v3), "=D" (v4)
+ : "0" (__NR_kill), "b" (getpid()), "c" (SIGUSR1));
+ printf("v2=%x v3=%x v4=%x\n", v2, v3, v4);
+
+ if (ret == VAL1)
+ printf("PASS %x\n", ret);
+ else
+ printf("FAIL ret=%x not %x\n", ret, VAL1);
+
+ asm volatile (
+ //"movl $0x11111111, %%ebp\n"
+ "movl $0x22222222, %%edx\n"
+ "movl $0x33333333, %%esi\n"
+ "movl $0x44444444, %%edi\n"
+ "int $0x80"
+ : "=a" (ret), "=d" (v2), "=S" (v3), "=D" (v4)
+ : "0" (__NR_kill), "b" (getpid()), "c" (SIGUSR2));
+ printf("v2=%x v3=%x v4=%x\n", v2, v3, v4);
+
+ if (ret == VAL2)
+ printf("PASS %x\n", ret);
+ else
+ printf("FAIL ret=%x not %x\n", ret, VAL2);
+
+ return 0;
+}
Copied: branches/DARWIN/none/tests/x86-linux/sigcontext.stderr.exp (from rev 9544, branches/DARWIN/none/tests/x86/sigcontext.stderr.exp)
===================================================================
--- branches/DARWIN/none/tests/x86-linux/sigcontext.stderr.exp (rev 0)
+++ branches/DARWIN/none/tests/x86-linux/sigcontext.stderr.exp 2009-04-15 07:21:34 UTC (rev 9550)
@@ -0,0 +1,2 @@
+
+
Copied: branches/DARWIN/none/tests/x86-linux/sigcontext.stdout.exp (from rev 9544, branches/DARWIN/none/tests/x86/sigcontext.stdout.exp)
===================================================================
--- branches/DARWIN/none/tests/x86-linux/sigcontext.stdout.exp (rev 0)
+++ branches/DARWIN/none/tests/x86-linux/sigcontext.stdout.exp 2009-04-15 07:21:34 UTC (rev 9550)
@@ -0,0 +1,4 @@
+v2=22222222 v3=33333333 v4=44444444
+PASS 11223344
+v2=22222222 v3=33333333 v4=44444444
+PASS 44332211
Copied: branches/DARWIN/none/tests/x86-linux/sigcontext.vgtest (from rev 9544, branches/DARWIN/none/tests/x86/sigcontext.vgtest)
===================================================================
--- branches/DARWIN/none/tests/x86-linux/sigcontext.vgtest (rev 0)
+++ branches/DARWIN/none/tests/x86-linux/sigcontext.vgtest 2009-04-15 07:21:34 UTC (rev 9550)
@@ -0,0 +1 @@
+prog: sigcontext
|