Re: [RFC PATCH] struct: Fix handing of percpu symbols

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon 2016-04-18 11:22 -0400, Dave Anderson wrote:

Hi Dave,

> I may be missing something, but it seems like you just need it to calculate
> cpuaddr each time through the loop, and then you're done with it.  But then
> you rewind() it, store it, and keep tmpfp open across the do_datatype_addr()
> call?  What am I missing?

sure -- but I'd prefer to avoid the use of tmpfile()/fclose() in the foor loop.
Albeit since we set OPEN_ONLY_ONCE, the following should be fine:

@@ -6138,6 +6172,8 @@ cmd_datatype_common(ulong flags)
 	}
 
 	if (cpuspec) {
+		typename = expr_type_name(sp->name);
+		ptype = typename && LASTCHAR(typename) == '*' ? 1 : 0;
 		cpus = get_cpumask_buf();
 		if (STREQ(cpuspec, ""))
 			SET_BIT(cpus, CURRENT_CONTEXT()->processor);
@@ -6227,7 +6263,20 @@ cmd_datatype_common(ulong flags)
 				continue;
 			}
 
+			if (ptype) {
+				open_tmpfile();
+				snprintf(buf, sizeof buf, "p *(%s*) 0x%lx",
+					typename, cpuaddr);
+				gdb_pass_through(buf, pc->tmpfile, GNU_RETURN_ON_ERROR);
+
+				rewind(pc->tmpfile);
+				fgets(buf, BUFSIZE, pc->tmpfile);
+				parse_line(buf, argv);
+				cpuaddr = htol(argv[3], FAULT_ON_ERROR, NULL);
+				close_tmpfile();
+			}
 			fprintf(fp, "%lx\n", cpuaddr);
+
 			do_datatype_addr(dm, cpuaddr , count,
 					 flags, memberlist, argc_members);
 		}
@@ -6245,6 +6294,9 @@ freebuf:
 
 	if (cpus)
 		FREEBUF(cpus);
+
+	if (typename)
+		FREEBUF(typename);
 }
 
 static void

-- 
Aaron Tomlin

--
Crash-utility mailing list
Crash-utility@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/crash-utility



[Index of Archives]     [Fedora Development]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [KDE Users]     [Fedora Tools]

 

Powered by Linux