https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63223
Jorn Wolfgang Rennecke <amylaar at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |amylaar at gcc dot gnu.org --- Comment #4 from Jorn Wolfgang Rennecke <amylaar at gcc dot gnu.org> --- (In reply to Georg-Johann Lay from comment #1) > Author: gjl > Date: Thu Sep 11 08:08:17 2014 > New Revision: 215152 > > URL: https://gcc.gnu.org/viewcvs?rev=215152&root=gcc&view=rev > Log: > gcc/ > PR target/63223 > * config/avr/avr.md (*tablejump.3byte-pc): New insn. > (*tablejump): Restrict to !AVR_HAVE_EIJMP_EICALL. Add void clobber. > (casesi): Expand to *tablejump.3byte-pc if AVR_HAVE_EIJMP_EICALL. > libgcc/ > PR target/63223 > * config/avr/libgcc.S (__tablejump2__): Rewrite to use RAMPZ, ELPM > and R24 as needed. Make work for all devices and .text locations. > (__do_global_ctors, __do_global_dtors): Use word addresses. do_global_dtors is supposed to start at the start and increment from there. I see it used to be half-way wrong and half-way correct. (Starting at the start, decrementing for __AVR_HAVE_ELPM__, incrementing otherwise.) However, you now made it all the way use an incorrect order - starting at the end and incrementing from there. Is there a rationale for this?