[darwin.stdenv] Fix to work on Sierra

This reinstates the libSystem selective symbol export machinery we used
to have, but locks it to the symbols that were present in 10.11 and skips
the actual compiled code we put into that library in favor of the system
initialization code. That should make it more stable and less likely to
do weird stuff than the last time we did this.
This commit is contained in:
Dan Peebles 2016-10-10 09:50:25 -04:00
parent 7098404505
commit d8a0307a5d
6 changed files with 246 additions and 279 deletions

View File

@ -35,6 +35,18 @@ in stdenv.mkDerivation rec {
propagatedBuildInputs = [ ncurses zlib ];
# The goal here is to disable LLVM bindings (currently go and ocaml) regardless
# of whether the impure CMake search sheananigans find the compilers in global
# paths. This mostly exists because sandbox builds don't work very well on Darwin
# and sometimes you get weird behavior if CMake finds go in your system path.
# This would be far prettier if there were a CMake option to just disable bindings
# but from what I can tell, there isn't such a thing. The file in question only
# contains `if(WIN32)` conditions to check whether to disable bindings, so making
# those always succeed has the net effect of disabling all bindings.
prePatch = ''
substituteInPlace cmake/config-ix.cmake --replace "if(WIN32)" "if(1)"
'';
# hacky fix: created binaries need to be run before installation
preBuild = ''
mkdir -p $out/

View File

@ -56,9 +56,40 @@ appleDerivation rec {
# The startup object files
cp ${Csu}/lib/* $out/lib
# OMG impurity
ln -s /usr/lib/libSystem.B.dylib $out/lib/libSystem.B.dylib
ln -s /usr/lib/libSystem.dylib $out/lib/libSystem.dylib
# Narrowly speaking, these would work if we re-exported libsystem_c and libsystem_kernel,
# but we also need to run the original central libsystem constructor (which initializes
# a ton of crap for its consitutent libraries) so we link against the central library here.
mkdir -p $out/lib/system
ld -macosx_version_min 10.7 -arch x86_64 -dylib \
-o $out/lib/system/libsystem_c.dylib \
/usr/lib/libSystem.dylib \
-reexported_symbols_list ${./system_c_symbols}
ld -macosx_version_min 10.7 -arch x86_64 -dylib \
-o $out/lib/system/libsystem_kernel.dylib \
/usr/lib/libSystem.dylib \
-reexported_symbols_list ${./system_kernel_symbols}
libs=$(otool -arch x86_64 -L /usr/lib/libSystem.dylib | tail -n +3 | awk '{ print $1 }')
for i in $libs; do
if [ "$i" != "/usr/lib/system/libsystem_kernel.dylib" ] && [ "$i" != "/usr/lib/system/libsystem_c.dylib" ]; then
args="$args -reexport_library $i"
fi
done
ld -macosx_version_min 10.7 \
-arch x86_64 \
-dylib \
-o $out/lib/libSystem.B.dylib \
-compatibility_version 1.0 \
-current_version 1226.10.1 \
-reexport_library $out/lib/system/libsystem_c.dylib \
-reexport_library $out/lib/system/libsystem_kernel.dylib \
$args
ln -s libSystem.B.dylib $out/lib/libSystem.dylib
# Set up links to pretend we work like a conventional unix (Apple's design, not mine!)
for name in c dbm dl info m mx poll proc pthread rpcsvc util gcc_s.10.4 gcc_s.10.5; do

View File

@ -1,14 +1,3 @@
_NSGetNextSearchPathEnumeration
_NSStartSearchPathEnumeration
_OSAtomicAdd32
_OSAtomicAdd32Barrier
_OSAtomicAnd32
_OSAtomicDequeue
_OSAtomicEnqueue
_OSSpinLockLock
_OSSpinLockUnlock
__Block_copy
__Block_release
__CurrentRuneLocale
__DefaultRuneLocale
__Exit
@ -62,20 +51,18 @@ ___bt_setcur
___bt_split
___bt_sync
___buf_free
___bzero
___cVersionNumber
___cVersionString
___call_hash
___chmod_extended
___cleanup
___cmp_D2A
___collate_equiv_match
___collate_load_error
___collate_lookup
___commpage_gettimeofday
___copybits_D2A
___cxa_atexit
___cxa_finalize
___cxa_finalize_ranges
___cxa_thread_atexit
___d2b_D2A
___dbpanic
@ -85,34 +72,21 @@ ___default_utx
___delpair
___diff_D2A
___dtoa
___error
___exit
___expand_table
___fchmod_extended
___fcntl
___fcntl_nocancel
___fflush
___fgetwc
___find_bigpair
___find_last_page
___fix_locale_grouping_str
___fork
___fpclassifyd
___fpclassifyl
___fread
___free_ovflpage
___freedtoa
___fstat64_extended
___fstat_extended
___gdtoa
___gdtoa_locks
___get_buf
___get_page
___getdirentries64
___gethex_D2A
___getlogin
___getonlyClocaleconv
___gettimeofday
___hash_open
___hdtoa
___hexdig_D2A
@ -126,14 +100,11 @@ ___increment_D2A
___isctype
___istype
___istype_l
___kill
___ldtoa
___libc_init
___lo0bits_D2A
___log2
___lshift_D2A
___lstat64_extended
___lstat_extended
___maskrune
___maskrune_l
___match_D2A
@ -143,22 +114,15 @@ ___memccpy_chk
___memcpy_chk
___memmove_chk
___memset_chk
___mkdir_extended
___mkfifo_extended
___mult_D2A
___multadd_D2A
___nrv_alloc_D2A
___open
___open_extended
___open_nocancel
___opendir2
___opendir2$INODE64
___ovfl_delete
___ovfl_get
___ovfl_put
___pow5mult_D2A
___pthread_sigmask
___pthread_workqueue_setkill
___put_page
___quorem_D2A
___ratio_D2A
@ -179,29 +143,19 @@ ___rec_sync
___rec_vmap
___rec_vpipe
___reclaim_buf
___recvfrom
___recvfrom_nocancel
___rshift_D2A
___rv_alloc_D2A
___s2b_D2A
___sF
___sclose
___sdidinit
___semwait_signal
___semwait_signal_nocancel
___sendto
___sendto_nocancel
___set_ones_D2A
___setlogin
___setonlyClocaleconv
___settimeofday
___sflags
___sflush
___sfp
___sfvwrite
___sglue
___sigaction
___sigaltstack
___sinit
___slbexpand
___smakebuf
@ -214,8 +168,6 @@ ___srget
___sseek
___stack_chk_fail
___stack_chk_guard
___stat64_extended
___stat_extended
___stderrp
___stdinp
___stdoutp
@ -237,7 +189,6 @@ ___swbuf
___swhatbuf
___swrite
___swsetup
___sysctl
___tens_D2A
___tinytens_D2A
___tolower
@ -246,31 +197,25 @@ ___toupper
___toupper_l
___trailz_D2A
___ulp_D2A
___umask_extended
___ungetc
___ungetwc
___unix_conforming
___vsnprintf_chk
___vsprintf_chk
___wait4
___wait4_nocancel
___wcwidth
___wcwidth_l
__allocenvstate
__atexit_receipt
__c_locale
__cleanup
__closeutx
__copyenv
__cthread_init_routine
__deallocenvstate
__dyld_register_func_for_add_image
__endutxent
__exit
__flockfile_debug_stub
__fseeko
__ftello
__fwalk
__get_cpu_capabilities
__getenvp
__getutxent
__getutxid
@ -279,34 +224,20 @@ __inet_aton_check
__init_clock_port
__int_to_time
__libc_fork_child
__libc_initializer
__long_to_time
__mkpath_np
__mktemp
__openutx
__os_alloc_once
__os_alloc_once_table
__os_assert_log
__os_assert_log_ctx
__os_assumes_log
__os_assumes_log_ctx
__os_avoid_tail_call
__osx_assert_log
__osx_assert_log_ctx
__osx_assumes_log
__osx_assumes_log_ctx
__osx_avoid_tail_call
__platform_bzero
__platform_memccpy
__platform_memchr
__platform_memcmp
__platform_memmove
__platform_memset
__platform_memset_pattern16
__platform_memset_pattern4
__platform_memset_pattern8
__platform_strchr
__platform_strcmp
__platform_strncmp
__os_crash
__os_crash_callback
__os_debug_log
__os_debug_log_error_str
__putenvp
__pututxline
__rand48_add
@ -322,20 +253,7 @@ __setutxent
__sigaction_nobind
__sigintr
__signal_nobind
__sigtramp
__sigvec_nobind
__simple_asl_log
__simple_asl_log_prog
__simple_asl_msg_new
__simple_asl_msg_set
__simple_asl_send
__simple_dprintf
__simple_salloc
__simple_sappend
__simple_sfree
__simple_sprintf
__simple_string
__simple_vsprintf
__sread
__sseek
__swrite
@ -345,14 +263,12 @@ __time_to_int
__time_to_long
__time_to_time32
__time_to_time64
__tlv_atexit
__tlv_exit
__unsetenvp
__utmpxname
_a64l
_abort
_abort_report_np
_abs
_access
_acl_add_flag_np
_acl_add_perm
_acl_calc_mask
@ -416,12 +332,6 @@ _arc4random_uniform
_ascii2addr
_asctime
_asctime_r
_asl_get
_asl_new
_asl_open
_asl_send
_asl_set
_asl_set_query
_asprintf
_asprintf_l
_asxprintf
@ -442,8 +352,6 @@ _backtrace_symbols_fd
_basename
_bcmp
_bcopy
_bootstrap_parent
_bootstrap_port
_brk
_bsd_signal
_bsearch
@ -451,7 +359,6 @@ _bsearch_b
_btowc
_btowc_l
_bzero
_calloc
_catclose
_catgets
_catopen
@ -471,17 +378,12 @@ _cgetnum
_cgetset
_cgetstr
_cgetustr
_chdir
_chflags
_chmod
_chmodx_np
_clearerr
_clearerr_unlocked
_clock
_clock_get_time
_clock_port
_clock_sem
_close$NOCANCEL
_closedir
_compat_mode
_confstr
@ -514,19 +416,13 @@ _digittoint
_digittoint_l
_dirfd
_dirname
_dispatch_get_global_queue
_div
_dladdr
_dlsym
_dprintf
_dprintf_l
_drand48
_dup2
_duplocale
_dxprintf
_dxprintf_exec
_dyld_get_program_sdk_version
_dyld_get_sdk_version
_ecvt
_encrypt
_endttyent
@ -545,26 +441,22 @@ _execle
_execlp
_execv
_execvP
_execve
_execvp
_exit
_f_prealloc
_fchdir
_fchmodx_np
_fclose
_fcntl$NOCANCEL
_fcvt
_fdopen
_fdopen$DARWIN_EXTSN
_fegetenv
_fdopendir
_fdopendir$INODE64
_feof
_feof_unlocked
_ferror
_ferror_unlocked
_fesetenv
_fflagstostr
_fflush
_ffsctl
_fgetc
_fgetln
_fgetpos
@ -586,7 +478,6 @@ _filesec_query_property
_filesec_set_property
_filesec_unset_property
_flockfile
_flsl
_fmtcheck
_fmtmsg
_fnmatch
@ -606,33 +497,24 @@ _fputwc_l
_fputws
_fputws_l
_fread
_free
_free_printf_comp
_free_printf_domain
_freeifaddrs
_freelocale
_freopen
_fscanf
_fscanf_l
_fsctl
_fseek
_fseeko
_fsetpos
_fstat
_fstat$INODE64
_fstatfs
_fstatfs$INODE64
_fstatvfs
_fstatx64_np
_fstatx_np
_fstatx_np$INODE64
_fsync$NOCANCEL
_fsync_volume_np
_ftell
_ftello
_ftime
_ftok
_ftruncate
_ftrylockfile
_fts_children
_fts_children$INODE64
@ -660,7 +542,6 @@ _fwscanf_l
_fxprintf
_fxprintf_exec
_gcvt
_getattrlist
_getbsize
_getc
_getc_unlocked
@ -670,22 +551,11 @@ _getcwd
_getdate
_getdate_err
_getdelim
_getdirentries
_getdiskbyname
_getdtablesize
_getenv
_geteuid
_getfsstat
_getfsstat$INODE64
_getfsstat64
_getgrgid
_getgrnam
_getgroupcount
_getgrouplist
_getgroups$DARWIN_EXTSN
_gethostid
_gethostname
_getifaddrs
_getipv4sourcefilter
_getlastlogx
_getlastlogxbyname
@ -703,24 +573,13 @@ _getopt_long_only
_getpagesize
_getpass
_getpeereid
_getpgrp
_getpid
_getpriority
_getprogname
_getpwnam
_getpwuid
_getpwuid_r
_getrlimit
_getrusage
_gets
_getsectiondata
_getsockopt
_getsourcefilter
_getsubopt
_gettimeofday
_getttyent
_getttynam
_getuid
_getusershell
_getutmp
_getutmpx
@ -753,9 +612,7 @@ _hcreate
_hdestroy
_heapsort
_heapsort_b
_host_get_clock_service
_hsearch
_if_nametoindex
_imaxabs
_imaxdiv
_index
@ -777,7 +634,6 @@ _inet_ntop6
_inet_pton
_initstate
_insque
_ioctl
_isalnum
_isalnum_l
_isalpha
@ -808,7 +664,6 @@ _ispunct
_ispunct_l
_isrune
_isrune_l
_issetugid
_isspace
_isspace_l
_isspecial
@ -857,7 +712,7 @@ _iswxdigit_l
_isxdigit
_isxdigit_l
_jrand48
_kill
_kOSThermalNotificationPressureLevelName
_killpg
_l64a
_labs
@ -882,26 +737,13 @@ _logout
_logwtmp
_lrand48
_lsearch
_lseek
_lstat
_lstat$INODE64
_lstatx64_np
_lstatx_np
_lstatx_np$INODE64
_lutimes
_mach_absolute_time
_mach_error_string
_mach_host_self
_mach_port_deallocate
_mach_task_self_
_mach_timebase_info
_malloc
_mblen
_mblen_l
_mbmb
_mbr_gid_to_uuid
_mbr_uid_to_uuid
_mbr_uuid_to_id
_mbrlen
_mbrlen_l
_mbrrune
@ -931,7 +773,6 @@ _memset_pattern8
_memset_s
_mergesort
_mergesort_b
_mkdir
_mkdirx_np
_mkdtemp
_mkfifox_np
@ -940,7 +781,6 @@ _mkstemp
_mkstemps
_mktemp
_mktime
_mmap
_monaddition
_moncontrol
_moncount
@ -957,10 +797,6 @@ _mpool_open
_mpool_put
_mpool_sync
_mrand48
_munmap
_nan
_nanf
_nanl
_nanosleep
_nanosleep$NOCANCEL
_new_printf_comp
@ -973,16 +809,10 @@ _nftw$INODE64
_nice
_nl_langinfo
_nl_langinfo_l
_notify_cancel
_notify_check
_notify_monitor_file
_notify_post
_notify_register_check
_nrand48
_off32
_off64
_offtime
_open$NOCANCEL
_opendev
_opendir
_opendir$INODE64
@ -993,60 +823,21 @@ _opterr
_optind
_optopt
_optreset
_pathconf
_pause
_pause$NOCANCEL
_pclose
_perror
_pipe
_popen
_popen$DARWIN_EXTSN
_posix2time
_posix_openpt
_posix_spawn
_posix_spawn_file_actions_addclose
_posix_spawn_file_actions_adddup2
_posix_spawn_file_actions_destroy
_posix_spawn_file_actions_init
_posix_spawnattr_destroy
_posix_spawnattr_init
_posix_spawnattr_setflags
_posix_spawnattr_setsigdefault
_posix_spawnattr_setsigmask
_posix_spawnp
_pread$NOCANCEL
_printf
_printf_l
_proc_name
_pselect
_pselect$1050
_pselect$DARWIN_EXTSN
_pselect$DARWIN_EXTSN$NOCANCEL
_pselect$NOCANCEL
_psignal
_psort
_psort_b
_psort_r
_pthread_get_stackaddr_np
_pthread_get_stacksize_np
_pthread_getspecific
_pthread_key_create
_pthread_key_init_np
_pthread_kill
_pthread_mutex_destroy
_pthread_mutex_init
_pthread_mutex_lock
_pthread_mutex_trylock
_pthread_mutex_unlock
_pthread_once
_pthread_rwlock_destroy
_pthread_rwlock_rdlock
_pthread_rwlock_unlock
_pthread_rwlock_wrlock
_pthread_self
_pthread_setspecific
_pthread_sigmask
_pthread_testcancel
_ptsname
_putc
_putc_unlocked
@ -1060,7 +851,6 @@ _putwc
_putwc_l
_putwchar
_putwchar_l
_pwrite$NOCANCEL
_qsort
_qsort_b
_qsort_r
@ -1078,14 +868,11 @@ _rb_tree_init
_rb_tree_insert_node
_rb_tree_iterate
_rb_tree_remove_node
_read$NOCANCEL
_readdir
_readdir$INODE64
_readdir_r
_readdir_r$INODE64
_readlink
_readpassphrase
_realloc
_reallocf
_realpath
_realpath$DARWIN_EXTSN
@ -1113,7 +900,6 @@ _rewind
_rewinddir
_rewinddir$INODE64
_rindex
_rmdir
_sbrk
_scandir
_scandir$INODE64
@ -1124,15 +910,8 @@ _scanf_l
_seed48
_seekdir
_seekdir$INODE64
_select
_select$1050
_select$DARWIN_EXTSN
_select$DARWIN_EXTSN$NOCANCEL
_select$NOCANCEL
_semaphore_create
_send
_send$NOCANCEL
_setattrlist
_setbuf
_setbuffer
_setenv
@ -1140,24 +919,16 @@ _sethostid
_sethostname
_setinvalidrune
_setipv4sourcefilter
_setitimer
_setkey
_setlinebuf
_setlocale
_setlogin
_setmode
_setpgid
_setpgrp
_setpriority
_setprogname
_setregid
_setreuid
_setrgid
_setrlimit
_setruid
_setrunelocale
_setsid
_setsockopt
_setsourcefilter
_setstate
_settimeofday
@ -1180,12 +951,9 @@ _sigismember
_signal
_sigpause
_sigpause$NOCANCEL
_sigprocmask
_sigrelse
_sigset
_sigsetmask
_sigsuspend
_sigsuspend$NOCANCEL
_sigvec
_skip
_sl_add
@ -1197,10 +965,6 @@ _sleep$NOCANCEL
_snprintf
_snprintf_l
_sockatmark
_socket
_socketpair
_spin_lock
_spin_unlock
_sprintf
_sprintf_l
_sradixsort
@ -1211,9 +975,6 @@ _srandom
_srandomdev
_sscanf
_sscanf_l
_stat
_stat$INODE64
_statfs$INODE64
_statvfs
_statx64_np
_statx_np
@ -1306,10 +1067,8 @@ _sysconf
_sysctl
_sysctlbyname
_sysctlnametomib
_syslog
_system
_system$NOCANCEL
_task_set_special_port
_tcdrain
_tcdrain$NOCANCEL
_tcflow
@ -1346,6 +1105,23 @@ _towlower
_towlower_l
_towupper
_towupper_l
_tre_ast_new_catenation
_tre_ast_new_iter
_tre_ast_new_literal
_tre_ast_new_node
_tre_ast_new_union
_tre_compile
_tre_fill_pmatch
_tre_free
_tre_mem_alloc_impl
_tre_mem_destroy
_tre_mem_new_impl
_tre_parse
_tre_stack_destroy
_tre_stack_new
_tre_stack_num_objects
_tre_tnfa_run_backtrack
_tre_tnfa_run_parallel
_tsearch
_ttyname
_ttyname_r
@ -1356,13 +1132,11 @@ _tzset
_tzsetwall
_ualarm
_ulimit
_umask
_umaskx_np
_uname
_ungetc
_ungetwc
_ungetwc_l
_unlink
_unlockpt
_unsetenv
_unvis
@ -1370,7 +1144,6 @@ _uselocale
_usleep
_usleep$NOCANCEL
_utime
_utimes
_utmpxname
_uuid_clear
_uuid_compare
@ -1407,7 +1180,6 @@ _vfwscanf_l
_vfxprintf
_vfxprintf_exec
_vis
_vm_allocate
_vprintf
_vprintf_l
_vscanf
@ -1436,7 +1208,6 @@ _vxprintf_exec
_wait
_wait$NOCANCEL
_wait3
_wait4
_waitpid
_waitpid$NOCANCEL
_warn
@ -1519,12 +1290,9 @@ _wordexp
_wordfree
_wprintf
_wprintf_l
_write$NOCANCEL
_writev$NOCANCEL
_wscanf
_wscanf_l
_wtmpxname
_xprintf
_xprintf_exec
dyld_stub_binder
mcount

View File

@ -9,17 +9,20 @@ ___access_extended
___aio_suspend_nocancel
___bind
___bsdthread_create
___bsdthread_ctl
___bsdthread_register
___bsdthread_terminate
___carbon_delete
___chmod
___chmod_extended
___chud
___close_nocancel
___coalition
___coalition_info
___commpage_gettimeofday
___connect
___connect_nocancel
___copyfile
___csrctl
___delete
___disable_threadsignal
___error
@ -29,7 +32,6 @@ ___fchmod_extended
___fcntl
___fcntl_nocancel
___fork
___fsgetpath
___fstat64_extended
___fstat_extended
___fsync_nocancel
@ -37,7 +39,6 @@ ___get_remove_counter
___getattrlist
___getdirentries64
___gethostuuid
___getlcid
___getlogin
___getpeername
___getpid
@ -47,6 +48,7 @@ ___getsockname
___gettid
___gettimeofday
___getwgroups
___guarded_open_dprotected_np
___guarded_open_np
___identitysvc
___inc_remove_counter
@ -54,11 +56,14 @@ ___initgroups
___ioctl
___iopolicysys
___kdebug_trace
___kdebug_trace64
___kdebug_trace_string
___kernelVersionNumber
___kernelVersionString
___kill
___lchown
___libkernel_init
___libkernel_voucher_init
___listen
___lseek
___lstat64_extended
@ -66,8 +71,6 @@ ___lstat_extended
___mac_execve
___mac_get_fd
___mac_get_file
___mac_get_lcid
___mac_get_lctx
___mac_get_link
___mac_get_mount
___mac_get_pid
@ -76,10 +79,10 @@ ___mac_getfsstat
___mac_mount
___mac_set_fd
___mac_set_file
___mac_set_lctx
___mac_set_link
___mac_set_proc
___mac_syscall
___microstackshot
___mkdir_extended
___mkfifo_extended
___mmap
@ -96,12 +99,16 @@ ___open
___open_dprotected_np
___open_extended
___open_nocancel
___openat
___openat_nocancel
___pipe
___poll_nocancel
___posix_spawn
___pread_nocancel
___proc_info
___process_policy
___pselect
___pselect_nocancel
___psynch_cvbroad
___psynch_cvclrprepost
___psynch_cvsignal
@ -131,6 +138,7 @@ ___recvfrom_nocancel
___recvmsg
___recvmsg_nocancel
___rename
___renameat
___rmdir
___sandbox_me
___sandbox_mm
@ -149,8 +157,8 @@ ___sendmsg_nocancel
___sendto
___sendto_nocancel
___setattrlist
___setlcid
___setlogin
___setpriority
___setregid
___setreuid
___setrlimit
@ -159,6 +167,8 @@ ___settid
___settid_with_pid
___settimeofday
___setwgroups
___sfi_ctl
___sfi_pidctl
___shared_region_check_np
___shared_region_map_and_slide_np
___shm_open
@ -171,20 +181,24 @@ ___sigsuspend
___sigsuspend_nocancel
___sigwait
___socketpair
___stack_snapshot
___stack_snapshot_with_config
___stat64_extended
___stat_extended
___syscall
___syscall_logger
___sysctl
___sysctlbyname
___telemetry
___thread_selfid
___thread_selfusage
___umask_extended
___unlink
___unlinkat
___vfork
___wait4
___wait4_nocancel
___waitid_nocancel
___work_interval_ctl
___workq_kernreturn
___workq_open
___write_nocancel
@ -238,6 +252,7 @@ __kernelrpc_mach_port_set_attributes
__kernelrpc_mach_port_set_context
__kernelrpc_mach_port_set_mscount
__kernelrpc_mach_port_set_seqno
__kernelrpc_mach_port_space_basic_info
__kernelrpc_mach_port_space_info
__kernelrpc_mach_port_type
__kernelrpc_mach_port_unguard
@ -253,6 +268,9 @@ __kernelrpc_mach_vm_protect_trap
__kernelrpc_mach_vm_read
__kernelrpc_mach_vm_remap
__kernelrpc_task_set_port_space
__kernelrpc_thread_policy
__kernelrpc_thread_policy_set
__kernelrpc_thread_set_policy
__kernelrpc_vm_map
__kernelrpc_vm_read
__kernelrpc_vm_remap
@ -304,11 +322,18 @@ _clock_sleep
_clock_sleep_trap
_close
_close$NOCANCEL
_coalition_create
_coalition_info_resource_usage
_coalition_reap
_coalition_terminate
_connect
_connect$NOCANCEL
_connectx
_csops
_csops_audittoken
_csr_check
_csr_get_active_config
_denap_boost_assertion_token
_disconnectx
_dup
_dup2
@ -321,10 +346,13 @@ _exception_raise_state
_exception_raise_state_identity
_exchangedata
_execve
_faccessat
_fchdir
_fchflags
_fchmod
_fchmodat
_fchown
_fchownat
_fcntl
_fcntl$NOCANCEL
_fdatasync
@ -344,6 +372,9 @@ _fsetxattr
_fstat
_fstat$INODE64
_fstat64
_fstatat
_fstatat$INODE64
_fstatat64
_fstatfs
_fstatfs$INODE64
_fstatfs64
@ -353,6 +384,8 @@ _ftruncate
_futimes
_get_dp_control_port
_getattrlist
_getattrlistat
_getattrlistbulk
_getaudit
_getaudit_addr
_getauid
@ -385,11 +418,18 @@ _getsockopt
_getuid
_getwgroups_np
_getxattr
_grab_pgo_data
_guarded_close_np
_guarded_kqueue_np
_guarded_open_dprotected_np
_guarded_open_np
_guarded_pwrite_np
_guarded_write_np
_guarded_writev_np
_host_create_mach_voucher
_host_default_memory_manager
_host_get_UNDServer
_host_get_atm_diagnostic_flag
_host_get_boot_info
_host_get_clock_control
_host_get_clock_service
@ -406,12 +446,15 @@ _host_processor_set_priv
_host_processor_sets
_host_processors
_host_reboot
_host_register_mach_voucher_attr_manager
_host_register_well_known_mach_voucher_attr_manager
_host_request_notification
_host_security_create_task_token
_host_security_set_task_token
_host_self
_host_self_trap
_host_set_UNDServer
_host_set_atm_diagnostic_flag
_host_set_exception_ports
_host_set_special_port
_host_statistics
@ -426,8 +469,11 @@ _internal_catch_exc_subsystem
_ioctl
_issetugid
_kas_info
_kdebug_trace
_kdebug_trace_string
_kevent
_kevent64
_kevent_qos
_kext_request
_kill
_kmod_control
@ -438,6 +484,7 @@ _kqueue
_lchown
_ledger
_link
_linkat
_lio_listio
_listen
_listxattr
@ -454,6 +501,7 @@ _lstat
_lstat$INODE64
_lstat64
_mach_absolute_time
_mach_approximate_time
_mach_error
_mach_error_full_diag
_mach_error_string
@ -462,6 +510,7 @@ _mach_host_self
_mach_init
_mach_make_memory_entry
_mach_make_memory_entry_64
_mach_memory_info
_mach_memory_object_memory_entry
_mach_memory_object_memory_entry_64
_mach_msg
@ -510,6 +559,7 @@ _mach_port_set_attributes
_mach_port_set_context
_mach_port_set_mscount
_mach_port_set_seqno
_mach_port_space_basic_info
_mach_port_space_info
_mach_port_type
_mach_port_unguard
@ -540,6 +590,12 @@ _mach_vm_region_recurse
_mach_vm_remap
_mach_vm_wire
_mach_vm_write
_mach_voucher_attr_command
_mach_voucher_deallocate
_mach_voucher_debug_info
_mach_voucher_extract_all_attr_recipes
_mach_voucher_extract_attr_content
_mach_voucher_extract_attr_recipe
_mach_wait_until
_mach_zone_force_gc
_mach_zone_info
@ -565,6 +621,7 @@ _mk_timer_cancel
_mk_timer_create
_mk_timer_destroy
_mkdir
_mkdirat
_mkfifo
_mknod
_mlock
@ -573,6 +630,7 @@ _mmap
_modwatch
_mount
_mprotect
_mremap_encrypted
_msg_receive
_msg_rpc
_msg_send
@ -588,6 +646,8 @@ _msync$NOCANCEL
_munlock
_munlockall
_munmap
_necp_match_policy
_netagent_trigger
_netname_check_in
_netname_check_out
_netname_look_up
@ -599,12 +659,17 @@ _normal_boost_assertion_token
_open
_open$NOCANCEL
_open_dprotected_np
_openat
_openat$NOCANCEL
_openbyid_np
_panic
_panic_init
_pathconf
_peeloff
_pid_for_task
_pid_hibernate
_pid_resume
_pid_shutdown_sockets
_pid_suspend
_pipe
_poll
@ -621,6 +686,8 @@ _posix_spawn_file_actions_addopen
_posix_spawn_file_actions_destroy
_posix_spawn_file_actions_init
_posix_spawnattr_destroy
_posix_spawnattr_get_darwin_role_np
_posix_spawnattr_get_qos_clamp_np
_posix_spawnattr_getbinpref_np
_posix_spawnattr_getcpumonitor
_posix_spawnattr_getflags
@ -631,9 +698,12 @@ _posix_spawnattr_getprocesstype_np
_posix_spawnattr_getsigdefault
_posix_spawnattr_getsigmask
_posix_spawnattr_init
_posix_spawnattr_set_darwin_role_np
_posix_spawnattr_set_importancewatch_port_np
_posix_spawnattr_set_qos_clamp_np
_posix_spawnattr_setauditsessionport_np
_posix_spawnattr_setbinpref_np
_posix_spawnattr_setcoalition_np
_posix_spawnattr_setcpumonitor
_posix_spawnattr_setcpumonitor_default
_posix_spawnattr_setexceptionports_np
@ -648,7 +718,10 @@ _posix_spawnattr_setspecialport_np
_pread
_pread$NOCANCEL
_proc_clear_delayidlesleep
_proc_clear_dirty
_proc_clear_vmpressure
_proc_denap_assertion_begin_with_msg
_proc_denap_assertion_complete
_proc_disable_apptype
_proc_disable_cpumon
_proc_disable_wakemon
@ -661,8 +734,10 @@ _proc_importance_assertion_begin_with_msg
_proc_importance_assertion_complete
_proc_kmsgbuf
_proc_libversion
_proc_list_uptrs
_proc_listallpids
_proc_listchildpids
_proc_listcoalitions
_proc_listpgrppids
_proc_listpids
_proc_listpidspath
@ -671,19 +746,23 @@ _proc_pid_rusage
_proc_pidfdinfo
_proc_pidfileportinfo
_proc_pidinfo
_proc_pidoriginatorinfo
_proc_pidpath
_proc_regionfilename
_proc_rlimit_control
_proc_set_cpumon_defaults
_proc_set_cpumon_params
_proc_set_cpumon_params_fatal
_proc_set_delayidlesleep
_proc_set_dirty
_proc_set_owner_vmpressure
_proc_set_wakemon_defaults
_proc_set_wakemon_params
_proc_setpcontrol
_proc_setthread_cpupercent
_proc_suppress
_proc_terminate
_proc_trace_log
_proc_track_dirty
_proc_uuid_policy
_processor_assign
@ -704,6 +783,11 @@ _processor_set_statistics
_processor_set_tasks
_processor_set_threads
_processor_start
_pselect
_pselect$1050
_pselect$DARWIN_EXTSN
_pselect$DARWIN_EXTSN$NOCANCEL
_pselect$NOCANCEL
_pthread_getugid_np
_pthread_setugid_np
_ptrace
@ -714,6 +798,7 @@ _quotactl
_read
_read$NOCANCEL
_readlink
_readlinkat
_readv
_readv$NOCANCEL
_reboot
@ -721,8 +806,11 @@ _recvfrom
_recvfrom$NOCANCEL
_recvmsg
_recvmsg$NOCANCEL
_recvmsg_x
_removexattr
_rename
_rename_ext
_renameat
_revoke
_rmdir
_searchfs
@ -764,6 +852,7 @@ _semsys
_sendfile
_sendmsg
_sendmsg$NOCANCEL
_sendmsg_x
_sendto
_sendto$NOCANCEL
_set_dp_control_port
@ -790,6 +879,10 @@ _setsockopt
_setuid
_setwgroups_np
_setxattr
_sfi_get_class_offtime
_sfi_process_get_flags
_sfi_process_set_flags
_sfi_set_class_offtime
_shm_open
_shm_unlink
_shmat
@ -805,6 +898,15 @@ _sigsuspend$NOCANCEL
_socket
_socket_delegate
_socketpair
_stackshot_capture_with_config
_stackshot_config_create
_stackshot_config_dealloc
_stackshot_config_dealloc_buffer
_stackshot_config_get_stackshot_buffer
_stackshot_config_get_stackshot_size
_stackshot_config_set_flags
_stackshot_config_set_pid
_stackshot_config_set_size_hint
_stat
_stat$INODE64
_stat64
@ -815,10 +917,13 @@ _swapon
_swtch
_swtch_pri
_symlink
_symlinkat
_sync
_syscall
_syscall_thread_switch
_system_get_sfi_window
_system_override
_system_set_sfi_window
_task_assign
_task_assign_default
_task_create
@ -826,6 +931,7 @@ _task_for_pid
_task_get_assignment
_task_get_emulation_vector
_task_get_exception_ports
_task_get_mach_voucher
_task_get_special_port
_task_get_state
_task_info
@ -843,6 +949,7 @@ _task_set_emulation
_task_set_emulation_vector
_task_set_exception_ports
_task_set_info
_task_set_mach_voucher
_task_set_phys_footprint_limit
_task_set_policy
_task_set_port_space
@ -852,6 +959,7 @@ _task_set_state
_task_suspend
_task_suspend2
_task_swap_exception_ports
_task_swap_mach_voucher
_task_terminate
_task_threads
_task_zone_info
@ -864,6 +972,8 @@ _thread_create_running
_thread_depress_abort
_thread_get_assignment
_thread_get_exception_ports
_thread_get_mach_voucher
_thread_get_register_pointer_values
_thread_get_special_port
_thread_get_state
_thread_info
@ -874,11 +984,13 @@ _thread_resume
_thread_sample
_thread_self_trap
_thread_set_exception_ports
_thread_set_mach_voucher
_thread_set_policy
_thread_set_special_port
_thread_set_state
_thread_suspend
_thread_swap_exception_ports
_thread_swap_mach_voucher
_thread_switch
_thread_terminate
_thread_wire
@ -886,6 +998,7 @@ _truncate
_umask
_undelete
_unlink
_unlinkat
_unmount
_utimes
_vfork
@ -917,12 +1030,20 @@ _vm_region_recurse_64
_vm_remap
_vm_wire
_vm_write
_voucher_mach_msg_adopt
_voucher_mach_msg_clear
_voucher_mach_msg_revert
_voucher_mach_msg_set
_vprintf_stderr_func
_wait4
_waitevent
_waitid
_waitid$NOCANCEL
_watchevent
_work_interval_create
_work_interval_destroy
_work_interval_notify
_work_interval_notify_simple
_write
_write$NOCANCEL
_writev

View File

@ -6,14 +6,14 @@
# Allow passing in bootstrap files directly so we can test the stdenv bootstrap process when changing the bootstrap tools
, bootstrapFiles ? let
fetch = { file, sha256, executable ? true }: import <nix/fetchurl.nix> {
url = "http://tarballs.nixos.org/stdenv-darwin/x86_64/62540508837664e9b366e36d1265502db4329a6e/${file}";
url = "http://tarballs.nixos.org/stdenv-darwin/x86_64/33f59c9d11b8d5014dfd18cc11a425f6393c884a/${file}";
inherit sha256 system executable;
}; in {
sh = fetch { file = "sh"; sha256 = "1qpg16qbqqkmcr5an4d73p6q55izhlzmdd3nvid8gp7f3f9spbz7"; };
bzip2 = fetch { file = "bzip2"; sha256 = "1g67sh51fa2ws9wch5gznvrmmh27mks3dbnp6gvac43qxdnv6mpz"; };
mkdir = fetch { file = "mkdir"; sha256 = "1lkp6y33lsrj9yif1cfrw5g021pffynrdscrz3ds19hslg55w4dw"; };
cpio = fetch { file = "cpio"; sha256 = "115pgrl0pcq2h4yfqrmfvffl0dcabw4mgkc91aphd913wrzfmlz9"; };
tarball = fetch { file = "bootstrap-tools.cpio.bz2"; sha256 = "1ak16xrj41l15ads5l2kfgbyrb1lczzhmi8nln5h0np8r3w9frw9"; executable = false; };
sh = fetch { file = "sh"; sha256 = "1rx4kg6358xdj05z0m139a0zn4f4zfmq4n4vimlmnwyfiyn4x7wk"; };
bzip2 = fetch { file = "bzip2"; sha256 = "104qnhzk79vkbp2yi0kci6lszgfppvrwk3rgxhry842ly1xz2r7l"; };
mkdir = fetch { file = "mkdir"; sha256 = "0d91c19xjzmqisncvldv79d7ddzai9l7vcmajhwlwwv74g6da5yl"; };
cpio = fetch { file = "cpio"; sha256 = "0lw057bmcqls96j0gv1n3mgl66q31mba7i413cbkkaf0rfzz3dxj"; };
tarball = fetch { file = "bootstrap-tools.cpio.bz2"; sha256 = "13ihbj002pis3fgy1d9c4fi7flca21z9brjsjkklm82h5b4nlwxl"; executable = false; };
}
}:

View File

@ -17,9 +17,44 @@ for i in $out/bin/*; do
fi
done
install_name_tool \
-id $out/lib/system/libsystem_c.dylib \
$out/lib/system/libsystem_c.dylib
install_name_tool \
-id $out/lib/system/libsystem_kernel.dylib \
$out/lib/system/libsystem_kernel.dylib
# TODO: this logic basically duplicates similar logic in the Libsystem expression. Deduplicate them!
libs=$(otool -arch x86_64 -L /usr/lib/libSystem.dylib | tail -n +3 | awk '{ print $1 }')
for i in $libs; do
if [ "$i" != "/usr/lib/system/libsystem_kernel.dylib" ] && [ "$i" != "/usr/lib/system/libsystem_c.dylib" ]; then
args="$args -reexport_library $i"
fi
done
ld -macosx_version_min 10.7 \
-arch x86_64 \
-dylib \
-o $out/lib/libSystem.B.dylib \
-compatibility_version 1.0 \
-current_version 1226.10.1 \
-reexport_library $out/lib/system/libsystem_c.dylib \
-reexport_library $out/lib/system/libsystem_kernel.dylib \
$args
ln -s libSystem.B.dylib $out/lib/libSystem.dylib
for name in c dbm dl info m mx poll proc pthread rpcsvc util gcc_s.10.4 gcc_s.10.5; do
ln -s libSystem.dylib $out/lib/lib$name.dylib
done
ln -s libresolv.9.dylib $out/lib/libresolv.dylib
for i in $out/lib/*.dylib $out/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation; do
if ! test -L $i; then
echo patching $i
if test ! -L "$i" -a "$i" != "$out/lib/libSystem*.dylib"; then
echo "Patching $i"
id=$(otool -D "$i" | tail -n 1)
install_name_tool -id "$(dirname $i)/$(basename $id)" $i