Re: [PATCH v2 1/1] Check linker for --image-base support

2026-01-19 Thread Nicholas Vinson



On 1/19/26 10:08, Daniel Kiper wrote:

Hi,

Adding Nicholas and Mike...

On Sun, Jan 18, 2026 at 01:21:14PM +0100, Hustler One via Grub-devel wrote:

I had to revert the commit when updating GRUB to 2.14 on [nixpkgs](https://
github.com/NixOS/nixpkgs/pull/481112).

Also, Leah Rowe has also done the same on [Libreboot](https://codeberg.org/
libreboot/lbmk/src/branch/master/config/grub/nvme/patches/0010-Revert-
configure-Check-linker-for-image-base-support.patch
).

For me, at least, behavior was universally broken on both clang (LLVM21) and
GCC.


It looks it is related to newer linker versions. Older ones work without
any issue. Anyway, sorry for the issues...

Nicholas, may I ask you to investigate this breakage and post a fix?


I've already started looking.

I'll let you know when I have something.

Thanks,
Nicholas Vinson



Daniel



___
Grub-devel mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/grub-devel


Re: [PATCH v2 1/1] Check linker for --image-base support

2026-01-19 Thread Daniel Kiper
Hi,

Adding Nicholas and Mike...

On Sun, Jan 18, 2026 at 01:21:14PM +0100, Hustler One via Grub-devel wrote:
> I had to revert the commit when updating GRUB to 2.14 on [nixpkgs](https://
> github.com/NixOS/nixpkgs/pull/481112).
>
> Also, Leah Rowe has also done the same on [Libreboot](https://codeberg.org/
> libreboot/lbmk/src/branch/master/config/grub/nvme/patches/0010-Revert-
> configure-Check-linker-for-image-base-support.patch
> ).
>
> For me, at least, behavior was universally broken on both clang (LLVM21) and
> GCC.

It looks it is related to newer linker versions. Older ones work without
any issue. Anyway, sorry for the issues...

Nicholas, may I ask you to investigate this breakage and post a fix?

Daniel

___
Grub-devel mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/grub-devel


Re: Re: [PATCH v2 1/1] Check linker for --image-base support

2026-01-18 Thread Hustler One via Grub-devel
I can confirm myself that this patch does the complete opposite of what it 
tries to achieve.

I had to revert the commit when updating GRUB to 2.14 on 
[nixpkgs](https://github.com/NixOS/nixpkgs/pull/481112).

Also, Leah Rowe has also done the same on 
[Libreboot](https://codeberg.org/libreboot/lbmk/src/branch/master/config/grub/nvme/patches/0010-Revert-configure-Check-linker-for-image-base-support.patch
).

For me, at least, behavior was universally broken on both clang (LLVM21) and 
GCC.
___
Grub-devel mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/grub-devel


RE: [PATCH v2 1/1] Check linker for --image-base support

2026-01-18 Thread Hustler One via Grub-devel
I had to revert the commit when updating GRUB to 2.14 on 
[nixpkgs](https://github.com/NixOS/nixpkgs/pull/481112).

Also, Leah Rowe has also done the same on 
[Libreboot](https://codeberg.org/libreboot/lbmk/src/branch/master/config/grub/nvme/patches/0010-Revert-configure-Check-linker-for-image-base-support.patch
).

For me, at least, behavior was universally broken on both clang (LLVM21) and 
GCC.

___
Grub-devel mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/grub-devel


Re: [PATCH v2 1/1] Check linker for --image-base support

2025-12-01 Thread Christian Hesse via Grub-devel
Nicholas Vinson  on Tue, 2025/11/18 19:38:
> In several scenarios, configure tests assume it's safe to use
> '-Wl,-Ttext,', but starting with ld.lld-21, blindly using that
> flag may result in configure-test failures due to ld.lld failing to
> link. The failure is because ld.lld-21 no longer allows the specified
> address is less than the base address.
> 
> However, ld.lld-21+ and ld.bfd-2.44+ both provide support for the
> --image-base flag making it preferable over the older `-Ttext` flag.

This breaks the start address in i386-pc/kernel.img, which should be 0x9000,
but became 0x9074.

The error message is:

/usr/bin/grub-install: error: `/usr/lib/grub/i386-pc/kernel.img' is
miscompiled: its start address is 0x9074 instead of 0x9000: ld.gold bug?.
-- 
main(a){char*c=/*Schoene Gruesse */"B?IJj;MEH"
"CX:;",b;for(a/*Best regards my address:*/=0;b=c[a++];)
putchar(b-1/(/*Chriscc -ox -xc - && ./x*/b/42*2-3)*42);}


pgpq0U48cqeSq.pgp
Description: OpenPGP digital signature
___
Grub-devel mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/grub-devel


RE: [PATCH v2 1/1] Check linker for --image-base support

2025-12-01 Thread cpfeiffer--- via Grub-devel
The issue seems to be that --image-base sets the base address of the ELF image 
(i.e. the text segment), whereas -Ttext sets the actual section start of it. 
See the documentation here 
https://sourceware.org/binutils/docs/ld/Options.html#index-image-base-address_002c-cmd-line
Given that .text is offset from the start of the file due to the ELF headers, 
it puts the actual address of .text to 0x9000 + offset, whereas -Ttext puts 
.text at 0x9000.

This becomes pretty clear in the readelf -e output:

--

ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
  Class: ELF32
  Data:  2's complement, little endian
  Version:   1 (current)
  OS/ABI:UNIX - System V
  ABI Version:   0
  Type:  EXEC (Executable file)
  Machine:   Intel 80386
  Version:   0x1
  Entry point address:   0x9074
  Start of program headers:  52 (bytes into file)
  Start of section headers:  37336 (bytes into file)
  Flags: 0x0
  Size of this header:   52 (bytes)
  Size of program headers:   32 (bytes)
  Number of program headers: 2
  Size of section headers:   40 (bytes)
  Number of section headers: 8
  Section header string table index: 7

Section Headers:
  [Nr] Name  TypeAddr OffSize   ES Flg Lk Inf 
Al
  [ 0]   NULL 00 00 00  0   0 
0
  [ 1] .text PROGBITS9074 74 006cb0 00 WAX  0   0 
1
  [ 2] .rodata   PROGBITSfd40 006d40 001ae3 00   A  0   0 
32
  [ 3] .module_license   PROGBITS00011824 008824 0f 00   A  0   0 
4
  [ 4] .data PROGBITS00011840 008840 00093c 00  WA  0   0 
32
  [ 5] .bss  NOBITS  00012180 00917c 0077c4 00  WA  0   0 
32
  [ 6] .gnu_debuglinkPROGBITS 00917c 18 00  0   0 
4
  [ 7] .shstrtab STRTAB   009194 43 00  0   0 
1
Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
  L (link order), O (extra OS processing required), G (group), T (TLS),
  C (compressed), x (unknown), o (OS specific), E (exclude),
  D (mbind), p (processor specific)

Program Headers:
  Type   Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  LOAD   0x74 0x9074 0x9074 0x09108 0x108d0 RWE 0x20
  GNU_STACK  0x00 0x 0x 0x0 0x0 RW  0x10

 Section to Segment mapping:
  Segment Sections...
   00 .text .rodata .module_license .data .bss
   01


--

0x74 is 116, which is precisely 52 + 2 * 32. Expected is the following layout 
though:

Program Headers:
  Type   Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  LOAD   0x80 0x9000 0x9000 0x090fc 0x108c4 RWE 0x20
  GNU_STACK  0x00 0x 0x 0x0 0x0 RW  0x10

 Section to Segment mapping:
  Segment Sections...
   00 .text .rodata .module_license .data .bss
   01

In this case, 0x74 gets increased to 0x20 to fit the alignment.

> -Original Message-
> From: Christian Hesse 
> Sent: 01 December 2025 16:03
> To: Nicholas Vinson 
> Cc: The development of GNU GRUB ; cpfeiffer@rev-
> crew.info
> Subject: Re: [PATCH v2 1/1] Check linker for --image-base support
>
> Nicholas Vinson  on Tue, 2025/11/18 19:38:
> > In several scenarios, configure tests assume it's safe to use
> > '-Wl,-Ttext,', but starting with ld.lld-21, blindly using
> > that flag may result in configure-test failures due to ld.lld failing
> > to link. The failure is because ld.lld-21 no longer allows the
> > specified address is less than the base address.
> >
> > However, ld.lld-21+ and ld.bfd-2.44+ both provide support for the
> > --image-base flag making it preferable over the older `-Ttext` flag.
>
> This breaks the start address in i386-pc/kernel.img, which should be 0x9000,
> but became 0x9074.
>
> The error message is:
>
> /usr/bin/grub-install: error: `/usr/lib/grub/i386-pc/kernel.img' is
> miscompiled: its start address is 0x9074 instead of 0x9000: ld.gold bug?.
> --
> main(a){char*c=/*Schoene Gruesse */"B?IJj;MEH"
> "CX:;",b;for(a/*Best regards my address:*/=0;b=c[a++];)
> putchar(b-1/(/*Chriscc -ox -xc - && ./x*/b/42*2-3)*42);}


smime.p7s
Description: S/MIME cryptographic signature
___
Grub-devel mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/grub-devel


Re: [PATCH v2 1/1] Check linker for --image-base support

2025-11-24 Thread Gary Lin via Grub-devel
On Tue, Nov 18, 2025 at 07:38:07PM -0500, Nicholas Vinson wrote:
> In several scenarios, configure tests assume it's safe to use
> '-Wl,-Ttext,', but starting with ld.lld-21, blindly using that
> flag may result in configure-test failures due to ld.lld failing to
> link. The failure is because ld.lld-21 no longer allows the specified
> address is less than the base address.
> 
> However, ld.lld-21+ and ld.bfd-2.44+ both provide support for the
> --image-base flag making it preferable over the older `-Ttext` flag.
> 
> Fixes: 67662
> Signed-off-by: Nicholas Vinson 

To save time for people who got the following error as I did after
applying this patch, it means that 'autoconf-archive' is missing in the
system.

configure.ac:1800: error: possibly undefined macro: AC_LANG_SOURCE
  If this token and others are legitimate, please use m4_pattern_allow.
  See the Autoconf documentation.
autoreconf: /usr/bin/autoconf failed with exit status: 1

The error is completely misleading. The real missing macro is
"AX_CHECK_LINK_FLAG" and 'autoconf' could not detect the error
correctly...

Gary Lin

> ---
>  acinclude.m4 |  5 +
>  configure.ac | 14 --
>  2 files changed, 17 insertions(+), 2 deletions(-)
> 
> diff --git a/acinclude.m4 b/acinclude.m4
> index fa7840f09..70c1912f8 100644
> --- a/acinclude.m4
> +++ b/acinclude.m4
> @@ -79,6 +79,11 @@ AC_DEFUN([grub_PROG_OBJCOPY_ABSOLUTE],
>  [AC_MSG_CHECKING([whether ${TARGET_OBJCOPY} works for absolute addresses])
>  AC_CACHE_VAL(grub_cv_prog_objcopy_absolute,
>  [cat > conftest.c <<\EOF
> +asm (
> +".globl start, _start, __start\n"
> +".ifdef cmain; .set start = _start = __start = cmain\n.endif\n"
> +".ifdef _cmain; .set start = _start = __start = _cmain\n.endif\n"
> +);
>  void cmain (void);
>  void
>  cmain (void)
> diff --git a/configure.ac b/configure.ac
> index 17937baf4..a282bf7bf 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -1461,7 +1461,6 @@ elif test x$grub_cv_target_cc_link_format = x-mi386pe 
> || test x$grub_cv_target_c
>TARGET_IMG_LDSCRIPT='$(top_srcdir)'"/conf/i386-cygwin-img-ld.sc"
>TARGET_IMG_LDFLAGS="-Wl,-T${TARGET_IMG_LDSCRIPT}"
>TARGET_IMG_LDFLAGS_AC="-Wl,-T${srcdir}/conf/i386-cygwin-img-ld.sc"
> -  TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"
>TARGET_IMG_CFLAGS=
>  else
>TARGET_APPLE_LINKER=0
> @@ -1469,7 +1468,6 @@ else
>TARGET_IMG_LDSCRIPT=
>TARGET_IMG_LDFLAGS='-Wl,-N'
>TARGET_IMG_LDFLAGS_AC='-Wl,-N'
> -  TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"
>TARGET_IMG_CFLAGS=
>  fi
>  
> @@ -1795,6 +1793,18 @@ LIBS=""
>  grub_ASM_USCORE
>  grub_PROG_TARGET_CC
>  if test "x$TARGET_APPLE_LINKER" != x1 ; then
> +AX_CHECK_LINK_FLAG([-Wl,--image-base,0x40],
> +[TARGET_IMG_BASE_LDOPT="-Wl,--image-base"],
> +[TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"],
> +[],
> +[AC_LANG_SOURCE([
> +asm (".globl start; start:");
> +asm (".globl _start; _start:");
> +asm (".globl __start; __start:");
> +void __main (void);
> +void __main (void) {}
> +int main (void);
> +])])
>  grub_PROG_OBJCOPY_ABSOLUTE
>  fi
>  grub_PROG_LD_BUILD_ID_NONE
> -- 
> 2.51.2
> 
> 
> ___
> 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


Re: [PATCH v2 1/1] Check linker for --image-base support

2025-11-19 Thread Daniel Kiper
On Tue, Nov 18, 2025 at 07:38:07PM -0500, Nicholas Vinson wrote:
> In several scenarios, configure tests assume it's safe to use
> '-Wl,-Ttext,', but starting with ld.lld-21, blindly using that
> flag may result in configure-test failures due to ld.lld failing to
> link. The failure is because ld.lld-21 no longer allows the specified
> address is less than the base address.
>
> However, ld.lld-21+ and ld.bfd-2.44+ both provide support for the
> --image-base flag making it preferable over the older `-Ttext` flag.
>
> Fixes: 67662
> Signed-off-by: Nicholas Vinson 

Reviewed-by: Daniel Kiper 

Daniel

___
Grub-devel mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/grub-devel