From 3a51aaf5f4ccd3d2ed871727c16f9c6f9ed54e50 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Mon, 5 Aug 2024 16:46:03 -0700 Subject: [PATCH] libbacktrace: avoid -Wpointer-arith errors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Based on patch from Kirill Müller. * configure.ac (ACX_PROG_CC_WARNING_OPTS): Add -Wpointer-arith. * pecoff.c (coff_add): Cast void pointers. * xcoff.c (xcoff_add): Likewise. * configure: Regenerate. --- libbacktrace/configure | 3 ++- libbacktrace/configure.ac | 3 ++- libbacktrace/pecoff.c | 7 ++++--- libbacktrace/xcoff.c | 4 +++- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/libbacktrace/configure b/libbacktrace/configure index fe0bb2083eb..db491a78234 100755 --- a/libbacktrace/configure +++ b/libbacktrace/configure @@ -12385,7 +12385,8 @@ save_CFLAGS="$CFLAGS" for real_option in -W -Wall -Wwrite-strings -Wstrict-prototypes \ -Wmissing-prototypes -Wold-style-definition \ -Wmissing-format-attribute -Wcast-qual \ - -Wno-attributes -Wno-unknown-attributes; do + -Wno-attributes -Wno-unknown-attributes \ + -Wpointer-arith; do # Do the check with the no- prefix removed since gcc silently # accepts any -Wno-* option on purpose case $real_option in diff --git a/libbacktrace/configure.ac b/libbacktrace/configure.ac index bfd7f35d2d2..69eb2023677 100644 --- a/libbacktrace/configure.ac +++ b/libbacktrace/configure.ac @@ -145,7 +145,8 @@ AC_SUBST(EXTRA_FLAGS) ACX_PROG_CC_WARNING_OPTS([-W -Wall -Wwrite-strings -Wstrict-prototypes \ -Wmissing-prototypes -Wold-style-definition \ -Wmissing-format-attribute -Wcast-qual \ - -Wno-attributes -Wno-unknown-attributes], + -Wno-attributes -Wno-unknown-attributes \ + -Wpointer-arith], [WARN_FLAGS]) AC_ARG_ENABLE([werror], diff --git a/libbacktrace/pecoff.c b/libbacktrace/pecoff.c index ccd5ccbce2c..15a73ff0b2a 100644 --- a/libbacktrace/pecoff.c +++ b/libbacktrace/pecoff.c @@ -704,7 +704,7 @@ coff_add (struct backtrace_state *state, int descriptor, magic_ok = memcmp (magic, "PE\0", 4) == 0; fhdr_off += 4; - memcpy (&fhdr, fhdr_view.data + 4, sizeof fhdr); + memcpy (&fhdr, (const unsigned char *) fhdr_view.data + 4, sizeof fhdr); } else { @@ -738,7 +738,7 @@ coff_add (struct backtrace_state *state, int descriptor, sects_view_valid = 1; opt_hdr = (const b_coff_optional_header *) sects_view.data; sects = (const b_coff_section_header *) - (sects_view.data + fhdr.size_of_optional_header); + ((const unsigned char *) sects_view.data + fhdr.size_of_optional_header); is_64 = 0; memset (&image_base, 0, sizeof image_base); @@ -781,7 +781,8 @@ coff_add (struct backtrace_state *state, int descriptor, goto fail; syms_view_valid = 1; - str_size = coff_read4 (syms_view.data + syms_size); + str_size = coff_read4 ((const unsigned char *) syms_view.data + + syms_size); str_off = syms_off + syms_size; diff --git a/libbacktrace/xcoff.c b/libbacktrace/xcoff.c index 01443c48401..84ce07b8e2c 100644 --- a/libbacktrace/xcoff.c +++ b/libbacktrace/xcoff.c @@ -1203,7 +1203,9 @@ xcoff_add (struct backtrace_state *state, int descriptor, off_t offset, goto fail; syms_view_valid = 1; - memcpy (&str_size, syms_view.data + syms_size, 4); + memcpy (&str_size, + (const unsigned char *) syms_view.data + syms_size, + 4); str_off = fhdr.f_symptr + syms_size;