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
This affects shared libraries on X86 32-bit. The linker stub doesn't restore the content of EAX. This may lead to corruption because dmd may pass an argument in EAX.
The text was updated successfully, but these errors were encountered:
code (@MartinNowak) commented on 2013-06-06T15:14:37Z
cat > bug.d << CODE
import lib;
void main()
{
int val;
printf("%p\n", &val);
deref(&val) == 0 || assert(0);
}
CODE
cat > lib.d << CODE
extern(C) int printf(const char*, ...);
int deref(int* p)
{
printf("%p\n", p);
return *p;
}
CODE
dmd -g -m32 -fPIC -shared lib.d -ofliblib.so
dmd -g -m32 -fPIC bug.d -L-L. -L-llib -L-rpath=.
./bug
----
Oh, the above code actually works. It's not the PLT stub but the attached debugger (gdb-7.5.1) that trashes EAX. It only happens when stepping into a function called via PLT and I can only reproduce with emacs-GUD, probably because of some automatic variable update.
It also means there is another reason why phobos unittests crash on X86 :(.
Martin Nowak (@MartinNowak) reported this on 2013-05-29T19:16:53Z
Transferred from https://issues.dlang.org/show_bug.cgi?id=10210
CC List
Description
The text was updated successfully, but these errors were encountered: