---
name: "llvm-offload-binary-22"
section: "1"
platform: "linux"
package: "llvm-22"
version: "1:22.1.8-1~deb13u4"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/llvm-offload-binary-22"
---

# llvm-offload-binary-22(1)

LLVM Offload Binary Packager

## NAME

llvm-offload-binary - LLVM Offload Binary Packager

## SYNOPSIS

**llvm-offload-binary** \[*options*\] \[*input files…*\]

## DESCRIPTION

**llvm-offload-binary** is a utility for bundling multiple device object files into a single binary container. The resulting binary can then be embedded into the host section table to form a fat binary containing offloading code for different targets. Conversely, it can also extract previously bundled device images.

The binary format begins with the magic bytes **0x10FF10AD**, followed by a version and size. Each binary contains its own header, allowing tools to locate offloading sections even when merged by a linker. Each offload entry includes metadata such as the device image kind, producer kind, and key-value string metadata. Multiple offloading images are concatenated to form a fat binary.

## EXAMPLE

```
# Package multiple device images into a fat binary:
$ llvm-offload-binary -o out.bin \
      --image=file=input.o,triple=nvptx64,arch=sm_70
# Extract a matching image from a fat binary:
$ llvm-offload-binary in.bin \
      --image=file=output.o,triple=nvptx64,arch=sm_70
# Extract and archive images into a static library:
$ llvm-offload-binary in.bin --archive -o libdevice.a
```

## OPTIONS

- **--archive**

  When extracting from an input binary, write all extracted images into a static archive instead of separate files.

- **--image=\<\<key\>=\<value\>,...\>**

  Specify a set of arbitrary key-value arguments describing an image. Commonly used optional keys include **arch** (e.g. **sm\_70** for CUDA) and **triple** (e.g. nvptx64-nvidia-cuda).

- **-o \<file\>**

  Write output to \<file\>. When bundling, this specifies the fat binary filename. When extracting, this specifies the archive or output file destination.

- **--help, -h**

  Display available options. Use **--help-hidden** to show hidden options.

- **--help-list**

  Display a list of all options. Use **--help-list-hidden** to show hidden ones.

- **--version**

  Display the version of the **llvm-offload-binary** executable.

- **@\<FILE\>**

  Read command-line options from response file *\<FILE\>*.

## BINARY FORMAT

The binary format is marked by the magic bytes **0x10FF10AD**, followed by a version number. Each created binary contains its own header. This allows tools to locate offloading sections even after linker operations such as relocatable linking. Conceptually, this binary format is a serialization of a string map and an image buffer.

## OFFLOADING BINARY HEADER

| | | |
| --- | --- | --- |
| Type | Identifier | Description |
| uint8\_t | magic | The magic bytes for the binary format (0x10FF10AD) |
| uint32\_t | version | Version of this format (currently version 1) |
| uint64\_t | size | Size of this binary in bytes |
| uint64\_t | entry offset | Absolute offset of the offload entries in bytes |
| uint64\_t | entry size | Size of the offload entries in bytes |

Each offload entry describes a bundled image along with its associated metadata.

## OFFLOADING ENTRY TABLE

| | | |
| --- | --- | --- |
| Type | Identifier | Description |
| uint16\_t | image kind | The kind of the device image (e.g. bc, cubin) |
| uint16\_t | offload kind | The producer of the image (e.g. openmp, cuda) |
| uint32\_t | flags | Generic flags for the image |
| uint64\_t | string offset | Absolute offset of the string metadata table |
| uint64\_t | num strings | Number of string entries in the table |
| uint64\_t | image offset | Absolute offset of the device image in bytes |
| uint64\_t | image size | Size of the device image in bytes |

The entry table refers to both a string table and the raw device image itself. The string table provides arbitrary key-value metadata.

## OFFLOADING STRING ENTRY

| | | |
| --- | --- | --- |
| Type | Identifier | Description |
| uint64\_t | key offset | Absolute byte offset of the key in the string table |
| uint64\_t | value offset | Absolute byte offset of the value in the string table |

The string table is a collection of null-terminated strings stored in the image. Offsets allow string entries to be interpreted as key-value pairs, enabling flexible metadata such as architecture or target triple.

The enumerated values for **image kind** and **offload kind** are:

## IMAGE KIND

| | | |
| --- | --- | --- |
| Name | Value | Description |
| IMG\_None | 0x00 | No image information provided |
| IMG\_Object | 0x01 | The image is a generic object file |
| IMG\_Bitcode | 0x02 | The image is an LLVM-IR bitcode file |
| IMG\_Cubin | 0x03 | The image is a CUDA object file |
| IMG\_Fatbinary | 0x04 | The image is a CUDA fatbinary file |
| IMG\_PTX | 0x05 | The image is a CUDA PTX file |

## OFFLOAD KIND

| | | |
| --- | --- | --- |
| Name | Value | Description |
| OFK\_None | 0x00 | No offloading information provided |
| OFK\_OpenMP | 0x01 | The producer was OpenMP offloading |
| OFK\_CUDA | 0x02 | The producer was CUDA |
| OFK\_HIP | 0x03 | The producer was HIP |
| OFK\_SYCL | 0x04 | The producer was SYCL |

## SEE ALSO

*[clang(1)](/clang/1.md), [llvm-objdump(1)](/llvm-objdump/1.md)*

## AUTHOR

*Maintained by the LLVM Team (https://llvm.org/).*

## COPYRIGHT

*2003-2026, LLVM Project*
