[llvm-branch-commits] [llvm] release/22.x: [PowerPC] Only set QualName symbol on first section switch (#179253) (PR #179631)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Wed Feb 4 01:28:59 PST 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-powerpc
Author: None (llvmbot)
<details>
<summary>Changes</summary>
Backport 90c632ab48748808e95d9bb8cd4f3028888dc1b0
Requested by: @<!-- -->nikic
---
Full diff: https://github.com/llvm/llvm-project/pull/179631.diff
2 Files Affected:
- (modified) llvm/lib/MC/MCXCOFFStreamer.cpp (+6-2)
- (added) llvm/test/CodeGen/PowerPC/aix-debug-aranges.ll (+28)
``````````diff
diff --git a/llvm/lib/MC/MCXCOFFStreamer.cpp b/llvm/lib/MC/MCXCOFFStreamer.cpp
index 4bf14c11068cb..b459b26045ae7 100644
--- a/llvm/lib/MC/MCXCOFFStreamer.cpp
+++ b/llvm/lib/MC/MCXCOFFStreamer.cpp
@@ -45,8 +45,12 @@ void MCXCOFFStreamer::changeSection(MCSection *Section, uint32_t Subsection) {
// sections because we don't have other cases that hit this problem yet.
// if (IsDwarfSec || CsectProp->MappingClass == XCOFF::XMC_PR)
// QualName->setFragment(F);
- if (Sec->isDwarfSect() || Sec->getMappingClass() == XCOFF::XMC_PR)
- Sec->getQualNameSymbol()->setFragment(CurFrag);
+ if (Sec->isDwarfSect() || Sec->getMappingClass() == XCOFF::XMC_PR) {
+ MCSymbol *QualNameSymbol = Sec->getQualNameSymbol();
+ // Only set the fragment the first time we're switching to the section.
+ if (!QualNameSymbol->isInSection())
+ QualNameSymbol->setFragment(CurFrag);
+ }
}
bool MCXCOFFStreamer::emitSymbolAttribute(MCSymbol *Sym,
diff --git a/llvm/test/CodeGen/PowerPC/aix-debug-aranges.ll b/llvm/test/CodeGen/PowerPC/aix-debug-aranges.ll
new file mode 100644
index 0000000000000..7b850b6f2a2d0
--- /dev/null
+++ b/llvm/test/CodeGen/PowerPC/aix-debug-aranges.ll
@@ -0,0 +1,28 @@
+; RUN: llc -filetype=obj -function-sections -generate-arange-section < %s | \
+; RUN: llvm-objdump -dr - | FileCheck %s
+
+; Make sure that enabling debug_arange does not corrupt branches.
+
+target triple = "powerpc64-ibm-aix"
+
+define i64 @fn1() {
+; CHECK-LABEL: <.fn1>:
+; CHECK: bl {{.*}} <.fn2>
+; CHECK-NEXT: R_RBR .fn2
+ %1 = call i64 @fn2()
+ ret i64 %1
+}
+
+define i64 @fn2() !dbg !4 {
+ ret i64 0
+}
+
+!llvm.module.flags = !{!0}
+!llvm.dbg.cu = !{!1}
+
+!0 = !{i32 2, !"Debug Info Version", i32 3}
+!1 = distinct !DICompileUnit(language: DW_LANG_Rust, file: !2, producer: "clang LLVM (rustc version 1.95.0-dev)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !3, globals: !3, splitDebugInlining: false, nameTableKind: None)
+!2 = !DIFile(filename: "foo", directory: "")
+!3 = !{}
+!4 = distinct !DISubprogram(name: "fn2", file: !2, line: 277, type: !5, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !1, templateParams: !3, retainedNodes: !3)
+!5 = !DISubroutineType(types: !3)
``````````
</details>
https://github.com/llvm/llvm-project/pull/179631
More information about the llvm-branch-commits
mailing list