Changeset 63 for trunk/kLdr/kLdrModMachO.c
- Timestamp:
- Oct 30, 2013, 3:00:14 AM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/kLdr/kLdrModMachO.c
r62 r63 739 739 case S_NON_LAZY_SYMBOL_POINTERS: \ 740 740 case S_LAZY_SYMBOL_POINTERS: \ 741 case S_LAZY_DYLIB_SYMBOL_POINTERS: \ 741 742 /* (reserved 1 = is indirect symbol table index) */ \ 742 743 KLDRMODMACHO_CHECK_RETURN(!pSect->reserved2, KLDR_ERR_MACHO_BAD_SECTION); \ … … 759 760 \ 760 761 case S_LITERAL_POINTERS: \ 762 case S_DTRACE_DOF: \ 763 KLDRMODMACHO_CHECK_RETURN(!pSect->reserved1, KLDR_ERR_MACHO_BAD_SECTION); \ 764 KLDRMODMACHO_CHECK_RETURN(!pSect->reserved2, KLDR_ERR_MACHO_BAD_SECTION); \ 765 fFileBits = 1; \ 766 break; \ 767 \ 761 768 case S_INTERPOSING: \ 762 769 case S_GB_ZEROFILL: \ … … 780 787 KLDRMODMACHO_CHECK_RETURN(pSect->align < 31, \ 781 788 KLDR_ERR_MACHO_BAD_SECTION); \ 789 /* Workaround for buggy ld64 (or as, llvm, ++) that produces a misaligned __TEXT.__unwind_info. */ \ 790 /* Seen: pSect->align = 4, pSect->addr = 0x5ebe14. Just adjust the alignment down. */ \ 791 if ( ((K_BIT32(pSect->align) - KU32_C(1)) & pSect->addr) \ 792 && pSect->align == 4 \ 793 && kHlpStrComp(pSect->sectname, "__unwind_info") == 0) \ 794 pSect->align = 2; \ 782 795 KLDRMODMACHO_CHECK_RETURN(!((K_BIT32(pSect->align) - KU32_C(1)) & pSect->addr), \ 783 796 KLDR_ERR_MACHO_BAD_SECTION); \ … … 1025 1038 if (!(fOpenFlags & KLDRMOD_OPEN_FLAGS_FOR_INFO)) 1026 1039 KLDRMODMACHO_FAILED_RETURN(KLDR_ERR_MACHO_UNSUPPORTED_LOAD_COMMAND); 1040 *pfCanLoad = K_FALSE; 1027 1041 break; 1028 1042
Note:
See TracChangeset
for help on using the changeset viewer.