- Dağınık halde duran Ian Lance Taylor’ın 20 bölümlük linker yazı dizisini tek seferde takip edebilmek için bir LWN kullanıcısı tarafından içindekiler listesi olarak düzenlendi
- Asıl metin,
goldlinker’ının yazarı Ian Lance Taylor tarafından kaleme alındı; numara odaklı yazılar, bölüm başlıklarına göre yeniden bulunması kolay olacak şekilde gruplandı - İlk bölümler linker kavramı, kişisel geçmiş, dinamik linking, object dosyası formatları, shared library’ler, ELF sembolleri, relocation ve TLS optimizasyonuna kadar uzanıyor
- Sonraki bölümler sembol çözümleme, statik/dinamik linking karşılaştırması, link time optimization, COMDAT, C++ template instantiation, exception frame’ler ve incremental linking ile devam ediyor
- İçindekiler listesi ve yorumlar public domain olarak yayımlandığından kopyalama, kullanım ve türev çalışmalar için herhangi bir kısıtlama yok
20 Bölümlük Linker Yazı Dizisini Kolay Bulunur Hale Getiren İçindekiler Listesi
- Ian Lance Taylor’ın 20 bölümlük linker yazıları ardışık olarak kolay okunabilecek bir içindekiler listesi halinde düzenlendi
- Ian’ın blogunda veya LWN’de iyi bağlanmış bir içindekiler listesi bulmak zor olduğundan ayrı bir liste oluşturuldu
- Yazı URL’leri ardışık numaralara sahip olsa da her yazının konusunu tek bakışta görmek için içindekiler listesi kullanışlı
- Her yazı yalnızca numarayla anıldığı için başlıklar çoğunlukla Ian’ın bölüm başlıklarından alınarak oluşturuldu
Dahil Edilen Yazılar
- Introduction, personal history, first half of what's-a-linker: Giriş, kişisel geçmiş ve linker’ın ne olduğuna dair ilk yarı
- What's-a-linker: Dynamic linking, linker data types, linker operation: Dinamik linking, linker veri tipleri, linker’ın çalışma biçimi
- Address spaces, Object file formats: Adres alanları ve object dosyası formatları
- Shared Libraries: Shared library’ler
- More Shared Libraries -- specifically, linker implementation; ELF Symbols: Shared library’ler hakkında ek içerik, linker implementasyonu, ELF sembolleri
- Relocations, Position Dependent Shared Libraries: Relocation’lar ve konuma bağımlı shared library’ler
- Thread Local Storage (TLS) optimization: TLS optimizasyonu
- ELF Segments and Sections: ELF segmentleri ve section’ları
- Symbol Versions, Relaxation optimization,: Sembol versiyonları ve relaxation optimizasyonu
- Parallel linking: Paralel linking
- Archive format: Arşiv formatı
- Symbol resolution: Sembol çözümleme
- Symbol resolution from the user's point of view; Static Linking vs. Dynamic Linking: Kullanıcı açısından sembol çözümleme; statik linking ve dinamik linking karşılaştırması
- Link time optimization, aka Whole Program optimization; Initialization Code: Link time optimization, diğer adıyla whole program optimization; initialization code
- COMDAT sections: COMDAT section’ları
- C++ Template Instantiation, Exception Frames: C++ template instantiation ve exception frame’ler
- Warning Symbols,: Uyarı sembolleri
- Incremental Linking: Incremental linking
- __start and __stop Symbols, Byte Swapping:
__start,__stopsembolleri ve byte swapping - Last post; Update on gold's status: Son yazı ve
golddurum güncellemesi
Yayın Koşulları
- Bu içindekiler listesi ve yorumlar public domain olarak yayımlandı
- Kullanım, kopyalama, icra etme ve türev çalışmalar oluşturma konusunda kısıtlama yok; ek izin de gerekmiyor
1 yorum
Hacker News yorumları
Biri tamamını tek bir e-kitapta birleştiren bir Calibre tarifi bağlantısı paylaşmıştı; ihtiyaç duyanlar için çıktıyı buraya koyuyorum
https://www.mediafire.com/folder/b8fdqx7eqcpdl/linker
veya
https://0x0.st/Xycy.azw3
https://0x0.st/Xyct.epub
https://0x0.st/Xycv.mobi
https://0x0.st/Xycw.pdf
lld ve mold linker’ları üzerinde çalışan geliştirici performansı sonuna kadar zorlamış
LLD (LLVM’in parçası):
https://llvm.org/devmtg/2017-10/slides/Ueyama-lld.pdf
MOLD linker:
https://github.com/rui314/mold/blob/main/docs/design.md
Apple da mold’a benzer seviyede yeni bir linker yayımladı; önceki tartışma burada: https://news.ycombinator.com/item?id=36218330
LLD hızlı olmak üzere tasarlanmıştı, ondan önceki Gold da öyleydi; ama Mold ikisini de büyük farkla geçti
[2008] tarihli yazılar ama bunlar gerçekten altın değerinde kaynaklar; HN ana sayfasına tekrar çıkmaları her zaman sevindirici
Gerçekten harika bir açıklama
Bu yazı dizisi en sevdiğim yazılardan biri; kişisel olarak bana göz açtıran çok şey içeriyordu
İnternette ya da başka yerde tüm bu bilgileri tek bir yerde toplayan bir kaynak olduğunu sanmıyorum. Keşke Ian bunu kitap olarak yayımlasaydı
Yine de Ian’ın tüm bölümleri tek bir sayfada görülebilecek bir sürüm sunmasını isterdim
https://www.airs.com/blog/archives/51
Assembly kodunda örüntü eşleme yapıp dizileri yeniden yerleştirme veya yeniden kullanma üzerine
Önceki yorum derlemesi: https://news.ycombinator.com/item?id=27445981
Belleğin sınırlı olduğu dönemlerde linker’ın neden ortaya çıktığını anlıyorum
Ama modern sistemlerdeki gibi belleğin bol olduğu ortamlarda linker’ın hâlâ gerekli olup olmadığını merak ediyorum. Üstelik paylaşımlı kütüphaneler, bu yılın başında engellenen xz saldırısında olduğu gibi bir tedarik zinciri saldırı yolu olmuyor mu diye düşünüyorum
Raspberry Pi gibi ortamlar da hâlâ hesaba katılmalı. Paylaşımlı kütüphaneleri uygulamanın kendisinden daha tehlikeli bir saldırı yolu olarak görmek zor. Statik bir ikili indirseniz de içinde ne olduğunu bilemezsiniz; herkesin indirip kullandığı Docker imajlarının yarısına neden güvendiğini de bilmiyorum ama sonuçta böyle kullanılıyor
Tüm kaynak dosyaları aynı anda, tam olarak aynı derleme seçenekleriyle işlemediğiniz sürece çıktıları birleştirmeniz gerekir. Modern LTO olsa bile derleyici genelde programın tüm dosyalarını kaynak kod düzeyinde göremez; C kütüphanesi ile C++ kütüphanesi de çoğunlukla ayrıdır. Birden fazla dil tüm programı tek bir derleme/assembly aşamasında üretmediği sürece çıktıları birleştirecek bir şeye ihtiyaç vardır; işte bu linker’dır. Her şeyi statik olarak derleseniz bile programın çalışacağı kesin adresi sabit olarak koda yazmadığınız sürece çalışma zamanı linker’ı ihtiyacı ortadan kalkmaz; böyle bir yöntem de ASLR gibi güvenlik teknikleriyle çakışır
Bellek ve CPU’nun bol olduğu düşüncesi, donanım birkaç mertebe hızlanmış olmasına rağmen kullanıcı deneyiminin gözle görülür biçimde iyileşmemesinin nedenlerinden biri bence