Clean up testsuite compiler_info support.

gdb/testsuite/ChangeLog:

	* gdb.base/watchpoint.exp (test_complex_watchpoint): Remove
	compiler_info references.
	* gdb.cp/temargs.exp: Ditto.
	* lib/gdb.exp: Unset compiler_info instead of setting to "unknown".
	(get_compiler_info): Early exit if already computed.  Set compiler_info
	to "unknown" if there was a problem.
	(test_compiler_info): Add function comment.  Call get_compiler_info.
This commit is contained in:
Doug Evans
2015-07-24 15:32:45 -07:00
parent 35baa57fcf
commit a97b16b8fc
4 changed files with 41 additions and 14 deletions

View File

@ -1,3 +1,13 @@
2015-07-24 Doug Evans <dje@google.com>
* gdb.base/watchpoint.exp (test_complex_watchpoint): Remove
compiler_info references.
* gdb.cp/temargs.exp: Ditto.
* lib/gdb.exp: Unset compiler_info instead of setting to "unknown".
(get_compiler_info): Early exit if already computed. Set compiler_info
to "unknown" if there was a problem.
(test_compiler_info): Add function comment. Call get_compiler_info.
2015-07-24 Doug Evans <dje@google.com> 2015-07-24 Doug Evans <dje@google.com>
* Makefile.in (check/%.exp): Pass directory for GDB_PARALLEL. * Makefile.in (check/%.exp): Pass directory for GDB_PARALLEL.

View File

@ -464,12 +464,11 @@ proc test_complex_watchpoint {} {
pass $test pass $test
} }
-re "can't compute CFA for this frame.*\r\n$gdb_prompt $" { -re "can't compute CFA for this frame.*\r\n$gdb_prompt $" {
global compiler_info no_hw global no_hw
# GCC < 4.5.0 does not get LOCATIONS_VALID set by dwarf2read.c. # GCC < 4.5.0 does not get LOCATIONS_VALID set by dwarf2read.c.
# Therefore epilogue unwinder gets applied which is # Therefore epilogue unwinder gets applied which is
# incompatible with dwarf2_frame_cfa. # incompatible with dwarf2_frame_cfa.
verbose -log "compiler_info: $compiler_info"
if {$no_hw && ([test_compiler_info {gcc-[0-3]-*}] if {$no_hw && ([test_compiler_info {gcc-[0-3]-*}]
|| [test_compiler_info {gcc-4-[0-4]-*}])} { || [test_compiler_info {gcc-4-[0-4]-*}])} {
xfail "$test (old GCC has broken watchpoints in epilogues)" xfail "$test (old GCC has broken watchpoints in epilogues)"

View File

@ -34,7 +34,6 @@ if {![runto_main]} {
# NOTE: prepare_for_testing calls get_compiler_info, which we need # NOTE: prepare_for_testing calls get_compiler_info, which we need
# for the test_compiler_info calls. # for the test_compiler_info calls.
# gcc 4.4 and earlier don't emit enough info for some of our template tests. # gcc 4.4 and earlier don't emit enough info for some of our template tests.
verbose -log "compiler_info: $compiler_info"
set have_older_template_gcc 0 set have_older_template_gcc 0
set have_pr_41736_fixed 1 set have_pr_41736_fixed 1
set have_pr_45024_fixed 1 set have_pr_45024_fixed 1

View File

@ -2788,12 +2788,20 @@ gdb_caching_proc target_is_gdbserver {
return $is_gdbserver return $is_gdbserver
} }
set compiler_info "unknown" # N.B. compiler_info is intended to be local to this file.
# Call test_compiler_info with no arguments to fetch its value.
# Yes, this is counterintuitive when there's get_compiler_info,
# but that's the current API.
if [info exists compiler_info] {
unset compiler_info
}
set gcc_compiled 0 set gcc_compiled 0
set hp_cc_compiler 0 set hp_cc_compiler 0
set hp_aCC_compiler 0 set hp_aCC_compiler 0
# Figure out what compiler I am using. # Figure out what compiler I am using.
# The result is cached so only the first invocation runs the compiler.
# #
# ARG can be empty or "C++". If empty, "C" is assumed. # ARG can be empty or "C++". If empty, "C" is assumed.
# #
@ -2860,6 +2868,11 @@ proc get_compiler_info {{arg ""}} {
global hp_cc_compiler global hp_cc_compiler
global hp_aCC_compiler global hp_aCC_compiler
if [info exists compiler_info] {
# Already computed.
return 0
}
# Choose which file to preprocess. # Choose which file to preprocess.
set ifile "${srcdir}/lib/compiler.c" set ifile "${srcdir}/lib/compiler.c"
if { $arg == "c++" } { if { $arg == "c++" } {
@ -2901,8 +2914,14 @@ proc get_compiler_info {{arg ""}} {
} }
} }
# Reset to unknown compiler if any diagnostics happened. # Set to unknown if for some reason compiler_info didn't get defined.
if ![info exists compiler_info] {
verbose -log "get_compiler_info: compiler_info not provided"
set compiler_info "unknown"
}
# Also set to unknown compiler if any diagnostics happened.
if { $unknown } { if { $unknown } {
verbose -log "get_compiler_info: got unexpected diagnostics"
set compiler_info "unknown" set compiler_info "unknown"
} }
@ -2936,18 +2955,18 @@ proc get_compiler_info {{arg ""}} {
return 0 return 0
} }
# Return the compiler_info string if no arg is provided.
# Otherwise the argument is a glob-style expression to match against
# compiler_info.
proc test_compiler_info { {compiler ""} } { proc test_compiler_info { {compiler ""} } {
global compiler_info global compiler_info
get_compiler_info
# if no arg, return the compiler_info string # If no arg, return the compiler_info string.
if [string match "" $compiler] {
if [string match "" $compiler] { return $compiler_info
if [info exists compiler_info] { }
return $compiler_info
} else {
perror "No compiler info found."
}
}
return [string match $compiler $compiler_info] return [string match $compiler $compiler_info]
} }