aboutsummaryrefslogtreecommitdiff
path: root/bfd/bpf-reloc.def
blob: 65228d440096a3c0e9dc825c2fe54c74bc0900b1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
  /* This reloc does nothing.  */
  BPF_HOWTO (R_BPF_NONE,		/* type */
	 0,			/* rightshift */
	 0,			/* size */
	 0,			/* bitsize */
	 false,			/* pc_relative */
	 0,			/* bitpos */
	 complain_overflow_dont, /* complain_on_overflow */
	 bpf_elf_generic_reloc, /* special_function */
	 "R_BPF_NONE",		/* name */
	 false,			/* partial_inplace */
	 0,			/* src_mask */
	 0,			/* dst_mask */
	 false)		/* pcrel_offset */

  /* 64-immediate in LDDW instruction.  */
  BPF_HOWTO (R_BPF_64_64,		/* type */
	 0,			/* rightshift */
	 8,			/* size */
	 64,			/* bitsize */
	 false,			/* pc_relative */
	 32,			/* bitpos */
	 complain_overflow_signed, /* complain_on_overflow */
	 bpf_elf_generic_reloc, /* special_function */
	 "R_BPF_64_64",	/* name */
	 true,			/* partial_inplace */
	 MINUS_ONE,		/* src_mask */
	 MINUS_ONE,		/* dst_mask */
	 true)			/* pcrel_offset */

  /* 32-bit data.  */
  BPF_HOWTO (R_BPF_64_ABS32,		/* type */
	 0,			/* rightshift */
	 4,			/* size */
	 32,			/* bitsize */
	 false,			/* pc_relative */
	 0,			/* bitpos */
	 complain_overflow_bitfield, /* complain_on_overflow */
	 bpf_elf_generic_reloc, /* special_function */
	 "R_BPF_64_ABS32",	/* name */
	 true,			/* partial_inplace */
	 0xffffffff,		/* src_mask */
	 0xffffffff,		/* dst_mask */
	 true)			/* pcrel_offset */

  /* 64-bit data.  */
  BPF_HOWTO (R_BPF_64_ABS64,		/* type */
	 0,			/* rightshift */
	 8,			/* size */
	 64,			/* bitsize */
	 false,			/* pc_relative */
	 0,			/* bitpos */
	 complain_overflow_bitfield, /* complain_on_overflow */
	 bpf_elf_generic_reloc, /* special_function */
	 "R_BPF_64_ABS64",	/* name */
	 true,			/* partial_inplace */
	 0,			/* src_mask */
	 MINUS_ONE,		/* dst_mask */
	 true)			/* pcrel_offset */

  /* 32-bit PC-relative address in call instructions.  */
  BPF_HOWTO (R_BPF_64_32,      /* type */
        0,                     /* rightshift */
        4,                     /* size */
        32,                    /* bitsize */
        true,                  /* pc_relative */
        32,                    /* bitpos */
        complain_overflow_signed, /* complain_on_overflow */
        bpf_elf_generic_reloc, /* special_function */
        "R_BPF_64_32",         /* name */
        true,                  /* partial_inplace */
        0xffffffff,            /* src_mask */
        0xffffffff,            /* dst_mask */
        true)                  /* pcrel_offset */

  /* 16-bit PC-relative address in load instructions.  */
  BPF_HOWTO (R_BPF_GNU_64_16,      /* type */
        0,                     /* rightshift */
        2,                     /* size */
        16,                    /* bitsize */
        true,                  /* pc_relative */
        16,                    /* bitpos */
        complain_overflow_signed, /* complain_on_overflow */
        bpf_elf_generic_reloc, /* special_function */
        "R_BPF_GNU_64_16",     /* name */
        true,                  /* partial_inplace */
        0xffff,                /* src_mask */
        0xffff,                /* dst_mask */
        true)                  /* pcrel_offset */

  /* R_BPF_64_NODYLD32 is not used by GNU tools - but it is generated by LLVM.
     We provide an entry here so that tools like strip can safely handle BPF
     binaries generated by other tools.
     R_BPF_64_NODYLD32 should be fixed at linker like a R_BPF_64_ABS32.
     The difference to ABS32 is that LLVM execution engine does not resolve
     R_BPF_64_NODYLD32 relocations.  */
  BPF_HOWTO (R_BPF_64_NODYLD32,	/* type */
	 0,			/* rightshift */
	 4,			/* size */
	 32,			/* bitsize */
	 false,			/* pc_relative */
	 0,			/* bitpos */
	 complain_overflow_bitfield, /* complain_on_overflow */
	 bpf_elf_generic_reloc, /* special_function */
	 "R_BPF_64_NODYLD32",	/* name */
	 true,			/* partial_inplace */
	 0xffffffff,		/* src_mask */
	 0xffffffff,		/* dst_mask */
	 true)			/* pcrel_offset */