Matej Habrnal bcb3c1
From a8df76250f97903d1bac872bb53b9d41721d5da9 Mon Sep 17 00:00:00 2001
Matej Habrnal bcb3c1
From: Jakub Filak <jfilak@redhat.com>
Matej Habrnal bcb3c1
Date: Wed, 12 Nov 2014 15:49:13 +0100
Matej Habrnal bcb3c1
Subject: [PATCH] Revert "gdb: disable loading of auto-loaded files"
Matej Habrnal bcb3c1
Matej Habrnal bcb3c1
This reverts commit 77a270a948216a8bb5bcc960042aeb467794b593.
Matej Habrnal bcb3c1
Matej Habrnal bcb3c1
Turning auto-load off also turns the pretty printer off.
Matej Habrnal bcb3c1
Matej Habrnal bcb3c1
Unfortunately, we must trust to providers of the auto-loaded scripts.
Matej Habrnal bcb3c1
(Jakub Filak must start fixing root causes and stop treating symptoms.)
Matej Habrnal bcb3c1
Matej Habrnal bcb3c1
Signed-off-by: Jakub Filak <jfilak@redhat.com>
Matej Habrnal bcb3c1
---
Matej Habrnal bcb3c1
 src/lib/hooklib.c | 40 +++++++++++++++++++---------------------
Matej Habrnal bcb3c1
 1 file changed, 19 insertions(+), 21 deletions(-)
Matej Habrnal bcb3c1
Matej Habrnal bcb3c1
diff --git a/src/lib/hooklib.c b/src/lib/hooklib.c
Matej Habrnal bcb3c1
index 21ad9e0..4a50727 100644
Matej Habrnal bcb3c1
--- a/src/lib/hooklib.c
Matej Habrnal bcb3c1
+++ b/src/lib/hooklib.c
Matej Habrnal bcb3c1
@@ -252,12 +252,10 @@ char *get_backtrace(const char *dump_dir_name, unsigned timeout_sec, const char
Matej Habrnal bcb3c1
     /* Let user know what's going on */
Matej Habrnal bcb3c1
     log(_("Generating backtrace"));
Matej Habrnal bcb3c1
 
Matej Habrnal bcb3c1
-    char *args[23];
Matej Habrnal bcb3c1
+    char *args[21];
Matej Habrnal bcb3c1
     args[0] = (char*)"gdb";
Matej Habrnal bcb3c1
     args[1] = (char*)"-batch";
Matej Habrnal bcb3c1
     args[2] = (char*)"-ex";
Matej Habrnal bcb3c1
-    args[3] = (char*)"set auto-load off";
Matej Habrnal bcb3c1
-    args[4] = (char*)"-ex";
Matej Habrnal bcb3c1
     struct strbuf *set_debug_file_directory = strbuf_new();
Matej Habrnal bcb3c1
     if(debuginfo_dirs == NULL)
Matej Habrnal bcb3c1
     {
Matej Habrnal bcb3c1
@@ -280,7 +278,7 @@ char *get_backtrace(const char *dump_dir_name, unsigned timeout_sec, const char
Matej Habrnal bcb3c1
             p = colon_or_nul;
Matej Habrnal bcb3c1
         }
Matej Habrnal bcb3c1
     }
Matej Habrnal bcb3c1
-    args[5] = strbuf_free_nobuf(set_debug_file_directory);
Matej Habrnal bcb3c1
+    args[3] = strbuf_free_nobuf(set_debug_file_directory);
Matej Habrnal bcb3c1
 
Matej Habrnal bcb3c1
     /* "file BINARY_FILE" is needed, without it gdb cannot properly
Matej Habrnal bcb3c1
      * unwind the stack. Currently the unwind information is located
Matej Habrnal bcb3c1
@@ -302,27 +300,27 @@ char *get_backtrace(const char *dump_dir_name, unsigned timeout_sec, const char
Matej Habrnal bcb3c1
      * TODO: check mtimes on COREFILE and BINARY_FILE and not supply
Matej Habrnal bcb3c1
      * BINARY_FILE if it is newer (to at least avoid gdb complaining).
Matej Habrnal bcb3c1
      */
Matej Habrnal bcb3c1
-    args[6] = (char*)"-ex";
Matej Habrnal bcb3c1
-    args[7] = xasprintf("file %s", executable);
Matej Habrnal bcb3c1
+    args[4] = (char*)"-ex";
Matej Habrnal bcb3c1
+    args[5] = xasprintf("file %s", executable);
Matej Habrnal bcb3c1
     free(executable);
Matej Habrnal bcb3c1
 
Matej Habrnal bcb3c1
-    args[8] = (char*)"-ex";
Matej Habrnal bcb3c1
-    args[9] = xasprintf("core-file %s/"FILENAME_COREDUMP, dump_dir_name);
Matej Habrnal bcb3c1
+    args[6] = (char*)"-ex";
Matej Habrnal bcb3c1
+    args[7] = xasprintf("core-file %s/"FILENAME_COREDUMP, dump_dir_name);
Matej Habrnal bcb3c1
 
Matej Habrnal bcb3c1
+    args[8] = (char*)"-ex";
Matej Habrnal bcb3c1
+    /*args[9] = ... see below */
Matej Habrnal bcb3c1
     args[10] = (char*)"-ex";
Matej Habrnal bcb3c1
-    /*args[11] = ... see below */
Matej Habrnal bcb3c1
-    args[12] = (char*)"-ex";
Matej Habrnal bcb3c1
-    args[13] = (char*)"info sharedlib";
Matej Habrnal bcb3c1
+    args[11] = (char*)"info sharedlib";
Matej Habrnal bcb3c1
     /* glibc's abort() stores its message in __abort_msg variable */
Matej Habrnal bcb3c1
+    args[12] = (char*)"-ex";
Matej Habrnal bcb3c1
+    args[13] = (char*)"print (char*)__abort_msg";
Matej Habrnal bcb3c1
     args[14] = (char*)"-ex";
Matej Habrnal bcb3c1
-    args[15] = (char*)"print (char*)__abort_msg";
Matej Habrnal bcb3c1
+    args[15] = (char*)"print (char*)__glib_assert_msg";
Matej Habrnal bcb3c1
     args[16] = (char*)"-ex";
Matej Habrnal bcb3c1
-    args[17] = (char*)"print (char*)__glib_assert_msg";
Matej Habrnal bcb3c1
+    args[17] = (char*)"info all-registers";
Matej Habrnal bcb3c1
     args[18] = (char*)"-ex";
Matej Habrnal bcb3c1
-    args[19] = (char*)"info all-registers";
Matej Habrnal bcb3c1
-    args[20] = (char*)"-ex";
Matej Habrnal bcb3c1
-    args[21] = (char*)"disassemble";
Matej Habrnal bcb3c1
-    args[22] = NULL;
Matej Habrnal bcb3c1
+    args[19] = (char*)"disassemble";
Matej Habrnal bcb3c1
+    args[20] = NULL;
Matej Habrnal bcb3c1
 
Matej Habrnal bcb3c1
     /* Get the backtrace, but try to cap its size */
Matej Habrnal bcb3c1
     /* Limit bt depth. With no limit, gdb sometimes OOMs the machine */
Matej Habrnal bcb3c1
@@ -332,9 +330,9 @@ char *get_backtrace(const char *dump_dir_name, unsigned timeout_sec, const char
Matej Habrnal bcb3c1
     char *bt = NULL;
Matej Habrnal bcb3c1
     while (1)
Matej Habrnal bcb3c1
     {
Matej Habrnal bcb3c1
-        args[11] = xasprintf("%s backtrace %u%s", thread_apply_all, bt_depth, full);
Matej Habrnal bcb3c1
+        args[9] = xasprintf("%s backtrace %u%s", thread_apply_all, bt_depth, full);
Matej Habrnal bcb3c1
         bt = exec_vp(args, /*redirect_stderr:*/ 1, timeout_sec, NULL);
Matej Habrnal bcb3c1
-        free(args[11]);
Matej Habrnal bcb3c1
+        free(args[9]);
Matej Habrnal bcb3c1
         if ((bt && strnlen(bt, 256*1024) < 256*1024) || bt_depth <= 32)
Matej Habrnal bcb3c1
         {
Matej Habrnal bcb3c1
             break;
Matej Habrnal bcb3c1
@@ -359,7 +357,7 @@ char *get_backtrace(const char *dump_dir_name, unsigned timeout_sec, const char
Matej Habrnal bcb3c1
          * End of assembler dump.
Matej Habrnal bcb3c1
          * (IOW: "empty" dump)
Matej Habrnal bcb3c1
          */
Matej Habrnal bcb3c1
-        args[21] = (char*)"disassemble $pc-20, $pc+64";
Matej Habrnal bcb3c1
+        args[19] = (char*)"disassemble $pc-20, $pc+64";
Matej Habrnal bcb3c1
 
Matej Habrnal bcb3c1
         if (bt_depth <= 64 && thread_apply_all[0] != '\0')
Matej Habrnal bcb3c1
         {
Matej Habrnal bcb3c1
@@ -375,9 +373,9 @@ char *get_backtrace(const char *dump_dir_name, unsigned timeout_sec, const char
Matej Habrnal bcb3c1
         }
Matej Habrnal bcb3c1
     }
Matej Habrnal bcb3c1
 
Matej Habrnal bcb3c1
+    free(args[3]);
Matej Habrnal bcb3c1
     free(args[5]);
Matej Habrnal bcb3c1
     free(args[7]);
Matej Habrnal bcb3c1
-    free(args[9]);
Matej Habrnal bcb3c1
     return bt;
Matej Habrnal bcb3c1
 }
Matej Habrnal bcb3c1
 
Matej Habrnal bcb3c1
-- 
Matej Habrnal bcb3c1
2.1.0
Matej Habrnal bcb3c1