Avr-gcc Bugs

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

Bugs

PR Description Note
92606 Invalid merge of symbols in progmem and data sections (WA: -fno-ipa-icf-variables) IPA
87376 Miscompilation with __memx and long long addition 86635
86869 ICE when taking address of array member of __memx struct pointer
86776 Need updating for CVE-2017-5753
86635 Wrong code with __memx and __gtsf2
81073 Link failure as C++ misses to instanciate some objects C++
80573 ICE: in assign_temp, at function.c:961
78707 ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)
78497 -save-temps adds -Wimplicit-fallthrough warnings
68384 LTO error for global register variables
67352 incorrect warning with -Waddr-space-convert and struct in __flash
65657 read from __memx tramples function argument 86635
64331 avr.c:reg_unused_after uses outdated reg_dead notes
63630 ICE: Spill fail
62084 ICE: in convert_debug_memory_address (__memx, -g) middle-end → 52472
57597 ICE: in get_section, Segmentation fault with -fmerge-all-constants varasm
57482 --help=optimizers reports a wrong list
56479 ICE: can't allocate two 4-byte variables to "a" for inline asm
56442 postreload uses clobbered register
56183 Problems with register allocation meta-bug
56164 ICE: spill fail with __flash keyword
54330 Wrong optimization for code from fixed-bit.c
53615 Buffer overflow in the compiler?
52663 ICE: in purge_dead_edges, at cfgrtl.c:2462
52305 ICE: in avr_print_operand: unknown mode (const_double) asm
50925 ICE: spill failure in newlib build
50739 nameless error with -fmerge-all-constants
49775 ICE: in based_loc_descr dwarf-2
42204 update_eliminables should be called in reload after something changes
36571 Default untyped return for AVR is byte register.

Binutils / avr-libc

PR Description Note
binutils
16005 Linker crash with --relax
13812 .trampolines location in linker script cause "internal error: out of range error"
12494 Relaxation leads to wrong code optimization
binutils fixed
31321 Remove PROVIDE from definition of symbol __flmap_init_label 2.43
31124 Support new Emulations for Devices with FLMAP 2.42 rodata-in-flash
31177 Use __TEXT_REGION_ORIGIN__ as start for MEMORY region text 2.42
21621 Wrong / missing warning "skipping two-word instruction" 2.29.x
21849 Locate .progmemx.* at a higher address 2.29.x
21683 Support __gcc_isr pseudo-instruction 2.29
21583 Move .jumptables to a higher address 2.29
21569 Merge avr.sc and avrtiny.sc 2.29
21472 Add new emulation for ATtiny416 et al. (don't put .rodata in RAM) 2.29 rodata-in-flash
21404 Assertion fail in bfd/elf32-avr.c:2145 2.28
20849 Don't put .rodata in RAM on AVR_TINY. 2.28 rodata-in-flash
20789 Fix relaxation of negative DIFF relocs. 2.26
20254 Relocs at end of section are not processed with .align. 2.26
20221 Wrong code with .align and linker relaxation. 2.26
15043 Support -mrmw option for LAC, LAT, LAS and XCH. 2.25
14058 Internal overflow error on > 128kB flash 2.23
13899 Wrong relaxation of R_AVR_16_PM with gs() 2.23
13697 Wrong symbol values with --gc-sections and empty .data 2.23
13503 Support RELOCs to represent a byte 2.23
13410 Relocation truncated to fit: R_AVR_13_PCREL against symbol... 2.23
12742 mingw32 and --enable-lto in Canadian cross build 2.23
12161 Unconforming ELF file causes SIGSEGV in avr-ld 2.23, 2.22.x
avr-libc
57114 Do not #define abs / labs →57071
57071 Fix math.h and function names that block 64-bit double 2.2
49567 Use meta-info from --print-multi-lib and --print-multi-directory 2.2
P-9416 [patch,AVR_TINY] Avoid constraint "w" in delay_basic.h Patch
P-9400 [patch] Add avrxmega3 multilibs
P-9187 [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.
P-8729 [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.
38135 Install stdfix-avrlibc.h
38125 Distribute gcrt1.S
36571 stdint.h: INTn_C not standard compliant
36454 string.h: Error for long long in C90 1.8.1
35407 Missing multilib versions for tiny-stack targets
34695 stdint.h fixed-width int types without __attribute__((mode))
33698 RJMP/RCALL can cause "relocation truncated to fit: R_AVR_13_PCREL" linker error √ ?

Optimierung

PR Optimization Note
110093 Move frenzy leading to code bloat. Regression
109910 Prologue/epilogue saves/restores regs that are never changed.
109907 Code bloat for single bit extractions
88209 Inefficient array initialization
84211 Perform a post-reload register optimization pass Patch
82658 Right-shifting 8-bit unsigned integers. C++
81625 v4.7 ... v8 is bloating code by > 25% compared to v3.4
81611 gcc un-learned loop / post-increment optimization
81540 tree-switch-conversion leads to code bloat tree-ssa
81533 Constructing an object that can be initialized at at load-time c++
80929 Division with constant no more optimized to mult middle-end
65082 Wasted cycles when using a register based varible
56439 unnecessary spill for global and local register variables
55181 Expensive shift loop instead of bit-testing instruction
54378 Code bloat for long << shifts
53049 expand/TER unappropriate moving unspec volatile middle-end
52664 gcc.dg/tree-ssa/pr31261.c fails ssa
52278 inefficient register allocation for SUBREGs RA
49807 Missed byte (subreg) extraction when storing to volatile mem
49491 Superfluous move because of unnecessary spill for 2-operand insn RA
39760 register allocation costs are not well described on AVR
38629 target-specific parameters for inline heuristics not defined for AVR
36884 ifcvt poor optimization RTL-optimize, -fno-if-conversion
36561 store using long array index not hoisted out of loop
30908 tree cost for types which are > WORD_SIZE
27663 missed-optimization transforming a byte array to unsigned long patch upstream
18065 usual arithmetic conversion not applying correctly
11180 Optimization decrease performance of struct assignment.
3507 appalling optimisation with sub/cmp on multiple targets

Debug-Info, Build, ...

PR Debug-Info, Build, Ada, Fortran Note
52641 Test cases fail for 16-bit int targets testsuite

Erweiterungen

PR Extensions Note
84163 Allow address space qualifier for compound literals C
57390 Support fixed-point types in C++ C++

Ungültig

PR Invalid Note
61044 Computed goto with label differences does not work → Label differences not suported on AVR:
Labels as Values
57501 crttn24a.o missing path with -mmcu=attiny24a → Caused by AVR-LibC #35407
52474 mulhisi3: arithmetics produce completely wrong result → Caused by patch from Atmel
38549 eicall not properly set for > 128K program space 50820
 
PR Won't fix Note
14406 Support .progmem<N>.data sections in the default ld script Begründung + Beispiel für ld-Skript Erweiterung
56254 Support __builtin_avr_delay_cycles with non-const delays
49857 Put constant switch-tables into flash (patch)
43745 Put VTABLES in Flash
38342 __attribute__((progmem)) not propagated from typedef to data avr-libc #33716

Fixed

PR Fixed Note
114100 Better indirect addressing on reduced Tiny 14
113156 avr build broken: ICE: 'global_options' are modified in local context 14
112944 Support .rodata in Flash for Devices with FLMAP 14
112830 ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302 14
101188 Uses content of a clobbered register 14
113927 [avr-tiny] Sets up a stack-frame even for trivial code 13.3
105523 Avoid diagnostic "array subscript 0 is outside array bounds of 'volatile uint8_t[0] [-Warray-bounds]" 13.3
53372 Section attribute ignored with address space 13.3
113824 ATA5795 in wrong multilib set 13.3, 12.4
112952 Fix attributes address, io and io_low 13.3, 12.4
107201 -nodevicelib not working together with -mmcu=avr* devices 13.3, 12.4
109650 Wrong code with -Os (cc0 → CCmode fallout) 13.2, 12.4
105753 ICE: in add_clobbers, at config/avr/avr-dimode.md:2705 13.2, 12.4
99184 Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc. 12.3, 11.4, 10.5
90706 Useless code generated for stack / register operations 12.3
92729 Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+ 11.0
92055 Support 64-bit double 10.0
 
86040 RAMPZ not cleared after reading from __flashN 9.3, 8.4, 7.5
85805 Wrong code for 64 bit comparisons on avr-gcc 8.3 combine
85495 lto-wrapper.exe: fatal error: file too short: No error 8.0 LTO
83801 String constant in __flash not put into .progmem 8.0 C
83729 ICE in convert_memory_address_addr_space_1 at explow.c:300 8.0 C
83738 Don't save registers in main / auto-add OS_task to main 8.0
81754 Building of avr compiler broken 8.0
20296
81268
Speeding up small ISRs
Support __gcc_isr pseudo-instruction
8.0
81075 Move jump-tables out of .text 8.0
81072 Add XMEGA devices with flash seen in RAM address space 8.0
 
84209 Don't split SP in split2 7.4
81910 ICE with "address" attribute on type 7.3, 6.5, 5.5
81487 ld.exe: error: asprintf failed 7.2, 6.5, 5.5 mingw32
81473 Build fails due to INT8_MIN and friends 7.2
81407 C++: Error if a variable in progmem needs constructing 7.2, 6.5, 5.5
81305 avrtiny uses LDS for SREG with -O0 7.2, 6.5, 5.5
80492 Wrong code whith loop unrolling and local asm regs 7.2, 6.4 tree
79883 i18n: untranslated "interrupt" or "signal" 7.2, 6.5, 5.5
75964 Insn-combiner removes comparison after ABS 7.2, 6.5, 5.5 rtl
78883 ICE triggered by change to combine.c 7.0
78562 Wrong warning for built-in functions with -flto 7.0
78093 New variable attribute "absdata" to enable LDS / STS on Reduced Tiny 7.0
71948 Make progmem work on reduced Tiny by adding 0x4000 to symbols 7.0
71678 ICE from switch / case on long long (casesi + DImode) 7.0
71676 casesi won't handle switch values larger than 16 bits 7.0
60300 Minor prologue improvement w.r.t code size 7.0
41076 Pessimal code for logical OR of 8-bit fields 7.0
 
67353 Option-ize Warning "appears to be a misspelled signal / interrupt handler" 6.5, 5.5
80462 Incorrect warning: uninitialized variable 'xxx' put into program memory area 6.4, 5.5
77326 Invalid optimization omits comparison 6.3, 5.5
72767 Some branches report too small insn length 6.2, 5.5
71976 insn-combine removes 64-bit shift 6.2, 5.5
71151 Strings in .progmem.gcc_sw_section with -fdata-sections + const merging 6.2
71103 ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref 6.2, 5.5, 4.9.4
71053 volatile read-and-test loop optimized to test loop (without read) 6.2
70677 Disable -fcaller-saves per default 6.2
30417 Wrap spec generating -Tdata into %{!Tdata:...} 6.2, 5.5, 4.9.4
67839 Bit addressable instructions generated for invalid memory address 6.0
 
65296 fix various issues with avr specs files 5.2 → avr-libc #44574
65192 ICE: attiny: In tiny_valid_direct_memory_access_range 5.0 (transient)
52472 ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g) 5.0

Älter als v5

PR Fixed Note
65196 ICE: avr_adjust_insn_length uses recog_memoized on invalid insn 4.9.3
64452 ICE: When passing struct member to varargs function 4.9.3, 4.8.5
63633 ICE: unrecognizable insn with mult insns 4.9.3
63223 Make jumptables work with -Wl,--section-start,.text= 4.9.2
61443 ICE: unrecognizable insn when varargs argument is indirect addr-space access 4.9.1, 4.8.4
61055 Wrong test instruction after increment (-O1 or -fno-peephole2) 4.9.1, 4.8.3, 4.7.4
60991 Stack corruption when using __memx pointers or __int24 in large stack frame 4.9.1, 4.8.3, 4.7.4
56833 Postreload uses clobbered register 4.9.0
50807 Constructor writing to RAM for variable in Flash 4.9.0
 
60486 Superfluous or missing comparision after addition or subtraction 4.8.3
59396 Wrong warning with ISR() and LTO 4.8.3, 4.8.1
57844 ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes 4.8.2, 4.7.4
57631 Use assembler name for sanity checking of ISR names 4.8.2, 4.7.4
57516 Incorrect fixed-point rounding result in the overflow case 4.8.2
57506 Some devices are present twice in avr-mcus.def 4.8.2, 4.7.4
56263 Provide strict address-space checking 4.8.0
56064 Fold VIEW_CONVERT_EXPR with FIXED_CST 4.8.0 tree-ssa
54814 ICE: Hundreds of spill fails in test suite for class R0_REG 4.8.0.
54854 Remove -mshort-calls option 4.8.0
54815 missed optimization with operations with constant operands 4.8.0
54222 ISO/IEC TR 18037 fixed-point support 4.8.0
53344 Assemble 3-byte symbols 4.8.0
 
55974 Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8 4.7.3
55897 Allocate __memx data to .progmemx.data 4.7.3
55243 [ada] STAMP variable is not defined in t-avr 4.7.3
50293 -flto fails if GCC is installed in directory with space in path name 4.7.3
54536 Incorrect library_name for at90usb1287 4.7.2, 4.6.4
54476 Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts 4.7.2
54461 Add configure option for better AVR-Libc integration 4.7.2
54220 Naked functions need frame at -O0 4.7.2, 4.6.4
53595 Code size increase of +10% between two 4.7.1 snapshots 4.7.2
53448 __attribute__((aligned(2))) ignored 4.7.1
53256 Attribute 'interrupt' shall override attribute 'signal' 4.7.1
53065 ICE: in replace_reg_with_saved_mem, at caller-save.c:1125 4.7.1
53033 Wrong register number for 3-byte loads via X 4.7.1
52737 -mtiny-stack shall not influence multilib selection 4.7.1
52692 Add support for avr-specific built-ins + LTO 4.7.1
52545 SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP 4.7.1 other
52543 lower-subreg.c: code bloat of 300%-400% for multi-word memory splits HACK 4.7.1 middle-end
52508 HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate 4.7.1
52507 movmem loop for __memx address space uses wrong loop label 4.7.1
52506 XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue 4.7.1
52505 __memx address space reading unintentionally from RAM 4.7.1
52496 avr-specific built-ins missing memory barrier 4.7.1
52488 ICE: unreconizable addqi -2000 insn 4.7.1
52484 Missing __memx insn because of wrong register footprint 4.7.1
52461 XMEGA+EBI: RAMPZ clobbered 4.7.1
51527 ICE: 'convert_to_integer' enters infinite recursion for __int24 4.7.1 c
46261 ICE: when compiled with -mint8 4.7.1, 4.6.4, 4.5.4
52261 Add XMEGA support 4.7.0
52148 ICE: spill_failure for movmemhi 4.7.0
51782 Missing address-space information leads to wrong code 4.7.0 middle-end
51425 no SBIS/SBIC instructions 4.7.0
51409 Building avr-gcc fails if configured for other languages than from C family 4.7.0
51345 Devices with 8-bit SP need their own multilib(s) 4.7.0 ABI
51050 ICE: invalid rtl sharing found in the insn (ATtiny26) 4.7.0
51002 SP_H register is used even on targets that do not have it (ATtiny26) 4.7.0
50931 Support a 24-bit scalar integer mode 4.7.0
50910 Inefficient division by 2 4.7.0
50887 Support ACCUMULATE_OUTGOING_ARGS 4.7.0
50775 Register allocator sets up frame and frame pointer with low register pressure 4.7.0, ra
50616 ICE: lto1.exe: invalid resolution in the resolution file 4.7.0, lto, mingw32
50566 Add support for better logging by means of -mlog= 4.7.0
50465 Use insn attribute to depict if and how instruction lengths have to be adjusted 4.7.0
50449 Loading some 32-bit constants not optimal 4.7.0
50448 Missed optimization accessing struct component with integer address 4.7.0 middle-end
50447 Better support of AND, OR, XOR and PLUS with constant integers 4.7.0
50446 Implement rotate patterns with offset 1 4.7.0
50358 Implement [u]maddqihi4 [u]msubqihi4 patterns 4.7.0
50063 wrong code for gcc.dg/torture/pta-ptrarith-3.c 4.7.0
49939 Skip 2-word instructions if applicable 4.7.0
49903 Redundant comparisons in binary-seach switch/case expansion 4.7.0 FIXME
49881 Inefficient stack manipulation around calls 4.7.0
49868 Implement named address space to place/access data in flash memory 4.7.0 ← binutils PR13503
49864 ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439 4.7.0
49687 Missed optimization for widening MUL 4.7.0 ABI
49313 Inefficient libgcc implementations for avr 4.7.0 ABI
47597 ICE: call frame debugging information is not handled when case is post_dec 4.7.0
46278 avr-gcc 4.5.1 doing suboptimal reloads using X 4.7.0
45099 Warning could be issued for use of register variables that will fail. 4.7.0
43746 -fmerge-constants and -fmerge-all-constants don't work at AVR target 4.7.0
42210 optimizing assignment to a bit field 4.7.0
39621 Delaying operation to end of function causes high stack usage 4.7.0
36467 Missed optimization with pointer arithmetic and mul* 4.7.0
35860 [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types 4.7.0
34888 Stack patterns not optimal 4.7.0
34792 c++ worse than c compiler at 8-bit optimisations 4.7.0
34791 optimisation of 8-bit logic sometimes fails 4.7.0
34790 no sibling call optimisation 4.7.0
34789 sometimes the compiler keeps addresses in registers unnecessarily 4.7.0
33049 bit extraction non optimal, inversing logic solves problem 4.7.0
29560 Poor optimization for byte shifts 4.7.0
29524 [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked 4.7.0
18145 Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. 4.7.0
17994 avr-gcc does not output a dwarf2 .debug_frame section 4.7.0
 
52741 -mtiny-stack must not make assumptions on upper 8 bits of SP/FP 4.6.4
51756 Wrong warning: uninitialized variable put into program memory area 4.6.3
51374 insn combine reorders volatile memory accesses 4.6.3 middle-end
50820 Use EIND consistently 4.6.2, 4.5.4
50816 Discriminators are emitted in DWARF 2 format 4.6.2
50652 Incorrect data start value for ATmega164A 4.6.2
50289 call-prologues saving/restoring global register variables 4.6.2
49824 Missing documentation for OS_task and OS_main attributes 4.6.2
49764 [avr-g++] Rejects attribute progmem 4.6.2
49487 ICE: bytewise rotate 4.6.2
46779 wrong code generation for values held in R28/R29 4.6.2, 4.5.4
34734 attribute((progmem)) not handled properly in C++ for AVRs 4.6.2 → avr-libc #33716
44643 ICE: in c-typeck.c 4.6.2 → avr-libc #32988
39633 missing 8-bit comparison (*cmpqi) 4.6.2, 4.5.4
39386 different computation results for O1 and O0 executables 4.6.2
48459 [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2 4.6.1
45263 registers used in __do_global_ctors can get clobbered 4.6.1, 4.5.4
 
45261 Doesn't indicate failure status when it doesn't support (attiny2313A) 4.5.3
42240 [4.3/4.4 Regression] wrong epilogue on naked function 4.5.3
41885 Rotate patterns do not correctly consider overlap. 4.5.0

Weblinks