Skip to content

Commit

Permalink
Revert "Encode address offsets of basic blocks relative to the end of…
Browse files Browse the repository at this point in the history
… the previous basic blocks."

This reverts commit 029283c.
The code in `ELFFile::decodeBBAddrMap` was not changed in the submitted patch.

Differential Revision: https://reviews.llvm.org/D120457
  • Loading branch information
rlavaee committed Feb 24, 2022
1 parent da11f17 commit aeec967
Show file tree
Hide file tree
Showing 5 changed files with 8 additions and 14 deletions.
7 changes: 2 additions & 5 deletions llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
Expand Up @@ -1152,19 +1152,16 @@ void AsmPrinter::emitBBAddrMapSection(const MachineFunction &MF) {
OutStreamer->emitSymbolValue(FunctionSymbol, getPointerSize());
// Emit the total number of basic blocks in this function.
OutStreamer->emitULEB128IntValue(MF.size());
const MCSymbol *PrevMBBEndSymbol = FunctionSymbol;
// Emit BB Information for each basic block in the funciton.
for (const MachineBasicBlock &MBB : MF) {
const MCSymbol *MBBSymbol =
MBB.isEntryBlock() ? FunctionSymbol : MBB.getSymbol();
// Emit the basic block offset relative to the end of the previous block.
// This is zero unless the block is padded due to alignment.
emitLabelDifferenceAsULEB128(MBBSymbol, PrevMBBEndSymbol);
// Emit the basic block offset.
emitLabelDifferenceAsULEB128(MBBSymbol, FunctionSymbol);
// Emit the basic block size. When BBs have alignments, their size cannot
// always be computed from their offsets.
emitLabelDifferenceAsULEB128(MBB.getEndSymbol(), MBBSymbol);
OutStreamer->emitULEB128IntValue(getBBAddrMapMetadata(MBB));
PrevMBBEndSymbol = MBB.getEndSymbol();
}
OutStreamer->PopSection();
}
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/CodeGen/BasicBlockSections.cpp
Expand Up @@ -60,7 +60,7 @@
// Basic Block Labels
// ==================
//
// With -fbasic-block-sections=labels, we encode the offsets of BB addresses of
// With -fbasic-block-sections=labels, we emit the offsets of BB addresses of
// every function into the .llvm_bb_addr_map section. Along with the function
// symbols, this allows for mapping of virtual addresses in PMU profiles back to
// the corresponding basic blocks. This logic is implemented in AsmPrinter. This
Expand Down
6 changes: 3 additions & 3 deletions llvm/test/CodeGen/X86/basic-block-sections-labels.ll
Expand Up @@ -51,12 +51,12 @@ declare i32 @__gxx_personality_v0(...)
; CHECK-NEXT: .uleb128 .Lfunc_begin0-.Lfunc_begin0
; CHECK-NEXT: .uleb128 .LBB_END0_0-.Lfunc_begin0
; CHECK-NEXT: .byte 8
; CHECK-NEXT: .uleb128 .LBB0_1-.LBB_END0_0
; CHECK-NEXT: .uleb128 .LBB0_1-.Lfunc_begin0
; CHECK-NEXT: .uleb128 .LBB_END0_1-.LBB0_1
; CHECK-NEXT: .byte 8
; CHECK-NEXT: .uleb128 .LBB0_2-.LBB_END0_1
; CHECK-NEXT: .uleb128 .LBB0_2-.Lfunc_begin0
; CHECK-NEXT: .uleb128 .LBB_END0_2-.LBB0_2
; CHECK-NEXT: .byte 1
; CHECK-NEXT: .uleb128 .LBB0_3-.LBB_END0_2
; CHECK-NEXT: .uleb128 .LBB0_3-.Lfunc_begin0
; CHECK-NEXT: .uleb128 .LBB_END0_3-.LBB0_3
; CHECK-NEXT: .byte 5
2 changes: 1 addition & 1 deletion llvm/test/tools/llvm-readobj/ELF/bb-addr-map.test
Expand Up @@ -30,7 +30,7 @@
# LLVM-NEXT: CanFallThrough: No
# LLVM-NEXT: }
# LLVM-NEXT: {
# LLVM-NEXT: Offset: 0x4
# LLVM-NEXT: Offset: 0x3
# LLVM-NEXT: Size: 0x4
# LLVM-NEXT: HasReturn: Yes
# LLVM-NEXT: HasTailCall: No
Expand Down
5 changes: 1 addition & 4 deletions llvm/tools/llvm-readobj/ELFDumper.cpp
Expand Up @@ -6983,13 +6983,10 @@ template <class ELFT> void LLVMELFDumper<ELFT>::printBBAddrMaps() {
W.printString("Name", FuncName);

ListScope L(W, "BB entries");
uint32_t FunctionRelativeAddress = 0;
for (const BBAddrMap::BBEntry &BBE : AM.BBEntries) {
DictScope L(W);
FunctionRelativeAddress += BBE.Offset;
W.printHex("Offset", FunctionRelativeAddress);
W.printHex("Offset", BBE.Offset);
W.printHex("Size", BBE.Size);
FunctionRelativeAddress += BBE.Size;
W.printBoolean("HasReturn", BBE.HasReturn);
W.printBoolean("HasTailCall", BBE.HasTailCall);
W.printBoolean("IsEHPad", BBE.IsEHPad);
Expand Down

0 comments on commit aeec967

Please sign in to comment.