http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30417
Andreas Fritiofson <e9fritte at etek dot chalmers.se> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |UNCONFIRMED Known to work|4.2.0 | Host|i486-linux-gnu |x86_64-linux-gnu Version|4.1.0 |4.8.2 Resolution|WORKSFORME |--- Build|i486-linux-gnu |x86_64-linux-gnu Severity|normal |minor --- Comment #5 from Andreas Fritiofson <e9fritte at etek dot chalmers.se> --- Just updating this to note that this still/again fails, however not exactly the same as in my original report. Using --section-data=.data=0x800200 correctly overrides the -Tdata 0x800100 that gcc adds for some AVRs. But the (according to ld docs) equivalent -Tdata=0x800200 is silently discarded and the .data section remains at 0x800100, causing havoc at runtime. Can't tell if this is a bug in binutils or if this is intended behavior and gcc should adapt the collect2 arguments to avoid triggering it. Minimal test cases: $ avr-gcc -v Using built-in specs. COLLECT_GCC=avr-gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/avr/4.8.2/lto-wrapper Target: avr Configured with: ../src/configure -v --enable-languages=c,c++ --prefix=/usr/lib --infodir=/usr/share/info --mandir=/usr/share/man --bindir=/usr/bin --libexecdir=/usr/lib --libdir=/usr/lib --enable-shared --with-system-zlib --enable-long-long --enable-nls --without-included-gettext --disable-libssp --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=avr Thread model: single gcc version 4.8.2 (GCC) $ avr-ld -v GNU ld (GNU Binutils) 2.23.1 $ echo 'int main(void) { return 0; }' > main.c Works: $ avr-gcc -mmcu=atmega88 -Wl,-Map,main.map,--section-start,.data=0x800200 -o main.elf main.c && grep ^.data < main.map .data 0x0000000000800200 0x0 load address 0x000000000000005c Fails: $ avr-gcc -mmcu=atmega88 -Wl,-Map,main.map,-Tdata=0x800200 -o main.elf main.c && grep ^.data < main.map .data 0x0000000000800100 0x0 load address 0x000000000000005c Works: $ avr-gcc -mmcu=atmega8 -Wl,-Map,main.map,-Tdata=0x800200 -o main.elf main.c && grep ^.data < main.map .data 0x0000000000800200 0x0 load address 0x000000000000004e