[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