mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH v2 0/2] Remove obsolete RELOC_HIDE() macro from compiler-gcc.h
@ 2026-09-04  8:25 Uros Bizjak
  2026-09-04  8:25 ` [PATCH v2 1/2] x86/boot: Disable GCC min-pagesize assumption in boot code Uros Bizjak
  2026-09-04  8:25 ` [PATCH v2 2/2] compiler-gcc: Remove obsolete RELOC_HIDE() macro Uros Bizjak
  0 siblings, 2 replies; 8+ messages in thread
From: Uros Bizjak @ 2026-09-04  8:25 UTC (permalink / raw)
  To: x86, linux-kernel
  Cc: Uros Bizjak, Thomas Gleixner, Ingo Molnar, Borislav Petkov,
	Dave Hansen, H. Peter Anvin, Andrew Morton, Linus Torvalds

The GCC specific macro was historically used to workaround very old
compiler bugs (including pre-4.1 ppc64 GCC). These compilers are long
obsolete.

The generic RELOC_HIDE() macro should be used instead.

The removal causes GCC to detect several reads from addresses below 4kB in
the boot and realmode code. GCC treats absolute addresses smaller than the
min-pagesize param (which defaults to 4kB) in the generic address space
as presumed results of pointer arithmetics from NULL. For example, the
following code, when compiled with -O2 -Warray-bounds (included in -Wall):

  int foo (void) { return *(int *)0x123; }

will emit a rather cryptic warning:

warning: array subscript 0 is outside array bounds of ‘int[0]’ [-Warray-bounds=]
    1 | int foo (void) { return *(int *)0x123; }
      |                         ^~~~~~~~~~~~~
cc1: note: source object is likely at address zero

The early boot environment does not guarantee a minimum page size, so
explicitly setting the minimum page size to zero by adding
--param=min-pagesize=0 to the compiler flags when building the x86
boot and realmode code with GCC inhibits warnings for addresses below 4kB.

A long-term solution is to replace open-coded inline assembly used for
FS/GS memory accesses in arch/x86/boot/ with segment-qualified pointer
dereferences [1]. The compiler allows pointer arithmetic from NULL in
__seg_fs and __seg_gs named address spaces so the --param=min-pagesize=0
parameter is no longer needed.

The v1 patch is available at [2]. v2 leaves the conversion to the __seg_fs
and __seg_gs named address space to follow-up x86 boot code
cleanup patches [1].

[1] https://lore.kernel.org/lkml/20260120195407.1163051-1-hpa@zytor.com/
[2] https://lore.kernel.org/lkml/20251223202038.91200-1-ubizjak@gmail.com/

Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>

Uros Bizjak (2):
  x86/boot: Disable GCC min-pagesize assumption in boot code
  compiler-gcc: Remove obsolete RELOC_HIDE() macro

 arch/x86/boot/Makefile        |  3 +++
 arch/x86/realmode/rm/Makefile |  3 +++
 include/linux/compiler-gcc.h  | 25 -------------------------
 include/linux/compiler.h      |  8 ++++++++
 4 files changed, 14 insertions(+), 25 deletions(-)

-- 
2.55.0


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2026-09-05  9:42 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-09-04  8:25 [PATCH v2 0/2] Remove obsolete RELOC_HIDE() macro from compiler-gcc.h Uros Bizjak
2026-09-04  8:25 ` [PATCH v2 1/2] x86/boot: Disable GCC min-pagesize assumption in boot code Uros Bizjak
2026-09-04 13:17   ` H. Peter Anvin
2026-09-04  8:25 ` [PATCH v2 2/2] compiler-gcc: Remove obsolete RELOC_HIDE() macro Uros Bizjak
2026-09-04 15:16   ` Linus Torvalds
2026-09-04 15:29     ` Uros Bizjak
2026-09-04 15:39       ` Linus Torvalds
2026-09-05  9:42         ` Uros Bizjak

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®