diff options
Diffstat (limited to 'arch/riscv/lib')
-rw-r--r-- | arch/riscv/lib/Makefile | 2 | ||||
-rw-r--r-- | arch/riscv/lib/barebox.lds.S | 10 | ||||
-rw-r--r-- | arch/riscv/lib/bootm.c | 7 | ||||
-rw-r--r-- | arch/riscv/lib/pbl.lds.S | 12 | ||||
-rw-r--r-- | arch/riscv/lib/reloc.c | 12 |
5 files changed, 22 insertions, 21 deletions
diff --git a/arch/riscv/lib/Makefile b/arch/riscv/lib/Makefile index f3db5320f7..6932480800 100644 --- a/arch/riscv/lib/Makefile +++ b/arch/riscv/lib/Makefile @@ -4,7 +4,7 @@ extra-y += barebox.lds obj-y += dtb.o obj-pbl-y += sections.o setupc.o reloc.o sections.o runtime-offset.o -obj-$(CONFIG_HAS_ARCH_SJLJ) += setjmp.o longjmp.o +obj-$(CONFIG_ARCH_HAS_SJLJ) += setjmp.o longjmp.o obj-$(CONFIG_RISCV_OPTIMZED_STRING_FUNCTIONS) += memcpy.o memset.o memmove.o obj-$(CONFIG_RISCV_SBI) += sbi.o obj-$(CONFIG_CMD_RISCV_CPUINFO) += cpuinfo.o diff --git a/arch/riscv/lib/barebox.lds.S b/arch/riscv/lib/barebox.lds.S index 7856b57a52..101615ab05 100644 --- a/arch/riscv/lib/barebox.lds.S +++ b/arch/riscv/lib/barebox.lds.S @@ -11,15 +11,11 @@ * */ -#include <asm-generic/barebox.lds.h> +#include <asm/barebox.lds.h> -OUTPUT_ARCH(riscv) +OUTPUT_ARCH(BAREBOX_OUTPUT_ARCH) ENTRY(start) -#ifdef CONFIG_64BIT -OUTPUT_FORMAT("elf64-littleriscv") -#else -OUTPUT_FORMAT("elf32-littleriscv") -#endif +OUTPUT_FORMAT(BAREBOX_OUTPUT_FORMAT) SECTIONS { . = 0x0; diff --git a/arch/riscv/lib/bootm.c b/arch/riscv/lib/bootm.c index 6984f282be..a6655b8aaf 100644 --- a/arch/riscv/lib/bootm.c +++ b/arch/riscv/lib/bootm.c @@ -36,6 +36,12 @@ static struct image_handler riscv_linux_handler = { .filetype = filetype_riscv_linux_image, }; +static struct image_handler riscv_linux_efi_handler = { + .name = "RISC-V Linux/EFI image", + .bootm = do_bootm_linux, + .filetype = filetype_riscv_efi_linux_image, +}; + static struct image_handler riscv_fit_handler = { .name = "FIT image", .bootm = do_bootm_linux, @@ -51,6 +57,7 @@ static struct image_handler riscv_barebox_handler = { static int riscv_register_image_handler(void) { register_image_handler(&riscv_linux_handler); + register_image_handler(&riscv_linux_efi_handler); register_image_handler(&riscv_barebox_handler); if (IS_ENABLED(CONFIG_FITIMAGE)) diff --git a/arch/riscv/lib/pbl.lds.S b/arch/riscv/lib/pbl.lds.S index e238b2bfd3..0fe7dfda8e 100644 --- a/arch/riscv/lib/pbl.lds.S +++ b/arch/riscv/lib/pbl.lds.S @@ -2,15 +2,11 @@ /* SPDX-FileCopyrightText: 2012 Sascha Hauer <s.hauer@pengutronix.de>, Pengutronix */ #include <linux/sizes.h> -#include <asm-generic/barebox.lds.h> +#include <asm/barebox.lds.h> #include <asm-generic/memory_layout.h> -OUTPUT_ARCH(riscv) -#ifdef CONFIG_64BIT -OUTPUT_FORMAT("elf64-littleriscv") -#else -OUTPUT_FORMAT("elf32-littleriscv") -#endif +OUTPUT_ARCH(BAREBOX_OUTPUT_ARCH) +OUTPUT_FORMAT(BAREBOX_OUTPUT_FORMAT) SECTIONS { . = 0x0; @@ -74,8 +70,6 @@ SECTIONS .piggydata : { *(.piggydata) } - __piggydata_end = .; - .image_end : { KEEP(*(.__image_end)) } pbl_image_size = .; diff --git a/arch/riscv/lib/reloc.c b/arch/riscv/lib/reloc.c index da53c50448..0c1ec8b488 100644 --- a/arch/riscv/lib/reloc.c +++ b/arch/riscv/lib/reloc.c @@ -42,9 +42,13 @@ void relocate_to_current_adr(void) if (!offset) return; - dstart = __rel_dyn_start + offset; - dend = __rel_dyn_end + offset; - dynsym = (void *)__dynsym_start + offset; + /* + * We have yet to relocate, so using runtime_address + * to compute the relocated address + */ + dstart = runtime_address(__rel_dyn_start); + dend = runtime_address(__rel_dyn_end); + dynsym = runtime_address(__dynsym_start); for (rela = dstart; (void *)rela < dend; rela++) { unsigned long *fixup; @@ -66,7 +70,7 @@ void relocate_to_current_adr(void) putc_ll(' '); puthex_ll(rela->r_addend); putc_ll('\n'); - panic(""); + __hang(); } } |