The route of the problem is that the nvidia driver returns invalid values for PCIO, PDISPLAY and PRAMIN.
Breakpoint 6, map_mem (dev_name=0x61e250 "/dev/nvidia0") at backend.c:34 34 dev_handle_t *fd = open_dev(dev_name); (gdb) n 36 if(!fd) /* open_dev has already set the error */ (gdb) p fd $2 = (dev_handle_t *) 0x61e0d0 (gdb) n 40 nv_card->PEXTDEV = map_dev_mem(fd, nv_card->reg_address + 0x101000, 0x1000); (gdb) p dev_name $3 = 0x61e250 "/dev/nvidia0" (gdb) p /x nv_card->reg_address + 0x101000 $4 = 0xd5101000 (gdb) n 41 nv_card->PFB = map_dev_mem(fd, nv_card->reg_address + 0x100000, 0x1000); (gdb) p /x nv_card->PEXTDEV $5 = 0x7ffff7ff8000 (gdb) n 43 nv_card->PMC = map_dev_mem(fd, nv_card->reg_address + 0x000000, 0x2ffff); (gdb) p /x nv_card->PFB $6 = 0x7ffff7ff7000 (gdb) n 44 nv_card->PCIO = map_dev_mem(fd, nv_card->reg_address + 0x601000, 0x2000); (gdb) p /x nv_card->PMC $7 = 0xffffffffffffffff (gdb) n 45 nv_card->PDISPLAY = map_dev_mem(fd, nv_card->reg_address + NV_PDISPLAY_OFFSET, NV_PDISPLAY_SIZE); (gdb) p /x nv_card->PCIO $8 = 0x7ffff7ff5000 (gdb) n 46 nv_card->PRAMDAC = map_dev_mem(fd, nv_card->reg_address + 0x680000, 0x2000); (gdb) p /x nv_card->PDISPLAY $9 = 0xffffffffffffffff (gdb) n 47 nv_card->PRAMIN = map_dev_mem(fd, nv_card->reg_address + NV_PRAMIN_OFFSET, NV_PRAMIN_SIZE); (gdb) p /x nv_card->PRAMDAC $10 = 0x7ffff7fe3000 (gdb) n 48 nv_card->PROM = map_dev_mem(fd, nv_card->reg_address + 0x300000, 0xffff); (gdb) p /x nv_card->PRAMIN $11 = 0xffffffffffffffff (gdb) n 51 if(nv_card->arch & NV5X)
The route of the problem is that the nvidia driver returns invalid values for PCIO, PDISPLAY and PRAMIN.
Breakpoint 6, map_mem (dev_name=0x61e250 "/dev/nvidia0") at backend.c:34 >reg_address + 0x101000, 0x1000); >reg_address + 0x101000 >reg_address + 0x100000, 0x1000); >reg_address + 0x000000, 0x2ffff); >reg_address + 0x601000, 0x2000); >reg_address + NV_PDISPLAY_OFFSET, NV_PDISPLAY_SIZE); >reg_address + 0x680000, 0x2000); >reg_address + NV_PRAMIN_OFFSET, NV_PRAMIN_SIZE); >reg_address + 0x300000, 0xffff);
34 dev_handle_t *fd = open_dev(dev_name);
(gdb) n
36 if(!fd) /* open_dev has already set the error */
(gdb) p fd
$2 = (dev_handle_t *) 0x61e0d0
(gdb) n
40 nv_card->PEXTDEV = map_dev_mem(fd, nv_card-
(gdb) p dev_name
$3 = 0x61e250 "/dev/nvidia0"
(gdb) p /x nv_card-
$4 = 0xd5101000
(gdb) n
41 nv_card->PFB = map_dev_mem(fd, nv_card-
(gdb) p /x nv_card->PEXTDEV
$5 = 0x7ffff7ff8000
(gdb) n
43 nv_card->PMC = map_dev_mem(fd, nv_card-
(gdb) p /x nv_card->PFB
$6 = 0x7ffff7ff7000
(gdb) n
44 nv_card->PCIO = map_dev_mem(fd, nv_card-
(gdb) p /x nv_card->PMC
$7 = 0xffffffffffffffff
(gdb) n
45 nv_card->PDISPLAY = map_dev_mem(fd, nv_card-
(gdb) p /x nv_card->PCIO
$8 = 0x7ffff7ff5000
(gdb) n
46 nv_card->PRAMDAC = map_dev_mem(fd, nv_card-
(gdb) p /x nv_card->PDISPLAY
$9 = 0xffffffffffffffff
(gdb) n
47 nv_card->PRAMIN = map_dev_mem(fd, nv_card-
(gdb) p /x nv_card->PRAMDAC
$10 = 0x7ffff7fe3000
(gdb) n
48 nv_card->PROM = map_dev_mem(fd, nv_card-
(gdb) p /x nv_card->PRAMIN
$11 = 0xffffffffffffffff
(gdb) n
51 if(nv_card->arch & NV5X)