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]

[AVR] Target specific regression test causes virtual memory exhaustion


On a 64 bit machine, executing

$ make check RUNTESTFLAGS="avr-torture.exp=builtins-1.c --target_board=atxmega128a1"

causes virtual memory allocation failure and/or large scale machine
slowdown, with cc1 using up gobs (>35G) virtual memory.

I tracked this down to

void delay_4 (void)  { __builtin_avr_delay_cycles (-1ul); }

In avr_expand_delay_cycles, the operand is converted into a
HOST_WIDE_UINT, which on a 64 bit machine is 0xFFFFFFFFFFFFFFFF. The
range checks therefore get bypassed and the while(cycles >= 2) loop near
the end keeps generating nops, exhausting memory.

Given that avr_init_builtins declares delay_cycles builtin to take
take an unsigned long (which I guess is 4 bytes for the AVR target),
should the code be changed to consider only the lower 4 bytes? Or did I
do something wrong?

Regards
Senthil





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