From 1c1bde666c548fb86e7e45ca61eeaa39413f38b2 Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Sat, 20 Sep 2014 20:40:50 +0000 Subject: [PATCH] MC: Fix MCSectionCOFF::PrintSwitchToSection We had a few bugs: - We were considering the GVKind instead of just looking at the section characteristics - We would never print out 'y' when a section was meant to be unreadable - We would never print out 's' when a section was meant to be shared - We translated IMAGE_SCN_MEM_DISCARDABLE to 'n' when it should've meant IMAGE_SCN_LNK_REMOVE git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@218189 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/MC/MCSectionCOFF.cpp | 18 +++++++++++------- test/MC/COFF/section-passthru-flags.s | 7 +++++++ 2 files changed, 18 insertions(+), 7 deletions(-) create mode 100644 test/MC/COFF/section-passthru-flags.s diff --git a/lib/MC/MCSectionCOFF.cpp b/lib/MC/MCSectionCOFF.cpp index ee6b249522b..e95845f0af0 100644 --- a/lib/MC/MCSectionCOFF.cpp +++ b/lib/MC/MCSectionCOFF.cpp @@ -47,18 +47,22 @@ void MCSectionCOFF::PrintSwitchToSection(const MCAsmInfo &MAI, } OS << "\t.section\t" << getSectionName() << ",\""; - if (getKind().isText()) + if (getCharacteristics() & COFF::IMAGE_SCN_MEM_EXECUTE) OS << 'x'; - else if (getKind().isBSS()) - OS << 'b'; - if (getKind().isWriteable() && !getKind().isReadOnlyWithRel()) + if (getCharacteristics() & COFF::IMAGE_SCN_MEM_WRITE) OS << 'w'; - else + else if (getCharacteristics() & COFF::IMAGE_SCN_MEM_READ) OS << 'r'; - if (getCharacteristics() & COFF::IMAGE_SCN_MEM_DISCARDABLE) - OS << 'n'; + else + OS << 'y'; if (getCharacteristics() & COFF::IMAGE_SCN_CNT_INITIALIZED_DATA) OS << 'd'; + if (getCharacteristics() & COFF::IMAGE_SCN_CNT_UNINITIALIZED_DATA) + OS << 'b'; + if (getCharacteristics() & COFF::IMAGE_SCN_LNK_REMOVE) + OS << 'n'; + if (getCharacteristics() & COFF::IMAGE_SCN_MEM_SHARED) + OS << 's'; OS << '"'; if (getCharacteristics() & COFF::IMAGE_SCN_LNK_COMDAT) { diff --git a/test/MC/COFF/section-passthru-flags.s b/test/MC/COFF/section-passthru-flags.s new file mode 100644 index 00000000000..3bd061b391d --- /dev/null +++ b/test/MC/COFF/section-passthru-flags.s @@ -0,0 +1,7 @@ +// RUN: llvm-mc -triple i386-pc-win32 < %s | FileCheck %s +.section .klaatu,"wn" +// CHECK: .section .klaatu,"wn" +.section .barada,"y" +// CHECK: .section .barada,"y" +.section .nikto,"wds" +// CHECK: .section .nikto,"wds"