[llvm-bugs] [Bug 37361] New: lld creates PT_NOTE phdr for non-allocatable note

via llvm-bugs llvm-bugs at lists.llvm.org
Mon May 7 18:06:38 PDT 2018


https://bugs.llvm.org/show_bug.cgi?id=37361

            Bug ID: 37361
           Summary: lld creates PT_NOTE phdr for non-allocatable note
           Product: lld
           Version: unspecified
          Hardware: PC
                OS: FreeBSD
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: ELF
          Assignee: unassignedbugs at nondot.org
          Reporter: emaste at freebsd.org
                CC: llvm-bugs at lists.llvm.org

This issue was found while trying to link ghc (Haskell compiler) with lld, and
reported in FreeBSD bug 226872
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=226872. lld-linked Haskell
binaries crash FreeBSD's rtld as the phdr includes a PT_NOTE segment at
VirtAddr = 0

% readelf -lW HsColour

Elf file type is EXEC (Executable file)
Entry point 0x22a000
There are 11 program headers, starting at offset 64

Program Headers:
  Type           Offset   VirtAddr           PhysAddr           FileSiz  MemSiz
  Flg Align
  PHDR           0x000040 0x0000000000200040 0x0000000000200040 0x000268
0x000268 R   0x8
  INTERP         0x0002a8 0x00000000002002a8 0x00000000002002a8 0x000015
0x000015 R   0x1
      [Requesting program interpreter: /libexec/ld-elf.so.1]
  LOAD           0x000000 0x0000000000200000 0x0000000000200000 0x029aa0
0x029aa0 R   0x1000
  LOAD           0x02a000 0x000000000022a000 0x000000000022a000 0x12f390
0x12f390 R E 0x1000
  LOAD           0x15a000 0x000000000035a000 0x000000000035a000 0x01ae68
0x027a6c RW  0x1000
  DYNAMIC        0x174cb0 0x0000000000374cb0 0x0000000000374cb0 0x0001b0
0x0001b0 RW  0x8
  GNU_RELRO      0x16f000 0x000000000036f000 0x000000000036f000 0x005e68
0x007000 R   0x1
  GNU_EH_FRAME   0x0234b0 0x00000000002234b0 0x00000000002234b0 0x00111c
0x00111c R   0x1
  GNU_STACK      0x000000 0x0000000000000000 0x0000000000000000 0x000000
0x000000 RW  0
  NOTE           0x0002c0 0x00000000002002c0 0x00000000002002c0 0x000030
0x000030 R   0x4
  NOTE           0x342dcc 0x0000000000000000 0x0000000000000000 0x000c40
0x000c40 R   0x4
...

% readelf -SW HsColour
There are 44 section headers, starting at offset 0x3c4aa0:

Section Headers:
  [Nr] Name              Type            Addr             Off    Size   ES Flg
Lk Inf Al
...
  [ 2] .note.tag         NOTE            00000000002002c0 0002c0 000030 00   A 
0   0  4
...
  [39] .debug-ghc-link-i NOTE            0000000000000000 342dcc 000c40 00     
0   0  4
...

Observe that the section headers show the second note section is not SHF_ALLOC.

When linking with ld.bfd we still have the two NOTE sections, one SHF_ALLOC and
one not:

% readelf -SW HsColour     
There are 43 section headers, starting at offset 0x3c1ec0:

Section Headers:
  [Nr] Name              Type            Addr             Off    Size   ES Flg
Lk Inf Al
...
  [ 2] .note.tag         NOTE            0000000000400218 000218 000030 00   A 
0   0  4
...
  [39] .debug-ghc-link-i NOTE            0000000000000000 33de1c 000c40 00     
0   0  4
...

but ld.bfd omits the PT_NOTE phdr for the non-alloc note:

% readelf -lW HsColour

Elf file type is EXEC (Executable file)
Entry point 0x4050a0
There are 8 program headers, starting at offset 64

Program Headers:
  Type           Offset   VirtAddr           PhysAddr           FileSiz  MemSiz
  Flg Align
  PHDR           0x000040 0x0000000000400040 0x0000000000400040 0x0001c0
0x0001c0 R   0x8
  INTERP         0x000200 0x0000000000400200 0x0000000000400200 0x000015
0x000015 R   0x1
      [Requesting program interpreter: /libexec/ld-elf.so.1]
  LOAD           0x000000 0x0000000000400000 0x0000000000400000 0x157fa8
0x157fa8 R E 0x200000
  LOAD           0x158000 0x0000000000758000 0x0000000000758000 0x01bec8
0x027990 RW  0x200000
  DYNAMIC        0x15ed30 0x000000000075ed30 0x000000000075ed30 0x000200
0x000200 RW  0x8
  NOTE           0x000218 0x0000000000400218 0x0000000000400218 0x000030
0x000030 R   0x4
  GNU_EH_FRAME   0x151f80 0x0000000000551f80 0x0000000000551f80 0x001124
0x001124 R   0x4
  GNU_STACK      0x000000 0x0000000000000000 0x0000000000000000 0x000000
0x000000 RWE 0x10

Versions:
% ld.bfd --version
GNU ld (GNU Binutils) 2.30
Copyright (C) 2018 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or (at your option) a later version.
This program has absolutely no warranty.
% ld.lld --version
LLD 6.0.0 (FreeBSD 326565-1200001) (compatible with GNU linkers)

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20180508/f6ffd43a/attachment.html>


More information about the llvm-bugs mailing list