forked from OSchip/llvm-project
[ELF] - Implemented -N (-omagic) command line option.
-N (-omagic) Set the text and data sections to be readable and writable. Also, do not page-align the data segment. Differential revision: https://reviews.llvm.org/D26888 llvm-svn: 288123
This commit is contained in:
parent
91c1fc2994
commit
595a763f38
|
@ -114,6 +114,7 @@ struct Configuration {
|
|||
bool NoUndefinedVersion;
|
||||
bool Nostdlib;
|
||||
bool OFormatBinary;
|
||||
bool OMagic;
|
||||
bool Pic;
|
||||
bool Pie;
|
||||
bool PrintGcSections;
|
||||
|
|
|
@ -526,6 +526,7 @@ void LinkerDriver::readConfigs(opt::InputArgList &Args) {
|
|||
Config->NoGnuUnique = Args.hasArg(OPT_no_gnu_unique);
|
||||
Config->NoUndefinedVersion = Args.hasArg(OPT_no_undefined_version);
|
||||
Config->Nostdlib = Args.hasArg(OPT_nostdlib);
|
||||
Config->OMagic = Args.hasArg(OPT_omagic);
|
||||
Config->Pie = getArg(Args, OPT_pie, OPT_nopie, false);
|
||||
Config->PrintGcSections = Args.hasArg(OPT_print_gc_sections);
|
||||
Config->Relocatable = Args.hasArg(OPT_relocatable);
|
||||
|
|
|
@ -161,6 +161,9 @@ def o: JoinedOrSeparate<["-"], "o">, MetaVarName<"<path>">,
|
|||
def oformat: Separate<["--"], "oformat">, MetaVarName<"<format>">,
|
||||
HelpText<"Specify the binary format for the output object file">;
|
||||
|
||||
def omagic: F<"omagic">, MetaVarName<"<magic>">,
|
||||
HelpText<"Set the text and data sections to be readable and writable">;
|
||||
|
||||
def pie: F<"pie">, HelpText<"Create a position independent executable">;
|
||||
|
||||
def print_gc_sections: F<"print-gc-sections">,
|
||||
|
@ -261,6 +264,7 @@ def alias_format_b: S<"b">, Alias<format>;
|
|||
def alias_hash_style_hash_style: J<"hash-style=">, Alias<hash_style>;
|
||||
def alias_init_init: J<"init=">, Alias<init>;
|
||||
def alias_l__library: J<"library=">, Alias<l>;
|
||||
def alias_omagic: Flag<["-"], "N">, Alias<omagic>;
|
||||
def alias_o_output: Joined<["--"], "output=">, Alias<o>;
|
||||
def alias_o_output2 : Separate<["--"], "output">, Alias<o>;
|
||||
def alias_pie_pic_executable: F<"pic-executable">, Alias<pie>;
|
||||
|
|
|
@ -1096,6 +1096,8 @@ template <class ELFT> static bool needsPtLoad(OutputSectionBase *Sec) {
|
|||
// cannot create a PT_LOAD there.
|
||||
template <class ELFT>
|
||||
static typename ELFT::uint computeFlags(typename ELFT::uint F) {
|
||||
if (Config->OMagic)
|
||||
return PF_R | PF_W | PF_X;
|
||||
if (Config->SingleRoRx && !(F & PF_W))
|
||||
return F | PF_X;
|
||||
return F;
|
||||
|
|
|
@ -74,6 +74,26 @@
|
|||
# NOROSEGMENT-NEXT: ProgramHeader {
|
||||
# NOROSEGMENT-NEXT: Type: PT_GNU_STACK
|
||||
|
||||
# RUN: ld.lld -N %t -o %t3
|
||||
# RUN: llvm-readobj --program-headers %t3 | FileCheck --check-prefix=OMAGIC %s
|
||||
|
||||
# OMAGIC: ProgramHeader {
|
||||
# OMAGIC: Type: PT_LOAD
|
||||
# OMAGIC-NEXT: Offset: 0x0
|
||||
# OMAGIC-NEXT: VirtualAddress:
|
||||
# OMAGIC-NEXT: PhysicalAddress:
|
||||
# OMAGIC-NEXT: FileSize:
|
||||
# OMAGIC-NEXT: MemSize:
|
||||
# OMAGIC-NEXT: Flags [
|
||||
# OMAGIC-NEXT: PF_R
|
||||
# OMAGIC-NEXT: PF_W
|
||||
# OMAGIC-NEXT: PF_X
|
||||
# OMAGIC-NEXT: ]
|
||||
# OMAGIC-NEXT: Alignment: 4096
|
||||
# OMAGIC-NEXT: }
|
||||
# OMAGIC-NEXT: ProgramHeader {
|
||||
# OMAGIC-NEXT: Type: PT_GNU_STACK
|
||||
|
||||
.global _start
|
||||
_start:
|
||||
nop
|
||||
|
|
Loading…
Reference in New Issue