diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index facda2789b1..09dac05d659 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,13 @@
+1999-05-28  Ian Lance Taylor  <ian@zembu.com>
+
+	* configure.in: Check whether getuid and getgid exist.
+	* archive.c: Define getuid and getgid as macros if HAVE_GETUID or
+	HAVE_GETGID are not defined, respectively.
+	(bfd_write_armap): Don't special case on _WIN32 for getuid and
+	getgid.
+	* configure.host: Set ac_cv_func_get{ug}id for *-*-windows*.
+	* configure, config.in: Rebuild.
+
 1999-05-28  Martin Dorey  <mdorey@madge.com>
 
 	* elf32-i960.c: New file.
diff --git a/bfd/archive.c b/bfd/archive.c
index 8ac5aa4e95d..ac5aeaf6220 100644
--- a/bfd/archive.c
+++ b/bfd/archive.c
@@ -1,5 +1,5 @@
 /* BFD back-end for archive files (libraries).
-   Copyright 1990, 91, 92, 93, 94, 95, 96, 97, 1998
+   Copyright 1990, 91, 92, 93, 94, 95, 96, 97, 98, 1999
    Free Software Foundation, Inc.
    Written by Cygnus Support.  Mostly Gumby Henkel-Wallace's fault.
 
@@ -1340,6 +1340,14 @@ _bfd_construct_extended_name_table (abfd, trailing_slash, tabloc, tablen)
 
 /** A couple of functions for creating ar_hdrs */
 
+#ifndef HAVE_GETUID
+#define getuid() 0
+#endif
+
+#ifndef HAVE_GETGID
+#define getgid() 0
+#endif
+
 /* Takes a filename, returns an arelt_data for it, or NULL if it can't
    make one.  The filename must refer to a filename in the filesystem.
    The filename field of the ar_hdr will NOT be initialized.  If member
@@ -1901,13 +1909,8 @@ bsd_write_armap (arch, elength, map, orl_count, stridx)
   bfd_ardata (arch)->armap_datepos = (SARMAG
 				      + offsetof (struct ar_hdr, ar_date[0]));
   sprintf (hdr.ar_date, "%ld", bfd_ardata (arch)->armap_timestamp);
-#ifndef _WIN32
   sprintf (hdr.ar_uid, "%ld", (long) getuid ());
   sprintf (hdr.ar_gid, "%ld", (long) getgid ());
-#else
-  sprintf (hdr.ar_uid, "%ld", (long) 666);
-  sprintf (hdr.ar_gid, "%ld", (long) 42);
-#endif
   sprintf (hdr.ar_size, "%-10d", (int) mapsize);
   strncpy (hdr.ar_fmag, ARFMAG, 2);
   for (i = 0; i < sizeof (struct ar_hdr); i++)
diff --git a/bfd/config.in b/bfd/config.in
index 51fa45b6928..abb2c7872cc 100644
--- a/bfd/config.in
+++ b/bfd/config.in
@@ -67,9 +67,15 @@
 /* Define if you have the getcwd function.  */
 #undef HAVE_GETCWD
 
+/* Define if you have the getgid function.  */
+#undef HAVE_GETGID
+
 /* Define if you have the getpagesize function.  */
 #undef HAVE_GETPAGESIZE
 
+/* Define if you have the getuid function.  */
+#undef HAVE_GETUID
+
 /* Define if you have the madvise function.  */
 #undef HAVE_MADVISE
 
diff --git a/bfd/configure b/bfd/configure
index 783a3932df8..83e93e6bdbf 100755
--- a/bfd/configure
+++ b/bfd/configure
@@ -4460,7 +4460,7 @@ fi
 
 fi
 
-for ac_func in fcntl getpagesize setitimer sysconf fdopen
+for ac_func in fcntl getpagesize setitimer sysconf fdopen getuid getgid
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
 echo "configure:4467: checking for $ac_func" >&5
diff --git a/bfd/configure.host b/bfd/configure.host
index ef7048be13c..e24cd600228 100644
--- a/bfd/configure.host
+++ b/bfd/configure.host
@@ -63,6 +63,8 @@ m68*-hp-hpux*)		HDEFINES=-DHOST_HP300HPUX ;;
 			ac_cv_func_getpagesize=no
 			ac_cv_func_madvise=no
 			ac_cv_func_mprotect=no
+			ac_cv_func_getuid=no
+			ac_cv_func_getgid=no
 			ac_cv_header_sys_file_h=no
 			ac_cv_header_sys_time_h=no
 			ac_cv_header_unistd_h=no
diff --git a/bfd/configure.in b/bfd/configure.in
index d5aa882570a..94f3ef60feb 100644
--- a/bfd/configure.in
+++ b/bfd/configure.in
@@ -98,7 +98,7 @@ AC_CHECK_HEADERS(stddef.h string.h strings.h stdlib.h time.h unistd.h)
 AC_CHECK_HEADERS(fcntl.h sys/file.h sys/time.h)
 AC_HEADER_TIME
 AC_HEADER_DIRENT
-AC_CHECK_FUNCS(fcntl getpagesize setitimer sysconf fdopen)
+AC_CHECK_FUNCS(fcntl getpagesize setitimer sysconf fdopen getuid getgid)
 
 BFD_BINARY_FOPEN