diff options
author | Rafael Avila de Espindola <espindola@google.com> | 2009-11-17 16:00:19 +0000 |
---|---|---|
committer | Rafael Espindola <espindola@gcc.gnu.org> | 2009-11-17 16:00:19 +0000 |
commit | 9870fe4f883ad20482ade6a4044657d738daa337 (patch) | |
tree | c38a89384c9700e550405c672c972476d186d9a3 /gcc/lto/lto-elf.c | |
parent | 6ca19a974b25008e1e9e9c68c34a904b1b12fb4d (diff) | |
download | gcc-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.c | 13 |
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; |