@@ -343,3 +343,52 @@ following GDB command to cover the preemption signal(s) affecting your task's ex
343343```
344344(gdb) handle SIGALRM nopass
345345```
346+
347+
348+ Troubleshooting
349+ ---------------
350+ ** My distribution ships a version of glibc that is newer than 2.33. What should I do?**
351+
352+ Such versions are untested. If you do not encounter any obvious issues, great! Otherwise, no need
353+ to modify your installation; instead, just follow the steps under _ Building glibc from source_ above
354+ to build version 2.33. When linking your executable, you will want to use GCC's ` -Wl,-I ` switch
355+ (` -Clink-arg=-Wl,-I ` in the case of rustc) to specify the newly-symlinked dynamic linker as the
356+ program's interpreter. If you are building the program using Cargo and its source is located in
357+ tree or you have symlinked its ` .cargo ` to this repository's folder of the same name, passing the
358+ flag should happen automatically. Note that, if you get any version errors when running the
359+ resulting binary, you may need to add a further ` -L ` and the path to the ` lib ` directory generated
360+ by the glibc ` install ` target to your linker flags and rebuild.
361+
362+ ** My distribution ships a version of elfutils that is newer than 0.176. What should I do?**
363+
364+ It probably does! The easiest thing to do is to downgrade the package. For instance, if using
365+ Debian, download (at least) the following binary packages from https://snapshot.debian.org :
366+ ` libasm1 ` , ` libasm-dev ` , ` libdw1 ` , ` libelf1 ` , and ` libelf-dev ` . Put the packages into a new
367+ directory, ` cd ` into it, and run ` apt -s install ./*.deb ` . If it shows any dependency errors,
368+ download additional packages to address them and add them to the directory; you will probably need
369+ ` gdb ` version 9.2-1, ` libpython3.8 ` , ` libpython3.8-minimal ` , and ` libpython3.8-stdlib ` . Then
370+ perform the downgrade by running ` sudo apt install ./*.deb ` .
371+
372+ ** I get the assertion: ` ELF64_ST_TYPE(st->st_info) != STT_GNU_IFUNC) ` !**
373+
374+ This appears to occur on some Ubuntu systems because of the way Canonical packages zlib (` libz.so ` ).
375+ The easiest workaround is to grab a closely matching package version from
376+ https://packages.debian.org and extract the shared library file. Then either export the
377+ ` $LD_LIBRARY_PATH ` environment variable to the path to its containing folder when executing your
378+ application, or just place the shared library in the ` lib ` directory generated by glibc's ` install `
379+ target if/when you built it from source.
380+
381+ ** I get some other error at some point.**
382+
383+ Start by rerunning ` ./configure ` to clean the build. Make sure it finds all the dependencies. Look
384+ back at _ System requirements_ and verify that you are not on a ` cargo ` version affected by the
385+ regression, and that you have the described wrapper script in your ` $PATH ` if you have a
386+ sufficiently new version of ` bindgen ` (a shell alias will not suffice).
387+
388+ Next, try building _ libgotcha_ in isolation. Just ` cd ` into ` external/libgotcha ` and type ` make `
389+ (without passing ` -j ` ). If you get errors here, go back to the previous paragraph, pinch yourself,
390+ and check all that one more time.
391+
392+ If you get this far, try building _ libinger_ without per--preemptive function thread-local variables
393+ by passing ` --features notls ` to your Cargo command. If you are still stuck, see whether you can
394+ trace the source of the error using any of the techniques under _ Debugging tips_ above.
0 commit comments