| Age | Commit message (Collapse) | Author | |
|---|---|---|---|
| 2025-08-31 | std.fmt: delete deprecated APIs | Andrew Kelley | |
| std.fmt.Formatter -> std.fmt.Alt std.fmt.format -> std.Io.Writer.print | |||
| 2025-08-29 | std.Io: delete GenericReader | Andrew Kelley | |
| and delete deprecated alias std.io | |||
| 2025-07-07 | compiler: update a bunch of format strings | Andrew Kelley | |
| 2025-07-07 | compiler: update all instances of std.fmt.Formatter | Andrew Kelley | |
| 2025-06-12 | x86_64: remove linker references from codegen | Jacob Young | |
| 2024-10-12 | link.Elf: eliminate an O(N^2) algorithm in flush() | Andrew Kelley | |
| Make shared_objects a StringArrayHashMap so that deduping does not need to happen in flush. That deduping code also was using an O(N^2) algorithm, which is not allowed in this codebase. There is another violation of this rule in resolveSymbols but this commit does not address it. This required reworking shared object parsing, breaking it into independent components so that we could access soname earlier. Shared object parsing had a few problems that I noticed and fixed in this commit: * Many instances of incorrect use of align(1). * `shnum * @sizeOf(elf.Elf64_Shdr)` can overflow based on user data. * `@divExact` can cause illegal behavior based on user data. * Strange versyms logic that wasn't present in mold nor lld. The logic was not commented and there is no git blame information in ziglang/zig nor kubkon/zld. I changed it to match mold and lld instead. * Use of ArrayList for slices of memory that are never resized. * finding DT_VERDEFNUM in a different loop than finding DT_SONAME. Ultimately I think we should follow mold's lead and ignore this integer, relying on null termination instead. * Doing logic based on VER_FLG_BASE rather than ignoring it like mold and LLD do. No comment explaining why the behavior is different. * Mutating the original ELF symbols rather than only storing the mangled name on the new Symbol struct. I noticed something that I didn't try to address in this commit: Symbol stores a lot of redundant information that is already present in the ELF symbols. I suspect that the codebase could benefit from reworking Symbol to not store redundant information. Additionally: * Add some type safety to std.elf. * Eliminate 1-3 file system reads for determining the kind of input files, by taking advantage of file name extension and handling error codes properly. * Move more error handling methods to link.Diags and make them infallible and thread-safe * Make the data dependencies obvious in the parameters of parseSharedObject. It's now clear that the first two steps (Header and Parsed) can be done during the main Compilation pipeline, rather than waiting for flush(). | |||
| 2024-10-11 | link.Elf: fix merge sections namespacing | Andrew Kelley | |
| `link.Elf.merge_section.MergeSection` -> `link.Elf.Merge.Section` | |||
| 2024-10-11 | link.Elf: group section indexes | Andrew Kelley | |
| so they cannot be forgotten when updating them after sorting them. | |||
| 2024-10-09 | elf: fix creation of synthetic sections | Jakub Konka | |
| 2024-09-23 | elf: remove dead code | Jakub Konka | |
| 2024-08-28 | std: update `std.builtin.Type` fields to follow naming conventions | mlugg | |
| The compiler actually doesn't need any functional changes for this: Sema does reification based on the tag indices of `std.builtin.Type` already! So, no zig1.wasm update is necessary. This change is necessary to disallow name clashes between fields and decls on a type, which is a prerequisite of #9938. | |||
| 2024-08-26 | elf: make Atom.allocate and related ZigObject-independent | Jakub Konka | |
| 2024-08-25 | elf: streamline sections container | Jakub Konka | |
| 2024-08-15 | elf: introduce Symbol.flags.is_extern_ptr for refs potentially needing GOT | Jakub Konka | |
| 2024-08-14 | elf: re-use old atom slot for a trampoline to that atom | Jakub Konka | |
| This is the initial implementation of Jacob Young's idea of re-using old function slots as trampolines for new function's location. This way the trampoline is guaranteed to be aligned to the function's alignment. The only edge case is if an incremental update further overaligns the function in which case we skip/delete the trampoline and re-evaluate all references. | |||
| 2024-08-13 | elf: only apply zig jump table indirection to function calls (PLT32) | Jakub Konka | |
| 2024-08-13 | elf: commit non-indirected symbol address to symtab | Jakub Konka | |
| 2024-08-13 | elf: make zig jump table indirection implicit via Symbol.address | Jakub Konka | |
| 2024-08-13 | elf: rename OffsetTable to JumpTable | Jakub Konka | |
| 2024-08-13 | elf: nuke ZigGotSection from existence | Jakub Konka | |
| 2024-08-13 | elf: indirect via offset table in the linker away from backend | Jakub Konka | |
| 2024-08-13 | elf: allocate new offset table via Atom.allocate mechanism | Jakub Konka | |
| 2024-08-07 | elf: fix compile errors | Jakub Konka | |
| 2024-08-07 | elf: redo symbol mgmt and ownership in ZigObject | Jakub Konka | |
| 2024-08-07 | elf: always create symbol extra | Jakub Konka | |
| 2024-07-30 | elf: move merge subsections ownership into merge sections | Jakub Konka | |
| 2024-07-30 | elf: simplify output section tracking for symbols | Jakub Konka | |
| 2024-07-30 | elf: remove obsolete flags from atom | Jakub Konka | |
| 2024-07-30 | elf: move ownership of atoms into objects | Jakub Konka | |
| 2024-04-20 | link/elf: implement string merging | Jakub Konka | |
| 2024-04-20 | link/elf: port macho symbol extras handling | Jakub Konka | |
| 2024-04-08 | link/elf: handle symbols to begin/end of .eh_frame section | Jakub Konka | |
| 2024-03-08 | elf+aarch64: implement basic thunk support | Jakub Konka | |
| 2024-03-08 | elf+aarch64: implement .plt.got | Jakub Konka | |
| 2024-03-08 | elf+aarch64: implement enough to link dynamically with gcc as the driver | Jakub Konka | |
| 2024-02-13 | elf: use u32 for all section indexes | Jakub Konka | |
| 2024-02-13 | elf: store relative offsets in atom and symbol | Jakub Konka | |
| 2024-01-01 | update codegen.llvm references to bin_file.options | Andrew Kelley | |
| 2023-11-12 | elf: set symbol flags such as needs_zig_got in ZigObject | Jakub Konka | |
| 2023-11-12 | x86_64: get something going for the local exec model | Jakub Konka | |
| 2023-11-08 | elf: emit SHN_COMMON symbols in -r mode | Jakub Konka | |
| 2023-11-08 | elf: LLVM emits relocs to undef local symbols - color me surprised! | Jakub Konka | |
| 2023-11-07 | elf: actually track output symtab index of symbols | Jakub Konka | |
| 2023-11-07 | elf: generate section symbols when writing symtab | Jakub Konka | |
| 2023-11-04 | elf: collect exports from ZigObject into AR symtab | Jakub Konka | |
| 2023-11-04 | elf: postpone creation of .got.zig entry until code emit | Jakub Konka | |
| 2023-11-04 | elf: emit STT_SECTION symbols | Jakub Konka | |
| 2023-11-04 | elf: make sure we never emit .got.zig relocs when linking object files | Jakub Konka | |
| 2023-11-04 | elf: improve Symbol to handle emitting relocatable object files | Jakub Konka | |
| 2023-11-04 | elf: redo strings management in the linker | Jakub Konka | |
| * atom names - are stored locally and pulled from defining object's strtab * local symbols - same * global symbols - in principle, we could store them locally, but for better debugging experience - when things go wrong - we store the offsets in a global strtab used by the symbol resolver | |||
