Forum: Compiler & IDEs Linker Magic -> Überschneidungen erkennen


von Thomas (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.