llvm-ar - LLVM archiver
=======================

.. program:: llvm-ar

SYNOPSIS
--------

**llvm-ar** [-]{dmpqrtx}[Rabfikou] [relpos] [count] <archive> [files...]

DESCRIPTION
-----------

The **llvm-ar** command is similar to the common Unix utility, ``ar``. It
archives several files together into a single file. The intent for this is
to produce archive libraries by LLVM bitcode that can be linked into an
LLVM program. However, the archive can contain any kind of file. By default,
**llvm-ar** generates a symbol table that makes linking faster because
only the symbol table needs to be consulted, not each individual file member
of the archive.

The **llvm-ar** command can be used to *read* SVR4, GNU and BSD style archive
files. However, right now it can only write in the GNU format. If an
SVR4 or BSD style archive is used with the ``r`` (replace) or ``q`` (quick
update) operations, the archive will be reconstructed in GNU format.

Here's where **llvm-ar** departs from previous ``ar`` implementations:

*Symbol Table*

 Since **llvm-ar** supports bitcode files. The symbol table it creates
 is in GNU format and includes both native and bitcode files.

*Long Paths*

 Currently **llvm-ar** can read GNU and BSD long file names, but only writes
 archives with the GNU format.
 
*Windows Paths*

 When on Windows **llvm-ar** treats the names of archived *files* in the same
 case sensitive manner as the operating system. When on a non-Windows machine
 **llvm-ar** does not consider character case.

OPTIONS
-------

The options to **llvm-ar** are compatible with other ``ar`` implementations.
However, there are a few modifiers (*R*) that are not found in other ``ar``
implementations. The options to **llvm-ar** specify a single basic operation to
perform on the archive, a variety of modifiers for that operation, the name of
the archive file, and an optional list of file names. These options are used to
determine how **llvm-ar** should process the archive file.

The Operations and Modifiers are explained in the sections below. The minimal
set of options is at least one operator and the name of the archive. Typically
archive files end with a ``.a`` suffix, but this is not required. Following
the *archive-name* comes a list of *files* that indicate the specific members
of the archive to operate on. If the *files* option is not specified, it
generally means either "none" or "all" members, depending on the operation.

Operations
~~~~~~~~~~

d

 Delete files from the archive. No modifiers are applicable to this operation.
 The *files* options specify which members should be removed from the
 archive. It is not an error if a specified file does not appear in the archive.
 If no *files* are specified, the archive is not modified.

m[abi]

 Move files from one location in the archive to another. The *a*, *b*, and
 *i* modifiers apply to this operation. The *files* will all be moved
 to the location given by the modifiers. If no modifiers are used, the files
 will be moved to the end of the archive. If no *files* are specified, the
 archive is not modified.

p

 Print files to the standard output. This operation simply prints the
 *files* indicated to the standard output. If no *files* are
 specified, the entire  archive is printed.  Printing bitcode files is
 ill-advised as they might confuse your terminal settings. The *p*
 operation never modifies the archive.

q

 Quickly append files to the end of the archive.  This operation quickly adds the
 *files* to the archive without checking for duplicates that should be
 removed first. If no *files* are specified, the archive is not modified.
 Because of the way that **llvm-ar** constructs the archive file, its dubious
 whether the *q* operation is any faster than the *r* operation.

r[abu]

 Replace or insert file members. The *a*, *b*,  and *u*
 modifiers apply to this operation. This operation will replace existing
 *files* or insert them at the end of the archive if they do not exist. If no
 *files* are specified, the archive is not modified.

t[vO]

 Print the table of contents. Without any modifiers, this operation just prints
 the names of the members to the standard output. With the *v* modifier,
 **llvm-ar** also prints out the file type (B=bitcode, S=symbol
 table, blank=regular file), the permission mode, the owner and group, the
 size, and the date. With the :option:`O` modifier, display member offsets.
 If any *files* are specified, the listing is only for those files. If no
 *files* are specified, the table of contents for the whole archive is printed.

x[oP]

 Extract archive members back to files. The *o* modifier applies to this
 operation. This operation retrieves the indicated *files* from the archive
 and writes them back to the operating system's file system. If no
 *files* are specified, the entire archive is extract.

Modifiers (operation specific)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The modifiers below are specific to certain operations. See the Operations
section (above) to determine which modifiers are applicable to which operations.

[a]

 When inserting or moving member files, this option specifies the destination of
 the new files as being after the *relpos* member. If *relpos* is not found,
 the files are placed at the end of the archive.

[b]

 When inserting or moving member files, this option specifies the destination of
 the new files as being before the *relpos* member. If *relpos* is not
 found, the files are placed at the end of the archive. This modifier is
 identical to the *i* modifier.

[i]

 A synonym for the *b* option.

[o]

 When extracting files, this option will cause **llvm-ar** to preserve the
 original modification times of the files it writes.

.. option:: O

 Display member offsets inside the archive.

[u]

 When replacing existing files in the archive, only replace those files that have
 a time stamp than the time stamp of the member in the archive.

Modifiers (generic)
~~~~~~~~~~~~~~~~~~~

The modifiers below may be applied to any operation.

[c]

 For all operations, **llvm-ar** will always create the archive if it doesn't
 exist. Normally, **llvm-ar** will print a warning message indicating that the
 archive is being created. Using this modifier turns off that warning.


[s]

 This modifier requests that an archive index (or symbol table) be added to the
 archive. This is the default mode of operation. The symbol table will contain
 all the externally visible functions and global variables defined by all the
 bitcode files in the archive.

[S]

 This modifier is the opposite of the *s* modifier. It instructs **llvm-ar** to
 not build the symbol table. If both *s* and *S* are used, the last modifier to
 occur in the options will prevail.

[v]

 This modifier instructs **llvm-ar** to be verbose about what it is doing. Each
 editing operation taken against the archive will produce a line of output saying
 what is being done.

STANDARDS
---------

The **llvm-ar** utility is intended to provide a superset of the IEEE Std 1003.2
(POSIX.2) functionality for ``ar``. **llvm-ar** can read both SVR4 and BSD4.4 (or
macOS) archives. If the ``f`` modifier is given to the ``x`` or ``r`` operations
then **llvm-ar** will write SVR4 compatible archives. Without this modifier,
**llvm-ar** will write BSD4.4 compatible archives that have long names
immediately after the header and indicated using the "#1/ddd" notation for the
name in the header.

FILE FORMAT
-----------

The file format for LLVM Archive files is similar to that of BSD 4.4 or macOS
archive files. In fact, except for the symbol table, the ``ar`` commands on those
operating systems should be able to read LLVM archive files. The details of the
file format follow.

Each archive begins with the archive magic number which is the eight printable
characters "!<arch>\n" where \n represents the newline character (0x0A).
Following the magic number, the file is composed of even length members that
begin with an archive header and end with a \n padding character if necessary
(to make the length even). Each file member is composed of a header (defined
below), an optional newline-terminated "long file name" and the contents of
the file.

The fields of the header are described in the items below. All fields of the
header contain only ASCII characters, are left justified and are right padded
with space characters.

name - char[16]

 This field of the header provides the name of the archive member. If the name is
 longer than 15 characters or contains a slash (/) character, then this field
 contains ``#1/nnn`` where ``nnn`` provides the length of the name and the ``#1/``
 is literal.  In this case, the actual name of the file is provided in the ``nnn``
 bytes immediately following the header. If the name is 15 characters or less, it
 is contained directly in this field and terminated with a slash (/) character.

date - char[12]

 This field provides the date of modification of the file in the form of a
 decimal encoded number that provides the number of seconds since the epoch
 (since 00:00:00 Jan 1, 1970) per Posix specifications.

uid - char[6]

 This field provides the user id of the file encoded as a decimal ASCII string.
 This field might not make much sense on non-Unix systems. On Unix, it is the
 same value as the st_uid field of the stat structure returned by the stat(2)
 operating system call.

gid - char[6]

 This field provides the group id of the file encoded as a decimal ASCII string.
 This field might not make much sense on non-Unix systems. On Unix, it is the
 same value as the st_gid field of the stat structure returned by the stat(2)
 operating system call.

mode - char[8]

 This field provides the access mode of the file encoded as an octal ASCII
 string. This field might not make much sense on non-Unix systems. On Unix, it
 is the same value as the st_mode field of the stat structure returned by the
 stat(2) operating system call.

size - char[10]

 This field provides the size of the file, in bytes, encoded as a decimal ASCII
 string.

fmag - char[2]

 This field is the archive file member magic number. Its content is always the
 two characters back tick (0x60) and newline (0x0A). This provides some measure
 utility in identifying archive files that have been corrupted.

offset - vbr encoded 32-bit integer

 The offset item provides the offset into the archive file where the bitcode
 member is stored that is associated with the symbol. The offset value is 0
 based at the start of the first "normal" file member. To derive the actual
 file offset of the member, you must add the number of bytes occupied by the file
 signature (8 bytes) and the symbol tables. The value of this item is encoded
 using variable bit rate encoding to reduce the size of the symbol table.
 Variable bit rate encoding uses the high bit (0x80) of each byte to indicate
 if there are more bytes to follow. The remaining 7 bits in each byte carry bits
 from the value. The final byte does not have the high bit set.

length - vbr encoded 32-bit integer

 The length item provides the length of the symbol that follows. Like this
 *offset* item, the length is variable bit rate encoded.

symbol - character array

 The symbol item provides the text of the symbol that is associated with the
 *offset*. The symbol is not terminated by any character. Its length is provided
 by the *length* field. Note that is allowed (but unwise) to use non-printing
 characters (even 0x00) in the symbol. This allows for multiple encodings of
 symbol names.

EXIT STATUS
-----------

If **llvm-ar** succeeds, it will exit with 0.  A usage error, results
in an exit code of 1. A hard (file system typically) error results in an
exit code of 2. Miscellaneous or unknown errors result in an
exit code of 3.

SEE ALSO
--------

ar(1)
