aboutsummaryrefslogtreecommitdiff
path: root/lib/std/elf.zig
AgeCommit message (Collapse)Author
2025-10-29Elf2: load relocations from input objectsJacob Young
2025-10-29std: updating to std.Io interfaceAndrew Kelley
got the build runner compiling
2025-10-29std.zig.system: upgrade to std.Io.ReaderAndrew Kelley
2025-09-30std: fix 32-bit build and some unsafe castsmlugg
2025-09-21Elf2: create a new linker from scratchJacob Young
This iteration already has significantly better incremental support. Closes #24110
2025-09-04std.elf: change STV enum from u2 to u3Alex Rønne Petersen
In gABI 4.3, st_other was changed such that the lower 3 bits are reserved for the visibility, up from the previous 2 bits.
2025-09-04std.elf: add new EM values from gABI 4.3Alex Rønne Petersen
2025-09-04std.elf: document which EM values are not assigned in gABIAlex Rønne Petersen
2025-09-04std.elf: document which OSABI values are not assigned in gABIAlex Rønne Petersen
2025-08-29std.Io: delete GenericReaderAndrew Kelley
and delete deprecated alias std.io
2025-08-08Fix: std.elf offset computationGiuseppe Cesarano
2025-08-05std.elf: buffer header iterator API (#24691)Giuseppe Cesarano
Closes #24666.
2025-07-22aarch64: add new from scratch self-hosted backendJacob Young
2025-07-21objcopy: delete most of itAndrew Kelley
this code is not up to zig project standards tracked by #24522 oh, and fix not adjusting buffer seek position in std.fs.File.Reader
2025-07-07update standalone and incremental tests to new APIAndrew Kelley
2025-04-27chore(std.mem): Rename `trimLeft` and `trimRight`Shun Sakai
Rename `trimLeft` to `trimStart`, and `trimRight` to `trimEnd`. `trimLeft` and `trimRight` functions remain as deprecated aliases for these new names.
2025-02-22std.DynLib: add support for DT_GNU_HASH sections in elf filesgeemili
2025-02-17std.Target: Remove Cpu.Arch.spu_2.Alex Rønne Petersen
This was for a hobby project that appears to be dormant for now. This can be added back if the project is resumed in the future.
2025-02-11std.elf: fix panic while parsing headerRafael Batiati
When parsing an invalid (e.g., corrupted) ELF header, `@enumFromInt` can panic casting the exhaustive enum `ET`.
2024-10-12link.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-04Adds new cpu architectures propeller1 and propeller2. (#21563)Felix Queißner
* Adds new cpu architectures propeller1 and propeller2. These cpu architectures allow targeting the Parallax Propeller 1 and Propeller 2, which are both very special microcontrollers with 512 registers and 8 cpu cores. Resolves #21559 * Adds std.elf.EM.PROPELLER and std.elf.EM.PROPELLER2 * Fixes missing switch prongs in src/codegen/llvm.zig * Fixes order in std.Target.Arch --------- Co-authored-by: Felix "xq" Queißner <git@random-projects.net>
2024-10-01std.elf: Make int() and int32() functions private.Alex Rønne Petersen
These have no callers outside std.elf. Even if the standard library should provide functions like these, std.elf is probably not the place, given how general they are.
2024-10-01std.elf: Parse and make available some extra fields on Header.Alex Rønne Petersen
Closes #19830.
2024-10-01std.elf: Add OSABI enum sourced from binutils.Alex Rønne Petersen
2024-10-01std.elf: Define EI_(OSABI,ABIVERSION,PAD) constants.Alex Rønne Petersen
2024-10-01std.elf: Define ET.(LOOS,HIOS) constants.Alex Rønne Petersen
2024-09-03std.elf: Bring the EM enum up to date.Alex Rønne Petersen
Based on: * `include/elf/common.h` in binutils * `include/uapi/linux/elf-em.h` in Linux * https://www.sco.com/developers/gabi/latest/ch4.eheader.html I opted to use the tag naming of binutils because it seems to be by far the most complete and authoritative source at this point in time.
2024-08-23std.{coff,elf}: Remove the {MachineType,EM}.toTargetCpuArch() functions.Alex Rønne Petersen
These are fundamentally incapable of producing accurate information for reasons I've laid out in #20771. Since our only use of these functions is to check that object files have the correct machine type, and since #21020 made `std.Target.to{Coff,Elf}Machine()` more accurate, just switch these checks over to that and compare the machine type tags instead. Closes #20771.
2024-07-30std.elf.EM: Add missing MICROBLAZE value.Alex Rønne Petersen
2024-07-26std.elf: Add Elf32_Relr and Elf64_Relr definitions.Alex Rønne Petersen
2024-07-25std.elf: Add some newer dynamic tag types.Alex Rønne Petersen
2024-07-19std: Add loongarch support for elf. (#20678)YANG Xudong
2024-07-19std.c reorganizationAndrew Kelley
It is now composed of these main sections: * Declarations that are shared among all operating systems. * Declarations that have the same name, but different type signatures depending on the operating system. Often multiple operating systems share the same type signatures however. * Declarations that are specific to a single operating system. - These are imported one per line so you can see where they come from, protected by a comptime block to prevent accessing the wrong one. Closes #19352 by changing the convention to making types `void` and functions `{}`, so that it becomes possible to update `@hasDecl` sites to use `@TypeOf(f) != void` or `T != void`. Happily, this ended up removing some duplicate logic and update some bitrotted feature detection checks. A handful of types have been modified to gain namespacing and type safety. This is a breaking change. Oh, and the last usage of `usingnamespace` site is eliminated.
2024-07-02add `ppc64` reloc definitionsDavid Rubin
2024-03-10improve documentation in stdAndrew Kelley
A lot of these "shorthand" doc comments were redundant, low quality filler content. Better to let the actual modules speak for themselves with top level doc comments rather than trying to document their aliases.
2024-02-17lib/std/elf: refactor reloc enum valuesJakub Konka
2024-02-17lib/std/elf: fix typo in R_RISCV_TLSDESCJakub Konka
2024-02-17elf: add new R_RISCV_TLSDESC reloc typeJakub Konka
2024-02-17elf: add riscv dynamic relocsJakub Konka
2024-02-17lib/std/elf: use enums for relocsJakub Konka
2024-02-17elf: add riscv reloc typesJakub Konka
2024-02-14lib/std/elf: add aarch64 relocation kindsJakub Konka
2023-11-09elf: init output COMDAT group sectionsJakub Konka
2023-11-06CheckObject: support parsing and dumping archive symtab for ELFJakub Konka
2023-10-31std.builtin.Endian: make the tags lower caseAndrew Kelley
Let's take this breaking change opportunity to fix the style of this enum.
2023-10-21std.elf: remove some unneeded `@as`Andrew Kelley
2023-08-06std: remove some unused imports (#16710)Zachary Raineri
2023-07-20debug: support loading elf debug info from external fileskcbanner
Some distributions (ie. Ubuntu) have their libc debug info in separate files. This change allows the stack walking code to read that debug info. - add support for reading compressed ELF sections - support reading the build-id from the elf headers in order to lookup external debug info - support reading the .gnu_debuglink section to look up external debug info
2023-07-13elf: add ELF and GNU-specific missing defsJakub Konka
2023-06-24all: migrate code to new cast builtin syntaxmlugg
Most of this migration was performed automatically with `zig fmt`. There were a few exceptions which I had to manually fix: * `@alignCast` and `@addrSpaceCast` cannot be automatically rewritten * `@truncate`'s fixup is incorrect for vectors * Test cases are not formatted, and their error locations change