pr_debug("Applying relocate section %u to %u\n", relsec,
sechdrs[relsec].sh_info);
for (i = 0; i < sechdrs[relsec].sh_size / sizeof(*rela); i++) {
location = (char *)sechdrs[sechdrs[relsec].sh_info].sh_addr
+ rela[i].r_offset;
sym = (Elf32_Sym *)sechdrs[symindex].sh_addr
+ ELF32_R_SYM(rela[i].r_info);
value = sym->st_value + rela[i].r_addend;
switch (ELF32_R_TYPE(rela[i].r_info)) { case R_XTENSA_NONE: case R_XTENSA_DIFF8: case R_XTENSA_DIFF16: case R_XTENSA_DIFF32: case R_XTENSA_ASM_EXPAND: break;
case R_XTENSA_32: case R_XTENSA_PLT:
*(uint32_t *)location += value; break;
#ifdef __XTENSA_EB__
location[1] = (value >> 8) & 0xff;
location[2] = value & 0xff; #endif #ifdef __XTENSA_EL__
location[1] = value & 0xff;
location[2] = (value >> 8) & 0xff; #endif
} /* FIXME: Ignore any other opcodes. The Xtensa assemblercurrentlyassumesthatthelinkerwill alwaysdorelaxationandsoallPC-relative operandsneedrelocations.(Theassembleralso writesoutthetentativePC-relativevalues, assumingnolink-timerelaxation,soitisusually safetoignoretherelocations.)Ifthe assembler's"--no-link-relax"flagcanbemadeto work,andifallkernelmodulescanbeassembled withthatflag,thenunexpectedrelocationscould
be detected here. */ break;
case R_XTENSA_SLOT1_OP: case R_XTENSA_SLOT2_OP: case R_XTENSA_SLOT3_OP: case R_XTENSA_SLOT4_OP: case R_XTENSA_SLOT5_OP: case R_XTENSA_SLOT6_OP: case R_XTENSA_SLOT7_OP: case R_XTENSA_SLOT8_OP: case R_XTENSA_SLOT9_OP: case R_XTENSA_SLOT10_OP: case R_XTENSA_SLOT11_OP: case R_XTENSA_SLOT12_OP: case R_XTENSA_SLOT13_OP: case R_XTENSA_SLOT14_OP:
pr_err("%s: unexpected FLIX relocation: %u\n",
mod->name,
ELF32_R_TYPE(rela[i].r_info)); return -ENOEXEC;
case R_XTENSA_SLOT0_ALT: case R_XTENSA_SLOT1_ALT: case R_XTENSA_SLOT2_ALT: case R_XTENSA_SLOT3_ALT: case R_XTENSA_SLOT4_ALT: case R_XTENSA_SLOT5_ALT: case R_XTENSA_SLOT6_ALT: case R_XTENSA_SLOT7_ALT: case R_XTENSA_SLOT8_ALT: case R_XTENSA_SLOT9_ALT: case R_XTENSA_SLOT10_ALT: case R_XTENSA_SLOT11_ALT: case R_XTENSA_SLOT12_ALT: case R_XTENSA_SLOT13_ALT: case R_XTENSA_SLOT14_ALT:
pr_err("%s: unexpected ALT relocation: %u\n",
mod->name,
ELF32_R_TYPE(rela[i].r_info)); return -ENOEXEC;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.