diff options
| -rw-r--r-- | backends/ChangeLog | 7 | ||||
| -rw-r--r-- | backends/Makefile.am | 2 | ||||
| -rw-r--r-- | backends/bpf_init.c | 1 | ||||
| -rw-r--r-- | backends/bpf_reloc.def | 2 | ||||
| -rw-r--r-- | backends/bpf_symbol.c | 54 | ||||
| -rw-r--r-- | tests/ChangeLog | 9 | ||||
| -rw-r--r-- | tests/Makefile.am | 5 | ||||
| -rwxr-xr-x | tests/run-reloc-bpf.sh | 33 | ||||
| -rw-r--r-- | tests/testfile-bpf-reloc.expect.bz2 | bin | 0 -> 300 bytes | |||
| -rw-r--r-- | tests/testfile-bpf-reloc.o.bz2 | bin | 0 -> 933 bytes |
10 files changed, 111 insertions, 2 deletions
diff --git a/backends/ChangeLog b/backends/ChangeLog index e97e33d6..3fa0f198 100644 --- a/backends/ChangeLog +++ b/backends/ChangeLog @@ -1,3 +1,10 @@ +2018-06-16 Yonghong Song <[email protected]> + + * Makefile.am (bpf_SRCS): Add bpf_symbol.c. + * bpf_init.c (bpf_init): Add reloc_simple_type HOOK. + * bpf_reloc.def: Add RELOC_TYPE 64_64 and 64_32. + * bpf_symbol.c: New file. + 2018-06-21 Mark Wielaard <[email protected]> * bpf_reloc.def: Remove MAP_FD. diff --git a/backends/Makefile.am b/backends/Makefile.am index 0c14ec86..e42d6741 100644 --- a/backends/Makefile.am +++ b/backends/Makefile.am @@ -126,7 +126,7 @@ am_libebl_m68k_pic_a_OBJECTS = $(m68k_SRCS:.c=.os) # an issue. m68k_corenote_no_Wpacked_not_aligned = yes -bpf_SRCS = bpf_init.c bpf_regs.c +bpf_SRCS = bpf_init.c bpf_regs.c bpf_symbol.c cpu_bpf = ../libcpu/libcpu_bpf.a libebl_bpf_pic_a_SOURCES = $(bpf_SRCS) am_libebl_bpf_pic_a_OBJECTS = $(bpf_SRCS:.c=.os) diff --git a/backends/bpf_init.c b/backends/bpf_init.c index 8ea1bc1a..a046e069 100644 --- a/backends/bpf_init.c +++ b/backends/bpf_init.c @@ -53,6 +53,7 @@ bpf_init (Elf *elf __attribute__ ((unused)), bpf_init_reloc (eh); HOOK (eh, register_info); HOOK (eh, disasm); + HOOK (eh, reloc_simple_type); return MODVERSION; } diff --git a/backends/bpf_reloc.def b/backends/bpf_reloc.def index 09ac3a6c..59f519b5 100644 --- a/backends/bpf_reloc.def +++ b/backends/bpf_reloc.def @@ -28,3 +28,5 @@ /* NAME, REL|EXEC|DYN */ RELOC_TYPE (NONE, EXEC|DYN) +RELOC_TYPE (64_64, REL) +RELOC_TYPE (64_32, REL) diff --git a/backends/bpf_symbol.c b/backends/bpf_symbol.c new file mode 100644 index 00000000..c9856f26 --- /dev/null +++ b/backends/bpf_symbol.c @@ -0,0 +1,54 @@ +/* BPF specific symbolic name handling. + This file is part of elfutils. + + This file is free software; you can redistribute it and/or modify + it under the terms of either + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at + your option) any later version + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at + your option) any later version + + or both in parallel, as here. + + elfutils is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see <http://www.gnu.org/licenses/>. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <assert.h> +#include <elf.h> +#include <stddef.h> +#include <string.h> + +#define BACKEND bpf_ +#include "libebl_CPU.h" + + +/* Check for the simple reloc types. */ +Elf_Type +bpf_reloc_simple_type (Ebl *ebl __attribute__ ((unused)), int type) +{ + switch (type) + { + case R_BPF_64_64: + return ELF_T_XWORD; + case R_BPF_64_32: + return ELF_T_WORD; + default: + return ELF_T_NUM; + } +} diff --git a/tests/ChangeLog b/tests/ChangeLog index 4abbd125..c4942860 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,12 @@ +2018-06-16 Yonghong Song <[email protected]> + + * run-reloc-bpf.sh: New test. + * testfile-bpf-reloc.o.bz2: New test file. + * testfile-bpf-reloc.expect.bz2: New test file. + * Makefile.am (TESTS): Add run-reloc-bpf.sh. + (EXTRA_DIST): Add run-reloc-bpf.sh, testfile-bpf-reloc.o.bz2 and + testfile-bpf-reloc.expect.bz2. + 2018-06-13 Mark Wielaard <[email protected]> * run-readelf-const-values.sh: New test. diff --git a/tests/Makefile.am b/tests/Makefile.am index 2d63da6a..bdb82fc0 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -146,7 +146,8 @@ TESTS = run-arextract.sh run-arsymtest.sh run-ar.sh newfile test-nlist \ run-dwarf-die-addr-die.sh \ run-get-units-invalid.sh run-get-units-split.sh \ run-attr-integrate-skel.sh \ - run-all-dwarf-ranges.sh run-unit-info.sh + run-all-dwarf-ranges.sh run-unit-info.sh \ + run-reloc-bpf.sh if !BIARCH export ELFUTILS_DISABLE_BIARCH = 1 @@ -376,6 +377,8 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ run-zstrptr.sh run-compress-test.sh \ run-disasm-bpf.sh \ testfile-bpf-dis1.expect.bz2 testfile-bpf-dis1.o.bz2 \ + run-reloc-bpf.sh \ + testfile-bpf-reloc.expect.bz2 testfile-bpf-reloc.o.bz2 \ testfile-m68k-core.bz2 testfile-m68k.bz2 testfile-m68k-s.bz2 \ run-dwarf-die-addr-die.sh \ run-get-units-invalid.sh run-get-units-split.sh \ diff --git a/tests/run-reloc-bpf.sh b/tests/run-reloc-bpf.sh new file mode 100755 index 00000000..feb75575 --- /dev/null +++ b/tests/run-reloc-bpf.sh @@ -0,0 +1,33 @@ +#! /bin/sh +# Copyright (C) 2018 Facebook, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/test-subr.sh + +# This test file is created with +# $ cat t.c +# struct tt { +# int a; +# char b; +# }; +# int test(struct tt *t) { +# return t->a; +# } +# $ clang -O2 -g -emit-llvm -c t.c -o - | llc -march=bpf -filetype=obj -o t.o +# $ mv t.o testfile-bpf-reloc.o + +testfiles testfile-bpf-reloc.o testfile-bpf-reloc.expect +testrun_compare ${abs_top_builddir}/src/objdump -r testfile-bpf-reloc.o < testfile-bpf-reloc.expect diff --git a/tests/testfile-bpf-reloc.expect.bz2 b/tests/testfile-bpf-reloc.expect.bz2 Binary files differnew file mode 100644 index 00000000..0ff8cc4c --- /dev/null +++ b/tests/testfile-bpf-reloc.expect.bz2 diff --git a/tests/testfile-bpf-reloc.o.bz2 b/tests/testfile-bpf-reloc.o.bz2 Binary files differnew file mode 100644 index 00000000..295634f9 --- /dev/null +++ b/tests/testfile-bpf-reloc.o.bz2 |
