bug-binutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug binutils/31540] New: objcopy, ELF_SECTION_IN_SEGMENT_1 section to s


From: shank.vijay at yandex dot com
Subject: [Bug binutils/31540] New: objcopy, ELF_SECTION_IN_SEGMENT_1 section to segment mapping seems wrong
Date: Sat, 23 Mar 2024 10:22:44 +0000

https://sourceware.org/bugzilla/show_bug.cgi?id=31540

            Bug ID: 31540
           Summary: objcopy, ELF_SECTION_IN_SEGMENT_1 section to segment
                    mapping seems wrong
           Product: binutils
           Version: unspecified
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: binutils
          Assignee: unassigned at sourceware dot org
          Reporter: shank.vijay at yandex dot com
  Target Milestone: ---

Created attachment 15430
  --> https://sourceware.org/bugzilla/attachment.cgi?id=15430&action=edit
contains c file and linker script

This bug was found while building a image for os


How to reproduce :
Take the attached c file and linker-sript and follow through steps

1> clang reprod.c -ffreestanding -c -o reprod.img

2> ld.lld --defsym VMA_START=0xffffffff80100000 --defsym LMA_START=0x4800000 -T
l.ld reprod.img -o reprod.img

3> objcopy --change-section-lma .*-0xffffffff80000000 reprod.img

4> objcopy --adjust-start -0xffffffff80000000 reprod.img

Tool version's:
using clang-17 and binutils 2.40 on x86_64 but issue seems target agnostic.

we get the following issues

First issue we encounter.
objcopy: stq0GBq2: section `.data' can't be allocated in segment 0
LOAD: .tbss .data .bss .sdata
objcopy: stq0GBq2: section `.bss' can't be allocated in segment 0
LOAD: .tbss .data .bss .sdata

second issue the image sizes are overblown
du -sh a.out
34G     a.out

Note that the bug seems to only be reproducible with lld

Preliminary observations:

lld  
  TLS            0x0000000000002058 0xffffffff80100060 (vma) 0xffffffff80100060
(lma)
                 0x0000000000000000 0x0000000000000004  R      0x4
   03     .tbss
Ld Linker
  TLS            0x0000000000100098 0xffffffff801000a0 (vma) 0xffffffffc81000a0
(lma)
                 0x0000000000000000 0x0000000000000004  R      0x4

ELF_SECTION_IN_SEGMENT_1 (include/elf/internal.h) is used to check if section
belongs into a segment (based on VMA) but the heuristics fail because tbss is
considered part of LOAD when it shouldn't be considered as one this becomes an
issue when assigning file offsets assign_file_positions_for_load_sections
(bfd/elf.c) sorts segments based on lma and this is when things seem to go for
a toss.

Previous discussion thread:
https://lists.gnu.org/archive/html/bug-binutils/2024-03/msg00098.html

-- 
You are receiving this mail because:
You are on the CC list for the bug.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]