WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
UNCONFIRMED
20990
FreeBSD Alpha, >3000 cast alignment warnings on build, unaligned access errors on run
https://bugs.webkit.org/show_bug.cgi?id=20990
Summary
FreeBSD Alpha, >3000 cast alignment warnings on build, unaligned access error...
Anton Shterenlikht
Reported
2008-09-22 06:54:08 PDT
I built webkit-gtk2-0.0.30549_1 from ports on FreeBSD 6.3-stable on Alpha. I had 3293 alignment warnings. The details are below. I use webkit with kazehakase web browser, also built from ports. Kazehakase was built with xulrunner as well. When I ran kazehakase with xulrunner all is well. With webkit I get literally hundreds of messages like this: pid 83623 (kazehakase): unaligned access: va=0x1661aa90e pc=0x164855bb8 ra=0x1648550ac op=ldl or ** (gecko:83623): CRITICAL **: void webkit_web_view_open(WebKitWebView*, const gchar*): assertion `uri' failed With webkit, kazehakase does not load pages, and is otherwise not very responsive. I wonder if the alignment warnings on build show themselves as unaligned access errors on run? ****************************** The alignment warning statistics on build; "log" is the file with all build output. # grep -c alignment log 3293 of which the major culprits are: #grep -c "./JavaScriptCore/wtf/Vector.h:380: warning: cast from" log 1414 #grep -c "WebCore/platform/text/StringHash.h:45: warning: cast from" log 642 #grep -c "WebCore/platform/text/StringHash.h:46: warning: cast from" log 642 #grep -c "./JavaScriptCore/wtf/ListHashSet.h:169: warning: cast from" log 586 and the minor worries are: #grep -c "JavaScriptCore/kjs/dtoa.cpp:2575: warning: cast from" log 2 #grep -c "WebCore/platform/text/AtomicString.cpp:117: warning: cast from" log 1 #grep -c "WebCore/platform/text/AtomicString.cpp:118: warning: cast from" log 1 #grep -c "WebCore/rendering/RenderLayer.cpp:113: warning: cast from" log 1 #grep -c "WebCore/rendering/RootInlineBox.cpp:56: warning: cast from" log 1 #grep -c "JavaScriptCore/pcre/pcre_compile.cpp:2523: warning: cast from" log 1 #grep -c "JavaScriptCore/kjs/property_map.cpp:111: warning: cast from" log 1 #grep -c "./JavaScriptCore/wtf/FastMalloc.cpp:2141: warning: cast from" log 1 642+642+1414+586+2+7*1 = 3293 many thanks anton
Attachments
Add attachment
proposed patch, testcase, etc.
Alexey Proskuryakov
Comment 1
2008-09-22 08:07:33 PDT
See also:
bug 19775
.
Anton Shterenlikht
Comment 2
2008-09-24 01:28:02 PDT
(In reply to
comment #1
)
> See also:
bug 19775
. >
thanks. Regarding this fix: +#if PLATFORM(ARM) || PLATFORM(SPARC64) + const UChar* aChars = a->characters(); + const UChar* bChars = b->characters(); + for (unsigned i = 0; i != aLength; ++i) + if (*aChars++ != *bChars++) + return false; + + return true; +#else what shall I use for PLATFORM,- FREEBSD or ALPHA ? thanks
Alexey Proskuryakov
Comment 3
2008-09-24 08:12:10 PDT
I think the latter would be correct, as FreeBSD on other platforms doesn't need this change (which likely affects performance negatively).
Anton Shterenlikht
Comment 4
2008-09-25 06:51:04 PDT
(In reply to
comment #1
)
> See also:
bug 19775
. >
The patches to JavaScriptCore/wtf/Vector.h: WebCore/platform/text/StringHash.h were successful. I reduced the number of alignment warnings from >3000 down to 600. However, the patch for JavaScriptCore/wtf/ListHashSet.h is not having the effect: ./JavaScriptCore/wtf/ListHashSet.h:169: warning: cast from 'uint32_t*' to 'WTF::ListHashSetNode<WebCore::HTMLFormControlElementWithState*>*' increases required alignment of target type I applied the patch just as in bug report 19775: --- JavaScriptCore/wtf/ListHashSet.h.orig Tue Jul 8 23:23:01 2008 +++ JavaScriptCore/wtf/ListHashSet.h Tue Jul 8 23:24:03 2008 @@ -122,7 +122,7 @@ namespace WTF { : m_freeList(pool()) , m_isDoneWithInitialFreeList(false) { - memset(m_pool.pool, 0, sizeof(m_pool.pool)); + memset(m_pool, 0, sizeof(m_pool)); } Node* allocate() @@ -166,7 +166,7 @@ namespace WTF { } private: - Node* pool() { return reinterpret_cast<Node*>(m_pool.pool); } + Node* pool() { return reinterpret_cast<Node*>(m_pool); } Node* pastPool() { return pool() + m_poolSize; } bool inPool(Node* node) @@ -177,10 +177,7 @@ namespace WTF { Node* m_freeList; bool m_isDoneWithInitialFreeList; static const size_t m_poolSize = 256; - union { - char pool[sizeof(Node) * m_poolSize]; - double forAlignment; - } m_pool; + uint32_t m_pool[(sizeof(Node) * m_poolSize + sizeof(uint32_t) - 1) / sizeof(uint32_t)]; }; template<typename ValueArg> struct ListHashSetNode { Line 169 is the one with reinterpred_cast. Not sure what to do next. anton
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug