aboutsummaryrefslogtreecommitdiff
path: root/gcc/lto
diff options
context:
space:
mode:
authorKai Tietz <kai.tietz@onevision.com>2010-05-11 15:05:36 +0000
committerKai Tietz <ktietz@gcc.gnu.org>2010-05-11 17:05:36 +0200
commit94f6424987ff7c94cc07425d1cce11922ef0ce73 (patch)
tree6d05e77f721564aad5732a62616235507a19d6f2 /gcc/lto
parent90829bcb0ca688af71c19ca3c72f4da6cae455fd (diff)
downloadgcc-94f6424987ff7c94cc07425d1cce11922ef0ce73.zip
gcc-94f6424987ff7c94cc07425d1cce11922ef0ce73.tar.gz
gcc-94f6424987ff7c94cc07425d1cce11922ef0ce73.tar.bz2
lto-coff.c (validate_file): Add x64-coff support.
2010-05-11 Kai Tietz <kai.tietz@onevision.com> * lto-coff.c (validate_file): Add x64-coff support. * lto-coff.h (IMAGE_FILE_MACHINE_ADM64): New. (COFF_KNOWN_MACHINES): Add IMAGE_FILE_MACHINE_ADM64. * lto-lang.c (lto_build_c_type_nodes): Add check for 'long long unsigned int' for x64-windows. (lto_init): Likewise. From-SVN: r159271
Diffstat (limited to 'gcc/lto')
-rw-r--r--gcc/lto/ChangeLog10
-rw-r--r--gcc/lto/lto-coff.c5
-rw-r--r--gcc/lto/lto-coff.h4
-rw-r--r--gcc/lto/lto-lang.c11
4 files changed, 27 insertions, 3 deletions
diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog
index b7f0b7e..a86396a 100644
--- a/gcc/lto/ChangeLog
+++ b/gcc/lto/ChangeLog
@@ -1,3 +1,13 @@
+2010-05-11 Kai Tietz <kai.tietz@onevision.com>
+
+ * lto-coff.c (validate_file): Add x64-coff support.
+ * lto-coff.h (IMAGE_FILE_MACHINE_ADM64): New.
+ (COFF_KNOWN_MACHINES): Add IMAGE_FILE_MACHINE_ADM64.
+ * lto-lang.c (lto_build_c_type_nodes): Add check for
+ 'long long unsigned int' for x64-windows.
+ (lto_init): Likewise.
+
+
2010-05-07 Steven Bosscher <steven@gcc.gnu.org>
* lto.h (struct lto_file_struct): Document offset member.
diff --git a/gcc/lto/lto-coff.c b/gcc/lto/lto-coff.c
index 1814cfdb..6c15e66 100644
--- a/gcc/lto/lto-coff.c
+++ b/gcc/lto/lto-coff.c
@@ -379,9 +379,10 @@ validate_file (lto_coff_file *coff_file)
return false;
}
- if (COFF_CHARACTERISTICS != (COFF_CHARACTERISTICS & charact))
+ if (mach != IMAGE_FILE_MACHINE_ADM64
+ && COFF_CHARACTERISTICS != (COFF_CHARACTERISTICS & charact))
{
- /* ECOFF/XCOFF/PE+ support not implemented. */
+ /* ECOFF/XCOFF support not implemented. */
error ("not a 32-bit COFF object file");
return false;
}
diff --git a/gcc/lto/lto-coff.h b/gcc/lto/lto-coff.h
index f069d0c..5792f3d 100644
--- a/gcc/lto/lto-coff.h
+++ b/gcc/lto/lto-coff.h
@@ -79,11 +79,13 @@ along with GCC; see the file COPYING3. If not see
/* COFF header machine codes. */
#define IMAGE_FILE_MACHINE_I386 (0x014c)
+#define IMAGE_FILE_MACHINE_ADM64 (0x8664)
/* Known header magics for validation, as an array initialiser. */
#define COFF_KNOWN_MACHINES \
- { IMAGE_FILE_MACHINE_I386/*, ... add more here when working. */ }
+ { IMAGE_FILE_MACHINE_I386, \
+ IMAGE_FILE_MACHINE_ADM64/*, ... add more here when working. */ }
/* COFF object file header, section and symbol flags and types. These are
currently specific to PE-COFF, which is the only LTO-COFF format at the
diff --git a/gcc/lto/lto-lang.c b/gcc/lto/lto-lang.c
index 72149082..35d133b 100644
--- a/gcc/lto/lto-lang.c
+++ b/gcc/lto/lto-lang.c
@@ -1019,6 +1019,12 @@ lto_build_c_type_nodes (void)
uintmax_type_node = long_unsigned_type_node;
signed_size_type_node = long_integer_type_node;
}
+ else if (strcmp (SIZE_TYPE, "long long unsigned int") == 0)
+ {
+ intmax_type_node = long_long_integer_type_node;
+ uintmax_type_node = long_long_unsigned_type_node;
+ signed_size_type_node = long_long_integer_type_node;
+ }
else
gcc_unreachable ();
@@ -1062,6 +1068,11 @@ lto_init (void)
set_sizetype (long_unsigned_type_node);
size_type_node = long_unsigned_type_node;
}
+ else if (strcmp (SIZE_TYPE, "long long unsigned int") == 0)
+ {
+ set_sizetype (long_long_unsigned_type_node);
+ size_type_node = long_long_unsigned_type_node;
+ }
else
gcc_unreachable ();