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_
|