---
name: "setarch"
section: "8"
platform: "linux"
package: "util-linux"
version: "2.42.4-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/setarch"
---

# setarch(8)

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

## NAME

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

## SYNOPSIS

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

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

## 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

- **--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)](/select/2.md), [**pselect**(2)](/pselect/2.md), and [**ppoll**(2)](/ppoll/2.md) 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)](/select/2.md) manual page. Turns on **STICKY\_TIMEOUTS**.

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

  If this is set then [**mmap**(2)](/mmap/2.md) **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)](/mmap/2.md) 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

```
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

*Elliot Lee* \<sopwith@redhat.com\>, *Jindrich Novy* \<jnovy@redhat.com\>, *Karel Zak* \<kzak@redhat.com\>

## SEE ALSO

[**personality**(2)](/personality/2.md), [**select**(2)](/select/2.md) \*[proc\_pid\_personality(5)](/proc_pid_personality/5.md)

## REPORTING BUGS

For bug reports, use the *issue tracker* \<https://github.com/util-linux/util-linux/issues\>.

## AVAILABILITY

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