gcc: Suche Dokumentation: WEAK - Reihenfolge beim Linken

OP #5282412
Lesenswert?
• ▲
▼
Ich finde keine ausreichende Dokumentation über das Verhalten von 
weak-Symbolen beim Linken zweier .o Dateien, insbesondere interessiert 
mich ob die Reihenfolge der .o auf der Kommandozeile von Bedeutung ist, 
macht die Dokumentation darüber an irgendeiner Stelle die ich noch nicht 
gefunden habe eine definitive Aussage?

Konkreter Fall: Ich linke startup.o mit .weak Symbolen und prog.o mit 
starken Symbolen in einem Aufruf von gcc zu einem .elf und bislang war 
die Reihenfolge egal doch mit aktuellem arm-none-eabi-gcc muss ich den 
Startup-Code zuerst angeben, ansonsten überschreiben die weak Symbole im 
startup.o die starken Symbole im prog.o. Dieses Verhalten kann momentan 
nur beobachtet werden wenn -flto verwendet wird, ohne LTO ist 
anscheinend keine Reihenfolge erforderlich. Außerdem scheint der Fall 
nur aufzutreten wenn startup.o aus einer assemblerdatei erzeugt wurde, 
Weak-Symbole aus C-Dateien scheinen noch das alte Verhalten zu zeigen.

Macht die Doku zu diesem Thema irgendwelche Aussagen oder Garantien? Ich 
vermute nämlich einen Bug. Aber ohne Doku kann ichs nicht beweisen und 
ich finde nichts, bitte helft mir mal die entsprechende Stelle in der 
Doku zu finden.

Beachte: Ich linke zwei nackte .o Dateien, keine Libs oder dergleichen.

Wenn ich Zeit habe versuch ich mal ein minimales Beispiel 
zusammenzustellen das das Verhalten demonstriert, kann aber noch bis zum 
Wochenende dauern.
#5282474
Lesenswert?
• ▲
▼
Nachtrag:

Nachzulesen unter der linker-Option -l

„It makes a difference where in the command you write this option; the 
linker searches and processes libraries and object files in the order 
they are specified. Thus, ‘foo.o -lz bar.o’ searches library ‘z’ after 
file foo.o but before bar.o. If bar.o refers to functions in ‘z’, those 
functions may not be loaded.“

Oliver
#5282634
Lesenswert?
• ▲
▼
Soweit ich weiss ist es so, dass weak symbols theoretisch immer von 
strong symbols überschrieben werden, und immer nur höchstens ein Symbol 
übrig bleibt. Wenn man jedoch eine statische Library (.a) beim Linken 
angibt, wird nur das Symbol der ersten .o datei genommen, welche das 
Symbol enthält, selbst wenn es ein weak symbol ist. Man kann dieses 
Verhalten ändern, indem man -Wl,--whole-archive und 
-Wl,--no-whole-archive angibt. Wie -flto das ganze beeinflusst weiss ich 
nicht, ich finde, wenn es das Verhalten ändert sollte man das als Bug 
betrachten, ich verwende es wenn möglich nicht.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.