Index: ELF/LinkerScript.cpp =================================================================== --- ELF/LinkerScript.cpp +++ ELF/LinkerScript.cpp @@ -159,6 +159,14 @@ expect(")"); return Dot; } + if (Tok == "DATA_SEGMENT_RELRO_END") { + expect("("); + next(); + expect(","); + next(); + expect(")"); + return Dot; + } uint64_t V = 0; if (Tok.getAsInteger(0, V)) setError("malformed number: " + Tok); Index: test/ELF/linkerscript-locationcounter.s =================================================================== --- test/ELF/linkerscript-locationcounter.s +++ test/ELF/linkerscript-locationcounter.s @@ -37,6 +37,9 @@ # RUN: . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); \ # RUN: .datasegmentalign : { *(.datasegmentalign) } \ # RUN: . = DATA_SEGMENT_END (.); \ +# RUN: . = 0x27000; \ +# RUN: . = DATA_SEGMENT_RELRO_END (24, .); \ +# RUN: .datasegmentrelroend : { *(.datasegmentrelroend) } \ # RUN: }" > %t.script # RUN: ld.lld %t --script %t.script -o %t2 # RUN: llvm-readobj -s %t2 | FileCheck %s @@ -296,6 +299,21 @@ # CHECK-NEXT: AddressAlignment: # CHECK-NEXT: EntrySize: # CHECK-NEXT: } +# CHECK-NEXT: Section { +# CHECK-NEXT: Index: +# CHECK-NEXT: Name: .datasegmentrelroend +# CHECK-NEXT: Type: SHT_PROGBITS +# CHECK-NEXT: Flags [ +# CHECK-NEXT: SHF_ALLOC +# CHECK-NEXT: ] +# CHECK-NEXT: Address: 0x27000 +# CHECK-NEXT: Offset: 0x11000 +# CHECK-NEXT: Size: +# CHECK-NEXT: Link: +# CHECK-NEXT: Info: +# CHECK-NEXT: AddressAlignment: +# CHECK-NEXT: EntrySize: +# CHECK-NEXT: } ## Mailformed number error. # RUN: echo "SECTIONS { \ @@ -399,3 +417,6 @@ .section .datasegmentalign, "a" .quad 0 + +.section .datasegmentrelroend, "a" +.quad 0