]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - tools/elftosb/common/GHSSecInfo.h
Unified codebase for TX28, TX48, TX51, TX53
[karo-tx-uboot.git] / tools / elftosb / common / GHSSecInfo.h
1 /*
2  * File:    GHSSecInfo.h
3  *
4  * Copyright (c) Freescale Semiconductor, Inc. All rights reserved.
5  * See included license file for license details.
6  */
7 #if !defined(_GHSSecInfo_h_)
8 #define _GHSSecInfo_h_
9
10 #include "StELFFile.h"
11 #include "smart_ptr.h"
12
13 namespace elftosb
14 {
15
16 /*!
17  * \brief Wrapper around the GHS-specific .secinfo ELF section.
18  *
19  * ELF files produced by the Green Hills MULTI toolset will have a
20  * special .secinfo section. For the most part, this section contains
21  * a list of address
22  * ranges that should be filled by the C runtime startup code. The
23  * address ranges correspond to those of ELF sections whose type is
24  * #SHT_NOBITS. The GHS runtime uses this table instead of just filling
25  * all #SHT_NOBITS sections because the linker command file can
26  * be used to optionally not fill individual sections.
27  *
28  * The isSectionFilled() methods let calling code determine if an ELF
29  * section is found in the .secinfo table. If the section is found,
30  * then it should be filled.
31  */
32 class GHSSecInfo
33 {
34 public:
35         //! \brief Default constructor.
36         GHSSecInfo(StELFFile * elf);
37
38         //! \brief Returns true if there is a .secinfo section present in the ELF file.
39         bool hasSecinfo() const { return m_hasInfo; }
40         
41         //! \brief Determines if a section should be filled.
42         bool isSectionFilled(uint32_t addr, uint32_t length);
43         
44         //! \brief Determines if \a section should be filled.
45         bool isSectionFilled(const Elf32_Shdr & section);
46         
47 protected:
48
49 #pragma pack(1)
50
51         /*!
52          * \brief The structure of one .secinfo entry.
53          */
54         struct ghs_secinfo_t
55         {
56                 uint32_t m_clearAddr;   //!< Address to start filling from.
57                 uint32_t m_clearValue;  //!< Value to fill with.
58                 uint32_t m_numBytesToClear;     //!< Number of bytes to fill.
59         };
60
61 #pragma pack()
62
63 protected:
64         StELFFile * m_elf;      //!< The parser object for our ELF file.
65         bool m_hasInfo;         //!< Whether .secinfo is present in the ELF file.
66         smart_array_ptr<ghs_secinfo_t> m_info;  //!< Pointer to the .secinfo entries. Will be NULL if there is no .secinfo section in the file.
67         unsigned m_entryCount;  //!< Number of entries in #m_info.
68 };
69
70 }; // namespace elftosb
71
72 #endif // _GHSSecInfo_h_