[llvm] [XCOFF] Add compiler version to an auxiliary symbol table entry (PR #80162)

via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 31 08:43:31 PST 2024


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-llvm-binary-utilities

Author: None (stephenpeckham)

<details>
<summary>Changes</summary>

C_FILE symbols. To match the behavior of the assembler and the legacy compiler, this includes using the generic ".file" name for the C_FILE symbol and generating the actual file name in an auxiliary entry.

---

Patch is 241.78 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/80162.diff


48 Files Affected:

- (modified) llvm/include/llvm/BinaryFormat/XCOFF.h (+1) 
- (modified) llvm/include/llvm/MC/MCAssembler.h (+11) 
- (modified) llvm/lib/MC/MCAsmStreamer.cpp (+15-10) 
- (modified) llvm/lib/MC/MCObjectStreamer.cpp (+4-1) 
- (modified) llvm/lib/MC/XCOFFObjectWriter.cpp (+64-11) 
- (modified) llvm/test/CodeGen/PowerPC/aix-alias-alignment-2.ll (+1-1) 
- (modified) llvm/test/CodeGen/PowerPC/aix-alias-alignment.ll (+1-1) 
- (modified) llvm/test/CodeGen/PowerPC/aix-available-externally-linkage-fun.ll (+4-4) 
- (modified) llvm/test/CodeGen/PowerPC/aix-extern-weak.ll (+3-4) 
- (modified) llvm/test/CodeGen/PowerPC/aix-extern.ll (+3-4) 
- (modified) llvm/test/CodeGen/PowerPC/aix-filename-c.ll (+2-1) 
- (modified) llvm/test/CodeGen/PowerPC/aix-filename-cpp.ll (+2-1) 
- (modified) llvm/test/CodeGen/PowerPC/aix-filename-f.ll (+2-1) 
- (modified) llvm/test/CodeGen/PowerPC/aix-func-dsc-gen.ll (+12-2) 
- (modified) llvm/test/CodeGen/PowerPC/aix-llvm-intrinsic.ll (+14-14) 
- (modified) llvm/test/CodeGen/PowerPC/aix-overflow-toc.py (+8-8) 
- (modified) llvm/test/CodeGen/PowerPC/aix-relro-section.ll (+12-12) 
- (modified) llvm/test/CodeGen/PowerPC/aix-small-local-exec-tls-largeaccess.ll (+24-24) 
- (modified) llvm/test/CodeGen/PowerPC/aix-tls-ie-xcoff-reloc.ll (+94-96) 
- (modified) llvm/test/CodeGen/PowerPC/aix-tls-le-xcoff-reloc-large.ll (+61-61) 
- (modified) llvm/test/CodeGen/PowerPC/aix-tls-le-xcoff-reloc-large32.ll (+68-68) 
- (modified) llvm/test/CodeGen/PowerPC/aix-tls-le-xcoff-reloc.ll (+54-54) 
- (modified) llvm/test/CodeGen/PowerPC/aix-tls-le-xcoff-reloc32.ll (+61-61) 
- (modified) llvm/test/CodeGen/PowerPC/aix-tls-xcoff-reloc-large.ll (+104-94) 
- (modified) llvm/test/CodeGen/PowerPC/aix-tls-xcoff-reloc.ll (+96-97) 
- (modified) llvm/test/CodeGen/PowerPC/aix-tls-xcoff-variables.ll (+33-34) 
- (modified) llvm/test/CodeGen/PowerPC/aix-user-defined-memcpy.ll (+11-11) 
- (modified) llvm/test/CodeGen/PowerPC/aix-weak.ll (+3-4) 
- (modified) llvm/test/CodeGen/PowerPC/aix-xcoff-cold.ll (+1-1) 
- (modified) llvm/test/CodeGen/PowerPC/aix-xcoff-data-sections.ll (+15-15) 
- (modified) llvm/test/CodeGen/PowerPC/aix-xcoff-data.ll (+17-5) 
- (modified) llvm/test/CodeGen/PowerPC/aix-xcoff-exception-section-debug.ll (+4-4) 
- (modified) llvm/test/CodeGen/PowerPC/aix-xcoff-exception-section.ll (+8-8) 
- (modified) llvm/test/CodeGen/PowerPC/aix-xcoff-explicit-section.ll (+7-7) 
- (modified) llvm/test/CodeGen/PowerPC/aix-xcoff-funcsect.ll (+78-78) 
- (modified) llvm/test/CodeGen/PowerPC/aix-xcoff-lcomm.ll (+1-1) 
- (modified) llvm/test/CodeGen/PowerPC/aix-xcoff-reloc-large.ll (+1-1) 
- (modified) llvm/test/CodeGen/PowerPC/aix-xcoff-reloc.ll (+29-17) 
- (modified) llvm/test/CodeGen/PowerPC/aix-xcoff-rodata.ll (+1-1) 
- (modified) llvm/test/CodeGen/PowerPC/aix-xcoff-symbol-rename.ll (+23-23) 
- (modified) llvm/test/CodeGen/PowerPC/basic-toc-data-def.ll (+10-12) 
- (modified) llvm/test/CodeGen/PowerPC/basic-toc-data-extern.ll (+16-16) 
- (modified) llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-trap-annotations-td.ll (+1-1) 
- (modified) llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-trap-annotations-tw.ll (+1-1) 
- (modified) llvm/test/CodeGen/PowerPC/pgo-ref-directive.ll (+1-1) 
- (modified) llvm/test/CodeGen/PowerPC/toc-data-const.ll (+28-28) 
- (modified) llvm/test/MC/PowerPC/aix-file-symbols.s (+8-8) 
- (modified) llvm/test/tools/llvm-objdump/XCOFF/symbol-table.test (+23-23) 


``````````diff
diff --git a/llvm/include/llvm/BinaryFormat/XCOFF.h b/llvm/include/llvm/BinaryFormat/XCOFF.h
index 19d44a5ac57f1..bbcd8a4f29ae9 100644
--- a/llvm/include/llvm/BinaryFormat/XCOFF.h
+++ b/llvm/include/llvm/BinaryFormat/XCOFF.h
@@ -27,6 +27,7 @@ namespace XCOFF {
 
 constexpr size_t FileNamePadSize = 6;
 constexpr size_t NameSize = 8;
+constexpr size_t AuxFileEntNameSize = 14;
 constexpr size_t FileHeaderSize32 = 20;
 constexpr size_t FileHeaderSize64 = 24;
 constexpr size_t AuxFileHeaderSize32 = 72;
diff --git a/llvm/include/llvm/MC/MCAssembler.h b/llvm/include/llvm/MC/MCAssembler.h
index 5ae5f6d709385..4e0c627808605 100644
--- a/llvm/include/llvm/MC/MCAssembler.h
+++ b/llvm/include/llvm/MC/MCAssembler.h
@@ -133,6 +133,8 @@ class MCAssembler {
 
   /// List of declared file names
   std::vector<std::pair<std::string, size_t>> FileNames;
+  // Optional compiler version.
+  std::string CompilerVersion;
 
   MCDwarfLineTableParams LTParams;
 
@@ -486,6 +488,15 @@ class MCAssembler {
     FileNames.emplace_back(std::string(FileName), Symbols.size());
   }
 
+  bool setCompilerVersion(std::string CompilerVers) {
+    if (CompilerVersion.empty()) {
+      CompilerVersion = CompilerVers;
+      return true;
+    }
+    return false;
+  }
+  StringRef getCompilerVersion() { return CompilerVersion; }
+
   /// Write the necessary bundle padding to \p OS.
   /// Expects a fragment \p F containing instructions and its size \p FSize.
   void writeFragmentPadding(raw_ostream &OS, const MCEncodedFragment &F,
diff --git a/llvm/lib/MC/MCAsmStreamer.cpp b/llvm/lib/MC/MCAsmStreamer.cpp
index 49668de27d67e..14a499f045edc 100644
--- a/llvm/lib/MC/MCAsmStreamer.cpp
+++ b/llvm/lib/MC/MCAsmStreamer.cpp
@@ -1590,17 +1590,22 @@ void MCAsmStreamer::emitFileDirective(StringRef Filename,
   assert(MAI->hasFourStringsDotFile());
   OS << "\t.file\t";
   PrintQuotedString(Filename, OS);
-  OS << ",";
-  if (!CompilerVerion.empty()) {
-    PrintQuotedString(CompilerVerion, OS);
-  }
-  if (!TimeStamp.empty()) {
-    OS << ",";
-    PrintQuotedString(TimeStamp, OS);
-  }
-  if (!Description.empty()) {
+  bool useTimeStamp = !TimeStamp.empty();
+  bool useCompilerVersion = !CompilerVerion.empty();
+  bool useDescription = !Description.empty();
+  if (useTimeStamp || useCompilerVersion || useDescription) {
     OS << ",";
-    PrintQuotedString(Description, OS);
+    if (useTimeStamp)
+      PrintQuotedString(TimeStamp, OS);
+    if (useCompilerVersion || useDescription) {
+      OS << ",";
+      if (useCompilerVersion)
+        PrintQuotedString(CompilerVerion, OS);
+      if (useDescription) {
+        OS << ",";
+        PrintQuotedString(Description, OS);
+      }
+    }
   }
   EmitEOL();
 }
diff --git a/llvm/lib/MC/MCObjectStreamer.cpp b/llvm/lib/MC/MCObjectStreamer.cpp
index d11ccfb5e269f..cf53ac2d04102 100644
--- a/llvm/lib/MC/MCObjectStreamer.cpp
+++ b/llvm/lib/MC/MCObjectStreamer.cpp
@@ -902,7 +902,10 @@ void MCObjectStreamer::emitFileDirective(StringRef Filename,
                                          StringRef TimeStamp,
                                          StringRef Description) {
   getAssembler().addFileName(Filename);
-  // TODO: add additional info to integrated assembler.
+  if (!CompilerVerion.empty())
+    getAssembler().setCompilerVersion(CompilerVerion.data());
+  // TODO: add TimeStamp and Description to .file symbol table entry
+  // with the integrated assembler.
 }
 
 void MCObjectStreamer::emitAddrsig() {
diff --git a/llvm/lib/MC/XCOFFObjectWriter.cpp b/llvm/lib/MC/XCOFFObjectWriter.cpp
index 343e2fc877bc3..ecdba0a284b9c 100644
--- a/llvm/lib/MC/XCOFFObjectWriter.cpp
+++ b/llvm/lib/MC/XCOFFObjectWriter.cpp
@@ -361,6 +361,8 @@ class XCOFFObjectWriter : public MCObjectWriter {
   bool is64Bit() const { return TargetObjectWriter->is64Bit(); }
   bool nameShouldBeInStringTable(const StringRef &);
   void writeSymbolName(const StringRef &);
+  bool auxFileSymNameShouldBeInStringTable(const StringRef &);
+  void writeAuxFileSymName(const StringRef &);
 
   void writeSymbolEntryForCsectMemberLabel(const Symbol &SymbolRef,
                                            const XCOFFSection &CSectionRef,
@@ -391,7 +393,8 @@ class XCOFFObjectWriter : public MCObjectWriter {
                                            const MCAsmLayout &Layout,
                                            CInfoSymSectionEntry &CInfoSymEntry,
                                            uint64_t &CurrentAddressLocation);
-  void writeSymbolTable(const MCAsmLayout &Layout);
+  void writeSymbolTable(MCAssembler &Asm, const MCAsmLayout &Layout);
+  void writeSymbolAuxFileEntry(StringRef &Name, uint8_t ftype);
   void writeSymbolAuxDwarfEntry(uint64_t LengthOfSectionPortion,
                                 uint64_t NumberOfRelocEnt = 0);
   void writeSymbolAuxCsectEntry(uint64_t SectionOrLength,
@@ -416,7 +419,7 @@ class XCOFFObjectWriter : public MCObjectWriter {
   // *) Assigns symbol table indices.
   // *) Builds up the section header table by adding any non-empty sections to
   //    `Sections`.
-  void assignAddressesAndIndices(const MCAsmLayout &);
+  void assignAddressesAndIndices(MCAssembler &Asm, const MCAsmLayout &);
   // Called after relocations are recorded.
   void finalizeSectionInfo();
   void finalizeRelocationInfo(SectionEntry *Sec, uint64_t RelCount);
@@ -634,12 +637,20 @@ void XCOFFObjectWriter::executePostLayoutBinding(MCAssembler &Asm,
   if (FileNames.empty())
     FileNames.emplace_back(".file", 0);
   for (const std::pair<std::string, size_t> &F : FileNames) {
-    if (nameShouldBeInStringTable(F.first))
+    if (auxFileSymNameShouldBeInStringTable(F.first))
       Strings.add(F.first);
   }
 
+  // Always add ".file" to the symbol table. The actual file name will be in
+  // the AUX_FILE auxiliary entry.
+  if (nameShouldBeInStringTable(".file"))
+    Strings.add(".file");
+  StringRef Vers = Asm.getCompilerVersion();
+  if (auxFileSymNameShouldBeInStringTable(Vers))
+    Strings.add(Vers);
+
   Strings.finalize();
-  assignAddressesAndIndices(Layout);
+  assignAddressesAndIndices(Asm, Layout);
 }
 
 void XCOFFObjectWriter::recordRelocation(MCAssembler &Asm,
@@ -812,7 +823,7 @@ uint64_t XCOFFObjectWriter::writeObject(MCAssembler &Asm,
   writeSectionHeaderTable();
   writeSections(Asm, Layout);
   writeRelocations();
-  writeSymbolTable(Layout);
+  writeSymbolTable(Asm, Layout);
   // Write the string table.
   Strings.write(W.OS);
 
@@ -872,6 +883,36 @@ void XCOFFObjectWriter::writeSymbolAuxCsectEntry(uint64_t SectionOrLength,
   }
 }
 
+bool XCOFFObjectWriter::auxFileSymNameShouldBeInStringTable(
+    const StringRef &SymbolName) {
+  return SymbolName.size() > XCOFF::AuxFileEntNameSize;
+}
+
+void XCOFFObjectWriter::writeAuxFileSymName(const StringRef &SymbolName) {
+  // Magic, Offset or SymbolName.
+  if (auxFileSymNameShouldBeInStringTable(SymbolName)) {
+    W.write<int32_t>(0);
+    W.write<uint32_t>(Strings.getOffset(SymbolName));
+    W.OS.write_zeros(XCOFF::FileNamePadSize);
+  } else {
+    char Name[XCOFF::AuxFileEntNameSize + 1];
+    std::strncpy(Name, SymbolName.data(), XCOFF::AuxFileEntNameSize);
+    ArrayRef<char> NameRef(Name, XCOFF::AuxFileEntNameSize);
+    W.write(NameRef);
+  }
+}
+
+void XCOFFObjectWriter::writeSymbolAuxFileEntry(StringRef &Name,
+                                                uint8_t ftype) {
+  writeAuxFileSymName(Name);
+  W.write<uint8_t>(ftype);
+  W.OS.write_zeros(2);
+  if (is64Bit())
+    W.write<uint8_t>(XCOFF::AUX_FILE);
+  else
+    W.OS.write_zeros(1);
+}
+
 void XCOFFObjectWriter::writeSymbolAuxDwarfEntry(
     uint64_t LengthOfSectionPortion, uint64_t NumberOfRelocEnt) {
   writeWord(LengthOfSectionPortion);
@@ -1103,8 +1144,11 @@ void XCOFFObjectWriter::writeRelocations() {
       writeRelocation(Reloc, *DwarfSection.DwarfSect);
 }
 
-void XCOFFObjectWriter::writeSymbolTable(const MCAsmLayout &Layout) {
+void XCOFFObjectWriter::writeSymbolTable(MCAssembler &Asm,
+                                         const MCAsmLayout &Layout) {
   // Write C_FILE symbols.
+  StringRef Vers = Asm.getCompilerVersion();
+
   for (const std::pair<std::string, size_t> &F : FileNames) {
     // The n_name of a C_FILE symbol is the source file's name when no auxiliary
     // entries are present.
@@ -1133,9 +1177,15 @@ void XCOFFObjectWriter::writeSymbolTable(const MCAsmLayout &Layout) {
     else
       CpuID = XCOFF::TCPU_COM;
 
-    writeSymbolEntry(FileName, /*Value=*/0, XCOFF::ReservedSectionNum::N_DEBUG,
+    int NumberOfFileAuxEntries = 1;
+    if (!Vers.empty())
+      ++NumberOfFileAuxEntries;
+    writeSymbolEntry(".file", /*Value=*/0, XCOFF::ReservedSectionNum::N_DEBUG,
                      /*SymbolType=*/(LangID << 8) | CpuID, XCOFF::C_FILE,
-                     /*NumberOfAuxEntries=*/0);
+                     NumberOfFileAuxEntries);
+    writeSymbolAuxFileEntry(FileName, XCOFF::XFT_FN);
+    if (!Vers.empty())
+      writeSymbolAuxFileEntry(Vers, XCOFF::XFT_CV);
   }
 
   if (CInfoSymSection.Entry)
@@ -1351,9 +1401,12 @@ void XCOFFObjectWriter::addCInfoSymEntry(StringRef Name, StringRef Metadata) {
       std::make_unique<CInfoSymInfo>(Name.str(), Metadata.str()));
 }
 
-void XCOFFObjectWriter::assignAddressesAndIndices(const MCAsmLayout &Layout) {
-  // The symbol table starts with all the C_FILE symbols.
-  uint32_t SymbolTableIndex = FileNames.size();
+void XCOFFObjectWriter::assignAddressesAndIndices(MCAssembler &Asm,
+                                                  const MCAsmLayout &Layout) {
+  // The symbol table starts with all the C_FILE symbols. Each C_FILE symbol
+  // requires 1 or 2 auxiliary entries.
+  uint32_t SymbolTableIndex =
+      (2 + (Asm.getCompilerVersion().empty() ? 0 : 1)) * FileNames.size();
 
   if (CInfoSymSection.Entry)
     SymbolTableIndex++;
diff --git a/llvm/test/CodeGen/PowerPC/aix-alias-alignment-2.ll b/llvm/test/CodeGen/PowerPC/aix-alias-alignment-2.ll
index 209f0e9c38385..cac616fa40371 100644
--- a/llvm/test/CodeGen/PowerPC/aix-alias-alignment-2.ll
+++ b/llvm/test/CodeGen/PowerPC/aix-alias-alignment-2.ll
@@ -58,7 +58,7 @@ define void @foo3(%struct.B %a1) {
 ; ASM-NEXT:      .vbyte     4, 34
 
 ; SYM:      SYMBOL TABLE:
-; SYM-NEXT: 00000000      df *DEBUG*	00000000 <stdin>
+; SYM-NEXT: 00000000      df *DEBUG*	00000000 .file
 ; SYM-NEXT: 00000000 l       .text	0000008a 
 ; SYM-NEXT: 00000000 g     F .text (csect: ) 	00000000 .foo1
 ; SYM-NEXT: 00000030 g     F .text (csect: ) 	00000000 .foo2
diff --git a/llvm/test/CodeGen/PowerPC/aix-alias-alignment.ll b/llvm/test/CodeGen/PowerPC/aix-alias-alignment.ll
index a1ad80481adf1..1049206003767 100644
--- a/llvm/test/CodeGen/PowerPC/aix-alias-alignment.ll
+++ b/llvm/test/CodeGen/PowerPC/aix-alias-alignment.ll
@@ -61,7 +61,7 @@ define void @foo(i32 %a1, i32 %a2, i32 %a3) {
 ; OBJ-NEXT:        c: 4e 80 00 20  	blr
 
 ; SYM:      SYMBOL TABLE:
-; SYM-NEXT: 00000000      df *DEBUG*	00000000 <stdin>
+; SYM-NEXT: 00000000      df *DEBUG*	00000000 .file
 ; SYM-NEXT: 00000000 l       .text	00000029 
 ; SYM-NEXT: 00000000 g     F .text (csect: ) 	00000000 .foo
 ; SYM-NEXT: 0000002c l       .data	00000008 .data
diff --git a/llvm/test/CodeGen/PowerPC/aix-available-externally-linkage-fun.ll b/llvm/test/CodeGen/PowerPC/aix-available-externally-linkage-fun.ll
index f87184f7b4bf4..0ad229004b8a3 100644
--- a/llvm/test/CodeGen/PowerPC/aix-available-externally-linkage-fun.ll
+++ b/llvm/test/CodeGen/PowerPC/aix-available-externally-linkage-fun.ll
@@ -6,11 +6,11 @@
 
 ; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr4 \
 ; RUN:     -mattr=-altivec -filetype=obj -o %t.o < %s
-; RUN: llvm-readobj --symbols %t.o | FileCheck --check-prefix=OBJ %s
+; RUN: llvm-readobj --symbols %t.o | FileCheck -D#NFA=2 --check-prefix=OBJ %s
 
 ; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr4 \
 ; RUN:     -mattr=-altivec -filetype=obj -o %t64.o < %s
-; RUN: llvm-readobj --symbols %t64.o | FileCheck --check-prefix=OBJ %s
+; RUN: llvm-readobj --symbols %t64.o | FileCheck -D#NFA=2 --check-prefix=OBJ %s
 
 define available_externally i32 @foo(i32 %a) {
 entry:
@@ -27,7 +27,7 @@ entry:
 ; OBJ-NEXT: StorageClass: C_EXT (0x2)
 ; OBJ-NEXT: NumberOfAuxEntries: 1
 ; OBJ-NEXT: CSECT Auxiliary Entry {
-; OBJ-NEXT:   Index: 2
+; OBJ-NEXT:   Index: [[#NFA+2]]
 ; OBJ-NEXT:   SectionLen: 0
 ; OBJ-NEXT:   ParameterHashIndex: 0x0
 ; OBJ-NEXT:   TypeChkSectNum: 0x0
@@ -42,7 +42,7 @@ entry:
 ; OBJ-NEXT: StorageClass: C_EXT (0x2)
 ; OBJ-NEXT: NumberOfAuxEntries: 1
 ; OBJ-NEXT: CSECT Auxiliary Entry {
-; OBJ-NEXT:   Index: 4
+; OBJ-NEXT:   Index: [[#NFA+4]]
 ; OBJ-NEXT:   SectionLen: 0
 ; OBJ-NEXT:   ParameterHashIndex: 0x0
 ; OBJ-NEXT:   TypeChkSectNum: 0x0
diff --git a/llvm/test/CodeGen/PowerPC/aix-extern-weak.ll b/llvm/test/CodeGen/PowerPC/aix-extern-weak.ll
index 11b6827c33b1e..ea61fdb022b5c 100644
--- a/llvm/test/CodeGen/PowerPC/aix-extern-weak.ll
+++ b/llvm/test/CodeGen/PowerPC/aix-extern-weak.ll
@@ -65,16 +65,15 @@ declare extern_weak void @foo_ext_weak(ptr)
 ; CHECKSYM:      Symbols [
 ; CHECKSYM-NEXT:   Symbol {
 ; CHECKSYM-NEXT:     Index: 0
-; CHECKSYM-NEXT:     Name: <stdin>
+; CHECKSYM-NEXT:     Name: .file
 ; CHECKSYM-NEXT:     Value (SymbolTableIndex): 0x0
 ; CHECKSYM-NEXT:     Section: N_DEBUG
 ; CHECKSYM-NEXT:     Source Language ID: TB_CPLUSPLUS (0x9)
 ; CHECKSYM32-NEXT:   CPU Version ID: TCPU_COM (0x3)
 ; CHECKSYM64-NEXT:   CPU Version ID: TCPU_PPC64 (0x2)
 ; CHECKSYM-NEXT:     StorageClass: C_FILE (0x67)
-; CHECKSYM-NEXT:     NumberOfAuxEntries: 0
-; CHECKSYM-NEXT:   }
-; CHECKSYM-NEXT:   Symbol {
+; CHECKSYM-NEXT:     NumberOfAuxEntries: 2
+; CHECKSYM:        Symbol {
 ; CHECKSYM-NEXT:     Index: [[#Index:]]
 ; CHECKSYM-NEXT:     Name: .foo_ext_weak
 ; CHECKSYM-NEXT:     Value (RelocatableAddress): 0x0
diff --git a/llvm/test/CodeGen/PowerPC/aix-extern.ll b/llvm/test/CodeGen/PowerPC/aix-extern.ll
index 905e458473905..b4366dddedb2f 100644
--- a/llvm/test/CodeGen/PowerPC/aix-extern.ll
+++ b/llvm/test/CodeGen/PowerPC/aix-extern.ll
@@ -88,16 +88,15 @@ declare i32 @bar_extern(ptr)
 ; CHECKSYM:       Symbols [
 ; CHECKSYM-NEXT:   Symbol {
 ; CHECKSYM-NEXT:     Index: 0
-; CHECKSYM-NEXT:     Name: <stdin>
+; CHECKSYM-NEXT:     Name: .file
 ; CHECKSYM-NEXT:     Value (SymbolTableIndex): 0x0
 ; CHECKSYM-NEXT:     Section: N_DEBUG
 ; CHECKSYM-NEXT:     Source Language ID: TB_CPLUSPLUS (0x9)
 ; CHECKSYM32-NEXT:   CPU Version ID: TCPU_COM (0x3)
 ; CHECKSYM64-NEXT:   CPU Version ID: TCPU_PPC64 (0x2)
 ; CHECKSYM-NEXT:     StorageClass: C_FILE (0x67)
-; CHECKSYM-NEXT:     NumberOfAuxEntries: 0
-; CHECKSYM-NEXT:   }
-; CHECKSYM-NEXT:   Symbol {
+; CHECKSYM-NEXT:     NumberOfAuxEntries: 2
+; CHECKSYM:        Symbol {
 ; CHECKSYM-NEXT:     Index: [[#Index:]]
 ; CHECKSYM-NEXT:     Name: .bar_extern
 ; CHECKSYM-NEXT:     Value (RelocatableAddress): 0x0
diff --git a/llvm/test/CodeGen/PowerPC/aix-filename-c.ll b/llvm/test/CodeGen/PowerPC/aix-filename-c.ll
index 2adc51cc2aecc..c4202a0c58cee 100644
--- a/llvm/test/CodeGen/PowerPC/aix-filename-c.ll
+++ b/llvm/test/CodeGen/PowerPC/aix-filename-c.ll
@@ -5,7 +5,8 @@
 
 source_filename = "1.c"
 
-; OBJ: Name: 1.c
+; OBJ: Name: .file
 ; OBJ: Source Language ID: TB_C (0x0)
 ; OBJ32: CPU Version ID: TCPU_COM (0x3)
 ; OBJ64: CPU Version ID: TCPU_PPC64 (0x2)
+; OBJ: Name: 1.c
diff --git a/llvm/test/CodeGen/PowerPC/aix-filename-cpp.ll b/llvm/test/CodeGen/PowerPC/aix-filename-cpp.ll
index 22496be1dfc88..802281b6c1eaa 100644
--- a/llvm/test/CodeGen/PowerPC/aix-filename-cpp.ll
+++ b/llvm/test/CodeGen/PowerPC/aix-filename-cpp.ll
@@ -5,7 +5,8 @@
 
 source_filename = "1.cpp"
 
-; OBJ: Name: 1.cpp
+; OBJ: Name: .file
 ; OBJ: Source Language ID: TB_CPLUSPLUS (0x9)
 ; OBJ32: CPU Version ID: TCPU_COM (0x3)
 ; OBJ64: CPU Version ID: TCPU_PPC64 (0x2)
+; OBJ: Name: 1.cpp
diff --git a/llvm/test/CodeGen/PowerPC/aix-filename-f.ll b/llvm/test/CodeGen/PowerPC/aix-filename-f.ll
index 914c4facc3cf5..99036bde702d6 100644
--- a/llvm/test/CodeGen/PowerPC/aix-filename-f.ll
+++ b/llvm/test/CodeGen/PowerPC/aix-filename-f.ll
@@ -5,7 +5,8 @@
 
 source_filename = "1.f95"
 
-; OBJ: Name: 1.f95
+; OBJ: Name: .file
 ; OBJ: Source Language ID: TB_Fortran (0x1)
 ; OBJ32: CPU Version ID: TCPU_COM (0x3)
 ; OBJ64: CPU Version ID: TCPU_PPC64 (0x2)
+; OBJ: Name: 1.f95
diff --git a/llvm/test/CodeGen/PowerPC/aix-func-dsc-gen.ll b/llvm/test/CodeGen/PowerPC/aix-func-dsc-gen.ll
index 23fb51e944424..4cca1b4d6f7ba 100644
--- a/llvm/test/CodeGen/PowerPC/aix-func-dsc-gen.ll
+++ b/llvm/test/CodeGen/PowerPC/aix-func-dsc-gen.ll
@@ -13,13 +13,23 @@ entry:
 ; CHECK-NEXT: AddressSize: 32bit
 ; CHECK:        Symbol {
 ; CHECK-NEXT:     Index: 0
-; CHECK-NEXT:     Name: <stdin>
+; CHECK-NEXT:     Name: .file
 ; CHECK-NEXT:     Value (SymbolTableIndex): 0x0
 ; CHECK-NEXT:     Section: N_DEBUG
 ; CHECK-NEXT:     Source Language ID: TB_CPLUSPLUS (0x9)
 ; CHECK-NEXT:     CPU Version ID: TCPU_COM (0x3)
 ; CHECK-NEXT:     StorageClass: C_FILE (0x67)
-; CHECK-NEXT:     NumberOfAuxEntries: 0
+; CHECK-NEXT:     NumberOfAuxEntries: 2
+; CHECK-NEXT:     File Auxiliary Entry {
+; CHECK-NEXT:       Index: 1
+; CHECK-NEXT:       Name:
+; CHECK-NEXT:       Type: XFT_FN (0x0)
+; CHECK-NEXT:     }
+; CHECK-NEXT:     File Auxiliary Entry {
+; CHECK-NEXT:       Index: 2
+; CHECK-NEXT:       Name: LLVM
+; CHECK-NEXT:       Type: XFT_CV (0x2)
+; CHECK-NEXT:     }
 ; CHECK-NEXT:   }
 ; CHECK-NEXT:   Symbol {
 ; CHECK-NEXT:     Index: [[#Index:]]
diff --git a/llvm/test/CodeGen/PowerPC/aix-llvm-intrinsic.ll b/llvm/test/CodeGen/PowerPC/aix-llvm-intrinsic.ll
index 09aec55a5b3df..50677f36e3f7a 100644
--- a/llvm/test/CodeGen/PowerPC/aix-llvm-intrinsic.ll
+++ b/llvm/test/CodeGen/PowerPC/aix-llvm-intrinsic.ll
@@ -7,12 +7,12 @@
 ; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr4 \
 ; RUN:     -mattr=-altivec -filetype=obj -o %t.o < %s
 ; RUN: llvm-readobj --symbols %t.o | FileCheck --check-prefixes=CHECKSYM,CHECKSYM32 %s
-; RUN: llvm-objdump -r -d --symbol-description %t.o | FileCheck --check-prefixes=CHECKRELOC,CHECKRELOC32 %s
+; RUN: llvm-objdump -r -d --symbol-description %t.o | FileCheck -D#NFA=2 --check-prefixes=CHECKRELOC,CHECKRELOC32 %s
 
 ; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr4 \
 ; RUN:     -mattr=-altivec -filetype=obj -o %t64.o < %s
 ; RUN: llvm-readobj --symbols %t64.o | FileCheck --check-prefixes=CHECKSYM,CHECKSYM64 %s
-; RUN: llvm-objdump -r -d --symbol-description %t64.o | FileCheck --check-prefixes=CHECKRELOC,CHECKRELOC64 %s
+; RUN: llvm-objdump -r -d --symbol-description %t64.o | FileCheck -D#NFA=2 --check-prefixes=CHECKRELOC,CHECKRELOC64 %s
 
 %struct.S = type { i32, i32 }
 
@@ -40,17 +40,17 @@ declare void @llvm.memset.p0.i32(ptr nocapture writeonly, i8, i32, i1 immarg)
 
 ; CHECKSYM:        Symbol {
 ; CHECKSYM-NEXT:     Index: 0
-; CHECKSYM-NEXT:     Name: <stdin>
+; CHECKSYM-NEXT:     Name: .file
 ; CHECKSYM-NEXT:     Value (SymbolTableIndex): 0x0
 ; CHECKSYM-NEXT:     Section: N_DEBUG
 ; CHECKSYM-NEXT:     Source Language ID: TB_CPLUSPLUS (0x9)
 ; CHECKSYM32-NEXT:   CPU Version ID: TCPU_COM (0x3)
 ; CHECKSYM64-NEXT:   CPU Version ID: TCPU_PPC64 (0x2)
 ; CHECKSYM-NEXT:     StorageClass: C_FILE (0x67)
-; CHECKSYM-NEXT:     NumberOfAuxEntries: 0
-; CHECKSYM-NEXT:   }
-; CHECKSYM-NEXT:   Symbol {
-; CHECKSYM-NEXT:     Index: 1
+; CHECKSYM-NEXT:     NumberOfAuxEntries: 2
+; CHECKSYM:   }
+; CHECKSYM:   Symbol {
+; CHECKSYM:     Index: 3
 ; CHECKSYM32-NEXT:     Name: .___memset
 ; CHECKSYM64-NEXT:     Name: .___memset64
 ; CHECKSYM-NEXT:     Value (RelocatableAddress): 0x0
@@ -59,7 +59,7 @@ declare void @llvm.memset.p0.i32(ptr nocapture writeonly, i8, i32, i1 immarg)
 ; CHECKSYM-NEXT:     StorageClass: C_EXT (0x2)
 ; CHECKSYM-NEXT:     NumberOfAuxEntries: 1
 ; CHECKSYM-NEXT:     CSECT Auxiliary Entry {
-; CHECKSYM-NEXT:       Index: 2
+; CHECKSYM-NEXT:       Index: 4
 ; CHECKSYM-NEXT:       SectionLen: 0
 ; CHECKSYM-NEXT:       ParameterHashIndex: 0x0
 ; CHECKSYM-NEXT:       TypeChkSectNum: 0x0
@@ -72,19 +72,19 @@ declare void @llvm.memset.p0.i32(ptr nocapture writeonly, i8, i32, i1 immarg)
 ; CHECKSYM-NEXT:     }
 ; CHECKSYM-NEXT:   }
 
-; CHECKRELOC32:      00000000 (idx: 7) .bar:
-; CHECKRELOC64:      0000000000000000 (idx: 7) .bar:
+; CHECKRELOC32:      00000000 (idx: [[#NFA+7]]) .bar:
+; CHECKRELOC64:      0000000000000000 (idx: [[#NFA+7]]) .bar:
 ; CHECKRELOC-NEXT:        0: 7c 08 02 a6                        mflr 0
 ; CHECKRELOC32-NEXT:...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/80162


More information about the llvm-commits mailing list