[5/13] ntdll: Remove SPARC support

André Hentschel nerv at dawncrow.de
Wed Feb 20 14:10:06 CST 2013


---
 dlls/ntdll/Makefile.in    |   1 -
 dlls/ntdll/nt.c           |   7 -
 dlls/ntdll/signal_sparc.c | 936 ----------------------------------------------
 dlls/ntdll/virtual.c      |   1 -
 4 files changed, 945 deletions(-)
 delete mode 100644 dlls/ntdll/signal_sparc.c

diff --git a/dlls/ntdll/Makefile.in b/dlls/ntdll/Makefile.in
index c961f70..7c2f0fa 100644
--- a/dlls/ntdll/Makefile.in
+++ b/dlls/ntdll/Makefile.in
@@ -41,7 +41,6 @@ C_SRCS = \
 	signal_arm64.c \
 	signal_i386.c \
 	signal_powerpc.c \
-	signal_sparc.c \
 	signal_x86_64.c \
 	string.c \
 	sync.c \
diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c
index a2e0716..4949f28 100644
--- a/dlls/ntdll/nt.c
+++ b/dlls/ntdll/nt.c
@@ -1111,13 +1111,6 @@ static inline void get_cpuinfo(SYSTEM_CPU_INFORMATION* info)
     info->Architecture = PROCESSOR_ARCHITECTURE_ARM;
 }
 
-#elif defined(__sparc__)
-
-static inline void get_cpuinfo(SYSTEM_CPU_INFORMATION* info)
-{
-    info->Architecture = PROCESSOR_ARCHITECTURE_SPARC;
-}
-
 #endif /* End architecture specific feature detection for CPUs */
 
 /******************************************************************
diff --git a/dlls/ntdll/signal_sparc.c b/dlls/ntdll/signal_sparc.c
deleted file mode 100644
index 13fa8f2..0000000
--- a/dlls/ntdll/signal_sparc.c
+++ /dev/null
@@ -1,936 +0,0 @@
-/*
- * Sparc signal handling routines
- *
- * Copyright 1999 Ulrich Weigand
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- */
-
-#ifdef __sparc__
-
-#include "config.h"
-#include "wine/port.h"
-
-#include <assert.h>
-#include <signal.h>
-#include <stdlib.h>
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/ucontext.h>
-
-#include "ntstatus.h"
-#define WIN32_NO_STATUS
-#include "windef.h"
-#include "winternl.h"
-#include "winnt.h"
-
-#include "wine/exception.h"
-#include "ntdll_misc.h"
-
-#include "wine/debug.h"
-
-WINE_DEFAULT_DEBUG_CHANNEL(seh);
-
-static pthread_key_t teb_key;
-
-typedef int (*wine_signal_handler)(unsigned int sig);
-
-static wine_signal_handler handlers[256];
-
-/***********************************************************************
- *           dispatch_signal
- */
-static inline int dispatch_signal(unsigned int sig)
-{
-    if (handlers[sig] == NULL) return 0;
-    return handlers[sig](sig);
-}
-
-
-/*
- * FIXME:  All this works only on Solaris for now
- */
-
-/**********************************************************************
- *		save_context
- */
-static void save_context( CONTEXT *context, ucontext_t *ucontext )
-{
-    context->ContextFlags = CONTEXT_CONTROL | CONTEXT_INTEGER;
-
-    /* Special registers */
-    context->psr = ucontext->uc_mcontext.gregs[REG_PSR];
-    context->pc  = ucontext->uc_mcontext.gregs[REG_PC];
-    context->npc = ucontext->uc_mcontext.gregs[REG_nPC];
-    context->y   = ucontext->uc_mcontext.gregs[REG_Y];
-    context->wim = 0;  /* FIXME */
-    context->tbr = 0;  /* FIXME */
-
-    /* Global registers */
-    context->g0 = 0;  /* always */
-    context->g1 = ucontext->uc_mcontext.gregs[REG_G1];
-    context->g2 = ucontext->uc_mcontext.gregs[REG_G2];
-    context->g3 = ucontext->uc_mcontext.gregs[REG_G3];
-    context->g4 = ucontext->uc_mcontext.gregs[REG_G4];
-    context->g5 = ucontext->uc_mcontext.gregs[REG_G5];
-    context->g6 = ucontext->uc_mcontext.gregs[REG_G6];
-    context->g7 = ucontext->uc_mcontext.gregs[REG_G7];
-
-    /* Current 'out' registers */
-    context->o0 = ucontext->uc_mcontext.gregs[REG_O0];
-    context->o1 = ucontext->uc_mcontext.gregs[REG_O1];
-    context->o2 = ucontext->uc_mcontext.gregs[REG_O2];
-    context->o3 = ucontext->uc_mcontext.gregs[REG_O3];
-    context->o4 = ucontext->uc_mcontext.gregs[REG_O4];
-    context->o5 = ucontext->uc_mcontext.gregs[REG_O5];
-    context->o6 = ucontext->uc_mcontext.gregs[REG_O6];
-    context->o7 = ucontext->uc_mcontext.gregs[REG_O7];
-
-    /* FIXME: what if the current register window isn't saved? */
-    if ( ucontext->uc_mcontext.gwins && ucontext->uc_mcontext.gwins->wbcnt > 0 )
-    {
-        /* Current 'local' registers from first register window */
-        context->l0 = ucontext->uc_mcontext.gwins->wbuf[0].rw_local[0];
-        context->l1 = ucontext->uc_mcontext.gwins->wbuf[0].rw_local[1];
-        context->l2 = ucontext->uc_mcontext.gwins->wbuf[0].rw_local[2];
-        context->l3 = ucontext->uc_mcontext.gwins->wbuf[0].rw_local[3];
-        context->l4 = ucontext->uc_mcontext.gwins->wbuf[0].rw_local[4];
-        context->l5 = ucontext->uc_mcontext.gwins->wbuf[0].rw_local[5];
-        context->l6 = ucontext->uc_mcontext.gwins->wbuf[0].rw_local[6];
-        context->l7 = ucontext->uc_mcontext.gwins->wbuf[0].rw_local[7];
-
-        /* Current 'in' registers from first register window */
-        context->i0 = ucontext->uc_mcontext.gwins->wbuf[0].rw_in[0];
-        context->i1 = ucontext->uc_mcontext.gwins->wbuf[0].rw_in[1];
-        context->i2 = ucontext->uc_mcontext.gwins->wbuf[0].rw_in[2];
-        context->i3 = ucontext->uc_mcontext.gwins->wbuf[0].rw_in[3];
-        context->i4 = ucontext->uc_mcontext.gwins->wbuf[0].rw_in[4];
-        context->i5 = ucontext->uc_mcontext.gwins->wbuf[0].rw_in[5];
-        context->i6 = ucontext->uc_mcontext.gwins->wbuf[0].rw_in[6];
-        context->i7 = ucontext->uc_mcontext.gwins->wbuf[0].rw_in[7];
-    }
-}
-
-/**********************************************************************
- *		restore_context
- */
-static void restore_context( CONTEXT *context, ucontext_t *ucontext )
-{
-   /* FIXME */
-}
-
-/**********************************************************************
- *		save_fpu
- */
-static void save_fpu( CONTEXT *context, ucontext_t *ucontext )
-{
-   /* FIXME */
-}
-
-/**********************************************************************
- *		restore_fpu
- */
-static void restore_fpu( CONTEXT *context, ucontext_t *ucontext )
-{
-   /* FIXME */
-}
-
-
-/**********************************************************************
- *           call_stack_handlers
- *
- * Call the stack handlers chain.
- */
-static NTSTATUS call_stack_handlers( EXCEPTION_RECORD *rec, CONTEXT *context )
-{
-    EXCEPTION_POINTERS ptrs;
-
-    FIXME( "not implemented on Sparc\n" );
-
-    /* hack: call unhandled exception filter directly */
-    ptrs.ExceptionRecord = rec;
-    ptrs.ContextRecord = context;
-    unhandled_exception_filter( &ptrs );
-    return STATUS_UNHANDLED_EXCEPTION;
-}
-
-
-/*******************************************************************
- *		raise_exception
- *
- * Implementation of NtRaiseException.
- */
-static NTSTATUS raise_exception( EXCEPTION_RECORD *rec, CONTEXT *context, BOOL first_chance )
-{
-    NTSTATUS status;
-
-    if (first_chance)
-    {
-        DWORD c;
-
-        TRACE( "code=%x flags=%x addr=%p ip=%x tid=%04x\n",
-               rec->ExceptionCode, rec->ExceptionFlags, rec->ExceptionAddress,
-               context->pc, GetCurrentThreadId() );
-        for (c = 0; c < rec->NumberParameters; c++)
-            TRACE( " info[%d]=%08lx\n", c, rec->ExceptionInformation[c] );
-        if (rec->ExceptionCode == EXCEPTION_WINE_STUB)
-        {
-            if (rec->ExceptionInformation[1] >> 16)
-                MESSAGE( "wine: Call from %p to unimplemented function %s.%s, aborting\n",
-                         rec->ExceptionAddress,
-                         (char*)rec->ExceptionInformation[0], (char*)rec->ExceptionInformation[1] );
-            else
-                MESSAGE( "wine: Call from %p to unimplemented function %s.%ld, aborting\n",
-                         rec->ExceptionAddress,
-                         (char*)rec->ExceptionInformation[0], rec->ExceptionInformation[1] );
-        }
-        else
-        {
-            /* FIXME: dump context */
-        }
-
-        status = send_debug_event( rec, TRUE, context );
-        if (status == DBG_CONTINUE || status == DBG_EXCEPTION_HANDLED)
-            return STATUS_SUCCESS;
-
-        if (call_vectored_handlers( rec, context ) == EXCEPTION_CONTINUE_EXECUTION)
-            return STATUS_SUCCESS;
-
-        if ((status = call_stack_handlers( rec, context )) != STATUS_UNHANDLED_EXCEPTION)
-            return status;
-    }
-
-    /* last chance exception */
-
-    status = send_debug_event( rec, FALSE, context );
-    if (status != DBG_CONTINUE)
-    {
-        if (rec->ExceptionFlags & EH_STACK_INVALID)
-            ERR("Exception frame is not in stack limits => unable to dispatch exception.\n");
-        else if (rec->ExceptionCode == STATUS_NONCONTINUABLE_EXCEPTION)
-            ERR("Process attempted to continue execution after noncontinuable exception.\n");
-        else
-            ERR("Unhandled exception code %x flags %x addr %p\n",
-                rec->ExceptionCode, rec->ExceptionFlags, rec->ExceptionAddress );
-        NtTerminateProcess( NtCurrentProcess(), rec->ExceptionCode );
-    }
-    return STATUS_SUCCESS;
-}
-
-
-/***********************************************************************
- *		RtlCaptureContext (NTDLL.@)
- */
-void WINAPI RtlCaptureContext( CONTEXT *context )
-{
-    FIXME("not implemented\n");
-    memset( context, 0, sizeof(*context) );
-}
-
-
-/***********************************************************************
- *           set_cpu_context
- *
- * Set the new CPU context.
- */
-void set_cpu_context( const CONTEXT *context )
-{
-    FIXME("not implemented\n");
-}
-
-
-/***********************************************************************
- *           copy_context
- *
- * Copy a register context according to the flags.
- */
-void copy_context( CONTEXT *to, const CONTEXT *from, DWORD flags )
-{
-    flags &= ~CONTEXT_SPARC;  /* get rid of CPU id */
-    if (flags & CONTEXT_CONTROL)
-    {
-        to->psr = from->psr;
-        to->pc  = from->pc;
-        to->npc = from->npc;
-        to->y   = from->y;
-        to->wim = from->wim;
-        to->tbr = from->tbr;
-    }
-    if (flags & CONTEXT_INTEGER)
-    {
-        to->g0 = from->g0;
-        to->g1 = from->g1;
-        to->g2 = from->g2;
-        to->g3 = from->g3;
-        to->g4 = from->g4;
-        to->g5 = from->g5;
-        to->g6 = from->g6;
-        to->g7 = from->g7;
-        to->o0 = from->o0;
-        to->o1 = from->o1;
-        to->o2 = from->o2;
-        to->o3 = from->o3;
-        to->o4 = from->o4;
-        to->o5 = from->o5;
-        to->o6 = from->o6;
-        to->o7 = from->o7;
-        to->l0 = from->l0;
-        to->l1 = from->l1;
-        to->l2 = from->l2;
-        to->l3 = from->l3;
-        to->l4 = from->l4;
-        to->l5 = from->l5;
-        to->l6 = from->l6;
-        to->l7 = from->l7;
-        to->i0 = from->i0;
-        to->i1 = from->i1;
-        to->i2 = from->i2;
-        to->i3 = from->i3;
-        to->i4 = from->i4;
-        to->i5 = from->i5;
-        to->i6 = from->i6;
-        to->i7 = from->i7;
-    }
-    if (flags & CONTEXT_FLOATING_POINT)
-    {
-        /* FIXME */
-    }
-}
-
-
-/***********************************************************************
- *           context_to_server
- *
- * Convert a register context to the server format.
- */
-NTSTATUS context_to_server( context_t *to, const CONTEXT *from )
-{
-    DWORD flags = from->ContextFlags & ~CONTEXT_SPARC;  /* get rid of CPU id */
-
-    memset( to, 0, sizeof(*to) );
-    to->cpu = CPU_SPARC;
-
-    if (flags & CONTEXT_CONTROL)
-    {
-        to->flags |= SERVER_CTX_CONTROL;
-        to->ctl.sparc_regs.psr = from->psr;
-        to->ctl.sparc_regs.pc  = from->pc;
-        to->ctl.sparc_regs.npc = from->npc;
-        to->ctl.sparc_regs.y   = from->y;
-        to->ctl.sparc_regs.wim = from->wim;
-        to->ctl.sparc_regs.tbr = from->tbr;
-    }
-    if (flags & CONTEXT_INTEGER)
-    {
-        to->flags |= SERVER_CTX_INTEGER;
-        to->integer.sparc_regs.g[0] = from->g0;
-        to->integer.sparc_regs.g[1] = from->g1;
-        to->integer.sparc_regs.g[2] = from->g2;
-        to->integer.sparc_regs.g[3] = from->g3;
-        to->integer.sparc_regs.g[4] = from->g4;
-        to->integer.sparc_regs.g[5] = from->g5;
-        to->integer.sparc_regs.g[6] = from->g6;
-        to->integer.sparc_regs.g[7] = from->g7;
-        to->integer.sparc_regs.o[0] = from->o0;
-        to->integer.sparc_regs.o[1] = from->o1;
-        to->integer.sparc_regs.o[2] = from->o2;
-        to->integer.sparc_regs.o[3] = from->o3;
-        to->integer.sparc_regs.o[4] = from->o4;
-        to->integer.sparc_regs.o[5] = from->o5;
-        to->integer.sparc_regs.o[6] = from->o6;
-        to->integer.sparc_regs.o[7] = from->o7;
-        to->integer.sparc_regs.l[0] = from->l0;
-        to->integer.sparc_regs.l[1] = from->l1;
-        to->integer.sparc_regs.l[2] = from->l2;
-        to->integer.sparc_regs.l[3] = from->l3;
-        to->integer.sparc_regs.l[4] = from->l4;
-        to->integer.sparc_regs.l[5] = from->l5;
-        to->integer.sparc_regs.l[6] = from->l6;
-        to->integer.sparc_regs.l[7] = from->l7;
-        to->integer.sparc_regs.i[0] = from->i0;
-        to->integer.sparc_regs.i[1] = from->i1;
-        to->integer.sparc_regs.i[2] = from->i2;
-        to->integer.sparc_regs.i[3] = from->i3;
-        to->integer.sparc_regs.i[4] = from->i4;
-        to->integer.sparc_regs.i[5] = from->i5;
-        to->integer.sparc_regs.i[6] = from->i6;
-        to->integer.sparc_regs.i[7] = from->i7;
-    }
-    if (flags & CONTEXT_FLOATING_POINT)
-    {
-        /* FIXME */
-    }
-    return STATUS_SUCCESS;
-}
-
-
-/***********************************************************************
- *           context_from_server
- *
- * Convert a register context from the server format.
- */
-NTSTATUS context_from_server( CONTEXT *to, const context_t *from )
-{
-    if (from->cpu != CPU_SPARC) return STATUS_INVALID_PARAMETER;
-
-    to->ContextFlags = CONTEXT_SPARC;
-    if (from->flags & SERVER_CTX_CONTROL)
-    {
-        to->ContextFlags |= CONTEXT_CONTROL;
-        to->psr = from->ctl.sparc_regs.psr;
-        to->pc  = from->ctl.sparc_regs.pc;
-        to->npc = from->ctl.sparc_regs.npc;
-        to->y   = from->ctl.sparc_regs.y;
-        to->wim = from->ctl.sparc_regs.wim;
-        to->tbr = from->ctl.sparc_regs.tbr;
-    }
-    if (from->flags & SERVER_CTX_INTEGER)
-    {
-        to->ContextFlags |= CONTEXT_INTEGER;
-        to->g0 = from->integer.sparc_regs.g[0];
-        to->g1 = from->integer.sparc_regs.g[1];
-        to->g2 = from->integer.sparc_regs.g[2];
-        to->g3 = from->integer.sparc_regs.g[3];
-        to->g4 = from->integer.sparc_regs.g[4];
-        to->g5 = from->integer.sparc_regs.g[5];
-        to->g6 = from->integer.sparc_regs.g[6];
-        to->g7 = from->integer.sparc_regs.g[7];
-        to->o0 = from->integer.sparc_regs.o[0];
-        to->o1 = from->integer.sparc_regs.o[1];
-        to->o2 = from->integer.sparc_regs.o[2];
-        to->o3 = from->integer.sparc_regs.o[3];
-        to->o4 = from->integer.sparc_regs.o[4];
-        to->o5 = from->integer.sparc_regs.o[5];
-        to->o6 = from->integer.sparc_regs.o[6];
-        to->o7 = from->integer.sparc_regs.o[7];
-        to->l0 = from->integer.sparc_regs.l[0];
-        to->l1 = from->integer.sparc_regs.l[1];
-        to->l2 = from->integer.sparc_regs.l[2];
-        to->l3 = from->integer.sparc_regs.l[3];
-        to->l4 = from->integer.sparc_regs.l[4];
-        to->l5 = from->integer.sparc_regs.l[5];
-        to->l6 = from->integer.sparc_regs.l[6];
-        to->l7 = from->integer.sparc_regs.l[7];
-        to->i0 = from->integer.sparc_regs.i[0];
-        to->i1 = from->integer.sparc_regs.i[1];
-        to->i2 = from->integer.sparc_regs.i[2];
-        to->i3 = from->integer.sparc_regs.i[3];
-        to->i4 = from->integer.sparc_regs.i[4];
-        to->i5 = from->integer.sparc_regs.i[5];
-        to->i6 = from->integer.sparc_regs.i[6];
-        to->i7 = from->integer.sparc_regs.i[7];
-    }
-    if (from->flags & SERVER_CTX_FLOATING_POINT)
-    {
-        /* FIXME */
-    }
-    return STATUS_SUCCESS;
-}
-
-
-/**********************************************************************
- *		segv_handler
- *
- * Handler for SIGSEGV.
- */
-static void segv_handler( int signal, siginfo_t *info, void *ucontext )
-{
-    EXCEPTION_RECORD rec;
-    CONTEXT context;
-    NTSTATUS status;
-
-    rec.ExceptionCode = EXCEPTION_ACCESS_VIOLATION;
-
-    /* we want the page-fault case to be fast */
-    if ( info->si_code == SEGV_ACCERR )
-        if (!(rec.ExceptionCode = virtual_handle_fault( info->si_addr, 0 ))) return;
-
-    save_context( &context, ucontext );
-    rec.ExceptionRecord  = NULL;
-    rec.ExceptionFlags   = EXCEPTION_CONTINUABLE;
-    rec.ExceptionAddress = (LPVOID)context.pc;
-    rec.NumberParameters = 2;
-    rec.ExceptionInformation[0] = 0;  /* FIXME: read/write access ? */
-    rec.ExceptionInformation[1] = (ULONG_PTR)info->si_addr;
-
-    status = raise_exception( &rec, &context, TRUE );
-    if (status) raise_status( status, &rec );
-    restore_context( &context, ucontext );
-}
-
-/**********************************************************************
- *		bus_handler
- *
- * Handler for SIGBUS.
- */
-static void bus_handler( int signal, siginfo_t *info, void *ucontext )
-{
-    EXCEPTION_RECORD rec;
-    CONTEXT context;
-    NTSTATUS status;
-
-    save_context( &context, ucontext );
-    rec.ExceptionRecord  = NULL;
-    rec.ExceptionFlags   = EXCEPTION_CONTINUABLE;
-    rec.ExceptionAddress = (LPVOID)context.pc;
-    rec.NumberParameters = 0;
-
-    if ( info->si_code == BUS_ADRALN )
-        rec.ExceptionCode = EXCEPTION_DATATYPE_MISALIGNMENT;
-    else
-        rec.ExceptionCode = EXCEPTION_ACCESS_VIOLATION;
-
-    status = raise_exception( &rec, &context, TRUE );
-    if (status) raise_status( status, &rec );
-    restore_context( &context, ucontext );
-}
-
-/**********************************************************************
- *		ill_handler
- *
- * Handler for SIGILL.
- */
-static void ill_handler( int signal, siginfo_t *info, void *ucontext )
-{
-    EXCEPTION_RECORD rec;
-    CONTEXT context;
-    NTSTATUS status;
-
-    switch ( info->si_code )
-    {
-    default:
-    case ILL_ILLOPC:
-    case ILL_ILLOPN:
-    case ILL_ILLADR:
-    case ILL_ILLTRP:
-        rec.ExceptionCode = EXCEPTION_ILLEGAL_INSTRUCTION;
-        break;
-
-    case ILL_PRVOPC:
-    case ILL_PRVREG:
-        rec.ExceptionCode = EXCEPTION_PRIV_INSTRUCTION;
-        break;
-
-    case ILL_BADSTK:
-        rec.ExceptionCode = EXCEPTION_STACK_OVERFLOW;
-        break;
-    }
-
-    save_context( &context, ucontext );
-    rec.ExceptionRecord  = NULL;
-    rec.ExceptionFlags   = EXCEPTION_CONTINUABLE;
-    rec.ExceptionAddress = (LPVOID)context.pc;
-    rec.NumberParameters = 0;
-    status = raise_exception( &rec, &context, TRUE );
-    if (status) raise_status( status, &rec );
-    restore_context( &context, ucontext );
-}
-
-
-/**********************************************************************
- *		trap_handler
- *
- * Handler for SIGTRAP.
- */
-static void trap_handler( int signal, siginfo_t *info, void *ucontext )
-{
-    EXCEPTION_RECORD rec;
-    CONTEXT context;
-    NTSTATUS status;
-
-    switch ( info->si_code )
-    {
-    case TRAP_TRACE:
-        rec.ExceptionCode = EXCEPTION_SINGLE_STEP;
-        break;
-    case TRAP_BRKPT:
-    default:
-        rec.ExceptionCode = EXCEPTION_BREAKPOINT;
-        break;
-    }
-
-    save_context( &context, ucontext );
-    rec.ExceptionFlags   = EXCEPTION_CONTINUABLE;
-    rec.ExceptionRecord  = NULL;
-    rec.ExceptionAddress = (LPVOID)context.pc;
-    rec.NumberParameters = 0;
-    status = raise_exception( &rec, &context, TRUE );
-    if (status) raise_status( status, &rec );
-    restore_context( &context, ucontext );
-}
-
-
-/**********************************************************************
- *		fpe_handler
- *
- * Handler for SIGFPE.
- */
-static void fpe_handler( int signal, siginfo_t *info, void *ucontext )
-{
-    EXCEPTION_RECORD rec;
-    CONTEXT context;
-    NTSTATUS status;
-
-    switch ( info->si_code )
-    {
-    case FPE_FLTSUB:
-        rec.ExceptionCode = EXCEPTION_ARRAY_BOUNDS_EXCEEDED;
-        break;
-    case FPE_INTDIV:
-        rec.ExceptionCode = EXCEPTION_INT_DIVIDE_BY_ZERO;
-        break;
-    case FPE_INTOVF:
-        rec.ExceptionCode = EXCEPTION_INT_OVERFLOW;
-        break;
-    case FPE_FLTDIV:
-        rec.ExceptionCode = EXCEPTION_FLT_DIVIDE_BY_ZERO;
-        break;
-    case FPE_FLTOVF:
-        rec.ExceptionCode = EXCEPTION_FLT_OVERFLOW;
-        break;
-    case FPE_FLTUND:
-        rec.ExceptionCode = EXCEPTION_FLT_UNDERFLOW;
-        break;
-    case FPE_FLTRES:
-        rec.ExceptionCode = EXCEPTION_FLT_INEXACT_RESULT;
-        break;
-    case FPE_FLTINV:
-    default:
-        rec.ExceptionCode = EXCEPTION_FLT_INVALID_OPERATION;
-        break;
-    }
-
-    save_context( &context, ucontext );
-    save_fpu( &context, ucontext );
-    rec.ExceptionFlags   = EXCEPTION_CONTINUABLE;
-    rec.ExceptionRecord  = NULL;
-    rec.ExceptionAddress = (LPVOID)context.pc;
-    rec.NumberParameters = 0;
-    status = raise_exception( &rec, &context, TRUE );
-    if (status) raise_status( status, &rec );
-    restore_context( &context, ucontext );
-    restore_fpu( &context, ucontext );
-}
-
-
-/**********************************************************************
- *		int_handler
- *
- * Handler for SIGINT.
- */
-static void int_handler( int signal, siginfo_t *info, void *ucontext )
-{
-    if (!dispatch_signal(SIGINT))
-    {
-        EXCEPTION_RECORD rec;
-        CONTEXT context;
-        NTSTATUS status;
-
-        save_context( &context, ucontext );
-        rec.ExceptionCode    = CONTROL_C_EXIT;
-        rec.ExceptionFlags   = EXCEPTION_CONTINUABLE;
-        rec.ExceptionRecord  = NULL;
-        rec.ExceptionAddress = (LPVOID)context.pc;
-        rec.NumberParameters = 0;
-        status = raise_exception( &rec, &context, TRUE );
-        if (status) raise_status( status, &rec );
-        restore_context( &context, ucontext );
-    }
-}
-
-/**********************************************************************
- *		abrt_handler
- *
- * Handler for SIGABRT.
- */
-static void abrt_handler( int signal, struct siginfo *info, void *ucontext )
-{
-    EXCEPTION_RECORD rec;
-    CONTEXT context;
-    NTSTATUS status;
-
-    save_context( &context, ucontext );
-    rec.ExceptionCode    = EXCEPTION_WINE_ASSERTION;
-    rec.ExceptionFlags   = EH_NONCONTINUABLE;
-    rec.ExceptionRecord  = NULL;
-    rec.ExceptionAddress = (LPVOID)context.pc;
-    rec.NumberParameters = 0;
-    status = raise_exception( &rec, &context, TRUE );
-    if (status) raise_status( status, &rec );
-    restore_context( &context, ucontext );
-}
-
-
-/**********************************************************************
- *		quit_handler
- *
- * Handler for SIGQUIT.
- */
-static void quit_handler( int signal, struct siginfo *info, void *ucontext )
-{
-    abort_thread(0);
-}
-
-
-/**********************************************************************
- *		usr1_handler
- *
- * Handler for SIGUSR1, used to signal a thread that it got suspended.
- */
-static void usr1_handler( int signal, struct siginfo *info, void *ucontext )
-{
-    CONTEXT context;
-
-    save_context( &context, ucontext );
-    wait_suspend( &context );
-    restore_context( &context, ucontext );
-}
-
-
-/***********************************************************************
- *           __wine_set_signal_handler   (NTDLL.@)
- */
-int CDECL __wine_set_signal_handler(unsigned int sig, wine_signal_handler wsh)
-{
-    if (sig > sizeof(handlers) / sizeof(handlers[0])) return -1;
-    if (handlers[sig] != NULL) return -2;
-    handlers[sig] = wsh;
-    return 0;
-}
-
-
-/**********************************************************************
- *		signal_alloc_thread
- */
-NTSTATUS signal_alloc_thread( TEB **teb )
-{
-    static size_t sigstack_zero_bits;
-    SIZE_T size;
-    NTSTATUS status;
-
-    if (!sigstack_zero_bits)
-    {
-        size_t min_size = page_size;
-        /* find the first power of two not smaller than min_size */
-        while ((1u << sigstack_zero_bits) < min_size) sigstack_zero_bits++;
-        assert( sizeof(TEB) <= min_size );
-    }
-
-    size = 1 << sigstack_zero_bits;
-    *teb = NULL;
-    if (!(status = NtAllocateVirtualMemory( NtCurrentProcess(), (void **)teb, sigstack_zero_bits,
-                                            &size, MEM_COMMIT | MEM_TOP_DOWN, PAGE_READWRITE )))
-    {
-        (*teb)->Tib.Self = &(*teb)->Tib;
-        (*teb)->Tib.ExceptionList = (void *)~0UL;
-    }
-    return status;
-}
-
-
-/**********************************************************************
- *		signal_free_thread
- */
-void signal_free_thread( TEB *teb )
-{
-    SIZE_T size;
-
-    if (teb->DeallocationStack)
-    {
-        size = 0;
-        NtFreeVirtualMemory( GetCurrentProcess(), &teb->DeallocationStack, &size, MEM_RELEASE );
-    }
-    size = 0;
-    NtFreeVirtualMemory( NtCurrentProcess(), (void **)&teb, &size, MEM_RELEASE );
-}
-
-
-/**********************************************************************
- *		signal_init_thread
- */
-void signal_init_thread( TEB *teb )
-{
-    static int init_done;
-
-    if (!init_done)
-    {
-        pthread_key_create( &teb_key, NULL );
-        init_done = 1;
-    }
-    pthread_setspecific( teb_key, teb );
-}
-
-
-/**********************************************************************
- *		signal_init_process
- */
-void signal_init_process(void)
-{
-    struct sigaction sig_act;
-
-    sig_act.sa_mask = server_block_set;
-    sig_act.sa_flags = SA_RESTART | SA_SIGINFO;
-
-    sig_act.sa_sigaction = int_handler;
-    if (sigaction( SIGINT, &sig_act, NULL ) == -1) goto error;
-    sig_act.sa_sigaction = fpe_handler;
-    if (sigaction( SIGFPE, &sig_act, NULL ) == -1) goto error;
-    sig_act.sa_sigaction = abrt_handler;
-    if (sigaction( SIGABRT, &sig_act, NULL ) == -1) goto error;
-    sig_act.sa_sigaction = quit_handler;
-    if (sigaction( SIGQUIT, &sig_act, NULL ) == -1) goto error;
-    sig_act.sa_sigaction = usr1_handler;
-    if (sigaction( SIGUSR1, &sig_act, NULL ) == -1) goto error;
-
-    sig_act.sa_sigaction = segv_handler;
-    if (sigaction( SIGSEGV, &sig_act, NULL ) == -1) goto error;
-    sig_act.sa_sigaction = ill_handler;
-    if (sigaction( SIGILL, &sig_act, NULL ) == -1) goto error;
-#ifdef SIGBUS
-    sig_act.sa_sigaction = bus_handler;
-    if (sigaction( SIGBUS, &sig_act, NULL ) == -1) goto error;
-#endif
-
-#ifdef SIGTRAP
-    sig_act.sa_sigaction = trap_handler;
-    if (sigaction( SIGTRAP, &sig_act, NULL ) == -1) goto error;
-#endif
-
-#ifdef __sun__
-    /* 'ta 6' tells the kernel to synthesize any unaligned accesses this 
-       process makes, instead of just signalling an error and terminating
-       the process.  wine-devel did not reach a conclusion on whether
-       this is correct, because that is what x86 does, or it is harmful 
-       because it could obscure problems in user code */
-    __asm__("ta 6"); /* 6 == ST_FIX_ALIGN defined in sys/trap.h */
-#endif
-
-    return;
- error:
-    perror("sigaction");
-    exit(1);
-}
-
-
-/**********************************************************************
- *		__wine_enter_vm86
- */
-void __wine_enter_vm86( CONTEXT *context )
-{
-    MESSAGE("vm86 mode not supported on this platform\n");
-}
-
-/***********************************************************************
- *            RtlUnwind  (NTDLL.@)
- */
-void WINAPI RtlUnwind( PVOID pEndFrame, PVOID targetIp, PEXCEPTION_RECORD pRecord, PVOID retval )
-{
-    FIXME( "Not implemented on Sparc\n" );
-}
-
-/*******************************************************************
- *		NtRaiseException (NTDLL.@)
- */
-NTSTATUS WINAPI NtRaiseException( EXCEPTION_RECORD *rec, CONTEXT *context, BOOL first_chance )
-{
-    NTSTATUS status = raise_exception( rec, context, first_chance );
-    if (status == STATUS_SUCCESS) NtSetContextThread( GetCurrentThread(), context );
-    return status;
-}
-
-/***********************************************************************
- *		RtlRaiseException (NTDLL.@)
- */
-void WINAPI RtlRaiseException( EXCEPTION_RECORD *rec )
-{
-    CONTEXT context;
-    NTSTATUS status;
-
-    RtlCaptureContext( &context );
-    rec->ExceptionAddress = (void *)context.pc;
-    status = raise_exception( rec, &context, TRUE );
-    if (status) raise_status( status, rec );
-}
-
-/*************************************************************************
- *		RtlCaptureStackBackTrace (NTDLL.@)
- */
-USHORT WINAPI RtlCaptureStackBackTrace( ULONG skip, ULONG count, PVOID *buffer, ULONG *hash )
-{
-    FIXME( "(%d, %d, %p, %p) stub!\n", skip, count, buffer, hash );
-    return 0;
-}
-
-/***********************************************************************
- *           call_thread_entry_point
- */
-void call_thread_entry_point( LPTHREAD_START_ROUTINE entry, void *arg )
-{
-    __TRY
-    {
-        exit_thread( entry( arg ));
-    }
-    __EXCEPT(unhandled_exception_filter)
-    {
-        NtTerminateThread( GetCurrentThread(), GetExceptionCode() );
-    }
-    __ENDTRY
-    abort();  /* should not be reached */
-}
-
-/***********************************************************************
- *           RtlExitUserThread  (NTDLL.@)
- */
-void WINAPI RtlExitUserThread( ULONG status )
-{
-    exit_thread( status );
-}
-
-/***********************************************************************
- *           abort_thread
- */
-void abort_thread( int status )
-{
-    terminate_thread( status );
-}
-
-/**********************************************************************
- *              DbgBreakPoint   (NTDLL.@)
- */
-void WINAPI DbgBreakPoint(void)
-{
-     kill(getpid(), SIGTRAP);
-}
-
-/**********************************************************************
- *              DbgUserBreakPoint   (NTDLL.@)
- */
-void WINAPI DbgUserBreakPoint(void)
-{
-     kill(getpid(), SIGTRAP);
-}
-
-/**********************************************************************
- *           NtCurrentTeb   (NTDLL.@)
- */
-TEB * WINAPI NtCurrentTeb(void)
-{
-    return pthread_getspecific( teb_key );
-}
-
-#endif  /* __sparc__ */
diff --git a/dlls/ntdll/virtual.c b/dlls/ntdll/virtual.c
index 924ec46..a99bca4 100644
--- a/dlls/ntdll/virtual.c
+++ b/dlls/ntdll/virtual.c
@@ -1085,7 +1085,6 @@ static NTSTATUS check_architecture( const IMAGE_NT_HEADERS *nt )
         case IMAGE_FILE_MACHINE_ARM:     arch = "ARM"; break;
         case IMAGE_FILE_MACHINE_ARMNT:   arch = "ARMNT"; break;
         case IMAGE_FILE_MACHINE_THUMB:   arch = "ARM Thumb"; break;
-        case IMAGE_FILE_MACHINE_SPARC:   arch = "SPARC"; break;
         default: arch = wine_dbg_sprintf( "Unknown-%04x", nt->FileHeader.Machine ); break;
     }
     ERR( "Trying to load PE image for unsupported architecture %s\n", arch );
-- 
1.8.0



-- 

Best Regards, André Hentschel


More information about the wine-patches mailing list