lkml.org 
[lkml]   [2012]   [Feb]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: build failure in Linus' tree with gcc 4.4.3
    Hi all,

    On Mon, 20 Feb 2012 13:39:36 +1100 Stephen Rothwell <sfr@canb.auug.org.au> wrote:
    >
    > Hi all,
    >
    > My x86_64 allmodconfig build fail like this:
    >
    > OBJCOPY arch/x86/boot/vmlinux.bin
    > AS arch/x86/boot/header.o
    > LD arch/x86/boot/setup.elf
    > OBJCOPY arch/x86/boot/setup.bin
    > BUILD arch/x86/boot/bzImage
    > Setup is 14768 bytes (padded to 14848 bytes).
    > System is 4766 kB
    > /bin/sh: line 1: 20126 Segmentation fault arch/x86/boot/tools/build arch/x86/boot/setup.bin arch/x86/boot/vmlinux.bin > arch/x86/boot/bzImage
    >
    > I have bisected it down to commit
    > 291f36325f9f252bd76ef5f603995f37e453fc60 ("x86, efi: EFI boot stub
    > support"). This may well be a compiler bug that this commit just happens
    > to poke.
    >
    > The toolchain is PowerPC hosted cross tools:
    > x86_64-linux-gcc (GCC) 4.4.3
    > GNU ld (GNU Binutils) 2.20
    >
    > I tried an allmodconfig build with my native compiler (gcc (Debian
    > 4.6.2-14) 4.6.2, GNU gold (GNU Binutils for Debian 2.22) 1.11) and it
    > worked fine.
    >
    > That is a large commit, so I am not sure where to go from here.

    Actually, that commit does the following:

    diff --git a/arch/x86/boot/tools/build.c b/arch/x86/boot/tools/build.c
    index fdc60a0..4e9bd6b 100644
    --- a/arch/x86/boot/tools/build.c
    +++ b/arch/x86/boot/tools/build.c
    @@ -135,6 +135,9 @@ static void usage(void)

    int main(int argc, char ** argv)
    {
    +#ifdef CONFIG_EFI_STUB
    + unsigned int file_sz, pe_header;
    +#endif
    unsigned int i, sz, setup_sectors;
    int c;
    u32 sys_size;
    @@ -194,6 +197,42 @@ int main(int argc, char ** argv)
    buf[0x1f6] = sys_size >> 16;
    buf[0x1f7] = sys_size >> 24;

    +#ifdef CONFIG_EFI_STUB
    + file_sz = sz + i + ((sys_size * 16) - sz);
    +
    + pe_header = *(unsigned int *)&buf[0x3c];
    +
    + /* Size of code */
    + *(unsigned int *)&buf[pe_header + 0x1c] = file_sz;
    +
    + /* Size of image */
    + *(unsigned int *)&buf[pe_header + 0x50] = file_sz;
    +
    +#ifdef CONFIG_X86_32
    + /* Address of entry point */
    + *(unsigned int *)&buf[pe_header + 0x28] = i;
    +
    + /* .text size */
    + *(unsigned int *)&buf[pe_header + 0xb0] = file_sz;
    +
    + /* .text size of initialised data */
    + *(unsigned int *)&buf[pe_header + 0xb8] = file_sz;
    +#else
    + /*
    + * Address of entry point. startup_32 is at the beginning and
    + * the 64-bit entry point (startup_64) is always 512 bytes
    + * after.
    + */
    + *(unsigned int *)&buf[pe_header + 0x28] = i + 512;
    +
    + /* .text size */
    + *(unsigned int *)&buf[pe_header + 0xc0] = file_sz;
    +
    + /* .text size of initialised data */
    + *(unsigned int *)&buf[pe_header + 0xc8] = file_sz;
    +#endif /* CONFIG_X86_32 */
    +#endif /* CONFIG_EFI_STUB */
    +
    crc = partial_crc32(buf, i, crc);
    if (fwrite(buf, 1, i, stdout) != i)
    die("Writing setup failed");
    Which is all endian specific code that will run on the host when building
    the kernel ...

    --
    Cheers,
    Stephen Rothwell sfr@canb.auug.org.au
    http://www.canb.auug.org.au/~sfr/
    [unhandled content-type:application/pgp-signature]
    \
     
     \ /
      Last update: 2012-02-20 04:25    [W:0.025 / U:0.064 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site