From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28299 invoked by alias); 29 Mar 2006 01:46:45 -0000 Received: (qmail 28282 invoked by uid 22791); 29 Mar 2006 01:46:45 -0000 X-Spam-Check-By: sourceware.org Received: from dsl027-180-168.sfo1.dsl.speakeasy.net (HELO sunset.davemloft.net) (216.27.180.168) by sourceware.org (qpsmtpd/0.31) with ESMTP; Wed, 29 Mar 2006 01:46:42 +0000 Received: from localhost ([127.0.0.1] ident=davem) by sunset.davemloft.net with esmtp (Exim 4.60) (envelope-from ) id 1FOPm1-0003vi-Pj for libc-hacker@sources.redhat.com; Tue, 28 Mar 2006 17:47:01 -0800 Date: Wed, 29 Mar 2006 01:46:00 -0000 Message-Id: <20060328.174701.11633966.davem@davemloft.net> To: libc-hacker@sources.redhat.com Subject: Re: weird versioning crash... From: "David S. Miller" In-Reply-To: <20060328.162324.107326686.davem@davemloft.net> References: <20060328.162324.107326686.davem@davemloft.net> Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Mailing-List: contact libc-hacker-help@sourceware.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-hacker-owner@sourceware.org X-SW-Source: 2006-03/txt/msg00045.txt.bz2 From: "David S. Miller" Date: Tue, 28 Mar 2006 16:23:24 -0800 (PST) > The "ndx" VERSYM entry for _etext is "0xa822", which is 0x2822 with > the "hidden" 0x8000 bit masked out. That is way out of range. > > Sometimes things work because something happens to be mapped at that > offset from the map->l_versions[] table. > > What I can't figure out is if that bogus hidden _etext entry is there > due to a binutils bug, or perhaps bad arguments given to the link of > the mono binary at build time. What could cause such a hidden > version entry to _etext to end up in a binary like that? It seems that this is caused by the verioning linker scripts that mono uses. First it links libmono.so with this: VER_1 { global: mono_*; GC_push_all_stack; GC_start_blocking; GC_end_blocking; gc_thread_vtable; local: *; }; Then it links everything together, including libmono.so, into the "mono" binary using this versioning linker script: { global: mono_*; GC_push_all_stack; GC_start_blocking; GC_end_blocking; gc_thread_vtable; local: *; }; and that seems to be how we end up with that weird _etext versioning entry above.