Hi Paul, Thanks again. I will definetly consider the option of porting this to mips Big-endian architecture. But only thing worrying me now is the size of v8 library which is around 5 MB after removing debug option. Such a big size is not suitable for the embedded devices. Have you also seen the same observation in terms of library size. Is there any way to optimize this?
Thanks & Regards, Nilima On Thu, Jul 15, 2010 at 9:35 AM, Paul Lind <[email protected]> wrote: > Hi Nilima - > > It is hard to estimate the time/complexity for this. There are a few known > areas that require code-generation fixes for big-endian. Search for 'endian' > in src/mips/codegen-mips.cc. Fixing those should take a few days or a week. > > But as I said before I do not think that v8 has ever been run big-endian. > That means there are likely to be problems that will only be uncovered by > trying it and debugging. Very hard to predict the time for that. I would > guess a month if you know v8, and another month or two if you are starting > from scratch. > > One issue is that v8 is partly implemented in javascript (the native > functions), and if the natives do not compile and run, then you cannot even > bring up the shell. It is hard to get the system bootstrapped to the state > you can debug. Alexandre wrote a nice "simplified shell" that can come up > without compiling the natives. I was going to remove that stuff, but it may > be useful when trying big-endian. > > Take a look at src/mips/test-mips.cc, src/mips/test-interface-mips.cc & h, > and compile_mips-test.sh, and the flag "disable_native_files" in > src/flag-definitions.h > > > I'd just suggest you jump in and give it a try. Maybe it will come up > without too much trouble. > > Per your other questions: the test-suites are very complete, and the wiki > pages shows how to run them. Please note that v8mips is not passing all the > tests yet ... we're workin on it. The status page shows our results. > > I would guess that we have 3 months of other activity before we would start > working on big-endian. We still need to pass 100% of tests, improve our > performance, bring our codebase up to current google codebase, and integrate > with Chrome. As well as re-start the submission process of our code back to > google. > > Anyway, I hope that you have the interest to jump in and contribute. It is > a great project, and a lot of fun. If so, we can work out how best to > collaborate on the github codebase. It might be easiest to just fork the > project and start. We can merge it back later. > > If anyone from the google v8 team has made it this far into this long > reply, we sure would love to get your feedback on possible big-endian > issues...... > > thanks., > > paul > > > > > On Jul 14, 2010, at 2:07 AM, Nilima Chavan wrote: > > Hi Paul, > > Now I am clear about the target thing. > We were using the mips toolchain which was for Big endian to do the > compilation. And as you have specified Big endian MIPs porting is not yet > supported, we were getting compilation errors. > After I used mips toolchain which was little endian, compilation was > successful. > > We need v8 for our Big endian Targets only. > > Since you know the code better, can you please provides us following > information for porting the same mips code to support Big endian. > 1. Complexity > 2. Efforts > 3. Testing required ( I think we can get this from your web site ) > 4. When you have planned for Big endian porting ( This is required just for > information ) > > Thanks & Regards, > Nilima > > > On Wed, Jul 14, 2010 at 11:19 AM, Nilima Chavan > <[email protected]>wrote: > >> Hi Paul, >> >> Thanks for your detailed response. >> But now I am bit confused about what do you mean by target. >> >> Here is my build procedure: >> I am building on Linux x86 machine with following environment variables >> set: >> export CCPATH=/opt/kenati/mips-kenati-linux-uclibc/bin >> export CC=$CCPATH/gcc >> export CXX=$CCPATH/g++ >> export LD=$CCPATH/ld >> export AR=$CCPATH/ar >> export RANLIB=$CCPATH/ranlib >> >> Build command: >> >> scons arch=mips mode=debug library=static sample=shell -j4 >> >> Output: >> libv8.a is getting compiled. >> But giving endianness errors for shell. >> >> So I have question here, I am going to use libv8.a with v8cgi and apache. >> So can I survive currently with just v8 library build. I do not require >> shell at this point of time. >> >> Thanks & Regards, >> Nilima >> >> >> On Tue, Jul 13, 2010 at 11:32 PM, paul lind <[email protected]> wrote: >> >>> Hi Nilima - >>> >>> I'll try to answer your questions: >>> >>> 1. Alexandre is correct, you must make sure you are using the >>> 'integration' branch (it is the default). >>> >>> 2. Per your command, you built libv8 for arch=mips, but you are trying >>> to build your shell for the simulator (simulator=mips). You cannot mix >>> the two. The simulator for local testing on your x86 development >>> platform, but if you want to build the shell for your target, you must >>> use a line like: >>> >>> scons arch=mips mode=debug library=static sample=shell -j4 >>> >>> (note that I left out regexp=interpreted. That is no longer needed, >>> since we now have the native regular expression compiler working. I >>> have updated the wiki page >>> http://wiki.github.com/paul99/v8mips/building-v8mips) >>> >>> 3. I see from your build log that it appears that your target is beg- >>> endian. That is unfortunately, as v8mips does not currently support >>> big-endian targets. That will get done eventually, but it is low on >>> our priority list. Is there any way your target can be run in little- >>> endian mode? (the mips cores are configurable, some target boards are >>> configurable, some are fixed). >>> >>> I know for a fact there are places in the generated code where we make >>> little-endian assumptions (we have commented these), but I suspect >>> that there will be more issues, as to my knowledge the whole of v8 has >>> never been run on a big-endian target. >>> >>> 4. I also see that you are using uclibc. I do not know if that will >>> work, as it has not been tried. We have been using a mips Linux distro >>> with full glibc (both Debian and Timesys). We are now porting to >>> Android, which uses bionic. >>> >>> 5. The issue you fixed with mcontext.gpregs is just used when >>> profiling. I have only tried that on Linux 2.6. It is possibly you >>> just have a problem with kernel-headers, or it may be that your kernel >>> does not support. In any cause, it will not impact regular operation >>> of v8, just the profiling option (--prof option to shell). >>> >>> I hope this helps, >>> >>> paul >>> >>> On Jul 13, 2:57 am, Alexandre Rames <[email protected]> wrote: >>> > Hi, >>> > >>> > It has been some time I haven't build it. >>> > There is something weird with the endianness here. The MIPS build >>> should use >>> > the -EL option to build for little endian. >>> > >>> > Did you follow the instructions >>> > here<http://wiki.github.com/paul99/v8mips/building-v8mips> >>> > ? >>> > Also you should try to build the "integration" branch. This branch >>> should >>> > always compile and work (kind of dev branch). >>> > >>> > Alexandre >>> > >>> > On Mon, Jul 12, 2010 at 3:26 PM, Nilima Chavan < >>> [email protected]>wrote: >>> > >>> > >>> > >>> > > Finally i was able to build the libv8.a successfully with following >>> > > command line: >>> > > scons arch=mips mode=debug regexp=interpreted library=static >>> > >>> > > Have done following changes in platform-linux.cc >>> > > #elif V8_HOST_ARCH_MIPS >>> > > sample.pc = reinterpret_cast<Address>(mcontext.gpregs[35]); >>> > > sample.sp = reinterpret_cast<Address>(mcontext.gpregs[29]); >>> > > sample.fp = reinterpret_cast<Address>(mcontext.gpregs[30]); >>> > > #endif >>> > >>> > > But still I am not able to build shell with following command: >>> > > scons mode=debug simulator=mips regexp=interpreted sample=shell -j4 >>> > >>> > > It is giving following kind of error: >>> > > /opt/kenati/lib/gcc/mips-kenati-linux-uclibc/3.4.3/../../../../mips- >>> > > kenati-linux-uclibc/bin/ld: /opt/kenati/lib/gcc/mips-kenati-linux- >>> > > uclibc/3.4.3/../../../../mips-kenati-linux-uclibc/lib/crt1.o: >>> compiled >>> > > for a big endian system and target is little endian >>> > > /opt/kenati/lib/gcc/mips-kenati-linux-uclibc/3.4.3/../../../../mips- >>> > > kenati-linux-uclibc/bin/ld: /opt/kenati/lib/gcc/mips-kenati-linux- >>> > > uclibc/3.4.3/../../../../mips-kenati-linux-uclibc/lib/crt1.o: >>> > > endianness incompatible with that of the selected emulation >>> > > /opt/kenati/lib/gcc/mips-kenati-linux-uclibc/3.4.3/../../../../mips- >>> > > kenati-linux-uclibc/bin/ld: failed to merge target specific data of >>> > > file /opt/kenati/lib/gcc/mips-kenati-linux-uclibc/3.4.3/../../../../ >>> > > mips-kenati-linux-uclibc/lib/crt1.o >>> > >>> > > Please let me know if I need to any kind of environment settings for >>> > > this too. >>> > >>> > > Thanks & Regards, >>> > > Nilima >>> > >>> > > On Jul 12, 5:57 pm, Nilima Chavan <[email protected]> wrote: >>> > > > Thanks for the info Alexandre. >>> > >>> > > > I have downloaded v8 sources from github. >>> > > > But when I tried to build those sources for mips platform its >>> giving >>> > > > compilation error. >>> > > > I am building the source code on UBuntu 8 (Linux 2.6.24-16-generic >>> #1 >>> > > > SMP Thu Apr 10 13:23:42 UTC 2008 i686 GNU/Linux). >>> > >>> > > > Environment variables are as below: >>> > > > AR=/opt/kenati/bin/mips_sfp-uclibc-ar >>> > > > LD=/opt/kenati/bin/mips_sfp-uclibc-ld >>> > > > CXX=/opt/kenati/bin/mips_sfp-uclibc-g++ >>> > > > CC=/opt/kenati/bin/mips_sfp-uclibc-gcc >>> > > > RANLIB=/opt/kenati/bin/mips_sfp-uclibc-ranlib >>> > >>> > > > Compilation Error: >>> > > > opt/kenati/bin/mips_sfp-uclibc-g++ -o obj/release/platform-linux.o >>> -c - >>> > > > Wall -Werror -W -Wno-unused-parameter -Wnon-virtual-dtor -pedantic >>> -EL >>> > > > -mips32r2 -Wa,-mips32r2 -fno-inline -mhard-float -O3 -fomit-frame- >>> > > > pointer -fdata-sections -ffunction-sections -ansi >>> -fno-strict-aliasing >>> > > > -fno-rtti -fno-exceptions -Wall -Werror -W -Wno-unused-parameter >>> -Wnon- >>> > > > virtual-dtor -pedantic -EL -mips32r2 -Wa,-mips32r2 -fno-inline >>> -mhard- >>> > > > float -O3 -fomit-frame-pointer -fdata-sections -ffunction-sections >>> - >>> > > > ansi -fno-strict-aliasing -DV8_TARGET_ARCH_MIPS - >>> > > > DENABLE_DEBUGGER_SUPPORT -DENABLE_LOGGING_AND_PROFILING -Isrc src/ >>> > > > platform-linux.cc >>> > >>> > > > src/platform-linux.cc: In function `void >>> > > > v8::internal::ProfilerSignalHandler(int, siginfo_t*, void*)': >>> > > > src/platform-linux.cc:828: error: 'struct mcontext_t' has no member >>> > > > named 'pc' >>> > > > src/platform-linux.cc:829: error: 'struct mcontext_t' has no member >>> > > > named 'gregs' >>> > > > src/platform-linux.cc:830: error: 'struct mcontext_t' has no member >>> > > > named 'gregs' >>> > > > scons: *** [obj/release/platform-linux.o] Error 1 >>> > > > scons: building terminated because of errors. >>> > >>> > > > Can anybody from your side help me on this? >>> > > > Thanks & Regards, >>> > > > Nilima >>> > >>> > > > On Jul 9, 6:39 pm, Alexandre Rames <[email protected]> >>> wrote: >>> > >>> > > > > Hi, >>> > >>> > > > > You can find the v8 MIPS repository with the latest code on >>> github: >>> > >http://github.com/paul99/v8mips >>> > >>> > > > > <http://github.com/paul99/v8mips>Alexandre >>> > >>> > > > > On Fri, Jul 9, 2010 at 1:02 PM, Nilima Chavan < >>> [email protected] >>> > > >wrote: >>> > >>> > > > > > So we can not use v8 JavaScript engine on MIPs platform? >>> > > > > > Does anybody working on this. Since I see mips directory under >>> > > > > > Sources. Even SConstruct provides a way to select the >>> architecture as >>> > > > > > "mips". >>> > > > > > If yes can you let us know when the work is expected to get >>> over. >>> > >>> > > > > > Thanks & Regards, >>> > > > > > Nilima >>> > >>> > > > > > On Jul 9, 1:41 am, Erik Corry <[email protected]> wrote: >>> > > > > > > The MIPS port isn't done. It doesn't work. >>> > >>> > > > > > > Den 8. jul. 2010 14.12 skrev Nilima Chavan < >>> > > [email protected]>: >>> > >>> > > > > > > > When I am trying to build v8 for MIP platform, I am getting >>> > > following >>> > > > > > > > errors: >>> > > > > > > > $ scons simulator=mips >>> > >>> > > > > > > > In file included from src/virtual-frame.h:41, >>> > > > > > > > from src/virtual-frame-inl.h:31, >>> > > > > > > > from src/codegen.cc:41: >>> > > > > > > > src/mips/virtual-frame-mips.h:74: error: 'NumberInfo' has >>> not >>> > > been >>> > > > > > > > declared >>> > > > > > > > src/mips/virtual-frame-mips.h:366: error: 'NumberInfo' has >>> not >>> > > been >>> > > > > > > > declared >>> > > > > > > > src/mips/virtual-frame-mips.h:390: error: 'NumberInfo' has >>> not >>> > > been >>> > > > > > > > declared >>> > > > > > > > src/mips/virtual-frame-mips.h:391: error: 'NumberInfo' has >>> not >>> > > been >>> > > > > > > > declared >>> > > > > > > > src/mips/virtual-frame-mips.h:74: error: 'NumberInfo' has >>> not >>> > > been >>> > > > > > > > declared >>> > > > > > > > src/mips/virtual-frame-mips.h:366: error: 'NumberInfo' has >>> not >>> > > been >>> > > > > > > > declared >>> > > > > > > > In file included from src/virtual-frame-inl.h:36, >>> > > > > > > > from src/codegen.cc:41: >>> > > > > > > > src/virtual-frame-light-inl.h: In constructor >>> > > > > > > > 'v8::internal::VirtualFrame::VirtualFrame()': >>> > > > > > > > src/virtual-frame-light-inl.h:41: error: class >>> > > > > > > > 'v8::internal::VirtualFrame' does not have any field named >>> > > > > > > > 'element_count_' >>> > > > > > > > src/virtual-frame-light-inl.h:42: error: class >>> > > > > > > > 'v8::internal::VirtualFrame' does not have any field named >>> > > > > > > > 'top_of_stack_state_' >>> > > > > > > > src/virtual-frame-light-inl.h:42: error: 'NO_TOS_REGISTERS' >>> was >>> > > not >>> > > > > > > > declared in this scope >>> > > > > > > > src/virtual-frame-light-inl.h:43: error: class >>> > > > > > > > 'v8::internal::VirtualFrame' does not have any field named >>> > > > > > > > 'register_allocation_map_' >>> > > > > > > > src/virtual-frame-light-inl.h:43: error: no matching >>> function for >>> > > call >>> > > > > > > > to >>> > > 'v8::internal::ZoneList<v8::internal::FrameElement>::ZoneList()' >>> > > > > > > > src/zone.h:170: note: candidates are: >>> > > > > > > > v8::internal::ZoneList<T>::ZoneList(int) [with T = >>> > > > > > > > v8::internal::FrameElement] >>> > > > > > > > src/zone.h:166: note: >>> > >>> > > v8::internal::ZoneList<v8::internal::FrameElement>::ZoneList(const >>> > > > > > > > v8::internal::ZoneList<v8::internal::FrameElement>&) >>> > > > > > > > src/virtual-frame-light-inl.h: In constructor >>> > >>> > > >>> 'v8::internal::VirtualFrame::VirtualFrame(v8::internal::VirtualFrame*)': >>> > > > > > > > src/virtual-frame-light-inl.h:48: error: class >>> > > > > > > > 'v8::internal::VirtualFrame' does not have any field named >>> > > > > > > > 'element_count_' >>> > > > > > > > src/virtual-frame-light-inl.h:49: error: class >>> > > > > > > > 'v8::internal::VirtualFrame' does not have any field named >>> > > > > > > > 'top_of_stack_state_' >>> > > > > > > > src/virtual-frame-light-inl.h:49: error: 'class >>> > > > > > > > v8::internal::VirtualFrame' has no member named >>> > > 'top_of_stack_state_' >>> > > > > > > > src/virtual-frame-light-inl.h:50: error: class >>> > > > > > > > 'v8::internal::VirtualFrame' does not have any field named >>> > > > > > > > 'register_allocation_map_' >>> > > > > > > > src/virtual-frame-light-inl.h:50: error: 'class >>> > > > > > > > v8::internal::VirtualFrame' has no member named >>> > > > > > > > 'register_allocation_map_' >>> > > > > > > > src/virtual-frame-light-inl.h:50: error: no matching >>> function for >>> > > call >>> > > > > > > > to >>> > > 'v8::internal::ZoneList<v8::internal::FrameElement>::ZoneList()' >>> > > > > > > > src/zone.h:170: note: candidates are: >>> > > > > > > > v8::internal::ZoneList<T>::ZoneList(int) [with T = >>> > > > > > > > v8::internal::FrameElement] >>> > > > > > > > src/zone.h:166: note: >>> > >>> > > v8::internal::ZoneList<v8::internal::FrameElement>::ZoneList(const >>> > > > > > > > v8::internal::ZoneList<v8::internal::FrameElement>&) >>> > > > > > > > src/virtual-frame-light-inl.h: In member function 'bool >>> > > > > > > > >>> v8::internal::VirtualFrame::Equals(v8::internal::VirtualFrame*)': >>> > > > > > > > src/virtual-frame-light-inl.h:55: error: >>> 'top_of_stack_state_' >>> > > was not >>> > > > > > > > declared in this scope >>> > > > > > > > src/virtual-frame-light-inl.h:55: error: 'class >>> > > > > > > > v8::internal::VirtualFrame' has no member named >>> > > 'top_of_stack_state_' >>> > > > > > > > src/virtual-frame-light-inl.h:56: error: >>> > > 'register_allocation_map_' >>> > > > > > > > was not declared in this scope >>> > > > > > > > src/virtual-frame-light-inl.h:56: error: 'class >>> > > > > > > > v8::internal::VirtualFrame' has no member named >>> > > > > > > > 'register_allocation_map_' >>> > > > > > > > src/codegen.cc: At global scope: >>> > > > > > > > src/codegen.cc:325: error: 'GenerateCallFunction' is not a >>> member >>> > > of >>> > > > > > > > 'v8::internal::CodeGenerator' >>> > > > > > > > src/codegen.cc:325: error: 'GenerateRegExpConstructResult' >>> is not >>> > > a >>> > > > > > > > member of 'v8::internal::CodeGenerator' >>> > > > > > > > src/codegen.cc:325: error: 'GenerateGetFromCache' is not a >>> member >>> > > of >>> > > > > > > > 'v8::internal::CodeGenerator' >>> > > > > > > > src/codegen.cc:325: error: 'GenerateSwapElements' is not a >>> member >>> > > of >>> > > > > > > > 'v8::internal::CodeGenerator' >>> > > > > > > > cc1plus: warnings being treated as errors >>> > > > > > > > src/mips/virtual-frame-mips.h:486: warning: inline function >>> 'void >>> > > > > > > > v8::internal::VirtualFrame::PushFrameSlotAt(int)' used but >>> never >>> > > > > > > > defined... >>> > >>> > read more » >>> >>> -- >>> v8-users mailing list >>> [email protected] >>> http://groups.google.com/group/v8-users >>> >> >> > > -- > v8-users mailing list > [email protected] > http://groups.google.com/group/v8-users > > > -- v8-users mailing list [email protected] http://groups.google.com/group/v8-users
