From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id 6245C385482A; Wed, 30 Jun 2021 23:09:23 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6245C385482A From: "woodard at redhat dot com" To: libabigail@sourceware.org Subject: [Bug default/28025] exceptions are not checked for ABI compatibility. Date: Wed, 30 Jun 2021 23:09:22 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: libabigail X-Bugzilla-Component: default X-Bugzilla-Version: unspecified X-Bugzilla-Keywords: X-Bugzilla-Severity: enhancement X-Bugzilla-Who: woodard at redhat dot com X-Bugzilla-Status: NEW X-Bugzilla-Resolution: X-Bugzilla-Priority: P2 X-Bugzilla-Assigned-To: dodji at redhat dot com X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: http://sourceware.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-BeenThere: libabigail@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Mailing list of the Libabigail project List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 30 Jun 2021 23:09:23 -0000 https://sourceware.org/bugzilla/show_bug.cgi?id=3D28025 --- Comment #1 from Ben Woodard --- This is entirely not documented well and I've been searching for this everywhere. The name of the class that is being thrown can be found in the LSDA. So basically the way that you can find it is: $ eu-readelf -l librttiexcep_v1.so | grep GNU_EH_FRAME GNU_EH_FRAME 0x002014 0x0000000000002014 0x0000000000002014 0x000024 0x000024 R 0x4 so in that case the offset is 0x2014.=20 Then if you actually go to that offset in the ELF file you will come to a structure which is a LSDA as defined by the gnu compiler. As far as I have = been able to tell it is not documented anywhere but it is in gcc/libgcc/unwind-c= .c typedef struct { _Unwind_Ptr Start; _Unwind_Ptr LPStart; _Unwind_Ptr ttype_base; const unsigned char *TType; const unsigned char *action_table; unsigned char ttype_encoding; unsigned char call_site_encoding; } lsda_header_info; The TTtype is a reverse index from that offset. So the strings which have t= he names are before the offset for each LSDA header. Ian Taylor kind of opaquely explained that at the end of: https://www.airs.com/blog/archives/464 We need to add the types found in the LSDA to the types we compare when we = do an abidiff libfoo.so libfoo'.so When you do abicompat app libfoo.so libfoo'.so you must add the types found= in that TType table to the types picked up from the undefined symbols to the l= ist of types that you compare from libfoo.so to libfoo'.so Finding the TType table for the catches you can simply look at: $ eu-readelf --debug-dump=3Dframe use-rtti-excep | grep -A1 "TType table" TType table: [ 1] 0x402038 --=20 You are receiving this mail because: You are on the CC list for the bug.=