forked from OSchip/llvm-project
parent
685508cf49
commit
0bfd279b37
|
@ -376,7 +376,7 @@ namespace llvm {
|
|||
|
||||
/// printVisibility - This prints visibility information about symbol, if
|
||||
/// this is suported by the target.
|
||||
void printVisibility(const MCSymbol *Sym, unsigned Visibility) const;
|
||||
void printVisibility(MCSymbol *Sym, unsigned Visibility) const;
|
||||
|
||||
/// printOffset - This is just convenient handler for printing offsets.
|
||||
void printOffset(int64_t Offset) const;
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
#ifndef LLVM_TARGET_ASM_INFO_H
|
||||
#define LLVM_TARGET_ASM_INFO_H
|
||||
|
||||
#include "llvm/MC/MCDirectives.h"
|
||||
#include <cassert>
|
||||
|
||||
namespace llvm {
|
||||
|
@ -225,13 +226,13 @@ namespace llvm {
|
|||
/// global as being a weak defined symbol. This is used on cygwin/mingw.
|
||||
const char *LinkOnceDirective; // Defaults to NULL.
|
||||
|
||||
/// HiddenDirective - This directive, if non-null, is used to declare a
|
||||
/// global or function as having hidden visibility.
|
||||
const char *HiddenDirective; // Defaults to "\t.hidden\t".
|
||||
/// HiddenVisibilityAttr - This attribute, if not MCSA_Invalid, is used to
|
||||
/// declare a symbol as having hidden visibility.
|
||||
MCSymbolAttr HiddenVisibilityAttr; // Defaults to MCSA_Hidden.
|
||||
|
||||
/// ProtectedDirective - This directive, if non-null, is used to declare a
|
||||
/// global or function as having protected visibility.
|
||||
const char *ProtectedDirective; // Defaults to "\t.protected\t".
|
||||
/// ProtectedVisibilityAttr - This attribute, if not MCSA_Invalid, is used
|
||||
/// to declare a symbol as having protected visibility.
|
||||
MCSymbolAttr ProtectedVisibilityAttr; // Defaults to MCSA_Protected
|
||||
|
||||
//===--- Dwarf Emission Directives -----------------------------------===//
|
||||
|
||||
|
@ -415,11 +416,10 @@ namespace llvm {
|
|||
const char *getWeakRefDirective() const { return WeakRefDirective; }
|
||||
const char *getWeakDefDirective() const { return WeakDefDirective; }
|
||||
const char *getLinkOnceDirective() const { return LinkOnceDirective; }
|
||||
const char *getHiddenDirective() const {
|
||||
return HiddenDirective;
|
||||
}
|
||||
const char *getProtectedDirective() const {
|
||||
return ProtectedDirective;
|
||||
|
||||
MCSymbolAttr getHiddenVisibilityAttr() const { return HiddenVisibilityAttr;}
|
||||
MCSymbolAttr getProtectedVisibilityAttr() const {
|
||||
return ProtectedVisibilityAttr;
|
||||
}
|
||||
bool isAbsoluteDebugSectionOffsets() const {
|
||||
return AbsoluteDebugSectionOffsets;
|
||||
|
|
|
@ -1588,15 +1588,21 @@ void AsmPrinter::printPICJumpTableSetLabel(unsigned uid, unsigned uid2,
|
|||
<< '_' << uid << '_' << uid2 << '\n';
|
||||
}
|
||||
|
||||
void AsmPrinter::printVisibility(const MCSymbol *Sym,
|
||||
unsigned Visibility) const {
|
||||
if (Visibility == GlobalValue::HiddenVisibility) {
|
||||
if (const char *Directive = MAI->getHiddenDirective())
|
||||
O << Directive << *Sym << '\n';
|
||||
} else if (Visibility == GlobalValue::ProtectedVisibility) {
|
||||
if (const char *Directive = MAI->getProtectedDirective())
|
||||
O << Directive << *Sym << '\n';
|
||||
void AsmPrinter::printVisibility(MCSymbol *Sym, unsigned Visibility) const {
|
||||
MCSymbolAttr Attr = MCSA_Invalid;
|
||||
|
||||
switch (Visibility) {
|
||||
default: break;
|
||||
case GlobalValue::HiddenVisibility:
|
||||
Attr = MAI->getHiddenVisibilityAttr();
|
||||
break;
|
||||
case GlobalValue::ProtectedVisibility:
|
||||
Attr = MAI->getProtectedVisibilityAttr();
|
||||
break;
|
||||
}
|
||||
|
||||
if (Attr != MCSA_Invalid)
|
||||
OutStreamer.EmitSymbolAttribute(Sym, Attr);
|
||||
}
|
||||
|
||||
void AsmPrinter::printOffset(int64_t Offset) const {
|
||||
|
|
|
@ -230,8 +230,9 @@ void DwarfException::EmitFDE(const FunctionEHFrameInfo &EHFrameInfo) {
|
|||
|
||||
// If corresponding function is hidden, this should be too.
|
||||
if (TheFunc->hasHiddenVisibility())
|
||||
if (const char *HiddenDirective = MAI->getHiddenDirective())
|
||||
O << HiddenDirective << *EHFrameInfo.FunctionEHSym << '\n';
|
||||
if (MCSymbolAttr HiddenAttr = MAI->getHiddenVisibilityAttr())
|
||||
Asm->OutStreamer.EmitSymbolAttribute(EHFrameInfo.FunctionEHSym,
|
||||
HiddenAttr);
|
||||
|
||||
// If there are no calls then you can't unwind. This may mean we can omit the
|
||||
// EH Frame, but some environments do not handle weak absolute symbols. If
|
||||
|
|
|
@ -61,9 +61,8 @@ MCAsmInfo::MCAsmInfo() {
|
|||
WeakRefDirective = 0;
|
||||
WeakDefDirective = 0;
|
||||
LinkOnceDirective = 0;
|
||||
// FIXME: These are ELFish - move to ELFMAI.
|
||||
HiddenDirective = "\t.hidden\t";
|
||||
ProtectedDirective = "\t.protected\t";
|
||||
HiddenVisibilityAttr = MCSA_Hidden;
|
||||
ProtectedVisibilityAttr = MCSA_Protected;
|
||||
AbsoluteDebugSectionOffsets = false;
|
||||
AbsoluteEHSectionOffsets = false;
|
||||
HasLEB128 = false;
|
||||
|
|
|
@ -22,11 +22,13 @@ MCAsmInfoCOFF::MCAsmInfoCOFF() {
|
|||
COMMDirectiveTakesAlignment = false;
|
||||
HasDotTypeDotSizeDirective = false;
|
||||
HasSingleParameterDotFile = false;
|
||||
HiddenDirective = NULL;
|
||||
PrivateGlobalPrefix = "L"; // Prefix for private global symbols
|
||||
WeakRefDirective = "\t.weak\t";
|
||||
LinkOnceDirective = "\t.linkonce same_size\n";
|
||||
SetDirective = "\t.set\t";
|
||||
|
||||
// Doesn't support visibility:
|
||||
HiddenVisibilityAttr = ProtectedVisibilityAttr = MCSA_Invalid;
|
||||
|
||||
// Set up DWARF directives
|
||||
HasLEB128 = true; // Target asm supports leb128 directives (little-endian)
|
||||
|
|
|
@ -32,12 +32,16 @@ MCAsmInfoDarwin::MCAsmInfoDarwin() {
|
|||
// Directives:
|
||||
WeakDefDirective = "\t.weak_definition ";
|
||||
WeakRefDirective = "\t.weak_reference ";
|
||||
HiddenDirective = "\t.private_extern ";
|
||||
ZeroDirective = "\t.space\t"; // ".space N" emits N zeros.
|
||||
HasMachoZeroFillDirective = true; // Uses .zerofill
|
||||
HasStaticCtorDtorReferenceInStaticMode = true;
|
||||
SetDirective = "\t.set";
|
||||
ProtectedDirective = "\t.globl\t";
|
||||
|
||||
HiddenVisibilityAttr = MCSA_PrivateExtern;
|
||||
// Doesn't support protected visibility.
|
||||
ProtectedVisibilityAttr = MCSA_Global;
|
||||
|
||||
|
||||
HasDotTypeDotSizeDirective = false;
|
||||
HasNoDeadStrip = true;
|
||||
// Note: Even though darwin has the .lcomm directive, it is just a synonym for
|
||||
|
|
Loading…
Reference in New Issue