This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] LD: PROVIDE_HIDDEN export class problem


[Joseph, there's a question for you below, search for tic6x.]

On Tue, 30 Apr 2013, Alan Modra wrote:

> >  While testing the __ehdr_start fix (PR ld/15365) I have realised we have 
> > a problem with the PROVIDE_HIDDEN linker script command or 
> > bfd_elf_record_link_assignment that implements this command's export class 
> > handling.  The issue is the symbol named is always assigned the hidden 
> > export class even if it was actually created by other means and the 
> > PROVIDE part of the command wasn't used.
> 
> Is that really a problem?

 IMHO, yes.

>  The ELF gABI says that in both references
> and definitions, a visibility attribute must be propagated.  I reckon
> a PROVIDEd symbol counts as a definition, so I think it quite
> reasonable that the symbol becomes hidden.

 If such a symbol is defined and referred to by objects linked, then I 
believe the export class of the definition/references must be respected.  
This is further implied by how the PROVIDE* commands are defined -- they 
are meant to trigger only if there is no other definition, whereas when 
there is one they are ignored (cf. ld.info: "If, on the other hand, the 
program defines `etext' (with no leading underscore), the linker will 
silently use the definition in the program.").

 I hoped the test cases provided were clear enough an illustration, 
however in this case perhaps a C code piece will be better.  Given code 
produced from a definition like this:

int foo = 1234;

present in input and a linker script containing:

PROVIDE_HIDDEN (foo = bar);

I see no reason why foo should be assigned the hidden export class, as in 
this case "the linker will silently use the definition in the program."  
Likewise I'd expect the link not to fail even if there's been no bar 
definition anywhere.

 Do you have a reference backing your claim that my interpretation is 
wrong?

>  The bug in
> bfd_elf_record_link_assignment that I was referring to in
> http://sourceware.org/ml/binutils/2013-04/msg00262.html is just that
> the attributes are not merged properly.  Fixed as follows and
> committed.
> 
> 	* elflink.c (bfd_elf_record_link_assignment): Dont make
> 	STV_INTERNAL symbols STV_HIDDEN.

 That doesn't fully solve the problem I described here, however it's still 
needed for the HIDDEN command (as I have just now realised) as well as the 
different use of bfd_elf_record_link_assignment introduced with the patch 
you posted there, so now that you've applied it I have dropped this part 
from the other patch I have been working on then.  That change still has 
issues BTW, causing a segfault rather than the original assertion failure 
in one of the test cases I included with my original proposal; I'm 
currently investigating whether it's an unrelated preexisting problem 
triggered.

 Also I have realised the retention of the internal export class across 
PROVIDE_HIDDEN requires test coverage, so here's an updated patch with 
some extra cases added.  They succeed across all the targets I've got 
covered except tic6x-elf and tic6x-uclinux:

tic6x-elf  FAIL: PROVIDE_HIDDEN test 2
tic6x-elf  FAIL: PROVIDE_HIDDEN test 8
tic6x-uclinux  FAIL: PROVIDE_HIDDEN test 2
tic6x-uclinux  FAIL: PROVIDE_HIDDEN test 8

This is because unlike all the others they put the internal symbol in the 
symbol table of a static executable as STB_LOCAL/STV_DEFAULT rather than 
STB_GLOBAL/STV_INTERNAL.

 Joseph, would you please comment on this -- has this been a deliberate 
design decision for the tic6x ABI or is it just a bug/oversight of some 
sort?

 Note that unlike tests #2 and #8 tests #5 and #11 do record the internal 
symbol as STB_LOCAL/STV_DEFAULT.  This is because 
bfd_elf_record_link_assignment calls _bfd_elf_link_hash_hide_symbol with 
force_local set to TRUE.  I'm not sure what the intent of this arrangement 
is -- I'll appreciate insights.

 Finally, I have also tweaked provide-hidden.exp slightly compared to the 
previous version, mostly to handle GAS flags better.

 Any further questions or comments?

2013-05-01  Maciej W. Rozycki  <macro@codesourcery.com>

	bfd/
	* elflink.c (bfd_elf_record_link_assignment): For symbols that
	have been named in a PROVIDE_HIDDEN command only set the hidden
	export class if the symbol has been actually set by the command.

        
	ld/
	* emultempl/elf32.em (gld${EMULATION_NAME}_find_exp_assignment):
	Don't set `provide' to true for nodes of the `etree_provided'
	class.

	ld/testsuite/
	* ld-elf/provide-hidden-s.nd: New test.
	* ld-elf/provide-hidden-1.nd: New test.
	* ld-elf/provide-hidden-2.nd: New test.
	* ld-elf/provide-hidden-3.nd: New test.
	* ld-elf/provide-hidden-4.nd: New test.
	* ld-elf/provide-hidden-5.nd: New test.
	* ld-elf/provide-hidden-6.nd: New test.
	* ld-elf/provide-hidden-7.nd: New test.
	* ld-elf/provide-hidden-8.nd: New test.
	* ld-elf/provide-hidden-9.nd: New test.
	* ld-elf/provide-hidden-10.nd: New test.
	* ld-elf/provide-hidden-11.nd: New test.
	* ld-elf/provide-hidden-12.nd: New test.
	* ld-elf/provide-hidden-1.ld: New test linker script.
	* ld-elf/provide-hidden-2.ld: New test linker script.
	* ld-elf/provide-hidden-1.s: New test source.
	* ld-elf/provide-hidden-2.s: New test source.
	* ld-elf/provide-hidden-3.s: New test source.
	* ld-elf/provide-hidden-4.s: New test source.
	* ld-elf/provide-hidden.exp: New test script.

  Maciej

binutils-provide-nohidden.diff
Index: binutils-fsf-trunk-quilt/bfd/elflink.c
===================================================================
--- binutils-fsf-trunk-quilt.orig/bfd/elflink.c	2013-05-01 02:08:11.000000000 +0100
+++ binutils-fsf-trunk-quilt/bfd/elflink.c	2013-05-01 02:08:23.182672039 +0100
@@ -501,6 +501,7 @@ bfd_elf_record_link_assignment (bfd *out
 				bfd_boolean provide,
 				bfd_boolean hidden)
 {
+  bfd_boolean make_hidden = !provide && hidden;
   struct elf_link_hash_entry *h, *hv;
   struct elf_link_hash_table *htab;
   const struct elf_backend_data *bed;
@@ -527,6 +528,7 @@ bfd_elf_record_link_assignment (bfd *out
       h->root.type = bfd_link_hash_new;
       if (h->root.u.undef.next != NULL || htab->root.undefs_tail == &h->root)
 	bfd_link_repair_undef_list (&htab->root);
+      make_hidden = hidden;
       break;
     case bfd_link_hash_new:
       bfd_elf_link_mark_dynamic_symbol (info, h, NULL);
@@ -559,7 +561,10 @@ bfd_elf_record_link_assignment (bfd *out
   if (provide
       && h->def_dynamic
       && !h->def_regular)
-    h->root.type = bfd_link_hash_undefined;
+    {
+      h->root.type = bfd_link_hash_undefined;
+      make_hidden = hidden;
+    }
 
   /* If this symbol is not being provided by the linker script, and it is
      currently defined by a dynamic object, but not by a regular object,
@@ -572,7 +577,7 @@ bfd_elf_record_link_assignment (bfd *out
 
   h->def_regular = 1;
 
-  if (hidden)
+  if (make_hidden)
     {
       bed = get_elf_backend_data (output_bfd);
       h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
Index: binutils-fsf-trunk-quilt/ld/emultempl/elf32.em
===================================================================
--- binutils-fsf-trunk-quilt.orig/ld/emultempl/elf32.em	2013-05-01 02:08:11.000000000 +0100
+++ binutils-fsf-trunk-quilt/ld/emultempl/elf32.em	2013-05-01 02:08:23.182672039 +0100
@@ -1357,9 +1357,9 @@ gld${EMULATION_NAME}_find_exp_assignment
   switch (exp->type.node_class)
     {
     case etree_provide:
-    case etree_provided:
       provide = TRUE;
       /* Fall thru */
+    case etree_provided:
     case etree_assign:
       /* We call record_link_assignment even if the symbol is defined.
 	 This is because if it is defined by a dynamic object, we
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-1.ld
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-1.ld	2013-05-01 02:08:31.683797670 +0100
@@ -0,0 +1,15 @@
+SECTIONS
+{
+  . = 0x12300000;
+  .data :
+    {
+      PROVIDE_HIDDEN (foo = . + 0x11100000);
+      *(.data)
+    }
+  .got : { *(.got) }
+  .interp : { *(.interp) }
+  .dynsym : { *(.dynsym) }
+  .dynstr : { *(.dynstr) }
+  .dynamic : { *(.dynamic) }
+  .hash : { *(.hash) }
+}
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-1.nd
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-1.nd	2013-05-01 02:08:31.683797670 +0100
@@ -0,0 +1,5 @@
+#...
+Symbol table '\.symtab' contains [0-9]+ entries:
+#...
+ *[0-9]+: 0*12300000 +0 (?:NOTYPE|OBJECT) +GLOBAL +DEFAULT +[0-9]+ foo
+#pass
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-1.s
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-1.s	2013-05-01 02:08:31.683797670 +0100
@@ -0,0 +1,4 @@
+	.data
+	.globl	foo
+foo:
+	.dc.a	foo
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-10.nd
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-10.nd	2013-05-01 02:08:31.683797670 +0100
@@ -0,0 +1,8 @@
+Symbol table '\.dynsym' contains [0-9]+ entries:
+#...
+ *[0-9]+: 0*23400000 +0 (?:NOTYPE|OBJECT) +LOCAL +DEFAULT +ABS foo
+#...
+Symbol table '\.symtab' contains [0-9]+ entries:
+#...
+ *[0-9]+: 0*23400000 +0 (?:NOTYPE|OBJECT) +LOCAL +DEFAULT +ABS foo
+#pass
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-11.nd
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-11.nd	2013-05-01 02:08:31.683797670 +0100
@@ -0,0 +1,5 @@
+#...
+Symbol table '\.symtab' contains [0-9]+ entries:
+#...
+ *[0-9]+: 0*23400000 +0 (?:NOTYPE|OBJECT) +LOCAL +DEFAULT +ABS foo
+#pass
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-12.nd
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-12.nd	2013-05-01 02:08:31.683797670 +0100
@@ -0,0 +1,6 @@
+Symbol table '\.dynsym' contains [0-9]+ entries:
+#...
+Symbol table '\.symtab' contains [0-9]+ entries:
+#...
+ *[0-9]+: 0*23400000 +0 (?:NOTYPE|OBJECT) +LOCAL +DEFAULT +ABS foo
+#pass
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-2.ld
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-2.ld	2013-05-01 02:08:31.683797670 +0100
@@ -0,0 +1,12 @@
+SECTIONS
+{
+  . = 0x12300000;
+  PROVIDE_HIDDEN (foo = . + 0x11100000);
+  .data : { *(.data) }
+  .got : { *(.got) }
+  .interp : { *(.interp) }
+  .dynsym : { *(.dynsym) }
+  .dynstr : { *(.dynstr) }
+  .dynamic : { *(.dynamic) }
+  .hash : { *(.hash) }
+}
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-2.nd
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-2.nd	2013-05-01 02:08:31.683797670 +0100
@@ -0,0 +1,5 @@
+#...
+Symbol table '\.symtab' contains [0-9]+ entries:
+#...
+ *[0-9]+: 0*12300000 +0 (?:NOTYPE|OBJECT) +GLOBAL +INTERNAL +[0-9]+ foo
+#pass
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-2.s
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-2.s	2013-05-01 02:08:31.683797670 +0100
@@ -0,0 +1,5 @@
+	.data
+	.globl	foo
+	.internal foo
+foo:
+	.dc.a	foo
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-3.nd
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-3.nd	2013-05-01 02:08:31.683797670 +0100
@@ -0,0 +1,5 @@
+#...
+Symbol table '\.symtab' contains [0-9]+ entries:
+#...
+ *[0-9]+: 0*23400000 +0 (?:NOTYPE|OBJECT) +LOCAL +DEFAULT +[0-9]+ foo
+#pass
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-3.s
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-3.s	2013-05-01 02:08:31.683797670 +0100
@@ -0,0 +1,4 @@
+	.data
+	.globl	bar
+bar:
+	.dc.a	foo
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-4.nd
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-4.nd	2013-05-01 02:08:31.683797670 +0100
@@ -0,0 +1,8 @@
+Symbol table '\.dynsym' contains [0-9]+ entries:
+#...
+ *[0-9]+: 0*23400000 +0 (?:NOTYPE|OBJECT) +LOCAL +DEFAULT +[0-9]+ foo
+#...
+Symbol table '\.symtab' contains [0-9]+ entries:
+#...
+ *[0-9]+: 0*23400000 +0 (?:NOTYPE|OBJECT) +LOCAL +DEFAULT +[0-9]+ foo
+#pass
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-4.s
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-4.s	2013-05-01 02:08:31.683797670 +0100
@@ -0,0 +1,5 @@
+	.data
+	.globl	bar
+	.internal foo
+bar:
+	.dc.a	foo
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-5.nd
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-5.nd	2013-05-01 02:08:31.683797670 +0100
@@ -0,0 +1,5 @@
+#...
+Symbol table '\.symtab' contains [0-9]+ entries:
+#...
+ *[0-9]+: 0*23400000 +0 (?:NOTYPE|OBJECT) +LOCAL +DEFAULT +[0-9]+ foo
+#pass
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-6.nd
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-6.nd	2013-05-01 02:08:31.683797670 +0100
@@ -0,0 +1,6 @@
+Symbol table '\.dynsym' contains [0-9]+ entries:
+#...
+Symbol table '\.symtab' contains [0-9]+ entries:
+#...
+ *[0-9]+: 0*23400000 +0 (?:NOTYPE|OBJECT) +LOCAL +DEFAULT +[0-9]+ foo
+#pass
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-7.nd
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-7.nd	2013-05-01 02:08:31.683797670 +0100
@@ -0,0 +1,5 @@
+#...
+Symbol table '\.symtab' contains [0-9]+ entries:
+#...
+ *[0-9]+: 0*12300000 +0 (?:NOTYPE|OBJECT) +GLOBAL +DEFAULT +[0-9]+ foo
+#pass
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-8.nd
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-8.nd	2013-05-01 02:08:31.683797670 +0100
@@ -0,0 +1,5 @@
+#...
+Symbol table '\.symtab' contains [0-9]+ entries:
+#...
+ *[0-9]+: 0*12300000 +0 (?:NOTYPE|OBJECT) +GLOBAL +INTERNAL +[0-9]+ foo
+#pass
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-9.nd
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-9.nd	2013-05-01 02:08:31.683797670 +0100
@@ -0,0 +1,5 @@
+#...
+Symbol table '\.symtab' contains [0-9]+ entries:
+#...
+ *[0-9]+: 0*23400000 +0 (?:NOTYPE|OBJECT) +LOCAL +DEFAULT +ABS foo
+#pass
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-s.nd
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden-s.nd	2013-05-01 02:08:31.683797670 +0100
@@ -0,0 +1,8 @@
+Symbol table '\.dynsym' contains [0-9]+ entries:
+#...
+ *[0-9]+: 0*12300000 +0 (?:NOTYPE|OBJECT) +GLOBAL +DEFAULT +[0-9]+ foo
+#...
+Symbol table '\.symtab' contains [0-9]+ entries:
+#...
+ *[0-9]+: 0*12300000 +0 (?:NOTYPE|OBJECT) +GLOBAL +DEFAULT +[0-9]+ foo
+#pass
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden.exp
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-elf/provide-hidden.exp	2013-05-01 02:08:31.683797670 +0100
@@ -0,0 +1,134 @@
+# Expect script for the PROVIDE_HIDDEN linker script command.
+#
+# Copyright 2013 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+#
+# Written by Maciej W. Rozycki <macro@codesourcery.com>
+#
+
+# Export classes only make sense for ELF shared-library targets.
+if { ![is_elf_format] || ![check_shared_lib_support] } {
+    return
+}
+
+# This target requires extra GAS options when building code for shared
+# libraries.
+set AFLAGS_PIC ""
+if [istarget "tic6x-*-*"] {
+    append AFLAGS_PIC " -mpic -mpid=near"
+}
+
+set testname "PROVIDE_HIDDEN test"
+
+run_ld_link_tests [list \
+    [list \
+	"$testname (auxiliary shared object)" \
+	"-shared -T provide-hidden-1.ld" "" \
+	"$AFLAGS_PIC" \
+	{ provide-hidden-1.s } \
+	{ { readelf -s provide-hidden-s.nd } } \
+	"provide-hidden-s.so"]]
+
+run_ld_link_tests [list \
+    [list \
+	"$testname 1" \
+	"-T provide-hidden-1.ld" "" \
+	"" \
+	[list provide-hidden-1.s] \
+	[list "readelf -s provide-hidden-1.nd"] \
+	"provide-hidden-1"] \
+    [list \
+	"$testname 2" \
+	"-T provide-hidden-1.ld" "" \
+	"" \
+	[list provide-hidden-2.s] \
+	[list "readelf -s provide-hidden-2.nd"] \
+	"provide-hidden-2"] \
+    [list \
+	"$testname 3" \
+	"-T provide-hidden-1.ld" "" \
+	"" \
+	[list provide-hidden-3.s] \
+	[list "readelf -s provide-hidden-3.nd"] \
+	"provide-hidden-3"] \
+    [list \
+	"$testname 4" \
+	"-T provide-hidden-1.ld" "tmpdir/provide-hidden-s.so" \
+	"" \
+	[list provide-hidden-3.s] \
+	[list "readelf -s provide-hidden-4.nd"] \
+	"provide-hidden-4"] \
+    [list \
+	"$testname 5" \
+	"-T provide-hidden-1.ld" "" \
+	"" \
+	[list provide-hidden-4.s] \
+	[list "readelf -s provide-hidden-5.nd"] \
+	"provide-hidden-5"] \
+    [list \
+	"$testname 6" \
+	"-T provide-hidden-1.ld" "tmpdir/provide-hidden-s.so" \
+	"" \
+	[list provide-hidden-4.s] \
+	[list "readelf -s provide-hidden-6.nd"] \
+	"provide-hidden-6"] \
+    [list \
+	"$testname 7" \
+	"-T provide-hidden-2.ld" "" \
+	"" \
+	[list provide-hidden-1.s] \
+	[list "readelf -s provide-hidden-7.nd"] \
+	"provide-hidden-7"] \
+    [list \
+	"$testname 8" \
+	"-T provide-hidden-2.ld" "" \
+	"" \
+	[list provide-hidden-2.s] \
+	[list "readelf -s provide-hidden-8.nd"] \
+	"provide-hidden-8"] \
+    [list \
+	"$testname 9" \
+	"-T provide-hidden-2.ld" "" \
+	"" \
+	[list provide-hidden-3.s] \
+	[list "readelf -s provide-hidden-9.nd"] \
+	"provide-hidden-9"] \
+    [list \
+	"$testname 10" \
+	"-T provide-hidden-2.ld" "tmpdir/provide-hidden-s.so" \
+	"" \
+	[list provide-hidden-3.s] \
+	[list "readelf -s provide-hidden-10.nd"] \
+	"provide-hidden-10"] \
+    [list \
+	"$testname 11" \
+	"-T provide-hidden-2.ld" "" \
+	"" \
+	[list provide-hidden-4.s] \
+	[list "readelf -s provide-hidden-11.nd"] \
+	"provide-hidden-11"] \
+    [list \
+	"$testname 12" \
+	"-T provide-hidden-2.ld" "tmpdir/provide-hidden-s.so" \
+	"" \
+	[list provide-hidden-4.s] \
+	[list "readelf -s provide-hidden-12.nd"] \
+	"provide-hidden-12"]]


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]