How to group objects from static library in a section?

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • wyse03br@yahoo.com.br

    How to group objects from static library in a section?

    Hi all,

    Using GNU linker ld, I'd like to create a section .rom_code
    grouping
    some routines and all its dependencies, including the implicit called
    ones such as math routines provided by libm.a. Going down in more
    details, my intention is creating a stand-alone ROM image containing
    several utility routines (with all its dependencies) that will be used
    by programs loaded in RAM.
    The C code is something like:


    % cat test.c <<HERE
    #include <stdio.h>
    #include <math.h>

    void _start() { main(); }

    extern int main();

    volatile float a, b, c;
    volatile float res;

    __attribute__(( section(".rom_c ode"))) void rom_function();
    void rom_function() {
    c = a / b; // Use implicitely libm.a routine
    res = sin(c); // Use explictly libm.a routine

    }

    int main() {
    rom_function();
    return 0;
    }

    HERE

    % gcc -g test.c -lm -Wl,-T lib.lnk

    Compiling and linking in the usual way, only the rom_function()
    went to ROM, not its dependencies. These are the references
    to .rom_code section, only the
    rom_function() routine can be found there:

    % objdump -x a.out | grep rom_code
    7 .rom_code 00000070 00008000 00008000 00018000 2**2
    00008000 l d .rom_code 00000000
    00008000 g F .rom_code 00000070 rom_function

    The sin() was placed in .text and not in .rom_code:

    % objdump -x a.out | grep sin
    00000000 l df *ABS* 00000000 s_sin.c
    00000000 l df *ABS* 00000000 k_sin.c
    00001438 g F .text 000000f8 __kernel_sin
    00000514 g F .text 000000ec sin

    The linker script used is:

    MEMORY
    {
    RAM_CODE : o = 0x0000 , l = 0x8000
    ROM_CODE : o = 0x8000 , l = 0x8000

    }

    SECTIONS
    {
    .bss : { *(.bss) } RAM_CODE
    .sbss : { *(.sbss) } RAM_CODE
    .rodata : { *(.rodata*) } RAM_CODE
    .got2 : { *(.got*) } RAM_CODE
    .data : { *(.data) } RAM_CODE
    .sdata : { *(.sdata*) } RAM_CODE

    .text : { *(.text .text.*) } RAM_CODE

    .rom_code : { *(.rom_code) } ROM_CODE

    }

    Any ideas on how to put also the rom_function() dependencies into
    ROM?

    Tks

    Walter
  • Jack Klein

    #2
    Re: How to group objects from static library in a section?

    On Thu, 27 Mar 2008 10:02:17 -0700 (PDT), wyse03br@yahoo. com.br wrote
    in comp.lang.c:
    Hi all,
    >
    Using GNU linker ld, I'd like to create a section .rom_code
    grouping
    some routines and all its dependencies, including the implicit called
    ones such as math routines provided by libm.a. Going down in more
    details, my intention is creating a stand-alone ROM image containing
    several utility routines (with all its dependencies) that will be used
    by programs loaded in RAM.
    The C code is something like:
    [snip]

    Your question has nothing at all to do with the C language, and
    everything to do with your particular tool set and target. C does not
    have ROM images or sections.

    You need to ask this question in a GNU support group, or, since you
    mention ROM, perhaps in news:comp.arch. embedded where such questions
    for embedded system development are topical. But if you ask there,
    you had better provide more information, such as the target and
    version of the tools.

    --
    Jack Klein
    Home: http://JK-Technology.Com
    FAQs for
    comp.lang.c http://c-faq.com/
    comp.lang.c++ http://www.parashift.com/c++-faq-lite/
    alt.comp.lang.l earn.c-c++

    Comment

    Working...