[PATCH] D124392: [AIX][XCOFF] error on emit symbol visibility for XCOFF object file

David Tenty via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 26 16:23:03 PDT 2022


This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGf6d209b3ec4c: [AIX][XCOFF] error on emit symbol visibility for XCOFF object file (authored by daltenty).

Changed prior to commit:
  https://reviews.llvm.org/D124392?vs=424910&id=425332#toc

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D124392/new/

https://reviews.llvm.org/D124392

Files:
  llvm/include/llvm/MC/MCSectionXCOFF.h
  llvm/lib/MC/XCOFFObjectWriter.cpp
  llvm/test/CodeGen/PowerPC/aix-xcoff-visibility.ll


Index: llvm/test/CodeGen/PowerPC/aix-xcoff-visibility.ll
===================================================================
--- llvm/test/CodeGen/PowerPC/aix-xcoff-visibility.ll
+++ llvm/test/CodeGen/PowerPC/aix-xcoff-visibility.ll
@@ -3,6 +3,18 @@
 ; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr4 -mattr=-altivec -data-sections=false < %s |\
 ; RUN:   FileCheck %s
 
+; RUN: not --crash llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff \
+; RUN:     -filetype=obj -o %t.o < %s 2>&1 | \
+; RUN:   FileCheck --check-prefix=XCOFF32 %s
+; XCOFF32: LLVM ERROR: Emitting non-zero visibilities is not supported yet.
+
+; RUN: not --crash llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff \
+; RUN:     -filetype=obj -o %t.o 2>&1 < %s 2>&1 | \
+; RUN:   FileCheck --check-prefix=XCOFF64 %s
+; FIXME: This should check for the visibility error, but we actually fail before
+; that due to unimplemented relocations.
+; XCOFF64: LLVM ERROR: Unimplemented fixup kind.
+
 @b =  global i32 0, align 4
 @b_h = hidden global i32 0, align 4
 
Index: llvm/lib/MC/XCOFFObjectWriter.cpp
===================================================================
--- llvm/lib/MC/XCOFFObjectWriter.cpp
+++ llvm/lib/MC/XCOFFObjectWriter.cpp
@@ -66,6 +66,10 @@
   const MCSymbolXCOFF *const MCSym;
   uint32_t SymbolTableIndex;
 
+  XCOFF::VisibilityType getVisibilityType() const {
+    return MCSym->getVisibilityType();
+  }
+
   XCOFF::StorageClass getStorageClass() const {
     return MCSym->getStorageClass();
   }
@@ -84,6 +88,9 @@
   SmallVector<Symbol, 1> Syms;
   SmallVector<XCOFFRelocation, 1> Relocations;
   StringRef getSymbolTableName() const { return MCSec->getSymbolTableName(); }
+  XCOFF::VisibilityType getVisibilityType() const {
+    return MCSec->getVisibilityType();
+  }
   XCOFFSection(const MCSectionXCOFF *MCSec)
       : MCSec(MCSec), SymbolTableIndex(-1), Address(-1), Size(0) {}
 };
@@ -670,7 +677,8 @@
   // table entries for a detailed description. Since we don't yet support
   // visibility, and all other bits are either optionally set or reserved, this
   // is always zero.
-  // TODO FIXME How to assert a symbol's visibilty is default?
+  if (SymbolType != 0)
+    report_fatal_error("Emitting non-zero visibilities is not supported yet.");
   // TODO Set the function indicator (bit 10, 0x0020) for functions
   // when debugging is enabled.
   W.write<uint16_t>(SymbolType);
@@ -706,7 +714,7 @@
 
   writeSymbolEntry(SymbolRef.getSymbolTableName(),
                    CSectionRef.Address + SymbolOffset, SectionIndex,
-                   /*SymbolType=*/0, SymbolRef.getStorageClass());
+                   SymbolRef.getVisibilityType(), SymbolRef.getStorageClass());
 
   writeSymbolAuxCsectEntry(CSectionRef.SymbolTableIndex, XCOFF::XTY_LD,
                            CSectionRef.MCSec->getMappingClass());
@@ -726,7 +734,7 @@
     const XCOFFSection &CSectionRef, int16_t SectionIndex,
     XCOFF::StorageClass StorageClass) {
   writeSymbolEntry(CSectionRef.getSymbolTableName(), CSectionRef.Address,
-                   SectionIndex, /*SymbolType=*/0, StorageClass);
+                   SectionIndex, CSectionRef.getVisibilityType(), StorageClass);
 
   writeSymbolAuxCsectEntry(CSectionRef.Size, getEncodedType(CSectionRef.MCSec),
                            CSectionRef.MCSec->getMappingClass());
Index: llvm/include/llvm/MC/MCSectionXCOFF.h
===================================================================
--- llvm/include/llvm/MC/MCSectionXCOFF.h
+++ llvm/include/llvm/MC/MCSectionXCOFF.h
@@ -95,6 +95,9 @@
   XCOFF::StorageClass getStorageClass() const {
     return QualName->getStorageClass();
   }
+  XCOFF::VisibilityType getVisibilityType() const {
+    return QualName->getVisibilityType();
+  }
   XCOFF::SymbolType getCSectType() const {
     assert(isCsect() && "Only csect section has symbol type property!");
     return CsectProp->Type;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D124392.425332.patch
Type: text/x-patch
Size: 3924 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220426/c684e38e/attachment.bin>


More information about the llvm-commits mailing list