gprofng: fix build with -Werror=format-truncation
authorVladimir Mezentsev <vladimir.mezentsev@oracle.com>
Thu, 16 Jun 2022 19:31:05 +0000 (12:31 -0700)
committerVladimir Mezentsev <vladimir.mezentsev@oracle.com>
Fri, 17 Jun 2022 03:44:24 +0000 (20:44 -0700)
gprofng/ChangeLog
2022-06-16  Vladimir Mezentsev  <vladimir.mezentsev@oracle.com>

* configure.ac: Remove -Wno-format-truncation.
* src/Makefile.am: Likewise.
* configure: Rebuild.
* src/Makefile.in: Rebuild.
* common/hwctable.c: Fix -Werror=format-truncation errors.
* src/ipc.cc: Likewise.
* src/parse.cc: Likewise.

gprofng/common/hwctable.c
gprofng/configure
gprofng/configure.ac
gprofng/src/Makefile.am
gprofng/src/Makefile.in
gprofng/src/ipc.cc
gprofng/src/parse.cc

index a1422b63c1141617bbfb5f3c5bd7ac921808f263..61101baed2b91c99936d611b17af8a841bedb040 100644 (file)
@@ -4520,29 +4520,23 @@ static char *
 hwc_hwcentry_string_internal (char *buf, size_t buflen, const Hwcentry *ctr,
                              int show_short_desc)
 {
-  char stderrbuf[1024];
   char regnolist[256];
   if (!buf || !buflen)
     return buf;
-  buf[0] = 0;
   if (ctr == NULL)
     {
-      snprintf (stderrbuf, sizeof (stderrbuf), GTXT ("HW counter not available"));
-      goto hwc_hwcentry_string_done;
+      snprintf (buf, buflen, GTXT ("HW counter not available"));
+      return buf;
     }
   char *desc = NULL;
   if (show_short_desc)
     desc = ctr->short_desc;
   if (desc == NULL)
     desc = ctr->metric ? hwc_i18n_metric (ctr) : NULL;
-  format_columns (stderrbuf, sizeof (stderrbuf), ctr->name, ctr->int_name,
+  format_columns (buf, buflen, ctr->name, ctr->int_name,
                  hwc_memop_string (ctr->memop), timecvt_string (ctr->timecvt),
                  get_regnolist (regnolist, sizeof (regnolist), ctr->reg_list, 2),
                  desc);
-
-hwc_hwcentry_string_done:
-  strncpy (buf, stderrbuf, buflen - 1);
-  buf[buflen - 1] = 0;
   return buf;
 }
 
@@ -4557,16 +4551,14 @@ hwc_hwcentry_string (char *buf, size_t buflen, const Hwcentry *ctr)
 extern char *
 hwc_hwcentry_specd_string (char *buf, size_t buflen, const Hwcentry *ctr)
 {
-  char stderrbuf[1024];
   const char *memop, *timecvt;
   char descstr[1024];
   if (!buf || !buflen)
     return buf;
-  buf[0] = 0;
   if (ctr == NULL)
     {
-      snprintf (stderrbuf, sizeof (stderrbuf), GTXT ("HW counter not available"));
-      goto hwc_hwcentry_specd_string_done;
+      snprintf (buf, buflen, GTXT ("HW counter not available"));
+      return buf;
     }
   timecvt = timecvt_string (ctr->timecvt);
   if (ctr->memop)
@@ -4574,19 +4566,15 @@ hwc_hwcentry_specd_string (char *buf, size_t buflen, const Hwcentry *ctr)
   else
     memop = "";
   if (ctr->metric != NULL)  /* a standard counter for a specific register */
-    snprintf (descstr, sizeof (descstr), GTXT (" (`%s'; %s%s)"),
+    snprintf (descstr, sizeof (descstr), " (`%s'; %s%s)",
              hwc_i18n_metric (ctr), memop, timecvt);
   else  /* raw counter */
-    snprintf (descstr, sizeof (descstr), GTXT (" (%s%s)"), memop, timecvt);
+    snprintf (descstr, sizeof (descstr), " (%s%s)", memop, timecvt);
 
   char *rateString = hwc_rate_string (ctr, 1);
-  snprintf (stderrbuf, sizeof (stderrbuf), NTXT ("%s,%s%s"), ctr->name,
+  snprintf (buf, buflen, "%s,%s%s", ctr->name,
            rateString ? rateString : "", descstr);
   free (rateString);
-
-hwc_hwcentry_specd_string_done:
-  strncpy (buf, stderrbuf, buflen - 1);
-  buf[buflen - 1] = 0;
   return buf;
 }
 
index d0345ecdfbc4d7b7689f0b813c5247d2aea79ce2..a0d723990bf896c125cd95010649894dea4f8c57 100755 (executable)
@@ -636,6 +636,7 @@ LIBOBJS
 BUILD_SUBDIRS
 CLOCK_GETTIME_LINK
 GPROFNG_CPPFLAGS
+GPROFNG_NO_FORMAT_TRUNCATION_CFLAGS
 GPROFNG_CFLAGS
 LD_NO_AS_NEEDED
 BUILD_MAN_FALSE
@@ -662,7 +663,6 @@ BUILD_SRC_TRUE
 BUILD_COLLECTOR_FALSE
 BUILD_COLLECTOR_TRUE
 GPROFNG_NO_SWITCH_CFLAGS
-GPROFNG_NO_FORMAT_TRUNCATION_CFLAGS
 gprofng_cflags
 WERROR
 GPROFNG_LIBADD
@@ -15662,63 +15662,6 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-GPROFNG_NO_FORMAT_TRUNCATION_CFLAGS=
-save_CFLAGS="$CFLAGS"
-for real_option in -Wno-format-truncation; do
-  # Do the check with the no- prefix removed since gcc silently
-  # accepts any -Wno-* option on purpose
-  case $real_option in
-    -Wno-*) option=-W`expr x$real_option : 'x-Wno-\(.*\)'` ;;
-    *) option=$real_option ;;
-  esac
-  as_acx_Woption=`$as_echo "acx_cv_prog_cc_warning_$option" | $as_tr_sh`
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports $option" >&5
-$as_echo_n "checking whether $CC supports $option... " >&6; }
-if eval \${$as_acx_Woption+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  CFLAGS="$option"
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$as_acx_Woption=yes"
-else
-  eval "$as_acx_Woption=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-eval ac_res=\$$as_acx_Woption
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  if test `eval 'as_val=${'$as_acx_Woption'};$as_echo "$as_val"'` = yes; then :
-  GPROFNG_NO_FORMAT_TRUNCATION_CFLAGS="$GPROFNG_NO_FORMAT_TRUNCATION_CFLAGS${GPROFNG_NO_FORMAT_TRUNCATION_CFLAGS:+ }$real_option"
-fi
-  done
-CFLAGS="$save_CFLAGS"
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
index 63b505c5e14005a443f7899d9357498436e721a1..5a0fe1ea4777a74d175b63ff953757a7627893ba 100644 (file)
@@ -48,7 +48,6 @@ AC_SUBST(GPROFNG_LIBADD)
 
 ACX_PROG_CC_WARNINGS_ARE_ERRORS([manual])
 ACX_PROG_CC_WARNING_OPTS([-Wall], [gprofng_cflags])
-ACX_PROG_CC_WARNING_OPTS([-Wno-format-truncation], [GPROFNG_NO_FORMAT_TRUNCATION_CFLAGS])
 ACX_PROG_CC_WARNING_OPTS([-Wno-switch], [GPROFNG_NO_SWITCH_CFLAGS])
 gprofng_cppflags="-U_ASM"
 build_collector=
index 0718ab61162a014a1992c275d43e9fdba9ba1804..f2bd0a04a9a6f8495e08b51a5bb48eb832b75bd5 100644 (file)
@@ -109,7 +109,6 @@ AM_CPPFLAGS = $(GPROFNG_CPPFLAGS) -DLOCALEDIR=\"@localedir@\" -I.. -I$(srcdir) \
        -I$(srcdir)/../../include -I$(srcdir)/../../opcodes \
        -I../../bfd -I$(srcdir)/../../bfd $(ZLIBINC)
 AM_CFLAGS = $(GPROFNG_CFLAGS) $(PTHREAD_CFLAGS) \
-       $(GPROFNG_NO_FORMAT_TRUNCATION_CFLAGS) \
        $(GPROFNG_NO_SWITCH_CFLAGS)
 AM_CXXFLAGS = $(AM_CFLAGS)
 
index 1de9b36c2b77d8fa2ad05a2554c92c9b0b4dd3f4..5101b3930fadb8cdb92a8dd7fa857221f844f33b 100644 (file)
@@ -540,7 +540,6 @@ AM_CPPFLAGS = $(GPROFNG_CPPFLAGS) -DLOCALEDIR=\"@localedir@\" -I.. -I$(srcdir) \
        -I../../bfd -I$(srcdir)/../../bfd $(ZLIBINC)
 
 AM_CFLAGS = $(GPROFNG_CFLAGS) $(PTHREAD_CFLAGS) \
-       $(GPROFNG_NO_FORMAT_TRUNCATION_CFLAGS) \
        $(GPROFNG_NO_SWITCH_CFLAGS)
 
 AM_CXXFLAGS = $(AM_CFLAGS)
index edc70256a684c4475a55909f73c355913a6aefb2..06ba33d5b6968c6b00b263cead6c8b6e61d61b1a 100644 (file)
@@ -95,11 +95,6 @@ extern "C"
 /*
  * Fatal error handlers
  */
-extern "C" void fatalErrorHadler (int sig, siginfo_t *info, void *context);
-extern "C" void sigSEGV_handler (int sig, siginfo_t *info, void *context);
-extern "C" void sigABRT_handler (int sig, siginfo_t *info, void *context);
-static char fatalErrorBuffer1[1024 * 8];
-static char fatalErrorBuffer2[1024 * 8];
 static int fatalErrorCode = 1;
 static int fatalErrorCounter = 0;
 static void *fatalErrorContext = 0;
@@ -127,38 +122,24 @@ fatalErrorHadler (int sig, siginfo_t *info, void *context)
   // Get process ID
   pid_t pid = getpid ();
   // Create dump file
-  snprintf (fatalErrorBuffer1, sizeof (fatalErrorBuffer1), "/tmp/analyzer.%lld",
-           (long long) pid);
-  mkdir (fatalErrorBuffer1, 0700);
-  snprintf (fatalErrorBuffer1, sizeof (fatalErrorBuffer1),
-           "/tmp/analyzer.%lld/crash.sig%d.%lld", (long long) pid, sig,
-           (long long) pid);
+  char fname[128];
+  snprintf (fname, sizeof (fname), "/tmp/gprofng.%lld", (long long) pid);
+  mkdir (fname, 0700);
+  snprintf (fname, sizeof (fname), "/tmp/gprofng.%lld/crash.sig%d.%lld",
+           (long long) pid, sig, (long long) pid);
   // Dump stack trace in background using pstack
-  snprintf (fatalErrorBuffer2, sizeof (fatalErrorBuffer2),
-           "/usr/bin/pstack %lld > %s.pstack", (long long) pid, fatalErrorBuffer1);
-  system (fatalErrorBuffer2);
-  int fd = creat (fatalErrorBuffer1, 0600);
+  char buf[256];
+  snprintf (buf, sizeof (buf), "/usr/bin/pstack %lld > %s.pstack",
+           (long long) pid, fname);
+  system (buf);
+  int fd = creat (fname, 0600);
   if (fd >= 0)
     {
       // Write error message
-      snprintf (fatalErrorBuffer2, sizeof (fatalErrorBuffer2),
-               "A fatal error has been detected by er_print: Signal %lld\n",
-               (long long) sig);
-      write (fd, fatalErrorBuffer2, strlen (fatalErrorBuffer2));
-//      snprintf (fatalErrorBuffer2, sizeof (fatalErrorBuffer2),
-//                "If you would like to submit a bug report, please use your support contract.\n"));
-//      write(fd, fatalErrorBuffer2, strlen(fatalErrorBuffer2));
-      snprintf (fatalErrorBuffer2, sizeof (fatalErrorBuffer2),
-               "Protocol Version: %d\n", IPC_VERSION_NUMBER);
-      write (fd, fatalErrorBuffer2, strlen (fatalErrorBuffer2));
+      dbe_write (fd, "A fatal error has been detected by er_print: Signal %d\n",
+                sig);
+      dbe_write (fd, "Protocol Version: %d\n", IPC_VERSION_NUMBER);
       close (fd);
-      // Send postmortem error message to the GUI
-      // snprintf(fatalErrorBuffer1, sizeof (fatalErrorBuffer1),
-      //         "%s: %s: /tmp/analyzer.%lld",
-      //         "Unexpected signal in er_print",
-      //         "Crash dump",
-      //         (long long) pid);
-      // res = write(2, fatalErrorBuffer2, strlen(fatalErrorBuffer1));
     }
   wait (0); // wait for pstack
   //sleep(10); // Wait 10 seconds to make sure processing of fatal error is done
index eaed8ee73492045225749e819f5a2c48ee2f4e65..cdbe0cea9a5e0f7d73b7f55abc882520d25900f7 100644 (file)
@@ -33,6 +33,7 @@
 #include "PRBTree.h"
 #include "Sample.h"
 #include "Elf.h"
+#include "StringBuilder.h"
 
 void
 Experiment::mrec_insert (MapRecord *mrec)
@@ -883,10 +884,12 @@ Experiment::process_Linux_kernel_cmd (hrtime_t ts)
 
          if (sym_text)
            {
-             char fname[128];
-             snprintf (fname, sizeof (fname), "%s`%s", mod_name, sym_name);
+             StringBuilder sb;
+             sb.appendf ("%s`%s", mod_name, sym_name);
+             char *fname = sb.toString ();
              Function *func = dbeSession->createFunction ();
              func->set_name (fname);
+             free (fname);
              func->size = sym_size;
              func->img_offset = sym_addr;
              func->module = mod;