RESOLVED FIXED 28886
Build error using JIT with gcc 4.1.2 and ARM v5
https://bugs.webkit.org/show_bug.cgi?id=28886
Summary Build error using JIT with gcc 4.1.2 and ARM v5
Andre Pedralho
Reported 2009-09-01 12:46:12 PDT
g++ -c -pipe -Wreturn-type -fno-strict-aliasing -ffunction-sections -fdata-sections -O2 -D_REENTRANT -fPIC -DENABLE_YARR=1 -DENABLE_YARR_JIT=1 -DENABLE_JIT=1 -DBUILDING_QT__=1 -DUSE_SYSTEM_MALLOC -DNDEBUG -DQT_MAKEDLL -DHAVE_STDINT_H -DBUILD_WEBKIT -DENABLE_JAVASCRIPT_DEBUGGER=1 -DENABLE_DATABASE=1 -DENABLE_EVENTSOURCE=1 -DENABLE_OFFLINE_WEB_APPLICATIONS=1 -DENABLE_DOM_STORAGE=1 -DENABLE_ICONDATABASE=1 -DENABLE_CHANNEL_MESSAGING=1 -DENABLE_SQLITE=1 -DENABLE_DASHBOARD_SUPPORT=0 -DENABLE_FILTERS=0 -DENABLE_XPATH=1 -DENABLE_XSLT=0 -DENABLE_WCSS=0 -DENABLE_WML=0 -DENABLE_SHARED_WORKERS=0 -DENABLE_WORKERS=1 -DENABLE_XHTMLMP=0 -DENABLE_DATAGRID=1 -DENABLE_SVG=1 -DENABLE_SVG_FONTS=1 -DENABLE_SVG_FOREIGN_OBJECT=1 -DENABLE_SVG_ANIMATION=1 -DENABLE_SVG_AS_IMAGE=1 -DENABLE_SVG_USE=1 -DENABLE_RUBY=1 -DENABLE_VIDEO=1 -DENABLE_DATALIST=1 -DENABLE_NETSCAPE_PLUGIN_API=1 -DWTF_USE_JAVASCRIPTCORE_BINDINGS=1 -DWTF_CHANGES=1 -DBUILDING_QT__ -DBUILDING_JavaScriptCore -DBUILDING_WTF -DENABLE_PLUGIN_PACKAGE_SIMPLE_HASH=1 -DXP_UNIX -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I../../../WebCore -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtNetwork -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I../../../WebCore/bridge/qt -I../../../WebCore/page/qt -I../../../WebCore/platform/graphics/qt -I../../../WebCore/platform/network/qt -I../../../WebCore/platform/qt -I../../../WebKit/qt/WebCoreSupport -I../../../WebCore -I../../../WebCore/accessibility -I../../../WebCore/bindings/js -I../../../WebCore/bridge -I../../../WebCore/bridge/c -I../../../WebCore/css -I../../../WebCore/dom -I../../../WebCore/dom/default -I../../../WebCore/editing -I../../../WebCore/history -I../../../WebCore/html -I../../../WebCore/html/canvas -I../../../WebCore/inspector -I../../../WebCore/loader -I../../../WebCore/loader/appcache -I../../../WebCore/loader/archive -I../../../WebCore/loader/icon -I../../../WebCore/notifications -I../../../WebCore/page -I../../../WebCore/page/animation -I../../../WebCore/platform -I../../../WebCore/platform/animation -I../../../WebCore/platform/graphics -I../../../WebCore/platform/graphics/filters -I../../../WebCore/platform/graphics/transforms -I../../../WebCore/platform/image-decoders -I../../../WebCore/platform/network -I../../../WebCore/platform/sql -I../../../WebCore/platform/text -I../../../WebCore/plugins -I../../../WebCore/rendering -I../../../WebCore/rendering/style -I../../../WebCore/storage -I../../../WebCore/svg -I../../../WebCore/svg/animation -I../../../WebCore/svg/graphics -I../../../WebCore/svg/graphics/filters -I../../../WebCore/wml -I../../../WebCore/workers -I../../../WebCore/xml -Igenerated/release -I../../../JavaScriptCore -I../../../../webkit -I../../../JavaScriptCore/assembler -I../../../JavaScriptCore/bytecode -I../../../JavaScriptCore/bytecompiler -I../../../JavaScriptCore/debugger -I../../../JavaScriptCore/interpreter -I../../../JavaScriptCore/jit -I../../../JavaScriptCore/parser -I../../../JavaScriptCore/profiler -I../../../JavaScriptCore/runtime -I../../../JavaScriptCore/wrec -I../../../JavaScriptCore/wtf -I../../../JavaScriptCore/wtf/unicode -I../../../JavaScriptCore/yarr -I../../../JavaScriptCore/API -I../../../JavaScriptCore/ForwardingHeaders -Igenerated/release -I../../../WebKit/qt/Api -I../../../JavaScriptCore/pcre -I/home/root/webkit/WebKitBuild/Release/JavaScriptCore/tmp -I/usr/src/3rdparty/sqlite/ -I/usr/include/qt4/phonon -I/usr/X11R6/include -I. -I../../../WebCore -I. -o obj/release/JSBase.o ../../../JavaScriptCore/API/JSBase.cpp ../../../JavaScriptCore/jit/ExecutableAllocator.h: In static member function 'static void JSC::ExecutableAllocator::cacheFlush(void*, size_t)': ../../../JavaScriptCore/jit/ExecutableAllocator.h:189: error: '__clear_cache' was not declared in this scope make[1]: *** [obj/release/JSBase.o] Error 1 The error persists even building with the command below: WebKitTools/Scripts/build-webkit --qt ENABLE_YARR=1 ENABLE_YARR_JIT=1 ENABLE_JIT=1 WTF_USE_JSVALUE32=1
Attachments
Adding the __clear_cache header according to the comment above. (558 bytes, patch)
2009-09-08 08:06 PDT, Andre Pedralho
no flags
Updated ToT, added ifdefs and changelog according to loki04 suggestions in #qtwebkit. (1.12 KB, patch)
2009-09-08 08:34 PDT, Andre Pedralho
eric: review-
Be more specific with guards. (2.01 KB, patch)
2009-09-11 07:26 PDT, Laszlo Gombos
no flags
incorporate Gabor's comments. (1.95 KB, patch)
2009-09-11 10:51 PDT, Laszlo Gombos
no flags
Avoid __clear_cache built-in function if NO_CLEAR_CACHE define is set (2.20 KB, patch)
2009-09-22 08:01 PDT, Gabor Loki
no flags
Avoid __clear_cache built-in function if DISABLE_BUILTIN_CLEAR_CACHE define is set (2.34 KB, patch)
2009-09-22 09:23 PDT, Gabor Loki
barraclough: review+
Remove __clear_cache which is an internal function of GCC (1.82 KB, patch)
2009-09-28 09:19 PDT, Gabor Loki
hausmann: review+
Antonio Gomes
Comment 1 2009-09-03 04:41:24 PDT
pedralho, any luck to build w/ jit, yacc and friends all off ? please also inform revision you were at.
Andre Pedralho
Comment 2 2009-09-03 06:21:57 PDT
(In reply to comment #1) > pedralho, any luck to build w/ jit, yacc and friends all off ? > > please also inform revision you were at. No luck, I reseted my tree to ToT (svn r48016) and tried to rebuild getting the following error: g++ -c -pipe -Wreturn-type -fno-strict-aliasing -ffunction-sections -fdata-sections -O2 -D_REENTRANT -fPIC -DENABLE_VIDEO=0 -DBUILDING_QT__=1 -DUSE_SYSTEM_MALLOC -DNDEBUG -DQT_MAKEDLL -DHAVE_STDINT_H -DBUILD_WEBKIT -DENABLE_JAVASCRIPT_DEBUGGER=1 -DENABLE_DATABASE=1 -DENABLE_EVENTSOURCE=1 -DENABLE_OFFLINE_WEB_APPLICATIONS=1 -DENABLE_DOM_STORAGE=1 -DENABLE_ICONDATABASE=1 -DENABLE_CHANNEL_MESSAGING=1 -DENABLE_SQLITE=1 -DENABLE_DASHBOARD_SUPPORT=0 -DENABLE_FILTERS=0 -DENABLE_XPATH=1 -DENABLE_XSLT=0 -DENABLE_WCSS=0 -DENABLE_WML=0 -DENABLE_SHARED_WORKERS=0 -DENABLE_WORKERS=1 -DENABLE_XHTMLMP=0 -DENABLE_DATAGRID=1 -DENABLE_SVG=1 -DENABLE_SVG_FONTS=1 -DENABLE_SVG_FOREIGN_OBJECT=1 -DENABLE_SVG_ANIMATION=1 -DENABLE_SVG_AS_IMAGE=1 -DENABLE_SVG_USE=1 -DENABLE_RUBY=1 -DENABLE_DATALIST=1 -DENABLE_NETSCAPE_PLUGIN_API=1 -DWTF_USE_JAVASCRIPTCORE_BINDINGS=1 -DWTF_CHANGES=1 -DBUILDING_QT__ -DBUILDING_JavaScriptCore -DBUILDING_WTF -DENABLE_PLUGIN_PACKAGE_SIMPLE_HASH=1 -DXP_UNIX -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I../../../WebCore -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtNetwork -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I../../../WebCore/bridge/qt -I../../../WebCore/page/qt -I../../../WebCore/platform/graphics/qt -I../../../WebCore/platform/network/qt -I../../../WebCore/platform/qt -I../../../WebKit/qt/WebCoreSupport -I../../../WebCore -I../../../WebCore/accessibility -I../../../WebCore/bindings/js -I../../../WebCore/bridge -I../../../WebCore/bridge/c -I../../../WebCore/css -I../../../WebCore/dom -I../../../WebCore/dom/default -I../../../WebCore/editing -I../../../WebCore/history -I../../../WebCore/html -I../../../WebCore/html/canvas -I../../../WebCore/inspector -I../../../WebCore/loader -I../../../WebCore/loader/appcache -I../../../WebCore/loader/archive -I../../../WebCore/loader/icon -I../../../WebCore/notifications -I../../../WebCore/page -I../../../WebCore/page/animation -I../../../WebCore/platform -I../../../WebCore/platform/animation -I../../../WebCore/platform/graphics -I../../../WebCore/platform/graphics/filters -I../../../WebCore/platform/graphics/transforms -I../../../WebCore/platform/image-decoders -I../../../WebCore/platform/network -I../../../WebCore/platform/sql -I../../../WebCore/platform/text -I../../../WebCore/plugins -I../../../WebCore/rendering -I../../../WebCore/rendering/style -I../../../WebCore/storage -I../../../WebCore/svg -I../../../WebCore/svg/animation -I../../../WebCore/svg/graphics -I../../../WebCore/svg/graphics/filters -I../../../WebCore/wml -I../../../WebCore/workers -I../../../WebCore/xml -Igenerated/release -I../../../JavaScriptCore -I../../../../mainline -I../../../JavaScriptCore/assembler -I../../../JavaScriptCore/bytecode -I../../../JavaScriptCore/bytecompiler -I../../../JavaScriptCore/debugger -I../../../JavaScriptCore/interpreter -I../../../JavaScriptCore/jit -I../../../JavaScriptCore/parser -I../../../JavaScriptCore/profiler -I../../../JavaScriptCore/runtime -I../../../JavaScriptCore/wrec -I../../../JavaScriptCore/wtf -I../../../JavaScriptCore/wtf/unicode -I../../../JavaScriptCore/yarr -I../../../JavaScriptCore/API -I../../../JavaScriptCore/ForwardingHeaders -Igenerated/release -I../../../WebKit/qt/Api -I../../../JavaScriptCore/pcre -I/home/root/bluebox/webkit/mainline/WebKitBuild/Release/JavaScriptCore/tmp -I/usr/src/3rdparty/sqlite/ -I/usr/X11R6/include -I. -I../../../WebCore -I. -o obj/release/JSBase.o ../../../JavaScriptCore/API/JSBase.cpp ../../../JavaScriptCore/jit/ExecutableAllocator.h: In static member function 'static void JSC::ExecutableAllocator::cacheFlush(void*, size_t)': ../../../JavaScriptCore/jit/ExecutableAllocator.h:189: error: '__clear_cache' was not declared in this scope make[1]: *** [obj/release/JSBase.o] Error 1 make[1]: Leaving directory `/home/root/bluebox/webkit/mainline/WebKitBuild/Release/WebCore' make: *** [sub-WebCore-make_default-ordered] Error 2
Zoltan Herczeg
Comment 3 2009-09-03 08:24:59 PDT
I think this cause the issue: > '__clear_cache' was not declared in this scope > make[1]: *** [obj/release/JSBase.o] Error 1 This is a gcc builtin function. Please check if its interface is declared. see the "static void cacheFlush(void* code, size_t size)" in JavaScriptCore/jit/ExecutableAllocator.h This function calls a kernel utility to flush data cache memory (unfortunately the required mrc instruction is only executable in kernel level). There is a native NAPI implementation in the code if __clear_cache is not declared in your gcc. If you have other solution for flushing the data cache, just call that function.
Andre Pedralho
Comment 4 2009-09-04 15:15:01 PDT
(In reply to comment #3) > I think this cause the issue: > > This is a gcc builtin function. Please check if its interface is declared. > I copied a simple test (from here http://code.google.com/p/android/issues/detail?id=1803) and it builds and runs fine in the same environment. #include <stdio.h> int main(int argc, char **argv) { printf("attempting toolchain clearcache syscall:\n"); __clear_cache(0, 0); return 0; } I couldn't find the __clear_cache in any system header file, but could find it in 4.1.2/libgcc.a and 4.1.2/libgcc_s.so. Then I added an "extern void __clear_cache (char *beg, char *end);" before using __clear_cache in ExecutableAllocator.h. The result: obj/release/ARMAssembler.o: In function `JSC::ARMAssembler::linkBranch(void*, JSC::ARMAssembler::JmpSrc, void*, int)': ARMAssembler.cpp:(.text+0x1b8): undefined reference to `JSC::__clear_cache(char*, char*)'
Zoltan Herczeg
Comment 5 2009-09-05 00:28:34 PDT
> I couldn't find the __clear_cache in any system header file, but could find it > in 4.1.2/libgcc.a and 4.1.2/libgcc_s.so. Good! > Then I added an "extern void __clear_cache (char *beg, char *end);" before > using __clear_cache in ExecutableAllocator.h. The result: > > obj/release/ARMAssembler.o: In function `JSC::ARMAssembler::linkBranch(void*, > JSC::ARMAssembler::JmpSrc, void*, int)': > ARMAssembler.cpp:(.text+0x1b8): undefined reference to > `JSC::__clear_cache(char*, char*)' __clear_cache is a C function not C++, and does not belongs to JSC namespace. try this (outside of "namespace JSC", for example put it before the #include-s in a C++ file) extern "C" { void __clear_cache (char *beg, char *end); } (You don't need to put extern before a function declaration. The semicolon does the magic.)
Andre Pedralho
Comment 6 2009-09-08 08:06:33 PDT
Created attachment 39186 [details] Adding the __clear_cache header according to the comment above. This patch fixes this bug.
Zoltan Herczeg
Comment 7 2009-09-08 08:33:37 PDT
(In reply to comment #6) > Created an attachment (id=39186) [details] > Adding the __clear_cache header according to the comment above. > > This patch fixes this bug. Please put #if PLATFORM(ARM) around the definition. Anyway, do you know why this function is not defined in your gcc? Are you tested it on your platform?
Andre Pedralho
Comment 8 2009-09-08 08:34:11 PDT
Created attachment 39188 [details] Updated ToT, added ifdefs and changelog according to loki04 suggestions in #qtwebkit.
Eric Seidel (no email)
Comment 9 2009-09-08 10:07:48 PDT
Should this be guarded <= a GCC version? Or is this expected that this symbol will always be missing and need our own extern declaration?
Zoltan Herczeg
Comment 10 2009-09-08 10:26:32 PDT
(In reply to comment #9) > Should this be guarded <= a GCC version? Or is this expected that this symbol > will always be missing and need our own extern declaration? I was wondering about it myself. If __clear_cache is defined in the same way, it doesn't matter duplicating it. However, what's happen if not? (I saw a macro definition for __clear_cache somewhere else, which replaces it another function. Unfortunately I didn't remember where) The strange thing is for me, that GCC 4.1.2 should define this function... Especially because only its forward declaration is missing, not the function body.
Zoltan Herczeg
Comment 11 2009-09-08 10:28:39 PDT
Eric Seidel (no email)
Comment 12 2009-09-08 10:29:18 PDT
Probably not related, but just in case: http://code.google.com/p/android/issues/detail?id=1803
Eric Seidel (no email)
Comment 13 2009-09-08 10:32:15 PDT
Searching for __clear_cache in gcc's bugzilla yields no results: http://gcc.gnu.org/bugzilla/ It seems we should file one and reference it in whatever fix we take.
Eric Seidel (no email)
Comment 14 2009-09-08 14:55:33 PDT
Comment on attachment 39188 [details] Updated ToT, added ifdefs and changelog according to loki04 suggestions in #qtwebkit. We really should file a bug with GCC (per their public bug tracker) and link to it in this ChangeLog.
Andre Pedralho
Comment 15 2009-09-08 21:26:20 PDT
(In reply to comment #14) > (From update of attachment 39188 [details]) > We really should file a bug with GCC (per their public bug tracker) and link to > it in this ChangeLog. It is not a GCC bug. I could build* and run the example given in the link in comment #12: #include <stdio.h> int main(int argc, char **argv) { printf("attempting toolchain clearcache syscall:\n"); __clear_cache(0, 0); return 0; } * no extra arguments given to build nor run. ps. There were no need even to add the __clear_cache header definition.
Andre Pedralho
Comment 16 2009-09-09 05:28:12 PDT
(In reply to comment #14) > (From update of attachment 39188 [details]) > We really should file a bug with GCC (per their public bug tracker) and link to > it in this ChangeLog. I did the same test in comment #15 but using a .cpp file and building using g++: teste.cpp:6: error: '__clear_cache' was not declared in this scope
Gabor Loki
Comment 17 2009-09-09 06:39:39 PDT
I did a quick test with 4.3.2, and the example works with gcc and g++ as well. I am going to examine what this is about gcc 4.1.2 .
Gabor Loki
Comment 18 2009-09-09 07:56:35 PDT
(In reply to comment #17) > I did a quick test with 4.3.2, and the example works with gcc and g++ as well. > I am going to examine what this is about gcc 4.1.2 . Well, this is not a WebKit bug. G++ 4.1.1 from CodeSourcery (2006q3) also has this bug. The most common error, which could cause this kind of error, is that in the first compilation of gcc have to be compiled without headers and the 2nd one should use library headers. I do not think that they did a wrong packaging/configuring.
Laszlo Gombos
Comment 19 2009-09-11 07:17:02 PDT
I think Andre Pedralho or someone else should not only check that it compiles and links, but also that the __clear_cache actually clears the instruction cache. As it was pointed in the Android related discussion (http://code.google.com/p/android/issues/detail?id=1803) the __clear_cache call could be a no-op, which would than break the JIT functionality. Also maybe WebKit can do a bit better guarding the __clear_cache call and the fallback assembly code. Fill post a patch for consideration.
Laszlo Gombos
Comment 20 2009-09-11 07:26:12 PDT
Created attachment 39430 [details] Be more specific with guards. 1./ It looks to me that not only the __clear_cache call but also the fallback assembly assumes GCC (as the assembly syntax is compiler specific) - so maybe this whole code section should be guarded with COMPILER(GCC). 2./ It might be better to use the CLEAR_INSN_CACHE guard to test if __clear_cache is available than testing for a specific GCC version. Andre can you see if CLEAR_INSN_CACHE is defined in your environment. 3./ The fallback ARM code seems to call a Linux system call and as such it would only work on Linux, so maybe we should have a guard for that as well. 4./ I would also suggest #error messages for the platforms currently not supported
Gabor Loki
Comment 21 2009-09-11 09:31:13 PDT
> 2./ It might be better to use the CLEAR_INSN_CACHE guard to test if > __clear_cache is available than testing for a specific GCC version. Andre can > you see if CLEAR_INSN_CACHE is defined in your environment. CLEAR_INSN_CACHE is definied in gcc/config/arm/linux-eabi.h (GCC source), but it is not explicitly exported. You can check the predefinied macros with 'gcc -c -E -dM empty.file' command. So, we are not able to use CLEAR_INSN_CACHE. The current guard it better. The _clear_cache function is available since GCC 3.4.6 from lib1funcs.asm. Btw, please use '#else' directive instead of '#elif' without expression.
Laszlo Gombos
Comment 22 2009-09-11 10:51:01 PDT
Created attachment 39450 [details] incorporate Gabor's comments. Gabor thanks for the review. If CLEAR_INSN_CACHE test does not work than the patch is less useful, but maybe still valid.
Andre Pedralho
Comment 23 2009-09-14 12:01:56 PDT
Sorry by the delay! (In reply to comment #19) > I think Andre Pedralho or someone else should not only check that it compiles > and links, but also that the __clear_cache actually clears the instruction > cache. As it was pointed in the Android related discussion > (http://code.google.com/p/android/issues/detail?id=1803) the __clear_cache call > could be a no-op, which would than break the JIT functionality. > I could run it using strace and it calls both operation (the g++ __clear_cache and th system __asm __volatile...) defined in http://code.google.com/p/android/issues/detail?id=1803 cacheflush(0, 0, 0, 0x1, 0x40022db0) = 0 cacheflush(0, 0, 0, 0xf0002, 0x40022db0) = 0 > Also maybe WebKit can do a bit better guarding the __clear_cache call and the > fallback assembly code. Fill post a patch for consideration. (In reply to comment #20) > Created an attachment (id=39430) [details] > Be more specific with guards. > > 2./ It might be better to use the CLEAR_INSN_CACHE guard to test if > __clear_cache is available than testing for a specific GCC version. Andre can > you see if CLEAR_INSN_CACHE is defined in your environment. > No, it is not defined. So I don't know if __clear_cache is really clearing cache. The code below builds fine: #ifdef CLEAR_INSN_CACHE xxxxxx #endif
Gabor Loki
Comment 24 2009-09-22 08:01:06 PDT
Created attachment 39925 [details] Avoid __clear_cache built-in function if NO_CLEAR_CACHE define is set This patch adds an additional check for __clear_cache. If NO_CLEAR_CACHE is set the execution will skip __clear_cache case. I have also fixed a silly typo in the inline assembly.
Gabor Loki
Comment 25 2009-09-22 08:04:38 PDT
(In reply to comment #22) > Created an attachment (id=39450) [details] Laszlo, I think your patch is obsolete now. I did a small refactoring earlier.
Darin Adler
Comment 26 2009-09-22 08:21:16 PDT
Comment on attachment 39925 [details] Avoid __clear_cache built-in function if NO_CLEAR_CACHE define is set The change log mentions only one change, but there's also a change to the assembly code. Is that second change unintentional or is it the change log that needs to be updated?
Andre Pedralho
Comment 27 2009-09-22 08:37:46 PDT
(In reply to comment #24) > Created an attachment (id=39925) [details] > Avoid __clear_cache built-in function if NO_CLEAR_CACHE define is set > > This patch adds an additional check for __clear_cache. If NO_CLEAR_CACHE is set > the execution will skip __clear_cache case. > > I have also fixed a silly typo in the inline assembly. As I told you in #qtwebkit: we are fixing the issue disabling the feature, aren't we? I know it is a very specific case (ARM and GCC 4.1.2). Couldn't we do something using CLEAR_INSN_CACHE (as we don't have it defined)? BTW, does anybody have it defined? - #elif PLATFORM(ARM) && COMPILER(GCC) && (GCC_VERSION >= 30406) + #elif PLATFORM(ARM) && COMPILER(GCC) && (GCC_VERSION >= 30406) && defined(CLEAR_INSN_CACHE) static void cacheFlush(void* code, size_t size) { __clear_cache(reinterpret_cast<char*>(code), reinterpret_cast<char*>(code) + size); } - #elif PLATFORM(ARM_TRADITIONAL) && PLATFORM(LINUX) + #elif PLATFORM(ARM_TRADITIONAL) && PLATFORM(LINUX) || !defined(CLEAR_INSN_CACHE) static void cacheFlush(void* code, size_t size) { asm volatile ( "push {r7}\n" "mov r0, %0\n"
Gabor Loki
Comment 28 2009-09-22 08:54:42 PDT
(In reply to comment #26) > The change log mentions only one change, but there's also a change to the > assembly code. You are right. There was a small typo in the inline asm. I will update the ChangeLog if this solution is fine for Andre as well.
Gabor Loki
Comment 29 2009-09-22 09:23:51 PDT
Created attachment 39927 [details] Avoid __clear_cache built-in function if DISABLE_BUILTIN_CLEAR_CACHE define is set Updated the name of the define and the ChangeLog entry as well.
Andre Pedralho
Comment 30 2009-09-22 11:01:40 PDT
(In reply to comment #28) > (In reply to comment #26) > > The change log mentions only one change, but there's also a change to the > > assembly code. > > You are right. There was a small typo in the inline asm. I will update the > ChangeLog if this solution is fine for Andre as well. It is fine for me. Thanks again Loki! The new define name (DISABLE_BUILTIN_CLEAR_CACHE) is more intuitive than the older (NO_CLEAR_CACHE) for what it really does and unfortunately my suggestion in comment #23 would not work as CLEAR_INSN_CACHE is a GCC internal define.
Laszlo Gombos
Comment 31 2009-09-22 12:49:54 PDT
Comment on attachment 39450 [details] incorporate Gabor's comments. This is now obsolete thanks to Gabor after http://trac.webkit.org/changeset/48527. Laszlo.
Gavin Barraclough
Comment 32 2009-09-23 15:33:41 PDT
Just r+ing the last patch, since it is not clear to me from the comments whether the first is still required by anyone.
Gabor Loki
Comment 33 2009-09-23 21:57:47 PDT
(In reply to comment #32) > Just r+ing the last patch, since it is not clear to me from the comments > whether the first is still required by anyone. AFAIK Andre is happy with the last patch. The attachment 39188 [details] (the first patch) is not a good approach to achieve access to clear cache. I will file a bug report about this in GCC's bugzilla.
Zoltan Horvath
Comment 34 2009-09-23 23:12:48 PDT
Gabor Loki
Comment 35 2009-09-28 09:19:35 PDT
Created attachment 40240 [details] Remove __clear_cache which is an internal function of GCC Finally I got an concrete answer from GCC about __clear_cache. Although __clear_cache is exported from GCC, it is an internal function. GCC makes no promises about it. So, we should remove it. The remaining flushing mechanism will be the inline assembly on ARM-Linux.
Simon Hausmann
Comment 36 2009-09-28 11:56:26 PDT
Comment on attachment 40240 [details] Remove __clear_cache which is an internal function of GCC Thanks Gabor!
Simon Hausmann
Comment 37 2009-09-28 11:57:59 PDT
Note You need to log in before you can comment on or make changes to this bug.