Commit db3abd36e4 for qemu.org

commit db3abd36e4c7c2a72e00e5806cf4c47f5aa5c491
Author: Laurent Vivier <laurent@vivier.eu>
Date:   Mon Jul 27 13:48:48 2026 +0200

    linux-user/sh4: allow full 32-bit address space

    On real SH4 hardware, the address space is split between user mode
    (U0, 0x00000000-0x7fffffff) and kernel mode (P1-P4, 0x80000000-0xffffffff),
    so TARGET_VIRT_ADDR_SPACE_BITS was set to 31 for CONFIG_USER_ONLY.

    However, qemu-user does not emulate the MMU, so this limit is not needed.
    The only effect is to restrict reserved_va to 2 GB, causing OOM failures
    for memory-intensive builds (e.g. webkit2gtk on Debian sh4 buildds).

    Set TARGET_VIRT_ADDR_SPACE_BITS to 32 unconditionally, like most other
    32-bit targets. Also fix the TASK_UNMAPPED_BASE macro to use 1ull instead
    of 1u to avoid undefined behavior when shifting by 32.

    Reported-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
    Signed-off-by: Laurent Vivier <laurent@vivier.eu>
    Reviewed-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Helge Deller <deller@gmx.de>

diff --git a/linux-user/sh4/target_mman.h b/linux-user/sh4/target_mman.h
index dd9016081e..2d05837c2f 100644
--- a/linux-user/sh4/target_mman.h
+++ b/linux-user/sh4/target_mman.h
@@ -1,6 +1,6 @@
 /* arch/sh/include/asm/processor_32.h */
 #define TASK_UNMAPPED_BASE \
-    TARGET_PAGE_ALIGN((1u << TARGET_VIRT_ADDR_SPACE_BITS) / 3)
+    TARGET_PAGE_ALIGN((1ull << TARGET_VIRT_ADDR_SPACE_BITS) / 3)

 /* arch/sh/include/asm/elf.h */
 #define ELF_ET_DYN_BASE       (TASK_UNMAPPED_BASE * 2)
diff --git a/target/sh4/cpu-param.h b/target/sh4/cpu-param.h
index c3b8114e53..9d72e35e31 100644
--- a/target/sh4/cpu-param.h
+++ b/target/sh4/cpu-param.h
@@ -9,10 +9,8 @@
 #define SH4_CPU_PARAM_H

 #define TARGET_PAGE_BITS 12  /* 4k */
-#ifdef CONFIG_USER_ONLY
-# define TARGET_VIRT_ADDR_SPACE_BITS 31
-#else
-# define TARGET_VIRT_ADDR_SPACE_BITS 32
-#endif
+
+/* qemu-user does not emulate the MMU, so no need to limit to 31 bits. */
+#define TARGET_VIRT_ADDR_SPACE_BITS 32

 #endif