diff options
author | Rui Ueyama <ruiu@google.com> | 2017-02-15 00:15:54 +0000 |
---|---|---|
committer | Rui Ueyama <ruiu@google.com> | 2017-02-15 00:15:54 +0000 |
commit | 24e27b474c61e25fb0e967300d7e46185a032f49 (patch) | |
tree | 9857d38ffc51ec4cdc7550d682560dbcaa3eb873 /llvm/lib/MC/WinCOFFObjectWriter.cpp | |
parent | def72aad0bc124dc7f40d19b8221ed27659b07a4 (diff) | |
download | bcm5719-llvm-24e27b474c61e25fb0e967300d7e46185a032f49.tar.gz bcm5719-llvm-24e27b474c61e25fb0e967300d7e46185a032f49.zip |
Split WinCOFFObjectWriter::defineSection. NFC.
llvm-svn: 295128
Diffstat (limited to 'llvm/lib/MC/WinCOFFObjectWriter.cpp')
-rw-r--r-- | llvm/lib/MC/WinCOFFObjectWriter.cpp | 85 |
1 files changed, 38 insertions, 47 deletions
diff --git a/llvm/lib/MC/WinCOFFObjectWriter.cpp b/llvm/lib/MC/WinCOFFObjectWriter.cpp index 075e27ec617..b5dac823391 100644 --- a/llvm/lib/MC/WinCOFFObjectWriter.cpp +++ b/llvm/lib/MC/WinCOFFObjectWriter.cpp @@ -239,11 +239,47 @@ COFFSection *WinCOFFObjectWriter::createSection(StringRef Name) { 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(MCSectionCOFF const &Sec) { 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; |