From patchwork Fri Jan 12 22:06:24 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 860215 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="oxsAvuvs"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zJH0M1vJTz9t2l for ; Sat, 13 Jan 2018 09:06:59 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965261AbeALWG4 (ORCPT ); Fri, 12 Jan 2018 17:06:56 -0500 Received: from mail-pf0-f196.google.com ([209.85.192.196]:40865 "EHLO mail-pf0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S965193AbeALWGw (ORCPT ); Fri, 12 Jan 2018 17:06:52 -0500 Received: by mail-pf0-f196.google.com with SMTP id i66so5371962pfd.7 for ; Fri, 12 Jan 2018 14:06:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=HjOYk3S67RKSaJ8tnveBjvvqP3uQwJFwLL+A9+ykh6M=; b=oxsAvuvsZVWzgsMlVc8CQBn37QMsL1lSNYGBFPZRZpLFgccUwR6qGxqtYuUXBdI1Js KHY/yDStUug3pomOZxrv3jhD/yF45yEi3Q1pkYnz7z1uglbuNHJzn73c7IoumkYnsNQr q3ZAMtR8QmQzBLc4ZvU+P6VgOmZHOiUfcXL63qM4j/YKhKjeJ8bgHHq8Oz0uV7vUr7nY 26IYkRKmVogi7w6OnsXD7ZXBXM0DVG1bLZqhU7+rffmMZ2LDnJyqIVS+Q5caciWA/mkl NwU16Be6vzedSrm+tzZjwROhvhUyrgD+R3b3Zm34p24jOvTqATnURHLhKNrLfYGAxImk Aq/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=HjOYk3S67RKSaJ8tnveBjvvqP3uQwJFwLL+A9+ykh6M=; b=EAN/eb6vGmDLjQjDqGku0397kaBQ5TmqE8v2x0qRONvCZ2At8r65NDySyceqFDUayN hqX3t9lLxRsYUi+UOL90bva3zle1QyWocBpDMoMI9BTGDisvdX8h7hG4345Oh9BckgyA mte683K4L0H8DgHWHXQPB+YA+X1L3PYkiNv1HdCjRFaT0gQBPzcyEPdDYk5hWobaKZFp BlGPL6BsvMlWyRrRFFUAcMRPMW53Ob5y2S4cHqf+shSV1d3xMq/mNAP0+lDOF0Aowyn9 F0H18KvssfMrKO8rdfIyrZXTTpJDs+FNI8CMMj+0AQZZDuJiZaK75EzCW3JP+3DEtY7C vpig== X-Gm-Message-State: AKwxytfL2HKB+Ds8fH01INW4H748KmItXrfcsDAtc3U3cmbwKmi/7yev sLKjIJLY2IVDP8uBBPMX+GWrrA== X-Google-Smtp-Source: ACJfBosecrKnipXf6Bh4XaO6NDG7jdoDUasnKJUuVB1z5o0wDcw0WT64tQYvSkLmaBbD927tzwkLfA== X-Received: by 10.159.242.203 with SMTP id x11mr7070633plw.298.1515794812397; Fri, 12 Jan 2018 14:06:52 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id w19sm45994848pfa.127.2018.01.12.14.06.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 12 Jan 2018 14:06:51 -0800 (PST) From: Jakub Kicinski To: daniel@iogearbox.net, alexei.starovoitov@gmail.com Cc: netdev@vger.kernel.org, oss-drivers@netronome.com, Jiong Wang Subject: [RFC bpf-next 2/2] tools: bpftool: improve architecture detection by using offload arch info Date: Fri, 12 Jan 2018 14:06:24 -0800 Message-Id: <20180112220624.14424-2-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180112220624.14424-1-jakub.kicinski@netronome.com> References: <44d1b7e5-53f1-65b6-fd0b-fbda8467aa6b@iogearbox.net> <20180112220624.14424-1-jakub.kicinski@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Jiong Wang The current architecture detection method in bpftool is designed for host case. For offload case, we can't use the architecture of "bpftool" itself. We use the new arch name field in bpf_prog_info and use bfd_scan_arch to return the correct bfd arch. Signed-off-by: Jiong Wang --- tools/bpf/bpftool/jit_disasm.c | 16 +++++++++++++++- tools/bpf/bpftool/main.h | 3 ++- tools/bpf/bpftool/prog.c | 7 ++++++- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/tools/bpf/bpftool/jit_disasm.c b/tools/bpf/bpftool/jit_disasm.c index 57d32e8a1391..a54fc0695a50 100644 --- a/tools/bpf/bpftool/jit_disasm.c +++ b/tools/bpf/bpftool/jit_disasm.c @@ -76,7 +76,8 @@ static int fprintf_json(void *out, const char *fmt, ...) return 0; } -void disasm_print_insn(unsigned char *image, ssize_t len, int opcodes) +void disasm_print_insn(unsigned char *image, ssize_t len, int opcodes, + char *arch) { disassembler_ftype disassemble; struct disassemble_info info; @@ -100,6 +101,19 @@ void disasm_print_insn(unsigned char *image, ssize_t len, int opcodes) else init_disassemble_info(&info, stdout, (fprintf_ftype) fprintf); + + /* Update architecture info for offload. */ + if (arch) { + const bfd_arch_info_type *inf = bfd_scan_arch(arch); + + if (inf) { + bfdf->arch_info = inf; + } else { + p_err("No libfd support for %s", arch); + return; + } + } + info.arch = bfd_get_arch(bfdf); info.mach = bfd_get_mach(bfdf); info.buffer = image; diff --git a/tools/bpf/bpftool/main.h b/tools/bpf/bpftool/main.h index 65b526fe6e7e..0c2898a68340 100644 --- a/tools/bpf/bpftool/main.h +++ b/tools/bpf/bpftool/main.h @@ -121,7 +121,8 @@ int do_cgroup(int argc, char **arg); int prog_parse_fd(int *argc, char ***argv); -void disasm_print_insn(unsigned char *image, ssize_t len, int opcodes); +void disasm_print_insn(unsigned char *image, ssize_t len, int opcodes, + char *arch); void print_hex_data_json(uint8_t *data, size_t len); #endif diff --git a/tools/bpf/bpftool/prog.c b/tools/bpf/bpftool/prog.c index c6a28be4665c..97c2649f71f8 100644 --- a/tools/bpf/bpftool/prog.c +++ b/tools/bpf/bpftool/prog.c @@ -775,7 +775,12 @@ static int do_dump(int argc, char **argv) } } else { if (member_len == &info.jited_prog_len) { - disasm_print_insn(buf, *member_len, opcodes); + if (info.ifindex) + disasm_print_insn(buf, *member_len, opcodes, + info.offload_arch_name); + else + disasm_print_insn(buf, *member_len, opcodes, + NULL); } else { kernel_syms_load(&dd); if (json_output)