[valgrind] 3.8.1-8 add valgrind-3.8.1-static-variables.patch KDE#310424
Mark Wielaard
mjw at fedoraproject.org
Tue Feb 19 15:06:55 UTC 2013
commit c288cfae795f1b050bf25ea7137d98a680bdcd9d
Author: Mark Wielaard <mjw at redhat.com>
Date: Tue Feb 19 15:44:10 2013 +0100
3.8.1-8 add valgrind-3.8.1-static-variables.patch KDE#310424
valgrind-3.8.1-static-variables.patch | 743 +++++++++++++++++++++++++++++++++
1 files changed, 743 insertions(+), 0 deletions(-)
---
diff --git a/valgrind-3.8.1-static-variables.patch b/valgrind-3.8.1-static-variables.patch
new file mode 100644
index 0000000..30d02c1
--- /dev/null
+++ b/valgrind-3.8.1-static-variables.patch
@@ -0,0 +1,743 @@
+commit 81d24c396c66dde7db2d9b567451f99081a2eab7
+Author: philippe <philippe at a5019735-40e9-0310-863c-91ae7b9d1cf9>
+Date: Wed Dec 5 21:08:24 2012 +0000
+
+ fix 310424 --read-var-info does not properly describe static variables
+
+ This patch changes the way static variables are
+ recorded by readdwarf3.c (when giving --read-var-info=yes),
+ improving the way such variables are described.
+
+ Currently:
+ A static variable does not have the DW_AT_external tag.
+ So, readdwarf3.c does not consider it a global variable.
+ It is rather considered a "local" variable.
+ When it is recorded, it is associated to a range of program counters
+ (the functions in the file where it is visible).
+ However, even if the static variable is only visible
+ in the source file where it is declared, it can in reality
+ be used by any range of program counters, typically
+ by having the address of the local variable passed
+ to other functions.
+
+ Such local variable can then only be described
+ when the program counter is in the range of program
+ counters for which it has been recorded.
+ However, this (local) description is obtained
+ by a kludge in debuginfo.c (around line 3285).
+
+ This kludge then produces a strange description,
+ telling that the variable has been declared in
+ frame 0 of a thread (see second example below).
+
+ The kludge is not always able to describe
+ the address (if the IP of the tid is in another file than
+ where the variable has been declared).
+
+ I suspect the kludge can sometimes describe the var as being
+ declared in an unrelated thread
+ (e.g. if an error is triggered by tid 5, but tid1 is by
+ luck in an IP corresponding to the recorded range).
+
+
+ The patch changes the way a static variable is recorded:
+ if DW_AT_external tag is found, a variable is marked as global.
+ If a variable is not external, but is seen when level is 1,
+ then we record the variable as a global variable (i.e.
+ with a full IP range).
+ This improves the way such static variable are described:
+ * they are described even if being accessed by other files.
+ * their description is not in an artificial "thread frame".
+
+
+
+
+ First example:
+ **************
+ a variable cannot be described because it is
+ accessed by a function in another file:
+
+ with the trunk:
+ ==20410== ----------------------------------------------------------------
+ ==20410==
+ ==20410== Possible data race during read of size 4 at 0x600F54 by thread #1
+ ==20410== Locks held: none
+ ==20410== at 0x4007E4: a (abc.c:42)
+ ==20410== by 0x4006BC: main (mabc.c:24)
+ ==20410==
+ ==20410== This conflicts with a previous write of size 4 by thread #2
+ ==20410== Locks held: none
+ ==20410== at 0x4007ED: a (abc.c:42)
+ ==20410== by 0x400651: brussels_fn (mabc.c:9)
+ ==20410== by 0x4C2B54E: mythread_wrapper (hg_intercepts.c:219)
+ ==20410== by 0x4E348C9: start_thread (pthread_create.c:300)
+ ==20410==
+ ==20410== ----------------------------------------------------------------
+
+
+ with the patch:
+ ==4515== ----------------------------------------------------------------
+ ==4515==
+ ==4515== Possible data race during read of size 4 at 0x600F54 by thread #1
+ ==4515== Locks held: none
+ ==4515== at 0x4007E4: a (abc.c:42)
+ ==4515== by 0x4006BC: main (mabc.c:24)
+ ==4515==
+ ==4515== This conflicts with a previous write of size 4 by thread #2
+ ==4515== Locks held: none
+ ==4515== at 0x4007ED: a (abc.c:42)
+ ==4515== by 0x400651: brussels_fn (mabc.c:9)
+ ==4515== by 0x4C2B54E: mythread_wrapper (hg_intercepts.c:219)
+ ==4515== by 0x4E348C9: start_thread (pthread_create.c:300)
+ ==4515==
+ ==4515== Location 0x600f54 is 0 bytes inside global var "static_global"
+ ==4515== declared at mabc.c:4
+ ==4515==
+ ==4515== ----------------------------------------------------------------
+
+
+ Second example:
+ ***************
+ When the kludge can describe the variable, it is strangely described
+ as being declared in a frame of a thread, while for sure the declaration
+ has nothing to do with a thread
+ With the trunk:
+ ==20410== Location 0x600f68 is 0 bytes inside local var "static_global_a"
+ ==20410== declared at abc.c:3, in frame #0 of thread 1
+
+ With the patch:
+ ==4515== Location 0x600f68 is 0 bytes inside global var "static_global_a"
+ ==4515== declared at abc.c:3
+
+ #include <stdio.h>
+
+ static int static_global_a = 0; //// <<<< this is abc.c:3
+
+
+
+
+ git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13153 a5019735-40e9-0310-863c-91ae7b9d1cf9
+
+diff --git a/coregrind/m_debuginfo/debuginfo.c b/coregrind/m_debuginfo/debuginfo.c
+index 59f920d..d3b8ef4 100644
+--- a/coregrind/m_debuginfo/debuginfo.c
++++ b/coregrind/m_debuginfo/debuginfo.c
+@@ -3282,28 +3282,6 @@ Bool VG_(get_data_description)(
+ in the stacks of all the threads. First try to figure out which
+ thread's stack data_addr is in. */
+
+- /* --- KLUDGE --- Try examining the top frame of all thread stacks.
+- This finds variables which are not stack allocated but are not
+- globally visible either; specifically it appears to pick up
+- variables which are visible only within a compilation unit.
+- These will have the address range of the compilation unit and
+- tend to live at Scope level 1. */
+- VG_(thread_stack_reset_iter)(&tid);
+- while ( VG_(thread_stack_next)(&tid, &stack_min, &stack_max) ) {
+- if (stack_min >= stack_max)
+- continue; /* ignore obviously stupid cases */
+- if (consider_vars_in_frame( dname1, dname2,
+- data_addr,
+- VG_(get_IP)(tid),
+- VG_(get_SP)(tid),
+- VG_(get_FP)(tid), tid, 0 )) {
+- zterm_XA( dname1 );
+- zterm_XA( dname2 );
+- return True;
+- }
+- }
+- /* --- end KLUDGE --- */
+-
+ /* Perhaps it's on a thread's stack? */
+ found = False;
+ VG_(thread_stack_reset_iter)(&tid);
+@@ -3328,9 +3306,6 @@ Bool VG_(get_data_description)(
+ n_frames = VG_(get_StackTrace)( tid, ips, N_FRAMES,
+ sps, fps, 0/*first_ip_delta*/ );
+
+- /* As a result of KLUDGE above, starting the loop at j = 0
+- duplicates examination of the top frame and so isn't necessary.
+- Oh well. */
+ vg_assert(n_frames >= 0 && n_frames <= N_FRAMES);
+ for (j = 0; j < n_frames; j++) {
+ if (consider_vars_in_frame( dname1, dname2,
+diff --git a/drd/tests/annotate_ignore_rw.stderr.exp b/drd/tests/annotate_ignore_rw.stderr.exp
+index 24684da..416be80 100644
+--- a/drd/tests/annotate_ignore_rw.stderr.exp
++++ b/drd/tests/annotate_ignore_rw.stderr.exp
+@@ -1,8 +1,8 @@
+
+ Conflicting load by thread 1 at 0x........ size 1
+ at 0x........: main (annotate_ignore_rw.c:?)
+-Location 0x........ is 0 bytes inside local var "s_c"
+-declared at annotate_ignore_rw.c:12, in frame #? of thread 1
++Location 0x........ is 0 bytes inside global var "s_c"
++declared at annotate_ignore_rw.c:12
+
+ Finished.
+
+diff --git a/drd/tests/annotate_ignore_rw2.stderr.exp b/drd/tests/annotate_ignore_rw2.stderr.exp
+index ffdb76f..4e96bf3 100644
+--- a/drd/tests/annotate_ignore_rw2.stderr.exp
++++ b/drd/tests/annotate_ignore_rw2.stderr.exp
+@@ -1,18 +1,18 @@
+
+ Conflicting load by thread 1 at 0x........ size 1
+ at 0x........: main (annotate_ignore_rw.c:?)
+-Location 0x........ is 0 bytes inside local var "s_b"
+-declared at annotate_ignore_rw.c:11, in frame #? of thread 1
++Location 0x........ is 0 bytes inside global var "s_b"
++declared at annotate_ignore_rw.c:11
+
+ Conflicting store by thread 1 at 0x........ size 1
+ at 0x........: main (annotate_ignore_rw.c:?)
+-Location 0x........ is 0 bytes inside local var "s_a"
+-declared at annotate_ignore_rw.c:10, in frame #? of thread 1
++Location 0x........ is 0 bytes inside global var "s_a"
++declared at annotate_ignore_rw.c:10
+
+ Conflicting load by thread 1 at 0x........ size 1
+ at 0x........: main (annotate_ignore_rw.c:?)
+-Location 0x........ is 0 bytes inside local var "s_c"
+-declared at annotate_ignore_rw.c:12, in frame #? of thread 1
++Location 0x........ is 0 bytes inside global var "s_c"
++declared at annotate_ignore_rw.c:12
+
+ Finished.
+
+diff --git a/drd/tests/annotate_ignore_write.stderr.exp b/drd/tests/annotate_ignore_write.stderr.exp
+index f26242e..2204d5b 100644
+--- a/drd/tests/annotate_ignore_write.stderr.exp
++++ b/drd/tests/annotate_ignore_write.stderr.exp
+@@ -1,18 +1,18 @@
+
+ Conflicting load by thread 1 at 0x........ size 1
+ at 0x........: main (annotate_ignore_write.c:?)
+-Location 0x........ is 0 bytes inside local var "s_b"
+-declared at annotate_ignore_write.c:11, in frame #? of thread 1
++Location 0x........ is 0 bytes inside global var "s_b"
++declared at annotate_ignore_write.c:11
+
+ Conflicting load by thread 1 at 0x........ size 1
+ at 0x........: main (annotate_ignore_write.c:?)
+-Location 0x........ is 0 bytes inside local var "s_c"
+-declared at annotate_ignore_write.c:12, in frame #? of thread 1
++Location 0x........ is 0 bytes inside global var "s_c"
++declared at annotate_ignore_write.c:12
+
+ Conflicting store by thread 1 at 0x........ size 1
+ at 0x........: main (annotate_ignore_write.c:?)
+-Location 0x........ is 0 bytes inside local var "s_a"
+-declared at annotate_ignore_write.c:10, in frame #? of thread 1
++Location 0x........ is 0 bytes inside global var "s_a"
++declared at annotate_ignore_write.c:10
+
+ Finished.
+
+diff --git a/drd/tests/annotate_ignore_write2.stderr.exp b/drd/tests/annotate_ignore_write2.stderr.exp
+index 03c7766..9b58325 100644
+--- a/drd/tests/annotate_ignore_write2.stderr.exp
++++ b/drd/tests/annotate_ignore_write2.stderr.exp
+@@ -1,23 +1,23 @@
+
+ Conflicting load by thread 1 at 0x........ size 1
+ at 0x........: main (annotate_ignore_write.c:?)
+-Location 0x........ is 0 bytes inside local var "s_b"
+-declared at annotate_ignore_write.c:11, in frame #? of thread 1
++Location 0x........ is 0 bytes inside global var "s_b"
++declared at annotate_ignore_write.c:11
+
+ Conflicting store by thread 1 at 0x........ size 1
+ at 0x........: main (annotate_ignore_write.c:?)
+-Location 0x........ is 0 bytes inside local var "s_a"
+-declared at annotate_ignore_write.c:10, in frame #? of thread 1
++Location 0x........ is 0 bytes inside global var "s_a"
++declared at annotate_ignore_write.c:10
+
+ Conflicting load by thread 1 at 0x........ size 1
+ at 0x........: main (annotate_ignore_write.c:?)
+-Location 0x........ is 0 bytes inside local var "s_c"
+-declared at annotate_ignore_write.c:12, in frame #? of thread 1
++Location 0x........ is 0 bytes inside global var "s_c"
++declared at annotate_ignore_write.c:12
+
+ Conflicting store by thread 1 at 0x........ size 1
+ at 0x........: main (annotate_ignore_write.c:?)
+-Location 0x........ is 0 bytes inside local var "s_a"
+-declared at annotate_ignore_write.c:10, in frame #? of thread 1
++Location 0x........ is 0 bytes inside global var "s_a"
++declared at annotate_ignore_write.c:10
+
+ Finished.
+
+diff --git a/drd/tests/atomic_var.stderr.exp b/drd/tests/atomic_var.stderr.exp
+index 7fa1e0e..ad05687 100644
+--- a/drd/tests/atomic_var.stderr.exp
++++ b/drd/tests/atomic_var.stderr.exp
+@@ -3,8 +3,8 @@ Start of test.
+ Conflicting load by thread x at 0x........ size 4
+ at 0x........: thread_func_2 (atomic_var.c:?)
+ by 0x........: vgDrd_thread_wrapper (drd_pthread_intercepts.c:?)
+-Location 0x........ is 0 bytes inside local var "s_y"
+-declared at atomic_var.c:35, in frame #? of thread x
++Location 0x........ is 0 bytes inside global var "s_y"
++declared at atomic_var.c:35
+
+ y = 1
+ Test finished.
+diff --git a/drd/tests/fp_race.stderr.exp b/drd/tests/fp_race.stderr.exp
+index 23873d2..68bd254 100644
+--- a/drd/tests/fp_race.stderr.exp
++++ b/drd/tests/fp_race.stderr.exp
+@@ -1,8 +1,8 @@
+
+ Conflicting load by thread 1 at 0x........ size 8
+ at 0x........: main (fp_race.c:?)
+-Location 0x........ is 0 bytes inside local var "s_d3"
+-declared at fp_race.c:24, in frame #? of thread 1
++Location 0x........ is 0 bytes inside global var "s_d3"
++declared at fp_race.c:24
+ Other segment start (thread 2)
+ (thread finished, call stack no longer available)
+ Other segment end (thread 2)
+@@ -10,8 +10,8 @@ Other segment end (thread 2)
+
+ Conflicting store by thread 1 at 0x........ size 8
+ at 0x........: main (fp_race.c:?)
+-Location 0x........ is 0 bytes inside local var "s_d3"
+-declared at fp_race.c:24, in frame #? of thread 1
++Location 0x........ is 0 bytes inside global var "s_d3"
++declared at fp_race.c:24
+ Other segment start (thread 2)
+ (thread finished, call stack no longer available)
+ Other segment end (thread 2)
+diff --git a/drd/tests/fp_race_xml.stderr.exp b/drd/tests/fp_race_xml.stderr.exp
+index 73a530e..05ffe71 100644
+--- a/drd/tests/fp_race_xml.stderr.exp
++++ b/drd/tests/fp_race_xml.stderr.exp
+@@ -48,8 +48,8 @@
+ <line>...</line>
+ </frame>
+ </stack>
+- <auxwhat>Location 0x........ is 0 bytes inside local var "s_d3"</auxwhat>
+- <xauxwhat><text>declared at fp_race.c:24, in frame #? of thread x</text> <file>fp_race.c</file> <line>...</line> </xauxwhat>
++ <auxwhat>Location 0x........ is 0 bytes inside global var "s_d3"</auxwhat>
++ <xauxwhat><text>declared at fp_race.c:24</text> <file>fp_race.c</file> <line>...</line> </xauxwhat>
+ <other_segment_start>
+ </other_segment_start>
+ <other_segment_end>
+@@ -71,8 +71,8 @@
+ <line>...</line>
+ </frame>
+ </stack>
+- <auxwhat>Location 0x........ is 0 bytes inside local var "s_d3"</auxwhat>
+- <xauxwhat><text>declared at fp_race.c:24, in frame #? of thread x</text> <file>fp_race.c</file> <line>...</line> </xauxwhat>
++ <auxwhat>Location 0x........ is 0 bytes inside global var "s_d3"</auxwhat>
++ <xauxwhat><text>declared at fp_race.c:24</text> <file>fp_race.c</file> <line>...</line> </xauxwhat>
+ <other_segment_start>
+ </other_segment_start>
+ <other_segment_end>
+diff --git a/drd/tests/hg03_inherit.stderr.exp b/drd/tests/hg03_inherit.stderr.exp
+index 62a8d5d..72eb236 100644
+--- a/drd/tests/hg03_inherit.stderr.exp
++++ b/drd/tests/hg03_inherit.stderr.exp
+@@ -4,13 +4,13 @@ Conflicting store by thread 3 at 0x........ size 4
+ at 0x........: t2 (hg03_inherit.c:28)
+ by 0x........: vgDrd_thread_wrapper (drd_pthread_intercepts.c:?)
+ Location 0x........ is 0 bytes inside shared[1],
+-declared at hg03_inherit.c:11, in frame #? of thread 3
++a global variable declared at hg03_inherit.c:11
+
+ Conflicting store by thread 3 at 0x........ size 4
+ at 0x........: t2 (hg03_inherit.c:29)
+ by 0x........: vgDrd_thread_wrapper (drd_pthread_intercepts.c:?)
+ Location 0x........ is 0 bytes inside shared[1],
+-declared at hg03_inherit.c:11, in frame #? of thread 3
++a global variable declared at hg03_inherit.c:11
+
+
+ ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
+diff --git a/drd/tests/hg04_race.stderr.exp b/drd/tests/hg04_race.stderr.exp
+index 9ea3ccd..5b5969c 100644
+--- a/drd/tests/hg04_race.stderr.exp
++++ b/drd/tests/hg04_race.stderr.exp
+@@ -3,8 +3,8 @@ Thread 3:
+ Conflicting load by thread 3 at 0x........ size 4
+ at 0x........: th (hg04_race.c:10)
+ by 0x........: vgDrd_thread_wrapper (drd_pthread_intercepts.c:?)
+-Location 0x........ is 0 bytes inside local var "shared"
+-declared at hg04_race.c:6, in frame #? of thread 2
++Location 0x........ is 0 bytes inside global var "shared"
++declared at hg04_race.c:6
+ Other segment start (thread 2)
+ (thread finished, call stack no longer available)
+ Other segment end (thread 2)
+@@ -13,8 +13,8 @@ Other segment end (thread 2)
+ Conflicting store by thread 3 at 0x........ size 4
+ at 0x........: th (hg04_race.c:10)
+ by 0x........: vgDrd_thread_wrapper (drd_pthread_intercepts.c:?)
+-Location 0x........ is 0 bytes inside local var "shared"
+-declared at hg04_race.c:6, in frame #? of thread 2
++Location 0x........ is 0 bytes inside global var "shared"
++declared at hg04_race.c:6
+ Other segment start (thread 2)
+ (thread finished, call stack no longer available)
+ Other segment end (thread 2)
+diff --git a/drd/tests/rwlock_race.stderr.exp b/drd/tests/rwlock_race.stderr.exp
+index 8350b50..d3e0b37 100644
+--- a/drd/tests/rwlock_race.stderr.exp
++++ b/drd/tests/rwlock_race.stderr.exp
+@@ -2,14 +2,14 @@
+ Conflicting load by thread x at 0x........ size 4
+ at 0x........: thread_func (rwlock_race.c:?)
+ by 0x........: vgDrd_thread_wrapper (drd_pthread_intercepts.c:?)
+-Location 0x........ is 0 bytes inside local var "s_racy"
+-declared at rwlock_race.c:18, in frame #? of thread x
++Location 0x........ is 0 bytes inside global var "s_racy"
++declared at rwlock_race.c:18
+
+ Conflicting store by thread x at 0x........ size 4
+ at 0x........: thread_func (rwlock_race.c:?)
+ by 0x........: vgDrd_thread_wrapper (drd_pthread_intercepts.c:?)
+-Location 0x........ is 0 bytes inside local var "s_racy"
+-declared at rwlock_race.c:18, in frame #? of thread x
++Location 0x........ is 0 bytes inside global var "s_racy"
++declared at rwlock_race.c:18
+
+ Result: 2
+
+diff --git a/drd/tests/sem_as_mutex.stderr.exp b/drd/tests/sem_as_mutex.stderr.exp
+index 1646a6c..1fbd91a 100644
+--- a/drd/tests/sem_as_mutex.stderr.exp
++++ b/drd/tests/sem_as_mutex.stderr.exp
+@@ -1,8 +1,8 @@
+
+ Conflicting load by thread 1 at 0x........ size 8
+ at 0x........: main (sem_as_mutex.c:?)
+-Location 0x........ is 0 bytes inside local var "s_d3"
+-declared at sem_as_mutex.c:25, in frame #? of thread 1
++Location 0x........ is 0 bytes inside global var "s_d3"
++declared at sem_as_mutex.c:25
+ Other segment start (thread 2)
+ (thread finished, call stack no longer available)
+ Other segment end (thread 2)
+@@ -10,8 +10,8 @@ Other segment end (thread 2)
+
+ Conflicting store by thread 1 at 0x........ size 8
+ at 0x........: main (sem_as_mutex.c:?)
+-Location 0x........ is 0 bytes inside local var "s_d3"
+-declared at sem_as_mutex.c:25, in frame #? of thread 1
++Location 0x........ is 0 bytes inside global var "s_d3"
++declared at sem_as_mutex.c:25
+ Other segment start (thread 2)
+ (thread finished, call stack no longer available)
+ Other segment end (thread 2)
+diff --git a/drd/tests/sem_as_mutex3.stderr.exp b/drd/tests/sem_as_mutex3.stderr.exp
+index 97b09a1..efd47ff 100644
+--- a/drd/tests/sem_as_mutex3.stderr.exp
++++ b/drd/tests/sem_as_mutex3.stderr.exp
+@@ -1,8 +1,8 @@
+
+ Conflicting load by thread 1 at 0x........ size 8
+ at 0x........: main (sem_as_mutex.c:?)
+-Location 0x........ is 0 bytes inside local var "s_d3"
+-declared at sem_as_mutex.c:25, in frame #? of thread 1
++Location 0x........ is 0 bytes inside global var "s_d3"
++declared at sem_as_mutex.c:25
+ Other segment start (thread 2)
+ (thread finished, call stack no longer available)
+ Other segment end (thread 2)
+diff --git a/drd/tests/sem_open.stderr.exp b/drd/tests/sem_open.stderr.exp
+index 4e769e5..e926d05 100644
+--- a/drd/tests/sem_open.stderr.exp
++++ b/drd/tests/sem_open.stderr.exp
+@@ -1,8 +1,8 @@
+
+ Conflicting load by thread 1 at 0x........ size 8
+ at 0x........: main (sem_open.c:?)
+-Location 0x........ is 0 bytes inside local var "s_d3"
+-declared at sem_open.c:25, in frame #? of thread 1
++Location 0x........ is 0 bytes inside global var "s_d3"
++declared at sem_open.c:25
+ Other segment start (thread 2)
+ (thread finished, call stack no longer available)
+ Other segment end (thread 2)
+@@ -10,8 +10,8 @@ Other segment end (thread 2)
+
+ Conflicting store by thread 1 at 0x........ size 8
+ at 0x........: main (sem_open.c:?)
+-Location 0x........ is 0 bytes inside local var "s_d3"
+-declared at sem_open.c:25, in frame #? of thread 1
++Location 0x........ is 0 bytes inside global var "s_d3"
++declared at sem_open.c:25
+ Other segment start (thread 2)
+ (thread finished, call stack no longer available)
+ Other segment end (thread 2)
+diff --git a/drd/tests/sem_open3.stderr.exp b/drd/tests/sem_open3.stderr.exp
+index 3c2d392..fb994f5 100644
+--- a/drd/tests/sem_open3.stderr.exp
++++ b/drd/tests/sem_open3.stderr.exp
+@@ -1,8 +1,8 @@
+
+ Conflicting load by thread 1 at 0x........ size 8
+ at 0x........: main (sem_open.c:?)
+-Location 0x........ is 0 bytes inside local var "s_d3"
+-declared at sem_open.c:25, in frame #? of thread 1
++Location 0x........ is 0 bytes inside global var "s_d3"
++declared at sem_open.c:25
+ Other segment start (thread 2)
+ (thread finished, call stack no longer available)
+ Other segment end (thread 2)
+diff --git a/helgrind/tests/hg03_inherit.stderr.exp b/helgrind/tests/hg03_inherit.stderr.exp
+index 1c4a91e..ee21cf0 100644
+--- a/helgrind/tests/hg03_inherit.stderr.exp
++++ b/helgrind/tests/hg03_inherit.stderr.exp
+@@ -24,7 +24,7 @@ Locks held: none
+ at 0x........: main (hg03_inherit.c:60)
+
+ Location 0x........ is 0 bytes inside shared[1],
+-declared at hg03_inherit.c:11, in frame #x of thread x
++a global variable declared at hg03_inherit.c:11
+
+
+ ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
+diff --git a/helgrind/tests/hg04_race.stderr.exp b/helgrind/tests/hg04_race.stderr.exp
+index 982f940..bf2a185 100644
+--- a/helgrind/tests/hg04_race.stderr.exp
++++ b/helgrind/tests/hg04_race.stderr.exp
+@@ -29,8 +29,8 @@ Locks held: none
+ by 0x........: mythread_wrapper (hg_intercepts.c:...)
+ ...
+
+-Location 0x........ is 0 bytes inside local var "shared"
+-declared at hg04_race.c:6, in frame #x of thread x
++Location 0x........ is 0 bytes inside global var "shared"
++declared at hg04_race.c:6
+
+ ----------------------------------------------------------------
+
+@@ -46,8 +46,8 @@ Locks held: none
+ by 0x........: mythread_wrapper (hg_intercepts.c:...)
+ ...
+
+-Location 0x........ is 0 bytes inside local var "shared"
+-declared at hg04_race.c:6, in frame #x of thread x
++Location 0x........ is 0 bytes inside global var "shared"
++declared at hg04_race.c:6
+
+
+ ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
+diff --git a/helgrind/tests/rwlock_race.stderr.exp b/helgrind/tests/rwlock_race.stderr.exp
+index 4a44713..47c3bd5 100644
+--- a/helgrind/tests/rwlock_race.stderr.exp
++++ b/helgrind/tests/rwlock_race.stderr.exp
+@@ -29,8 +29,8 @@ Locks held: none
+ by 0x........: mythread_wrapper (hg_intercepts.c:...)
+ ...
+
+-Location 0x........ is 0 bytes inside local var "s_racy"
+-declared at rwlock_race.c:18, in frame #x of thread x
++Location 0x........ is 0 bytes inside global var "s_racy"
++declared at rwlock_race.c:18
+
+ Result: 2
+
+diff --git a/helgrind/tests/tc21_pthonce.stderr.exp b/helgrind/tests/tc21_pthonce.stderr.exp
+index 3e7d241..700b492 100644
+--- a/helgrind/tests/tc21_pthonce.stderr.exp
++++ b/helgrind/tests/tc21_pthonce.stderr.exp
+@@ -29,8 +29,8 @@ Locks held: none
+ by 0x........: mythread_wrapper (hg_intercepts.c:...)
+ ...
+
+-Location 0x........ is 0 bytes inside local var "unprotected2"
+-declared at tc21_pthonce.c:51, in frame #x of thread x
++Location 0x........ is 0 bytes inside global var "unprotected2"
++declared at tc21_pthonce.c:51
+
+ ----------------------------------------------------------------
+
+@@ -46,8 +46,8 @@ Locks held: none
+ by 0x........: mythread_wrapper (hg_intercepts.c:...)
+ ...
+
+-Location 0x........ is 0 bytes inside local var "unprotected2"
+-declared at tc21_pthonce.c:51, in frame #x of thread x
++Location 0x........ is 0 bytes inside global var "unprotected2"
++declared at tc21_pthonce.c:51
+
+
+ ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
+diff --git a/memcheck/tests/varinfo3.stderr.exp b/memcheck/tests/varinfo3.stderr.exp
+index d24ddb8..73130b7 100644
+--- a/memcheck/tests/varinfo3.stderr.exp
++++ b/memcheck/tests/varinfo3.stderr.exp
+@@ -3,7 +3,7 @@ Uninitialised byte(s) found during client check request
+ by 0x........: foo (varinfo3.c:54)
+ by 0x........: main (varinfo3.c:66)
+ Location 0x........ is 0 bytes inside static_global_def[1],
+- declared at varinfo3.c:35, in frame #0 of thread 1
++ a global variable declared at varinfo3.c:35
+
+ Uninitialised byte(s) found during client check request
+ at 0x........: croak (varinfo3.c:28)
+@@ -17,7 +17,7 @@ Uninitialised byte(s) found during client check request
+ by 0x........: foo (varinfo3.c:56)
+ by 0x........: main (varinfo3.c:66)
+ Location 0x........ is 0 bytes inside static_global_undef[3],
+- declared at varinfo3.c:37, in frame #0 of thread 1
++ a global variable declared at varinfo3.c:37
+
+ Uninitialised byte(s) found during client check request
+ at 0x........: croak (varinfo3.c:28)
+diff --git a/memcheck/tests/varinfo3.stderr.exp-ppc64 b/memcheck/tests/varinfo3.stderr.exp-ppc64
+index e02a3c8..8dff370 100644
+--- a/memcheck/tests/varinfo3.stderr.exp-ppc64
++++ b/memcheck/tests/varinfo3.stderr.exp-ppc64
+@@ -3,7 +3,7 @@ Uninitialised byte(s) found during client check request
+ by 0x........: foo (varinfo3.c:54)
+ by 0x........: main (varinfo3.c:66)
+ Location 0x........ is 0 bytes inside static_global_def[1],
+- declared at varinfo3.c:35, in frame #0 of thread 1
++ a global variable declared at varinfo3.c:35
+
+ Uninitialised byte(s) found during client check request
+ at 0x........: croak (varinfo3.c:29)
+@@ -17,7 +17,7 @@ Uninitialised byte(s) found during client check request
+ by 0x........: foo (varinfo3.c:56)
+ by 0x........: main (varinfo3.c:66)
+ Location 0x........ is 0 bytes inside static_global_undef[3],
+- declared at varinfo3.c:37, in frame #0 of thread 1
++ a global variable declared at varinfo3.c:37
+
+ Uninitialised byte(s) found during client check request
+ at 0x........: croak (varinfo3.c:29)
+diff --git a/memcheck/tests/varinfo5.stderr.exp b/memcheck/tests/varinfo5.stderr.exp
+index 3be0984..5fa9d97 100644
+--- a/memcheck/tests/varinfo5.stderr.exp
++++ b/memcheck/tests/varinfo5.stderr.exp
+@@ -83,7 +83,7 @@ Uninitialised byte(s) found during client check request
+ by 0x........: varinfo5_main (varinfo5so.c:156)
+ by 0x........: main (varinfo5.c:5)
+ Location 0x........ is 0 bytes inside static_global_def[1],
+- declared at varinfo5so.c:87, in frame #0 of thread 1
++ a global variable declared at varinfo5so.c:87
+
+ Uninitialised byte(s) found during client check request
+ at 0x........: croak (varinfo5so.c:29)
+@@ -101,7 +101,7 @@ Uninitialised byte(s) found during client check request
+ by 0x........: varinfo5_main (varinfo5so.c:156)
+ by 0x........: main (varinfo5.c:5)
+ Location 0x........ is 0 bytes inside static_global_undef[3],
+- declared at varinfo5so.c:89, in frame #0 of thread 1
++ a global variable declared at varinfo5so.c:89
+
+ Uninitialised byte(s) found during client check request
+ at 0x........: croak (varinfo5so.c:29)
+diff --git a/memcheck/tests/varinfo5.stderr.exp-ppc64 b/memcheck/tests/varinfo5.stderr.exp-ppc64
+index db0c4fd..f5ebf0b 100644
+--- a/memcheck/tests/varinfo5.stderr.exp-ppc64
++++ b/memcheck/tests/varinfo5.stderr.exp-ppc64
+@@ -83,7 +83,7 @@ Uninitialised byte(s) found during client check request
+ by 0x........: varinfo5_main (varinfo5so.c:156)
+ by 0x........: main (varinfo5.c:5)
+ Location 0x........ is 0 bytes inside static_global_def[1],
+- declared at varinfo5so.c:87, in frame #0 of thread 1
++ a global variable declared at varinfo5so.c:87
+
+ Uninitialised byte(s) found during client check request
+ at 0x........: croak (varinfo5so.c:30)
+@@ -101,7 +101,7 @@ Uninitialised byte(s) found during client check request
+ by 0x........: varinfo5_main (varinfo5so.c:156)
+ by 0x........: main (varinfo5.c:5)
+ Location 0x........ is 0 bytes inside static_global_undef[3],
+- declared at varinfo5so.c:89, in frame #0 of thread 1
++ a global variable declared at varinfo5so.c:89
+
+ Uninitialised byte(s) found during client check request
+ at 0x........: croak (varinfo5so.c:30)
+--- valgrind-3.8.1/coregrind/m_debuginfo/readdwarf3.c.orig 2012-08-17 08:59:56.000000000 +0200
++++ valgrind-3.8.1/coregrind/m_debuginfo/readdwarf3.c 2013-02-19 15:39:55.965382081 +0100
+@@ -1853,7 +1853,7 @@
+ if (dtag == DW_TAG_variable || dtag == DW_TAG_formal_parameter) {
+ UChar* name = NULL;
+ UWord typeR = D3_INVALID_CUOFF;
+- Bool external = False;
++ Bool global = False;
+ GExpr* gexpr = NULL;
+ Int n_attrs = 0;
+ UWord abs_ori = (UWord)D3_INVALID_CUOFF;
+@@ -1880,7 +1880,7 @@
+ typeR = cook_die_using_form( cc, (UWord)cts, form );
+ }
+ if (attr == DW_AT_external && ctsSzB > 0 && cts > 0) {
+- external = True;
++ global = True;
+ }
+ if (attr == DW_AT_abstract_origin && ctsSzB > 0) {
+ abs_ori = (UWord)cts;
+@@ -1902,6 +1902,14 @@
+ if (0) VG_(printf)("XXX filename = %s\n", fileName);
+ }
+ }
++ if (!global && dtag == DW_TAG_variable && level == 1) {
++ /* Case of a static variable. It is better to declare
++ it global as the variable is not really related to
++ a PC range, as its address can be used by program
++ counters outside of the ranges where it is visible . */
++ global = True;
++ }
++
+ /* We'll collect it under if one of the following three
+ conditions holds:
+ (1) has location and type -> completed
+@@ -1927,7 +1935,7 @@
+ this CU. */
+ vg_assert(parser->sp >= 0);
+
+- /* If this is a local variable (non-external), try to find
++ /* If this is a local variable (non-global), try to find
+ the GExpr for the DW_AT_frame_base of the containing
+ function. It should have been pushed on the stack at the
+ time we encountered its DW_TAG_subprogram DIE, so the way
+@@ -1939,7 +1947,7 @@
+ if the containing DT_TAG_subprogram didn't supply a
+ DW_AT_frame_base -- that's OK, but there must actually be
+ a containing DW_TAG_subprogram. */
+- if (!external) {
++ if (!global) {
+ Bool found = False;
+ for (i = parser->sp; i >= 0; i--) {
+ if (parser->isFunc[i]) {
+@@ -1951,7 +1959,7 @@
+ if (!found) {
+ if (0 && VG_(clo_verbosity) >= 0) {
+ VG_(message)(Vg_DebugMsg,
+- "warning: parse_var_DIE: non-external variable "
++ "warning: parse_var_DIE: non-global variable "
+ "outside DW_TAG_subprogram\n");
+ }
+ /* goto bad_DIE; */
+@@ -1964,18 +1972,18 @@
+ }
+ }
+
+- /* re "external ? 0 : parser->sp" (twice), if the var is
+- marked 'external' then we must put it at the global scope,
++ /* re "global ? 0 : parser->sp" (twice), if the var is
++ marked 'global' then we must put it at the global scope,
+ as only the global scope (level 0) covers the entire PC
+ address space. It is asserted elsewhere that level 0
+ always covers the entire address space. */
+- xa = parser->ranges[external ? 0 : parser->sp];
++ xa = parser->ranges[global ? 0 : parser->sp];
+ nRanges = VG_(sizeXA)(xa);
+ vg_assert(nRanges >= 0);
+
+ tv = ML_(dinfo_zalloc)( "di.readdwarf3.pvD.1", sizeof(TempVar) );
+ tv->name = name;
+- tv->level = external ? 0 : parser->sp;
++ tv->level = global ? 0 : parser->sp;
+ tv->typeR = typeR;
+ tv->gexpr = gexpr;
+ tv->fbGX = fbGX;
More information about the scm-commits
mailing list