From 359d9a27ca4b9be41f10a59bfbef508147ac0962 Mon Sep 17 00:00:00 2001
From: Nick Clifton <nickc@redhat.com>
Date: Thu, 12 Jul 2007 07:16:41 +0000
Subject: [PATCH] Add support for building on a 64-bit Windows host.

---
 include/ChangeLog       |  6 ++++++
 include/coff/ChangeLog  |  5 +++++
 include/coff/internal.h | 10 +++++-----
 include/splay-tree.h    | 40 ++++++++++++++++++++++++----------------
 4 files changed, 40 insertions(+), 21 deletions(-)

diff --git a/include/ChangeLog b/include/ChangeLog
index 58d698ce4..e1c1b6782 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,3 +1,9 @@
+2007-07-12  Kai Tietz   <kai.tietz@onevision.com>
+
+	* splay-tree.h (libi_uhostptr_t, libi_shostptr_t): New types,
+	needed for WIN64 when a long is not wide enough for a pointer.
+        (splay_tree_key, splay_tree_value): Use the new types.
+
 2007-07-09  Roland McGrath  <roland@redhat.com>
 
 	* bfdlink.h (struct bfd_link_info): Add member emit_note_gnu_build_id.
diff --git a/include/coff/ChangeLog b/include/coff/ChangeLog
index 3fa22bffd..bc1c92210 100644
--- a/include/coff/ChangeLog
+++ b/include/coff/ChangeLog
@@ -1,3 +1,8 @@
+2007-07-12  Kai Tietz   <kai.tietz@onevision.com>
+
+	* internal.h (struct internal_syment): Use bfd_hostptr_t for
+	_n_zeroes and _n_offset fields.
+
 2007-04-27  Alan Modra  <amodra@bigpond.net.au>
 
 	* rs6000.h: Write Mimi's name in ASCII.
diff --git a/include/coff/internal.h b/include/coff/internal.h
index afe6889ed..4c4eab9fd 100644
--- a/include/coff/internal.h
+++ b/include/coff/internal.h
@@ -1,7 +1,7 @@
 /* Internal format of COFF object file data structures, for GNU BFD.
    This file is part of BFD, the Binary File Descriptor library.
    
-   Copyright 1999, 2000, 2001, 2002, 2003, 2004. 2005, 2006
+   Copyright 1999, 2000, 2001, 2002, 2003, 2004. 2005, 2006, 2007
    Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
@@ -416,15 +416,15 @@ struct internal_syment
 {
   union
   {
-    char _n_name[SYMNMLEN];	/* old COFF version	*/
+    char _n_name[SYMNMLEN];	/* old COFF version		*/
     struct
     {
-      long _n_zeroes;		/* new == 0		*/
-      long _n_offset;		/* offset into string table */
+      bfd_hostptr_t _n_zeroes;	/* new == 0			*/
+      bfd_hostptr_t _n_offset;	/* offset into string table	*/
     }      _n_n;
     char *_n_nptr[2];		/* allows for overlaying	*/
   }     _n;
-  bfd_vma n_value;			/* value of symbol		*/
+  bfd_vma n_value;		/* value of symbol		*/
   short n_scnum;		/* section number		*/
   unsigned short n_flags;	/* copy of flags from filhdr	*/
   unsigned short n_type;	/* type and derived type	*/
diff --git a/include/splay-tree.h b/include/splay-tree.h
index 78d8f71c0..996d362ef 100644
--- a/include/splay-tree.h
+++ b/include/splay-tree.h
@@ -1,23 +1,23 @@
 /* A splay-tree datatype.  
-   Copyright 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
+   Copyright 1998, 1999, 2000, 2002, 2007 Free Software Foundation, Inc.
    Contributed by Mark Mitchell (mark@markmitchell.com).
 
-This file is part of GCC.
+   This file is part of GCC.
    
-GCC is free software; you can redistribute it and/or modify it
-under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
 
-GCC is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
+   GCC is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
 
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING.  If not, write to
-the Free Software Foundation, 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA.  */
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING.  If not, write to
+   the Free Software Foundation, 51 Franklin Street - Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
 
 /* For an easily readable description of splay-trees, see:
 
@@ -36,6 +36,14 @@ extern "C" {
 
 #include "ansidecl.h"
 
+#ifndef _WIN64
+  typedef unsigned long int  libi_uhostptr_t;
+  typedef long int           libi_shostptr_t;
+#else
+  typedef unsigned long long libi_uhostptr_t;
+  typedef long long          libi_shostptr_t;
+#endif
+
 #ifndef GTY
 #define GTY(X)
 #endif
@@ -44,8 +52,8 @@ extern "C" {
    these types, if necessary.  These types should be sufficiently wide
    that any pointer or scalar can be cast to these types, and then
    cast back, without loss of precision.  */
-typedef unsigned long int splay_tree_key;
-typedef unsigned long int splay_tree_value;
+typedef libi_uhostptr_t splay_tree_key;
+typedef libi_uhostptr_t splay_tree_value;
 
 /* Forward declaration for a node in the tree.  */
 typedef struct splay_tree_node_s *splay_tree_node;