Running Quartus Prime Standard on WSL crashes in libudev.so
Hi,
For various reasons I want to run Quartus Prime Standard under Windows Subsystem for Linux. When doing that, I seem get a crash in Quartus:
$ /home/bluecmd/intelFPGA/20.1/quartus/bin/quartus mremap_chunk(): invalid pointer zsh: abort (core dumped) /home/bluecmd/intelFPGA/20.1/quartus/bin/quartus
Loading quartus in GDB shows the following stack trace:
#0 0x00007fffde1177bb in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50 #1 0x00007fffde102535 in __GI_abort () at abort.c:79 #2 0x00007fffde159508 in __libc_message (action=action@entry=do_abort, fmt=fmt@entry=0x7fffde26428d "%s\n") at ../sysdeps/posix/libc_fatal.c:181 #3 0x00007fffde15fc1a in malloc_printerr (str=str@entry=0x7fffde262587 "realloc(): invalid pointer") at malloc.c:5341 #4 0x00007fffde164e4a in __GI___libc_realloc (oldmem=0x7fffdb3dd278, bytes=11) at malloc.c:3166 #5 0x00007fffd6e15af5 in strextend_with_separator (x=x@entry=0x7ffffffed170, separator=separator@entry=0x0, separator=0x0) at ../src/basic/string-util.c:920 #6 0x00007fffd6e19081 in chase_symlinks.constprop.36 (path=<optimized out>, ret=0x7ffffffed268, flags=0, original_root=0x0) at ../src/basic/fs-util.c:1009 #7 0x00007fffd6e1ec0c in device_set_syspath (device=0x405760, _syspath=_syspath@entry=0x7ffffffed2e0 "/sys/class/net/eth0", verify=verify@entry=true) at ../src/libsystemd/sd-device/sd-device.c:148 #8 0x00007fffd6e1f30a in sd_device_new_from_syspath (ret=ret@entry=0x7ffffffed380, syspath=syspath@entry=0x7ffffffed2e0 "/sys/class/net/eth0") at ../src/libsystemd/sd-device/sd-device.c:223 #9 0x00007fffd6e25572 in enumerator_scan_dir_and_add_devices (enumerator=enumerator@entry=0x405690, basedir=basedir@entry=0x7fffd6e2d7f7 "class", subdir1=subdir1@entry=0x7fffd7a40153 "net", subdir2=subdir2@entry=0x0) at ../src/libsystemd/sd-device/device-enumerator.c:471 #10 0x00007fffd6e25945 in enumerator_scan_dir (enumerator=enumerator@entry=0x405690, basedir=basedir@entry=0x7fffd6e2d7f7 "class", subdir=subdir@entry=0x0, subsystem=subsystem@entry=0x0) at ../src/libsystemd/sd-device/device-enumerator.c:568 #11 0x00007fffd6e2823c in enumerator_scan_devices_all (enumerator=0x405690) at ../src/libsystemd/sd-device/device-enumerator.c:783 #12 0x00007fffd6e2823c in device_enumerator_scan_devices (enumerator=0x405690) at ../src/libsystemd/sd-device/device-enumerator.c:844 #13 0x00007fffd6e2823c in udev_enumerate_scan_devices (udev_enumerate=<optimized out>, udev_enumerate=<optimized out>) at ../src/libudev/libudev-enumerate.c:377 #14 0x00007fffe66b9f45 in () at /home/bluecmd/intelFPGA/20.1/quartus/linux64/libsys_cpt.so #15 0x00007fffe66ba3c9 in Ox77bf42fd0a26f062 () at /home/bluecmd/intelFPGA/20.1/quartus/linux64/libsys_cpt.so #16 0x00007fffe6689ce7 in () at /home/bluecmd/intelFPGA/20.1/quartus/linux64/libsys_cpt.so #17 0x00007fffe6689aa6 in Ox77bf42b53a2ca1aa () at /home/bluecmd/intelFPGA/20.1/quartus/linux64/libsys_cpt.so #18 0x00007fffe6678faf in () at /home/bluecmd/intelFPGA/20.1/quartus/linux64/libsys_cpt.so #19 0x00007fffe6679892 in lc_getid_type () at /home/bluecmd/intelFPGA/20.1/quartus/linux64/libsys_cpt.so #20 0x00007fffe662b800 in cpt_flexlm_get_local_hostid_by_type () at /home/bluecmd/intelFPGA/20.1/quartus/linux64/libsys_cpt.so #21 0x00007fffe662b955 in cpt_flexlm_get_local_hostid () at /home/bluecmd/intelFPGA/20.1/quartus/linux64/libsys_cpt.so #22 0x00007fffe662bb21 in cpt_flexlm_get_config_hostids () at /home/bluecmd/intelFPGA/20.1/quartus/linux64/libsys_cpt.so #23 0x00007fffe662d168 in cpt_flexlm_check_config () at /home/bluecmd/intelFPGA/20.1/quartus/linux64/libsys_cpt.so #24 0x00007fffe662d29e in cpt_flexlm_get_config_from_job () at /home/bluecmd/intelFPGA/20.1/quartus/linux64/libsys_cpt.so #25 0x00007fffe662d426 in cpt_flexlm_get_config () at /home/bluecmd/intelFPGA/20.1/quartus/linux64/libsys_cpt.so #26 0x00007fffe662d733 in cpt_flexlm_get_feature_info () at /home/bluecmd/intelFPGA/20.1/quartus/linux64/libsys_cpt.so #27 0x00007fffe660df5b in CPT_FLEXLM_MGR::get_info(std::string const&, std::string const&, CPT_MANAGER::INFO*) () at /home/bluecmd/intelFPGA/20.1/quartus/linux64/libsys_cpt.so #28 0x00007fffe660edd2 in CPT_FEATURE_MGR::get_info(CPT_FEATURE, CPT_MANAGER::INFO*) () at /home/bluecmd/intelFPGA/20.1/quartus/linux64/libsys_cpt.so #29 0x00007fffe661008d in CPT_ELEMENT_MGR::get_primary_info(CPT_MANAGER::INFO*) () at /home/bluecmd/intelFPGA/20.1/quartus/linux64/libsys_cpt.so #30 0x00007fffe6612cd8 in CPT_MANAGER::determine_status() () at /home/bluecmd/intelFPGA/20.1/quartus/linux64/libsys_cpt.so #31 0x00007fffe66139d5 in CPT_MANAGER::init(std::string const&) () at /home/bluecmd/intelFPGA/20.1/quartus/linux64/libsys_cpt.so #32 0x00007fffe6613ea1 in CPT_MANAGER::get_cpt_mgr() () at /home/bluecmd/intelFPGA/20.1/quartus/linux64/libsys_cpt.so #33 0x00007fffff77305b in QGQ_WELCOME_SCREEN_DLG::QGQ_WELCOME_SCREEN_DLG() () at /home/bluecmd/intelFPGA/20.1/quartus/linux64/libsys_qgq.so #34 0x00007fffff7676b1 in QGQ_APP::init_instance(int, char const**, QUI_CMDLINE*) () at /home/bluecmd/intelFPGA/20.1/quartus/linux64/libsys_qgq.so #35 0x0000000000401ea2 in qgq_main(int, char const**) () #36 0x00007fffe6507e30 in msg_main_thread(void*) () at /home/bluecmd/intelFPGA/20.1/quartus/linux64/libccl_msg.so #37 0x00007fffe5bb5acc in thr_final_wrapper () at /home/bluecmd/intelFPGA/20.1/quartus/linux64/libccl_thr.so #38 0x00007fffe6507eef in msg_thread_wrapper(void* (*)(void*), void*) () at /home/bluecmd/intelFPGA/20.1/quartus/linux64/libccl_msg.so #39 0x00007fffe5c29f9c in mem_thread_wrapper(void* (*)(void*), void*) () at /home/bluecmd/intelFPGA/20.1/quartus/linux64/libccl_mem.so #40 0x00007fffe5bf8b39 in err_thread_wrapper(void* (*)(void*), void*) () at /home/bluecmd/intelFPGA/20.1/quartus/linux64/libccl_err.so #41 0x00007fffe5bb5b0f in thr_thread_wrapper () at /home/bluecmd/intelFPGA/20.1/quartus/linux64/libccl_thr.so #42 0x00007fffe6509ea1 in msg_exe_main(int, char const**, int (*)(int, char const**)) () at /home/bluecmd/intelFPGA/20.1/quartus/linux64/libccl_msg.so #43 0x0000000000401f91 in main ()
Looking at info sharedlibraries shows the system /lib/x86_64-linux-gnu/libudev.so.1 loaded as the last entry.
When debugging this I could not easily reproduce the issue in a test program, and at one point I tried to LD_PRELOAD udev. This works. So currently when starting Quartus I have to do the following:
$ LD_PRELOAD=/lib/x86_64-linux-gnu/libudev.so /home/bluecmd/intelFPGA/20.1/quartus/bin/quartus
Looking at gdb where it crashed before the only difference I see is that udev is now the first entry in the list.
I know this issue has plagued me for a few versions now, but I didn't see it mentioned before so I thought I would do this bug report. The only other issue I've found was according to the poster solved by LD_PRELOAD:ing tcmalloc - that did not work for me, so I had to figure this workaround out.