Lines Matching defs:rsec
323 struct section *rsec;
326 rsec = sec->rsec;
327 if (!rsec)
332 sec_offset_hash(rsec, o)) {
333 if (reloc->sec != rsec)
1033 struct reloc *elf_init_reloc(struct elf *elf, struct section *rsec,
1039 if (reloc_idx >= sec_num_entries(rsec)) {
1041 __func__, reloc_idx, rsec->name, sec_num_entries(rsec));
1045 reloc = &rsec->relocs[reloc_idx];
1049 __func__, rsec->name, reloc_idx);
1053 reloc->sec = rsec;
1094 return elf_init_reloc(elf, sec->rsec, reloc_idx, offset, sym, addend,
1109 return elf_init_reloc(elf, sec->rsec, reloc_idx, offset, sym, addend,
1116 struct section *rsec;
1125 list_for_each_entry(rsec, &elf->sections, list) {
1126 if (!is_reloc_sec(rsec))
1129 rsec->base = find_section_by_index(elf, rsec->sh.sh_info);
1130 if (!rsec->base) {
1131 ERROR("can't find base section for reloc section %s", rsec->name);
1135 rsec->base->rsec = rsec;
1138 rsec->nr_alloc_relocs = 0;
1140 rsec->relocs = calloc(sec_num_entries(rsec), sizeof(*reloc));
1141 if (!rsec->relocs) {
1147 for (i = 0; i < sec_num_entries(rsec); i++) {
1148 reloc = &rsec->relocs[i];
1150 reloc->sec = rsec;
1154 ERROR("can't find reloc entry symbol %d for %s", symndx, rsec->name);
1531 static int elf_alloc_reloc(struct elf *elf, struct section *rsec)
1534 unsigned int nr_relocs_old = sec_num_entries(rsec);
1539 if (!rsec->data) {
1540 rsec->data = elf_newdata(elf_getscn(elf->elf, rsec->idx));
1541 if (!rsec->data) {
1546 rsec->data->d_align = 1;
1547 rsec->data->d_type = ELF_T_RELA;
1548 rsec->data->d_buf = NULL;
1551 rsec->data->d_size = nr_relocs_new * elf_rela_size(elf);
1552 rsec->sh.sh_size = rsec->data->d_size;
1555 if (nr_alloc <= rsec->nr_alloc_relocs)
1558 if (rsec->data->d_buf && !rsec->nr_alloc_relocs) {
1559 void *orig_buf = rsec->data->d_buf;
1565 rsec->data->d_buf = malloc(nr_alloc * elf_rela_size(elf));
1566 if (!rsec->data->d_buf) {
1570 memcpy(rsec->data->d_buf, orig_buf,
1573 rsec->data->d_buf = realloc(rsec->data->d_buf,
1575 if (!rsec->data->d_buf) {
1581 rsec->nr_alloc_relocs = nr_alloc;
1583 old_relocs = rsec->relocs;
1635 rsec->relocs = new_relocs;
1642 struct section *rsec;
1653 rsec = elf_create_section(elf, rsec_name, nr_relocs * elf_rela_size(elf),
1657 if (!rsec)
1661 rsec->data->d_type = ELF_T_RELA;
1663 rsec->nr_alloc_relocs = nr_relocs;
1664 rsec->relocs = calloc(nr_relocs, sizeof(struct reloc));
1665 if (!rsec->relocs) {
1671 rsec->sh.sh_link = find_section_by_name(elf, ".symtab")->idx;
1672 rsec->sh.sh_info = sec->idx;
1674 sec->rsec = rsec;
1675 rsec->base = sec;
1677 return rsec;
1685 struct section *rsec = sec->rsec;
1687 if (!rsec) {
1688 rsec = elf_create_rela_section(elf, sec, 0);
1689 if (!rsec)
1698 if (elf_alloc_reloc(elf, rsec))
1701 mark_sec_changed(elf, rsec, true);
1703 return elf_init_reloc(elf, rsec, sec_num_entries(rsec) - 1, offset, sym,