]> git.saurik.com Git - apple/ld64.git/commitdiff
ld64-95.8.4.tar.gz iphone-30 v95.8.4
authorApple <opensource@apple.com>
Tue, 16 Jun 2009 01:58:03 +0000 (01:58 +0000)
committerApple <opensource@apple.com>
Tue, 16 Jun 2009 01:58:03 +0000 (01:58 +0000)
59 files changed:
ChangeLog
doc/man/man1/ld.1
src/ld/Architectures.hpp
src/ld/LTOReader.hpp
src/ld/MachOReaderDylib.hpp
src/ld/MachOReaderRelocatable.hpp
src/ld/MachOWriterExecutable.hpp
src/ld/ObjectFile.h
src/ld/Options.cpp
src/ld/ld.cpp
src/other/dyldinfo.cpp
src/other/unwinddump.cpp
unit-tests/run-all-unit-tests
unit-tests/test-cases/coalesce_weak_def_in_dylib/Makefile [deleted file]
unit-tests/test-cases/coalesce_weak_def_in_dylib/foo.c [deleted file]
unit-tests/test-cases/coalesce_weak_def_in_dylib/main.c [deleted file]
unit-tests/test-cases/cstring-alt-segment/Makefile [deleted file]
unit-tests/test-cases/cstring-alt-segment/custom.s [deleted file]
unit-tests/test-cases/cstring-alt-segment/main.c [deleted file]
unit-tests/test-cases/cstring-labels/foo.c
unit-tests/test-cases/dead_strip-r_symbol_desc/Makefile [deleted file]
unit-tests/test-cases/dead_strip-r_symbol_desc/main.c [deleted file]
unit-tests/test-cases/dead_strip-weak-coalesce/Makefile [deleted file]
unit-tests/test-cases/dead_strip-weak-coalesce/baz.c [deleted file]
unit-tests/test-cases/dead_strip-weak-coalesce/foo.c [deleted file]
unit-tests/test-cases/dead_strip-weak-coalesce/main.c [deleted file]
unit-tests/test-cases/eh-coalescing-no-labels/Makefile
unit-tests/test-cases/init-order/Makefile
unit-tests/test-cases/init-order/expected-order.txt
unit-tests/test-cases/kext-basic/Makefile
unit-tests/test-cases/label-on-end-of-section/Makefile [new file with mode: 0644]
unit-tests/test-cases/label-on-end-of-section/foo.s [new file with mode: 0644]
unit-tests/test-cases/no-data-bundle/Makefile [deleted file]
unit-tests/test-cases/no-data-bundle/foo.c [deleted file]
unit-tests/test-cases/no_zero_fill_sections/Makefile [new file with mode: 0644]
unit-tests/test-cases/no_zero_fill_sections/main.c [new file with mode: 0644]
unit-tests/test-cases/objc-literal-pointers-strip/Makefile [deleted file]
unit-tests/test-cases/objc-literal-pointers-strip/test.m [deleted file]
unit-tests/test-cases/operator-new/Makefile
unit-tests/test-cases/operator-new/main.cxx
unit-tests/test-cases/re-export-optimizations-indirect/Makefile [deleted file]
unit-tests/test-cases/re-export-optimizations-indirect/bar.c [deleted file]
unit-tests/test-cases/re-export-optimizations-indirect/foo.c [deleted file]
unit-tests/test-cases/re-export-optimizations-indirect/main.c [deleted file]
unit-tests/test-cases/re-export-optimizations-indirect/middle.c [deleted file]
unit-tests/test-cases/re-export-optimizations-indirect/other.c [deleted file]
unit-tests/test-cases/relocs-neg-from-local/Makefile [deleted file]
unit-tests/test-cases/relocs-neg-from-local/test.s [deleted file]
unit-tests/test-cases/section-labels/Makefile [new file with mode: 0644]
unit-tests/test-cases/section-labels/main.c [new file with mode: 0644]
unit-tests/test-cases/section-names-long/Makefile [deleted file]
unit-tests/test-cases/section-names-long/a.s [deleted file]
unit-tests/test-cases/section-names-long/b.s [deleted file]
unit-tests/test-cases/section-names-long/c.s [deleted file]
unit-tests/test-cases/section-names-long/main.c [deleted file]
unit-tests/test-cases/shared-cache-dylib/Makefile [deleted file]
unit-tests/test-cases/shared-cache-dylib/foo.c [deleted file]
unit-tests/test-cases/stripped-indirect-symbol-table/Makefile
unit-tests/test-cases/weak_import/Makefile

index 79dcc59fe645223c92ca61590e3d8f1ee34e4360..ab1e984cf3a979147f61ceef4af6512f01a518f0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
 
------ Tagged ld64-95.2.12
+----- Tagged ld64-95.9
 
-2009-07-02    Nick Kledzik    <kledzik@apple.com>
+2009-02-13     Nick Kledzik    <kledzik@apple.com>
 
-       <rdar://problem/6836647> creation of __unwind_info section can fail if hundreds of functions cannot be compact encoded
+       <rdar://problem/6543423> Back out Linker changes for H2 hang
+       * src/ld/Options.cpp: remove fPreventPageCrossingBranches
+       * src/ld/MachOWriterExecutable.hpp: remove layout of __text so there are not page crossing branches
+       * src/ld/MachOReaderRelocatable.hpp: parse but ignore ARM_THUMB_32BIT_BRANCH reloc
 
 
------ Tagged ld64-95.2.11
+----- Tagged ld64-95.8.3
 
-2009-06-19    Nick Kledzik    <kledzik@apple.com>
+2009-03-31     Nick Kledzik    <kledzik@apple.com>
 
-       <rdar://problem/6960981> Link Time Optimization errors out when targeting < 10.6
-
-
------ Tagged ld64-95.2.10
-
-2009-04-02    Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6805002> corrupt metaclass entry in dynamic library
-       * src/ld/ld.cpp: change Section constructor to copy segment and section names
-
-
------ Tagged ld64-95.2.9
-
-2009-04-02    Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6744267> Update ld64 for new triples introduced in 6654669 to support ARM LLVM
-       * src/ld/LTOReader.hpp: change "arm-" to "arm" so matching works for new triples
-
-
------ Tagged ld64-95.2.8
-
-2009-03-24    Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6713931> anonymous functions have the compact unwind info computed wrong
-       * ld/MachOReaderRelocatable.hpp: use new compact unwind function in AnonymousAtom
-
-
------ Tagged ld64-95.2.7
-
-2009-03-11    Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6670421> AddressBook incorrectly gets _objc_msgSend from WebKit
-       * src/ld/MachOReaderDylib.hpp: fix processIndirectLibraries() to not force a private re-export of a dylib
-                                                                       that is already explictly or implicitly linked.
-       * unit-tests/test-cases/re-export-optimizations-indirect: add test case
+       <rdar://problem/6719270> ld might set MH_WEAK_DEFINES when it should not
+       * src/ld/MachOWriterExecutable.hpp: rescan fRegularDefAtomsThatOverrideADylibsWeakDef and only consider global ones
        
 
-2009-03-10    Nick Kledzik    <kledzik@apple.com>
+----- Tagged ld64-95.8.2
 
-       <rdar://problem/6665853> dyld weak linking optimization leaves some symbols unbound
-       * src/ld/MachOWriterExecutable.hpp: be sure to create bind entry for a reference 
-                                                                               to a symbol in a dylib that is a weak definition
-       * unit-tests/test-cases/coalesce_weak_def_in_dylib: add test case
+2009-03-18     Nick Kledzik    <kledzik@apple.com>
 
+       * src/ld/MachOReaderRelocatable.hpp: back out -force_cpusubtype_ALL changes
 
-2009-03-10    Nick Kledzik    <kledzik@apple.com>
 
-       <rdar://problem/6666004> many OS i386 OS dylibs still have __IMPORT segment
-       * ld/MachOReaderRelocatable.hpp: moved where __IMPORT/__pointer is changed to __DATA/__nl_symbol_ptr
-       * unit-tests/test-cases/stripped-indirect-symbol-table:  updated to test for this problem
+----- Tagged ld64-95.8.1
 
+2009-03-17     Nick Kledzik    <kledzik@apple.com>
 
------ Tagged ld64-95.2.6
-
-2009-02-27     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6633530> ld might set MH_WEAK_DEFINES when it should not
-       * src/ld/MachOWriterExecutable.hpp: only consider atoms in fRegularDefAtomsThatOverrideADylibsWeakDef
-                                                                               that will be exported when computing MH_WEAK_DEFINES
-       * unit-tests/test-cases/operator-new: updated to reproduce issue
+       <rdar://problem/6578416> -dead_strip inhibits weak coalescing in no_dead_strip section  
+       * src/ld/ld.cpp: in markDead() remove from fLiveRootAtoms
        
-
------ Tagged ld64-95.2.5
-
-2009-02-24     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6605499> x86_64 obj-c runtime confused when static lib is stripped
-       * src/ld/MachOWriterExecutable.hpp: in setLocalNlist() don't use 'l' labels for x86_64 strings
-       * unit-tests/test-cases/objc-literal-pointers-strip: added test case
        
+2009-03-17     Nick Kledzik    <kledzik@apple.com>
 
------ Tagged ld64-95.2.4
-
-2009-02-23     Nick Kledzik    <kledzik@apple.com>
+       <rdar://problem/6671072> libgcc fails to build in with ld64-95.8
+       * src/ld/MachOReaderRelocatable.hpp: interpret CPU_SUBTYPE_ARM_ALL as CPU_SUBTYPE_ARM_V4T
+       * src/ld/Options.cpp: interept -force_cpusubtype_ALL as -arch armv4t
 
-       * src/ld/MachOReaderRelocatable.hpp: ignore ARM_THUMB_32BIT_BRANCH relocs
 
+----- Tagged ld64-95.8
 
-2009-02-18     Nick Kledzik    <kledzik@apple.com>
+2009-02-09     Nick Kledzik    <kledzik@apple.com>
 
-       <rdar://problem/6583555> Writer<A>::symbolIndex() uses a linear search and does not scale
-       * src/ld/MachOWriterExecutable.hpp: build a std::map so symbolIndex() scales better
-       
+       <rdar://problem/6569316> ld64-95.7 crashes building Foundation-678.39 in side build
+       * src/ld/MachOReaderRelocatable.hpp: handle a zero length section with a label before __cstring section
 
-2009-02-18     Nick Kledzik    <kledzik@apple.com>
 
-       <rdar://problem/6312070> Use new compact encodings that handle all register permutations
-       * src/ld/Architectures.hpp: add kSectionOffset24
-       * src/ld/ObjectFile.h: add getFDE()
-       * src/ld/MachOReaderRelocatable.hpp: use new libunwind functions to get new compact encoding
-       * src/ld/MachOWriterExecutable.hpp: use new compact encoding which includes offset in dwarf if needed
-       * src/other/unwinddump.cpp: update unwinddump output to display register save set
-       
+----- Tagged ld64-95.7
 
-2009-02-16     Nick Kledzik    <kledzik@apple.com>
+2009-02-06     Nick Kledzik    <kledzik@apple.com>
 
-       <rdar://problem/6511619> runtime error with bundle for 10.5 that has weak external symols
-       * src/ld/ld.cpp: fix hybrid (10.5) compressed linkedit info for data pointing to weak definitions
+       * src/ld/ObjectFile.h: make fAddCompactUnwindEncoding false by default
        
 
-2009-02-15     Nick Kledzik    <kledzik@apple.com>
+2009-02-06     Nick Kledzik    <kledzik@apple.com>
 
-       <rdar://problem/6583757> i386 relocation error with negative offsets from local labels
-       * src/ld/MachOReaderRelocatable.hpp: handle when base addr of scattered relocation does not point to a label
-       * unit-tests/test-cases/relocs-neg-from-local: add test case
+       <rdar://problem/6537210> ER: add linker option to zero fill empty DATA sections on disk
+       * src/ld/Options.cpp: add support for -no_zero_fill_sections
+       * src/ld/MachOReaderRelocatable.hpp: isZeroFill() is only true if fOptimizeZeroFill 
+       * doc/man/man1/ld.1: document -no_zero_fill_sections
+       * unit-tests/test-cases/no_zero_fill_sections: add test case
        
 
-2009-02-12     Nick Kledzik    <kledzik@apple.com>
+2009-02-05     Nick Kledzik    <kledzik@apple.com>
 
-       <rdar://problem/6578360> -dead_strip inhibits weak coalescing in no_dead_strip section
-       * src/ld/ld.cpp: remove atoms coalesced away from fLiveRootAtoms
-       * unit-tests/test-cases/dead_strip-weak-coalesce: added test case
+       <rdar://problem/6497366> label getting resolved to the wrong address.
+       * src/ld/MachOWriterExecutable.hpp: add findAtomAndOffsetForSection() and use it to disambiguate
+       * unit-tests/test-cases/label-on-end-of-section: added test case
 
 
-2009-02-12     Nick Kledzik    <kledzik@apple.com>
+2009-01-27     Nick Kledzik    <kledzik@apple.com>
 
-       <rdar://problem/6581809> x86_64 weak_import broken for initialized data
-       * src/ld/MachOReaderRelocatable.hpp: use isWeakImportSymbol() in Reader<x86_64>::addRelocReference()
-       * src/other/dyldinfo.cpp: update to display weak_import attribute
-       * unit-tests/test-cases/weak_import: updated test case
+       <rdar://problem/6517393> Warn -force_cpusubtype_ALL is not supported
+       * src/ld/Options.cpp: warn if fForceSubtypeAll and fArchitecture is CPU_TYPE_ARM
        
 
-2009-02-06     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6541812> ld parsing of __eh_frame unwind information is slow
-       * src/ld/MachOReaderRelocatable.hpp: build a std::map of all __eh_frame relocations for x86_64
+----- Tagged ld64-95.6
 
+2009-01-25     Nick Kledzik    <kledzik@apple.com>
 
------ Tagged ld64-95.2.3
+       <rdar://problem/6439020> Add support for section start/end labels
+       * src/ld/ObjectFile.h: add kSectionStart and kSectionEnd
+       * src/ld/MachOReaderRelocatable.hpp: create SectionBoundaryAtoms as needed
+       * src/ld/ld.cpp: sort SectionBoundaryAtoms correctly
+       * src/ld/MachOWriterExecutable.hpp: allow all relocations in preload images
 
-2009-02-04     Nick Kledzik    <kledzik@apple.com>
 
-       <rdar://problem/6545406> ld: warning: can't add line info to anonymous symbol
-       * src/ld/MachOReaderRelocatable.hpp: don't warn about line info in dyld stubs
+----- Tagged ld64-95.5
 
+2009-01-15     Nick Kledzik    <kledzik@apple.com>
 
------ Tagged ld64-95.2.2
+       * src/ld/MachOWriterExecutable.hpp: in hasPageCrossingBranches() ignore branches preceeded by a branch
 
-2009-02-02     Nick Kledzik    <kledzik@apple.com>
 
-       <rdar://problem/6548268> ld -r does not preserve the N_NO_DEAD_STRIP bit
-       * src/ld/MachOWriterExecutable.hpp: set N_NO_DEAD_STRIP based on dontDeadStrip()
-       * unit-tests/test-cases/dead_strip-r_symbol_desc: added test case
+----- Tagged ld64-95.4
 
+2009-01-15     Nick Kledzik    <kledzik@apple.com>
 
------ Tagged ld64-95.2.1
+       * src/ld/Options.cpp: handle -kext and -r the same for fPreventPageCrossingBranches
 
-2009-01-29     Nick Kledzik    <kledzik@apple.com>
 
-       <rdar://problem/6535736> ld coalesces C strings in different segments
-       * src/ld/MachOReaderRelocatable.hpp: only do standard coalescing on __cstring section if is in __TEXT segment
-       * unit-tests/test-cases/cstring-alt-segment: add test case
-       
+----- Tagged ld64-95.3
 
-2009-01-29     Nick Kledzik    <kledzik@apple.com>
+2009-01-14     Nick Kledzik    <kledzik@apple.com>
 
-       <rdar://problem/6532377> gcc DejaGnu failure: building longcall/dylib library
-       * src/ld/MachOWriterExecutable.hpp: if no __DATA sections insert non-lazy pointers at end of __TEXT segment
-       * unit-tests/test-cases/no-data-bundle: added test case
+       <rdar://problem/6497574> linker should alter layout to prevent armv7 page crossing branches
+       * src/ld/Options.cpp: set fPreventPageCrossingBranches
+       * src/ld/MachOWriterExecutable.hpp: adjust layout of __text so there are not page crossing branches
+       * src/ld/MachOReaderRelocatable.hpp: support new ARM_THUMB_32BIT_BRANCH reloce
 
 
 ----- Tagged ld64-95.2
 2009-01-06     Nick Kledzik    <kledzik@apple.com>
 
        <rdar://problem/6476760> strip -S fails with "new trie is larger than original"
-       * src/other/PruneTrie.cpp: don't align trie more than original trie was aligned
-       
-
------ Tagged ld64-95.1
-
-2008-12-21     Nick Kledzik    <kledzik@apple.com>
-
-        * src/ld/MachOWriterExecutable.hpp: in new linkedit format, make sure only exported symbols
-                                       make it into weak binding info
-       
-       
------ Tagged ld64-95
-
-2008-12-18     Nick Kledzik    <kledzik@apple.com>
-
-       * src/ld/Options.cpp: move check for fSharedRegionEligible until fPrebind has stabilized
-       
-
-2008-12-18     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6305021> Generate new compressed LINKEDIT when targeting 10.6
-       * src/ld/Options.cpp: turn on compressed LINKEDIT by default
-       
-
------ Tagged ld64-94.1
-
-2008-12-16     Nick Kledzik    <kledzik@apple.com>
-
-       * src/ld/Options.cpp: Fix -F handling in buildSearchPaths()
-
-
------ Tagged ld64-94
-
-2008-12-15     Nick Kledzik    <kledzik@apple.com>
-
-       * doc/man/man1/ld.1: document new options
-       
-
-2008-12-15     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6134468> linker should enforce all .o files have same sub-type, and ignore sub-type of dylibs
-       * doc/man/man1/ld.1: update man page about -allow_sub_type_mismatches
-       * src/ld/ld.cpp: call validFile() with new arguments
-       * src/ld/MachOReaderRelocatable.hpp: add new arguments to validFile()
-       * src/ld/Options.cpp: Support LD_ALLOW_CPU_SUBTYPE_MISMATCHES and -allow_sub_type_mismatches
-       
-
-2008-12-15     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6438270> -syslibroot should skip standard search paths not in the SDK
-       * src/ld/Options.cpp: in buildSearchPaths() if an SDK is specified don't add 
-                                                       standard search paths not in the SDK.
-
-
-2008-12-15     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6406609> ld: remove "can't make compact unwind encoding" warning
-       * src/ld/ObjectFile.h: add fWarnCompactUnwind
-       * src/ld/Options.cpp: -warn_compact_unwind --> fWarnCompactUnwind
-       * src/ld/MachOReaderRelocatable.hpp: test fWarnCompactUnwind before warning
-
-
-2008-12-15     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6442926> Add dtrace usdt support for arm to ld64
-       * src/ld/MachOWriterExecutable.hpp: handle arm::kDtraceIsEnabledSite
-       * unit-tests/test-cases/dtrace-static-probes: use is-enabled in test case
-
-
------ Tagged ld64-93
-
-2008-12-11     Nick Kledzik    <kledzik@apple.com>
-
-       * src/ld/ObjectFile.h: add fIPhoneVersionMin to track min iPhoneOS version
-       * src/ld/Options.cpp: use fIPhoneVersionMin 
-       
-
-2008-12-11     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6431277> non-lazy pointer to non-global tentative definition encoded wrong
-       * src/ld/MachOWriterExecutable.hpp: don't use INDIRECT_SYMBOL_LOCAL for tentative definitions
-       * unit-tests/test-cases/non-lazy-r: updated test case
-
-
-2008-12-11     Nick Kledzik    <kledzik@apple.com>
-       
-       <rdar://problem/6437667> kernel fails to boot when ld64 used for intermediate ld -r step
-       * src/ld/MachOWriterExecutable.hpp: in -r mode when generating a scattered sect-diff reloc for
-                                                                       i386/arm, special case when from target is not the atom 
-                                                                       the relocation is in.
-       * unit-tests/test-cases/relocs-asm: update test case
-       
-
-2008-12-11     Nick Kledzik    <kledzik@apple.com>
-
-       * src/ld/ld.cpp: handle new __program_vars section
-       * src/ld/MachOWriterExecutable.hpp: handle inserting synthesized sections when there is no __dyld section
-
-
-2008-12-11     Nick Kledzik    <kledzik@apple.com>
-
-       * src/ld/MachOReaderRelocatable.hpp: Fix getDescription() to work when direct reference is to anonymous atom
-
-
-2008-12-10     Nick Kledzik    <kledzik@apple.com>
-
-       * src/ld/Options.cpp: enable LD_FORCE_NO_PREBIND to be used with arm
-
-
-2008-12-10     Nick Kledzik    <kledzik@apple.com>
-       
-       <rdar://problem/6258169> Developer tool to print the new compressed LINKEDIT information
-       * src/other/dyldinfo.cpp: fix typo in usage()
-       
-
-2008-12-05     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6308882> SnowLeopard kernel should compile warning free
-       * src/ld/MachOReaderRelocatable.hpp: correct parse two global labels at end of section and make one an alias
-       * unit-tests/test-cases/end-label: update test case
-
-
-2008-12-04     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6342245> Better warning than "PPC_RELOC_JBSR should not be using an external relocation"
-       * src/ld/MachOReaderRelocatable.hpp: issue warning with .o path if it was compiled with -mlong-branch
-
-
-2008-12-04     Nick Kledzik    <kledzik@apple.com>
-       
-       <rdar://problem/6408832> linker should not map __pointers -> __nl_symbol_ptr unless actually making new LINKEDIT
-       * src/ld/ObjectFile.h: add fMakeCompressedDyldInfo for readers to see
-       * src/ld/Options.cpp: set fMakeCompressedDyldInfo for readers to see
-       * src/ld/MachOReaderRelocatable.hpp: check fMakeCompressedDyldInfo
-
-
-2008-12-02     Nick Kledzik    <kledzik@apple.com>
-
-       * src/ld/debugline.c: fix error handling in line_open()
-       
-
-2008-11-26     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6401277> vtable with thumb entries broke after ld -r
-       * src/ld/MachOReaderRelocatable.hpp: if target of reloc is thumb, mask thumb bit off addend
-       * unit-tests/test-cases/thumb-pointer: added test case
-
-
-2008-11-26     Nick Kledzik    <kledzik@apple.com>
-
-       * src/ld/Option.cpp: Fix how crashreporterBuffer is created to not miss some arguments
-       
-
-2008-11-24     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6398605> Security.framework has some duplicate FDEs for some functions
-       * src/ld/ld.cpp: remove fDeadAtoms from fLiveAtoms when there are weak atoms overriden by late loads
-       * unit-tests/test-cases/dead_strip-archive-eh: added test case
-
-
------ Tagged ld64-92
-
-2008-11-21     Nick Kledzik    <kledzik@apple.com>
-
-       * src/ld/MachOReaderDylib.hpp: if export_size is zero, no need to parse trie
-       * src/abstraction/MachOTrie.hpp: gracefully handle empty trie
-       
-
-2008-11-21     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6257854> strip(1) support for new compressed LINKEDIT information
-       * ld64.xcodeproj/project.pbxproj: build and install new libprunetrie.a
-       * src/other/prune_trie.h: added
-       * src/other/PruneTrie.cpp: implements prune_trie()
-       
-
-2008-11-21     Nick Kledzik    <kledzik@apple.com>
-
-       * src/ld/ld.cpp: if an export file is used and all weak symbols are masked, don't set WEAK_DEFINES
-       * unit-tests/test-cases/weak-def-flag: added test case
-
-
-2008-11-20     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6305021> Generate new compressed LINKEDIT when targeting 10.6
-       * src/ld/MachOWriterExecutable.hpp: support generating new compressed format
-       * src/ld/MachOReaderRelocatable.hpp: new compress format implies non-lazy pointers in __DATA for i386
-       * src/ld/MachOReaderDylib.hpp: support linking aginst new format
-       * src/ld/Options.cpp: suppport -exported_symbols_order and -no_compact_linkedit
-       * src/ld/ld.cpp: track which atoms have weak counter parts in dylibs
-       * src/other/dyldinfo.cpp: added tool to display new LINKEDIT format
-       * ld64.xcodeproj/project.pbxproj: add dyldinfo tool
-       * unit-tests/*: lots of fixes to work with new format
-
-
-2008-11-20     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6389316> ld64 should preserve N_WEAK_REF when linking MH_KEXT_BUNDLEs
-       * src/ld/MachOWriterExecutable.hpp: set up fWeakImportMap in synthesizeKextGOT() 
-
-
-2008-11-19     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6342406> VideoToolbox.framework has bad __TEXT.__eh_frame info
-       * src/ld/Options.cpp: add -no_eh_labels option for use with -r
-       * src/ld/MachOWriterExecutable.hpp: generate correct x86_64 labeless relocs in -r mode
-       * src/ld/MachOReaderRelocatable.hpp: now ignore all labels and relocations in
-               __TEXT/__eh_frame section and rely on getCFIs() from libunwind
-       * unit-tests/test-cases/eh-coalescing-no-labels: add test case
-
-
-2008-11-19     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6378110> LTO doesn't like dtrace symbols
-       * src/ld/LTOReader.hpp: ignore __dtrace_probe undefines in bitcode files
-       
-
-2008-11-14     Nick Kledzik    <kledzik@apple.com>
-
-       * src/abstraction/MachOFileAbstraction.hpp: fix to work with 10.5 headers
-       
-       
------ Tagged ld64-91
-
-2008-11-07     Nick Kledzik    <kledzik@apple.com>
-
-       Remove COMPACT_UNWIND_SUPPORT conditionalizing
-       
-
-2008-11-06     Nick Kledzik    <kledzik@apple.com>
-
-       Reorganize source layout.  ld sources are now in "ld",
-       and other tools are in "other".
-       
-
-2008-11-05     Nick Kledzik    <kledzik@apple.com>
-
-       * ld64.xcodeproj/project.pbxproj: start installing unwinddump tool
-       * src/UnwindDump.cpp: support -arch option
-       * doc/man/man1/unwinddump.1: create man page
-
-
-2008-11-05     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6337329> linker should put cpusubtype in n_sect field of nlist entry for N_OSO debug note entries
-       * src/ld.cpp: in synthesizeDebugNotes() set other field of OSO to be subtype
-
-
-2008-11-05     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/3738966> Need a linker option to load all objects from one library
-       * src/Options.cpp: support -force_load option
-       * src/ArchiveReader.hpp: Add fForceLoad ivar
-       * doc/man/man1/ld.1:  update man page with -force_load option
-       * unit-tests/test-cases/archive-force-load: add test case
-
-
-2008-11-05     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6308882> Dtrace Probe Warnings: SnowLeopard kernel should compile warning free
-       * src/ld.cpp: don't generate GSYM stabs for old style __dtrace_probe
-       * src/MachOReaderRelocatable.hpp: fix test for deciding if a symbol is an alias
-       
-
-2008-11-04     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6294378> ADOBE: XCODE: ld: duplicate typeinfo in executable
-       * src/ld.cpp: in dead-strip mode, record overriden symbols and later rebind all uses
-       * unit-tests/test-cases/dead_strip-archive-weak: add test case
-       
-
-2008-11-03     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6254202> support increased branch range in Thumb-2
-       * src/MachOReaderRelocatable.hpp: handle full branch range in addRelocReference()
-       * unit-tests/test-cases/branch-distance: added test case
-       
-2008-10-31     Devang Patel    <dpatel@apple.com>
-
-       <rdar://problem/5725712> Sqlite 3.5.4 built with lvm-gcc-4.2 -O4 fails regression test
-       * src/LTOReader.hpp: Use real atom scope when real atom is available.
-       Preserve globals while optimizing an executable.
-
-2008-10-30     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: support all encodings in getEncodedP()
-
-
------ Tagged ld64-90
-
-2008-10-30     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6327584> icc has dwarf unwind info that is different than gcc
-       * src/MachOReaderRelocatable.hpp: support more encodings in getEncodedP()
-
-
-2008-10-23     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6088653> build ld64 for x86_64
-       * ld64.xcodeproj/project.pbxproj: add X86_64 to valid archs
-       
-
-2008-10-23     Nick Kledzik    <kledzik@apple.com>
-
-       * ld64.xcodeproj/project.pbxproj: use generated @$(DERIVED_FILE_DIR)/linker_opts for extra
-               linker options.  This allows linker to be built if LTO headers and libs are missing.
-
-
-2008-10-23     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6273617> Linker warning not shown in the Xcode build log
-       * src/Options.cpp: add colon to format string in warning()
-
-
------ Tagged ld64-89.3
-
-2008-10-24     Nick Kledzik    <kledzik@apple.com>
-       
-       <rdar://problem/6317985> ld64-89 broke TOT OpenGL libProgrammability x86_64 build       
-       * src/MachOReaderRelocatable.hpp: add cast in getEncodedP()
-       
-
------ Tagged ld64-89.2
-
-2008-10-23     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6312895> SnowLeopard: Libsystem built with ld64-89.1 causes crashes
-       * src/MachOReaderRelocatable.hpp: when FDE information causes __text atom to be split, make the 
-                       atoms follow-on pairs.
-
-
------ Tagged ld64-89.1
-
-2008-10-22     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: for x86_64 __eh_frame force direct references
-       
-
-2008-10-21     Nick Kledzik    <kledzik@apple.com>
-
-       * src/ObjectDump.cpp: Use getContentType() to see if content type is a cstring
-       
-
------ Tagged ld64-89
-
-2008-10-21     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6253171> 10A180 with QT-1119 roots: iTunes and QuickTime cannot play back purchased videos
-       <rdar://problem/5950453> linker should not need .eh labels
-       * src/MachOWriterExecutable.hpp: use kCFIType to set section attributes
-       * src/MachOReaderRelocatable.hpp: use libunwind's CFITuple to parse __eh_frame content
-       * src/ld.cpp: Add adjustScope() phase instead of demoting scope within symboltable.add()
-       * unit-tests/test-cases/eh-stripped-symbols: added test case
-
-
------ Tagged ld64-88.1
-
-2008-10-16     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: Fix uses of COMPACT_UNWIND_SUPPORT
-       * src/MachOWriterExecutable.hpp: Fix uses of COMPACT_UNWIND_SUPPORT
-
-
-2008-09-30     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6255983> OBJC2: Reorder __DATA,__objc_* sections by writedness
-       * src/ld.cpp: change sorting order of Sections
-
-
-2008-09-29     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6159479> Executable produced by XCode 3.2 on 10.6 crashes on 10.3.9
-       * src/MachOWriterExecutable.hpp: set objc_module_info_addr field of module table
-       
-
------ Tagged ld64-88
-
-2008-09-25     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5935708> kexts need to be built as MH_BUNDLE mach-o files
-       * src/ld.cpp: use getUndefinedProxyAtom() with kKextBundle
-       * src/MachOFileAbstraction.hpp: add MH_KEXT_BUNDLE
-       * src/Options.cpp: support -kext for all architectures
-       * src/MachOWriterExecutable.hpp: support kKextBundle to make a bundle like kext
-       * unit-tests/test-cases/kext-basic: added test case
-       
-
-2008-09-25     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6052546> ld invoking wrong ld_classic
-       * src/Options.cpp: first look for ld_classic relative to ld itself
-       
-
-2008-09-25     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5855588> ld fails to link references from 32 bit code into 64 bit code
-       <rdar://problem/5955200> Desired 32-bit absolute relocation
-       * src/Architectures.hpp: add x86_64::kPointer32
-       * src/MachOReaderRelocatable.hpp: support X86_64_RELOC_UNSIGNED with length=2
-       * src/MachOWriterExecutable.hpp: support x86_64::kPointer32
-       * unit-tests/test-cases/relocs-asm/relocs-asm.s: added 32-bit pointer tests
-       
-
-2008-09-25     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6075323> Should be able to mark dylibs as auto-dead-dylib-strip
-       * src/Options.h: add fMarkDeadStrippableDylib
-       * src/MachOReaderDylib.hpp: check MH_DEAD_STRIPPABLE_DYLIB
-       * src/ObjectFile.h: add deadStrippable()
-       * src/MachOFileAbstraction.hpp: add MH_DEAD_STRIPPABLE_DYLIB
-       * src/Options.cpp: support -mark_dead_strippable_dylib
-       * src/MachOWriterExecutable.hpp: test reader->deadStrippable(), set MH_DEAD_STRIPPABLE_DYLIB
-       * doc/man/man1/ld.1: update man page
-       * unit-tests/test-cases/dead_strippable_dylib: added test case
-       
-
-2008-09-25     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6197601> ER: Add -seg_page_size option
-       * src/Options.cpp: add -seg_page_size option
-       * src/MachOWriterExecutable.hpp: use new page size info when laying out segments
-       * doc/man/man1/ld.1: update man page
-       
-
-2008-09-24     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5798786> -arch_errors_fatal not working
-       * src/ld.cpp: check fOptions.errorOnOtherArchFiles()
-       * src/Options.cpp: turn -arch_errors_fatal into fOptions.errorOnOtherArchFiles()
-
-
-2008-09-24     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6161215> CrashTracer: [USER] 1 crash in ld at ld: 0x5ce02
-       * src/ld.cpp: abort if resolve() finds an unresolved reference, rather than allow a future crash
-       
-
-2008-09-24     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6157989> linker crashes linking X86-64 with -fwritable-strings
-       * src/MachOReaderRelocatable.hpp: handle unbound cfstring references
-       * unit-tests/test-cases/cfstring-coalesce: update test case
-       
-
-2008-09-24     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6213035> ld64: bl out of range (-17147704 max is +/-16M) on ppc
-       * src/MachOWriterExecutable.hpp: tweak branch island regions to be every 14MB instead of 15MB
-       
-
-2008-09-24     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5907981> -filelist fails with comma in path
-       * src/Options.cpp: in loadFileList() first try without special comma meaning 
-       * unit-tests/test-cases/filelist/Makefile: update test case
-       
-
-2008-09-23     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6203068> nop not used when aligning functions in -r mode
-       * src/MachOWriterExecutable.hpp: change check for when to pad with nops to not test segment's name
-       
-
-2008-09-23     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6238329> "-pie can only be used when linking a main executable" should be a warning, not an error
-       *  src/Options.cpp: make -pie on a dylib or bundle be a warning instead of an error
-       
-       
-2008-09-23     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: add warning if dwarf cannot be encoded as compact unwind
-       
-
-2008-09-18     Nick Kledzik    <kledzik@apple.com>
-
-       * src/LTOReader.hpp: re-enable use of lto_codegen_debug_options()
-
-
-2008-09-16     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6219054> ld does not always set S_CSTRING_LITERALS on __TEXT,__cstring
-       * src/MachOReaderRelocatable.hpp: add getContentType() to SymbolAtom
-       * src/MachOWriterExecutable.hpp: for x86_64 don't override named cstrings with LC* name
-       
-
-2008-09-10     Nick Kledzik    <kledzik@apple.com>
-
-       * Options.cpp: add __crashreporter_info__ to communicate command line to crash reporter
-       * ld64.xcodeproj/project.pbxproj: leave local symbols in ld to provide better crash reports
-
-
-2008-09-08     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6126637> 161569 GCC 4.2 - breakpoints no longer work for a large number of functions
-       * src/MachOReaderRelocatable.hpp: support DW_FORM_strp out-of-line strings when parsing line table
-
-
-2008-09-02     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: fix compact unwind personality for dyld and -slow_stubs
-       
-
-2008-08-29     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6186838> -weak_library no longer forces uses to be weak_import
-       * src/MachOWriterExecutable.hpp: use fWeakImport on dylib to force proxy atoms into fWeakImportMap
-       * unit-tests/test-cases/weak_import-force: added test case
-       
-
-2008-08-29     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6061558> linker should order __DATA segment to reduce dyld dirtied pages
-       * src/Options.cpp: add fOrderData and support -no_data_order
-       * src/ld.cpp: modify tweakLayout() to sort atoms with relocations to start of __data section 
-
-
-2008-08-27     Nick Kledzik    <kledzik@apple.com>
-
-       * src/Options.cpp:  back out <rdar://problem/6174493>
-
-
------ Tagged ld64-87.5
-
-2008-08-26     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6174493> some projects show _Unwind_Resume coming from libSystem.B.dylib
-       * src/Options.cpp: swap any early symlinks to libSystem with libgcc_s
-
-
------ Tagged ld64-87.4
-
-2008-08-25     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6174493> some projects show _Unwind_Resume coming from libSystem.B.dylib
-       * src/Options.cpp: swap any early libSystem with libgcc_s
-       
-
-2008-08-15     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5898326> Unable to build ppc debug builds (linker out of range error)
-       * src/MachOWriterExecutable.hpp: in addPPCBranchIslands() look ahead so large atoms don't push out branch islands
-
-       
------ Tagged ld64-87.3.1
-
-2008-09-08     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6204202> i386 dylibs have incorrect personality pointers when put in dyld shared cache
-       * src/MachOWriterExecutable.hpp: in addCrossSegmentRef() handle kImageOffset32 to __IMPORT segment
-
-       
------ Tagged ld64-87.3
-
-2008-08-09     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6125381> work around compiler gcc_except_table alignment
-       * src/ObjectFile.h: change getLSDA() to return a reference instead of an atom
-       * src/MachOReaderRelocatable.hpp: special case __eh_frame 64-bit pointer diff relocations
-       * src/MachOWriterExecutable.hpp: track lsda offset when creating __unwind_info section
-       * src/UnwindDump.cpp: log when LDSA content does not start with 0xFF
-
------ Tagged ld64-87.2
-
-2008-08-07     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6131559> 10A141: libuwind falls back to dwarf and makes whole system super slow
-       * src/MachOWriterExecutable.hpp: Fix sign extension bug with x86_64::kPointerDiff24
-       * src/UnwindDump.cpp: warn about mangled LSDA entries when dumping unwind section
-       
-
------ Tagged ld64-87.1
-
-2008-08-03     Nick Kledzik    <kledzik@apple.com>
-
-       * src/LTOReader.hpp: Don't use lto_codegen_debug_options until newer libLTO.dylib is available
-
-
------ Tagged ld64-87
-
-2008-07-21     Nick Kledzik    <kledzik@apple.com>
-
-       * src/Options.cpp: Always set fAutoOrderInitializers=false for dyld
-       
-
-2008-07-21     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOWriterExecutable.hpp: fix when regular vs compressed __unwind_info pages are generated
-       * src/UnwindDump.cpp: fix function name decoding in regular pages 
-       
-       
-2008-07-21     Nick Kledzik    <kledzik@apple.com>
-
-       * ld64.xcodeproj/project.pbxproj: don't allow ld to build for x86_64 until libdtrace.dylib is available
-       
-
-2008-07-18     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: don't crash if debug_line section has no line table
-
-
-2008-07-18     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5628149> Duplicate probe firings in Security.framework
-       * src/LTOReader.hpp: optimize() now returns atoms optimized away
-       * src/ObjectFile.h: optimize() should return if it did anything
-       * src/ArchiveReader.hpp: pass through optimize() result
-       * src/ld.cpp: rework dtrace probe processing as a new pass to prevent double counting
-
-
-2008-07-15     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6061904> automatically order initializers to start of __TEXT
-       * src/Options.cpp: add -no_order_inits option
-       * src/MachOReaderRelocatable.hpp: merge __StaticInit into __text
-       * src/ObjectFile.h: add fAutoOrderInitializers
-       * src/ld.cpp: sort initializer to start of __text and terminators to end
-       * doc/man/man1/ld.1: add doc about -no_order_inits
-       * unit-tests/test-cases/init-order: add test case
-
-2008-07-15     Nick Kledzik    <kledzik@apple.com>
-       
-       <rdar://problem/6073697> Only add LC_SEGMENT_SPLIT_INFO to dylibs that might be in the shared cache
-       * src/MachOWriterExecutable.hpp: re-layout load commands after split-seg data computed
-       * src/Options.cpp: non-public install name will disable split-seg load command
-       
-
-2008-07-14     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6069861> ld -r for x86_64 is changing visibility of cstring constants
-       * src/MachOWriterExecutable.hpp: force x86_64 cstring labels to be local in -r mode
-       * unit-tests/test-cases/cstring-label: added test case
-       
-
-2008-07-11     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6070190> ld not adding updating LC_SEGMENT_SPLIT_INFO with __unwind_info section
-       * src/MachOWriterExecutable.hpp: run createSplitSegContent() after __unwind_info section is created
-       
-2008-07-10     Nick Kledzik    <kledzik@apple.com>
-
-       * src/LTOReader.hpp: improve missing symbol error message
-
-
-2008-07-09     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6061558> linker should order __DATA segment to reduce dyld dirtied pages
-       * src/ld.cpp: first phase, order sections
-
-
-2008-07-08     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: remove "coal" sections when creating a final linked image
-
-
-2008-07-08     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6054476> ld: add support for mllvm LTO options
-       * src/Options.cpp: support -mllvm option
-       * src/LTOReader.hpp: call lto_codegen_debug_options() with -mllvm options
-       * src/ld.cpp: pass llvmOptions to optimize()
-       * src/Options.h: add fLLVMOptions
-       * src/ArchiveReader.hpp: add llvmOptions parameter to optimize()
-       * src/ObjectFile.h: add llvmOptions parameter to optimize()
-       * unit-tests/test-cases/lto-llvm-options: add test case
-       
-       
-2008-07-07     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6054296> Linker fails with: 24-bit pointer diff out of range in unwind info in unwind info from...
-       * src/MachOWriterExecutable.hpp: fix when to fallback to uncompressed unwind info
-
-
-2008-07-03     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6001472> ld crash with gcc-4.0 code that uses a zero sized array
-       * src/MachOReaderRelocatable.hpp: handle zero size atom in a zero sized section
-       
-
-2008-07-03     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6016809> ld crashes when bad ppc relocs are found
-       * src/MachOReaderRelocatable.hpp: change all missing PAIR warnings to errors
-       
-
-2008-07-02     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5881324> when linking a kext the static linker should leave a pad in the headers to allow code signing
-       * src/MachOWriterExecutable.hpp: add padding for load commands in object files
-       * unit-tests/test-cases/code-signed-object-file: added test case
-       
-
-2008-07-02     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6048484> LC_SEGMENT_64 filesize incorrect for MH_OBJECT filetype
-       * src/MachOWriterExecutable.hpp: correctly set segment size info in object files
-       * unit-tests/test-cases/no-object-symbols: add test case
-
-
-2008-06-26     Nick Kledzik    <kledzik@apple.com>
-
-       * ld64.xcodeproj/project.pbxproj: enable ld and rebase targets to build for x86_64
-       * src/rebase.cpp: remove unused fRelocBase field that was not 64-bit clean
-       * src/MachOReaderRelocatable.hpp: fix getEncodedP() to be 64-bit clean
-
-
------ Tagged ld64-86.3
-
-2008-06-17     Nick Kledzik    <kledzik@apple.com>
-       
-       * src/ld.cpp: fix loadUndefines() to double check undefine symbol was not already loaded
-
-       
------ Tagged ld64-86.2
-       
-2008-06-14     Nick Kledzik    <kledzik@apple.com>
-
-       * srd/ld.cpp: Add NULL check in getTentativesNames()
-       
-       
------ Tagged ld64-86.1
-
-2008-06-06     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOWriterExecutable.hpp: fix header padding calculation for dyld
-       
-
------ Tagged ld64-86
-
-2008-06-04     Nick Kledzik    <kledzik@apple.com>
-
-       * src/LTOReader.hpp: if lto_codegen_add_module() fails, add explanation to error message
-       
-
-2008-06-04     Nick Kledzik    <kledzik@apple.com>
-
-       * src/ObjectFile.h: add deadAtoms parameter to optimize()
-       * src/ld.cpp: ditto
-       * src/ArchiveReader.hpp: ditto
-       * src/MachOReaderRelocatable.hpp: handle llvm use of 0x1B pointer encodings in CIEs
-       * src/LTOReader.hpp: make sure libLTO.dylib knows about any llvm symbol coalesced away
-       * unit-tests/test-cases/lto-weak-native-override: add test case
-
-
-2008-06-04     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5935600> LTO : 176.gcc and 177.mesa build failure at -O4
-       * src/LTOReader.hpp: make sure internal is returned by getAtoms()
-       * unit-tests/test-cases/lto-archive-dylib: update test case
-
-
-2008-06-03     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5894163> fix for 5613343 need to search for definitions for common symbols is broken
-       * src/ld.cpp: modify loadUndefines() to check for undefines in all files and tentative definitions but only in archives
-       * src/machochecker.cpp: check for undefine symbols and external symbols with same name
-       * unit-tests/test-cases/tentative-and-archive: update test case
-
-
-2008-06-03     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5935237> linker produces wrong result for 16-bit call relocations
-       * src/MachOReaderRelocatable.hpp: properly parse i386 scattered relocs for word sized pc-rel vanilla
-       * src/MachOWriterExecutable.hpp: propery compute displacement for x86::kPCRel16
-       * unit-tests/test-cases/relocs-asm: update test case with callw instructions
-       
-
-2008-06-03     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5905900> Building kext x86_64 with unexported symbols file causes linking problems
-       * src/MachOWriterExecutable.hpp: better check when creating undefined proxy atoms
-       * unit-tests/test-cases/unexported_symbols_list-r: added test case
-       
-
-2008-06-02     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5659338> S_CSTRING_LITERALS section type not preserved in executable
-       * src/ObjectFile.h: added ContentType
-       * src/MachOReaderRelocatable.hpp: set ContentType for anonymous string literals
-       * src/MachOWriterExecutable.hpp: set S_CSTRING_LITERALS if ContentType is kCStringType
-       * unit-tests/test-cases/cstring-custom-section: added test case
-       
-
-2008-06-02     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5980194> linker should produce __unwind_info section in final linked images
-       * src/ld.cpp: sort __unwind_info then __eh_frame section to end of __TEXT
-       * src/Architectures.hpp: add kImageOffset32 and kPointerDiff24
-       * src/ObjectFile.h: add compact unwind info support
-       * src/MachOReaderRelocatable.hpp: add compact unwind info support
-       * src/MachOFileAbstraction.hpp: add C++ wrappers for unwind section layout
-       * src/UnwindDump.cpp: new tool for dumping __unwind_info section
-       * src/MachOWriterExecutable.hpp: create __unwind_info section when needed
-       * src/ObjectDump.cpp: print unwind info
-       
-
-2008-06-02     Nick Kledzik    <kledzik@apple.com>
-
-       * unit-tests/test-cases/llvm-integration: split out some test cases
-       * unit-tests/test-cases/lto-preload-pie: added
-       * unit-tests/test-cases/lto-archive-dylib: added
-
-
-2008-05-30     Nick Kledzik    <kledzik@apple.com>
-
-       * unit-tests: fixes to build all tests with with gcc-4.2 on SnowLeopard
-       
-
-2008-05-30     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5536348> support -preload option to generate MH_PRELOAD binaries compatible with mtoc(1) and EFI
-       * src/ld.cpp: add entryPoint parameter to optimize()
-       * src/ArchiveReader.hpp: ditto
-       * src/ObjectFile.h: ditto
-       * src/LTOReader.hpp: use entryPoint parameter to optimize()
-       * src/Options.h: add kPreload and segment alignment
-       * src/Options.cpp: support -preload and -segalign
-       * src/MachOWriterExecutable.hpp: support kPreload and non-page aligned segments 
-
-
-2008-05-30     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4431008> ld should warn if passed -r and also dylibs
-       * src/ld.cpp: check for spurious dylibs in Linker::addDylib()
-
-
------ Tagged ld64-85.6
-       
-2008-11-01     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6254202> support increased branch range in Thumb-2
-       * src/MachOWriterExecutable.hpp: in fixUpReferenceFinal() support new longer branch range
-
-
-2008-11-01     Nick Kledzik    <kledzik@apple.com>
-       
-       <rdar://problem/6104368> ld warning: unknown option to -iphoneos_version_min, not 1.x or 2.x
-       * src/Options.cpp: In setIPhoneVersionMin() support 3.x
-
-       
------ Tagged ld64-85.5
-
-2008-09-17     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6162415> vtable pointers can be missing thumb bit
-       * src/MachOWriterExecutable.hpp: Writer<arm>::fixUpReferenceFinal() OR in the 1 bit if the target
-               of a arm::kReadOnlyPointer is thumb.
-
-
------ Tagged ld64-85.4
-
-2008-08-11     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6138961> ld should ignore LD_PREBIND when processing a static archive
-       * src/MachOWriterExecutable.hpp: in setImportNlist() never use N_PBUD for object files
-       
------ Tagged ld64-85.3
-
-2008-07-14     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/6060912> Prebinding busted in DTSB
-       * src/Options.cpp: check for libstdc++.6.0.[49] in seg_addr_table
-       
-
------ Tagged ld64-85.2
-
-2008-05-06     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5905889> ARM ld should take W bit off of maxprot for __TEXT segment
-       * src/MachOWriterExecutable.hpp: for iPhone always set maxprot to be initprot in all segments
-
-
-2008-05-06     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5914343> encryptable images may not be signable
-       * src/MachOWriterExecutable.hpp: use minimum header padding when aligning __text section
-       
-
------ Tagged ld64-85 (Xcode 3.1)
-
-2008-04-29     Nick Kledzik    <kledzik@apple.com>
-
-       * ld64.xcodeproj/project.pbxproj: <llvm-c/lto.h> is moving from /usr/local/include to /Developer/usr/local/include
-
-
-2008-04-29     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5829579> ld doesn't honor "rightmost" -syslibroot argument
-       * src/Options.cpp: if last -syslibroot is /, then ignore all syslibroots
-
-
-2008-04-29     Nick Kledzik    <kledzik@apple.com>
-       
-       <rdar://problem/5866582> GLRendererFloat has bad __eh_frame section caused by mixing llvm-gcc and gcc object files
-       * src/MachOReaderRelocatable.hpp: make all atoms in __eh_frame section have 1-byte alignment
-       * src/MachOWriterExecutable.hpp: make __eh_frame section have pointer sized alignment
-
-
-2008-04-17     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: better cpu subtype support
-
-
-2008-04-14     Nick Kledzik    <kledzik@apple.com>
-       
-       <rdar://problem/5733759> ld64 has bad ARM branch island check
-       * src/MachOWriterExecutable.hpp: in addBranchIslands() don't force large arm programs to fail
-       
-
-2008-04-10     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOWriterExecutable.hpp: fix stubs used with lazy dylibs
-       
-
------ Tagged ld64-84.4
-
-2008-04-10     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5847206> SPEC2000/eon built with -mdynamic-no-pic won't run
-       * src/Architectures.hpp: added arm::kReadOnlyPointer
-       * src/MachOReaderRelocatable.hpp: generate arm::kReadOnlyPointer
-       * src/MachOWriterExecutable.hpp: use arm::kReadOnlyPointer
-       * src/machochecker.cpp: allow MH_PIE bit
-       * unit-tests/test-cases/switch-jump-table: added test cases
-       
-
------ Tagged ld64-84.3
-
-2008-04-09     Nick Kledzik    <kledzik@apple.com>
-       
-       <rdar://problem/5852023> -undefined dynamic_lookup busted
-       * src/ld.cpp: don't create proxy atom when scanning for dylib duplicates
-       * unit-tests/test-cases/tentative-and-archive: use -undefined dynamic_lookup
-
-
------ Tagged ld64-84.2
-
-2008-04-04     Nick Kledzik    <kledzik@apple.com>
-
-       * src/ld.cpp: don't add .eh symbols to symbol table in -r mode
-       * unit-tests/test-cases/eh-coalescing-r: update to test out of order coalescing
-       
-
------ Tagged ld64-84.1
-
-2008-03-28     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5720961> ld should prefer architecture-specific variant over generic in fat object file
-       * src/Options.cpp: fully process -arch arguments into fArchitecture and fSubArchitecture
-       * src/ld.cpp: when -arch with a subtype is used, try to find the exact subtype from fat files
-       * unit-tests/test-cases/cpu-sub-types-preference: added test cases for arm and ppc
-       
-
------ Tagged ld64-84
-
-2008-03-28     Nick Kledzik    <kledzik@apple.com>
-
-       * src/LTOReader.hpp: don't print lto version, if lto is unavailable
-       
-
-2008-03-26     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5575399> Add LD_WARN_COMMONS to BigBear builds
-       * src/Options.cpp: Add support for LD_WARN_FILE which copies all warnings to a side file
-       
-
-2008-03-26     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5797713> Need encryption tag in mach-o file
-       <rdar://problem/5811920> linker should adjust arm final linked images so __text is never on the same page as the load commands
-       * src/MachOFileAbstraction.hpp: add support for encryption_info_command
-       * src/Options.cpp: add support for LD_NO_ENCRYPT and -no_encryption
-       * src/MachOWriterExecutable.hpp: add EncryptionLoadCommandsAtom
-       * src/machochecker.cpp: validate LC_ENCRYPTION_INFO
-       
-
-2008-03-25     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5712533> ld64 does not recognize LLVM bitcode archive files
-       * src/MachOReaderArchive.hpp: renamed to src/ArchiveReader.hpp
-       * src/ArchiveReader.hpp: sniff each member and instantiate correct reader
-       * src/ld.cpp: rename mach_o::archive::Reader to archive::Reader
-       * ld64.xcodeproj/project.pbxproj: rename MachOReaderArchive.hpp to ArchiveReader.hpp
-       * unit-tests/test-cases/llvm-integration: added test case
-
-
-2008-03-25     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5771658> ld64 should switch to new libLTO.dylib interface
-       <rdar://problem/5675690> Produce llvm bc file in 'ld -r' mode if all .o files are llvm bc
-       * src/LTOReader.hpp: rewrite from LLVMReader.hpp to use new lto_* C interface
-       * unit-tests/test-cases/llvm-integration: update and comment
-       * ld64.xcodeproj/project.pbxproj: update to lazy load libLTO.dylib 
-       * src/ld.cpp: rework and simplify Linker::optimize() 
-       * src/ObjectDump.cpp: Add -nm option
-       
-
-2008-03-25     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.cpp: Fix some .objc_class_name_ off by one problem
-       * src/MachOWriterExecutable.cpp: Fix some .objc_class_name_ off by one problem
-
-
-2008-03-24     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5814613> Xcode 3.1 breaks linkage of libgcj.9.dylib from gcc 4.3.0
-       * src/MachOWriterExecutable.cpp: Make sure all ivars in Writer are initialized.
-
-
-2008-03-21     Nick Kledzik    <kledzik@apple.com>
-
-       * src/Options.cpp: warn if -seg1addr value is not page aligned
-       
-
-2008-03-21     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5806437> Move ARM support outside of __OPEN_SOURCE__
-       * src/ld.cpp: remove __OPEN_SOURCE__ around arm support
-       * src/LLVMReader.hpp: remove __OPEN_SOURCE__ around arm support
-       * src/MachOReaderDylib.hpp: remove __OPEN_SOURCE__ around arm support
-       * src/ObjectFile.h: remove __OPEN_SOURCE__ around arm support
-       * src/MachOReaderRelocatable.hpp: remove __OPEN_SOURCE__ around arm support
-       * src/OpaqueSection.hpp: Cover arm support inside __OPEN_SOURCE__ macro check
-       * src/MachOWriterExecutable.hpp: remove __OPEN_SOURCE__ around arm support
-       * src/ObjectDump.cpp: remove __OPEN_SOURCE__ around arm support
-       * ld64.xcodeproj/project.pbxproj: remove ARM_SUPPORT from config.h
-       
-
------ Tagged ld64-83.2
-       
-2008-03-15     Nick Kledzik    <kledzik@apple.com>
-       
-       <rdar://problem/5801620> ld64-83 removes OBJC_CLASS_$ symbols from projects, causes catastrophic results
-       * src/Options.cpp: restore "case CPU_TYPE_ARM" in switch statement for .objc_class symbols in .exp files
-       * unit-tests/test-cases/objc-exported_symbols_list: added test case
-       
-       
------ Tagged ld64-83.1
-
-2008-03-14     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5800466> -iphone_version_min ==> -iphoneos_version_min
-       * src/Options.cpp: support -iphoneos_version_min as well
-       
-
------ Tagged ld64-83
-
-2008-03-10     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5791543> ld needs to strip iphone_version_min option if invoking ld_classic
-       * src/Options.cpp: suppress -iphone_version_min from being passed to ld_classic
-       
-
-2008-03-04     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4171253> ADOBE XCODE: Linker option to lazy load frameworks (cause dyld is too slow)
-       * src/MachOWriterExecutable.hpp: create lazy stubs and LC_LAZY_LOAD_DYLIB for lazy load dylibs
-       * src/Options.cpp: support -lazy-l, -lazy_library, and -lazy_framework
-       * src/MachOFileAbstraction.hpp: add LC_LAZY_LOAD_DYLIB and S_LAZY_DYLIB_SYMBOL_POINTERS until in cctools
-       * src/MachOReaderDylib.hpp: add isLazyLoadedDylib()
-       * src/ld.cpp: pass lazy helper atom to writer
-       * doc/man/man1/ld.1: document new options
-       * unit-tests/test-cases/lazy-dylib-objc: add test case
-       * unit-tests/test-cases/lazy-dylib: add test case
-       
-
------ Tagged ld64-82.7
-
-2008-03-07     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5787149> duplicate symbol literal-pointer@__OBJC@__message_refs@...
-       * src/MachOReaderRelocatable.hpp: AnonymousAtom from S_LITERAL_POINTERS section should be weak
-       * unit-tests/test-cases/objc-selector-coalescing: added test case
-
-       
------ Tagged ld64-82.6
-
-2008-03-04     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5779681> ld crashes building XsanFS for Snow Leopard Builds
-       * src/ld.cpp: add bool dylibsOnly parameter to addJustInTimeAtoms()
-       * unit-tests/test-cases/tentative-and-archive: added test case
-       
-2008-03-04     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5775822> ld64 should not force building with gcc 4.0
-       * ld64.xcodeproj/project.pbxproj: change rules to use "system" compiler instead of 4.0
-       
-
-2008-02-29     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5774730> Simulator frameworks are being build split-seg and not prebound
-       * src/Options.cpp: only splitseg if prebound
-
-
-2008-02-29     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5774231> Linker should not make GSYM debug note for .objc_category_* symbols
-       * src/ld.cpp: suppress GSYM debug notes for absolute symbols
-       * unit-tests/test-cases/objc-category-debug-notes: added test case
-
-
-2008-02-29     Nick Kledzik    <kledzik@apple.com>
-
-    <rdar://problem/5768970> non-ASCII CFString support is broken
-    * src/MachOReaderRelocatable.hpp: only name and coalesce cfstring constants if they use a __cstring
-    * unit-tests/test-cases/cfstring-utf16: add test case
-
-
-2008-02-25     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5366363> ld -r -x 
-       * doc/man/man1/ld.1: update man page to explain -r -x produces auto-stripped labels
-
-
------ Tagged ld64-82.5
-
-2008-02-12     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5738023> x86_64: -stack_size failure when large __bss is used
-       * src/ld.cpp: only move section already in __DATA segment to new __huge section 
-       * unit-tests/test-cases/stack_size_no_addr: updated test case to add large bss section
-       
-
------ Tagged ld64-82.4
-
-2008-02-06     Nick Kledzik    <kledzik@apple.com>
-       
-       <rdar://problem/5726215> comdat warnings with ld -r of C++ .o files
-       * unit-tests/test-cases/eh-coalescing-r: added test case
-       * src/ld.cpp: in ld -r mode don't warn about if .eh symbols are not static
-       
-
-2008-02-06     Devang Patel    <dpatel@apple.com>
-
-       <rdar://problem/5724990> LTO of Bom framework with -dead_strip causes ld(1) crash
-       * src/LLVMReader.hpp: Check fAtom while determining LLVMReference target binding.
-       * unit-tests/test-cases/llvm-integration/Makefile: Add new test case.
-       * unit-tests/test-cases/llvm-integration/a15.c: New.
-       * unit-tests/test-cases/llvm-integration/b15.c: New.
-       * unit-tests/test-cases/llvm-integration/c15.c: New.
-       
-2008-02-05     Nick Kledzik    <kledzik@apple.com>
-
-       * src/ld.cpp: fix for -arch ppc -mdynamic-no-pic -pie so PPC_RELOC_HA16 reloc is used
-       
------ Tagged ld64-82.3
-       
-2008-02-04     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5721186> ld doesn't seem to understand $ld$add$os... and $ld$hide$os... for 10.6 moves
-       * src/ObjectFile.h: add 10.6
-       * src/Options.cpp: add 10.6 support
-       * src/MachOReaderDylib.hpp: recognize $os10.6$
-       
-
------ Tagged ld64-82.2
-
-2008-01-30     Devang Patel    <dpatel@apple.com>
-
-       <rdar://problem/5714833> Can't build 64-bit Intel binaries with LTO
-       <rdar://problem/5714787> ld64 fails to build with llvm-gcc-4.2
-       * src/LLVMReader.hpp: Fix character count typo in strncmp call.
-       Use const char * to initialize temp. string.
-       * ld64.xcodeproj/project.pbxproj: use $(DEVELOPER_DIR) in header search construction
-       instead of hard coding /Developer.
-       
------ Tagged ld64-82.1
-
-2008-01-23     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: don't bus error if S_LITERAL_POINTERS is missing relocs
-       
-
-2008-01-22     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5695496> ld uses 32-bits in some places to hold addresses when parsing 64-bit mach-o files
-       * src/MachOReaderRelocatable.hpp: use AddrToAtomMap type that switch address to 64-bits for 64-bit archs
-       * src/MachOWriterExecutable.hpp: verify BR14 does not overflow for external relocs
-       * unit-tests/test-cases/relocs-c: update test case to slide addresses to verify x86_64 .o files
-
-       
------ Tagged ld64-82
-       
-2008-01-18     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5694612> Bad grammar used in ld warning: cannot exported hidden symbol
-       * src/ld.cpp: fix typo in warning string
-       
-
-2008-01-16     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5565074> Bundle Loader does not work anymore when loader is a bundle
-       <rdar://problem/5590203> ld warns of incorrect architecture when linking a bundle to a bundle
-       * src/MachOReaderDylib.hpp: support linking against bundles via -bundle_loader. Clean up error messages
-       * unit-tests/test-cases/bundle_loader: update test case
-               
-       
-2008-01-16     Nick Kledzik    <kledzik@apple.com>
-       
-       <rdar://problem/5366363> ld -r -x creates debug notes (stabs) when it should not with -x (keep only global symbols)
-       * src/Options.cpp: in reconfigureDefaults() if -r and -x then -S
-       
-
-2008-01-16     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5566068> if ld crashes while writing output file, it should delete the half written file
-       * src/MachOWriterExecutable.hpp: wrap open/write/close in try block and add signal handlers all to delete
-       output file on failure.
-       
-
-2008-01-16     Devang Patel    <dpatel@apple.com>
-
-       * src/LLVMReader.hpp: Use __gnu_cxx::hash_map instead of hash supported by LLVM.
-
-
-2008-01-16     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5593537> GC-supported library can't be linked into GC-required executable
-       * src/ld.cpp: loosen constraint that all objc code must be compiled with same GC settings and
-       allow gc-compatible code to be linked into anything.
-       * unit-tests/test-cases/objc-gc-checks: update test case
-
-
-2008-01-15     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5687976> no debug notes for custom named data
-       * src/ld.cpp: in synthesizeDebugNotes() check getSymbolTableInclusion() instead of for leading underscore
-       * unit-tests/test-cases/dwarf-debug-notes: update test case
-       
------ Tagged ld64-81.5
-
-2008-01-14     Devang Patel    <dpatel@apple.com>
-
-       <rdar://problem/5683813> llvm-gcc-4.2 fails to build Sqlite 3.5.4 with -O4
-       * src/LLVMReader.hpp: Resolve proxy references. Collect new unbounded references 
-       after optimization.
-       * src/ld.cpp: Resolve additional unbounded references after optimization.
-       
-
-2008-01-14     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5655246> PPC Leopard (Xcode 3.0) linker ld gets "Bus error" sometimes
-       * src/MachOReaderRelocatable.hpp: use same code as x86 to parse ppc and arm sect-diff relocs
-       * src/MachOWriterExecutable.hpp:  use same code as x86 to write ppc and arm sect-diff relocs
-       
-
-2008-01-11     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5637618> PPC Leopard (Xcode 3.0) linker ld reports "unknown scattered relocation type 4"
-       * src/MachOReaderRelocatable.hpp: add PPC_RELOC_HI16 to scattered reloc parsing
-       * unit-tests/test-cases/relocs-asm/relocs-asm.s: added tests for scattered hi/lo instructions
-       
-
-2008-01-11     Nick Kledzik    <kledzik@apple.com>
-
-       * doc/man/man1/ld.1: add doc for -no_implicit_dylibs, -read_only_stubs, -slow_stubs, -interposable_list
-       
-       
-2008-01-11     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4800212> ld64(1) man page uses ambiguous term "suffix"
-       * doc/man/man1/ld.1: make meaning of "suffix" more explicit
-       
-
-2008-01-11     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5633081> Obj-C Symbols in Leopard Can't Be Weak Linked
-       * src/MachOWriterExecutable.hpp: set weak and lazy attributes on dummy .objc_class_name undefines
-        to dylibs to support Mac OS X 10.3.x dyld
-        
-
-2008-01-11     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5669751> Unknown error with linker (dyld: unknown external relocation type)
-       * src/ld.cpp: fix crash when SO stabs are not balanced
-       
-
-2008-01-11     Devang Patel    <dpatel@apple.com>
-
-       <rdar://problem/5667433> LTO does not work if expected output is a dynamic library
-       * src/LLVMReader.hpp: Supply arguments describing output kind to optimizer. Communicate
-       visibility info.
-
-2000-01-10     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5680988> __cls_refs section is losing S_LITERAL_POINTERS section type
-       * src/MachOWriterExecutable.hpp: special case __cls_refs section 
-       * unit-tests/test-cases/objc-literal-pointers: add test case
-
-
-2008-01-03     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5667688> wrong EH information might be used
-       Created new kGroupSubordinate reference kind to model group comdat.  The "signature" atom
-       has kGroupSubordinate references to the other atoms in the group.  If the signature atom
-       is coalesced away, the linker follows kGroupSubordinate references and throws away the
-       other members of the group.
-       * unit-tests/test-cases/eh-coalescing: added test case
-       * src/ld.cpp: added markDead() and use propagate to subordinates
-       * src/Architectures.hpp: added kGroupSubordinate
-       * src/MachOReaderRelocatable.hpp: add kGroupSubordinate reference from a function to its .eh atom
-         and if used, from .eh atom to its LSDA atom.
-       * src/MachOWriterExecutable.hpp: handle kGroupSubordinate like kNoFixUp
-
------ Tagged ld64-81.4.1
-
-2007-12-19     Devang Patel    <dpatel@apple.com>
-
-       * src/LLVMReader.hpp: Add LLVM_LTO_VERSION #ifdef check.
-       
-2007-12-19     Devang Patel    <dpatel@apple.com>
-
-       * src/LLVMReader.hpp: Add fOptimizer NULL check before calling printVersion().
-       
-2007-12-19     Devang Patel    <dpatel@apple.com>
-
-       <rdar://problem/5655956> print LLVM LTO version number in verbose mode
-       * src/LLVMReader.hpp: Add printLLVMVersion() to print llvm version string in verbose mode.
-       * src/Options.cpp: Use printLLVMVersion() in verbose mode.
-
-2007-12-19     Devang Patel    <dpatel@apple.com>
-
-       <rdar://problem/5655956> print LLVM LTO version number in verbose mode
-       * src/Options.h: Add verbose() method to check fVerbose flag.
-       * src/LLVMReader.hpp: Print LLVM version string in verbose mode.
-       
------ Tagged ld64-81.4
-
-2007-12-18     Devang Patel    <dpatel@apple.com>
-
-       * src/LLVMReader.hpp: Invalidate input architecture when optimizer is not available.
-
------ Tagged ld64-81.3
-
-2007-12-17     Nick Kledzik    <kledzik@apple.com>
-
-       * ld64.xcodeproj/project.pbxproj: remove extraneous header search paths
-       
-
-2007-12-17     Devang Patel    <dpatel@apple.com>
-
-       * src/LLVMReader.hpp: Do not throw exception if LLVMReader is not able to
-       dlopen LTO library. Instead just flag input file as an invalid LLVM bitcode file.
-
-
-2007-12-14     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5645908> gcc DejaGnu failure: gcc.dg/20020312-2.c (test for excess errors) (-fstack-protector-all)
-       * src/MachOWriterExecutable.hpp: fix Writer<x86>::generatesExternalTextReloc() to allow text relocs
-       * unit-tests/test-cases/read-only-relocs: updated test case to link a dynamic main executable compiled with -static
-
-
-2007-12-14     Devang Patel    <dpatel@apple.com>
-
-  <rdar://problem/5648438> Enable Link Time Optimization in Opal
-  * src/LLVMReader.hpp: Locate LLVMlto.dylib relative to ld location in Developer folder.
-  * ld64.xcodeproj/project.pbxproj: Add {DEVELOPER_DIR}/usr/include in header search path.
-  * unit-tests/run-all-unit-tests: Set DYLD_FALLBACK_LIBRARY_PATH to find LLVMlto.dylib during unit testing.
-  * unit-tests/testcases/llvm-integration/Makefile: Point LLVMGCC and LLVMGXX to llvm-gcc-4.2 in Developer folder during unit testing.
-  
-  
-2007-12-13     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5645446> SWB: failures due to ld: pointer in read-only segment not allowed in slidable image, used in ...
-       * src/MachOReaderRelocatable.hpp: in Reader<x86>::addRelocReference() handle weak pc-rel 32-bit vanilla relocs properly
-       
------ Tagged ld64-81.2 
-
-
-
-2007-12-07     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5615298> support 8-bit relocations for i386
-       * src/Architectures.hpp: add kPCRel8
-       * src/MachOReaderRelocatable.hpp: support 8-bit pc-rel relocations for intel
-       * src/MachOWriterExecutable.hpp: support 8-bit pc-rel relocations for intel
-       * unit-tests/test-cases/relocs-asm: add test cases
-
-
------ Tagged ld64-81.1 
-
-2007-12-06     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderDylib.hpp: rework cycle detection to remove some false positives
-       
-
-2007-12-05     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5628149> Duplicate probe firings in Security.framework
-       * src/ld.cpp: check dtrace probe sites are not in fDeadAtoms before using
-       * unit-tests/test-cases/dtrace-static-probes-coalescing: add test case
-       
-
-2007-12-05     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: fix CFString coalescing to work with -fwritable-strings
-       * unit-tests/test-cases/cfstring-coalesce: add -fwritable-strings to test case
-
-
------ Tagged ld64-81   
-
-2007-11-15     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4196067> ld64 should support runtime text relocations
-       * src/MachOWriterExecutable.hpp: add generatesLocalTextReloc() and generatesExternalTextReloc()
-       * src/Options.cpp: process -read_only_relocs option
-       * src/Options.h: add allowTextRelocs() and warnAboutTextRelocs()
-       * src/MachOReaderRelocatable.hpp: add hasLongBranchStubs()
-       * src/machochecker.cpp: allow relocs in read only segments, if section flags are set
-       * unit-tests/test-cases/read-only-relocs: update test case
-
-
-2007-11-08    Devang Patel     <dpatel@apple.com>
-
-       * ld64.xcodeproj/project.pbxproj: add new build phase "build configure.h" for
-       ld target.
-       * src/ld.cpp: Include "configure.h"
-
-
------ Tagged ld64-80.11
-
-2008-02-12     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5741312> Wrong section name for objc info for ARM when OBJC2 is used
-       * src/MachOWriterExecutable.hpp: switch segment/section name for ARM objc2 image info
-
------ Tagged ld64-80.10
-       
-2008-02-11     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5733578> ld64 does not support -aspen_version_min 2.0
-       * src/Options.cpp: allow 2.x for -aspen_version_min
-       
-
-2008-02-11     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5733575> ld_classic: unknown flag: -aspen_version_min
-       * src/Options.cpp: change -aspen_version_min x.x to -macosx_version_min 10.5 when invoking ld_classic
-       
-
------ Tagged ld64-80.9 
-
-2008-01-29     Nick Kledzik    <kledzik@apple.com>
-       
-       <rdar://problem/5713054> -iphone_version_min ==> -aspen_version_min
-       * src/Options.cpp: support -aspen_version_min
-       
-
------ Tagged ld64-80.8 
-
-2008-01-10     Nick Kledzik    <kledzik@apple.com>
-       
-       * src/Options.cpp: support transition to new objc ABI for ARM by allowing old .objc_class_name_* 
-       style names in export files and map them to new _OBJC_CLASS_$_ style names.
-       
-
------ Tagged ld64-80.7 
-
-2008-01-02     Nick Kledzik    <kledzik@apple.com>
-       
-       <rdar://problem/5572168> BigBear5A18 isn't fully prebound
-       * src/Options.cpp: make fNeedsModuleTable true for arm
-
------ Tagged ld64-80.6 
-
-2007-11-30     Nick Kledzik    <kledzik@apple.com>
-       
-       <rdar://problem/5620976> -iphone_version_min
-       * src/Options.cpp: handle -iphone_version_min option
-
-
------ Tagged ld64-80.5 
-
-2007-11-26     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5601142> need to special case some dylibs in seg_addr_table
-       * src/Options.cpp: retry seg_add_table lookup for a couple of unusual dylibs
-       
-       
------ Tagged ld64-80.4 
-
-2007-11-06     Nick Kledzik    <kledzik@apple.com>
-       
-       * src/MachOReaderRelocatable.hpp: fix parsing of external and scattered thumb branch22 relocs
-       * unit-tests/test-cases/thumb-blx: add test case to keep blx issues from coming back
-
------ Tagged ld64-80.3 
-       
-2007-11-03     Nick Kledzik    <kledzik@apple.com>
-       
-       * src/MachOReaderRelocatable.hpp: remove recalc of dstAddr which could cause thumb branches to be +2
-       * src/MachOWriterExecutable.hpp: remove incorrect test for relocateableExternal
-       
------ Tagged ld64-80.2
-
-2007-11-01     Nick Kledzik    <kledzik@apple.com>
-
-       * src/ld.cpp: hack my own prototype for log2() until math.h is cleaned up
-       
-       
------ Tagged ld64-80.1
-
-2007-11-01     Nick Kledzik    <kledzik@apple.com>
-
-       * ld64.xcodeproj/project.pbxproj: add HEADER_SEARCH_PATHS for cross builds
-       * src/ld.cpp: temporarily disable LLVM_SUPPORT
-       * src/MachOWriterExecutable.hpp: Don't use CC_MD5() directly
-
-
-2007-10-26     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5556038> Cannot build with libm_static.a statically linked
-       * src/MachOWriterExecutable.hpp: Fix makesExternalRelocatableReference() for -r -d case
-       * unit-tests/test-cases/tentative-to-real-hidden: add test case
-
-
------ Tagged ld64-80
-
-2007-10-24     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4222696> linker should probably warn about trying to export a hidden symbol
-       * src/ld.cpp: if using -exported_symbols_list check each hidden atom as it is added to symbol table
-       * src/Options.h,.cpp: add hasExportMaskList()
-       * unit-tests/test-cases/exported_symbols_list-hidden: added test case
-
-
-2007-10-24     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOWriterExecutable.hpp: keep old style dtrace probes externel for kernel builds
-       
-
-2007-10-23     Nick Kledzik    <kledzik@apple.com>
-       
-       <rdar://problem/4556199> unify error and warning messages
-       <rdar://problem/5546450> -w should suppress warnings
-       * src/ld.cpp: use warning() function
-       * src/Options.h: remove emitWarnings()
-       * src/MachOReaderDylib.hpp: use warning() function
-       * src/MachOReaderRelocatable.hpp: use warning() function
-       * src/Options.cpp: use and implement warning()
-       * src/MachOWriterExecutable.hpp: use warning() function
-       * unit-tests/test-cases/visibility-warning: verify -w suppresses warnings
-
-
-2007-10-23     Devang Patel    <dpatel@apple.com>
-
-       * src/ld.cpp: Cover arm support inside __OPEN_SOURCE__ macro check.
-       * src/LLVMReader.hpp: Cover arm support inside __OPEN_SOURCE__ macro check.
-       * src/MachOReaderDylib.hpp: Cover arm support inside __OPEN_SOURCE__ macro check.
-       * src/ObjectFile.h: Cover arm support inside __OPEN_SOURCE__ macro check.
-       * src/MachOReaderRelocatable.hpp: Cover arm support inside __OPEN_SOURCE__ macro check.
-       * src/OpaqueSection.hpp: Cover arm support inside __OPEN_SOURCE__ macro check
-       * src/MachOWriterExecutable.hpp: Cover arm support inside __OPEN_SOURCE__ macro check.
-       * src/ObjectDump.cpp: Cover arm support inside __OPEN_SOURCE__ macro check.
-       
-
-2007-10-22     Nick Kledzik    <kledzik@apple.com>
-
-       * src/Options.cpp: add support for LD_DEAD_STRIP and LD_WARN_COMMONS
-       * src/MachOReaderRelocatable.hpp: fix problem with -dead_strip of ObjC literal pointers
-
-
-2007-10-22     Nick Kledzik    <kledzik@apple.com>
-
-       * src/Options.cpp: have -static arm code link with ld_classic (for now)
-       
-
-2007-10-22     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5396826> Recognize all arm architectures
-       * src/MachOReaderRelocatable.hpp: add support for all ARM sub-types
-       * unit-tests/test-cases/cpu-sub-types: add test cases for all combinations of ARM sub-types
-
-
-2007-10-19     Nick Kledzik    <kledzik@apple.com>
-
-       * src/*: merge in arm support
-       * unit-tests/test-cases/*: fix to work for arm and thumb
-
------ Tagged ld64-79
-
-2007-10-16     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOWriterExecutable.hpp: if -r mode, always set custom alignment (SET_COMM_ALIGN) on common symbols
-       * unit-tests/test-cases/visibility-warning-dylib-v-archive/Makefile: fix warning
-       * unit-tests/test-cases/static-executable/Makefile: fix spurious failure
-
-
-2007-10-16     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOWriterExecutable.hpp: fix edge case in branch island generation
-
-
-2007-10-12     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5323449> Add option to create old, slow stubs for i386
-       * src/ObjectFile.h/.cpp: support -read_only_stubs
-       * src/MachOWriterExecutable.hpp: enhance StubAtom<x86> to support old style __symbol_stub/__la_symbol_ptr stubs
-       * unit-tests/test-cases/slow-x86-stubs: add test case
-
-
-2007-10-12     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5427952> ld64's re-export cycle detection logic prevents use of X11 libGL on Leopard
-       * src/Options.cpp: in findFileUsingPaths() don't search for embedded dylibs
-       * unit-tests/test-cases/indirect-path-search/Makefile: added case for a dylib embedded in a framework
-
-
-2007-10-11     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5451987> add option to disable implicit load commands for indirectly used public dylibs
-       * src/Options.cpp: add support for -no_implicit_dylibs
-       * src/ObjectFile.h: add fImplicitlyLinkPublicDylibs
-       * src/MachOReaderDylib.hpp: test fImplicitlyLinkPublicDylibs before hoisting an implicitly linked dylib
-       * unit-tests/test-cases/implicit_dylib: add test case
-
-
-2007-10-11     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5254413> -interposable_list
-       * src/Options.h/cpp: Add fInterposeList and fInterposeMode to support -interposable_list
-       * src/MachOWriterExecutable.hpp: pass symbol name to fOptions.interposable()
-       * unit-tests/test-cases/interposable_list: add test case
-
-
-2007-10-10     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5529626> If only weak_import symbols are used, linker should use LD_LOAD_WEAK_DYLIB
-       * src/MachOWriterExecutable.hpp: automatically use LC_LOAD_WEAK_DYLIB if all symbols used from a dylib are weak_import
-       * unit-tests/test-cases/weak_dylib: added test case
-
-
-2007-10-10     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5504954> linker does not error when dylib ordinal exceeds 250
-       * src/MachOWriterExecutable.hpp: error out if ordinals exceed max allowed
-       
-
-2007-10-10     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4067110> overriding 'operator new' or 'operator delete' fails if no weak symbols are present
-       * src/ld.cpp: at end of checkUndefines() search dylibs for weak versions of any global external symbols 
-       * src/ObjectFile.h: add hasWeakExternals() method to Reader
-       * src/MachOReaderDylib.hpp: implement hasWeakExternals() method in Reader
-       * src/ExecutableFile.h: add overridesDylibWeakDefines parameter to write()
-       * src/MachOWriterExecutable.hpp: use overridesDylibWeakDefines parameter to write()
-       * unit-tests/test-cases/operator-new: add test case
-       
-
-2007-10-05     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5048861> No warning about tentative definition conflicting with dylib definition
-       <rdar://problem/5132652> .comm variables in shared library, worked with XCode 2.4.1, broken with XCode 3?
-       * src/ld.cpp: at end of checkUndefines() verify if any remaining commons conflict with dylibs
-       * doc/man/man1/ld.1: document -commons and -warn_commons options
-       * unit-tests/test-cases/tentative-and-dylib: added test case
-
-
-2007-10-05     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5346331> NS/CFString constants are not dead strippable
-       * src/MachOReaderRelocatable.hpp: break up __cfstring section into one atom per cfstring, make them coalesable
-       * unit-tests/test-cases/cfstring-coalesce: added test case
-
-
-2007-10-05     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5524973> Dead stripping + exported symbols list using wildcards doesn't seem to do the right thing
-       * src/Options.cpp/h: add hasWildCardExportRestrictList()
-       * src/ld.cpp: if dead stripping code and have wildcard exports, add all global atoms matching wildcards as roots
-       * unit-tests/test-cases/exported-symbols-wildcards-dead_strip: added test case
-
-
-2007-10-04     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5433882> ld shouldn't search /Network/Library/Frameworks by default
-       * src/Options.cpp: remove /Network/Library/Frameworks/ from default search path
-       * doc/man/man1/ld.1: document the change
-       
-
-2007-10-04     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5341567> all binaries should get LD_UUID load commands, not just those with DWARF symbols
-       * src/ld.cpp: default fCreateUUID to be true for non object file output types
-       * unit-tests/test-cases/no-uuid/Makefile: update test case to match new rules
-
-
------ Tagged ld64-78
-
-2007-09-27     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5476313> range check load commands
-       * src/MachOReaderDylib.hpp: check that load commands all fit in load command size from header
-       * src/MachOReaderRelocatable.hpp: check that load commands all fit in load command size from header
-
-
-2007-09-27     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5433355> Xc8M2540a: ld64 crashes when linking Pascal program
-       * src/ld.cpp: fix findAtomAndOffset() to handle where there are no function atoms 
-
-
-2007-09-27     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5241179> ADOBE Xcode 3: ld -dead_strip does not work with -init from an archive
-       * src/ld.cpp: add bool parameter to entryPoint() so -init atom not looked for too soon
-       * unit-tests/test-cases/dead_strip-init-archive: added test case
-       
-
-2007-09-26     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5459546> Spurious link warnings for inline members of C++ template classes
-       * src/ld.cpp: check definition kinds before warning about visibility mismatches
-       * unit-tests/test-cases/visibility-warning: added test case
-       
-
-2007-09-26     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5394172> an empty .o file with zero load commands will crash linker
-       * src/MachOReaderRelocatable.hpp: have Reader constructor return early of no load commands
-       * unit-tests/test-cases/empty-object: added test case
-       
-       
-2007-09-26     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5453384> 9a527: ppc64 branch islands fail with 4GB pagezeo
-       * src/MachOWriterExecutable.hpp: start range calculations at start of __text not at zero.
-       
-
------ Tagged ld64-77 (Xcode 3.0)
-
-2007-07-23     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5351380> Kernel is linked with some global symbols unsorted
-       * src/MachOWriterExecutable.hpp: Add NListNameSorter to allow global atoms and extra labels to be sorted
-
-
-2007-07-20     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5254468> Can't do objc_msgSendSuper dispatches after loading a Fix&Continue bundle
-       * src/MachOWriterExecutable.hpp: when calculating what kind of reloc to use, never use an 
-         external reloc to reference 32-bit ObjC symbols.
-
-
-2007-07-20     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5349847> Runtime crash with ICC math library on Leopard
-       * src/MachOReaderRelocatable.hpp: detect if section starts with a symbol that is not 
-         aligned to section and correct it.
-
-
------ Tagged ld64-76
-
-2007-06-29     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5303718> export hiding does not work for frameworks
-       * src/MachOReaderDylib.hpp: fix checks in isPublicLocation()
-       * unit-tests/test-cases/symbol-moving: update to test frameworks as well as dylibs
-
-
-2007-06-27     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5299907> linker should use undefines from flat dylibs when linking a main flat
-       * src/ObjectFile.h: added fLinkingMainExecutable
-       * src/Options.cpp: set up fLinkingMainExecutable
-       * src/MachOReaderDylib.hpp: when linking a main executable for flat namespace, the reader for
-               any loaded flat namespace dylib will have a new atoms that has references to all undefined
-               symbols in the dylib
-       * unit-tests/test-cases/flat-indirect-undefines: added test case
-       * doc/man/man1/ld.1: update man page to describe when dylib undefines are used
-       
-
-2007-06-27     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5277857> OpenGL.framework and X11 both have a libGL.dylib which can cause ld to segfault if both are found
-       * src/MachOReaderDylib.hpp: add assertNoReExportCycles() method
-       * unit-tests/test-cases/dylib-re-export-cycle: added test case
-
-
-2007-06-27     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5286462> ld64 has slightly different warning message formats than the old ld
-       * src/ld.cpp: standardize all warning messages to start with "ld: warning"
-       * src/MachOWriterExecutable.hpp: ditto
-       * src/MachOReaderRelocatable.hpp: ditto
-       * src/MachOReaderDylib.hpp:ditto
-
-
-2007-06-26     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5297034> -dead_strip can cause duplicate external commons
-       * src/ld.cpp: don't use discarded coalesced global atoms as dead strip roots
-       * src/machochecker.cpp: error if duplicate external symbols
-       * unit-tests/test-cases/commons-coalesced-dead_strip: added test case
-       
-
-2007-06-26     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4135857> update man page that linker does not search indirect libraries with two-level namespace
-       * doc/man/man1/ld.1: add new "Indirect dynamic libraries" section to man page
-       
-
-2007-06-26     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5285473> Xc9A466: Exports file cannot use Mac line ends
-       * src/Options.cpp: check for \r or \n when parsing .exp files
-       * unit-tests/test-cases/exported_symbols_list-eol: added test case
-       
-
------ Tagged ld64-75
-
-2007-05-31     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4607755> Simplier, generalized way to re-export dylibs: LC_REEXPORT_DYLIB
-       * src/MachOWriterExecutable.hpp: Use LC_REEXPORT_DYLIB when targetting 10.5
-
-
------ Tagged ld64-74.5
-
-2007-05-31     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5241902> set OSO timestamp to zero for when building in buildit
-       * src/ld.cpp: check for RC_RELEASE and if exists set all OSO timestamps to zero
-       
-
-2007-05-30     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5224676> BUILD_STABS now causes ld of xnu to bus error
-       * src/ld.cpp: Change || to && in collectStabs()
-
-
------ Tagged ld64-74.4
-
-2007-05-18     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5211667> static probes don't work with libraries in dyld shared cache
-       *  src/OpaqueSection.hpp: the __TEXT segment is executable
-
-
------ Tagged ld64-74.3
-
-2007-05-16     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5201463> ppc: linker adds stubs to cstring references
-       * src/MachOWriterExecutable.hpp: update ppc stubableReference() to only allow high/low references
-               to be stubed if they reference a symbol in some other dylib.
-       * unit-tests/test-cases/stub-generation: added test case
-       
-
-2007-05-16     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5008421> ppc64: need to make LOCAL indirect symbol table entry for now local symbol
-       * src/MachOWriterExecutable.hpp: factored local tests into indirectSymbolIsLocal()
-       * unit-tests/test-cases/non-lazy-r: added test case
-       
-
-2007-05-15     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5198807> ld64 drops fix&continue bit in __OBJC, __image_info.
-       * src/MachOReaderRelocatable.hpp: implement objcReplacementClasses()
-       
-
-2007-05-15     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5066152> support __image_info in __DATA segment for 64-bits
-       * src/MachOReaderRelocatable.hpp: use strncmp() for __objc_imageinfo since it is 16 bytes long
-       * src/MachOWriterExecutable.hpp: specialize segment/section names for synthesized objc image info section
-
-
-2007-05-15     Nick Kledzik    <kledzik@apple.com>
-
-       * unit-tests/include/common.makefile: set COMPILER_PATH so harness works with latest compiler
-
-
------ Tagged ld64-74.2
-
-2007-05-11     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5195447> ld64-74.1 breaks libstdc++ DejaGnu test (G5 only)
-       * src/MachOWriterExecutable.hpp: don't stub a reference if the target offset is non-zero
-       
-
------ Tagged ld64-74.1
-
-2007-05-09     Nick Kledzik    <kledzik@apple.com>
-       
-       * src/Options.h: add emitWarnings()
-       * src/Options.cpp: wire up -w to emitWarnings()
-
-
-2007-05-09     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5137285> ld64 won't link wine (regression from Tiger)
-       * src/Architectures.hpp: add x86::kPointerDiff16 and x86::kPCRel16
-       * src/MachOReaderRelocatable.hpp: add support to parse new relocs
-       * src/MachOWriterExecutable.hpp: add support fo new relocs
-       
-
-2007-05-08     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5182537> need way for ld and dyld to see different exported symbols in a dylib
-       * src/MachOReaderDylib.hpp: update parse and use $ld$ symbols
-       * src/Options.h: move VersionMin to ReaderOptions
-       * src/ObjectFile.h: move VersionMin to ReaderOptions
-       * src/Options.cpp:  move VersionMin to ReaderOptions
-       * src/MachOWriterExecutable.hpp: move VersionMin to ReaderOptions
-       * unit-tests/test-cases/symbol-moving: added test case
-       
-
-2007-05-03     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5181105> typo in error message for linking -pie
-       * src/MachOWriterExecutable.hpp: fix typo in error messages
-       
-
------ Tagged ld64-74
-
-2007-05-03     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5171880> ld64 can't find @executable _path relative dylibs from our umbrella frameworks
-       <rdar://problem/4019497> ld64 should handle linking against dylibs that have @loader_path based dylib load commands
-       * src/ObjectFile.h: add from parameter to findDylib()
-       * src/MachOReaderDylib.hpp: supply from parameter to findDylib()
-       * src/ld.cpp: use from parameter for @loader_path substitution in findDylib()
-       * unit-tests/test-cases/re-export-relative-paths: added test case
-       
-
-2007-05-02     Nick Kledzik    <kledzik@apple.com>
-
-       * src/ObjectFile.h: add fLogObjectFiles and fLogAllFiles
-       * src/Options.cpp: hook up -t to fLogAllFiles and -whatsloaded to fLogObjectFiles 
-       * src/MachOReaderDylib.hpp: log if fLogAllFiles
-       * src/MachOReaderRelocatable.hpp: log if fLogObjectFiles or fLogAllFiles 
-       * src/MachOReaderArchive.hpp: log if fLogAllFiles
-       * doc/man/man1/ld.1: update man page
-
-
-2007-05-02     Nick Kledzik    <kledzik@apple.com>
-       
-       <rdar://problem/5177848> typo in message, frameowrk
-       * src/Options.cpp: fix typo
-
-
-2007-05-01     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4977301> "ld" man page is missing the description for many options 
-       * doc/man/man1/ld.1: add documentation on all obsolete options
-       
-       
-2007-05-01     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5113424> ld doesn't handle -mlong-branch .o files that have had local symbols stripped
-       <rdar://problem/4965359> warning about dwarf line info with -mlong-branch
-       * src/MachOReaderRelocatable.hpp: don't lop -mlong-branch stubs off end of functions
-       * src/MachOWriterExecutable.hpp: allow code references besides BR24 to be stubable
-       
-
-2007-04-30     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5065659> unable to link VTK because __textcoal_nt too large
-       * src/MachOReaderRelocatable.hpp: when doing a final link map __textcoal_nt to __text
-
-
-2007-04-30     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5062685> ld does not report error when -r is used and exported symbols are not defined.
-       <rdar://problem/4637139> ld leaves global common symbols not in exported symbols list.
-       * src/ld.cpp: stop special casing -r mode in checkUndefines() 
-       * src/MachOWriterExecutable.hpp: don't create proxy atom in -r mode if it is supposed to be exported.
-               mark tentative definitions are private extern in -r mode even without -keep_private_externs
-       * unit-tests/test-cases/exported_symbols_list-r: added test case
-
-
-2007-04-27     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5137732> ld should keep looking when it finds a weak definition in a dylib
-       * src/ld.cpp: modified addJustInTimeAtoms() to keep looking when a weak defintion is found
-       * unit-tests/test-cases/weak-def-ordinal: added test case
-       
-
-2007-04-27     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5166572> better error message for indirect dylibs missing required architecture
-       * src/ld.cpp: when loading indirect dylib add path to error messages
-
-
-2007-04-25     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5109373> the i386 slice of dyld does not need __IMPORT segment
-       * src/ObjectFile.h: add fForDyld
-       * src/Options.cpp: set up fForDyld
-       * src/MachOReaderRelocatable.hpp: if fForDyld, change __IMPORT segment to __DATA
-       * src/MachOWriterExecutable.hpp: recognize __DATA/__pointers in dyld as a non-lazy section
-
-
-2007-04-24     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5008421> ppc64: need to make LOCAL indirect symbol table entry for now local symbol
-       * src/MachOWriterExecutable.hpp: use INDIRECT_SYMBOL_LOCAL for any non-global symbol
-       * unit-tests/test-cases/strip_local: update test case
-       
-       
-2007-04-24     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5150407> ld64 -sectorder and -order_file files don't accept white space following the :
-       * src/Options.cpp: prune white space after colon and before symbol name
-       * unit-tests/test-cases/order_file: update test case to have a space after the colon
-       
-
-2007-04-24     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5055233> ld64 corrupts debug symbol table entries, nm doesn't print them
-       * src/MachOWriterExecutable.hpp: properly set ilocalsym in module table
-
-
-2007-04-24     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5066152> support __image_info in __DATA segment for 64-bits
-       * src/MachOReaderRelocatable.hpp: look for new objc info section name too
-
-
-2007-04-24     Nick Kledzik    <kledzik@apple.com>
-       
-       * src/MachOWriterExecutable.hpp: fix -non_global_symbols_strip_list to work with -r
-       * unit-tests/test-cases/local-symbol-partial-stripping: update test case
-
-
-
------ Tagged ld64-73.7
-
-2007-05-10     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5194804> can't use dtrace static probes in x86_64 dylib
-       * src/MachOWriterExecutable.hpp: x86_64:kPointerDiff32 is ok in shared region
-       * unit-tests/test-cases/dtrace-static-probes: update to build dylib too
-
-
-2007-05-09     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5191610> 9A430: using -dead_strip with static dtrace probes causes ld to crash
-       * src/ld.cpp: fix markLive() to look at right name in dtrace probe refernce
-       * unit-tests/test-cases/dtrace-static-probes: added -dead_strip case
-
-
------ Tagged ld64-73.6
-
-2007-04-17     Nick Kledzik    <kledzik@apple.com>
-       
-       <rdar://problem/5140897> Add options to do partial stripping of local symbols
-       * src/MachOWriterExecutable.hpp: use fOptions.keepLocalSymbol()
-       * src/Options.cpp: implement -non_global_symbols_no_strip_list and -non_global_symbols_strip_list
-       * src/Options.h: replace stripLocalSymbols() with localSymbolHandling() and keepLocalSymbol()
-       * doc/man/man1/ld.1: document -non_global_symbols_no_strip_list and -non_global_symbols_strip_list
-       * unit-tests/test-cases/local-symbol-partial-stripping: added test case
-       
-
------ Tagged ld64-73.5
-
-2007-04-17     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5129379> ld64-73.3 XBS logging incorrectly reporting "direct" dynamic libraries
-       * src/ld.cpp: restore direct vs indirect library for LD_TRACE_DYLIBS logging
-       
-
-2007-04-16     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5067034> data initialized to a weak imported symbol is missing relocation
-       * src/MachOWriterExecutable.hpp: check for A::kPointerWeakImport in buildExecutableFixups()
-       * unit-tests/test-cases/weak_import: updated test case to catch this problem
-
-
-2007-04-13     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5071047> Support -U 
-       * src/MachOWriterExecutable.hpp: create proxies for -U symbols
-       * src/Options.cpp: process -U 
-       * src/Options.h: add allowedUndefined() and someAllowedUndefines()
-       * src/ld.cpp: create proxies for -U symbols
-       * doc/man/man1/ld.1:  document -U and -undefined options
-       * unit-tests/test-cases/undefined-dynamic-lookup: added test case
-
-
------ Tagged ld64-73.4
-
-2007-04-12     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5125280> ld changes needed to support read-only DOF
-       * src/Options.cpp: remove -read_only_dof
-       * src/Options.h: remove fReadOnlyDOFs
-       * src/ld.cpp: only generate read-only DOF sections
-       
-
------ Tagged ld64-73.3.1
-
-2007-04-13     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5130496> -framework vecLib -framework Accelerate causes bad ordinals 
-       * src/MachOWriterExecutable.hpp: fix bug optimizeDylibReferences() when there are two readers with same install name
-
-
------ Tagged ld64-73.3
-
-2007-04-03     Nick Kledzik    <kledzik@apple.com>
-
-       * src/ld.cpp: read-only-dofs should use 32-bit offsets for x86_64
-       * src/MachOReaderDylib.hpp: if "public" re-export is not marked implict, still mark it as re-exported
-       
-
-2007-04-02     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5105971> if replacement file for -dylib_file is missing, warn instead of error
-       * src/ld.cpp: a try/catch to turn -dylib_file error into a warning.
-       * unit-tests/test-cases/dylib_file-missing: add test case
-       * doc/man/man1/ld.1: update man page about -dead_strip_dylibs
-       
-
------ Tagged ld64-73.2
-
-2007-03-31     Nick Kledzik    <kledzik@apple.com>
-       
-       <rdar://problem/5102873> ld64-73: atom sorting error with duplicate zero sized bss symbols
-       * src/MachOReaderRelocatable.hpp: suppress warning on sorting zero size zero fill atoms
-       
-2007-03-31     Nick Kledzik    <kledzik@apple.com>
-       
-       <rdar://problem/5102845> ld64-73 fails anything linking with -lm
-       * src/ld.cpp: when processing dylbs that are sylinks ensure that fDylibMap contains all paths  
-       * src/MachOWriterExecutable.hpp: when dead stripping dylibs and renumbering ordinals make sure
-               aliases dylib get renumbered too
-       * unit-tests/test-cases/dylib-aliases: added
-       
-       
------ Tagged ld64-73.1
-       
-2007-03-30     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOWriterExecutable.hpp: back out use of LC_REEXPORT_DYLIB until rdar://problem/5009909 is in build fleet
-       
-       
------ Tagged ld64-73
-       
-2007-03-30     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4175790> ER: -dead_strip_dylibs
-       <rdar://problem/3904828> linker should add implicit load commands for indirectly used public dylibs
-       * src/ObjectFile.h: change dylib reader interface to implictly/explicitlyLinked
-       * src/ld.cpp: use new dylib reader interface
-       * src/Options.h: add deadStripDylibs()
-       * src/Options.cpp: support -dead_strip_dylibs
-       * src/MachOReaderDylib.hpp: use new dylib reader interface
-       * src/MachOWriterExecutable.hpp: remove dylib load commands for unused dylibs and alter ordinals 
-       * unit-tests/test-cases/re-export-optimizations: added
-       * unit-tests/test-cases/dead_strip_dylibs: added
-       
-
-2007-03-30     Nick Kledzik    <kledzik@apple.com>
-
-       * src/Options.cpp: enable -lfoo to search for libfoo.so as well as libfoo.dylib, 
-               remove seg addr table hack for transitioning to new linker
-
-2007-03-30     Nick Kledzik    <kledzik@apple.com>
-       
-       <rdar://problem/5073800> ADOBE XCODE3: Linker is slow with large C++ .o files
-       * src/MachOReaderRelocatable.hpp: the compiler generates stubs to weak functions in the
-               same translation unit.  Don't treat those like the spurios stubs to static functions.
-
-
-2007-03-29     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4739044> ld64 should link mach_kernel during xnu builds to support dtrace
-       * src/MachOReaderRelocatable.hpp: To handle duplicate labels properly, rework how atoms sizes are set 
-               by iterating through sorted fAtoms rather than fAddrToAtom, . Change default alignment of commons
-               to be the natural alignment of the size rounded up to the closest power of two and max it at 12.
-               Build atoms in reverse symbol table order so that global atoms are constructed before locals.
-               This assures that if there is a global and local label at the same location, the global label
-               will become the atom's name and the local will be an alias.  Properly handle a label
-               at the end of a section.  Handle R_ABS in relocations.  Handle sect-diff relocs with addends.
-               Don't auto-strip 'l' symbols in static executables (mach_kernel).
-       * src/OpaqueSection.hpp:  opaque_section now has an ordinal
-       * src/ld.cpp: opaque_section now requires an ordinal
-       * src/ObjectFile.h: add ReaderOptions.fForStatic
-       * src/Options.cpp: set fForStatic when building a static executable
-       * src/MachOWriterExecutable.hpp: add from atom to StubAtom<ppc>.  Properly write out i386
-               sect-diff relocs with addends.  properly write out ppc PICbase relocs where pic base
-               is not in the atom.
-
-
-2007-03-27     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5085863> Typo in ld man page (-exported_symbols_list)
-       * doc/man/man1/ld.1: fix typo
-       
-
-2007-03-26     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4727750> consider generating LC_UUID from a checksum of the file
-       * src/Options.h: change emitUUID() to getUUIDMode()
-       * src/Options.cpp: support -random_uuid
-       * src/MachOWriterExecutable.hpp: set uuid to be md5 hash of entire output file
-       
-
-2007-03-24     Nick Kledzik    <kledzik@apple.com>
-       
-       * src/MachOWriterExecutable.hpp: restructure writeAtoms() to copy all atoms in memory if possible
-
-
-2007-03-24     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5082603> ld -r of stripped .o file can incorrectly merge non-lazy pointers
-       * src/MachOWriterExecutable.hpp: when generating a .o file, non-lazy pointer with target offsets should be
-               encoded as LOCAL in the indirect symbol table
-       * unit-tests/test-cases/stripped-indirect-symbol-table: added test case
-
-
-2007-03-23     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5084564> SWB: ld64-72 errors building with gcc-4.2      
-       * src/MachOReaderDylib.hpp: add curly brackets in switch cases
-       * src/MachOWriterExecutable.hpp: rearrange classes so there are no template specialization forward references
-
-
-2007-03-23     Nick Kledzik    <kledzik@apple.com>
-
-       * src/ld.cpp: fix -print_statistics when using -dead_strip
-
-
-2007-03-23     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: generate better names for non-lazy pointers to the interior of atoms
-
-
-2007-03-16     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOWriterExecutable.hpp: speed up ld -r a little by reversing relocs en mas
-
-
-2007-03-16     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4975277> ld Bus Error on missing command line arguments
-       * src/Options.cpp: check next argv[] is not NULL
-
-
-2007-03-16     Nick Kledzik    <kledzik@apple.com>
-       
-       <rdar://problem/4832049> need to be able to order symbols in anonymous namespaces
-       * src/ld.cpp: add logic to do fuzzy matching of symbols with anonymous namespace usage
-       * unit-tests/test-cases/order_file-ans: added test case
-
-
-2007-03-16     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5042552> headerpad_max_install_names deprecated for 64-bit
-       * src/ld.cpp: make sure dylib load command order matches command line order
-       * src/Options.h: add maxMminimumHeaderPad()
-       * src/Options.cpp: add maxMminimumHeaderPad() set by -headerpad_max_install_names
-       * src/src/MachOWriterExecutable.hpp: check maxMminimumHeaderPad()
-       * doc/man/man1/ld.1: update man page about -headerpad_max_install_names
-
-
-2007-03-16     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4592484> Linker returns success although exported symbols are undefined.
-       * src/ld.cpp: turn missing symbols back into an error
-
-
-2007-03-16     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4019497> ld64 should handle linking against dylibs that have @loader_path based dylib load commands
-       * unit-tests/test-cases/loader_path: added test case
-       
-
-2007-03-16     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/3904828> linker should add implicit load commands for indirectly used public dylibs
-       <rdar://problem/4142277> Indirect libraries should be found using -F and -L options
-       <rdar://problem/4607755> Simplier, generalized way to re-export dylibs: LC_REEXPORT_DYLIB
-       * src/ld.cpp: reworked all dylib processing.  Readers can now add the dylib list.
-       * src/Options.h: add findFileUsingPaths()
-       * src/MachOReaderDylib.hpp: look in re-exported children instead of requring linker to do that
-       * src/ObjectFile.h: add processIndirectLibraries(), remove getDependentLibraryPaths()  
-       * src/machochecker.cpp: support LC_REEXPORT_DYLIB
-    * src/ExecutableFile.h: simplify DyLibUsed
-       * src/Options.cpp: add findFileUsingPaths().  add new re-export options
-       * src/MachOWriterExecutable.hpp: Use LC_REEXPORT_DYLIB when targetting 10.5
-       * doc/man/man1/ld.1: updated with new re-export options
-       * unit-tests/test-cases/indirect-path-search: added tests that -F and -L work with indirect dylibs
-       * unit-tests/test-cases/re-export-cases: added tests for all combinations of re-exporting
-       
-
-2007-03-14     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4982400> sort external relocations to optimize dyld performance 
-       * src/MachOWriterExecutable.hpp: added ExternalRelocSorter
-       * src/machochecker.cpp: verify external relocations are grouped by symbol number
-       * unit-tests/test-cases/external-reloc-sorting: added test case
-       
-       
------ Tagged ld64-72
-
-2007-03-06     Nick Kledzik    <kledzik@apple.com>
-
-       * src/Options.cpp: ignore .objc_category_name_* symbols in .exp files
-       
-
-2007-03-06     Nick Kledzik    <kledzik@apple.com>
-
-       * src/Options.cpp: stop special casing mach_kernel and instead requre kernel to be built with -new_linker 
-       
-
-2007-03-06     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5044253> ld64-72 (experimental) is causing DejaGnu test failures
-       * src/MachOWriterExecutable.hpp: add optimizableGOTReferenceKind() to track GOT uses that cannot be optimized
-
-
-2007-03-06     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5026135> minimum header padding should be 32 to allow code signing
-       * src/Options.cpp: initialize fMinimumHeaderPad to 32
-       * src/MachOWriterExecutable.hpp: better calculation of header padding 
-       
-
-2007-03-06     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5033206> Linker crashes with -flat_namespace against two-level dylibs that might have re-exports
-       * src/ld.cpp: flat namespace should not allow NULL indirect readers
-
-
-2007-03-06     Nick Kledzik    <kledzik@apple.com>
-               
-       * src/MachOReaderRelocatable.hpp: don't error on S_COALESCED sections with anonymous atoms
-       * src/MachOWriterExecutable.hpp: set MH_PIE bit when linking -pie
-       * ld64.xcodeproj/project.pbxproj: don't echo environment when running unit test
-
-
-2007-03-01     Nick Kledzik    <kledzik@apple.com>
-
-       * doc/man/man1/ld.1: Add descriptions to all "rarely used options"
-
-
-2007-03-01     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4971033> Remove support for Essential Symbols: Warn about use of -Sp option; remove man page entry
-       * src/Options.cpp: make -Sp obsolete
-       * doc/man/man1/ld.1: make -Sp obsolete
-       
-
-2007-03-01     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/5040314> Support -pie   
-       * src/Options.h: Add positionIndependentExecutable()
-       * src/Options.cpp: Support -pie option to set positionIndependentExecutable()
-       * src/MachOWriterExecutable: if -pie is used, add extra local relocations and error if any
-               absolute addressing is used
-               
-
-2007-03-01     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4739044> ld64 should link mach_kernel during xnu builds to support dtrace
-       * src/ld.cpp: Ensure segments are laid out in discovery order.  Add support for kAbsoluteSymbol.
-                       Warn when merging symbols of different visiblity.  Warn when a tentative definition 
-                       is replaced by one a real definition with a smaller size.  Lay out __common section
-                       so that ones built with -fno-commons come before regular commons.
-       * src/ObjectFile.h: remove SegmentOffset ivar and getter/setters
-       * src/machochecker.cpp: allow images with no r/w segments
-       * src/MachOReaderRelocatable: Add AbsoluteAtom.  Sort tentative definitions by name instead of by size
-                       Add support for custom commons alignment.  
-       * src/Options.cpp: Fix spurious -sectalign warnings.  Don't use ld_classic when linking mach_kernel
-       * src/MachOWriterExecutable.hpp: Support kAbsoluteSymbol atoms. In -r mode, set custom alignment 
-                       for commons if alignment is not its size.  Support global __dtrace_probe labels.
-       * src/ObjectDump.cpp: add support for kAbsoluteSymbol atoms.
-       * unit-tests/test-cases/commons-alignment: Added test case for custom commons alignment
-       * unit-tests/test-cases/absolute-symbol: Added test case for basic absolute symbols
-       * unit-tests/test-cases/segment-order: Added test case that segments lay out in discovery order
-       * unit-tests/test-cases/commons-order: Added test case that commons lay out correctly
-       * unit-tests/test-cases/end-label: Added test case that a label used to mark the end of a section does not
-                       get associcated with the next section.
-       
-
-2007-02-23     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/3965017> gcc-5005: DejaGnu failures due to -frepo
-       * src/ld.cpp: Add quotes to referenced from name to make collect2 and -frepo happy
-       
-
-2007-02-22     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOWriterExecutable.hpp: rework how padding after load commands is calculated
-
-
-2007-02-21     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOWriterExecutable.hpp: extend special case of __mh_execute_header to static executables too
-
-
-2007-02-21     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/3882294> gcc link map option ( "-M" ) should be redirectable to file
-       * doc/man/man1/ld.1: added -map option description
-       * src/Options.h: added generatedMapPath()
-       * src/Options.cpp: set up generatedMapPath() if -map option is used
-       * src/MachOWriterExecutable.hpp: add writeMap() method to generate map file
-
-
-2007-02-19     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4557734> Implement GOT Load elimination optimization
-       * src/ld.cpp: track size of all atoms and if > 2GB sort large zero-fill atoms to end
-       * src/MachOWriterExecutable.hpp: If image size < 2GB, only generate GOT entries if value must be
-       updatable by dyld.  If > 2GB, only eliminate GOT entries to non-zero-fill atoms.  Any use
-       of an eliminated GOT entry has its code changed from MOVQ _foo@GOT(%rip) to LEAQ _foo(%rip).
-       * unit-tests/test-cases/large-data: added
-       * unit-tests/test-cases/got-elimination: added
-
-
------ Tagged ld64-71.2
-
-2007-02-13     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4995303> new ld ignores -segprot option
-       * src/Options.h: expose customSegmentProtections()
-       * src/Options.cpp: parse -segprot option and populate customSegmentProtections()
-       * src/MachOWriterExecutable.hpp: use customSegmentProtections()
-
-
-2007-02-13     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4988068> i386 -stack_addr doesn't work
-       * src/MachOWriterExecutable.hpp: use correct offset into thread state record
-
-
------ Tagged ld64-71.1
-
-2007-02-07     Nick Kledzik    <kledzik@apple.com>
-
-       * src/ld.cpp: sort __OBJC2 segment to be next to __OBJC segment
-
-
-2007-02-07     Nick Kledzik    <kledzik@apple.com>
-
-       * src/Options.cpp: change missing -seg_addr_table from an error to a warning
-
-
-2007-02-06     Nick Kledzik    <kledzik@apple.com>
-       
-       <rdar://problem/4977311> Leopard 9A357: -dylib_file broken?
-       * src/MachOWriterExecutable.hpp: remove use of fInstallPathOverride
-       * src/Options.cpp: wire up -dylib_file option 
-       * src/Options.h: remove fInstallPathOverride.  add fDylibOverrides
-       * src/ld.cpp: check dylibOverrides() for indirect libraries
-       * unit-tests/test-cases/dylib_file: add test case
-       
-
-2007-02-05     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderDylib.hpp: don't warn about zero size __image_info sections
-
-
-2007-02-04      Rick Balocca    <rbalocca@apple.com>
-       Enable the failing cases for missing command line arguments
-
-2007-02-04      Rick Balocca    <rbalocca@apple.com>
-       Make sure that all .o's are checked by ObjectDump
-       and all macho are checked by machochecker
-
-2007-02-04      Rick Balocca    <rbalocca@apple.com>
-       Fix an endian problem with machochecker
-       Fix blank-stubs Makefile
-
------ Tagged ld64-71
-
-2007-02-02      Rick Balocca    <rbalocca@apple.com>
-       blank-stubs test case: handle the case of a native ppc compile--this
-       sets the subtype, which must be passed to lipo
-
-2007-02-01      Rick Balocca    <rbalocca@apple.com>
-       make cpu-sub-types test more robust
-
-2007-02-01      Rick Balocca    <rbalocca@apple.com>
-       auto-arch tests were resulting in a false FAILs
-
-2007-02-01      Rick Balocca    <rbalocca@apple.com>
-       test cpu-sub-types was resulting in a false FAIL
-
-2007-02-01      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4969335> STD:VSC: c99 -o writes to file that does not have write permission
-       * src/MachOWriterExecutable.hpp: check file is writable before using it
-
-2007-02-01      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4965743> debug map (N_OSO) timestamps for object files in ranlib archive are incorrect
-       * src/MachOReaderArchive.hpp: parse modTime for .o files out of archive header
-
-2007-01-31      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4967535> 9A354: ld -all_load does *NOT* produce the same dSYM as *.o or -u
-       * src/ld.cpp: when using -all_load don't assume that all atoms have same reader
-       * unit-tests/test-cases/dwarf-archive-all_load: added
-
------ Tagged ld64-70.1
-
-2007-01-31      Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOWriterExecutable.hpp: in addObjectRelocs_powerpc() mask scattered r_address to 16-bits
-
------ Tagged ld64-70
-
-
-2007-01-30      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4810668> linker should verify GC consistency of modules being linked into library
-       <rdar://problem/4474195> Support cpu-sub-types for ppc
-       * src/ObjectFile.h: Add getObjCConstraint() and getCpuConstraint()
-       * src/MachOReaderRelocatable.hpp:  don't make atom for __image_info section, instead parse constaints
-       * src/MachOReaderDylib.hpp: look at __image_info content to get constaints
-       * src/ld.cpp: add updateContraints() and checkObjc()
-       * src/MachOWriterExecutable.hpp: add ObjCInfoAtom to sythesize __image_info content
-       
-       
-2007-01-28      Nick Kledzik    <kledzik@apple.com>
-
-       src/*: remove ObjectFile::requiresFollowOnAtom() method
-       
-
-2007-01-28      Nick Kledzik    <kledzik@apple.com>
-
-       src/ld.cpp: enable LLVM_SUPPORT by default
-       src/LLVMReader.hpp: don't use absolute paths for llvm headers and libraries
-       
-
-2007-01-26      Rick Balocca    <rbalocca@apple.com>
-       * src/ObjectDump.cpp: The usage() message was incorrect.
-
-
-2007-01-25      Rick Balocca    <rbalocca@apple.com>
-       * unit-tests/test-cases/zero-fill3:  It was reporting FAIL on ld64 error return.
-               It should have been checking for non-error return.
-
-
-2007-01-24      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4952297> x86 fast stubs should not cross 64-byte boundries
-       * src/MachOWriterExecutable.hpp: for x86, 64-byte align __jump_table section 
-       and make 64-btye crossing stubs be empty entries with indirect symbol table 
-       entry of INDIRECT_SYMBOL_ABS
-
-
-2007-01-19      Nick Kledzik    <kledzik@apple.com>
-
-       * src/Options.h: add readOnlyx86Stubs()
-       * src/Options.cpp: support -read_only_stubs
-       * src/MachOWriterExecutable.hpp: make __IMPORT segment not writable if -read_only_stubs is used
-       
-
-2007-01-16  Eric Christopher  <echristo@apple.com>
-
-       <rdar://problem/4856341> ld64 --help isn't recognized
-       * src/Options.cpp (Options::parse): Support --help and -help.
-
-
-2007-01-15      Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOFileAbstraction.hpp: add range checking on macho_scattered_relocation_info::set_r_address()
-
-
-2007-01-14      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4514409> Support wildcards in contents of -exported_symbols_list
-       * src/Options.h: add SetWithWildcards class
-       * src/Options.cpp: add -exported_symbol and -unexported_symbol and use SetWithWildcards
-       * doc/man/man1/ld.1: add -exported_symbol and wildcard explanation
-       * unit-tests/test-cases/exported-symbols-wildcards: added test case
-
-
-2007-01-10      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4868270> [U]SDT probes should use C calling convention
-       * src/Options.cpp: Add -read_only_dof
-       * src/ld.cpp: create __dof section(s) based on probe and isenabled sites
-       * src/MachOReaderRelocatable.hpp: parse new sdt 2.0 probes encoded in .o files
-       * src/MachOWriterExecutable.hpp: handle regenerating dtrace probes into .o files
-       * unit-tests/test-cases/dtrace-static-probes: added test case
-
-
------ Tagged ld64-69.8
-
-2007-01-30      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4964508> Support LD_FORCE_NO_SEG_ADDR_TABLE
-       * src/Options.cpp: Support LD_FORCE_NO_SEG_ADDR_TABLE
-       
-
------ Tagged ld64-69.7
-
-2007-01-25      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4949507> Leopard9A351: CFM Apps Are Broken because CFM glue is missing
-       * src/MachOReaderRelocatable.hpp: check S_ATTR_NO_DEAD_STRIP in dontDeadStrip()
-
-
------ Tagged ld64-69.6
-
-2007-01-24      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4947347> LD_TRACE_ARCHIVES should only print out when a .o is actually used from an archive
-       * src/ld.cpp: create and use logArchive() 
-
-       
------ Tagged ld64-69.5
-
-2007-01-22      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4946075> 9A350: can't link ppc programs with ld_classic
-       * src/Options.cpp: Remove support for LD_NO_CLASSIC_LINKER. Add support for -classic_linker
-
-       
------ Tagged ld64-69.4
-       
-2007-01-17      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4925645> QTComponents does not link with ld64
-       * src/MachOReaderRelocatable.hpp: handle N_RSYM and N_PSYM stabs
-
-       
------ Tagged ld64-69.3
-
-2007-01-03      Nick Kledzik    <kledzik@apple.com>
-
-       * src/Options.cpp: If the same dylib is specified twice and the second is specified weak, make it weak
-
-
------ Tagged ld64-69.2
-
-2006-12-18      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4889729> -dead_strip without -exported_symbols_list should not strip global functions from archives
-       * src/ld.cpp: when adding a .o file from an archive, add all its global symbols to live roots
-       * unit-tests/test-cases/dead_strip-archive: added
-
-
-2006-12-18      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4889409> flat_namespace main executables do not need to indirect interior references
-       * src/MachOWriterExecutable.hpp: don't indirect references to global symbols in main executables
-       * unit-tests/test-cases/flat-main: updated to test for indirection
-       * unit-tests/test-cases/flat-dylib: added
-
-
------ Tagged ld64-69.1
-
-2006-12-15      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4886721> -flat_namespace does not work with -mdynamic-no-pic
-       * src/MachOWriterExecutable.hpp: rework checking for use of ppc absolute addressing to allow them as long as
-         the target is within the same linkage unit.
-
-
-2006-12-15      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4886652> -ObjC should only load .o with .objc_ symbols
-       * src/Options.cpp: remove warning from -ObjC and have it instead set fLoadAllObjcObjectsFromArchives
-       * src/MachOReaderArchive.hpp: when -ObjC is used, preload all .o files from archives that contain .objc_ symbols
-
-
------ Tagged ld64-69
-
-2006-12-13      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4879913> prebound interior pointers must be non-zero
-       * src/MachOWriterExecutable.hpp: in fixUpReference_powerpc() set lazy pointers bound to with the dylib to
-        their target value. Properly set REFERENCE_FLAG_UNDEFINED_* flags in reference table and n_desc
-
-
-2006-12-09      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4868738> ld64 fails to detect error that ld_classic does
-       * src/MachOWriterExecutable.hpp: check for absolute reloc to an external symbol
-       * src/MachOReaderRelocatable.hpp: ignore -mlong-branch stubs in .o files
-
-
-2006-12-09      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4874209> symbols with REFERENCED_DYNAMICALLY should never be stripped
-       * src/MachOWriterExecutable.hpp: update Writer<A>::shouldExport() to check for kSymbolTableInAndNeverStrip
-       * unit-tests/test-cases/main-stripped: add test that dynamically referenced symbol cannot be stripped
-
-
-2006-12-08      Nick Kledzik    <kledzik@apple.com>
-
-       * unit-tests/test-cases/allowable-client: add variant test cases (e.g. CoreServices_profile)
-       * src/ld.cpp: allow frameworks with variant install names (e.g. CoreServices_profile) to be private clients
-
-
-2006-12-08      Nick Kledzik    <kledzik@apple.com>
-
-       * doc/man/man1/ld.1: rewrite man page
-       * src/Options.h: add warnObsolete()
-       * src/Options.cpp: use warnObsolete() on many options.  Make nonWeak the weak-mis-match default.
-               Make -ObjC mean -all_load.
-
------ Tagged ld64-68.3
-
-2006-12-05      Nick Kledzik    <kledzik@apple.com>
-
-       * src/ld.cpp: allow umbrella frameworks to have variant install names (e.g. CoreServices_profile) and still link
-
-
------ Tagged ld64-68.2
-
-2006-12-05      Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOWriterExecutable.cpp: Use N_PBUD in the symbol table for undefined symbols in prebound dylibs
-
-
------ Tagged ld64-68.1
-
-2006-12-01      Nick Kledzik    <kledzik@apple.com>
-
-       * src/Options.cpp: always generate module tables for 32-bit architectures so that ld_classic
-               can link against them
-
-
------ Tagged ld64-68
-
-2006-12-01      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4858299> seg_addr_table needs matching fuzziness
-       * src/Options.cpp: special case a how a dozen dylib are looked up in the seg_addr_table
-
-
-2006-12-01      Nick Kledzik    <kledzik@apple.com>
-
-       * src/Options.cpp: have all -static links for 32-bit archs roll over to ld_classic unless
-               LD_NO_CLASSIC_LINKER_STATIC is set.
-       * unit-tests/bin/make-recursive.pl: set LD_NO_CLASSIC_LINKER_STATIC for unit tests
-
-
-2006-11-29      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4855542> ld64-67: QTComponents fails to build
-       * src/MachOReaderRelocatable.hpp: don't error out when a local non-lazy pointer does not point to a symbol
-       * unit-tests/test-cases/strip_local: added test case
-
-
-2006-11-28      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4433496> Need a way to mark libraries usable by dynamic linker but unusable by static linker
-       * src/Options.cpp: allow -client_name to be used with main executables
-       * src/ld.cpp: generalize -allowable_client.  Any dylib can now restrict who can link against it.  As a convention
-               linking with -allowable_client '!' will mean no one can statically link with the dylib.  It can still be loaded
-               dynamically, or by any existing clients, but no new clients can link with it.
-       * unit-tests/test-cases/allowable-client/Makefile: enable previously commented out test cases.  Add test cases
-               of a dylib that allows no clients and just one client
-
-2006-11-27      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4795615> -final_output should be used if -install_name not used
-       * src/Options.cpp: fall back to using -final_output for install name
-
-
------ Tagged ld64-67
-
-2006-11-17      Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOWriterExecutable.hpp: support __IMPORT segment being slide independently of __DATA segment in shared cache
-
-
-2006-11-16      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4838262> 9a303: ld -filelist Bus Error
-       * src/Options.cpp: add check that -filelist is followed by an argument
-
-
-2006-11-16      Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOWriterExecutable.hpp: when building split-seg dylibs, LINKEDIT goes in read-only side
-
-
-2006-11-15      Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOWriterExecutable.hpp: set proper attributes for __eh_frame in ld -r mode
-       * unit-tests/test-cases/eh_frame: added test case
-
-
-2006-11-10      Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: redirect references to static weak stubs to the real target
-
-
-2006-11-09      Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOWriterExecutable.hpp: r_address is offset from first LC_SEGMENT vmaddr - not from segment with lowest address
-
-
------ Tagged ld64-66.1
-
-2006-11-09      Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOWriterExecutable.hpp: initialize fModuleInfoAtom to zero
-
-
-2006-11-08      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4821985> FSF GCC's libjava doesn't link with Ochre ld64
-       * src/MachOReaderRelocatable.hpp: ignore debug_line section if debug_info section is missing or empty
-
------ Tagged ld64-66
-
-2006-11-07      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4824368> SWB: d64-65 does not built usage split-seg dylibs
-       * src/MachOWriterExecutable.hpp: when prebinding split-seg correctly set r_address fields and on
-       disk values for external relocations
-       * unit-tests/test-cases/prebound-split-seg: added test case
-
-
-2006-11-03      Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderDylib.hpp: don't report dependent libraries if MH_NO_REEXPORTED_DYLIBS bit is set
-       * src/MachOWriterExecutable.hpp: set MH_NO_REEXPORTED_DYLIBS bit if dylib does not logically re-export any other dylibs
-       * unit-tests/test-cases/re-export-flag: added test case
-       * src/machochecker.cpp: validate use of MH_NO_REEXPORTED_DYLIBS
-
-
-2006-11-02      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4814565> Mysterious messages from ld64 with MACOSX_DEPLOYMENT_TARGET = 10.5
-       * src/MachOWriterExecutable.hpp: kPointerWeakImport is a valid reference type to cross segments
-
-
-2006-11-02      Nick Kledzik    <kledzik@apple.com>
-
-       * src/Options.cpp,h: Add support for -rpath
-       * src/MachOFileAbstraction.hpp: add macho_rpath_command
-       * src/MachOWriterExecutable.hpp: add RPathLoadCommandsAtom to create LC_RPATH for each -rpath
-
-
------ Tagged ld64-65
-
-2006-10-30      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4729162> x86_64 default stack_addr is wrong
-       * src/Options.cpp: change default 64-bit stack location when using -stack_size
-
-
-2006-10-30      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4474316> dylibs need modules for 10.3 and for ld_classic in Salt
-       * src/MachOWriterExecutable.hpp: add ModuleInfoLinkEditAtom to create module table stuff
-       * src/Options.cpp,h: Add needsModuleTable()
-       * src/MachOFileAbstraction.hpp: Add macho_dylib_module, macho_dylib_reference, and macho_dylib_table_of_contents
-
-
-2006-10-27      Nick Kledzik    <kledzik@apple.com>
-
-       * unit-tests/test-cases/no-uuid/Makefile: add -gstabs+ to be compatible with latest compiler
-       * unit-tests/test-cases/stabs-coalesce/Makefile: add -gstabs+ to be compatible with latest compiler
-
-
-2006-10-26      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4585230> i386 -mdynamic-no-pic switch statement jump table is out of line
-       * src/MachOWriterExecutable.hpp: for i386 don't check for direct references to weak symbols
-
-
-2006-10-26  Devang Patel  <dpatel@apple.com>
-
-       * src/LLVMReader.hpp: Supply final output file path to optimizer.
-
-2006-10-26  Devang Patel  <dpatel@apple.com>
-
-       * src/ObjectFile.h: Make setSection* methods virtual.
-       * src/LLVMReader.hpp: Override setSection* methods.
-
-2006-10-26  Devang Patel  <dpatel@apple.com>
-
-       * unit-tests/test-case/llvm-integration/a13.h: New.
-       * unit-tests/test-case/llvm-integration/a13.cc: New.
-       * unit-tests/test-case/llvm-integration/main13.cc: New.
-
-2006-10-26  Devang Patel  <dpatel@apple.com>
-
-       * src/options.h, src/options.cpp: Add -save-temps command line option.
-       * src/LLVMReader.hpp: Use saveTemps option.
-
-
-2006-10-26  Devang Patel  <dpatel@apple.com>
-
-       * src/LLVMReader.hpp: Remove invalid module from memory.
-
-2006-10-26  Devang Patel  <dpatel@apple.com>
-
-       * src/LLVMReader.hpp: Collect symbol alignment info from LLVM optimizer.
-
-2006-10-21  Eric Christopher  <echristo@apple.com>
-
-       * src/ld.cpp (Linker::Linker): Check for LD_NO_CLASSIC_LINKER before
-       invoking ld_classic.
-       * unit-tests/test-cases/relocs-literals/Makefile: Run for -mdynamic-no-pic
-       and pic.
-       * unit-tests/test-cases/static-executable/Makefile: Skip for 64-bit. Add
-       -dead_strip to command line.
-
------ Tagged ld64-64.2
-
-2006-10-19      Nick Kledzik    <kledzik@apple.com>
-
-       * ld64.xcodeproj/project.pbxproj: stop copying LLVMReader.hpp into man1 directory
-
------ Tagged ld64-64.1
-
-2006-10-19      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4791643> ld64-63.1 erroneously coalesces an empty string with a non-empty string
-       * src/MachOReaderRelocatable.hpp: rework cstring parsing to not assume all strings are start
-         at section alignment boundaries, and when coalescing empty strings always use one with greatest
-         alignment requirement
-       * src/MachOWriterExecutable.hpp: in -r mode, don't pad end of cstring section
-       * src/ObjectFile.h: correctly name leadingZeros() as trailingZeros()
-       * src/ld.cpp: leadingZeros() --> trailingZeros()
-
-
-2006-10-18  Eric Christopher  <echristo@apple.com>
-
-       * unit-tests/test-cases/read-only-relocs/Makefile: Skip for x86_64.
-       * unit-tests/test-cases/llvm-integration/Makefile: Skip if llvm isn't
-       present.
-
-2006-10-18      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4783853> ld64 change required to go with assembler cstring change
-       <rdar://problem/4732996> ld64 should error when a local relocation references an address outside its section
-       * src/MachOReaderRelocatable.hpp: for x86_64  in order to work with local or external relocations to cstrings
-       change parser to allow atoms with a pending name that is resolved after references are instantiated.
-       Make direct references to kRegularDefinition atoms.
-       * src/MachOWriterExecutable.hpp: in -r mode for x86_64 generate L* labels for cstrings and use external relocations
-       * unit-tests/test-cases/relocs-literals/test.c: add two cases of cstring literal plus addend
-
-
-2006-10-06      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4786250> check MACOSX_DEPLOYMENT_TARGET if -macosx_version_min is not used
-       * src/Options.cpp: if -macosx_version_min is not used, check MACOSX_DEPLOYMENT_TARGET, if
-       that is unused, default to 10.5
-
------ Tagged ld64-64
-
-2006-10-06      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4756806> crash in ppc64 program - bl to saveFP, but saveFP is too far away?
-       * src/MachOWriterExecutable.hpp: in addPPCBranchIslands(), properly account for growth of __text
-
-
-2006-10-06      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4769120> Linker-defined alias converts reference into definition and generates error.
-       * src/MachOReaderRelocatable.hpp: only alias symbols actually in the symbol table
-
-
-2006-10-06      Nick Kledzik    <kledzik@apple.com>
-
-       * unit-tests/test-cases/dwarf-debug-notes/Makefile: crt1.o no longer has stabs, so don't need to strip it
-       * unit-tests/test-cases/dwarf-debug-notes-r/Makefile: crt1.o no longer has stabs, so don't need to strip it
-
-
-2006-10-06      Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: rework dwarf line parsing to fix warnings that starting
-       showing up with gcc-5421
-
-
-2006-10-05  Eric Christopher  <echristo@apple.com>
-
-       <rdar://problem/4760935> ld64 needs to support libtool options
-       * src/Options.cpp (Options::parse): Add -noall_load, -install_name,
-       -current_version and -compatibility_version.
-
-2006-10-03  Eric Christopher  <echristo@apple.com>
-
-       * src/Options.cpp (Options::gotoClassicLinker): Use execvp
-       to call ld_classic.
-
-2006-10-03  Eric Christopher  <echristo@apple.com>
-
-       * unit-tests/test-cases/tentative-to-real/Makefile: Clean up after tests.
-
-2006-10-03  Eric Christopher  <echristo@apple.com>
-
-       * unit-tests/include/common.makefile (VALID_ARCHS): Add x86_64.
-       (OTOOL): Remove munging based on ARCH.
-
-2006-09-29      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4743925> problem merging .o files built with and without -fno-common
-       src/Options.*: make MakeTentativeDefinitionsReal a reader option
-       src/ObjectFile.h: make MakeTentativeDefinitionsReal a reader option
-       src/MachOWriterExecutable.hpp: make MakeTentativeDefinitionsReal a reader option
-       src/MachOReaderRelocatable.hpp: only assign a section name of __common to
-               tentative defintions when making a final linked image
-
-
-2006-09-28      Nick Kledzik    <kledzik@apple.com>
-
-       src/Options.h/.cpp: add support for -segaddr option
-       src/MachOWriterExecutable.hpp: In Writer::assignFileOffsets(), use -segaddr info
-
-
-2006-09-28      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4587349> Emit new CPU subtypes for ppc64 and x86-64 when targeting 10.5 or later
-       src/MachOWriterExecutable.hpp: set high bit of cpusubtype of 64-bit main executables when targeting 10.5 or later
-
-
-2006-09-28     Devang Patel    <dpatel@apple.com>
-
-       Add LLVM LTO support
-       src/LLVMReader.hpp: New file.
-       src/ld.cpp: Add optimization phase. Use LLVM LTO.
-       unit-tests/test-cases/llvm-integration: New tests.
-
-2006-09-27      Nick Kledzik    <kledzik@apple.com>
-
-       ld64.xcodeproj/project.pbxproj: remove accidental install of source file into man1
-
-
-2006-09-25      Nick Kledzik    <kledzik@apple.com>
-
-       src/Architectures.hpp: add kPointerDiff16 for ppc and ppc64
-       src/MachOReaderRelocatable.hpp: support kPointerDiff16
-       src/MachOWriterExecutable.hpp: support kPointerDiff16
-
------ Tagged ld64-63.1
-
-2006-09-22      Nick Kledzik    <kledzik@apple.com>
-
-       src/MachOWriterExecutable.hpp: include stubs in LC_SEGMENT_SPLIT_INFO
-
-
-2006-09-21      Nick Kledzik    <kledzik@apple.com>
-
-       src/Options.cpp: disable split-seg dylibs for 64-bit architectures
-
-
-2006-09-19      Nick Kledzik    <kledzik@apple.com>
-
-       src/MachOReaderRelocatable.hpp: rework __cstring parsing to better handle mixed alignment cstrings
-       src/MachOWriterExecutable.hpp: in -r mode, make all __cstrings aligned to section alignment
-
-
-2006-09-19      Nick Kledzik    <kledzik@apple.com>
-
-       src/MachOWriterExecutable.hpp: rework encoding of LC_SEGMENT_SPLIT_INFO
-
-
-2006-09-19      Nick Kledzik    <kledzik@apple.com>
-
-       src/Options.cpp: check for -search_paths_first in first pass
-
-
------ Tagged ld64-63
-
-2006-09-15      Nick Kledzik    <kledzik@apple.com>
-
-       src/Options.cpp: since the ld64 will repeatedly search an archive, and some project list archives
-               multiple times on command line to work with traditional linkers, automatically ignore duplicate libraries
-       unit-tests/test-cases/archive-duplicate: added test case
-
-
-2006-09-15      Nick Kledzik    <kledzik@apple.com>
-
-       src/Options.cpp: support -r -static
-       src/MachOWriterExecutable.hpp: support -r -static an don't generate LC_DYSYMTAB
-
-
-2006-09-14      Nick Kledzik    <kledzik@apple.com>
-
-       src/MachOWriterExecutable.hpp: in -r mode references to weak symbols should not create external relocations
-               as that can cause nmedit to errror later.
-
-
-2006-09-13      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4718189> ld64: Handle .objc_class_name exports specially
-       src/Options.cpp: add hack so that .objc_class_name_XXX in -exported_symbols_list imples _OBJC_CLASS_$_XXX
-       src/ld.cpp: add hack to supporess errors about .objc_class_name_XXX or _OBJC_CLASS_$_XXX being undefined
-
-
-2006-09-12      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4474172> Support -prebind when targeting ppc and OS < 10.4
-       src/Options.h: add splitSeg() and baseWritableAddress()
-       src/Options.cpp: Add support for -seg_addr_table and LD_SEG_ADDR_TABLE, and -prebind and LD_PREBIND.
-       src/src/MachOWriterExecutable.hpp: support split-seg and canonical prebound files to be generated
-
-
-2006-09-11      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4464904> Linking a dylib or binary from identical binaries should produce the same output
-       src/MachOWriterExecutable.hpp: set the timestamps to be constant
-
-
-2006-09-11      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4070025> Linker support for ordering all sections and symbols
-       src/Options.cpp: Add -order_file_statistics.  Allow architecture prefixes in order files
-       src/ld.cpp: Use fOptions.printOrderFileStatistics()
-
-
-2006-09-11      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/3894079> Support -sectorder
-       unit-tests/test-cases/order_file: added test case
-       src/ld.cpp: Implement order file support in Linker::sortAtoms()
-       src/Options.h: add Options.orderedSymbols()
-       src/Options.cpp: add parseOrderFile(), implement -order_file
-
-
-2006-09-07      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4637023> need -i for 64-bit (or equivalent)
-       <rdar://problem/4014529> Support -i for aliasing exported symbols
-       unit-tests/test-cases/alias-objects: added
-       unit-tests/test-cases/alias-command-line: added
-       src/ObjectFile.h: Added Atom::getOrdinal() as new way to sort atoms. Added ReaderOptions.fAliases
-       src/MachOReaderRelocatable.hpp: Added SymbolAliasAtom to handle multiple symbols to same address
-       src/MachOReaderArchive.hpp: implement Atom::getOrdinal() to space out atom ordinals across member objects
-       src/Options.cpp: support -i, -alias, -alias_list.  Move search of /Network/Library/Frameworks to after /System/Library/Frameworks
-       src/MachOWriterExecutable.hpp: pad out seg_info data.  Implement getOrdinal().
-       src/ObjectDump.cpp: call constructors directly instead of using make() wrapper
-
-
-2006-09-01      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4458878> Need the ability to tag libraries/plug-ins with security attributes
-       src/MachOReaderDylib.hpp: add warning if using -root_safe or -setuid_safe and link against dylib that is not
-       src/ObjectFile.h: add ReaderOption fRootSafe and fSetuidSafe
-       src/Options.cpp: handle -root_safe or -setuid_safe command line options
-       src/MachOWriterExecutable.hpp: set MH_ROOT_SAFE and MH_SETUID_SAFE flags
-
-
-2006-08-31      Nick Kledzik    <kledzik@apple.com>
-
-       src/ld.cpp: Add Linker::processDTrace() for processing dtrace static probes
-       src/OpaqueSection.hpp: renamed, add symbol name, add ability to add references
-       ld64.xcodeproj/project.pbxproj: remove SectCreate.cpp, add OpaqueSection.hpp
-
-
-2006-08-28      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4571042> Add convention for removing symbols at link time
-       <rdar://problem/3962731> Assembler -L option causes ld64 to split stubs
-       unit-tests/test-cases/special-labels: added test case
-       src/MachOReaderRelocatable.hpp: ignore L* labels, make l* labels as kSymbolTableNotIn
-
-
-2006-08-28      Nick Kledzik    <kledzik@apple.com>
-
-       src/lObjectFile.h: refactor isTargetUnbound() into getTargetBinding()
-       src/ld.cpp: create __dof section in final linked images from dtrace static probes
-       src/Architectures.hpp: add kDtraceProbe
-       src/Options.h/cpp: Add support for -dtrace
-       src/machochecker.cpp: support LC_SEGMENT_SPLIT_INFO
-       src/MachOWriterExecutable.hpp: support kDtraceProbe
-       src/MachOReaderRelocatable.hpp: suppport kDtraceProbe
-
-
-2006-08-25      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4701529> generate LC_SEGMENT_SPLIT_INFO for 10.5 or later dylibs
-       src/Options.h&.cpp: implement sharedRegionEligible() to control when LC_SEGMENT_SPLIT_INFO is added
-       src/MachOFileAbstraction.hpp: add macho_linkedit_data_command
-       src/MachOWriterExecutable.hpp: generate LC_SEGMENT_SPLIT_INFO load command and linkedit content
-
------ Tagged ld64-62
-
-2006-08-15      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4681062> wrong error message when symbol is found in unused indirect library
-       src/ld.cpp: remove indirect libraries if they are not re-exported
-       unit-tests/test-cases/indirect-dylib: added test case
-
-
-2006-08-15      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/3930461> alignment needs to be richer
-       src/ObjectFile.h: define ObjectFile::Alignment class for tracking rich alignment info
-       src/ld.cpp: modify SymbolTable::add() to work with new Alignment type
-       src/MachOReaderRelocatable.hpp: use new Alignment type. Remove alignAtLeast() and handleAnonymousNonLazyPointers()
-       src/MachOWriterExecutable.hpp: update for new Alignment type, use modulus when calculating layout address
-       src/ObjectDump.cpp: print richer Alignment info
-       unit-tests/test-cases/align-modulus: added test case
-
-
-2006-08-11      Nick Kledzik    <kledzik@apple.com>
-
-       remove OPEN_SOURCE conditionals around x86_64 support
-
-
-2006-07-31      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4654131> ld64 while linking cc1 [ when dead_strip is ON]
-       src/ld.cpp: Add ivar fAtomsWithUnresolvedReferences to track atoms not initially resolvable
-       unit-tests/test-cases/dead_strip-archive: added test case
-
-
-2006-07-31      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4656617> x86_64: instructions with immediate and rip-relative operands need to use new relocation types
-       src/MachOWriterExecutable.hpp: generate new reloc types in -r mode
-       src/MachOReaderRelocatable.hpp: parse new reloc types
-       unit-tests/test-cases/relocs-asm/relocs-asm.s: add test cases for new reloc type
-
-
-2006-07-18      Nick Kledzik    <kledzik@apple.com>
-
-       src/MachOReaderRelocatable.hpp: suppress warning about dwarf info parsing for one benign no-op case
-       the compiler emits when there are not functions in the __text section
-
-
-2006-07-17      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4634840> faster debug note generation
-       src/ld.cpp: rework collectDebugInfo() to produce all debug notes in one pass, intead of a
-       pass per .o file. Added timing info for collectDebugInfo() to -print_statistics
-       unit-tests/test-cases/dwarf-debug-notes-r/Makefile: add expliced -arch to ld -r
-       unit-tests/test-cases/dwarf-debug-notes-r/expected-stabs: alter for new debug notes order
-
-
-2006-07-17      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4623994> ld64 VSIZE is 1.18GB when building Finder ppc64
-       src/ld.cpp: fixed typo in createReader() that prevented dylibs from being unmapped
-
------ Tagged ld64-61.1
-
-2006-07-11      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4622049> ld64-61: gcc DejaGnu tests failing due to -arch followed by unknown architecture name
-       src/Options.cpp: map ppc750, ppc7400, ppc7450, and ppc970 to ppc. Improve error message
-
-2006-07-11      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4622769> If -arch is missing, rollover to ld_classic does not happen
-       src/Options.h: make gotoClassicLinker() public
-       src/ld.cpp: call gotoClassicLinker() if the inferred architecture is ppc or i386
-
------ Tagged ld64-61
-
-2006-06-29      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4606628> ld64 should be renamed to ld
-       src/Options.cpp: exec() ld_classic if -arch ppc or -arch i386 is seen
-       src/ld.cpp: alter version string
-       ld64.xcodeproj/project.pbxproj: change install location to /usr/bin/ld, add symlink from /usr/bin/ld64
-       doc/man/man1/ld.1: added
-
------ Tagged ld64-60
-
-2006-06-28      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4604539> Can't link large ppc64 program: ld64 says "bl out of range"
-       MachOWriterExecutable.hpp: fix branch island generation to work for weak_import functions
-       and properly chain together branch islands
-       MachOReaderRelocatable.hpp: improve performance of huge .o file reading by sorted references
-       only when done
-
-2006-06-28      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4603454> MySQL-36 fails to build with ld64-59
-       src/MachOReaderRelocatable.hpp: back out fix for 4585335
-       src/MachOWriterExecutable.hpp: back out fix for 4585335
-
-2006-06-27      Nick Kledzik    <kledzik@apple.com>
-
-       src/MachOReaderRelocatable.hpp: handle N_GSYM without ending :G() since that is how
-       dwarf debug notes are formed.
-
-2006-06-23      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4599239 objc class with no superclass causes bad undefined symbol
-       src/MachOReaderRelocatable.hpp: handle NULL superclass in objc_class
-       unit-tests/test-cases/relocs-objc/test.m: add case with no super class
-
-
-2006-06-23      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4313369> ld64 doesn't support variant linking -framework fw,_debug
-       src/Options.cpp: enhance findFramework() to support suffixes
-
------ Tagged ld64-59
-
-2006-06-22      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4596726> ld64 lost DWARF debug notes
-       src/MachOReaderRelocatable.hpp: add fHasUUID so kDebugInfoStabsUUID can be set later
-       unit-tests/test-cases/dwarf-debug-notes-r: added test case
-
-2006-06-21      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4567995> python 64-bit address miscalculation
-       src/MachOReaderRelocatable.hpp: change getTargetOffset() to sign extend the 32-bit value to 64-bits
-
-2006-06-21      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4535036> ld64 seems to offset things incorrectly when using -r
-       src/MachOWriterExecutable.hpp: in -r mode, virtual sections should not increment address
-
-
------ Tagged ld64-58
-
-2006-06-16      Nick Kledzik    <kledzik@apple.com>
-
-       src/rebase.cpp: fix page alignment problem
-       src/rebase.cpp: fix endianess problem with local non-lazy pointers
-
-2006-06-15      Nick Kledzik    <kledzik@apple.com>
-
-       src/rebase.cpp: fix to build in CurryWeed
-       ld64.xcodeproj/project.pbxproj: fix to build properly in CurryWeed
-
-2006-06-15      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4495309> Support .objc_class_name_* symbols
-       src/ObjectFile.h: Add kSymbolTableInAsAbsolute
-       src/MachOReaderRelocatable.hpp: synthesize references to required objc classes
-       src/MachOWriterExecutable.hpp: write objc_class_name as absolute symbol
-       unit-tests/test-cases/objc-references: added
-
-2006-06-15      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4484369> SECTION_ATTRIBUTES unset in ppc64 mach-o header
-       src/MachOWriterExecutable.hpp: add section attribute for sections with code
-
-2006-06-15      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4569407> ld64 bogus duplicate symbol name linking GNU libobjc
-       src/MachOReaderRelocatable.hpp: only special case Apple objc runtime objc classes
-
-2006-06-15      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4582999> x86_64: ".align" directive not honored
-       src/MachOReaderRelocatable.hpp: change code alignment to not depend on atom size
-
-2006-06-14      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4585335> jump table into middle of weak symbol causes error
-       src/MachOReaderRelocatable.hpp: create direct references to the interior of weak symbols
-       src/MachOWriterExecutable.hpp: do not error on absolute references to interior of weak symbols
-
-2006-06-13      Nick Kledzik    <kledzik@apple.com>
-
-       src/Options.cpp: allow -image_base as an alias for -seg1addr
-
-2006-06-13      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4585115> implement -d
-       src/Options.h: add fMakeTentativeDefinitionsReal
-       src/Options.cpp: set fMakeTentativeDefinitionsReal if -d option is found
-       src/MachOWriterExecutable.hpp: turn tentative into real definition if makeTentativeDefinitionsReal
-       unit-tests/test-cases/btentative-to-real: added test case
-
-2006-06-13      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4584355> implement -bundle_loader
-       src/Options.h: add fBundleLoader bit to DynamicLibraryOptions
-       src/Options.cpp: handle -bundle_loader
-       src/ld.cpp: pass fBundleLoader bit to MachOReaderDylib
-       src/MachOReaderDylib.hpp: support reading MH_EXECUTE files if fBundleLoader is set
-       src/MachOWriterExecutable.hpp: set bundle loader ordinal as EXECUTABLE_ORDINAL
-       unit-tests/test-cases/bundle_loader: added test case
-
-2006-06-12      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4583347> -syslibroot can cause "can't find ordinal for imported" error
-       src/MachOReaderDylib.hpp: in  Reader::reExports() compare install path in addition to load path
-
-
-2006-06-10      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4548935> Need rebasing tool
-       src/rebase.cpp: added
-       unit-tests/test-cases/rebase-basic: added
-       doc/man/man1/rebase.1: added
-       ld64.xcodeproj/project.pbxproj:  added rebase target.  changed all targets to build with dwarf
-
-
-2006-06-10      Nick Kledzik    <kledzik@apple.com>
-
-       src/machochecker.cpp: add some ppc reloc sanity checking
-
------ Tagged ld64-57
-
-2006-06-06      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4565088> ld64 is not adding a final '/' char on the initial directory-name SO stab debug map entry
-       ld.cpp: Change Linker::synthesizeStabs() to assure directory SO always has a trailing slash
-       unit-tests/test-cases/dwarf-debug-notes/expected-stabs: update with trailing /
-
-2006-06-06      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4572702> -sectcreate of a 0-byte section fails
-       MachOWriterExecutable.cpp: Don't error out on zero length segments
-       MachOWriterExecutable.cpp: For ppc64 reloc base address is the first writable segment iff
-        there is a writable segment >4GB from base address
-
-2006-06-04  Eric Christopher  <echristo@apple.com>
-
-       Radar 4560240
-       Radar 3964999
-       * src/ld.cpp (createReader): Fixed error message.
-       (resolve): Ditto.
-       (resolveFrom): Ditto.
-       (checkUndefines): Ditto.
-
------ Tagged ld64-56
-
-2006-05-23      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4558079> No debug notes for ObjC methods when linking with ld64
-       ld.cpp: don't limit debug notes to functions starting with underscore
-
-2006-05-22      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4556982> ld64 spends much time in mach_o::relocatable::Reader<x86_64>::findAtomByName
-       * src/MachOReaderRelocatable.hpp: add makeReferenceToSymbol() so that x86_64 does not need to do by-name lookups
-
-2006-05-22      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4535044> remove inferring warning
-       * ld.cpp: Remove "inferring" warning.  If a link failed and now arch was specifed add which arch was
-       inferred to error message
-
-2006-05-19      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4544001> ld64 does not honor -arch_multiple
-       * ld.cpp: If fOptions.printArchPrefix(), add architecture name to error message
-
-2006-05-19      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4555973> Support S_16BYTE_LITERALS section types
-       * src/MachOReaderRelocatable.hpp: support S_16BYTE_LITERALS
-       * src/MachOWriterExecutable.hpp: support S_16BYTE_LITERALS
-
-2006-05-19      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4548803> "warning can't parse dwarf compilation unit info" warnings building debug
-       * src/MachOReaderRelocatable.hpp: fix bugs in dwarf line table parsing
-
------ Tagged ld64-55
-
-2006-05-18      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4534339> Default the pagezero size to 4GB for x86-64
-       * src/Options.cpp: Chnage default the pagezero size to 4GB for x86-64
-
-2006-05-18      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4552825> x86_64 CarbonCore fails to link with "atom not found in symbolIndex"
-       * src/MachOWriterExecutable.hpp: in buildObjectFileFixups() don't call addObjectRelocs() on kNoFixUp references
-
-2006-05-18      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4553555> ld64: .section defaults to read-only
-       * src/MachOReaderRelocatable.hpp: default unknown segments to r/w
-
-2006-05-18      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4551990> -fvisibility=hidden causes crashes for x86_64
-       * src/MachOWriterExecutable.hpp: properly handle RIP relative tentative definitions
-
-2006-05-12      Nick Kledzik    <kledzik@apple.com>
-
-       * src/Architectures.hpp: add x86::kAbsolute32
-       * src/MachOReaderRelocatable.hpp: generate x86::kAbsolute32 for mdynamic-no-pic instructions
-       * src/MachOWriterExecutable.hpp: process x86::kAbsolute32 reference kind
-
------ Tagged ld64-54
-
-2006-05-11      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4545108> CF-393 failes to link for x86_64
-       * src/MachOWriterExecutable.cpp: fix sign extension for Rel32 relocs in Writer<x86_64>::fixUpReferenceRelocatable
-
-2006-05-11      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4501434> warning arch x86_64 not found using i386
-       * src/ld.cpp: remove hack to allow x86_64 to link against i386 dylibs
-
-
-2006-05-10      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4543754> x86_64: .objc_class_name symbol names scrambled
-       * src/MachOReaderRelocatable.hpp: properly compute alignment of __OBJC __class sections
-
-
-2006-05-08      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/3894083> Support -dead_strip
-       * src/Options.h/cpp: implement -why_load and -why_live.  Enable -dead_strip.
-       * src/MachOReaderArchive.hpp: implement -why_load
-       * src/MachOReaderRelocatable.hpp: suppress GCC_except_table* symbols in final output
-       * src/ld.cpp: implement dead code stripping
-       * unit-tests/test-cases/dead_strip: added
-
------ Tagged ld64-53
-
-2006-05-05      Nick Kledzik    <kledzik@apple.com>
-
-       * src/Options.cpp: make 10.4 be minimum OS version for newer architectures
-
-2006-05-05      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4147604> N_SO symbols in 64-bit builds have a zero address for n.n_value
-       * src/ld.cpp: for SO stabs, associate first and last atom in the SO range
-       * src/MachOWriterExecutable.hpp: use atom associated with SO stab to set ins n_value
-
-2006-05-05      Nick Kledzik    <kledzik@apple.com>
-
-       * MachOWriterExecutable.hpp: fix end FUN stab to have length of function
-
-
-2006-05-02      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4496250> 64-bit main executables should have 4GB zero page by default
-       * src/Opptions.cpp: change default pagezero_size to 4GB for ppc64
-       <rdar://problem/4492850> 64 bit: apps with -mdynamic-no-pic seg fault when page zero > 4GB
-       * src/MachOWriterExecutable.cpp: rework pagezero for ppc64 so that if any mdynamic-no-pic code
-       is found, the code is kept in the low 2GB, and a new segment is create to map away up to 4GB.
-
-2006-05-02      Nick Kledzik    <kledzik@apple.com>
-
-       * src/Opptions.cpp: remove warning about -stack_addr not specified.  Add warning if 32-bit stack
-       overlaps shared region
-
------ Tagged ld64-52.1
-
-2006-05-01      Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.cpp: rework handleAnonymousNonLazyPointers() to handle anl's in the middle
-       the __data section too.
-
------ Tagged ld64-52
-
-2006-04-28      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4513304> 64-bit: 9A152 TextEdit crashes in dlopen on bring-up
-       * src/MachOReaderRelocatable.cpp: rework anonymous non-lazy-pointer detection
-
-2006-04-28      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4528054> 64 Bit: Development build of ppc64 TextEdit gets confused about static variables
-       * src/MachOReaderRelocatable.cpp: mark non-lazy-pointer atoms as scopeTranslationUnit if targetting a static symbol
-
-
-
-2006-04-21      Nick Kledzik    <kledzik@apple.com>
-
-       * src/Options.cpp: fix default address for ppc64 custom stack
-       * src/MachOWriterExecutable.cpp: fix set up of ppc64 custom stack
-
-
-2006-04-14      Nick Kledzik    <kledzik@apple.com>
-
-       * src/Options.cpp: fix -sub_library processing to work it dylib is specifed with leaf name
-
------ Tagged ld64-51.1
-
-2006-04-13      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4513304> 64-bit: 9A152 TextEdit crashes in dlopen on bring-up
-       * src/MachOReaderRelocatable.hpp: when detecting anonymous non-lazy-pointers disqualify data
-       that points to static or global symbols
-       * src/ld.cpp: print version of ld64 in error messages
-
-
------ Tagged ld64-51
-
-2006-04-11      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4499168> exported symbols not properly stripped
-       * src/MachOReaderRelocatable.hpp: enable AnonymousAtom::setScope()
-
-2006-03-31      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4498391> ld64 fails when linking debug ppc64 HIToolbox
-       * src/MachOReaderRelocatable.hpp: handle anonymous non-lazy pointers encoded with local relocations
-       * src/MachOWriterExecutable.hpp: in -r mode, only generated INDIRECT_SYMBOL_LOCAL for non-lazy targets that
-
-
-2006-03-31      Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4496499> ld64 should remove generated file if link errors out
-       * src/MachOWriterExecutable.hpp: catch exceptions in Writer<A>::write(), delete output file, and rethrow
-
-
------ Tagged ld64-50
-
-
-2006-03-29      Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: synthesize .objc_class_name symbols
-       * src/MachOFileAbstraction.hpp: use strncpy for sect/seg names to zero fill trailing space
-
-2006-03-28      Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: fix spurious warning about dwarf line info
-
------ Tagged ld64-49.1
-
-2006-03-25      Nick Kledzik    <kledzik@apple.com>
-
-       * MachOWriterExecutable.hpp : don't complain about ppc64 dyld being based > 4GB
-
------ Tagged ld64-49
-
-2006-03-24     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOWriterExecutable.hpp: dyld is allowed to have synthesized non-lazy pointers
-       <rdar://problem/4488113> ld64 is after processing bad GSYM stabs
-       * src/MachOReaderRelocatable.hpp: if a GSYM is found that does not match any data symbol, suppress it
-
-2006-03-23     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOWriterExecutable.hpp: in Writer<x86>::fixUpReferenceFinal() fix when x86::kPointer is for an
-       external relocation
-
-2006-03-23     Nick Kledzik    <kledzik@apple.com>
-
-       * src/Options.cpp: change macosx-min-version to default to a per-architecture setting
-         add warning if -pagezero_size is not page aligned
-       * src/MachOWriterExecutable.hpp: properly handle external relocations for ppc64 with 4GB pagezero
-       * src/machochecker.cpp: sanity check relocation records
-
------ Tagged ld64-48
-
-2006-03-21     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4481406> 64bit: passing function pointer to another function passes the wrong function address
-       * src/MachOReaderRelocatable.hpp: when processing a non-lazy pointer to a static function, don't accidentally
-       match it to a STAB symbol.
-
-2006-03-21     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4180168> .eh symbols make up 13% of libstdc++'s stripped binary size
-       * src/ObjectFile.h: add ReaderOptions.fForFinalLinkedImage
-       * src/Options.cpp: setup ReaderOptions.fForFinalLinkedImage
-       * src/MachOReaderRelocatable.hpp: mark .eh symbols kSymbolTableNotIn when building final linked image
-
-2006-03-21     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4473742> ld64 does not parse optional second argument to -filelist
-       * unit-tests/test-cases/filelist: added
-       * src/Options.cpp: in Options::loadFileList() handle comma option
-
-
------ Tagged ld64-47.1
-
-
------ Tagged ld64-47
-
-
------ Tagged ld64-46
-
-2006-03-10     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4419505> ld64 should figure out architecture from .o files
-       * unit-tests/test-cases/auto-arch: added
-       * src/ld.cpp: added Linker::inferArchitecture() to scan .o files are infer architecture to link
-       * src/MachOReaderArchive.hpp: enhanced validFile() to look deeper into archive and really valdate
-       * src/MachOWriterExecutable.hpp: stop using fOptions.architecture()
-       * src/Options.cpp: stop defaulting to ppc64
-
-
-2006-03-09     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4465004> Need "intentionally left blank" dylib stubs
-       * unit-tests/include/common.makefile: add VALID_ARCHS
-       * unit-tests/run-all-unit-tests: set up VALID_ARCHS
-       * unit-tests/test-cases/blank-stubs: add test case
-       * src/ld.cpp: in addDylib(), detect and ignore blank stubs
-       * src/MachOReaderDylib.hpp: in constructor, handle blank stubs
-
-2006-03-09     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4471424> crash in stub with 2GB pagezero
-       * src/MachOWriterExecutable.hpp: StubAtom<ppc64> can't be no-pic if a large zero-page is used
-
-2006-03-06     Nick Kledzik    <kledzik@apple.com>
-
-       * src/Options.cpp: addSectionAlignment, warn if -sectalign alignment is not a power of two
-
------ Tagged ld64-45
-
-
-2006-03-06     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4466930> LP64/9A122: ld64: hang when trying to link DiscRecording framework
-       * src/Options.cpp: addSectionAlignment, warn on zero.  Use log2() for alignment conversion
-
-
------ Tagged ld64-44
-
-2006-03-04     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: fix again test for detection of anonymous non-lazy-pointer.
-       Error out if .o file contains old __DWARFA style dwarf.
-
-2006-03-02     Nick Kledzik    <kledzik@apple.com>
-
-       * src/ld.cpp: only re-map page aligned sub-parts of a fat file.  A conformat mmap() requires alignment.
-
------ Tagged ld64-43
-
-
-2006-03-02     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: <rdar://problem/4464370> tighten detection of anonymous non-lazy-pointer
-
------ Tagged ld64-42
-
-2006-02-28     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: fix x86 __IMPORT permissions for class Segment
-
-2006-02-28     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4461240> SWB: ld64-37 (can't resolve symbol ___dso_handle)
-       * src/MachOWriterExecutable.hpp: add class DsoHandleAtom
-
-2006-02-28     Nick Kledzik    <kledzik@apple.com>
-
-       * unit-tests/test-cases/literals-coalesce-alignment: added test case
-       * src/ld.cpp: when coalescing strings pick one with greater alignment
-       <rdar://problem/4458660> ld64: CG link failed because lo14 reference to anonymous non-lazy-pointer not aligned
-       * unit-tests/test-cases/relocs-c/test.c: tweak to fail like 4458660
-       * src/MachOReaderRelocatable.hpp: detect anonymous non-lazy-pointer and transform into real non-lazy-pointers
-
------ Tagged ld64-41
-
-2006-02-24     Nick Kledzik    <kledzik@apple.com>
-
-       * src/Options.cpp: Warning about -no_dead_strip_inits_and_terms and -i options.
-                                          Fix -weak-l option.
-
------ Tagged ld64-40
-
-2006-02-24     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4454698> Leopard9A113: ppc64 libstdc++.dylib initializer crashes in pthread_once
-       * unit-tests/test-cases/multiple-entry-points: added
-       * src/MachOReaderRelocatable.hpp: make sure that if there are multiple symbols with the same
-       address, that we properly make zero length atoms for all but last symbol
-
-2006-02-24     Nick Kledzik    <kledzik@apple.com>
-
-       * src/Options.cpp: <rdar://problem/4456093> ld64 doesn't realpath(3) B&I tracing paths
-
-2006-02-24     Nick Kledzik    <kledzik@apple.com>
-
-       * src/Options.cpp: <rdar://problem/4457078> 9A110: ld64 can't deal with section names >16 chars
-
-2006-02-23     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOWriterExecutable.hpp:  use vector.reserve() to minimize re-allocations
-       * src/Options.cpp: use vector.reserve() to minimize re-allocations
-       * src/MachOReaderRelocatable.hpp:  use vector.reserve() to minimize re-allocations
-       * src/MachOReaderDylib.hpp:  use vector.reserve() to minimize re-allocations
-       * src/ld.cpp:  use vector.reserve() to minimize re-allocations
-
-2006-02-23     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4455927> ld64 creates corrupt executables (and has malloc errors) with -headerpad option
-       * src/MachOWriterExecutable.hpp: Change LoadCommandsPaddingAtom<A>::setSize() to update fLargestAtomSize
-       * unit-tests/test-cases/header-pad: added
-
-2006-02-23     Nick Kledzik    <kledzik@apple.com>
-
-       <rdar://problem/4455192> ld64 creates invalid static executables
-       * src/MachOWriterExecutable.hpp: Change MachHeaderAtom<A>::copyRawContent() to create correct header
-       for static executables.  Change SymbolTableLoadCommandsAtom to skip LC_DYSYMTAB for static executables
-       * src/machochecker.cpp: Add tests that static executables are well formed
-       * unit-tests/test-cases/static-executable: added
-
-2006-02-22     Nick Kledzik    <kledzik@apple.com>
-
-       * src/Options.cpp: <rdar://problem/4453468> chnage printf on unknown arg to a throw
-
------ Tagged ld64-39
-
-2006-02-20     Nick Kledzik    <kledzik@apple.com>
-
-       * unit-tests/test-cases/read-only-relocs: added new test case
-       * src/MachOWriterExecutable.hpp: <rdar://problem/4448922> detect and error on relocs in read-only sections
-       * src/MachOReaderRelocatable.hpp: fix parsing of i386 absolute addressing relocs
-
-2006-02-20     Nick Kledzik    <kledzik@apple.com>
-
-       * unit-tests/test-cases/stabs-coalesce: added new test case
-       * src/ld.cpp.hpp: <rdar://problem/4449226> in collectStabs removed unused stabs
-
------ Tagged ld64-38
-
-2006-02-17     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOWriterExecutable.hpp: <rdar://problem/4434578> set correct n_sect field of stabs
-
-2006-02-15     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderArchive.hpp: <rdar://problem/4441920> with -all_load skip over both kinds of SYMDEFs
-       * unit-tests/test-cases/archive-basic/Makefile: add -all_load test case
-
------ Tagged ld64-37
-
-2006-02-13  Eric Christopher  <echristo@apple.com>
-
-       * src/MachOWriterExecutable.hpp (assignFileOffsets): Simplify. Add comments.
-       Adjust whitespace.
-
-2006-02-13     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOWriterExecutable.hpp: in Writer<x86>::fixUpReferenceRelocatable() fix kPCRel32 for external case
-
-2006-02-13     Nick Kledzik    <kledzik@apple.com>
-
-       * unit-tests/test-cases/zero-fill: added
-       * src/machochecker.cpp: check that S_ZEROFILL have no file offset
-       * src/MachOWriterExecutable.hpp: rework assignFileOffsets() to fix rdar://problem/4441145
-
-2006-02-12     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: <rdar://problem/4440880> fix use of first zero-length c-string in .o file
-
-2006-02-12     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: <rdar://problem/4440905> fix uninitialized fAlignment
-
-2006-02-12     Nick Kledzik    <kledzik@apple.com>
-
-       * unit-tests/test-cases/relocs-asm/relocs-asm.s: add pointer-diff cases
-       * src/Architectures.hpp: make size explicit in ppc/ppc64 kPointerDiff
-       * src/MachOReaderRelocatable.hpp: don't allow kPointerDiff64 for ppc (just ppc64)
-       * src/MachOWriterExecutable.cpp: set proper r_length for ld -r of kPointerDiff
-
------ Tagged ld64-36
-
-2006-02-08     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.cpp: rdar://problem/4438677 Handle when a .o file dwarf line info entries but no functions
-
-2006-02-08     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOWriterExecutable.cpp: Properly set address of first TEXT section
-       Keep S_COALESCED attribute for __eh_frame
-
-2006-02-08     Nick Kledzik    <kledzik@apple.com>
-
-       * src/ld.cpp: Temporarily turn allowable client errors into warnings
-       * unit-tests/test-cases/allowable-clientMakefile: Temporarily let warnings be ok for above
-       * src/MachOWriterExecutable.hpp: fix ld -r to not use external relocations for symbols make static
-
-2006-02-08     Nick Kledzik    <kledzik@apple.com>
-
-       * src/ld.cpp: A sibling in an umbrella can always link with its other siblings
-       * unit-tests/test-cases/allowable-client: add test case for above
-
-2006-02-08     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: support LOCAL non-lazy pointers to hidden symbols
-       * src/machochecker.cpp: verify indirect symbol table
-       * unit-tests/test-cases/private-non-lazy: added test case
-
-2006-02-07     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOWriterExecutable.hpp: fix calculation of file offsets in ld -r mode
-       * src/machochecker.cpp: verify segment file offsets are within file
-
------ Tagged ld64-35
-
-2006-02-06     Nick Kledzik    <kledzik@apple.com>
-
-       * ld.cpp: allow parent of sub-framework to link
-       * unit-tests/test-cases/allowable-client/Makefile: added cases for parent and clients of parent
-
-2006-02-04     Nick Kledzik    <kledzik@apple.com>
-
-       * unit-tests/test-cases/relocs-c/test.c:  added some array cases
-       * src/MachOReaderRelocatable.hpp: factor out makeReferenceToEH()
-       * src/MachOWriterExecutable.hpp: add initial support for non-lazy pointer synthesis
-
------ Tagged ld64-34
-
-2006-02-04     Nick Kledzik    <kledzik@apple.com>
-
-       * src/ld.cpp: <rdar://problem/4432917> fix -no_arch_warnings
-                                 <rdar://problem/4432932> fix -undefined warning
-                               Do BINCL/EINCL optimization for gfull stabs
-                               Implement "essential symbols" for stabs (-Sp)
-                               Fix allowable clients to only test on direct libraries
-       * src/MachOReaderRelocatable.hpp: support BINCL/EINCL stabs
-
-2006-02-03     Nick Kledzik    <kledzik@apple.com>
-
-       * src/machochecker.cpp: add code to check load command alignment
-       * src/MachOWriterExecutable.hpp: make load command alignment depend on architecture
-
-2006-02-03     Nick Kledzik    <kledzik@apple.com>
-
-       * unit-tests/test-cases/literals-coalesce: added
-       * src/MachOReaderRelocatable.hpp: assure all targets of low14 ppc relocs are at least 4-byte alignmented
-
------ Tagged ld64-33
-
-2006-02-02     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: properly coalesce 8-byte literals
-       * src/MachOWriterExecutable.hpp: support ppc64::kPointerDiff32
-
------ Tagged ld64-32
-
-2006-02-02     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: support anonymous zero fill atoms
-
-2006-02-02     Nick Kledzik    <kledzik@apple.com>
-
-       * src/ld.cpp: A weak definition is good enough, do not search archives for a non-weak one
-       * unit-tests/test-cases/archive-weak: add test case for above
-       * src/MachOReaderRelocatable.hpp: an atom should never have a by-name reference to itself
-       * src/Options.cpp: prevent .eh symbols from being exported via a -exported_symbols_list
-
-2006-02-01     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: Support -macosx_version_min 10.5
-
-2006-02-01     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: don't try to parse debug_line dwarf if no symboled atoms
-
------ Tagged ld64-31
-
-2006-02-01  Eric Christopher  <echristo@apple.com>
-
-       * unit-tests/test-cases/allow-stack-execute/Makefile: Move otool handling...
-       * unit-tests/include/common.makefile: ... here.
-       * unit-tests/bin/fail-if-stdin.pl: New.
-       * unit-tests/test-cases/no-uuid: Ditto.
-       * src/ld.cpp (Linker::) Add fCreateUUID.
-       (::Linker): Initialize.
-       (::collectStabs): Use. Set if dwarf or we have a UUID already.
-       (::writeOutput): Pass as argument to Writer::write along with option.
-       * src/Options.h (Option::emitUUID): Declare.
-       (Option::fEmitUUID): Ditto.
-       * src/Options.cpp (Option::emitUUID): New.
-       (parse): Handle -no_uuid.
-       * src/MachOReaderRelocatable (Reader::Reader): Handle LC_UUID.
-       * src/ExecutableFile.h (Writer::Write): Add createUUID boolean.
-       * src/MachOWriterExecutable: Add UUID forward declaration.
-       (fUUIDAtom): New.
-       (UUIDLoadCommandAtom): Emit LC_UUID if fEmit. New function emit. Size
-       to zero at start.
-       (Writer::writer): Add handle for LC_UUID. If createUUID emit LC_UUID.
-       (MachHeaderAtom::copyRawContent): Don't count a load command if its size is
-       0.
-       (UUIDLoadCommandAtom::copyRawContent): Depend on fEmit.
-
-
-2006-01-31     Nick Kledzik    <kledzik@apple.com>
-
-       * unit-tests/test-cases/dwarf-debug-notes : Added
-       * src/ld.cpp: don't generate debug note for .eh symbols
-       * src/MachOReaderRelocatable.hpp: make dwarf line info to atom matching faster and better
-
-2006-01-31     Nick Kledzik    <kledzik@apple.com>
-
-       * ld64.xcodeproj/project.pbxproj : Make buildable on Leopard
-       * src/MachOFileAbstraction.hpp: make buildable without latest cctools headers
-
-2006-01-31     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: better error message for bad relocs
-       * src/ObjectDump.cpp: add emacs tab settings
-       * src/SectCreate.h: ditto
-       * src/SectCreate.cpp: ditto
-       * src/machochecker.cpp: ditto
-       * src/ExecutableFile.h: ditto
-
-2006-01-30  Eric Christopher  <echristo@apple.com>
-
-       * src/ExecutableFile.h: Indent.
-
-2006-01-30     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: performance improvements
-       * src/ld.cpp: now that stubs are synthesized in write, don't need to special case anymore
-
-2006-01-30     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: fix parsing of pcc relocs
-       * unit-tests/test-cases/relocs-asm/relocs-asm.s: add test case for above
-
-2006-01-29     Nick Kledzik    <kledzik@apple.com>
-
-       * unit-tests/test-cases/weak_import: added test case
-       * src/ld.cpp: move code for weak_import mismatch to writer
-       * src/ObjectFile.h: remove ImportWeakness methods
-       * src/MachOReaderDylib.hpp: ditto
-       * src/SectCreate.cpp: ditto
-       * src/Architectures.hpp: add new ReferenceKinds for weak_imports
-       * src/MachOReaderRelocatable.hpp: implement new ReferenceKinds
-       * src/MachOWriterExecutable.hpp: handle new ReferenceKinds and weak_import mismatches
-
-2006-01-29     Nick Kledzik    <kledzik@apple.com>
-
-       * src/Options.cpp: verify -allow_stack_execute is only used on main executables
-
-2006-01-29     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: sync with latest dwarf reader from Geoff
-       * src/debugline.c: sync with latest dwarf reader from Geoff
-
-2006-01-27  Eric Christopher  <echristo@apple.com>
-
-       * src/ld.cpp (Linker::syntesizeStabs): Correct spelling. Update all uses.
-
-2006-01-27  Eric Christopher  <echristo@apple.com>
-
-       * src/Options.h (Options): Add hasExecutableStack, fExecutableStack.
-       * src/Options.cpp (Options::hasExecutableStack): New.
-       (Options::parse): Parse -allow_stack_execute.
-       * src/MachOWriterExecutable.hpp (MachHeaderAtom::copyRawContent):
-       Implement MH_ALLOW_STACK_EXECUTION.
-       * unit-tests/include/common.makefile (FAIL_IF_EMPTY): New.
-       * unit-tests/bin/fail-if-no-stdin.pl: New file.
-       * unit-tests/test-cases/allow-stack-execute: New directory.
-
-2006-01-27     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOFileAbstraction.hpp: rely on latest system headers
-       * src/MachOWriterExecutable.hpp: fix ppc stubs.
-               wrote new relocationNeededInFinalLinkedImage() to replace common code
-
-2006-01-27  Eric Christopher  <echristo@apple.com>
-
-       * src/ld.cpp (logTraceInfo): New.
-       (Linker::addArchive): Use.
-       (Linker::addDylib): Ditto.
-       * src/ObjectFile (ReaderOptions::fTraceOutputFile): New.
-       * src/MachOReaderArchive.hpp (Reader::Reader): Move trace
-       logging to Linker::addArchive.
-       * src/Options.cpp (parsePreCommandLineEnvironment): Check
-       LD_PRINT_FILE if tracing dylibs or archives.
-
-2006-01-26     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOWriterExecutable.hpp: handle NULL strings in SO debug notes
-
-2006-01-26     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOWriterExecutable.hpp: fix header padding calculation and thread state
-
-2006-01-26     Nick Kledzik    <kledzik@apple.com>
-
-       Rewrite all stabs processing.
-       Move sythesize of debug notes into ld.cpp
-
-2006-01-26     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOWriterExecutable.hpp: fix ppc and ppc64 stub relocs
-
-2006-01-25     Nick Kledzik    <kledzik@apple.com>
-
-       * ld64.xcodeproj/project.pbxproj: special case building in Curry
-
-2006-01-25     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOWriterExecutable.hpp: fix bugs in stub/lazy-pointer synthesis
-
-2006-01-24  Eric Christopher  <echristo@apple.com>
-
-       * src/ld.cpp (Linker::createReaders): Change logging title to XBS.
-       (Linker::addDylib): Ditto.
-       * src/MachOReaderArchive.hpp (Reader::Reader): Ditto.
-       * src/Options.h (fPrintOptions): New.
-       * src/Options.cpp (Options::Options): Initialize above.
-       (Options::checkForFile): Change logging title to XBS.
-       (Options::findFramework): Ditto.
-       (Options::parse): Add log for options.
-       (Options::parsePreCommandLineEnvironmentSettings): Add LD_TRACE_ARCHIVES,
-       LD_TRACE_DYLIBS, and LD_PRINT_OPTIONS.
-
-2006-01-24     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: better C++ eh parsing
-
-2006-01-23  Eric Christopher  <echristo@apple.com>
-
-       * unit-tests/bin/fail-if-exit-zero.pl: New.
-       * unit-tests/include/common.makefile (FAIL_IF_SUCCESS): Use.
-       * unit-tests/allowable-client: New test.
-       * src/ld.cpp (Linker::addDylib): Check allowable clients before adding dylib.
-       * src/Options.h (allowableClients): New.
-       (clientName): Ditto.
-       (fAllowableClients): Ditto.
-       (fClientName): Ditto.
-       * src/Options.cpp: Implement above.
-       (parse): Handle -allowable_client and -client_name.
-       * src/MachOReaderDylib.hpp (getAllowableClients): New.
-       (fAllowableClients): Ditto.
-       (Reader): Process LC_SUB_CLIENT load command.
-       * src/ObjectFile.h (parentUmbrella): New.
-       (getAllowableClients): New.
-       * src/MachOWriterExecutable.hpp (AllowableClientLoadCommandsAtom): New.
-
-2006-01-23     Nick Kledzik    <kledzik@apple.com>
-
-       * unit-tests/test-cases/archive-basic: added
-       * src/ld.cpp: fix shadowed local variable
-       * src/FileAbstraction.hpp: <rdar://problem/4417372> ld64 shouldn't inline when building debug
-
-2006-01-23     Nick Kledzik    <kledzik@apple.com>
-
-       * src/ld.cpp: fix symbol not found error message
-       * src/MachOReaderDylib.hpp: add logging to hash table
-       * src/MachOReaderRelocatable.hpp: enable stabs processing. Handle static functions with stubs
-                                                                       handle labeled cstrings.
-       * src/MachOWriterExecutable.hpp: properly suppress atoms not in symbol table. fix low14 error check.
-                                                                       add StubAtomHelper.
-       * unit-tests/test-cases/relocs-literals/test.c: add more interesting edge cases
-
-2006-01-17     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: tweaks to synthesizing debug notes
-
-2006-01-16     Nick Kledzik    <kledzik@apple.com>
-
-       * src/debugline.{sh}: added
-       * src/MachOReaderRelocatable.hpp: synthesize debug notes SOL from dwarf
-       * src/MachOWriterExecutable.hpp: fix lazy pointer section
-       * src/ObjectDump.hpp: Fix conditionalization
-       * unit-tests/test-cases/dwarf-strip: added
-
-2006-01-11     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: support Tiger crt1.o build with old ld64
-       * src/ObjectDump.hpp: Support -arch option
-
-2006-01-10     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOWriterExecutable.hpp: fix stubs for ppc64
-       * src/MachOFileAbstraction.hpp: fix typo for macho_routines
-       * ld64.xcodeproj/project.pbxproj: add machochecker target
-       * src/machochecker.cpp: new skeleton for checking mach-o file bit
-       * unit-tests/: Add support for running machochecker
-
-2006-01-10     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: warn if dwarf can't be parsed
-       * src/MachOReaderArchive.hpp: modTime for OSO stabs from archives is .a modTime
-
-2006-01-09     Nick Kledzik    <kledzik@apple.com>
-
-       * track modification time of .o files so that sythesized OSO stab will have it
-
-2006-01-09     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOFileAbstraction.hpp: add macho_uuid_command
-       * src/MachOWriterExecutable.cpp: add UUID load command to generated files
-
-2006-01-09     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderDylib.hpp: no longer keep dylib memory mapped
-       * src/ld.cpp: don't track dylib sizes because they are not longer memory mapped
-
-2006-01-05     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: support new relocations
-
-2006-01-05     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderDylib.hpp: support MH_DYLIB_STUB
-       * src/MachOReaderRelocatable.hpp: Add Geoff's comp unit extractor
-
-2006-01-05     Nick Kledzik    <kledzik@apple.com>
-
-       refactor: transform Atom::dontStripName() to getSymbolTableInclusion()
-       * src/ld.cpp: pass dyld_stub_binding_helper to writer
-       * src/MachOReaderRelocatable.hpp: update synthesized stabs
-         Ignore stubs and lazy pointers in .o files
-         Support initializers and terminators
-       * src/MachOWriterExecutable.hpp: synthesize stubs and lazy pointers as needed
-       * ld64.xcodeproj/project.pbxproj: change Release target to build with dwarf
-
-2006-01-03  Eric Christopher  <echristo@apple.com>
-
-       * src/Options.h (multipleDefinitionsInDylibs): Declare.
-       (overridingDefinitionInDependentDylib): Ditto.
-       (warnOnMultipleDefinitionsInObjectFiles): Ditto.
-       (multiplyDefined): Remove.
-       (multiplyDefinedUnused): Ditto.
-       (fMultiplyDefined): Ditto.
-       (fWarnOnMultiplyDefined): New.
-       (fMultiplyDefinedDynamic): Ditto.
-       * src/Options.cpp (Options::Options): Initialize above.
-       (overridingDefinitionInDependentDylib): New.
-       (multipleDefinitionsInDylibs): Ditto.
-       (warnOnMultipleDefinitionsInObjectFiles): Ditto.
-       (parse): Update comments. Fix parsing of -y option.
-       Update error message for -dead_strip. Parse above
-       options.
-
-2006-01-02     Nick Kledzik    <kledzik@apple.com>
-
-       * Refactor: move Atom::writeContent() to Writer
-
-2005-12-23     Nick Kledzik    <kledzik@apple.com>
-
-       * Reworked, simplify, and document test harness
-       * unit-tests/README: Added
-
-2005-12-23     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: fixes for Objective-C
-       * unit-tests/test-cases/relocs-objc: Added
-
-2005-12-22     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: fix check that next reloc is pair
-       * src/MachOReaderRelocatable.hpp: Add code to synthesize essential stabs from dwarf
-
-2005-12-21     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: Fix parsing of literal sections
-       * src/MachOWriterExecutable.hpp: Fix writing of literal sections
-       * unit-tests/test-cases/relocs-literals: Added
-
-2005-12-15  Eric Christopher  <echristo@apple.com>
-
-       * src/Options.h (enum Treatment): New.
-       (enum PICTreatment): Delete.
-       (enum VersionMin): New.
-       (prebind): Declare.
-       (macosxVersionMin): Ditto.
-       (multiplyDefined): Ditto.
-       (multiplyDefinedUnused): Ditto.
-       (setVersionMin): Ditto.
-       (setPICTreatment): Delete.
-       (setReadOnlyRelocTreatment): Ditto.
-       (picTreatment): Adjust return type.
-       (parseTreatment): New.
-       (fPrebind): Ditto.
-       (fVersionMin): Ditto.
-       (fPICTreatment): Change type.
-       (fMultiplyDefined): New.
-       (fMultiplyDefinedUnused): Ditto.
-       (fLimitUndefinedSymbols): Ditto.
-
-       * src/Options.cpp: Fix whitespace. Add comments on options.
-       (Options::Options): Add initializers for new variables.
-       (Options::prebind): New.
-       (Options::macosxVersionMin): Ditto.
-       (Options::parseTreatment): Ditto.
-       (Options::setVersionMin): Ditto.
-       (Options::setReadOnlyRelocTreatment): Delete.
-       (Options::setPICTreatment): Ditto.
-       (Options::Parse): Update for above. Add comments.
-
-2005-12-15     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: Add comments about dwarf
-
-2005-12-14     Nick Kledzik    <kledzik@apple.com>
-
-       * src/ELFFileAbstraction.hpp: Added
-       * src/ELFReaderRelocatable.hpp: Added
-       * Lot of fixes for new architecture
-       * Added __OPEN_SOURCE__ to "Preprocessor Macros" to disable new architecture support by default
-
-2005-12-13     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: check for S_ATTR_DEBUG and ignore those sections
-       * unit-tests/test-cases/dwarf-ignore: added
-
-2005-12-12     Nick Kledzik    <kledzik@apple.com>
-
-       * Added test harness and three initial tests:
-               relocs-asm, relocs-c, and hello-world
-
-2005-12-12     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOReaderRelocatable.hpp: Massive refactoring:
-               Now there are three Atom classes, Chopping into Atoms
-               is done on label boundaries or by knowledge of special
-               sections, Share lots of ppc/ppc64 code.
-       Stabs process code is temporarily disabled.
-
-2005-12-12     Nick Kledzik    <kledzik@apple.com>
-
-       * src/ObjectDump.cpp: Add command line options: -no_content, -stabs, -no_sort
-
-2005-12-11  Eric Christopher  <echristo@apple.com>
-
-       * src/Options.cpp: Reformat.
-       * src/Options.h: Ditto.
-
-2005-12-07  Eric Christopher  <echristo@apple.com>
-
-       * src/MachOReaderRelocatable.hpp (Atom::getAlignment):
-       When calculating alignment of an Atom, take into account
-       the alignment from which we pulled the Atom.
-
-2005-12-06     Nick Kledzik    <kledzik@apple.com>
-
-       * src/Options.cpp src/Options.h: Add design comments
-
-2005-12-05  Eric Christopher  <echristo@apple.com>
-
-       * src/ld.cpp (Linker::createWriter): Uncomment ppc64 and
-       i386 linkers.
-
-2005-12-05  Eric Christopher  <echristo@apple.com>
-
-       * ChangeLog: New file.
-
-2005-12-02     Nick Kledzik    <kledzik@apple.com>
-
-       * src/ObjectFile.h: Add design comments
-
-2005-11-30     Nick Kledzik    <kledzik@apple.com>
-
-       * Fix uses of __OPEN_SOURCE__
-
-2005-11-28     Nick Kledzik    <kledzik@apple.com>
-
-       * Refactor Atom to use getDefinitionKind()
-
-2005-11-21     Nick Kledzik    <kledzik@apple.com>
-
-       * src/MachOWriterExecutable.hpp: don't generate section for commons in -r mode
-
-2005-11-18     Nick Kledzik    <kledzik@apple.com>
-
-       * x86 tweaks
-
-2005-11-18     Nick Kledzik    <kledzik@apple.com>
-
-       * src/ObjectDump.cpp: make work with command line arguments
-
-2005-11-18     Nick Kledzik    <kledzik@apple.com>
-
-       * Massive rework to remove preprocessor conditionals and use templates
-
-2005-11-14     Nick Kledzik    <kledzik@apple.com>
-
-       * Created new Subversion repository for ld64 from cvs tag ld64-27.2
index c910e048ae1e88aaf32fec4f586f8cdbf28f2ff9..3a84e0a66eec5dbb7704475af3b00ffb8d955402 100644 (file)
@@ -271,6 +271,10 @@ When targeting Mac OS X 10.6 or later, the format of the exported symbol informa
 make lookups of popular symbols faster.  This option is used to pass a file containing a list of
 the symbols most frequently used by clients of the dynamic library being built. Not all exported symbols
 need to be listed.  
+.It Fl no_zero_fill_sections
+By default the linker moves all zero fill sections to the end of the __DATA segment and configures
+them to use no space on disk.  This option suppresses that optimization, so zero-filled data occupies
+space on disk in a final linked image.
 .El
 .Ss Options when creating a dynamic library (dylib) 
 .Bl -tag
index ceb448a472b088b1d23bbbebf9d87fb03bfebf01..0d141cf0b9c4dc751b6f609f7bec0fda59217754 100644 (file)
@@ -61,7 +61,7 @@ struct x86
        
        enum ReferenceKinds {  kNoFixUp, kFollowOn, kGroupSubordinate, kPointer, kPointerWeakImport, kPointerDiff, kPointerDiff32=kPointerDiff, kPointerDiff16,
                                                        kPCRel32, kPCRel32WeakImport, kAbsolute32,  kPCRel16, kPCRel8, 
-                                                       kImageOffset32, kPointerDiff24, kSectionOffset24,
+                                                       kImageOffset32, kPointerDiff24,
                                                        kDtraceProbe, kDtraceProbeSite, kDtraceIsEnabledSite, kDtraceTypeReference  };
 };
 
@@ -74,7 +74,7 @@ struct x86_64
                                                        kBranchPCRel32, kBranchPCRel32WeakImport,
                                                        kPCRel32GOTLoad, kPCRel32GOTLoadWeakImport,
                                                        kPCRel32GOT, kPCRel32GOTWeakImport, kBranchPCRel8, kGOTNoFixUp, 
-                                                       kImageOffset32, kPointerDiff24, kSectionOffset24,
+                                                       kImageOffset32, kPointerDiff24,
                                                        kDtraceProbe, kDtraceProbeSite, kDtraceIsEnabledSite, kDtraceTypeReference  };
 };
 
@@ -83,7 +83,7 @@ struct arm
        typedef Pointer32<LittleEndian>         P;
        
        enum ReferenceKinds {  kNoFixUp, kFollowOn, kGroupSubordinate, kPointer, kPointerWeakImport, kPointerDiff, kPointerDiff32=kPointerDiff, kReadOnlyPointer,
-                                                       kBranch24, kBranch24WeakImport, kThumbBranch22, kThumbBranch22WeakImport,
+                                                       kBranch24, kBranch24WeakImport, kThumbBranch22, kThumbBranch22WeakImport, 
                                                        kDtraceProbe, kDtraceProbeSite, kDtraceIsEnabledSite, kDtraceTypeReference  };
 };
 
index 1b8f2c3fe815c3e70e830050d3719760715d0fd5..75659e1ed68d5c2d977911c1dcc2fbace238ccca 100644 (file)
@@ -358,7 +358,6 @@ Reader::Reader(const uint8_t* fileContent, uint64_t fileLength, const char* path
                                kind = ObjectFile::Atom::kWeakDefinition;
                                break;
                        case LTO_SYMBOL_DEFINITION_UNDEFINED:
-                       case LTO_SYMBOL_DEFINITION_WEAKUNDEF:
                                kind = ObjectFile::Atom::kExternalDefinition;
                                break;
                        default:
@@ -407,7 +406,7 @@ const char* Reader::tripletPrefixForArch(cpu_type_t arch)
                case CPU_TYPE_X86_64:
                        return "x86_64-";
                case CPU_TYPE_ARM:
-                       return "arm";
+                       return "arm-";
        }
        return "";
 }
index 8aea6efd66f65541c27ed9b6126e3bf8c7605aee..13faf3d45cb29cc5e4e0f83398bef621f50b53b1 100644 (file)
@@ -780,18 +780,13 @@ void Reader<A>::processIndirectLibraries(DylibHander* handler)
                                                //fprintf(stderr, "processIndirectLibraries() implicitly linking %s\n", child->getInstallPath());
                                                ((Reader<A>*)child)->setImplicitlyLinked();
                                        }
-                                       else if ( child->explicitlyLinked() || child->implicitlyLinked() ) {
-                                               //fprintf(stderr, "processIndirectLibraries() parent is not directly linked, but child is, so no need to re-export child\n");
-                                       }
-                                       else {
+                                       else
                                                fReExportedChildren.push_back(child);
-                                               //fprintf(stderr, "processIndirectLibraries() parent is not directly linked, so parent=%s will re-export child=%s\n", this->getInstallPath(), it->path);
-                                       }
                                }
                                else {
                                        // add all child's symbols to me
                                        fReExportedChildren.push_back(child);
-                                       //fprintf(stderr, "processIndirectLibraries() child is not public, so parent=%s will re-export child=%s\n", this->getInstallPath(), it->path);
+                                       //fprintf(stderr, "processIndirectLibraries() parent=%s will re-export child=%s\n", this->getInstallPath(), it->path);
                                }
                        }
                        else if ( !fExplictReExportFound ) {
index e57631322cdfe1dab3cc739da999c87acc665b49..ef8cfb2729e413143087f1560cb3d96467052e3f 100644 (file)
@@ -288,6 +288,7 @@ public:
        virtual uint32_t                                                        getOrdinal() const { return fOrdinal; }
        virtual void                                                            setOrdinal(uint32_t value) { fOrdinal = value; }
        virtual const void*                                                     getSectionRecord() const = 0;
+       virtual unsigned int                                            getSectionIndex() const = 0;
        virtual bool                                                            isAlias() const { return false; }
        virtual uint8_t                                                         getLSDAReferenceKind() const { return 0; }
        virtual uint8_t                                                         getPersonalityReferenceKind() const { return 0; }
@@ -295,7 +296,6 @@ public:
        virtual ObjectFile::UnwindInfo::iterator        beginUnwind()                                   { return fHasCompactUnwindInfo ? &fSingleUnwindInfo[0] : NULL; }
        virtual ObjectFile::UnwindInfo::iterator        endUnwind()                                             { return fHasCompactUnwindInfo ? &fSingleUnwindInfo[1] : NULL; }
        virtual ObjectFile::Reference*                          getLSDA();
-       virtual ObjectFile::Reference*                          getFDE();
        virtual Atom*                                                           getPersonalityPointer();
        virtual void                                                            setCompactUnwindEncoding(uint64_t ehAtomAddress);
 
@@ -320,19 +320,6 @@ ObjectFile::Reference* BaseAtom::getLSDA()
        return NULL;
 }
 
-ObjectFile::Reference* BaseAtom::getFDE()
-{
-       const uint8_t groupKind = this->getLSDAReferenceKind(); 
-       const std::vector<ObjectFile::Reference*>& refs = this->getReferences();
-       for (std::vector<ObjectFile::Reference*>::const_iterator it=refs.begin(); it != refs.end(); it++) {
-               ObjectFile::Reference* ref = *it;
-               if ( (ref->getKind() == groupKind) && (ref->getTarget().getContentType() == ObjectFile::Atom::kCFIType) ) {
-                       return ref;
-               }
-       }
-       return NULL;
-}
-
 ObjectFile::Atom* BaseAtom::getPersonalityPointer()
 {
        const uint8_t personalityKind = this->getPersonalityReferenceKind(); 
@@ -397,21 +384,36 @@ public:
                        else if ( rightAlias ) {
                                return false;
                        }
-                       else {
-                               // they must be tentative defintions
-                               switch ( left->getDefinitionKind() ) {
-                                       case ObjectFile::Atom::kTentativeDefinition:
-                                               // sort tentative definitions by name
-                                               return ( strcmp(left->getName(), right->getName()) < 0 );
-                                       case ObjectFile::Atom::kAbsoluteSymbol:
-                                               // sort absolute symbols with same address by name
-                                               return ( strcmp(left->getName(), right->getName()) < 0 );
-                                       default:
-                                               // hack for rdar://problem/5102873
-                                               if ( !left->isZeroFill() || !right->isZeroFill() )
-                                                       warning("atom sorting error for %s and %s in %s", left->getDisplayName(), right->getDisplayName(), left->getFile()->getPath());
-                                               break;
-                               }
+                       // one might be a section start or end label
+                       switch ( left->getContentType() ) {
+                               case ObjectFile::Atom::kSectionStart:
+                                       return true;
+                               case ObjectFile::Atom::kSectionEnd:
+                                       return false;
+                               default:
+                                       break;
+                       }
+                       switch ( right->getContentType() ) {
+                               case ObjectFile::Atom::kSectionStart:
+                                       return false;
+                               case ObjectFile::Atom::kSectionEnd:
+                                       return true;
+                               default:
+                                       break;
+                       }
+                       // they could be tentative defintions
+                       switch ( left->getDefinitionKind() ) {
+                               case ObjectFile::Atom::kTentativeDefinition:
+                                       // sort tentative definitions by name
+                                       return ( strcmp(left->getName(), right->getName()) < 0 );
+                               case ObjectFile::Atom::kAbsoluteSymbol:
+                                       // sort absolute symbols with same address by name
+                                       return ( strcmp(left->getName(), right->getName()) < 0 );
+                               default:
+                                       // hack for rdar://problem/5102873
+                                       if ( !left->isZeroFill() || !right->isZeroFill() )
+                                               warning("atom sorting error for %s and %s in %s", left->getDisplayName(), right->getDisplayName(), left->getFile()->getPath());
+                                       break;
                        }
                }
                return false;
@@ -439,7 +441,7 @@ public:
        virtual ObjectFile::Atom::ContentType           getContentType() const                  { return fType; }
        virtual SymbolTableInclusion                            getSymbolTableInclusion() const { return fSymbolTableInclusion; }
        virtual bool                                                            dontDeadStrip() const;
-       virtual bool                                                            isZeroFill() const                              { return ((fSection->flags() & SECTION_TYPE) == S_ZEROFILL); }
+       virtual bool                                                            isZeroFill() const;
        virtual bool                                                            isThumb() const                                 { return ((fSymbol->n_desc() & N_ARM_THUMB_DEF) != 0); }
        virtual uint64_t                                                        getSize() const                                 { return fSize; }
        virtual std::vector<ObjectFile::Reference*>&  getReferences() const                     { return (std::vector<ObjectFile::Reference*>&)(fReferences); }
@@ -458,6 +460,7 @@ public:
        virtual const ObjectFile::ReaderOptions&        getOptions() const                              { return fOwner.fOptions; }
        virtual uint64_t                                                        getObjectAddress() const                { return fAddress; }
        virtual const void*                                                     getSectionRecord() const                { return (const void*)fSection; }
+       virtual unsigned int                                            getSectionIndex() const                 { return 1 + (fSection - fOwner.fSectionsStart); }
        virtual uint8_t                                                         getLSDAReferenceKind() const;
        virtual uint8_t                                                         getPersonalityReferenceKind() const;
        virtual uint32_t                                                        getCompactUnwindEncoding(uint64_t ehAtomAddress);
@@ -643,6 +646,12 @@ ObjectFile::Atom& SymbolAtom<A>::getFollowOnAtom() const
        return *((ObjectFile::Atom*)NULL);
 }
 
+template <typename A>
+bool SymbolAtom<A>::isZeroFill() const
+{
+       return ( ((fSection->flags() & SECTION_TYPE) == S_ZEROFILL) && fOwner.fOptions.fOptimizeZeroFill );
+}
+
 
 class Beyond
 {
@@ -717,6 +726,7 @@ public:
        virtual const ObjectFile::ReaderOptions&        getOptions() const                              { return fAliasOf.getOptions(); }
        virtual uint64_t                                                        getObjectAddress() const                { return fAliasOf.getObjectAddress(); }
        virtual const void*                                                     getSectionRecord() const                { return fAliasOf.getSectionRecord(); }
+       virtual unsigned int                                            getSectionIndex() const                 { return fAliasOf.getSectionIndex(); }
        virtual bool                                                            isAlias() const                                 { return true; }
 
 protected:
@@ -778,7 +788,7 @@ public:
        virtual const char*                                                     getDisplayName() const                  { return getName(); }
        virtual ObjectFile::Atom::Scope                         getScope() const                                { return fScope; }
        virtual ObjectFile::Atom::DefinitionKind        getDefinitionKind() const               { return ObjectFile::Atom::kTentativeDefinition; }
-       virtual bool                                                            isZeroFill() const                              { return true; }
+       virtual bool                                                            isZeroFill() const                              { return fOwner.fOptions.fOptimizeZeroFill; }
        virtual bool                                                            isThumb() const                                 { return false; }
        virtual SymbolTableInclusion                            getSymbolTableInclusion() const { return ((fSymbol->n_desc() & REFERENCED_DYNAMICALLY) != 0)
                                                                                                                                                                                ? ObjectFile::Atom::kSymbolTableInAndNeverStrip : ObjectFile::Atom::kSymbolTableIn; }
@@ -800,6 +810,7 @@ public:
        virtual const ObjectFile::ReaderOptions&        getOptions() const                              { return fOwner.fOptions; }
        virtual uint64_t                                                        getObjectAddress() const                { return ULLONG_MAX; }
        virtual const void*                                                     getSectionRecord() const                { return NULL; }
+       virtual unsigned int                                            getSectionIndex() const                 { return 0; }
 
 protected:
        typedef typename A::P                                   P;
@@ -912,10 +923,11 @@ public:
        virtual void                                                            setSize(uint64_t size)                  { fSize = size; }
        virtual void                                                            addReference(ObjectFile::Reference* ref) { fReferences.push_back((Reference<A>*)ref); }
        virtual void                                                            sortReferences() { std::sort(fReferences.begin(), fReferences.end(), ReferenceSorter()); }
-       virtual void                                                            addLineInfo(const  ObjectFile::LineInfo& info);
+       virtual void                                                            addLineInfo(const  ObjectFile::LineInfo& info) { warning("can't add line info to anonymous symbol %s from %s", this->getDisplayName(), this->getFile()->getPath()); }
        virtual const ObjectFile::ReaderOptions&        getOptions() const                              { return fOwner.fOptions; }
        virtual uint64_t                                                        getObjectAddress() const                { return fAddress; }
        virtual const void*                                                     getSectionRecord() const                { return (const void*)fSection; }
+       virtual unsigned int                                            getSectionIndex() const                 { return fSectionIndex; }
        BaseAtom*                                                                       redirectTo()                                    { return fRedirect; }
        bool                                                                            isWeakImportStub()                              { return fWeakImportStub; }
        void                                                                            resolveName();
@@ -952,6 +964,7 @@ protected:
        ObjectFile::Atom::Scope                                         fScope;
     ObjectFile::Atom::DefinitionKind            fKind;
        ObjectFile::Atom::ContentType                           fType;
+       unsigned int                                                            fSectionIndex;
 };
 
 template <typename A>
@@ -959,7 +972,7 @@ AnonymousAtom<A>::AnonymousAtom(Reader<A>& owner, const macho_section<P>* sectio
  : fOwner(owner), fSynthesizedName(NULL), fDisplayName(NULL), fSection(section), fAddress(addr), fSize(size), 
        fSegment(NULL), fDontDeadStrip(true), fWeakImportStub(false), fSymbolTableInclusion(ObjectFile::Atom::kSymbolTableNotIn),
        fScope(ObjectFile::Atom::scopeTranslationUnit), fKind(ObjectFile::Atom::kRegularDefinition), 
-       fType(ObjectFile::Atom::kUnclassifiedType)
+       fType(ObjectFile::Atom::kUnclassifiedType), fSectionIndex(1 + (section - owner.fSectionsStart))
 {
        fSegment = new Segment<A>(fSection);
        fRedirect = this;
@@ -1034,7 +1047,7 @@ AnonymousAtom<A>::AnonymousAtom(Reader<A>& owner, const macho_section<P>* sectio
                case S_CSTRING_LITERALS:
                        {
                                const char* str = (char*)(owner.fHeader) + section->offset() + addr - section->addr();
-                               if ( (strcmp(fSection->sectname(), "__cstring") == 0) && (strcmp(section->segname(), "__TEXT") == 0) ) 
+                               if ( strcmp(fSection->sectname(), "__cstring") == 0 ) 
                                        asprintf((char**)&fSynthesizedName, "cstring=%s", str);
                                else
                                        asprintf((char**)&fSynthesizedName, "cstring%s%s=%s", fSection->segname(), fSection->sectname(), str);
@@ -1122,16 +1135,6 @@ AnonymousAtom<A>::AnonymousAtom(Reader<A>& owner, const macho_section<P>* sectio
                case S_LAZY_SYMBOL_POINTERS:
                case S_NON_LAZY_SYMBOL_POINTERS:
                        {
-                               // transform i386 __IMPORT/__pointers to __DATA/__nl_symbol_ptr when 
-                               // generating the new compressed LINKEDIT format
-                               if ( (type == S_NON_LAZY_SYMBOL_POINTERS) && fOwner.fOptions.fMakeCompressedDyldInfo && (strcmp(fSection->segname(),"__IMPORT") == 0) ) {
-                                       macho_section<P>* dummySection = new macho_section<P>(*fSection);
-                                       dummySection->set_segname("__DATA");
-                                       dummySection->set_sectname("__nl_symbol_ptr");
-                                       fSection = dummySection;
-                                       fSegment = new Segment<A>(fSection);
-                               }
-                               
                                fDontDeadStrip = false;
                                fScope = ObjectFile::Atom::scopeLinkageUnit;
                                uint32_t index = (fAddress - fSection->addr()) / sizeof(pint_t);
@@ -1187,6 +1190,16 @@ AnonymousAtom<A>::AnonymousAtom(Reader<A>& owner, const macho_section<P>* sectio
                                        strcat(str, "$non_lazy_ptr");
                                fSynthesizedName = str;
 
+                               // transform i386 __IMPORT/__pointers to __DATA/__nl_symbol_ptr when 
+                               // generating the new compressed LINKEDIT format
+                               if ( fOwner.fOptions.fMakeCompressedDyldInfo && (strcmp(fSection->segname(),"__IMPORT") == 0) ) {
+                                       macho_section<P>* dummySection = new macho_section<P>(*fSection);
+                                       dummySection->set_segname("__DATA");
+                                       dummySection->set_sectname("__nl_symbol_ptr");
+                                       fSection = dummySection;
+                                       fSegment = new Segment<A>(fSection);
+                               }
+                               
                                if ( type == S_NON_LAZY_SYMBOL_POINTERS )
                                        fKind = ObjectFile::Atom::kWeakDefinition;
 
@@ -1213,13 +1226,6 @@ AnonymousAtom<A>::AnonymousAtom(Reader<A>& owner, const macho_section<P>* sectio
 template <> bool AnonymousAtom<x86_64>::cstringsHaveLabels() { return true; }
 template <typename A> bool AnonymousAtom<A>::cstringsHaveLabels() { return false; }
 
-template <typename A>
-void AnonymousAtom<A>::addLineInfo(const ObjectFile::LineInfo& info) 
-{ 
-       // <rdar://problem/6545406> don't warn if line table has entries for stubs
-       if ( (fSection->flags() & SECTION_TYPE) != S_SYMBOL_STUBS )
-               warning("can't add line info to anonymous symbol %s from %s", this->getDisplayName(), this->getFile()->getPath()); 
-}
 
 template <typename A>
 void AnonymousAtom<A>::resolveName()
@@ -1324,7 +1330,7 @@ ObjectFile::Atom::Scope AnonymousAtom<A>::getScope() const
 template <typename A>
 bool AnonymousAtom<A>::isZeroFill() const
 {
-       return ( (fSection->flags() & SECTION_TYPE) == S_ZEROFILL );
+       return ( ((fSection->flags() & SECTION_TYPE) == S_ZEROFILL) && fOwner.fOptions.fOptimizeZeroFill );
 }
 
 
@@ -1434,6 +1440,7 @@ public:
        virtual uint64_t                                                        getObjectAddress() const                { return fSymbol->n_value(); }
        virtual void                                                            setSectionOffset(uint64_t offset) { /* don't let fSectionOffset be altered*/ }
        virtual const void*                                                     getSectionRecord() const                { return NULL; }
+       virtual unsigned int                                            getSectionIndex() const                 { return 0; }
 
 protected:
        typedef typename A::P                                   P;
@@ -1472,6 +1479,110 @@ AbsoluteAtom<A>::AbsoluteAtom(Reader<A>& owner, const macho_nlist<P>* symbol)
 }
 
 
+//
+// An SectionBoundaryAtom represent the start or end of a section
+//
+template <typename A>
+class SectionBoundaryAtom : public BaseAtom
+{
+public:
+       virtual ObjectFile::Reader*                                     getFile() const                                 { return &fOwner; }
+       virtual bool                                                            getTranslationUnitSource(const char** dir, const char** name) const
+                                                                                                                                                               { return fOwner.getTranslationUnitSource(dir, name); }
+       virtual const char*                                                     getName() const                                 { return fSymbolName; }
+       virtual const char*                                                     getDisplayName() const                  { return fDisplayName; }
+       virtual ObjectFile::Atom::Scope                         getScope() const                                { return ObjectFile::Atom::scopeLinkageUnit; }
+       virtual ObjectFile::Atom::DefinitionKind        getDefinitionKind() const               { return ObjectFile::Atom::kWeakDefinition; }
+       virtual ObjectFile::Atom::ContentType           getContentType() const                  { return fStart ? ObjectFile::Atom::kSectionStart : ObjectFile::Atom::kSectionEnd; }
+       virtual bool                                                            isZeroFill() const                              { return false; }
+       virtual bool                                                            isThumb() const                                 { return false; }
+       virtual SymbolTableInclusion                            getSymbolTableInclusion() const { return ObjectFile::Atom::kSymbolTableNotIn; }
+       virtual bool                                                            dontDeadStrip() const                   { return false; }
+       virtual uint64_t                                                        getSize() const                                 { return 0; }
+       virtual std::vector<ObjectFile::Reference*>&  getReferences() const                     { return fgNoReferences; }
+       virtual bool                                                            mustRemainInSection() const             { return true; }
+       virtual const char*                                                     getSectionName() const                  { return fSectionName; } 
+       virtual ObjectFile::Segment&                            getSegment() const                              { return *fSegment; }
+       virtual ObjectFile::Atom&                                       getFollowOnAtom() const                 { return *(ObjectFile::Atom*)NULL; }
+       virtual std::vector<ObjectFile::LineInfo>*      getLineInfo() const                             { return NULL; }
+       virtual ObjectFile::Alignment                           getAlignment() const                    { return ObjectFile::Alignment(0); }
+       virtual void                                                            copyRawContent(uint8_t buffer[]) const  { }
+       virtual void                                                            setScope(ObjectFile::Atom::Scope newScope)              { }
+       virtual void                                                            setSize(uint64_t size)                  { }
+       virtual void                                                            addReference(ObjectFile::Reference* ref) { throw "ld: can't add references"; }
+       virtual void                                                            sortReferences()                                { }
+       virtual void                                                            addLineInfo(const  ObjectFile::LineInfo& info)  { throw "ld: can't add line info to tentative definition"; }
+       virtual const ObjectFile::ReaderOptions&        getOptions() const                              { return fOwner.fOptions; }
+       virtual uint64_t                                                        getObjectAddress() const                { return 0; }
+       virtual const void*                                                     getSectionRecord() const                { return NULL; }
+       virtual unsigned int                                            getSectionIndex() const                 { return 0; }
+
+protected:
+       typedef typename A::P                                   P;
+       typedef typename A::P::E                                E;
+       typedef typename A::P::uint_t                   pint_t;
+       typedef typename A::ReferenceKinds              Kinds;
+       friend class Reader<A>;
+
+
+       class Segment : public ObjectFile::Segment
+       {
+       public:
+                                                                       Segment(const char* name, bool r, bool w, bool x): 
+                                                                               fName(name), fReadable(r), fWritable(w), fExecutable(x) {}
+                                                                               
+               virtual const char*                     getName() const                                         { return fName; }
+               virtual bool                            isContentReadable() const                       { return fReadable; }
+               virtual bool                            isContentWritable() const                       { return fWritable; }
+               virtual bool                            isContentExecutable() const                     { return fExecutable; }
+       private:
+               const char*                                     fName;
+               bool                                            fReadable;
+               bool                                            fWritable;
+               bool                                            fExecutable;
+       };
+
+                                                                                       SectionBoundaryAtom(Reader<A>&, bool start, const char* symbolName, const char* segSectName);
+       virtual                                                                 ~SectionBoundaryAtom() {}
+
+       Reader<A>&                                                                      fOwner;
+       class Segment*                                                          fSegment;
+       const char*                                                                     fSymbolName;
+       const char*                                                                     fSectionName;
+       const char*                                                                     fDisplayName;
+       bool                                                                            fStart;
+       static std::vector<ObjectFile::Reference*>      fgNoReferences;
+};
+
+template <typename A>
+std::vector<ObjectFile::Reference*> SectionBoundaryAtom<A>::fgNoReferences;
+
+// examples:
+//                     section$start$__DATA$__my
+//                     section$end$__DATA$__my
+template <typename A>
+SectionBoundaryAtom<A>::SectionBoundaryAtom(Reader<A>& owner, bool start, const char* symbolName, const char* segSectName)
+ : fOwner(owner), fSymbolName(symbolName), fSectionName(NULL), fStart(start)
+{
+       const char* segSectDividor = strrchr(segSectName, '$');
+       if ( segSectDividor == NULL )
+               throwf("malformed section reference name: %s", symbolName);
+       fSectionName = segSectDividor + 1;
+       int segNameLen = segSectDividor - segSectName;
+       if ( segNameLen > 16 )
+               throwf("malformed section reference name: %s", symbolName);
+       char segName[18];
+       strlcpy(segName, segSectName, segNameLen+1);
+       if ( strcmp(segName, "__TEXT") == 0 )
+               fSegment = new Segment("__TEXT", true, false, true);
+       else if ( strcmp(segName, "__DATA") == 0 ) 
+               fSegment = new Segment("__DATA", true, true, false);
+       else 
+               fSegment = new Segment(strdup(segName), true, true, false);
+
+       asprintf((char**)&fDisplayName, "%s of section '%s' in segment '%s'", (start ? "start" : "end"), fSectionName, segName);
+}
+
 
 
 ///
@@ -1499,13 +1610,11 @@ public:
 private:
        const void*                     mappedAddress(pint_t addr, pint_t* relocTarget=NULL);
        pint_t                          relocated(uint32_t sectOffset, uint32_t relocsOffset, uint32_t relocsCount);
-       void                            buildRelocatedMap(const macho_section<P>* sect, std::map<uint32_t,uint64_t>& map);
        
        Reader<A>&                              fReader;
        const uint8_t*                  fMappingStart;
        const macho_section<P>* fSectionsStart;
        const macho_section<P>* fSectionsEnd;
-       std::map<uint32_t,uint64_t> fEHFrameOffsetToTargetMap;
 };
 
 
@@ -1525,43 +1634,26 @@ const void* ObjectFileAddressSpace<A>::mappedAddress(pint_t addr, pint_t* relocT
                fMappingStart = (uint8_t*)fReader.fHeader;
                fSectionsStart = (macho_section<P>*)((char*)fReader.fSegment + sizeof(macho_segment_command<P>));
                fSectionsEnd = &fSectionsStart[fReader.fSegment->nsects()];
-               // find __eh_frame section and build map of relocations for performance
-               buildRelocatedMap(fReader.fehFrameSection, fEHFrameOffsetToTargetMap);
-       }
-       // special case lookups in __eh_frame section to be fast
-       const macho_section<P>* ehSect = fReader.fehFrameSection;
-       if ( (ehSect->addr() <= addr) && (addr < (ehSect->addr()+ehSect->size())) ) {
-               pint_t offsetOfAddrInSection = addr - ehSect->addr();
-               if ( relocTarget != NULL ) {
-                       std::map<uint32_t,uint64_t>::iterator pos = fEHFrameOffsetToTargetMap.find(offsetOfAddrInSection);
-                       if ( pos != fEHFrameOffsetToTargetMap.end() )
-                               *relocTarget = pos->second;
-                       else
-                               *relocTarget = 0;
-               }
-               return fMappingStart + ehSect->offset() + offsetOfAddrInSection;
        }
-       else {
-               for (const macho_section<P>* sect=fSectionsStart; sect < fSectionsEnd; ++sect) {
-                       if ( (sect->addr() <= addr) && (addr < (sect->addr()+sect->size())) ) {
-                               pint_t offsetOfAddrInSection = addr - sect->addr();
-                               if ( (sect->flags() & SECTION_TYPE) == S_NON_LAZY_SYMBOL_POINTERS ) {
-                                       const uint32_t indirectTableOffset = sect->reserved1();
-                                       const uint32_t sectionIndex = offsetOfAddrInSection/sizeof(pint_t);
-                                       const uint32_t symbolIndex = A::P::E::get32(fReader.fIndirectTable[indirectTableOffset+sectionIndex]);
-                                       // return pointer to symbol name which this non-lazy-pointer will point to
-                                       if ( relocTarget != NULL )
-                                               *relocTarget = (uintptr_t)&fReader.fStrings[fReader.fSymbols[symbolIndex].n_strx()];
-                               }
-                               else {
-                                       if ( relocTarget != NULL )
-                                               *relocTarget = relocated(offsetOfAddrInSection, sect->reloff(), sect->nreloc());
-                               }
-                               return fMappingStart + sect->offset() + offsetOfAddrInSection;
+       for (const macho_section<P>* sect=fSectionsStart; sect < fSectionsEnd; ++sect) {
+               if ( (sect->addr() <= addr) && (addr < (sect->addr()+sect->size())) ) {
+                       pint_t offsetOfAddrInSection = addr - sect->addr();
+                       if ( (sect->flags() & SECTION_TYPE) == S_NON_LAZY_SYMBOL_POINTERS ) {
+                               const uint32_t indirectTableOffset = sect->reserved1();
+                               const uint32_t sectionIndex = offsetOfAddrInSection/sizeof(pint_t);
+                               const uint32_t symbolIndex = A::P::E::get32(fReader.fIndirectTable[indirectTableOffset+sectionIndex]);
+                               // return pointer to symbol name which this non-lazy-pointer will point to
+                               if ( relocTarget != NULL )
+                                       *relocTarget = (uintptr_t)&fReader.fStrings[fReader.fSymbols[symbolIndex].n_strx()];
+                       }
+                       else {
+                               if ( relocTarget != NULL )
+                                       *relocTarget = relocated(offsetOfAddrInSection, sect->reloff(), sect->nreloc());
                        }
+                       return fMappingStart + sect->offset() + offsetOfAddrInSection;
                }
-               throwf("ObjectFileAddressSpace::mappedAddress(0x%0lX) not in any section", (long)addr);
        }
+       throwf("ObjectFileAddressSpace::mappedAddress(0x%0lX) not in any section", (long)addr);
 }
 
 
@@ -1664,6 +1756,7 @@ private:
        friend class AnonymousAtom<A>;
        friend class TentativeAtom<A>;
        friend class AbsoluteAtom<A>;
+       friend class SectionBoundaryAtom<A>;
        friend class SymbolAtom<A>;
        typedef std::map<pint_t, BaseAtom*>                     AddrToAtomMap;
 
@@ -1676,6 +1769,7 @@ private:
        static bool                                                                     skip_form(const uint8_t ** offset, const uint8_t * end, uint64_t form, uint8_t addr_size, bool dwarf64);
        static const char*                                                      assureFullPath(const char* path);
        AtomAndOffset                                                           findAtomAndOffset(pint_t addr);
+       AtomAndOffset                                                           findAtomAndOffsetForSection(pint_t addr, unsigned int sectionIndex);
        AtomAndOffset                                                           findAtomAndOffset(pint_t baseAddr, pint_t realAddr);
        Reference<A>*                                                           makeReference(Kinds kind, pint_t atAddr, pint_t toAddr);
        Reference<A>*                                                           makeReference(Kinds kind, pint_t atAddr, pint_t fromAddr, pint_t toAddr);
@@ -1822,12 +1916,8 @@ Reader<A>::Reader(const uint8_t* fileContent, const char* path, time_t modTime,
        for (const macho_section<P>* sect=fSectionsStart; sect < fSectionsEnd; ++sect) {
                if ( (strcmp(sect->sectname(), "__eh_frame") == 0) && (strcmp(sect->segname(), "__TEXT") == 0) ) {
                        fehFrameSection = sect;
-                       const char* msg = libunwind::CFI_Parser<ObjectFileAddressSpace<A> >::getCFIs(fObjectAddressSpace, sect->addr(), 
-                                                                                                                                                                               sect->size(), fFDEInfos, fCIEInfos);
-                       if ( msg != NULL ) {
-                               throwf("malformed __eh_frame section: %s", msg);
-                       }
-                       else {
+                       if ( libunwind::CFI_Parser<ObjectFileAddressSpace<A> >::getCFIs(fObjectAddressSpace, sect->addr(), sect->size(), 
+                                                                                                                                                               fCIEInfos, fFDEInfos) ) {
                                //fprintf(stderr, "%lu CIEs, %lu FDEs\n", fCIEInfos.size(), fFDEInfos.size());
                                // add anonymous atoms for each CIE
                                for (typename std::vector<CIE_Atom_Info>::const_iterator it = fCIEInfos.begin(); it != fCIEInfos.end(); ++it) {
@@ -1849,6 +1939,9 @@ Reader<A>::Reader(const uint8_t* fileContent, const char* path, time_t modTime,
                                        }
                                }
                        }
+                       else {
+                               throw "malformed __eh_frame section";
+                       }
                }
        }
 
@@ -1947,6 +2040,13 @@ Reader<A>::Reader(const uint8_t* fileContent, const char* path, time_t modTime,
                        else if ( (type == N_UNDF) && (sym.n_value() != 0) ) {
                                fAtoms.push_back(new TentativeAtom<A>(*this, &sym));
                        }
+                       else if ( (type == N_UNDF) && (sym.n_value() == 0) ) {
+                               const char* symName = &fStrings[sym.n_strx()];
+                               if ( strncmp(symName, "section$start$", 14) == 0) 
+                                       fAtoms.push_back(new SectionBoundaryAtom<A>(*this, true, symName, &symName[14]));
+                               else if ( strncmp(symName, "section$end$", 12) == 0) 
+                                       fAtoms.push_back(new SectionBoundaryAtom<A>(*this, false, symName, &symName[12]));
+                       }
                        else if ( type == N_ABS ) {
                                const char* symName = &fStrings[sym.n_strx()];
                                if ( strncmp(symName, ".objc_class_name_", 17) == 0 ) {
@@ -2089,8 +2189,9 @@ Reader<A>::Reader(const uint8_t* fileContent, const char* path, time_t modTime,
                        for(pint_t sectOffset=0; sectOffset < sect->size(); sectOffset += stringLen) {
                                stringAddr = sect->addr() + sectOffset;
                                stringLen  = strlen((char*)(fHeader) + sect->offset() + sectOffset) + 1;
-                               // add if not already an atom at that address
-                               if ( fAddrToAtom.find(stringAddr) == fAddrToAtom.end() ) {
+                               // add if not already a non-zero length atom at that address
+                               typename AddrToAtomMap::iterator pos = fAddrToAtom.find(stringAddr);
+                               if ( (pos == fAddrToAtom.end()) || (pos->second->getSize() == 0) ) {
                                        BaseAtom* newAtom = new AnonymousAtom<A>(*this, sect, stringAddr, stringLen);
                                        if ( stringLen == 1 ) {
                                                // because of padding it may look like there are lots of empty strings, keep track of all
@@ -2724,44 +2825,6 @@ ObjectFile::Atom* Reader<A>::getFunctionAtomFromLSDAAddress(pint_t addr)
 }
 
 
-template <>
-void ObjectFileAddressSpace<x86_64>::buildRelocatedMap(const macho_section<P>* sect, std::map<uint32_t,uint64_t>& map)
-{      
-       // mach-o x86_64 is different, the content of a section with a relocation is the addend
-       const macho_relocation_info<P>* relocs = (macho_relocation_info<P>*)((char*)(fReader.fHeader) + sect->reloff());
-       const macho_relocation_info<P>* relocsEnd = &relocs[sect->nreloc()];
-       for (const macho_relocation_info<P>* reloc = relocs; reloc < relocsEnd; ++reloc) {
-               std::map<uint32_t,uint64_t>::iterator pos;
-               switch ( reloc->r_type() ) {
-                       case X86_64_RELOC_UNSIGNED:
-                               pos = map.find(reloc->r_address());
-                               if ( pos != map.end() )
-                                       pos->second += fReader.fSymbols[reloc->r_symbolnum()].n_value();
-                               else
-                                       map[reloc->r_address()] = fReader.fSymbols[reloc->r_symbolnum()].n_value();
-                               break;
-                       case X86_64_RELOC_SUBTRACTOR:
-                               map[reloc->r_address()] = -fReader.fSymbols[reloc->r_symbolnum()].n_value();
-                               break;
-                       case X86_64_RELOC_GOT:
-                               // there is no good address to return here.
-                               // GOT slots are synthsized by the linker
-                               // this is used for the reference to the personality function in CIEs
-                               map[reloc->r_address()] = 0;
-                               break;
-                       default:
-                               fprintf(stderr, "ObjectFileAddressSpace::buildRelocatedMap() unexpected relocation at r_address=0x%08X\n", reloc->r_address());
-                               break;
-               }
-       }
-}
-
-template <typename A>
-void ObjectFileAddressSpace<A>::buildRelocatedMap(const macho_section<P>* sect, std::map<uint32_t,uint64_t>& map)
-{
-       // in all architectures except x86_64, the section contents are already fixed up to point
-       // to content in the same object file.
-}
 
 template <>
 uint64_t ObjectFileAddressSpace<x86_64>::relocated(uint32_t sectOffset, uint32_t relocsOffset, uint32_t relocsCount)
@@ -3037,15 +3100,14 @@ uint32_t SymbolAtom<x86>::getCompactUnwindEncoding(uint64_t ehAtomAddress)
 {
        pint_t lsda;
        pint_t personality;
-       char warningBuffer[1024];
        uint32_t result = libunwind::DwarfInstructions<class ObjectFileAddressSpace<x86>, libunwind::Registers_x86>::createCompactEncodingFromFDE(
-                                                                                       fOwner.fObjectAddressSpace, ehAtomAddress, &lsda, &personality, warningBuffer);
-       if ( (result & UNWIND_X86_MODE_MASK) == UNWIND_X86_MODE_DWARF ) {
+                                                                                       fOwner.fObjectAddressSpace, ehAtomAddress, &lsda, &personality);
+       if ( (result & UNWIND_X86_CASE_MASK) == UNWIND_X86_UNWIND_REQUIRES_DWARF ) {
                //if ( fOwner.fOptions.fForDyld )
                //      throwf("can't make compact unwind encoding from dwarf for %s",  this->getDisplayName());
                //else
                        if ( fOwner.fOptions.fWarnCompactUnwind )
-                               warning("can't make compact unwind encoding from dwarf for %s in %s because %s", this->getDisplayName(), fOwner.getPath(), warningBuffer);
+                               warning("can't make compact unwind encoding from dwarf for %s in %s", this->getDisplayName(), fOwner.getPath());
        }
        return result;
 }
@@ -3055,15 +3117,14 @@ uint32_t SymbolAtom<x86_64>::getCompactUnwindEncoding(uint64_t ehAtomAddress)
 {
        pint_t lsda;
        pint_t personality;
-       char warningBuffer[1024];
        uint32_t result = libunwind::DwarfInstructions<class ObjectFileAddressSpace<x86_64>, libunwind::Registers_x86_64>::createCompactEncodingFromFDE(
-                                                                                       fOwner.fObjectAddressSpace, ehAtomAddress, &lsda, &personality, warningBuffer);
-       if ( (result & UNWIND_X86_64_MODE_MASK) == UNWIND_X86_64_MODE_DWARF ) {
+                                                                                       fOwner.fObjectAddressSpace, ehAtomAddress, &lsda, &personality);
+       if ( (result & UNWIND_X86_64_CASE_MASK) == UNWIND_X86_64_UNWIND_REQUIRES_DWARF ) {
                //if ( fOwner.fOptions.fForDyld )
                //      throwf("can't make compact unwind encoding from dwarf for %s",  this->getDisplayName());
                //else
                        if ( fOwner.fOptions.fWarnCompactUnwind )
-                               warning("can't make compact unwind encoding from dwarf for %s in %s because %s", this->getDisplayName(), fOwner.getPath(), warningBuffer);
+                               warning("can't make compact unwind encoding from dwarf for %s in %s", this->getDisplayName(), fOwner.getPath());
        }
        return result;
 }
@@ -3121,14 +3182,12 @@ uint32_t AnonymousAtom<x86>::getCompactUnwindEncoding(uint64_t ehAtomAddress)
 {
        pint_t lsda;
        pint_t personality;
-       char warningBuffer[1024];
        uint32_t result = libunwind::DwarfInstructions<class ObjectFileAddressSpace<x86>, libunwind::Registers_x86>::createCompactEncodingFromFDE(
-                                                                                       fOwner.fObjectAddressSpace, ehAtomAddress, &lsda, &personality, warningBuffer);
-       if ( (result & UNWIND_X86_MODE_MASK) == UNWIND_X86_MODE_DWARF ) {
+                                                                                       fOwner.fObjectAddressSpace, ehAtomAddress, &lsda, &personality);
+       if ( (result & UNWIND_X86_CASE_MASK) == UNWIND_X86_UNWIND_REQUIRES_DWARF ) {
                //if ( fOwner.fOptions.fForDyld )
                //      throwf("can't make compact unwind encoding from dwarf for %s",  this->getDisplayName());
                //else
-               if ( fOwner.fOptions.fWarnCompactUnwind )
                        warning("can't make compact unwind encoding from dwarf for %s in %s", this->getDisplayName(), fOwner.getPath());
        }
        return result;
@@ -3139,14 +3198,12 @@ uint32_t AnonymousAtom<x86_64>::getCompactUnwindEncoding(uint64_t ehAtomAddress)
 {
        pint_t lsda;
        pint_t personality;
-       char warningBuffer[1024];
        uint32_t result = libunwind::DwarfInstructions<class ObjectFileAddressSpace<x86_64>, libunwind::Registers_x86_64>::createCompactEncodingFromFDE(
-                                                                                               fOwner.fObjectAddressSpace, ehAtomAddress, &lsda, &personality, warningBuffer);
-       if ( (result & UNWIND_X86_64_MODE_MASK) == UNWIND_X86_64_MODE_DWARF ) {
+                                                                                       fOwner.fObjectAddressSpace, ehAtomAddress, &lsda, &personality);
+       if ( (result & UNWIND_X86_64_CASE_MASK) == UNWIND_X86_64_UNWIND_REQUIRES_DWARF ) {
                //if ( fOwner.fOptions.fForDyld )
                //      throwf("can't make compact unwind encoding from dwarf for %s",  this->getDisplayName());
                //else
-               if ( fOwner.fOptions.fWarnCompactUnwind )
                        warning("can't make compact unwind encoding from dwarf for %s in %s", this->getDisplayName(), fOwner.getPath());
        }
        return result;
@@ -3464,8 +3521,11 @@ Reference<x86_64>* Reader<x86_64>::makeReferenceToSymbol(Kinds kind, pint_t atAd
        // x86_64 uses external relocations everywhere, so external relocations do not imply by-name references
        // instead check scope of target
        const char* symbolName = &fStrings[toSymbol->n_strx()];
-       if ( ((toSymbol->n_type() & N_TYPE) == N_SECT) && (((toSymbol->n_type() & N_EXT) == 0) || (symbolName[0] == 'L')) ) 
-               return new Reference<x86_64>(kind, findAtomAndOffset(atAddr), findAtomAndOffset(toSymbol->n_value(), toSymbol->n_value()+toOffset));
+       if ( ((toSymbol->n_type() & N_TYPE) == N_SECT) && (((toSymbol->n_type() & N_EXT) == 0) || (symbolName[0] == 'L')) ) {
+               AtomAndOffset targetAO = findAtomAndOffsetForSection(toSymbol->n_value(), toSymbol->n_sect());
+               targetAO.offset = toOffset;
+               return new Reference<x86_64>(kind, findAtomAndOffset(atAddr), targetAO);
+       }
        else
                return new Reference<x86_64>(kind, findAtomAndOffset(atAddr), symbolName, toOffset);
 }
@@ -3492,6 +3552,29 @@ BaseAtom* Reader<x86_64>::makeReferenceToEH(const char* ehName, pint_t ehAtomAdd
        return NULL;
 }
 
+template <typename A>
+AtomAndOffset Reader<A>::findAtomAndOffsetForSection(pint_t addr, unsigned int expectedSectionIndex)
+{
+       AtomAndOffset ao = findAtomAndOffset(addr);
+       if ( ao.atom != NULL ) {
+               if ( ((BaseAtom*)(ao.atom))->getSectionIndex() == expectedSectionIndex )
+                       return ao;
+       }
+       // The atom found is not in the section expected.
+       // This probably means there was a label at the end of the section.
+       // Do a slow sequential lookup
+       for (std::vector<BaseAtom*>::iterator it=fAtoms.begin(); it != fAtoms.end(); ++it) {
+               BaseAtom* atom = *it;
+               if ( atom->getSectionIndex() == expectedSectionIndex ) {
+                       pint_t objAddr = atom->getObjectAddress();
+                       if ( (objAddr == addr) || ((objAddr < addr) && (objAddr+atom->getSize() > addr)) ) {
+                               return AtomAndOffset(atom, addr-atom->getObjectAddress());
+                       }
+               }
+       }
+       // no atom found
+       return AtomAndOffset(NULL);
+}
 
 template <typename A>
 AtomAndOffset Reader<A>::findAtomAndOffset(pint_t addr)
@@ -3528,10 +3611,9 @@ AtomAndOffset Reader<A>::findAtomAndOffset(pint_t baseAddr, pint_t realAddr)
                return result;
        }
        // getting here means we have a scattered relocation to an address without a label
-       // so, find the atom that contains the baseAddr, and offset from that to the readAddr
-       AtomAndOffset result = findAtomAndOffset(baseAddr);
-       result.offset += (realAddr-baseAddr);
-       return result;
+       // we should never get here...
+       // one case we do get here is because sometimes the compiler generates non-lazy pointers in the __data section
+       return findAtomAndOffset(realAddr);
 }
 
 
@@ -4123,7 +4205,7 @@ bool Reader<A>::addRelocReference_powerpc(const macho_section<typename A::P>* se
                                                        makeByNameReference(A::kPointer, srcAddr, targetName, pointerValue);
                                        }
                                        else {
-                                               makeReference(A::kPointer, srcAddr, pointerValue);
+                                               new Reference<A>(A::kPointer, findAtomAndOffset(srcAddr), findAtomAndOffsetForSection(pointerValue, reloc->r_symbolnum()));
                                        }
                                }
                                break;
@@ -4411,9 +4493,8 @@ bool Reader<x86>::addRelocReference(const macho_section<x86::P>* sect, const mac
                                                        makeByNameReference(kind, srcAddr, targetName, pointerValue);
                                        }
                                        else {
-                                               // if this is a branch to a stub, we need to see if the stub is for a weak imported symbol
-                                               ObjectFile::Atom* atom = findAtomAndOffset(pointerValue).atom;
-                                               const char* targetName = atom->getName();
+                                               AtomAndOffset targetAO = findAtomAndOffsetForSection(pointerValue, reloc->r_symbolnum());
+                                               const char* targetName = targetAO.atom->getName();
                                                if ( (targetName != NULL) && (strncmp(targetName, "___dtrace_probe$", 16) == 0) ) {
                                                        makeByNameReference(x86::kDtraceProbeSite, srcAddr, targetName, 0);
                                                        addDtraceExtraInfos(srcAddr, &targetName[16]);
@@ -4422,11 +4503,12 @@ bool Reader<x86>::addRelocReference(const macho_section<x86::P>* sect, const mac
                                                        makeByNameReference(x86::kDtraceIsEnabledSite, srcAddr, targetName, 0);
                                                        addDtraceExtraInfos(srcAddr, &targetName[20]);
                                                }
-                                               else if ( reloc->r_pcrel() && (atom->getSymbolTableInclusion() == ObjectFile::Atom::kSymbolTableNotIn)
-                                                       && ((AnonymousAtom<x86>*)atom)->isWeakImportStub() )
-                                                       makeReference(x86::kPCRel32WeakImport, srcAddr, pointerValue);
+                                               // if this is a reference to a stub, we need to see if the stub is for a weak imported symbol
+                                               else if ( reloc->r_pcrel() && (targetAO.atom->getSymbolTableInclusion() == ObjectFile::Atom::kSymbolTableNotIn)
+                                                       && ((AnonymousAtom<x86>*)targetAO.atom)->isWeakImportStub() )
+                                                       new Reference<x86>(x86::kPCRel32WeakImport, findAtomAndOffset(srcAddr), targetAO);
                                                else if ( reloc->r_symbolnum() != R_ABS )
-                                                       makeReference(kind, srcAddr, pointerValue);
+                                                       new Reference<x86>(kind, findAtomAndOffset(srcAddr), targetAO);
                                                else {
                                                        // find absolute symbol that corresponds to pointerValue
                                                        AddrToAtomMap::iterator pos = fAddrToAbsoluteAtom.find(pointerValue);
@@ -4583,10 +4665,7 @@ bool Reader<x86_64>::addRelocReference(const macho_section<x86_64::P>* sect, con
                                        kind = x86_64::kPointer32;
                                        break;
                                case 3:
-                                       if ( reloc->r_extern() && isWeakImportSymbol(targetSymbol) )
-                                               kind = x86_64::kPointerWeakImport;
-                                       else
-                                               kind = x86_64::kPointer;
+                                       kind = x86_64::kPointer;
                                        break;
                        }
                        dstAddr = E::get64(*((uint64_t*)fixUpPtr));
@@ -4986,7 +5065,7 @@ bool Reader<arm>::addRelocReference(const macho_section<arm::P>* sect,
                                }
                                else {
                                        AtomAndOffset at = findAtomAndOffset(srcAddr);
-                                       AtomAndOffset to = findAtomAndOffset(pointerValue);
+                                       AtomAndOffset to = findAtomAndOffsetForSection(pointerValue, reloc->r_symbolnum());
                                        if ( to.atom->isThumb() )
                                                to.offset &= -2;
                                        new Reference<arm>(kind, at, to);
@@ -5198,7 +5277,7 @@ const char* Reference<x86>::getDescription() const
                        sprintf(temp, "offset 0x%04X, absolute32 reference to ", fFixUpOffsetInSrc);
                        break;
                case x86::kImageOffset32:
-                       sprintf(temp, "offset 0x%04X, 32-bit offset of ", fFixUpOffsetInSrc);
+                       sprintf(temp, "offset 0x%04X, 32bit offset of ", fFixUpOffsetInSrc);
                        break;
                case x86::kPointerDiff24:
                        sprintf(temp, "offset 0x%04X, 24-bit pointer difference: (&%s + 0x%08X) - (&%s + 0x%08X)",
@@ -5206,9 +5285,6 @@ const char* Reference<x86>::getDescription() const
                                                           this->getFromTargetDisplayName(), fFromTarget.offset );
                        return temp;
                        break;
-               case x86::kSectionOffset24:
-                       sprintf(temp, "offset 0x%04X, 24-bit section offset of ", fFixUpOffsetInSrc);
-                       break;
                case x86::kDtraceProbe:
                        sprintf(temp, "offset 0x%04X, dtrace static probe ", fFixUpOffsetInSrc);
                        break;
@@ -5533,9 +5609,6 @@ const char* Reference<x86_64>::getDescription() const
                case x86_64::kImageOffset32:
                        sprintf(temp, "offset 0x%04llX, 32bit offset of ", fFixUpOffsetInSrc);
                        break;
-               case x86_64::kSectionOffset24:
-                       sprintf(temp, "offset 0x%04llX, 24-bit section offset of ", fFixUpOffsetInSrc);
-                       break;
                case x86_64::kDtraceProbe:
                        sprintf(temp, "offset 0x%04llX, dtrace static probe ", fFixUpOffsetInSrc);
                        break;
index b019af26cf9bb838f5da6a3310b549c47106ef30..9e02efacf92a88781d667c99f1681dce776b3f4f 100644 (file)
@@ -453,7 +453,6 @@ private:
        std::vector<class ObjectFile::Atom*>                    fLocalSymbolAtoms;
        std::vector<macho_nlist<P> >                                    fLocalExtraLabels;
        std::vector<macho_nlist<P> >                                    fGlobalExtraLabels;
-       std::map<ObjectFile::Atom*, uint32_t>                   fAtomToSymbolIndex;
        class SectionRelocationsLinkEditAtom<A>*                fSectionRelocationsAtom;        
        class CompressedRebaseInfoLinkEditAtom<A>*              fCompressedRebaseInfoAtom;
        class CompressedBindingInfoLinkEditAtom<A>*             fCompressedBindingInfoAtom;
@@ -973,20 +972,17 @@ public:
        virtual void                                                                    copyRawContent(uint8_t buffer[]) const;
 
        void                                                                                    addUnwindInfo(ObjectFile::Atom* func, uint32_t offset, uint32_t encoding, 
-                                                                                                                       ObjectFile::Reference* fdeRef, ObjectFile::Reference* lsda,
-                                                                                                                        ObjectFile::Atom* personalityPointer);
+                                                                                                                       ObjectFile::Reference* lsda, ObjectFile::Atom* personalityPointer);
        void                                                                                    generate();
        
 private:
        using WriterAtom<A>::fWriter;
        typedef typename A::P                                   P;
-       struct Info { ObjectFile::Atom* func; ObjectFile::Atom* fde; ObjectFile::Atom* lsda; uint32_t lsdaOffset; ObjectFile::Atom* personalityPointer; uint32_t encoding; };
+       struct Info { ObjectFile::Atom* func; ObjectFile::Atom* lsda; uint32_t lsdaOffset; ObjectFile::Atom* personalityPointer; uint32_t encoding; };
        struct LSDAEntry { ObjectFile::Atom* func; ObjectFile::Atom* lsda; uint32_t lsdaOffset; };
-       struct RegFixUp { uint8_t* contentPointer; ObjectFile::Atom* func; ObjectFile::Atom* fde; };
+       struct RegFixUp { uint8_t* contentPointer; ObjectFile::Atom* func; };
        struct CompressedFixUp { uint8_t* contentPointer; ObjectFile::Atom* func; ObjectFile::Atom* fromFunc; };
-       struct CompressedEncodingFixUp { uint8_t* contentPointer; ObjectFile::Atom* fde; };
 
-       bool                            encodingMeansUseDwarf(compact_unwind_encoding_t encoding);
        void                            compressDuplicates(std::vector<Info>& uniqueInfos);
        void                            findCommonEncoding(const std::vector<Info>& uniqueInfos, std::map<uint32_t, unsigned int>& commonEncodings);
        void                            makeLsdaIndex(const std::vector<Info>& uniqueInfos, std::map<ObjectFile::Atom*, uint32_t>& lsdaIndexOffsetMap);
@@ -1009,7 +1005,6 @@ private:
        std::vector<LSDAEntry>                                  fLSDAIndex;
        std::vector<RegFixUp>                                   fRegFixUps;
        std::vector<CompressedFixUp>                    fCompressedFixUps;
-       std::vector<CompressedEncodingFixUp>    fCompressedEncodingFixUps;
        std::vector<ObjectFile::Reference*>             fReferences;
 };
 
@@ -3240,8 +3235,6 @@ void Writer<A>::setExportNlist(const ObjectFile::Atom* atom, macho_nlist<P>* ent
         desc |= N_ARM_THUMB_DEF;
     if ( atom->getSymbolTableInclusion() == ObjectFile::Atom::kSymbolTableInAndNeverStrip )
         desc |= REFERENCED_DYNAMICALLY;
-    if ( atom->dontDeadStrip() && (fOptions.outputKind() == Options::kObjectFile) )
-        desc |= N_NO_DEAD_STRIP;
     if ( atom->getDefinitionKind() == ObjectFile::Atom::kWeakDefinition ) {
         desc |= N_WEAK_DEF;
         fHasWeakExports = true;
@@ -3326,14 +3319,8 @@ void Writer<A>::setLocalNlist(const ObjectFile::Atom* atom, macho_nlist<P>* entr
        const char* symbolName = this->symbolTableName(atom);
        char anonName[32];
        if ( (fOptions.outputKind() == Options::kObjectFile) && !fOptions.keepLocalSymbol(symbolName) ) {
-               if ( stringsNeedLabelsInObjects() && (atom->getContentType() == ObjectFile::Atom::kCStringType) ) {
-                       // don't use 'l' labels for x86_64 strings
-                       // <rdar://problem/6605499> x86_64 obj-c runtime confused when static lib is stripped
-               }
-               else {
-                       sprintf(anonName, "l%u", fAnonNameIndex++);
-                       symbolName = anonName;
-               }
+               sprintf(anonName, "l%u", fAnonNameIndex++);
+               symbolName = anonName;
        }
        entry->set_n_strx(this->fStringsAtom->add(symbolName));
 
@@ -3356,8 +3343,6 @@ void Writer<A>::setLocalNlist(const ObjectFile::Atom* atom, macho_nlist<P>* entr
 
        // set n_desc
        uint16_t desc = 0;
-    if ( atom->dontDeadStrip() && (fOptions.outputKind() == Options::kObjectFile) )
-        desc |= N_NO_DEAD_STRIP;
        if ( atom->getDefinitionKind() == ObjectFile::Atom::kWeakDefinition )
                desc |= N_WEAK_DEF;
        if ( atom->isThumb() )
@@ -3496,27 +3481,6 @@ void Writer<A>::buildSymbolTable()
        // set up module table
        if ( fModuleInfoAtom != NULL )
                fModuleInfoAtom->setName();
-               
-       // create atom to symbol index map
-       // imports
-       int i = 0;
-       for(std::vector<ObjectFile::Atom*>::iterator it=fImportedAtoms.begin(); it != fImportedAtoms.end(); ++it) {
-               fAtomToSymbolIndex[*it] = i + fSymbolTableImportStartIndex;
-               ++i;
-       }
-       // locals
-       i = 0;
-       for(std::vector<ObjectFile::Atom*>::iterator it=fLocalSymbolAtoms.begin(); it != fLocalSymbolAtoms.end(); ++it) {
-               fAtomToSymbolIndex[*it] = i + fSymbolTableLocalStartIndex;
-               ++i;
-       }
-       // exports
-       i = 0;
-       for(std::vector<ObjectFile::Atom*>::iterator it=fExportedAtoms.begin(); it != fExportedAtoms.end(); ++it) {
-               fAtomToSymbolIndex[*it] = i + fSymbolTableExportStartIndex;
-               ++i;
-       }
-       
 }
 
 
@@ -3726,9 +3690,30 @@ void Writer<A>::addStabs(uint32_t startIndex)
 template <typename A>
 uint32_t Writer<A>::symbolIndex(ObjectFile::Atom& atom)
 {
-       std::map<ObjectFile::Atom*, uint32_t>::iterator pos = fAtomToSymbolIndex.find(&atom);
-       if ( pos != fAtomToSymbolIndex.end() )
-               return pos->second;
+       // search imports
+       int i = 0;
+       for(std::vector<ObjectFile::Atom*>::iterator it=fImportedAtoms.begin(); it != fImportedAtoms.end(); ++it) {
+               if ( &atom == *it )
+                       return i + fSymbolTableImportStartIndex;
+               ++i;
+       }
+
+       // search locals
+       i = 0;
+       for(std::vector<ObjectFile::Atom*>::iterator it=fLocalSymbolAtoms.begin(); it != fLocalSymbolAtoms.end(); ++it) {
+               if ( &atom == *it )
+                       return i + fSymbolTableLocalStartIndex;
+               ++i;
+       }
+
+       // search exports
+       i = 0;
+       for(std::vector<ObjectFile::Atom*>::iterator it=fExportedAtoms.begin(); it != fExportedAtoms.end(); ++it) {
+               if ( &atom == *it )
+                       return i + fSymbolTableExportStartIndex;
+               ++i;
+       }
+
        throwf("atom not found in symbolIndex(%s) for %s", atom.getDisplayName(), atom.getFile()->getPath());
 }
 
@@ -3933,9 +3918,6 @@ uint32_t Writer<x86_64>::addObjectRelocs(ObjectFile::Atom* atom, ObjectFile::Ref
                case x86_64::kImageOffset32:
                        throw "internal linker error, kImageOffset32 can't be encoded into object files";
 
-               case x86_64::kSectionOffset24:
-                       throw "internal linker error, kSectionOffset24 can't be encoded into object files";
-
                case x86_64::kDtraceTypeReference:
                case x86_64::kDtraceProbe:
                        // generates no relocs
@@ -4058,9 +4040,6 @@ uint32_t Writer<x86>::addObjectRelocs(ObjectFile::Atom* atom, ObjectFile::Refere
                case x86::kImageOffset32:
                        throw "internal linker error, kImageOffset32 can't be encoded into object files";
                        
-               case x86::kSectionOffset24:
-                       throw "internal linker error, kSectionOffset24 can't be encoded into object files";
-
                case x86::kDtraceTypeReference:
                case x86::kDtraceProbe:
                        // generates no relocs
@@ -4759,6 +4738,14 @@ bool Writer<x86_64>::illegalRelocInFinalLinkedImage(const ObjectFile::Reference&
 template <>
 bool Writer<arm>::illegalRelocInFinalLinkedImage(const ObjectFile::Reference& ref)
 {
+       switch ( fOptions.outputKind()) {
+               case Options::kStaticExecutable:
+               case Options::kPreload:
+                       // all relocations allowed in static executables
+                       return false;
+               default:
+                       break;
+       }
        if ( ref.getKind() == arm::kReadOnlyPointer ) {
                switch ( ref.getTarget().getDefinitionKind() ) {
                        case ObjectFile::Atom::kTentativeDefinition:
@@ -4772,7 +4759,7 @@ bool Writer<arm>::illegalRelocInFinalLinkedImage(const ObjectFile::Reference& re
                                return true;
                        case ObjectFile::Atom::kAbsoluteSymbol:
                                // absolute symbbols only allowed in static executables
-                               return ( fOptions.outputKind() != Options::kStaticExecutable);
+                               return true;
                }
        }
        return false;
@@ -5260,23 +5247,11 @@ void Writer<A>::buildExecutableFixups()
                                                                                        uint64_t addresss = atom->getAddress();
                                                                                        if ( targetRequiresWeakBinding(ref->getTarget()) ) {
                                                                                                fWeakBindingInfo.push_back(BindingInfo(type, ref->getTarget().getName(), false, addresss, 0));
-                                                                                               // if this is a non-lazy pointer to a weak definition within this linkage unit
+                                                                                               // if this is a non-lazy pointer to a weak definition with this linkage unit
                                                                                                // the pointer needs to initially point within linkage unit and have
-                                                                                               // rebase command to slide it.
-                                                                                               if ( ref->getTarget().getDefinitionKind() == ObjectFile::Atom::kWeakDefinition ) {
-                                                                                                       // unless if this is a hybrid format, in which case the non-lazy pointer
-                                                                                                       // is zero on disk.  So use a bind instead of a rebase to set initial value
-                                                                                                       if ( fOptions.makeClassicDyldInfo() )
-                                                                                                               fBindingInfo.push_back(BindingInfo(type, BIND_SPECIAL_DYLIB_SELF, ref->getTarget().getName(), false, addresss, 0));
-                                                                                                       else
-                                                                                                               fRebaseInfo.push_back(RebaseInfo(REBASE_TYPE_POINTER,atom->getAddress()));
-                                                                                               }
-                                                                                               // if this is a non-lazy pointer to a weak definition in a dylib,
-                                                                                               // the pointer needs to initially bind to the dylib
-                                                                                               else if ( ref->getTarget().getDefinitionKind() == ObjectFile::Atom::kExternalWeakDefinition ) {
-                                                                                                       int ordinal = compressedOrdinalForImortedAtom(pointerTarget);
-                                                                                                       fBindingInfo.push_back(BindingInfo(BIND_TYPE_POINTER, ordinal, pointerTarget->getName(), false, addresss, 0));
-                                                                                               }
+                                                                                               // rease command to slide it.
+                                                                                               if ( ref->getTarget().getDefinitionKind() == ObjectFile::Atom::kWeakDefinition ) 
+                                                                                                       fRebaseInfo.push_back(RebaseInfo(REBASE_TYPE_POINTER,atom->getAddress()));
                                                                                        }
                                                                                        else {
                                                                                                int ordinal = compressedOrdinalForImortedAtom(pointerTarget);
@@ -5345,16 +5320,6 @@ void Writer<A>::buildExecutableFixups()
                                                                                        uint8_t type = BIND_TYPE_POINTER;
                                                                                        if ( targetRequiresWeakBinding(ref->getTarget()) ) {
                                                                                                fWeakBindingInfo.push_back(BindingInfo(type, ref->getTarget().getName(), false, addresss, addend));
-                                                                                               if ( fOptions.makeClassicDyldInfo() && (ref->getTarget().getDefinitionKind() == ObjectFile::Atom::kWeakDefinition) ) {
-                                                                                                       // hybrid linkedit puts addend in data, so we need bind phase to reset pointer to local definifion
-                                                                                                       fBindingInfo.push_back(BindingInfo(type, BIND_SPECIAL_DYLIB_SELF, ref->getTarget().getName(), false, addresss, addend));
-                                                                                               }
-                                                                                               // if this is a pointer to a weak definition in a dylib,
-                                                                                               // the pointer needs to initially bind to the dylib
-                                                                                               else if ( ref->getTarget().getDefinitionKind() == ObjectFile::Atom::kExternalWeakDefinition ) {
-                                                                                                       int ordinal = compressedOrdinalForImortedAtom(&ref->getTarget());
-                                                                                                       fBindingInfo.push_back(BindingInfo(BIND_TYPE_POINTER, ordinal, ref->getTarget().getName(), false, addresss, addend));
-                                                                                               }
                                                                                        }
                                                                                        else {
                                                                                                int ordinal = compressedOrdinalForImortedAtom(&ref->getTarget());
@@ -6543,9 +6508,9 @@ void Writer<x86>::fixUpReferenceFinal(const ObjectFile::Reference* ref, const Ob
                                                                break;
                                                }
                                        } 
-                                       else if ( !fOptions.makeClassicDyldInfo() 
+                                       else if ( fOptions.makeCompressedDyldInfo()  
                                                                        && (ref->getTarget().getDefinitionKind() == ObjectFile::Atom::kWeakDefinition) ) {
-                                               // when using only compressed dyld info, pointer is initially set to point directly to weak definition
+                                               // lazy pointer is initially set to point directly to weak definition
                                                LittleEndian::set32(*fixUp, ref->getTarget().getAddress() + ref->getTargetOffset());
                                        }
                                        else {
@@ -6579,15 +6544,6 @@ void Writer<x86>::fixUpReferenceFinal(const ObjectFile::Reference* ref, const Ob
                        temp |= (displacement & 0x00FFFFFF);
                        LittleEndian::set32(*fixUp, temp);
                        break;
-               case x86::kSectionOffset24:
-                       displacement = ref->getTarget().getSectionOffset();
-                       if ( (displacement > kSixteenMegLimit) || (displacement < 0) ) 
-                               throwf("24-bit pointer diff out of range in %s", inAtom->getDisplayName());
-                       temp = LittleEndian::get32(*fixUp);
-                       temp &= 0xFF000000;
-                       temp |= (displacement & 0x00FFFFFF);
-                       LittleEndian::set32(*fixUp, temp);
-                       break;
                case x86::kDtraceProbeSite:
                        // change call site to a NOP
                        dtraceProbeSite = (uint8_t*)fixUp;
@@ -6777,8 +6733,6 @@ void Writer<x86>::fixUpReferenceRelocatable(const ObjectFile::Reference* ref, co
                        throw "internal linker error, kPointerDiff24 can't be encoded into object files";
                case x86::kImageOffset32:
                        throw "internal linker error, kImageOffset32 can't be encoded into object files";
-               case x86::kSectionOffset24:
-                       throw "internal linker error, kSectionOffset24 can't be encoded into object files";
                case x86::kDtraceProbe:
                case x86::kDtraceTypeReference:
                        // nothing to fix up
@@ -6808,9 +6762,9 @@ void Writer<x86_64>::fixUpReferenceFinal(const ObjectFile::Reference* ref, const
                                if ( &ref->getTarget() != NULL ) {
                                        //fprintf(stderr, "fixUpReferenceFinal: %s reference to %s\n", this->getDisplayName(), target.getDisplayName());
                                        if ( this->relocationNeededInFinalLinkedImage(ref->getTarget()) == kRelocExternal) {
-                                               if ( !fOptions.makeClassicDyldInfo() 
-                                                                       && (ref->getTarget().getDefinitionKind() == ObjectFile::Atom::kWeakDefinition) ) {
-                                                       // when using only compressed dyld info, pointer is initially set to point directly to weak definition
+                                               if ( fOptions.makeCompressedDyldInfo() 
+                                                                               && (ref->getTarget().getDefinitionKind() == ObjectFile::Atom::kWeakDefinition) ) {
+                                                       // lazy pointer is initially set to point directly to weak definition
                                                        LittleEndian::set64(*fixUp, ref->getTarget().getAddress() + ref->getTargetOffset());
                                                }
                                                else {
@@ -6879,15 +6833,6 @@ void Writer<x86_64>::fixUpReferenceFinal(const ObjectFile::Reference* ref, const
                        temp |= (displacement & 0x00FFFFFF);
                        LittleEndian::set32(*((uint32_t*)fixUp), temp);
                        break;
-               case x86_64::kSectionOffset24:
-                       displacement = ref->getTarget().getSectionOffset();
-                       if ( (displacement > kSixteenMegLimit) || (displacement < 0) ) 
-                               throwf("24-bit pointer diff out of range in %s", inAtom->getDisplayName());
-                       temp = LittleEndian::get32(*((uint32_t*)fixUp));
-                       temp &= 0xFF000000;
-                       temp |= (displacement & 0x00FFFFFF);
-                       LittleEndian::set32(*((uint32_t*)fixUp), temp);
-                       break;
                case x86_64::kPCRel32GOTLoad:
                case x86_64::kPCRel32GOTLoadWeakImport:
                        // if GOT entry was optimized away, change movq instruction to a leaq
@@ -7105,8 +7050,6 @@ void Writer<x86_64>::fixUpReferenceRelocatable(const ObjectFile::Reference* ref,
                        throw "internal linker error, kPointerDiff24 can't be encoded into object files";
                case x86_64::kImageOffset32:
                        throw "internal linker error, kImageOffset32 can't be encoded into object files";
-               case x86_64::kSectionOffset24:
-                       throw "internal linker error, kSectionOffset24 can't be encoded into object files";
                case x86_64::kDtraceTypeReference:
                case x86_64::kDtraceProbe:
                        // nothing to fix up
@@ -8310,12 +8253,12 @@ void Writer<A>::synthesizeUnwindInfoTable()
                        if ( atom->beginUnwind() == atom->endUnwind() ) {
                                // be sure to mark that we have no unwind info for stuff in the TEXT segment without unwind info
                                if ( strcmp(atom->getSegment().getName(), "__TEXT") == 0 )
-                                       fUnwindInfoAtom->addUnwindInfo(atom, 0, 0, NULL, NULL, NULL);
+                                       fUnwindInfoAtom->addUnwindInfo(atom, 0, 0, NULL, NULL);
                        }
                        else {
                                // atom has unwind 
                                for ( ObjectFile::UnwindInfo::iterator uit = atom->beginUnwind(); uit != atom->endUnwind(); ++uit ) {
-                                       fUnwindInfoAtom->addUnwindInfo(atom, uit->startOffset, uit->unwindInfo, atom->getFDE(), atom->getLSDA(), atom->getPersonalityPointer());
+                                       fUnwindInfoAtom->addUnwindInfo(atom, uit->startOffset, uit->unwindInfo, atom->getLSDA(), atom->getPersonalityPointer());
                                }
                        }
                }
@@ -10045,15 +9988,10 @@ void LoadCommandsPaddingAtom<A>::setSize(uint64_t newSize)
 
 template <typename A>
 void UnwindInfoAtom<A>::addUnwindInfo(ObjectFile::Atom* func, uint32_t offset, uint32_t encoding, 
-                                                                               ObjectFile::Reference* fdeRef, ObjectFile::Reference* lsdaRef,
-                                                                               ObjectFile::Atom* personalityPointer) 
+                                                                                               ObjectFile::Reference* lsdaRef, ObjectFile::Atom* personalityPointer) 
 { 
        Info info;
        info.func = func;
-       if ( fdeRef != NULL )  
-               info.fde = &fdeRef->getTarget();
-       else 
-               info.fde = NULL;
        if ( lsdaRef != NULL )  {
                info.lsda = &lsdaRef->getTarget();
                info.lsdaOffset = lsdaRef->getTargetOffset();
@@ -10069,24 +10007,6 @@ void UnwindInfoAtom<A>::addUnwindInfo(ObjectFile::Atom* func, uint32_t offset, u
        //                              encoding, info.lsda, info.lsdaOffset, personalityPointer, func->getDisplayName());
 }
 
-template <>
-bool UnwindInfoAtom<x86>::encodingMeansUseDwarf(compact_unwind_encoding_t encoding)
-{
-       return ( (encoding & UNWIND_X86_MODE_MASK) == UNWIND_X86_MODE_DWARF);
-}
-
-template <>
-bool UnwindInfoAtom<x86_64>::encodingMeansUseDwarf(compact_unwind_encoding_t encoding)
-{
-       return ( (encoding & UNWIND_X86_64_MODE_MASK) == UNWIND_X86_64_MODE_DWARF);
-}
-
-template <typename A>
-bool UnwindInfoAtom<A>::encodingMeansUseDwarf(compact_unwind_encoding_t encoding)
-{
-       return false;
-}
-
 
 template <typename A>
 void UnwindInfoAtom<A>::compressDuplicates(std::vector<Info>& uniqueInfos)
@@ -10100,10 +10020,9 @@ void UnwindInfoAtom<A>::compressDuplicates(std::vector<Info>& uniqueInfos)
        last.personalityPointer = NULL;
        last.encoding = 0xFFFFFFFF;
        for(typename std::vector<Info>::iterator it=fInfos.begin(); it != fInfos.end(); ++it) {
-               Info& newInfo = *it;
-               bool newNeedsDwarf = encodingMeansUseDwarf(newInfo.encoding);
+               Info newInfo = *it;
                // remove infos which have same encoding and personalityPointer as last one
-               if ( newNeedsDwarf || (newInfo.encoding != last.encoding) || (newInfo.personalityPointer != last.personalityPointer) 
+               if ( (newInfo.encoding != last.encoding) || (newInfo.personalityPointer != last.personalityPointer) 
                                                || (newInfo.lsda != NULL) || (last.lsda != NULL) ) {
                        uniqueInfos.push_back(newInfo);
                }
@@ -10119,9 +10038,6 @@ void UnwindInfoAtom<A>::findCommonEncoding(const std::vector<Info>& uniqueInfos,
        std::map<uint32_t, unsigned int> encodingsUsed;
        unsigned int mostCommonEncodingUsageCount = 0;
        for(typename std::vector<Info>::const_iterator it=uniqueInfos.begin(); it != uniqueInfos.end(); ++it) {
-               // never put dwarf into common table
-               if ( encodingMeansUseDwarf(it->encoding) )
-                       continue;
                std::map<uint32_t, unsigned int>::iterator pos = encodingsUsed.find(it->encoding);
                if ( pos == encodingsUsed.end() ) {
                        encodingsUsed[it->encoding] = 1;
@@ -10197,8 +10113,7 @@ unsigned int UnwindInfoAtom<A>::makeRegularSecondLevelPage(const std::vector<Inf
                RegFixUp fixup;
                fixup.contentPointer = (uint8_t*)(&entryTable[i]);
                fixup.func = info.func;
-               fixup.fde = ( encodingMeansUseDwarf(info.encoding) ? info.fde : NULL );
-               fRegFixUps.push_back(fixup);
+               fRegFixUps.push_back(fixup);
        }
        //fprintf(stderr, "regular page with %u entries\n", entriesToAdd);
        pageEnd = pageStart;
@@ -10212,7 +10127,6 @@ unsigned int UnwindInfoAtom<A>::makeCompressedSecondLevelPage(const std::vector<
                                                                                                                        uint32_t pageSize, unsigned int endIndex, uint8_t*& pageEnd)
 {
        const bool log = false;
-       if (log) fprintf(stderr, "makeCompressedSecondLevelPage(pageSize=%u, endIndex=%u)\n", pageSize, endIndex);
        // first pass calculates how many compressed entries we could fit in this sized page
        // keep adding entries to page until:
        //  1) encoding table plus entry table plus header exceed page size
@@ -10235,20 +10149,14 @@ unsigned int UnwindInfoAtom<A>::makeCompressedSecondLevelPage(const std::vector<
                        encodingIndex = pos->second;
                }
                else {
-                       // no commmon entry, so add one on this page
-                       uint32_t encoding = info.encoding;
-                       if ( encodingMeansUseDwarf(encoding) ) {
-                               // make unique pseudo encoding so this dwarf will gets is own encoding entry slot
-                               encoding += (index+1);
-                       }
-                       std::map<uint32_t, unsigned int>::iterator ppos = pageSpecificEncodings.find(encoding);
+                       std::map<uint32_t, unsigned int>::iterator ppos = pageSpecificEncodings.find(info.encoding);
                        if ( ppos != pageSpecificEncodings.end() ) {
                                encodingIndex = pos->second;
                        }
                        else {
                                encodingIndex = commonEncodings.size() + pageSpecificEncodings.size();
                                if ( encodingIndex <= 255 ) {
-                                       pageSpecificEncodings[encoding] = encodingIndex;
+                                       pageSpecificEncodings[info.encoding] = encodingIndex;
                                }
                                else {
                                        canDo = false; // case 3)
@@ -10270,72 +10178,52 @@ unsigned int UnwindInfoAtom<A>::makeCompressedSecondLevelPage(const std::vector<
                        ++entryCount;
                }
                // check room for entry
-               if ( (pageSpecificEncodings.size()+entryCount) >= space4 ) {
+               if ( (pageSpecificEncodings.size()+entryCount) > space4 ) {
                        canDo = false; // case 1)
                        --entryCount;
                        if (log) fprintf(stderr, "end of compressed page with %u entries because full\n", entryCount);
                }
-               //if (log) fprintf(stderr, "space4=%d, pageSpecificEncodings.size()=%ld, entryCount=%d\n", space4, pageSpecificEncodings.size(), entryCount);
        }
        
-       // check for cases where it would be better to use a regular (non-compressed) page
-       const unsigned int compressPageUsed = sizeof(unwind_info_compressed_second_level_page_header) 
+       // sanity check that we fit more entries into this page than a regular page would hold
+       const int compressPageUsed = sizeof(unwind_info_compressed_second_level_page_header) 
                                                                + pageSpecificEncodings.size()*sizeof(uint32_t)
                                                                + entryCount*sizeof(uint32_t);
-       if ( (compressPageUsed < (pageSize-4) && (index >= 0) ) ) {
-               const int regularEntriesPerPage = (pageSize - sizeof(unwind_info_regular_second_level_page_header))/sizeof(unwind_info_regular_second_level_entry);
-               if ( entryCount < regularEntriesPerPage ) {
-                       return makeRegularSecondLevelPage(uniqueInfos, pageSize, endIndex, pageEnd);
-               }
+       const int regularEntriesPerPage = (compressPageUsed - sizeof(unwind_info_regular_second_level_page_header))/sizeof(unwind_info_regular_second_level_entry);
+       if ( entryCount < regularEntriesPerPage ) {
+               return makeRegularSecondLevelPage(uniqueInfos, pageSize, endIndex, pageEnd);
        }
-       
-       // check if we need any padding because adding another entry would take 8 bytes but only have room for 4
-       uint32_t pad = 0;
-       if ( compressPageUsed == (pageSize-4) )
-               pad = 4;
-       
+
        // second pass fills in page 
-       uint8_t* pageStart = pageEnd - compressPageUsed - pad;
+       uint8_t* pageStart = pageEnd - compressPageUsed;
        macho_unwind_info_compressed_second_level_page_header<P>* page = (macho_unwind_info_compressed_second_level_page_header<P>*)pageStart;
        page->set_kind(UNWIND_SECOND_LEVEL_COMPRESSED);
        page->set_entryPageOffset(sizeof(macho_unwind_info_compressed_second_level_page_header<P>));
        page->set_entryCount(entryCount);
        page->set_encodingsPageOffset(page->entryPageOffset()+entryCount*sizeof(uint32_t));
        page->set_encodingsCount(pageSpecificEncodings.size());
-       uint32_t* const encodingsArray = (uint32_t*)&pageStart[page->encodingsPageOffset()];
        // fill in entry table
        uint32_t* const entiresArray = (uint32_t*)&pageStart[page->entryPageOffset()];
        ObjectFile::Atom* firstFunc = uniqueInfos[endIndex-entryCount].func;
        for(unsigned int i=endIndex-entryCount; i < endIndex; ++i) {
                const Info& info = uniqueInfos[i];
                uint8_t encodingIndex;
-               if ( encodingMeansUseDwarf(info.encoding) ) {
-                       // dwarf entries are always in page specific encodings
-                       encodingIndex = pageSpecificEncodings[info.encoding+i];
-               }
-               else {
-                       std::map<uint32_t, unsigned int>::const_iterator pos = commonEncodings.find(info.encoding);
-                       if ( pos != commonEncodings.end() ) 
-                               encodingIndex = pos->second;
-                       else 
-                               encodingIndex = pageSpecificEncodings[info.encoding];
-               }
+               std::map<uint32_t, unsigned int>::const_iterator pos = commonEncodings.find(info.encoding);
+               if ( pos != commonEncodings.end() ) 
+                       encodingIndex = pos->second;
+               else 
+                       encodingIndex = pageSpecificEncodings[info.encoding];
                uint32_t entryIndex = i - endIndex + entryCount;
                A::P::E::set32(entiresArray[entryIndex], encodingIndex << 24);
-               CompressedFixUp                 funcStartFixUp;
-               funcStartFixUp.contentPointer = (uint8_t*)(&entiresArray[entryIndex]);
-               funcStartFixUp.func = info.func;
-               funcStartFixUp.fromFunc = firstFunc;
-               fCompressedFixUps.push_back(funcStartFixUp);
-               if ( encodingMeansUseDwarf(info.encoding) ) {
-                       CompressedEncodingFixUp dwarfStartFixup;
-                       dwarfStartFixup.contentPointer = (uint8_t*)(&encodingsArray[encodingIndex-commonEncodings.size()]); 
-                       dwarfStartFixup.fde = info.fde;
-                       fCompressedEncodingFixUps.push_back(dwarfStartFixup);
-               }
+               CompressedFixUp fixup;
+               fixup.contentPointer = (uint8_t*)(&entiresArray[entryIndex]);
+               fixup.func = info.func;
+               fixup.fromFunc = firstFunc;
+               fCompressedFixUps.push_back(fixup);
        }
        // fill in encodings table
-       for(std::map<uint32_t, unsigned int>::const_iterator it = pageSpecificEncodings.begin(); it != pageSpecificEncodings.end(); ++it) {
+       uint32_t* const encodingsArray = (uint32_t*)&pageStart[page->encodingsPageOffset()];
+       for(std::map<uint32_t, unsigned int>::iterator it = pageSpecificEncodings.begin(); it != pageSpecificEncodings.end(); ++it) {
                A::P::E::set32(encodingsArray[it->second-commonEncodings.size()], it->first);
        }
        
@@ -10383,8 +10271,8 @@ void UnwindInfoAtom<A>::generate()
                fPagesSize = 0;
                if ( fPagesContentForDelete == NULL )
                        throw "could not allocate space for compact unwind info";
-               ObjectFile::Atom* secondLevelFirstFuncs[pageCount*3];
-               uint8_t* secondLevelPagesStarts[pageCount*3];
+               ObjectFile::Atom* secondLevelFirstFuncs[pageCount];
+               uint8_t* secondLevelPagesStarts[pageCount];
                
                // make last second level page smaller so that all other second level pages can be page aligned
                uint32_t maxLastPageSize = unwindSectionInfo->fFileOffset % 4096;
@@ -10478,18 +10366,12 @@ void UnwindInfoAtom<A>::generate()
                for (typename std::vector<RegFixUp>::iterator it = fRegFixUps.begin(); it != fRegFixUps.end(); ++it) {
                        uint32_t offset = (it->contentPointer - fPagesContent) + fHeaderSize;
                        fReferences.push_back(new WriterReference<A>(offset, A::kImageOffset32, it->func));
-                       if ( it->fde != NULL )
-                               fReferences.push_back(new WriterReference<A>(offset+4, A::kSectionOffset24, it->fde));
                }
                // make references for compressed second level entries
                for (typename std::vector<CompressedFixUp>::iterator it = fCompressedFixUps.begin(); it != fCompressedFixUps.end(); ++it) {
                        uint32_t offset = (it->contentPointer - fPagesContent) + fHeaderSize;
                        fReferences.push_back(new WriterReference<A>(offset, A::kPointerDiff24, it->func, 0, it->fromFunc, 0));
                }
-               for (typename std::vector<CompressedEncodingFixUp>::iterator it = fCompressedEncodingFixUps.begin(); it != fCompressedEncodingFixUps.end(); ++it) {
-                       uint32_t offset = (it->contentPointer - fPagesContent) + fHeaderSize;
-                       fReferences.push_back(new WriterReference<A>(offset, A::kSectionOffset24, it->fde));
-               }
                                
                // update section record with new size
                unwindSectionInfo->fSize = this->getSize();
@@ -11236,7 +11118,7 @@ void CompressedBindingInfoLinkEditAtom<A>::encode()
        std::vector<binding_tmp> mid;
        const SegmentInfo* currentSegment = NULL;
        unsigned int segIndex = 0;
-       int ordinal = 0x80000000;
+       int ordinal = 0;
        const char* symbolName = NULL;
        uint8_t type = 0;
        uint64_t address = (uint64_t)(-1);
@@ -11340,12 +11222,10 @@ void CompressedBindingInfoLinkEditAtom<A>::encode()
                        p->opcode = BIND_OPCODE_DO_BIND_ADD_ADDR_IMM_SCALED;
                        p->operand1 = p->operand1/sizeof(pint_t);
                }
-               else if ( (p->opcode == BIND_OPCODE_SET_DYLIB_ORDINAL_ULEB) && (p->operand1 <= 15) ) {
-                       p->opcode = BIND_OPCODE_SET_DYLIB_ORDINAL_IMM;
-               }
        }       
        dst->opcode = BIND_OPCODE_DONE;
 
+
        // convert to compressed encoding
        const static bool log = false;
        fEncodedData.reserve(info.size()*2);
index 8b9a2d3ac4679e299bea3f9b4383f266e2cc42e6..87396fbeed1df24af9ef82f19f023de122ba7340 100644 (file)
@@ -66,11 +66,12 @@ public:
                                                                                fForFinalLinkedImage(false), fNoEHLabels(false), fForStatic(false), fForDyld(false), fMakeTentativeDefinitionsReal(false), 
                                                                                fWhyLoad(false), fRootSafe(false), fSetuidSafe(false),fDebugInfoStripping(kDebugInfoFull),
                                                                                fImplicitlyLinkPublicDylibs(true),
-                                                                               fAddCompactUnwindEncoding(true), 
+                                                                               fAddCompactUnwindEncoding(false), 
                                                                                fWarnCompactUnwind(false),
                                                                                fRemoveDwarfUnwindIfCompactExists(false),
                                                                                fMakeCompressedDyldInfo(false),
                                                                                fAutoOrderInitializers(true),
+                                                                               fOptimizeZeroFill(true),
                                                                                fLogObjectFiles(false), fLogAllFiles(false),
                                                                                fTraceDylibs(false), fTraceIndirectDylibs(false), fTraceArchives(false), 
                                                                                fTraceOutputFile(NULL), fMacVersionMin(kMinMacVersionUnset), fIPhoneVersionMin(kMinIPhoneVersionUnset) {}
@@ -102,6 +103,7 @@ public:
        bool                                    fRemoveDwarfUnwindIfCompactExists;
        bool                                    fMakeCompressedDyldInfo;
        bool                                    fAutoOrderInitializers;
+       bool                                    fOptimizeZeroFill;
        bool                                    fLogObjectFiles;
        bool                                    fLogAllFiles;
        bool                                    fTraceDylibs;
@@ -280,7 +282,7 @@ class Atom
 public:
        enum Scope { scopeTranslationUnit, scopeLinkageUnit, scopeGlobal };
        enum DefinitionKind { kRegularDefinition, kWeakDefinition, kTentativeDefinition, kExternalDefinition, kExternalWeakDefinition, kAbsoluteSymbol };
-       enum ContentType { kUnclassifiedType, kCStringType, kCFIType, kLSDAType };
+       enum ContentType { kUnclassifiedType, kCStringType, kCFIType, kLSDAType, kSectionStart, kSectionEnd };
        enum SymbolTableInclusion { kSymbolTableNotIn, kSymbolTableIn, kSymbolTableInAndNeverStrip, kSymbolTableInAsAbsolute };
 
        virtual Reader*                                                 getFile() const = 0;
@@ -308,7 +310,6 @@ public:
        virtual UnwindInfo::iterator                    beginUnwind() { return NULL; }
        virtual UnwindInfo::iterator                    endUnwind() { return NULL; }
        virtual Reference*                                              getLSDA() { return NULL; }
-       virtual Reference*                                              getFDE() { return NULL; }
        virtual Atom*                                                   getPersonalityPointer() { return NULL; }
 
                        uint64_t                                                getSectionOffset() const        { return fSectionOffset; }
index 03969cdc089aa672d92f2ab14d38f1c17a56f5bc..58bb74cdc1a3bee6d9797ef5c65e7ba91a545b5e 100644 (file)
@@ -101,7 +101,8 @@ Options::Options(int argc, const char* argv[])
          fSharedRegionEligible(false), fPrintOrderFileStatistics(false),  
          fReadOnlyx86Stubs(false), fPositionIndependentExecutable(false), fMaxMinimumHeaderPad(false),
          fDeadStripDylibs(false),  fAllowTextRelocs(false), fWarnTextRelocs(false), 
-         fUsingLazyDylibLinking(false), fEncryptable(true), fOrderData(true), fMarkDeadStrippableDylib(false),
+         fUsingLazyDylibLinking(false), fEncryptable(true), 
+         fOrderData(true), fMarkDeadStrippableDylib(false),
          fMakeClassicDyldInfo(true), fMakeCompressedDyldInfo(true), fAllowCpuSubtypeMismatches(false), fSaveTempFiles(false)
 {
        this->checkForClassic(argc, argv);
@@ -2510,6 +2511,9 @@ void Options::parse(int argc, const char* argv[])
                        else if ( strcmp(arg, "-allow_sub_type_mismatches") == 0 ) {
                                fAllowCpuSubtypeMismatches = true;
                        }
+                       else if ( strcmp(arg, "-no_zero_fill_sections") == 0 ) {
+                               fReaderOptions.fOptimizeZeroFill = false;
+                       }
                        else {
                                throwf("unknown option: %s", arg);
                        }
@@ -2776,6 +2780,7 @@ void Options::parsePostCommandLineEnvironmentSettings()
        // allow build system to force on -warn_commons
        if ( getenv("LD_WARN_COMMONS") != NULL )
                fWarnCommons = true;
+               
 }
 
 void Options::reconfigureDefaults()
@@ -3064,7 +3069,7 @@ void Options::reconfigureDefaults()
                fEncryptable = false;
        if ( fArchitecture != CPU_TYPE_ARM )
                fEncryptable = false;
-       
+
        // don't move inits in dyld because dyld wants certain
        // entries point at stable locations at the start of __text
        if ( fOutputKind == Options::kDyld ) 
@@ -3125,6 +3130,11 @@ void Options::reconfigureDefaults()
        // only ARM enforces that cpu-sub-types must match
        if ( fArchitecture != CPU_TYPE_ARM )
                fAllowCpuSubtypeMismatches = true;
+               
+       // only final linked images can not optimize zero fill sections
+       if ( fOutputKind == Options::kObjectFile )
+               fReaderOptions.fOptimizeZeroFill = true;
+               
 }
 
 void Options::checkIllegalOptionCombinations()
@@ -3464,6 +3474,12 @@ void Options::checkIllegalOptionCombinations()
                }
        }
        
+       // -force_cpusubtype_ALL is not supported for ARM
+       if ( fForceSubtypeAll ) {
+               if ( fArchitecture == CPU_TYPE_ARM ) {
+                       warning("-force_cpusubtype_ALL will become unsupported for ARM architectures");
+               }
+       }
 }      
 
 
index ded2a19adfda871053e788abd05cfd1ccd2f1c50..6d93c0b9359f1b3c4d578faa08374f1209b4862f 100644 (file)
@@ -1,5 +1,5 @@
 /* -*- mode: C++; c-basic-offset: 4; tab-width: 4 -*-*
- * Copyright (c) 2005-2009 Apple Inc. All rights reserved.
+ * Copyright (c) 2005-2007 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -86,11 +86,11 @@ public:
 class Section : public ObjectFile::Section
 {
 public:
-       static Section* find(const char* sectionName, const char* segmentName, bool zeroFill, bool createIfNeeded=true);
+       static Section* find(const char* sectionName, const char* segmentName, bool zeroFill, bool untrustedZeroFill, bool createIfNeeded=true);
        static void             assignIndexes();
        const char*             getName() { return fSectionName; }
 private:
-                                       Section(const char* sectionName, const char* segmentName, bool zeroFill);
+                                       Section(const char* sectionName, const char* segmentName, bool zeroFill, bool untrustedZeroFill);
 
        struct Sorter {
                static int      segmentOrdinal(const char* segName);
@@ -101,9 +101,10 @@ private:
        typedef __gnu_cxx::hash_map<const char*, class Section*, __gnu_cxx::hash<const char*>, CStringEquals> NameToSection;
        //typedef std::map<const char*, class Section*, CStringComparor> NameToSection;
 
-       char                    fSectionName[18];
-       char                    fSegmentName[18];
+       const char*             fSectionName;
+       const char*             fSegmentName;
        bool                    fZeroFill;
+       bool                    fUntrustedZeroFill;
 
        static NameToSection                    fgMapping;
        static std::vector<Section*>    fgSections;
@@ -114,12 +115,9 @@ Section::NameToSection     Section::fgMapping;
 std::vector<Section*>  Section::fgSections;
 Section::NameToOrdinal Section::fgSegmentDiscoverOrder;
 
-Section::Section(const char* sectionName, const char* segmentName, bool zeroFill)
- : fZeroFill(zeroFill)
+Section::Section(const char* sectionName, const char* segmentName, bool zeroFill, bool untrustedZeroFill)
+ : fSectionName(sectionName), fSegmentName(segmentName), fZeroFill(zeroFill), fUntrustedZeroFill(untrustedZeroFill)
 {
-       strlcpy(fSectionName, sectionName, sizeof(fSectionName));
-       strlcpy(fSegmentName, segmentName, sizeof(fSegmentName));
-       
        this->fIndex = fgSections.size() + 20;  // room for 20 standard sections
        // special placement of some sections
        if ( strcmp(segmentName, "__TEXT") == 0 ) {
@@ -179,12 +177,17 @@ Section::Section(const char* sectionName, const char* segmentName, bool zeroFill
        //fprintf(stderr, "new Section(%s, %s) => %p, %u\n", sectionName, segmentName, this, this->getIndex());
 }
 
-Section* Section::find(const char* sectionName, const char* segmentName, bool zeroFill, bool createIfNeeded)
+Section* Section::find(const char* sectionName, const char* segmentName, bool zeroFill, bool untrustedZeroFill, bool createIfNeeded)
 {
        NameToSection::iterator pos = fgMapping.find(sectionName);
        if ( pos != fgMapping.end() ) {
-               if ( strcmp(pos->second->fSegmentName, segmentName) == 0 )
+               if ( strcmp(pos->second->fSegmentName, segmentName) == 0 ) {
+                       if ( !untrustedZeroFill && pos->second->fUntrustedZeroFill ) {
+                               pos->second->fZeroFill = zeroFill;
+                               pos->second->fUntrustedZeroFill = false;
+                       }
                        return pos->second;
+               }
                // otherwise same section name is used in different segments, look slow way
                for (std::vector<Section*>::iterator it=fgSections.begin(); it != fgSections.end(); it++) {
                        if ( (strcmp((*it)->fSectionName, sectionName) == 0) && (strcmp((*it)->fSegmentName, segmentName) == 0) )
@@ -196,13 +199,13 @@ Section* Section::find(const char* sectionName, const char* segmentName, bool ze
                return NULL;
        
        // does not exist, so make a new one
-       Section* sect = new Section(sectionName, segmentName, zeroFill);
+       Section* sect = new Section(sectionName, segmentName, zeroFill, untrustedZeroFill);
        fgMapping[sectionName] = sect;
        fgSections.push_back(sect);
 
        if ( (strcmp(sectionName, "__text") == 0) && (strcmp(segmentName, "__TEXT") == 0) ) {
                // special case __StaticInit to be right after __text
-               find("__StaticInit", "__TEXT", false);
+               find("__StaticInit", "__TEXT", false, true);
        }
 
        // remember segment discovery order
@@ -658,7 +661,7 @@ void Linker::optimize()
                for(std::vector<class ObjectFile::Atom*>::iterator itr = fAllAtoms.begin(); itr != fAllAtoms.end(); ++itr) {
                        ObjectFile::Atom *atom = *itr;
                        if ( atom->getSection() == NULL )
-                               atom->setSection(Section::find(atom->getSectionName(), atom->getSegment().getName(), atom->isZeroFill()));
+                               atom->setSection(Section::find(atom->getSectionName(), atom->getSegment().getName(), atom->isZeroFill(), true));
                }
 
                // resolve new undefines
@@ -871,8 +874,17 @@ inline void Linker::addAtom(ObjectFile::Atom& atom)
        }
 
        // record section orders so output file can have same order
-       if (atom.getSectionName())
-               atom.setSection(Section::find(atom.getSectionName(), atom.getSegment().getName(), atom.isZeroFill()));
+       if (atom.getSectionName()) {
+               bool untrusted = false;
+               switch ( atom.getContentType() ) {
+                       case ObjectFile::Atom::kSectionStart:
+                       case ObjectFile::Atom::kSectionEnd:
+                               untrusted = true;
+                       default:
+                               break;
+               }
+               atom.setSection(Section::find(atom.getSectionName(), atom.getSegment().getName(), atom.isZeroFill(), untrusted));
+       }
 }
 
 
@@ -2213,7 +2225,7 @@ void Linker::tweakLayout()
                        throwf("total output size exceeds 2GB (%lldMB)", (fTotalSize-fTotalZeroFillSize)/(1024*1024));          
 
                // move very large (>1MB) zero fill atoms to a new section at very end of __DATA segment
-               Section* hugeZeroFills = Section::find("__huge", "__DATA", true);
+               Section* hugeZeroFills = Section::find("__huge", "__DATA", true, true);
                for (std::vector<ObjectFile::Atom*>::iterator it=fAllAtoms.begin(); it != fAllAtoms.end(); it++) {
                        ObjectFile::Atom* atom = *it;
                        if ( atom->isZeroFill() && (atom->getSize() > 1024*1024) && (strcmp(atom->getSegment().getName(), "__DATA") == 0) )
@@ -2232,7 +2244,7 @@ void Linker::tweakLayout()
                }
                
                // move all functions pointed to by __mod_init_func section to front of __text
-               Section* initSection = Section::find("__mod_init_func", "__DATA", false, false);
+               Section* initSection = Section::find("__mod_init_func", "__DATA", false, true, false);
                if ( initSection != NULL ) {
                        for (std::vector<ObjectFile::Atom*>::iterator it=fAllAtoms.begin(); it != fAllAtoms.end(); ++it) {
                                if ( (*it)->getSection() == initSection ) {
@@ -2263,7 +2275,7 @@ void Linker::tweakLayout()
                                break;
                }
                const bool hasPreferredLoadAddress = (fOptions.baseAddress() != 0);
-               Section* dataSection = Section::find("__data", "__DATA", false, false);
+               Section* dataSection = Section::find("__data", "__DATA", false, true, false);
                if ( dataSection != NULL ) {
                        for (std::vector<ObjectFile::Atom*>::iterator it=fAllAtoms.begin(); it != fAllAtoms.end(); ++it) {
                                ObjectFile::Atom* dataAtom = *it;
@@ -3984,6 +3996,12 @@ bool Linker::AtomSorter::operator()(const ObjectFile::Atom* left, const ObjectFi
        unsigned int rightSectionIndex = right->getSection()->getIndex();
        if ( leftSectionIndex != rightSectionIndex)
                return (leftSectionIndex < rightSectionIndex);
+       
+       // magic section$start symbol always sorts to the start of its section
+       if ( left->getContentType() == ObjectFile::Atom::kSectionStart )
+               return true;
+       if ( right->getContentType() == ObjectFile::Atom::kSectionStart )
+               return false;
 
        // if a -order_file is specified, then sorting is altered to sort those symbols first
        if ( fOverriddenOrdinalMap != NULL ) {
@@ -4019,6 +4037,12 @@ bool Linker::AtomSorter::operator()(const ObjectFile::Atom* left, const ObjectFi
        if ( leftIsTent != rightIsTent )
                return rightIsTent; 
        
+       // magic section$end symbol always sorts to the end of its section
+       if ( left->getContentType() == ObjectFile::Atom::kSectionEnd )
+               return false;
+       if ( right->getContentType() == ObjectFile::Atom::kSectionEnd )
+               return true;
+
        // initializers are auto sorted to start of section
        if ( !fInitializerSet.empty() ) {
                bool leftFirst  = (fInitializerSet.count(left) != 0);
index 016fda3073efb66f3b320f33eb8263d962ed3ad4..4af50ffde46c07e1c1df11f5cb2e36d020132523 100644 (file)
@@ -722,7 +722,7 @@ void DyldInfoPrinter<A>::printBindingInfo()
        }
        else {
                printf("bind information:\n");
-               printf("segment section          address        type   weak  addend dylib            symbol\n");
+               printf("segment section          address        type     addend dylib            symbol\n");
                const uint8_t* p = (uint8_t*)fHeader + fInfo->bind_off();
                const uint8_t* end = &p[fInfo->bind_size()];
                
@@ -738,7 +738,6 @@ void DyldInfoPrinter<A>::printBindingInfo()
                pint_t segStartAddr = 0;
                const char* segName = "??";
                const char* typeName = "??";
-               const char* weak_import = "";
                bool done = false;
                while ( !done && (p < end) ) {
                        uint8_t immediate = *p & BIND_IMMEDIATE_MASK;
@@ -771,10 +770,6 @@ void DyldInfoPrinter<A>::printBindingInfo()
                                        while (*p != '\0')
                                                ++p;
                                        ++p;
-                                       if ( (immediate & BIND_SYMBOL_FLAGS_WEAK_IMPORT) != 0 )
-                                               weak_import = "weak";
-                                       else
-                                               weak_import = "";
                                        break;
                                case BIND_OPCODE_SET_TYPE_IMM:
                                        type = immediate;
@@ -793,22 +788,22 @@ void DyldInfoPrinter<A>::printBindingInfo()
                                        segOffset += read_uleb128(p, end);
                                        break;
                                case BIND_OPCODE_DO_BIND:
-                                       printf("%-7s %-16s 0x%08llX %10s %4s  %5lld %-16s %s\n", segName, sectionName(segIndex, segStartAddr+segOffset), segStartAddr+segOffset, typeName, weak_import, addend, fromDylib, symbolName );
+                                       printf("%-7s %-16s 0x%08llX %10s   %5lld %-16s %s\n", segName, sectionName(segIndex, segStartAddr+segOffset), segStartAddr+segOffset, typeName, addend, fromDylib, symbolName );
                                        segOffset += sizeof(pint_t);
                                        break;
                                case BIND_OPCODE_DO_BIND_ADD_ADDR_ULEB:
-                                       printf("%-7s %-16s 0x%08llX %10s %4s  %5lld %-16s %s\n", segName, sectionName(segIndex, segStartAddr+segOffset), segStartAddr+segOffset, typeName, weak_import, addend, fromDylib, symbolName );
+                                       printf("%-7s %-16s 0x%08llX %10s   %5lld %-16s %s\n", segName, sectionName(segIndex, segStartAddr+segOffset), segStartAddr+segOffset, typeName, addend, fromDylib, symbolName );
                                        segOffset += read_uleb128(p, end) + sizeof(pint_t);
                                        break;
                                case BIND_OPCODE_DO_BIND_ADD_ADDR_IMM_SCALED:
-                                       printf("%-7s %-16s 0x%08llX %10s %4s  %5lld %-16s %s\n", segName, sectionName(segIndex, segStartAddr+segOffset), segStartAddr+segOffset, typeName, weak_import, addend, fromDylib, symbolName );
+                                       printf("%-7s %-16s 0x%08llX %10s   %5lld %-16s %s\n", segName, sectionName(segIndex, segStartAddr+segOffset), segStartAddr+segOffset, typeName, addend, fromDylib, symbolName );
                                        segOffset += immediate*sizeof(pint_t) + sizeof(pint_t);
                                        break;
                                case BIND_OPCODE_DO_BIND_ULEB_TIMES_SKIPPING_ULEB:
                                        count = read_uleb128(p, end);
                                        skip = read_uleb128(p, end);
                                        for (uint32_t i=0; i < count; ++i) {
-                                               printf("%-7s %-16s 0x%08llX %10s %4s  %5lld %-16s %s\n", segName, sectionName(segIndex, segStartAddr+segOffset), segStartAddr+segOffset, typeName, weak_import, addend, fromDylib, symbolName );
+                                               printf("%-7s %-16s 0x%08llX %10s   %5lld %-16s %s\n", segName, sectionName(segIndex, segStartAddr+segOffset), segStartAddr+segOffset, typeName, addend, fromDylib, symbolName );
                                                segOffset += skip + sizeof(pint_t);
                                        }
                                        break;
index 098d93270ee0e43ff8978bf7926c09b80bb43088..d8d699dc1502c66665cc32945cfdec17a4cfb254 100644 (file)
@@ -83,7 +83,6 @@ private:
        void                                                                            getSymbolTableInfo();
        const char*                                                                     functionName(pint_t addr);
        static const char*                                                      archName();
-       static void                                                                     decode(uint32_t encoding, const uint8_t* funcStart, char* str);
                
        const char*                                                                     fPath;
        const macho_header<P>*                                          fHeader;
@@ -252,7 +251,7 @@ const char* UnwindPrinter<A>::functionName(pint_t addr)
                        }
                }
        }
-       return "--anonymous function--";
+       return "??";
 }
 
 
@@ -289,379 +288,8 @@ bool UnwindPrinter<A>::findUnwindSection()
        return false;
 }
        
-#define EXTRACT_BITS(value, mask) \
-       ( (value >> __builtin_ctz(mask)) & (((1 << __builtin_popcount(mask)))-1) )
 
 
-template <>
-void UnwindPrinter<x86_64>::decode(uint32_t encoding, const uint8_t* funcStart, char* str)
-{
-       *str = '\0';
-       switch ( encoding & UNWIND_X86_64_MODE_MASK ) {
-               case UNWIND_X86_64_MODE_RBP_FRAME:
-               {
-                       uint32_t savedRegistersOffset = EXTRACT_BITS(encoding, UNWIND_X86_64_RBP_FRAME_OFFSET);
-                       uint32_t savedRegistersLocations = EXTRACT_BITS(encoding, UNWIND_X86_64_RBP_FRAME_REGISTERS);
-                       if ( savedRegistersLocations == 0 ) {
-                               strcpy(str, "rbp frame, no saved registers");
-                       }
-                       else {
-                               sprintf(str, "rbp frame, at -%d:", savedRegistersOffset*8);
-                               bool needComma = false;
-                               for (int i=0; i < 5; ++i) {
-                                       if ( needComma ) 
-                                               strcat(str, ",");
-                                       else
-                                               needComma = true;
-                                       switch (savedRegistersLocations & 0x7) {
-                                               case UNWIND_X86_64_REG_NONE:
-                                                       strcat(str, "-");
-                                                       break;
-                                               case UNWIND_X86_64_REG_RBX:
-                                                       strcat(str, "rbx");
-                                                       break;
-                                               case UNWIND_X86_64_REG_R12:
-                                                       strcat(str, "r12");
-                                                       break;
-                                               case UNWIND_X86_64_REG_R13:
-                                                       strcat(str, "r13");
-                                                       break;
-                                               case UNWIND_X86_64_REG_R14:
-                                                       strcat(str, "r14");
-                                                       break;
-                                               case UNWIND_X86_64_REG_R15:
-                                                       strcat(str, "r15");
-                                                       break;
-                                               default:
-                                                       strcat(str, "r?");
-                                       }
-                                       savedRegistersLocations = (savedRegistersLocations >> 3);
-                                       if ( savedRegistersLocations == 0 )
-                                               break;
-                               }
-                       }
-               }
-               break;
-               case UNWIND_X86_64_MODE_STACK_IMMD:
-               case UNWIND_X86_64_MODE_STACK_IND:
-               {
-                       uint32_t stackSize = EXTRACT_BITS(encoding, UNWIND_X86_64_FRAMELESS_STACK_SIZE);
-                       uint32_t stackAdjust = EXTRACT_BITS(encoding, UNWIND_X86_64_FRAMELESS_STACK_ADJUST);
-                       uint32_t regCount = EXTRACT_BITS(encoding, UNWIND_X86_64_FRAMELESS_STACK_REG_COUNT);
-                       uint32_t permutation = EXTRACT_BITS(encoding, UNWIND_X86_64_FRAMELESS_STACK_REG_PERMUTATION);
-                       if ( (encoding & UNWIND_X86_64_MODE_MASK) == UNWIND_X86_64_MODE_STACK_IND ) {
-                               // stack size is encoded in subl $xxx,%esp instruction
-                               uint32_t subl = x86_64::P::E::get32(*((uint32_t*)(funcStart+stackSize)));
-                               sprintf(str, "stack size=0x%08X, ", subl + 8*stackAdjust);
-                       }
-                       else {
-                               sprintf(str, "stack size=%d, ", stackSize*8);
-                       }
-                       if ( regCount == 0 ) {
-                               strcat(str, "no registers saved");
-                       }
-                       else {
-                               int permunreg[6];
-                               switch ( regCount ) {
-                                       case 6:
-                                               permunreg[0] = permutation/120;
-                                               permutation -= (permunreg[0]*120);
-                                               permunreg[1] = permutation/24;
-                                               permutation -= (permunreg[1]*24);
-                                               permunreg[2] = permutation/6;
-                                               permutation -= (permunreg[2]*6);
-                                               permunreg[3] = permutation/2;
-                                               permutation -= (permunreg[3]*2);
-                                               permunreg[4] = permutation;
-                                               permunreg[5] = 0;
-                                               break;
-                                       case 5:
-                                               permunreg[0] = permutation/120;
-                                               permutation -= (permunreg[0]*120);
-                                               permunreg[1] = permutation/24;
-                                               permutation -= (permunreg[1]*24);
-                                               permunreg[2] = permutation/6;
-                                               permutation -= (permunreg[2]*6);
-                                               permunreg[3] = permutation/2;
-                                               permutation -= (permunreg[3]*2);
-                                               permunreg[4] = permutation;
-                                               break;
-                                       case 4:
-                                               permunreg[0] = permutation/60;
-                                               permutation -= (permunreg[0]*60);
-                                               permunreg[1] = permutation/12;
-                                               permutation -= (permunreg[1]*12);
-                                               permunreg[2] = permutation/3;
-                                               permutation -= (permunreg[2]*3);
-                                               permunreg[3] = permutation;
-                                               break;
-                                       case 3:
-                                               permunreg[0] = permutation/20;
-                                               permutation -= (permunreg[0]*20);
-                                               permunreg[1] = permutation/4;
-                                               permutation -= (permunreg[1]*4);
-                                               permunreg[2] = permutation;
-                                               break;
-                                       case 2:
-                                               permunreg[0] = permutation/5;
-                                               permutation -= (permunreg[0]*5);
-                                               permunreg[1] = permutation;
-                                               break;
-                                       case 1:
-                                               permunreg[0] = permutation;
-                                               break;
-                               }
-                               // renumber registers back to standard numbers
-                               int registers[6];
-                               bool used[7] = { false, false, false, false, false, false, false };
-                               for (int i=0; i < regCount; ++i) {
-                                       int renum = 0; 
-                                       for (int u=1; u < 7; ++u) {
-                                               if ( !used[u] ) {
-                                                       if ( renum == permunreg[i] ) {
-                                                               registers[i] = u;
-                                                               used[u] = true;
-                                                               break;
-                                                       }
-                                                       ++renum;
-                                               }
-                                       }
-                               }
-                               bool needComma = false;
-                               for (int i=0; i < regCount; ++i) {
-                                       if ( needComma ) 
-                                               strcat(str, ",");
-                                       else
-                                               needComma = true;
-                                       switch ( registers[i] ) {
-                                               case UNWIND_X86_64_REG_RBX:
-                                                       strcat(str, "rbx");
-                                                       break;
-                                               case UNWIND_X86_64_REG_R12:
-                                                       strcat(str, "r12");
-                                                       break;
-                                               case UNWIND_X86_64_REG_R13:
-                                                       strcat(str, "r13");
-                                                       break;
-                                               case UNWIND_X86_64_REG_R14:
-                                                       strcat(str, "r14");
-                                                       break;
-                                               case UNWIND_X86_64_REG_R15:
-                                                       strcat(str, "r15");
-                                                       break;
-                                               case UNWIND_X86_64_REG_RBP:
-                                                       strcat(str, "rbp");
-                                                       break;
-                                               default:
-                                                       strcat(str, "r??");
-                                       }
-                               }
-                       }
-               }
-               break;
-               case UNWIND_X86_64_MODE_DWARF:
-                       sprintf(str, "dwarf offset 0x%08X, ", encoding & UNWIND_X86_64_DWARF_SECTION_OFFSET);
-                       break;
-               default:
-                       if ( encoding == 0 )
-                               strcat(str, "no unwind information");
-                       else
-                               strcat(str, "tbd ");
-       }
-       if ( encoding & UNWIND_HAS_LSDA ) {
-               strcat(str, " LSDA");
-       }
-
-}
-
-template <>
-void UnwindPrinter<x86>::decode(uint32_t encoding, const uint8_t* funcStart, char* str)
-{
-       *str = '\0';
-       switch ( encoding & UNWIND_X86_MODE_MASK ) {
-               case UNWIND_X86_MODE_EBP_FRAME:
-               {
-                       uint32_t savedRegistersOffset = EXTRACT_BITS(encoding, UNWIND_X86_EBP_FRAME_OFFSET);
-                       uint32_t savedRegistersLocations = EXTRACT_BITS(encoding, UNWIND_X86_EBP_FRAME_REGISTERS);
-                       if ( savedRegistersLocations == 0 ) {
-                               strcpy(str, "ebp frame, no saved registers");
-                       }
-                       else {
-                               sprintf(str, "ebp frame, at -%d:", savedRegistersOffset*4);
-                               bool needComma = false;
-                               for (int i=0; i < 5; ++i) {
-                                       if ( needComma ) 
-                                               strcat(str, ",");
-                                       else
-                                               needComma = true;
-                                       switch (savedRegistersLocations & 0x7) {
-                                               case UNWIND_X86_REG_NONE:
-                                                       strcat(str, "-");
-                                                       break;
-                                               case UNWIND_X86_REG_EBX:
-                                                       strcat(str, "ebx");
-                                                       break;
-                                               case UNWIND_X86_REG_ECX:
-                                                       strcat(str, "ecx");
-                                                       break;
-                                               case UNWIND_X86_REG_EDX:
-                                                       strcat(str, "edx");
-                                                       break;
-                                               case UNWIND_X86_REG_EDI:
-                                                       strcat(str, "edi");
-                                                       break;
-                                               case UNWIND_X86_REG_ESI:
-                                                       strcat(str, "esi");
-                                                       break;
-                                               default:
-                                                       strcat(str, "e??");
-                                       }
-                                       savedRegistersLocations = (savedRegistersLocations >> 3);
-                                       if ( savedRegistersLocations == 0 )
-                                               break;
-                               }
-                       }
-               }
-               break;
-               case UNWIND_X86_MODE_STACK_IMMD:
-               case UNWIND_X86_MODE_STACK_IND:
-               {
-                       uint32_t stackSize = EXTRACT_BITS(encoding, UNWIND_X86_FRAMELESS_STACK_SIZE);
-                       uint32_t stackAdjust = EXTRACT_BITS(encoding, UNWIND_X86_FRAMELESS_STACK_ADJUST);
-                       uint32_t regCount = EXTRACT_BITS(encoding, UNWIND_X86_FRAMELESS_STACK_REG_COUNT);
-                       uint32_t permutation = EXTRACT_BITS(encoding, UNWIND_X86_FRAMELESS_STACK_REG_PERMUTATION);
-                       if ( (encoding & UNWIND_X86_MODE_MASK) == UNWIND_X86_MODE_STACK_IND ) {
-                               // stack size is encoded in subl $xxx,%esp instruction
-                               uint32_t subl = x86::P::E::get32(*((uint32_t*)(funcStart+stackSize)));
-                               sprintf(str, "stack size=0x%08X, ", subl+4*stackAdjust);
-                       }
-                       else {
-                               sprintf(str, "stack size=%d, ", stackSize*4);
-                       }
-                       if ( regCount == 0 ) {
-                               strcat(str, "no saved regs");
-                       }
-                       else {
-                               int permunreg[6];
-                               switch ( regCount ) {
-                                       case 6:
-                                               permunreg[0] = permutation/120;
-                                               permutation -= (permunreg[0]*120);
-                                               permunreg[1] = permutation/24;
-                                               permutation -= (permunreg[1]*24);
-                                               permunreg[2] = permutation/6;
-                                               permutation -= (permunreg[2]*6);
-                                               permunreg[3] = permutation/2;
-                                               permutation -= (permunreg[3]*2);
-                                               permunreg[4] = permutation;
-                                               permunreg[5] = 0;
-                                               break;
-                                       case 5:
-                                               permunreg[0] = permutation/120;
-                                               permutation -= (permunreg[0]*120);
-                                               permunreg[1] = permutation/24;
-                                               permutation -= (permunreg[1]*24);
-                                               permunreg[2] = permutation/6;
-                                               permutation -= (permunreg[2]*6);
-                                               permunreg[3] = permutation/2;
-                                               permutation -= (permunreg[3]*2);
-                                               permunreg[4] = permutation;
-                                               break;
-                                       case 4:
-                                               permunreg[0] = permutation/60;
-                                               permutation -= (permunreg[0]*60);
-                                               permunreg[1] = permutation/12;
-                                               permutation -= (permunreg[1]*12);
-                                               permunreg[2] = permutation/3;
-                                               permutation -= (permunreg[2]*3);
-                                               permunreg[3] = permutation;
-                                               break;
-                                       case 3:
-                                               permunreg[0] = permutation/20;
-                                               permutation -= (permunreg[0]*20);
-                                               permunreg[1] = permutation/4;
-                                               permutation -= (permunreg[1]*4);
-                                               permunreg[2] = permutation;
-                                               break;
-                                       case 2:
-                                               permunreg[0] = permutation/5;
-                                               permutation -= (permunreg[0]*5);
-                                               permunreg[1] = permutation;
-                                               break;
-                                       case 1:
-                                               permunreg[0] = permutation;
-                                               break;
-                               }
-                               // renumber registers back to standard numbers
-                               int registers[6];
-                               bool used[7] = { false, false, false, false, false, false, false };
-                               for (int i=0; i < regCount; ++i) {
-                                       int renum = 0; 
-                                       for (int u=1; u < 7; ++u) {
-                                               if ( !used[u] ) {
-                                                       if ( renum == permunreg[i] ) {
-                                                               registers[i] = u;
-                                                               used[u] = true;
-                                                               break;
-                                                       }
-                                                       ++renum;
-                                               }
-                                       }
-                               }
-                               bool needComma = false;
-                               for (int i=0; i < regCount; ++i) {
-                                       if ( needComma ) 
-                                               strcat(str, ",");
-                                       else
-                                               needComma = true;
-                                       switch ( registers[i] ) {
-                                               case UNWIND_X86_REG_EBX:
-                                                       strcat(str, "ebx");
-                                                       break;
-                                               case UNWIND_X86_REG_ECX:
-                                                       strcat(str, "ecx");
-                                                       break;
-                                               case UNWIND_X86_REG_EDX:
-                                                       strcat(str, "edx");
-                                                       break;
-                                               case UNWIND_X86_REG_EDI:
-                                                       strcat(str, "edi");
-                                                       break;
-                                               case UNWIND_X86_REG_ESI:
-                                                       strcat(str, "esi");
-                                                       break;
-                                               case UNWIND_X86_REG_EBP:
-                                                       strcat(str, "ebp");
-                                                       break;
-                                               default:
-                                                       strcat(str, "e??");
-                                       }
-                               }
-                       }
-               }
-               break;
-               case UNWIND_X86_MODE_DWARF:
-                       sprintf(str, "dwarf offset 0x%08X, ", encoding & UNWIND_X86_DWARF_SECTION_OFFSET);
-                       break;
-               default:
-                       if ( encoding == 0 )
-                               strcat(str, "no unwind information");
-                       else
-                               strcat(str, "tbd ");
-       }
-       if ( encoding & UNWIND_HAS_LSDA ) {
-               strcat(str, " LSDA");
-       }
-
-}
-
-
-template <typename A>
-void UnwindPrinter<A>::decode(uint32_t encoding, const uint8_t* funcStart, char* str)
-{
-       
-
-}
 
 template <typename A>
 void UnwindPrinter<A>::printUnwindSection()
@@ -681,7 +309,7 @@ void UnwindPrinter<A>::printUnwindSection()
        printf("\tcommon encodings: (count=%u)\n", sectionHeader->commonEncodingsArrayCount());
        const uint32_t* commonEncodings = (uint32_t*)&sectionContent[sectionHeader->commonEncodingsArraySectionOffset()];
        for (uint32_t i=0; i < sectionHeader->commonEncodingsArrayCount(); ++i) {
-               printf("\t\tencoding[%3u]=0x%08X\n", i, A::P::E::get32(commonEncodings[i]));
+               printf("\t\tencoding[%2u]=0x%08X\n", i, A::P::E::get32(commonEncodings[i]));
        }
        printf("\tpersonalities: (count=%u)\n", sectionHeader->personalityArrayCount());
        const uint32_t* personalityArray = (uint32_t*)&sectionContent[sectionHeader->personalityArraySectionOffset()];
@@ -715,10 +343,10 @@ void UnwindPrinter<A>::printUnwindSection()
                        printf("\t\tentryCount=0x%08X\n", page->entryCount());
                        const macho_unwind_info_regular_second_level_entry<P>* entry = (macho_unwind_info_regular_second_level_entry<P>*)((char*)page+page->entryPageOffset());
                        for (uint32_t j=0; j < page->entryCount(); ++j) {
-                               uint32_t funcOffset = entry[j].functionOffset();
                                if ( entry[j].encoding() & UNWIND_HAS_LSDA ) {
                                        // verify there is a corresponding entry in lsda table
                                        bool found = false;
+                                       uint32_t funcOffset = entry[j].functionOffset();
                                        for (uint32_t k=0; k < lsdaIndexArrayCount; ++k) {
                                                if ( lindex[k].functionOffset() == funcOffset ) {
                                                        found = true;
@@ -729,10 +357,8 @@ void UnwindPrinter<A>::printUnwindSection()
                                                fprintf(stderr, "MISSING LSDA entry for %s\n", functionName(funcOffset+fMachHeaderAddress));
                                        }
                                } 
-                               char encodingString[100];
-                               decode(entry[j].encoding(), ((const uint8_t*)fHeader)+funcOffset, encodingString);
-                               printf("\t\t\t[%3u] funcOffset=0x%08X, encoding=0x%08X (%-40s) %s\n", 
-                                       j, funcOffset, entry[j].encoding(), encodingString, functionName(funcOffset+fMachHeaderAddress));
+                               printf("\t\t\t[%3u] funcOffset=0x%08X, encoding=0x%08X  %s\n", 
+                                       j, entry[j].functionOffset(), entry[j].encoding(), functionName(entry[j].functionOffset()+fMachHeaderAddress));
                        }
                }
                else if ( page->kind() == UNWIND_SECOND_LEVEL_COMPRESSED ) {
@@ -752,9 +378,7 @@ void UnwindPrinter<A>::printUnwindSection()
                                        encoding =  A::P::E::get32(commonEncodings[encodingIndex]);
                                else
                                        encoding =  A::P::E::get32(encodings[encodingIndex-sectionHeader->commonEncodingsArrayCount()]);
-                               char encodingString[100];
                                uint32_t funcOff = UNWIND_INFO_COMPRESSED_ENTRY_FUNC_OFFSET(entries[j])+baseFunctionOffset;
-                               decode(encoding, ((const uint8_t*)fHeader)+funcOff, encodingString);
                                const char* name = functionName(funcOff+fMachHeaderAddress);
                                if ( encoding & UNWIND_HAS_LSDA ) {
                                        // verify there is a corresponding entry in lsda table
@@ -769,8 +393,8 @@ void UnwindPrinter<A>::printUnwindSection()
                                                fprintf(stderr, "MISSING LSDA entry for %s\n", name);
                                        }
                                } 
-                               printf("\t\t\t[%3u] funcOffset=0x%08X, encoding[%3u]=0x%08X (%-40s) %s\n", 
-                                       j, funcOff, encodingIndex, encoding, encodingString, name);
+                               printf("\t\t\t[%3u] funcOffset=0x%08X, encoding[%2u]=0x%08X   %s\n", 
+                                       j, funcOff, encodingIndex, encoding, name);
                        }                                       
                }
                else {
index fa969688a5b3fcbf370ca5545623234303b605cd..842ce77e079f159cdbf68b5bcf309e3229ac88a1 100755 (executable)
@@ -19,8 +19,6 @@ valid_archs="x86_64 armv6 ppc i386  "
 ../bin/make-recursive.pl clean > /dev/null
 
 mkdir /tmp/$$
-mkdir $BUILD_ROOT/lib
-ln -s /Developer/usr/lib/libLTO.dylib ${BUILD_ROOT}/lib/libLTO.dylib
 for arch in $all_archs
 do
        echo ""
diff --git a/unit-tests/test-cases/coalesce_weak_def_in_dylib/Makefile b/unit-tests/test-cases/coalesce_weak_def_in_dylib/Makefile
deleted file mode 100644 (file)
index 72f365b..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-##
-# Copyright (c) 2009 Apple Inc. All rights reserved.
-#
-# @APPLE_LICENSE_HEADER_START@
-#
-# This file contains Original Code and/or Modifications of Original Code
-# as defined in and that are subject to the Apple Public Source License
-# Version 2.0 (the 'License'). You may not use this file except in
-# compliance with the License. Please obtain a copy of the License at
-# http://www.opensource.apple.com/apsl/ and read it before using this
-# file.
-#
-# The Original Code and all software distributed under the License are
-# distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
-# EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
-# INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
-# Please see the License for the specific language governing rights and
-# limitations under the License.
-#
-# @APPLE_LICENSE_HEADER_END@
-##
-TESTROOT = ../..
-include ${TESTROOT}/include/common.makefile
-
-#
-# Test the if all symbols from a dylib are weak_import, that the whole dylib is weakly loaded
-#
-
-run: all-${ARCH}
-
-
-all-ppc:
-       ${PASS_IFF} true
-
-all-arm:
-       ${PASS_IFF} true
-       
-all-i386: all-real
-
-all-x86_64: all-real
-
-
-all-real:      
-       ${CC} ${CCFLAGS} -dynamiclib  foo.c -o libfoo.dylib 
-       ${FAIL_IF_BAD_MACHO} libfoo.dylib
-       
-       ${CC} ${CCFLAGS} main.c -o main libfoo.dylib 
-       dyldinfo -bind main | grep wfoo | ${FAIL_IF_EMPTY}
-       
-       ${PASS_IFF_GOOD_MACHO} main
-
-               
-clean:
-       rm -rf libfoo.dylib main
diff --git a/unit-tests/test-cases/coalesce_weak_def_in_dylib/foo.c b/unit-tests/test-cases/coalesce_weak_def_in_dylib/foo.c
deleted file mode 100644 (file)
index 1906d16..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-__attribute__((weak)) void wfoo() {}
-void foo() {}
diff --git a/unit-tests/test-cases/coalesce_weak_def_in_dylib/main.c b/unit-tests/test-cases/coalesce_weak_def_in_dylib/main.c
deleted file mode 100644 (file)
index afd696d..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-
-extern void foo();
-extern void wfoo();
-
-void* pfoo = &foo;
-void* pwfoo = &wfoo;
-
-int main (void)
-{
-       if (pfoo != &foo)
-               return 1;
-       if (pwfoo != &wfoo)
-               return 1;
-
-   return 0;
-}
-
diff --git a/unit-tests/test-cases/cstring-alt-segment/Makefile b/unit-tests/test-cases/cstring-alt-segment/Makefile
deleted file mode 100644 (file)
index 4e55304..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-##
-# Copyright (c) 2009 Apple Inc. All rights reserved.
-#
-# @APPLE_LICENSE_HEADER_START@
-# 
-# This file contains Original Code and/or Modifications of Original Code
-# as defined in and that are subject to the Apple Public Source License
-# Version 2.0 (the 'License'). You may not use this file except in
-# compliance with the License. Please obtain a copy of the License at
-# http://www.opensource.apple.com/apsl/ and read it before using this
-# file.
-# 
-# The Original Code and all software distributed under the License are
-# distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
-# EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
-# INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
-# Please see the License for the specific language governing rights and
-# limitations under the License.
-# 
-# @APPLE_LICENSE_HEADER_END@
-##
-TESTROOT = ../..
-include ${TESTROOT}/include/common.makefile
-
-#
-# Check that __cstring sections in other segments are not coalesced
-#<rdar://problem/6535736> ld coalesces C strings in different segments
-#
-
-run: all
-
-all:
-       ${CC} ${CCFLAGS} main.c custom.s -o main 
-       size -l main | grep __cstring | wc -l | grep 2 | ${FAIL_IF_EMPTY}
-       ${PASS_IFF_GOOD_MACHO} main
-
-clean:
-       rm main
diff --git a/unit-tests/test-cases/cstring-alt-segment/custom.s b/unit-tests/test-cases/cstring-alt-segment/custom.s
deleted file mode 100644 (file)
index 33705e5..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-       .section __MYSEG, __cstring, cstring_literals
-LC:            .ascii  "hello"
-
-
-
diff --git a/unit-tests/test-cases/cstring-alt-segment/main.c b/unit-tests/test-cases/cstring-alt-segment/main.c
deleted file mode 100644 (file)
index 8fe18db..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-int main()
-{
-       printf("hello");
-       return 0;
-}
index 0780b62e0fe8adda18d0328d5ab36056a5f2af7e..efed30681ad348925eb1ff187835dd4c8047bbf4 100644 (file)
@@ -1,6 +1,4 @@
 
-void func() {}
-
 const char kFoo[] = "foo";
 
 const char* kFoo2 = "hello";
diff --git a/unit-tests/test-cases/dead_strip-r_symbol_desc/Makefile b/unit-tests/test-cases/dead_strip-r_symbol_desc/Makefile
deleted file mode 100644 (file)
index e60513e..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-##
-# Copyright (c) 2009 Apple Inc. All rights reserved.
-#
-# @APPLE_LICENSE_HEADER_START@
-# 
-# This file contains Original Code and/or Modifications of Original Code
-# as defined in and that are subject to the Apple Public Source License
-# Version 2.0 (the 'License'). You may not use this file except in
-# compliance with the License. Please obtain a copy of the License at
-# http://www.opensource.apple.com/apsl/ and read it before using this
-# file.
-# 
-# The Original Code and all software distributed under the License are
-# distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
-# EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
-# INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
-# Please see the License for the specific language governing rights and
-# limitations under the License.
-# 
-# @APPLE_LICENSE_HEADER_END@
-##
-TESTROOT = ../..
-include ${TESTROOT}/include/common.makefile
-
-#
-# Test that N_NO_DEAD_STRIP bit survives ld -r
-#
-
-run: all
-
-all:
-       ${CC} ${CCFLAGS} main.c -c -o main.o
-       nm -m main.o | grep _bar | grep "no dead strip" | ${FAIL_IF_EMPTY}
-       nm -m main.o | grep _foo | grep "no dead strip" | ${FAIL_IF_EMPTY}
-       ${LD} -r main.o -o main2.o
-       nm -m main2.o | grep _bar | grep "no dead strip" | ${FAIL_IF_EMPTY}
-       nm -m main2.o | grep _foo | grep "no dead strip" | ${FAIL_IF_EMPTY}
-       ${CC} main2.o -o main 
-       nm -m main | grep _bar | grep "no dead strip" | ${PASS_IFF_EMPTY}
-
-clean:
-       rm -rf main.o main2.o main
diff --git a/unit-tests/test-cases/dead_strip-r_symbol_desc/main.c b/unit-tests/test-cases/dead_strip-r_symbol_desc/main.c
deleted file mode 100644 (file)
index 7e206e5..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/* -*- mode: C++; c-basic-offset: 4; tab-width: 4 -*- 
- *
- * Copyright (c) 2009 Apple Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- * 
- * This file contains Original Code and/or Modifications of Original Code
- * as defined in and that are subject to the Apple Public Source License
- * Version 2.0 (the 'License'). You may not use this file except in
- * compliance with the License. Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this
- * file.
- * 
- * The Original Code and all software distributed under the License are
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
- * Please see the License for the specific language governing rights and
- * limitations under the License.
- * 
- * @APPLE_LICENSE_HEADER_END@
- */
-
-
-__attribute__((used))  static void foo()
-{
-}
-
-
-__attribute__((used))  void bar()
-{
-}
-
-
-int main()
-{
-       foo();
-       bar();
-       return 0;
-}
diff --git a/unit-tests/test-cases/dead_strip-weak-coalesce/Makefile b/unit-tests/test-cases/dead_strip-weak-coalesce/Makefile
deleted file mode 100644 (file)
index 45886c0..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-##
-# Copyright (c) 2009 Apple Inc. All rights reserved.
-#
-# @APPLE_LICENSE_HEADER_START@
-# 
-# This file contains Original Code and/or Modifications of Original Code
-# as defined in and that are subject to the Apple Public Source License
-# Version 2.0 (the 'License'). You may not use this file except in
-# compliance with the License. Please obtain a copy of the License at
-# http://www.opensource.apple.com/apsl/ and read it before using this
-# file.
-# 
-# The Original Code and all software distributed under the License are
-# distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
-# EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
-# INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
-# Please see the License for the specific language governing rights and
-# limitations under the License.
-# 
-# @APPLE_LICENSE_HEADER_END@
-##
-TESTROOT = ../..
-include ${TESTROOT}/include/common.makefile
-
-#
-# Check that symbols in no-dead-strip sections can be coalesced.
-# <rdar://problem/6578360> -dead_strip inhibits weak coalescing in no_dead_strip section
-#
-
-run: all
-
-all:
-       ${CC} ${CCFLAGS} baz.c -c -o baz.o
-       libtool -static baz.o -o libbaz.a
-       ${CC} ${CCFLAGS} main.c foo.c libbaz.a -dead_strip -o main
-       nm -j main | grep _hidden | wc -l | grep 1 | ${FAIL_IF_EMPTY}
-       ${PASS_IFF_GOOD_MACHO} main
-
-clean:
-       rm -rf main baz.o libbaz.a
diff --git a/unit-tests/test-cases/dead_strip-weak-coalesce/baz.c b/unit-tests/test-cases/dead_strip-weak-coalesce/baz.c
deleted file mode 100644 (file)
index 7d76bdd..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-void baz()
-{
-}
-
-
-#include "foo.c"
-
diff --git a/unit-tests/test-cases/dead_strip-weak-coalesce/foo.c b/unit-tests/test-cases/dead_strip-weak-coalesce/foo.c
deleted file mode 100644 (file)
index 4cd4cfb..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-
-// function can be coalesced and should not be dead stripped
-void __attribute__ ((weak, section ("__TEXT,__text_no_strip,regular,no_dead_strip"))) foo()
-{
-
-}
-
-
-// function should not be exported, can be coalesced, and should not be dead stripped
-void __attribute__ ((weak, visibility("hidden"), section ("__TEXT,__text_no_strip,regular,no_dead_strip"))) hidden()
-{
-
-}
-
-// bar should be dead stripped
-void __attribute__ ((weak, section ("__DATA,__text2"))) bar()
-{
-
-}
-
-__attribute__((constructor)) static void init() 
-{
-       foo();
-       hidden();
-}
diff --git a/unit-tests/test-cases/dead_strip-weak-coalesce/main.c b/unit-tests/test-cases/dead_strip-weak-coalesce/main.c
deleted file mode 100644 (file)
index e4c564c..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-
-// baz is in a lazily loaded archive
-extern void baz();
-
-int main()
-{
-       baz();
-       return 0;
-}
-
-
-#include "foo.c"
-
index 27cd1806b179e4d57edb90a7d8bbddd3bf869a25..8ce50d66ceeddda0bdf9d77b7cbc6bd42241a5f3 100644 (file)
@@ -43,7 +43,7 @@ all:
        ${LD} -r foo.no.o bar.no.o baz.no.o -o foobarbaz.no.o 
        ${OBJECTDUMP} -no_content -no_sort foobarbaz.o > foobarbaz.dump
        ${OBJECTDUMP} -no_content -no_sort foobarbaz.no.o > foobarbaz.no.dump
-       ${FAIL_IF_ERROR} dwarfdump --eh-frame --verify foobarbaz.no.o >/dev/null
+       ${FAIL_IF_ERROR} dwarfdump --eh-frame --verify >/dev/null
        ${PASS_IFF_SUCCESS} diff foobarbaz.dump foobarbaz.no.dump 
  
 
index 7e8c6e1e8057f713d422c1f9bd0dab167b7d37a9..bb679088c7af9d5ae867a6cf20b3bd6671e97a25 100644 (file)
@@ -33,8 +33,8 @@ include ${TESTROOT}/include/common.makefile
 run: all
 
 all:
-       ${CXX} ${CXXFLAGS} main.cxx foo.cxx bar.cxx -o main -dead_strip
-       nm -s __TEXT __text -nj main | grep -v dyld_stub_binding_helper | c++filt  > actual-order.txt
+       ${CXX} ${CXXFLAGS} main.cxx foo.cxx bar.cxx -o main
+       nm -s __TEXT __text -nj main | c++filt  > actual-order.txt
        ${PASS_IFF} diff actual-order.txt expected-order.txt
        
 
index 9a303d341db2dffe3cffe466e83b35299893c373..1de60f3ab0e4a03688b221ab54e0cd9e3e8041db 100644 (file)
@@ -8,6 +8,8 @@ Bar::Bar()
 __static_initialization_and_destruction_0(int, int)
 global constructors keyed to b1
 start
+dyld_stub_binding_helper
+__dyld_func_lookup
 _main
 M::~M()
 Foo::~Foo()
index d233171a6b4087fee3e7d83c834f115b8ac4edac..6a318b343a2b2a5885a5bee1ae5582f2c005f260 100644 (file)
@@ -23,6 +23,7 @@ all:
        nm -nm mykext | grep '(undefined) external _extern_global' | ${FAIL_IF_EMPTY}
        nm -nm mykext | grep '(__DATA,__data) external _my_global' | ${FAIL_IF_EMPTY}
        otool -rv mykext | grep '_extern_global' | ${FAIL_IF_EMPTY}
+       otool -rv mykext | grep '_OSRuntimeFinalizeCPP' | ${FAIL_IF_EMPTY}
        ${PASS_IFF} true
 
 clean:
diff --git a/unit-tests/test-cases/label-on-end-of-section/Makefile b/unit-tests/test-cases/label-on-end-of-section/Makefile
new file mode 100644 (file)
index 0000000..a6f1537
--- /dev/null
@@ -0,0 +1,37 @@
+##
+# Copyright (c) 2009 Apple Inc. All rights reserved.
+#
+# @APPLE_LICENSE_HEADER_START@
+# 
+# This file contains Original Code and/or Modifications of Original Code
+# as defined in and that are subject to the Apple Public Source License
+# Version 2.0 (the 'License'). You may not use this file except in
+# compliance with the License. Please obtain a copy of the License at
+# http://www.opensource.apple.com/apsl/ and read it before using this
+# file.
+# 
+# The Original Code and all software distributed under the License are
+# distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+# EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+# INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+# Please see the License for the specific language governing rights and
+# limitations under the License.
+# 
+# @APPLE_LICENSE_HEADER_END@
+##
+TESTROOT = ../..
+include ${TESTROOT}/include/common.makefile
+
+#
+# Check that ld handles labels at the end of a section
+#
+
+run: all
+
+all:
+       ${CC} ${CCFLAGS} foo.s -c -o foo.o
+       ${OBJECTDUMP} foo.o | grep "pointer to _end" | ${PASS_IFF_STDIN}
+
+clean:
+       rm  foo.o
diff --git a/unit-tests/test-cases/label-on-end-of-section/foo.s b/unit-tests/test-cases/label-on-end-of-section/foo.s
new file mode 100644 (file)
index 0000000..9544a76
--- /dev/null
@@ -0,0 +1,17 @@
+
+
+        .section __MY, __data
+_start:
+               .long 0
+_end:
+
+# _var is a pointer to the end of the __MY/__data section
+       .data
+_var:
+#if __x86_64__
+       .quad _end
+#else
+       .long _end
+#endif
+
+       .subsections_via_symbols
\ No newline at end of file
diff --git a/unit-tests/test-cases/no-data-bundle/Makefile b/unit-tests/test-cases/no-data-bundle/Makefile
deleted file mode 100644 (file)
index e1417fd..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-##
-# Copyright (c) 2009 Apple Inc. All rights reserved.
-#
-# @APPLE_LICENSE_HEADER_START@
-# 
-# This file contains Original Code and/or Modifications of Original Code
-# as defined in and that are subject to the Apple Public Source License
-# Version 2.0 (the 'License'). You may not use this file except in
-# compliance with the License. Please obtain a copy of the License at
-# http://www.opensource.apple.com/apsl/ and read it before using this
-# file.
-# 
-# The Original Code and all software distributed under the License are
-# distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
-# EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
-# INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
-# Please see the License for the specific language governing rights and
-# limitations under the License.
-# 
-# @APPLE_LICENSE_HEADER_END@
-##
-TESTROOT = ../..
-include ${TESTROOT}/include/common.makefile
-
-#
-# Check that a bundle built with no data links
-# <rdar://problem/6532377> gcc DejaGnu failure: building longcall/dylib library
-#
-
-run: all
-
-all:
-       ${CC} ${CCFLAGS} foo.c -bundle -o foo.bundle
-       ${PASS_IFF_GOOD_MACHO} foo.bundle
-
-clean:
-       rm foo.bundle
diff --git a/unit-tests/test-cases/no-data-bundle/foo.c b/unit-tests/test-cases/no-data-bundle/foo.c
deleted file mode 100644 (file)
index 5cb3e31..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <stdlib.h>
-
-void foo()
-{
-       rand();
-}
\ No newline at end of file
diff --git a/unit-tests/test-cases/no_zero_fill_sections/Makefile b/unit-tests/test-cases/no_zero_fill_sections/Makefile
new file mode 100644 (file)
index 0000000..8db13a7
--- /dev/null
@@ -0,0 +1,39 @@
+##
+# Copyright (c) 2005 Apple Computer, Inc. All rights reserved.
+#
+# @APPLE_LICENSE_HEADER_START@
+# 
+# This file contains Original Code and/or Modifications of Original Code
+# as defined in and that are subject to the Apple Public Source License
+# Version 2.0 (the 'License'). You may not use this file except in
+# compliance with the License. Please obtain a copy of the License at
+# http://www.opensource.apple.com/apsl/ and read it before using this
+# file.
+# 
+# The Original Code and all software distributed under the License are
+# distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+# EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+# INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+# Please see the License for the specific language governing rights and
+# limitations under the License.
+# 
+# @APPLE_LICENSE_HEADER_END@
+##
+TESTROOT = ../..
+include ${TESTROOT}/include/common.makefile
+
+#
+# Check that the -no_zero_fill_sections works
+#
+
+run: all
+
+all:
+       ${CC} ${CCFLAGS} main.c -o main -Wl,-no_zero_fill_sections 
+       size -l main | grep __bss | grep "offset 0" | ${FAIL_IF_STDIN}
+       size -l main | grep __common | grep "offset 0" | ${FAIL_IF_STDIN}
+       ${PASS_IFF_GOOD_MACHO} main
+
+clean:
+       rm  main
diff --git a/unit-tests/test-cases/no_zero_fill_sections/main.c b/unit-tests/test-cases/no_zero_fill_sections/main.c
new file mode 100644 (file)
index 0000000..a04a2ca
--- /dev/null
@@ -0,0 +1,34 @@
+/* -*- mode: C++; c-basic-offset: 4; tab-width: 4 -*- 
+ *
+ * Copyright (c) 2009 Apple Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+#include <stdio.h>
+
+static int a[2000];
+int b[2000];
+
+int main()
+{
+       a[0] = 0;
+       b[0] = 0;
+       return 0;
+}
\ No newline at end of file
diff --git a/unit-tests/test-cases/objc-literal-pointers-strip/Makefile b/unit-tests/test-cases/objc-literal-pointers-strip/Makefile
deleted file mode 100644 (file)
index 76a7347..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-##
-# Copyright (c) 2009 Apple Inc. All rights reserved.
-#
-# @APPLE_LICENSE_HEADER_START@
-# 
-# This file contains Original Code and/or Modifications of Original Code
-# as defined in and that are subject to the Apple Public Source License
-# Version 2.0 (the 'License'). You may not use this file except in
-# compliance with the License. Please obtain a copy of the License at
-# http://www.opensource.apple.com/apsl/ and read it before using this
-# file.
-# 
-# The Original Code and all software distributed under the License are
-# distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
-# EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
-# INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
-# Please see the License for the specific language governing rights and
-# limitations under the License.
-# 
-# @APPLE_LICENSE_HEADER_END@
-##
-TESTROOT = ../..
-include ${TESTROOT}/include/common.makefile
-
-
-#
-# Verify an Objective-C object file when run through
-# ld -r -x 
-#   <rdar://problem/6605499> x86_64 obj-c runtime confused when static lib is stripped
-#
-#
-
-SELECTOR_REFS = "__OBJC,__message_refs"
-
-ifeq ($(ARCH),x86_64)
-       SELECTOR_REFS = "__DATA,__objc_selrefs"
-endif
-ifeq ($(ARCH),armv6)
-       SELECTOR_REFS = "__DATA,__objc_selrefs"
-endif
-
-
-
-run: all
-
-all:
-       ${CC} ${CCFLAGS} test.m -c -o test.o
-       ${OBJECTDUMP}  -no_content test.o | grep -B3 -A6 ${SELECTOR_REFS} > test.dump
-
-       ${LD} -arch ${ARCH} -r test.o -x -o test-r.o
-       ${OBJECTDUMP}  -no_content test-r.o | grep -B3 -A6 ${SELECTOR_REFS}  > test-r.dump
-
-       diff test.dump test-r.dump | ${PASS_IFF_EMPTY}
-       
-clean:
-       rm -rf test.o test.dump test-r.o test-r.dump
diff --git a/unit-tests/test-cases/objc-literal-pointers-strip/test.m b/unit-tests/test-cases/objc-literal-pointers-strip/test.m
deleted file mode 100644 (file)
index 4837911..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/* -*- mode: C++; c-basic-offset: 4; tab-width: 4 -*- 
- *
- * Copyright (c) 2009 Apple Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- * 
- * This file contains Original Code and/or Modifications of Original Code
- * as defined in and that are subject to the Apple Public Source License
- * Version 2.0 (the 'License'). You may not use this file except in
- * compliance with the License. Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this
- * file.
- * 
- * The Original Code and all software distributed under the License are
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
- * Please see the License for the specific language governing rights and
- * limitations under the License.
- * 
- * @APPLE_LICENSE_HEADER_END@
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-@interface Foo @end
-@implementation Foo
-+(void)initialize { }
-+(void)foo {
-    fprintf(stderr, "GOOD\n");
-    exit(0);
-}
-+(void)bar {
-    fprintf(stderr, "BAD\n");
-    abort();
-}
-@end
-
-void PublicFunction(void)
-{
-    [Foo foo];
-    [Foo bar];
-}
index 447ee8740b7e90312aba0f812e172c7a0454590d..8abf3e145ad2ec296dc670dccae9868c7db67c0c 100644 (file)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2007 Apple Inc. All rights reserved.
 #
 # @APPLE_LICENSE_HEADER_START@
 # 
@@ -30,9 +30,6 @@ all:
        # verify if operator new is overridden that WEAK_DEFINES is set
        ${CXX} ${CXXFLAGS} -DOP_NEW -I${TESTROOT}/include -o main main.cxx
        otool -hv main | grep WEAK_DEFINES | ${FAIL_IF_EMPTY}
-       # verify if operator new is overridden but not exported, WEAK_DEFINES is not set
-       ${CXX} ${CXXFLAGS} -DOP_NEW -I${TESTROOT}/include -o main main.cxx -Wl,-exported_symbol,_main
-       otool -hv main | grep WEAK_DEFINES | ${FAIL_IF_STDIN}
        # verify if operator new is not overridden that WEAK_DEFINES is not set
        ${CXX} ${CXXFLAGS} -I${TESTROOT}/include -o main main.cxx
        otool -hv main | grep WEAK_DEFINES | ${PASS_IFF_EMPTY}
index b5d32729faef55b51a2a4337472814fe6eea64c0..3c99e358b861876cb564f079b60037474e4a7bc8 100644 (file)
@@ -36,7 +36,7 @@
 #if OP_NEW
 void* operator new(size_t s) throw (std::bad_alloc)
 {
-  return malloc(s);
+  return malloc(s);;
 }
 #endif
 
diff --git a/unit-tests/test-cases/re-export-optimizations-indirect/Makefile b/unit-tests/test-cases/re-export-optimizations-indirect/Makefile
deleted file mode 100644 (file)
index fdb13d5..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-##
-# Copyright (c) 2009 Apple Inc. All rights reserved.
-#
-# @APPLE_LICENSE_HEADER_START@
-#
-# This file contains Original Code and/or Modifications of Original Code
-# as defined in and that are subject to the Apple Public Source License
-# Version 2.0 (the 'License'). You may not use this file except in
-# compliance with the License. Please obtain a copy of the License at
-# http://www.opensource.apple.com/apsl/ and read it before using this
-# file.
-#
-# The Original Code and all software distributed under the License are
-# distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
-# EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
-# INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
-# Please see the License for the specific language governing rights and
-# limitations under the License.
-#
-# @APPLE_LICENSE_HEADER_END@
-##
-TESTROOT = ../..
-include ${TESTROOT}/include/common.makefile
-
-#
-# Test that a public re-exported library is automatically added as a dependent
-# unless nothing is used from it.
-#
-
-
-run: all
-
-all:
-       
-# -sub_library for 10.4
-       ${CC} ${CCFLAGS} -dynamiclib bar.c -o libbar.dylib  -install_name /usr/lib/libbar.dylib -mmacosx-version-min=10.4
-       ${FAIL_IF_BAD_MACHO} libbar.dylib
-       ${CC} ${CCFLAGS} -dynamiclib middle.c -o libmiddle.dylib -lbar -L. -sub_library libbar -install_name /mid/libmiddle.dylib -mmacosx-version-min=10.4
-       ${FAIL_IF_BAD_MACHO} libmiddle.dylib
-       ${CC} ${CCFLAGS} -dynamiclib foo.c -o libfoo.dylib -lmiddle -L. -sub_library libmiddle -install_name /usr/lib/libfoo.dylib -mmacosx-version-min=10.4
-       ${FAIL_IF_BAD_MACHO} libfoo.dylib
-       ${CC} ${CCFLAGS} -dynamiclib other.c -o libother.dylib -lbar -L. -sub_library libbar -install_name /usr/lib/libother.dylib -mmacosx-version-min=10.4
-       ${FAIL_IF_BAD_MACHO} libother.dylib
-       ${CC} ${CCFLAGS} main.c -DCALL_BAR libfoo.dylib libother.dylib -o main -L. -mmacosx-version-min=10.4
-       nm -m main | grep _bar | grep libbar | ${FAIL_IF_EMPTY}
-       ${PASS_IFF_GOOD_MACHO} main
-               
-# -sub_library for 10.5
-       ${CC} ${CCFLAGS} -dynamiclib bar.c -o libbar.dylib  -install_name /usr/lib/libbar.dylib -mmacosx-version-min=10.5
-       ${FAIL_IF_BAD_MACHO} libbar.dylib
-       ${CC} ${CCFLAGS} -dynamiclib middle.c -o libmiddle.dylib -lbar -L. -sub_library libbar -install_name /mid/libmiddle.dylib -mmacosx-version-min=10.5
-       ${FAIL_IF_BAD_MACHO} libmiddle.dylib
-       ${CC} ${CCFLAGS} -dynamiclib foo.c -o libfoo.dylib -lmiddle -L. -sub_library libmiddle -install_name /usr/lib/libfoo.dylib -mmacosx-version-min=10.5
-       ${FAIL_IF_BAD_MACHO} libfoo.dylib
-       ${CC} ${CCFLAGS} -dynamiclib other.c -o libother.dylib -lbar -L. -sub_library libbar -install_name /usr/lib/libother.dylib -mmacosx-version-min=10.5
-       ${FAIL_IF_BAD_MACHO} libother.dylib
-       ${CC} ${CCFLAGS} main.c -DCALL_BAR libfoo.dylib libother.dylib -o main -L. -mmacosx-version-min=10.5
-       nm -m main | grep _bar | grep libbar | ${FAIL_IF_EMPTY}
-       ${PASS_IFF_GOOD_MACHO} main
-       
-
-clean:
-       rm -rf libbar.dylib libfoo.dylib libmiddle.dylib libother.dylib main 
diff --git a/unit-tests/test-cases/re-export-optimizations-indirect/bar.c b/unit-tests/test-cases/re-export-optimizations-indirect/bar.c
deleted file mode 100644 (file)
index 9c18401..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-
-int bar (void)
-{
-       return 1;
-}
diff --git a/unit-tests/test-cases/re-export-optimizations-indirect/foo.c b/unit-tests/test-cases/re-export-optimizations-indirect/foo.c
deleted file mode 100644 (file)
index d0cdf47..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-int foo (void)
-{
-  return 1;
-}
diff --git a/unit-tests/test-cases/re-export-optimizations-indirect/main.c b/unit-tests/test-cases/re-export-optimizations-indirect/main.c
deleted file mode 100644 (file)
index 672ef9a..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-
-extern void bar();
-
-int main()
-{
-       bar();
-       return 0;
-}
diff --git a/unit-tests/test-cases/re-export-optimizations-indirect/middle.c b/unit-tests/test-cases/re-export-optimizations-indirect/middle.c
deleted file mode 100644 (file)
index d3578a6..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-
-void middle() {}
-
diff --git a/unit-tests/test-cases/re-export-optimizations-indirect/other.c b/unit-tests/test-cases/re-export-optimizations-indirect/other.c
deleted file mode 100644 (file)
index 0cd6dda..0000000
+++ /dev/null
@@ -1 +0,0 @@
-void other() {}
diff --git a/unit-tests/test-cases/relocs-neg-from-local/Makefile b/unit-tests/test-cases/relocs-neg-from-local/Makefile
deleted file mode 100644 (file)
index 36fb47b..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-##
-# Copyright (c) 2009 Apple Inc. All rights reserved.
-#
-# @APPLE_LICENSE_HEADER_START@
-# 
-# This file contains Original Code and/or Modifications of Original Code
-# as defined in and that are subject to the Apple Public Source License
-# Version 2.0 (the 'License'). You may not use this file except in
-# compliance with the License. Please obtain a copy of the License at
-# http://www.opensource.apple.com/apsl/ and read it before using this
-# file.
-# 
-# The Original Code and all software distributed under the License are
-# distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
-# EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
-# INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
-# Please see the License for the specific language governing rights and
-# limitations under the License.
-# 
-# @APPLE_LICENSE_HEADER_END@
-##
-TESTROOT = ../..
-include ${TESTROOT}/include/common.makefile
-
-#
-# <rdar://problem/6583757> i386 relocation error with negative offsets from local labels
-#
-
-ifeq (${ARCH},i386)
-       TARGET =  run-i386
-else 
-       TARGET =  run-other
-endif
-
-run: ${TARGET}
-
-run-other:
-       ${PASS_IFF} /usr/bin/true
-       
-
-run-i386:
-       ${CC} ${ASMFLAGS} test.s -c -o test.o
-       ${OBJECTDUMP} test.o | grep "__data@0 plus 0xFFFFFFE2" | ${FAIL_IF_EMPTY}
-
-       ${LD} -arch ${ARCH} -r -keep_private_externs test.o -o test-r.o
-       ${OBJECTDUMP} test-r.o | grep "__data@0 plus 0xFFFFFFE2" | ${PASS_IFF_STDIN}
-
-       
-clean:
-       rm -rf *.o
diff --git a/unit-tests/test-cases/relocs-neg-from-local/test.s b/unit-tests/test-cases/relocs-neg-from-local/test.s
deleted file mode 100644 (file)
index 3890f35..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2009 Apple Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- * 
- * This file contains Original Code and/or Modifications of Original Code
- * as defined in and that are subject to the Apple Public Source License
- * Version 2.0 (the 'License'). You may not use this file except in
- * compliance with the License. Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this
- * file.
- * 
- * The Original Code and all software distributed under the License are
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
- * Please see the License for the specific language governing rights and
- * limitations under the License.
- * 
- * @APPLE_LICENSE_HEADER_END@
- */
-
-               
-
-#if __i386__
-       .text
-       .align 2
-       
-_negative_offset_from_local_label:
-       nop
-       .space 100
-       movl      -80+L3(,%eax,4), %edx
-       ret
-       
-       .data
-L2:    .space  50
-L3:    .space  50
-_d:    .long   0
-
-#endif
-
-
diff --git a/unit-tests/test-cases/section-labels/Makefile b/unit-tests/test-cases/section-labels/Makefile
new file mode 100644 (file)
index 0000000..d783b16
--- /dev/null
@@ -0,0 +1,37 @@
+##
+# Copyright (c) 2009 Apple Inc. All rights reserved.
+#
+# @APPLE_LICENSE_HEADER_START@
+# 
+# This file contains Original Code and/or Modifications of Original Code
+# as defined in and that are subject to the Apple Public Source License
+# Version 2.0 (the 'License'). You may not use this file except in
+# compliance with the License. Please obtain a copy of the License at
+# http://www.opensource.apple.com/apsl/ and read it before using this
+# file.
+# 
+# The Original Code and all software distributed under the License are
+# distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+# EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+# INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+# Please see the License for the specific language governing rights and
+# limitations under the License.
+# 
+# @APPLE_LICENSE_HEADER_END@
+##
+TESTROOT = ../..
+include ${TESTROOT}/include/common.makefile
+
+#
+# Check that ld resolves the magic section start/end symbols.
+#
+
+run: all
+
+all:
+       ${CC} ${CCFLAGS} main.c -o main
+       ${PASS_IFF_GOOD_MACHO} main
+
+clean:
+       rm  main
diff --git a/unit-tests/test-cases/section-labels/main.c b/unit-tests/test-cases/section-labels/main.c
new file mode 100644 (file)
index 0000000..a8c4bfa
--- /dev/null
@@ -0,0 +1,42 @@
+/* -*- mode: C++; c-basic-offset: 4; tab-width: 4 -*- 
+ *
+ * Copyright (c) 2009 Apple Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+#include <stdio.h>
+
+struct stuff { int a; int b; };
+
+struct stuff stuff1 __attribute__ ((section ("__DATA,__my"))) = { 1, 2};
+struct stuff stuff2 __attribute__ ((section ("__DATA,__my"))) = { 3 ,4 };
+
+extern struct stuff*  stuff_start  __asm("section$start$__DATA$__my");
+extern struct stuff*  stuff_end    __asm("section$end$__DATA$__my");
+
+
+int main()
+{
+       struct stuff* p;
+       for (p = stuff_start; p < stuff_end; ++p) {
+               p->a = 0;
+       }
+       return 0;
+}
\ No newline at end of file
diff --git a/unit-tests/test-cases/section-names-long/Makefile b/unit-tests/test-cases/section-names-long/Makefile
deleted file mode 100644 (file)
index f31d9d6..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-##
-# Copyright (c) 2009 Apple Inc. All rights reserved.
-#
-# @APPLE_LICENSE_HEADER_START@
-#
-# This file contains Original Code and/or Modifications of Original Code
-# as defined in and that are subject to the Apple Public Source License
-# Version 2.0 (the 'License'). You may not use this file except in
-# compliance with the License. Please obtain a copy of the License at
-# http://www.opensource.apple.com/apsl/ and read it before using this
-# file.
-#
-# The Original Code and all software distributed under the License are
-# distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
-# EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
-# INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
-# Please see the License for the specific language governing rights and
-# limitations under the License.
-#
-# @APPLE_LICENSE_HEADER_END@
-##
-TESTROOT = ../..
-include ${TESTROOT}/include/common.makefile
-
-#
-# Validate long section names are preserved
-# <rdar://problem/6805002> corrupt metaclass entry in dynamic library
-#
-
-all:
-       ${CC} ${CCFLAGS} main.c a.s c.s b.s -o main
-       nm -m main | grep __aaaaaaaaaaaaaa | grep __TEXT | grep _at | ${FAIL_IF_EMPTY}
-       nm -m main | grep __bbbbbbbbbbbbbb | grep __TEXT | grep _bt | ${FAIL_IF_EMPTY}
-       nm -m main | grep __cccccccccccccc | grep __TEXT | grep _ct | ${FAIL_IF_EMPTY}
-       nm -m main | grep __aaaaaaaaaaaaaa | grep __DATA | grep _ad | ${FAIL_IF_EMPTY}
-       nm -m main | grep __bbbbbbbbbbbbbb | grep __DATA | grep _bd | ${FAIL_IF_EMPTY}
-       nm -m main | grep __cccccccccccccc | grep __DATA | grep _cd | ${FAIL_IF_EMPTY}
-       ${PASS_IFF_GOOD_MACHO} main
-       
-clean:
-       rm -rf main 
diff --git a/unit-tests/test-cases/section-names-long/a.s b/unit-tests/test-cases/section-names-long/a.s
deleted file mode 100644 (file)
index d7e5847..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-
-               .section __TEXT,__aaaaaaaaaaaaaa
-_at:   .space  128
-
-               .section __DATA,__aaaaaaaaaaaaaa
-_ad:   .space  128
-
-
-
diff --git a/unit-tests/test-cases/section-names-long/b.s b/unit-tests/test-cases/section-names-long/b.s
deleted file mode 100644 (file)
index a31d414..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-
-               .section __TEXT,__bbbbbbbbbbbbbb
-_bt:   .space  128
-
-               .section __DATA,__bbbbbbbbbbbbbb
-_bd:   .space  128
-
-
-
diff --git a/unit-tests/test-cases/section-names-long/c.s b/unit-tests/test-cases/section-names-long/c.s
deleted file mode 100644 (file)
index 383b159..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-
-               .section __TEXT,__cccccccccccccc
-_ct:   .space  128
-
-
-               .section __DATA,__cccccccccccccc
-_cd:   .space  128
-
-
-
-
diff --git a/unit-tests/test-cases/section-names-long/main.c b/unit-tests/test-cases/section-names-long/main.c
deleted file mode 100644 (file)
index df77448..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-int main() { return 0; }
-
diff --git a/unit-tests/test-cases/shared-cache-dylib/Makefile b/unit-tests/test-cases/shared-cache-dylib/Makefile
deleted file mode 100644 (file)
index cd6dc04..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-##
-# Copyright (c) 2009 Apple Inc. All rights reserved.
-#
-# @APPLE_LICENSE_HEADER_START@
-# 
-# This file contains Original Code and/or Modifications of Original Code
-# as defined in and that are subject to the Apple Public Source License
-# Version 2.0 (the 'License'). You may not use this file except in
-# compliance with the License. Please obtain a copy of the License at
-# http://www.opensource.apple.com/apsl/ and read it before using this
-# file.
-# 
-# The Original Code and all software distributed under the License are
-# distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
-# EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
-# INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
-# Please see the License for the specific language governing rights and
-# limitations under the License.
-# 
-# @APPLE_LICENSE_HEADER_END@
-##
-TESTROOT = ../..
-include ${TESTROOT}/include/common.makefile
-
-#
-# Verify only dylibs with install paths in /System/Library or /usr/lib
-# get LC_SEGMENT_SPLIT_INFO
-#
-
-
-run: all
-
-all:
-       ${CC} ${CCFLAGS} foo.c -dynamiclib -o libfoo.dylib -install_name /usr/lib/libfoo.dylib
-       otool -lv libfoo.dylib | grep LC_SEGMENT_SPLIT_INFO | ${FAIL_IF_EMPTY}
-       ${CC} ${CCFLAGS} foo.c -dynamiclib -o libfoo.dylib -install_name /System/Library/Frameworks/Foo.framework/Foo
-       otool -lv libfoo.dylib | grep LC_SEGMENT_SPLIT_INFO | ${FAIL_IF_EMPTY}
-       ${CC} ${CCFLAGS} foo.c -dynamiclib -o libfoo.dylib -install_name /usr/local/lib/libfoo.dylib
-       otool -lv libfoo.dylib | grep LC_SEGMENT_SPLIT_INFO | ${FAIL_IF_STDIN}
-       ${CC} ${CCFLAGS} foo.c -dynamiclib -o libfoo.dylib 
-       otool -lv libfoo.dylib | grep LC_SEGMENT_SPLIT_INFO | ${FAIL_IF_STDIN}
-       ${PASS_IFF_GOOD_MACHO} libfoo.dylib 
-
-clean:
-       rm libfoo.dylib
diff --git a/unit-tests/test-cases/shared-cache-dylib/foo.c b/unit-tests/test-cases/shared-cache-dylib/foo.c
deleted file mode 100644 (file)
index 6924ac6..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-
-void foo() {}
-
index fcb7e7d0f87d8caa12c68f7acf5a6b75f241b35b..c0647b36c85f3e1407c2c6ea58197bdab3c8407f 100644 (file)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2007-2009 Apple Inc. All rights reserved.
+# Copyright (c) 2007 Apple Inc. All rights reserved.
 #
 # @APPLE_LICENSE_HEADER_START@
 # 
 TESTROOT = ../..
 include ${TESTROOT}/include/common.makefile
 
-POINTER_SEGMENT = __DATA
-POINTER_SECTION  = __nl_symbol_ptr
+ifeq "${ARCH}"  "i386"
+       POINTER_SEGMENT = __IMPORT
+       POINTER_SECTION  = __pointers
+else
+       POINTER_SEGMENT = __DATA
+       POINTER_SECTION  = __nl_symbol_ptr
+endif
 
 
 #
 # Test that using strip -R to selectively strip symbol names
 # of of a .o file still works with ld.
-# And for i386 that there are no __IMPORT/__pointers left <rdar://problem/6666004>
 #
 
 run: all
@@ -47,8 +51,6 @@ all:
        ${CC} ${CCFLAGS} all.o  -dynamiclib -o dylib2   
        otool -X -s ${POINTER_SEGMENT} ${POINTER_SECTION} dylib1 >dylib1.pointers
        otool -X -s ${POINTER_SEGMENT} ${POINTER_SECTION} dylib2 >dylib2.pointers
-       size -l dylib1 | grep __IMPORT | ${FAIL_IF_STDIN}
-       size -l dylib2 | grep __IMPORT | ${FAIL_IF_STDIN}
        ${PASS_IFF} diff dylib1.pointers dylib2.pointers
 
 clean:
index cdacfc968678248dcf702c8f0a3fd1ef449b3fcd..d1fa1f3f9f0ba737cb9d6f11acaff057df039fa2 100644 (file)
@@ -34,7 +34,7 @@ all:
        ${CC} ${CCFLAGS} -dynamiclib -single_module foo.c -o libfoo-${ARCH}.dylib 
        ${FAIL_IF_BAD_MACHO} libfoo-${ARCH}.dylib
 
-       ${CC} ${CCFLAGS} main.c -o main-${ARCH} libfoo-${ARCH}.dylib 
+       ${CC} ${CCFLAGS} -mmacosx-version-min=10.4 main.c -o main-${ARCH} libfoo-${ARCH}.dylib 
        nm -m main-${ARCH} | grep _func1 | grep -v weak    >/dev/null
        nm -m main-${ARCH} | grep _func2 | grep    weak    >/dev/null
        nm -m main-${ARCH} | grep _func3 | grep -v weak    >/dev/null 
@@ -43,12 +43,10 @@ all:
        nm -m main-${ARCH} | grep _data2 | grep    weak    >/dev/null
        nm -m main-${ARCH} | grep _data3 | grep -v weak    >/dev/null
        nm -m main-${ARCH} | grep _data4 | grep    weak    >/dev/null
-       nm -m main-${ARCH} | grep _data5 | grep -v weak    >/dev/null
-       nm -m main-${ARCH} | grep _data6 | grep    weak    >/dev/null
-       #otool -rv main-${ARCH} | grep _data6 > /dev/null
+       otool -rv main-${ARCH} | grep _data6 > /dev/null
        ${FAIL_IF_BAD_MACHO} main-${ARCH}
 
-       ${CC} ${CCFLAGS} main.c -dynamiclib -o main-${ARCH}.dylib libfoo-${ARCH}.dylib 
+       ${CC} ${CCFLAGS} -mmacosx-version-min=10.4 main.c -dynamiclib -o main-${ARCH}.dylib libfoo-${ARCH}.dylib 
        nm -m main-${ARCH}.dylib | grep _func1 | grep -v weak    >/dev/null
        nm -m main-${ARCH}.dylib | grep _func2 | grep    weak    >/dev/null
        nm -m main-${ARCH}.dylib | grep _func3 | grep -v weak    >/dev/null 
@@ -57,7 +55,7 @@ all:
        nm -m main-${ARCH}.dylib | grep _data2 | grep    weak    >/dev/null
        nm -m main-${ARCH}.dylib | grep _data3 | grep -v weak    >/dev/null
        nm -m main-${ARCH}.dylib | grep _data4 | grep    weak    >/dev/null
-       #otool -rv main-${ARCH}.dylib | grep _data6 > /dev/null
+       otool -rv main-${ARCH}.dylib | grep _data6 > /dev/null
        ${PASS_IFF_GOOD_MACHO} main-${ARCH}.dylib
        
 clean: