This patch, based on one by Kirill Müller, adds -Wpointer-arith to the libbacktrace warning options, and adds casts to avoid the cases where the warning currently fires. Bootstrapped and ran libbacktrace testsuite on x86_64-pc-linux-gnu. Committed to mainline.
Ian * configure.ac (ACX_PROG_CC_WARNING_OPTS): Add -Wpointer-arith. * pecoff.c (coff_add): Cast void pointers. * xcoff.c (xcoff_add): Likewise. * configure: Regenerate.
3a51aaf5f4ccd3d2ed871727c16f9c6f9ed54e50 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;