[gold commit] Fix use of system fallocate

Cary Coutant ccoutant@gmail.com
Fri Mar 19 23:21:41 GMT 2021


I've committed the following patch to fix the improper error handling
when calling system fallocate when posix_fallocate is not available.

-cary


2021-03-19  Holger Berger  <holger.berger@googlemail.com>

gold/
        PR gold/26541
        * output.cc (gold_fallocate): Use errno when calling system fallocate.

diff --git a/gold/output.cc b/gold/output.cc
index b7505ffd72c..afdba06753e 100644
--- a/gold/output.cc
+++ b/gold/output.cc
@@ -141,12 +141,14 @@ gold_fallocate(int o, off_t offset, off_t len)

 #ifdef HAVE_FALLOCATE
   {
+    errno = 0;
     int err = ::fallocate(o, 0, offset, len);
-    if (err != EINVAL && err != ENOSYS && err != EOPNOTSUPP)
-      return err;
+    if (err < 0 && errno != EINVAL && errno != ENOSYS && errno != EOPNOTSUPP)
+      return errno;
   }
 #endif // defined(HAVE_FALLOCATE)

+  errno = 0;
   if (::ftruncate(o, offset + len) < 0)
     return errno;
   return 0;


More information about the Binutils mailing list