testsuite: Fix for gcc-4.8: gdb.base/jit.exp gdb.base/jit-so.exp
authorJan Kratochvil <jan.kratochvil@redhat.com>
Fri, 8 Apr 2016 13:38:53 +0000 (15:38 +0200)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Fri, 8 Apr 2016 13:38:53 +0000 (15:38 +0200)
on CentOS-7.2 I get

Running /home/jkratoch/redhat/gdb-test-reg/gdb/testsuite/gdb.base/jit.exp ...
FAIL: gdb.base/jit.exp: one_jit_test-1: continue to breakpoint: break here 2 (the program exited)
FAIL: gdb.base/jit.exp: one_jit_test-2: continue to breakpoint: break here 2 (the program exited)
FAIL: gdb.base/jit.exp: attach: one_jit_test-2: continue to breakpoint: break here 2 (the program exited)
FAIL: gdb.base/jit.exp: attach: one_jit_test-2: break here 2: set var wait_for_gdb = 1
FAIL: gdb.base/jit.exp: attach: one_jit_test-2: break here 2: detach (the program is no longer running)
FAIL: gdb.base/jit.exp: attach: one_jit_test-2: break here 2: attach
FAIL: gdb.base/jit.exp: attach: one_jit_test-2: break here 2: set var wait_for_gdb = 0
FAIL: gdb.base/jit.exp: PIE: one_jit_test-1: continue to breakpoint: break here 2 (the program exited)
Running /home/jkratoch/redhat/gdb-test-reg/gdb/testsuite/gdb.base/jit-so.exp ...
FAIL: gdb.base/jit-so.exp: one_jit_test-1: continue to breakpoint: break here 2 (the program exited)
FAIL: gdb.base/jit-so.exp: one_jit_test-2: continue to breakpoint: break here 2 (the program exited)

since:

85af34ee0211eedf8d30a5c44dfc59dddf8b512a is the first bad commit
commit 85af34ee0211eedf8d30a5c44dfc59dddf8b512a
Author: Pedro Alves <palves@redhat.com>
Date:   Thu Mar 31 19:28:47 2016 +0100
    Add regression test for PR gdb/19858 (JIT code registration on attach)

The compiled code's .debug_line is wrong (for the simplistic approach of GDB
to put a breakpoint on the first address belonging to that source line) and so
GDB misses the breakpoint at the last line:
          WAIT_FOR_GDB; return 0;  /* gdb break here 2  */

Most of the patch is just about reindentation, no changes there.

gdb/testsuite/ChangeLog
2016-04-08  Jan Kratochvil  <jan.kratochvil@redhat.com>

Fix compatibility with gcc-4.8.5-4.el7.x86_64.
* gdb.base/jit-main.c: Use exit after usage.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/jit-main.c

index 73663c2a05079a438098a0e71f5d75e043c3c5bb..3c9f20cbbda45e5d07df7a46508d1b8ce2f8e3b9 100644 (file)
@@ -1,3 +1,8 @@
+2016-04-08  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+       Fix compatibility with gcc-4.8.5-4.el7.x86_64.
+       * gdb.base/jit-main.c: Use exit after usage.
+
 2016-04-07  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
        * gdb.base/gdbhistsize-history.exp: Save and unset GDBHISTFILE and
index 63dd1a196465aacea9a687e97f635e17b4983908..1c7e45e2e958f009a5e420c6f6394708710d12d3 100644 (file)
@@ -138,7 +138,8 @@ MAIN (int argc, char *argv[])
 {
   /* These variables are here so they can easily be set from jit.exp.  */
   const char *libname = NULL;
-  int count = 0;
+  int count = 0, i, fd;
+  struct stat st;
 
   alarm (300);
 
@@ -147,90 +148,89 @@ MAIN (int argc, char *argv[])
   count = count;  /* gdb break here 0  */
 
   if (argc < 2)
-    usage (argv[0]);
-  else
     {
-      int i, fd;
-      struct stat st;
+      usage (argv[0]);
+      exit (1);
+    }
 
-      if (libname == NULL)
-        /* Only set if not already set from GDB.  */
-        libname = argv[1];
+  if (libname == NULL)
+    /* Only set if not already set from GDB.  */
+    libname = argv[1];
 
-      if (argc > 2 && count == 0)
-        /* Only set if not already set from GDB.  */
-        count = atoi (argv[2]);
+  if (argc > 2 && count == 0)
+    /* Only set if not already set from GDB.  */
+    count = atoi (argv[2]);
 
-      printf ("%s:%d: libname = %s, count = %d\n", __FILE__, __LINE__,
-              libname, count);
+  printf ("%s:%d: libname = %s, count = %d\n", __FILE__, __LINE__,
+         libname, count);
 
-      if ((fd = open (libname, O_RDONLY)) == -1)
-        {
-          fprintf (stderr, "open (\"%s\", O_RDONLY): %s\n", libname,
-                   strerror (errno));
-          exit (1);
-        }
+  if ((fd = open (libname, O_RDONLY)) == -1)
+    {
+      fprintf (stderr, "open (\"%s\", O_RDONLY): %s\n", libname,
+              strerror (errno));
+      exit (1);
+    }
 
-      if (fstat (fd, &st) != 0)
-        {
-          fprintf (stderr, "fstat (\"%d\"): %s\n", fd, strerror (errno));
-          exit (1);
-        }
+  if (fstat (fd, &st) != 0)
+    {
+      fprintf (stderr, "fstat (\"%d\"): %s\n", fd, strerror (errno));
+      exit (1);
+    }
 
-      for (i = 0; i < count; ++i)
-        {
-          const void *const addr = mmap (0, st.st_size, PROT_READ|PROT_WRITE,
-                                         MAP_PRIVATE, fd, 0);
-          struct jit_code_entry *const entry = calloc (1, sizeof (*entry));
-
-          if (addr == MAP_FAILED)
-            {
-              fprintf (stderr, "mmap: %s\n", strerror (errno));
-              exit (1);
-            }
-
-          update_locations (addr, i);
-
-          /* Link entry at the end of the list.  */
-          entry->symfile_addr = (const char *)addr;
-          entry->symfile_size = st.st_size;
-          entry->prev_entry = __jit_debug_descriptor.relevant_entry;
-          __jit_debug_descriptor.relevant_entry = entry;
-
-          if (entry->prev_entry != NULL)
-            entry->prev_entry->next_entry = entry;
-          else
-            __jit_debug_descriptor.first_entry = entry;
-
-          /* Notify GDB.  */
-          __jit_debug_descriptor.action_flag = JIT_REGISTER_FN;
-          __jit_debug_register_code ();
-        }
+  for (i = 0; i < count; ++i)
+    {
+      const void *const addr = mmap (0, st.st_size, PROT_READ|PROT_WRITE,
+                                    MAP_PRIVATE, fd, 0);
+      struct jit_code_entry *const entry = calloc (1, sizeof (*entry));
+
+      if (addr == MAP_FAILED)
+       {
+         fprintf (stderr, "mmap: %s\n", strerror (errno));
+         exit (1);
+       }
+
+      update_locations (addr, i);
+
+      /* Link entry at the end of the list.  */
+      entry->symfile_addr = (const char *)addr;
+      entry->symfile_size = st.st_size;
+      entry->prev_entry = __jit_debug_descriptor.relevant_entry;
+      __jit_debug_descriptor.relevant_entry = entry;
+
+      if (entry->prev_entry != NULL)
+       entry->prev_entry->next_entry = entry;
+      else
+       __jit_debug_descriptor.first_entry = entry;
+
+      /* Notify GDB.  */
+      __jit_debug_descriptor.action_flag = JIT_REGISTER_FN;
+      __jit_debug_register_code ();
+    }
 
-      WAIT_FOR_GDB; i = 0;  /* gdb break here 1 */
+  WAIT_FOR_GDB; i = 0;  /* gdb break here 1 */
 
-      /* Now unregister them all in reverse order.  */
-      while (__jit_debug_descriptor.relevant_entry != NULL)
-        {
-          struct jit_code_entry *const entry =
-            __jit_debug_descriptor.relevant_entry;
-          struct jit_code_entry *const prev_entry = entry->prev_entry;
-
-          if (prev_entry != NULL)
-            {
-              prev_entry->next_entry = NULL;
-              entry->prev_entry = NULL;
-            }
-          else
-            __jit_debug_descriptor.first_entry = NULL;
-
-          /* Notify GDB.  */
-          __jit_debug_descriptor.action_flag = JIT_UNREGISTER_FN;
-          __jit_debug_register_code ();
-
-          __jit_debug_descriptor.relevant_entry = prev_entry;
-          free (entry);
-        }
+  /* Now unregister them all in reverse order.  */
+  while (__jit_debug_descriptor.relevant_entry != NULL)
+    {
+      struct jit_code_entry *const entry =
+       __jit_debug_descriptor.relevant_entry;
+      struct jit_code_entry *const prev_entry = entry->prev_entry;
+
+      if (prev_entry != NULL)
+       {
+         prev_entry->next_entry = NULL;
+         entry->prev_entry = NULL;
+       }
+      else
+       __jit_debug_descriptor.first_entry = NULL;
+
+      /* Notify GDB.  */
+      __jit_debug_descriptor.action_flag = JIT_UNREGISTER_FN;
+      __jit_debug_register_code ();
+
+      __jit_debug_descriptor.relevant_entry = prev_entry;
+      free (entry);
     }
+
   WAIT_FOR_GDB; return 0;  /* gdb break here 2  */
 }