From ef42b83ec01d65286ba2906ef66caa3b943108dd Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Tue, 4 Nov 2014 13:39:38 +1030 Subject: [PATCH] Provide stat function for spu overlay manager iovec Commit f54498b4 broke spu-elf, specifically the change "Do not try to load a string table bigger than the file", because bfd_get_size returns zero for the spu built-in overlay manager bfd. * elf32-spu.c (ovl_mgr_stat): New function. (spu_elf_open_builtin_lib): Pass to bfd_openr_iovec. --- bfd/ChangeLog | 5 +++++ bfd/elf32-spu.c | 14 +++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 0222d323105..c8e23bab21a 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2014-11-04 Alan Modra + + * elf32-spu.c (ovl_mgr_stat): New function. + (spu_elf_open_builtin_lib): Pass to bfd_openr_iovec. + 2014-11-03 Andrew Burgess * elf32-avr.c (elf32_avr_relax_delete_bytes): During linker diff --git a/bfd/elf32-spu.c b/bfd/elf32-spu.c index 13806ad1bd1..ebc9e6a0d0d 100644 --- a/bfd/elf32-spu.c +++ b/bfd/elf32-spu.c @@ -1828,6 +1828,18 @@ ovl_mgr_pread (struct bfd *abfd ATTRIBUTE_UNUSED, return count; } +static int +ovl_mgr_stat (struct bfd *abfd ATTRIBUTE_UNUSED, + void *stream, + struct stat *sb) +{ + struct _ovl_stream *os = (struct _ovl_stream *) stream; + + memset (sb, 0, sizeof (*sb)); + sb->st_size = (const char *) os->end - (const char *) os->start; + return 0; +} + bfd_boolean spu_elf_open_builtin_lib (bfd **ovl_bfd, const struct _ovl_stream *stream) { @@ -1837,7 +1849,7 @@ spu_elf_open_builtin_lib (bfd **ovl_bfd, const struct _ovl_stream *stream) (void *) stream, ovl_mgr_pread, NULL, - NULL); + ovl_mgr_stat); return *ovl_bfd != NULL; } -- 2.30.2