You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
qemu/pc-bios/optionrom
Fabiano Rosas 35ed01ba54 optionrom: Remove build-id section
Our linker script for optionroms specifies only the placement of the
.text section, leaving the linker free to place the remaining sections
at arbitrary places in the file.

Since at least binutils 2.39, the .note.gnu.build-id section is now
being placed at the start of the file, which causes label addresses to
be shifted. For linuxboot_dma.bin that means that the PnP header
(among others) will not be found when determining the type of ROM at
optionrom_setup():

(0x1c is the label _pnph, where the magic "PnP" is)

$ xxd /usr/share/qemu/linuxboot_dma.bin | grep "PnP"
00000010: 0000 0000 0000 0000 0000 1c00 2450 6e50  ............$PnP

$ xxd pc-bios/optionrom/linuxboot_dma.bin | grep "PnP"
00000010: 0000 0000 0000 0000 0000 4c00 2450 6e50  ............$PnP
                                   ^bad

Using a freshly built linuxboot_dma.bin ROM results in a broken boot:

  SeaBIOS (version rel-1.16.2-0-gea1b7a073390-prebuilt.qemu.org)
  Booting from Hard Disk...
  Boot failed: could not read the boot disk

  Booting from Floppy...
  Boot failed: could not read the boot disk

  No bootable device.

We're not using the build-id section, so pass the --build-id=none
option to the linker to remove it entirely.

Note: In theory, this same issue could happen with any other
section. The ideal solution would be to have all unused sections
discarded in the linker script. However that would be a larger change,
specially for the pvh rom which uses the .bss and COMMON sections so
I'm addressing only the immediate issue here.

Reported-by: Vasiliy Ulyanov <vulyanov@suse.de>
Signed-off-by: Fabiano Rosas <farosas@suse.de>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Message-ID: <20230926192502.15986-1-farosas@suse.de>
Cc: stable@vger.kernel.org
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
1 year ago
..
Makefile optionrom: Remove build-id section 1 year ago
flat.lds optionrom: fix compilation with mingw docker target 8 years ago
kvmvapic.S kvmvapic: Use optionrom helpers 13 years ago
linuxboot.S linuxboot: fix loading old kernels 10 years ago
linuxboot_dma.c linuxboot_dma: move common functions in a new header 6 years ago
multiboot.S optionrom: add a DMA-enabled multiboot ROM 3 years ago
multiboot_dma.S optionrom: add a DMA-enabled multiboot ROM 3 years ago
optionrom.h replace TABs with spaces 2 years ago
optrom.h linuxboot_dma: move common functions in a new header 6 years ago
optrom_fw_cfg.h linuxboot_dma: move common functions in a new header 6 years ago
pvh.S optionrom: add new PVH option rom 6 years ago
pvh_main.c optionrom/pvh: scan entire RSDP Area 5 years ago