You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When linking a 32-bit shared library with dmd and ld.gold on Linux the linker bails out with:
/usr/x86_64-pc-linux-gnu/bin/ld: error: libgtkd-3.o: relocation R_386_GOTOFF against preemptible symbol _D3gtk9UIManagerQk9getWidgetMFAyaZCQBh6WidgetQh cannot be used when making a shared object
/usr/x86_64-pc-linux-gnu/bin/ld: error: libgtkd-3.o: relocation R_386_GOTOFF against preemptible symbol _D3std3uni__T21genericDecodeGraphemeVbi0Z__TQBfTAxaZQBnFNaNfKQnZv cannot be used when making a shared object
/usr/x86_64-pc-linux-gnu/bin/ld: error: libgtkd-3.o: relocation R_386_GOTOFF against preemptible symbol _D3std3uni__T21genericDecodeGraphemeVbi0Z__TQBfTAxaZQBnFNaNfKQnZv cannot be used when making a shared object
Using ldc2 or gdc as compilers it seems to work, so I assume it is a dmd backend issue. Just the other day a bug in ld.gold got fixed that prevented --ifc=safe to work (e.g. when self-hosting ldc2), --gc-sections got fixed in dmd earlier and this is now the only remaining linker compatibility issue I see on Linux.
!!!There are attachements in the bugzilla issue that have not been copied over!!!
The text was updated successfully, but these errors were encountered:
Created attachment 1689
small reproduction case for the linker error
I attached a test case that can be compiled with dmd 2.079.1 like this:
dmd -m32 -shared -fPIC -defaultlib=phobos2 reprocase.d
ld.gold has to be your default linker, otherwise you need to split compilation and linking:
dmd -m32 -fPIC -c reprocase.dld.gold -shared reprocase.o
What I found interesting about the test case is that it happens when you create a sufficiently complex switch-case. Remove one case and the error is gone. Could it be a bug in jump table generation on x86/PIC ?
My guess was hitting close:
https://github.com/dlang/dmd/blob/1a05f4413ac6daaa8ae000dbe7399a302e3fc16b/src/dmd/backend/cod3.c#L1360
Above three cases a different code path is chosen in the back-end.
Marco Leise (@mleise) reported this on 2018-04-25T12:45:53Z
Transferred from https://issues.dlang.org/show_bug.cgi?id=18798
CC List
Description
!!!There are attachements in the bugzilla issue that have not been copied over!!!
The text was updated successfully, but these errors were encountered: