Without this biasing, inline info is not correct for shared objects.
Updated test varinfo5 to use --read-inline-info=yes and added
an inline test case.
Note: the varinfo reader does not understand the inlining info, and
so variables in inlined functions are not properly described.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@14146
if (have_lo && have_hi1 && (!have_range)) {
/* This inlined call is just a single address range. */
if (ip_lo < ip_hi1) {
+ /* Apply text debug biasing */
+ ip_lo += cc->di->text_debug_bias;
+ ip_hi1 += cc->di->text_debug_bias;
ML_(addInlInfo) (cc->di,
ip_lo, ip_hi1,
get_inlFnName (inlinedfn_abstract_origin, cc, td3),
Word j;
HChar *inlfnname = get_inlFnName (inlinedfn_abstract_origin, cc, td3);
+ /* Why is get_range_list biasing with cc->cu_svma and
+ not with text_debug_bias ? */
ranges = get_range_list( cc, td3,
rangeoff, cc->cu_svma );
for (j = 0; j < VG_(sizeXA)( ranges ); j++) {
obj:*varinfo5so.so
obj:*varinfo5
}
+
+{
+ funinl_not_shown
+ Memcheck:User
+ fun:croak
+ fun:varinfo5_main
+ fun:main
+
+}
declared at varinfo5so.c:135, in frame #1 of thread 1
answer is 0
+Uninitialised byte(s) found during client check request
+ at 0x........: croak (varinfo5so.c:29)
+ by 0x........: fun_c (varinfo5so.c:164)
+ by 0x........: fun_b (varinfo5so.c:168)
+ by 0x........: fun_a (varinfo5so.c:172)
+ by 0x........: inlinetest (varinfo5so.c:178)
+ by 0x........: varinfo5_main (varinfo5so.c:158)
+ by 0x........: main (varinfo5.c:5)
+ Address 0x........ is on thread 1's stack
+ in frame #1, created by varinfo5_main (varinfo5so.c:153)
+
prog: varinfo5
-vgopts: --read-var-info=yes -q
+vgopts: --read-var-info=yes --read-inline-info=yes -q
stderr_filter: filter_varinfo3
fprintf(stderr, "answer is %d\n", blah4(3,7) );
return 0;
}
-
+static void inlinetest(void);
/* ------------ varinfo5 ------------ */
void varinfo5_main ( void )
varinfo2_main();
varinfo3_main();
varinfo4_main();
+ inlinetest();
+}
+
+#define INLINE inline __attribute__((always_inline))
+
+INLINE void fun_c(int argc) {
+ croak(&argc);
+}
+
+INLINE void fun_b(int argb) {
+ fun_c(argb);
+}
+
+INLINE void fun_a(int *arga) {
+ fun_b(*arga);
+}
+
+void inlinetest(void)
+{
+ int i = 1;
+ fun_a(&i);
}