Summary: | _bfd_elf_get_synthetic_symtab runs in O(n^2) complexity | ||
---|---|---|---|
Product: | binutils | Reporter: | Ori Bar <tohava> |
Component: | binutils | Assignee: | Not yet assigned to anyone <unassigned> |
Status: | RESOLVED FIXED | ||
Severity: | normal | CC: | hjl.tools, mrsam, tohava |
Priority: | P2 | ||
Version: | 2.24 | ||
Target Milestone: | 2.25 | ||
Host: | Target: | ||
Build: | Last reconfirmed: |
Description
Ori Bar
2014-12-03 19:16:53 UTC
For which target? i386, x86-64 or both? For me it happened on x86-64 on a linux shared object with lots of exported symbols. I see no reason to assume this problem cannot happen on i386 though. This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "gdb and binutils". The branch, master has been updated via 3972882e52d7199000bb5dfc753a86aa296a567a (commit) from 82cf9cb2653b39c426f330854c64028eab4cb65d (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=3972882e52d7199000bb5dfc753a86aa296a567a commit 3972882e52d7199000bb5dfc753a86aa296a567a Author: H.J. Lu <hjl.tools@gmail.com> Date: Thu Dec 4 14:19:41 2014 -0800 Add _bfd_elf_ifunc_get_synthetic_symtab In i386 and x86-64 binaries with ifunc, relocations against .got.plt section may not be in the same order as entries in PLT section. This patch adds _bfd_elf_ifunc_get_synthetic_symtab. It takes a function pointer which returns an array of PLT entry symbol values. It calls the function pointer to get the PLT entry symbol value array indexed by relocation index, instead of calling plt_sym_val on each relocation index. PR binutils/17677 * elf-bfd.h (_bfd_elf_ifunc_get_synthetic_symtab): New prototype. * elf-ifunc.c (_bfd_elf_ifunc_get_synthetic_symtab): New function. * elf32-i386.c (elf_i386_plt_sym_val): Removed. (elf_backend_plt_sym_val): Likewise. (elf_i386_get_plt_sym_val): New. (elf_i386_get_synthetic_symtab): Likewise. (bfd_elf32_get_synthetic_symtab): Likewise. * elf64-x86-64.c (elf_x86_64_plt_sym_val): Removed. (elf_x86_64_plt_sym_val_offset_plt_bnd): Likewise. (elf_backend_plt_sym_val): Likewise. (elf_x86_64_get_plt_sym_val): New. (elf_x86_64_get_synthetic_symtab): Use _bfd_elf_ifunc_get_synthetic_symtab. (bfd_elf64_get_synthetic_symtab): Don't undefine for NaCl. ----------------------------------------------------------------------- Summary of changes: bfd/ChangeLog | 19 ++++ bfd/elf-bfd.h | 3 + bfd/elf-ifunc.c | 125 ++++++++++++++++++++++++++++ bfd/elf32-i386.c | 101 ++++++++++++++++------- bfd/elf64-x86-64.c | 235 ++++++++++++++++----------------------------------- 5 files changed, 292 insertions(+), 191 deletions(-) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "gdb and binutils". The branch, binutils-2_25-branch has been updated via 875896e3e6880ec4c27b4fdfc37ae44881e11ca8 (commit) from f6989d5268fbd213d889e3d81f8972dd429b1bbf (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=875896e3e6880ec4c27b4fdfc37ae44881e11ca8 commit 875896e3e6880ec4c27b4fdfc37ae44881e11ca8 Author: H.J. Lu <hjl.tools@gmail.com> Date: Thu Dec 4 14:19:41 2014 -0800 Add _bfd_elf_ifunc_get_synthetic_symtab In i386 and x86-64 binaries with ifunc, relocations against .got.plt section may not be in the same order as entries in PLT section. This patch adds _bfd_elf_ifunc_get_synthetic_symtab. It takes a function pointer which returns an array of PLT entry symbol values. It calls the function pointer to get the PLT entry symbol value array indexed by relocation index, instead of calling plt_sym_val on each relocation index. PR binutils/17677 * elf-bfd.h (_bfd_elf_ifunc_get_synthetic_symtab): New prototype. * elf-ifunc.c (_bfd_elf_ifunc_get_synthetic_symtab): New function. * elf32-i386.c (elf_i386_plt_sym_val): Removed. (elf_backend_plt_sym_val): Likewise. (elf_i386_get_plt_sym_val): New. (elf_i386_get_synthetic_symtab): Likewise. (bfd_elf32_get_synthetic_symtab): Likewise. * elf64-x86-64.c (elf_x86_64_plt_sym_val): Removed. (elf_x86_64_plt_sym_val_offset_plt_bnd): Likewise. (elf_backend_plt_sym_val): Likewise. (elf_x86_64_get_plt_sym_val): New. (elf_x86_64_get_synthetic_symtab): Use _bfd_elf_ifunc_get_synthetic_symtab. (bfd_elf64_get_synthetic_symtab): Don't undefine for NaCl. ----------------------------------------------------------------------- Summary of changes: bfd/ChangeLog | 19 ++++ bfd/elf-bfd.h | 3 + bfd/elf-ifunc.c | 125 ++++++++++++++++++++++++++++ bfd/elf32-i386.c | 101 ++++++++++++++++------- bfd/elf64-x86-64.c | 235 ++++++++++++++++----------------------------------- 5 files changed, 292 insertions(+), 191 deletions(-) Fixed on master and binutils 2.25 branch. Also need this commit: https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=b7365e5df5b41bc23a2a1464d93ed6435d87a056 This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "gdb and binutils". The branch, hjl/gdb-7.8-branch has been created at 6a8939044781191d685e0aaeb78fe34a97ee3d55 (commit) - Log ----------------------------------------------------------------- https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=6a8939044781191d685e0aaeb78fe34a97ee3d55 commit 6a8939044781191d685e0aaeb78fe34a97ee3d55 Author: H.J. Lu <hjl.tools@gmail.com> Date: Thu Dec 4 14:19:41 2014 -0800 Add _bfd_elf_ifunc_get_synthetic_symtab In i386 and x86-64 binaries with ifunc, relocations against .got.plt section may not be in the same order as entries in PLT section. This patch adds _bfd_elf_ifunc_get_synthetic_symtab. It takes a function pointer which returns an array of PLT entry symbol values. It calls the function pointer to get the PLT entry symbol value array indexed by relocation index, instead of calling plt_sym_val on each relocation index. PR binutils/17677 * elf-bfd.h (_bfd_elf_ifunc_get_synthetic_symtab): New prototype. * elf-ifunc.c (_bfd_elf_ifunc_get_synthetic_symtab): New function. * elf32-i386.c (elf_i386_plt_sym_val): Removed. (elf_backend_plt_sym_val): Likewise. (elf_i386_get_plt_sym_val): New. (elf_i386_get_synthetic_symtab): Likewise. (bfd_elf32_get_synthetic_symtab): Likewise. * elf64-x86-64.c (elf_x86_64_plt_sym_val): Removed. (elf_x86_64_plt_sym_val_offset_plt_bnd): Likewise. (elf_backend_plt_sym_val): Likewise. (elf_x86_64_get_plt_sym_val): New. (bfd_elf32_get_synthetic_symtab): Likewise. (elf_x86_64_get_synthetic_symtab): Use _bfd_elf_ifunc_get_synthetic_symtab. (bfd_elf64_get_synthetic_symtab): Don't undefine for NaCl. ----------------------------------------------------------------------- I backported my fix to hjl/gdb-7.8-branch branch. You can cherry-pick if if needed. This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "gdb and binutils". The branch, gdb-7.8-branch has been updated via cd4294b2619e6b0e1ea0e553dbdfab40db814485 (commit) from dbdc8a04a60670542cfda8749a2be78779ff7720 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=cd4294b2619e6b0e1ea0e553dbdfab40db814485 commit cd4294b2619e6b0e1ea0e553dbdfab40db814485 Author: H.J. Lu <hjl.tools@gmail.com> Date: Thu Dec 4 14:19:41 2014 -0800 Add _bfd_elf_ifunc_get_synthetic_symtab In i386 and x86-64 binaries with ifunc, relocations against .got.plt section may not be in the same order as entries in PLT section. This patch adds _bfd_elf_ifunc_get_synthetic_symtab. It takes a function pointer which returns an array of PLT entry symbol values. It calls the function pointer to get the PLT entry symbol value array indexed by relocation index, instead of calling plt_sym_val on each relocation index. PR binutils/17677 * elf-bfd.h (_bfd_elf_ifunc_get_synthetic_symtab): New prototype. * elf-ifunc.c (_bfd_elf_ifunc_get_synthetic_symtab): New function. * elf32-i386.c (elf_i386_plt_sym_val): Removed. (elf_backend_plt_sym_val): Likewise. (elf_i386_get_plt_sym_val): New. (elf_i386_get_synthetic_symtab): Likewise. (bfd_elf32_get_synthetic_symtab): Likewise. * elf64-x86-64.c (elf_x86_64_plt_sym_val): Removed. (elf_x86_64_plt_sym_val_offset_plt_bnd): Likewise. (elf_backend_plt_sym_val): Likewise. (elf_x86_64_get_plt_sym_val): New. (bfd_elf32_get_synthetic_symtab): Likewise. (elf_x86_64_get_synthetic_symtab): Use _bfd_elf_ifunc_get_synthetic_symtab. (bfd_elf64_get_synthetic_symtab): Don't undefine for NaCl. ----------------------------------------------------------------------- Summary of changes: bfd/ChangeLog | 23 +++++ bfd/elf-bfd.h | 3 + bfd/elf-ifunc.c | 125 +++++++++++++++++++++++++++ bfd/elf32-i386.c | 101 ++++++++++++++++------- bfd/elf64-x86-64.c | 237 +++++++++++++++++----------------------------------- 5 files changed, 298 insertions(+), 191 deletions(-) *** Bug 17764 has been marked as a duplicate of this bug. *** |