default_read_var_value <LOC_UNRESOLVED>: Include minsym kind in error message.

bfd/ChangeLog:

	* targets.c (enum bfd_flavour): Add comment.
	(bfd_flavour_name): New function.
	* bfd-in2.h: Regenerate.

gdb/ChangeLog:

	* findvar.c (default_read_var_value) <LOC_UNRESOLVED>: Include the
	kind of minimal symbol in the error message.
	* objfiles.c (objfile_flavour_name): New function.
	* objfiles.h (objfile_flavour_name): Declare.

gdb/testsuite/ChangeLog:

	* gdb.dwarf2/dw2-bad-unresolved.c: New file.
	* gdb.dwarf2/dw2-bad-unresolved.exp: New file.
This commit is contained in:
Doug Evans 2015-09-18 21:43:38 -07:00
parent d96c806b92
commit 015d2e7e49
10 changed files with 180 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2015-09-18 Doug Evans <xdje42@gmail.com>
* targets.c (enum bfd_flavour): Add comment.
(bfd_flavour_name): New function.
* bfd-in2.h: Regenerate.
2015-09-18 Alan Modra <amodra@gmail.com>
* elf64-ppc.h (struct ppc64_elf_params <tls_get_addr_opt>): Rename

View File

@ -6980,6 +6980,7 @@ bfd_boolean generic_core_file_matches_executable_p
enum bfd_flavour
{
/* N.B. Update bfd_flavour_name if you change this. */
bfd_target_unknown_flavour,
bfd_target_aout_flavour,
bfd_target_coff_flavour,
@ -7399,6 +7400,8 @@ const bfd_target *bfd_search_for_target
(int (*search_func) (const bfd_target *, void *),
void *);
const char *bfd_flavour_name (enum bfd_flavour flavour);
/* Extracted from format.c. */
bfd_boolean bfd_check_format (bfd *abfd, bfd_format format);

View File

@ -144,6 +144,7 @@ DESCRIPTION
.enum bfd_flavour
.{
. {* N.B. Update bfd_flavour_name if you change this. *}
. bfd_target_unknown_flavour,
. bfd_target_aout_flavour,
. bfd_target_coff_flavour,
@ -1829,3 +1830,50 @@ bfd_search_for_target (int (*search_func) (const bfd_target *, void *),
return NULL;
}
/*
FUNCTION
bfd_flavour_name
SYNOPSIS
const char *bfd_flavour_name (enum bfd_flavour flavour);
DESCRIPTION
Return the string form of @var{flavour}.
*/
const char *
bfd_flavour_name (enum bfd_flavour flavour)
{
switch (flavour)
{
case bfd_target_unknown_flavour: return "unknown file format";
case bfd_target_aout_flavour: return "a.out";
case bfd_target_coff_flavour: return "COFF";
case bfd_target_ecoff_flavour: return "ECOFF";
case bfd_target_xcoff_flavour: return "XCOFF";
case bfd_target_elf_flavour: return "ELF";
case bfd_target_ieee_flavour: return "IEEE";
case bfd_target_nlm_flavour: return "NLM";
case bfd_target_oasys_flavour: return "Oasys";
case bfd_target_tekhex_flavour: return "Tekhex";
case bfd_target_srec_flavour: return "Srec";
case bfd_target_verilog_flavour: return "Verilog";
case bfd_target_ihex_flavour: return "Ihex";
case bfd_target_som_flavour: return "SOM";
case bfd_target_os9k_flavour: return "OS9K";
case bfd_target_versados_flavour: return "Versados";
case bfd_target_msdos_flavour: return "MSDOS";
case bfd_target_ovax_flavour: return "Ovax";
case bfd_target_evax_flavour: return "Evax";
case bfd_target_mmo_flavour: return "MMO";
case bfd_target_mach_o_flavour: return "MACH_O";
case bfd_target_pef_flavour: return "PEF";
case bfd_target_pef_xlib_flavour: return "PEF_XLIB";
case bfd_target_sym_flavour: return "SYM";
/* There is no "default" case here so that -Wswitch (part of -Wall)
catches missing entries. */
}
abort ();
}

View File

@ -1,3 +1,10 @@
2015-09-18 Doug Evans <xdje42@gmail.com>
* findvar.c (default_read_var_value) <LOC_UNRESOLVED>: Include the
kind of minimal symbol in the error message.
* objfiles.c (objfile_flavour_name): New function.
* objfiles.h (objfile_flavour_name): Declare.
2015-09-18 Yao Qi <yao.qi@linaro.org>
* nat/aarch64-linux.c: Include elf/common.h,

View File

@ -737,8 +737,20 @@ default_read_var_value (struct symbol *var, const struct block *var_block,
symbol_objfile (var));
msym = lookup_data.result.minsym;
/* If we can't find the minsym there's a problem in the symbol info.
The symbol exists in the debug info, but it's missing in the minsym
table. */
if (msym == NULL)
error (_("No global symbol \"%s\"."), SYMBOL_LINKAGE_NAME (var));
{
const char *flavour_name
= objfile_flavour_name (symbol_objfile (var));
/* We can't get here unless we've opened the file, so flavour_name
can't be NULL. */
gdb_assert (flavour_name != NULL);
error (_("Missing %s symbol \"%s\"."),
flavour_name, SYMBOL_LINKAGE_NAME (var));
}
obj_section = MSYMBOL_OBJ_SECTION (lookup_data.result.objfile, msym);
/* Relocate address, unless there is no section or the variable is
a TLS variable. */

View File

@ -1614,6 +1614,16 @@ objfile_debug_name (const struct objfile *objfile)
return lbasename (objfile->original_name);
}
/* See objfiles.h. */
const char *
objfile_flavour_name (struct objfile *objfile)
{
if (objfile->obfd != NULL)
return bfd_flavour_name (bfd_get_flavour (objfile->obfd));
return NULL;
}
/* Provide a prototype to silence -Wmissing-prototypes. */
extern initialize_file_ftype _initialize_objfiles;

View File

@ -744,6 +744,11 @@ const char *objfile_filename (const struct objfile *objfile);
extern const char *objfile_debug_name (const struct objfile *objfile);
/* Return the name of the file format of OBJFILE if the file has been opened,
otherwise return NULL. */
const char *objfile_flavour_name (struct objfile *objfile);
/* Set the objfile's notion of the "main" name and language. */
extern void set_objfile_main_name (struct objfile *objfile,

View File

@ -1,3 +1,8 @@
2015-09-18 Doug Evans <xdje42@gmail.com>
* gdb.dwarf2/dw2-bad-unresolved.c: New file.
* gdb.dwarf2/dw2-bad-unresolved.exp: New file.
2015-09-18 Sandra Loosemore <sandra@codesourcery.com>
* gdb.base/dso2dso.exp: Don't use directory prefix when setting

View File

@ -0,0 +1,24 @@
/* This testcase is part of GDB, the GNU debugger.
Copyright 2015 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/>. */
/* Dummy main function. */
int
main (void)
{
return 0;
}

View File

@ -0,0 +1,59 @@
# Copyright 2015 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/>.
load_lib dwarf.exp
# This test can only be run on targets which support DWARF-2 and use gas.
if {![dwarf2_support]} {
return 0
}
standard_testfile dw2-bad-unresolved.c dw2-bad-unresolved-2.S
# Set up the DWARF for the test.
# The key part of this is the definition of variable "var" having no location.
# That will cause it to have LOC_UNRESOLVED.
set asm_file [standard_output_file $srcfile2]
Dwarf::assemble $asm_file {
cu {} {
DW_TAG_compile_unit {
{DW_AT_language @DW_LANG_C}
{DW_AT_name dw2-bad-unresolved-2.c}
{DW_AT_comp_dir /tmp}
} {
declare_labels b_l
b_l: DW_TAG_base_type {
{DW_AT_byte_size 1 DW_FORM_sdata}
{DW_AT_encoding @DW_ATE_signed}
{DW_AT_name bool}
}
DW_TAG_variable {
{name var}
{type :$b_l}
{external 1 flag}
}
}
}
}
if { [prepare_for_testing ${testfile}.exp ${testfile} \
[list $srcfile $asm_file] {nodebug}] } {
return -1
}
gdb_test "ptype var" "type = bool"
gdb_test "print var" "Missing .* symbol \"var\"."