From owner-freebsd-hackers@FreeBSD.ORG Fri Oct 31 13:18:58 2008 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id ED1C610656A6 for ; Fri, 31 Oct 2008 13:18:58 +0000 (UTC) (envelope-from avg@icyb.net.ua) Received: from falcon.cybervisiontech.com (falcon.cybervisiontech.com [217.20.163.9]) by mx1.freebsd.org (Postfix) with ESMTP id 66FBF8FC1D for ; Fri, 31 Oct 2008 13:18:58 +0000 (UTC) (envelope-from avg@icyb.net.ua) Received: from localhost (localhost [127.0.0.1]) by falcon.cybervisiontech.com (Postfix) with ESMTP id 0C86D74408E; Fri, 31 Oct 2008 15:18:56 +0200 (EET) X-Virus-Scanned: Debian amavisd-new at falcon.cybervisiontech.com Received: from falcon.cybervisiontech.com ([127.0.0.1]) by localhost (falcon.cybervisiontech.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id zqqe+hB41qeC; Fri, 31 Oct 2008 15:18:55 +0200 (EET) Received: from [10.2.1.87] (gateway.cybervisiontech.com.ua [91.198.50.114]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by falcon.cybervisiontech.com (Postfix) with ESMTP id E38DD744005; Fri, 31 Oct 2008 15:18:52 +0200 (EET) Message-ID: <490B05BA.9090306@icyb.net.ua> Date: Fri, 31 Oct 2008 15:18:50 +0200 From: Andriy Gapon User-Agent: Thunderbird 2.0.0.17 (X11/20080929) MIME-Version: 1.0 To: Peter Jeremy References: <4909DC03.1080901@icyb.net.ua> <20081030184625.GA99398@server.vk2pj.dyndns.org> In-Reply-To: <20081030184625.GA99398@server.vk2pj.dyndns.org> Content-Type: text/plain; charset=KOI8-U Content-Transfer-Encoding: 7bit Cc: freebsd-hackers@freebsd.org Subject: Re: memtest86+ can not link: binutils issue? X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 31 Oct 2008 13:18:59 -0000 on 30/10/2008 20:46 Peter Jeremy said the following: > On 2008-Oct-30 18:08:35 +0200, Andriy Gapon wrote: >> 1. obtain and extract >> http://www.memtest.org/download/2.01/memtest86+-2.01.bin.gz > > This is a compressed bootable image and can't be compiled. Possibly > you mean http://www.memtest.org/download/2.01/memtest86+-2.01.tar.gz Sorry - yes, this was it. >> 2. run gmake: >> $ gmake >> gcc -E -traditional head.S -o head.s >> as -32 -o head.o head.s >> gcc -c -Wall -march=i486 -m32 -Os -fomit-frame-pointer -fno-builtin >> -ffreestanding -fPIC -fno-strict-aliasing reloc.c >> gcc -Wall -march=i486 -m32 -Os -fomit-frame-pointer -fno-builtin >> -ffreestanding -fPIC -c -o main.o main.c >> gcc -c -Wall -march=i486 -m32 -Os -fomit-frame-pointer -fno-builtin >> -ffreestanding test.c > > Blows up at this point for me: > gcc -c -Wall -march=i486 -m32 -Os -fomit-frame-pointer -fno-builtin -ffreestanding test.c > test.c:14:20: error: sys/io.h: No such file or directory > test.c: In function 'beep': > test.c:1410: warning: implicit declaration of function 'outb_p' > test.c:1410: warning: implicit declaration of function 'inb_p' > test.c:1417: warning: implicit declaration of function 'outb' > gmake: *** [test.o] Error 1 > > I can't find in CVS or any declarations for outb_p or inb_p > in my source tree. Sorry again - I patched this file to remove inclusion of this linux-specific file and instead include machine/cpufunc.h, also I changed outb_p => outb, inb_p => inb and swapped parameters of outb-s. These are typical linuxisms. >> ld --warn-constructors --warn-common -static -T memtest_shared.lds \ >> -o memtest_shared head.o reloc.o main.o test.o init.o lib.o >> patn.o screen_buffer.o config.o linuxbios.o memsize.o pci.o controller.o >> random.o extra.o spd.o error.o dmi.o && \ >> ld -shared -Bsymbolic -T memtest_shared.lds -o memtest_shared >> head.o reloc.o main.o test.o init.o lib.o patn.o screen_buffer.o >> config.o linuxbios.o memsize.o pci.o controller.o random.o extra.o spd.o >> error.o dmi.o >> head.o(.text+0x7): In function `startup_32': >> : undefined reference to `_GLOBAL_OFFSET_TABLE_' >> Segmentation fault (core dumped) >> gmake: *** [memtest_shared] Error 139 > > I can't help here. _GLOBAL_OFFSET_TABLE_ is related to the binutils > PIC support and it appears that the linker doesn't like the code (in > head.S) is explicitly referencing it. > >> Not only linking fails, but ld even crashes. > > I agree this shouldn't happen. > >> Can anybody suggest anything about this problem? > > It looks like stand-alone PIC code on FreeBSD needs some different > incantations to Linux. My understanding is that several of the > i386 bootstraps are relocatable so you might like to peruse the > code in /usr/src/sys/boot/i386 for ideas. I wonder if this is something about out port of binutils or is it an issue in older version of binutils. I'll try to look at the boot code, thank you for the hint. -- Andriy Gapon