https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81498
Bug ID: 81498 Summary: Support build static PIE Product: gcc Version: 8.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: driver Assignee: unassigned at gcc dot gnu.org Reporter: hjl.tools at gmail dot com Target Milestone: --- Glibc hjl/pie/static branch at https://sourceware.org/git/?p=glibc.git;a=shortlog;h=refs/heads/hjl/pie/static supports static PIE, which is similar to static executable, but can be loaded at any address without a dynamic linker: [hjl@gnu-6 elf]$ readelf -hl sln ELF Header: Magic: 7f 45 4c 46 02 01 01 03 00 00 00 00 00 00 00 00 Class: ELF64 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - GNU ABI Version: 0 Type: DYN (Shared object file) Machine: Advanced Micro Devices X86-64 Version: 0x1 Entry point address: 0x8290 Start of program headers: 64 (bytes into file) Start of section headers: 4532888 (bytes into file) Flags: 0x0 Size of this header: 64 (bytes) Size of program headers: 56 (bytes) Number of program headers: 8 Size of section headers: 64 (bytes) Number of section headers: 45 Section header string table index: 44 Program Headers: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flags Align LOAD 0x0000000000000000 0x0000000000000000 0x0000000000000000 0x0000000000099905 0x0000000000099905 R E 0x200000 LOAD 0x000000000009a5a0 0x000000000029a5a0 0x000000000029a5a0 0x0000000000004d40 0x0000000000006230 RW 0x200000 DYNAMIC 0x000000000009cd48 0x000000000029cd48 0x000000000029cd48 0x00000000000001a0 0x00000000000001a0 RW 0x8 NOTE 0x0000000000000200 0x0000000000000200 0x0000000000000200 0x0000000000000044 0x0000000000000044 R 0x4 TLS 0x000000000009a5a0 0x000000000029a5a0 0x000000000029a5a0 0x0000000000000020 0x0000000000000060 R 0x8 GNU_EH_FRAME 0x000000000008ee18 0x000000000008ee18 0x000000000008ee18 0x00000000000018bc 0x00000000000018bc R 0x4 GNU_STACK 0x0000000000000000 0x0000000000000000 0x0000000000000000 0x0000000000000000 0x0000000000000000 RW 0x10 GNU_RELRO 0x000000000009a5a0 0x000000000029a5a0 0x000000000029a5a0 0x0000000000002a60 0x0000000000002a60 R 0x1 Section to Segment mapping: Segment Sections... 00 .note.ABI-tag .note.gnu.build-id .gnu.hash .dynsym .dynstr .rela.dyn .rela.plt .init .plt .plt.got .text __libc_freeres_fn __libc_thread_freeres_fn .fini .rodata .eh_frame_hdr .eh_frame .gcc_except_table 01 .tdata .init_array .fini_array .data.rel.ro .dynamic .got .got.plt .data __libc_subfreeres __libc_IO_vtables __libc_atexit __libc_thread_subfreeres .bss __libc_freeres_ptrs 02 .dynamic 03 .note.ABI-tag .note.gnu.build-id 04 .tdata .tbss 05 .eh_frame_hdr 06 07 .tdata .init_array .fini_array .data.rel.ro .dynamic .got [hjl@gnu-6 elf]$ sln Usage: sln src dest|file For bug reporting instructions, please see: <http://www.gnu.org/software/libc/bugs.html>. [hjl@gnu-6 elf]$ To do that, we need to pass both -static and -pie as well as the PIE version of crt*.o files to linker.