# HG changeset patch # User Benjamin Kramer # Date 1241275166 -7200 # Node ID 4a5eea0334e50e8d8628885cb4afb87b126ccf7d # Parent e109e4031e8a8b9cad2db38e55bd994f34793f41 Add runtime support for darwin x86_64 diff -r e109e4031e8a -r 4a5eea0334e5 runtime/internal/eh.d --- a/runtime/internal/eh.d Sat May 02 19:03:33 2009 +0300 +++ b/runtime/internal/eh.d Sat May 02 16:39:26 2009 +0200 @@ -18,6 +18,7 @@ } version(X86_64) { version(linux) version=X86_UNWIND; + version(darwin) version=X86_UNWIND; version(solaris) version=X86_UNWIND; } diff -r e109e4031e8a -r 4a5eea0334e5 runtime/internal/memory.d --- a/runtime/internal/memory.d Sat May 02 19:03:33 2009 +0300 +++ b/runtime/internal/memory.d Sat May 02 16:39:26 2009 +0200 @@ -120,7 +120,10 @@ else version( darwin ) { // darwin has a fixed stack bottom - return cast(void*) 0xc0000000; + version(X86_64) + return cast(void*) 0x7fff5fc00000; + else + return cast(void*) 0xc0000000; } else version( solaris ) { @@ -529,14 +532,24 @@ uint ncmds; uint sizeofcmds; uint flags; + version(X86_64) + uint reserved; } struct section { char[16] sectname; char[16] segname; - uint addr; - uint size; + version(X86_64) + { + ulong addr; + ulong size; + } + else + { + uint addr; + uint size; + } uint offset; uint align_; uint reloff; @@ -544,11 +557,16 @@ uint flags; uint reserved1; uint reserved2; + version(X86_64) + uint reserved3; } alias extern (C) void function (mach_header* mh, ptrdiff_t vmaddr_slide) DyldFuncPointer; - extern (C) /*const*/ section* getsectbynamefromheader(/*const*/ mach_header* mhp, /*const*/ char* segname, /*const*/ char* sectname); + version(X86_64) + extern (C) /*const*/ section* getsectbynamefromheader_64(/*const*/ mach_header* mhp, /*const*/ char* segname, /*const*/ char* sectname); + else + extern (C) /*const*/ section* getsectbynamefromheader(/*const*/ mach_header* mhp, /*const*/ char* segname, /*const*/ char* sectname); extern (C) void _dyld_register_func_for_add_image(DyldFuncPointer func); extern (C) void _dyld_register_func_for_remove_image(DyldFuncPointer func); @@ -562,7 +580,10 @@ foreach (s ; GC_dyld_sections) { - sec = getsectbynamefromheader(hdr, s.segment, s.section); + version(X86_64) + sec = getsectbynamefromheader_64(hdr, s.segment, s.section); + else + sec = getsectbynamefromheader(hdr, s.segment, s.section); if (sec == null || sec.size == 0) continue; @@ -582,7 +603,10 @@ foreach (s ; GC_dyld_sections) { - sec = getsectbynamefromheader(hdr, s.segment, s.section); + version(X86_64) + sec = getsectbynamefromheader_64(hdr, s.segment, s.section); + else + sec = getsectbynamefromheader(hdr, s.segment, s.section); if (sec == null || sec.size == 0) continue;