compréhension édition de liens
Bonjour à tous,
Ne sachant pas trop où poster ce message, je le fais ici.
J'ai un peu du mal à saisir les concepts de "INPUT/OUTPUT SECTIONS", que l'on recontre lors de l'édition des liens. Qu'est ce que cela signifie ? :etonne2:
De manière générale, j'ai quelques difficultés à comprendre la structure des fichiers "*.ld", utilisés par l'éditeur de lien. Si vous pouviez m'aider à en comprendre le fonctionnement à partir de l'exemple suivant, cela m'aiderait bien. :)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
OUTPUT_FORMAT("elf32-tradlittlemips")
OUTPUT_ARCH(mips)
SECTIONS
{
.com.vect.r 0xa1000000:
{
KEEP(* (.reset_vector))
}
.fake.vect.r :
{
. += SIZEOF(.com.vect.r);
} > flash
__com_rom_start = ALIGN(LOADADDR(.fake.vect.r) + SIZEOF(.fake.vect.r),0x10);
.com.vect.e 0x80000000: AT( __com_rom_start )
{
__com_ram_start = .;
KEEP(* (.except_vector))
} > ram
.com.vect.i 0x80000180: AT( LOADADDR(.com.vect.e) + 0x180 )
{
KEEP(* (.other_vector))
KEEP(* (.vsr_table))
*(.text.ram)
__com_ram_end = .;
} > ram
__com_bss_start = ALIGN(32) | 0x20000000;
.com.bss __com_bss_start :
{
*(.bss.usb)
__com_bss_end = ALIGN(32);
}
.fake.bss :
{
. = ALIGN(32);
. += SIZEOF(.com.bss) ;
. = ALIGN(32);
} > ram
__com_rom_cont = ALIGN(LOADADDR(.com.vect.i) + SIZEOF(.com.vect.i),0x10);
.com.vect __com_rom_cont : AT( __com_rom_cont )
{
KEEP(* (.rom_vectors))
*(.text.rom)
. = ALIGN(0x10);
} > flash
.com.stack :
{
/* Allocate room for stack */
_sp_top = .;
. += 4K ;
_sp = .;
} > ram
} |
Merci d'avance !