Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755470AbcLNJ5D convert rfc822-to-8bit (ORCPT ); Wed, 14 Dec 2016 04:57:03 -0500 Received: from seketeli.net ([94.23.218.202]:45949 "EHLO ms.seketeli.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755101AbcLNJ5A (ORCPT ); Wed, 14 Dec 2016 04:57:00 -0500 From: Dodji Seketeli To: Michal Marek 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 Organization: Me, myself and I 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> <20161214091539.GA9000@sepie.suse.cz> <86twa6svhi.fsf@seketeli.org> X-Operating-System: Red Hat Enterprise Linux Server 7.3 X-URL: http://www.seketeli.net/~dodji Date: Wed, 14 Dec 2016 10:56:56 +0100 In-Reply-To: <86twa6svhi.fsf@seketeli.org> (Dodji Seketeli's message of "Wed, 14 Dec 2016 10:36:25 +0100") Message-ID: <86d1gusujb.fsf@seketeli.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8BIT Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1384 Lines: 65 Dodji Seketeli a écrit: Grr, I did paste the wrong content of t1.c and t2.c in my last message sorry. Here are the correct ones: $ cat t1.c struct s1; struct s2 { int i; }; struct s3 { struct s1 *ptr1; struct s2 *ptr2; }; void foo(struct s3* s __attribute__((unused))) { } $ cat t2.c struct s1 { int j; }; struct s2; struct s3 { struct s1 *ptr1; struct s2 *ptr2; }; void foo(struct s3* s __attribute__((unused))) { } $ gcc -g -c t1.c $ gcc -g -c t2.c $ abidiff t1.o t2.o $ The rest of my previous message still applies :-) > So, as you see here, abidiff considers t1.o and t2.o has having the same > ABI, so it considers the two foo functions to be equivalent. > >> The types are the same, but their visibility in the different >> compilation units differs. > > I see, for genksyms, the order of declarations matters, especially when > forward declarations are involved. > > Libabigail does a "whole binary" analysis of types. > > So, consider the point of use of the type 'struct s1*'. Even if 'struct > s' is just forward-declared at that point, the declaration of struct s1 > is "resolved" to its definition. Even if the definition comes later in > the binary. > > In other words, if struct s1 is defined in the binary, you'll never have > that "struct s1 {UNKNOWN} *ptr1;" that you see in genksyms's > representation. Thanks. -- Dodji