On 27/05/2016 15:38, Richard W.M. Jones wrote:
> One way to solve this (which works for me) is as below.  There are
> some other approaches, eg. using -fno-leading-underscore, or using a
> conditional macro to mangle the name.  However I have no idea if there
> is some preferred way.
> 
> Rich.
> 
> diff --git a/pc-bios/optionrom/linuxboot_dma.c 
> b/pc-bios/optionrom/linuxboot_dma.c
> index 86ef1ce..8509b28 100644
> --- a/pc-bios/optionrom/linuxboot_dma.c
> +++ b/pc-bios/optionrom/linuxboot_dma.c
> @@ -213,6 +213,9 @@ static uint32_t get_e801_addr(void)
>      return ret;
>  }
>  
> +/* Force the asm name without leading underscore, even on Win32. */
> +extern void load_kernel(void) asm("load_kernel");
> +
>  void load_kernel(void)
>  {
>      void *setup_addr;

Yes, that's what I wanted to do.  I also need

diff --git a/pc-bios/optionrom/Makefile b/pc-bios/optionrom/Makefile
index 2b11cd3..14e7f71 100644
--- a/pc-bios/optionrom/Makefile
+++ b/pc-bios/optionrom/Makefile
@@ -31,6 +31,7 @@ build-all: multiboot.bin linuxboot.bin
linuxboot_dma.bin kvmvapic.bin

 ifdef CONFIG_WIN32
 LD_EMULATION = i386pe
+CFLAGS += -Wa,-32
 else
 LD_EMULATION = elf_i386
 endif

to work around what is likely a GCC bug.

Paolo

Reply via email to