------- Additional Comments From hjl at lucon dot org  2006-09-11 22:17 -------
I used

--- elf64-ia64.c        2006-09-11 15:13:43.000000000 -0700
+++ elf64-ia64.c.new    2006-09-07 16:12:39.000000000 -0700
@@ -3275,7 +3275,14 @@ allocate_fptr (dyn_i, data)
              if (!bfd_elf_link_record_local_dynamic_symbol
                    (x->info, h->root.u.def.section->owner,
                     global_sym_index (h)))
-               return FALSE;
+               {
+                 /* Something is really wrong. If we continue, we will
+                    run into more problems later.  */
+                 (*_bfd_error_handler)
+                   (_("%B: failed to record local dynamic symbol `%s'"),
+                    h->root.u.def.section->owner, h->root.root.string);
+                 abort ();
+               }
            }

          dyn_i->want_fptr = 0;

However, it doesn't work for this:
[EMAIL PROTECTED] 3169]$ cat foo.s
        .hidden __bss_start
        .text
        .proc   foo#
        .global foo#
foo#:
        addl [EMAIL PROTECTED](@fptr(_DYNAMIC#)),gp
        .endp foo
[EMAIL PROTECTED] 3169]$ cat bar.s
        .text
        .proc bar#
bar:
//      addl r14 = @ltoff(@fptr(foo#)), gp
        .endp bar#

[EMAIL PROTECTED] 3169]$ make
./as -x -o bar.o bar.s
./as -x -o foo.o foo.s
./ld -o libfoo.so -shared bar.o foo.o
make: *** [libfoo.so] Segmentation fault
make: *** Deleting file `libfoo.so'
[EMAIL PROTECTED] 3169]$ gdb ld
GNU gdb 6.5.50.20060816-cvs
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "x86_64-unknown-linux-gnu"...
Using host libthread_db library "/lib64/libthread_db.so.1".
(gdb) r  -o libfoo.so -shared bar.o foo.o
Starting program: /export/home/hjl/bugs/binutils/3169/ld -o libfoo.so -shared
bar.o foo.o

Program received signal SIGSEGV, Segmentation fault.
0x0000000000436c1c in global_sym_index (h=0x6e5960) at elf64-ia64.c:3239
3239      for (p = elf_sym_hashes (obj); *p != h; ++p)
(gdb) p obj
No symbol "obj" in current context.
(gdb) p ((h->root.u.def.section->owner) -> tdata.elf_obj_data)->sym_hashes
$1 = (struct elf_link_hash_entry **) 0x0
(gdb)


-- 


http://sourceware.org/bugzilla/show_bug.cgi?id=3169

------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.


_______________________________________________
bug-binutils mailing list
bug-binutils@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-binutils

Reply via email to