]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
conf/i386-cygwin-img-ld: Do not discard .data and .edata sections
authorDaniel Kiper <daniel.kiper@oracle.com>
Thu, 10 Mar 2022 17:49:35 +0000 (18:49 +0100)
committerDaniel Kiper <daniel.kiper@oracle.com>
Mon, 14 Mar 2022 22:05:01 +0000 (23:05 +0100)
$ ./configure --target=i686-w64-mingw32 --with-platform=efi --host=i686-w64-mingw32

[...]

checking if __bss_start is defined by the compiler... no
checking if edata is defined by the compiler... no
checking if _edata is defined by the compiler... no
configure: error: none of __bss_start, edata or _edata is defined

This happens on machines with quite recent ld due to an error:

  `edata' referenced in section `.text' of /tmp/cc72w9E4.o: defined in discarded section `.data' of conftest.exe
  collect2: error: ld returned 1 exit status

So, we have to tell linker to not discard .data and .edata sections.
The trick comes from ld documentation:

  3.6.7 Output Section Discarding

  The linker will not normally create output sections with no contents.
  This is for convenience when referring to input sections that may or may
  not be present in any of the input files. For example:

  .foo : { *(.foo) }

  will only create a ‘.foo’ section in the output file if there is a
  ‘.foo’ section in at least one input file, and if the input sections are
  not all empty. Other link script directives that allocate space in an
  output section will also create the output section. So too will
  assignments to dot even if the assignment does not create space, except
  for ‘. = 0’, ‘. = . + 0’, ‘. = sym’, ‘. = . + sym’ and ‘. = ALIGN (. !=
  0, expr, 1)’ when ‘sym’ is an absolute symbol of value 0 defined in the
  script. This allows you to force output of an empty section with ‘. = .’.

This change does not impact generated binaries because the
conf/i386-cygwin-img-ld.sc linker script is used only when
you run configure.

Signed-off-by: Daniel Kiper <daniel.kiper@oracle.com>
Reviewed-by: Robbie Harwood <rharwood@redhat.com>
conf/i386-cygwin-img-ld.sc

index 3ac26fcce477049c6d56151239f87b919bbddc0f..578da91b02337762b3f0d2106777908c0841aecc 100644 (file)
@@ -14,6 +14,8 @@ SECTIONS
   {
     __data_start__ = . ;
     *(.data)
+    /* Do not discard this section. */
+    . = . ;
     __data_end__ = . ;
     __rdata_start__ = . ;
     *(.rdata)
@@ -34,6 +36,8 @@ SECTIONS
   .edata :
   {
     *(.edata)
+    /* Do not discard this section. */
+    . = . ;
     end = . ;
     _end = . ;
     __end = . ;