[webkit-dev] Possible issue with TCMalloc_PageHeap on Solaris 10 (amd64) ?
Xavier Roche
roche+webkit at exalead.com
Tue May 25 07:38:44 PDT 2010
Hi folks!,
[ Please redirect me if the question is off-topic here ]
I am trying to build webkit (qt flavour, current 4.6.1 stable release) on
Solaris, and I am facing weird SEGV issues when trying to use objects such
as QWebPage. The underlying issue seems to be related to the TCMalloc*
layer.
Might be related to threading issues, too. This does not look like a
qt-centric issue, as far as I can see ; but this might be related to a
really trivial build option not set correctly - do not hesitate to give
feedback if you have a running build on Solaris.
Does anybody is experiencing the same issue on Solaris ?
The libraries have been built on Solaris 10, amd64 (64-bit), using the
official qt-everywhere-opensource-src-4.6.1.tar.gz package, with two minor
patches (see [1] and [2])
Various gcc releases have been tested for the qt/webkit build with the
same effect (3.4.3, 3.4.6, 4.1.2) ; in release and debug more (-release or
-debug)
The libraries have been built using:
./configure -shared -opensource -debug -no-separate-debug-info -webkit
-xmlpatterns -fontconfig -qt-gif -qt-libjpeg -qt-libpng -qt-libtiff
-qt-libmng -no-accessibility -no-sql-sqlite -no-phonon -no-phonon-backend
-no-audio-backend -no-multimedia -no-opengl -no-qt3support -no-declarative
-no-dbus -platform solaris-g++-64 -prefix /data/qt/qt4-install -D
ALWAYS_INLINE=inline
Note: -DALWAYS_INLINE=inline added as workaround for a build oddity (see
[3]) when using -debug
I first tested various demos, including the demo/browser one (see [4]),
and I managed to have a minimal test case:
The sample application itself is really simple:
#include <QtGui/QApplication>
#include <QtWebKit/QtWebKit>
int main(int argc, char **argv) {
QApplication *app = new QApplication(argc, argv,
QApplication::GuiClient);
QWebPage *fakePage = new QWebPage();
fakePage->action(QWebPage::Stop);
(void) app;
fprintf(stderr, "successfully started\n");
QApplication::instance()->exec();
}
This trivial program works fine on Linux, but produces a SEGV on Solaris
on the "QWebPage *fakePage = new QWebPage()" line:
(l at 1) signal SEGV (no mapping at the fault address) at 0xfffffd7ffd68a9d7
at 0xfffffd7ffd68a9d7
0xfffffd7ffd68a9d7: decl %edx
Entering debugger ...
the dbx trace shows: (sorry for the meaningless stack frame - I am trying
to get a more decent version of dbx, because the verbose library release
of libQtWebKit.so is too verbose for dbx - *sigh*)
Current function is main
16 QWebPage *fakePage = new QWebPage();
(dbx) where
[1] WTF::TCMalloc_PageHeap::GrowHeap(0xfffffd7ffea5a47c, 0x0,
0xfffffd7ffa52f, 0x0, 0x0, 0x0), at 0xfffffd7ffd68a9d7
[2] WTF::TCMalloc_Central_FreeList::FetchFromSpansSafe(0x0, 0x0, 0x0,
0x0, 0x0, 0x0), at 0xfffffd7ffd68b1b1
[3] WTF::TCMalloc_Central_FreeList::RemoveRange(0x0, 0x0, 0x0, 0x0, 0x0,
0x0), at 0xfffffd7ffd68b58b
[4] WTF::fastMalloc(0x0, 0x0, 0x0, 0x0, 0x0, 0x0), at 0xfffffd7ffd68c540
[5] WTF::initializeThreading(0x0, 0x0, 0x0, 0x0, 0x0, 0x0), at
0xfffffd7ffd690c0e
[6] JSC::initializeThreading(0x0, 0x0, 0x0, 0x0, 0x0, 0x0), at
0xfffffd7ffd53f965
[7] QWebPagePrivate::QWebPagePrivate(0x0, 0x0, 0x0, 0x0, 0x0, 0x0), at
0xfffffd7ffdf0abf6
[8] QWebPage::QWebPage(0x0, 0x0, 0x0, 0x0, 0x0, 0x0), at
0xfffffd7ffdf112c5
=>[9] main(argc = 1, argv = 0xfffffd7fffdfd3a8), line 16 in "test-gui.cpp"
Any hint or suggestion would be appreciated :)
[1]
--- src/3rdparty/webkit/JavaScriptCore/wtf/StringExtras.h
+++ src/3rdparty/webkit/JavaScriptCore/wtf/StringExtras.h
@@ -85,7 +85,7 @@
#endif
-#if PLATFORM(WIN_OS) || PLATFORM(LINUX)
+#if PLATFORM(WIN_OS) || PLATFORM(LINUX) || PLATFORM(SOLARIS)
inline char* strnstr(const char* buffer, const char* target, size_t
bufferLength)
{
--- src/3rdparty/javascriptcore/JavaScriptCore/wtf/StringExtras.h
+++ src/3rdparty/javascriptcore/JavaScriptCore/wtf/StringExtras.h
@@ -85,7 +85,7 @@
#endif
-#if PLATFORM(WIN_OS) || PLATFORM(LINUX)
+#if PLATFORM(WIN_OS) || PLATFORM(LINUX) || PLATFORM(SOLARIS)
inline char* strnstr(const char* buffer, const char* target, size_t
bufferLength)
{
[2] workaround for sun ld : remove the '-Wl,--gc-sections' option in
src/3rdparty/webkit/WebCore/Makefile ; also replaced configure to use
bash:
for i in $(find . -type f -name configure) ; do gsed -ie
's%^#!/bin/sh%#!/bin/bash%' "$i"; done
[3]
../JavaScriptCore/wtf/PassRefPtr.h: In static member function `static
WTF::PassRefPtr<WTF::ByteArray> WTF::ByteArray::create(size_t)':
../JavaScriptCore/wtf/PassRefPtr.h:66: sorry, unimplemented: inlining
failed in call to 'WTF::PassRefPtr<T>::~PassRefPtr() [with T =
WTF::ByteArray]': function body not available
../JavaScriptCore/wtf/ByteArray.cpp:35: sorry, unimplemented: called from
here
[4]
(dbx) where -l
current thread: t at 1
[1]
libQtWebKit.so.4.6.1:WTF::TCMalloc_PageHeap::GrowHeap(0xfffffd7fff05a47c,
0x0, 0xfffffd7ff9faf, 0x0, 0x0, 0x0), at 0xfffffd7ffdc8a9d7
[2]
libQtWebKit.so.4.6.1:WTF::TCMalloc_Central_FreeList::FetchFromSpansSafe(0x0,
0x0, 0x0, 0x0, 0x0, 0x0), at 0xfffffd7ffdc8b1b1
[3]
libQtWebKit.so.4.6.1:WTF::TCMalloc_Central_FreeList::RemoveRange(0x0, 0x0,
0x0, 0x0, 0x0, 0x0), at 0xfffffd7ffdc8b58b
[4] libQtWebKit.so.4.6.1:WTF::fastMalloc(0x0, 0x0, 0x0, 0x0, 0x0, 0x0),
at 0xfffffd7ffdc8c540
[5] libQtWebKit.so.4.6.1:WebCore::atomicCanonicalTextEncodingName(0x0,
0x0, 0x0, 0x0, 0x0, 0x0), at 0xfffffd7ffe36f41a
[6] libQtWebKit.so.4.6.1:WebCore::TextEncoding::TextEncoding(0x0, 0x0,
0x0, 0x0, 0x0, 0x0), at 0xfffffd7ffe36c874
[7] libQtWebKit.so.4.6.1:WebCore::UTF8Encoding(0x0, 0x0, 0x0, 0x0, 0x0,
0x0), at 0xfffffd7ffe36cbb9
[8] libQtWebKit.so.4.6.1:WebCore::KURL::KURL(0x0, 0x0, 0x0, 0x0, 0x0,
0x0), at 0xfffffd7ffe4d66c1
[9] libQtWebKit.so.4.6.1:QWebSettings::iconForUrl(0x0, 0x0, 0x0, 0x0,
0x0, 0x0), at 0xfffffd7ffe521ad5
=>[10] browser:BrowserApplication::icon(this = 0xfffffd7fffdff7c0, url =
CLASS), line 452 in "browserapplication.cpp"
[11] browser:UrlLineEdit::webViewIconChanged(this = 0x8b4910), line 292
in "urllineedit.cpp"
[12] browser:UrlLineEdit::UrlLineEdit(this = 0x8b4910, parent = (nil)),
line 265 in "urllineedit.cpp"
[13] browser:TabWidget::newTab(this = 0x757110, makeCurrent = true),
line 412 in "tabwidget.cpp"
[14] browser:BrowserMainWindow::BrowserMainWindow(this = 0x64e4f0,
parent = (nil), flags = CLASS), line 146 in "browsermainwindow.cpp"
[15] browser:BrowserApplication::newMainWindow(this =
0xfffffd7fffdff7c0), line 372 in "browserapplication.cpp"
[16] browser:main(argc = 1, argv = 0xfffffd7fffdff838), line 50 in
"main.cpp"
More information about the webkit-dev
mailing list