--- src/ld/Options.cpp +++ src/ld/Options.cpp @@ -2127,9 +2127,9 @@ void Options::parse(int argc, const char* argv[]) if ( (seg.name == NULL) || (argv[i+1] == NULL) ) throw "-segaddr missing segName Adddress"; seg.address = parseAddress(argv[++i]); - uint64_t temp = seg.address & (-4096); // page align - if ( (seg.address != temp) ) - warning("-segaddr %s not page aligned, rounding down", seg.name); + uint64_t temp = ((seg.address+fSegmentAlignment-1) & (-fSegmentAlignment)); + if ( seg.address != temp ) + warning("-segaddr %s not %lld byte aligned", seg.name, fSegmentAlignment); fCustomSegmentAddresses.push_back(seg); } // ??? Deprecate when we deprecate split-seg. @@ -3080,7 +3080,7 @@ void Options::reconfigureDefaults() } break; case CPU_TYPE_X86_64: - if ( fMacVersionMin < ld::mac10_4 ) { + if ( (fMacVersionMin < ld::mac10_4) && (fIOSVersionMin == ld::iOSVersionUnset) ) { //warning("-macosx_version_min should be 10.4 or later for x86_64"); fMacVersionMin = ld::mac10_4; } @@ -3387,29 +3387,14 @@ void Options::reconfigureDefaults() // only use compressed LINKEDIT for: - // x86_64 and i386 on Mac OS X 10.6 or later - // arm on iPhoneOS 3.1 or later + // Mac OS X 10.6 or later + // iOS 3.1 or later if ( fMakeCompressedDyldInfo ) { - switch (fArchitecture) { - case CPU_TYPE_I386: - if ( fIOSVersionMin != ld::iOSVersionUnset ) // simulator always uses compressed LINKEDIT - break; - case CPU_TYPE_X86_64: - if ( fMacVersionMin < ld::mac10_6 ) - fMakeCompressedDyldInfo = false; - break; - case CPU_TYPE_ARM: - if ( !minOS(ld::mac10_6, ld::iOS_3_1) ) - fMakeCompressedDyldInfo = false; - break; - case CPU_TYPE_POWERPC: - case CPU_TYPE_POWERPC64: - default: - fMakeCompressedDyldInfo = false; - } + if ( !minOS(ld::mac10_6, ld::iOS_3_1) ) + fMakeCompressedDyldInfo = false; } - + // only ARM enforces that cpu-sub-types must match if ( fArchitecture != CPU_TYPE_ARM ) fAllowCpuSubtypeMismatches = true; --- src/ld/passes/order_file.cpp +++ src/ld/passes/order_file.cpp @@ -237,6 +237,7 @@ bool Layout::orderableSection(const ld::Internal::FinalSection* sect) { // atoms in only some sections are ordered switch ( sect->type() ) { + case ld::Section::typeInitializerPointers: case ld::Section::typeUnclassified: case ld::Section::typeCode: case ld::Section::typeZeroFill: