Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755343AbcLNJPz (ORCPT ); Wed, 14 Dec 2016 04:15:55 -0500 Received: from mx2.suse.de ([195.135.220.15]:42016 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754930AbcLNJPx (ORCPT ); Wed, 14 Dec 2016 04:15:53 -0500 Date: Wed, 14 Dec 2016 10:15:39 +0100 From: Michal Marek To: Dodji Seketeli Cc: Nicholas Piggin , Ian Campbell , Ben Hutchings , Linus Torvalds , Adam Borowski , Greg Kroah-Hartman , Linux Kbuild mailing list , Debian kernel maintainers , "linux-arch@vger.kernel.org" , Arnd Bergmann , Ingo Molnar , Linux Kernel Mailing List Subject: Re: [PATCH] x86/kbuild: enable modversions for symbols exported from asm Message-ID: <20161214091539.GA9000@sepie.suse.cz> References: <20161201125545.406d092c@roar.ozlabs.ibm.com> <1480559754.16599.92.camel@decadent.org.uk> <20161201143928.07a08348@roar.ozlabs.ibm.com> <6e8cf20b-2d2f-ba1f-e02c-c757d5a25db7@suse.com> <20161209133308.0acbb57a@roar.ozlabs.ibm.com> <1481296893.4509.135.camel@hellion.org.uk> <20161210021529.4a6e684f@roar.ozlabs.ibm.com> <86vaus3eld.fsf@seketeli.org> <867f72vqec.fsf@seketeli.org> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <867f72vqec.fsf@seketeli.org> User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1880 Lines: 66 On 2016-12-14 09:58, Dodji Seketeli wrote: > Michal Marek a ?crit: > > [...] > >> Does the abidiff tool handle the case when an exported symbol is moved >> between .c files? This is always a mess with genksyms, because the two >> .c files have different includes and thus the type expansion stops at >> different points. So typically the move needs to be reverted as a >> workaround. > > Let's consider the function: > > 'void foo(struct S*);' > > If two ELF binaries contain a definition of that function foo which ELF > symbol is exported, if the type struct S hasn't changed, and if the only > difference between the ELF binaries is that foo was defined in the > translation unit a.c in the first binary and in b.c in the second > binary, then the comparison engine of libabigail (which is the library > that abidiff uses) will consider the declarations of the two foo > functions as being equal -- no matter what include file comes before the > definition point of foo in a.c and b.c. If it does not, then it's a bug > that ought to be fixed. > > If you feel that I haven't understood your question, then I guess a > minimal standalone example (in the form of C source code) that > illustrates your use case could be helpful to me. A minimal example would be t1.c: struct s1; struct s2 { int i; } struct s3 { struct s1 *ptr1; struct s2 *ptr2; } void foo(struct s3*); EXPORT_SYMBOL(foo); t2.c: struct s1 { int j; } struct s2; struct s3 { struct s1 *ptr1; struct s2 *ptr2; } void foo(struct s3*); EXPORT_SYMBOL(foo); genksyms expands this to void foo ( struct s3 { struct s1 { UNKNOWN } * ptr1 ; struct s2 { int i ; } * ptr2 ; } * ) or void foo ( struct s3 { struct s1 { int j ; } * ptr1 ; struct s2 { UNKNOWN } * ptr2 ; } * ) respectively. The types are the same, but their visibility in the different compilation units differs. Michal