SETARCH(8) System Administration SETARCH(8)

# [NAME](#NAME)

setarch - change reported architecture in new program environment and/or set personality flags

# [SYNOPSIS](#SYNOPSIS)

**setarch** \[*arch*] \[options] \[*program* \[*argument*...]]

*arch* \[options] \[*program* \[*argument*...]]

# [DESCRIPTION](#DESCRIPTION)

**setarch** modifies the execution domain and process personality flags.

The execution domain currently only affects the output of **uname -m**. For example, on an AMD64 system, running **setarch i386** *program* will cause *program* to see **i686** instead of **x86\_64** as the machine type. The default *program* is **/bin/sh**.

Since version 2.33, the *arch* command-line argument is optional and **setarch** may be used to change personality flags (ADDR\_LIMIT\_3GB, SHORT\_INODE, etc) without modification of the execution domain.

# [OPTIONS](#OPTIONS)

**--list**

List the architectures that **setarch** knows about. Whether **setarch** can actually set each of these architectures depends on the running kernel.

**--show**\[**=personality**]

Show the currently active personality and flags. If the *personality* argument is provided, that personality is shown instead of the current one. *personality* is a hexadecimal number whose possible values are described in **sys/personality.h**.

**-p**, **--pid=pid**

When used with **--show**, show the personality and flags of the specified process.

**--uname-2.6**

Causes the specified *program* to see a kernel version number beginning with 2.6. Turns on **UNAME26**.

**-v**, **--verbose**

Be verbose.

**-3**, **--3gb**

The specified *program* should use a maximum of 3GB of address space. Supported on x86. Turns on **ADDR\_LIMIT\_3GB**.

**--4gb**

This option has no effect. It is retained for backward compatibility only, and may be removed in future releases.

**-B**, **--32bit**

Limit the address space to 32 bits to emulate hardware. Supported on ARM and Alpha. Turns on **ADDR\_LIMIT\_32BIT**.

**-F**, **--fdpic-funcptrs**

Treat user-space function pointers to signal handlers as pointers to address descriptors. This option has no effect on architectures that do not support **FDPIC** ELF binaries. In kernel v4.14 support is limited to ARM, Blackfin, Fujitsu FR-V, and SuperH CPU architectures.

**-I**, **--short-inode**

Obsolete bug emulation flag. Turns on **SHORT\_INODE**.

**-L**, **--addr-compat-layout**

Provide legacy virtual address space layout. Use when the *program* binary does not have **PT\_GNU\_STACK** ELF header. Turns on **ADDR\_COMPAT\_LAYOUT**.

**-R**, **--addr-no-randomize**

Disables randomization of the virtual address space. Turns on **ADDR\_NO\_RANDOMIZE**.

**-S**, **--whole-seconds**

Obsolete bug emulation flag. Turns on **WHOLE\_SECONDS**.

**-T**, **--sticky-timeouts**

This makes [**select**(2)](/man/os/util-linux/select.2), [**pselect**(2)](/man/os/util-linux/pselect.2), and [**ppoll**(2)](/man/os/util-linux/ppoll.2) system calls preserve the timeout value instead of modifying it to reflect the amount of time not slept when interrupted by a signal handler. Use when *program* depends on this behavior. For more details see the timeout description in [**select**(2)](/man/os/util-linux/select.2) manual page. Turns on **STICKY\_TIMEOUTS**.

**-X**, **--read-implies-exec**

If this is set then [**mmap**(2)](/man/os/util-linux/mmap.2) **PROT\_READ** will also add the **PROT\_EXEC** bit - as expected by legacy x86 binaries. Notice that the ELF loader will automatically set this bit when it encounters a legacy binary. Turns on **READ\_IMPLIES\_EXEC**.

**-Z**, **--mmap-page-zero**

SVr4 bug emulation that will set [**mmap**(2)](/man/os/util-linux/mmap.2) page zero as read-only. Use when *program* depends on this behavior, and the source code is not available to be fixed. Turns on **MMAP\_PAGE\_ZERO**.

**-h**, **--help**

Display help text and exit.

**-V**, **--version**

Display version and exit.

# [EXAMPLES](#EXAMPLES)

```
setarch --addr-no-randomize mytestprog
setarch ppc32 rpmbuild --target=ppc --rebuild foo.src.rpm
setarch ppc32 -vL3 rpmbuild --target=ppc --rebuild bar.src.rpm
setarch ppc32 --32bit rpmbuild --target=ppc --rebuild foo.src.rpm
setarch --show
setarch --show=$(cat /proc/9284/personality)
setarch --show --pid 9284
```

# [AUTHORS](#AUTHORS)

*Elliot Lee* &lt;sopwith@redhat.com&gt;, *Jindrich Novy* &lt;jnovy@redhat.com&gt;, *Karel Zak* &lt;kzak@redhat.com&gt;

# [SEE ALSO](#SEE_ALSO)

[**personality**(2)](/man/os/util-linux/personality.2), [**select**(2)](/man/os/util-linux/select.2) \*[proc\_pid\_personality(5)](/man/os/util-linux/proc_pid_personality.5)

# [REPORTING BUGS](#REPORTING_BUGS)

For bug reports, use the *issue tracker* &lt;https://github.com/util-linux/util-linux/issues&gt;.

# [AVAILABILITY](#AVAILABILITY)

The **setarch** command is part of the util-linux package which can be downloaded from *Linux Kernel Archive* &lt;https://www.kernel.org/pub/linux/utils/util-linux/&gt;.

2026-09-25 util-linux 2.42.4

---

Document: x86_64(8) from util-linux 2.42.4-r0 (Chainguard OS)
