memtest86+ can not link: binutils issue?

Andriy Gapon avg at icyb.net.ua
Thu Oct 30 09:33:42 PDT 2008


0.
FreeBSD 7.1-PRERELEASE r184195 i386
$ ld -v
GNU ld version 2.15 [FreeBSD] 2004-05-23

1. obtain and extract
http://www.memtest.org/download/2.01/memtest86+-2.01.bin.gz

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
gcc -Wall -march=i486 -m32 -Os -fomit-frame-pointer -fno-builtin
-ffreestanding -fPIC   -c -o init.o init.c
gcc -Wall -march=i486 -m32 -Os -fomit-frame-pointer -fno-builtin
-ffreestanding -fPIC   -c -o lib.o lib.c
gcc -Wall -march=i486 -m32 -Os -fomit-frame-pointer -fno-builtin
-ffreestanding -fPIC   -c -o patn.o patn.c
gcc -Wall -march=i486 -m32 -Os -fomit-frame-pointer -fno-builtin
-ffreestanding -fPIC   -c -o screen_buffer.o screen_buffer.c
gcc -Wall -march=i486 -m32 -Os -fomit-frame-pointer -fno-builtin
-ffreestanding -fPIC   -c -o config.o config.c
gcc -Wall -march=i486 -m32 -Os -fomit-frame-pointer -fno-builtin
-ffreestanding -fPIC   -c -o linuxbios.o linuxbios.c
gcc -Wall -march=i486 -m32 -Os -fomit-frame-pointer -fno-builtin
-ffreestanding -fPIC   -c -o memsize.o memsize.c
gcc -Wall -march=i486 -m32 -Os -fomit-frame-pointer -fno-builtin
-ffreestanding -fPIC   -c -o pci.o pci.c
gcc -Wall -march=i486 -m32 -Os -fomit-frame-pointer -fno-builtin
-ffreestanding -fPIC   -c -o controller.o controller.c
gcc -Wall -march=i486 -m32 -Os -fomit-frame-pointer -fno-builtin
-ffreestanding -fPIC   -c -o random.o random.c
gcc -Wall -march=i486 -m32 -Os -fomit-frame-pointer -fno-builtin
-ffreestanding -fPIC   -c -o extra.o extra.c
gcc -Wall -march=i486 -m32 -Os -fomit-frame-pointer -fno-builtin
-ffreestanding -fPIC   -c -o spd.o spd.c
gcc -Wall -march=i486 -m32 -Os -fomit-frame-pointer -fno-builtin
-ffreestanding -fPIC   -c -o error.o error.c
gcc -Wall -march=i486 -m32 -Os -fomit-frame-pointer -fno-builtin
-ffreestanding -fPIC   -c -o dmi.o dmi.c
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


Not only linking fails, but ld even crashes.
Things are more complicated than usual because of the custom linker
script memtest_shared.lds.

The same compiles/links nicely on Fedora 9.
$ ld -v
GNU ld version 2.18.50.0.6-5.fc9 20080403


Can anybody suggest anything about this problem?
If somebody is working on newer version of binuitls for FreeBSD I can
help as a tester.

-- 
Andriy Gapon


More information about the freebsd-hackers mailing list