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



             Bug #: 56139

           Summary: unmodified static data could go in .rodata, not .data

    Classification: Unclassified

           Product: gcc

           Version: 4.8.0

            Status: UNCONFIRMED

          Severity: enhancement

          Priority: P3

         Component: tree-optimization

        AssignedTo: unassig...@gcc.gnu.org

        ReportedBy: amker.ch...@gmail.com





For below program:



static int x[] = {1, 2, 3, 4};



void bar (int x);

int func(int i)

{

    int * const p = (int * const)&x;

    bar(p[i]);



    return 0;

}



build with:

arm-none-eabi-gcc -mthumb -mcpu=cortex-m0 -Os ...



The generated assembly code is:

    .text

    .align    1

    .global    func

    .code    16

    .thumb_func

    .type    func, %function

func:

    push    {r3, lr}

    ldr    r3, .L2

    lsl    r0, r0, #2

    ldr    r0, [r0, r3]

    bl    bar

    @ sp needed for prologue

    mov    r0, #0

    pop    {r3, pc}

.L3:

    .align    2

.L2:

    .word    .LANCHOR0

    .size    func, .-func

    .data

    .align    2

    .set    .LANCHOR0,. + 0

    .type    x, %object

    .size    x, 16

x:

    .word    1

    .word    2

    .word    3

    .word    4



while GCC 4.6 puts x in .rodata.

Reply via email to