[PATCH] D92113: Let .llvm_bb_addr_map section use the same unique id as its associated .text section.

Rahman Lavaee via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Nov 25 10:23:19 PST 2020


rahmanl created this revision.
rahmanl added reviewers: tmsriram, MaskRay.
Herald added subscribers: llvm-commits, pengfei, hiraditya.
Herald added a project: LLVM.
rahmanl updated this revision to Diff 307652.
rahmanl added a comment.
rahmanl added a subscriber: grimar.
rahmanl published this revision for review.

- Add comment.


Currently, `llvm_bb_addr_map` sections are generated per section names because we use
the `LinkedToSymbol` argument of getELFSection. This will cause the address map tables of functions
grouped into the same section when `-function-sections=true -unique-section-names=false` which is not
the intended behaviour. This patch lets the unique id of every `.text` section propagate to the associated
`.llvm_bb_addr_map` section.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D92113

Files:
  llvm/lib/MC/MCObjectFileInfo.cpp
  llvm/test/CodeGen/X86/basic-block-sections-labels.ll


Index: llvm/test/CodeGen/X86/basic-block-sections-labels.ll
===================================================================
--- llvm/test/CodeGen/X86/basic-block-sections-labels.ll
+++ llvm/test/CodeGen/X86/basic-block-sections-labels.ll
@@ -1,5 +1,6 @@
 ; Check the basic block sections labels option
-; RUN: llc < %s -mtriple=x86_64 -function-sections -basic-block-sections=labels | FileCheck %s
+; RUN: llc < %s -mtriple=x86_64 -function-sections -unique-section-names=true -basic-block-sections=labels | FileCheck %s -check-prefix=UNIQ
+; RUN: llc < %s -mtriple=x86_64 -function-sections -unique-section-names=false -basic-block-sections=labels | FileCheck %s -check-prefix=NOUNIQ
 
 define void @_Z3bazb(i1 zeroext) personality i32 (...)* @__gxx_personality_v0 {
   br i1 %0, label %2, label %7
@@ -28,29 +29,33 @@
 
 declare i32 @__gxx_personality_v0(...)
 
-; CHECK-LABEL:	_Z3bazb:
-; CHECK-LABEL:	.Lfunc_begin0:
-; CHECK-LABEL:	.LBB_END0_0:
-; CHECK-LABEL:	.LBB0_1:
-; CHECK-LABEL:	.LBB_END0_1:
-; CHECK-LABEL:	.LBB0_2:
-; CHECK-LABEL:	.LBB_END0_2:
-; CHECK-LABEL:	.LBB0_3:
-; CHECK-LABEL:	.LBB_END0_3:
-; CHECK-LABEL:	.Lfunc_end0:
-
-; CHECK:	.section	.llvm_bb_addr_map,"o", at llvm_bb_addr_map,.text
-; CHECK-NEXT:	.quad	.Lfunc_begin0
-; CHECK-NEXT:	.byte	4
-; CHECK-NEXT:	.uleb128 .Lfunc_begin0-.Lfunc_begin0
-; CHECK-NEXT:	.uleb128 .LBB_END0_0-.Lfunc_begin0
-; CHECK-NEXT:	.byte	0
-; CHECK-NEXT:	.uleb128 .LBB0_1-.Lfunc_begin0
-; CHECK-NEXT:	.uleb128 .LBB_END0_1-.LBB0_1
-; CHECK-NEXT:	.byte	0
-; CHECK-NEXT:	.uleb128 .LBB0_2-.Lfunc_begin0
-; CHECK-NEXT:	.uleb128 .LBB_END0_2-.LBB0_2
-; CHECK-NEXT:	.byte	1
-; CHECK-NEXT:	.uleb128 .LBB0_3-.Lfunc_begin0
-; CHECK-NEXT:	.uleb128 .LBB_END0_3-.LBB0_3
-; CHECK-NEXT:	.byte	5
+; UNIQ: .section .text._Z3bazb,"ax", at progbits
+; NOUNIQ: .section .text,"ax", at progbits,unique,1
+; CHECK-LABEL:  _Z3bazb:
+; CHECK-LABEL:  .Lfunc_begin0:
+; CHECK-LABEL:  .LBB_END0_0:
+; CHECK-LABEL:  .LBB0_1:
+; CHECK-LABEL:  .LBB_END0_1:
+; CHECK-LABEL:  .LBB0_2:
+; CHECK-LABEL:  .LBB_END0_2:
+; CHECK-LABEL:  .LBB0_3:
+; CHECK-LABEL:  .LBB_END0_3:
+; CHECK-LABEL:  .Lfunc_end0:
+
+; UNIQ: .section	.llvm_bb_addr_map,"o", at llvm_bb_addr_map,.text._Z3bazb
+;; Verify that with -unique-section-names=false, the unique id of the text section gets assigned to the llvm_bb_addr_map section.
+; NOUNIQ: .section	.llvm_bb_addr_map,"o", at llvm_bb_addr_map,.text,unique,1
+; CHECK-NEXT: .quad	.Lfunc_begin0
+; CHECK-NEXT: .byte	4
+; CHECK-NEXT: .uleb128 .Lfunc_begin0-.Lfunc_begin0
+; CHECK-NEXT: .uleb128 .LBB_END0_0-.Lfunc_begin0
+; CHECK-NEXT: .byte	0
+; CHECK-NEXT: .uleb128 .LBB0_1-.Lfunc_begin0
+; CHECK-NEXT: .uleb128 .LBB_END0_1-.LBB0_1
+; CHECK-NEXT: .byte	0
+; CHECK-NEXT: .uleb128 .LBB0_2-.Lfunc_begin0
+; CHECK-NEXT: .uleb128 .LBB_END0_2-.LBB0_2
+; CHECK-NEXT: .byte	1
+; CHECK-NEXT: .uleb128 .LBB0_3-.Lfunc_begin0
+; CHECK-NEXT: .uleb128 .LBB_END0_3-.LBB0_3
+; CHECK-NEXT: .byte	5
Index: llvm/lib/MC/MCObjectFileInfo.cpp
===================================================================
--- llvm/lib/MC/MCObjectFileInfo.cpp
+++ llvm/lib/MC/MCObjectFileInfo.cpp
@@ -1014,7 +1014,9 @@
     Flags |= ELF::SHF_GROUP;
   }
 
+  // Use the text section's begin symbol and unique ID to create a separate
+  // .llvm_bb_addr_map section associated with every unique text section.
   return Ctx->getELFSection(".llvm_bb_addr_map", ELF::SHT_LLVM_BB_ADDR_MAP,
-                            Flags, 0, GroupName, MCSection::NonUniqueID,
+                            Flags, 0, GroupName, ElfSec.getUniqueID(),
                             cast<MCSymbolELF>(TextSec.getBeginSymbol()));
 }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D92113.307652.patch
Type: text/x-patch
Size: 3612 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20201125/b818b9c8/attachment.bin>


More information about the llvm-commits mailing list