Skip to content

Commit 8885ebd

Browse files
committed
README.md: Document some widely-applicable troubleshooting tidbits
1 parent be3d7e7 commit 8885ebd

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

README.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)