xref: /netbsd-src/external/gpl3/binutils/dist/bfd/bpf-reloc.def (revision cb63e24e8d6aae7ddac1859a9015f48b1d8bd90e)
1  /* This reloc does nothing.  */
2  BPF_HOWTO (R_BPF_NONE,		/* type */
3	 0,			/* rightshift */
4	 0,			/* size */
5	 0,			/* bitsize */
6	 false,			/* pc_relative */
7	 0,			/* bitpos */
8	 complain_overflow_dont, /* complain_on_overflow */
9	 bpf_elf_generic_reloc, /* special_function */
10	 "R_BPF_NONE",		/* name */
11	 false,			/* partial_inplace */
12	 0,			/* src_mask */
13	 0,			/* dst_mask */
14	 false)		/* pcrel_offset */
15
16  /* 64-immediate in LDDW instruction.  */
17  BPF_HOWTO (R_BPF_64_64,		/* type */
18	 0,			/* rightshift */
19	 8,			/* size */
20	 64,			/* bitsize */
21	 false,			/* pc_relative */
22	 32,			/* bitpos */
23	 complain_overflow_signed, /* complain_on_overflow */
24	 bpf_elf_generic_reloc, /* special_function */
25	 "R_BPF_64_64",	/* name */
26	 true,			/* partial_inplace */
27	 MINUS_ONE,		/* src_mask */
28	 MINUS_ONE,		/* dst_mask */
29	 true)			/* pcrel_offset */
30
31  /* 32-bit data.  */
32  BPF_HOWTO (R_BPF_64_ABS32,		/* type */
33	 0,			/* rightshift */
34	 4,			/* size */
35	 32,			/* bitsize */
36	 false,			/* pc_relative */
37	 0,			/* bitpos */
38	 complain_overflow_bitfield, /* complain_on_overflow */
39	 bpf_elf_generic_reloc, /* special_function */
40	 "R_BPF_64_ABS32",	/* name */
41	 true,			/* partial_inplace */
42	 0xffffffff,		/* src_mask */
43	 0xffffffff,		/* dst_mask */
44	 true)			/* pcrel_offset */
45
46  /* 64-bit data.  */
47  BPF_HOWTO (R_BPF_64_ABS64,		/* type */
48	 0,			/* rightshift */
49	 8,			/* size */
50	 64,			/* bitsize */
51	 false,			/* pc_relative */
52	 0,			/* bitpos */
53	 complain_overflow_bitfield, /* complain_on_overflow */
54	 bpf_elf_generic_reloc, /* special_function */
55	 "R_BPF_64_ABS64",	/* name */
56	 true,			/* partial_inplace */
57	 0,			/* src_mask */
58	 MINUS_ONE,		/* dst_mask */
59	 true)			/* pcrel_offset */
60
61  /* 32-bit PC-relative address in call instructions.  */
62  BPF_HOWTO (R_BPF_64_32,      /* type */
63        0,                     /* rightshift */
64        4,                     /* size */
65        32,                    /* bitsize */
66        true,                  /* pc_relative */
67        32,                    /* bitpos */
68        complain_overflow_signed, /* complain_on_overflow */
69        bpf_elf_generic_reloc, /* special_function */
70        "R_BPF_64_32",         /* name */
71        true,                  /* partial_inplace */
72        0xffffffff,            /* src_mask */
73        0xffffffff,            /* dst_mask */
74        true)                  /* pcrel_offset */
75
76  /* 16-bit PC-relative address in load instructions.  */
77  BPF_HOWTO (R_BPF_GNU_64_16,      /* type */
78        0,                     /* rightshift */
79        2,                     /* size */
80        16,                    /* bitsize */
81        true,                  /* pc_relative */
82        16,                    /* bitpos */
83        complain_overflow_signed, /* complain_on_overflow */
84        bpf_elf_generic_reloc, /* special_function */
85        "R_BPF_GNU_64_16",     /* name */
86        true,                  /* partial_inplace */
87        0xffff,                /* src_mask */
88        0xffff,                /* dst_mask */
89        true)                  /* pcrel_offset */
90
91  /* R_BPF_64_NODYLD32 is not used by GNU tools - but it is generated by LLVM.
92     We provide an entry here so that tools like strip can safely handle BPF
93     binaries generated by other tools.
94     R_BPF_64_NODYLD32 should be fixed at linker like a R_BPF_64_ABS32.
95     The difference to ABS32 is that LLVM execution engine does not resolve
96     R_BPF_64_NODYLD32 relocations.  */
97  BPF_HOWTO (R_BPF_64_NODYLD32,	/* type */
98	 0,			/* rightshift */
99	 4,			/* size */
100	 32,			/* bitsize */
101	 false,			/* pc_relative */
102	 0,			/* bitpos */
103	 complain_overflow_bitfield, /* complain_on_overflow */
104	 bpf_elf_generic_reloc, /* special_function */
105	 "R_BPF_64_NODYLD32",	/* name */
106	 true,			/* partial_inplace */
107	 0xffffffff,		/* src_mask */
108	 0xffffffff,		/* dst_mask */
109	 true)			/* pcrel_offset */
110