diff mbox series

libbacktrace patch committed: Avoid -Wpointer-arith errors

Message ID CAOyqgcWHy3ZeC3078n0wBHx74oqiOgXo2w4AyCOuyYNT0Zj7mw@mail.gmail.com
State New
Headers show
Series libbacktrace patch committed: Avoid -Wpointer-arith errors | expand

Commit Message

Ian Lance Taylor Aug. 5, 2024, 11:49 p.m. UTC
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 mbox series

Patch

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;