Source to driverkit/ppc/IOSupport.c


Enter a symbol's name here to quickly find it.

/*
 * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
 *
 * @APPLE_LICENSE_HEADER_START@
 * 
 * "Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
 * Reserved.  This file contains Original Code and/or Modifications of
 * Original Code as defined in and that are subject to the Apple Public
 * Source License Version 1.0 (the 'License').  You may not use this file
 * except in compliance with the License.  Please obtain a copy of the
 * License at http://www.apple.com/publicsource and read it before using
 * this file.
 * 
 * The Original Code and all software distributed under the License are
 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
 * License for the specific language governing rights and limitations
 * under the License."
 * 
 * @APPLE_LICENSE_HEADER_END@
 */

 /*
 * Copyright (c) 1997 Apple Computer, Inc.
 *
 *
 */

#include <diagnostic.h>
#import <mach/mach_types.h>
#include <machine/setjmp.h>
#import <machine/label_t.h>

/* Call the TVector with thread exception recovery */

extern int
CallTVector_NoRecover(
    void * p1, void * p2, void * p3, void * p4, void * p5, void * p6,
    void * entry );

int
CallTVector(
    void * p1, void * p2, void * p3, void * p4, void * p5, void * p6,
    void * entry )
{
    label_t	jmpbuf;
    int		err;
	vm_offset_t tmpbuf = current_thread()->recover;

#if DIAGNOSTIC
	if(tmpbuf)
		kprintf("CallTVector() ****** NESTED SETJUMP ******\n");
#endif /* DIAGNOSTIC */

    if (setjmp(&jmpbuf)) {
        err = -999;
    } else {

        current_thread()->recover = (vm_offset_t)&jmpbuf;
        err = CallTVector_NoRecover( p1, p2, p3, p4, p5, p6, entry);
    }
    current_thread()->recover = (vm_offset_t)tmpbuf;
    return( err);
}