[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* 
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 

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 

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, 
   QWebPage *fakePage = new QWebPage();
   (void) app;
   fprintf(stderr, "successfully started\n");

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 
   [6] JSC::initializeThreading(0x0, 0x0, 0x0, 0x0, 0x0, 0x0), at 
   [7] QWebPagePrivate::QWebPagePrivate(0x0, 0x0, 0x0, 0x0, 0x0, 0x0), at 
   [8] QWebPage::QWebPage(0x0, 0x0, 0x0, 0x0, 0x0, 0x0), at 
=>[9] main(argc = 1, argv = 0xfffffd7fffdfd3a8), line 16 in "test-gui.cpp"

Any hint or suggestion would be appreciated :)

--- src/3rdparty/webkit/JavaScriptCore/wtf/StringExtras.h
+++ src/3rdparty/webkit/JavaScriptCore/wtf/StringExtras.h
@@ -85,7 +85,7 @@



  inline char* strnstr(const char* buffer, const char* target, size_t 
--- src/3rdparty/javascriptcore/JavaScriptCore/wtf/StringExtras.h
+++ src/3rdparty/javascriptcore/JavaScriptCore/wtf/StringExtras.h
@@ -85,7 +85,7 @@



  inline char* strnstr(const char* buffer, const char* target, size_t 

[2] workaround for sun ld : remove the '-Wl,--gc-sections' option in 
src/3rdparty/webkit/WebCore/Makefile ; also replaced configure to use 
for i in $(find . -type f -name configure) ; do gsed -ie 
's%^#!/bin/sh%#!/bin/bash%' "$i"; done

../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 

(dbx) where -l
current thread: t at 1
0x0, 0xfffffd7ff9faf, 0x0, 0x0, 0x0), at 0xfffffd7ffdc8a9d7
0x0, 0x0, 0x0, 0x0, 0x0), at 0xfffffd7ffdc8b1b1
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 

More information about the webkit-dev mailing list