[7/9] Rewrite lookup_static_symbol to use gdbarch routine

Message ID m31tpd32xx.fsf@sspiff.org
State New, archived
Headers

Commit Message

Doug Evans Nov. 8, 2014, 7:30 p.m. UTC
  Doug Evans <xdje42@gmail.com> writes:
> [...]
> I filed pr 17564 to document the issue.
> https://sourceware.org/bugzilla/show_bug.cgi?id=17564
>
> Attached is a testcase.
> I'll add the PR number to the above ChangeLog entry as well.
>
> 2014-11-07  Doug Evans  <xdje42@gmail.com>
>
> 	PR symtab/17564
> 	* gdb.base/symtab-search-order.exp: New file.
> 	* gdb.base/symtab-search-order.c: New file.
> 	* gdb.base/symtab-search-order-1.c: New file.
> 	* gdb.base/symtab-search-order-shlib-1.c: New file.

Heh.
Testing on windows showed a bad testcase.
FAIL: gdb.base/symtab-search-order.exp: p shlib_1_func

Here's a fix.
The testcase wasn't referencing anything in the shlib
so it was being discarded from the link.

2014-11-08  Doug Evans  <xdje42@gmail.com>

	PR symtab/17564
	* gdb.base/symtab-search-order.exp: New file.
	* gdb.base/symtab-search-order.c: New file.
	* gdb.base/symtab-search-order-1.c: New file.
	* gdb.base/symtab-search-order-shlib-1.c: New file.
  

Comments

Doug Evans Nov. 11, 2014, 2:42 a.m. UTC | #1
On Sat, Nov 8, 2014 at 11:30 AM, Doug Evans <xdje42@gmail.com> wrote:
> Doug Evans <xdje42@gmail.com> writes:
>> [...]
>> I filed pr 17564 to document the issue.
>> https://sourceware.org/bugzilla/show_bug.cgi?id=17564
>>
>> Attached is a testcase.
>> I'll add the PR number to the above ChangeLog entry as well.
>>
>> 2014-11-07  Doug Evans  <xdje42@gmail.com>
>>
>>       PR symtab/17564
>>       * gdb.base/symtab-search-order.exp: New file.
>>       * gdb.base/symtab-search-order.c: New file.
>>       * gdb.base/symtab-search-order-1.c: New file.
>>       * gdb.base/symtab-search-order-shlib-1.c: New file.
>
> Heh.
> Testing on windows showed a bad testcase.
> FAIL: gdb.base/symtab-search-order.exp: p shlib_1_func
>
> Here's a fix.
> The testcase wasn't referencing anything in the shlib
> so it was being discarded from the link.

Hi.
I've committed these patches.
  
Yao Qi Nov. 13, 2014, 12:52 p.m. UTC | #2
Doug Evans <xdje42@gmail.com> writes:

Hi Doug,
Sorry for the delayed response.

> 2014-11-08  Doug Evans  <xdje42@gmail.com>
>
> 	PR symtab/17564
> 	* gdb.base/symtab-search-order.exp: New file.
> 	* gdb.base/symtab-search-order.c: New file.
> 	* gdb.base/symtab-search-order-1.c: New file.
> 	* gdb.base/symtab-search-order-shlib-1.c: New file.

These new .c files need copyright headers.
  
Doug Evans Nov. 14, 2014, 5:23 p.m. UTC | #3
On Thu, Nov 13, 2014 at 4:52 AM, Yao Qi <yao@codesourcery.com> wrote:
> Doug Evans <xdje42@gmail.com> writes:
>
> Hi Doug,
> Sorry for the delayed response.
>
>> 2014-11-08  Doug Evans  <xdje42@gmail.com>
>>
>>       PR symtab/17564
>>       * gdb.base/symtab-search-order.exp: New file.
>>       * gdb.base/symtab-search-order.c: New file.
>>       * gdb.base/symtab-search-order-1.c: New file.
>>       * gdb.base/symtab-search-order-shlib-1.c: New file.
>
> These new .c files need copyright headers.

These files are so trivial, I left them out.
[The .exp file *does* have a copyright header.]

I know the contribution checklist page mentions always adding them,
even if the GNU standards only require them for legally significant
headers.
It's not clear that that is intended to apply in particular cases such as these.

[I can add them, but establishing some clarity would be nice.]
  

Patch

diff --git a/gdb/testsuite/gdb.base/symtab-search-order-1.c b/gdb/testsuite/gdb.base/symtab-search-order-1.c
new file mode 100644
index 0000000..bff9b7a
--- /dev/null
+++ b/gdb/testsuite/gdb.base/symtab-search-order-1.c
@@ -0,0 +1 @@ 
+static int static_global = 23;
diff --git a/gdb/testsuite/gdb.base/symtab-search-order-shlib-1.c b/gdb/testsuite/gdb.base/symtab-search-order-shlib-1.c
new file mode 100644
index 0000000..a23da5f
--- /dev/null
+++ b/gdb/testsuite/gdb.base/symtab-search-order-shlib-1.c
@@ -0,0 +1,7 @@ 
+static int static_global = 42;
+
+int
+shlib_1_func (void)
+{
+  return static_global;
+}
diff --git a/gdb/testsuite/gdb.base/symtab-search-order.c b/gdb/testsuite/gdb.base/symtab-search-order.c
new file mode 100644
index 0000000..ab38db6
--- /dev/null
+++ b/gdb/testsuite/gdb.base/symtab-search-order.c
@@ -0,0 +1,11 @@ 
+extern int shlib_1_func (void);
+
+int
+main ()
+{
+  /* We need a reference to shlib_1_func to make sure its shlib is
+     not discarded from the link.  This happens on windows.  */
+  int x = shlib_1_func ();
+
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.base/symtab-search-order.exp b/gdb/testsuite/gdb.base/symtab-search-order.exp
new file mode 100644
index 0000000..eb39d87
--- /dev/null
+++ b/gdb/testsuite/gdb.base/symtab-search-order.exp
@@ -0,0 +1,59 @@ 
+# Copyright 2014 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/>.
+
+if {[skip_shlib_tests]} {
+    return 0
+}
+
+standard_testfile .c symtab-search-order-1.c symtab-search-order-shlib-1.c
+set srcfile  $srcdir/$subdir/$srcfile
+set srcfile2 $srcdir/$subdir/$srcfile2
+set lib1src  $srcdir/$subdir/$srcfile3
+set lib1     [standard_output_file symtab-search-order-1.sl]
+
+set lib_opts "debug"
+set exec_opts [list debug shlib=$lib1]
+
+if [get_compiler_info] {
+    return -1
+}
+
+if { [gdb_compile_shlib $lib1src $lib1 $lib_opts] != ""
+     || [gdb_compile [list $srcfile $srcfile2] $binfile executable \
+	     $exec_opts] != ""} {
+    untested "Could not compile $lib1, or $srcfile."
+    return -1
+}
+
+# Start with a fresh gdb.
+
+clean_restart $binfile
+gdb_load_shlibs $lib1
+
+if ![runto_main] {
+    fail "Can't run to main"
+    return -1
+}
+
+# PR 17564
+# Expand something in the shared library,
+# and then try to print static_global in the binary.
+# We should get the static_global in the binary.
+# Note: static_global in the binary needs to be in a file
+# other than the one with "main" because gdb will expand
+# the symtab with main when starting.
+
+gdb_test "p shlib_1_func" "= .*<shlib_1_func>"
+gdb_test "p static_global" " = 23"