MCPcopy Create free account
hub / github.com/GPUOpen-Tools/radeon_gpu_analyzer / Load

Method Load

external/celf/Src/CElfSection.cpp:311–360  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

309}
310
311bool
312CElfSection::Load(
313 const std::vector<char>& vBinary,
314 std::size_t shdrOff,
315 bool is64)
316{
317 // Read the section header (in the simplest way possible).
318 // More code is needed to deal with cross endian & ELF64 objects.
319 size_t fileSize = vBinary.size();
320
321 if (shdrOff + sizeof(Elf32_Shdr) > fileSize)
322 {
323 return false;
324 }
325
326 if (is64)
327 {
328 m_Header = *reinterpret_cast<const Elf64_Shdr*>(&vBinary[shdrOff]);
329 }
330 else
331 {
332 const Elf32_Shdr* shdr32 = reinterpret_cast<const Elf32_Shdr*>(&vBinary[shdrOff]);
333
334 m_Header.sh_name = shdr32->sh_name;
335 m_Header.sh_type = shdr32->sh_type;
336 m_Header.sh_flags = shdr32->sh_flags;
337 m_Header.sh_addr = shdr32->sh_addr;
338 m_Header.sh_offset = shdr32->sh_offset;
339 m_Header.sh_size = shdr32->sh_size;
340 m_Header.sh_link = shdr32->sh_link;
341 m_Header.sh_info = shdr32->sh_info;
342 m_Header.sh_addralign = shdr32->sh_addralign;
343 m_Header.sh_entsize = shdr32->sh_entsize;
344 }
345
346 if (m_Header.sh_offset + m_Header.sh_size > fileSize)
347 {
348 return false;
349 }
350
351 // Copy the data
352 m_Data.resize((size_t)m_Header.sh_size);
353
354 if (m_Header.sh_size != 0)
355 {
356 memcpy(&m_Data[0], &vBinary[(size_t)m_Header.sh_offset], (size_t)m_Header.sh_size);
357 }
358
359 return true;
360}
361
362Elf64_Word
363CElfSection::GetLink() const

Callers 1

ReadMethod · 0.45

Calls 2

sizeMethod · 0.45
resizeMethod · 0.45

Tested by

no test coverage detected