This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch] Sanity check PIE displacement (like the PIC one)


On Thu, 11 Feb 2010 21:05:11 +0100, Daniel Jacobowitz wrote:
> On Thu, Feb 11, 2010 at 12:43:00PM -0700, Tom Tromey wrote:
> > Jan> The current PIC message being printed "all the time" is:
> > Jan> warning: .dynamic section for "/lib64/librt-2.11.1.so" is not at the expected address
> > Jan> warning: difference appears to be caused by prelink, adjusting expectations
> > [...]
> > Jan> I do not find the current PIC message too useful (moreover without
> > Jan> any offset printed).  Therefore I am open to removing both the PIC
> > Jan> (and new PIE) messages when the offset is successfuly considered as
> > Jan> valid.
> > 
> > I don't find that PIC message particularly useful, either.
> > Is there some situation where that information is helpful?
> > If not, then IMO we should remove it.
> 
> Under what circumstances would you remove it?  I'd favor removing the
> former warning when the second one would be printed, but not otherwise.
> 
> The first message is a real life-saver.  It triggers when you have the
> wrong C library when loading a core file or using a sysroot.

solib-svr4.c LM_ADDR_CHECK
          if ((l_addr & align) == ((l_dynaddr - dynaddr) & align))
            {
A1:           warning (_(".dynamic section for \"%s\" "
                     "is not at the expected address"), so->so_name);
A2:           warning (_("difference appears to be caused by prelink, "
                         "adjusting expectations"));
            }
          else
B:          warning (_(".dynamic section for \"%s\" "
                       "is not at the expected address "
                       "(wrong library or version mismatch?)"), so->so_name);

I got lost in what specific messages got referenced by these mails.

The life-saver message is IMO "B" but the message(s) being discussed to be
removed is A1+A2.

Is the attached patch what everone agrees upon or have I not understood it?


No regressions on {x86_64,x86_64-m32,i686}-fedora12-linux-gnu.


Thanks,
Jan


gdb/
2010-02-11  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* solib-svr4.c: Include gdbcmd.h.
	(solib_svr4_debug): New.
	(LM_ADDR_CHECK): Print successful prelink adjustment only if
	SOLIB_SVR4_DEBUG.
	(_initialize_svr4_solib): Register solib_svr4_debug.

gdb/testsuite/
2010-02-11  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* gdb.base/prelink.exp (set debug solib-svr4 1): New.

--- a/gdb/solib-svr4.c
+++ b/gdb/solib-svr4.c
@@ -35,6 +35,7 @@
 #include "regcache.h"
 #include "gdbthread.h"
 #include "observer.h"
+#include "gdbcmd.h"
 
 #include "gdb_assert.h"
 
@@ -48,6 +49,9 @@
 #include "auxv.h"
 #include "exceptions.h"
 
+/* Flag which indicates whether internal debug messages should be printed.  */
+static int solib_svr4_debug;
+
 static struct link_map_offsets *svr4_fetch_link_map_offsets (void);
 static int svr4_have_link_map_offsets (void);
 static void svr4_relocate_main_executable (void);
@@ -222,10 +226,13 @@ LM_ADDR_CHECK (struct so_list *so, bfd *abfd)
 	    {
 	      l_addr = l_dynaddr - dynaddr;
 
-	      warning (_(".dynamic section for \"%s\" "
-		     "is not at the expected address"), so->so_name);
-	      warning (_("difference appears to be caused by prelink, "
-			 "adjusting expectations"));
+	      if (solib_svr4_debug)
+		{
+		  warning (_(".dynamic section for \"%s\" "
+			 "is not at the expected address"), so->so_name);
+		  warning (_("difference appears to be caused by prelink, "
+			     "adjusting expectations"));
+		}
 	    }
 	  else
 	    warning (_(".dynamic section for \"%s\" "
@@ -2033,4 +2040,14 @@ _initialize_svr4_solib (void)
   svr4_so_ops.lookup_lib_global_symbol = elf_lookup_lib_symbol;
   svr4_so_ops.same = svr4_same;
   svr4_so_ops.keep_data_in_core = svr4_keep_data_in_core;
+
+  /* Debug this file's internals.  */
+  add_setshow_zinteger_cmd ("solib-svr4", class_maintenance,
+			    &solib_svr4_debug, _("\
+Set internal debugging of shared library code for SVR4."), _("\
+Show internal debugging of shared library code for SVR4."), _("\
+When non-zero, SVR4 solib specific internal debugging is enabled."),
+			    NULL,
+			    NULL,
+			    &setdebuglist, &showdebuglist);
 }
--- a/gdb/testsuite/gdb.base/prelink.exp
+++ b/gdb/testsuite/gdb.base/prelink.exp
@@ -109,6 +109,9 @@ gdb_start
 gdb_reinitialize_dir $srcdir/$subdir
 gdb_load ${binfile}
 
+# Print the "adjusting expectations" message.
+gdb_test "set debug solib-svr4 1"
+
 set test "prelink"
 global gdb_prompt
 gdb_test_multiple "core-file $objdir/$subdir/prelink.core" "$test" {


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]