Bug 96550

Summary: 12.0.0-rc3: mesa_dri_drivers.so linking fails with: relocation R_X86_64_32S against `V4F_COUNT' can not be used when making a shared object
Product: Mesa Reporter: warpme
Component: Mesa coreAssignee: mesa-dev
Status: RESOLVED INVALID QA Contact: mesa-dev
Severity: normal    
Priority: medium    
Version: git   
Hardware: x86-64 (AMD64)   
OS: Linux (All)   
i915 platform: i915 features:

Description warpme 2016-06-16 09:17:31 UTC
I'm trying to build 12.0.0-rc3 in cross-compile environment.
Build fails at mesa_dri_drivers.so linking with following error:

libtool: link: x86_64-minimyth-linux-gnu-g++  -fPIC -DPIC -shared -nostdlib /home/piotro/minimyth-dev/images/main/usr/lib/crti.o /home/piotro/minimyth-dev/images/build/usr/lib/gcc/x86_64-minimyth-linux-gnu/5.3.0/crtbeginS.o  -Wl,--whole-archive ../../.libs/libmesa.a common/.libs/libmegadriver_stub.a common/.libs/libdricommon.a common/.libs/libxmlconfig.a i915/.libs/libi915_dri.a i965/.libs/libi965_dri.a r200/.libs/libr200_dri.a radeon/.libs/libradeon_dri.a swrast/.libs/libswrast_dri.a -Wl,--no-whole-archive  -lgcrypt -ldrm_intel -ldrm_radeon -ldrm -lexpat -lpthread -ldl -L/home/piotro/minimyth-dev/images/build/usr/lib/gcc/x86_64-minimyth-linux-gnu/5.3.0 -L/home/piotro/minimyth-dev/images/build/usr/lib/gcc/x86_64-minimyth-linux-gnu/5.3.0/../../../../x86_64-minimyth-linux-gnu/lib -L/home/piotro/minimyth-dev/images/main/lib -L/home/piotro/minimyth-dev/images/main/usr/lib -lstdc++ -lm -lc -lgcc_s /home/piotro/minimyth-dev/images/build/usr/lib/gcc/x86_64-minimyth-linux-gnu/5.3.0/crtendS.o /home/piotro/minimyth-dev/images/main/usr/lib/crtn.o  -flto -march=x86-64 -mtune=generic -O3 -mfpmath=sse -flto -m64 -Wl,-Bsymbolic -Wl,--gc-sections -Wl,--as-needed -flto -march=x86-64 -mtune=generic -O3 -mfpmath=sse -flto -m64   -Wl,-soname -Wl,mesa_dri_drivers.so -o .libs/mesa_dri_drivers.so

/home/piotro/minimyth-dev/images/build/usr/lib/gcc/x86_64-minimyth-linux-gnu/5.3.0/../../../../x86_64-minimyth-linux-gnu/bin/ld: ../../.libs/libmesa.a(xform4.o): relocation R_X86_64_32S against `V4F_COUNT' can not be used when making a shared object; recompile with -fPIC
../../.libs/libmesa.a(xform4.o): error adding symbols: Bad value
collect2: error: ld returned 1 exit status

11.2.2 builds perfectly in the same environment.
Comment 1 warpme 2016-08-10 15:30:26 UTC

ppl from Phoronix forums located the cause of the problem: gen_matypes.c is passed to the compiler in order to generate assembly code in text form (compiler switch: -S), but with -flto GCC doesn't output any code nor data because that is postponed to link time. In such case gcc -S -flto generates a file with empty .text and .data sections.

This isn't a GCC bug. Passing -ffat-lto-objects solves issue for me so maybe if compile passes -S together with -flto then the config should imply -ffat-lto-objects ?
Comment 2 Timothy Arceri 2018-03-06 05:09:52 UTC
The using the link time optimisation flag is not an officially supported way to build mesa.

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.