set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
+set compile_flags {debug}
+if [support_complex_tests] {
+ lappend compile_flags "additional_flags=-DTEST_COMPLEX"
+}
+
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable $compile_flags] != "" } {
untested callfuncs.exp
return -1
}
gdb_test "p t_int_double(99, 99.0)" " = 1"
}
+ if [support_complex_tests] {
+ setup_kfail_for_target gdb/12798 "x86_64-*-*"
+ gdb_test "p t_float_complex_values(fc1, fc2)" " = 1"
+ gdb_test "p t_float_complex_values(fc3, fc4)" " = 0"
+
+ setup_kfail_for_target gdb/12800 "x86_64-*-*"
+ gdb_test "p t_float_complex_many_args(fc1, fc2, fc3, fc4, fc1, fc2, fc3, fc4, fc1, fc2, fc3, fc4, fc1, fc2, fc3, fc4)" " = 1"
+ gdb_test "p t_float_complex_many_args(fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1)" " = 0"
+
+ setup_kfail_for_target gdb/12798 "x86_64-*-*"
+ gdb_test "p t_double_complex_values(dc1, dc2)" " = 1"
+ gdb_test "p t_double_complex_values(dc3, dc4)" " = 0"
+
+ setup_kfail_for_target gdb/12800 "x86_64-*-*"
+ gdb_test "p t_double_complex_many_args(dc1, dc2, dc3, dc4, dc1, dc2, dc3, dc4, dc1, dc2, dc3, dc4, dc1, dc2, dc3, dc4)" " = 1"
+ gdb_test "p t_double_complex_many_args(dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1)" " = 0"
+
+ gdb_test "p t_long_double_complex_values(ldc1, ldc2)" " = 1"
+ gdb_test "p t_long_double_complex_values(ldc3, ldc4)" " = 0"
+ gdb_test "p t_long_double_complex_many_args(ldc1, ldc2, ldc3, ldc4, ldc1, ldc2, ldc3, ldc4, ldc1, ldc2, ldc3, ldc4, ldc1, ldc2, ldc3, ldc4)" " = 1"
+ gdb_test "p t_long_double_complex_many_args(ldc1, ldc1, ldc1, ldc1, ldc1, ldc1, ldc1,ldc1, ldc1, ldc1, ldc1, ldc1, ldc1, ldc1, ldc1, ldc1)" " = 0"
+ }
+
gdb_test "p t_string_values(string_val2,string_val1)" " = 0"
gdb_test "p t_string_values(string_val1,string_val2)" " = 1"
gdb_test "p t_string_values(\"string 1\",\"string 2\")" " = 1"
"call inferior func with struct - returns double"
}
+ if [support_complex_tests] {
+
+ setup_kfail_for_target gdb/12796 "x86_64-*-*"
+ setup_kfail_for_target gdb/12797 "arm*-*-*"
+ gdb_test "p t_structs_fc(struct_val1)" ".*= 3 \\+ 3 \\* I" \
+ "call inferior func with struct - returns float _Complex"
+
+ setup_kfail_for_target gdb/12783 "i?86-*-*"
+ setup_kfail_for_target gdb/12796 "x86_64-*-*"
+ setup_kfail_for_target gdb/12797 "arm*-*-*"
+ gdb_test "p t_structs_dc(struct_val1)" ".*= 4 \\+ 4 \\* I" \
+ "call inferior func with struct - returns double _Complex"
+
+ setup_kfail_for_target gdb/12783 "i?86-*-*"
+ setup_kfail_for_target gdb/12796 "x86_64-*-*"
+ setup_kfail_for_target gdb/12797 "arm*-*-*"
+ gdb_test "p t_structs_ldc(struct_val1)" "= 5 \\+ 5 \\* I" \
+ "call inferior func with struct - returns long double _Complex"
+ }
+
gdb_test "p t_structs_a(struct_val1)" "= (.unsigned char .. )?\"foo\"" \
"call inferior func with struct - returns char *"
}
return $all_registers_lines
}
+proc rerun_and_prepare {} {
+ global hp_aCC_compiler
+
+ if { $hp_aCC_compiler } {
+ # Do not set language explicitly to 'C'. This will cause aCC
+ # tests to fail because promotion rules are different. Just let
+ # the language be set to the default.
+
+ if { ![runto_main] } {
+ gdb_suppress_tests;
+ }
+
+ # However, turn off overload-resolution for aCC. Having it on causes
+ # a lot of failures.
+
+ gdb_test_no_output "set overload-resolution 0"
+ } else {
+ gdb_test_no_output "set language c"
+ if { ![runto_main] } {
+ gdb_suppress_tests;
+ }
+ }
+
+ get_debug_format
+
+ # Make sure that malloc gets called and that the floating point unit
+ # is initialized via a call to t_double_values.
+ gdb_test "next" "t_double_values\\(double_val1, double_val2\\);.*" \
+ "next to t_double_values"
+ gdb_test "next" "t_structs_c\\(struct_val1\\);.*" \
+ "next to t_structs_c"
+}
+
# Start with a fresh gdb.
gdb_test_no_output "set print address off"
gdb_test_no_output "set width 0"
-if { $hp_aCC_compiler } {
- # Do not set language explicitly to 'C'. This will cause aCC
- # tests to fail because promotion rules are different. Just let
- # the language be set to the default.
-
- if { ![runto_main] } {
- gdb_suppress_tests;
- }
-
- # However, turn off overload-resolution for aCC. Having it on causes
- # a lot of failures.
-
- gdb_test_no_output "set overload-resolution 0"
-} else {
- gdb_test_no_output "set language c"
- if { ![runto_main] } {
- gdb_suppress_tests;
- }
-}
-
-get_debug_format
-
-# Make sure that malloc gets called and that the floating point unit
-# is initialized via a call to t_double_values.
-gdb_test "next" "t_double_values\\(double_val1, double_val2\\);.*" \
- "next to t_double_values"
-gdb_test "next" "t_structs_c\\(struct_val1\\);.*" \
- "next to t_structs_c"
+rerun_and_prepare
# Save all register contents.
set old_reg_content [fetch_all_registers "retrieve original register contents"]
fail "gdb function calls preserve register contents"
}
+rerun_and_prepare
+# Save all register contents.
+set old_reg_content [fetch_all_registers "retrieve original register contents"]
+
# Set breakpoint at a function we will call from gdb.
gdb_breakpoint add
}
}
+rerun_and_prepare
+# Set breakpoint at a function we will call from gdb.
+gdb_breakpoint add
+# Save all register contents.
+set old_reg_content [fetch_all_registers "retrieve original register contents"]
+
# Call function (causing a breakpoint hit in the call dummy) and do a finish,
# make sure we are back at main and still have the same register contents.
gdb_test "print add(4,5)" "The program being debugged stopped while.*" \
}
}
+rerun_and_prepare
+# Set breakpoint at a function we will call from gdb.
+gdb_breakpoint add
+# Save all register contents.
+set old_reg_content [fetch_all_registers "retrieve original register contents"]
+
# Call function (causing a breakpoint hit in the call dummy) and do a return
# with a value, make sure we are back at main with the same register contents.
gdb_test "print add(4,5)" "The program being debugged stopped while.*" \
}
}
+rerun_and_prepare
+# Set breakpoint at a function we will call from gdb.
+gdb_breakpoint add
+set old_reg_content [fetch_all_registers "retrieve original register contents"]
+
# Call function (causing a breakpoint hit in the call dummy), and
# call another function from the call dummy frame (thereby setting up
# several nested call dummy frames). Test that backtrace and finish
gdb_test {set $sp = $old_sp}
}
+
+# Test function descriptor resolution - the separate debug info .opd section
+# handling vs. local labels `.L'... as `Lcallfunc' starts with `L'.
+
+gdb_test "print callfunc (Lcallfunc, 5)" " = 12"