What is -no-pie used for?

Repikas picture Repikas · Dec 12, 2017 · Viewed 22.2k times · Source

I was working on Ubuntu 17.10 with GPROF for some testing with c files and when i execute with gprof the file generated (gmon.out), compiling and linking with -pg option, i got an empty flat and call graph. However, i found that this is a gcc bug and i would have to compile and link the file with -no-pie.

  • Compile: gcc -c main.c file-1.c file-2.c -pg [-no-pie]

  • Link: gcc -o test main.o file-1.o file-2.o -pg [-no-pie]

I have the gcc 7.2 version.

How does this option work and why the graphs are empty if i don't use that option?

Answer

Paul picture Paul · May 31, 2018

That flag is telling gcc not to make a position independent executable (PIE). PIE is a precodition to enable address space layout randomization (ASLR). ASLR is a security feature where the kernel loads the binary and dependencies into a random location of virtual memory each time it's run.