summaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/gdbtypes.c2
-rw-r--r--gdb/testsuite/ChangeLog9
-rw-r--r--gdb/testsuite/gdb.base/callfuncs.exp26
4 files changed, 37 insertions, 5 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 9c9c6b1f921..d1fe7ca8758 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,10 @@
2017-09-04 Pedro Alves <palves@redhat.com>
+ * gdbtypes.c (lookup_function_type_with_arguments): Mark function
+ types with more than one parameter as prototyped.
+
+2017-09-04 Pedro Alves <palves@redhat.com>
+
* cli/cli-cmds.c (print_disassembly, disassemble_current_function)
(disassemble_command): Use gdb_disassembly_flags instead of bare
int.
diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
index a68692341ea..ceb4f0ca2aa 100644
--- a/gdb/gdbtypes.c
+++ b/gdb/gdbtypes.c
@@ -547,6 +547,8 @@ lookup_function_type_with_arguments (struct type *type,
gdb_assert (nparams == 0);
TYPE_PROTOTYPED (fn) = 1;
}
+ else
+ TYPE_PROTOTYPED (fn) = 1;
}
TYPE_NFIELDS (fn) = nparams;
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 24ad99b0eb3..35c5928def4 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,12 @@
+2017-09-04 Pedro Alves <palves@redhat.com>
+
+ * gdb.base/callfuncs.exp (do_function_calls): New parameter
+ "prototypes". Test calling float functions via prototyped and
+ unprototyped function pointers.
+ (perform_all_tests): New parameter "prototypes". Pass it down.
+ (top level): Pass down "prototypes" parameter to
+ perform_all_tests.
+
2017-09-04 Simon Marchi <simon.marchi@ericsson.com>
* gdb.base/commands.exp (loop_break_test, loop_continue_test):
diff --git a/gdb/testsuite/gdb.base/callfuncs.exp b/gdb/testsuite/gdb.base/callfuncs.exp
index 36519638d55..a537ebdd686 100644
--- a/gdb/testsuite/gdb.base/callfuncs.exp
+++ b/gdb/testsuite/gdb.base/callfuncs.exp
@@ -39,7 +39,7 @@ set skip_float_test [gdb_skip_float_test]
# specifies that the numeric value of a relational or logical expression
# (computed in the inferior) is 1 for true and 0 for false.
-proc do_function_calls {} {
+proc do_function_calls {prototypes} {
global gdb_prompt skip_float_test
# We need to up this because this can be really slow on some boards.
@@ -95,11 +95,25 @@ proc do_function_calls {} {
setup_xfail "mn10300-*-*"
if { [test_compiler_info "armcc-*"] } { setup_xfail "*-*-*" }
gdb_test "p t_float_values(float_val1,-2.3765)" " = 1"
+ # Same, via unprototyped function pointer (t_float_values is
+ # always unprototyped).
+ gdb_test "p ((int (*) ()) t_float_values)(float_val1,-2.3765)" " = 1"
# Test passing of arguments which might not be widened.
gdb_test "p t_float_values2(0.0,0.0)" " = 0"
+ # Same, via function pointer.
+ if {$prototypes} {
+ gdb_test "p ((int (*) (float, float)) t_float_values2)(0.0,0.0)" " = 0"
+ } else {
+ gdb_test "p ((int (*) ()) t_float_values2)(0.0,0.0)" " = 0"
+ }
gdb_test "p t_float_values2(3.14159,float_val2)" " = 1"
+ if {$prototypes} {
+ gdb_test "p ((int (*) (float, float)) t_float_values2)(3.14159,float_val2)" " = 1"
+ } else {
+ gdb_test "p ((int (*) ()) t_float_values2)(3.14159,float_val2)" " = 1"
+ }
gdb_test "p t_float_many_args (float_val1, float_val2, float_val3, float_val4, float_val5, float_val6, float_val7, float_val8, float_val9, float_val10, float_val11, float_val12, float_val13, float_val14, float_val15)" " = 1" "call function with many float arguments."
@@ -315,7 +329,7 @@ proc rerun_and_prepare {} {
"next to t_structs_c"
}
-proc perform_all_tests {} {
+proc perform_all_tests {prototypes} {
gdb_test_no_output "set print sevenbit-strings"
gdb_test_no_output "set print address off"
gdb_test_no_output "set width 0"
@@ -326,7 +340,7 @@ proc perform_all_tests {} {
set old_reg_content [fetch_all_registers "retrieve original register contents"]
# Perform function calls.
- do_function_calls
+ do_function_calls $prototypes
# Check if all registers still have the same value.
set new_reg_content [fetch_all_registers \
@@ -500,9 +514,11 @@ proc perform_all_tests {} {
# Perform all tests with and without function prototypes.
if { ![prepare_for_testing "failed to prepare" $testfile $srcfile "$compile_flags additional_flags=-DPROTOTYPES"] } {
- perform_all_tests
+ perform_all_tests 1
}
if { ![prepare_for_testing "failed to prepare" $testfile $srcfile "$compile_flags additional_flags=-DNO_PROTOTYPES"] } {
- with_test_prefix "noproto" perform_all_tests
+ with_test_prefix "noproto" {
+ perform_all_tests 0
+ }
}