Skip to content

Commit 8738b3e

Browse files
committed
Move the large common indicator; Rename SHN_AMD64_LCOMMON; Undo the ELFDumper change from this PR
1 parent 7bff05f commit 8738b3e

File tree

8 files changed

+18
-20
lines changed

8 files changed

+18
-20
lines changed

llvm/include/llvm/BinaryFormat/ELF.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -591,7 +591,7 @@ enum {
591591

592592
// x86-64 speciifc section index
593593
enum {
594-
SHN_AMD64_LCOMMON = 0xff02, // Large FORTRAN COMMON variables
594+
SHN_X86_64_LCOMMON = 0xff02, // Large FORTRAN COMMON variables
595595
};
596596

597597
// ELF Relocation types for Mips

llvm/include/llvm/MC/MCSymbolELF.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ class MCSymbolELF : public MCSymbol {
1717
/// An expression describing how to calculate the size of a symbol. If a
1818
/// symbol has no size this field will be NULL.
1919
const MCExpr *SymbolSize = nullptr;
20-
bool IsLargeCommon = false;
2120

2221
public:
2322
MCSymbolELF(const MCSymbolTableEntry *Name, bool isTemporary)
@@ -49,8 +48,8 @@ class MCSymbolELF : public MCSymbol {
4948
void setMemtag(bool Tagged);
5049
bool isMemtag() const;
5150

52-
bool isLargeCommon() const { return IsLargeCommon; }
53-
void setIsLargeCommon(bool V) { IsLargeCommon = V; }
51+
void setIsLargeCommon();
52+
bool isLargeCommon() const;
5453

5554
private:
5655
void setIsBindingSet() const;

llvm/include/llvm/Object/ELFTypes.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ struct Elf_Sym_Impl : Elf_Sym_Base<ELFT> {
252252
return getType() == ELF::STT_COMMON || st_shndx == ELF::SHN_COMMON;
253253
}
254254

255-
bool isLargeCommon() const { return st_shndx == ELF::SHN_AMD64_LCOMMON; }
255+
bool isLargeCommon() const { return st_shndx == ELF::SHN_X86_64_LCOMMON; }
256256

257257
bool isDefined() const { return !isUndefined(); }
258258

llvm/lib/MC/ELFObjectWriter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -546,7 +546,7 @@ void ELFWriter::computeSymbolTable(const RevGroupMapTy &RevGroupMap) {
546546
if (!Shndx) {
547547
assert(!Local);
548548
if (Symbol.isLargeCommon())
549-
Shndx = ELF::SHN_AMD64_LCOMMON;
549+
Shndx = ELF::SHN_X86_64_LCOMMON;
550550
else
551551
Shndx = ELF::SHN_COMMON;
552552
}

llvm/lib/MC/MCELFStreamer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ void MCELFStreamer::emitLargeCommonSymbol(MCSymbol *S, uint64_t Size,
257257
if (Symbol->declareCommon(Size, ByteAlignment))
258258
report_fatal_error(Twine("Symbol: ") + Symbol->getName() +
259259
" redeclared as different type");
260-
Symbol->setIsLargeCommon(true);
260+
Symbol->setIsLargeCommon();
261261
Symbol->setSize(MCConstantExpr::create(Size, getContext()));
262262
}
263263

llvm/lib/MC/MCSymbolELF.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ enum {
3737

3838
// One bit.
3939
ELF_IsMemoryTagged_Shift = 13,
40+
41+
// One bit.
42+
ELF_LargeCommon_Shift = 14,
4043
};
4144
}
4245

@@ -206,4 +209,13 @@ void MCSymbolELF::setMemtag(bool Tagged) {
206209
else
207210
setFlags(OtherFlags);
208211
}
212+
213+
bool MCSymbolELF::isLargeCommon() const {
214+
return getFlags() & (0x1 << ELF_LargeCommon_Shift);
215+
}
216+
217+
void MCSymbolELF::setIsLargeCommon() {
218+
uint32_t OtherFlags = getFlags() & ~(0x1 << ELF_LargeCommon_Shift);
219+
setFlags(OtherFlags | (1 << ELF_LargeCommon_Shift));
220+
}
209221
}

llvm/test/MC/X86/largecomm.ll

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
; RUN: llc -filetype=asm -code-model=medium %s --large-data-threshold=65636 -o - | FileCheck %s --check-prefix=CHECKASM-MEDIUM
22
; RUN: llc -filetype=asm -code-model=large %s -o - | FileCheck %s --check-prefix=CHECKASM-LARGE
3-
; RUN: llc -filetype=asm -code-model=medium %s --large-data-threshold=65636 -o - | llvm-mc -triple x86_64-linux-gnu -filetype=obj - | llvm-readelf -s - | FileCheck %s --check-prefix=CHECKOBJ-MEDIUM
4-
; RUN: llc -filetype=asm -code-model=large %s -o - | llvm-mc -triple x86_64-linux-gnu -filetype=obj - | llvm-readelf -s - | FileCheck %s --check-prefix=CHECKOBJ-LARGE
53

64
; CHECKASM-MEDIUM: .section .lbss,"awl",@nobits
75
; CHECKASM-MEDIUM-NEXT: .type __BLNK__,@object # @__BLNK__
@@ -15,12 +13,6 @@
1513
; CHECKASM-LARGE-NEXT: .type ccc_,@object # @ccc_
1614
; CHECKASM-LARGE-NEXT: .largecomm ccc_,8,8
1715

18-
; CHECKOBJ-MEDIUM: 8 OBJECT GLOBAL DEFAULT COM ccc_
19-
; CHECKOBJ-MEDIUM: 48394093832 OBJECT GLOBAL DEFAULT LARGE_COMMON __BLNK
20-
21-
; CHECKOBJ-LARGE: 8 OBJECT GLOBAL DEFAULT LARGE_COMMON ccc_
22-
; CHECKOBJ-LARGE: 48394093832 OBJECT GLOBAL DEFAULT LARGE_COMMON __BLNK__
23-
2416
source_filename = "FIRModule"
2517
target triple = "x86_64-unknown-linux-gnu"
2618

llvm/tools/llvm-readobj/ELFDumper.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1052,8 +1052,6 @@ ELFDumper<ELFT>::getSymbolSectionIndex(const Elf_Sym &Symbol, unsigned SymIndex,
10521052
return CreateErr("SHN_ABS");
10531053
if (Ndx == ELF::SHN_COMMON)
10541054
return CreateErr("SHN_COMMON");
1055-
if (Ndx == ELF::SHN_AMD64_LCOMMON)
1056-
return CreateErr("SHN_AMD64_LCOMMON");
10571055
return CreateErr("SHN_LORESERVE", Ndx - SHN_LORESERVE);
10581056
}
10591057

@@ -4310,9 +4308,6 @@ std::string GNUELFDumper<ELFT>::getSymbolSectionNdx(
43104308
default:
43114309
// Find if:
43124310
// Processor specific
4313-
if (this->Obj.getHeader().e_machine == EM_X86_64 &&
4314-
SectionIndex == ELF::SHN_AMD64_LCOMMON)
4315-
return "LARGE_COMMON";
43164311
if (SectionIndex >= ELF::SHN_LOPROC && SectionIndex <= ELF::SHN_HIPROC)
43174312
return std::string("PRC[0x") +
43184313
to_string(format_hex_no_prefix(SectionIndex, 4)) + "]";

0 commit comments

Comments
 (0)