[PATCH 3/3] doc: global data pointer

Daniel Schwierzeck daniel.schwierzeck at gmail.com
Wed Sep 23 01:34:25 CEST 2020


Am Samstag, den 19.09.2020, 18:03 +0200 schrieb Heinrich Schuchardt:
> Add the description of the global data pointer to the generated HTML
> documentation.
> 
> Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
> ---
>  doc/develop/global_data.rst | 53 +++++++++++++++++++++++++++++++++++++
>  doc/develop/index.rst       |  1 +
>  2 files changed, 54 insertions(+)
>  create mode 100644 doc/develop/global_data.rst
> 
> diff --git a/doc/develop/global_data.rst b/doc/develop/global_data.rst
> new file mode 100644
> index 0000000000..9e7c8a24da
> --- /dev/null
> +++ b/doc/develop/global_data.rst
> @@ -0,0 +1,53 @@
> +.. SPDX-License-Identifier: GPL-2.0+
> +
> +Global data
> +===========
> +
> +Globally required fields are held in the global data structure. A pointer to the
> +structure is available as symbol gd. The symbol is made available by the macro
> +%DECLARE_GLOBAL_DATA_PTR.
> +
> +Register pointing to global data
> +--------------------------------
> +
> +On most architectures the global data pointer is stored in a register.
> +
> ++------------+----------+
> +| ARC        | r25      |
> ++------------+----------+
> +| ARM 32bit  | r9       |
> ++------------+----------+
> +| ARM 64bit  | x18      |
> ++------------+----------+
> +| M68000     | d7       |
> ++------------+----------+
> +| MicroBlaze | r31      |
> ++------------+----------+
> +| NDS32      | r10      |
> ++------------+----------+
> +| Nios II    | gp       |
> ++------------+----------+
> +| PowerPC    | r2       |
> ++------------+----------+
> +| RISC-V     | gp (x3)  |
> ++------------+----------+
> +| SuperH     | r13      |
> ++------------+----------+

if you want to add MIPS to the list, the register is: $26 (k0)

> +
> +The sandbox, x86, and Xtensa are notable exceptions.
> +
> +Clang for ARM does not support assigning a global register. When using Clang
> +gd is defined as an inline function using assembly code. This adds a few bytes
> +to the code size.
> +
> +Binaries called by U-Boot are not aware of the register usage and will not
> +conserve gd. UEFI binaries call the API provided by U-Boot and may return to
> +U-Boot. The value of gd has to be saved every time U-Boot is left and restored
> +whenever U-Boot is reentered. This is also relevant for the implementation of
> +function tracing. For setting the value of gd function set_gd() can be used.
> +
> +Global data structure
> +---------------------
> +
> +.. kernel-doc:: include/asm-generic/global_data.h
> +   :internal:
> diff --git a/doc/develop/index.rst b/doc/develop/index.rst
> index 98a95ad434..89e80eab94 100644
> --- a/doc/develop/index.rst
> +++ b/doc/develop/index.rst
> @@ -9,4 +9,5 @@ Develop U-Boot
> 
>     coccinelle
>     crash_dumps
> +   global_data
>     logging
> --
> 2.28.0
> 
-- 
- Daniel



More information about the U-Boot mailing list