- Ein LWN-Nutzer hat die verstreuten 20-teiligen Linker-Essays von Ian Lance Taylor als Inhaltsverzeichnis zusammengestellt, damit man sie am Stück verfolgen kann
- Die Originaltexte stammen von Ian Lance Taylor, dem Autor des
gold-Linkers; die primär nummerierten Beiträge wurden anhand von Abschnittsüberschriften so gruppiert, dass sie leichter wiederzufinden sind - Der erste Teil behandelt Linker-Konzepte, persönliche Historie, dynamisches Linken, Objektdateiformate, Shared Libraries, ELF-Symbole, Relocations und TLS-Optimierung
- Der spätere Teil führt weiter über Symbolauflösung, den Vergleich von statischem und dynamischem Linken, Link-Time Optimization, COMDAT, C++-Template-Instanziierung, Exception Frames und inkrementelles Linken
- Inhaltsverzeichnis und Kommentare sind als Public Domain veröffentlicht und unterliegen keinen Einschränkungen beim Kopieren, Verwenden oder Erstellen abgeleiteter Werke
Ein leicht auffindbares Inhaltsverzeichnis der 20-teiligen Linker-Essayreihe
- Ian Lance Taylors 20-teilige Linker-Reihe wurde als fortlaufend gut lesbares Inhaltsverzeichnis zusammengestellt
- Da in Ians Blog oder bei LWN kein gut verlinktes Inhaltsverzeichnis leicht zu finden war, wurde ein eigenes Inhaltsverzeichnis erstellt
- Die URLs der Beiträge sind fortlaufend nummeriert, aber ein Inhaltsverzeichnis, das die Themen der einzelnen Beiträge auf einen Blick zeigt, ist nützlich
- Die einzelnen Beiträge werden nur über Nummern bezeichnet; die Titel wurden daher überwiegend aus Ians Abschnittsüberschriften abgeleitet
Enthaltene Beiträge
- Introduction, personal history, first half of what's-a-linker: Einführung, persönliche Historie, erste Hälfte der Erklärung, was ein Linker ist
- What's-a-linker: Dynamic linking, linker data types, linker operation: dynamisches Linken, Linker-Datentypen, Funktionsweise des Linkers
- Address spaces, Object file formats: Adressräume und Objektdateiformate
- Shared Libraries: Shared Libraries
- More Shared Libraries -- specifically, linker implementation; ELF Symbols: weitere Inhalte zu Shared Libraries, Linker-Implementierung, ELF-Symbole
- Relocations, Position Dependent Shared Libraries: Relocations und positionsabhängige Shared Libraries
- Thread Local Storage (TLS) optimization: TLS-Optimierung
- ELF Segments and Sections: ELF-Segmente und -Sections
- Symbol Versions, Relaxation optimization,: Symbolversionen und Relaxation-Optimierung
- Parallel linking: paralleles Linken
- Archive format: Archivformat
- Symbol resolution: Symbolauflösung
- Symbol resolution from the user's point of view; Static Linking vs. Dynamic Linking: Symbolauflösung aus Nutzersicht, Vergleich von statischem und dynamischem Linken
- Link time optimization, aka Whole Program optimization; Initialization Code: Link-Time Optimization, Whole-Program Optimization, Initialisierungscode
- COMDAT sections: COMDAT-Sections
- C++ Template Instantiation, Exception Frames: C++-Template-Instanziierung und Exception Frames
- Warning Symbols,: Warnsymbole
- Incremental Linking: inkrementelles Linken
- __start and __stop Symbols, Byte Swapping:
__start- und__stop-Symbole sowie Byte Swapping - Last post; Update on gold's status: letzter Beitrag und Update zum Status von
gold
Veröffentlichungsbedingungen
- Dieses Inhaltsverzeichnis und die Kommentare sind als Public Domain veröffentlicht
- Es gibt keine Einschränkungen für Nutzung, Kopieren, Aufführung oder das Erstellen abgeleiteter Werke, und es ist keine zusätzliche Erlaubnis erforderlich
1 Kommentare
Hacker-News-Kommentare
Jemand hat verlinkt, dass das Ganze mit einem Calibre-Rezept zu einem einzigen E-Book gebündelt wurde; für alle, die es brauchen, stelle ich das Ergebnis hier bereit
https://www.mediafire.com/folder/b8fdqx7eqcpdl/linker
oder
https://0x0.st/Xycy.azw3
https://0x0.st/Xyct.epub
https://0x0.st/Xycv.mobi
https://0x0.st/Xycw.pdf
Der Entwickler, der an den Linkern lld und mold gearbeitet hat, hat die Performance bis zum Äußersten getrieben
LLD (Teil von LLVM):
https://llvm.org/devmtg/2017-10/slides/Ueyama-lld.pdf
MOLD-Linker:
https://github.com/rui314/mold/blob/main/docs/design.md
Auch Apple hat einen neuen Linker veröffentlicht, der auf einem ähnlichen Niveau wie mold liegt; die frühere Diskussion dazu ist hier: https://news.ycombinator.com/item?id=36218330
LLD wurde auf Geschwindigkeit ausgelegt, Gold davor ebenfalls, aber Mold hat beide deutlich übertroffen
Auch wenn die Artikel von [2008] sind, sind sie wirklich Gold wert, und ich freue mich immer, wenn sie wieder auf die HN-Startseite kommen
Wirklich eine hervorragende Erklärung
Diese Artikelserie gehört zu meinen Favoriten und hat mir persönlich in vielerlei Hinsicht die Augen geöffnet
Ich glaube nicht, dass es im Internet oder anderswo eine Quelle gibt, die all diese Informationen an einem Ort versammelt. Ich hätte es großartig gefunden, wenn Ian daraus ein Buch gemacht hätte
Allerdings würde ich mir wünschen, dass Ian eine Version bereitstellt, in der man alle Kapitel auf einer Seite sehen kann
https://www.airs.com/blog/archives/51
Es geht darum, im Assembler-Code Pattern Matching zu betreiben und Sequenzen umzuordnen oder wiederzuverwenden
Frühere Kommentarsammlung: https://news.ycombinator.com/item?id=27445981
Ich verstehe, warum Linker in Zeiten knappen Speichers entstanden sind
Aber ich frage mich, ob Linker in Umgebungen mit reichlich Speicher wie modernen Systemen immer noch nötig sind. Außerdem denke ich, dass Shared Libraries doch ein Angriffsweg für Supply-Chain-Angriffe sein können, wie bei dem Anfang des Jahres abgewehrten xz-Angriff
Umgebungen wie der Raspberry Pi müssen weiterhin berücksichtigt werden. Shared Libraries sind schwerlich ein gefährlicherer Angriffsweg als die App selbst. Auch wenn man ein statisches Binary herunterlädt, weiß man nicht, was darin steckt, und ich weiß auch nicht, warum alle der Hälfte der Docker-Images vertrauen, die sie herunterladen und verwenden, aber so wird es nun einmal gemacht
Solange nicht alle Quelldateien gleichzeitig und mit exakt denselben Build-Optionen verarbeitet werden, müssen die Ergebnisse zusammengeführt werden. Selbst mit modernem LTO sieht der Compiler normalerweise nicht alle Dateien eines Programms auf Quellcodeebene, und C-Libraries und C++-Libraries sind meist getrennt. Solange mehrere Sprachen nicht das gesamte Programm in einem einzigen Kompilier- und Assembly-Schritt erzeugen, braucht man etwas, das die Ergebnisse zusammenführt, und das ist der Linker. Selbst wenn alles statisch gebaut wird, verschwindet die Notwendigkeit eines Runtime-Linkers nicht, solange man nicht die exakten Adressen, an denen das Programm laufen wird, hart kodiert; ein solcher Ansatz kollidiert mit Sicherheitsmechanismen wie ASLR
Die Denkweise, dass Speicher und CPU reichlich vorhanden seien, ist meiner Ansicht nach einer der Gründe, warum die User Experience trotz um mehrere Größenordnungen schnellerer Hardware nicht merklich besser geworden ist