Linker Magic -> Überschneidungen erkennen

Gast #2883674
Lesenswert?
• ▲
▼
Hallo in die Runde!

Ich stehe vor einem kleinen Problem, bei dem ich mir nicht sicher bin, 
ob es mit den Standard GNU Tools im Rahmen des Builds gelöst werden 
kann.

Also ich habe ein Filesystem, bei welchem die Dateien über eine Struktur 
in irgendeinem File global definiert werden können. Das wird über ein 
Define gemacht und landet so über Pragmas und den Linker in einer 
Section. Das ist schön und funktioniert so:
1
#define ___FS_ENTRY(name, version, start, end, format_level, entry_size, wrapping, marker) const t_InodeEntry file_list_entry_##name __attribute__((section(".file_list." XSTR(name)))) = {XSTR(name), start, end};
2

3
#define FS_ENTRY(name, version, start, end, format_level, entry_size, wrapping, marker) ___FS_ENTRY(name, start, end)

im Linker Script gibts noch:
1
__file_list_start__ = .;
2
KEEP(*(SORT(.file_list.*)))  
3
__file_list_end__ = .;

und schon kann ich im Code auf meine Liste Zugreifen. Start und End sind 
dabei die Sektoren im Flash an denen die Datei beginnt und endet.

Und jetzt zur Frage gibt es irgendeine Möglichkeit im Rahmen des Build 
Vorgangs zu überprüfen ob sich Dateien überschneiden? Ich weiß, ein paar 
Zeilen Code im Programm, würdens auch tun, aber anders wärs mir lieber.


So wie ich das sehe, könnte ich mir für jede Datei ein Feld so groß wie 
die Datei erstellen und dann dem Linker sagen, er soll das auf die 
Dateistartadresse legen, in irgendeiner Section welche ich später 
weglassen kann, also quasi eine virtuelle Adresse. Dann sollte mir der 
Linker Überschneidungen melden. Nur ich kenne keine Möglichkeit dem 
Linker beizubringen die Startadresse aus dem C Code auf eine Konstante 
zu setzen.

Wie gesagt in C sind das nur ein paar Zeilen Code, aber mich würde 
interessieren, ob es noch andere Tricks dafür gibt.

gr
thomas

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.