blob: a768aa6981b95fff086db68edfdb84f202ce5f99 [file] [log] [blame]
# Copyright 2003, 2005
# 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 Jason Molenda (jmolenda@apple.com)
if $tracelevel then {
strace $tracelevel
}
set b1suffix 1
set b2suffix 2
set b3suffix 3
set b4suffix 4
#set b1suffix ""
#set b2suffix ""
#set b3suffix ""
#set b4suffix ""
set prms_id 0
set bug_id 0
set testfile "a.out"
set binfile ${objdir}/${subdir}/${testfile}
set timeout 30
set arch "i386"
if [target_info exists darwin64] {
set arch "x86_64"
}
if [istarget "powerpc-apple-darwin*"] {
set arch "ppc"
}
remote_exec build "sh ${srcdir}/${subdir}/../set-up-objdir.sh ${srcdir}/${subdir} ${objdir}/${subdir}"
remote_exec build "make ARCH=${arch} -C ${objdir}/${subdir} stage1"
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}
# for F&C on Jaguar systems, we need a modified libobjc.
gdb_test "set environ DYLD_LIBRARY_PATH /System/Library/PrivateFrameworks/ZeroLink.framework/Versions/Current/Resources" "" "set DYLD_LIBRARY_PATH"
if ![runto_main] then {
fail "small objc fix and continue tests suppressed"
return -1
}
gdb_test "next 6" ".*first_var says: hi v1.*Fix in class-bundlized.o version #2 here.*" "first version of object"
# Build a new class.m
gdb_test "shell make ARCH=${arch} -C $objdir/$subdir stage2" ".*gcc.*-freplace-objc-classes.*" "make version 2 of class.m"
send_gdb "fix $objdir/$subdir/class-bundlized.o$b2suffix $objdir/$subdir/class.m\n"
gdb_expect {
-re "objc: Both .* and .* have implementations of class MyClass.*Fix succeeded.*$gdb_prompt $" {
fail "fix version 2 of ObjC class without ObjC runtime warning"
}
-re ".*Fix succeeded.*$gdb_prompt $" {
pass "fix version 2 of ObjC class without ObjC runtime warning"
}
-re ".*$gdb_prompt $" {
fail "fix version 2 of ObjC class without ObjC runtime warning"
}
timeout {
fail "fix version 2 of ObjC class without ObjC runtime warning (timeout)"
}
}
gdb_test "n 10" "first_var says: hi v2.*second_var says: hi v2.*third_var says: hi v2.*Fix in class-bundlized.o version #3 here.*" "create new objects, verify contents, version 2"
# Build a newer class.m
gdb_test "shell make ARCH=${arch} -C $objdir/$subdir stage3" ".*gcc.*-freplace-objc-classes.*" "make version 3 of class.m"
send_gdb "fix $objdir/$subdir/class-bundlized.o$b3suffix $objdir/$subdir/class.m\n"
gdb_expect {
-re "objc: Both .* and .* have implementations of class MyClass.*Fix succeeded.*$gdb_prompt $" {
fail "fix version 3 of ObjC class without ObjC runtime warning"
}
-re ".*Fix succeeded.*$gdb_prompt $" {
pass "fix version 3 of ObjC class without ObjC runtime warning"
}
-re ".*$gdb_prompt $" {
fail "fix version 3 of ObjC class without ObjC runtime warning"
}
timeout {
fail "fix version 3 of ObjC class without ObjC runtime warning (timeout)"
}
}
gdb_test "n 10" "first_var says: hi v3.*second_var says: hi v3.*third_var says: hi v3.*fourth_var says: hi v3.*" "create new objects, verify contents, version 3"
gdb_test "break '-\[MyClass sayHello\]'" "Breakpoint 2 at.*" "Set a breakpoint on -\[Myclass sayHello\]"
gdb_test "next" "Breakpoint 2, .*" "Run to breakpoint in fixed class sayHello"
gdb_test "finish" "Run till exit from .*" "Finish out of sayHello"
# Now check the isa pointers...
send_gdb "n 4\n"
gdb_expect {
-re "first_var isa is ($hex).*second_var isa is ($hex).*third_var isa is ($hex).*fourth_var isa is ($hex).*$gdb_prompt $" {
pass "Get all four objects' isa pointers"
set first_var_isa $expect_out(1,string)
set second_var_isa $expect_out(2,string)
set third_var_isa $expect_out(3,string)
set fourth_var_isa $expect_out(4,string)
}
-re ".*$gdb_prompt $" {
fail "Get all four objects' isa pointers"
}
timeout {
fail "Get all four objects' isa pointers (timeout)"
}
}
if {$first_var_isa == $second_var_isa &&
$second_var_isa == $third_var_isa && \
$third_var_isa == $fourth_var_isa} then {
pass "All four objects have identical isa pointers."
} else {
fail "All four objects have identical isa pointers."
}
gdb_exit
return 0