How to create a ROM library using GNU gcc and ld?



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>


extern int main();
void _start() { main(); }

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

__attribute__((section(".rom_code"))) 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
.



Relevant Pages

  • How to group objects from static library in a section?
    ... Using GNU linker ld, I'd like to create a section .rom_code ... ones such as math routines provided by libm.a. ... several utility routines (with all its dependencies) that will be used ... The sin() was placed in .text and not in .rom_code: ...
    (comp.lang.c)
  • Re: How to group objects from static library in a section?
    ... Using GNU linker ld, I'd like to create a section .rom_code ... ones such as math routines provided by libm.a. ... several utility routines (with all its dependencies) that will be used ... everything to do with your particular tool set and target. ...
    (comp.lang.c)
  • Re: How to create a ROM library using GNU gcc and ld?
    ... Using GNU linker ld, I'd like to create a section .rom_code ... some routines and all its dependencies, ... ones such as math routines provided by libm.a. ... my intention is creating a stand-alone ROM image containing ...
    (comp.arch.embedded)
  • Re: Generating documentation on the structure of a program
    ... student who wrote the code but didn't care to show the structure of ... Now i have to guess what the dependencies are, i mean, ... routines that it calls and vice versa. ...
    (comp.lang.fortran)