bug-binutils
[Top][All Lists]
Advanced

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

[Bug ld/14162] New: avr-ld misplaces .bss if --gc-sections is given and


From: max at suse dot de
Subject: [Bug ld/14162] New: avr-ld misplaces .bss if --gc-sections is given and .data is empty
Date: Thu, 24 May 2012 16:32:04 +0000

http://sourceware.org/bugzilla/show_bug.cgi?id=14162

             Bug #: 14162
           Summary: avr-ld misplaces .bss if --gc-sections is given and
                    .data is empty
           Product: binutils
           Version: 2.22
            Status: NEW
          Severity: normal
          Priority: P2
         Component: ld
        AssignedTo: address@hidden
        ReportedBy: address@hidden
    Classification: Unclassified


When linking a program for an AVR model that has a different RAM start address
than the default set in the linker script for the respective AVR family, gcc
calls ld with -Tdata=<address> to override the default and ld automatically
puts the .bss section behind .data in the RAM.

Now if a program is linked that has no .data and gcc is called with
-Wl,--gc-sections, the address giveb to -Tdata gets lost and .bss gets placed
at the default location, which lies in the middle of the I/O regisrer space for
models that need a value that is different from the default.

This is a regression from version 2.19.1.

Consider the following example:
----------------------------------------------------------------------
$ cat check.c 
int x;
main() { x++; }

$ avr-gcc -v -mmcu=atmega328p -Wl,--gc-sections -o check check.c
Using built-in specs.
Target: avr
Configured with: ../gcc-4.3.3/configure -v --target=avr --disable-nls
--mandir=/opt/cross/avr/share/man --infodir=/opt/cross/avr/share/info
--prefix=/opt/cross/avr --with-gnu-ld --with-gnu-as --enable-languages=c,c++
--disable-libssp --with-dwarf2
Thread model: single
gcc version 4.3.3 (GCC) 
COLLECT_GCC_OPTIONS='-v' '-mmcu=atmega328p' '-o' 'check'
 /opt/cross/avr/libexec/gcc/avr/4.3.3/cc1 -quiet -v -imultilib avr5 check.c
-quiet -dumpbase check.c -mmcu=atmega328p -auxbase check -version -o
/tmp/ccceMgwU.s
ignoring nonexistent directory
"/opt/cross/avr/lib/gcc/avr/4.3.3/../../../../avr/sys-include"
#include "..." search starts here:
#include <...> search starts here:
 /opt/cross/avr/lib/gcc/avr/4.3.3/include
 /opt/cross/avr/lib/gcc/avr/4.3.3/include-fixed
 /opt/cross/avr/lib/gcc/avr/4.3.3/../../../../avr/include
End of search list.
GNU C (GCC) version 4.3.3 (avr)
        compiled by GNU C version 4.6.2, GMP version 5.0.2, MPFR version 3.0.1.
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 01ae89caa829da89431e8cde9ed97070
COLLECT_GCC_OPTIONS='-v' '-mmcu=atmega328p' '-o' 'check'
 /opt/cross/avr/lib/gcc/avr/4.3.3/../../../../avr/bin/as -v -mmcu=atmega328p -o
/tmp/ccWlIAJR.o /tmp/ccceMgwU.s
GNU assembler version 2.22 (avr) using BFD version (GNU Binutils) 2.22
COMPILER_PATH=/opt/cross/avr/libexec/gcc/avr/4.3.3/:/opt/cross/avr/libexec/gcc/avr/4.3.3/:/opt/cross/avr/libexec/gcc/avr/:/opt/cross/avr/lib/gcc/avr/4.3.3/:/opt/cross/avr/lib/gcc/avr/:/opt/cross/avr/lib/gcc/avr/4.3.3/../../../../avr/bin/
LIBRARY_PATH=/opt/cross/avr/lib/gcc/avr/4.3.3/avr5/:/opt/cross/avr/lib/gcc/avr/4.3.3/../../../../avr/lib/avr5/:/opt/cross/avr/lib/gcc/avr/4.3.3/:/opt/cross/avr/lib/gcc/avr/4.3.3/../../../../avr/lib/
COLLECT_GCC_OPTIONS='-v' '-mmcu=atmega328p' '-o' 'check'
 /opt/cross/avr/lib/gcc/avr/4.3.3/../../../../avr/bin/ld -m avr5 -Tdata
0x800100 -o check
/opt/cross/avr/lib/gcc/avr/4.3.3/../../../../avr/lib/avr5/crtm328p.o
-L/opt/cross/avr/lib/gcc/avr/4.3.3/avr5
-L/opt/cross/avr/lib/gcc/avr/4.3.3/../../../../avr/lib/avr5
-L/opt/cross/avr/lib/gcc/avr/4.3.3
-L/opt/cross/avr/lib/gcc/avr/4.3.3/../../../../avr/lib --gc-sections
/tmp/ccWlIAJR.o -lgcc -lc -lgcc

$ avr-objdump -h check

check:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         000000d0  00000000  00000000  00000074  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .bss          00000002  00800060  00800060  00000144  2**0
                  ALLOC
  2 .stab         000006cc  00000000  00000000  00000144  2**2
                  CONTENTS, READONLY, DEBUGGING
  3 .stabstr      00000054  00000000  00000000  00000810  2**0
                  CONTENTS, READONLY, DEBUGGING
----------------------------------------------------------------------

.bss has been located at address 0x800060, which is the default for avr5,
although ld has been called with -Tdata 0x800100, which would be the correct
value for the ATmega328p device.

If either .data is non-empty, or --gc-sections is left out, or version 2.19.1
is used, .bss gets placed at the correct location.

-- 
Configure bugmail: http://sourceware.org/bugzilla/userprefs.cgi?tab=email
------- 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]