Lines Matching refs:sec

780 verdefneed_size(FSTATE *fstate, SINFO *sec)  in verdefneed_size()  argument
788 size_t num_main = sec->vercnt; in verdefneed_size()
797 if (sec->type == SINFO_T_VERDEF) { in verdefneed_size()
818 offset = highwater = map_addr_to_offset(fstate, sec->vaddr, in verdefneed_size()
822 sec->size = offset; in verdefneed_size()
849 sec->size = highwater - sec->size; in verdefneed_size()
873 get_data(FSTATE *fstate, SINFO *sec) in get_data() argument
884 if ((sec->type == SINFO_T_NULL) || (sec->shdr != NULL)) in get_data()
887 if (((sec->shdr = malloc(sizeof (*sec->shdr))) == NULL) || in get_data()
888 ((sec->data = malloc(sizeof (*sec->data))) == NULL)) { in get_data()
890 sinfo_free(sec, 1); in get_data()
895 tinfo = &sinfo_data[sec->type]; in get_data()
907 sec->shdr->sh_name = 0; in get_data()
908 sec->shdr->sh_type = tinfo->sh_type; in get_data()
909 sec->shdr->sh_flags = tinfo->sh_flags; in get_data()
915 sec->shdr->sh_addr = sec->vaddr; in get_data()
916 sec->shdr->sh_offset = sec->offset; in get_data()
918 } else if (sec->vaddr == 0) { in get_data()
924 sec->shdr->sh_addr = map_offset_to_addr(fstate, sec->offset, in get_data()
925 sec->size, &zero_bytes, &phdr); in get_data()
926 sec->shdr->sh_offset = sec->offset; in get_data()
932 sec->shdr->sh_addr = sec->vaddr; in get_data()
933 sec->shdr->sh_offset = map_addr_to_offset(fstate, in get_data()
934 sec->vaddr, sec->size, &zero_bytes, &phdr); in get_data()
936 if (sec->shdr->sh_offset == 0) { in get_data()
937 sinfo_free(sec, 1); in get_data()
945 sec->shdr->sh_flags |= SHF_WRITE; in get_data()
946 sec->shdr->sh_size = sec->size; in get_data()
947 sec->shdr->sh_link = 0; in get_data()
948 sec->shdr->sh_info = 0; in get_data()
949 sec->shdr->sh_addralign = tinfo->sh_addralign; in get_data()
950 sec->shdr->sh_entsize = tinfo->sh_entsize; in get_data()
957 sec->shdr->sh_link = SINFO_T_DYNSTR; in get_data()
961 sec->shdr->sh_link = SINFO_T_DYNSTR; in get_data()
962 sec->shdr->sh_info = 1; /* First global symbol */ in get_data()
966 sec->shdr->sh_link = SINFO_T_DYNSTR; in get_data()
971 sec->shdr->sh_info = sec->shdr->sh_size / sizeof (Sym); in get_data()
979 sec->shdr->sh_link = SINFO_T_DYNSYM; in get_data()
984 sec->shdr->sh_link = SINFO_T_DYNSTR; in get_data()
985 sec->shdr->sh_info = sec->vercnt; in get_data()
989 sec->shdr->sh_link = SINFO_T_DYNSYM; in get_data()
990 sec->shdr->sh_info = SINFO_T_DYN; in get_data()
995 sec->shdr->sh_link = SINFO_T_LDYNSYM; in get_data()
1002 sec->data->d_type = tinfo->libelf_type; in get_data()
1003 sec->data->d_size = sec->size; in get_data()
1004 sec->data->d_off = 0; in get_data()
1005 sec->data->d_align = tinfo->sh_addralign; in get_data()
1006 sec->data->d_version = fstate->ehdr->e_version; in get_data()
1008 if (sec->size == 0) { in get_data()
1009 sec->data->d_buf = NULL; in get_data()
1013 if ((sec->data->d_buf = malloc(sec->size)) == NULL) { in get_data()
1016 sinfo_free(sec, 1); in get_data()
1022 read_bytes = sec->size - zero_bytes; in get_data()
1024 (read_data(fstate, sec->shdr->sh_offset, sec->data->d_buf, in get_data()
1026 sinfo_free(sec, 1); in get_data()
1030 bzero(read_bytes + (char *)sec->data->d_buf, zero_bytes); in get_data()
1033 (elf_xlatetom(sec->data, sec->data, in get_data()
1035 sinfo_free(sec, 1); in get_data()
1113 } sec; in fake_shdr_cache() local
1114 static const size_t sinfo_n = sizeof (sec) / sizeof (sec.dyn); in fake_shdr_cache()
1115 SINFO *secarr = (SINFO *) &sec; in fake_shdr_cache()
1146 bzero(&sec, sizeof (sec)); /* Initialize "by-name" sec info */ in fake_shdr_cache()
1170 sec.dyn.type = SINFO_T_DYN; in fake_shdr_cache()
1171 sinfo = &sec.dyn; in fake_shdr_cache()
1175 sec.interp.type = SINFO_T_INTERP; in fake_shdr_cache()
1176 sinfo = &sec.interp; in fake_shdr_cache()
1188 sec.unwind.type = SINFO_T_UNWIND; in fake_shdr_cache()
1189 sinfo = &sec.unwind; in fake_shdr_cache()
1193 sec.cap.type = SINFO_T_CAP; in fake_shdr_cache()
1194 sinfo = &sec.cap; in fake_shdr_cache()
1212 if (sec.dyn.type == SINFO_T_DYN) in fake_shdr_cache()
1213 (void) get_data(&fstate, &sec.dyn); in fake_shdr_cache()
1214 if ((sec.dyn.type == SINFO_T_DYN) && (sec.dyn.data->d_buf != NULL)) { in fake_shdr_cache()
1216 for (dyn = sec.dyn.data->d_buf; dyn->d_tag != DT_NULL; dyn++) { in fake_shdr_cache()
1219 sec.hash.type = SINFO_T_HASH; in fake_shdr_cache()
1220 sec.hash.vaddr = dyn->d_un.d_ptr; in fake_shdr_cache()
1224 sec.dynstr.type = SINFO_T_DYNSTR; in fake_shdr_cache()
1225 sec.dynstr.vaddr = dyn->d_un.d_ptr; in fake_shdr_cache()
1229 sec.dynsym.type = SINFO_T_DYNSYM; in fake_shdr_cache()
1230 sec.dynsym.vaddr = dyn->d_un.d_ptr; in fake_shdr_cache()
1234 sec.rela.type = SINFO_T_RELA; in fake_shdr_cache()
1235 sec.rela.vaddr = dyn->d_un.d_ptr; in fake_shdr_cache()
1239 sec.rela.size = dyn->d_un.d_val; in fake_shdr_cache()
1243 sec.dynstr.size = dyn->d_un.d_val; in fake_shdr_cache()
1247 sec.rel.type = SINFO_T_REL; in fake_shdr_cache()
1248 sec.rel.vaddr = dyn->d_un.d_ptr; in fake_shdr_cache()
1252 sec.rel.size = dyn->d_un.d_val; in fake_shdr_cache()
1256 sec.initarr.type = SINFO_T_INITARR; in fake_shdr_cache()
1257 sec.initarr.vaddr = dyn->d_un.d_ptr; in fake_shdr_cache()
1261 sec.initarr.size = dyn->d_un.d_val; in fake_shdr_cache()
1265 sec.finiarr.type = SINFO_T_FINIARR; in fake_shdr_cache()
1266 sec.finiarr.vaddr = dyn->d_un.d_ptr; in fake_shdr_cache()
1270 sec.finiarr.size = dyn->d_un.d_val; in fake_shdr_cache()
1274 sec.preinitarr.type = SINFO_T_PREINITARR; in fake_shdr_cache()
1275 sec.preinitarr.vaddr = dyn->d_un.d_ptr; in fake_shdr_cache()
1279 sec.preinitarr.size = dyn->d_un.d_val; in fake_shdr_cache()
1283 sec.capinfo.type = SINFO_T_CAPINFO; in fake_shdr_cache()
1284 sec.capinfo.vaddr = dyn->d_un.d_ptr; in fake_shdr_cache()
1288 sec.capchain.type = SINFO_T_CAPCHAIN; in fake_shdr_cache()
1289 sec.capchain.vaddr = dyn->d_un.d_ptr; in fake_shdr_cache()
1293 sec.ldynsym.type = SINFO_T_LDYNSYM; in fake_shdr_cache()
1294 sec.ldynsym.vaddr = dyn->d_un.d_ptr; in fake_shdr_cache()
1298 sec.ldynsym.size = dyn->d_un.d_val; in fake_shdr_cache()
1302 sec.symsort.type = SINFO_T_SYMSORT; in fake_shdr_cache()
1303 sec.symsort.vaddr = dyn->d_un.d_ptr; in fake_shdr_cache()
1307 sec.symsort.size = dyn->d_un.d_val; in fake_shdr_cache()
1311 sec.tlssort.type = SINFO_T_TLSSORT; in fake_shdr_cache()
1312 sec.tlssort.vaddr = dyn->d_un.d_ptr; in fake_shdr_cache()
1316 sec.tlssort.size = dyn->d_un.d_val; in fake_shdr_cache()
1320 sec.move.type = SINFO_T_MOVE; in fake_shdr_cache()
1321 sec.move.vaddr = dyn->d_un.d_ptr; in fake_shdr_cache()
1325 sec.move.size = dyn->d_un.d_val; in fake_shdr_cache()
1329 sec.syminfo.type = SINFO_T_SYMINFO; in fake_shdr_cache()
1330 sec.syminfo.vaddr = dyn->d_un.d_ptr; in fake_shdr_cache()
1334 sec.syminfo.size = dyn->d_un.d_val; in fake_shdr_cache()
1338 sec.versym.type = SINFO_T_VERSYM; in fake_shdr_cache()
1339 sec.versym.vaddr = dyn->d_un.d_ptr; in fake_shdr_cache()
1343 sec.verdef.type = SINFO_T_VERDEF; in fake_shdr_cache()
1344 sec.verdef.vaddr = dyn->d_un.d_ptr; in fake_shdr_cache()
1348 sec.verdef.vercnt = dyn->d_un.d_val; in fake_shdr_cache()
1349 sec.verdef.size = sizeof (Verdef) * in fake_shdr_cache()
1354 sec.verneed.type = SINFO_T_VERNEED; in fake_shdr_cache()
1355 sec.verneed.vaddr = dyn->d_un.d_ptr; in fake_shdr_cache()
1359 sec.verneed.vercnt = dyn->d_un.d_val; in fake_shdr_cache()
1360 sec.verneed.size = sizeof (Verneed) * in fake_shdr_cache()
1378 if (sec.dynstr.size == 0) in fake_shdr_cache()
1379 sec.dynstr.type = SINFO_T_NULL; in fake_shdr_cache()
1380 if (sec.dynstr.type != SINFO_T_DYNSTR) { in fake_shdr_cache()
1381 sinfo_free(&sec.dyn, 1); /* Data already fetched */ in fake_shdr_cache()
1382 sec.dynsym.type = SINFO_T_NULL; in fake_shdr_cache()
1383 sec.dynsym.type = SINFO_T_NULL; in fake_shdr_cache()
1384 sec.verdef.type = SINFO_T_NULL; in fake_shdr_cache()
1385 sec.verneed.type = SINFO_T_NULL; in fake_shdr_cache()
1397 if (sec.hash.type == SINFO_T_HASH) { in fake_shdr_cache()
1402 if (hash_size(&fstate, &sec.hash, in fake_shdr_cache()
1404 sec.hash.type = SINFO_T_NULL; in fake_shdr_cache()
1407 sec.hash.size = total * sizeof (Word); in fake_shdr_cache()
1408 sec.dynsym.size = nchain * sizeof (Sym); in fake_shdr_cache()
1409 sec.versym.size = nchain * sizeof (Versym); in fake_shdr_cache()
1417 if (sec.ldynsym.size > sec.dynsym.size) in fake_shdr_cache()
1418 sec.ldynsym.size -= sec.dynsym.size; in fake_shdr_cache()
1426 if (sec.hash.type != SINFO_T_HASH) { in fake_shdr_cache()
1427 sec.dynsym.type = SINFO_T_NULL; in fake_shdr_cache()
1428 sec.ldynsym.type = SINFO_T_NULL; in fake_shdr_cache()
1429 sec.versym.type = SINFO_T_NULL; in fake_shdr_cache()
1437 if ((sec.verdef.type == SINFO_T_VERDEF) && in fake_shdr_cache()
1438 (verdefneed_size(&fstate, &sec.verdef) == 0)) in fake_shdr_cache()
1439 sec.verdef.type = SINFO_T_NULL; in fake_shdr_cache()
1440 if ((sec.verneed.type == SINFO_T_VERNEED) && in fake_shdr_cache()
1441 (verdefneed_size(&fstate, &sec.verneed) == 0)) in fake_shdr_cache()
1442 sec.verneed.type = SINFO_T_NULL; in fake_shdr_cache()
1451 if (sec.dynsym.type != SINFO_T_DYNSYM) { in fake_shdr_cache()
1452 sec.ldynsym.type = SINFO_T_NULL; in fake_shdr_cache()
1453 sec.hash.type = SINFO_T_NULL; in fake_shdr_cache()
1454 sec.syminfo.type = SINFO_T_NULL; in fake_shdr_cache()
1455 sec.versym.type = SINFO_T_NULL; in fake_shdr_cache()
1456 sec.move.type = SINFO_T_NULL; in fake_shdr_cache()
1457 sec.rel.type = SINFO_T_NULL; in fake_shdr_cache()
1458 sec.rela.type = SINFO_T_NULL; in fake_shdr_cache()
1462 if (sec.ldynsym.type != SINFO_T_DYNSYM) { in fake_shdr_cache()
1463 sec.symsort.type = SINFO_T_NULL; in fake_shdr_cache()
1464 sec.tlssort.type = SINFO_T_NULL; in fake_shdr_cache()