This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Fwd: avr-gcc (compiled from trunk) not placing objects in attributed sections in some cases.


Hi there,

Not sure if this is generic to any gcc target, or it just happens for
avr, given previous mentioned problems with the .data section
dissappearing (due to -gc-sections) causing .bss to be resolved to the
wrong addresses for avr...

Anyway, this is my test case and what happens, which does not happen in
the Atmel latest published toolchain:

Test program is:
$ cat gcc-data-sections.c

#if     MAKE_A_PROBLEM
#if     MAKE_IT_WORK
__attribute__((section(".my.tables.things.data")))
#endif/*MAKE_IT_WORK*/
extern unsigned long  my_thing_1;
static unsigned long *my_local_thing = &my_thing_1;
#else /*MAKE_A_PROBLEM*/
static unsigned long *my_local_thing;
#endif/*MAKE_A_PROBLEM*/

__attribute__((section(".my.tables.things.data")))
unsigned long         my_thing_1 = 0x600df00d;


void  my_dummy(void)
{
  (void) my_local_thing; /*avoid a warning*/
}


When compiling with:

$ avr-gcc -mmcu=atxmega256a3u -Wa,-mmcu=atxmega256a3u -Os -g
-fsigned-char -ffunction-sections -fdata-sections -Wall -Wextra -Werror
-std=gnu99 -DMAKE_A_PROBLEM=1 -DMAKE_IT_WORK=0 -c -o gcc-data-sections.o
gcc-data-sections.c

as it is usually done (and does work in the atmel toolchain), I get:

$ avr-objdump -h gcc-data-sections.o

gcc-data-sections.o:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off Algn
  0 .text         00000000  00000000  00000000  00000034 2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000000  00000000  00000000  00000034 2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000000  00000000  00000000  00000034 2**0
                  ALLOC
  3 .text.my_dummy 00000002  00000000  00000000  00000034 2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  4 .data.my_thing_1 00000004  00000000  00000000 00000036  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  5 .debug_info   00000067  00000000  00000000  0000003a 2**0
                  CONTENTS, RELOC, READONLY, DEBUGGING
  6 .debug_abbrev 00000060  00000000  00000000  000000a1 2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_aranges 00000020  00000000  00000000  00000101 2**0
                  CONTENTS, RELOC, READONLY, DEBUGGING
  8 .debug_ranges 00000010  00000000  00000000  00000121 2**0
                  CONTENTS, RELOC, READONLY, DEBUGGING
  9 .debug_line   00000043  00000000  00000000  00000131 2**0
                  CONTENTS, RELOC, READONLY, DEBUGGING
 10 .debug_str    000000e7  00000000  00000000  00000174 2**0
                  CONTENTS, READONLY, DEBUGGING
 11 .comment      0000002b  00000000  00000000  0000025b 2**0
                  CONTENTS, READONLY
 12 .debug_frame  00000024  00000000  00000000  00000288 2**2
                  CONTENTS, RELOC, READONLY, DEBUGGING

With my_thing_1 not going into its assigned section as it should. Found
that is due to the previous extern declaration, which seems to work if
it is removed:

$ avr-gcc -mmcu=atxmega256a3u -Wa,-mmcu=atxmega256a3u -Os -g
-fsigned-char -ffunction-sections -fdata-sections -Wall -Wextra -Werror
-std=gnu99 -DMAKE_A_PROBLEM=0 -DMAKE_IT_WORK=0 -c -o gcc-data-sections.o
gcc-data-sections.c

$ avr-objdump -h gcc-data-sections.o

gcc-data-sections.o:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000000  00000000  00000000  00000034  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000000  00000000  00000000  00000034  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000000  00000000  00000000  00000034  2**0
                  ALLOC
  3 .text.my_dummy 00000002  00000000  00000000  00000034  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  4 .my.tables.things.data 00000004  00000000  00000000  00000036 2**0
                  CONTENTS, ALLOC, LOAD, DATA
  5 .debug_info   00000060  00000000  00000000  0000003a  2**0
                  CONTENTS, RELOC, READONLY, DEBUGGING
  6 .debug_abbrev 0000005e  00000000  00000000  0000009a  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_aranges 00000020  00000000  00000000  000000f8  2**0
                  CONTENTS, RELOC, READONLY, DEBUGGING
  8 .debug_ranges 00000010  00000000  00000000  00000118  2**0
                  CONTENTS, RELOC, READONLY, DEBUGGING
  9 .debug_line   00000043  00000000  00000000  00000128  2**0
                  CONTENTS, RELOC, READONLY, DEBUGGING
 10 .debug_str    000000e7  00000000  00000000  0000016b  2**0
                  CONTENTS, READONLY, DEBUGGING
 11 .comment      0000002b  00000000  00000000  00000252  2**0
                  CONTENTS, READONLY
 12 .debug_frame  00000024  00000000  00000000  00000280  2**2
                  CONTENTS, RELOC, READONLY, DEBUGGING


or if it is annotated with the same section attribute:

$ avr-gcc -mmcu=atxmega256a3u -Wa,-mmcu=atxmega256a3u -Os -g
-fsigned-char -ffunction-sections -fdata-sections -Wall -Wextra -Werror
-std=gnu99 -DMAKE_A_PROBLEM=1 -DMAKE_IT_WORK=1 -c -o gcc-data-sections.o
gcc-data-sections.c

$ avr-objdump -h gcc-data-sections.o

gcc-data-sections.o:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000000  00000000  00000000  00000034  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000000  00000000  00000000  00000034  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000000  00000000  00000000  00000034  2**0
                  ALLOC
  3 .text.my_dummy 00000002  00000000  00000000  00000034  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  4 .my.tables.things.data 00000004  00000000  00000000  00000036 2**0
                  CONTENTS, ALLOC, LOAD, DATA
  5 .debug_info   00000067  00000000  00000000  0000003a  2**0
                  CONTENTS, RELOC, READONLY, DEBUGGING
  6 .debug_abbrev 00000060  00000000  00000000  000000a1  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_aranges 00000020  00000000  00000000  00000101  2**0
                  CONTENTS, RELOC, READONLY, DEBUGGING
  8 .debug_ranges 00000010  00000000  00000000  00000121  2**0
                  CONTENTS, RELOC, READONLY, DEBUGGING
  9 .debug_line   00000043  00000000  00000000  00000131  2**0
                  CONTENTS, RELOC, READONLY, DEBUGGING
 10 .debug_str    000000e7  00000000  00000000  00000174  2**0
                  CONTENTS, READONLY, DEBUGGING
 11 .comment      0000002b  00000000  00000000  0000025b  2**0
                  CONTENTS, READONLY
 12 .debug_frame  00000024  00000000  00000000  00000288  2**2
                  CONTENTS, RELOC, READONLY, DEBUGGING


The trunk version that I built (using also trunk binutils
and trunk avr-libc) is:
$ avr-gcc -v
Using built-in specs.
COLLECT_GCC=avr-gcc
COLLECT_LTO_WRAPPER=/misc/apps/avr8/tools_002/libexec/gcc/avr/4.10.0/lto-wrapper
Target: avr
Configured with: /home/df/src/gcc-trunk/configure
--prefix=/misc/apps/avr8/tools_002 --target=avr --enable-languages=c,c++
--with-gnu-as --with-gnu-ld --with-dwarf2 --with-avrlibc=yes
--enable-fixed-point --enable-doc --disable-libssp --disable-libada
--disable-shared -v
Thread model: single
gcc version 4.10.0 20140729 (experimental) (GCC)


The atmel gcc is:
$ avr-gcc -v
Using built-in specs.
COLLECT_GCC=avr-gcc
COLLECT_LTO_WRAPPER=/misc/apps/avr8/avr8-gnu-toolchain-linux_x86_64/bin/../libexec/gcc/avr/4.8.1/lto-wrapper
Target: avr
Configured with:
/data2/home/toolsbuild/jenkins-knuth/workspace/avr8-gnu-toolchain/src/gcc/configure
LDFLAGS=-L/home/toolsbuild/jenkins-knuth/workspace/avr8-gnu-toolchain/avr8-gnu-toolchain-linux_x86_64/lib
CPPFLAGS= --target=avr --host=x86_64-pc-linux-gnu
--build=x86_64-pc-linux-gnu
--prefix=/home/toolsbuild/jenkins-knuth/workspace/avr8-gnu-toolchain/avr8-gnu-toolchain-linux_x86_64
--libdir=/home/toolsbuild/jenkins-knuth/workspace/avr8-gnu-toolchain/avr8-gnu-toolchain-linux_x86_64/lib
--enable-languages=c,c++ --with-dwarf2 --enable-doc --disable-shared
--disable-libada --disable-libssp --disable-nls --with-avrlibc=yes
--with-mpfr=/home/toolsbuild/jenkins-knuth/workspace/avr8-gnu-toolchain/avr8-gnu-toolchain-linux_x86_64
--with-gmp=/home/toolsbuild/jenkins-knuth/workspace/avr8-gnu-toolchain/avr8-gnu-toolchain-linux_x86_64
--with-mpc=/home/toolsbuild/jenkins-knuth/workspace/avr8-gnu-toolchain/avr8-gnu-toolchain-linux_x86_64
--enable-fixed-point
--with-pkgversion=AVR_8_bit_GNU_Toolchain_3.4.3_1072
--with-bugurl=http://www.atmel.com
Thread model: single
gcc version 4.8.1 (AVR_8_bit_GNU_Toolchain_3.4.3_1072)

Other than that (and a bit pickier with aggregate initializers that
don't include all the elements), it builds functional firmware properly.

So I guess I would like you guys to confirm that this is a bug or regression, and let me know the bug reference if any.

Greetings
David Fernandez




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]