X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=tools%2Fmips-relocs.c;h=625258085b608b17a54342db5ee90affd89f0ca0;hb=8353516f4a7e31ee655050033b65218c9733c65a;hp=442cc8f6d2283968f4b147f5a19ccfbce833bffe;hpb=e8f80a5a58c9b506453cc0780687e8ed457d30a6;p=oweals%2Fu-boot.git diff --git a/tools/mips-relocs.c b/tools/mips-relocs.c index 442cc8f6d2..625258085b 100644 --- a/tools/mips-relocs.c +++ b/tools/mips-relocs.c @@ -195,15 +195,13 @@ static int compare_relocs(const void *a, const void *b) int main(int argc, char *argv[]) { unsigned int i, j, i_rel_shdr, sh_type, sh_entsize, sh_entries; - size_t rel_size, rel_actual_size, load_sz; + size_t rel_size, rel_actual_size; const char *shstrtab, *sh_name, *rel_pfx; int (*parse_fn)(const void *rel); uint8_t *buf_start, *buf; const Elf32_Ehdr *ehdr32; const Elf64_Ehdr *ehdr64; uintptr_t sh_offset; - Elf32_Phdr *phdr32; - Elf64_Phdr *phdr64; Elf32_Shdr *shdr32; Elf64_Shdr *shdr64; struct stat st; @@ -285,8 +283,6 @@ int main(int argc, char *argv[]) goto out_free_relocs; } - phdr32 = elf + ehdr_field(e_phoff); - phdr64 = elf + ehdr_field(e_phoff); shdr32 = elf + ehdr_field(e_shoff); shdr64 = elf + ehdr_field(e_shoff); shstrtab = elf + shdr_field(ehdr_field(e_shstrndx), sh_offset); @@ -295,7 +291,7 @@ int main(int argc, char *argv[]) for (i = 0; i < ehdr_field(e_shnum); i++) { sh_name = shstr(shdr_field(i, sh_name)); - if (!strcmp(sh_name, ".rel")) { + if (!strcmp(sh_name, ".data.reloc")) { i_rel_shdr = i; continue; } @@ -397,22 +393,12 @@ int main(int argc, char *argv[]) rel_size = shdr_field(i_rel_shdr, sh_size); rel_actual_size = buf - buf_start; if (rel_actual_size > rel_size) { - fprintf(stderr, "Relocs overflowed .rel section\n"); - return -ENOMEM; - } - - /* Update the .rel section's size */ - set_shdr_field(i_rel_shdr, sh_size, rel_actual_size); - - /* Shrink the PT_LOAD program header filesz (ie. shrink u-boot.bin) */ - for (i = 0; i < ehdr_field(e_phnum); i++) { - if (phdr_field(i, p_type) != PT_LOAD) - continue; - - load_sz = phdr_field(i, p_filesz); - load_sz -= rel_size - rel_actual_size; - set_phdr_field(i, p_filesz, load_sz); - break; + fprintf(stderr, "Relocations overflow available space of 0x%lx (required 0x%lx)!\n", + rel_size, rel_actual_size); + fprintf(stderr, "Please adjust CONFIG_MIPS_RELOCATION_TABLE_SIZE to at least 0x%lx\n", + (rel_actual_size + 0x100) & ~0xFF); + err = -ENOMEM; + goto out_free_relocs; } /* Make sure data is written back to the file */