From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26350 invoked by alias); 18 Jul 2017 12:20:16 -0000 Mailing-List: contact elfutils-devel-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Post: List-Help: List-Subscribe: Sender: elfutils-devel-owner@sourceware.org Received: (qmail 26308 invoked by uid 89); 18 Jul 2017 12:20:14 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Checked: by ClamAV 0.99.2 on sourceware.org X-Virus-Found: No X-Spam-SWARE-Status: No, score=-23.1 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_LAZY_DOMAIN_SECURITY,UNWANTED_LANGUAGE_BODY autolearn=ham version=3.3.2 spammy=UD:l, 3.20, d*, 2,6 X-Spam-Status: No, score=-23.1 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_LAZY_DOMAIN_SECURITY,UNWANTED_LANGUAGE_BODY autolearn=ham version=3.3.2 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on sourceware.org X-Spam-Level: X-HELO: gnu.wildebeest.org Received: from wildebeest.demon.nl (HELO gnu.wildebeest.org) (212.238.236.112) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 18 Jul 2017 12:20:10 +0000 Received: from tarox.wildebeest.org (tarox.wildebeest.org [172.31.17.39]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by gnu.wildebeest.org (Postfix) with ESMTPSA id AD6BB302729E; Tue, 18 Jul 2017 14:20:08 +0200 (CEST) Received: by tarox.wildebeest.org (Postfix, from userid 1000) id 98BBE40E39FB; Tue, 18 Jul 2017 14:20:08 +0200 (CEST) From: Mark Wielaard To: elfutils-devel@sourceware.org Cc: Richard Henderson , Mark Wielaard Subject: [PATCH] backends: Don't depend on linux/bpf.h to compile bpf disassembler. Date: Tue, 18 Jul 2017 12:20:00 -0000 Message-Id: <1500380398-4169-1-git-send-email-mark@klomp.org> X-Mailer: git-send-email 1.8.3.1 X-IsSubscribed: yes X-SW-Source: 2017-q3/txt/msg00027.txt.bz2 We only need a few constants and one structure definition from linux/bpf. Just define those in a local lib/bpf.h file. This makes sure the bpf disassembler is always build and included even when elfutils is build on older GNU/Linux systems (and even on other platforms). Signed-off-by: Mark Wielaard --- ChangeLog | 5 ++++ NEWS | 2 ++ backends/ChangeLog | 7 +++++ backends/Makefile.am | 5 ---- backends/bpf_init.c | 2 -- backends/bpf_regs.c | 6 +--- configure.ac | 4 --- lib/ChangeLog | 5 ++++ lib/Makefile.am | 2 +- lib/bpf.h | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++ libcpu/ChangeLog | 6 ++++ libcpu/Makefile.am | 2 -- libcpu/bpf_disasm.c | 7 +---- tests/ChangeLog | 4 +++ tests/Makefile.am | 5 +--- 15 files changed, 115 insertions(+), 29 deletions(-) create mode 100644 lib/bpf.h diff --git a/ChangeLog b/ChangeLog index c9db732..b5f7095 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2017-07-18 Mark Wielaard + + * configure.ac: Don't check for linux/bpf.h. + * NEWS: Mention always build bpf backend. + 2017-07-14 Mark Wielaard * NEWS: Add 0.170 section and new strip options. diff --git a/NEWS b/NEWS index b69aef4..045d579 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,8 @@ Version 0.170 strip: Add -R, --remove-section=SECTION and --keep-section=SECTION. +backends: The bpf disassembler is now always build on all platforms. + Version 0.169 backends: Add support for EM_PPC64 GNU_ATTRIBUTES. diff --git a/backends/ChangeLog b/backends/ChangeLog index d628245..8ba7756 100644 --- a/backends/ChangeLog +++ b/backends/ChangeLog @@ -1,3 +1,10 @@ +2017-07-18 Mark Wielaard + + * Makefile.am (cpu_bpf): Always define. + * bpf_init.c (disasm): Always hook. + * bpf_regs.c: Include bpf.h instead of linux/bpf.h. Don't define + MAX_BPF_REG. + 2017-06-17 Mark Wielaard * s390_initreg.c: Swap sys/ptrace.h and asm/ptrace.h include order. diff --git a/backends/Makefile.am b/backends/Makefile.am index ac45a45..1193d0c 100644 --- a/backends/Makefile.am +++ b/backends/Makefile.am @@ -119,12 +119,7 @@ libebl_m68k_pic_a_SOURCES = $(m68k_SRCS) am_libebl_m68k_pic_a_OBJECTS = $(m68k_SRCS:.c=.os) bpf_SRCS = bpf_init.c bpf_regs.c -# The disam hook depends on this if we have linux/bpf.h. -if HAVE_LINUX_BPF_H cpu_bpf = ../libcpu/libcpu_bpf.a -else -cpu_bpf = -endif 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 22842e2..8ea1bc1 100644 --- a/backends/bpf_init.c +++ b/backends/bpf_init.c @@ -52,9 +52,7 @@ bpf_init (Elf *elf __attribute__ ((unused)), eh->name = "BPF"; bpf_init_reloc (eh); HOOK (eh, register_info); -#ifdef HAVE_LINUX_BPF_H HOOK (eh, disasm); -#endif return MODVERSION; } diff --git a/backends/bpf_regs.c b/backends/bpf_regs.c index 180af83..1863a16 100644 --- a/backends/bpf_regs.c +++ b/backends/bpf_regs.c @@ -32,11 +32,7 @@ #include #include -#ifdef HAVE_LINUX_BPF_H -#include -#else -#define MAX_BPF_REG 10 -#endif +#include "bpf.h" #define BACKEND bpf_ #include "libebl_CPU.h" diff --git a/configure.ac b/configure.ac index c2c1d90..bb58f4b 100644 --- a/configure.ac +++ b/configure.ac @@ -385,10 +385,6 @@ else fi AC_SUBST([argp_LDADD]) -dnl Check if we have for EM_BPF disassembly. -AC_CHECK_HEADERS(linux/bpf.h) -AM_CONDITIONAL(HAVE_LINUX_BPF_H, [test "x$ac_cv_header_linux_bpf_h" = "xyes"]) - dnl The directories with content. dnl Documentation. diff --git a/lib/ChangeLog b/lib/ChangeLog index 1fc1a38..1f16228 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,8 @@ +2017-07-18 Mark Wielaard + + * bpf.h: New file. + * Makefile.am (noinst_HEADERS): Add bpf.h + 2017-05-05 Mark Wielaard * printversion.c (print_version): Update copyright year. diff --git a/lib/Makefile.am b/lib/Makefile.am index 7a65eb9..ada2030 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -38,7 +38,7 @@ libeu_a_SOURCES = xstrdup.c xstrndup.c xmalloc.c next_prime.c \ color.c printversion.c noinst_HEADERS = fixedsizehash.h libeu.h system.h dynamicsizehash.h list.h \ - md5.h sha1.h eu-config.h color.h printversion.h + md5.h sha1.h eu-config.h color.h printversion.h bpf.h EXTRA_DIST = dynamicsizehash.c if !GPROF diff --git a/lib/bpf.h b/lib/bpf.h new file mode 100644 index 0000000..db80a51 --- /dev/null +++ b/lib/bpf.h @@ -0,0 +1,82 @@ +/* Minimal extended BPF constants as alternative for linux/bpf.h. */ + +#ifndef _ELFUTILS_BPF_H +#define _ELFUTILS_BPF_H 1 + +#include + +#define BPF_CLASS(code) ((code) & 0x07) + +#define BPF_LD 0x00 +#define BPF_LDX 0x01 +#define BPF_ST 0x02 +#define BPF_STX 0x03 +#define BPF_ALU 0x04 +#define BPF_JMP 0x05 +#define BPF_RET 0x06 +#define BPF_MISC 0x07 + +#define BPF_ALU64 0x07 + +#define BPF_JNE 0x50 +#define BPF_JSGT 0x60 +#define BPF_JSGE 0x70 +#define BPF_CALL 0x80 +#define BPF_EXIT 0x90 + +#define BPF_W 0x00 +#define BPF_H 0x08 +#define BPF_B 0x10 + +#define BPF_IMM 0x00 +#define BPF_ABS 0x20 +#define BPF_IND 0x40 +#define BPF_MEM 0x60 +#define BPF_LEN 0x80 +#define BPF_MSH 0xa0 + +#define BPF_DW 0x18 +#define BPF_XADD 0xc0 + +#define BPF_ADD 0x00 +#define BPF_SUB 0x10 +#define BPF_MUL 0x20 +#define BPF_DIV 0x30 +#define BPF_OR 0x40 +#define BPF_AND 0x50 +#define BPF_LSH 0x60 +#define BPF_RSH 0x70 +#define BPF_NEG 0x80 +#define BPF_MOD 0x90 +#define BPF_XOR 0xa0 + +#define BPF_MOV 0xb0 +#define BPF_ARSH 0xc0 + +#define BPF_JA 0x00 +#define BPF_JEQ 0x10 +#define BPF_JGT 0x20 +#define BPF_JGE 0x30 +#define BPF_JSET 0x40 + +#define BPF_K 0x00 +#define BPF_X 0x08 + +#define BPF_END 0xd0 +#define BPF_TO_LE 0x00 +#define BPF_TO_BE 0x08 + +#define BPF_PSEUDO_MAP_FD 1 + +#define MAX_BPF_REG 10 + +struct bpf_insn +{ + uint8_t code; + uint8_t dst_reg:4; + uint8_t src_reg:4; + int16_t off; + int32_t imm; +}; + +#endif diff --git a/libcpu/ChangeLog b/libcpu/ChangeLog index 22bec9b..28b220f 100644 --- a/libcpu/ChangeLog +++ b/libcpu/ChangeLog @@ -1,3 +1,9 @@ +2017-07-18 Mark Wielaard + + * Makefile.am: Don't check HAVE_LINUX_BPF_H, just define libcpu_bpf. + * bpf_disasm.c: Include bpf.h instead of linux/bpf.h. Don't define + BPF_PSEUDO_MAP_FD. + 2017-04-20 Ulf Hermann * Makefile.am: Add EXEEXT to gendis. diff --git a/libcpu/Makefile.am b/libcpu/Makefile.am index 31fc906..94de56e 100644 --- a/libcpu/Makefile.am +++ b/libcpu/Makefile.am @@ -45,11 +45,9 @@ i386_gendis_SOURCES = i386_gendis.c i386_lex.l i386_parse.y i386_disasm.o: i386.mnemonics $(srcdir)/i386_dis.h x86_64_disasm.o: x86_64.mnemonics $(srcdir)/x86_64_dis.h -if HAVE_LINUX_BPF_H noinst_LIBRARIES += libcpu_bpf.a libcpu_bpf_a_SOURCES = bpf_disasm.c libcpu_bpf_a_CFLAGS = $(AM_CFLAGS) -Wno-format-nonliteral -endif %_defs: $(srcdir)/defs/i386 $(AM_V_GEN)m4 -D$* -DDISASSEMBLER $< > $@T diff --git a/libcpu/bpf_disasm.c b/libcpu/bpf_disasm.c index e4bbae4..054aba2 100644 --- a/libcpu/bpf_disasm.c +++ b/libcpu/bpf_disasm.c @@ -35,16 +35,11 @@ #include #include #include -#include +#include "bpf.h" #include "../libelf/common.h" #include "../libebl/libeblP.h" -/* BPF_PSEUDO_MAP_FD was only introduced in linux 3.20. */ -#ifndef BPF_PSEUDO_MAP_FD - #define BPF_PSEUDO_MAP_FD 1 -#endif - static const char class_string[8][8] = { [BPF_LD] = "ld", [BPF_LDX] = "ldx", diff --git a/tests/ChangeLog b/tests/ChangeLog index 3dd6f2a..26af4ba 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,7 @@ +2017-07-18 Mark Wielaard + + * Makefile.am (TESTS): Always add run-disasm-bpf.sh if HAVE_LIBASM. + 2017-07-14 Mark Wielaard * run-strip-remove-keep.sh: New test. diff --git a/tests/Makefile.am b/tests/Makefile.am index 7fd4b21..368e926 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -156,10 +156,7 @@ endif if HAVE_LIBASM check_PROGRAMS += $(asm_TESTS) -TESTS += $(asm_TESTS) -if HAVE_LINUX_BPF_H -TESTS += run-disasm-bpf.sh -endif +TESTS += $(asm_TESTS) run-disasm-bpf.sh endif EXTRA_DIST = run-arextract.sh run-arsymtest.sh \ -- 1.8.3.1