[mach-o] Add test case for armv6 (arm not thumb) hello world

llvm-svn: 213592
diff --git a/lld/lib/ReaderWriter/MachO/ArchHandler_arm.cpp b/lld/lib/ReaderWriter/MachO/ArchHandler_arm.cpp
index 1608858..963097d 100644
--- a/lld/lib/ReaderWriter/MachO/ArchHandler_arm.cpp
+++ b/lld/lib/ReaderWriter/MachO/ArchHandler_arm.cpp
@@ -185,8 +185,8 @@
     0x00, 0xF0, 0x9C, 0xE5,       // ldr	pc, [ip]
     0x00, 0x00, 0x00, 0x00,       // L1: .long fFastStubGOTAtom - (helper+16)
     0x00, 0x00, 0x00, 0x00 },     // L2: .long dyld_stub_binder - (helper+28)
-  { Reference::KindArch::ARM, delta32, 28, 0 },
-  { Reference::KindArch::ARM, delta32, 32, 0 }
+  { Reference::KindArch::ARM, delta32, 28, 0xC },
+  { Reference::KindArch::ARM, delta32, 32, 0x04 }
 };
 
 const ArchHandler::StubInfo &ArchHandler_arm::stubInfo() {
@@ -548,7 +548,7 @@
                                            "subtrahend label is not in atom"));
     *kind = delta32;
     value = clearThumbBit(instruction, *target);
-    *addend = value - (toAddress - fromAddress);
+    *addend = (int32_t)(value - (toAddress - fixupAddress));
   } else if (funcRel) {
     toAddress = reloc1.value;
     fromAddress = reloc2.value;
@@ -618,7 +618,6 @@
   assert(ref.kindArch() == Reference::KindArch::ARM);
   int32_t *loc32 = reinterpret_cast<int32_t *>(location);
   int32_t displacement;
-  // FIXME: these writes may need a swap.
   switch (ref.kindValue()) {
   case thumb_b22:
     // FIXME
@@ -652,10 +651,10 @@
     // FIXME
     break;
   case pointer32:
-    // FIXME
+    write32(*loc32, _swap, targetAddress + ref.addend());
     break;
   case delta32:
-    // FIXME
+    write32(*loc32, _swap, targetAddress - fixupAddress + ref.addend());
     break;
   case lazyPointer:
   case lazyImmediateLocation:
diff --git a/lld/lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp b/lld/lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp
index 17dc470..9879e2d 100644
--- a/lld/lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp
+++ b/lld/lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp
@@ -951,7 +951,12 @@
 }
 
 uint32_t Util::fileFlags() {
-  return 0;  //FIX ME
+  // FIXME: these need to determined at runtime.
+  if (_context.outputMachOType() == MH_OBJECT) {
+    return MH_SUBSECTIONS_VIA_SYMBOLS;
+  } else {
+    return MH_DYLDLINK | MH_NOUNDEFS | MH_TWOLEVEL;
+  }
 }
 
 } // end anonymous namespace