Elf_Data data;
- struct ElfuScn *link;
+ struct ElfuScn *linkptr;
+ struct ElfuScn *infoptr;
CIRCLEQ_ENTRY(ElfuScn) elemPhdrToScn;
CIRCLEQ_ENTRY(ElfuScn) elem;
}
}
- ms->link = NULL;
+ ms->linkptr = NULL;
+ ms->infoptr = NULL;
return ms;
for (i = 0; i < numShdr - 1; i++) {
ElfuScn *ms = secArray[i];
- if (ms->shdr.sh_link > 0) {
- ms->link = secArray[ms->shdr.sh_link - 1];
+ switch (ms->shdr.sh_type) {
+ case SHT_REL:
+ case SHT_RELA:
+ if (ms->shdr.sh_info > 0) {
+ ms->infoptr = secArray[ms->shdr.sh_info - 1];
+ }
+ case SHT_DYNAMIC:
+ case SHT_HASH:
+ case SHT_SYMTAB:
+ case SHT_DYNSYM:
+ case SHT_GNU_versym:
+ case SHT_GNU_verdef:
+ case SHT_GNU_verneed:
+ if (ms->shdr.sh_link > 0) {
+ ms->linkptr = secArray[ms->shdr.sh_link - 1];
+ }
}
}