[Top][All Lists]
[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
- [Gcl-devel] Bug in mpn/m68k/lshift.asm,
Camm Maguire <=