On 13/10/17 09:06, Sebastian Huber wrote:
> Hello,
> 
> I would like to update the documentation of these compiler flags and
> have some questions.  The -ffunction-sections and -fdata-sections
> documentation is currently:
> 
<snip>
> Do these options affect the code generation?
> 

-fdata-sections certainly can affect code generation on some targets.

Testing with this sample, using gcc 6.3 for the ARM with -O2:

int a, b, c;

void foo(void) {
    a = 1;
    b = 1;
    c = 1;
}

Generated assembly code is:

foo():
        mov     r2, #1
        ldr     r3, .L2
        str     r2, [r3]
        str     r2, [r3, #4]
        str     r2, [r3, #8]
        bx      lr
.L2:
        .word   .LANCHOR0


With -fdata-section, you get:

foo():
        mov     r3, #1
        ldr     r0, .L2
        ldr     r1, .L2+4
        ldr     r2, .L2+8
        str     r3, [r0]
        str     r3, [r1]
        str     r3, [r2]
        bx      lr
.L2:
        .word   .LANCHOR0
        .word   .LANCHOR1
        .word   .LANCHOR2


I only realised this recently, but it can make a significant difference
on targets that don't use direct addressing modes (such as ARM).  It is
maybe worth mentioning this in any changes to the gcc documentation.



Reply via email to