Greetings! David Daney <ddaney@xxxxxxxxxxxxxxxxxx> writes: > On 10/21/2010 09:19 AM, David Daney wrote: >> On 10/20/2010 02:31 PM, Camm Maguire wrote: >>> Greetings! >>> >>> Does this suffice? >>> >>> (sid)camm@gabrielli:~/maxima-5.22.1/tests$ uname -a >>> Linux gabrielli 2.6.35.4-dsa-octeon #1 SMP Fri Sep 17 21:15:34 UTC >>> 2010 mips64 GNU/Linux >>> (sid)camm@gabrielli:~/maxima-5.22.1/tests$ cat /proc/cpuinfo >>> system type : CUST_WSX16 (CN3860p3.X-500-EXP) >>> processor : 0 >>> cpu model : Cavium Octeon V0.3 >> [...] >> >> Hah! I have those things piled up all around me. >> >> No guarantees, but I will try to reproduce it. If I can reproduce it, it >> should be easy to fix. >> > > Definitely a kernel bug. Consider this program: > > ------------8<--------sigbus.c------- > #include <stdio.h> > #include <stdlib.h> > #include <unistd.h> > > #include <sys/mman.h> > > int main(int argc, char *argv[]) > { > int pgsize; > float *p1; > float *p2; > int r; > > pgsize = getpagesize(); > > p1 = mmap(NULL, pgsize, PROT_READ | PROT_WRITE, > MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); > > if (p1 == MAP_FAILED) { > perror("mmap p1 failed"); > exit(1); > } > > p2 = mmap(NULL, pgsize, PROT_READ | PROT_WRITE, > MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); > > if (p2 == MAP_FAILED) { > perror("mmap p2 failed"); > exit(1); > } > > *p1 = 2.5; > *p2 = 3.5; > > r = mprotect(p1, pgsize, PROT_READ); > if (r) { > perror("mprotect p1 failed"); > exit(1); > } > > r = mprotect(p2, pgsize, PROT_READ); > if (r) { > perror("mprotect p2 failed"); > exit(1); > } > > *p2 = *p1; > > asm volatile("" ::: "memory"); > > puts("All done!"); > > exit(0); > } > ------------8<----------------------- > > $ mips64-octeon-linux-gnu-gcc -Wall -mhard-float -march=mips64 -O3 -o > sigbus sigbus.c > $ mips64-octeon-linux-gnu-objdump -d sigbus > sigbus.dis > > The float copy '*p2 = *p1;' dissassembles as: > > 120000b30: c6400000 lwc1 $f0,0(s2) > 120000b34: e6000000 swc1 $f0,0(s0) > > When run on an FPU-less system I get: > > ~ # ./sigbus > Bus error > > When run on my x86_64 workstation: > > $ ./sigbus > Segmentation fault (core dumped) > > I will fix this kernel bug. > Great! Thanks! If you have time to drop a quick note when done, that would be awesome. Separately, do you know where I can find pre-built gdb binaries for mips64, i.e. to debug -mabi=64? I'm assuming that is the 'official one' going foward. (I have an account on the gcc compile farm.) Thanks so much! > David Daney > > > > -- Camm Maguire camm@xxxxxxxxxxxxxxxxx ========================================================================== "The earth is but one country, and mankind its citizens." -- Baha'u'llah