[llvm-bugs] [Bug 30415] New: lld has different section attribute merging vs ld.bfd

via llvm-bugs llvm-bugs at lists.llvm.org
Fri Sep 16 08:23:56 PDT 2016


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

            Bug ID: 30415
           Summary: lld has different section attribute merging vs ld.bfd
           Product: lld
           Version: unspecified
          Hardware: PC
                OS: FreeBSD
            Status: NEW
          Severity: normal
          Priority: P
         Component: ELF
          Assignee: unassignedbugs at nondot.org
          Reporter: emaste at freebsd.org
                CC: llvm-bugs at lists.llvm.org
            Blocks: 23214
    Classification: Unclassified

LLD is not necessarily wrong here and what ld.bfd is doing is arguably a bug,
but I'm submitting this PR for tracking one of the few outstanding issues
linking FreeBSD/amd64 with LLD while looking for a solution.

We recently migrated to using a linker script instead of the seemingly obsolete
-N command line flag for FreeBSD's boot loader components:
https://svnweb.freebsd.org/base?view=revision&revision=305353

The linker script is straightforward:

---
/* $FreeBSD$ */
/* Merge text, data and bss together almost no padding */
OUTPUT_FORMAT("elf32-i386-freebsd")
OUTPUT_ARCH(i386)
ENTRY(_start)
SECTIONS {
  . = 0x08048000 + SIZEOF_HEADERS;
  .text : { *(.text) } =0x90909090      /* Pad with nops, if needed */
  .data : { *(.data) } PROVIDE(_edata = .);
  .bss  : { *(.bss) }  PROVIDE(_end = .);
}
---

>From this GNU ld produces an object with all sections packed into a single RWE
segment:

% readelf -l boot2.out

Elf file type is EXEC (Executable file)
Entry point 0x2000
There are 2 program headers, starting at offset 52

Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  LOAD           0x000080 0x00002000 0x00002000 0x01456 0x027f8 RWE 0x10
  GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x00000 RWE 0x4

 Section to Segment mapping:
  Segment Sections...
   00     .text .rodata .data .bss 
   01     

while LLD produces an object with separate segments for sections with different
permissions.

-- 
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/20160916/09c1881b/attachment-0001.html>


More information about the llvm-bugs mailing list