* ffsll.c: New file.
authorIan Lance Taylor <ian@airs.com>
Sat, 28 Mar 2009 05:22:30 +0000 (05:22 +0000)
committerIan Lance Taylor <ian@airs.com>
Sat, 28 Mar 2009 05:22:30 +0000 (05:22 +0000)
* configure.ac: Call AC_REPLACE_FUNCS on ffsll.
* gold.h (ffsll): Declare if HAVE_FFSLL is not defined.
* ftruncate.c (ftruncate): Declare before definition.
* mremap.c (mremap): Likewise.
* pread.c (pread): Likewise.
* configure, Makefile.in, config.in: Rebuild.

gold/ChangeLog
gold/Makefile.in
gold/config.in
gold/configure
gold/configure.ac
gold/ffsll.c [new file with mode: 0644]
gold/ftruncate.c
gold/gold.h
gold/mremap.c
gold/pread.c

index f6f638fb94e08031bc12c2869d87767284caaa58..b6ad2e29420660ebb5ccd7194ad61744c3c79916 100644 (file)
@@ -1,5 +1,13 @@
 2009-03-27  Ian Lance Taylor  <iant@google.com>
 
+       * ffsll.c: New file.
+       * configure.ac: Call AC_REPLACE_FUNCS on ffsll.
+       * gold.h (ffsll): Declare if HAVE_FFSLL is not defined.
+       * ftruncate.c (ftruncate): Declare before definition.
+       * mremap.c (mremap): Likewise.
+       * pread.c (pread): Likewise.
+       * configure, Makefile.in, config.in: Rebuild.
+
        * mremap.c: New file.
        * configure.ac: Call AC_REPLACE_FUNCS on mremap.
        * gold.h (MREMAP_MAYMOVE): Define if HAVE_MREMAP is not defined.
index 8c1d00d7a521fab17dece7128d77c30d874239bd..fe3474de868686c94eec1b2b5c9532739218d50b 100644 (file)
@@ -50,7 +50,8 @@ DIST_COMMON = README $(am__configure_deps) $(srcdir)/../config.guess \
        $(srcdir)/../mkinstalldirs $(srcdir)/Makefile.am \
        $(srcdir)/Makefile.in $(srcdir)/config.in \
        $(top_srcdir)/configure $(top_srcdir)/po/Make-in ChangeLog \
-       NEWS TODO ftruncate.c mremap.c pread.c yyscript.c yyscript.h
+       NEWS TODO ffsll.c ftruncate.c mremap.c pread.c yyscript.c \
+       yyscript.h
 subdir = .
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/../config/depstand.m4 \
@@ -535,6 +536,7 @@ mostlyclean-compile:
 distclean-compile:
        -rm -f *.tab.c
 
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/ffsll.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/ftruncate.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/mremap.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/pread.Po@am__quote@
index 93264cfc665a0a6765b8b206c457c7fa5968f1a2..97af33583cf25661d5577a5429e1459a351dbb48 100644 (file)
@@ -34,6 +34,9 @@
 /* Define to 1 if you have the <ext/hash_set> header file. */
 #undef HAVE_EXT_HASH_SET
 
+/* Define to 1 if you have the `ffsll' function. */
+#undef HAVE_FFSLL
+
 /* Define to 1 if you have the `ftruncate' function. */
 #undef HAVE_FTRUNCATE
 
index 623590403057c03bffd7a67803977d2dd08666f7..8cd51534561b9a25417a71725a68d8863e67ac11 100755 (executable)
@@ -5168,7 +5168,8 @@ done
 
 
 
-for ac_func in pread ftruncate mremap
+
+for ac_func in pread ftruncate mremap ffsll
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
 echo "$as_me:$LINENO: checking for $ac_func" >&5
index 335ecb3d75a50ff91f3d3cfabe38de2eea47ef25..e8d576236a2568fc7364649a0fb67c25f6015a42 100644 (file)
@@ -312,7 +312,7 @@ LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
 AC_SUBST(LFS_CFLAGS)
 
 AC_CHECK_FUNCS(chsize)
-AC_REPLACE_FUNCS(pread ftruncate mremap)
+AC_REPLACE_FUNCS(pread ftruncate mremap ffsll)
 
 # Link in zlib if we can.  This allows us to write compressed sections.
 AC_SEARCH_LIBS(zlibVersion, z, [AC_CHECK_HEADERS(zlib.h)])
diff --git a/gold/ffsll.c b/gold/ffsll.c
new file mode 100644 (file)
index 0000000..aeae845
--- /dev/null
@@ -0,0 +1,43 @@
+/* ffsll.c -- version of ffsll for gold.  */
+
+/* Copyright 2009 Free Software Foundation, Inc.
+   Written by Ian Lance Taylor <iant@google.com>.
+
+   This file is part of gold.
+
+   This program 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 3 of the License, or
+   (at your option) any later version.
+
+   This program 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 this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
+
+#include "config.h"
+
+#include <string.h>
+
+extern int ffsll (long long);
+
+/* This file implements ffsll for systems which don't have it.  We use
+   ffsll if possible because gcc supports it as a builtin which will
+   use a machine instruction if there is one.  */
+
+int
+ffsll (long long arg)
+{
+  unsigned long long i;
+  int ret;
+
+  ret = 0;
+  for (i = (unsigned long long) arg; i != 0; i >>= 1)
+    ++ret;
+  return ret;
+}
index ff7d11b090a4f41760885dd15cbbd00e344c80fe..fc0bbc898f58c0d5aac258bb867c0c4a232b0f98 100644 (file)
@@ -9,6 +9,8 @@
 #include <sys/types.h>
 #include <fcntl.h>
 
+extern int ftruncate (int, off_t);
+
 #ifdef F_CHSIZE
 
 int
index dc8da551ada3f4a119deb2422fd1c042177b7f8e..a377f96edf973d410d5c5c6f58891897a4b66958 100644 (file)
@@ -127,7 +127,11 @@ extern "C" int ftruncate(int, off_t);
 
 #ifndef HAVE_MREMAP
 #define MREMAP_MAYMOVE 1
-extern "C" void *mremap (void *, size_t, size_t, int, ...);
+extern "C" void *mremap(void *, size_t, size_t, int, ...);
+#endif
+
+#ifndef HAVE_FFSLL
+extern "C" int ffsll(long long);
 #endif
 
 namespace gold
index caa7bc76b56cdeebe5a90c6a6560f6a7b86e605b..332fded11c9dc39a2ef0c3db0c5c613177d396d0 100644 (file)
@@ -40,6 +40,8 @@
 # define MAP_ANONYMOUS MAP_ANON
 #endif
 
+extern void *mremap (void *, size_t, size_t, int, ...);
+
 void *
 mremap (void *old_address, size_t old_size, size_t new_size,
        int flags ATTRIBUTE_UNUSED, ...)
index 1b0cf40e7403cdb315373af02ae8191cdce909de..a7a7d9c63e49473c3073e8c2469144b6839a9956 100644 (file)
 #include <sys/types.h>
 #include <unistd.h>
 
+extern ssize_t pread (int, void *, size_t, off_t);
+
 ssize_t
-pread(int fd, void* buf, size_t count, off_t offset)
+pread (int fd, void *buf, size_t count, off_t offset)
 {
   if (lseek(fd, offset, SEEK_SET) != offset)
     return -1;