Closed timsifive closed 8 years ago
It looks like the mmap() call is returning an error. Debugging this is tricky. I'll generate a recipe.
cd to the generated directory (/media/sf_tnewsome/Synced/SiFive/chisel-tutorial/generated/hello) edit/patch the sim_api.h file as follows:
% diff -u sim_api.h.old sim_api.h
--- sim_api.h.old 2016-02-17 12:17:04.266769221 -0800
+++ sim_api.h 2016-02-17 12:20:20.605665665 -0800
@@ -13,6 +13,8 @@
#include <unistd.h>
#include <sys/mman.h>
#include <time.h>
+#include <error.h>
+#include <errno.h>
enum SIM_CMD { RESET, STEP, UPDATE, POKE, PEEK, FORCE, GETID, GETCHK, SETCLK, FIN };
@@ -34,6 +36,9 @@
assert(write(fd, "", 1) != -1);
assert(fsync(fd) != -1); // ensure the data is available
channel = (char*)mmap(NULL, pgsize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
+ if (channel == MAP_FAILED) {
+ error(0, errno, "mmap failed for channel %d", fd);
+ }
assert(channel != MAP_FAILED);
}
~channel_t() {
compile the simulator
g++ -c -o /media/sf_tnewsome/Synced/SiFive/chisel-tutorial/generated/hello//Hello-emulator.o -I../ -I/csrc/ /media/sf_tnewsome/Synced/SiFive/chisel-tutorial/generated/hello//Hello-emulator.cpp
g++ -c -o /media/sf_tnewsome/Synced/SiFive/chisel-tutorial/generated/hello//Hello.o -I../ -I/csrc/ /media/sf_tnewsome/Synced/SiFive/chisel-tutorial/generated/hello//Hello.cpp
g++ -o /media/sf_tnewsome/Synced/SiFive/chisel-tutorial/generated/hello//Hello /media/sf_tnewsome/Synced/SiFive/chisel-tutorial/generated/hello//Hello.o /media/sf_tnewsome/Synced/SiFive/chisel-tutorial/generated/hello//Hello-emulator.o
launch the simulator
/media/sf_tnewsome/Synced/SiFive/chisel-tutorial/generated/hello/Hello
Although the simulator will hang, you should see the error message displayed.
Thanks for the quick reply! The error message is: /media/sf_tnewsome/Synced/SiFive/chisel-tutorial/generated/hello/Hello: mmap failed for channel 3: Invalid argument
Some more info:
(gdb) bt
at /media/sf_tnewsome/Synced/SiFive/chisel-tutorial/generated/hello//sim_api.h:39
at /media/sf_tnewsome/Synced/SiFive/chisel-tutorial/generated/hello//sim_api.h:82
at /media/sf_tnewsome/Synced/SiFive/chisel-tutorial/generated/hello//emul_api.h:87
at /media/sf_tnewsome/Synced/SiFive/chisel-tutorial/generated/hello//Hello.h:31
at /media/sf_tnewsome/Synced/SiFive/chisel-tutorial/generated/hello//Hello-emulator.cpp:5
(gdb) p pgsize $1 = 4096 (gdb) p fd $2 = 3
So I assume it’s just unhappy about the fd.
tnewsome@toy-debian:/media/sf_tnewsome/Synced/SiFive/chisel-tutorial/generated/hello$ sudo lsof -p 5989 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME Hello 5989 tnewsome cwd DIR 0,36 4096 34375 /media/sf_tnewsome/Synced/SiFive/chisel-tutorial/generated/hello Hello 5989 tnewsome rtd DIR 8,1 4096 2 / Hello 5989 tnewsome txt REG 0,36 296468 41271 /media/sf_tnewsome/Synced/SiFive/chisel-tutorial/generated/hello/Hello Hello 5989 tnewsome mem REG 8,1 1750780 786922 /lib/i386-linux-gnu/i686/cmov/libc-2.19.so Hello 5989 tnewsome mem REG 8,1 114964 789775 /lib/i386-linux-gnu/libgcc_s.so.1 Hello 5989 tnewsome mem REG 8,1 280108 786926 /lib/i386-linux-gnu/i686/cmov/libm-2.19.so Hello 5989 tnewsome mem REG 8,1 963316 654692 /usr/lib/i386-linux-gnu/libstdc++.so.6.0.20 Hello 5989 tnewsome mem REG 8,1 134380 785073 /lib/i386-linux-gnu/ld-2.19.so Hello 5989 tnewsome 0u CHR 136,3 0t0 6 /dev/pts/3 Hello 5989 tnewsome 1u CHR 136,3 0t0 6 /dev/pts/3 Hello 5989 tnewsome 2u CHR 136,3 0t0 6 /dev/pts/3 Hello 5989 tnewsome 3u REG 0,36 4096 41272 /media/sf_tnewsome/Synced/SiFive/chisel-tutorial/generated/hello/00005989.in
Which all looks kosher, but I think I know what the problem is… quick test Yeah, the issue is that /media/sf_tnewsome is mounted on vboxsf (which in turn is sharing an ntfs). If I move the whole thing to an ext4 file system then it works fine. Thanks for your help! In the future it’d be cool if the error message could include the fd as well as the path of the file being mmapped, which is what
Tim
On Wed, Feb 17, 2016 at 12:33 PM, Jim Lawson notifications@github.com wrote:
cd to the generated directory (/media/sf_tnewsome/Synced/SiFive/chisel-tutorial/generated/hello) edit/patch the sim_api.h file as follows:
% diff -u sim_api.h.old sim_api.h --- sim_api.h.old 2016-02-17 12:17:04.266769221 -0800 +++ sim_api.h 2016-02-17 12:20:20.605665665 -0800 @@ -13,6 +13,8 @@
include
include <sys/mman.h>
include
+#include
+#include enum SIM_CMD { RESET, STEP, UPDATE, POKE, PEEK, FORCE, GETID, GETCHK, SETCLK, FIN };
@@ -34,6 +36,9 @@ assert(write(fd, "", 1) != -1); assert(fsync(fd) != -1); // ensure the data is available channel = (char*)mmap(NULL, pgsize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
- if (channel == MAP_FAILED) {
- error(0, errno, "mmap failed for channel %d", fd);
- } assert(channel != MAP_FAILED); } ~channel_t() {
compile the simulator
g++ -c -o /media/sf_tnewsome/Synced/SiFive/chisel-tutorial/generated/hello//Hello-emulator.o -I../ -I/csrc/ /media/sf_tnewsome/Synced/SiFive/chisel-tutorial/generated/hello//Hello-emulator.cpp g++ -c -o /media/sf_tnewsome/Synced/SiFive/chisel-tutorial/generated/hello//Hello.o -I../ -I/csrc/ /media/sf_tnewsome/Synced/SiFive/chisel-tutorial/generated/hello//Hello.cpp g++ -o /media/sf_tnewsome/Synced/SiFive/chisel-tutorial/generated/hello//Hello /media/sf_tnewsome/Synced/SiFive/chisel-tutorial/generated/hello//Hello.o /media/sf_tnewsome/Synced/SiFive/chisel-tutorial/generated/hello//Hello-emulator.o
-
launch the simulator
/media/sf_tnewsome/Synced/SiFive/chisel-tutorial/generated/hello/Hello
Although the simulator will hang, you should see the error message displayed.
— Reply to this email directly or view it on GitHub https://github.com/ucb-bar/chisel/issues/658#issuecomment-185391106.
Closed by #660
I'm trying to get started with chisel, so I cloned chisel-tutorial. When I run 'make' in hello/, I get the following assertion and then sbt/chisel hangs:
Hello: /media/sf_tnewsome/Synced/SiFive/chisel-tutorial/generated/hello//sim_api.h:37: channel_t::channel_t(int): Assertion
channel != ((void *) -1)' failed.`This is using Debian 8.3, and sbt 0.13.8.
Here's the full output of 'make':
Thanks for looking at this.