Changeset 1289:4a5eea0334e5
- Timestamp:
- 05/02/09 10:39:26
(3 years ago)
- Author:
- Benjamin Kramer <benny.kra@gmail.com>
- branch:
- default
- Message:
Add runtime support for darwin x86_64
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r898 |
r1289 |
|
| 19 | 19 | version(X86_64) { |
|---|
| 20 | 20 | version(linux) version=X86_UNWIND; |
|---|
| | 21 | version(darwin) version=X86_UNWIND; |
|---|
| 21 | 22 | version(solaris) version=X86_UNWIND; |
|---|
| 22 | 23 | } |
|---|
| r1151 |
r1289 |
|
| 121 | 121 | { |
|---|
| 122 | 122 | // darwin has a fixed stack bottom |
|---|
| 123 | | return cast(void*) 0xc0000000; |
|---|
| | 123 | version(X86_64) |
|---|
| | 124 | return cast(void*) 0x7fff5fc00000; |
|---|
| | 125 | else |
|---|
| | 126 | return cast(void*) 0xc0000000; |
|---|
| 124 | 127 | } |
|---|
| 125 | 128 | else version( solaris ) |
|---|
| … | … | |
| 530 | 533 | uint sizeofcmds; |
|---|
| 531 | 534 | uint flags; |
|---|
| | 535 | version(X86_64) |
|---|
| | 536 | uint reserved; |
|---|
| 532 | 537 | } |
|---|
| 533 | 538 | |
|---|
| … | … | |
| 536 | 541 | char[16] sectname; |
|---|
| 537 | 542 | char[16] segname; |
|---|
| 538 | | uint addr; |
|---|
| 539 | | uint size; |
|---|
| | 543 | version(X86_64) |
|---|
| | 544 | { |
|---|
| | 545 | ulong addr; |
|---|
| | 546 | ulong size; |
|---|
| | 547 | } |
|---|
| | 548 | else |
|---|
| | 549 | { |
|---|
| | 550 | uint addr; |
|---|
| | 551 | uint size; |
|---|
| | 552 | } |
|---|
| 540 | 553 | uint offset; |
|---|
| 541 | 554 | uint align_; |
|---|
| … | … | |
| 545 | 558 | uint reserved1; |
|---|
| 546 | 559 | uint reserved2; |
|---|
| | 560 | version(X86_64) |
|---|
| | 561 | uint reserved3; |
|---|
| 547 | 562 | } |
|---|
| 548 | 563 | |
|---|
| 549 | 564 | alias extern (C) void function (mach_header* mh, ptrdiff_t vmaddr_slide) DyldFuncPointer; |
|---|
| 550 | 565 | |
|---|
| 551 | | extern (C) /*const*/ section* getsectbynamefromheader(/*const*/ mach_header* mhp, /*const*/ char* segname, /*const*/ char* sectname); |
|---|
| | 566 | version(X86_64) |
|---|
| | 567 | extern (C) /*const*/ section* getsectbynamefromheader_64(/*const*/ mach_header* mhp, /*const*/ char* segname, /*const*/ char* sectname); |
|---|
| | 568 | else |
|---|
| | 569 | extern (C) /*const*/ section* getsectbynamefromheader(/*const*/ mach_header* mhp, /*const*/ char* segname, /*const*/ char* sectname); |
|---|
| 552 | 570 | extern (C) void _dyld_register_func_for_add_image(DyldFuncPointer func); |
|---|
| 553 | 571 | extern (C) void _dyld_register_func_for_remove_image(DyldFuncPointer func); |
|---|
| … | … | |
| 563 | 581 | foreach (s ; GC_dyld_sections) |
|---|
| 564 | 582 | { |
|---|
| 565 | | sec = getsectbynamefromheader(hdr, s.segment, s.section); |
|---|
| | 583 | version(X86_64) |
|---|
| | 584 | sec = getsectbynamefromheader_64(hdr, s.segment, s.section); |
|---|
| | 585 | else |
|---|
| | 586 | sec = getsectbynamefromheader(hdr, s.segment, s.section); |
|---|
| 566 | 587 | |
|---|
| 567 | 588 | if (sec == null || sec.size == 0) |
|---|
| … | … | |
| 583 | 604 | foreach (s ; GC_dyld_sections) |
|---|
| 584 | 605 | { |
|---|
| 585 | | sec = getsectbynamefromheader(hdr, s.segment, s.section); |
|---|
| | 606 | version(X86_64) |
|---|
| | 607 | sec = getsectbynamefromheader_64(hdr, s.segment, s.section); |
|---|
| | 608 | else |
|---|
| | 609 | sec = getsectbynamefromheader(hdr, s.segment, s.section); |
|---|
| 586 | 610 | |
|---|
| 587 | 611 | if (sec == null || sec.size == 0) |
|---|