gprofng: 30889 can't compile without large file support

Message ID 20240112041054.1836291-1-vladimir.mezentsev@oracle.com
State Accepted
Headers
Series gprofng: 30889 can't compile without large file support |

Checks

Context Check Description
snail/binutils-gdb-check success Github commit url

Commit Message

Vladimir Mezentsev Jan. 12, 2024, 4:10 a.m. UTC
  From: Vladimir Mezentsev <vladimir.mezentsev@oracle.com>

gprofng/ChangeLog
2024-01-11  Vladimir Mezentsev  <vladimir.mezentsev@oracle.com>

	PR 30889
	* configure.ac (O_LARGEFILE): Define to 0, if not defined.
	* configure: Rebuild.
	* common/config.h.in: Rebuild.
---
 gprofng/common/config.h.in |  3 +++
 gprofng/configure          | 26 ++++++++++++++++++++++++++
 gprofng/configure.ac       | 11 +++++++++++
 3 files changed, 40 insertions(+)
  

Comments

Andreas Schwab Jan. 12, 2024, 9:20 a.m. UTC | #1
If you are using open64 you don't need O_LARGEFILE at all.  An autoconf
check is overkill anyway, you can just use #ifdef.
  
Vladimir Mezentsev Jan. 12, 2024, 7:49 p.m. UTC | #2
On 1/10/24 21:53, Mike Frysinger wrote:
> can't you put this in a single header file (gprof.h?) instead of 
> duplicating
> the boilerplate in a bunch of files ?
> -mike


On 1/12/24 01:20, Andreas Schwab wrote:
> If you are using open64 you don't need O_LARGEFILE at all.  An autoconf
> check is overkill anyway, you can just use #ifdef.

Agree with both comments.

Please review the new fix below.


gprofng/src/util.h is included in all files where we use O_LARGEFILE,
and is always included after <fcntl.h> where O_LARGEFILE may be defined.


gprofng/ChangeLog
2024-01-12  Vladimir Mezentsev <vladimir.mezentsev@oracle.com>

     PR 30889
     * src/util.h (O_LARGEFILE): Define to 0, if not defined.
---
  gprofng/src/util.h | 4 ++++
  1 file changed, 4 insertions(+)

diff --git a/gprofng/src/util.h b/gprofng/src/util.h
index c6382aab5bb..cbbc2f7e118 100644
--- a/gprofng/src/util.h
+++ b/gprofng/src/util.h
@@ -32,6 +32,10 @@
  #include "i18n.h"
  #include "debug.h"

+#ifndef O_LARGEFILE
+#define O_LARGEFILE 0
+#endif
+
  #define SWAP_ENDIAN(x)  swapByteOrder((void *) (&(x)), sizeof(x))
  #define AppendString(len, arr, ...) len += snprintf(arr + len, 
sizeof(arr) - len, __VA_ARGS__)
  #define ARR_SIZE(x)     (sizeof (x) / sizeof (*(x)))
  

Patch

diff --git a/gprofng/common/config.h.in b/gprofng/common/config.h.in
index f8484f238fd..1e719b605dd 100644
--- a/gprofng/common/config.h.in
+++ b/gprofng/common/config.h.in
@@ -56,6 +56,9 @@ 
    */
 #undef LT_OBJDIR
 
+/* Define if O_LARGEFILE is not in fcntl.h */
+#undef O_LARGEFILE
+
 /* Name of package */
 #undef PACKAGE
 
diff --git a/gprofng/configure b/gprofng/configure
index 1c6a99291be..48161190485 100755
--- a/gprofng/configure
+++ b/gprofng/configure
@@ -16648,6 +16648,32 @@  $as_echo "#define DEBUG 1" >>confdefs.h
 
 fi
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for O_LARGEFILE in fcntl.h" >&5
+$as_echo_n "checking for O_LARGEFILE in fcntl.h... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <fcntl.h>
+#ifndef O_LARGEFILE
+MACRO_UNDEFINED
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "MACRO_UNDEFINED" >/dev/null 2>&1; then :
+
+
+$as_echo "#define O_LARGEFILE 0" >>confdefs.h
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: O_LARGEFILE is undefined" >&5
+$as_echo "O_LARGEFILE is undefined" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: O_LARGEFILE is defined" >&5
+$as_echo "O_LARGEFILE is defined" >&6; }
+fi
+rm -f conftest*
+
+
 cat > "dummy.c" << EOF
 #include <features.h>
 #if defined(__UCLIBC__)
diff --git a/gprofng/configure.ac b/gprofng/configure.ac
index a7221d9eaf0..150deac5fa2 100644
--- a/gprofng/configure.ac
+++ b/gprofng/configure.ac
@@ -151,6 +151,17 @@  if test "${enable_gprofng_debug}" = yes; then
     AC_DEFINE(DEBUG, 1, [Enable debugging output.])
 fi
 
+AC_MSG_CHECKING(for O_LARGEFILE in fcntl.h)
+AC_EGREP_CPP([MACRO_UNDEFINED], [
+#include <fcntl.h>
+#ifndef O_LARGEFILE
+MACRO_UNDEFINED
+#endif
+  ],[
+    AC_DEFINE(O_LARGEFILE, 0, [Define if O_LARGEFILE is not in fcntl.h])
+    AC_MSG_RESULT(O_LARGEFILE is undefined) ],
+  AC_MSG_RESULT(O_LARGEFILE is defined))
+
 cat > "dummy.c" << EOF
 #include <features.h>
 #if defined(__UCLIBC__)