It was noticed on review page for D26888 (-N) by Ed Maste that we have relro enabled.
Before this patch output from testcase binary was:
Sections:
Idx Name Size Address Type
0 00000000 0000000000000000
1 .dynsym 00000048 0000000000200158
2 .hash 00000020 00000000002001a0
3 .dynstr 00000021 00000000002001c0
4 .rela.dyn 00000018 00000000002001e8
5 .rela.plt 00000018 0000000000200200
6 .text 0000000a 0000000000200218 TEXT DATA
7 .plt 00000020 0000000000200230 TEXT DATA
8 .dynamic 000000f0 0000000000200250
9 .got 00000008 0000000000200340 DATA
10 .data 00000008 0000000000201000 DATA
11 .foo 00000004 0000000000201008 DATA
12 .got.plt 00000020 0000000000201010 DATA
13 .comment 00000008 0000000000000000
14 .symtab 00000060 0000000000000000
15 .shstrtab 0000007b 0000000000000000
16 .strtab 00000013 0000000000000000
ProgramHeader {
Type: PT_GNU_RELRO (0x6474E552)
Offset: 0x250
VirtualAddress: 0x200250
PhysicalAddress: 0x200250
FileSize: 248
MemSize: 248
Flags [ (0x4)
PF_R (0x4)
]
Alignment: 1
}Noticable here that .data section (first section after relro) is aligned to page.
That is probably not expected behavior with omagic, that says that text and data segments should not be
aligned (I would expect no page alignment for sections either).
Also with omagic we do not page align writable segment, PT_GNU_RELRO starts from 0x200250,
somewhere at the middle of PT_LOAD,
If dynamic linker will apply relro, it probably will round down start address to 200000 to mark it readonly.
Not sure if something bad happens here since sections
there are already non writable ("a", "ax"), but anyways that probably does not look technically correct to do.