Record a symbol's size which is needed for ELF symbol tables.

llvm-svn: 111170
This commit is contained in:
Matt Fleming 2010-08-16 18:34:31 +00:00
parent 68a31bf9c6
commit 162726c305
2 changed files with 16 additions and 1 deletions

View File

@ -24,6 +24,7 @@ namespace llvm {
class raw_ostream;
class MCAsmLayout;
class MCAssembler;
class MCBinaryExpr;
class MCContext;
class MCCodeEmitter;
class MCExpr;
@ -453,6 +454,10 @@ public:
// common symbol can never get a definition.
uint64_t CommonSize;
/// SymbolSize - An expression describing how to calculate the size of
/// a symbol. If a symbol has no size this field will be NULL.
const MCExpr *SymbolSize;
/// CommonAlign - The alignment of the symbol, if it is 'common'.
//
// FIXME: Pack this in with other fields?
@ -510,6 +515,15 @@ public:
return CommonSize;
}
void setSize(const MCExpr *SS) {
SymbolSize = SS;
}
const MCExpr *getSize() const {
return SymbolSize;
}
/// getCommonAlignment - Return the alignment of a 'common' symbol.
unsigned getCommonAlignment() const {
assert(isCommon() && "Not a 'common' symbol!");

View File

@ -211,7 +211,8 @@ MCSymbolData::MCSymbolData(const MCSymbol &_Symbol, MCFragment *_Fragment,
uint64_t _Offset, MCAssembler *A)
: Symbol(&_Symbol), Fragment(_Fragment), Offset(_Offset),
IsExternal(false), IsPrivateExtern(false),
CommonSize(0), CommonAlign(0), Flags(0), Index(0)
CommonSize(0), SymbolSize(0), CommonAlign(0),
Flags(0), Index(0)
{
if (A)
A->getSymbolList().push_back(this);