Upgrade to valgrind 3.13.0 (15 June 2017).

Release 3.13.0 (15 June 2017)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

3.13.0 is a feature release with many improvements and the usual collection of
bug fixes.

This release supports X86/Linux, AMD64/Linux, ARM32/Linux, ARM64/Linux,
PPC32/Linux, PPC64BE/Linux, PPC64LE/Linux, S390X/Linux, MIPS32/Linux,
MIPS64/Linux, ARM/Android, ARM64/Android, MIPS32/Android, X86/Android,
X86/Solaris, AMD64/Solaris and AMD64/MacOSX 10.12.

* ==================== CORE CHANGES ===================

* The translation cache size has been increased to keep up with the demands of
  large applications.  The maximum number of sectors has increased from 24 to
  48.  The default number of sectors has increased from 16 to 32 on all
  targets except Android, where the increase is from 6 to 12.

* The amount of memory that Valgrind can use has been increased from 64GB to
  128GB.  In particular this means your application can allocate up to about
  60GB when running on Memcheck.

* Valgrind's default load address has been changed from 0x3800'0000 to
  0x5800'0000, so as to make it possible to load larger executables.  This
  should make it possible to load executables of size at least 1200MB.

* A massive spaceleak caused by reading compressed debuginfo files has been
  fixed.  Valgrind should now be entirely usable with gcc-7.0 "-gz" created
  debuginfo.

* The C++ demangler has been updated.

* Support for demangling Rust symbols has been added.

* A new representation of stack traces, the "XTree", has been added.  An XTree
  is a tree of stacktraces with data associated with the stacktraces.  This is
  used by various tools (Memcheck, Helgrind, Massif) to report on the heap
  consumption of your program.  Reporting is controlled by the new options
  --xtree-memory=none|allocs|full and --xtree-memory-file=<file>.

  A report can also be produced on demand using the gdbserver monitor command
  'xtmemory [<filename>]>'.  The XTree can be output in 2 formats: 'callgrind
  format' and 'massif format. The existing visualisers for these formats (e.g.
  callgrind_annotate, KCachegrind, ms_print) can be used to visualise and
  analyse these reports.

  Memcheck can also produce XTree leak reports using the Callgrind file
  format.  For more details, see the user manual.

* ================== PLATFORM CHANGES =================

* ppc64: support for ISA 3.0B and various fixes for existing 3.0 support

* amd64: fixes for JIT failure problems on long AVX2 code blocks

* amd64 and x86: support for CET prefixes has been added

* arm32: a few missing ARMv8 instructions have been implemented

* arm64, mips64, mips32: an alternative implementation of Load-Linked and
  Store-Conditional instructions has been added.  This is to deal with
  processor implementations that implement the LL/SC specifications strictly
  and as a result cause Valgrind to hang in certain situations.  The
  alternative implementation is automatically enabled at startup, as required.
  You can use the option --sim-hints=fallback-llsc to force-enable it if you
  want.

* Support for OSX 10.12 has been improved.

* On Linux, clone handling has been improved to honour CLONE_VFORK that
  involves a child stack.  Note however that CLONE_VFORK | CLONE_VM is handled
  like CLONE_VFORK (by removing CLONE_VM), so applications that depend on
  CLONE_VM exact semantics will (still) not work.

* The TileGX/Linux port has been removed because it appears to be both unused
  and unsupported.

* ==================== TOOL CHANGES ====================

* Memcheck:

  - Memcheck should give fewer false positives when running optimised
    Clang/LLVM generated code.

  - Support for --xtree-memory and 'xtmemory [<filename>]>'.

  - New command line options --xtree-leak=no|yes and --xtree-leak-file=<file>
    to produce the end of execution leak report in a xtree callgrind format
    file.

  - New option 'xtleak' in the memcheck leak_check monitor command, to produce
    the leak report in an xtree file.

* Massif:

  - Support for --xtree-memory and 'xtmemory [<filename>]>'.

  - For some workloads (typically, for big applications), Massif memory
    consumption and CPU consumption has decreased significantly.

* Helgrind:

  - Support for --xtree-memory and 'xtmemory [<filename>]>'.

  - addition of client request VALGRIND_HG_GNAT_DEPENDENT_MASTER_JOIN, useful
    for Ada gnat compiled applications.

* ==================== OTHER CHANGES ====================

* For Valgrind developers: in an outer/inner setup, the outer Valgrind will
  append the inner guest stacktrace to the inner host stacktrace.  This helps
  to investigate the errors reported by the outer, when they are caused by the
  inner guest program (such as an inner regtest).  See README_DEVELOPERS for
  more info.

* To allow fast detection of callgrind files by desktop environments and file
  managers, the format was extended to have an optional first line that
  uniquely identifies the format ("# callgrind format").  Callgrind creates
  this line now, as does the new xtree functionality.

* File name template arguments (such as --log-file, --xtree-memory-file, ...)
  have a new %n format letter that is replaced by a sequence number.

* "--version -v" now shows the SVN revision numbers from which Valgrind was
  built.

* ==================== FIXED BUGS ====================

The following bugs have been fixed or resolved.  Note that "n-i-bz"
stands for "not in bugzilla" -- that is, a bug that was reported to us
but never got a bugzilla entry.  We encourage you to file bugs in
bugzilla (https://bugs.kde.org/enter_bug.cgi?product=valgrind) rather
than mailing the developers (or mailing lists) directly -- bugs that
are not entered into bugzilla tend to get forgotten about or ignored.

To see details of a given bug, visit
  https://bugs.kde.org/show_bug.cgi?id=XXXXXX
where XXXXXX is the bug number as listed below.

162848  --log-file output isn't split when a program forks
340777  Illegal instruction on mips (ar71xx)
341481  MIPS64: Iop_CmpNE32 triggers false warning on MIPS64 platforms
342040  Valgrind mishandles clone with CLONE_VFORK | CLONE_VM that clones
        to a different stack.
344139  x86 stack-seg overrides, needed by the Wine people
344524  store conditional of guest applications always fail - observed on
        Octeon3(MIPS)
348616  Wine/valgrind: noted but unhandled ioctl 0x5390 [..] (DVD_READ_STRUCT)
352395  Please provide SVN revision info in --version -v
352767  Wine/valgrind: noted but unhandled ioctl 0x5307 [..] (CDROMSTOP)
356374  Assertion 'DRD_(g_threadinfo)[tid].pt_threadid !=
        INVALID_POSIX_THREADID' failed
358213  helgrind/drd bar_bad testcase hangs or crashes with new glibc pthread
        barrier implementation
358697  valgrind.h: Some code remains even when defining NVALGRIND
359202  Add musl libc configure/compile
360415  amd64 instructions ADCX and ADOX are not implemented in VEX
        == 372828 (vex amd64->IR: 0x66 0xF 0x3A 0x62 0x4A 0x10)
360429  unhandled ioctl 0x530d with no size/direction hints (CDROMREADMODE1)
362223  assertion failed when .valgrindrc is a directory instead of a file
367543  bt/btc/btr/bts x86/x86_64 instructions are poorly-handled wrt flags
367942  Segfault vgPlain_do_sys_sigaction (m_signals.c:1138)
368507  can't malloc chunks larger than about 34GB
368529  Android arm target link error, missing atexit and pthread_atfork
368863  WARNING: unhandled arm64-linux syscall: 100 (get_robust_list)
368865  WARNING: unhandled arm64-linux syscall: 272 (kcmp)
368868  disInstr(arm64): unhandled instruction 0xD53BE000 = cntfrq_el0 (ARMv8)
368917  WARNING: unhandled arm64-linux syscall: 218 (request_key)
368918  WARNING: unhandled arm64-linux syscall: 127 (sched_rr_get_interval)
368922  WARNING: unhandled arm64-linux syscall: 161 (sethostname)
368924  WARNING: unhandled arm64-linux syscall: 84 (sync_file_range)
368925  WARNING: unhandled arm64-linux syscall: 130 (tkill)
368926  WARNING: unhandled arm64-linux syscall: 97 (unshare)
369459  valgrind on arm64 violates the ARMv8 spec (ldxr/stxr)
370028  Reduce the number of compiler warnings on MIPS platforms
370635  arm64 missing syscall getcpu
371225  Fix order of timer_{gettime,getoverrun,settime} syscalls on arm64
371227  Clean AArch64 syscall table
371412  Rename wrap_sys_shmat to sys_shmat like other wrappers
371471  Valgrind complains about non legit memory leaks on placement new (C++)
371491  handleAddrOverrides() is [incorrect] when ASO prefix is used
371503  disInstr(arm64): unhandled instruction 0xF89F0000
371869  support '%' in symbol Z-encoding
371916  execution tree xtree concept
372120  c++ demangler demangles symbols which are not c++
372185  Support of valgrind on ARMv8 with 32 bit executable
372188  vex amd64->IR: 0x66 0xF 0x3A 0x62 0x4A 0x10 0x10 0x48 (PCMPxSTRx $0x10)
372195  Power PC, xxsel instruction is not always recognized.
372504  Hanging on exit_group
372600  process loops forever when fatal signals are arriving quickly
372794  LibVEX (arm32 front end): 'Assertion szBlg2 <= 3' failed
373046  Stacks registered by core are never deregistered
373069  memcheck/tests/leak_cpp_interior fails with GCC 5.1+
373086  Implement additional Xen hypercalls
373192  Calling posix_spawn in glibc 2.24 completely broken
373488  Support for fanotify API on ARM64 architecture
== 368864  WARNING: unhandled arm64-linux syscall: 262 (fanotify_init)
373555  Rename BBPTR to GSPTR as it denotes guest state pointer only
373938  const IRExpr arguments for matchIRExpr()
374719  some spelling fixes
374963  increase valgrind's load address to prevent mmap failure
375514  valgrind_get_tls_addr() does not work in case of static TLS
375772  +1 error in get_elf_symbol_info() when computing value of 'hi' address
        for ML_(find_rx_mapping)()
375806  Test helgrind/tests/tc22_exit_w_lock fails with glibc 2.24
375839  Temporary storage exhausted, with long sequence of vfmadd231ps insns
        == 377159  "vex: the `impossible' happened" still present
        == 375150  Assertion 'tres.status == VexTransOK' failed
        == 378068  valgrind crashes on AVX2 function in FFmpeg
376142  Segfaults on MIPS Cavium Octeon boards
376279  disInstr(arm64): unhandled instruction 0xD50320FF
376455  Solaris: unhandled syscall lgrpsys(180)
376518  Solaris: unhandled fast trap getlgrp(6)
376611  ppc64 and arm64 don't know about prlimit64 syscall
376729  PPC64, remove R2 from the clobber list
        == 371668
376956  syswrap of SNDDRV and DRM_IOCTL_VERSION causing some addresses
        to be wrongly marked as addressable
377066  Some Valgrind unit tests fail to compile on Ubuntu 16.10 with
        PIE enabled by default
377376  memcheck/tests/linux/getregset fails with glibc2.24
377427  PPC64, lxv instruction failing on odd destination register
377478  PPC64: ISA 3.0 setup fixes
377698  Missing memory check for futex() uaddr arg for FUTEX_WAKE
        and FUTEX_WAKE_BITSET, check only 4 args for FUTEX_WAKE_BITSET,
        and 2 args for FUTEX_TRYLOCK_PI
377717  Fix massive space leak when reading compressed debuginfo sections
377891  Update Xen 4.6 domctl wrappers
377930  fcntl syscall wrapper is missing flock structure check
378524  libvexmultiarch_test regression on s390x and ppc64
378535  Valgrind reports INTERNAL ERROR in execve syscall wrapper
378673  Update libiberty demangler
378931  Add ISA 3.0B additional isnstructions, add OV32, CA32 setting support
379039  syscall wrapper for prctl(PR_SET_NAME) must not check more than 16 bytes
379094  Valgrind reports INTERNAL ERROR in rt_sigsuspend syscall wrapper
379371  UNKNOWN task message [id 3444, to mach_task_self(), reply 0x603]
        (task_register_dyld_image_infos)
379372  UNKNOWN task message [id 3447, to mach_task_self(), reply 0x603]
        (task_register_dyld_shared_cache_image_info)
379390  unhandled syscall: mach:70 (host_create_mach_voucher_trap)
379473  MIPS: add support for rdhwr cycle counter register
379504  remove TileGX/Linux port
379525  Support more x86 nop opcodes
379838  disAMode(x86): not an addr!
379703  PC ISA 3.0 fixes: stxvx, stxv, xscmpexpdp instructions
379890  arm: unhandled instruction: 0xEBAD 0x1B05 (sub.w fp, sp, r5, lsl #4)
379895  clock_gettime does not execute POST syscall wrapper
379925  PPC64, mtffs does not set the FPCC and C bits in the FPSCR correctly
379966  WARNING: unhandled amd64-linux syscall: 313 (finit_module)
380200  xtree generated callgrind files refer to files without directory name
380202  Assertion failure for cache line size (cls == 64) on aarch64.
380397  s390x: __GI_strcspn() replacement needed
n-i-bz  Fix pub_tool_basics.h build issue with g++ 4.4.7.

(3.13.0.RC1:  2 June 2017, vex r3386, valgrind r16434)
(3.13.0.RC2:  9 June 2017, vex r3389, valgrind r16443)
(3.13.0:     14 June 2017, vex r3396, valgrind r16446)

Bug: N/A
Test: manual
Change-Id: Id4498a49f462c3689cbcb35c15f96a8c7e3cea17
diff --git a/callgrind/Makefile.in b/callgrind/Makefile.in
index ce86b54..c6f9bcc 100644
--- a/callgrind/Makefile.in
+++ b/callgrind/Makefile.in
@@ -345,6 +345,7 @@
 FLAG_MMMX = @FLAG_MMMX@
 FLAG_MSSE = @FLAG_MSSE@
 FLAG_NO_BUILD_ID = @FLAG_NO_BUILD_ID@
+FLAG_NO_PIE = @FLAG_NO_PIE@
 FLAG_OCTEON = @FLAG_OCTEON@
 FLAG_OCTEON2 = @FLAG_OCTEON2@
 FLAG_T_TEXT = @FLAG_T_TEXT@
@@ -516,6 +517,7 @@
 AM_CPPFLAGS_@VGCONF_PLATFORM_PRI_CAPS@ = \
 	-I$(top_srcdir) \
 	-I$(top_srcdir)/include \
+	-I$(top_builddir)/include \
 	-I$(top_srcdir)/VEX/pub \
 	-I$(top_builddir)/VEX/pub \
 	-DVGA_@VGCONF_ARCH_PRI@=1 \
@@ -526,6 +528,7 @@
 @VGCONF_HAVE_PLATFORM_SEC_TRUE@AM_CPPFLAGS_@VGCONF_PLATFORM_SEC_CAPS@ = \
 @VGCONF_HAVE_PLATFORM_SEC_TRUE@	-I$(top_srcdir) \
 @VGCONF_HAVE_PLATFORM_SEC_TRUE@	-I$(top_srcdir)/include \
+@VGCONF_HAVE_PLATFORM_SEC_TRUE@	-I$(top_builddir)/include \
 @VGCONF_HAVE_PLATFORM_SEC_TRUE@	-I$(top_srcdir)/VEX/pub \
 @VGCONF_HAVE_PLATFORM_SEC_TRUE@	-I$(top_builddir)/VEX/pub \
 @VGCONF_HAVE_PLATFORM_SEC_TRUE@	-DVGA_@VGCONF_ARCH_SEC@=1 \
@@ -600,8 +603,6 @@
 				$(AM_CFLAGS_PSO_BASE)
 
 AM_CCASFLAGS_MIPS64_LINUX = @FLAG_M64@ -g @FLAG_MIPS64@
-AM_CFLAGS_TILEGX_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE)
-AM_CFLAGS_PSO_TILEGX_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE)
 AM_FLAG_M3264_X86_SOLARIS = @FLAG_M32@
 AM_CFLAGS_X86_SOLARIS = @FLAG_M32@ @PREFERRED_STACK_BOUNDARY_2@ \
 				$(AM_CFLAGS_BASE) -fomit-frame-pointer \
@@ -646,7 +647,6 @@
 PRELOAD_LDFLAGS_S390X_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@
 PRELOAD_LDFLAGS_MIPS32_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@
 PRELOAD_LDFLAGS_MIPS64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@
-PRELOAD_LDFLAGS_TILEGX_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@
 PRELOAD_LDFLAGS_X86_SOLARIS = $(PRELOAD_LDFLAGS_COMMON_SOLARIS) @FLAG_M32@
 PRELOAD_LDFLAGS_AMD64_SOLARIS = $(PRELOAD_LDFLAGS_COMMON_SOLARIS) @FLAG_M64@
 
@@ -724,9 +724,6 @@
 	-static -nodefaultlibs -nostartfiles -u __start @FLAG_NO_BUILD_ID@ \
 	@FLAG_M64@
 
-TOOL_LDFLAGS_TILEGX_LINUX = \
-	$(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M64@
-
 TOOL_LDFLAGS_X86_SOLARIS = \
 	$(TOOL_LDFLAGS_COMMON_SOLARIS) @FLAG_M32@
 
@@ -781,9 +778,6 @@
 LIBREPLACEMALLOC_MIPS64_LINUX = \
 	$(top_builddir)/coregrind/libreplacemalloc_toolpreload-mips64-linux.a
 
-LIBREPLACEMALLOC_TILEGX_LINUX = \
-	$(top_builddir)/coregrind/libreplacemalloc_toolpreload-tilegx-linux.a
-
 LIBREPLACEMALLOC_X86_SOLARIS = \
 	$(top_builddir)/coregrind/libreplacemalloc_toolpreload-x86-solaris.a
 
@@ -846,11 +840,6 @@
 	$(LIBREPLACEMALLOC_MIPS64_LINUX) \
 	-Wl,--no-whole-archive
 
-LIBREPLACEMALLOC_LDFLAGS_TILEGX_LINUX = \
-	-Wl,--whole-archive \
-	$(LIBREPLACEMALLOC_TILEGX_LINUX) \
-	-Wl,--no-whole-archive
-
 LIBREPLACEMALLOC_LDFLAGS_X86_SOLARIS = \
 	-Wl,--whole-archive \
 	$(LIBREPLACEMALLOC_X86_SOLARIS) \
diff --git a/callgrind/bb.c b/callgrind/bb.c
index ceea5b9..b5459cf 100644
--- a/callgrind/bb.c
+++ b/callgrind/bb.c
@@ -6,7 +6,7 @@
 /*
    This file is part of Callgrind, a Valgrind tool for call tracing.
 
-   Copyright (C) 2002-2015, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
+   Copyright (C) 2002-2017, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/callgrind/bbcc.c b/callgrind/bbcc.c
index e9426e5..5716b07 100644
--- a/callgrind/bbcc.c
+++ b/callgrind/bbcc.c
@@ -6,7 +6,7 @@
 /*
    This file is part of Callgrind, a Valgrind tool for call tracing.
 
-   Copyright (C) 2002-2015, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
+   Copyright (C) 2002-2017, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/callgrind/callgrind.h b/callgrind/callgrind.h
index 33b0e29..f078cc8 100644
--- a/callgrind/callgrind.h
+++ b/callgrind/callgrind.h
@@ -13,7 +13,7 @@
    This file is part of callgrind, a valgrind tool for cache simulation
    and call tree tracing.
 
-   Copyright (C) 2003-2015 Josef Weidendorfer.  All rights reserved.
+   Copyright (C) 2003-2017 Josef Weidendorfer.  All rights reserved.
 
    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
@@ -109,7 +109,7 @@
 
 /* Start full callgrind instrumentation if not already switched on.
    When cache simulation is done, it will flush the simulated cache;
-   this will lead to an artifical cache warmup phase afterwards with
+   this will lead to an artificial cache warmup phase afterwards with
    cache misses which would not have happened in reality. */
 #define CALLGRIND_START_INSTRUMENTATION                              \
   VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__START_INSTRUMENTATION, \
diff --git a/callgrind/callgrind_annotate.in b/callgrind/callgrind_annotate.in
index 82f6f05..4f28129 100644
--- a/callgrind/callgrind_annotate.in
+++ b/callgrind/callgrind_annotate.in
@@ -8,11 +8,11 @@
 #  This file is part of Callgrind, a cache-simulator and call graph
 #  tracer built on Valgrind.
 #
-#  Copyright (C) 2003-2015 Josef Weidendorfer
+#  Copyright (C) 2003-2017 Josef Weidendorfer
 #     Josef.Weidendorfer@gmx.de
 #
 #  This file is based heavily on cg_annotate, part of Valgrind.
-#  Copyright (C) 2002-2015 Nicholas Nethercote
+#  Copyright (C) 2002-2017 Nicholas Nethercote
 #     njn@valgrind.org
 #
 #  This program is free software; you can redistribute it and/or
@@ -429,6 +429,9 @@
 	$has_line = ($positions =~ /line/);
 	$has_addr = ($positions =~ /(addr|instr)/);
       }
+      elsif (/^event:\s+.*$/) { 
+        # ignore lines giving a long name to an event
+      }
       elsif (/^events:\s+(.*)$/) {
 	$events = $1;
 	
@@ -1216,9 +1219,17 @@
     if ($did_annotations) {
         my $percent_printed_CC;
         foreach (my $i = 0; $i < @$summary_CC; $i++) {
-            $percent_printed_CC->[$i] = 
-                sprintf("%.0f", 
-                        $printed_totals_CC->[$i] / $summary_CC->[$i] * 100);
+            # Some files (in particular the files produced by --xtree-memory)
+            # have non additive self costs, so have a special case for these
+            # to print all functions and also to avoid a division by 0.
+            if ($summary_CC->[$i] == 0
+                || $printed_totals_CC->[$i] > $summary_CC->[$i]) {
+                $percent_printed_CC->[$i] = "100";
+            } else {
+                $percent_printed_CC->[$i] = 
+                    sprintf("%.0f", 
+                            $printed_totals_CC->[$i] / $summary_CC->[$i] * 100);
+            }
         }
         my $pp_CC_col_widths = compute_CC_col_widths($percent_printed_CC);
         print($fancy);
diff --git a/callgrind/callgrind_control.in b/callgrind/callgrind_control.in
index 7660259..4c57ccf 100644
--- a/callgrind/callgrind_control.in
+++ b/callgrind/callgrind_control.in
@@ -7,7 +7,7 @@
 #  This file is part of Callgrind, a cache-simulator and call graph
 #  tracer built on Valgrind.
 #
-#  Copyright (C) 2003-2015 Josef Weidendorfer <Josef.Weidendorfer@gmx.de>
+#  Copyright (C) 2003-2017 Josef Weidendorfer <Josef.Weidendorfer@gmx.de>
 #
 #  This program is free software; you can redistribute it and/or
 #  modify it under the terms of the GNU General Public License as
diff --git a/callgrind/callstack.c b/callgrind/callstack.c
index abe5126..3b06db1 100644
--- a/callgrind/callstack.c
+++ b/callgrind/callstack.c
@@ -6,7 +6,7 @@
 /*
    This file is part of Callgrind, a Valgrind tool for call tracing.
 
-   Copyright (C) 2002-2015, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
+   Copyright (C) 2002-2017, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/callgrind/clo.c b/callgrind/clo.c
index fa76f1e..b26ddd6 100644
--- a/callgrind/clo.c
+++ b/callgrind/clo.c
@@ -2,10 +2,10 @@
    This file is part of Callgrind, a Valgrind tool for call graph
    profiling programs.
 
-   Copyright (C) 2002-2015, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
+   Copyright (C) 2002-2017, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
 
    This tool is derived from and contains lot of code from Cachegrind
-   Copyright (C) 2002-2015 Nicholas Nethercote (njn@valgrind.org)
+   Copyright (C) 2002-2017 Nicholas Nethercote (njn@valgrind.org)
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/callgrind/context.c b/callgrind/context.c
index 33f7386..a7532b6 100644
--- a/callgrind/context.c
+++ b/callgrind/context.c
@@ -6,7 +6,7 @@
 /*
    This file is part of Callgrind, a Valgrind tool for call tracing.
 
-   Copyright (C) 2002-2015, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
+   Copyright (C) 2002-2017, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/callgrind/costs.c b/callgrind/costs.c
index 5071170..32d8d87 100644
--- a/callgrind/costs.c
+++ b/callgrind/costs.c
@@ -6,7 +6,7 @@
 /*
    This file is part of Callgrind, a Valgrind tool for call tracing.
 
-   Copyright (C) 2002-2015, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
+   Copyright (C) 2002-2017, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/callgrind/costs.h b/callgrind/costs.h
index 25ad7c3..de88f5c 100644
--- a/callgrind/costs.h
+++ b/callgrind/costs.h
@@ -6,7 +6,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2015 Josef Weidendorfer
+   Copyright (C) 2004-2017 Josef Weidendorfer
       josef.weidendorfer@gmx.de
 
    This program is free software; you can redistribute it and/or
diff --git a/callgrind/debug.c b/callgrind/debug.c
index 6e8215c..4a8b9b0 100644
--- a/callgrind/debug.c
+++ b/callgrind/debug.c
@@ -2,10 +2,10 @@
    This file is part of Callgrind, a Valgrind tool for call graph
    profiling programs.
 
-   Copyright (C) 2002-2015, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
+   Copyright (C) 2002-2017, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
 
    This tool is derived from and contains lot of code from Cachegrind
-   Copyright (C) 2002-2015 Nicholas Nethercote (njn@valgrind.org)
+   Copyright (C) 2002-2017 Nicholas Nethercote (njn@valgrind.org)
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/callgrind/docs/cl-format.xml b/callgrind/docs/cl-format.xml
index 182b199..77fe5df 100644
--- a/callgrind/docs/cl-format.xml
+++ b/callgrind/docs/cl-format.xml
@@ -6,10 +6,7 @@
 <chapter id="cl-format" xreflabel="Callgrind Format Specification">
 <title>Callgrind Format Specification</title>
 
-<para>This chapter describes the Callgrind Profile Format, Version 1.</para>
-
-<para>A synonymous name is "Calltree Profile Format". These names actually mean
-the same since Callgrind was previously named Calltree.</para>
+<para>This chapter describes the Callgrind Format, Version 1.</para>
 
 <para>The format description is meant for the user to be able to understand the
 file contents; but more important, it is given for authors of measurement or
@@ -29,6 +26,10 @@
 <sect2 id="cl-format.overview.basics" xreflabel="Basic Structure">
 <title>Basic Structure</title>
 
+<para>To uniquely specify that a file is a callgrind profile, it
+should add "# callgrind format" as first line. This is optional but
+recommended for easy format detection.</para>
+
 <para>Each file has a header part of an arbitrary number of lines of the
 format "key: value". After the header, lines specifying profile costs
 follow. Everywhere, comments on own lines starting with '#' are allowed.
@@ -58,7 +59,8 @@
 However, any profiling tool could use the format described in this chapter.</para>
 
 <para>
-<screen>events: Cycles Instructions Flops
+<screen># callgrind format
+events: Cycles Instructions Flops
 fl=file.f
 fn=main
 15 90 14 2
@@ -130,7 +132,9 @@
 <function>main</function> calls <function>func1</function> once and
 <function>func2</function> 3 times. <function>func1</function> calls
 <function>func2</function> 2 times.
-<screen>events: Instructions
+
+<screen># callgrind format
+events: Instructions
 
 fl=file1.c
 fn=main
@@ -186,8 +190,9 @@
 mapping. There is a separate ID mapping for each position specification,
 i.e. you can use ID 1 for both a file name and a symbol name.</para>
 
-<para>With string compression, the example from 1.4 looks like this:
-<screen>events: Instructions
+<para>With string compression, the example from above looks like this:
+<screen># callgrind format
+events: Instructions
 
 fl=(1) file1.c
 fn=(1) main
@@ -216,7 +221,8 @@
 everywhere in the file without any negative consequence. Especially, you can
 define name compression mappings directly after the header, and before any cost
 lines. Thus, the above example can also be written as
-<screen>events: Instructions
+<screen># callgrind format
+events: Instructions
 
 # define file ID mapping
 fl=(1) file1.c
@@ -256,7 +262,8 @@
 absolute and relative subposition specifications can be mixed freely.
 Assume the following example (subpositions can always be specified
 as hexadecimal numbers, beginning with "0x"):
-<screen>positions: instr line
+<screen># callgrind format
+positions: instr line
 events: ticks
 
 fn=func
@@ -265,7 +272,8 @@
 0x80001238 91 6</screen></para>
 
 <para>With subposition compression, this looks like
-<screen>positions: instr line
+<screen># callgrind format
+positions: instr line
 events: ticks
 
 fn=func
@@ -326,7 +334,8 @@
 <title>Grammar</title>
 
 <para>
-<screen>ProfileDataFile := FormatVersion? Creator? PartData*</screen>
+<screen>ProfileDataFile := FormatSpec? FormatVersion? Creator? PartData*</screen>
+<screen>FormatSpec := "# callgrind format\n"</screen>
 <screen>FormatVersion := "version: 1\n"</screen>
 <screen>Creator := "creator:" NoNewLineChar* "\n"</screen>
 <screen>PartData := (HeaderLine "\n")+ (BodyLine "\n")+</screen>
@@ -379,7 +388,7 @@
 </para>
 
 <para>A profile data file ("ProfileDataFile") starts with basic information
-  such as the version and creator information, and then has a list of parts, where
+  such as a format marker, the version and creator information, and then has a list of parts, where
   each part has its own header and body. Parts typically are different threads
   and/or time spans/phases within a profiled application run.</para>
 
@@ -396,11 +405,23 @@
 
 <itemizedlist>
   <listitem>
+    <para><computeroutput># callgrind format</computeroutput> [Callgrind]</para>
+    <para>This line specifies that the file is a callgrind profile,
+      and it has to be the first line. It was added late to the
+      format (with Valgrind 3.13) and is optional, as all readers also
+      should work with older callgrind profiles not including this line.
+      However, generation of this line is recommended to allow desktop
+      environments and file managers to uniquely detect the format.</para>
+  </listitem>
+
+  <listitem>
     <para><computeroutput>version: number</computeroutput> [Callgrind]</para>
     <para>This is used to distinguish future profile data formats.  A 
     major version of 0 or 1 is supposed to be upwards compatible with 
     Cachegrind's format.  It is optional; if not appearing, version 1 
-    is assumed.  Otherwise, this has to be the first header line.</para>
+    is assumed.  Otherwise, it has to follow directly after the format
+    specification (i.e. be the first line if the optional format
+    specification is skipped).</para>
   </listitem>
 
   <listitem>
diff --git a/callgrind/docs/cl-manual.xml b/callgrind/docs/cl-manual.xml
index 508094e..a5f8c4b 100644
--- a/callgrind/docs/cl-manual.xml
+++ b/callgrind/docs/cl-manual.xml
@@ -316,7 +316,7 @@
     what is happening within a given function or starting from a given
     program phase. To this end, you can disable event aggregation for
     uninteresting program parts. While attribution of events to
-    functions as well as producing seperate output per program phase
+    functions as well as producing separate output per program phase
     can be done by other means (see previous section), there are two
     benefits by disabling aggregation. First, this is very
     fine-granular (e.g. just for a loop within a function).  Second,
@@ -432,7 +432,7 @@
   cycles, this does not hold true: callees of a function in a cycle include
   the function itself. Therefore, KCachegrind does cycle detection
   and skips visualization of any inclusive cost for calls inside
-  of cycles. Further, all functions in a cycle are collapsed into artifical
+  of cycles. Further, all functions in a cycle are collapsed into artificial
   functions called like <computeroutput>Cycle 1</computeroutput>.</para>
 
   <para>Now, when a program exposes really big cycles (as is
@@ -1194,7 +1194,7 @@
     <listitem>
       <para>Start full Callgrind instrumentation if not already enabled.
       When cache simulation is done, this will flush the simulated cache
-      and lead to an artifical cache warmup phase afterwards with
+      and lead to an artificial cache warmup phase afterwards with
       cache misses which would not have happened in reality.  See also
       option <option><xref linkend="opt.instr-atstart"/></option>.</para>
     </listitem>
@@ -1257,6 +1257,8 @@
     </term>
     <listitem>
       <para>Sort columns by events A,B,C [event column order].</para>
+      <para>Optionally, each event is followed by a : and a threshold,
+        to specify different thresholds depending on the event.</para>
     </listitem>
   </varlistentry>
 
diff --git a/callgrind/dump.c b/callgrind/dump.c
index 8907995..1997c71 100644
--- a/callgrind/dump.c
+++ b/callgrind/dump.c
@@ -6,7 +6,7 @@
 /*
    This file is part of Callgrind, a Valgrind tool for call tracing.
 
-   Copyright (C) 2002-2015, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
+   Copyright (C) 2002-2017, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -1215,6 +1215,9 @@
 
 
     if (!appending) {
+	/* callgrind format specification, has to be on 1st line */
+	VG_(fprintf)(fp, "# callgrind format\n");
+
 	/* version */
 	VG_(fprintf)(fp, "version: 1\n");
 
diff --git a/callgrind/events.c b/callgrind/events.c
index e7ca68e..a3925e9 100644
--- a/callgrind/events.c
+++ b/callgrind/events.c
@@ -6,7 +6,7 @@
 /*
    This file is part of Callgrind, a Valgrind tool for call tracing.
 
-   Copyright (C) 2002-2015, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
+   Copyright (C) 2002-2017, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/callgrind/events.h b/callgrind/events.h
index b38b3c3..b45893f 100644
--- a/callgrind/events.h
+++ b/callgrind/events.h
@@ -6,7 +6,7 @@
 /*
    This file is part of Callgrind, a Valgrind tool for call tracing.
 
-   Copyright (C) 2002-2015, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
+   Copyright (C) 2002-2017, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/callgrind/fn.c b/callgrind/fn.c
index 2434941..d4c7b24 100644
--- a/callgrind/fn.c
+++ b/callgrind/fn.c
@@ -6,7 +6,7 @@
 /*
    This file is part of Callgrind, a Valgrind tool for call tracing.
 
-   Copyright (C) 2002-2015, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
+   Copyright (C) 2002-2017, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -110,7 +110,7 @@
 /* _ld_runtime_resolve, located in ld.so, needs special handling:
  * The jump at end into the resolved function should not be
  * represented as a call (as usually done in callgrind with jumps),
- * but as a return + call. Otherwise, the repeated existance of
+ * but as a return + call. Otherwise, the repeated existence of
  * _ld_runtime_resolve in call chains will lead to huge cycles,
  * making the profile almost worthless.
  *
diff --git a/callgrind/global.h b/callgrind/global.h
index bf511f7..7c5a59c 100644
--- a/callgrind/global.h
+++ b/callgrind/global.h
@@ -6,7 +6,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2004-2015 Josef Weidendorfer
+   Copyright (C) 2004-2017 Josef Weidendorfer
       josef.weidendorfer@gmx.de
 
    This program is free software; you can redistribute it and/or
@@ -347,7 +347,7 @@
  * Basic Block Cost Center
  *
  * On demand, multiple BBCCs will be created for the same BB
- * dependend on command line options and:
+ * dependent on command line options and:
  * - current function (it's possible that a BB is executed in the
  *   context of different functions, e.g. in manual assembler/PLT)
  * - current thread ID
diff --git a/callgrind/jumps.c b/callgrind/jumps.c
index dbd4533..2cf30c4 100644
--- a/callgrind/jumps.c
+++ b/callgrind/jumps.c
@@ -6,7 +6,7 @@
 /*
    This file is part of Callgrind, a Valgrind tool for call tracing.
 
-   Copyright (C) 2002-2015, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
+   Copyright (C) 2002-2017, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/callgrind/main.c b/callgrind/main.c
index 69b0ddb..ab49272 100644
--- a/callgrind/main.c
+++ b/callgrind/main.c
@@ -8,10 +8,10 @@
    This file is part of Callgrind, a Valgrind tool for call graph
    profiling programs.
 
-   Copyright (C) 2002-2015, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
+   Copyright (C) 2002-2017, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
 
    This tool is derived from and contains code from Cachegrind
-   Copyright (C) 2002-2015 Nicholas Nethercote (njn@valgrind.org)
+   Copyright (C) 2002-2017 Nicholas Nethercote (njn@valgrind.org)
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -1975,6 +1975,16 @@
                 "sp-at-mem-access\n");
    }
 
+   if (CLG_(clo).collect_systime) {
+      VG_(needs_syscall_wrapper)(CLG_(pre_syscalltime),
+                                 CLG_(post_syscalltime));
+      syscalltime = CLG_MALLOC("cl.main.pci.1",
+                               VG_N_THREADS * sizeof syscalltime[0]);
+      for (UInt i = 0; i < VG_N_THREADS; ++i) {
+         syscalltime[i] = 0;
+      }
+   }
+
    if (VG_(clo_px_file_backed) != VexRegUpdSpAtMemAccess) {
       CLG_DEBUG(1, " Using user specified value for "
                 "--px-file-backed\n");
@@ -1988,13 +1998,13 @@
       VG_(message)(Vg_UserMsg, 
                    "callgrind only works with --vex-iropt-unroll-thresh=0\n"
                    "=> resetting it back to 0\n");
-      VG_(clo_vex_control).iropt_unroll_thresh = 0;   // cannot be overriden.
+      VG_(clo_vex_control).iropt_unroll_thresh = 0;   // cannot be overridden.
    }
    if (VG_(clo_vex_control).guest_chase_thresh != 0) {
       VG_(message)(Vg_UserMsg,
                    "callgrind only works with --vex-guest-chase-thresh=0\n"
                    "=> resetting it back to 0\n");
-      VG_(clo_vex_control).guest_chase_thresh = 0; // cannot be overriden.
+      VG_(clo_vex_control).guest_chase_thresh = 0; // cannot be overridden.
    }
    
    CLG_DEBUG(1, "  dump threads: %s\n", CLG_(clo).separate_threads ? "Yes":"No");
@@ -2038,7 +2048,7 @@
     VG_(details_name)            ("Callgrind");
     VG_(details_version)         (NULL);
     VG_(details_description)     ("a call-graph generating cache profiler");
-    VG_(details_copyright_author)("Copyright (C) 2002-2015, and GNU GPL'd, "
+    VG_(details_copyright_author)("Copyright (C) 2002-2017, and GNU GPL'd, "
 				  "by Josef Weidendorfer et al.");
     VG_(details_bug_reports_to)  (VG_BUGS_TO);
     VG_(details_avg_translation_sizeB) ( 500 );
@@ -2047,8 +2057,8 @@
        = VG_(clo_px_file_backed)
        = VexRegUpdSpAtMemAccess; // overridable by the user.
 
-    VG_(clo_vex_control).iropt_unroll_thresh = 0;   // cannot be overriden.
-    VG_(clo_vex_control).guest_chase_thresh = 0;    // cannot be overriden.
+    VG_(clo_vex_control).iropt_unroll_thresh = 0;   // cannot be overridden.
+    VG_(clo_vex_control).guest_chase_thresh = 0;    // cannot be overridden.
 
     VG_(basic_tool_funcs)        (CLG_(post_clo_init),
                                   CLG_(instrument),
@@ -2063,8 +2073,6 @@
 
     VG_(needs_client_requests)(CLG_(handle_client_request));
     VG_(needs_print_stats)    (clg_print_stats);
-    VG_(needs_syscall_wrapper)(CLG_(pre_syscalltime),
-			       CLG_(post_syscalltime));
 
     VG_(track_start_client_code)  ( & clg_start_client_code_callback );
     VG_(track_pre_deliver_signal) ( & CLG_(pre_signal) );
@@ -2072,11 +2080,6 @@
 
     CLG_(set_clo_defaults)();
 
-    syscalltime = CLG_MALLOC("cl.main.pci.1",
-                             VG_N_THREADS * sizeof syscalltime[0]);
-    for (UInt i = 0; i < VG_N_THREADS; ++i) {
-       syscalltime[i] = 0;
-    }
 }
 
 VG_DETERMINE_INTERFACE_VERSION(CLG_(pre_clo_init))
diff --git a/callgrind/sim.c b/callgrind/sim.c
index 8fedbea..28012c8 100644
--- a/callgrind/sim.c
+++ b/callgrind/sim.c
@@ -7,10 +7,10 @@
    This file is part of Callgrind, a Valgrind tool for call graph
    profiling programs.
 
-   Copyright (C) 2003-2015, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
+   Copyright (C) 2003-2017, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
 
    This tool is derived from and contains code from Cachegrind
-   Copyright (C) 2002-2015 Nicholas Nethercote (njn@valgrind.org)
+   Copyright (C) 2002-2017 Nicholas Nethercote (njn@valgrind.org)
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
diff --git a/callgrind/tests/Makefile.in b/callgrind/tests/Makefile.in
index 9ed6df1..a796786 100644
--- a/callgrind/tests/Makefile.in
+++ b/callgrind/tests/Makefile.in
@@ -111,7 +111,7 @@
 
 
 # Make sure that all test programs have threaded errno.
-# Disable largefile support as there are test cases explictly enabling it.
+# Disable largefile support as there are test cases explicitly enabling it.
 @VGCONF_OS_IS_SOLARIS_TRUE@am__append_5 = -D_REENTRANT @SOLARIS_UNDEF_LARGESOURCE@
 @COMPILER_IS_CLANG_TRUE@am__append_6 = -Wno-format-extra-args \
 @COMPILER_IS_CLANG_TRUE@	-Wno-literal-range \
@@ -284,6 +284,7 @@
 FLAG_MMMX = @FLAG_MMMX@
 FLAG_MSSE = @FLAG_MSSE@
 FLAG_NO_BUILD_ID = @FLAG_NO_BUILD_ID@
+FLAG_NO_PIE = @FLAG_NO_PIE@
 FLAG_OCTEON = @FLAG_OCTEON@
 FLAG_OCTEON2 = @FLAG_OCTEON2@
 FLAG_T_TEXT = @FLAG_T_TEXT@
@@ -454,6 +455,7 @@
 AM_CPPFLAGS_@VGCONF_PLATFORM_PRI_CAPS@ = \
 	-I$(top_srcdir) \
 	-I$(top_srcdir)/include \
+	-I$(top_builddir)/include \
 	-I$(top_srcdir)/VEX/pub \
 	-I$(top_builddir)/VEX/pub \
 	-DVGA_@VGCONF_ARCH_PRI@=1 \
@@ -464,6 +466,7 @@
 @VGCONF_HAVE_PLATFORM_SEC_TRUE@AM_CPPFLAGS_@VGCONF_PLATFORM_SEC_CAPS@ = \
 @VGCONF_HAVE_PLATFORM_SEC_TRUE@	-I$(top_srcdir) \
 @VGCONF_HAVE_PLATFORM_SEC_TRUE@	-I$(top_srcdir)/include \
+@VGCONF_HAVE_PLATFORM_SEC_TRUE@	-I$(top_builddir)/include \
 @VGCONF_HAVE_PLATFORM_SEC_TRUE@	-I$(top_srcdir)/VEX/pub \
 @VGCONF_HAVE_PLATFORM_SEC_TRUE@	-I$(top_builddir)/VEX/pub \
 @VGCONF_HAVE_PLATFORM_SEC_TRUE@	-DVGA_@VGCONF_ARCH_SEC@=1 \
@@ -538,8 +541,6 @@
 				$(AM_CFLAGS_PSO_BASE)
 
 AM_CCASFLAGS_MIPS64_LINUX = @FLAG_M64@ -g @FLAG_MIPS64@
-AM_CFLAGS_TILEGX_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE)
-AM_CFLAGS_PSO_TILEGX_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE)
 AM_FLAG_M3264_X86_SOLARIS = @FLAG_M32@
 AM_CFLAGS_X86_SOLARIS = @FLAG_M32@ @PREFERRED_STACK_BOUNDARY_2@ \
 				$(AM_CFLAGS_BASE) -fomit-frame-pointer \
@@ -584,7 +585,6 @@
 PRELOAD_LDFLAGS_S390X_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@
 PRELOAD_LDFLAGS_MIPS32_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@
 PRELOAD_LDFLAGS_MIPS64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@
-PRELOAD_LDFLAGS_TILEGX_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@
 PRELOAD_LDFLAGS_X86_SOLARIS = $(PRELOAD_LDFLAGS_COMMON_SOLARIS) @FLAG_M32@
 PRELOAD_LDFLAGS_AMD64_SOLARIS = $(PRELOAD_LDFLAGS_COMMON_SOLARIS) @FLAG_M64@
 AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/include \
diff --git a/callgrind/threads.c b/callgrind/threads.c
index 2a38fc1..2ada286 100644
--- a/callgrind/threads.c
+++ b/callgrind/threads.c
@@ -6,7 +6,7 @@
 /*
    This file is part of Callgrind, a Valgrind tool for call tracing.
 
-   Copyright (C) 2002-2015, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
+   Copyright (C) 2002-2017, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as