| // 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 %t.o %t2.so -z now -z relro -o %t |
| // RUN: llvm-readobj --program-headers --dynamic-table -t -s -dyn-symbols -section-data %t | FileCheck --check-prefix=FULLRELRO %s |
| // RUN: ld.lld %t.o %t2.so -z relro -o %t |
| // RUN: llvm-readobj --program-headers --dynamic-table -t -s -dyn-symbols -section-data %t | FileCheck --check-prefix=PARTRELRO %s |
| // RUN: ld.lld %t.o %t2.so -z norelro -o %t |
| // RUN: llvm-readobj --program-headers --dynamic-table -t -s -dyn-symbols -section-data %t | FileCheck --check-prefix=NORELRO %s |
| // REQUIRES: x86 |
| |
| // FULLRELRO: Section { |
| // FULLRELRO: Index: 9 |
| // FULLRELRO-NEXT: Name: .got |
| // FULLRELRO-NEXT: Type: SHT_PROGBITS |
| // FULLRELRO-NEXT: Flags [ |
| // FULLRELRO-NEXT: SHF_ALLOC |
| // FULLRELRO-NEXT: SHF_WRITE |
| // FULLRELRO-NEXT: ] |
| // FULLRELRO-NEXT: Address: 0x12110 |
| // FULLRELRO-NEXT: Offset: 0x2110 |
| // FULLRELRO-NEXT: Size: 8 |
| // FULLRELRO-NEXT: Link: 0 |
| // FULLRELRO-NEXT: Info: 0 |
| // FULLRELRO-NEXT: AddressAlignment: 8 |
| // FULLRELRO-NEXT: EntrySize: 0 |
| // FULLRELRO-NEXT: SectionData ( |
| // FULLRELRO-NEXT: 0000: 00000000 00000000 |
| // FULLRELRO-NEXT: ) |
| // FULLRELRO-NEXT: } |
| // FULLRELRO-NEXT: Section { |
| // FULLRELRO-NEXT: Index: 10 |
| // FULLRELRO-NEXT: Name: .got.plt |
| // FULLRELRO-NEXT: Type: SHT_PROGBITS |
| // FULLRELRO-NEXT: Flags [ |
| // FULLRELRO-NEXT: SHF_ALLOC |
| // FULLRELRO-NEXT: SHF_WRITE |
| // FULLRELRO-NEXT: ] |
| // FULLRELRO-NEXT: Address: 0x12118 |
| // FULLRELRO-NEXT: Offset: 0x2118 |
| // FULLRELRO-NEXT: Size: 32 |
| // FULLRELRO-NEXT: Link: 0 |
| // FULLRELRO-NEXT: Info: 0 |
| // FULLRELRO-NEXT: AddressAlignment: 8 |
| // FULLRELRO-NEXT: EntrySize: 0 |
| // FULLRELRO-NEXT: SectionData ( |
| // FULLRELRO-NEXT: 0000: |
| // FULLRELRO-NEXT: 0010: |
| // FULLRELRO-NEXT: ) |
| // FULLRELRO-NEXT: } |
| // FULLRELRO-NEXT: Section { |
| // FULLRELRO-NEXT: Index: 11 |
| // FULLRELRO-NEXT: Name: .data |
| // FULLRELRO-NEXT: Type: SHT_PROGBITS |
| // FULLRELRO-NEXT: Flags [ |
| // FULLRELRO-NEXT: SHF_ALLOC |
| // FULLRELRO-NEXT: SHF_WRITE |
| // FULLRELRO-NEXT: ] |
| // FULLRELRO-NEXT: Address: 0x13000 |
| // FULLRELRO-NEXT: Offset: 0x3000 |
| // FULLRELRO-NEXT: Size: 12 |
| // FULLRELRO-NEXT: Link: 0 |
| // FULLRELRO-NEXT: Info: 0 |
| // FULLRELRO-NEXT: AddressAlignment: |
| // FULLRELRO-NEXT: EntrySize: 0 |
| // FULLRELRO-NEXT: SectionData ( |
| // FULLRELRO-NEXT: 0000: |
| // FULLRELRO-NEXT: ) |
| // FULLRELRO-NEXT: } |
| // FULLRELRO-NEXT: Section { |
| // FULLRELRO-NEXT: Index: 12 |
| // FULLRELRO-NEXT: Name: .foo |
| // FULLRELRO-NEXT: Type: SHT_PROGBITS |
| // FULLRELRO-NEXT: Flags [ |
| // FULLRELRO-NEXT: SHF_ALLOC |
| // FULLRELRO-NEXT: SHF_WRITE |
| // FULLRELRO-NEXT: ] |
| // FULLRELRO-NEXT: Address: 0x1300C |
| // FULLRELRO-NEXT: Offset: 0x300C |
| // FULLRELRO-NEXT: Size: 0 |
| // FULLRELRO-NEXT: Link: 0 |
| // FULLRELRO-NEXT: Info: 0 |
| // FULLRELRO-NEXT: AddressAlignment: |
| // FULLRELRO-NEXT: EntrySize: 0 |
| // FULLRELRO-NEXT: SectionData ( |
| // FULLRELRO-NEXT: ) |
| // FULLRELRO-NEXT: } |
| // 308 - sizeof(.data)(12) = 296 |
| // FULLRELRO: ProgramHeaders [ |
| // FULLRELRO: Type: PT_LOAD |
| // FULLRELRO: Offset: 0x2000 |
| // FULLRELRO-NEXT: VirtualAddress: [[RWADDR:.*]] |
| // FULLRELRO-NEXT: PhysicalAddress: |
| // FULLRELRO-NEXT: FileSize: 4108 |
| // FULLRELRO-NEXT: MemSize: 4108 |
| // FULLRELRO-NEXT: Flags [ |
| // FULLRELRO-NEXT: PF_R |
| // FULLRELRO-NEXT: PF_W |
| // FULLRELRO-NEXT: ] |
| // FULLRELRO-NEXT: Alignment: 4096 |
| // FULLRELRO-NEXT:} |
| // FULLRELRO: Type: PT_GNU_RELRO |
| // FULLRELRO-NEXT: Offset: 0x |
| // FULLRELRO-NEXT: VirtualAddress: [[RWADDR]] |
| // FULLRELRO-NEXT: PhysicalAddress: |
| // FULLRELRO-NEXT: FileSize: 312 |
| // FULLRELRO-NEXT: MemSize: 312 |
| // FULLRELRO-NEXT: Flags [ |
| // FULLRELRO-NEXT: PF_R |
| // FULLRELRO-NEXT: ] |
| // FULLRELRO-NEXT: Alignment: 1 |
| // FULLRELRO-NEXT:} |
| |
| // PARTRELRO: Section { |
| // PARTRELRO: Index: 9 |
| // PARTRELRO-NEXT: Name: .got |
| // PARTRELRO-NEXT: Type: SHT_PROGBITS |
| // PARTRELRO-NEXT: Flags [ |
| // PARTRELRO-NEXT: SHF_ALLOC |
| // PARTRELRO-NEXT: SHF_WRITE |
| // PARTRELRO-NEXT: ] |
| // PARTRELRO-NEXT: Address: 0x120F0 |
| // PARTRELRO-NEXT: Offset: 0x20F0 |
| // PARTRELRO-NEXT: Size: 8 |
| // PARTRELRO-NEXT: Link: 0 |
| // PARTRELRO-NEXT: Info: 0 |
| // PARTRELRO-NEXT: AddressAlignment: 8 |
| // PARTRELRO-NEXT: EntrySize: 0 |
| // PARTRELRO-NEXT: SectionData ( |
| // PARTRELRO-NEXT: 0000: |
| // PARTRELRO-NEXT: ) |
| // PARTRELRO-NEXT: } |
| // PARTRELRO-NEXT: Section { |
| // PARTRELRO-NEXT: Index: 10 |
| // PARTRELRO-NEXT: Name: .data |
| // PARTRELRO-NEXT: Type: SHT_PROGBITS |
| // PARTRELRO-NEXT: Flags [ |
| // PARTRELRO-NEXT: SHF_ALLOC |
| // PARTRELRO-NEXT: SHF_WRITE |
| // PARTRELRO-NEXT: ] |
| // PARTRELRO-NEXT: Address: 0x13000 |
| // PARTRELRO-NEXT: Offset: 0x3000 |
| // PARTRELRO-NEXT: Size: 12 |
| // PARTRELRO-NEXT: Link: 0 |
| // PARTRELRO-NEXT: Info: 0 |
| // PARTRELRO-NEXT: AddressAlignment: 1 |
| // PARTRELRO-NEXT: EntrySize: 0 |
| // PARTRELRO-NEXT: SectionData ( |
| // PARTRELRO-NEXT: 0000: |
| // PARTRELRO-NEXT: ) |
| // PARTRELRO-NEXT: } |
| // PARTRELRO-NEXT: Section { |
| // PARTRELRO-NEXT: Index: 11 |
| // PARTRELRO-NEXT: Name: .foo |
| // PARTRELRO-NEXT: Type: SHT_PROGBITS |
| // PARTRELRO-NEXT: Flags [ |
| // PARTRELRO-NEXT: SHF_ALLOC |
| // PARTRELRO-NEXT: SHF_WRITE |
| // PARTRELRO-NEXT: ] |
| // PARTRELRO-NEXT: Address: 0x1300C |
| // PARTRELRO-NEXT: Offset: 0x300C |
| // PARTRELRO-NEXT: Size: 0 |
| // PARTRELRO-NEXT: Link: 0 |
| // PARTRELRO-NEXT: Info: 0 |
| // PARTRELRO-NEXT: AddressAlignment: 1 |
| // PARTRELRO-NEXT: EntrySize: 0 |
| // PARTRELRO-NEXT: SectionData ( |
| // PARTRELRO-NEXT: ) |
| // PARTRELRO-NEXT: } |
| // PARTRELRO-NEXT: Section { |
| // PARTRELRO-NEXT: Index: 12 |
| // PARTRELRO-NEXT: Name: .got.plt |
| // PARTRELRO-NEXT: Type: SHT_PROGBITS |
| // PARTRELRO-NEXT: Flags [ |
| // PARTRELRO-NEXT: SHF_ALLOC |
| // PARTRELRO-NEXT: SHF_WRITE |
| // PARTRELRO-NEXT: ] |
| // PARTRELRO-NEXT: Address: 0x13010 |
| // PARTRELRO-NEXT: Offset: 0x3010 |
| // PARTRELRO-NEXT: Size: 32 |
| // PARTRELRO-NEXT: Link: 0 |
| // PARTRELRO-NEXT: Info: 0 |
| // PARTRELRO-NEXT: AddressAlignment: 8 |
| // PARTRELRO-NEXT: EntrySize: 0 |
| // PARTRELRO-NEXT: SectionData ( |
| // PARTRELRO-NEXT: 0000: |
| // PARTRELRO-NEXT: 0010: |
| // PARTRELRO-NEXT: ) |
| // PARTRELRO-NEXT: } |
| // PARTRELRO-NEXT: Section { |
| // PARTRELRO-NEXT: Index: 13 |
| // PARTRELRO-NEXT: Name: .bss |
| // PARTRELRO-NEXT: Type: SHT_NOBITS |
| // PARTRELRO-NEXT: Flags [ |
| // PARTRELRO-NEXT: SHF_ALLOC |
| // PARTRELRO-NEXT: SHF_WRITE |
| // PARTRELRO-NEXT: ] |
| // PARTRELRO-NEXT: Address: 0x13030 |
| // PARTRELRO-NEXT: Offset: 0x3030 |
| // PARTRELRO-NEXT: Size: 0 |
| // PARTRELRO-NEXT: Link: 0 |
| // PARTRELRO-NEXT: Info: 0 |
| // PARTRELRO-NEXT: AddressAlignment: 1 |
| // PARTRELRO-NEXT: EntrySize: 0 |
| // PARTRELRO-NEXT: } |
| // PARTRELRO: ProgramHeader { |
| // PARTRELRO: Type: PT_LOAD |
| // PARTRELRO: Offset: 0x2000 |
| // PARTRELRO-NEXT: VirtualAddress: [[RWADDR:.*]] |
| // PARTRELRO-NEXT: PhysicalAddress: |
| // PARTRELRO-NEXT: FileSize: 4144 |
| // PARTRELRO-NEXT: MemSize: 4144 |
| // PARTRELRO-NEXT: Flags [ |
| // PARTRELRO-NEXT: PF_R (0x4) |
| // PARTRELRO-NEXT: PF_W (0x2) |
| // PARTRELRO-NEXT: ] |
| // PARTRELRO-NEXT: Alignment: 4096 |
| // PARTRELRO: Type: PT_GNU_RELRO |
| // PARTRELRO-NEXT: Offset: 0x2000 |
| // PARTRELRO-NEXT: VirtualAddress: [[RWADDR]] |
| // PARTRELRO-NEXT: PhysicalAddress: |
| // PARTRELRO-NEXT: FileSize: 248 |
| // PARTRELRO-NEXT: MemSize: 248 |
| // PARTRELRO-NEXT: Flags [ |
| // PARTRELRO-NEXT: PF_R |
| // PARTRELRO-NEXT: ] |
| // PARTRELRO-NEXT: Alignment: 1 |
| |
| // NORELRO: ProgramHeaders [ |
| // NORELRO-NOT: PT_GNU_RELRO |
| |
| .global _start |
| _start: |
| .long bar |
| jmp *bar@GOTPCREL(%rip) |
| |
| .section .data,"aw" |
| .quad 0 |
| |
| .zero 4 |
| .section .foo,"aw" |
| .section .bss,"",@nobits |