1
//===-- llvm/Target/Mangler.h - Self-contained name mangler -----*- C++ -*-===//
3
// The LLVM Compiler Infrastructure
5
// This file is distributed under the University of Illinois Open Source
6
// License. See LICENSE.TXT for details.
8
//===----------------------------------------------------------------------===//
10
// Unified name mangler for various backends.
12
//===----------------------------------------------------------------------===//
14
#ifndef LLVM_SUPPORT_MANGLER_H
15
#define LLVM_SUPPORT_MANGLER_H
17
#include "llvm/ADT/DenseMap.h"
25
template <typename T> class SmallVectorImpl;
32
enum ManglerPrefixTy {
33
Default, ///< Emit default string before each symbol.
34
Private, ///< Emit "private" prefix before each symbol.
35
LinkerPrivate ///< Emit "linker private" prefix before each symbol.
42
/// AnonGlobalIDs - We need to give global values the same name every time
43
/// they are mangled. This keeps track of the number we give to anonymous
46
DenseMap<const GlobalValue*, unsigned> AnonGlobalIDs;
48
/// NextAnonGlobalID - This simple counter is used to unique value names.
50
unsigned NextAnonGlobalID;
53
Mangler(MCContext &context, const TargetData &td)
54
: Context(context), TD(td), NextAnonGlobalID(1) {}
56
/// getSymbol - Return the MCSymbol for the specified global value. This
57
/// symbol is the main label that is the address of the global.
58
MCSymbol *getSymbol(const GlobalValue *GV);
61
/// getNameWithPrefix - Fill OutName with the name of the appropriate prefix
62
/// and the specified global variable's name. If the global variable doesn't
63
/// have a name, this fills in a unique name for the global.
64
void getNameWithPrefix(SmallVectorImpl<char> &OutName, const GlobalValue *GV,
65
bool isImplicitlyPrivate);
67
/// getNameWithPrefix - Fill OutName with the name of the appropriate prefix
68
/// and the specified name as the global variable name. GVName must not be
70
void getNameWithPrefix(SmallVectorImpl<char> &OutName, const Twine &GVName,
71
ManglerPrefixTy PrefixTy = Mangler::Default);
73
/// getNameWithPrefix - Return the name of the appropriate prefix
74
/// and the specified global variable's name. If the global variable doesn't
75
/// have a name, this fills in a unique name for the global.
76
std::string getNameWithPrefix(const GlobalValue *GV,
77
bool isImplicitlyPrivate = false);
80
} // End llvm namespace
82
#endif // LLVM_SUPPORT_MANGLER_H