Lines Matching defs:paShdrs

104     Elf_Shdr               *paShdrs;
105 /** Unmodified section headers (allocated after paShdrs, so no need to free).
153 pModElf->paSyms = (const Elf_Sym *)(pu8 + pModElf->paShdrs[pModElf->iSymSh].sh_offset);
155 pModElf->pStr = (const char *)(pu8 + pModElf->paShdrs[pModElf->iStrSh].sh_offset);
156 pModElf->pShStr = (const char *)(pu8 + pModElf->paShdrs[pModElf->Ehdr.e_shstrndx].sh_offset);
483 *pSymValue = pSym->st_value + pModElf->paShdrs[pSym->st_shndx].sh_addr + BaseAddr;
666 if (pModElf->paShdrs)
668 RTMemFree(pModElf->paShdrs);
669 pModElf->paShdrs = NULL;
730 Value = BaseAddr + paSyms[iSym].st_value + pModElf->paShdrs[paSyms[iSym].st_shndx].sh_addr;
793 const Elf_Shdr *paShdrs = pModElf->paShdrs;
796 if (paShdrs[iShdr].sh_flags & SHF_ALLOC)
798 AssertMsgReturn((size_t)paShdrs[iShdr].sh_size == (size_t)paShdrs[iShdr].sh_size, (FMT_ELF_SIZE "\n", paShdrs[iShdr].sh_size), VERR_IMAGE_TOO_BIG);
799 switch (paShdrs[iShdr].sh_type)
802 memset((uint8_t *)pvBits + paShdrs[iShdr].sh_addr, 0, (size_t)paShdrs[iShdr].sh_size);
808 int rc = pModElf->Core.pReader->pfnRead(pModElf->Core.pReader, (uint8_t *)pvBits + paShdrs[iShdr].sh_addr,
809 (size_t)paShdrs[iShdr].sh_size, paShdrs[iShdr].sh_offset);
814 paShdrs[iShdr].sh_size, paShdrs[iShdr].sh_offset, iShdr));
873 const Elf_Shdr *paShdrs = pModElf->paShdrs;
877 const Elf_Shdr *pShdrRel = &paShdrs[iShdr];
890 const Elf_Shdr *pShdr = &paShdrs[pShdrRel->sh_info]; /* the section to fixup. */
938 Value = uBaseAddr + pSym->st_value + pThis->paShdrs[pSym->st_shndx].sh_addr;
1033 const Elf_Shdr *paShdrs = pModElf->paOrgShdrs;
1037 if (paShdrs[iShdr].sh_type != SHT_PROGBITS)
1039 if (paShdrs[iShdr].sh_flags & SHF_ALLOC)
1043 const char *pszSectName = ELF_SH_STR(pModElf, paShdrs[iShdr].sh_name);
1050 DbgInfo.offFile = paShdrs[iShdr].sh_offset;
1051 DbgInfo.cb = paShdrs[iShdr].sh_size;
1056 if ((paShdrs[iShdr].sh_size & 3) || paShdrs[iShdr].sh_size < 8)
1061 DbgInfo.pszExtFile = (const char *)((uintptr_t)pModElf->pvBits + (uintptr_t)paShdrs[iShdr].sh_offset);
1062 if (!RTStrEnd(DbgInfo.pszExtFile, paShdrs[iShdr].sh_size))
1064 DbgInfo.u.Dwo.uCrc32 = *(uint32_t *)((uintptr_t)DbgInfo.pszExtFile + (uintptr_t)paShdrs[iShdr].sh_size
1120 const Elf_Shdr *paShdrs = pModElf->paShdrs;
1125 Seg.pszName = ELF_SH_STR(pModElf, paShdrs[iShdr].sh_name);
1136 if (paShdrs[iShdr].sh_flags & SHF_WRITE)
1138 if (paShdrs[iShdr].sh_flags & SHF_EXECINSTR)
1140 Seg.cb = paShdrs[iShdr].sh_size;
1141 Seg.Alignment = paShdrs[iShdr].sh_addralign;
1142 if (paShdrs[iShdr].sh_flags & SHF_ALLOC)
1145 Seg.RVA = paShdrs[iShdr].sh_addr;
1146 const Elf_Shdr *pShdr2 = RTLDRELF_NAME(GetFirstAllocatedSection)(&paShdrs[iShdr + 1],
1149 && pShdr2->sh_addr >= paShdrs[iShdr].sh_addr
1151 Seg.cbMapped = pShdr2->sh_addr - paShdrs[iShdr].sh_addr;
1153 Seg.cbMapped = RT_MAX(paShdrs[iShdr].sh_size, paShdrs[iShdr].sh_addralign);
1162 if (paShdrs[iShdr].sh_type != SHT_NOBITS)
1164 Seg.offFile = paShdrs[iShdr].sh_offset;
1165 Seg.cbFile = paShdrs[iShdr].sh_size;
1227 *pRva = pModElf->paShdrs[iSeg + 1].sh_addr + offSeg;
1241 if (offSeg > pModElf->paShdrs[iSeg].sh_size)
1243 const Elf_Shdr *pShdr2 = RTLDRELF_NAME(GetFirstAllocatedSection)(&pModElf->paShdrs[iSeg + 1],
1246 || offSeg > (pShdr2->sh_addr - pModElf->paShdrs[iSeg].sh_addr))
1250 if (!(pModElf->paShdrs[iSeg].sh_flags & SHF_ALLOC))
1253 *pRva = pModElf->paShdrs[iSeg].sh_addr;
1266 const Elf_Shdr *pShdr = &pModElf->paShdrs[cLeft];
1308 AssertReturn(!(pThis->paShdrs[iDbgInfo].sh_flags & SHF_ALLOC), VERR_INVALID_PARAMETER);
1309 AssertReturn(pThis->paShdrs[iDbgInfo].sh_type == SHT_PROGBITS, VERR_INVALID_PARAMETER);
1310 AssertReturn(pThis->paShdrs[iDbgInfo].sh_offset == (uint64_t)off, VERR_INVALID_PARAMETER);
1311 AssertReturn(pThis->paShdrs[iDbgInfo].sh_size == cb, VERR_INVALID_PARAMETER);
1331 || pThis->paShdrs[iRelocs].sh_info != iDbgInfo
1332 || ( pThis->paShdrs[iRelocs].sh_type != SHT_REL
1333 && pThis->paShdrs[iRelocs].sh_type != SHT_RELA) )
1337 && ( pThis->paShdrs[iRelocs].sh_info != iDbgInfo
1338 || ( pThis->paShdrs[iRelocs].sh_type != SHT_REL
1339 && pThis->paShdrs[iRelocs].sh_type != SHT_RELA)) )
1343 && pThis->paShdrs[iRelocs].sh_size > 0)
1351 pbRelocs = (const uint8_t *)pThis->pvBits + pThis->paShdrs[iRelocs].sh_offset;
1354 pbRelocs = pbRelocsBuf = (uint8_t *)RTMemTmpAlloc(pThis->paShdrs[iRelocs].sh_size);
1358 pThis->paShdrs[iRelocs].sh_size,
1359 pThis->paShdrs[iRelocs].sh_offset);
1373 pThis->paShdrs[iDbgInfo].sh_addr,
1374 pThis->paShdrs[iDbgInfo].sh_size,
1378 pThis->paShdrs[iRelocs].sh_size);
1382 pThis->paShdrs[iDbgInfo].sh_addr,
1383 pThis->paShdrs[iDbgInfo].sh_size,
1387 pThis->paShdrs[iRelocs].sh_size);
1588 RTFOFF off = pModElf->paShdrs[pModElf->Ehdr.e_shstrndx].sh_offset + offName;
1615 * The section headers are found in the pModElf->paShdrs array.
1621 const Elf_Shdr *pShdr = &pModElf->paShdrs[iShdr];
1767 //pModElf->paShdrs = NULL;
1801 Elf_Shdr *paShdrs = (Elf_Shdr *)RTMemAlloc(cbShdrs * 2);
1802 if (paShdrs)
1804 pModElf->paShdrs = paShdrs;
1805 rc = pReader->pfnRead(pReader, paShdrs, cbShdrs, pModElf->Ehdr.e_shoff);
1808 memcpy(&paShdrs[pModElf->Ehdr.e_shnum], paShdrs, cbShdrs);
1809 pModElf->paOrgShdrs = &paShdrs[pModElf->Ehdr.e_shnum];
1811 pModElf->cbShStr = paShdrs[pModElf->Ehdr.e_shstrndx].sh_size;
1824 if (paShdrs[i].sh_type == SHT_SYMTAB)
1833 pModElf->cSyms = (unsigned)(paShdrs[i].sh_size / sizeof(Elf_Sym));
1834 AssertReturn(pModElf->cSyms == paShdrs[i].sh_size / sizeof(Elf_Sym), VERR_IMAGE_TOO_BIG);
1835 pModElf->iStrSh = paShdrs[i].sh_link;
1836 pModElf->cbStr = (unsigned)paShdrs[pModElf->iStrSh].sh_size;
1837 AssertReturn(pModElf->cbStr == paShdrs[pModElf->iStrSh].sh_size, VERR_IMAGE_TOO_BIG);
1843 if (paShdrs[i].sh_type != SHT_STRTAB)
1845 Log(("RTLdrElf: Section header string table is not a SHT_STRTAB: %#x\n", paShdrs[i].sh_type));
1849 if (paShdrs[i].sh_size == 0)
1858 if (paShdrs[i].sh_flags & SHF_ALLOC)
1860 if ( paShdrs[i].sh_addr == 0
1861 && paShdrs[i].sh_addr < uNextAddr)
1863 Elf_Addr uAddr = RT_ALIGN_T(uNextAddr, paShdrs[i].sh_addralign, Elf_Addr);
1865 paShdrs[i].sh_addr, uAddr));
1866 paShdrs[i].sh_addr = uAddr;
1868 uNextAddr = paShdrs[i].sh_addr + paShdrs[i].sh_size;
1879 if ( (paShdrs[i].sh_flags & SHF_ALLOC)
1880 && paShdrs[i].sh_addr < pModElf->LinkAddress)
1881 pModElf->LinkAddress = paShdrs[i].sh_addr;
1894 if (paShdrs[i].sh_flags & SHF_ALLOC)
1897 paShdrs[i].sh_addr = paShdrs[i].sh_addralign
1898 ? RT_ALIGN_T(pModElf->cbImage, paShdrs[i].sh_addralign, Elf_Addr)
1901 paShdrs[i].sh_addr -= pModElf->LinkAddress;
1902 Elf_Addr EndAddr = paShdrs[i].sh_addr + paShdrs[i].sh_size;
1908 Log2(("RTLdrElf: %s: Assigned " FMT_ELF_ADDR " to section #%d\n", pszLogName, paShdrs[i].sh_addr, i));
1925 RTMemFree(paShdrs);