[PATCH] D55800: [ELF] Place .note in the first page to ensure they are available in core files
Fāng-ruì Sòng via llvm-commits
llvm-commits at lists.llvm.org
Wed Dec 19 12:16:30 PST 2018
On 2018-12-19, Joerg Sonnenberger wrote:
>On Wed, Dec 19, 2018 at 09:48:06AM -0800, Fāng-ruì Sòng via llvm-commits wrote:
>> Can you give an example of writable SHT_NOTE section?
>
>You can create it in assembler by hand? I'm not sure if there are
>documented case of (intentionally) writable SHT_NOTE sections>
>Joerg
% cat n.s
.section .note.a, "aw", @note
.quad 0
.text
nop
.data
.quad 0
% as n.s -o n.o
n.s: Assembler messages:
n.s:1: Warning: setting incorrect section attributes for .note.a
The warning suggests this may not be a reasonable construct. After this
revision, lld does something similar to ld.bfd (there are two RW PT_LOAD
segments, which is only one in gold) The output is still valid.
Considering the construct itself (writable SHT_NOTE) may be
questionable, I don't think we have to complicate the code a bit to
handle the case.
% ld.bfd n.o -o n; readelf -WS n
ld.bfd: warning: cannot find entry symbol _start; defaulting to 00000000004000b8
There are 7 section headers, starting at offset 0x200200:
Section Headers:
[Nr] Name Type Address Off Size ES Flg Lk Inf Al
[ 0] NULL 0000000000000000 000000 000000 00 0 0 0
[ 1] .note.a NOTE 00000000004000b0 0000b0 000008 00 WA 0 0 1
[ 2] .text PROGBITS 00000000004000b8 0000b8 000001 00 AX 0 0 4
[ 3] .data PROGBITS 00000000006000b9 2000b9 000008 00 WA 0 0 1
[ 4] .symtab SYMTAB 0000000000000000 2000c8 0000d8 18 5 5 8
[ 5] .strtab STRTAB 0000000000000000 2001a0 00002f 00 0 0 1
[ 6] .shstrtab STRTAB 0000000000000000 2001cf 00002f 00 0 0 1
% gold n.o -o n; readelf -WS n
There are 8 section headers, starting at offset 0x1d8:
Section Headers:
[Nr] Name Type Address Off Size ES Flg Lk Inf Al
[ 0] NULL 0000000000000000 000000 000000 00 0 0 0
[ 1] .text PROGBITS 00000000004000e8 0000e8 000001 00 AX 0 0 4
[ 2] .data PROGBITS 00000000004010e9 0000e9 000008 00 WA 0 0 1
[ 3] .note.a NOTE 00000000004010f1 0000f1 000008 00 WA 0 0 1
[ 4] .note.gnu.gold-version NOTE 0000000000000000 0000fc 00001c 00 0 0 4
[ 5] .symtab SYMTAB 0000000000000000 000118 000060 18 6 1 8
[ 6] .strtab STRTAB 0000000000000000 000178 000019 00 0 0 1
[ 7] .shstrtab STRTAB 0000000000000000 000191 000046 00 0 0 1
% ld.lld n.o -o n; readelf -WS n
ld.lld: warning: cannot find entry symbol _start; defaulting to 0x202000
There are 8 section headers, starting at offset 0x3088:
Section Headers:
[Nr] Name Type Address Off Size ES Flg Lk Inf Al
[ 0] NULL 0000000000000000 000000 000000 00 0 0 0
[ 1] .note.a NOTE 0000000000201000 001000 000008 00 WA 0 0 1
[ 2] .text PROGBITS 0000000000202000 002000 000001 00 AX 0 0 4
[ 3] .data PROGBITS 0000000000203000 003000 000008 00 WA 0 0 1
[ 4] .comment PROGBITS 0000000000000000 003008 000021 01 MS 0 0 1
[ 5] .symtab SYMTAB 0000000000000000 003030 000018 18 7 1 8
[ 6] .shstrtab STRTAB 0000000000000000 003048 000038 00 0 0 1
[ 7] .strtab STRTAB 0000000000000000 003080 000001 00 0 0 1
> but the gold comment you quotet earlier certainly considered it.
The binutils-gdb commit 22f0da72ea2fc99e409548ce883b751aa822c2c3 added
the code (ORDER_RO_NOTE), but I cannot find explanation for this choice.
--
宋方睿
More information about the llvm-commits
mailing list