| //===- LDSectionFactory.h -------------------------------------------------===// |
| // |
| // The MCLinker Project |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| #ifndef MCLD_LDSECTION_FACTORY_H |
| #define MCLD_LDSECTION_FACTORY_H |
| #ifdef ENABLE_UNITTEST |
| #include <gtest.h> |
| #endif |
| #include <mcld/Support/GCFactory.h> |
| #include <mcld/LD/LDSection.h> |
| #include <mcld/LD/LDFileFormat.h> |
| #include <string> |
| |
| namespace mcld |
| { |
| |
| /** \class LDSectionFactory |
| * \brief provide the interface to create and delete section data for output |
| */ |
| class LDSectionFactory : public GCFactory<LDSection, 0> |
| { |
| public: |
| /// LDSectionFactory - the factory of LDSection |
| /// pNum is the average number of the LDSections in the system. |
| LDSectionFactory(size_t pNum); |
| ~LDSectionFactory(); |
| |
| /// produce - produce an empty section information. |
| /// This function will create an empty MCSectionData and its LDSection. |
| /// @param pName - The name of the section. |
| /// @param pKind - The kind of the section. Used to create default section map |
| /// @param pType - sh_type in ELF. |
| /// @param pFlag - is the same as sh_flags. |
| LDSection* produce(const std::string& pName, |
| LDFileFormat::Kind pKind, |
| uint32_t pType, |
| uint32_t pFlag); |
| |
| /// destroy - destruct the LDSection. |
| /// @oaram - the reference of the pointer to the destructed LDSection. |
| /// after the destruction, the pointer is set to zero. |
| void destroy(LDSection*& pSD); |
| |
| /// find - find the LDSection* in factory from the given section name. |
| /// return NULL if not found. |
| /// @param pName - the name of section |
| LDSection* find(const std::string& pName); |
| }; |
| |
| } // namespace of mcld |
| |
| #endif |
| |