Fact-checked by Grok 2 weeks ago

Binary File Descriptor library

The Binary File Descriptor library (BFD) is a core component of the GNU Binutils suite that provides a uniform, portable interface for applications to read, write, and manipulate object files, executables, and core dumps across diverse formats and architectures, abstracting away format-specific details through a modular front-end and back-end architecture. Developed in the early 1990s by the Cygnus Support team under contract for the GNU Project, BFD originated from the need to enable interoperability between tools handling incompatible object file formats, such as COFF and b.out on Intel 960 systems, as well as IEEE-695, Oasys, S-records, and 68k COFF. Its design emphasizes extensibility, allowing new file formats to be supported by implementing dedicated back ends without altering the front-end API, which manages canonical data structures for elements like sections, symbols, and relocations. BFD's front end offers a consistent set of functions—declared in the bfd.h header and linked via libbfd.a—for operations such as opening files (returning a bfd structure pointer), counting sections, accessing symbols, and handling relocations, while back ends convert between native file representations and BFD's internal canonical forms to minimize information loss. This abstraction enables tools like the GNU linker (ld), assembler (as), and debugger (GDB) to process files in formats including a.out, COFF variants, ELF, PE, and others without format-specific code, supporting cross-compilation and multi-architecture environments. Although not optimized for high-performance I/O on non-traditional formats like S-records, BFD prioritizes portability and ease of maintenance, with ongoing development hosted by the Free Software Foundation to accommodate evolving binary standards.

Overview

Purpose and Functionality

The Binary File Descriptor library (BFD) is the GNU Project's portable library designed for the uniform manipulation of in various formats. It serves as the core mechanism enabling tools such as assemblers, linkers, and debuggers to read, write, and process consistently, irrespective of the underlying or target architecture. The primary goal of BFD is to allow applications to employ the same set of routines for operating on , thereby facilitating portability and simplifying the integration of support for new formats without requiring extensive rewrites of the tools themselves. This is achieved by implementing a front-end that hides the specifics of individual formats behind a common interface, with format-specific handling delegated to modular backends. A new format can thus be added by developing a dedicated backend, which expands BFD's capabilities without altering the core library or dependent applications. BFD provides key abstractions that represent object files in a , including headers for overall file , sections for code and data segments, tables for and references, and relocation entries for address adjustments during linking. These abstractions are accessed through standardized structures and functions defined in the BFD , such as asection for sections, asymbol for , and arelent for relocations, allowing developers to manipulate object files without direct knowledge of format-specific details. The library originated from efforts by Cygnus Support in 1991, where the acronym BFD was coined during discussions, later formalized as a for Descriptor to reflect its role in describing binary file structures. Written in , BFD is distributed under the GNU General Public License version 3 or later, ensuring its free availability for modification and redistribution within the GNU ecosystem.

Supported Formats and Architectures

The Binary File Descriptor library (BFD) provides extensive support for diverse formats and instruction set architectures (ISAs), enabling portable handling of binaries in toolchains like . BFD accommodates numerous file formats, having grown from an estimated 50 in 2003, encompassing widely used standards such as (Executable and Linkable Format), COFF (Common Object File Format), (Portable Executable), a.out, XCOFF, ECOFF, SOM (System Object Module), and proprietary formats including Intel OMF. This breadth has evolved significantly with recent releases, including Binutils 2.45 (July 2025), enhancing compatibility for contemporary systems. In terms of architectures, BFD supports over 30 ISAs, covering general-purpose processors like x86 variants ( and ), ARM, MIPS, PowerPC, , and SPARC, as well as embedded targets such as AVR and M68K. These include both 32-bit and 64-bit variants where applicable, ensuring broad applicability across desktop, server, and microcontroller environments. BFD's design emphasizes extensibility, allowing new formats and architectures to be integrated through dedicated backend modules without modifications to the core frontend API. This modular approach has facilitated the inclusion of support for formats like (WASM) and advanced ELF extensions, such as those for position-independent executables and debug information. Such comprehensive coverage proves invaluable in cross-compilation workflows, where BFD enables tools to process and link s from mixed formats and architectures, supporting embedded systems development and multi-platform builds. For instance, developers targeting for devices can seamlessly combine objects with legacy COFF libraries via BFD abstractions.

History

Origins and Early Development

The Descriptor (BFD) library originated in the early as a response to the challenges faced by the Project in handling diverse formats across systems. David Henkel-Wallace, also known as , proposed the development of BFD while working at , a company founded in 1989 to provide commercial support for software. His initiative aimed to create a unified for manipulation, addressing the fragmentation that hindered portability of tools like assemblers, linkers, and debuggers. Early discussions on BFD's design began around 1990-1991, involving Henkel-Wallace and Richard Stallman, the founder of the GNU Project. These conversations highlighted the technical difficulties of abstracting multiple formats, with Stallman noting the complexity of the task. The name "BFD" itself emerged from one such exchange, where Henkel-Wallace quipped "BFD" in response to Stallman's assessment that building the library would be quite hard. Cygnus Solutions, under contract from Intel's GNU 960 team in Oregon, took on the initial implementation to enable interoperability between formats like COFF and b.out, driven by needs in embedded and cross-platform development. Key contributors during this phase included Henkel-Wallace, Steve Chamberlain, K. Richard Pixley, and John Gilmore, all affiliated with Cygnus. The library's development was integrated into the GNU Binutils project, with an initial documentation draft appearing in April 1991 and a first progressive release supporting two platforms by March 1992. BFD first became publicly available in Binutils version 2.1, released on February 26, 1993.

Key Milestones and Evolution

The Binary File Descriptor (BFD) library was initially integrated into version 2.1 in 1993, providing foundational support for basic object file formats such as a.out and COFF. This integration marked BFD's entry into the broader , building on its origins at Cygnus Support where it was developed to enable interoperability across diverse binary formats. During the and 2000s, BFD underwent significant expansion under (acquired by in 1999) and subsequent stewardship, adding critical support for the format in the mid- (1994) and the Windows () format in the late 1990s. These enhancements positioned BFD as a key component for cross-compilers, facilitating portable development across multiple platforms. By 2003, BFD had grown to support approximately 50 file formats and 25 architectures, demonstrating its maturing role in handling complex binary manipulations. In the , BFD received targeted enhancements for 64-bit architectures, including the addition of support in 2017 and improvements to ARM64 handling to better accommodate emerging and server workloads. These updates addressed scalability needs in modern computing environments, with ongoing refinements to relocation types and section processing for 64-bit targets. From 2020 to 2025, BFD continued evolving through GNU Binutils releases 2.40 and later, incorporating LoongArch architecture support in 2022, the SFRAME debug format in 2023 for efficient stack unwinding, and security fixes such as the patch for CVE-2025-7546 addressing out-of-bounds writes in ELF group handling. Binutils 2.44, released in February 2025, further integrated these advancements alongside optimizations for new instruction sets. Binutils 2.45, released in July 2025, introduced further enhancements including SFrame V2 support, new RISC-V extensions, and security patches such as for CVE-2025-7546. Over time, BFD shifted from its initial focus on embedded systems to widespread adoption in Linux distributions and continuous integration/continuous deployment (CI/CD) toolchains, enabling seamless binary processing in diverse development pipelines.

Design and Architecture

Core Components and Abstractions

The Binary File Descriptor (BFD) library employs a frontend layer that provides a uniform (API) for manipulating object files, abstracting away the specifics of underlying formats to enable portable operations across diverse structures. This layer handles memory management and maintains canonical data structures representing key elements of object files, such as file metadata in the bfd structure, data segments through bfd_section descriptors, symbol information with bfd_symbol entries, and relocation details using arelent records. By presenting these elements in a format-independent manner, the frontend allows applications to perform operations like reading sections or resolving symbols without needing to understand the native . At its core, BFD abstracts object files as streams, facilitating input/output operations through the struct bfd_iovec mechanism, which supports seamless handling of byte order variations (big-endian or little-endian) and size conversions between 32-bit and 64-bit representations. Address calculations are performed independently of the file format, utilizing types like bfd_vma for virtual memory addresses to ensure consistency in relocation and section addressing. These abstractions promote portability by transparently managing alignment requirements, padding for data structures, and format-specific idiosyncrasies, such as differences in how relocations are encoded (e.g., USE_REL versus USE_RELA in ELF). Central to BFD's design are key data structures that encapsulate file handles and object components. The bfd structure serves as the primary file handle, containing pointers to format-specific backends, details, and lists, while also tracking the file's byte order and target specifics. descriptors are represented by the asection structure, which includes attributes like name, size, flags, and alignment, enabling uniform access to segments regardless of the underlying format. Similarly, the asymbol structure standardizes information, storing details such as the symbol's name, value, associated , and flags in a . Error handling in BFD is standardized through the bfd_error_type , which defines status codes like bfd_error_file_ambiguously_recognized for operations that may fail due to format ambiguities. Functions such as bfd_openr, which opens a file for reading and returns a bfd pointer upon successful of , and bfd_close, which releases resources and closes the , incorporate this mechanism to report outcomes reliably. This approach ensures that frontend operations remain robust and predictable, shielding users from low-level I/O or format-related errors.

Backend Implementation

The BFD backend features modular drivers, with one dedicated to each specific combination of format and target , such as the elf32_i386 backend for handling 32-bit (ELF) files on x86 processors. These drivers implement the frontend's generic calls by providing format-specific routines that parse and write from , mapping elements like ELF sections to canonical BFD abstractions such as the bfd_section . This design ensures that the frontend remains independent of format details while backends handle the nuances of diverse formats including COFF, a.out, and ELF. At the core of each backend is the bfd_target structure, often referred to as the format vector, which encapsulates the backend's capabilities through function pointers for essential operations like file opening (bfd_openr), closing (_close_and_cleanup), format checking (_bfd_check_format), and content writing (_bfd_write_contents). Backends use this vector to manage byte order, section alignment, and private data structures—such as elf_obj_tdata for ELF-specific —while converting symbols to the internal asymbol format and relocations to arelent structures with associated reloc_howto_type handlers. For example, the elf32_i386 backend employs these mechanisms to process x86-specific relocations like BFD_RELOC_ELF32_I386. Adding a new backend involves defining a bfd_target structure in the targets.c file, implementing the required hooks—typically 20 to 30 functions covering tasks like section content retrieval (bfd_get_section_contents), symbol table access, and relocation processing—and compiling the backend source into the libbfd library, often by adapting existing templates such as those in coffgen.c for COFF variants. This process allows straightforward extension for new formats or architectures without altering the frontend. Performance in BFD backends is enhanced by caching mechanisms that store parsed data, including symbols, sections, and relocations, using on-demand loading and functions like bfd_cache_init to minimize repeated file I/O; however, the introduces overhead, as operations must traverse the canonical interface rather than directly accessing raw . All BFD backends are maintained within Binutils source tree on Sourceware, with regular updates to accommodate new instruction set architectures, exemplified by the addition of support via backends like those defined in elfxx-riscv.h.

Usage

Integration with GNU Tools

The Binary File Descriptor (BFD) library serves as a foundational component within the Binutils suite, enabling tools such as the linker (ld), assembler (as), and object dumper () to manipulate object files across diverse formats and architectures. In ld, BFD provides the core mechanisms for reading input object files, performing symbol resolution and relocation, and writing the final or library output, allowing the linker to support formats like , COFF, and a.out without format-specific code in the tool itself. Similarly, as relies on BFD to generate object files from code, handling section management and symbol tables during the assembly process. uses BFD to parse and display detailed information about object files, including disassembly, headers, and sections, making it indispensable for binary analysis tasks. GCC integrates BFD to facilitate object file handling during compilation and linking stages, particularly for cross-compilation to multiple targets. BFD enables GCC to generate and process intermediate s in target-specific formats, ensuring portability across architectures like x86, , and , while the compiler's backend invokes ld—which is BFD-dependent—for final linking. This integration supports GCC's ability to produce binaries for systems and heterogeneous environments without requiring separate format handlers. In the GNU Debugger (GDB), BFD plays a critical role in accessing and interpreting executable files, symbol tables, and debugging sections, allowing GDB to dynamically support various object formats without recompilation. BFD helps GDB locate symbol information, manage core dumps, and extract section data, enabling seamless debugging across platforms such as ELF-based executables or Windows files. BFD is also embedded in broader build ecosystems, including tools like and , where it supports binary manipulation during compilation workflows by powering invoked Binutils components. In development, BFD is utilized in utilities such as perf for performance analysis and bpftool for eBPF program management, with these tools optionally linking against libbfd to handle kernel object files and traces. Distribution packages in major distros, such as and , include BFD as a dependency for kernel tools and development environments to ensure consistent binary handling. Tools integrating BFD typically link against the static library libbfd.a or the libbfd.so during their build process, often configured via options like --with-bfd in configure script to enable format-specific backends. As of November 2025, BFD remains essential in and (CI/CD) pipelines for multi-architecture builds, with 2.45.1 providing continued SFrame support in BFD for lightweight stack tracing and improved support for extensions (such as new assembler directives and linker enhancements), ensuring robust operation in containerized and cloud-based development workflows.

API Usage and Examples

The Binary File Descriptor (BFD) library provides a C API for manipulating object files in a format-agnostic manner, allowing applications to read, write, and inspect binary files without needing to handle specific formats directly. To begin using the API, programs must include the header file <bfd.h> and call bfd_init() to initialize the library before any other BFD functions; this function returns BFD_INIT_MAGIC on success. Files are opened read-only using bfd_openr(const char *filename, const char *target), which returns a bfd * pointer (often abbreviated as abfd) or NULL on failure; the target parameter specifies the expected format (e.g., "elf64-x86-64") or NULL to auto-detect. To verify the file's format, invoke bfd_check_format(abfd, bfd_object), which returns TRUE if the file is a valid object file and FALSE otherwise. A common operation is iterating over sections to inspect their properties, such as sizes. The following C code snippet demonstrates opening an object file, verifying its format, and printing the names and sizes of all sections:
c
#include <stdio.h>
#include <bfd.h>

int main(int argc, char *argv[]) {
    bfd *abfd;
    if (argc != 2) {
        fprintf(stderr, "Usage: %s <object-file>\n", argv[0]);
        return 1;
    }

    bfd_init();  // Initialize BFD library

    abfd = bfd_openr(argv[1], NULL);
    if (abfd == NULL) {
        fprintf(stderr, "Failed to open file: %s\n", argv[1]);
        return 1;
    }

    if (!bfd_check_format(abfd, bfd_object)) {
        fprintf(stderr, "Not a valid object file\n");
        bfd_close(abfd);
        return 1;
    }

    // Iterate over sections and print sizes
    asection *sect;
    for (sect = abfd->sections; sect != NULL; sect = sect->next) {
        printf("%s: %ld bytes\n", sect->name, (long)bfd_section_size(sect));
    }

    bfd_close(abfd);
    return 0;
}
This example uses abfd->sections to start iteration and sect->next to traverse the linked list of sections, with bfd_section_size(sect) retrieving the size in bytes; alternative functions like bfd_get_section_by_name(abfd, "section_name") can target specific sections. To compile a program using the , link against the and the supporting libiberty library with a command such as gcc example.c -lbfd -liberty -o prog, assuming BFD is installed via . Errors from calls, such as failed opens or format checks, can be retrieved using bfd_get_error(), which returns an enumerated code like bfd_error_system_call for system-level issues; always check return values and handle NULL or FALSE appropriately. For advanced operations, are accessed via long bfd_canonicalize_symtab(bfd *abfd, asymbol **location), which populates an array of canonical symbols up to the file's symbol count, returned as the number of symbols read (or -1 on error). Relocation records are processed similarly with long bfd_canonicalize_reloc(bfd *abfd, asection *section, arelent **relptr, asymbol **symbols), which fills an array of relocations for a given , requiring the symbol table for resolution. Utility functions like bfd_get_filename(abfd) retrieve the associated filename string, while flagword bfd_set_section_flags(abfd, asection *sec, flagword flags) modifies section attributes, such as setting SEC_READONLY. The BFD API is not inherently thread-safe; operations on a shared bfd * require external locking mechanisms in multi-threaded applications to prevent concurrent access issues, though reporting via bfd_errmsg uses . For complete details on all functions and structures, consult the official BFD manual, available as bfd.info in the Binutils documentation or .

Limitations and Alternatives

Known Limitations

The Binary File Descriptor (BFD) library introduces performance overhead due to its abstraction layer, which adds when handling object files compared to native format-specific implementations. Benchmarks indicate that the GNU linker (ld.bfd), which relies on BFD, can be 5 to 10 times slower than modern alternatives like LLVM's LLD for large-scale linking tasks, such as building complex software projects. This overhead stems from the uniform interface that processes diverse formats, prioritizing portability over optimized direct access. BFD provides incomplete support for certain proprietary and emerging object file formats, resulting in loss of fidelity during manipulation. For instance, its Mach-O backend encounters issues with many files, limiting reliable reading and writing for macOS binaries despite basic functionality in tools like objdump. Similarly, support for WebAssembly was experimental as of 2017 through dedicated backends, but lacks full integration for advanced features without additional community contributions. These gaps arise because BFD's design focuses on common open formats, often requiring custom extensions for proprietary ones. The library's complexity, encompassing over 6 million lines of code across the broader Binutils suite with BFD as a component, poses significant challenges. This scale contributes to persistent , particularly in less-used backends, such as the recent CVE-2025-8224, a dereference in the ELF handling code potentially leading to denial of service. Rare formats are especially prone to such vulnerabilities due to infrequent testing and updates. Portability issues further limit BFD's applicability, as it assumes environments and conventions in its internals. Adapting BFD to non- systems or new architectures requires substantial effort, often involving automated retargeting techniques to refactor platform-specific assumptions.

Alternative Approaches

The project's (MC) layer and LLD linker serve as modern alternatives to BFD, emphasizing high performance and native support for prevalent formats such as , COFF/, , and . The MC layer facilitates , disassembly, and manipulation through a modular design that integrates seamlessly with compilers like , while LLD acts as a for traditional linkers, achieving link times 2-10 times faster than BFD-based tools on large projects. These components are widely adopted in ecosystems like Rust's build system and Apple's development , though they cover fewer formats overall—primarily around five major ones—compared to BFD's broad compatibility with legacy and niche variants. The linker, a high-performance -focused alternative, can outperform LLD and ld in 2025 benchmarks, using advanced algorithms for faster linking on multi-core systems. For Linux-specific ELF handling, the elfutils package offers libelf as a lightweight library focused exclusively on reading, modifying, and generating ELF files, providing faster operations for ELF-centric tasks without BFD's multi-format overhead or abstraction layers. This makes libelf suitable for tools like debuggers and analyzers on ELF-dominant platforms, where its specialized scope avoids the complexity and potential slowdowns of BFD's generalized interface. In proprietary environments, custom format handlers bypass abstraction libraries entirely for optimized speed; Microsoft's link.exe, for instance, directly processes COFF/PE object files and libraries without a portable layer like BFD, enabling efficient linking tailored to Windows executables and DLLs. This approach prioritizes platform-specific performance over cross-format portability, as seen in Visual Studio builds. Emerging Rust crates provide parsing-focused alternatives for binary analysis and object file manipulation. The goblin crate enables cross-platform parsing of formats including ELF, PE, Mach-O, and archives, emphasizing zero-copy and endian-aware operations for security tools and loaders. Complementing it, the object crate offers a unified API for reading relocatable object files and executables across platforms, with partial write support, though neither fully replicates BFD's writing capabilities for all formats. Overall, these alternatives address BFD's performance bottlenecks in modern workflows by favoring speed and over exhaustive format support, with paths evident in projects like plugins integrating backends and Arm's embedded toolchains shifting to LLD for faster builds. While BFD remains essential for legacy multi-format needs, tools, , and crates are increasingly preferred in performance-critical, contemporary development.

References

  1. [1]
    Overview (Untitled Document) - Sourceware
    BFD is a package which allows applications to use the same routines to operate on object files whatever the object file format. A new object file format can be ...
  2. [2]
    History (Untitled Document) - Sourceware
    One spur behind BFD was the desire, on the part of the GNU 960 team at Intel Oregon, for interoperability of applications on their COFF and b.out file formats.
  3. [3]
    1.2 How To Use BFD - Sourceware
    BFD provides a common interface to the parts of an object file for a calling application. When an application successfully opens a target file (object, archive, ...
  4. [4]
    BFD (LD) - Sourceware
    The linker accesses object and archive files using the BFD libraries. These libraries allow the linker to use the same routines to operate on object files.
  5. [5]
    Binutils - GNU Project - Free Software Foundation
    Most of these programs use BFD, the Binary File Descriptor library, to do low-level manipulation. ... licensed under a Creative Commons Attribution-NoDerivatives ...
  6. [6]
    Formats (Untitled Document) - Sourceware
    A format is a BFD concept of high level file contents type. The formats supported by BFD are: bfd_object. The BFD may contain data, symbols, relocations and ...
  7. [7]
    Architectures (Untitled Document) - Sourceware
    Figure out if BFD supports any cpu which could be described with the name string . Return a pointer to an arch_info structure if a machine is found ...
  8. [8]
    Targets (Untitled Document) - Sourceware
    2.12 Targets ¶. Each port of BFD to a different machine requires the creation of a target back end. All the back end provides to the root part of BFD is a ...
  9. [9]
    Michael Tiemann - O'Reilly
    Founded in 1989, Cygnus Solutions was the first, and according to a survey by Forbes magazine in August 1998, is by far the largest Open Source business ...An Entrepreneur's Account · Michael Tiemann · Gnupro
  10. [10]
    [PDF] libbfd - Sourceware
    BFD is a package which allows applications to use the same routines to operate on object files whatever the object file format. A new object file format can ...
  11. [11]
    Index of /pub/binutils/old-releases - Sourceware
    Index of /pub/binutils/old-releases ; [ ], binutils-2.1.tar.bz2, 1993-02-26 08:20 ; [ ], binutils-2.2.1.tar.bz2, 1993-05-21 00:06 ; [ ], binutils-2.2.tar.bz2, 1993 ...Missing: BFD | Show results with:BFD
  12. [12]
    Top - Sourceware
    BFD is a package which allows applications to use the same routines to operate on object files whatever the object file format.
  13. [13]
    LIB BFD, the Binary File Descriptor Library - ftp://ftp.gnu.org
    BFD is a package which allows applications to use the same routines to operate on object files whatever the object file format. A new object file format can be ...
  14. [14]
    [PDF] libbfd - Sourceware
    BFD is a package which allows applications to use the same routines to operate on object files whatever the object file format. A new object file format can ...
  15. [15]
    sframe - BINUTILS Wiki - Sourceware
    SFrame is a stack trace format which keeps track of the minimal necessary information needed for generating stack traces.Change History · SFrame GNU Binutils work items · Projects involving SFrame
  16. [16]
    CVE-2025-7546 Detail - NVD
    Jul 13, 2025 · A vulnerability, which was classified as problematic, has been found in GNU Binutils 2.45. Affected by this issue is the function ...
  17. [17]
    GNU Binutils 2.44 Released
    Feb 2, 2025 · We are pleased to announce that version 2.44 of the GNU Binutils project sources have been released and are now available for download.
  18. [18]
    Top - Sourceware
    BFD is a package which allows applications to use the same routines to operate on object files whatever the object file format. A new object file format can be ...
  19. [19]
  20. [20]
  21. [21]
  22. [22]
  23. [23]
  24. [24]
  25. [25]
  26. [26]
  27. [27]
  28. [28]
  29. [29]
  30. [30]
  31. [31]
    A Detailed Look At The Speed Advantages To LLVM's LLD Linker
    Feb 6, 2019 · Smith found LLD was faster than the Gold linker by two to three times while faster than the standard ld.bfd linker by five to ten times.
  32. [32]
    [libbdf] Mach-O format support ? - Sourceware
    Apr 14, 2010 · ... bfd is good enough to > have tools such as objdump working as well ... GNU assembler, linker and binary utilities ii binutils-dev 2.20 ...Missing: limitations | Show results with:limitations
  33. [33]
    bfd/wasm-module.h - binutils-gdb - Git at Google
    BFD back-end for WebAssembly modules. Copyright (C) 2017 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library.
  34. [34]
    GNU binutils - Open Hub
    In a Nutshell, GNU binutils... ·... has had 123,994 commits made by 1,347 contributors representing 6,080,826 lines of code ·... is mostly written in C with a ...
  35. [35]
    CVE-2025-8224 Detail - NVD
    Jul 27, 2025 · Description. A vulnerability has been found in GNU Binutils 2.44 and classified as problematic. This vulnerability affects the function bfd_elf ...Missing: compatibility | Show results with:compatibility
  36. [36]
    [PDF] Automatic Porting of Binary File Descriptor Library
    GNU's BFD library is a package which contains a set of common routines to manipulate object files [17]. There are three types of object files: • relocatable ...<|control11|><|separator|>
  37. [37]
    [PDF] lld: A Fast, Simple and Portable Linker - LLVM
    GNU binutils have two linkers, bfd and gold. ○ bfd linker got ... How much simpler? One metric is lines of code, but it is not an apple-to-apple comparison.
  38. [38]
    LLD and GNU linker incompatibilities - MaskRay
    Dec 19, 2020 · LLD is a linker from the LLVM project that is a drop-in replacement for system linkers and runs much faster than them.
  39. [39]
    MSVC Linker options - Microsoft Learn
    Mar 19, 2025 · LINK.exe links Common Object File Format (COFF) object files and libraries to create an executable (EXE) file or a dynamic-link library (DLL).
  40. [40]
    m4b/goblin: An impish, cross-platform binary parsing crate ... - GitHub
    Features libgoblin aims to be your one-stop shop for binary parsing, loading, and analysis. Use-cases Goblin primarily supports the following important use ...
  41. [41]
    object - crates.io: Rust Package Registry
    Aug 13, 2025 · The object crate provides a unified interface to working with object files across platforms. It supports reading relocatable object files and executable files.
  42. [42]
    Gnu bintools - llvm bintools migration guide - Beginners
    Jun 14, 2022 · Hi,. is there a doc/migration guide from GNU bintools to llvm bintools? which features is supported/not supported/changed etc?
  43. [43]
    Migrating a project from GCC to Arm Toolchain for Embedded
    Mar 28, 2025 · The next-generation Arm Toolchain for Embedded (ATfE) is 100% open source and uses the LLVM 'lld' linker, which accepts GNU-style linker scripts ...