From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11338 invoked by alias); 5 Jul 2010 18:10:18 -0000 Received: (qmail 11324 invoked by uid 22791); 5 Jul 2010 18:10:17 -0000 X-SWARE-Spam-Status: No, hits=-5.2 required=5.0 tests=AWL,BAYES_00,KAM_STOCKGEN,RCVD_IN_DNSWL_HI,SPF_HELO_PASS,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 05 Jul 2010 18:10:12 +0000 Received: from int-mx08.intmail.prod.int.phx2.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id o65I9n3t031293 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 5 Jul 2010 14:09:49 -0400 Received: from host0.dyn.jankratochvil.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx08.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id o65I9kpY023224 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Mon, 5 Jul 2010 14:09:48 -0400 Received: from host0.dyn.jankratochvil.net (localhost [127.0.0.1]) by host0.dyn.jankratochvil.net (8.14.4/8.14.4) with ESMTP id o65I9k1I026703; Mon, 5 Jul 2010 20:09:46 +0200 Received: (from jkratoch@localhost) by host0.dyn.jankratochvil.net (8.14.4/8.14.4/Submit) id o65I9kb1026702; Mon, 5 Jul 2010 20:09:46 +0200 Date: Mon, 05 Jul 2010 18:10:00 -0000 From: Jan Kratochvil To: Joel Brobecker Cc: gdb-patches@sourceware.org Subject: Re: ping: [patch 2/6] PIE: Attach binary even after ld.so re-prelinked underneath Message-ID: <20100705180946.GB26551@host0.dyn.jankratochvil.net> References: <20100329161657.GA2940@host0.dyn.jankratochvil.net> <20100609150815.GB7183@host0.dyn.jankratochvil.net> <20100629182132.GS2595@adacore.com> <20100704101653.GB6875@host0.dyn.jankratochvil.net> <20100705171443.GZ2595@adacore.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20100705171443.GZ2595@adacore.com> User-Agent: Mutt/1.5.20 (2009-12-10) X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2010-07/txt/msg00086.txt.bz2 Hi Joel, checked-in. Thanks, Jan http://sourceware.org/ml/gdb-cvs/2010-07/msg00025.html --- src/gdb/ChangeLog 2010/07/05 17:57:49 1.11964 +++ src/gdb/ChangeLog 2010/07/05 17:58:55 1.11965 @@ -1,6 +1,11 @@ 2010-07-05 Jan Kratochvil Joel Brobecker + * auxv.c (ld_so_xfer_auxv): Do not error on failed read of data_address. + +2010-07-05 Jan Kratochvil + Joel Brobecker + Fix attaching to PIEs prelinked on the disk after the process was started. * solib-svr4.c (svr4_exec_displacement): New variable arch_size. --- src/gdb/auxv.c 2010/05/18 19:23:37 1.27 +++ src/gdb/auxv.c 2010/07/05 17:58:55 1.28 @@ -96,7 +96,27 @@ pointer_address = SYMBOL_VALUE_ADDRESS (msym); - data_address = read_memory_typed_address (pointer_address, ptr_type); + /* The location of the _dl_auxv symbol may no longer be correct if + ld.so runs at a different address than the one present in the file. + This is very common case - for unprelinked ld.so or with a PIE executable. + PIE executable forces random address even for libraries already being + prelinked to some address. PIE executables themselves are never prelinked + even on prelinked systems. Prelinking of a PIE executable would block + their purpose of randomizing load of everything including the executable. + + If the memory read fails, return -1 to fallback on another mechanism for + retrieving the AUXV. + + In most cases of a PIE running under valgrind there is no way to find + out the base addresses of any of ld.so, executable or AUXV as everything + is randomized and /proc information is not relevant for the virtual + executable running under valgrind. We think that we might need a valgrind + extension to make it work. This is PR 11440. */ + + if (target_read_memory (pointer_address, ptr_buf, ptr_size) != 0) + return -1; + + data_address = extract_typed_address (ptr_buf, ptr_type); /* Possibly still not initialized such as during an inferior startup. */ if (data_address == 0) --- src/gdb/testsuite/ChangeLog 2010/07/05 17:57:50 1.2371 +++ src/gdb/testsuite/ChangeLog 2010/07/05 17:58:56 1.2372 @@ -1,6 +1,12 @@ 2010-07-05 Jan Kratochvil Joel Brobecker + * gdb.base/break-interp.exp (test_attach): Keep $interp changed. Move + its restore after the <$relink_args != ""> loop. new comment. + +2010-07-05 Jan Kratochvil + Joel Brobecker + * gdb.base/break-interp.exp: Run $binpie with new value "ATTACH", new code for it. New variable relink_args. (prelinkYES): Call prelinkNO. --- src/gdb/testsuite/gdb.base/break-interp.exp 2010/07/05 17:57:50 1.14 +++ src/gdb/testsuite/gdb.base/break-interp.exp 2010/07/05 17:58:56 1.15 @@ -425,12 +425,24 @@ global exec interp_saved interp foreach relink {YES NO} { - if {[prelink$relink $relink_args [file tail $exec]] - && [copy $interp_saved $interp]} { + # Formerly this test was testing only prelinking of $EXEC. As the + # prelink command automatically prelinks all of $EXEC's libraries, + # even $INTERP got prelinked. Therefore, we formerly had to + # `[copy $interp_saved $interp]' to make $INTERP not affected by + # this prelinking of $EXEC. + # + # But now we need to test even prelinking of $INTERP. We could + # create a separate test to test just the $INTERP prelinking. For + # test simplicity, we merged this test and the test above by not + # restoring $INTERP after $EXEC prelink. $INTERP gets restored + # later below. + + if [prelink$relink $relink_args [file tail $exec]] { # /proc/PID/exe cannot be loaded as it is "EXECNAME (deleted)". test_attach_gdb $exec $pid $displacement "attach-relink$relink" } } + copy $interp_saved $interp } remote_exec host "kill -9 $pid"