X-Git-Url: https://git.saurik.com/apple/libc.git/blobdiff_plain/a28bf75d63c6a64e4c3b417c6052e45f42c6cedd..6465356a983ac139f81d3b7913cdb548477c346c:/gen/platfunc.h diff --git a/gen/platfunc.h b/gen/platfunc.h deleted file mode 100644 index 58c117c..0000000 --- a/gen/platfunc.h +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright (c) 2003-2010 Apple Inc. All rights reserved. - * - * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ - * - * 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 2.0 (the 'License'). You may not use this file except in - * compliance with the License. The rights granted to you under the License - * may not be used to create, or enable the creation or redistribution of, - * unlawful or unlicensed copies of an Apple operating system, or to - * circumvent, violate, or enable the circumvention or violation of, any - * terms of an Apple operating system software license agreement. - * - * Please obtain a copy of the License at - * http://www.opensource.apple.com/apsl/ 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, QUIET ENJOYMENT OR NON-INFRINGEMENT. - * Please see the License for the specific language governing rights and - * limitations under the License. - * - * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ - */ - -#if defined(__i386__) || defined(__x86_64__) - -#ifndef _I386_PLATFUNC_H -#define _I386_PLATFUNC_H - -#ifndef __ASSEMBLER__ -#include -#endif /* __ASSEMBLER__ */ - -// This is a shared macro which calls PLATFUNC_VARIANT_NAME which has different -// implementations in __ASSEMBLER__ and !__ASSEMBLER__ -#define PLATFUNC_DESCRIPTOR_NAME(name, variant) \ - PLATFUNC_VARIANT_NAME(platfunc_ ## name, variant) - -#ifdef __ASSEMBLER__ - -/* When trying to acquire a spinlock or mutex, we will spin in - * user mode for awhile, before entering the kernel to relinquish. - * MP_SPIN_TRIES is the initial value of _COMM_PAGE_SPIN_COUNT. - * The idea is that _COMM_PAGE_SPIN_COUNT will be adjusted up or - * down as the machine is plugged in/out, etc. - * At present spinlocks do not use _COMM_PAGE_SPIN_COUNT. - * They use MP_SPIN_TRIES directly. - */ -#define MP_SPIN_TRIES 1000 - -#define PLATFUNC_VARIANT_NAME(name, variant) _ ## name ## $VARIANT$ ## variant - -#if defined (__i386__) -#define PLATFUNC_DESCRIPTOR_FIELD_POINTER .long -#define PLATFUNC_DESCRIPTOR_REFERENCE(name, variant) \ - .long PLATFUNC_DESCRIPTOR_NAME(name, variant) -#elif defined (__x86_64__) -#define PLATFUNC_DESCRIPTOR_FIELD_POINTER .quad -#define PLATFUNC_DESCRIPTOR_REFERENCE(name, variant) \ - .quad PLATFUNC_DESCRIPTOR_NAME(name, variant) -#else -#error unsupported architecture -#endif - -#ifdef VARIANT_DYLD - -#define PLATFUNC_FUNCTION_START_GENERIC(name, variant, codetype, alignment) \ - PLATFUNC_FUNCTION_START(name, variant, codetype, alignment) \ - .globl _ ## name ;\ - _ ## name ## : - -#define PLATFUNC_DESCRIPTOR(name, variant, must, cant) - -#else /* VARIANT_DYLD */ - -#define PLATFUNC_FUNCTION_START_GENERIC PLATFUNC_FUNCTION_START - -#define PLATFUNC_DESCRIPTOR(name, variant, must, cant) \ - .const_data ;\ - .private_extern PLATFUNC_DESCRIPTOR_NAME(name, variant) ;\ - PLATFUNC_DESCRIPTOR_NAME(name, variant) ## : ;\ - PLATFUNC_DESCRIPTOR_FIELD_POINTER PLATFUNC_VARIANT_NAME(name, variant) ;\ - .long must ;\ - .long cant ;\ - .text - -#endif /* VARIANT_DYLD */ - -#define PLATFUNC_FUNCTION_START(name, variant, codetype, alignment) \ - .text ;\ - .align alignment, 0x90 ;\ - .private_extern PLATFUNC_VARIANT_NAME(name, variant) ;\ - PLATFUNC_VARIANT_NAME(name, variant) ## : - -#else /* __ASSEMBLER__ */ - -#define PLATFUNC_VARIANT_NAME(name, variant) name ## $VARIANT$ ## variant -#define PLATFUNC_DESCRIPTOR_PROTOTYPE(name, variant) extern const platfunc_descriptor PLATFUNC_DESCRIPTOR_NAME(name, variant); -#define PLATFUNC_DESCRIPTOR_REFERENCE(name, variant) &PLATFUNC_DESCRIPTOR_NAME(name, variant) - -#define PLATFUNC_DESCRIPTOR(name, variant, must, cant) \ - extern void PLATFUNC_VARIANT_NAME(name, variant) (void); \ - const platfunc_descriptor PLATFUNC_DESCRIPTOR_NAME(name, variant) = { \ - .address = PLATFUNC_VARIANT_NAME(name, variant), \ - .musthave = must, \ - .canthave = cant \ - } - -/* - * Each potential platfunc routine is described by one of these. - * Note that the PLATFUNC_DESCRIPTOR macro (above), used in - * assembly language, must agree with this. - */ - -typedef struct platfunc_descriptor { - void *address; // address of code - uint32_t musthave; // _cpu_capability bits we must have - uint32_t canthave; // _cpu_capability bits we can't have -} platfunc_descriptor; - -void *find_platform_function(const platfunc_descriptor *descriptors[]); - -#endif /* __ASSEMBLER__ */ - -#endif /* _I386_PLATFUNC_H */ - -#endif /* __i386__ || __x86_64__ */