gcl-devel
[Top][All Lists]
Advanced

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

[Gcl-devel] Bug in mpn/m68k/lshift.asm


From: Camm Maguire
Subject: [Gcl-devel] Bug in mpn/m68k/lshift.asm
Date: 01 Aug 2002 18:38:41 -0400

Subject: libgmp3: Bug in mpn/m68k/lshift.asm
Package: libgmp3
Version: N/A
Severity: normal

Greetings!  As this is written in m68k assembler, its difficult for me
to report the error precisely.  Briefly, what appears to be happening
is that lshift is writing values to bad locations in memory.  The
error disappears when using generic/lshift.c.  The machine is an
68060.  Here is a gdb session:

Take care,

=============================================================================
Program received signal SIGSEGV, Segmentation fault.
0x8000781c in mark_object (x=0x80786000) at gbc.c:225
225       if (x->d.m)
(gdb) 
frame 1
frame 1
#1  0x800089ac in mark_phase () at gbc.c:757
757             mark_object(pp->p_external[i]);
(gdb) p i
p i
$1 = 96
(gdb) 
p pp->p_external[i]
p pp->p_external[i]
$2 = 0x80786000
(gdb) p &pp->p_external[i]
p &pp->p_external[i]
$3 = (object *) 0x8021aedc
(gdb) 

(__gmpn_lshift will write 0x80786000 into this address)

r
The program being debugged has been started already.
Start it from the beginning? (y or n) y
y


Breakpoint 2, 0x8007a5c4 in __gmpn_lshift ()
(gdb) p *(object *) 0x8021aedc
p *(object *) 0x8021aedc
$4 = 0x801ef7ac
(gdb) 
bt
#0  0x8007a5c4 in __gmpn_lshift ()
#1  0x80079656 in __gmpz_mul_2exp (w=0xeffffa7c, u=0x8001177c, cnt=2147573446)
    at mul_2exp.c:52
#2  0x800319ae in Lash () at num_log.c:418

...

(gdb) frame 1
#1  0x80079656 in __gmpz_mul_2exp (w=0xeffffa7c, u=0x8001177c, cnt=2147573446)
    at mul_2exp.c:52
52            wlimb = mpn_lshift (wp + limb_cnt, u->_mp_d, abs_usize, cnt);
(gdb) l 40
l 40
35        if (usize == 0)
36          {
37            w->_mp_size = 0;
38            return;
39          }
40      
41        limb_cnt = cnt / BITS_PER_MP_LIMB;
42        wsize = abs_usize + limb_cnt + 1;
43        if (w->_mp_alloc < wsize)
44          _mpz_realloc (w, wsize);
(gdb) 

45      
46        wp = w->_mp_d;
47        wsize = abs_usize + limb_cnt;
48      
49        cnt %= BITS_PER_MP_LIMB;
50        if (cnt != 0)
51          {
52            wlimb = mpn_lshift (wp + limb_cnt, u->_mp_d, abs_usize, cnt);
53            if (wlimb != 0)
54              {
(gdb) p *w
$9 = {_mp_alloc = 2, _mp_size = 1, _mp_d = 0x8021aee0}
(gdb) p *w->address@hidden
$10 = {28, 2149587968}
(gdb) p *u
$11 = {_mp_alloc = 1, _mp_size = 1, _mp_d = 0x801fdfb8}
(gdb) p *u->address@hidden
$12 = {1, 4}
(gdb) p cnt
$13 = 11
(gdb) p wp
$14 = 0x8021aee0
(gdb) p *wp
$15 = 28
(gdb) p limb_cnt
$16 = 0
(gdb) p abs_usize
$17 = 1
(gdb) p cnt
$18 = 11
(gdb) p u->_mp_d
$19 = (mp_limb_t *) 0x801fdfb8
(gdb) p *u->address@hidden
$20 = {1, 4}
(gdb) p sizeof(*u->_mp_d)
$21 = 4
=============================================================================

-- 
Camm Maguire                                            address@hidden
==========================================================================
"The earth is but one country, and mankind its citizens."  --  Baha'u'llah



reply via email to

[Prev in Thread] Current Thread [Next in Thread]