util/cbfstool/cbfs-mkstage: Support x86_64

Add support for relocations on x86_64.
Required for 64bit romstage.

Change-Id: I1ff223d3476776297b501813a953356dd6fa9d67
Signed-off-by: Patrick Rudolph <siro@das-labor.org>
Reviewed-on: https://review.coreboot.org/c/30115
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Philipp Deppenwiese <zaolin.daisuki@gmail.com>
This commit is contained in:
Patrick Rudolph 2018-11-26 15:37:51 +01:00 committed by Patrick Georgi
parent 565bebe0b3
commit 21046a33ef
1 changed files with 7 additions and 4 deletions

View File

@ -362,7 +362,9 @@ static int rmod_filter(struct reloc_filter *f, const Elf64_Rela *r)
/* If there is any relocation to the ignored section that isn't
* absolute fail as current assumptions are that all relocations
* are absolute. */
if (reloc_type != R_386_32) {
if ((reloc_type != R_386_32) &&
(reloc_type != R_AMD64_64) &&
(reloc_type != R_AMD64_32)) {
ERROR("Invalid reloc to ignored section: %x\n", reloc_type);
return -1;
}
@ -392,9 +394,10 @@ int parse_elf_to_xip_stage(const struct buffer *input, struct buffer *output,
if (rmodule_init(rmodctx, input))
return -1;
/* Only support x86 XIP currently. */
if (rmodctx->pelf.ehdr.e_machine != EM_386) {
ERROR("Only support XIP stages for x86\n");
/* Only support x86 / x86_64 XIP currently. */
if ((rmodctx->pelf.ehdr.e_machine != EM_386) &&
(rmodctx->pelf.ehdr.e_machine != EM_X86_64)) {
ERROR("Only support XIP stages for x86/x86_64\n");
goto out;
}