| 140 | string name; |
| 141 | |
| 142 | void dump(ostream& sstr) const { |
| 143 | sstr << "section: " << name; |
| 144 | sstr << ", offset: " << header_ptr->offset; |
| 145 | sstr << ", size: " << header_ptr->size; |
| 146 | sstr << ", address: " << header_ptr->address; |
| 147 | if (header_ptr->alignment > 0) { |
| 148 | sstr << ", align: " << header_ptr->alignment; |
| 149 | } |
| 150 | sstr << ", 0x" << hex << uppercase << (uint64_t)header_ptr->flags << nouppercase << dec; |
| 151 | if (has_flag<ELF_SECTION_FLAG::ALLOCATE>(header_ptr->flags)) { |
| 152 | sstr << " alloc"; |
| 153 | } |
| 154 | if (has_flag<ELF_SECTION_FLAG::WRITE>(header_ptr->flags)) { |
| 155 | sstr << " w"; |
| 156 | } |
| 157 | if (has_flag<ELF_SECTION_FLAG::EXECUTABLE>(header_ptr->flags)) { |
| 158 | sstr << " x"; |
| 159 | } |
| 160 | if (has_flag<ELF_SECTION_FLAG::MERGABLE>(header_ptr->flags)) { |
| 161 | sstr << " mrg"; |
| 162 | } |
| 163 | if (has_flag<ELF_SECTION_FLAG::GROUP>(header_ptr->flags)) { |
| 164 | sstr << " grp"; |
| 165 | } |
| 166 | if (has_flag<ELF_SECTION_FLAG::TLS>(header_ptr->flags)) { |
| 167 | sstr << " tls"; |
| 168 | } |
| 169 | sstr << "\n"; |
| 170 | } |
| 171 | }; |
| 172 | |
| 173 | enum class ELF_SYMBOL_TYPE : uint8_t { |
nothing calls this directly
no outgoing calls
no test coverage detected