Author: Dhruv Srivastava
Date: 2025-05-12T17:52:02+05:30
New Revision: 39f5a420b6801c0cb6035ec77c53154674786a60

URL: 
https://github.com/llvm/llvm-project/commit/39f5a420b6801c0cb6035ec77c53154674786a60
DIFF: 
https://github.com/llvm/llvm-project/commit/39f5a420b6801c0cb6035ec77c53154674786a60.diff

LOG: [lldb][AIX] Support for XCOFF Sections (#131304)

This PR is in reference to porting LLDB on AIX.

Link to discussions on llvm discourse and github:

1. https://discourse.llvm.org/t/port-lldb-to-ibm-aix/80640
2. https://github.com/llvm/llvm-project/issues/101657
The complete changes for porting are present in this draft PR:
https://github.com/llvm/llvm-project/pull/102601

Incremental PR on ObjectFileXCOFF.cpp
This PR is intended to handle XCOFF sections.

Added: 
    

Modified: 
    lldb/source/Plugins/ObjectFile/XCOFF/ObjectFileXCOFF.cpp
    lldb/test/Shell/ObjectFile/XCOFF/basic-info.yaml

Removed: 
    


################################################################################
diff  --git a/lldb/source/Plugins/ObjectFile/XCOFF/ObjectFileXCOFF.cpp 
b/lldb/source/Plugins/ObjectFile/XCOFF/ObjectFileXCOFF.cpp
index b54d43c5dd737..1666677c360ba 100644
--- a/lldb/source/Plugins/ObjectFile/XCOFF/ObjectFileXCOFF.cpp
+++ b/lldb/source/Plugins/ObjectFile/XCOFF/ObjectFileXCOFF.cpp
@@ -190,7 +190,55 @@ void ObjectFileXCOFF::ParseSymtab(Symtab &lldb_symtab) {}
 
 bool ObjectFileXCOFF::IsStripped() { return false; }
 
-void ObjectFileXCOFF::CreateSections(SectionList &unified_section_list) {}
+void ObjectFileXCOFF::CreateSections(SectionList &unified_section_list) {
+  if (m_sections_up)
+    return;
+
+  m_sections_up = std::make_unique<SectionList>();
+  ModuleSP module_sp(GetModule());
+
+  if (!module_sp)
+    return;
+
+  std::lock_guard<std::recursive_mutex> guard(module_sp->GetMutex());
+
+  int idx = 0;
+  for (const llvm::object::XCOFFSectionHeader64 &section :
+       m_binary->sections64()) {
+
+    ConstString const_sect_name(section.Name);
+
+    SectionType section_type = lldb::eSectionTypeOther;
+    if (section.Flags & XCOFF::STYP_TEXT)
+      section_type = eSectionTypeCode;
+    else if (section.Flags & XCOFF::STYP_DATA)
+      section_type = eSectionTypeData;
+    else if (section.Flags & XCOFF::STYP_BSS)
+      section_type = eSectionTypeZeroFill;
+    else if (section.Flags & XCOFF::STYP_DWARF) {
+      section_type = llvm::StringSwitch<SectionType>(section.Name)
+                         .Case(".dwinfo", eSectionTypeDWARFDebugInfo)
+                         .Case(".dwline", eSectionTypeDWARFDebugLine)
+                         .Case(".dwabrev", eSectionTypeDWARFDebugAbbrev)
+                         .Default(eSectionTypeInvalid);
+    }
+
+    SectionSP section_sp(new Section(
+        module_sp, this, ++idx, const_sect_name, section_type,
+        section.VirtualAddress, section.SectionSize,
+        section.FileOffsetToRawData, section.SectionSize, 0, section.Flags));
+
+    uint32_t permissions = ePermissionsReadable;
+    if (section.Flags & (XCOFF::STYP_DATA | XCOFF::STYP_BSS))
+      permissions |= ePermissionsWritable;
+    if (section.Flags & XCOFF::STYP_TEXT)
+      permissions |= ePermissionsExecutable;
+
+    section_sp->SetPermissions(permissions);
+    m_sections_up->AddSection(section_sp);
+    unified_section_list.AddSection(section_sp);
+  }
+}
 
 void ObjectFileXCOFF::Dump(Stream *s) {}
 

diff  --git a/lldb/test/Shell/ObjectFile/XCOFF/basic-info.yaml 
b/lldb/test/Shell/ObjectFile/XCOFF/basic-info.yaml
index 3c0037db36dbb..17ff2f31c2fff 100644
--- a/lldb/test/Shell/ObjectFile/XCOFF/basic-info.yaml
+++ b/lldb/test/Shell/ObjectFile/XCOFF/basic-info.yaml
@@ -7,11 +7,32 @@
 # CHECK: Stripped: false
 # CHECK: Type: executable
 # CHECK: Strata: unknown
+# CHECK: Name: .text
+# CHECK-NEXT: Type: code
+# CHECK-NEXT: Permissions: r-x
+# CHECK: Name: .data
+# CHECK-NEXT: Type: data
+# CHECK-NEXT: Permissions: rw-
+# CHECK: Name: .bss
+# CHECK-NEXT: Type: zero-fill
+# CHECK-NEXT: Permissions: rw-
+# CHECK: Name: .loader
+# CHECK-NEXT: Type: regular
+# CHECK-NEXT: Permissions: r--
+# CHECK: Name: .dwline
+# CHECK-NEXT: Type: dwarf-line
+# CHECK-NEXT: Permissions: r--
+# CHECK: Name: .dwinfo
+# CHECK-NEXT: Type: dwarf-info
+# CHECK-NEXT: Permissions: r--
+# CHECK: Name: .dwabrev
+# CHECK-NEXT: Type: dwarf-abbrev
+# CHECK-NEXT: Permissions: r--
 
 --- !XCOFF
 FileHeader:
   MagicNumber:     0x1F7
-  NumberOfSections: 1 
+  NumberOfSections: 7 
   CreationTime:    000000000
   Flags:           0x0002
 Sections:
@@ -22,6 +43,66 @@ Sections:
     FileOffsetToLineNumbers: 0x0
     NumberOfLineNumbers: 0x0
     Flags:           [ STYP_TEXT ]
-    SectionData:     E8C20000E94204  
+    SectionData:     E8C20000
+  - Name:            .data
+    Address:         0x1100008D2
+    Size:            0x2AE
+    FileOffsetToData: 0x8D2
+    FileOffsetToRelocations: 0x132E
+    FileOffsetToLineNumbers: 0x0
+    NumberOfRelocations: 0x22
+    NumberOfLineNumbers: 0x0
+    Flags:           [ STYP_DATA ]
+    SectionData:     '' 
+  - Name:            .bss
+    Address:         0x110000B80
+    Size:            0x28
+    FileOffsetToData: 0x0
+    FileOffsetToRelocations: 0x0
+    FileOffsetToLineNumbers: 0x0
+    NumberOfRelocations: 0x0
+    NumberOfLineNumbers: 0x0
+    Flags:           [ STYP_BSS ]
+    SectionData:     ''
+  - Name:            .loader
+    Address:         0x0
+    Size:            0x413
+    FileOffsetToData: 0xB80
+    FileOffsetToRelocations: 0x0
+    FileOffsetToLineNumbers: 0x0
+    NumberOfRelocations: 0x0
+    NumberOfLineNumbers: 0x0
+    Flags:           [ STYP_LOADER ]
+    SectionData:     00000001
+  - Name:            .dwline
+    Address:         0x0
+    Size:            0x9C
+    FileOffsetToData: 0xF94
+    FileOffsetToRelocations: 0x150A
+    FileOffsetToLineNumbers: 0x0
+    NumberOfRelocations: 0x5
+    NumberOfLineNumbers: 0x0
+    Flags:           [ STYP_DWARF ]
+    SectionData:     FFFFFFFF
+  - Name:            .dwinfo
+    Address:         0x0
+    Size:            0xDD
+    FileOffsetToData: 0x1030
+    FileOffsetToRelocations: 0x1550
+    FileOffsetToLineNumbers: 0x0
+    NumberOfRelocations: 0x6
+    NumberOfLineNumbers: 0x0
+    Flags:           [ STYP_DWARF ]
+    SectionData:     FFFFFFFF
+  - Name:            .dwabrev
+    Address:         0x0
+    Size:            0x43
+    FileOffsetToData: 0x110E
+    FileOffsetToRelocations: 0x0
+    FileOffsetToLineNumbers: 0x0
+    NumberOfRelocations: 0x0
+    NumberOfLineNumbers: 0x0
+    Flags:           [ STYP_DWARF ]
+    SectionData:     01110125
 StringTable:     {}
 ...


        
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to