From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5936 invoked by alias); 4 Apr 2002 21:38:14 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 5921 invoked from network); 4 Apr 2002 21:38:11 -0000 Received: from unknown (HELO nevyn.them.org) (128.2.145.6) by sources.redhat.com with SMTP; 4 Apr 2002 21:38:11 -0000 Received: from drow by nevyn.them.org with local (Exim 3.35 #1 (Debian)) id 16tEvy-0000S6-00; Thu, 04 Apr 2002 16:38:18 -0500 Date: Thu, 04 Apr 2002 13:38:00 -0000 From: Daniel Jacobowitz To: gdb-patches@sources.redhat.com, fnasser@redhat.com Subject: [RFA/testsuite] Add a test for add-symbol-file Message-ID: <20020404163818.A1712@nevyn.them.org> Mail-Followup-To: gdb-patches@sources.redhat.com, fnasser@redhat.com Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.23i X-SW-Source: 2002-04/txt/msg00130.txt.bz2 add-symbol-file isn't covered anywhere in the testsuite, except for usage messages (default.exp, help.exp) and in gdb.hp. This adds some new tests for it - one of which actually fails on PowerPC right now. Patch coming in a second. Does this look OK? -- Daniel Jacobowitz Carnegie Mellon University MontaVista Software Debian GNU/Linux Developer 2002-04-04 Daniel Jacobowitz * gdb.base/relocate.exp: New file. * gdb.base/relocate.c: New file. --- /dev/null Wed Dec 31 19:00:00 1969 +++ relocate.c Thu Apr 4 16:27:13 2002 @@ -0,0 +1,17 @@ +static int static_foo = 1; +static int static_bar = 2; + +int global_foo = 3; +int global_bar = 4; + +int +function_foo () +{ + return 5; +} + +int +function_bar () +{ + return 6; +} --- /dev/null Wed Dec 31 19:00:00 1969 +++ relocate.exp Thu Apr 4 16:32:06 2002 @@ -0,0 +1,108 @@ +# Copyright 2002 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 + +# relocate.exp -- Expect script to test loading symbols from unrelocated +# object files. + +if $tracelevel then { + strace $tracelevel +} + +set testfile relocate +set srcfile ${srcdir}/${subdir}/${testfile}.c +set binfile ${objdir}/${subdir}/${testfile}.o + +remote_exec build "rm -f ${binfile}" +if { [gdb_compile "${srcfile}" "${binfile}" object {debug}] != "" } { + gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." +} + +proc get_var_address { var } { + global gdb_prompt hex + + send_gdb "print &${var}\n" + # Match output like: + # $1 = (int *) 0x0 + # $5 = (int (*)()) 0 + # $6 = (int (*)()) 0x24 + gdb_expect { + -re "\\\$\[0-9\]+ = \\(.*\\) (0|$hex)( <${var}>)?\[\r\n\]+${gdb_prompt} $" + { + pass "get address of ${var}" + if { $expect_out(1,string) == "0" } { + return "0x0" + } else { + return $expect_out(1,string) + } + } + -re "${gdb_prompt} $" + { fail "get address of ${var} (unknown output)" } + timeout + { fail "get address of ${var} (timeout)" } + } + return "" +} + + + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir + +# Load the object file. +gdb_test "add-symbol-file ${binfile} 0" \ + "Reading symbols from .*${testfile}\\.o\\.\\.\\.done\\." \ + "add-symbol-file ${testfile}.o 0" \ + "add symbol table from file \".*${testfile}\\.o\" at\[ \t\r\n\]+\.text_addr = 0x0\[\r\n\]+\\(y or n\\) " \ + "y" + +# Print the addresses of static variables. +set static_foo_addr [get_var_address static_foo] +set static_bar_addr [get_var_address static_bar] + +# Make sure they have different addresses. +if { "${static_foo_addr}" == "${static_bar_addr}" } { + fail "static variables have different addresses" +} else { + pass "static variables have different addresses" +} + +# Print the addresses of global variables. +set global_foo_addr [get_var_address global_foo] +set global_bar_addr [get_var_address global_bar] + +# Make sure they have different addresses. +if { "${global_foo_addr}" == "${global_bar_addr}" } { + fail "global variables have different addresses" +} else { + pass "global variables have different addresses" +} + +# Print the addresses of functions. +set function_foo_addr [get_var_address function_foo] +set function_bar_addr [get_var_address function_bar] + +# Make sure they have different addresses. +if { "${function_foo_addr}" == "${function_bar_addr}" } { + fail "functions have different addresses" +} else { + pass "functions have different addresses" +} + +return 0