mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-28 15:18:37 +08:00
testsuite: Fix for gcc-4.8: gdb.base/jit.exp gdb.base/jit-so.exp
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.
This commit is contained in:
@ -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>
|
2016-04-07 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||||
|
|
||||||
* gdb.base/gdbhistsize-history.exp: Save and unset GDBHISTFILE and
|
* gdb.base/gdbhistsize-history.exp: Save and unset GDBHISTFILE and
|
||||||
|
@ -138,7 +138,8 @@ MAIN (int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
/* These variables are here so they can easily be set from jit.exp. */
|
/* These variables are here so they can easily be set from jit.exp. */
|
||||||
const char *libname = NULL;
|
const char *libname = NULL;
|
||||||
int count = 0;
|
int count = 0, i, fd;
|
||||||
|
struct stat st;
|
||||||
|
|
||||||
alarm (300);
|
alarm (300);
|
||||||
|
|
||||||
@ -147,90 +148,89 @@ MAIN (int argc, char *argv[])
|
|||||||
count = count; /* gdb break here 0 */
|
count = count; /* gdb break here 0 */
|
||||||
|
|
||||||
if (argc < 2)
|
if (argc < 2)
|
||||||
usage (argv[0]);
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
int i, fd;
|
usage (argv[0]);
|
||||||
struct stat st;
|
exit (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]);
|
|
||||||
|
|
||||||
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 (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 ();
|
|
||||||
}
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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]);
|
||||||
|
|
||||||
|
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 (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 ();
|
||||||
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
WAIT_FOR_GDB; return 0; /* gdb break here 2 */
|
WAIT_FOR_GDB; return 0; /* gdb break here 2 */
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user