bug-binutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug gold/19197] New: gold trunk cannot build LInux kernel


From: markus at trippelsdorf dot de
Subject: [Bug gold/19197] New: gold trunk cannot build LInux kernel
Date: Sun, 01 Nov 2015 09:06:44 +0000

https://sourceware.org/bugzilla/show_bug.cgi?id=19197

            Bug ID: 19197
           Summary: gold trunk cannot build LInux kernel
           Product: binutils
           Version: 2.26 (HEAD)
            Status: NEW
          Severity: normal
          Priority: P2
         Component: gold
          Assignee: ccoutant at gmail dot com
          Reporter: markus at trippelsdorf dot de
                CC: ian at airs dot com
  Target Milestone: ---

address@hidden linux % cat arch/x86/boot/bioscall.S
/* -----------------------------------------------------------------------
 *
 *   Copyright 2009-2014 Intel Corporation; author H. Peter Anvin
 *
 *   This file is part of the Linux kernel, and is made available under
 *   the terms of the GNU General Public License version 2 or (at your
 *   option) any later version; incorporated herein by reference.
 *
 * ----------------------------------------------------------------------- */

/*
 * "Glove box" for BIOS calls.  Avoids the constant problems with BIOSes
 * touching registers they shouldn't be.
 */

        .code16
        .section ".inittext","ax"
        .globl  intcall
        .type   intcall, @function
intcall:
        /* Self-modify the INT instruction.  Ugly, but works. */
        cmpb    %al, 3f
        je      1f
        movb    %al, 3f
        jmp     1f              /* Synchronize pipeline */
1:
        /* Save state */
        pushfl
        pushw   %fs
        pushw   %gs
        pushal

        /* Copy input state to stack frame */
        subw    $44, %sp
        movw    %dx, %si
        movw    %sp, %di
        movw    $11, %cx
        rep; movsd

        /* Pop full state from the stack */
        popal
        popw    %gs
        popw    %fs
        popw    %es
        popw    %ds
        popfl

        /* Actual INT */
        .byte   0xcd            /* INT opcode */
3:      .byte   0

        /* Push full state to the stack */
        pushfl
        pushw   %ds
        pushw   %es
        pushw   %fs
        pushw   %gs
        pushal

        /* Re-establish C environment invariants */
        cld
        movzwl  %sp, %esp
        movw    %cs, %ax
        movw    %ax, %ds
        movw    %ax, %es

        /* Copy output state from stack frame */
        movw    68(%esp), %di   /* Original %cx == 3rd argument */
        andw    %di, %di
        jz      4f
        movw    %sp, %si
        movw    $11, %cx
        rep; movsd
4:      addw    $44, %sp

        /* Restore state and return */
        popal
        popw    %gs
        popw    %fs
        popfl
        retl
        .size   intcall, .-intcall

address@hidden linux % gcc -m16 -c -o foo.o arch/x86/boot/bioscall.S

address@hidden linux % ld -m elf_x86_64 foo.o
ld: error: input file is incompatible with elf_x86_64 output emulation

-- 
You are receiving this mail because:
You are on the CC list for the bug.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]