Author: florian
Date: Wed Aug 13 20:51:50 2014
New Revision: 14272
Log:
Merge from trunk.
Added:
branches/BUF_REMOVAL/coregrind/m_debuginfo/priv_readexidx.h
- copied unchanged from r14271, trunk/coregrind/m_debuginfo/priv_readexidx.h
branches/BUF_REMOVAL/coregrind/m_debuginfo/readexidx.c
- copied unchanged from r14271, trunk/coregrind/m_debuginfo/readexidx.c
branches/BUF_REMOVAL/coregrind/m_dispatch/dispatch-ppc64be-linux.S
- copied unchanged from r14271, trunk/coregrind/m_dispatch/dispatch-ppc64be-linux.S
branches/BUF_REMOVAL/coregrind/m_dispatch/dispatch-ppc64le-linux.S
- copied unchanged from r14271, trunk/coregrind/m_dispatch/dispatch-ppc64le-linux.S
branches/BUF_REMOVAL/coregrind/m_syswrap/syscall-ppc64be-linux.S
- copied unchanged from r14271, trunk/coregrind/m_syswrap/syscall-ppc64be-linux.S
branches/BUF_REMOVAL/coregrind/m_syswrap/syscall-ppc64le-linux.S
- copied unchanged from r14271, trunk/coregrind/m_syswrap/syscall-ppc64le-linux.S
branches/BUF_REMOVAL/drd/tests/threaded-fork-vcs.stderr.exp
- copied unchanged from r14271, trunk/drd/tests/threaded-fork-vcs.stderr.exp
branches/BUF_REMOVAL/drd/tests/threaded-fork-vcs.vgtest
- copied unchanged from r14271, trunk/drd/tests/threaded-fork-vcs.vgtest
branches/BUF_REMOVAL/none/tests/ppc32/jm-fp.stdout.exp-BE2
- copied unchanged from r14271, trunk/none/tests/ppc32/jm-fp.stdout.exp-BE2
branches/BUF_REMOVAL/none/tests/ppc32/round.stdout.exp-RM-fix
- copied unchanged from r14271, trunk/none/tests/ppc32/round.stdout.exp-RM-fix
branches/BUF_REMOVAL/none/tests/ppc64/jm-fp.stdout.exp-BE2
- copied unchanged from r14271, trunk/none/tests/ppc64/jm-fp.stdout.exp-BE2
branches/BUF_REMOVAL/none/tests/ppc64/jm-fp.stdout.exp-LE
- copied unchanged from r14271, trunk/none/tests/ppc64/jm-fp.stdout.exp-LE
branches/BUF_REMOVAL/none/tests/ppc64/jm-fp.stdout.exp-LE2
- copied unchanged from r14271, trunk/none/tests/ppc64/jm-fp.stdout.exp-LE2
branches/BUF_REMOVAL/none/tests/ppc64/jm-int.stdout.exp-LE
- copied unchanged from r14271, trunk/none/tests/ppc64/jm-int.stdout.exp-LE
branches/BUF_REMOVAL/none/tests/ppc64/jm-vmx.stdout.exp-LE
- copied unchanged from r14271, trunk/none/tests/ppc64/jm-vmx.stdout.exp-LE
branches/BUF_REMOVAL/none/tests/ppc64/round.stdout.exp-RM-fix
- copied unchanged from r14271, trunk/none/tests/ppc64/round.stdout.exp-RM-fix
branches/BUF_REMOVAL/none/tests/ppc64/std_reg_imm.stdout.exp-LE
- copied unchanged from r14271, trunk/none/tests/ppc64/std_reg_imm.stdout.exp-LE
branches/BUF_REMOVAL/none/tests/ppc64/test_isa_2_06_part1.stdout.exp-LE
- copied unchanged from r14271, trunk/none/tests/ppc64/test_isa_2_06_part1.stdout.exp-LE
branches/BUF_REMOVAL/tests/is_ppc64_BE.c
- copied unchanged from r14271, trunk/tests/is_ppc64_BE.c
Modified:
branches/BUF_REMOVAL/ (props changed)
branches/BUF_REMOVAL/Makefile.all.am
branches/BUF_REMOVAL/Makefile.tool.am
branches/BUF_REMOVAL/NEWS
branches/BUF_REMOVAL/cachegrind/cg_arch.c
branches/BUF_REMOVAL/cachegrind/cg_branchpred.c
branches/BUF_REMOVAL/cachegrind/cg_main.c
branches/BUF_REMOVAL/configure.ac
branches/BUF_REMOVAL/coregrind/Makefile.am
branches/BUF_REMOVAL/coregrind/launcher-darwin.c
branches/BUF_REMOVAL/coregrind/launcher-linux.c
branches/BUF_REMOVAL/coregrind/m_aspacemgr/aspacemgr-common.c
branches/BUF_REMOVAL/coregrind/m_cache.c
branches/BUF_REMOVAL/coregrind/m_coredump/coredump-elf.c
branches/BUF_REMOVAL/coregrind/m_debugger.c
branches/BUF_REMOVAL/coregrind/m_debuginfo/d3basics.c
branches/BUF_REMOVAL/coregrind/m_debuginfo/debuginfo.c
branches/BUF_REMOVAL/coregrind/m_debuginfo/priv_storage.h
branches/BUF_REMOVAL/coregrind/m_debuginfo/readdwarf.c
branches/BUF_REMOVAL/coregrind/m_debuginfo/readdwarf3.c
branches/BUF_REMOVAL/coregrind/m_debuginfo/readelf.c
branches/BUF_REMOVAL/coregrind/m_debuginfo/readmacho.c
branches/BUF_REMOVAL/coregrind/m_debuginfo/storage.c
branches/BUF_REMOVAL/coregrind/m_debuglog.c
branches/BUF_REMOVAL/coregrind/m_dispatch/dispatch-ppc64-linux.S
branches/BUF_REMOVAL/coregrind/m_errormgr.c
branches/BUF_REMOVAL/coregrind/m_gdbserver/remote-utils.c
branches/BUF_REMOVAL/coregrind/m_gdbserver/server.c
branches/BUF_REMOVAL/coregrind/m_gdbserver/target.c
branches/BUF_REMOVAL/coregrind/m_gdbserver/valgrind-low-arm64.c
branches/BUF_REMOVAL/coregrind/m_initimg/initimg-linux.c
branches/BUF_REMOVAL/coregrind/m_initimg/priv_initimg_pathscan.h
branches/BUF_REMOVAL/coregrind/m_libcassert.c
branches/BUF_REMOVAL/coregrind/m_libcbase.c
branches/BUF_REMOVAL/coregrind/m_libcfile.c
branches/BUF_REMOVAL/coregrind/m_libcproc.c
branches/BUF_REMOVAL/coregrind/m_libcsetjmp.c
branches/BUF_REMOVAL/coregrind/m_machine.c
branches/BUF_REMOVAL/coregrind/m_main.c
branches/BUF_REMOVAL/coregrind/m_redir.c
branches/BUF_REMOVAL/coregrind/m_scheduler/scheduler.c
branches/BUF_REMOVAL/coregrind/m_sigframe/sigframe-ppc64-linux.c
branches/BUF_REMOVAL/coregrind/m_signals.c
branches/BUF_REMOVAL/coregrind/m_stacktrace.c
branches/BUF_REMOVAL/coregrind/m_syscall.c
branches/BUF_REMOVAL/coregrind/m_syswrap/priv_syswrap-xen.h
branches/BUF_REMOVAL/coregrind/m_syswrap/priv_types_n_macros.h
branches/BUF_REMOVAL/coregrind/m_syswrap/syscall-ppc64-linux.S
branches/BUF_REMOVAL/coregrind/m_syswrap/syswrap-generic.c
branches/BUF_REMOVAL/coregrind/m_syswrap/syswrap-linux.c
branches/BUF_REMOVAL/coregrind/m_syswrap/syswrap-main.c
branches/BUF_REMOVAL/coregrind/m_syswrap/syswrap-ppc64-linux.c
branches/BUF_REMOVAL/coregrind/m_syswrap/syswrap-xen.c
branches/BUF_REMOVAL/coregrind/m_trampoline.S
branches/BUF_REMOVAL/coregrind/m_translate.c
branches/BUF_REMOVAL/coregrind/m_ume/elf.c
branches/BUF_REMOVAL/coregrind/m_ume/macho.c
branches/BUF_REMOVAL/coregrind/m_vki.c
branches/BUF_REMOVAL/coregrind/m_vkiscnums.c
branches/BUF_REMOVAL/coregrind/pub_core_aspacemgr.h
branches/BUF_REMOVAL/coregrind/pub_core_basics.h
branches/BUF_REMOVAL/coregrind/pub_core_debuginfo.h
branches/BUF_REMOVAL/coregrind/pub_core_libcfile.h
branches/BUF_REMOVAL/coregrind/pub_core_machine.h
branches/BUF_REMOVAL/coregrind/pub_core_mallocfree.h
branches/BUF_REMOVAL/coregrind/pub_core_threadstate.h
branches/BUF_REMOVAL/coregrind/pub_core_trampoline.h
branches/BUF_REMOVAL/coregrind/pub_core_transtab_asm.h
branches/BUF_REMOVAL/coregrind/pub_core_ume.h
branches/BUF_REMOVAL/coregrind/vg_preloaded.c
branches/BUF_REMOVAL/coregrind/vgdb-invoker-ptrace.c
branches/BUF_REMOVAL/drd/Testing.txt
branches/BUF_REMOVAL/drd/drd_bitmap.h
branches/BUF_REMOVAL/drd/drd_load_store.c
branches/BUF_REMOVAL/drd/drd_main.c
branches/BUF_REMOVAL/drd/drd_thread.c
branches/BUF_REMOVAL/drd/drd_thread.h
branches/BUF_REMOVAL/drd/tests/Makefile.am
branches/BUF_REMOVAL/drd/tests/free_is_write.c
branches/BUF_REMOVAL/drd/tests/unit_bitmap.c
branches/BUF_REMOVAL/helgrind/hg_errors.c
branches/BUF_REMOVAL/helgrind/hg_errors.h
branches/BUF_REMOVAL/helgrind/hg_main.c
branches/BUF_REMOVAL/helgrind/tests/annotate_hbefore.c
branches/BUF_REMOVAL/helgrind/tests/annotate_rwlock.stderr.exp
branches/BUF_REMOVAL/helgrind/tests/hg02_deadlock.stderr.exp
branches/BUF_REMOVAL/helgrind/tests/locked_vs_unlocked1_fwd.stderr.exp
branches/BUF_REMOVAL/helgrind/tests/locked_vs_unlocked1_rev.stderr.exp
branches/BUF_REMOVAL/helgrind/tests/locked_vs_unlocked2.stderr.exp
branches/BUF_REMOVAL/helgrind/tests/locked_vs_unlocked3.stderr.exp
branches/BUF_REMOVAL/helgrind/tests/tc09_bad_unlock.stderr.exp
branches/BUF_REMOVAL/helgrind/tests/tc10_rec_lock.stderr.exp
branches/BUF_REMOVAL/helgrind/tests/tc11_XCHG.c
branches/BUF_REMOVAL/helgrind/tests/tc12_rwl_trivial.stderr.exp
branches/BUF_REMOVAL/helgrind/tests/tc13_laog1.stderr.exp
branches/BUF_REMOVAL/helgrind/tests/tc14_laog_dinphils.c
branches/BUF_REMOVAL/helgrind/tests/tc14_laog_dinphils.stderr.exp
branches/BUF_REMOVAL/helgrind/tests/tc15_laog_lockdel.c
branches/BUF_REMOVAL/helgrind/tests/tc15_laog_lockdel.stderr.exp
branches/BUF_REMOVAL/helgrind/tests/tc20_verifywrap.stderr.exp
branches/BUF_REMOVAL/include/pub_tool_basics.h
branches/BUF_REMOVAL/include/pub_tool_debuginfo.h
branches/BUF_REMOVAL/include/pub_tool_errormgr.h
branches/BUF_REMOVAL/include/pub_tool_gdbserver.h
branches/BUF_REMOVAL/include/pub_tool_libcbase.h
branches/BUF_REMOVAL/include/pub_tool_libcsetjmp.h
branches/BUF_REMOVAL/include/pub_tool_machine.h
branches/BUF_REMOVAL/include/pub_tool_options.h
branches/BUF_REMOVAL/include/pub_tool_redir.h
branches/BUF_REMOVAL/include/pub_tool_vkiscnums.h
branches/BUF_REMOVAL/include/pub_tool_vkiscnums_asm.h
branches/BUF_REMOVAL/include/valgrind.h
branches/BUF_REMOVAL/include/vki/vki-linux.h
branches/BUF_REMOVAL/include/vki/vki-ppc64-linux.h
branches/BUF_REMOVAL/memcheck/mc_machine.c
branches/BUF_REMOVAL/memcheck/tests/atomic_incs.c
branches/BUF_REMOVAL/memcheck/tests/badjump.c
branches/BUF_REMOVAL/memcheck/tests/linux/rfcomm.c
branches/BUF_REMOVAL/memcheck/tests/linux/rfcomm.stderr.exp
branches/BUF_REMOVAL/memcheck/tests/ppc64/power_ISA2_05.c
branches/BUF_REMOVAL/memcheck/tests/ppc64/power_ISA2_05.stdout.exp
branches/BUF_REMOVAL/memcheck/tests/unit_libcbase.c
branches/BUF_REMOVAL/memcheck/tests/varinfo5.stderr.exp
branches/BUF_REMOVAL/memcheck/tests/varinfo5.stderr.exp-ppc64
branches/BUF_REMOVAL/memcheck/tests/varinfo5.vgtest
branches/BUF_REMOVAL/none/tests/amd64/xadd.c
branches/BUF_REMOVAL/none/tests/arm64/fp_and_simd.c
branches/BUF_REMOVAL/none/tests/ppc32/Makefile.am
branches/BUF_REMOVAL/none/tests/ppc32/jm-insns.c
branches/BUF_REMOVAL/none/tests/ppc32/jm-int.stdout.exp
branches/BUF_REMOVAL/none/tests/ppc32/jm-vmx.stdout.exp
branches/BUF_REMOVAL/none/tests/ppc32/jm_vec_isa_2_07.stdout.exp
branches/BUF_REMOVAL/none/tests/ppc32/round.stdout.exp
branches/BUF_REMOVAL/none/tests/ppc32/test_dfp4.c
branches/BUF_REMOVAL/none/tests/ppc32/test_dfp5.c
branches/BUF_REMOVAL/none/tests/ppc32/test_isa_2_06_part1.c
branches/BUF_REMOVAL/none/tests/ppc32/test_isa_2_06_part1.stdout.exp
branches/BUF_REMOVAL/none/tests/ppc32/test_isa_2_06_part2.c
branches/BUF_REMOVAL/none/tests/ppc32/test_isa_2_06_part3.c
branches/BUF_REMOVAL/none/tests/ppc32/test_isa_2_07_part2.stdout.exp
branches/BUF_REMOVAL/none/tests/ppc64/Makefile.am
branches/BUF_REMOVAL/none/tests/ppc64/jm-fp.stdout.exp
branches/BUF_REMOVAL/none/tests/ppc64/jm-int.stdout.exp
branches/BUF_REMOVAL/none/tests/ppc64/jm-vmx.stdout.exp
branches/BUF_REMOVAL/none/tests/ppc64/jm_vec_isa_2_07.stdout.exp
branches/BUF_REMOVAL/none/tests/ppc64/lsw.vgtest
branches/BUF_REMOVAL/none/tests/ppc64/round.c
branches/BUF_REMOVAL/none/tests/ppc64/test_isa_2_06_part1.stdout.exp
branches/BUF_REMOVAL/none/tests/ppc64/test_isa_2_07_part1.c
branches/BUF_REMOVAL/none/tests/ppc64/test_isa_2_07_part2.c
branches/BUF_REMOVAL/none/tests/ppc64/test_isa_2_07_part2.stdout.exp
branches/BUF_REMOVAL/tests/Makefile.am
branches/BUF_REMOVAL/tests/arch_test.c
branches/BUF_REMOVAL/tests/check_isa-2_06_cap
branches/BUF_REMOVAL/tests/check_isa-2_07_cap
branches/BUF_REMOVAL/tests/power_insn_available.c
Modified: branches/BUF_REMOVAL/Makefile.all.am
==============================================================================
--- branches/BUF_REMOVAL/Makefile.all.am (original)
+++ branches/BUF_REMOVAL/Makefile.all.am Wed Aug 13 20:51:50 2014
@@ -163,9 +163,13 @@
AM_CFLAGS_PPC32_LINUX = @FLAG_M32@ $(AM_CFLAGS_BASE)
AM_CCASFLAGS_PPC32_LINUX = @FLAG_M32@ -g
-AM_FLAG_M3264_PPC64_LINUX = @FLAG_M64@
-AM_CFLAGS_PPC64_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE)
-AM_CCASFLAGS_PPC64_LINUX = @FLAG_M64@ -g
+AM_FLAG_M3264_PPC64BE_LINUX = @FLAG_M64@
+AM_CFLAGS_PPC64BE_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE)
+AM_CCASFLAGS_PPC64BE_LINUX = @FLAG_M64@ -g
+
+AM_FLAG_M3264_PPC64LE_LINUX = @FLAG_M64@
+AM_CFLAGS_PPC64LE_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE)
+AM_CCASFLAGS_PPC64LE_LINUX = @FLAG_M64@ -g
AM_FLAG_M3264_ARM_LINUX = @FLAG_M32@
AM_CFLAGS_ARM_LINUX = @FLAG_M32@ @PREFERRED_STACK_BOUNDARY@ \
@@ -229,15 +233,16 @@
PRELOAD_LDFLAGS_COMMON_LINUX += -nostdlib
endif
-PRELOAD_LDFLAGS_X86_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@
-PRELOAD_LDFLAGS_AMD64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@
-PRELOAD_LDFLAGS_PPC32_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@
-PRELOAD_LDFLAGS_PPC64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@
-PRELOAD_LDFLAGS_ARM_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@
-PRELOAD_LDFLAGS_ARM64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@
-PRELOAD_LDFLAGS_X86_DARWIN = $(PRELOAD_LDFLAGS_COMMON_DARWIN) -arch i386
-PRELOAD_LDFLAGS_AMD64_DARWIN = $(PRELOAD_LDFLAGS_COMMON_DARWIN) -arch x86_64
-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_X86_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@
+PRELOAD_LDFLAGS_AMD64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@
+PRELOAD_LDFLAGS_PPC32_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@
+PRELOAD_LDFLAGS_PPC64BE_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@
+PRELOAD_LDFLAGS_PPC64LE_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@
+PRELOAD_LDFLAGS_ARM_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@
+PRELOAD_LDFLAGS_ARM64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@
+PRELOAD_LDFLAGS_X86_DARWIN = $(PRELOAD_LDFLAGS_COMMON_DARWIN) -arch i386
+PRELOAD_LDFLAGS_AMD64_DARWIN = $(PRELOAD_LDFLAGS_COMMON_DARWIN) -arch x86_64
+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@
Modified: branches/BUF_REMOVAL/Makefile.tool.am
==============================================================================
--- branches/BUF_REMOVAL/Makefile.tool.am (original)
+++ branches/BUF_REMOVAL/Makefile.tool.am Wed Aug 13 20:51:50 2014
@@ -46,7 +46,10 @@
TOOL_LDFLAGS_PPC32_LINUX = \
$(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M32@
-TOOL_LDFLAGS_PPC64_LINUX = \
+TOOL_LDFLAGS_PPC64BE_LINUX = \
+ $(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M64@
+
+TOOL_LDFLAGS_PPC64LE_LINUX = \
$(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M64@
TOOL_LDFLAGS_ARM_LINUX = \
@@ -102,8 +105,11 @@
LIBREPLACEMALLOC_PPC32_LINUX = \
$(top_builddir)/coregrind/libreplacemalloc_toolpreload-ppc32-linux.a
-LIBREPLACEMALLOC_PPC64_LINUX = \
- $(top_builddir)/coregrind/libreplacemalloc_toolpreload-ppc64-linux.a
+LIBREPLACEMALLOC_PPC64BE_LINUX = \
+ $(top_builddir)/coregrind/libreplacemalloc_toolpreload-ppc64be-linux.a
+
+LIBREPLACEMALLOC_PPC64LE_LINUX = \
+ $(top_builddir)/coregrind/libreplacemalloc_toolpreload-ppc64le-linux.a
LIBREPLACEMALLOC_ARM_LINUX = \
$(top_builddir)/coregrind/libreplacemalloc_toolpreload-arm-linux.a
@@ -141,9 +147,14 @@
$(LIBREPLACEMALLOC_PPC32_LINUX) \
-Wl,--no-whole-archive
-LIBREPLACEMALLOC_LDFLAGS_PPC64_LINUX = \
+LIBREPLACEMALLOC_LDFLAGS_PPC64BE_LINUX = \
+ -Wl,--whole-archive \
+ $(LIBREPLACEMALLOC_PPC64BE_LINUX) \
+ -Wl,--no-whole-archive
+
+LIBREPLACEMALLOC_LDFLAGS_PPC64LE_LINUX = \
-Wl,--whole-archive \
- $(LIBREPLACEMALLOC_PPC64_LINUX) \
+ $(LIBREPLACEMALLOC_PPC64LE_LINUX) \
-Wl,--no-whole-archive
LIBREPLACEMALLOC_LDFLAGS_ARM_LINUX = \
Modified: branches/BUF_REMOVAL/NEWS
==============================================================================
--- branches/BUF_REMOVAL/NEWS (original)
+++ branches/BUF_REMOVAL/NEWS Wed Aug 13 20:51:50 2014
@@ -16,10 +16,16 @@
- new leak check heuristic 'length64' to detect interior pointers
pointing at offset 64bit of a block, when the first 8 bytes contains
the block size - 8. This is e.g. used by sqlite3MemMalloc.
+ - if a syscall param (e.g. bind struct sockaddr, sendmsg struct msghdr,
+ ...) has several fields not initialised, an error is now reported for
+ each field. Previously, an error was reported only for the first wrong
+ field.
* Helgrind:
- Race condition error message with allocated blocks also show
the thread nr that allocated the racy block.
+ - All locks referenced by an error message are now announced.
+ Previously, some error messages were just showing the lock addresses.
- The message indicating where a lock was first observed now also
describes the address/location of the lock.
- Helgrind now understands the Ada task termination rules
@@ -84,6 +90,10 @@
* Reduction of memory used by Valgrind to read and store the debug information.
+* Valgrind can now read EXIDX unwind information on 32-bit ARM targets.
+ If an object contains both CFI and EXIDX unwind information, Valgrind
+ will prefer the CFI over the EXIDX.
+
* ==================== FIXED BUGS ====================
The following bugs have been fixed or resolved. Note that "n-i-bz"
@@ -151,6 +161,7 @@
331337 s390x WARNING: unhandled syscall: 326 (dup3)
331380 Syscall param timer_create(evp) points to uninitialised byte(s)
331476 Patch to handle ioctl 0x5422 on Linux (x86 and amd64)
+331829 Unexpected ioctl opcode sign extension
331830 ppc64: WARNING: unhandled syscall: 96/97
331839 drd/tests/sem_open specifies invalid semaphore name
331847 outcome of drd/tests/thread_name is nondeterministic
@@ -191,6 +202,8 @@
337094 ifunc wrapper is broken on ppc64
337285 fcntl commands F_OFD_SETLK, F_OFD_SETLKW, and F_OFD_GETLK not supported
337528 leak check heuristic for block prefixed by length as 64bit number
+338024 inlined functions are not shown if DW_AT_ranges is used
+338115 DRD: computed conflict set differs from actual after fork
n-i-bz Fix KVM_CREATE_IRQCHIP ioctl handling
n-i-bz s390x: Fix memory corruption for multithreaded applications
n-i-bz vex arm->IR: allow PC as basereg in some LDRD cases
@@ -198,6 +211,7 @@
n-i-bz Fix mingw64 support in valgrind.h (dev@, 9 May 2014)
n-i-bz drd manual: Document how to C++11 programs that use class "std::thread"
n-i-bz Add command-line option --default-suppressions
+n-i-bz Add support for BLKDISCARDZEROES ioctl
Release 3.9.0 (31 October 2013)
Modified: branches/BUF_REMOVAL/cachegrind/cg_arch.c
==============================================================================
--- branches/BUF_REMOVAL/cachegrind/cg_arch.c (original)
+++ branches/BUF_REMOVAL/cachegrind/cg_arch.c Wed Aug 13 20:51:50 2014
@@ -353,7 +353,7 @@
*D1c = (cache_t) { 65536, 2, 64 };
*LLc = (cache_t) { 262144, 8, 64 };
-#elif defined(VGA_ppc64)
+#elif defined(VGA_ppc64be) || defined(VGA_ppc64le)
// Default cache configuration
*I1c = (cache_t) { 65536, 2, 64 };
Modified: branches/BUF_REMOVAL/cachegrind/cg_branchpred.c
==============================================================================
--- branches/BUF_REMOVAL/cachegrind/cg_branchpred.c (original)
+++ branches/BUF_REMOVAL/cachegrind/cg_branchpred.c Wed Aug 13 20:51:50 2014
@@ -44,7 +44,7 @@
/* How many bits at the bottom of an instruction address are
guaranteed to be zero? */
-#if defined(VGA_ppc32) || defined(VGA_ppc64) \
+#if defined(VGA_ppc32) || defined(VGA_ppc64be) || defined(VGA_ppc64le) \
|| defined(VGA_mips32) || defined(VGA_mips64) || defined(VGA_arm64)
# define N_IADDR_LO_ZERO_BITS 2
#elif defined(VGA_x86) || defined(VGA_amd64)
Modified: branches/BUF_REMOVAL/cachegrind/cg_main.c
==============================================================================
--- branches/BUF_REMOVAL/cachegrind/cg_main.c (original)
+++ branches/BUF_REMOVAL/cachegrind/cg_main.c Wed Aug 13 20:51:50 2014
@@ -1362,8 +1362,6 @@
/*--- Cache configuration ---*/
/*------------------------------------------------------------*/
-#define UNDEFINED_CACHE { -1, -1, -1 }
-
static cache_t clo_I1_cache = UNDEFINED_CACHE;
static cache_t clo_D1_cache = UNDEFINED_CACHE;
static cache_t clo_LL_cache = UNDEFINED_CACHE;
Modified: branches/BUF_REMOVAL/configure.ac
==============================================================================
--- branches/BUF_REMOVAL/configure.ac (original)
+++ branches/BUF_REMOVAL/configure.ac Wed Aug 13 20:51:50 2014
@@ -163,6 +163,18 @@
# is a 64-bit capable PowerPC, then it must be set to ppc64 and not ppc32.
# Ditto for amd64. It is used for more configuration below, but is not used
# outside this file.
+#
+# Power PC returns powerpc for Big Endian. This was not changed when Little
+# Endian support was added to the 64-bit architecture. The 64-bit Little
+# Endian systems explicitly state le in the host_cpu. For clarity in the
+# Valgrind code, the ARCH_MAX name will state LE or BE for the endianess of
+# the 64-bit system. Big Endian is the only mode supported on 32-bit Power PC.
+# The abreviation PPC or ppc refers to 32-bit and 64-bit systems with either
+# Endianess. The name PPC64 or ppc64 to 64-bit systems of either Endianess.
+# The names ppc64be or PPC64BE refer to only 64-bit systems that are Big
+# Endian. Similarly, ppc64le or PPC64LE refer to only 64-bit systems that are
+# Little Endian.
+
case "${host_cpu}" in
i?86)
AC_MSG_RESULT([ok (${host_cpu})])
@@ -175,8 +187,15 @@
;;
powerpc64)
+ # this only referrs to 64-bit Big Endian
AC_MSG_RESULT([ok (${host_cpu})])
- ARCH_MAX="ppc64"
+ ARCH_MAX="ppc64be"
+ ;;
+
+ powerpc64le)
+ # this only referrs to 64-bit Little Endian
+ AC_MSG_RESULT([ok (${host_cpu})])
+ ARCH_MAX="ppc64le"
;;
powerpc)
@@ -378,7 +397,7 @@
# does not support building 32 bit programs
case "$ARCH_MAX-$VGCONF_OS" in
- amd64-linux|ppc64-linux)
+ amd64-linux|ppc64be-linux)
AC_MSG_CHECKING([for 32 bit build support])
safe_CFLAGS=$CFLAGS
CFLAGS="-m32"
@@ -496,13 +515,13 @@
valt_load_address_sec_inner="0xUNSET"
AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})])
;;
- ppc64-linux)
+ ppc64be-linux)
valt_load_address_sec_norml="0xUNSET"
valt_load_address_sec_inner="0xUNSET"
if test x$vg_cv_only64bit = xyes; then
- VGCONF_ARCH_PRI="ppc64"
+ VGCONF_ARCH_PRI="ppc64be"
VGCONF_ARCH_SEC=""
- VGCONF_PLATFORM_PRI_CAPS="PPC64_LINUX"
+ VGCONF_PLATFORM_PRI_CAPS="PPC64BE_LINUX"
VGCONF_PLATFORM_SEC_CAPS=""
valt_load_address_pri_norml="0x38000000"
valt_load_address_pri_inner="0x28000000"
@@ -514,9 +533,9 @@
valt_load_address_pri_norml="0x38000000"
valt_load_address_pri_inner="0x28000000"
else
- VGCONF_ARCH_PRI="ppc64"
+ VGCONF_ARCH_PRI="ppc64be"
VGCONF_ARCH_SEC="ppc32"
- VGCONF_PLATFORM_PRI_CAPS="PPC64_LINUX"
+ VGCONF_PLATFORM_PRI_CAPS="PPC64BE_LINUX"
VGCONF_PLATFORM_SEC_CAPS="PPC32_LINUX"
valt_load_address_pri_norml="0x38000000"
valt_load_address_pri_inner="0x28000000"
@@ -525,6 +544,18 @@
fi
AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})])
;;
+ ppc64le-linux)
+ # Little Endian is only supported on PPC64
+ valt_load_address_sec_norml="0xUNSET"
+ valt_load_address_sec_inner="0xUNSET"
+ VGCONF_ARCH_PRI="ppc64le"
+ VGCONF_ARCH_SEC=""
+ VGCONF_PLATFORM_PRI_CAPS="PPC64LE_LINUX"
+ VGCONF_PLATFORM_SEC_CAPS=""
+ valt_load_address_pri_norml="0x38000000"
+ valt_load_address_pri_inner="0x28000000"
+ AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})])
+ ;;
# Darwin gets identified as 32-bit even when it supports 64-bit.
# (Not sure why, possibly because 'uname' returns "i386"?) Just about
# all Macs support both 32-bit and 64-bit, so we just build both. If
@@ -663,7 +694,8 @@
test x$VGCONF_PLATFORM_PRI_CAPS = xPPC32_LINUX \
-o x$VGCONF_PLATFORM_SEC_CAPS = xPPC32_LINUX )
AM_CONDITIONAL(VGCONF_ARCHS_INCLUDE_PPC64,
- test x$VGCONF_PLATFORM_PRI_CAPS = xPPC64_LINUX )
+ test x$VGCONF_PLATFORM_PRI_CAPS = xPPC64BE_LINUX \
+ -o x$VGCONF_PLATFORM_PRI_CAPS = xPPC64LE_LINUX )
AM_CONDITIONAL(VGCONF_ARCHS_INCLUDE_ARM,
test x$VGCONF_PLATFORM_PRI_CAPS = xARM_LINUX \
-o x$VGCONF_PLATFORM_SEC_CAPS = xARM_LINUX )
@@ -686,8 +718,10 @@
AM_CONDITIONAL(VGCONF_PLATFORMS_INCLUDE_PPC32_LINUX,
test x$VGCONF_PLATFORM_PRI_CAPS = xPPC32_LINUX \
-o x$VGCONF_PLATFORM_SEC_CAPS = xPPC32_LINUX)
-AM_CONDITIONAL(VGCONF_PLATFORMS_INCLUDE_PPC64_LINUX,
- test x$VGCONF_PLATFORM_PRI_CAPS = xPPC64_LINUX)
+AM_CONDITIONAL(VGCONF_PLATFORMS_INCLUDE_PPC64BE_LINUX,
+ test x$VGCONF_PLATFORM_PRI_CAPS = xPPC64BE_LINUX)
+AM_CONDITIONAL(VGCONF_PLATFORMS_INCLUDE_PPC64LE_LINUX,
+ test x$VGCONF_PLATFORM_PRI_CAPS = xPPC64LE_LINUX)
AM_CONDITIONAL(VGCONF_PLATFORMS_INCLUDE_ARM_LINUX,
test x$VGCONF_PLATFORM_PRI_CAPS = xARM_LINUX \
-o x$VGCONF_PLATFORM_SEC_CAPS = xARM_LINUX)
@@ -714,7 +748,8 @@
test x$VGCONF_PLATFORM_PRI_CAPS = xX86_LINUX \
-o x$VGCONF_PLATFORM_PRI_CAPS = xAMD64_LINUX \
-o x$VGCONF_PLATFORM_PRI_CAPS = xPPC32_LINUX \
- -o x$VGCONF_PLATFORM_PRI_CAPS = xPPC64_LINUX \
+ -o x$VGCONF_PLATFORM_PRI_CAPS = xPPC64BE_LINUX \
+ -o x$VGCONF_PLATFORM_PRI_CAPS = xPPC64LE_LINUX \
-o x$VGCONF_PLATFORM_PRI_CAPS = xARM_LINUX \
-o x$VGCONF_PLATFORM_PRI_CAPS = xARM64_LINUX \
-o x$VGCONF_PLATFORM_PRI_CAPS = xS390X_LINUX \
Modified: branches/BUF_REMOVAL/coregrind/Makefile.am
==============================================================================
--- branches/BUF_REMOVAL/coregrind/Makefile.am (original)
+++ branches/BUF_REMOVAL/coregrind/Makefile.am Wed Aug 13 20:51:50 2014
@@ -222,6 +222,7 @@
m_debuginfo/priv_readdwarf.h \
m_debuginfo/priv_readdwarf3.h \
m_debuginfo/priv_readelf.h \
+ m_debuginfo/priv_readexidx.h \
m_debuginfo/priv_readmacho.h \
m_debuginfo/priv_image.h \
m_debuginfo/lzoconf.h \
@@ -319,6 +320,7 @@
m_debuginfo/readdwarf.c \
m_debuginfo/readdwarf3.c \
m_debuginfo/readelf.c \
+ m_debuginfo/readexidx.c \
m_debuginfo/readmacho.c \
m_debuginfo/readpdb.c \
m_debuginfo/readstabs.c \
@@ -334,7 +336,8 @@
m_dispatch/dispatch-x86-linux.S \
m_dispatch/dispatch-amd64-linux.S \
m_dispatch/dispatch-ppc32-linux.S \
- m_dispatch/dispatch-ppc64-linux.S \
+ m_dispatch/dispatch-ppc64be-linux.S \
+ m_dispatch/dispatch-ppc64le-linux.S \
m_dispatch/dispatch-arm-linux.S \
m_dispatch/dispatch-arm64-linux.S \
m_dispatch/dispatch-s390x-linux.S \
@@ -386,7 +389,8 @@
m_syswrap/syscall-x86-linux.S \
m_syswrap/syscall-amd64-linux.S \
m_syswrap/syscall-ppc32-linux.S \
- m_syswrap/syscall-ppc64-linux.S \
+ m_syswrap/syscall-ppc64be-linux.S \
+ m_syswrap/syscall-ppc64le-linux.S \
m_syswrap/syscall-arm-linux.S \
m_syswrap/syscall-arm64-linux.S \
m_syswrap/syscall-s390x-linux.S \
Modified: branches/BUF_REMOVAL/coregrind/launcher-darwin.c
==============================================================================
--- branches/BUF_REMOVAL/coregrind/launcher-darwin.c (original)
+++ branches/BUF_REMOVAL/coregrind/launcher-darwin.c Wed Aug 13 20:51:50 2014
@@ -59,11 +59,15 @@
const char *apple_name; // e.g. x86_64
const char *valgrind_name; // e.g. amd64
} valid_archs[] = {
- { CPU_TYPE_X86, "i386", "x86" },
- { CPU_TYPE_X86_64, "x86_64", "amd64" },
- { CPU_TYPE_ARM, "arm", "arm" },
+ { CPU_TYPE_X86, "i386", "x86" },
+ { CPU_TYPE_X86_64, "x86_64", "amd64" },
+ { CPU_TYPE_ARM, "arm", "arm" },
+ /* Not that it's actually relevant, since we don't support PPC on
+ MacOS X, but .. the Apple PPC descriptors refer to the BE
+ variant, since the LE variant is something that appeared long
+ after Apple dropped PPC. */
{ CPU_TYPE_POWERPC, "ppc", "ppc32" },
- { CPU_TYPE_POWERPC64, "ppc64", "ppc64" },
+ { CPU_TYPE_POWERPC64, "ppc64", "ppc64be" }
};
static int valid_archs_count = sizeof(valid_archs)/sizeof(valid_archs[0]);
Modified: branches/BUF_REMOVAL/coregrind/launcher-linux.c
==============================================================================
--- branches/BUF_REMOVAL/coregrind/launcher-linux.c (original)
+++ branches/BUF_REMOVAL/coregrind/launcher-linux.c Wed Aug 13 20:51:50 2014
@@ -228,6 +228,10 @@
(ehdr->e_ident[EI_OSABI] == ELFOSABI_SYSV ||
ehdr->e_ident[EI_OSABI] == ELFOSABI_LINUX)) {
platform = "arm64-linux";
+ } else if (ehdr->e_machine == EM_PPC64 &&
+ (ehdr->e_ident[EI_OSABI] == ELFOSABI_SYSV ||
+ ehdr->e_ident[EI_OSABI] == ELFOSABI_LINUX)) {
+ platform = "ppc64le-linux";
}
} else if (header[EI_DATA] == ELFDATA2MSB) {
# if !defined(VGPV_arm_linux_android) \
@@ -236,7 +240,7 @@
if (ehdr->e_machine == EM_PPC64 &&
(ehdr->e_ident[EI_OSABI] == ELFOSABI_SYSV ||
ehdr->e_ident[EI_OSABI] == ELFOSABI_LINUX)) {
- platform = "ppc64-linux";
+ platform = "ppc64be-linux";
}
else
if (ehdr->e_machine == EM_S390 &&
@@ -320,7 +324,8 @@
if ((0==strcmp(VG_PLATFORM,"x86-linux")) ||
(0==strcmp(VG_PLATFORM,"amd64-linux")) ||
(0==strcmp(VG_PLATFORM,"ppc32-linux")) ||
- (0==strcmp(VG_PLATFORM,"ppc64-linux")) ||
+ (0==strcmp(VG_PLATFORM,"ppc64be-linux")) ||
+ (0==strcmp(VG_PLATFORM,"ppc64le-linux")) ||
(0==strcmp(VG_PLATFORM,"arm-linux")) ||
(0==strcmp(VG_PLATFORM,"arm64-linux")) ||
(0==strcmp(VG_PLATFORM,"s390x-linux")) ||
Modified: branches/BUF_REMOVAL/coregrind/m_aspacemgr/aspacemgr-common.c
==============================================================================
--- branches/BUF_REMOVAL/coregrind/m_aspacemgr/aspacemgr-common.c (original)
+++ branches/BUF_REMOVAL/coregrind/m_aspacemgr/aspacemgr-common.c Wed Aug 13 20:51:50 2014
@@ -155,7 +155,8 @@
aspacem_assert((offset % 4096) == 0);
res = VG_(do_syscall6)(__NR_mmap2, (UWord)start, length,
prot, flags, fd, offset / 4096);
-# elif defined(VGP_amd64_linux) || defined(VGP_ppc64_linux) \
+# elif defined(VGP_amd64_linux) \
+ || defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux) \
|| defined(VGP_s390x_linux) || defined(VGP_mips32_linux) \
|| defined(VGP_mips64_linux) || defined(VGP_arm64_linux)
res = VG_(do_syscall6)(__NR_mmap, (UWord)start, length,
Modified: branches/BUF_REMOVAL/coregrind/m_cache.c
==============================================================================
--- branches/BUF_REMOVAL/coregrind/m_cache.c (original)
+++ branches/BUF_REMOVAL/coregrind/m_cache.c Wed Aug 13 20:51:50 2014
@@ -538,7 +538,8 @@
return ret == 0 ? True : False;
}
-#elif defined(VGA_arm) || defined(VGA_ppc32) || defined(VGA_ppc64) || \
+#elif defined(VGA_arm) || defined(VGA_ppc32) || \
+ defined(VGA_ppc64be) || defined(VGA_ppc64le) || \
defined(VGA_mips32) || defined(VGA_mips64) || defined(VGA_arm64)
static Bool
Modified: branches/BUF_REMOVAL/coregrind/m_coredump/coredump-elf.c
==============================================================================
--- branches/BUF_REMOVAL/coregrind/m_coredump/coredump-elf.c (original)
+++ branches/BUF_REMOVAL/coregrind/m_coredump/coredump-elf.c Wed Aug 13 20:51:50 2014
@@ -322,7 +322,7 @@
regs->dsisr = 0;
regs->result = 0;
-#elif defined(VGP_ppc64_linux)
+#elif defined(VGP_ppc64be_linux)
# define DO(n) regs->gpr[n] = arch->vex.guest_GPR##n
DO(0); DO(1); DO(2); DO(3); DO(4); DO(5); DO(6); DO(7);
DO(8); DO(9); DO(10); DO(11); DO(12); DO(13); DO(14); DO(15);
@@ -343,6 +343,27 @@
regs->dsisr = 0;
regs->result = 0;
+#elif defined(VGP_ppc64le_linux)
+# define DO(n) regs->gpr[n] = arch->vex.guest_GPR##n
+ DO(0); DO(1); DO(2); DO(3); DO(4); DO(5); DO(6); DO(7);
+ DO(8); DO(9); DO(10); DO(11); DO(12); DO(13); DO(14); DO(15);
+ DO(16); DO(17); DO(18); DO(19); DO(20); DO(21); DO(22); DO(23);
+ DO(24); DO(25); DO(26); DO(27); DO(28); DO(29); DO(30); DO(31);
+# undef DO
+
+ regs->nip = arch->vex.guest_CIA;
+ regs->msr = 0xf033; /* pretty arbitrary */
+ regs->orig_gpr3 = arch->vex.guest_GPR3;
+ regs->ctr = arch->vex.guest_CTR;
+ regs->link = arch->vex.guest_LR;
+ regs->xer = LibVEX_GuestPPC64_get_XER( &((ThreadArchState*)arch)->vex );
+ regs->ccr = LibVEX_GuestPPC64_get_CR( &((ThreadArchState*)arch)->vex );
+ /* regs->mq = 0; */
+ regs->trap = 0;
+ regs->dar = 0; /* should be fault address? */
+ regs->dsisr = 0;
+ regs->result = 0;
+
#elif defined(VGP_arm_linux)
regs->ARM_r0 = arch->vex.guest_R0;
regs->ARM_r1 = arch->vex.guest_R1;
@@ -458,7 +479,7 @@
DO(24); DO(25); DO(26); DO(27); DO(28); DO(29); DO(30); DO(31);
# undef DO
-#elif defined(VGP_ppc64_linux)
+#elif defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)
/* The guest state has the FPR fields declared as ULongs, so need
to fish out the values without converting them.
NOTE: The 32 FP registers map to the first 32 VSX registers.*/
Modified: branches/BUF_REMOVAL/coregrind/m_debugger.c
==============================================================================
--- branches/BUF_REMOVAL/coregrind/m_debugger.c (original)
+++ branches/BUF_REMOVAL/coregrind/m_debugger.c Wed Aug 13 20:51:50 2014
@@ -152,7 +152,7 @@
(void*)LibVEX_GuestPPC32_get_XER(vex));
return rc;
-#elif defined(VGP_ppc64_linux)
+#elif defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)
Int rc = 0;
/* FRJ: copied nearly verbatim from the ppc32 case. I compared the
vki-ppc64-linux.h with its ppc32 counterpart and saw no
Modified: branches/BUF_REMOVAL/coregrind/m_debuginfo/d3basics.c
==============================================================================
--- branches/BUF_REMOVAL/coregrind/m_debuginfo/d3basics.c (original)
+++ branches/BUF_REMOVAL/coregrind/m_debuginfo/d3basics.c Wed Aug 13 20:51:50 2014
@@ -406,7 +406,7 @@
if (regno == 7/*RSP*/) { *a = regs->sp; return True; }
# elif defined(VGP_ppc32_linux)
if (regno == 1/*SP*/) { *a = regs->sp; return True; }
-# elif defined(VGP_ppc64_linux)
+# elif defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)
if (regno == 1/*SP*/) { *a = regs->sp; return True; }
# elif defined(VGP_arm_linux)
if (regno == 13) { *a = regs->sp; return True; }
@@ -863,7 +863,8 @@
if (!regs)
FAIL("evaluate_Dwarf3_Expr: "
"DW_OP_call_frame_cfa but no reg info");
-#if defined(VGP_ppc32_linux) || defined(VGP_ppc64_linux)
+#if defined(VGP_ppc32_linux) || defined(VGP_ppc64be_linux) \
+ || defined(VGP_ppc64le_linux)
/* Valgrind on ppc32/ppc64 currently doesn't use unwind info. */
uw1 = ML_(read_Addr)((UChar*)regs->sp);
#else
Modified: branches/BUF_REMOVAL/coregrind/m_debuginfo/debuginfo.c
==============================================================================
--- branches/BUF_REMOVAL/coregrind/m_debuginfo/debuginfo.c (original)
+++ branches/BUF_REMOVAL/coregrind/m_debuginfo/debuginfo.c Wed Aug 13 20:51:50 2014
@@ -1,4 +1,5 @@
+
/*--------------------------------------------------------------------*/
/*--- Top level management of symbols and debugging information. ---*/
/*--- debuginfo.c ---*/
@@ -836,8 +837,8 @@
|| defined(VGA_mips64)
is_rx_map = seg->hasR && seg->hasX;
is_rw_map = seg->hasR && seg->hasW;
-# elif defined(VGA_amd64) || defined(VGA_ppc64) || defined(VGA_arm) \
- || defined(VGA_arm64)
+# elif defined(VGA_amd64) || defined(VGA_ppc64be) || defined(VGA_ppc64le) \
+ || defined(VGA_arm) || defined(VGA_arm64)
is_rx_map = seg->hasR && seg->hasX && !seg->hasW;
is_rw_map = seg->hasR && seg->hasW && !seg->hasX;
# elif defined(VGP_s390x_linux)
@@ -1681,7 +1682,7 @@
return True;
}
-/* ppc64-linux only: find the TOC pointer (R2 value) that should be in
+/* ppc64be-linux only: find the TOC pointer (R2 value) that should be in
force at the entry point address of the function containing
guest_code_addr. Returns 0 if not known. */
Addr VG_(get_tocptr) ( Addr guest_code_addr )
@@ -1909,7 +1910,6 @@
DebugInfo* si;
Word locno;
UInt fndn_ix;
- FnDn* fndn;
search_all_loctabs ( a, &si, &locno );
if (si == NULL) {
@@ -1917,22 +1917,25 @@
return False;
}
fndn_ix = ML_(fndn_ix) (si, locno);
- if (fndn_ix == 0)
- *filename = (HChar *)"???"; // FIXME: constification
- else {
- static SizeT bufsiz = 0;
- static HChar *buf = NULL;
- SizeT need;
- fndn = VG_(indexEltNumber) (si->fndnpool, fndn_ix);
- need = VG_(strlen)(fndn->filename) + 1;
- if (need < 256) need = 256;
- if (need > bufsiz) {
- bufsiz = need;
- buf = ML_(dinfo_realloc)("get_filename", buf, bufsiz);
- }
- VG_(strcpy)(buf, fndn->filename);
- *filename = buf;
+
+ // This string is not persistent. It would not survive a dlclose of the
+ // shared object to which the file belonged. The reason is that the
+ // associated debuginfo will be freed and the stringpool hangs off that.
+ const HChar *fname = ML_(fndn_ix2filename) (si, fndn_ix);
+
+ static SizeT bufsiz = 0;
+ static HChar *buf = NULL;
+ SizeT need;
+
+ need = VG_(strlen)(fname) + 1;
+ if (need > bufsiz) {
+ if (need < 256) need = 256;
+ bufsiz = need;
+ buf = ML_(dinfo_realloc)("get_filename", buf, bufsiz);
}
+ VG_(strcpy)(buf, fname);
+ *filename = buf;
+
return True;
}
@@ -1961,7 +1964,6 @@
DebugInfo* si;
Word locno;
UInt fndn_ix;
- FnDn* fndn = NULL;
vg_assert( (dirname == NULL && dirname_available == NULL)
||
@@ -1977,26 +1979,18 @@
}
fndn_ix = ML_(fndn_ix)(si, locno);
- if (fndn_ix == 0)
- VG_(strncpy_safely)(filename, "???", n_filename);
- else {
- fndn = VG_(indexEltNumber) (si->fndnpool, fndn_ix);
- VG_(strncpy_safely)(filename, fndn->filename, n_filename);
- }
+ VG_(strncpy_safely)(filename,
+ ML_(fndn_ix2filename) (si, fndn_ix),
+ n_filename);
*lineno = si->loctab[locno].lineno;
if (dirname) {
/* caller wants directory info too .. */
vg_assert(n_dirname > 0);
- if (fndn_ix != 0 && fndn->dirname) {
- /* .. and we have some */
- *dirname_available = True;
- VG_(strncpy_safely)(dirname, fndn->dirname, n_dirname);
- } else {
- /* .. but we don't have any */
- *dirname_available = False;
- *dirname = 0;
- }
+ VG_(strncpy_safely)(dirname,
+ ML_(fndn_ix2dirname) (si, fndn_ix),
+ n_dirname);
+ *dirname_available = *dirname != 0;
}
return True;
@@ -2179,11 +2173,21 @@
? & iipc->di->inltab[iipc->cur_inltab]
: NULL;
vg_assert (cur_inl);
- // The filename and lineno for the inlined fn caller is in cur_inl.
- VG_(snprintf) (buf_srcloc, BUF_LEN, "%s", cur_inl->filename);
- lineno = cur_inl->lineno;
know_dirinfo = False;
+ // The fndn_ix and lineno for the caller of the inlined fn is in cur_inl.
+ if (cur_inl->fndn_ix == 0) {
+ VG_(snprintf) (buf_srcloc, BUF_LEN, "???");
+ } else {
+ FnDn *fndn = VG_(indexEltNumber) (iipc->di->fndnpool,
+ cur_inl->fndn_ix);
+ if (fndn->dirname) {
+ VG_(snprintf) (buf_dirname, BUF_LEN, "%s", fndn->dirname);
+ know_dirinfo = True;
+ }
+ VG_(snprintf) (buf_srcloc, BUF_LEN, "%s", fndn->filename);
+ }
+ lineno = cur_inl->lineno;
know_srcloc = True;
}
@@ -2383,6 +2387,7 @@
case Creg_ARM_R14: return eec->uregs->r14;
case Creg_ARM_R13: return eec->uregs->r13;
case Creg_ARM_R12: return eec->uregs->r12;
+ case Creg_ARM_R7: return eec->uregs->r7;
# elif defined(VGA_s390x)
case Creg_IA_IP: return eec->uregs->ia;
case Creg_IA_SP: return eec->uregs->sp;
@@ -2393,7 +2398,8 @@
case Creg_IA_SP: return eec->uregs->sp;
case Creg_IA_BP: return eec->uregs->fp;
case Creg_MIPS_RA: return eec->uregs->ra;
-# elif defined(VGA_ppc32) || defined(VGA_ppc64)
+# elif defined(VGA_ppc32) || defined(VGA_ppc64be) \
+ || defined(VGA_ppc64le)
# elif defined(VGP_arm64_linux)
case Creg_ARM64_X30: return eec->uregs->x30;
# else
@@ -2643,7 +2649,7 @@
case CFIC_IA_BPREL:
cfa = cfsi_m->cfa_off + uregs->fp;
break;
-# elif defined(VGA_ppc32) || defined(VGA_ppc64)
+# elif defined(VGA_ppc32) || defined(VGA_ppc64be) || defined(VGA_ppc64le)
# elif defined(VGP_arm64_linux)
case CFIC_ARM64_SPREL:
cfa = cfsi_m->cfa_off + uregs->sp;
@@ -2751,7 +2757,7 @@
ipHere = uregsHere->ia;
# elif defined(VGA_mips32) || defined(VGA_mips64)
ipHere = uregsHere->pc;
-# elif defined(VGA_ppc32) || defined(VGA_ppc64)
+# elif defined(VGA_ppc32) || defined(VGA_ppc64be) || defined(VGA_ppc64le)
# elif defined(VGP_arm64_linux)
ipHere = uregsHere->pc;
# else
@@ -2833,7 +2839,7 @@
COMPUTE(uregsPrev.pc, uregsHere->pc, cfsi_m->ra_how, cfsi_m->ra_off);
COMPUTE(uregsPrev.sp, uregsHere->sp, cfsi_m->sp_how, cfsi_m->sp_off);
COMPUTE(uregsPrev.fp, uregsHere->fp, cfsi_m->fp_how, cfsi_m->fp_off);
-# elif defined(VGA_ppc32) || defined(VGA_ppc64)
+# elif defined(VGA_ppc32) || defined(VGA_ppc64be) || defined(VGA_ppc64le)
# elif defined(VGP_arm64_linux)
COMPUTE(uregsPrev.pc, uregsHere->pc, cfsi_m->ra_how, cfsi_m->ra_off);
COMPUTE(uregsPrev.sp, uregsHere->sp, cfsi_m->sp_how, cfsi_m->sp_off);
@@ -3073,6 +3079,7 @@
static void format_message ( /*MOD*/XArray* /* of HChar */ dn1,
/*MOD*/XArray* /* of HChar */ dn2,
Addr data_addr,
+ DebugInfo* di,
DiVariable* var,
PtrdiffT var_offset,
PtrdiffT residual_offset,
@@ -3086,6 +3093,9 @@
const HChar* ro_plural = residual_offset == 1 ? "" : "s";
const HChar* basetag = "auxwhat"; /* a constant */
HChar tagL[32], tagR[32], xagL[32], xagR[32];
+ const HChar *fileName = ML_(fndn_ix2filename)(di, var->fndn_ix);
+ // fileName will be "???" if var->fndn_ix == 0.
+ // fileName will only be used if have_descr is True.
if (frameNo < -1) {
vg_assert(0); /* Not allowed */
@@ -3102,7 +3112,7 @@
vg_assert(var && var->name);
have_descr = VG_(sizeXA)(described) > 0
&& *(UChar*)VG_(indexXA)(described,0) != '\0';
- have_srcloc = var->fileName && var->lineNo > 0;
+ have_srcloc = var->fndn_ix > 0 && var->lineNo > 0;
tagL[0] = tagR[0] = xagL[0] = xagR[0] = 0;
if (xml) {
@@ -3160,12 +3170,12 @@
TXTL( dn2 );
p2XA( dn2,
"declared at %pS:%d, in frame #%d of thread %d",
- var->fileName, var->lineNo, frameNo, (Int)tid );
+ fileName, var->lineNo, frameNo, (Int)tid );
TXTR( dn2 );
// FIXME: also do <dir>
p2XA( dn2,
" <file>%pS</file> <line>%d</line> ",
- var->fileName, var->lineNo );
+ fileName, var->lineNo );
XAGR( dn2 );
} else {
p2XA( dn1,
@@ -3173,7 +3183,7 @@
data_addr, var_offset, vo_plural, var->name );
p2XA( dn2,
"declared at %s:%d, in frame #%d of thread %d",
- var->fileName, var->lineNo, frameNo, (Int)tid );
+ fileName, var->lineNo, frameNo, (Int)tid );
}
}
else
@@ -3217,12 +3227,12 @@
TXTL( dn2 );
p2XA( dn2,
"declared at %pS:%d, in frame #%d of thread %d",
- var->fileName, var->lineNo, frameNo, (Int)tid );
+ fileName, var->lineNo, frameNo, (Int)tid );
TXTR( dn2 );
// FIXME: also do <dir>
p2XA( dn2,
" <file>%pS</file> <line>%d</line> ",
- var->fileName, var->lineNo );
+ fileName, var->lineNo );
XAGR( dn2 );
} else {
p2XA( dn1,
@@ -3231,7 +3241,7 @@
(HChar*)(VG_(indexXA)(described,0)) );
p2XA( dn2,
"declared at %s:%d, in frame #%d of thread %d",
- var->fileName, var->lineNo, frameNo, (Int)tid );
+ fileName, var->lineNo, frameNo, (Int)tid );
}
}
else
@@ -3268,12 +3278,12 @@
TXTL( dn2 );
p2XA( dn2,
"declared at %pS:%d",
- var->fileName, var->lineNo);
+ fileName, var->lineNo);
TXTR( dn2 );
// FIXME: also do <dir>
p2XA( dn2,
" <file>%pS</file> <line>%d</line> ",
- var->fileName, var->lineNo );
+ fileName, var->lineNo );
XAGR( dn2 );
} else {
p2XA( dn1,
@@ -3281,7 +3291,7 @@
data_addr, var_offset, vo_plural, var->name );
p2XA( dn2,
"declared at %s:%d",
- var->fileName, var->lineNo);
+ fileName, var->lineNo);
}
}
else
@@ -3325,12 +3335,12 @@
TXTL( dn2 );
p2XA( dn2,
"a global variable declared at %pS:%d",
- var->fileName, var->lineNo);
+ fileName, var->lineNo);
TXTR( dn2 );
// FIXME: also do <dir>
p2XA( dn2,
" <file>%pS</file> <line>%d</line> ",
- var->fileName, var->lineNo );
+ fileName, var->lineNo );
XAGR( dn2 );
} else {
p2XA( dn1,
@@ -3339,7 +3349,7 @@
(HChar*)(VG_(indexXA)(described,0)) );
p2XA( dn2,
"a global variable declared at %s:%d",
- var->fileName, var->lineNo);
+ fileName, var->lineNo);
}
}
else
@@ -3474,7 +3484,7 @@
di->admin_tyents,
var->typeR, offset );
format_message( dname1, dname2,
- data_addr, var, offset, residual_offset,
+ data_addr, di, var, offset, residual_offset,
described, frameNo, tid );
VG_(deleteXA)( described );
return True;
@@ -3582,7 +3592,7 @@
di->admin_tyents,
var->typeR, offset );
format_message( dname1, dname2,
- data_addr, var, offset, residual_offset,
+ data_addr, di, var, offset, residual_offset,
described, -1/*frameNo*/,
VG_INVALID_THREADID );
VG_(deleteXA)( described );
@@ -4033,8 +4043,8 @@
tl_assert(var->name);
tl_assert(di->soname);
if (0) VG_(printf)("XXXX %s %s %d\n", var->name,
- var->fileName?(HChar*)var->fileName
- :"??",var->lineNo);
+ ML_(fndn_ix2filename)(di, var->fndn_ix),
+ var->lineNo);
VG_(memset)(&gb, 0, sizeof(gb));
gb.addr = res.word;
gb.szB = (SizeT)mul.ul;
@@ -4141,6 +4151,7 @@
Int idx,
/*OUT*/Addr* avma,
/*OUT*/Addr* tocptr,
+ /*OUT*/Addr* local_ep,
/*OUT*/UInt* size,
/*OUT*/HChar** pri_name,
/*OUT*/HChar*** sec_names,
@@ -4150,6 +4161,7 @@
vg_assert(idx >= 0 && idx < si->symtab_used);
if (avma) *avma = si->symtab[idx].addr;
if (tocptr) *tocptr = si->symtab[idx].tocptr;
+ if (local_ep) *local_ep = si->symtab[idx].local_ep;
if (size) *size = si->symtab[idx].size;
if (pri_name) *pri_name = si->symtab[idx].pri_name;
if (sec_names) *sec_names = (HChar **)si->symtab[idx].sec_names; // FIXME
Modified: branches/BUF_REMOVAL/coregrind/m_debuginfo/priv_storage.h
==============================================================================
--- branches/BUF_REMOVAL/coregrind/m_debuginfo/priv_storage.h (original)
+++ branches/BUF_REMOVAL/coregrind/m_debuginfo/priv_storage.h Wed Aug 13 20:51:50 2014
@@ -71,7 +71,8 @@
typedef
struct {
Addr addr; /* lowest address of entity */
- Addr tocptr; /* ppc64-linux only: value that R2 should have */
+ Addr tocptr; /* ppc64be-linux only: value that R2 should have */
+ Addr local_ep; /* address for local entry point, ppc64le */
HChar* pri_name; /* primary name, never NULL */
HChar** sec_names; /* NULL, or a NULL term'd array of other names */
// XXX: this could be shrunk (on 32-bit platforms) by using 30
@@ -140,9 +141,9 @@
Addr addr_hi; /* highest address following the inlined fn */
/* Word 3 */
const HChar* inlinedfn; /* inlined function name */
- /* Word 4 */
- const HChar* filename; /* caller source filename */
- /* Word 5 */
+ /* Word 4 and 5 */
+ UInt fndn_ix; /* index in di->fndnpool of caller source
+ dirname/filename */
UInt lineno:LINENO_BITS; /* caller line number */
UShort level:LEVEL_BITS; /* level of inlining */
}
@@ -274,6 +275,8 @@
Int r12_off;
Int r11_off;
Int r7_off;
+ // If you add additional fields, don't forget to update the
+ // initialisation of this in readexidx.c accordingly.
}
DiCfSI_m;
#elif defined(VGA_arm64)
@@ -291,7 +294,7 @@
Int x29_off;
}
DiCfSI_m;
-#elif defined(VGA_ppc32) || defined(VGA_ppc64)
+#elif defined(VGA_ppc32) || defined(VGA_ppc64be) || defined(VGA_ppc64le)
/* Just have a struct with the common fields in, so that code that
processes the common fields doesn't have to be ifdef'd against
VGP_/VGA_ symbols. These are not used in any way on ppc32/64-linux
@@ -369,13 +372,15 @@
typedef
enum {
- Creg_IA_SP=0x213,
+ Creg_INVALID=0x213,
+ Creg_IA_SP,
Creg_IA_BP,
Creg_IA_IP,
Creg_ARM_R13,
Creg_ARM_R12,
Creg_ARM_R15,
Creg_ARM_R14,
+ Creg_ARM_R7,
Creg_ARM64_X30,
Creg_S390_R14,
Creg_MIPS_RA
@@ -475,8 +480,8 @@
UWord typeR; /* a cuOff */
GExpr* gexpr; /* on DebugInfo.gexprs list */
GExpr* fbGX; /* SHARED. */
- HChar* fileName; /* where declared; may be NULL. in
- DebugInfo.strpool */
+ UInt fndn_ix; /* where declared; may be zero. index
+ in DebugInfo.fndnpool */
Int lineNo; /* where declared; may be zero. */
}
DiVariable;
@@ -788,6 +793,18 @@
PtrdiffT sbss_bias;
Addr sbss_debug_svma;
PtrdiffT sbss_debug_bias;
+ /* .ARM.exidx -- sometimes present on arm32, containing unwind info. */
+ Bool exidx_present;
+ Addr exidx_avma;
+ Addr exidx_svma;
+ SizeT exidx_size;
+ PtrdiffT exidx_bias;
+ /* .ARM.extab -- sometimes present on arm32, containing unwind info. */
+ Bool extab_present;
+ Addr extab_avma;
+ Addr extab_svma;
+ SizeT extab_size;
+ PtrdiffT extab_bias;
/* .plt */
Bool plt_present;
Addr plt_avma;
@@ -800,7 +817,7 @@
Bool gotplt_present;
Addr gotplt_avma;
SizeT gotplt_size;
- /* .opd -- needed on ppc64-linux for finding symbols */
+ /* .opd -- needed on ppc64be-linux for finding symbols */
Bool opd_present;
Addr opd_avma;
SizeT opd_size;
@@ -888,7 +905,9 @@
cfsi_exprs. */
Addr* cfsi_base;
UInt sizeof_cfsi_m_ix; /* size in byte of indexes stored in cfsi_m_ix. */
- UInt* cfsi_m_ix; /* Each index occupies sizeof_cfsi_m_ix bytes. */
+ void* cfsi_m_ix; /* Each index occupies sizeof_cfsi_m_ix bytes.
+ The void* is an UChar* or UShort* or UInt*
+ depending on sizeof_cfsi_m_ix. */
DiCfSI* cfsi_rd; /* Only used during reading, NULL once info is read. */
@@ -975,6 +994,16 @@
const HChar* filename,
const HChar* dirname); /* NULL is allowable */
+/* Returns the filename of the fndn pair identified by fndn_ix.
+ Returns "???" if fndn_ix is 0. */
+extern const HChar* ML_(fndn_ix2filename) (struct _DebugInfo* di,
+ UInt fndn_ix);
+
+/* Returns the dirname of the fndn pair identified by fndn_ix.
+ Returns "" if fndn_ix is 0 or fndn->dirname is NULL. */
+extern const HChar* ML_(fndn_ix2dirname) (struct _DebugInfo* di,
+ UInt fndn_ix);
+
/* Returns the fndn_ix for the LineInfo locno in di->loctab.
0 if filename/dirname are unknown. */
extern UInt ML_(fndn_ix) (struct _DebugInfo* di, Word locno);
@@ -991,15 +1020,17 @@
A call to the below means that inlinedfn code has been
inlined, resulting in code from [addr_lo, addr_hi[.
Note that addr_hi is excluded, i.e. is not part of the inlined code.
- The call that caused this inlining is in filename/lineno (dirname
- is not recorded).
+ fndn_ix and lineno identifies the location of the call that caused
+ this inlining.
+ fndn_ix is an index in di->fndnpool, allocated using ML_(addFnDn).
+ Give a 0 index for an unknown filename/dirname pair.
In case of nested inlining, a small level indicates the call
is closer to main that a call with a higher level. */
extern
void ML_(addInlInfo) ( struct _DebugInfo* di,
Addr addr_lo, Addr addr_hi,
const HChar* inlinedfn,
- const HChar* filename,
+ UInt fndn_ix,
Int lineno, UShort level);
/* Add a CFI summary record. The supplied DiCfSI_m is copied. */
@@ -1028,9 +1059,11 @@
UWord typeR, /* a cuOff */
GExpr* gexpr,
GExpr* fbGX, /* SHARED. */
- HChar* fileName, /* where decl'd - may be NULL */
+ UInt fndn_ix, /* where decl'd - may be zero */
Int lineNo, /* where decl'd - may be zero */
Bool show );
+/* Note: fndn_ix identifies a filename/dirname pair similarly to
+ ML_(addInlInfo) and ML_(addLineInfo). */
/* Canonicalise the tables held by 'di', in preparation for use. Call
this after finishing adding entries to these tables. */
Modified: branches/BUF_REMOVAL/coregrind/m_debuginfo/readdwarf.c
==============================================================================
--- branches/BUF_REMOVAL/coregrind/m_debuginfo/readdwarf.c (original)
+++ branches/BUF_REMOVAL/coregrind/m_debuginfo/readdwarf.c Wed Aug 13 20:51:50 2014
@@ -508,10 +508,10 @@
}
VG_(printf)("\n");
}
-
- /* Read the contents of the Directory table. */
+ /* skip over "standard_opcode_lengths" */
data = ML_(cur_plus)(standard_opcodes, info.li_opcode_base - 1);
+ /* Read the contents of the Directory table. */
if (di->ddump_line)
VG_(printf)(" The Directory Table%s\n",
ML_(cur_read_UChar)(data) == 0 ? " is empty." : ":" );
@@ -1735,7 +1735,7 @@
# define FP_REG 1
# define SP_REG 1
# define RA_REG_DEFAULT 65
-#elif defined(VGP_ppc64_linux)
+#elif defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)
# define FP_REG 1
# define SP_REG 1
# define RA_REG_DEFAULT 65
@@ -1775,8 +1775,9 @@
arm-linux (320) seems ludicrously high, but the ARM IHI 0040A page
7 (DWARF for the ARM Architecture) specifies that values up to 320
might exist, for Neon/VFP-v3. */
-#if defined(VGP_ppc32_linux) || defined(VGP_ppc64_linux) \
- || defined(VGP_mips32_linux) || defined(VGP_mips64_linux)
+#if defined(VGP_ppc32_linux) || defined(VGP_ppc64be_linux) \
+ || defined(VGP_ppc64le_linux) || defined(VGP_mips32_linux) \
+ || defined(VGP_mips64_linux)
# define N_CFI_REGS 72
#elif defined(VGP_arm_linux)
# define N_CFI_REGS 320
@@ -2393,7 +2394,7 @@
return True;
-# elif defined(VGA_ppc32) || defined(VGA_ppc64)
+# elif defined(VGA_ppc32) || defined(VGA_ppc64be) || defined(VGA_ppc64le)
/* These don't use CFI based unwinding (is that really true?) */
# else
@@ -2487,7 +2488,8 @@
return ML_(CfiExpr_CfiReg)( dstxa, Creg_IA_IP );
# elif defined(VGA_arm64)
I_die_here;
-# elif defined(VGA_ppc32) || defined(VGA_ppc64)
+# elif defined(VGA_ppc32) || defined(VGA_ppc64be) \
+ || defined(VGA_ppc64le)
# else
# error "Unknown arch"
# endif
@@ -3658,7 +3660,8 @@
if (!is_ehframe)
vg_assert(frame_avma == 0);
-# if defined(VGP_ppc32_linux) || defined(VGP_ppc64_linux)
+# if defined(VGP_ppc32_linux) || defined(VGP_ppc64be_linux) \
+ || defined(VGP_ppc64le_linux)
/* These targets don't use CFI-based stack unwinding. */
return;
# endif
Modified: branches/BUF_REMOVAL/coregrind/m_debuginfo/readdwarf3.c
==============================================================================
--- branches/BUF_REMOVAL/coregrind/m_debuginfo/readdwarf3.c (original)
+++ branches/BUF_REMOVAL/coregrind/m_debuginfo/readdwarf3.c Wed Aug 13 20:51:50 2014
@@ -1574,7 +1574,7 @@
GExpr* gexpr; /* for this variable */
GExpr* fbGX; /* to find the frame base of the enclosing fn, if
any */
- HChar* fName; /* declaring file name, or NULL */
+ UInt fndn_ix; /* declaring file/dirname index in fndnpool, or 0 */
Int fLine; /* declaring file line number, or zero */
/* offset in .debug_info, so that abstract instances can be
found to satisfy references from concrete instances. */
@@ -1610,9 +1610,9 @@
Bool isFunc[N_D3_VAR_STACK]; /* from DW_AT_subprogram? */
GExpr* fbGX[N_D3_VAR_STACK]; /* if isFunc, contains the FB
expr, else NULL */
- /* The file name table. Is a mapping from integer index to the
- (permanent) copy of the string in in DebugInfo's .strpool. */
- XArray* /* of UChar* */ filenameTable;
+ /* The fndn_ix file name/dirname table. Is a mapping from dwarf
+ integer index to the index in di->fndnpool. */
+ XArray* /* of UInt* */ fndn_ix_Table;
}
D3VarParser;
@@ -1733,9 +1733,92 @@
return gexpr;
}
+/* Returns an xarray* of directory names (indexed by the dwarf dirname
+ integer).
+ If 'compdir' is NULL, entry [0] will be set to "."
+ otherwise entry [0] is set to compdir.
+ Entry [0] basically means "the current directory of the compilation",
+ whatever that means, according to the DWARF3 spec.
+ FIXME??? readdwarf3.c/readdwarf.c have a lot of duplicated code */
+static
+XArray* read_dirname_xa (struct _DebugInfo* di, const HChar *compdir,
+ Cursor *c,
...
[truncated message content] |