Fix a weird ppc64-specific link error during an llvm-gcc build:
authorChris Lattner <sabre@nondot.org>
Mon, 10 Aug 2009 17:58:51 +0000 (17:58 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 10 Aug 2009 17:58:51 +0000 (17:58 +0000)
ld: bad offset (0x00000091) for lo14 instruction pic-base fix-up in ___popcountdi2 from libgcc/./_popcountsi2_s.o

The problem is that the non lazy symbol pointers need to be 8 byte aligned
on ppc64 and .section doesn't have an implicit alignment like ".non_lazy_symbol_pointer"
does.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78572 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp

index 73c9c03854bf3686d8cf3cdcdb6c558decdbc03a..e13cb66b7ac52062b53db28fa14b036263c1e9a1 100644 (file)
@@ -1063,6 +1063,8 @@ bool PPCDarwinAsmPrinter::doFinalization(Module &M) {
   if (!GVStubs.empty()) {
     // Switch with ".non_lazy_symbol_pointer" directive.
     SwitchToSection(TLOFMacho.getNonLazySymbolPointerSection());
+    EmitAlignment(isPPC64 ? 3 : 2);
+    
     for (StringMap<std::string>::iterator I = GVStubs.begin(),
          E = GVStubs.end(); I != E; ++I) {
       O << I->second << ":\n";