public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c/60084] New: GCC 4.8.3 miscompiles code on ARM at -Os optimization level
@ 2014-02-05 18:45 florin.iucha@hill-rom.com
  2014-02-05 18:46 ` [Bug c/60084] " florin.iucha@hill-rom.com
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: florin.iucha@hill-rom.com @ 2014-02-05 18:45 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60084

            Bug ID: 60084
           Summary: GCC 4.8.3 miscompiles code on ARM at -Os optimization
                    level
           Product: gcc
           Version: 4.8.3
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: florin.iucha@hill-rom.com

Using GCC built by Linaro.

Source code (ROMCopy.c from CodeWarrior 10.5)
   CW-MCU-v10.5\MCU\ARM_GCC_Support\ewl\EWL_Runtime\include\arm\ROMCopy.c

-8< ---8< ---8< ---8< ---8< ---8< ---8< ---8< --

RomInfo __S_romp[] __attribute__((weak));        /* linker defined symbol */

void __copy_rom_sections_to_ram(void)
{

    int                index;

    if (__S_romp == 0L) return;

    /*
     *    Go through the entire table, copying sections from ROM to RAM.
     */
    for (index = 0;
         __S_romp[index].Source != 0 ||
         __S_romp[index].Target != 0 ||
         __S_romp[index].Size != 0;
         ++index)
    {
        __copy_rom_section( __S_romp[index].Target,
                            __S_romp[index].Source,
                            __S_romp[index].Size );

        __flush_cache( __S_romp[index].Target, __S_romp[index].Size);


    }     
}

-8< ---8< ---8< ---8< ---8< ---8< ---8< ---8< --

Compiled with 4.7_2013q1
   gcc version 4.7.3 20130312 (release) [ARM/embedded-4_7-branch revision
196615] (GNU Tools for ARM Embedded Processors)
Command line
   arm-none-eabi-gcc -std=c11 -g -Wall -Wextra -Os -flto -ffunction-sections
-fdata-sections -fno-builtin -fomit-frame-pointer -mthumb -mcpu=cortex-m4
-mfpu=fpv4-sp-d16 -mfloat-abi=softfp  -DMK60N512VMD100 -D__thumb -I. 
-IGenerated_Code -ISources -Istartup
-I..\\..\\vendors\\Freescale\\1.0.0\\Kinetis\\pdd\\inc   
-DUNALIGNED_SUPPORT_DISABLE -mno-unaligned-access  -c -o obj.gcc/ROMCopy.o
./startup/ROMCopy.c

Produces:

Disassembly of section .text.__copy_rom_sections_to_ram:

00000000 <__copy_rom_sections_to_ram>:
   0:    b510          push    {r4, lr}
   2:    4c0a          ldr    r4, [pc, #40]    ; (2c
<__copy_rom_sections_to_ram+0x2c>)
   4:    b18c          cbz    r4, 2a <__copy_rom_sections_to_ram+0x2a>
   6:    3408          adds    r4, #8
   8:    f854 1c08     ldr.w    r1, [r4, #-8]
   c:    b131          cbz    r1, 1c <__copy_rom_sections_to_ram+0x1c>
   e:    f854 0c04     ldr.w    r0, [r4, #-4]
  12:    f854 2b0c     ldr.w    r2, [r4], #12
  16:    f7ff fffe     bl    0 <__copy_rom_sections_to_ram>
  1a:    e7f5          b.n    8 <__copy_rom_sections_to_ram+0x8>
  1c:    f854 3c04     ldr.w    r3, [r4, #-4]
  20:    2b00          cmp    r3, #0
  22:    d1f4          bne.n    e <__copy_rom_sections_to_ram+0xe>
  24:    6820          ldr    r0, [r4, #0]
  26:    2800          cmp    r0, #0
  28:    d1f1          bne.n    e <__copy_rom_sections_to_ram+0xe>
  2a:    bd10          pop    {r4, pc}
  2c:    00000000     .word    0x00000000

-8< ---8< ---8< ---8< ---8< ---8< ---8< ---8< --

Compiled with 4.8_2013q4
   gcc version 4.8.3 20131129 (release) [ARM/embedded-4_8-branch revision
205641] (GNU Tools for ARM Embedded Processors)
Command line
   arm-none-eabi-gcc -std=c11 -g -Wall -Wextra -Os -flto -ffunction-sections
-fdata-sections -fno-builtin -fomit-frame-pointer -mthumb -mcpu=cortex-m4
-mfpu=fpv4-sp-d16 -mfloat-abi=softfp  -DMK60N512VMD100 -D__thumb -I. 
-IGenerated_Code -ISources -Istartup
-I..\\..\\vendors\\Freescale\\1.0.0\\Kinetis\\pdd\\inc   
-DUNALIGNED_SUPPORT_DISABLE -mno-unaligned-access  -c -o obj.gcc/ROMCopy.o
./startup/ROMCopy.c

Produces:

00000000 <__copy_rom_sections_to_ram>:
   0:    b508          push    {r3, lr}
   2:    4b07          ldr    r3, [pc, #28]    ; (20
<__copy_rom_sections_to_ram+0x20>)
   4:    b15b          cbz    r3, 1e <__copy_rom_sections_to_ram+0x1e>
   6:    6819          ldr    r1, [r3, #0]
   8:    b119          cbz    r1, 12 <__copy_rom_sections_to_ram+0x12>
   a:    6858          ldr    r0, [r3, #4]
   c:    689a          ldr    r2, [r3, #8]
   e:    f7ff fffe     bl    0 <__copy_rom_sections_to_ram>
  12:    685a          ldr    r2, [r3, #4]
  14:    2a00          cmp    r2, #0
  16:    d1f8          bne.n    a <__copy_rom_sections_to_ram+0xa>
  18:    689a          ldr    r2, [r3, #8]
  1a:    2a00          cmp    r2, #0
  1c:    d1f5          bne.n    a <__copy_rom_sections_to_ram+0xa>
  1e:    bd08          pop    {r3, pc}
  20:    00000000     .word    0x00000000


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2014-02-05 19:22 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-02-05 18:45 [Bug c/60084] New: GCC 4.8.3 miscompiles code on ARM at -Os optimization level florin.iucha@hill-rom.com
2014-02-05 18:46 ` [Bug c/60084] " florin.iucha@hill-rom.com
2014-02-05 18:46 ` florin.iucha@hill-rom.com
2014-02-05 19:07 ` [Bug target/60084] " florin.iucha@hill-rom.com
2014-02-05 19:09 ` pinskia at gcc dot gnu.org
2014-02-05 19:15 ` florin.iucha@hill-rom.com
2014-02-05 19:17 ` florin.iucha@hill-rom.com
2014-02-05 19:22 ` pinskia at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).