On Fri, Mar 20, 2026 at 10:44:15AM -0400, Trevor Gamblin wrote:
> From: Jason Montleon <[email protected]>
>
> Upstream-Status: Submitted [https://savannah.gnu.org/bugs/?65909]
>
> Signed-off-by: Jason Montleon <[email protected]>
> Signed-off-by: Trevor Gamblin <[email protected]>
> ---
> We have recently added this to the openembedded-core layer to help with RISC-V
> builds on certain platforms (e.g. the VisionFive 2). I have left the patch as
> it
> is there, including the link to the original bug submission and the author's
> attribution. Jason, if you would like to change the attribution or anything
> about the patch, let me know and I can re-submit.
However on riscv64, medany memory model only allows addressing in +-2GiB
range, while large memory model could index the whole 64-bit address
space. This patch would break cases that grub core and dynamically
loaded modules (i.e. EFI memory allocated with type EFI_LOADER_CODE) are
located too far away to address each other with medany code model.
The issue reported in your link is related to handling of R_RISCV_ALIGN
relocations, which shouldn't happen anymore in Grub 2.14+ as commit
8fef533cf695 ("configure: Add -mno-relax on riscv*") is a fix for it.
Thanks,
Yao Zi
> configure.ac | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/configure.ac b/configure.ac
> index d19fb625d..2a070c577 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -1675,7 +1675,7 @@ fi]
>
> CFLAGS="$TARGET_CFLAGS"
>
> -if test "$target_cpu" = x86_64 || test "$target_cpu" = sparc64 || test
> "$target_cpu" = riscv64 ; then
> +if test "$target_cpu" = x86_64 || test "$target_cpu" = sparc64 ; then
> # Use large model to support 4G memory
> AC_CACHE_CHECK([whether option -mcmodel=large works], grub_cv_cc_mcmodel, [
> CFLAGS="$TARGET_CFLAGS -mcmodel=large"
> @@ -1685,9 +1685,11 @@ if test "$target_cpu" = x86_64 || test "$target_cpu" =
> sparc64 || test "$target_
> ])
> if test "x$grub_cv_cc_mcmodel" = xyes; then
> TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large"
> - elif test "$target_cpu" = sparc64 || test "$target_cpu" = riscv64; then
> + elif test "$target_cpu" = sparc64; then
> TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=medany"
> fi
> +elif test "$target_cpu" = riscv64 ; then
> + TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=medany"
> fi
>
> # Stack smashing protector.
> --
> 2.53.0
>
>
> _______________________________________________
> Grub-devel mailing list
> [email protected]
> https://lists.gnu.org/mailman/listinfo/grub-devel
_______________________________________________
Grub-devel mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/grub-devel