aboutsummaryrefslogtreecommitdiff
path: root/gcc/lto/lto-elf.c
diff options
context:
space:
mode:
authorRafael Avila de Espindola <espindola@google.com>2009-11-17 16:00:19 +0000
committerRafael Espindola <espindola@gcc.gnu.org>2009-11-17 16:00:19 +0000
commit9870fe4f883ad20482ade6a4044657d738daa337 (patch)
treec38a89384c9700e550405c672c972476d186d9a3 /gcc/lto/lto-elf.c
parent6ca19a974b25008e1e9e9c68c34a904b1b12fb4d (diff)
downloadgcc-9870fe4f883ad20482ade6a4044657d738daa337.zip
gcc-9870fe4f883ad20482ade6a4044657d738daa337.tar.gz
gcc-9870fe4f883ad20482ade6a4044657d738daa337.tar.bz2
lto-elf.c (lto_file_init): Add offset argument.
2009-11-17 Rafael Avila de Espindola <espindola@google.com> * lto-elf.c (lto_file_init): Add offset argument. (lto_elf_file_open): Record the offset. * lto.c (lto_resolution_read): Change file_name into a lto_file argument. Check offsets. (lto_file_read): Update call to lto_resolution_read. * lto.h (lto_file_struct): Add the offset field. From-SVN: r154251
Diffstat (limited to 'gcc/lto/lto-elf.c')
-rw-r--r--gcc/lto/lto-elf.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/gcc/lto/lto-elf.c b/gcc/lto/lto-elf.c
index bc8e137..368d8d4d 100644
--- a/gcc/lto/lto-elf.c
+++ b/gcc/lto/lto-elf.c
@@ -32,9 +32,10 @@ along with GCC; see the file COPYING3. If not see
/* Initialize FILE, an LTO file object for FILENAME. */
static void
-lto_file_init (lto_file *file, const char *filename)
+lto_file_init (lto_file *file, const char *filename, off_t offset)
{
file->filename = filename;
+ file->offset = offset;
}
/* An ELF file. */
@@ -542,6 +543,7 @@ lto_elf_file_open (const char *filename, bool writable)
lto_elf_file *elf_file;
lto_file *result = NULL;
off_t offset;
+ off_t header_offset;
const char *offset_p;
char *fname;
@@ -550,6 +552,7 @@ lto_elf_file_open (const char *filename, bool writable)
{
fname = xstrdup (filename);
offset = 0;
+ header_offset = 0;
}
else
{
@@ -567,13 +570,13 @@ lto_elf_file_open (const char *filename, bool writable)
/* elf_rand expects the offset to point to the ar header, not the
object itself. Subtract the size of the ar header (60 bytes).
We don't uses sizeof (struct ar_hd) to avoid including ar.h */
- offset -= 60;
+ header_offset = offset - 60;
}
/* Set up. */
elf_file = XCNEW (lto_elf_file);
result = (lto_file *) elf_file;
- lto_file_init (result, fname);
+ lto_file_init (result, fname, offset);
elf_file->fd = -1;
/* Open the file. */
@@ -603,8 +606,8 @@ lto_elf_file_open (const char *filename, bool writable)
if (offset != 0)
{
Elf *e;
- off_t t = elf_rand (elf_file->elf, offset);
- if (t != offset)
+ off_t t = elf_rand (elf_file->elf, header_offset);
+ if (t != header_offset)
{
error ("could not seek in archive");
goto fail;