bpf: Added linker support for R_BPF_64_NODYLD32.

This patch adds linker support to patch R_BPF_64_NODYLD32 relocations.
The implementation was based on comments and code in LLVM, as the GNU
toolchain does not uses this relocation type.
This commit is contained in:
Cupertino Miranda 2023-12-20 12:24:03 +00:00
parent 30a9c613df
commit ad4e57ab11
2 changed files with 11 additions and 7 deletions

View File

@ -90,17 +90,20 @@
/* 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. */
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 */
0, /* size */
0, /* bitsize */
4, /* size */
32, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
complain_overflow_bitfield, /* complain_on_overflow */
bpf_elf_generic_reloc, /* special_function */
"R_BPF_64_NODYLD32", /* name */
false, /* partial_inplace */
0, /* src_mask */
0, /* dst_mask */
false) /* pcrel_offset */
0xffffffff, /* src_mask */
0xffffffff, /* dst_mask */
true) /* pcrel_offset */

View File

@ -276,6 +276,7 @@ bpf_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
}
case R_BPF_64_ABS64:
case R_BPF_64_ABS32:
case R_BPF_64_NODYLD32:
{
addend = bfd_get (howto->bitsize, input_bfd, where);
relocation += addend;