From afba63f1097f74fae4a47fdb02d640b61f13f4ae Mon Sep 17 00:00:00 2001 From: Joel Brobecker Date: Thu, 10 May 2012 16:24:58 +0000 Subject: [PATCH] New testcase: gdb.base/ctxobj.exp gdb/testsuite/ChangeLog: * gdb.base/ctxobj-f.c, gdb.base/ctxobj-m.c, gdb.base/ctxobj-v.c, gdb.base/ctxobj.exp: New files. --- gdb/testsuite/ChangeLog | 5 +++ gdb/testsuite/gdb.base/ctxobj-f.c | 27 +++++++++++ gdb/testsuite/gdb.base/ctxobj-m.c | 31 +++++++++++++ gdb/testsuite/gdb.base/ctxobj-v.c | 21 +++++++++ gdb/testsuite/gdb.base/ctxobj.exp | 94 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 178 insertions(+) create mode 100644 gdb/testsuite/gdb.base/ctxobj-f.c create mode 100644 gdb/testsuite/gdb.base/ctxobj-m.c create mode 100644 gdb/testsuite/gdb.base/ctxobj-v.c create mode 100644 gdb/testsuite/gdb.base/ctxobj.exp diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 723c2d2..adadbd7 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-05-10 Joel Brobecker + + * gdb.base/ctxobj-f.c, gdb.base/ctxobj-m.c, gdb.base/ctxobj-v.c, + gdb.base/ctxobj.exp: New files. + 2012-05-09 Tom Tromey * gdb.trace/strace.exp: Add 'quiet' to compiler flags. diff --git a/gdb/testsuite/gdb.base/ctxobj-f.c b/gdb/testsuite/gdb.base/ctxobj-f.c new file mode 100644 index 0000000..43cc328 --- /dev/null +++ b/gdb/testsuite/gdb.base/ctxobj-f.c @@ -0,0 +1,27 @@ +/* This testcase is part of GDB, the GNU debugger. + Copyright 2012 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 . */ + +extern int this_version_num; + +#ifndef GET_VERSION +#error GET_VERSION macro is undefined +#endif + +int +GET_VERSION (void) +{ + return this_version_num; +} diff --git a/gdb/testsuite/gdb.base/ctxobj-m.c b/gdb/testsuite/gdb.base/ctxobj-m.c new file mode 100644 index 0000000..203f838 --- /dev/null +++ b/gdb/testsuite/gdb.base/ctxobj-m.c @@ -0,0 +1,31 @@ +/* This testcase is part of GDB, the GNU debugger. + Copyright 2012 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 . */ + +extern int get_version_1 (void); +extern int get_version_2 (void); + +int +main (void) +{ + if (get_version_1 () != 104) + return 1; + + if (get_version_2 () != 203) + return 2; + + return 0; +} + diff --git a/gdb/testsuite/gdb.base/ctxobj-v.c b/gdb/testsuite/gdb.base/ctxobj-v.c new file mode 100644 index 0000000..6d3a8d0 --- /dev/null +++ b/gdb/testsuite/gdb.base/ctxobj-v.c @@ -0,0 +1,21 @@ +/* This testcase is part of GDB, the GNU debugger. + Copyright 2012 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 . */ + +#ifndef VERSION +#error VERSION macro is not defined. +#endif + +int this_version_num = VERSION; diff --git a/gdb/testsuite/gdb.base/ctxobj.exp b/gdb/testsuite/gdb.base/ctxobj.exp new file mode 100644 index 0000000..57ed4c1 --- /dev/null +++ b/gdb/testsuite/gdb.base/ctxobj.exp @@ -0,0 +1,94 @@ +# Copyright 2012 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 . */ + +set executable ctxobj-m + +# The sources used to build two shared libraries (SO). We use the exact +# same sources to build both SOs, but differentiate them through the use +# of macros defined when calling the compiler. +# +# We need two source files per SO, because we need to test the situation +# where we are trying to print the value of a global variable defined +# in that SO while the variable's associated symtab has not been created +# yet. +set libsrc [list "${srcdir}/${subdir}/ctxobj-v.c" \ + "${srcdir}/${subdir}/ctxobj-f.c"] + +set libobj1 "${objdir}/${subdir}/libctxobj1.so" +set libobj2 "${objdir}/${subdir}/libctxobj2.so" + +set libobj1_opts { debug additional_flags=-fPIC + additional_flags=-DVERSION=104 + additional_flags=-DGET_VERSION=get_version_1 } +set libobj2_opts { debug additional_flags=-fPIC + additional_flags=-DVERSION=203 + additional_flags=-DGET_VERSION=get_version_2 } + +if { [gdb_compile_shlib $libsrc $libobj1 $libobj1_opts ] != "" } { + return -1 +} +if { [gdb_compile_shlib $libsrc $libobj2 $libobj2_opts ] != "" } { + return -1 +} +if { [gdb_compile "${srcdir}/${subdir}/${executable}.c" \ + "${objdir}/${subdir}/${executable}" \ + executable \ + [list debug shlib=${libobj1} shlib=${libobj2}]] + != ""} { + return -1 +} + +clean_restart $executable + +if ![runto_main] { + untested "could not run to main" + return -1 +} + +gdb_breakpoint "get_version_1" +gdb_test "continue" \ + "Breakpoint $decimal, get_version_1 \\(\\).*" \ + "continue to get_version_1" + +# Try printing "this_version_num". There are two global variables +# with that name, but we should pick the one in the shared library +# we are currently debugging. We will know we picked the correct one +# if the value printed is 104. The first print test verifies that +# we're doing things right when the partial symtab hasn't been +# expanded. And the second print test will do the same, but after +# the partial symtab has been expanded. + +gdb_test "print this_version_num" \ + " = 104" \ + "print libctxobj1's this_version_num from partial symtab" + +gdb_test "print this_version_num" \ + " = 104" \ + "print libctxobj1's this_version_num from symtab" + +# Do the same, but from get_version_2. + +gdb_breakpoint "get_version_2" +gdb_test "continue" \ + "Breakpoint $decimal, get_version_2 \\(\\).*" \ + "continue to get_version_2" + +gdb_test "print this_version_num" \ + " = 203" \ + "print libctxobj2's this_version_num from partial symtab" + +gdb_test "print this_version_num" \ + " = 203" \ + "print libctxobj2's this_version_num from symtab" -- 2.7.4