Tag · Rust
17 articles to explore.
[The World of Linkers—Lab 15] Let Counterexamples Set the Quality Bar
2026-10-06
Build replayable mutation and panic-survey tools, then test earlier backends through native execution, determinism checks, and behavioral comparison with GNU ld.
Read article
[The World of Linkers—Lab 14] Take the Linker Call from rustc
2026-10-06
Add a command-line driver to the cumulative class13 static-PIE backend and let rustc use it to link a no_std program that exercises core::fmt.
Read article
[The World of Linkers—Lab 13] Addresses Have Semantics: Safe ICF and Code Order
2026-10-06
Add conservative ICF and text ordering to class12's ET_EXEC and static-PIE backends, redirect references, and adjust debug information for folded copies.
Read article
[The World of Linkers—Lab 12] Make Debug Information Follow Addresses
2026-10-06
Add debug sections, symbols, and section headers to ET_EXEC and static PIE, keeping image, debug-section, and TLS coordinates distinct.
Read article
[The World of Linkers—Lab 11] Seeing Through Indirection: GOT, Relaxation, and Static TLS
2026-10-06
Extend class9's static PIE with GOT slots, the supported mov relaxation, a TLS template, and supplied startup code that installs main-thread TLS.
Read article
[The World of Linkers—Lab 10] Rewrite Instead of Copy: Constants and Unwind Tables
2026-10-06
Extend class8's ET_EXEC backend with merged constants, input-offset mappings, and rebuilt eh_frame records and search indexes for live code.
Read article
[The World of Linkers—Lab 09] Link Before the Load Address Is Known
2026-10-06
Build a static PIE from class8's frontend and class6's layout, separating static fixups from load-time pointers repaired by supplied startup code.
Read article
[The World of Linkers—Lab 08] Keep What Is Reachable: GC and Link Maps
2026-10-06
Trace live sections from the entry and explicit roots, build an address-independent link plan, and emit deterministic byte-safe maps.
Read article
[The World of Linkers—Lab 07] Archives on Demand: A Fixed Point of Member Extraction
2026-10-06
A static library is a container of object files, not one larger object. This lab parses the ar format, extracts members one at a time for unresolved global names, and rescans each archive until no further member is selected.
Read article
[The World of Linkers—Theory 14] What C++ and Rust Ask of a Linker
2026-10-04
Decode compiler-generated names, separate weak binding from COMDAT selection, diagnose missing vtables and initialization order, then follow Rust metadata, runtime libraries, panic strategies, and a minimal no_std program into the final link.
Read article
[The World of Linkers—Lab 06] File Bytes, Memory Bytes, and Segment Permissions
2026-10-04
A code-only program is of little use. This lab adds read-only constants, initialized globals, BSS, and COMMON storage, describes them with three load segments of different permissions, and lets the kernel check the result: writing constants or executing data must end in SIGSEGV.
Read article
[The World of Linkers—Lab 05] Calls Across Files: Merge the Code, Then Fill In the Displacements
2026-10-04
The previous executable could come only from one object with no relocations. This lab lets an assembly entry point call a C function compiled in another file: merge code sections, compute S+A-P for every field, and never leave a half-written field behind on failure.
Read article
[The World of Linkers—Lab 04] The First Executable: Two Program Headers and an Entry Point
2026-10-04
Four stages have only read input. This lab writes output for the first time: plan a minimal executable image, serialize the ELF header and two program headers by hand, and let the Linux kernel run it and return 42.
Read article
[The World of Linkers—Lab 03] Who Owns the Name? Global Symbol Resolution
2026-10-04
Select global definitions before binding used references, preserving local identity, weak tie order, and COMMON requirements without assigning addresses.
Read article
[The World of Linkers—Lab 02] Symbols and Relocations: An Object File's Unfinished Business
2026-10-04
Decode symbols and explicit-addend relocations, establish table ownership, and preserve information for definition selection and layout.
Read article
[The World of Linkers—Lab 01] Sections and Names: Carving Bytes into Regions
2026-10-04
Decode section descriptors, borrow payload bytes, and resolve names so later stages consume named Sections instead of rereading raw fields.
Read article
[The World of Linkers—Lab 00] Distrust the Input: The ELF Boundary
2026-10-04
Check byte ranges, the supported ELF64 header, and section-header indexes to establish an input boundary without arithmetic wraparound or out-of-bounds reads.
Read article