On 2026-03-21 04:23, Yao Zi wrote:
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.

Thank you for clarifying. I've submitted a reversion patch in oe-core so we don't carry this and run into the problem later.

Trevor


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

Reply via email to