cachedsym-1.exp   [plain text]


# Copyright 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, 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

# This file was written by Serena Hartoog (hartoog@apple.com)
#
# This file is part of the gdb testsuite. 
# It tests cached symbol tables. 
# source file used is in cached-symfile-lib directory


# load my own tcl library
load_lib $srcdir/$subdir/cachedsym-proc.exp


if $tracelevel then {
        strace $tracelevel
}

set prms_id 0
set bug_id 0

# global variables
set mylibdir "cachedsym-lib"
set libfile ${mylibdir}/cachedsym
set libbindir  ${objdir}/${subdir}
set libbinfn "libcachedsym.dylib"
set libbinfile ${libbindir}/${libbinfn}
set testfile "cachedsymtest"
set srcfile ${mylibdir}/${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
set cachedir "gdb-symfile-cache"
set defcachedir "${objdir}/${cachedir}"
set chbinfile "${defcachedir}/${testfile}.syms"
set chlibbinfile "${defcachedir}/${libbinfn}.syms"

gdb_suppress_entire_file "Cached symfiles disabled."
return 0

verbose "\[DEBUG\] testfile=$testfile" 1
verbose "\[DEBUG\] libbinfile=$libbinfile" 1
verbose "\[DEBUG\] binfile=$binfile" 1
verbose "\[DEBUG\] srcfile=$srcfile" 1
verbose "\[DEBUG\] Default chached file dir, defcachedir=$defcachedir" 1
verbose "\[DEBUG\] chbinfile=$chbinfile" 1
verbose "\[DEBUG\] libbinfn=$libbinfn" 1
verbose "\[DEBUG\] chlibbinfile=$chlibbinfile" 1

# build dynamic library before compiling the program
build_library 

# compile and link the program
set additional_flags "additional_flags=-L${libbindir} -lcachedsym"
if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug $additional_flags]] != "" } {
    gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir

# remove any old cached symbol files before we start
remote_exec build "rm -rf $defcachedir" 
remote_exec build "rm -rf $defcachedir.junk"
remote_exec build "rm -rf $defcachedir.junk1"
remote_exec build "rm -rf $defcachedir.junk2"
remote_exec build "rm -rf $defcachedir.junk3"
remote_exec build "rm -rf $defcachedir.junk4"
if [ file exists ${defcachedir} ] {
    verbose "*** Ccached sym dir delete failed\n" 1
} else {
    verbose "*** Cached sym dir delete succeeded\n" 1
}


#
# test case 1: no gdb-symfile-cache dir before launching gdb, and do not set generate-cached-symfiles on
# After loading, set generate-cached-symfiles on then load file again
#
gdb_test "file $binfile" \
         "Reading symbols for shared libraries.*\r\nReading symbols from $binfile.*" \
         "t1: load file without cached symfile"

gdb_test "break main" \
         "Breakpoint 1 at $hex: file.*${testfile}.*line.*" \
         "t1: set break point at main"

gdb_test "run" \
         "Starting program: ${binfile}.*\[\r\n\]+Breakpoint 1, main.*\r\n5.*mylibFunc001.*" \
         "t1: run program whitout setting generate-cached-symfiles on"                  

gdb_test "set generate-cached-symfiles on" "" "t1: set generate-cached-symfiles on" 

send_gdb "file $binfile\n"
gdb_expect {
    -re ".*A program is being debugged already.*Kill it.*y or n.*$" {
            send_gdb "y\n"
            gdb_expect {
                -re "Load new symbol table.*${binfile}.*y or n.*$" {
                    send_gdb "y\n"
                    gdb_expect {
                        -re ".*Mapped symbols.*${binfile}.*$gdb_prompt $" {
                            pass "t1: load file with generate-cached-symfiles on"
                        }
                        -re "$gdb_prompt $" {
                            fail "t1: load file with generate-cached-symfiles on"
                        }
                        timeout {
                            fail "t1: (timeout) load file with generate-cached-symfiles on"
                        }
                    }
                }
                -re "$gdb_prompt $" {
                    fail "t1: load file with generate-cached-symfiles on"
                }
                timeout {
                    fail "t1: (timeout) load file with generate-cached-symfiles on"
                }
            }
    }
    -re "$gdb_prompt $" {
        fail "t1: load file with generate-cached-symfiles on"
    }
    timeout {
        fail "t1: (timeout) load file with generate-cached-symfiles on"
    }
}

gdb_test "run" \
         "Starting program: ${binfile}.*Breakpoint 1, main.*\r\n5.*mylibFunc001.*" \
         "t1: run program with generate-cached-symfiles on"

gdb_test "break main" \
         "Note: breakpoint 1 also set at pc.*\r\nBreakpoint 2.*line 5\\." \
         "t1: set break point at main again"                     
        
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
remote_exec build "mv $defcachedir $defcachedir.junk"
 
 
#
# test case 2: no gdb-symfile-cache dir before launching gdb, turn on generate-cached-symfiles 
# then load the file; turn off generate-cached-symfiles to load the file again
#
gdb_test "set generate-cached-symfiles on" "" "t2: turn on generate-cached-symfiles"

gdb_test "show generate-cached-symfiles" \
          "If GDB should generate persistent symbol tables by default is on\\." \
          "t2: Check if generate-cached-symfiles on"

gdb_test "file $binfile" \
         "Reading symbols for shared libraries.*\r\nMapped symbols for ${binfile}.*" \
         "t2: load file with cached symfile on"

# show info shared library, verify cached symfile is correctly display
gdb_test "info sharedlibrary" \
         "The DYLD shared library.*1 ${testfile}.*exec.*${binfile}.*${chbinfile}.*3 ${libbinfn}.*${chlibbinfile}.*4.*dylib at $hex.*" \
         "t2: check sharedlibrary for 1st time set up cached lib and load files"         

# set break point at main()
gdb_test "break main" \
         "Breakpoint 1 at $hex: file.*${testfile}.*line.*" \
         "t2: set break point at main of case 2"         

# already have gdb-symfile-cache dir before launching gdb, and set generate-cached-symfiles off
gdb_test "set generate-cached-symfiles off" "" "t2: turn generate-cached-symfiles off"

gdb_test "show generate-cached-symfiles" \
         "If GDB should generate persistent symbol tables by default is off\\." \
         "t2: verify generate-cached-symfiles is turned off"

send_gdb "file $binfile\n"
gdb_expect {    
    -re "Load new symbol table from \"$binfile\".*y or n.*$" {
        send_gdb "y\n"
        gdb_expect {
            -re "Mapped symbols for $binfile.*$gdb_prompt $" {
                pass "t2: loading program with preexisting symfiles and generate-cached-symfiles off"
            }
            -re "$gdb_prompt $" {
                fail "t2: loading program with preexisting symfiles and generate-cached-symfiles off"
            }
            timeout {
                fail "t2: (timeout) loading program with preexisting symfiles and generate-cached-symfiles off"
            }
        }
    }
    -re "$gdb_prompt $" {
        fail "t2: loading program with preexisting symfiles and generate-cached-symfiles off"
    }
    timeout {
        fail "t2: (timeout) loading program with preexisting symfiles and generate-cached-symfiles off"
    }
}

gdb_test "break main" \
         "Note: breakpoint 1 also set at pc.*\r\nBreakpoint 2.*line 5\\." \
         "t2: set break point at main again"  

gdb_test "run" \
         "Starting program: ${binfile}.*\[\r\n\]+Breakpoint 1, main.*\r\n5.*mylibFunc001.*" \
         "t2: run program with set generate-cached-symfiles on"

# unload program (binfile)
send_gdb "file\n"
gdb_expect {
    -re "A program is being debugged already.*Kill it.*y or n.*$" {
        send_gdb "y\n"
        gdb_expect {
            -re "No executable file now.*Discard symbol table from.*${chbinfile}.*y or n.*$" {
                send_gdb "y\n"
                gdb_expect {
                    -re "No symbol file now.*$gdb_prompt $" {
                        pass "t2: unload program"
                    }
                    -re "$gdb_prompt $" {
                        fail "t2: unload program"
                    }
                    timeout {
                        fail "t2: (timeout) unload program"
                    }
                }
            }
        }
    }
    -re "$gdb_prompt $" {
        fail "t2: unload program"
    }
    timeout {
        fail "t2: (timeout) unload program"
    }
}


#
# test case 3: gdb-symfile-cache exists befoe we launch gdb again
#
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
remote_exec build "mv $defcachedir $defcachedir.junk1"

gdb_test "set generate-cached-symfiles on" "" "t3: turn on generate-cached-symfiles"

gdb_test "show generate-cached-symfiles" \
          "If GDB should generate persistent symbol tables by default is on\\." \
          "t3: Check if generate-cached-symfiles on"

gdb_test "file $binfile" \
         "Reading symbols for shared libraries.*\r\nMapped symbols for ${binfile}.*" \
         "t3: load file with cached symfile on"

# show info shared library, verify cached symfile is correctly display
gdb_test "info sharedlibrary" \
         "The DYLD shared library.*1 ${testfile}.*exec.*${binfile}.*${chbinfile}.*3 ${libbinfn}.*${chlibbinfile}.*4.*dylib at $hex.*" \
         "t3: check sharedlibrary for 1st time set up cached lib and load files"         

# set break point at main()
gdb_test "break main" \
         "Breakpoint 1 at $hex: file.*${testfile}.*line.*" \
         "t3: set break point at main"

gdb_test "run" \
         "Starting program: ${binfile}.*\[\r\n\]+Breakpoint 1, main.*\r\n5.*mylibFunc001.*" \
         "t3: run program with set generate-cached-symfiles on"

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir

#
# test case 4: now load it again to see if cached sym files get used
#
gdb_test "file $binfile" \
         "Reading symbols for shared libraries.*\r\nMapped symbols for $binfile.*" \
         "t4: load file again to see if cached sym files get used"

gdb_test "info sharedlibrary" \
         "The DYLD shared library.*1 ${testfile}.*exec.*${binfile}.*${chbinfile}.*3 ${libbinfn}.*${chlibbinfile}.*4.*dylib at $hex.*" \
         "t4: check sharedlibrary info for cached symfile usage"         

# unload program (binfile)
send_gdb "file\n"
gdb_expect {
    -re ".*Discard symbol table from.*${chbinfile}.*y or n.*$" {
        send_gdb "y\n"
        gdb_expect {
            -re ".*No symbol file now.*$gdb_prompt $" {
                pass "t4: unload program"
            }
            -re "$gdb_prompt $" {
                fail "t4: unload program"
            }
            timeout {
                fail "t4: (timeout) unload program"
            }
        }
    }
    -re "$gdb_prompt $" {
        fail "t4: unload program"
    }
    timeout {
        fail "t4: (timeout) unload program"
    }
}

# cached symfile library should be removed from shared library info
send_gdb "info sharedlibrary\n"
gdb_expect {
    -re ".*1 ${testfile}.*exec.*${binfile}.*${chbinfile}.*3 ${libbinfn}.*${chlibbinfile}.*4.*$gdb_prompt $" {
        fail "t4: check if cached sym files are discarded from sharedlibrary entry after unloading binfile"
    }
    -re ".*The DYLD shared.*3.*$gdb_prompt " {
        pass "t4: check if cached sym files are discarded from sharedlibrary entry after unloading binfile"
    }   
    -re "$gdb_prompt $" {
        fail "t4: check if cached sym files are discarded from sharedlibrary entry after unloading binfile"
    }
    timeout {
        fail "t4: (timeout) check if cached sym files are discarded from sharedlibrary entry after unloading binfile"
    }
}

# now load program (binfile) again
gdb_test "file $binfile" "Mapped symbols for ${binfile}.*"  "t4: loading program 2nd time"

# show info shared library after loading program 2nd time
# the cached sym file should display
gdb_test "info sharedlibrary" \
         ".*1 ${testfile}.*exec.*${binfile}.*${chbinfile}.*3 ${libbinfn}.*${chlibbinfile}.*4.*" \
         "t4: check sharedlibrary entry to see if sym files get used after loading program 2nd time "

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir

#
# test case 5: touch library and see if we get message
#
remote_exec build "sleep 10"
remote_exec build "touch ${libbinfile}"
verbose "\[DEBUG\] libbinfile=$libbinfile" 1
# verify if touch lib file works
set touchFlag [ newer $libbinfile $chlibbinfile ]
verbose "\[DEBUG\] touchFlag=$touchFlag" 1
if { $touchFlag } {
    verbose "*** touch lib succeeded\n" 1
            # now load it again; may get messages about out of date cached sym files here
            verbose "\[DEBUG\]binfile=${binfile}" 1
            gdb_test "set verbose on" "" "t5: set verbose on"
            gdb_test "file $binfile" \
                     "Mapped.*warning: Cached symbol.*${libbinfn}.*is older.*than library.*ignoring.*Reading symbols from ${libbinfile}.*" \
                     "t5: load bin file to test if cached bin file out of date"

            # show info shared library after gdb issue out of date cached sym file
            send_gdb "info sharedlibrary\n"
            gdb_expect {
                -re ".*${chlibbinfile}.*$gdb_prompt $" {
                    fail "t5: check if my cached lib removed from sharedlibrary info" 
                }
                -re ".*1 ${testfile}.*exec.*${binfile}.*${chbinfile}.*3 ${libbinfn}.*4.*$gdb_prompt $" {
                    pass "t5: check if my cached lib removed from sharedlibrary info" 
                }  
                -re "$gdb_prompt $" {
                    fail "t5: check if my cached lib removed from sharedlibrary info"
                }
                timeout {
                    fail "t5: (timeout) check if my cached lib removed from sharedlibrary info"
                }
            }
                                    
    gdb_exit
            
} else {
   verbose "***** touch shared library file failed, tests for out of date will not be executed\n" 1
}
         
#
# test case 6:
# generate a new ccahed files for later test 
# remove the old/out of date cached symfile before we set generate-cached-symfiles on
#
remote_exec build "mv $defcachedir $defcachedir.junk2"
if [ file exists $defcachedir ] {
    verbose "*** Cached sym dir remove faile\n" 1
} else {
    verbose "*** Cached sym dir remove successed\n" 1
}

gdb_start
gdb_reinitialize_dir $srcdir/$subdir

gdb_test "set generate-cached-symfiles on" "" "t6: turn on generate-cached-symfiles"

# now load it again
gdb_test "file $binfile" "Mapped symbols for ${binfile}.*"  "t6: load program to generate the new cached sym files"

# to see info sharedlibrary\n"
gdb_test "info sharedlibrary" \
        ".*1 ${testfile}.*exec.*${binfile}.*${chbinfile}.*3 ${libbinfn}.*${chlibbinfile}.*4.*" \
        "t6: check sharedlibrary for new bin file"

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir

#
# test case 7: touch binary file and see if we get out of date message
#
remote_exec build "sleep 10"
remote_exec build "touch ${binfile}"
# verify if touch bin file works
set touchFlag [ newer  $binfile $chbinfile ]
verbose "\[DEBUG\] touchFlag=$touchFlag" 1
if { $touchFlag } {
    verbose "*** touch binfile succeed\n" 1

        # now load it again
        # may get messages about out of date cached sym bin files here
        gdb_test "set verbose on" "" "t7: set verbose on"
        gdb_test "file $binfile" \
                 "Mapped.*warning: Cached symbol.*${testfile}.*is older.*than library.*${binfile}.*" \
                 "t7: load bin file to test if cached bin file out of date"
                 
        # show info shared library after gdb issue out of date cached sym file
        send_gdb "info sharedlibrary\n"
        gdb_expect {
            -re ".*${chbinfile}.*$gdb_prompt $" {
                fail "t7: check if my cached lib removed from sharedlibrary info" 
            }
            -re ".*1 ${testfile}.*exec.*${binfile}.*3 ${libbinfn}.*${chlibbinfile}.*4.*$gdb_prompt $" {
                pass "t7: check if my cached lib removed from sharedlibrary info" 
            }  
            -re "$gdb_prompt $" {
                fail "t7: check if my cached lib removed from sharedlibrary info"
            }
            timeout {
                fail "t7: (timeout) check if my cached lib removed from sharedlibrary info"
            }
        }
        
} else {
   verbose "*** touch binfile failed, tests for out of date bin cached symfile will not be executed\n" 1
}

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir

#
# test case 8: test a bug - touching bin file causes malloc/free error message
#
remote_exec build "mv $defcachedir $defcachedir.junk3"
if [ file exists $defcachedir ] {
    verbose "*** Cached sym dir remove faile\n" 1
} else {
    verbose "*** Cached sym dir remove successed\n" 1
}

gdb_test "set generate-cached-symfiles on" "" "t8: set generate-cached-symfiles on"
gdb_test "file $binfile" ".*${binfile}.*" "t8: load bin file"

remote_exec build "sleep 10"
remote_exec build "touch $binfile"
verbose "\[DEBUG\] binfile=$binfile" 1
# verify if touch bin file works
set touchFlag [ newer $binfile $chbinfile ]
verbose "\[DEBUG\] touchFlag=$touchFlag" 1
if { $touchFlag } {
    verbose "*** touch bin file succeeded\n" 1
} else {
   verbose "***** touch bin file failed\n" 1
}

gdb_test "b main" "Breakpoint 1 at $hex: file.*line 5\\." "t8: set break point at main"
send_gdb "run\n"
gdb_expect {
    -re ".*malloc.*Deallocation of a pointer not malloced.*$gdb_prompt $" {
        fail "t8: load file to see if it causes malloc/free error message" 
    }
    -re ".*Breakpoint 1, main.*mylibFunc001.*$gdb_prompt $" {
        pass "t8: load file to see if it causes malloc/free error message" 
    }  
    -re "$gdb_prompt $" {
        fail "t8: load file to see if it causes malloc/free error message" 
    }
    timeout {
        fail "t8: (timeout) load file to see if it causes malloc/free error message" 
    }
}

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir

#
# start new tests
#

# crate tmp dir
set tmpdir tmpRun
set libdir myLib
set cachedsympath myCachedSymfiles
set mytmp $objdir/$tmpdir
set myLib $mytmp/$libdir
set myCached $mytmp/$cachedsympath
global mytmp
global myLib
global myCached

# create test dir
createtmpdir $mytmp $myLib $myCached 

set mycacheddir ${myCached}/my-gdb-cached-dir
verbose "\[DEBUG\] mytmp=$mytmp" 1
verbose "\[DEBUG\] myLib=$myLib" 1
verbose "\[DEBUG\] myCached=$myCached" 1
verbose "\[DEBUG\] mycacheddir=$mycacheddir" 1

remote_exec build "mv $defcachedir $defcachedir.junk4"
if [ file exists $defcachedir ] {
    verbose "*** Cached sym dir remove failed\n" 1
} else {
    verbose "*** Cached sym dir remove successed\n" 1
}

#
# test case 9: test cached-symfile-path and sharedlibrary cache-symfile <filename>
#
set mycacheddir ${myCached}/my-gdb-cached-dir
gdb_test "set cached-symfile-dir $mycacheddir" "" "t9: set cached-symfile-dir to my dir"
gdb_test "show cached-symfile-path" \
         "List of directories to search for cached symbol files is \"\\./gdb-symfile-cache:\\./syms:/usr/libexec/gdb/symfiles\"\\." \
         "t9: show cached-symfile-path"
gdb_test "set cached-symfile-path $mycacheddir:./gdb-symfile-cache:./syms:/usr/libexec/gdb/symfiles" \
         "" \
         "t9: append my directory to cached-symfile-path"         
gdb_test "show cached-symfile-path" \
         "List.*is \"$mycacheddir:\\./gdb-symfile-cache:\\./syms:/usr/libexec/gdb/symfiles\"\\." \
         "t9: check cached-symfile-path for my directory"         
gdb_test "set generate-cached-symfiles on" "" "t9: set generate-cached-symfiles on"
gdb_test "show generate-cached-symfiles" "If.*default is on\\." "t9: show generate-cached-symfiles"
gdb_test "file $binfile" \
         "Reading.*\r\nMapped symbols for $binfile.*" \
         "t9: load executable program"

gdb_test "info sharedlibrary" \
         "The DYLD shared library.*1 ${testfile}.*exec.*${binfile}.*${mycacheddir}/${testfile}\\.syms.*2 dyld.*${mycacheddir}/dyld\\.syms.*3.*${mycacheddir}/${libbinfn}.*4.*${mycacheddir}/libSystem.*commpage symbols read.*LC_SEGMENT.__DATA.__commpage.*syms" \
         "t9: check sharedlibrary to see if any from my symfile dir"         
gdb_test "break main" "Breakpoint 1 at $hex:.*line 5\\." "t9: set break point at main"
gdb_test "run" \
         "Starting program: ${binfile}.*\[\r\n\]+Breakpoint 1, main.*\r\n5.*mylibFunc001.*" \
         "t9: run the program"
gdb_test "continue" \
         "Continuing.*In mylibFunc001.*In mylibFunc002.*Program exited normally\\." \
         "t9: continue execution"

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir

#
# test case 10: test cached-symfile-path and sharedlibrary cache-symfiles <shlibnums>
#
gdb_test "sharedlibrary cache-symfile $binfile $myLib" \
         "" \
         "t10: create my sharedlibrary cached sym file in my directory"

gdb_test "set cached-symfile-path $myLib:./gdb-symfile-cache:./syms:/usr/libexec/gdb/symfiles" \
         "" \
         "t10: append my cached-symfile-path to default path" 
                 
gdb_test "show cached-symfile-path" \
         "List.*is \"$myLib:\\./gdb-symfile-cache:\\./syms:/usr/libexec/gdb/symfiles\"\\." \
         "t10: show cached-symfile-path"         
         
gdb_test "set generate-cached-symfiles on" "" "t10: turn on generate-cached-symfiles"

gdb_test "file $binfile" \
         "Reading.*\r\nMapped symbols for $binfile.*" \
          "t10: load bin file to see if it uses cached sym file"

gdb_test "info sharedlibrary" \
         "The DYLD shared library.*1 ${testfile}.*exec.*${binfile}.*${myLib}/${testfile}\.syms.*2 dyld.*commpage symbols read.*syms\." \
         "t10: check sharedlibrary see if get symfile out my symfile dir"         

gdb_test "sharedlibrary cache-symfiles 2-3 $myLib" \
         "" \
         "t10: create sharedlibrary cache-symfiles for libraies 2 and 3"
         
send_gdb "file $binfile\n"
gdb_expect {    
    -re "Load new symbol table from \"$binfile\".*y or n.*$" {
        send_gdb "y\n"
        gdb_expect {
            -re "Mapped symbols for $binfile.*$gdb_prompt $" {
                pass "t10: loading program with new cached sym files"
            }
            -re "$gdb_prompt $" {
                fail "t10: loading program with new cached sym file"
            }
            timeout {
                fail "t10: (timeout) loading program with new cached sym file"
            }
        }
    }
    -re "$gdb_prompt $" {
        fail "t10: loading program with new cached sym file"
    }
    timeout {
        fail "t10: (timeout) loading program with new cached sym file"
    }
}

gdb_test "info sharedlibrary" \
         "The DYLD shared library.*1 ${testfile}.*exec.*${binfile}.*${myLib}/${testfile}\.syms.*2 dyld.*${myLib}/dyld\\.syms.*3.*${myLib}/${libbinfn}\\.syms.*5.*${myLib}/${testfile}\\.syms.*" \
         "t10: check sharedlibrary info for new cached sym files"         

send_gdb "file\n"
gdb_expect {    
    -re "No executable.*Discard symbol table from.*${myLib}/${testfile}.*y or n.*" {
        send_gdb "y\n"
        gdb_expect {
            -re "No symbol file now.*$gdb_prompt $" {
                pass "t10: unload file to discard sym tables"
            }
            -re "$gdb_prompt $" {
                fail "t10:  unload file to discard sym tables"
            }
            timeout {
                fail "t10: (timeout)  unload file to discard sym tables"
            }
        }
    }
    -re "$gdb_prompt $" {
        fail "t10:  unload file to discard sym tables"
    }
    timeout {
        fail "t10: (timeout)  unload file to discard sym tables"
    }
}
      

gdb_test "info sharedlibrary" \
         "The DYLD shared library.*1 dyld.*2 ${libbinfn}.*3 libSystem.B.dylib.*4 -.*" \
         "t10: check sharedlibrary info after unload executable file" 
         

remote_exec build "rm -r $defcachedir"
remote_exec build "rm -r $defcachedir.junk"
remote_exec build "rm -r $defcachedir.junk1"
remote_exec build "rm -r $defcachedir.junk2"
remote_exec build "rm -r $defcachedir.junk3"
remote_exec build "rm -r $defcachedir.junk4"

if [ file exists $defcachedir ] {
    verbose "*** Cached sym dir remove failed\n" 1
    }
gdb_exit
return 0