From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751984AbdLSQK6 (ORCPT ); Tue, 19 Dec 2017 11:10:58 -0500 Received: from mx0b-00082601.pphosted.com ([67.231.153.30]:44522 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751816AbdLSQKx (ORCPT ); Tue, 19 Dec 2017 11:10:53 -0500 Date: Tue, 19 Dec 2017 16:10:17 +0000 From: Roman Gushchin To: Quentin Monnet CC: , , , Jakub Kicinski , Alexei Starovoitov , Daniel Borkmann Subject: Re: [RFC PATCH net-next] tools/bpf: fix build with binutils >= 2.28 Message-ID: <20171219161009.GA30572@castle.DHCP.thefacebook.com> References: <20171219143821.26291-1-guro@fb.com> <79acdc04-bba9-c9d5-a651-57d0e9628653@netronome.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: <79acdc04-bba9-c9d5-a651-57d0e9628653@netronome.com> User-Agent: Mutt/1.9.1 (2017-09-22) X-Originating-IP: [2620:10d:c092:200::1:2552] X-ClientProxiedBy: CWLP265CA0067.GBRP265.PROD.OUTLOOK.COM (2603:10a6:401:12::31) To CO1PR15MB1079.namprd15.prod.outlook.com (2a01:111:e400:7b66::9) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 24ec0d8d-fd99-49be-79df-08d546fb0714 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(5600026)(4604075)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(2017052603307);SRVR:CO1PR15MB1079; X-Microsoft-Exchange-Diagnostics: 1;CO1PR15MB1079;3:09HFUxad3yUklWWtHaC7qmmH1jcbkH+ibFfuDyuPvZdGH1PSXotNDno7d7xGMPFwC8icxYWdZkJaS+bEMyKJQqwaPXCOw7NBsCSBQMQNLwjd6yvUHBwfyVFDbtM+KanEFN4oi6xt4d0Qnd3rL20SBnVmaiwgfNyJ5yBuLBMq3rMhaLTfwn5+noD/qGl1/r4awW1rFlz9crJRvcFEeDvOpYWzCmZgtrv+vENZdLiut96zzeWmNXeVu0Edn2ttqr6j;25:c8HlJKqyF2BM5ilX6H38FhaSVjp+06APqGzz38BKaCaiqrhDny6uCQM284+ejdcx6yysRahZ08ndTIdikj/l/uJOMaJvziwZtkU1rObt0dU6HstMfspOlcG+0PF6GAfNc9FDRZBsOqTbMNmyqAX2/dcLStMcyFZvkRBJGbTMimteUA6YfTgfvTvdh4G2NEz90fCUAiMHPslxfmWMgF180lPNbZYtmoRcgXzj2cfmix5w6LJnItibIW9MCUM3dgpaLIUVW3BFrYGxGpO5tzsVy3IypVj9yTFwonmjDvVHYFINNg6a2mZZ8i8LaZOYfsjcG+ZOaangaF3SuTVRBICx9Q==;31:lKXcGQvgHsn86vBWbifk0yspPS5gB8PV6zvUei8gn3pYobkaHftQ7gPpclTCSxGxpDK2QKsvaLmek/peScR5gQq48zByPohGebg8+BdjolWxbnq2GPn1IY+swW2xEWPROk3GFVN+fXl2VtrBkGim1tKfmbEqCi2ryaQaJKiiNiG9kjkNMF8bm513kxxPuA+EcEgFmlh3cfo2YRzccfWfS2Dd57ufJhBuhjq8XjOQDLQ= X-MS-TrafficTypeDiagnostic: CO1PR15MB1079: X-Microsoft-Exchange-Diagnostics: 1;CO1PR15MB1079;20:U8aRNztOEk3tVgTpp0YLnR6KQZxD4DPlgwD9qhf4IUgHHBEdJ1TEp1bHyHUSoKy0osncwzpu5Bx0F2mVJVaAfr4dztYEIp5WLcpC2hWMwZBBJeaCt3anbM3wvGgA7Qj56QRM4FLETpxWbZXRlvuohvGMRv5TM3GdgEHW+c4gRwL1q8T7mvhuvfv0Ymu9sDwtWMjJcU/btA46qhBQDYxOYp98rUKYb/hdk821uzGOtMy6Eh2HE/2cD3pcYzaJ86vEEm93PoPmXW7RYCxelsfk7tQp5qki8rsS3yE6tD0Yqcosv1jtdY44qqoeAWsvNfBIAtzfXB0yEnroWGJhBTg48ZLded8YN9XQm5ocXkdhZNvM0xSmGzPFN2sLasMoxYuqxAO5lgaMExlrmKfDSabM7M3auzPdgB3HWLgokYANrf03wjamtUhIku+JfdfWaEOofUw4FyMyjzTYcTZPpAsgZGM41veburOk3QKIuwgDe6NdB9uzsYfr4wGETdT5yzD0;4:wzGsh6DSqDHiM1rD8O10ApBl12NPAQ7DHKf0OBYqx+HHxAOEswgoYRk+8UNPz6NwWD4pvRfsro3VPcp3Ne1wOLm90mxByP411DEb1OYaHaRkj2z6CPXU0q4FaYE1hAAY0dnSfdepFHLLyfKQTFBcTIkmF6ZRIP6drmutM5DOeCbCVnCZ7uGq4hzaQUnxiZcMG59OsmkxPQwyuHzSMh4UwhP/3TKPaDBBDj+UGjgbc2quzxAPiK7oszO4UWtBYpCPgLeXpbNjFnzzQ9V7pJrjgvOW9FF4ldyoPN3eY/WPzN1zWmHM4nCW8QGSbrO5Y3UI X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(67672495146484); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040450)(2401047)(5005006)(8121501046)(3002001)(10201501046)(93006095)(93001095)(3231023)(11241501184)(6041248)(20161123555025)(20161123558100)(20161123562025)(20161123560025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148)(201708071742011);SRVR:CO1PR15MB1079;BCL:0;PCL:0;RULEID:(100000803101)(100110400095);SRVR:CO1PR15MB1079; X-Forefront-PRVS: 052670E5A4 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(39860400002)(346002)(376002)(396003)(366004)(199004)(189003)(24454002)(377424004)(68736007)(386003)(50466002)(6506007)(7696005)(6666003)(229853002)(6246003)(76176011)(52116002)(81166006)(575784001)(86362001)(6916009)(33656002)(2950100002)(8936002)(8676002)(81156014)(53936002)(5660300001)(52396003)(478600001)(106356001)(105586002)(97736004)(47776003)(83506002)(25786009)(316002)(7736002)(39060400002)(55016002)(16586007)(6116002)(1076002)(58126008)(305945005)(4001150100001)(9686003)(4326008)(23726003)(2906002)(54906003)(18370500001)(42262002)(217873001);DIR:OUT;SFP:1102;SCL:1;SRVR:CO1PR15MB1079;H:castle.DHCP.thefacebook.com;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CO1PR15MB1079;23:+podSycrUVnV0rGDtxeLQJidcxvAQAFVloBd1JPys?= =?us-ascii?Q?hNm0yHg3b3CxaYEL/YJAZfWXmXRY/JLDeDg/tCD74V0a0C/mThd65pA443/b?= =?us-ascii?Q?LTxyiv4u2PAURoxYzdGHE9tJdCqCVOEOYHplI/w1bpUVuZbw7fW03HbbXIMd?= =?us-ascii?Q?GIgdrNHVOwmFrMz5a95n9HnW7En24pnCCQTHu/0DveV3AJkablNYXi30p4j1?= =?us-ascii?Q?6QQcK6SmSaKS80kry5Uv3ClZVoy+wIlUn4MzzErhDXLQP0ip204omWrRz7CR?= =?us-ascii?Q?klal1MtqT3nAXxFngvJ3RIagzhxxSfTCSEVYdFL8BFuVxWb4Zyn50SR2AZoa?= =?us-ascii?Q?Xi2u9ii9DxeGGHOq/oBJJ2AAbzWLGTh/CG0gVBzhrAcLeb03y9xIA+PaF08S?= =?us-ascii?Q?PVNcw4T08GjQVxk/X2nzwHqzcNgHKVxCGYmhKyFrT2/DIp44OkBnXaJYnVAw?= =?us-ascii?Q?aFu5e0gN7LjoFwFGWco4VrvOFpANtegaE+XlEX00WURt8QcQwpEsreUlvL9M?= =?us-ascii?Q?6EvXS6mgSvIhngbL9Rpp9X8Wyd0cR4TA06Lm05EQx+9mwAJiET6e3UULJUwa?= =?us-ascii?Q?cSzirg9II0jPikdcoyCR3/EGNEUL8fLf3GDparJsn9vTeSw3J7i7lalEsxNx?= =?us-ascii?Q?XnDi1aBce/HK5r3xNOLf5mAJB3QZGKs4AZjJCNDruA1hhbXtYEt8xYyI73ir?= =?us-ascii?Q?et6Fz7WEUj3661lLPynvKvDh+24lML0ZIMYqcGypzIsr41yRALPbkcAmIMn3?= =?us-ascii?Q?EvnWmZrCNEnWH+3gHSbUu7h/xAzMDKoJFRK6Sc/T5dSBtd65mreqIeuquDTO?= =?us-ascii?Q?nir90deBHgwdekQXt5ziVuNGkLCBmpJc0xWe+PNWcLqiHxSlYYYL0w8srdDG?= =?us-ascii?Q?87jRa4dpSisxaToE/dy6emUTcXqEeb970qgaEm4ZO2mdnr064mLGBURN/8ct?= =?us-ascii?Q?BfELDoulqroGXoF8RtbaUtdIZ57ONTkJiDoLS5u++xGMfNzooVSreXbCnoRm?= =?us-ascii?Q?k5S0YY9kijNnZSXXpkMzm/GTZCxei8Sctasg3UuucAi0gtFMsncGnTntKX5l?= =?us-ascii?Q?W8Hc4lsQFxHCcxHe7gUuGwpqiM49FCDBAVxCsM5kKY1T0PwuvSx1WI+paYpF?= =?us-ascii?Q?V/xtS2Uj8BandlvnOIAX+3qOFpOdCndDHNPdPiiokWb2V0WEx+N/fao1oY7+?= =?us-ascii?Q?borfoxxfABQMVf/ydOES3Xed1giUkXdfmBoQoLvRVGyUY3cy6EqdJviBPn0K?= =?us-ascii?Q?FzvfaeeYT/DRLJU5pRN7ZoN7SMHfysOuT6jmqUuph3WoDWbRJXGYIj9bg2E+?= =?us-ascii?Q?6Tu/sLVeuQX9EeXk3x07Q8=3D?= X-Microsoft-Exchange-Diagnostics: 1;CO1PR15MB1079;6:BH+cFaopB7bjhyCH0frMbTmZrIPGnLMpyzEsF9yXjwn2liaAuXZUyjGxcI63aXOBqBQPAHhrEZ+4Oox5tVmhaVd2KoiSPDDVlzPkJN3lZzLuo8L5WiVxH/gNHm+9zAAHkBWjuz8xZY/LTPBaRAICRGRZRONW8FVXoE3TuHo//iCmqOuuGptD1PVyPJ8tFM7NsdyD7C6qdCkFvGqLLPDszXeJBvf4wXv5rY9kONqObW8qqGoCrJmVVWOuQKBvbmJEssk2vd24AvbqwwPuPRuNs0PLUl1T/QzcZOc85Hg32D5FoQLa9x9Jm5C86M66Tomg1VucsdSvBEHBaRkFGOH2SetRBJ/96qq0rVjvVE38ZAY=;5:uZ+T3gb4y4b0e4a+kHtI/olOZuG+MKQ7BJV4iHJ3Tkx4RVVXCalI9ezEDXkA1+dhWRO/TmmpuLTfLL6/J0UZehP+Zjm8+Seu5qy8AEIFr8hoYW2VsvdjaGReLPFC3BQuBv09V88FnhiNuqP9SQuapVp0vKON3Wd/u8UXaX6Wdv4=;24:7tWcLhGQN0o61dBjAqJrf1d8SwNFEIYnBmQKqpUSl+Ll7uRn7IqWYTZJPqyaziCJPn6rl40cZosPSRFYwm1dzAtzpdno278B6/Fu7itZDro=;7:J/o1BUcQcm0l8mW2ltpqT7QXkW8z6L3hnAPbaDX7uLsgrVf+wsJ0WBPtbNPPYSGf4pMpZW6jwK3KmC6yrLyZyeZ2TNHRIOYaXLHgo1qNRLJxCUV/r0WqQ7K8JnIsPk3u9mTyiSqZKYuymjubunwlBGB7snCFX0YkZ3Vdzef8DrmQm0OorcQ+m5xsy2NIAlvKu0GnzmHVc2BQfCbdACoNZfqG/4gxyyjrANS7DQazlrSE8PH2sEDMLv/5lttmFMLJ SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;CO1PR15MB1079;20:KeA0K8zmCNIh6C6e67YtBPVMA021etHjjTtJV67FWjyTSIr99BwvhmLixaCGcL5IiiXkf+kIYGVU8NztT6EfiPfpwwWCmyj30Pvuz3dH2jlR65RIlsAVhEO7T2uZBiWSaOT1JBYsA5AeTqN7M+Vlgi0lYr+EPQLsR27sdZucMk0= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Dec 2017 16:10:29.6841 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 24ec0d8d-fd99-49be-79df-08d546fb0714 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 8ae927fe-1255-47a7-a2af-5f3a069daaa2 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR15MB1079 X-OriginatorOrg: fb.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-12-19_08:,, signatures=0 X-Proofpoint-Spam-Reason: safe X-FB-Internal: Safe Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Dec 19, 2017 at 03:57:02PM +0000, Quentin Monnet wrote: > Hi Roman, thanks for working on this! > > 2017-12-19 14:38 UTC+0000 ~ Roman Gushchin > > Bpftool build is broken with binutils version 2.28 and later. > > The cause is commit 003ca0fd2286 ("Refactor disassembler selection") > > in the binutils repo, which changed the disassembler() function > > signature. > > > > Fix this by checking binutils version and use an appropriate > > disassembler() signature. > > > > Signed-off-by: Roman Gushchin > > Cc: Jakub Kicinski > > Cc: Alexei Starovoitov > > Cc: Daniel Borkmann > > --- > > tools/bpf/Makefile | 6 ++++++ > > tools/bpf/bpf_jit_disasm.c | 7 +++++++ > > tools/bpf/bpftool/Makefile | 6 ++++++ > > tools/bpf/bpftool/jit_disasm.c | 5 +++++ > > 4 files changed, 24 insertions(+) > > > > diff --git a/tools/bpf/Makefile b/tools/bpf/Makefile > > index 07a6697466ef..3fd32fd0daa1 100644 > > --- a/tools/bpf/Makefile > > +++ b/tools/bpf/Makefile > > @@ -6,8 +6,14 @@ LEX = flex > > YACC = bison > > MAKE = make > > > > +BINUTILS_VER := $(word 4, $(shell readelf -v | head -n 1)) > > +BINUTILS_VER_MAJ := $(word 1, $(subst ., , $(subst -, , ${BINUTILS_VER}))) > > +BINUTILS_VER_MIN := $(word 2, $(subst ., , $(subst -, , ${BINUTILS_VER}))) > > + > > CFLAGS += -Wall -O2 > > CFLAGS += -D__EXPORTED_HEADERS__ -I../../include/uapi -I../../include > > +CFLAGS += -DBINUTILS_VER_MAJ=${BINUTILS_VER_MAJ} > > +CFLAGS += -DBINUTILS_VER_MIN=${BINUTILS_VER_MIN} > > > > %.yacc.c: %.y > > $(YACC) -o $@ -d $< > > diff --git a/tools/bpf/bpf_jit_disasm.c b/tools/bpf/bpf_jit_disasm.c > > index 75bf526a0168..3ef7c8bdc0f3 100644 > > --- a/tools/bpf/bpf_jit_disasm.c > > +++ b/tools/bpf/bpf_jit_disasm.c > > @@ -72,7 +72,14 @@ static void get_asm_insns(uint8_t *image, size_t len, int opcodes) > > > > disassemble_init_for_target(&info); > > > > +#if (BINUTILS_VER_MAJ >= 2) && (BINUTILS_VER_MIN >= 28) > > + disassemble = disassembler(bfd_get_arch(bfdf), > > + bfd_big_endian(bfdf), > > + bfd_get_mach(bfdf), > > + bfdf); > > +#else > > disassemble = disassembler(bfdf); > > +#endif > > assert(disassemble); > > > > do { > > diff --git a/tools/bpf/bpftool/Makefile b/tools/bpf/bpftool/Makefile > > index 3f17ad317512..94ad51bf14b5 100644 > > --- a/tools/bpf/bpftool/Makefile > > +++ b/tools/bpf/bpftool/Makefile > > @@ -40,6 +40,12 @@ CFLAGS += -W -Wall -Wextra -Wno-unused-parameter -Wshadow > > CFLAGS += -D__EXPORTED_HEADERS__ -I$(srctree)/tools/include/uapi -I$(srctree)/tools/include -I$(srctree)/tools/lib/bpf -I$(srctree)/kernel/bpf/ > > LIBS = -lelf -lbfd -lopcodes $(LIBBPF) > > > > +BINUTILS_VER := $(word 4, $(shell readelf -v | head -n 1)) > > This does not seem to be portable. I tried that on Ubuntu and `readelf > -v` returns "GNU readelf (GNU Binutils for Ubuntu) 2.26.1", and > BINUTILS_VER catches "Binutils". > > > +BINUTILS_VER_MAJ := $(word 1, $(subst ., , $(subst -, , ${BINUTILS_VER}))) > > +BINUTILS_VER_MIN := $(word 2, $(subst ., , $(subst -, , ${BINUTILS_VER}))) > > +CFLAGS += -DBINUTILS_VER_MAJ=${BINUTILS_VER_MAJ} > > +CFLAGS += -DBINUTILS_VER_MIN=${BINUTILS_VER_MIN} > > + > > INSTALL ?= install > > RM ?= rm -f > > > > diff --git a/tools/bpf/bpftool/jit_disasm.c b/tools/bpf/bpftool/jit_disasm.c > > index 1551d3918d4c..eaa7127e9eeb 100644 > > --- a/tools/bpf/bpftool/jit_disasm.c > > +++ b/tools/bpf/bpftool/jit_disasm.c > > @@ -107,7 +107,12 @@ void disasm_print_insn(unsigned char *image, ssize_t len, int opcodes) > > > > disassemble_init_for_target(&info); > > > > +#if (BINUTILS_VER_MAJ >= 2) && (BINUTILS_VER_MIN >= 28) > > + disassemble = disassembler(bfd_get_arch(bfdf), bfd_big_endian(bfdf), > > + bfd_get_mach(bfdf), bfdf); > > +#else > > disassemble = disassembler(bfdf); > > +#endif > > assert(disassemble); > > > > if (json_output) > > I discussed this issue with Jakub recently, and one suggestion he had > was to look in tools/build/feature to add a new "feature", by trying to > compile short programs, for making the distinction between binutils > versions. It probably requires more work, but could be more robust than > parsing the version from the command line? Hm, might be an option. Parsing readelf output is pretty ugly, here I agree. In general it feels more like a binutils issue, so we have to workaround it in either way. Is Jakub or someone else working on it? Thanks!