113 lines
2.5 KiB
C++
113 lines
2.5 KiB
C++
//===- LDFileFormat.h -----------------------------------------------------===//
|
|
//
|
|
// The MCLinker Project
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
#ifndef MCLD_LD_LDFILEFORMAT_H_
|
|
#define MCLD_LD_LDFILEFORMAT_H_
|
|
|
|
#include <cassert>
|
|
#include <cstddef>
|
|
|
|
namespace mcld {
|
|
|
|
class LDSection;
|
|
class ObjectBuilder;
|
|
|
|
/** \class LDFileFormat
|
|
* \brief LDFileFormat describes the common file formats.
|
|
*/
|
|
class LDFileFormat {
|
|
public:
|
|
enum Kind {
|
|
Null,
|
|
TEXT, // Executable regular sections
|
|
DATA, // Non-executable regular sections
|
|
BSS,
|
|
NamePool,
|
|
Relocation,
|
|
Debug,
|
|
DebugString,
|
|
Target,
|
|
EhFrame,
|
|
EhFrameHdr,
|
|
GCCExceptTable,
|
|
Version,
|
|
Note,
|
|
MetaData,
|
|
Group,
|
|
LinkOnce,
|
|
StackNote,
|
|
Ignore,
|
|
Exclude,
|
|
Folded
|
|
};
|
|
|
|
protected:
|
|
LDFileFormat();
|
|
|
|
public:
|
|
virtual ~LDFileFormat();
|
|
|
|
/// initStdSections - initialize all standard section headers.
|
|
/// @param [in] pBuilder The ObjectBuilder to create section headers
|
|
/// @param [in] pBitClass The bitclass of target backend.
|
|
virtual void initStdSections(ObjectBuilder& pBuilder,
|
|
unsigned int pBitClass) = 0;
|
|
|
|
// ----- access functions ----- //
|
|
LDSection& getText() {
|
|
assert(f_pTextSection != NULL);
|
|
return *f_pTextSection;
|
|
}
|
|
|
|
const LDSection& getText() const {
|
|
assert(f_pTextSection != NULL);
|
|
return *f_pTextSection;
|
|
}
|
|
|
|
LDSection& getData() {
|
|
assert(f_pDataSection != NULL);
|
|
return *f_pDataSection;
|
|
}
|
|
|
|
const LDSection& getData() const {
|
|
assert(f_pDataSection != NULL);
|
|
return *f_pDataSection;
|
|
}
|
|
|
|
LDSection& getBSS() {
|
|
assert(f_pBSSSection != NULL);
|
|
return *f_pBSSSection;
|
|
}
|
|
|
|
const LDSection& getBSS() const {
|
|
assert(f_pBSSSection != NULL);
|
|
return *f_pBSSSection;
|
|
}
|
|
|
|
LDSection& getReadOnly() {
|
|
assert(f_pReadOnlySection != NULL);
|
|
return *f_pReadOnlySection;
|
|
}
|
|
|
|
const LDSection& getReadOnly() const {
|
|
assert(f_pReadOnlySection != NULL);
|
|
return *f_pReadOnlySection;
|
|
}
|
|
|
|
protected:
|
|
// variable name : ELF MachO
|
|
LDSection* f_pTextSection; // .text __text
|
|
LDSection* f_pDataSection; // .data __data
|
|
LDSection* f_pBSSSection; // .bss __bss
|
|
LDSection* f_pReadOnlySection; // .rodata __const
|
|
};
|
|
|
|
} // namespace mcld
|
|
|
|
#endif // MCLD_LD_LDFILEFORMAT_H_
|