Make GCC initialize global variables generating instructions in crti.S _init

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



As illustrated in the example below, when initializing a global
variable using a symbol reference, GCC generates .quad assembly
statement; and when initializing a local variable using a symbol
reference, GCC generates instructions.

Is there a way to make GCC generate instructions within the crti.S
_init function to initialize a global variable, instead of generating
.long or .quad assembly statement ?
The idea being to make GCC generate instructions to initialize a
global variable, just like it generates instructions to initialize a
local variable.

Example for illustrating GCC default initialization behavior when
initializing global variable myglobal and local variable mylocal:

    void myfunc (void) {}
    void *myglobal = myfunc;
    void main (void) {
            void *mylocal = myfunc;
    }

GCC generates the following assembly:

            .text
            .globl  myfunc
            .type   myfunc, @function
    myfunc:
            pushq   %rbp    #
            movq    %rsp, %rbp      #,
    # test.c:1: void myfunc (void) {}
            nop
            popq    %rbp    #
            ret
            .size   myfunc, .-myfunc
            .globl  myglobal
            .section        .data.rel.local,"aw",@progbits
            .align 8
            .type   myglobal, @object
            .size   myglobal, 8
    myglobal:
            .quad   myfunc
            .text
            .globl  main
            .type   main, @function
    main:
            pushq   %rbp    #
            movq    %rsp, %rbp      #,
    # test.c:4:    void *mylocal = myfunc;
            leaq    myfunc(%rip), %rax      #, tmp87
            movq    %rax, -8(%rbp)  # tmp87, mylocal
    # test.c:5: }
            nop
            popq    %rbp    #
            ret
            .size   main, .-main



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux