[llvm] r295128 - Split WinCOFFObjectWriter::defineSection. NFC.
Rui Ueyama via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 14 16:15:54 PST 2017
Author: ruiu
Date: Tue Feb 14 18:15:54 2017
New Revision: 295128
URL: http://llvm.org/viewvc/llvm-project?rev=295128&view=rev
Log:
Split WinCOFFObjectWriter::defineSection. NFC.
Modified:
llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp
Modified: llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp?rev=295128&r1=295127&r2=295128&view=diff
==============================================================================
--- llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp (original)
+++ llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp Tue Feb 14 18:15:54 2017
@@ -239,11 +239,47 @@ COFFSection *WinCOFFObjectWriter::create
return Sections.back().get();
}
+static uint32_t getAlignment(const MCSectionCOFF &Sec) {
+ switch (Sec.getAlignment()) {
+ case 1:
+ return COFF::IMAGE_SCN_ALIGN_1BYTES;
+ case 2:
+ return COFF::IMAGE_SCN_ALIGN_2BYTES;
+ case 4:
+ return COFF::IMAGE_SCN_ALIGN_4BYTES;
+ case 8:
+ return COFF::IMAGE_SCN_ALIGN_8BYTES;
+ case 16:
+ return COFF::IMAGE_SCN_ALIGN_16BYTES;
+ case 32:
+ return COFF::IMAGE_SCN_ALIGN_32BYTES;
+ case 64:
+ return COFF::IMAGE_SCN_ALIGN_64BYTES;
+ case 128:
+ return COFF::IMAGE_SCN_ALIGN_128BYTES;
+ case 256:
+ return COFF::IMAGE_SCN_ALIGN_256BYTES;
+ case 512:
+ return COFF::IMAGE_SCN_ALIGN_512BYTES;
+ case 1024:
+ return COFF::IMAGE_SCN_ALIGN_1024BYTES;
+ case 2048:
+ return COFF::IMAGE_SCN_ALIGN_2048BYTES;
+ case 4096:
+ return COFF::IMAGE_SCN_ALIGN_4096BYTES;
+ case 8192:
+ return COFF::IMAGE_SCN_ALIGN_8192BYTES;
+ }
+ llvm_unreachable("unsupported section alignment");
+}
+
/// This function takes a section data object from the assembler
/// and creates the associated COFF section staging object.
-void WinCOFFObjectWriter::defineSection(MCSectionCOFF const &Sec) {
+void WinCOFFObjectWriter::defineSection(const MCSectionCOFF &Sec) {
COFFSection *coff_section = createSection(Sec.getSectionName());
COFFSymbol *coff_symbol = createSymbol(Sec.getSectionName());
+
+ // Create a COMDAT symbol if needed.
if (Sec.getSelection() != COFF::IMAGE_COMDAT_SELECT_ASSOCIATIVE) {
if (const MCSymbol *S = Sec.getCOMDATSymbol()) {
COFFSymbol *COMDATSymbol = GetOrCreateCOFFSymbol(S);
@@ -266,52 +302,7 @@ void WinCOFFObjectWriter::defineSection(
coff_section->Header.Characteristics = Sec.getCharacteristics();
uint32_t &Characteristics = coff_section->Header.Characteristics;
- switch (Sec.getAlignment()) {
- case 1:
- Characteristics |= COFF::IMAGE_SCN_ALIGN_1BYTES;
- break;
- case 2:
- Characteristics |= COFF::IMAGE_SCN_ALIGN_2BYTES;
- break;
- case 4:
- Characteristics |= COFF::IMAGE_SCN_ALIGN_4BYTES;
- break;
- case 8:
- Characteristics |= COFF::IMAGE_SCN_ALIGN_8BYTES;
- break;
- case 16:
- Characteristics |= COFF::IMAGE_SCN_ALIGN_16BYTES;
- break;
- case 32:
- Characteristics |= COFF::IMAGE_SCN_ALIGN_32BYTES;
- break;
- case 64:
- Characteristics |= COFF::IMAGE_SCN_ALIGN_64BYTES;
- break;
- case 128:
- Characteristics |= COFF::IMAGE_SCN_ALIGN_128BYTES;
- break;
- case 256:
- Characteristics |= COFF::IMAGE_SCN_ALIGN_256BYTES;
- break;
- case 512:
- Characteristics |= COFF::IMAGE_SCN_ALIGN_512BYTES;
- break;
- case 1024:
- Characteristics |= COFF::IMAGE_SCN_ALIGN_1024BYTES;
- break;
- case 2048:
- Characteristics |= COFF::IMAGE_SCN_ALIGN_2048BYTES;
- break;
- case 4096:
- Characteristics |= COFF::IMAGE_SCN_ALIGN_4096BYTES;
- break;
- case 8192:
- Characteristics |= COFF::IMAGE_SCN_ALIGN_8192BYTES;
- break;
- default:
- llvm_unreachable("unsupported section alignment");
- }
+ Characteristics |= getAlignment(Sec);
// Bind internal COFF section to MC section.
coff_section->MCSection = &Sec;
More information about the llvm-commits
mailing list