1/* 2 * Copyright (c) 2005-2007 Apple Inc. All rights reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. Please obtain a copy of the License at 10 * http://www.opensource.apple.com/apsl/ and read it before using this 11 * file. 12 * 13 * The Original Code and all software distributed under the License are 14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 18 * Please see the License for the specific language governing rights and 19 * limitations under the License. 20 * 21 * @APPLE_LICENSE_HEADER_END@ 22 */ 23/* 24 * _libc_initializer() is called from libSystem_initializer() 25 */ 26 27#include <limits.h> 28#include <stdint.h> 29#include <string.h> 30#include <machine/cpu_capabilities.h> 31#include <TargetConditionals.h> 32 33#include "libc_private.h" 34 35extern void _program_vars_init(const struct ProgramVars *vars); 36extern void _libc_fork_init(const struct _libc_functions *funcs); 37extern void __atexit_init(void); 38extern void __confstr_init(const struct _libc_functions *funcs); 39extern void _init_clock_port(void); 40extern void __chk_init(void); 41extern void __xlocale_init(void); 42extern void __guard_setup(const char *apple[]); 43 44void 45_libc_initializer(const struct _libc_functions *funcs, 46 const char *envp[], 47 const char *apple[], 48 const struct ProgramVars *vars) 49{ 50 _program_vars_init(vars); 51 _libc_fork_init(funcs); 52 __confstr_init(funcs); 53 __atexit_init(); 54 _init_clock_port(); 55 __chk_init(); 56 __xlocale_init(); 57 __guard_setup(apple); 58} 59 60 61void 62__libc_init(const struct ProgramVars *vars, 63 void (*atfork_prepare)(void), 64 void (*atfork_parent)(void), 65 void (*atfork_child)(void), 66 const char *apple[]) 67{ 68 const struct _libc_functions funcs = { 69 .version = 1, 70 .atfork_prepare = atfork_prepare, 71 .atfork_parent = atfork_parent, 72 .atfork_child = atfork_child, 73 .dirhelper = NULL, 74 }; 75 76 return _libc_initializer(&funcs, NULL, apple, vars); 77} 78