2004-01-24 Michael Chastain <mec.gnu@mindspring.com>

* lib/compiler.c: Add hp_cc_compiler and hp_aCC_compiler.
	* lib/compiler.cc: Likewise.
	* lib/gdb.exp (get_compiler_info): Always call gdb_compile to
	get the right preprocessor.  Eval the output directly.  Remove
	special tests for hp_cc_compiler and hp_aCC_compiler.  Remove
	hp_f77_compiler and hp_f90_compiler completely.
	(gdb_preprocess): Delete.
	(get_compiler): Delete.
This commit is contained in:
Michael Chastain 2004-01-24 21:59:03 +00:00
parent 690668cc17
commit 94b8e87660
4 changed files with 166 additions and 187 deletions

View File

@ -1,3 +1,14 @@
2004-01-24 Michael Chastain <mec.gnu@mindspring.com>
* lib/compiler.c: Add hp_cc_compiler and hp_aCC_compiler.
* lib/compiler.cc: Likewise.
* lib/gdb.exp (get_compiler_info): Always call gdb_compile to
get the right preprocessor. Eval the output directly. Remove
special tests for hp_cc_compiler and hp_aCC_compiler. Remove
hp_f77_compiler and hp_f90_compiler completely.
(gdb_preprocess): Delete.
(get_compiler): Delete.
2004-01-24 Mark Kettenis <kettenis@gnu.org>
* gdb.base/charset.c, gdb.base/dump.c, gdb.base/huge.c: Include

View File

@ -1,6 +1,6 @@
/* This test file is part of GDB, the GNU debugger.
Copyright 1995, 1997, 1999, 2003 Free Software Foundation, Inc.
Copyright 1995, 1997, 1999, 2003, 2004 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
@ -19,36 +19,47 @@
Please email any bugs, comments, and/or additions to this file to:
bug-gdb@prep.ai.mit.edu */
/* Often the behavior of any particular test depends upon what compiler was
used to compile the test. As each test is compiled, this file is
preprocessed by the same compiler used to compile that specific test
(different tests might be compiled by different compilers, particularly
if compiled at different times), and used to generate a *.ci (compiler
info) file for that test.
/* Sometimes the behavior of a test depends upon the compiler used to
compile the test program. A test script can call get_compiler_info
to figure out the compiler version and test_compiler_info to test it.
I.E., when callfuncs is compiled, a callfuncs.ci file will be generated,
which can then be sourced by callfuncs.exp to give callfuncs.exp access
to information about the compilation environment.
get_compiler_info runs the preprocessor on this file and then eval's
the result. This sets various symbols for use by test_compiler_info.
TODO: It might be a good idea to add expect code that tests each
definition made with 'set" to see if one already exists, and if so
warn about conflicts if it is being set to something else. */
TODO: make compiler_info a local variable for get_compiler_info and
test_compiler_info.
/* This needs to be kept in sync with whatis.c and gdb.exp(get_compiler_info).
If this ends up being hairy, we could use a common header file. */
TODO: all clients should use test_compiler_info and should not
use gcc_compiled, hp_cc_compiler, or hp_aCC_compiler.
TODO: purge signed_keyword_not_used. */
set compiler_info ""
#if defined (__GNUC__)
set compiler_info [join {gcc __GNUC__ __GNUC_MINOR__ } -]
set gcc_compiled __GNUC__
#else
set gcc_compiled 0
#endif
#if defined (__HP_cc)
set compiler_info [join {hpcc __HP_cc} -]
set hp_cc_compiler __HP_cc
#else
set hp_cc_compiler 0
#endif
#if defined (__HP_aCC)
set compiler_info [join {hpacc __HP_aCC} -]
set hp_aCC_compiler __HP_aCC
#else
set hp_aCC_compiler 0
#endif
/* gdb.base/whatis.exp still uses this */
#if defined (__STDC__) || defined (_AIX)
set signed_keyword_not_used 0
#else
set signed_keyword_not_used 1
#endif
#if defined (__GNUC__)
set gcc_compiled __GNUC__
set compiler_info [join {gcc __GNUC__ __GNUC_MINOR__ } -]
#else
set gcc_compiled 0
set compiler_info ""
#endif
return 0

View File

@ -19,27 +19,35 @@
Please email any bugs, comments, and/or additions to this file to:
bug-gdb@prep.ai.mit.edu */
/* Often the behavior of any particular test depends upon what compiler was
used to compile the test. As each test is compiled, this file is
preprocessed by the same compiler used to compile that specific test
(different tests might be compiled by different compilers, particularly
if compiled at different times), and used to generate a *.ci (compiler
info) file for that test.
/* This file is exactly like compiler.c. I could just use compiler.c if
I could be sure that every C++ compiler accepted extensions of ".c". */
I.E., when callfuncs is compiled, a callfuncs.ci file will be generated,
which can then be sourced by callfuncs.exp to give callfuncs.exp access
to information about the compilation environment.
TODO: It might be a good idea to add expect code that tests each
definition made with 'set" to see if one already exists, and if so
warn about conflicts if it is being set to something else. */
set compiler_info ""
#if defined (__GNUC__)
set gcc_compiled __GNUC__
set compiler_info [join {gcc __GNUC__ __GNUC_MINOR__ } -]
set gcc_compiled __GNUC__
#else
set gcc_compiled 0
set compiler_info ""
#endif
return 0
#if defined (__HP_cc)
set compiler_info [join {hpcc __HP_cc} -]
set hp_cc_compiler __HP_cc
#else
set hp_cc_compiler 0
#endif
#if defined (__HP_aCC)
set compiler_info [join {hpacc __HP_aCC} -]
set hp_aCC_compiler __HP_aCC
#else
set hp_aCC_compiler 0
#endif
/* gdb.base/whatis.exp still uses this */
#if defined (__STDC__) || defined (_AIX)
set signed_keyword_not_used 0
#else
set signed_keyword_not_used 1
#endif

View File

@ -1,5 +1,5 @@
# Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
# 2002, 2003
# 2002, 2003, 2004
# Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
@ -1094,86 +1094,114 @@ proc skip_hp_tests {} {
return $skip_hp
}
global compiler_info
set compiler_info unknown
set compiler_info "unknown"
set gcc_compiled 0
set hp_cc_compiler 0
set hp_aCC_compiler 0
set signed_keyword_not_used 0
# Figure out what compiler I am using.
#
# BINFILE is a "compiler information" output file. This implementation
# does not use BINFILE.
#
# ARGS can be empty or "C++". If empty, "C" is assumed.
#
# There are several ways to do this, with various problems.
#
# [ gdb_compile -E $ifile -o $binfile.ci ]
# source $binfile.ci
#
# Single Unix Spec v3 says that "-E -o ..." together are not
# specified. And in fact, the native compiler on hp-ux 11 (among
# others) does not work with "-E -o ...". Most targets used to do
# this, and it mostly worked, because it works with gcc.
#
# [ catch "exec $compiler -E $ifile > $binfile.ci" exec_output ]
# source $binfile.ci
#
# This avoids the problem with -E and -o together. This almost works
# if the build machine is the same as the host machine, which is
# usually true of the targets which are not gcc. But this code does
# not figure which compiler to call, and it always ends up using the C
# compiler. Not good for setting hp_aCC_compiler. Targets
# hppa*-*-hpux* and mips*-*-irix* used to do this.
#
# [ gdb_compile -E $ifile > $binfile.ci ]
# source $binfile.ci
#
# dejagnu target_compile says that it supports output redirection,
# but the code is completely different from the normal path and I
# don't want to sweep the mines from that path. So I didn't even try
# this.
#
# set cppout [ gdb_compile $ifile "" preprocess $args quiet ]
# eval $cppout
#
# I actually do this for all targets now. gdb_compile runs the right
# compiler, and TCL captures the output, and I eval the output.
#
# Unfortunately, expect logs the output of the command as it goes by,
# and dejagnu helpfully prints a second copy of it right afterwards.
# So I turn off expect logging for a moment.
#
# [ gdb_compile $ifile $ciexe_file executable $args ]
# [ remote_exec $ciexe_file ]
# [ source $ci_file.out ]
#
# I could give up on -E and just do this.
# I didn't get desperate enough to try this.
#
# -- chastain 2004-01-06
proc get_compiler_info {binfile args} {
# Create and source the file that provides information about the compiler
# used to compile the test case.
# Compiler_type can be null or c++. If null we assume c.
# For compiler.c and compiler.cc
global srcdir
global subdir
# These two come from compiler.c.
global signed_keyword_not_used
global gcc_compiled
# I am going to play with the log to keep noise out.
global outdir
global tool
# These come from compiler.c or compiler.cc
global compiler_info
global gcc_compiled
global hp_cc_compiler
global hp_aCC_compiler
global signed_keyword_not_used
if {![istarget "hppa*-*-hpux*"] && ![istarget "mips*-*-irix*"]} {
if { [llength $args] > 0 } {
if {$args == "c++"} {
if { [gdb_compile "${srcdir}/lib/compiler.cc" "${binfile}.ci" preprocess {}] != "" } {
perror "Couldn't make ${binfile}.ci file"
return 1;
}
}
} else {
if { [gdb_compile "${srcdir}/lib/compiler.c" "${binfile}.ci" preprocess {}] != "" } {
perror "Couldn't make ${binfile}.ci file"
return 1;
}
}
} else {
if { [llength $args] > 0 } {
if {$args == "c++"} {
if { [eval gdb_preprocess \
[list "${srcdir}/lib/compiler.cc" "${binfile}.ci"] \
$args] != "" } {
perror "Couldn't make ${binfile}.ci file"
return 1;
}
}
} elseif { $args != "f77" } {
if { [eval gdb_preprocess \
[list "${srcdir}/lib/compiler.c" "${binfile}.ci"] \
$args] != "" } {
perror "Couldn't make ${binfile}.ci file"
return 1;
# Choose which file to preprocess.
set ifile "${srcdir}/lib/compiler.c"
if { [llength $args] > 0 && [lindex $args 0] == "c++" } {
set ifile "${srcdir}/lib/compiler.cc"
}
# Run $ifile through the right preprocessor.
# Toggle gdb.log to keep the compiler output out of the log.
log_file
set cppout [ gdb_compile "${ifile}" "" preprocess [list "$args" quiet] ]
log_file -a "$outdir/$tool.log"
# Source the output.
foreach cppline [ split "$cppout" "\n" ] {
if { ! [ regexp "^#" "$cppline" ] } {
if { ! [ regexp "^\[\n\r\t \]*$" "$cppline" ] } {
verbose "get_compiler_info: $cppline" 2
eval "$cppline"
}
}
}
uplevel \#0 { set gcc_compiled 0 }
if { [llength $args] == 0 || $args != "f77" } {
source ${binfile}.ci
}
verbose -log "get_compiler_info: $compiler_info"
# Most compilers will evaluate comparisons and other boolean
# operations to 0 or 1.
uplevel \#0 { set true 1 }
uplevel \#0 { set false 0 }
uplevel \#0 { set hp_cc_compiler 0 }
uplevel \#0 { set hp_aCC_compiler 0 }
uplevel \#0 { set hp_f77_compiler 0 }
uplevel \#0 { set hp_f90_compiler 0 }
if { !$gcc_compiled && [istarget "hppa*-*-hpux*"] } {
# Check for the HP compilers
set compiler [lindex [split [get_compiler $args] " "] 0]
catch "exec what $compiler" output
if [regexp ".*HP aC\\+\\+.*" $output] {
uplevel \#0 { set hp_aCC_compiler 1 }
# Use of aCC results in boolean results being displayed as
# "true" or "false"
uplevel \#0 { set true true }
uplevel \#0 { set false false }
} elseif [regexp ".*HP C Compiler.*" $output] {
uplevel \#0 { set hp_cc_compiler 1 }
} elseif [regexp ".*HP-UX f77.*" $output] {
uplevel \#0 { set hp_f77_compiler 1 }
} elseif [regexp ".*HP-UX f90.*" $output] {
uplevel \#0 { set hp_f90_compiler 1 }
}
# Use of aCC results in boolean results being displayed as
# "true" or "false"
if { $hp_aCC_compiler } {
uplevel \#0 { set true true }
uplevel \#0 { set false false }
}
return 0;
@ -1184,85 +1212,6 @@ proc test_compiler_info { compiler } {
return [string match $compiler $compiler_info]
}
proc get_compiler {args} {
global CC CC_FOR_TARGET CXX CXX_FOR_TARGET F77_FOR_TARGET
if { [llength $args] == 0
|| ([llength $args] == 1 && [lindex $args 0] == "") } {
set which_compiler "c"
} else {
if { $args =="c++" } {
set which_compiler "c++"
} elseif { $args =="f77" } {
set which_compiler "f77"
} else {
perror "Unknown compiler type supplied to gdb_preprocess"
return ""
}
}
if [info exists CC_FOR_TARGET] {
if {$which_compiler == "c"} {
set compiler $CC_FOR_TARGET
}
}
if [info exists CXX_FOR_TARGET] {
if {$which_compiler == "c++"} {
set compiler $CXX_FOR_TARGET
}
}
if [info exists F77_FOR_TARGET] {
if {$which_compiler == "f77"} {
set compiler $F77_FOR_TARGET
}
}
if { ![info exists compiler] } {
if { $which_compiler == "c" } {
if {[info exists CC]} {
set compiler $CC
}
}
if { $which_compiler == "c++" } {
if {[info exists CXX]} {
set compiler $CXX
}
}
if {![info exists compiler]} {
set compiler [board_info [target_info name] compiler];
if { $compiler == "" } {
perror "get_compiler: No compiler found"
return ""
}
}
}
return $compiler
}
proc gdb_preprocess {source dest args} {
set compiler [get_compiler "$args"]
if { $compiler == "" } {
return 1
}
set cmdline "$compiler -E $source > $dest"
verbose "Invoking $compiler -E $source > $dest"
verbose -log "Executing on local host: $cmdline" 2
set status [catch "exec ${cmdline}" exec_output]
set result [prune_warnings $exec_output]
regsub "\[\r\n\]*$" "$result" "" result;
regsub "^\[\r\n\]*" "$result" "" result;
if { $result != "" } {
clone_output "gdb compile failed, $result"
}
return $result;
}
set gdb_wrapper_initialized 0
proc gdb_wrapper_init { args } {