From 2391e11d3a331a700cd44fe6af314a5f5adfeea0 Mon Sep 17 00:00:00 2001 From: Andrew Cagney Date: Thu, 13 Jul 2000 05:07:54 +0000 Subject: [PATCH] Check that GDB and the C compiler agree about the sizeof a few basic C types. --- gdb/testsuite/ChangeLog | 10 +++ gdb/testsuite/gdb.base/sizeof.c | 17 ++++ gdb/testsuite/gdb.base/sizeof.exp | 145 ++++++++++++++++++++++++++++++ 3 files changed, 172 insertions(+) create mode 100644 gdb/testsuite/gdb.base/sizeof.c create mode 100644 gdb/testsuite/gdb.base/sizeof.exp diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index dbc97e811c1..b13338efcd0 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,13 @@ +Thu Jul 13 11:52:53 2000 Andrew Cagney + + * gdb.base/sizeof.exp, gdb.base/sizeof.c: New files. Compare GDB + and the compilers sizes. + +Wed Jul 12 18:14:29 2000 Andrew Cagney + + * gdb.base/exprs.exp: Test casts to a pointer including over and + underflow. + 2000-07-09 Nick Duffek * gdb.c++/misc.cc (class ClassParam, class_param): Define. diff --git a/gdb/testsuite/gdb.base/sizeof.c b/gdb/testsuite/gdb.base/sizeof.c new file mode 100644 index 00000000000..bdc3d02e5ba --- /dev/null +++ b/gdb/testsuite/gdb.base/sizeof.c @@ -0,0 +1,17 @@ +int +main () +{ + printf ("sizeof (char) == %d\n", sizeof (char)); + printf ("sizeof (short) == %d\n", sizeof (short)); + printf ("sizeof (int) == %d\n", sizeof (int)); + printf ("sizeof (long) == %d\n", sizeof (long)); + printf ("sizeof (long long) == %d\n", sizeof (long long)); + + printf ("sizeof (void *) == %d\n", sizeof (void*)); + printf ("sizeof (void (*)(void)) == %d\n", sizeof (void (*)(void))); + + printf ("sizeof (float) == %d\n", sizeof (float)); + printf ("sizeof (double) == %d\n", sizeof (double)); + printf ("sizeof (long double) == %d\n", sizeof (long double)); + return 0; +} diff --git a/gdb/testsuite/gdb.base/sizeof.exp b/gdb/testsuite/gdb.base/sizeof.exp new file mode 100644 index 00000000000..a51a7b4148a --- /dev/null +++ b/gdb/testsuite/gdb.base/sizeof.exp @@ -0,0 +1,145 @@ +# Copyright (C) 2000 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 2 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, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Please email any bugs, comments, and/or additions to this file to: +# bug-gdb@prep.ai.mit.edu + +if $tracelevel { + strace $tracelevel +} + +# +# test running programs +# +set prms_id 0 +set bug_id 0 + +set testfile "sizeof" +set srcfile ${testfile}.c +set binfile ${objdir}/${subdir}/${testfile} +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } { + gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." +} + +if [get_compiler_info ${binfile}] { + return -1; +} + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${binfile} + +# +# set it up at a breakpoint so we can play with the variable values +# + +if ![runto_main] then { + perror "couldn't run to breakpoint" + continue +} + +# +# Query GDB for the size of various types +# + +proc get_sizeof { type default } { + global gdb_prompt + send_gdb "print/d sizeof (${type})\n" + gdb_expect { + -re "\\$\[0-9\]* = (\[0-9\]*).*$gdb_prompt $" { + set size $expect_out(1,string) + pass "get sizeof ${type} ($size)" + } + timeout { + set size ${default} + fail "get sizeof ${type} (timeout)" + } + } + return ${size} +} + +set sizeof_char [get_sizeof "char" 1] +set sizeof_short [get_sizeof "short" 2] +set sizeof_int [get_sizeof "int" 4] +set sizeof_long [get_sizeof "long" 4] +set sizeof_long_long [get_sizeof "long long" 8] + +set sizeof_data_ptr [get_sizeof "void *" 4] +set sizeof_func_ptr [get_sizeof "void (*)(void)" 4] + +set sizeof_float [get_sizeof "float" 4] +set sizeof_double [get_sizeof "double" 8] +set sizeof_long_double [get_sizeof "long double" 8] + + +# +# Compare GDB's idea of types with the running program +# + +proc check_sizeof { type size } { + global gdb_prompt + set pat [string_to_regexp ${type}] + send_gdb "next\n" + gdb_expect { + -re "sizeof \\(${pat}\\) == ${size}\[\r\n\].*$gdb_prompt $" { + pass "check sizeof ${type} == ${size}" + } + -re ".*$gdb_prompt $" { + fail "check sizeof ${type} == ${size}" + } + timeout { + fail "check sizeof ${type} == ${size} (timeout)" + } + } +} + +check_sizeof "char" ${sizeof_char} +check_sizeof "short" ${sizeof_short} +check_sizeof "int" ${sizeof_int} +check_sizeof "long" ${sizeof_long} +check_sizeof "long long" ${sizeof_long_long} + +check_sizeof "void *" ${sizeof_data_ptr} +check_sizeof "void (*)(void)" ${sizeof_func_ptr} + +check_sizeof "float" ${sizeof_float} +check_sizeof "double" ${sizeof_double} +check_sizeof "long double" ${sizeof_long_double} + + +# +# For reference, dump out the entire architecture +# +# The output is very long so use a while loop to consume it +send_gdb "maint print arch\n" +set ok 1 +while { $ok } { + gdb_expect { + -re ".*dump" { + #pass "maint print arch $ok" + #set ok [expr $ok + 1] + } + -re "$gdb_prompt $" { + pass "maint print arch" + set ok 0 + } + timeout { + fail "maint print arch (timeout)" + set ok 0 + } + } +} -- 2.30.2