Skip to content

Commit

Permalink
Disable year 2038 support on 32-bit hosts by default
Browse files Browse the repository at this point in the history
With a recent import of gnulib, code has been pulled that tests and enables
64-bit time_t by default on 32-bit hosts that support it.

Although gdb can use the gnulib support, bfd doesn't use gnulib and currently
doesn't do these checks.

As a consequence, if we have a 32-bit host that supports 64-bit time_t, we'll
have a mismatch between gdb's notion of time_t and bfd's notion of time_t.

This will lead to mismatches in the struct stat size, leading to memory
corruption and crashes.

This patch disables the year 2038 check for now, which makes things work
reliably again.

I'd consider this a temporary fix until we have proper bfd checks for the year
2038, if it makes sense.  64-bit hosts seems to be more common these days, so
I'm not sure how important it is to have this support enabled and how soon
we want to enable it.

Thoughts?

ChangeLog:

	* configure.ac: Disable year2038 by default on 32-bit hosts.
	* configure: Regenerate.
  • Loading branch information
luis-machado-arm authored and ArsenArsen committed Aug 7, 2023
1 parent 2455205 commit a49d42e
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 0 deletions.
22 changes: 22 additions & 0 deletions configure
Original file line number Diff line number Diff line change
Expand Up @@ -809,6 +809,7 @@ enable_ld
enable_gprofng
enable_compressed_debug_sections
enable_default_compressed_debug_sections_algorithm
enable_year2038
enable_libquadmath
enable_libquadmath_support
enable_libada
Expand Down Expand Up @@ -1552,6 +1553,7 @@ Optional Features:
--enable-default-compressed-debug-sections-algorithm={zlib,zstd}
Default compression algorithm for
--enable-compressed-debug-sections.
--enable-year2038 enable support for timestamps past the year 2038
--disable-libquadmath do not build libquadmath directory
--disable-libquadmath-support
disable libquadmath support for Fortran
Expand Down Expand Up @@ -3194,6 +3196,20 @@ case "${host}" in
;;
esac

# Default to --disable-year2038 until we can handle differences between
# projects that use gnulib (which understands year 2038) and projects that
# do not (like BFD).
# Check whether --enable-year2038 was given.
if test "${enable_year2038+set}" = set; then :
enableval=$enable_year2038; ENABLE_YEAR2038=$enableval
else
ENABLE_YEAR2038=no
fi

enable_year2038=
if test "${ENABLE_YEAR2038}" = "no" ; then
enable_year2038=no
fi

# Check whether --enable-libquadmath was given.
if test "${enable_libquadmath+set}" = set; then :
Expand Down Expand Up @@ -10215,9 +10231,15 @@ if test "$silent" = yes; then
baseargs="$baseargs --silent"
tbaseargs="$tbaseargs --silent"
fi

baseargs="$baseargs --disable-option-checking"
tbaseargs="$tbaseargs --disable-option-checking"

if test "$enable_year2038" = no; then
baseargs="$baseargs --disable-year2038"
tbaseargs="$tbaseargs --disable-year2038"
fi

# Record and document user additions to sub configure arguments.


Expand Down
18 changes: 18 additions & 0 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -459,6 +459,18 @@ case "${host}" in
;;
esac

# Default to --disable-year2038 until we can handle differences between
# projects that use gnulib (which understands year 2038) and projects that
# do not (like BFD).
AC_ARG_ENABLE(year2038,
AS_HELP_STRING([--enable-year2038],
[enable support for timestamps past the year 2038]),
ENABLE_YEAR2038=$enableval,
ENABLE_YEAR2038=no)
enable_year2038=
if test "${ENABLE_YEAR2038}" = "no" ; then
enable_year2038=no
fi

AC_ARG_ENABLE(libquadmath,
AS_HELP_STRING([--disable-libquadmath],
Expand Down Expand Up @@ -3339,9 +3351,15 @@ if test "$silent" = yes; then
baseargs="$baseargs --silent"
tbaseargs="$tbaseargs --silent"
fi

baseargs="$baseargs --disable-option-checking"
tbaseargs="$tbaseargs --disable-option-checking"

if test "$enable_year2038" = no; then
baseargs="$baseargs --disable-year2038"
tbaseargs="$tbaseargs --disable-year2038"
fi

# Record and document user additions to sub configure arguments.
AC_ARG_VAR([build_configargs],
[additional configure arguments for build directories])
Expand Down

0 comments on commit a49d42e

Please sign in to comment.