uboot/include/relocate.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0+ */
   2/*
   3 * (C) Copyright 2011
   4 * Graeme Russ, <graeme.russ@gmail.com>
   5 */
   6
   7#ifndef _RELOCATE_H_
   8#define _RELOCATE_H_
   9
  10#ifndef USE_HOSTCC
  11#include <asm/global_data.h>
  12
  13DECLARE_GLOBAL_DATA_PTR;
  14#endif
  15
  16/**
  17 * copy_uboot_to_ram() - Copy U-Boot to its new relocated position
  18 *
  19 * @return 0 if OK, -ve on error
  20 */
  21int copy_uboot_to_ram(void);
  22
  23/**
  24 * clear_bss() - Clear the BSS (Blocked Start by Symbol) segment
  25 *
  26 * This clears the memory used by global variables
  27 *
  28 * @return 0 if OK, -ve on error
  29 */
  30int clear_bss(void);
  31
  32/**
  33 * do_elf_reloc_fixups() - Fix up ELF relocations in the relocated code
  34 *
  35 * This processes the relocation tables to ensure that the code can run in its
  36 * new location.
  37 *
  38 * @return 0 if OK, -ve on error
  39 */
  40int do_elf_reloc_fixups(void);
  41
  42/**
  43 * manual_reloc() - Manually relocate a pointer if needed
  44 *
  45 * This is a nop in almost all cases, except for the systems with a broken gcc
  46 * which need to manually relocate some things.
  47 *
  48 * @ptr: Pointer to relocate
  49 * @return new pointer value
  50 */
  51static inline void *manual_reloc(void *ptr)
  52{
  53#ifndef USE_HOSTCC
  54        if (IS_ENABLED(CONFIG_NEEDS_MANUAL_RELOC))
  55                return ptr + gd->reloc_off;
  56#endif
  57                return ptr;
  58}
  59
  60#if !defined(USE_HOSTCC) && defined(CONFIG_NEEDS_MANUAL_RELOC)
  61#define MANUAL_RELOC(ptr)       (ptr) = manual_reloc(ptr)
  62#else
  63#define MANUAL_RELOC(ptr)       (void)(ptr)
  64#endif
  65
  66#endif  /* _RELOCATE_H_ */
  67