[ELF] - Disable relro when -omagic specified.

--omagic is an option to create old-fashioned executables in which
.text segments are writable. Today, the option is still in use to
create special-purpose programs such as boot loaders. It doesn't
make sense to create PT_GNU_RELRO for such executables.

DIfferential revision: https://reviews.llvm.org/D27297

llvm-svn: 288579
This commit is contained in:
George Rimar 2016-12-03 07:09:28 +00:00
parent 8e7498976a
commit d250618c3e
2 changed files with 41 additions and 0 deletions

View File

@ -575,6 +575,13 @@ void LinkerDriver::readConfigs(opt::InputArgList &Args) {
Config->Target2 = getTarget2Option(Args);
Config->UnresolvedSymbols = getUnresolvedSymbolOption(Args);
// --omagic is an option to create old-fashioned executables in which
// .text segments are writable. Today, the option is still in use to
// create special-purpose programs such as boot loaders. It doesn't
// make sense to create PT_GNU_RELRO for such executables.
if (Config->OMagic)
Config->ZRelro = false;
if (!Config->Relocatable)
Config->Strip = getStripOption(Args);

View File

@ -0,0 +1,34 @@
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/shared.s -o %t2.o
# RUN: ld.lld -shared %t2.o -o %t2.so
# RUN: ld.lld -N %t.o %t2.so -o %t
# RUN: llvm-objdump -section-headers %t | FileCheck --check-prefix=NORELRO %s
# RUN: llvm-readobj --program-headers %t | FileCheck --check-prefix=NOPHDRS %s
# NORELRO: Sections:
# NORELRO-NEXT: Idx Name Size Address Type
# NORELRO-NEXT: 0 00000000 0000000000000000
# NORELRO-NEXT: 1 .dynsym 00000048 0000000000200120
# NORELRO-NEXT: 2 .hash 00000020 0000000000200168
# NORELRO-NEXT: 3 .dynstr 00000021 0000000000200188
# NORELRO-NEXT: 4 .rela.dyn 00000018 00000000002001b0
# NORELRO-NEXT: 5 .rela.plt 00000018 00000000002001c8
# NORELRO-NEXT: 6 .text 0000000a 00000000002001e0 TEXT DATA
# NORELRO-NEXT: 7 .plt 00000020 00000000002001f0 TEXT DATA
# NORELRO-NEXT: 8 .data 00000008 0000000000200210 DATA
# NORELRO-NEXT: 9 .foo 00000004 0000000000200218 DATA
# NORELRO-NEXT: 10 .dynamic 000000f0 0000000000200220
# NORELRO-NEXT: 11 .got 00000008 0000000000200310 DATA
# NORELRO-NEXT: 12 .got.plt 00000020 0000000000200318 DATA
# NOPHDRS: ProgramHeaders [
# NOPHDRS-NOT: PT_GNU_RELRO
.long bar
jmp *bar2@GOTPCREL(%rip)
.section .data,"aw"
.quad 0
.section .foo,"aw"
.zero 4