On Mon, Aug 10, 2015 at 10:01 AM, Matthieu Herrb <[email protected]> wrote: > while trying to build a newer xserver 1.17 on loongson, I got the > folloing ld crash. > > Apparently this is already using -fPIC so I don't know how to make > space for local GOT entries. > > Making all in modesetting > /bin/sh ../../../../libtool --tag=CC --mode=link gcc -std=gnu99 > -DHAVE_DIX_CONFIG_H -Wall -Wpointer-arith -Wmissing-declarations -Wformat=2 > -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Wbad-function-cast > -Wold-style-definition -Wdeclaration-after-statement -Wunused -Wuninitialized > -Wshadow -Wmissing-noreturn -Wmissing-format-attribute -Werror=implicit > -Werror=nonnull -Werror=init-self -Werror=main -Werror=missing-braces > -Werror=sequence-point -Werror=return-type -Werror=trigraphs > -Werror=write-strings -Werror=address -Werror=int-to-pointer-cast > -Werror=pointer-to-int-cast -fno-strict-aliasing -fno-strict-aliasing > -I/usr/X11R6/include -D_DEFAULT_SOURCE -D_BSD_SOURCE -DHAS_FCHOWN > -DHAS_STICKY_DIR_BIT -I/usr/X11R6/include/X11/dri -I/usr/include/dev/pci/drm > -I/usr/X11R6/include/pixman-1 -I/usr/X11R6/include/freetype2 > -I/usr/xenocara/xserver/include -I../../../../include > -I/usr/xenocara/xserver/Xext -I/usr/xenocara/xserver/composite > -I/usr/xenocara/xserver/da! ma! > geext -I/usr/xenocara/xserver/xfixes -I/usr/xenocara/xserver/Xi > -I/usr/xenocara/xserver/mi -I/usr/xenocara/xserver/miext/sync > -I/usr/xenocara/xserver/miext/shadow -I/usr/xenocara/xserver/miext/damage > -I/usr/xenocara/xserver/render -I/usr/xenocara/xserver/randr > -I/usr/xenocara/xserver/fb -I/usr/xenocara/xserver/dbe > -I/usr/xenocara/xserver/present -fvisibility=hidden -DHAVE_XORG_CONFIG_H > -fvisibility=hidden -I/usr/X11R6/include -I/usr/X11R6/include > -I/usr/include/dev/pci/drm -DXF86PM -I/usr/X11R6/include -I/usr/X11R6/include > -I/usr/include/dev/pci/drm -Wall -Wpointer-arith -Wmissing-declarations > -Wformat=2 -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs > -Wbad-function-cast -Wold-style-definition -Wdeclaration-after-statement > -Wunused -Wuninitialized -Wshadow -Wmissing-noreturn > -Wmissing-format-attribute -Werror=implicit -Werror=nonnull -Werror=init-self > -Werror=main -Werror=missing-braces -Werror=sequence-point > -Werror=return-type -Werror=trigraphs -Werror=write! -s! > trings -Werror=address -Werror=int-to-pointer-cast > -Werror=pointer-to-int-cast -fno-strict-aliasing -O2 -pipe -Wa,-xgot -module > -avoid-version -o modesetting_drv.la -rpath /usr/X11R6/lib/modules/drivers > dri2.lo driver.lo drmmode_display.lo dumb_bo.lo present.lo vblank.lo -lm > libtool: link: gcc -std=gnu99 -shared -fPIC -DPIC -o > .libs/modesetting_drv.so .libs/dri2.o .libs/driver.o .libs/drmmode_display.o > .libs/dumb_bo.o .libs/present.o .libs/vblank.o -lm -O2 > /usr/bin/ld: not enough GOT space for local GOT entries > /usr/bin/ld: BFD 2.17 internal error, aborting at > /usr/src/gnu/usr.bin/binutils-2.17/bfd/elfxx-mips.c line 7924 in > _bfd_mips_elf_relocate_section > > /usr/bin/ld: Please report this bug.
If I'm reading the code right, this isn't matter of the GOT being too large for the ABI, but rather a complaint that ld's internal tracking of which GOT entries go where is off, such that after determining that it would need space for N entries in a particular GOT, it then finds itself trying to insert an N+1'th entry. Somewhere it's failing to increment the correct counter, or is decrementing it when it shouldn't... Philip Guenther
