Fragen zu Linker Script

Gast #3687319
Lesenswert?

Schönen guten Morgen,

ich hätte da ein paar Fragen zu Linker scripts:
1. im Example der ld Beschreibung sieht es recht einfach aus:
1
SECTIONS {
2
  outputa 0x10000 :
3
    {
4
    all.o
5
    foo.o (.input1)
6
    }
7
  outputb :
8
    {
9
    foo.o (.input2)
10
    foo1.o (.input1)
11
    }
12
  outputc :
13
    {
14
    *(.input1)
15
    *(.input2)
16
    }
17
}

Ich habe nun im meinem Projekt einige Funktion via Attribute in 
mySection gemaped, dies funktioniert auch nur möchte ich zusätzlich die 
uart.c->.o in diese Section legen, dies müsste doch so funktionieren?
1
  mySection 0x07800000 : AT (0x07800000)
2
  {
3
    uart.o
4
  *(mySectionFunctions)
5

6
  }
7
  .text 0xFFFF0100 : AT (0xFFFF0100)
8
  {
9
    *(.text)
10
    *(.text.*)
11
    *(P)
12
    etext = .;
13
  }

Sobald ich das aber bei mir anwende bekomme ich sofort einen "multiple 
definition of" Error des Linkers für die Funktion die in der uart.o ist. 
Die mySectionFunctions versehenen Funktionen sind richtig.

2. Gibt es eine Möglichkeit ein gesamtes Archiv .a File via Linker 
script in eine section zu legen, oder muss ich die .o des .a raustrennen 
und einzelen dann einfügen (falls der erste Punkt gelöst ist)

3. gcc hat doch .text für Funktionen und .rodata für const Daten. Er 
legt aber noch weitere Daten an die nur mit "C" im Map erscheinen. Sieht 
aus aus als wären dies zB JumpTable einer Switch Anweisung in einer 
Funktion. Muss ich die händisch mappen? Das komische ist nämlich, dass 
die Funktionen der mySectionFunctions zwar in der richtigen Section 
liegen, der linker aber stur die C Informationen in der .rodata belässt.
1
  .rodata :
2
  {
3
    *(.rodata)
4
    *(.rodata.*)
5
    *(C_1)
6
    *(C_2)
7
    *(C)
8
    _erodata = .;
9
  }

Vielen Dank für Eure Unterstützung, stehe ich wirklich an und bräuchte 
Hilfe!

Hans
PS.: gcc 4.7.3

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren