diff --git a/lib/MC/MachObjectWriter.cpp b/lib/MC/MachObjectWriter.cpp index 6e720115dd1..e016f09c95f 100644 --- a/lib/MC/MachObjectWriter.cpp +++ b/lib/MC/MachObjectWriter.cpp @@ -584,9 +584,14 @@ IsSymbolRefDifferenceFullyResolvedImpl(const MCAssembler &Asm, // requires the compiler to use .set to absolutize the differences between // symbols which the compiler knows to be assembly time constants, so we // don't need to worry about considering symbol differences fully resolved. + // + // If the file isn't using sub-sections-via-symbols, we can make the + // same assumptions about any symbol that we normally make about + // assembler locals. if (!Asm.getBackend().hasReliableSymbolDifference()) { - if (!SA.isTemporary() || !SA.isInSection() || &SecA != &SecB) + if ((!SA.isTemporary() && Asm.getSubsectionsViaSymbols()) || + !SA.isInSection() || &SecA != &SecB) return false; return true; } diff --git a/lib/Target/ARM/MCTargetDesc/ARMMachObjectWriter.cpp b/lib/Target/ARM/MCTargetDesc/ARMMachObjectWriter.cpp index f394b4f3755..d0e66828c0c 100644 --- a/lib/Target/ARM/MCTargetDesc/ARMMachObjectWriter.cpp +++ b/lib/Target/ARM/MCTargetDesc/ARMMachObjectWriter.cpp @@ -62,6 +62,9 @@ static bool getARMFixupKindMachOInfo(unsigned Kind, unsigned &RelocType, default: return false; + case ARM::fixup_t2_condbranch: + assert(0); + return false; case FK_Data_1: Log2Size = llvm::Log2_32(1); return true; diff --git a/test/MC/MachO/ARM/darwin-ARM-reloc.s b/test/MC/MachO/ARM/darwin-ARM-reloc.s index 86b45e07bf3..fe69a94c276 100644 --- a/test/MC/MachO/ARM/darwin-ARM-reloc.s +++ b/test/MC/MachO/ARM/darwin-ARM-reloc.s @@ -19,12 +19,14 @@ Ld0_0: Lsc0_0: .long 0 + .subsections_via_symbols + @ CHECK: ('cputype', 12) @ CHECK: ('cpusubtype', 9) @ CHECK: ('filetype', 1) @ CHECK: ('num_load_commands', 3) @ CHECK: ('load_commands_size', 364) -@ CHECK: ('flag', 0) +@ CHECK: ('flag', 8192) @ CHECK: ('load_commands', [ @ CHECK: # Load Command 0 @ CHECK: (('command', 1) diff --git a/test/MC/MachO/reloc-pcrel-offset.s b/test/MC/MachO/reloc-pcrel-offset.s index e0f12bf4ba2..bc611d7f369 100644 --- a/test/MC/MachO/reloc-pcrel-offset.s +++ b/test/MC/MachO/reloc-pcrel-offset.s @@ -12,3 +12,5 @@ .text _a: call _a + + .subsections_via_symbols diff --git a/test/MC/MachO/reloc-pcrel.s b/test/MC/MachO/reloc-pcrel.s index fff7cc0ada0..26844083c5f 100644 --- a/test/MC/MachO/reloc-pcrel.s +++ b/test/MC/MachO/reloc-pcrel.s @@ -60,3 +60,5 @@ L1: call _c + 1 // call _a - L0 call _b - L0 + + .subsections_via_symbols