diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/lto/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/lto/lto-elf.c | 10 | ||||
-rw-r--r-- | gcc/lto/lto.c | 10 |
3 files changed, 25 insertions, 2 deletions
diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog index 5e52527..a726d32 100644 --- a/gcc/lto/ChangeLog +++ b/gcc/lto/ChangeLog @@ -1,3 +1,10 @@ +2010-01-11 Andy Hutchinson <hutchinsonandy@gcc.gnu.org> + + * lto.c (O_BINARY): Define. + (lto_read_section_data): Open file in binary mode. + * lto-elf.c (O_BINARY): Define. + (lto_elf_file_open): Open file in binary mode. + 2010-01-08 Richard Guenther <rguenther@suse.de> PR lto/42528 diff --git a/gcc/lto/lto-elf.c b/gcc/lto/lto-elf.c index 0311dde..b70648d 100644 --- a/gcc/lto/lto-elf.c +++ b/gcc/lto/lto-elf.c @@ -29,6 +29,13 @@ along with GCC; see the file COPYING3. If not see #include "ggc.h" #include "lto-streamer.h" +/* Handle opening elf files on hosts, such as Windows, that may use + text file handling that will break binary access. */ + +#ifndef O_BINARY +# define O_BINARY 0 +#endif + /* Initialize FILE, an LTO file object for FILENAME. */ static void @@ -580,7 +587,8 @@ lto_elf_file_open (const char *filename, bool writable) elf_file->fd = -1; /* Open the file. */ - elf_file->fd = open (fname, writable ? O_WRONLY|O_CREAT : O_RDONLY, 0666); + elf_file->fd = open (fname, writable ? O_WRONLY|O_CREAT|O_BINARY + : O_RDONLY|O_BINARY, 0666); if (elf_file->fd == -1) { error ("could not open file %s", fname); diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c index 1608e56..de53a09 100644 --- a/gcc/lto/lto.c +++ b/gcc/lto/lto.c @@ -50,6 +50,14 @@ along with GCC; see the file COPYING3. If not see #include <sys/mman.h> #endif +/* Handle opening elf files on hosts, such as Windows, that may use + text file handling that will break binary access. */ + +#ifndef O_BINARY +# define O_BINARY 0 +#endif + + DEF_VEC_P(bitmap); DEF_VEC_ALLOC_P(bitmap,heap); @@ -421,7 +429,7 @@ lto_read_section_data (struct lto_file_decl_data *file_data, if (fd == -1) { fd_name = xstrdup (file_data->file_name); - fd = open (file_data->file_name, O_RDONLY); + fd = open (file_data->file_name, O_RDONLY|O_BINARY); if (fd == -1) return NULL; } |