Re: Degradation with crash 5.0.0 on x86 -- [PATCH]

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

 



----- "Dave Anderson" <anderson@xxxxxxxxxx> wrote:

> ----- "Shahar Luxenberg" <shahar@xxxxxxxxxxxxxx> wrote:
> 
> > Hi,
> > 
> > 
> > 
> > Environment: Red Hat Enterprise Linux Server release 5.2 (Tikanga),
> > x86, 2.6.18-92.el5
> > 
> > I’ve installed crash 5.0.0 and noticed lots of error messages during
> > startup of the form:
> > 
> > ‘crash: input string too large: "804328c4:" (9 vs 8)’
> > 
> > This doesn’t happen with crash 4.1.2
> > 
> > 
> > 
> > While debugging it a little, I’ve noticed that BUG_x86 is calling gdb
> > with the x/i command:
> > 
> > sprintf(buf1, "x/%ldi 0x%lx", spn->value - sp->value, sp->value);
> > 
> > The return buffer (buf2) is: 0x80430800: push %ebp
> > 
> > On 4.1.2, the return buffer (buf2) is: 0x80430800 <do_exit>: push %ebp
> > 
> > This explains the problem since parse_line will parse the line
> > differently returning ‘0x80430800:’ on arglist[0] and nothing on
> > arglist[2] (crash 5.0.0) while returning 0x80430800 on arglist[0] and
> > ‘push’ on arglist[2].
> > 
> > Have you noticed this kind of problem?
> 
> I see it now, at least on 2.6.18-era kernels.  It doesn't seem to happen
> with earlier RHEL4 (2.6.9-era) vmlinux files for some reason.  And on anything
> later than 2.6.20, the code in question isn't run.  Anyway, as you tracked
> it down, the x86 code disassembly output is different, but should be trivial
> to fix.  
> 
> Thanks for the report,
>   Dave

Patch attached, and queued for the next release.

Dave
Index: crash/kernel.c
===================================================================
RCS file: /nfs/projects/cvs/crash/kernel.c,v
retrieving revision 1.221
retrieving revision 1.222
diff -u -r1.221 -r1.222
--- crash/kernel.c	7 Dec 2009 21:39:57 -0000	1.221
+++ crash/kernel.c	11 Jan 2010 19:21:44 -0000	1.222
@@ -1534,7 +1534,8 @@
 		if (parse_line(buf2, arglist) < 3)
 			continue;
 
-		if ((vaddr = htol(arglist[0], RETURN_ON_ERROR, NULL)) >= spn->value)
+		if ((vaddr = htol(strip_ending_char(arglist[0], ':'), 
+		    RETURN_ON_ERROR, NULL)) >= spn->value)
 			continue; 
 
 		if (STREQ(arglist[2], "ud2a")) {
--
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