Bug 28422

Summary: Linking fails with "relocation R_X86_64_PC32 against symbol `cti_vm_throw'"
Product: WebKit Reporter: Priit Laes (IRC: plaes) <plaes>
Component: WebKitGTKAssignee: Nobody <webkit-unassigned>
Status: RESOLVED FIXED    
Severity: Normal CC: barraclough, commit-queue, darin, eric, jmalonzo, oliver, yusukes
Priority: P2    
Version: 528+ (Nightly build)   
Hardware: PC   
OS: Linux   
Attachments:
Description Flags
webkit-bug-28422-fix-debug-symbol-visibility.patch
jmalonzo: review-
webkit-bug-28422-use-plt-segment-for-cti_vm_throw-v2.patch
none
webkit-bug-28422-use-plt-segment-for-cti_vm_throw-v3.patch
none
webkit-bug-28422-use-plt-segment-for-cti_vm_throw-final.patch
none
webkit-bug-28422-use-plt-segment-for-cti_vm_throw-final.patch
barraclough: review+, eric: commit-queue-
webkit-plt.patch
oliver: commit-queue-
webkit-plt-reviewed.patch none

Priit Laes (IRC: plaes)
Reported 2009-08-18 00:27:34 PDT
When building with --enable-debug, linking libwebkit-1.0.la fails with relocation error: plaes@sol ~/code/WebKit $ make make all-am make[1]: Entering directory `/home/plaes/code/WebKit' /bin/mkdir -p ./.deps/DerivedSources CXXLD libwebkit-1.0.la /usr/lib/gcc/x86_64-pc-linux-gnu/4.4.1/../../../../x86_64-pc-linux-gnu/bin/ld: ./.libs/libJavaScriptCore.a(libJavaScriptCore_la-JITStubs.o): relocation R_X86_64_PC32 against symbol `cti_vm_throw' can not be used when making a shared object; recompile with -fPIC /usr/lib/gcc/x86_64-pc-linux-gnu/4.4.1/../../../../x86_64-pc-linux-gnu/bin/ld: final link failed: Bad value collect2: ld returned 1 exit status make[1]: *** [libwebkit-1.0.la] Error 1 make[1]: Leaving directory `/home/plaes/code/WebKit' make: *** [all] Error 2 plaes@sol ~/code/WebKit $ make V=1 make all-am make[1]: Entering directory `/home/plaes/code/WebKit' /bin/mkdir -p ./.deps/DerivedSources ./doltlibtool --tag=CXX --mode=link g++ -Wall -W -Wcast-align -Wchar-subscripts -Wreturn-type -Wformat -Wformat-security -Wno-format-y2k -Wundef -Wmissing-format-attribute -Wpointer-arith -Wwrite-strings -Wno-unused-parameter -Wno-parentheses -fno-exceptions -fvisibility-inlines-hidden -fno-rtti -fno-strict-aliasing -I/usr/include/enchant -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/gail-1.0 -I/usr/include/atk-1.0 -I/usr/include/gtk-2.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/lib64/gtk-2.0/include -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -pthread -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -pthread -I/usr/include/gstreamer-0.10 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/libxml2 -I/usr/include/gtk-2.0 -I/usr/lib64/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/libsoup-2.4 -I/usr/include/libxml2 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/libxml2 -I/usr/include/libxml2 -I/usr/include -ggdb -g -O0 -version-info 10:1:8 -Wl,--version-script,./autotools/symbols.filter -o libwebkit-1.0.la -rpath /home/plaes/opt/lib WebKit/gtk/WebCoreSupport/libwebkit_1_0_la-ChromeClientGtk.lo WebKit/gtk/WebCoreSupport/libwebkit_1_0_la-ContextMenuClientGtk.lo WebKit/gtk/WebCoreSupport/libwebkit_1_0_la-DragClientGtk.lo WebKit/gtk/WebCoreSupport/libwebkit_1_0_la-EditorClientGtk.lo WebKit/gtk/WebCoreSupport/libwebkit_1_0_la-FrameLoaderClientGtk.lo WebKit/gtk/WebCoreSupport/libwebkit_1_0_la-InspectorClientGtk.lo WebKit/gtk/WebCoreSupport/libwebkit_1_0_la-PasteboardHelperGtk.lo WebKit/gtk/webkit/libwebkit_1_0_la-webkitapplicationcache.lo WebKit/gtk/webkit/libwebkit_1_0_la-webkitdownload.lo WebKit/gtk/webkit/libwebkit_1_0_la-webkiterror.lo WebKit/gtk/webkit/libwebkit_1_0_la-webkitnetworkrequest.lo WebKit/gtk/webkit/libwebkit_1_0_la-webkitprivate.lo WebKit/gtk/webkit/libwebkit_1_0_la-webkitsoupauthdialog.lo WebKit/gtk/webkit/libwebkit_1_0_la-webkitversion.lo WebKit/gtk/webkit/libwebkit_1_0_la-webkitwebbackforwardlist.lo WebKit/gtk/webkit/libwebkit_1_0_la-webkitwebframe.lo WebKit/gtk/webkit/libwebkit_1_0_la-webkitwebhistoryitem.lo WebKit/gtk/webkit/libwebkit_1_0_la-webkitwebinspector.lo WebKit/gtk/webkit/libwebkit_1_0_la-webkitwebnavigationaction.lo WebKit/gtk/webkit/libwebkit_1_0_la-webkitwebpolicydecision.lo WebKit/gtk/webkit/libwebkit_1_0_la-webkitwebsettings.lo WebKit/gtk/webkit/libwebkit_1_0_la-webkitwebview.lo WebKit/gtk/webkit/libwebkit_1_0_la-webkitwebwindowfeatures.lo DerivedSources/libwebkit_1_0_la-webkitenumtypes.lo DerivedSources/libwebkit_1_0_la-webkitmarshal.lo -lpthread libJavaScriptCore.la libWebCore.la libWebCoreJS.la -lcairo -Wl,--export-dynamic -lenchant -lgmodule-2.0 -lglib-2.0 -lcairo -lfontconfig -lfreetype -lgailutil -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lgdk_pixbuf-2.0 -lpangocairo-1.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -pthread -lgobject-2.0 -lgthread-2.0 -lrt -lglib-2.0 -pthread -lgstvideo-0.10 -lgstbase-0.10 -lgstreamer-0.10 -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lrt -lxml2 -lglib-2.0 -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lgdk_pixbuf-2.0 -lpangocairo-1.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -ljpeg -lsoup-2.4 -lgio-2.0 -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lxml2 -lxslt -lz -lm -lxml2 -lpangoft2-1.0 -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lpng12 -lsqlite3 -lpthread -lm -L/usr/lib64 -licui18n -licuuc -licudata -lpthread -lm -lXt -lX11 -lSM -lICE libtool: link: g++ -shared -nostdlib /usr/lib/gcc/x86_64-pc-linux-gnu/4.4.1/../../../../lib64/crti.o /usr/lib/gcc/x86_64-pc-linux-gnu/4.4.1/crtbeginS.o WebKit/gtk/WebCoreSupport/.libs/libwebkit_1_0_la-ChromeClientGtk.o WebKit/gtk/WebCoreSupport/.libs/libwebkit_1_0_la-ContextMenuClientGtk.o WebKit/gtk/WebCoreSupport/.libs/libwebkit_1_0_la-DragClientGtk.o WebKit/gtk/WebCoreSupport/.libs/libwebkit_1_0_la-EditorClientGtk.o WebKit/gtk/WebCoreSupport/.libs/libwebkit_1_0_la-FrameLoaderClientGtk.o WebKit/gtk/WebCoreSupport/.libs/libwebkit_1_0_la-InspectorClientGtk.o WebKit/gtk/WebCoreSupport/.libs/libwebkit_1_0_la-PasteboardHelperGtk.o WebKit/gtk/webkit/.libs/libwebkit_1_0_la-webkitapplicationcache.o WebKit/gtk/webkit/.libs/libwebkit_1_0_la-webkitdownload.o WebKit/gtk/webkit/.libs/libwebkit_1_0_la-webkiterror.o WebKit/gtk/webkit/.libs/libwebkit_1_0_la-webkitnetworkrequest.o WebKit/gtk/webkit/.libs/libwebkit_1_0_la-webkitprivate.o WebKit/gtk/webkit/.libs/libwebkit_1_0_la-webkitsoupauthdialog.o WebKit/gtk/webkit/.libs/libwebkit_1_0_la-webkitversion.o WebKit/gtk/webkit/.libs/libwebkit_1_0_la-webkitwebbackforwardlist.o WebKit/gtk/webkit/.libs/libwebkit_1_0_la-webkitwebframe.o WebKit/gtk/webkit/.libs/libwebkit_1_0_la-webkitwebhistoryitem.o WebKit/gtk/webkit/.libs/libwebkit_1_0_la-webkitwebinspector.o WebKit/gtk/webkit/.libs/libwebkit_1_0_la-webkitwebnavigationaction.o WebKit/gtk/webkit/.libs/libwebkit_1_0_la-webkitwebpolicydecision.o WebKit/gtk/webkit/.libs/libwebkit_1_0_la-webkitwebsettings.o WebKit/gtk/webkit/.libs/libwebkit_1_0_la-webkitwebview.o WebKit/gtk/webkit/.libs/libwebkit_1_0_la-webkitwebwindowfeatures.o DerivedSources/.libs/libwebkit_1_0_la-webkitenumtypes.o DerivedSources/.libs/libwebkit_1_0_la-webkitmarshal.o -Wl,--whole-archive ./.libs/libJavaScriptCore.a ./.libs/libWebCore.a ./.libs/libWebCoreJS.a -Wl,--no-whole-archive -L/usr/lib64 /usr/lib64/libenchant.so /usr/lib64/libgailutil.so /usr/lib64/libXinerama.so /usr/lib64/libXrandr.so /usr/lib64/libXcursor.so /usr/lib64/libXcomposite.so /usr/lib64/libXdamage.so /usr/lib64/libXfixes.so /usr/lib64/libgstvideo-0.10.so /usr/lib64/libgstbase-0.10.so /usr/lib64/libgstreamer-0.10.so /usr/lib64/libgtk-x11-2.0.so /usr/lib64/libgdk-x11-2.0.so /usr/lib64/libatk-1.0.so /usr/lib64/libgdk_pixbuf-2.0.so /usr/lib64/libpangocairo-1.0.so /usr/lib64/libcairo.so /usr/lib64/libpixman-1.so /usr/lib64/libglitz-glx.so /usr/lib64/libGL.so /usr/lib64/libXmu.so /usr/lib64/libXext.so /usr/lib64/libXi.so /usr/lib64/libglitz.so /usr/lib64/libxcb-render-util.so /usr/lib64/libxcb-render.so /usr/lib64/libXrender.so /usr/lib64/libjpeg.so /usr/lib64/libsoup-2.4.so /usr/lib64/libgthread-2.0.so -lrt /usr/lib64/libgnutls.so /usr/lib64/libtasn1.so /usr/lib64/libgcrypt.so /usr/lib64/libgpg-error.so /usr/lib64/libgio-2.0.so -lresolv /usr/lib64/libxslt.so /usr/lib64/libxml2.so /usr/lib64/libpangoft2-1.0.so /usr/lib64/libpango-1.0.so /usr/lib64/libfontconfig.so /usr/lib64/libfreetype.so /usr/lib64/libexpat.so /usr/lib64/libgobject-2.0.so /usr/lib64/libgmodule-2.0.so /usr/lib64/libglib-2.0.so /usr/lib64/libpng12.so -lz /usr/lib64/libsqlite3.so -licui18n -licuuc -licudata -lpthread /usr/lib64/libXt.so /usr/lib64/libX11.so /usr/lib64/libxcb.so /usr/lib64/libXau.so /usr/lib64/libXdmcp.so -ldl /usr/lib64/libSM.so -luuid /usr/lib64/libICE.so -L/usr/lib/gcc/x86_64-pc-linux-gnu/4.4.1 -L/usr/lib/gcc/x86_64-pc-linux-gnu/4.4.1/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-pc-linux-gnu/4.4.1/../../../../x86_64-pc-linux-gnu/lib -L/usr/lib/gcc/x86_64-pc-linux-gnu/4.4.1/../../.. -lstdc++ -lm -lc -lgcc_s /usr/lib/gcc/x86_64-pc-linux-gnu/4.4.1/crtendS.o /usr/lib/gcc/x86_64-pc-linux-gnu/4.4.1/../../../../lib64/crtn.o -pthread -pthread -Wl,--version-script -Wl,./autotools/symbols.filter -Wl,--export-dynamic -pthread -pthread -pthread -Wl,-soname -Wl,libwebkit-1.0.so.2 -o .libs/libwebkit-1.0.so.2.8.1 /usr/lib/gcc/x86_64-pc-linux-gnu/4.4.1/../../../../x86_64-pc-linux-gnu/bin/ld: ./.libs/libJavaScriptCore.a(libJavaScriptCore_la-JITStubs.o): relocation R_X86_64_PC32 against symbol `cti_vm_throw' can not be used when making a shared object; recompile with -fPIC /usr/lib/gcc/x86_64-pc-linux-gnu/4.4.1/../../../../x86_64-pc-linux-gnu/bin/ld: final link failed: Bad value collect2: ld returned 1 exit status make[1]: *** [libwebkit-1.0.la] Error 1 make[1]: Leaving directory `/home/plaes/code/WebKit' make: *** [all] Error 2 plaes@sol ~/code/WebKit $
Attachments
webkit-bug-28422-fix-debug-symbol-visibility.patch (1.63 KB, patch)
2009-08-18 00:34 PDT, Priit Laes (IRC: plaes)
jmalonzo: review-
webkit-bug-28422-use-plt-segment-for-cti_vm_throw-v2.patch (2.28 KB, patch)
2009-08-24 06:57 PDT, Priit Laes (IRC: plaes)
no flags
webkit-bug-28422-use-plt-segment-for-cti_vm_throw-v3.patch (4.54 KB, patch)
2009-08-26 05:55 PDT, Priit Laes (IRC: plaes)
no flags
webkit-bug-28422-use-plt-segment-for-cti_vm_throw-final.patch (4.33 KB, patch)
2009-09-10 01:37 PDT, Priit Laes (IRC: plaes)
no flags
webkit-bug-28422-use-plt-segment-for-cti_vm_throw-final.patch (4.31 KB, patch)
2009-09-29 00:28 PDT, Priit Laes (IRC: plaes)
barraclough: review+
eric: commit-queue-
webkit-plt.patch (4.32 KB, patch)
2009-10-06 11:59 PDT, Priit Laes (IRC: plaes)
oliver: commit-queue-
webkit-plt-reviewed.patch (4.32 KB, patch)
2009-10-06 22:28 PDT, Priit Laes (IRC: plaes)
no flags
Priit Laes (IRC: plaes)
Comment 1 2009-08-18 00:34:21 PDT
Created attachment 35026 [details] webkit-bug-28422-fix-debug-symbol-visibility.patch Not sure whether this is the right way to fix it, but at least it WORKSFORME :)
Jan Alonzo
Comment 2 2009-08-18 03:32:38 PDT
Why? Have you tried recompiling with -fPIC?
Jan Alonzo
Comment 3 2009-08-18 15:13:07 PDT
Comment on attachment 35026 [details] webkit-bug-28422-fix-debug-symbol-visibility.patch Hiding/filtering the symbols is not the right fix here. You might as well do a release build. Have you tried forcing -fPIC in CFLAGS? If that works then we need to fix our build scripts to do that automatically.
Priit Laes (IRC: plaes)
Comment 4 2009-08-23 11:17:18 PDT
(In reply to comment #3) > (From update of attachment 35026 [details]) > Hiding/filtering the symbols is not the right fix here. You might as well do a > release build. Have you tried forcing -fPIC in CFLAGS? If that works then we > need to fix our build scripts to do that automatically. Tried with CXXFLAGS="-fPIC" CFLAGS="-fPIC" but it didn't work. I have an alternative patch that seems to fix this issue (at least on my machine): http://plaes.org/files/2009-Q3/webkit-bug-28422-use-plt-segment-for-cti_vm_throw.patch It seems to be the right approach ( See section 1.5.5 in http://people.redhat.com/drepper/dsohowto.pdf paper..)
Priit Laes (IRC: plaes)
Comment 5 2009-08-24 06:57:49 PDT
Created attachment 38479 [details] webkit-bug-28422-use-plt-segment-for-cti_vm_throw-v2.patch Added #if PLATFORM(LINUX) guards suggested by bdash.
Mark Rowe (bdash)
Comment 6 2009-08-24 21:50:44 PDT
The SYMBOL_NAME macro is intended to abstract the variance in symbol names between platforms. #if'ing it at the call site defeats that purpose.
Priit Laes (IRC: plaes)
Comment 7 2009-08-26 05:55:54 PDT
Created attachment 38607 [details] webkit-bug-28422-use-plt-segment-for-cti_vm_throw-v3.patch I had to introduce another macro SYMBOL_STRING_INTERNAL in order to properly change symbol name.. Tested on Linux x86-64 (built with and without debugging).
Mark Rowe (bdash)
Comment 8 2009-08-27 23:55:12 PDT
*** Bug 28798 has been marked as a duplicate of this bug. ***
Eric Seidel (no email)
Comment 9 2009-09-01 01:36:30 PDT
Oliver would know if this looks sane.
Oliver Hunt
Comment 10 2009-09-08 23:02:19 PDT
I am deferring to Gavin on this one -- conceivably hoisting to vm_throw should just use a safer mechanism to enter the trampoline
Gavin Barraclough
Comment 11 2009-09-08 23:58:05 PDT
Not a clue whether we should be doing this on Mac or not. :o) Lemme give this a test in the morning. G.
Gavin Barraclough
Comment 12 2009-09-09 13:40:01 PDT
Comment on attachment 38607 [details] webkit-bug-28422-use-plt-segment-for-cti_vm_throw-v3.patch This patch seems sensible to me, seems reasonable to use plt-indirect calls on linux. Doesn't seem to be a relevant issue to Mac. My one concern would be the name, SYMBOL_STRING_INTERNAL, which doesn't seem to be accurately descriptive to me. The strings formed by this macro seem specific to the use case – I don't believe foo@plt syntax is commonly used outside of use in a call? For symbols internal to a compilation module, it is just a question of omitting the .globl directive? I'd suggest renaming the macro to something like SYMBOL_FOR_CALL would probably be clearer, but I don't know linux x86-64 asm that well, so perhaps I'm wrong.
Priit Laes (IRC: plaes)
Comment 13 2009-09-09 21:36:24 PDT
I chose the SYMBOL_STRING_INTERNAL because it is supposedly used only inside the function. How about SYMBOL_STRING_CALL or SYMBOL_STRING_FOR_CALL?
Gavin Barraclough
Comment 14 2009-09-10 00:12:40 PDT
(In reply to comment #13) > I chose the SYMBOL_STRING_INTERNAL because it is supposedly used only inside > the function. > How about SYMBOL_STRING_CALL or SYMBOL_STRING_FOR_CALL? To my mind either of those is nice and clear, I'd happily r+ either. Your choice.
Priit Laes (IRC: plaes)
Comment 15 2009-09-10 01:37:26 PDT
Created attachment 39330 [details] webkit-bug-28422-use-plt-segment-for-cti_vm_throw-final.patch I decided to go with SYMBOL_STRING_RELOCATION which seemed more appropriate (only PC platforms seem to have call opcode, arms have branch).. I also took the liberty to fill the Reviewed by slot :P
Priit Laes (IRC: plaes)
Comment 16 2009-09-29 00:28:37 PDT
Created attachment 40285 [details] webkit-bug-28422-use-plt-segment-for-cti_vm_throw-final.patch Resynced the patch.
Eric Seidel (no email)
Comment 17 2009-10-02 17:06:16 PDT
Comment on attachment 40285 [details] webkit-bug-28422-use-plt-segment-for-cti_vm_throw-final.patch Please don't change NOBODY (OOPS!) or svn-apply (and thus the commit-queue) won't be able to handle the patch. cq- for this patch, you could post another which would be commit-queue compatible, or someone else can land this by hand for you. Thanks for the patch. :)
Priit Laes (IRC: plaes)
Comment 18 2009-10-06 11:59:47 PDT
Created attachment 40732 [details] webkit-plt.patch Updated the patch (again.. and already getting tired...)
Oliver Hunt
Comment 19 2009-10-06 12:02:01 PDT
Comment on attachment 40732 [details] webkit-plt.patch This patch has been reviewed -- can you update the changelog so it can be marked commit+ ?
Priit Laes (IRC: plaes)
Comment 20 2009-10-06 22:28:12 PDT
Created attachment 40764 [details] webkit-plt-reviewed.patch Added "Reviewed by Gavin Barraclough." there...
Eric Seidel (no email)
Comment 21 2009-10-06 22:34:30 PDT
Comment on attachment 40764 [details] webkit-plt-reviewed.patch I'm not sure I fully understand Oliver's request. But OK. To use the commit-queue you need both an r+ and a cq+. I'll add the r+. Since you already edited the ChangeLog to state that Gavin reviewed this (which is fine, but not normally done) the commit-queue will not set me as the reviewer, as it would have normally done having seen my r+.
WebKit Commit Bot
Comment 22 2009-10-06 22:44:54 PDT
Comment on attachment 40764 [details] webkit-plt-reviewed.patch Clearing flags on attachment: 40764 Committed r49224: <http://trac.webkit.org/changeset/49224>
WebKit Commit Bot
Comment 23 2009-10-06 22:44:59 PDT
All reviewed patches have been landed. Closing bug.
Note You need to log in before you can comment on or make changes to this bug.