1# Copyright 2003-2014 Free Software Foundation, Inc. 2 3# This program is free software; you can redistribute it and/or modify 4# it under the terms of the GNU General Public License as published by 5# the Free Software Foundation; either version 3 of the License, or 6# (at your option) any later version. 7# 8# This program is distributed in the hope that it will be useful, 9# but WITHOUT ANY WARRANTY; without even the implied warranty of 10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11# GNU General Public License for more details. 12# 13# You should have received a copy of the GNU General Public License 14# along with this program. If not, see <http://www.gnu.org/licenses/>. 15 16# This file was written by Adam Fedor (fedor@gnu.org) 17 18standard_testfile .m 19 20# 21# Objective-C program compilation isn't standard. We need to figure out 22# which libraries to link in. Most of the time it uses pthread 23# 24if {[gdb_compile_objc "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug ]] != "" } { 25 return -1 26} 27 28# 29# Deduce language of main() 30# 31 32proc deduce_language_of_main {} { 33 global gdb_prompt 34 35 # See what language gdb thinks main() is, prior to reading full symbols. 36 # I think this fails for COFF targets. 37 send_gdb "show language\n" 38 gdb_expect { 39 -re ".* source language is \"auto; currently objective-c\".*$gdb_prompt $" { 40 pass "deduced language is Objective-C, before full symbols" 41 } 42 -re ".*$gdb_prompt $" { 43 fail "source language not correct for Objective-C (psymtabs only)" 44 return 45 } 46 timeout { 47 fail "can't show language (timeout)" 48 return 49 } 50 } 51 52 runto_main 53 54 # See if our idea of the language has changed. 55 56 send_gdb "show language\n" 57 gdb_expect { 58 -re ".* source language is \"auto; currently objective-c\".*$gdb_prompt $" { 59 pass "deduced language is Objective-C, after full symbols" 60 } 61 -re ".*$gdb_prompt $" { 62 fail "source language not correct for Objective-C (full symbols)" 63 return 64 } 65 timeout { 66 fail "can't show language (timeout)" 67 return 68 } 69 } 70} 71 72proc do_objc_tests {} { 73 global subdir 74 global srcdir 75 global binfile 76 global gdb_prompt 77 78 79 # Start with a fresh gdb. 80 81 gdb_exit 82 gdb_start 83 gdb_reinitialize_dir $srcdir/$subdir 84 gdb_load $binfile 85 86 deduce_language_of_main 87} 88 89do_objc_tests 90 91# 92# Breakpoint tests 93# 94 95# Disable pending breakpoint query to avoid timeouts 96# if Obj-C symbols cannot be found 97gdb_test "set breakpoint pending off" "" "set breakpoint pending" 98 99gdb_test "break doIt" \ 100 "Breakpoint.*at.* file .*$srcfile, line.29.*" \ 101 "breakpoint method" 102 103gdb_test "break takeArg:" \ 104 "Breakpoint.*at.* file .*$srcfile, line.34.*" \ 105 "breakpoint method with colon" 106 107gdb_test "break newWithArg:" \ 108 "Breakpoint.*at.* file .*$srcfile, line.22.*" \ 109 "breakpoint class method with colon" 110 111# 112# Continue until breakpoint (test re-setting breakpoint) 113# 114gdb_test continue \ 115 "Continuing\\..*Breakpoint \[0-9\]+, -.BasicClass takeArg:. \\(self=.*, _cmd=.*, arg=.*\\) at .*$srcfile:34.*" \ 116 "continue until method breakpoint" 117 118# 119# Test resetting breakpoints when re-running program 120# 121gdb_run_cmd 122gdb_expect { 123 -re "Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$srcfile:.*$gdb_prompt $"\ 124 { pass "resetting breakpoints when rerunning" } 125 -re ".*$gdb_prompt $" { fail "resetting breakpoints when rerunning" } 126 timeout { fail "resetting breakpoints when rerunning" } 127} 128 129# 130# Continue until breakpoint (test re-setting breakpoint) 131# 132gdb_test continue \ 133 "Continuing\\..*Breakpoint \[0-9\]+, -.BasicClass takeArg:. \\(self=.*, _cmd=.*, arg=.*\\) at .*$srcfile:34.*" \ 134 "continue until method breakpoint" 135 136# 137# Test printing objects 138# 139gdb_test "print object" \ 140 "\\$\[0-9\] = .*0x0" \ 141 " print an ivar of self" 142 143gdb_test "print self" \ 144 "\\$\[0-9\] = \\(.*BasicClass \\*\\) 0x\[0-9a-f\]+" \ 145 " print self" 146 147gdb_test "print \*self" \ 148 "\\$\[0-9\] = \{{?isa = 0x\[0-9a-f\]+( <.*>)?}?, object = 0x0\}" \ 149 " print contents of self" 150 151# 152# Break in a category 153# 154gdb_test "break hiddenMethod" \ 155 "Breakpoint.*at.* file .*$srcfile, line.61." \ 156 "breakpoint in category method" 157 158 159# 160# Continue until breakpoint (test re-setting category breakpoint) 161# 162gdb_test continue \ 163 "Continuing\\..*Breakpoint \[0-9\]+, -.BasicClass\\(Private\\) hiddenMethod. \\(self=.*, _cmd=.*\\) at .*$srcfile:61.*" \ 164 "continue until category method" 165 166# 167# Test calling Objective-C methods 168# 169gdb_test "print \[self printHi\]" \ 170 "Hi.*\\$\[0-9\] = \\(.*objc_object \\*\\) 0x\[0-9a-f\]+" \ 171 "Call an Objective-C method with no arguments" 172 173gdb_test "print \[self printNumber: 42\]" \ 174 "42.*\\$\[0-9\] = 43" \ 175 "Call an Objective-C method with one argument" 176 177# 178# Test printing the object description 179# 180gdb_test "print-object object" \ 181 "BasicClass gdb test object" \ 182 "Use of the print-object command" 183 184gdb_test "po self" \ 185 "BasicClass gdb test object" \ 186 "Use of the po (print-object) command" 187 188 189