1 //=== MachORelocation.h - Mach-O Relocation Info ----------------*- C++ -*-===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 // This file defines the MachORelocation class.
11 //===----------------------------------------------------------------------===//
14 #ifndef LLVM_CODEGEN_MACHORELOCATION_H
15 #define LLVM_CODEGEN_MACHORELOCATION_H
17 #include "llvm/Support/DataTypes.h"
21 /// MachORelocation - This struct contains information about each relocation
22 /// that needs to be emitted to the file.
23 /// see <mach-o/reloc.h>
24 class MachORelocation
{
25 uint32_t r_address
; // offset in the section to what is being relocated
26 uint32_t r_symbolnum
; // symbol index if r_extern == 1 else section index
27 bool r_pcrel
; // was relocated pc-relative already
28 uint8_t r_length
; // length = 2 ^ r_length
30 uint8_t r_type
; // if not 0, machine-specific relocation type.
31 bool r_scattered
; // 1 = scattered, 0 = non-scattered
32 int32_t r_value
; // the value the item to be relocated is referring
35 uint32_t getPackedFields() const {
37 return (1 << 31) | (r_pcrel
<< 30) | ((r_length
& 3) << 28) |
38 ((r_type
& 15) << 24) | (r_address
& 0x00FFFFFF);
40 return (r_symbolnum
<< 8) | (r_pcrel
<< 7) | ((r_length
& 3) << 5) |
41 (r_extern
<< 4) | (r_type
& 15);
43 uint32_t getAddress() const { return r_scattered
? r_value
: r_address
; }
44 uint32_t getRawAddress() const { return r_address
; }
46 MachORelocation(uint32_t addr
, uint32_t index
, bool pcrel
, uint8_t len
,
47 bool ext
, uint8_t type
, bool scattered
= false,
49 r_address(addr
), r_symbolnum(index
), r_pcrel(pcrel
), r_length(len
),
50 r_extern(ext
), r_type(type
), r_scattered(scattered
), r_value(value
) {}
53 } // end llvm namespace
55 #endif // LLVM_CODEGEN_MACHORELOCATION_H