MIPS: make size of relocation table fixed but configurable

Currently the size of the relocation table will be shrunk
to the actual size needed. Although this gives a maximal
space saving, it messes up the _end symbol. This breaks
features like appended DTBs because the _end symbol doesn't
point to the real end of the U-Boot binary.

Remove the size shrinking and make the size of the relocation
table fixed but configurable. This follows the Linux approach
and the user can adjust the size to his needs.

Also rename the relocation table section from .rel to .data.reloc
to follow the Linux approach and to avoid ambiguities with the
.rel.* sections added by the linker.

Reported-by: Lars Povlsen <lars.povlsen@microsemi.com>
Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
diff --git a/tools/mips-relocs.c b/tools/mips-relocs.c
index 442cc8f..6252580 100644
--- a/tools/mips-relocs.c
+++ b/tools/mips-relocs.c
@@ -195,15 +195,13 @@
 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 @@
 		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 @@
 	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 @@
 	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 */