MCSectionCOFF.cpp revision 72e57f94416b5bc293d5f735ee81318d3ff16590
1eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner//===- lib/MC/MCSectionCOFF.cpp - COFF Code Section Representation --------===// 2eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner// 3eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner// The LLVM Compiler Infrastructure 4eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner// 5eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner// This file is distributed under the University of Illinois Open Source 6eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner// License. See LICENSE.TXT for details. 7eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner// 8eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner//===----------------------------------------------------------------------===// 9eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner 10eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner#include "llvm/MC/MCSectionCOFF.h" 11eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner#include "llvm/MC/MCAsmInfo.h" 12eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner#include "llvm/MC/MCContext.h" 13eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner#include "llvm/MC/MCSymbol.h" 14eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner#include "llvm/Support/raw_ostream.h" 15eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattnerusing namespace llvm; 16eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner 17eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris LattnerMCSectionCOFF::~MCSectionCOFF() {} // anchor. 18eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner 19eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner// ShouldOmitSectionDirective - Decides whether a '.section' directive 20eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner// should be printed before the section name 21eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattnerbool MCSectionCOFF::ShouldOmitSectionDirective(StringRef Name, 22eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner const MCAsmInfo &MAI) const { 23eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner 24eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner // FIXME: Does .section .bss/.data/.text work everywhere?? 25eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner if (Name == ".text" || Name == ".data" || Name == ".bss") 26eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner return true; 27eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner 28eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner return false; 29eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner} 30eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner 31eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattnervoid MCSectionCOFF::PrintSwitchToSection(const MCAsmInfo &MAI, 32eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner raw_ostream &OS) const { 33eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner 3472e57f94416b5bc293d5f735ee81318d3ff16590Nathan Jeffords // standard sections don't require the '.section' 35eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner if (ShouldOmitSectionDirective(SectionName, MAI)) { 36eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner OS << '\t' << getSectionName() << '\n'; 37eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner return; 38eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner } 39eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner 40eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner OS << "\t.section\t" << getSectionName() << ",\""; 41eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner if (getKind().isText()) 42eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner OS << 'x'; 43eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner if (getKind().isWriteable()) 44eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner OS << 'w'; 45eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner else 46eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner OS << 'r'; 476e5ce287b0e53c264af0ba37169ad964e19b5bb7Chris Lattner if (getCharacteristics() & MCSectionCOFF::IMAGE_SCN_MEM_DISCARDABLE) 48eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner OS << 'n'; 49eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner OS << "\"\n"; 50eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner} 51