2011-02-25 Rafael Ávila de Espíndola <respindola@mozilla.com>

* plugin.c (bfd_plugin_object_p): Correctly set the filesize
	and handle claim_file seeking. Only try to load the plugin once.
This commit is contained in:
Rafael Ávila de Espíndola 2011-02-26 00:03:09 +00:00
parent eb3f9aa7a1
commit 80549d04a2
2 changed files with 24 additions and 3 deletions

View File

@ -1,3 +1,8 @@
2011-02-25 Rafael Ávila de Espíndola <respindola@mozilla.com>
* plugin.c (bfd_plugin_object_p): Correctly set the filesize
and handle claim_file seeking. Only try to load the plugin once.
2011-02-22 Andreas Schwab <schwab@redhat.com>
* elf32-m68k.c (elf_m68k_finish_dynamic_symbol): For a TLS_GD

View File

@ -232,11 +232,17 @@ static const bfd_target *
bfd_plugin_object_p (bfd *abfd)
{
int claimed = 0;
int t = load_plugin ();
struct ld_plugin_input_file file;
bfd *iobfd;
static int have_loaded = 0;
static int have_plugin = 0;
if (!t)
if (!have_loaded)
{
have_loaded = 1;
have_plugin = load_plugin ();
}
if (!have_plugin)
return NULL;
file.name = abfd->filename;
@ -251,7 +257,7 @@ bfd_plugin_object_p (bfd *abfd)
{
iobfd = abfd;
file.offset = 0;
file.filesize = 0; /*FIXME*/
file.filesize = 0;
}
if (!iobfd->iostream && !bfd_open_file (iobfd))
@ -259,8 +265,18 @@ bfd_plugin_object_p (bfd *abfd)
file.fd = fileno ((FILE *) iobfd->iostream);
if (!abfd->my_archive)
{
struct stat stat_buf;
if (fstat (file.fd, &stat_buf))
return NULL;
file.filesize = stat_buf.st_size;
}
file.handle = abfd;
off_t cur_offset = lseek(file.fd, 0, SEEK_CUR);
claim_file (&file, &claimed);
lseek(file.fd, cur_offset, SEEK_SET);
if (!claimed)
return NULL;