Fix a crash in jit.c

A user at Mozilla pointed out a crash in jit.c.  In his situation, an
inferior using the JIT API exec'd an executable that did not use it.
This caused an assertion failure when jit.c:free_objfile_data called
delete_breakpoint with NULL.

This patch fixes the problem in the obvious way.  New test case
included.

gdb/ChangeLog
2018-12-28  Tom Tromey  <tom@tromey.com>

	* jit.c (free_objfile_data): Only delete breakpoint if non-null.

gdb/testsuite/ChangeLog
2018-12-28  Tom Tromey  <tom@tromey.com>
	    Simon Marchi <simark@simark.ca>

	* gdb.base/jit-exec.exp: New file.
	* gdb.base/jit-exec.c: New file.
	* gdb.base/jit-execd.c: New file.
This commit is contained in:
Tom Tromey 2018-12-19 11:44:28 -07:00
parent 140a4bc099
commit 2cd8cc0b66
6 changed files with 115 additions and 1 deletions

View File

@ -1,3 +1,7 @@
2018-12-28 Tom Tromey <tom@tromey.com>
* jit.c (free_objfile_data): Only delete breakpoint if non-null.
2018-12-28 Tom Tromey <tom@tromey.com>
* NEWS: Mention terminal styling.

View File

@ -1464,7 +1464,8 @@ free_objfile_data (struct objfile *objfile, void *data)
if (ps_data != NULL && ps_data->objfile == objfile)
{
ps_data->objfile = NULL;
delete_breakpoint (ps_data->jit_breakpoint);
if (ps_data->jit_breakpoint != NULL)
delete_breakpoint (ps_data->jit_breakpoint);
ps_data->cached_code_address = 0;
}
}

View File

@ -1,3 +1,10 @@
2018-12-28 Tom Tromey <tom@tromey.com>
Simon Marchi <simark@simark.ca>
* gdb.base/jit-exec.exp: New file.
* gdb.base/jit-exec.c: New file.
* gdb.base/jit-execd.c: New file.
2018-12-28 Tom Tromey <tom@tromey.com>
* gdb.base/style.exp: Update test to check for address styling.

View File

@ -0,0 +1,28 @@
/* This testcase is part of GDB, the GNU debugger.
Copyright 2018 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* Simple standalone program using the JIT API. */
#include "jit-simple-jit.c"
#include <unistd.h>
int
main (int argc, char **argv)
{
execl (PROGRAM, PROGRAM, (char *) 0);
return 99;
}

View File

@ -0,0 +1,52 @@
# Copyright 2018 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# Regression test for a jit.c bug. Previously it would crash if an
# inferior that used the JIT API then exec'd a program that did not
# use it.
if { ![istarget "*-linux*"] } then {
return
}
standard_testfile jit-exec.c
set testfile2 "jit-execd"
set srcfile2 ${testfile2}.c
set binfile2 [standard_output_file ${testfile2}]
set compile_options [list debug additional_flags=-DPROGRAM=\"$binfile2\"]
if {[gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" \
executable $compile_options] != ""} {
untested "failed to compile"
return -1
}
if {[gdb_compile "${srcdir}/${subdir}/${srcfile2}" "${binfile2}" \
executable $compile_options] != ""} {
untested "failed to compile"
return -1
}
clean_restart $binfile
if {![runto_main]} {
fail "can't run to main"
return
}
delete_breakpoints
gdb_test "continue" "Inferior .* exited normally.*"

View File

@ -0,0 +1,22 @@
/* This testcase is part of GDB, the GNU debugger.
Copyright 2018 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
int
main (int argc, char **argv)
{
return 0;
}