]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
This commit was manufactured by cvs2svn to create branch 'gdb_7_3-branch'.
authornobody <>
Fri, 1 Jul 2011 20:28:00 +0000 (20:28 +0000)
committernobody <>
Fri, 1 Jul 2011 20:28:00 +0000 (20:28 +0000)
Cherrypick from master 2011-07-01 20:27:59 UTC Jan Kratochvil <jan.kratochvil@redhat.com> 'gdb/':
    gdb/testsuite/gdb.cp/minsym-fallback-main.cc
    gdb/testsuite/gdb.cp/minsym-fallback.cc
    gdb/testsuite/gdb.cp/minsym-fallback.exp
    gdb/testsuite/gdb.cp/minsym-fallback.h
    gdb/testsuite/gdb.cp/no-dmgl-verbose.cc
    gdb/testsuite/gdb.cp/no-dmgl-verbose.exp
    gdb/testsuite/gdb.cp/paren-type.cc
    gdb/testsuite/gdb.cp/paren-type.exp
    gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust-main.cc
    gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust.S
    gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust.exp

gdb/testsuite/gdb.cp/minsym-fallback-main.cc [new file with mode: 0644]
gdb/testsuite/gdb.cp/minsym-fallback.cc [new file with mode: 0644]
gdb/testsuite/gdb.cp/minsym-fallback.exp [new file with mode: 0644]
gdb/testsuite/gdb.cp/minsym-fallback.h [new file with mode: 0644]
gdb/testsuite/gdb.cp/no-dmgl-verbose.cc [new file with mode: 0644]
gdb/testsuite/gdb.cp/no-dmgl-verbose.exp [new file with mode: 0644]
gdb/testsuite/gdb.cp/paren-type.cc [new file with mode: 0644]
gdb/testsuite/gdb.cp/paren-type.exp [new file with mode: 0644]
gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust-main.cc [new file with mode: 0644]
gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust.S [new file with mode: 0644]
gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust.exp [new file with mode: 0644]

diff --git a/gdb/testsuite/gdb.cp/minsym-fallback-main.cc b/gdb/testsuite/gdb.cp/minsym-fallback-main.cc
new file mode 100644 (file)
index 0000000..d2a677b
--- /dev/null
@@ -0,0 +1,27 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2011 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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include "minsym-fallback.h"
+
+C c;
+
+int
+main ()
+{
+  c.f ();
+  c ();
+}
diff --git a/gdb/testsuite/gdb.cp/minsym-fallback.cc b/gdb/testsuite/gdb.cp/minsym-fallback.cc
new file mode 100644 (file)
index 0000000..1231f7d
--- /dev/null
@@ -0,0 +1,28 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2011 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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include "minsym-fallback.h"
+
+void
+C::f ()
+{
+}
+
+void
+C::operator () ()
+{
+}
diff --git a/gdb/testsuite/gdb.cp/minsym-fallback.exp b/gdb/testsuite/gdb.cp/minsym-fallback.exp
new file mode 100644 (file)
index 0000000..2006545
--- /dev/null
@@ -0,0 +1,40 @@
+# Copyright (C) 2011 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# The goal is to have class with full DWARF symbols present in one file having
+# only a declaration there for the method.  The method is then defined in
+# a different file providing only ELF symbols.
+
+set testfile minsym-fallback
+set srcfile ${testfile}.cc
+set srcmainfile ${testfile}-main.cc
+set executable $testfile
+set objfile $objdir/$subdir/${testfile}.o
+set objmainfile $objdir/$subdir/${testfile}-main.o
+set binfile $objdir/$subdir/$executable
+if {[gdb_compile $srcdir/$subdir/$srcfile $objfile object {}] != ""
+    || [gdb_compile $srcdir/$subdir/$srcmainfile $objmainfile object {debug}] != ""
+    || [gdb_compile "$objfile $objmainfile" $binfile executable {}] != ""} {
+    untested ${testfile}.exp
+    return -1
+}
+
+clean_restart ${executable}
+
+gdb_test_no_output "set breakpoint pending off"
+
+gdb_test "break C::f()" {Breakpoint [0-9]+ at 0x[0-9a-f]+}
+
+gdb_test "break C::operator()()" {Breakpoint [0-9]+ at 0x[0-9a-f]+}
diff --git a/gdb/testsuite/gdb.cp/minsym-fallback.h b/gdb/testsuite/gdb.cp/minsym-fallback.h
new file mode 100644 (file)
index 0000000..88bcb5c
--- /dev/null
@@ -0,0 +1,23 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2011 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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+class C
+{
+public:
+  static void f ();
+  void operator () ();
+};
diff --git a/gdb/testsuite/gdb.cp/no-dmgl-verbose.cc b/gdb/testsuite/gdb.cp/no-dmgl-verbose.cc
new file mode 100644 (file)
index 0000000..2c7c2a7
--- /dev/null
@@ -0,0 +1,23 @@
+/* This test file is part of GDB, the GNU debugger.
+
+   Copyright 2011 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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <string>
+
+void
+f (std::string s)
+{
+}
diff --git a/gdb/testsuite/gdb.cp/no-dmgl-verbose.exp b/gdb/testsuite/gdb.cp/no-dmgl-verbose.exp
new file mode 100644 (file)
index 0000000..491a303
--- /dev/null
@@ -0,0 +1,38 @@
+# Copyright 2011 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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+# Test loading symbols from unrelocated C++ object files.
+
+set testfile no-dmgl-verbose
+set srcfile ${testfile}.cc
+set executable ${testfile}.o
+set binfile ${objdir}/${subdir}/${executable}
+
+if { [skip_cplus_tests] } { continue }
+
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" object {c++ debug}] != "" } {
+     untested ${testfile}.exp
+     return -1
+}
+
+clean_restart ${executable}
+
+gdb_test_no_output "set breakpoint pending off"
+
+gdb_breakpoint {'f(std::string)'}
+
+gdb_test {break 'f(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'} \
+        {Function ".*" not defined\.} \
+        "DMGL_VERBOSE-demangled f(std::string) is not defined"
diff --git a/gdb/testsuite/gdb.cp/paren-type.cc b/gdb/testsuite/gdb.cp/paren-type.cc
new file mode 100644 (file)
index 0000000..00c4872
--- /dev/null
@@ -0,0 +1,33 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2011 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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+class C
+{
+public:
+  static void f (short x);
+};
+
+void
+C::f (short x)
+{
+}
+
+int
+main ()
+{
+  C::f(1);
+}
diff --git a/gdb/testsuite/gdb.cp/paren-type.exp b/gdb/testsuite/gdb.cp/paren-type.exp
new file mode 100644 (file)
index 0000000..daba521
--- /dev/null
@@ -0,0 +1,26 @@
+# Copyright (C) 2011 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 3 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, see <http://www.gnu.org/licenses/>.
+
+set testfile paren-type
+if { [prepare_for_testing ${testfile}.exp ${testfile} ${testfile}.cc {c++ debug}] } {
+    return -1
+}
+
+gdb_test_no_output "set breakpoint pending off"
+
+gdb_test "break C::f(long)" {Function "C::f\(long\)" not defined\.}
+
+# Sanity check the breakpoints work for the correct type.
+gdb_test "break C::f(short)" "Breakpoint 1 at \[^\r\n\]*"
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust-main.cc b/gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust-main.cc
new file mode 100644 (file)
index 0000000..61ea1d5
--- /dev/null
@@ -0,0 +1,41 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2011 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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+/* class C
+   {
+   public:
+     static int f ();
+   };  */
+
+asm (".globl cu_text_start");
+asm ("cu_text_start:");
+
+int
+f (void)
+{
+  return 31173;
+}
+
+int
+main (void)
+{
+  f ();
+  return 0;
+}
+
+asm (".globl cu_text_end");
+asm ("cu_text_end:");
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust.S b/gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust.S
new file mode 100644 (file)
index 0000000..7546302
--- /dev/null
@@ -0,0 +1,134 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2011 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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Debug information */
+
+       .data
+       .globl  c
+c:     .4byte  0
+
+       .section .debug_info
+.Lcu1_begin:
+       /* CU header */
+       .4byte  .Lcu1_end - .Lcu1_start         /* Length of Compilation Unit */
+.Lcu1_start:
+       .2byte  2                               /* DWARF Version */
+       .4byte  .Labbrev1_begin                 /* Offset into abbrev section */
+       .byte   4                               /* Pointer size */
+
+       /* CU die */
+       .uleb128 1                              /* Abbrev: DW_TAG_compile_unit */
+       .4byte  cu_text_start                   /* DW_AT_low_pc */
+       .4byte  cu_text_end                     /* DW_AT_high_pc */
+       .ascii  "file1.txt\0"                   /* DW_AT_name */
+       .ascii  "GNU C 3.3.3\0"                 /* DW_AT_producer */
+       .byte   4                               /* DW_AT_language (DW_LANG_C_plus_plus) */
+
+.Ltype_class:
+       .uleb128        3                       /* Abbrev: DW_TAG_class_type */
+       .ascii          "C\0"                   /* DW_AT_name */
+
+       .uleb128        5                       /* Abbrev: DW_TAG_subprogram */
+       .byte           1                       /* DW_AT_external */
+       .ascii          "membername\0"          /* DW_AT_name */
+       .ascii          "f\0"                   /* DW_AT_MIPS_linkage_name */
+       .4byte          .Ltype_int-.Lcu1_begin  /* DW_AT_type */
+
+       .byte           0                       /* End of children of DW_TAG_class_type */
+
+       .uleb128        4                       /* Abbrev: DW_TAG_variable */
+       .ascii          "c\0"                   /* DW_AT_name */
+       .4byte          .Ltype_class-.Lcu1_begin /* DW_AT_type */
+       .byte           1                       /* DW_AT_external */
+
+.Ltype_int:
+       .uleb128        2                       /* Abbrev: DW_TAG_base_type */
+       .ascii          "int\0"                 /* DW_AT_name */
+       .byte           4                       /* DW_AT_byte_size */
+       .byte           5                       /* DW_AT_encoding */
+
+       .byte           0                       /* End of children of CU */
+
+.Lcu1_end:
+
+/* Abbrev table */
+       .section .debug_abbrev
+.Labbrev1_begin:
+       .uleb128        1                       /* Abbrev code */
+       .uleb128        0x11                    /* DW_TAG_compile_unit */
+       .byte           1                       /* has_children */
+       .uleb128        0x11                    /* DW_AT_low_pc */
+       .uleb128        0x1                     /* DW_FORM_addr */
+       .uleb128        0x12                    /* DW_AT_high_pc */
+       .uleb128        0x1                     /* DW_FORM_addr */
+       .uleb128        0x3                     /* DW_AT_name */
+       .uleb128        0x8                     /* DW_FORM_string */
+       .uleb128        0x25                    /* DW_AT_producer */
+       .uleb128        0x8                     /* DW_FORM_string */
+       .uleb128        0x13                    /* DW_AT_language */
+       .uleb128        0xb                     /* DW_FORM_data1 */
+       .byte           0x0                     /* Terminator */
+       .byte           0x0                     /* Terminator */
+
+       .uleb128        2                       /* Abbrev code */
+       .uleb128        0x24                    /* DW_TAG_base_type */
+       .byte           0                       /* has_children */
+       .uleb128        0x3                     /* DW_AT_name */
+       .uleb128        0x8                     /* DW_FORM_string */
+       .uleb128        0xb                     /* DW_AT_byte_size */
+       .uleb128        0xb                     /* DW_FORM_data1 */
+       .uleb128        0x3e                    /* DW_AT_encoding */
+       .uleb128        0xb                     /* DW_FORM_data1 */
+       .byte           0x0                     /* Terminator */
+       .byte           0x0                     /* Terminator */
+
+       .uleb128        3                       /* Abbrev code */
+       .uleb128        0x2                     /* DW_TAG_class_type */
+       .byte           1                       /* has_children */
+       .uleb128        0x3                     /* DW_AT_name */
+       .uleb128        0x8                     /* DW_FORM_string */
+       .byte           0x0                     /* Terminator */
+       .byte           0x0                     /* Terminator */
+
+       .uleb128        4                       /* Abbrev code */
+       .uleb128        0x34                    /* DW_TAG_variable */
+       .byte           0                       /* has_children */
+       .uleb128        0x3                     /* DW_AT_name */
+       .uleb128        0x8                     /* DW_FORM_string */
+       .uleb128        0x49                    /* DW_AT_type */
+       .uleb128        0x13                    /* DW_FORM_ref4 */
+       .uleb128        0x3f                    /* DW_AT_external */
+       .uleb128        0xc                     /* DW_FORM_flag */
+       .byte           0x0                     /* Terminator */
+       .byte           0x0                     /* Terminator */
+
+       .uleb128        5                       /* Abbrev code */
+       .uleb128        0x2e                    /* DW_TAG_subprogram */
+       .byte           0                       /* has_children */
+       .uleb128        0x3f                    /* DW_AT_external */
+       .uleb128        0xc                     /* DW_FORM_flag */
+       .uleb128        0x3                     /* DW_AT_name */
+       .uleb128        0x8                     /* DW_FORM_string */
+       .uleb128        0x2007                  /* DW_AT_MIPS_linkage_name */
+       .uleb128        0x8                     /* DW_FORM_string */
+       .uleb128        0x49                    /* DW_AT_type */
+       .uleb128        0x13                    /* DW_FORM_ref4 */
+       .byte           0x0                     /* Terminator */
+       .byte           0x0                     /* Terminator */
+
+       .byte           0x0                     /* Terminator */
+       .byte           0x0                     /* Terminator */
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust.exp b/gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust.exp
new file mode 100644 (file)
index 0000000..fc8bdac
--- /dev/null
@@ -0,0 +1,55 @@
+# Copyright 2011 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# Check that GDB can call C++ functions whose parameters or return values have
+# type containing a static member of the same type.
+
+# Still no C++ compiler is used.
+if { [skip_cplus_tests] } { continue }
+
+load_lib dwarf.exp
+# This test can only be run on targets which support DWARF-2 and use gas.
+if {![dwarf2_support]} {
+    return 0  
+}
+
+set testfile "dw2-linkage-name-trust"
+set executable ${testfile}
+set binfile ${objdir}/${subdir}/${executable}
+if { [gdb_compile ${srcdir}/${subdir}/${testfile}-main.cc "${objdir}/${subdir}/${testfile}-main.o" object {c++ debug}] != ""
+     || [gdb_compile "${srcdir}/${subdir}/${testfile}.S" "${objdir}/${subdir}/${testfile}.o" object {}] != ""
+     || [gdb_compile "${objdir}/${subdir}/${testfile}-main.o ${objdir}/${subdir}/${testfile}.o" "${binfile}" executable {c++}] != "" } {
+    return -1
+}
+
+clean_restart $executable
+
+if ![runto_main] then {
+    return -1
+}
+
+# main is not provided by DWARF.
+gdb_test_no_output "set language c++"
+
+# There are no mangled names in DWARF to suggest the v3 ABI.
+gdb_test_no_output "set cp-abi gnu-v3"
+
+# GDB cannot resolve external member function for which only ELF (and not
+# DWARF) symbol is available.  Therefore the function `f' must have DWARF which
+# confuses it a bit.
+
+gdb_test "p c.membername" " = {.*} 0x\[0-9a-f\]+ <f\\(\\)>"
+gdb_breakpoint "C::membername"
+gdb_test "p c.membername ()" "\r\nBreakpoint \[0-9\]+, .*"