Bug #2559

gcc -pie and __builtin_popcount causes

Added by akr over 3 years ago. Updated over 3 years ago.

Status:ClosedStart date:05/13/2013
Priority:NormalDue date:
Assignee:-% Done:


Target version:-


I found that __builtin_popcount is not usable with -pie option for gcc.

$ uname -a
DragonFly dragonfly34 3.4-RELEASE DragonFly v3.4.1-RELEASE #7: Wed Apr 24 20:01:27 PDT 2013 :/usr/obj/build/home/justin/src/sys/X86_64_GENERIC x86_64
$ cat tst.c
#include <stdio.h>
int main(int argc, char *argv[])
printf("%d\n", __builtin_popcount(argc));
return 0;
$ gcc -pie tst.c
/usr/libexec/binutils222/elf/ld.bfd: /tmp//cc2Tj2Mb.o: relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
/tmp//cc2Tj2Mb.o: could not read symbols: Bad value


#1 Updated by marino over 3 years ago

Using your program, I see the same error with:
* system gcc 4.4
* dports gcc-aux version 4.7

The latter is particularly telling because it's built with vendor makefiles.
Which means it's not a compiler problem but more likely a crt* stuff problem.

#2 Updated by alexh over 3 years ago

This is not a bug. The compiler is telling you what do to: use -fPIC.

#3 Updated by akr over 3 years ago

  • Status changed from New to Closed

Oops. You are right.
-fPIC solves the problem.

Thank you.

#4 Updated by marino over 3 years ago

Heh, I was working under the assumption that this test worked elsewhere and I was going to test it on the latest FreeBSD.
I also assumed that -fpic wasn't wanted because the error message was so obvious about the problem.

Also available in: Atom PDF