Hallo Leute,
ich möchte die Linkersektion .vectors vor die .text Sektion "packen".
Die .text-Sektion soll also direkt hinter der .vectors Sektion beginnen.
Beide Sektionen werden vom Linker aber an Adresse 0x0 gelegt.
Mein Linkerskript link.ld:
Es gibt nur einen Prozessor - wir kennen ihn alle.
Es gibt nur einen Assembler - wir kennen ihn alle.
Es gibt nur einen Compiler - wir kennen ihn alle.
Es gibt nur einen Linker - wir kennen ihn alle.
Es gibt nur eine IDE und die ist natürlich von Microdings.
Daher sind weitere Angaben überflüssig.
Moin,
tut mir leid, Beitragen kann ich dazu nichts.
Ich hätte aber mal ne wirklich interessierte Frage. Warum brauchst du
das? (Ist keine Trollerei oder hinweis auf unnötigkeit. Ich möchte es
wirklich wissen)
Grüße,
Hallo!
nicht"Gast" schrieb:> Ich hätte aber mal ne wirklich interessierte Frage. Warum brauchst du> das? (Ist keine Trollerei oder hinweis auf unnötigkeit. Ich möchte es> wirklich wissen)
Ich baue mir ein FPGA-m68k-System mit TG68 Softcore von OpenCores.org.
Eine erste Version ist hier auf Github:
https://github.com/dirkmo/m68kfpga
Mit UART, Timer, SPI-Flash, SD-Karte + FatFS. Das ist für ein
Xilinx-Spartan3-Starterkit-Board gedacht. Meinen Xilinx Programmer
bekomme ich seit dem letzten Ubuntu-Update nicht mehr zum Laufen.
Da ich eh mit ein paar Sachen unzufrieden war, mache ich einen
Projektneustart auf einem Altera Board (DE0-CV) und will den Wishbone
Bus benutzen (hauptsächlich wegen der SD-Ram-Controller von OpenCores,
die Wishbone benutzen).
Meine Linkerskripte funktionieren zwar, aber ich möchte der "Schönheit"
wegen die Vektortabelle usw. nicht in der Text-Sektion haben.
hp-freund schrieb:> Dirk schrieb:>> SECTIONS>> {>> .vectors :>> {>> *(.vectors )>> } > rom>> statt:> *(.vectors )>> schreibe:> KEEP(*(.vectors))>> http://stackoverflow.com/questions/9827157/what-do...
Danke für den Hinweis. KEEP hatte ich auch schon ausprobiert, löst mein
Problem aber nicht: Die Vektoren werden vom Linker nicht entfernt,
sondern die .vector und .text Sektionen bekommen die gleiche Adresse.
Mit oder ohne KEEP macht da keinen Unterschied.
Hier das Disassembly (mit KEEP):
hp-freund schrieb:> Na dann:> SECTIONS> {> .text :> {> KEEP(*(.vectors))> . = ALIGN(0x4);> *(.text .text.*)> _etext = .;> } > rom>> Evtl. noch ein ALIGN(0x4) davor, dann können die "vectors" nirgend wo> anders hin ...
Hallo hp-freund,
ich möchte die Vektoren nicht in der .text Sektion haben. Klar kann ich
die in die .text Sektion legen, das mache ich auch bisher so und das
funktioniert auch, aber es ist halt nicht schön.
Ich frage mich halt, warum das so nicht klappt. Mit der .data Sektion
klappt es ja auch...
Grüße,
Dirk
Moin,
Dirk schrieb:> Ich frage mich halt, warum das so nicht klappt. Mit der .data Sektion> klappt es ja auch...
dann teile deiner .vectors section noch mit das sie zu Mindest
allocatable ("a") sein soll. Also:
Also ich persönlich mag ja die "} > rom" Schreibweise nicht, genau wegen
sowas ;)
Ich sag dem Linker lieber explizit wo er das hinzupacken hat.
1
SECTIONS
2
{
3
. = <DEINE_ROM_STARTADRESSE>;
4
vectors : {
5
*(.vectors )
6
}
7
8
. = ALIGN(0x4);
9
.text : {
10
*(.text .text.*)
11
_etext = .;
12
}
13
14
}
Wenn er jetz imemrnoch Mist baut, kannste ihn Explizit zwingen den text
an einer anderen Adresse zu platzieren.
Dazu mehr wenn dieser Ansatz in die Hose geht.
edit:
Willste .data wirklich nur im ROM haben ohne es fürs RAM zu linken und
dann vom ROM ins RAM zu kopieren?
Danke für Eure Antworten und deine Mühe hp-freund!
Habe jetzt für ein paar Tage keinen Zugang zu meinem Rechner und kann es
nicht ausprobieren.
Melde mich dann nochmal, ob es klappt.
Grüße,
Dirk
Hallo!
hp-freund schrieb:> Ich habe die Variante mit linux gcc getestet:>> gpio.s:...> .section .vectors,"ax"> ...>> Damit passt alles.
Damit klappt es! Vielen Dank, hp-freund.
Das "x" Flag kann man noch weglassen, mit