# Copyright (C) 1992 - 2002, 2003 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

# Please email any bugs, comments, and/or additions to this file to:
# bug-dejagnu@gnu.org

load_lib "dejagnu.exp"

# Uncomment these for debugging help
#strace $tracelevel
# exp_internal -f dbg.log 1

# Execute everything in the test subdir so all the output files go there.
cd $subdir

# Get the size of the module being tested.
set sizes [exe_size "unit"]
if {[lindex $sizes 0] == "-1"} {
    perror "Couldn't get the object file size" 0
}

# Extract the text section size
set textsize [lindex $sizes 0]

# Extract the data section size
set datasize [lindex $sizes 1]

# FIXME: This ultimately needs to be recorded in the testing database,
# which doesn't exist yet. Till then it's kinda bogus, but I figured
# it would be useful having working code to get this data. So we print
# it out, just for the demo aspects.
verbose "Text section size of proctor is 0x$textsize"
verbose "Data section size of proctor is 0x$datasize"

# Execute the test case, and analyse the output
if { [host_execute "unit"] != "" } {
    perror "unit had an execution error" 0
}

# All done, back to the top level test directory
cd ..







