mirror of
https://github.com/darlinghq/darling.git
synced 2024-11-30 15:50:22 +00:00
Darwin/macOS emulation layer for Linux
include | ||
libmac | ||
mach | ||
.gdbinit | ||
.gitignore | ||
binfmt_misc.sh | ||
env_flags.h | ||
extract.cc | ||
fat.cc | ||
fat.h | ||
gdb_maloader.py | ||
ld-mac.cc | ||
ld-mac.sh | ||
log.cc | ||
log.h | ||
mach-o.cc | ||
mach-o.h | ||
macho2elf.cc | ||
Makefile | ||
no_trampoline.tab | ||
README | ||
rename.tab | ||
runtests.sh | ||
unpack_xcode.sh |
This is a userland Mach-O loader for linux. * Usage % make release % ./ld-mac mac_binary [options...] You need OpenCFLite (http://sourceforge.net/projects/opencflite/) installed if you want to run some programs such as dsymutil. opencflite-476.17.2 is recommended. * How to use compiler tool chains of Xcode Get xcode_3.2.6_and_ios_sdk_4.3__final.dmg (or another xcode package). % git clone git@github.com:shinh/maloader.git % ./maloader/unpack_xcode.sh xcode_3.2.6_and_ios_sdk_4.3__final.dmg % sudo cp -a xcode_3.2.6_and_ios_sdk_4.3__final/root /usr/i686-apple-darwin10 % cd maloader % make release % ./ld-mac /usr/i686-apple-darwin10/usr/bin/gcc mach/hello.c % ./ld-mac a.out * How to run Mach-O binaries using binfmt_misc % ./binfmt_misc.sh % /usr/i686-apple-darwin10/usr/bin/gcc mach/hello.c % ./a.out To remove the entries, run the following command: % ./binfmt_misc.sh stop * How to try 32bit support % make clean % make all BITS=32 If you see permission errors like ld-mac: ./mach/hello.c.bin mmap(file) failed: Operation not permitted you should run the following command to allow users to mmap files to addresses less than 0x10000. % sudo sh -c 'echo 4096 > /proc/sys/vm/mmap_min_addr' Or, running ld-mac as a super user would also work. * How to run both 64bit Mach-O and 32bit Mach-O binaries % make both % ./binfmt_misc.sh start `pwd`/ld-mac.sh % /usr/i686-apple-darwin10/usr/bin/gcc -arch i386 mach/hello.c -o hello32 % /usr/i686-apple-darwin10/usr/bin/gcc -arch x86_64 mach/hello.c -o hello64 % /usr/i686-apple-darwin10/usr/bin/gcc -arch i386 -arch x86_64 mach/hello.c -o hello % ./hello32 Hello, 32bit world! % ./hello64 Hello, 64bit world! % ./hello Hello, 64bit world! % LD_MAC_BITS=32 ./hello Hello, 32bit world! * Which programs should work OK - gcc-4.2 (link with -g requires OpenCFLite) - otool - nm - dyldinfo - dwarfdump - strip - size - dsymutil (need OpenCFLite) - cpp-4.2 - clang -- clang-70 (xcode 3.2.6): OK, but linking wasn't checked due to lack of sysroot -- clang-137 (xcode 4.0): OK not OK - llvm-gcc - gnumake and bsdmake - lex and flex - ar - m4 - gdb - libtool - nasm and ndisasm (i386) - mpicc, mpicxx, and mpic++ * Notice - Running all Mac binaries isn't my goal. Only command line tools such as compiler tool chain can be executed by this loader. - A slide about this: http://shinh.skr.jp/slide/ldmac/000.html * TODO - read dwarf for better backtracing - make llvm-gcc work - make ld in xcode4 work - improve 32bit support - handle dwarf and C++ exception * License Simplified BSD License. Note that all files in "include" directory and some files in "libmac" were copied from Apple's Libc-594.9.1. http://www.opensource.apple.com/release/mac-os-x-1064/