blob: 0845ce22a7e689b8b38f4b5b5235b372950602f1 [file] [log] [blame] [edit]
//===-- Implementation header for IRELATIVE relocations -------- *- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#ifndef LLVM_LIBC_STARTUP_LINUX_IRELATIVE_H
#define LLVM_LIBC_STARTUP_LINUX_IRELATIVE_H
#include "hdr/link_macros.h"
#include "hdr/stdint_proxy.h"
#include "src/__support/macros/config.h"
extern "C" {
[[gnu::weak, gnu::visibility("hidden")]] extern const ElfW(Rela)
__rela_iplt_start[]; // NOLINT
[[gnu::weak, gnu::visibility("hidden")]] extern const ElfW(Rela)
__rela_iplt_end[]; // NOLINT
}
namespace LIBC_NAMESPACE_DECL {
// Process IRELATIVE relocations (ifunc resolvers).
// base is the load bias (actual load address − link-time address). It is
// intptr_t (signed) because it is a difference; it is negative if the binary
// loaded below its link address. (unlikely but possible in principle)
void apply_irelative_relocs(intptr_t base, unsigned long hwcap,
unsigned long hwcap2);
} // namespace LIBC_NAMESPACE_DECL
#endif // LLVM_LIBC_STARTUP_LINUX_IRELATIVE_H