Hi all,
I would like to suggest that we should get a more precisely defined focus on what our effort with Self is heading to.
I would like to publicly ask the following question:
What is our vision on Self?
And:
Can we do it together?
Smalltalk started off with very similar goals than Self. It had the reputation of a very powerful but authistic platform. In Smalltalk, very litte have been done over the time to relieve this major disadvantage, while its advantages have been constantly adpoted into other systems like Java, C++ or Visual Basic. The result is that as the good ideas of Smalltalk got absorbed, and it did hardly evolve any further since 1980, it became virtually obsolete, IMHO.
So, let's learn something from the past, and let's not make the same mistakes with Self again.
We have to work more closely together. Let's not reinvent the wheel over and over again. We have currently nearly ten different implementation projects on Self, some of them are already running for more than five years, and we still do not have any tangible result besides the work of the Self group at Sunlabs.
Let's get more focus, folks. Of course, everybody of us has a strong ego and wants to be the first one who rolls out the ultimate Self solution. What do we gain from that? If we are so good that we dare to implement Self on our own, would we not be much more successful if we join and work together?
Gordon.
I would like to suggest that we should get a more precisely defined focus on what our effort with Self is heading to.
I would like to publicly ask the following question:
What is our vision on Self?
And:
Can we do it together?
I totally agree with you. I did get very surprised when I knew you was porting Self to Linux ALONE !!!
What a job ! :-O
I don't feel capable to understand the total porting effort done at this time and join you, as I don't know sufficient about Self bytecodes, architecture ... and so on, to be useful in a project like this.
What would we do ? Perhaps we could start doing questions like Gordon proposed. What is Self for ? What's his future ?
In my opinion, a minoritary language like Self should be developed in a platform like Java VM. I am not a Java fan, but it provides a virtual machine in a variety of platforms, and also a "standard" graphical environment. This would allow to get Self expansioned, I think. Maybe, this is a bad idea because it would run too slowly, and would become unusable (UI is now pretty slow, even in a UltraSparc).
Ok, I don't know.
But one thing I am sure of is that the joining of efforts and defining a few objectives are good ideas.
Salud !
jose
José Baltasar García Perez-Schofield wrote:
In my opinion, a minoritary language like Self should be developed
in a platform like Java VM. I am not a Java fan, but it provides a virtual machine in a variety of platforms, and also a "standard" graphical environment. This would allow to get Self expansioned, I think.
Have you seen this effort:
http://www.ConsultAr.com/JSelf/
I don't know how it is coming along (last status update with in March), but it seems to be exactly what you want.
Maybe, this is a bad idea because it would run too slowly, and
would become unusable (UI is now pretty slow, even in a UltraSparc).
I don't find the Self UI slow, but that is probably because I compare it with Morphic in Squeak ;-)
Between Java in Self (the JED thing) or Self in Java, I feel that the first option is much more interesting. The results of PocketJava (written in PocketSmalltalk) seem to confirm this.
-- Jecel
Hi Jose, hi all,
maybe it is a good idea to start off with some kind of "Self VM Documentation Project" for explaining to people who are new to the thing what Self currently is and what we already have.
I think the Self VM is a brilliant example of how to do C++ programming, and I have learned a lot by just reading the code. (Unfortunately, I have not had a occasion of working with the Self code in Self, but all Sunlabs members and Jecel certainly have a lot of experience with it).
And there are some newbees from here to then who say they would like to help but they do not know how it works.
What do you think about a "Self VM Documentation Project"?
Gordon.
Hi Gordon, and all 'Selfies' !
maybe it is a good idea to start off with some kind of "Self VM Documentation Project" for explaining to people who are new to the thing what Self currently is and what we already have.
Documentation is always a good idea; first of all it is useful to new people in order to learn the Self characteristics.
I agree that it could be a great idea.
I think the Self VM is a brilliant example of how to do C++ programming, and I have learned a lot by just reading the code. (Unfortunately, I have not had a occasion of working with the Self code in Self, but all Sunlabs members and Jecel certainly have a lot of experience with it).
I would like to see that code ,if it is not protected. Can I dowload it from a ftp server in sun ?
And there are some newbees from here to then who say they would like to help but they do not know how it works.
Well -- it is normal. Where you can learn sufficient to help ?
Documentation is always good ...
Salud !
jose
Documentation is always a good idea; first of all it is useful to new people in order to learn the Self characteristics.
What's about some high-level diagram-style documentation? Let's say some UML diagrams which explain different subsystems, important classes and some of the usual compiling and interpreting use cases using sequence and/or collaboration diagrams?
bye -- Stefan // I can program the universe Matthias Aust // unless the power fails...
On Thu, 18 Nov 1999, [ISO-8859-1] Jos� Baltasar Garc�a Perez-Schofield wrote:
I would like to see that code ,if it is not protected. Can I dowload it from a ftp server in sun ?
The Self source code is distributed under a BSD-style license. You can download it under
The stuff I did last January is available at
and contains the Self 4.0 source code.
Gordon.
On Thu, 18 Nov 1999, [ISO-8859-1] Jos� Baltasar Garc�a Perez-Schofield wrote:
In my opinion, a minoritary language like Self should be developed in a platform like Java VM. I am not a Java fan, but it provides a virtual machine in a variety of platforms, and also a "standard" graphical environment. This would allow to get Self expansioned, I think. Maybe, this is a bad idea because it would run too slowly, and would become unusable (UI is now pretty slow, even in a UltraSparc).
BTW, we once conducted a poll about what platform is the most important to have Self running on. I can't recall the results right now, I think Windows and Linux have been rated most important, and Java was third place. (Please correct me if I'm wrong).
gordon cichon gordo-@cichon.de wrote: original article:http://www.egroups.com/group/self-interest/?start=435
On Thu, 18 Nov 1999, [ISO-8859-1] José Baltasar García
Perez-Schofield wrote:
In my opinion, a minoritary language like Self should be developed in a platform like Java VM. I am not a Java fan, but it provides a
virtual
machine in a variety of platforms, and also a "standard" graphical environment. This would allow to get Self expansioned, I think. Maybe, this is a bad idea because it would run too slowly, and would become unusable (UI is now pretty slow, even in a UltraSparc).
BTW, we once conducted a poll about what platform is the most
important
to have Self running on. I can't recall the results right now, I think Windows and Linux have been rated most important, and Java was third place. (Please correct me if I'm wrong).
Has anyone suggested anything similar to the Slim Binaries used in Oberon? These are, essentially, an intermediate parse tree, which can be passed between platforms until actually used, at which point a code generator builds the actual application in native code (much like the JIT, but without the bytecode layer; it would cache this generated code for future use). This has a number of advantages:
1) The parse tree is usually more compact than the bytecode equivalent. 2) It is language independent (sort of). 3) It allows greater optimization, as all of the high-level structure is accessible to the code generator. 4) All validation can be performed during the initial compilation, making the Just-In-Time part faster. 5) It would still leave the possibility of a JVM implementation; in fact, it would be considerably easier, as much of the work of compiling is aleady done. 6) It would make rewriting the entire Self environment in Self a practical option, provided there was an existing code generator on the initial development platform.
OTOH, SB itself is not an 'open' technology, so we would probably have to create our own equivalent (its copyrighted, but I don't think it is patented, I'd have to check). Also, the claim that it is language independent is rather questionable, at least in the existing system; like the JVM, it is definitely targetted towards imperative/OO hybrid languages, AFAICT.
Any comments?
At 08:26 18.11.99 -0800, Jay Osako wrote:
Has anyone suggested anything similar to the Slim Binaries used in Oberon? These are, essentially, an intermediate parse tree
Self byte codes are actually a serialized parse tree format and so nearly identical to Oberon's SBs. Actually the original Self system has no interpreter but only two compilers, a slow, optimizing one and a fast one which is used in place of an interpreter.
AFAIK, Oberon's SBs also contain type informations which can be used to check for interface conformance (similar to Java bytecode) and of cource need more special caches for all kinds of variable access and other Oberon-specific stuff.
- It is language independent (sort of).
As long as the language looks like an Algol-like language, aka Pascal, Modula, Oberon, Basic (even C to some extend), etc..
bye
-- Stefan // I can program the universe Matthias Aust // unless the power fails...
Well, simply regard bytecodes as a compressed representation of a syntax tree, and there you have it.
Nevertheless, I think you made a valid point in the sense that for experimenting with the language features it would be more appropriate to have a say "expanded" representation which can be changed more handily.
In some sense, I think if we had a well done SIC written in Self and operating on an abstract syntax tree, and this Compiler would compile itself, it should end up representing this thing as bytecodes internally. (David, how do you like this idea? Jecel, how do you?)
Gordon.
PS: BTW, what does "OTOH" and "AFAICT" mean?
On Thu, 18 Nov 1999, Jay Osako wrote:
gordon cichon gordo-@cichon.de wrote: original article:http://www.egroups.com/group/self-interest/?start=435
On Thu, 18 Nov 1999, [ISO-8859-1] Jos� Baltasar Garc�a
Perez-Schofield wrote:
In my opinion, a minoritary language like Self should be developed in a platform like Java VM. I am not a Java fan, but it provides a
virtual
machine in a variety of platforms, and also a "standard" graphical environment. This would allow to get Self expansioned, I think. Maybe, this is a bad idea because it would run too slowly, and would become unusable (UI is now pretty slow, even in a UltraSparc).
BTW, we once conducted a poll about what platform is the most
important
to have Self running on. I can't recall the results right now, I think Windows and Linux have been rated most important, and Java was third place. (Please correct me if I'm wrong).
Has anyone suggested anything similar to the Slim Binaries used in Oberon? These are, essentially, an intermediate parse tree, which can be passed between platforms until actually used, at which point a code generator builds the actual application in native code (much like the JIT, but without the bytecode layer; it would cache this generated code for future use). This has a number of advantages:
- The parse tree is usually more compact than the bytecode equivalent.
- It is language independent (sort of).
- It allows greater optimization, as all of the high-level structure
is accessible to the code generator. 4) All validation can be performed during the initial compilation, making the Just-In-Time part faster. 5) It would still leave the possibility of a JVM implementation; in fact, it would be considerably easier, as much of the work of compiling is aleady done. 6) It would make rewriting the entire Self environment in Self a practical option, provided there was an existing code generator on the initial development platform.
OTOH, SB itself is not an 'open' technology, so we would probably have to create our own equivalent (its copyrighted, but I don't think it is patented, I'd have to check). Also, the claim that it is language independent is rather questionable, at least in the existing system; like the JVM, it is definitely targetted towards imperative/OO hybrid languages, AFAICT.
Any comments?
Great idea, Gordon!
- Dave
At 9:13 AM +0100 11/19/99, Gordon Cichon wrote:
Well, simply regard bytecodes as a compressed representation of a syntax tree, and there you have it.
Nevertheless, I think you made a valid point in the sense that for experimenting with the language features it would be more appropriate to have a say "expanded" representation which can be changed more handily.
In some sense, I think if we had a well done SIC written in Self and operating on an abstract syntax tree, and this Compiler would compile itself, it should end up representing this thing as bytecodes internally. (David, how do you like this idea? Jecel, how do you?)
Gordon.
PS: BTW, what does "OTOH" and "AFAICT" mean?
On Thu, 18 Nov 1999, Jay Osako wrote:
gordon cichon gordo-@cichon.de wrote: original article:http://www.egroups.com/group/self-interest/?start=435
On Thu, 18 Nov 1999, [ISO-8859-1] JosÈ Baltasar GarcÌa
Perez-Schofield wrote:
In my opinion, a minoritary language like Self should be developed in a platform like Java VM. I am not a Java fan, but it provides a
virtual
machine in a variety of platforms, and also a "standard" graphical environment. This would allow to get Self expansioned, I think. Maybe, this is a bad idea because it would run too slowly, and would become unusable (UI is now pretty slow, even in a UltraSparc).
BTW, we once conducted a poll about what platform is the most
important
to have Self running on. I can't recall the results right now, I think Windows and Linux have been rated most important, and Java was third place. (Please correct me if I'm wrong).
Has anyone suggested anything similar to the Slim Binaries used in Oberon? These are, essentially, an intermediate parse tree, which can be passed between platforms until actually used, at which point a code generator builds the actual application in native code (much like the JIT, but without the bytecode layer; it would cache this generated code for future use). This has a number of advantages:
- The parse tree is usually more compact than the bytecode equivalent.
- It is language independent (sort of).
- It allows greater optimization, as all of the high-level structure
is accessible to the code generator. 4) All validation can be performed during the initial compilation, making the Just-In-Time part faster. 5) It would still leave the possibility of a JVM implementation; in fact, it would be considerably easier, as much of the work of compiling is aleady done. 6) It would make rewriting the entire Self environment in Self a practical option, provided there was an existing code generator on the initial development platform.
OTOH, SB itself is not an 'open' technology, so we would probably have to create our own equivalent (its copyrighted, but I don't think it is patented, I'd have to check). Also, the claim that it is language independent is rather questionable, at least in the existing system; like the JVM, it is definitely targetted towards imperative/OO hybrid languages, AFAICT.
Any comments?
Need a cure for the used car blues? iMotors pre-owned cars are: priced below Blue Book; fully tested & certified; & carry a 7 day/700 mile money back guarantee. Look no further iMotors.com is here! http://clickhere.egroups.com/click/1535
-- Easily schedule meetings and events using the group calendar! -- http://www.egroups.com/cal?listname
David Ungar Sun Microsystems Laboratories (650) 336-2618
David Ungar wrote:
In the site http://www.squeak.org/oopsla99_vmworkshop/ there is a nice paper from Mario, Ole and Dave entitled Towards a universal implementation substrate for object-oriented languages. It is put forward clearly " even though the large number of Java systems currently in use amply justifies the construction of a high-performance Java VM, Java programmers today must make do with relatively underpowered virtual machines. " They concluded " We have described implementations of Smalltalk and Java which have respectable performance and yet were relatively easy to construct in Self compared to traditional virtual machine implementations in C and/ or C++. ....However, the connections between Java and Self are much more tenuous, and yet the Java implementation was still easier to build at least an order or magnitude compared to conventional approaches. We encourage language designers and experimenters to use the Self system in this way for their experiments."
Earlier in the paper they wrote "It would be interesting to broaden our experience by implementing other object-oriented languages such as Beta and Eiffel in this manner. This will undoubtedly expose further deficiencies in the Self VM....Even so, we feel confident that many of the constructs in other languages will map to Self ina clean and natural way and that overall, implementing a language on top of the Self system will be significantly easier than implementing it directly from scratch."
In my opinion, a minoritary language like Self should be developed in a platform like Java VM. I am not a Java fan, but it provides a
virtual
machine in a variety of platforms, and also a "standard" graphical environment. This would allow to get Self expansioned, I think. Maybe, this is a bad idea because it would run too slowly, and would become unusable (UI is now pretty slow, even in a UltraSparc).
BTW, we once conducted a poll about what platform is the most
important
to have Self running on. I can't recall the results right now, I think Windows and Linux have been rated most important, and Java was third place. (Please correct me if I'm wrong).
Obviously the reasoning above shows clearly the opposite direction. In a workshop from ECOOP'97 in Finland about prototype-based languages Luca Cardelli argued firmly about the superiority of the prototype based languages and the difficulty of their taking off. So I feel the hurdle consists in persusading the computer scientists to direct their efforts towards this goal. When I started implementing my Knowledge based systems to design and plan sustainable cities in 1988, I did not make a compromise with Pascal and C. I simply rejected them to discover that the object oriented paradigm was created by Krysten Nygaard before the construction of the first computer!!!! I studied each object oriented language such as C++, Eiffel, Sather, Beta and any interesting object oriented methodoloy and also techniques from artificial intelligence such as Blackboard and multi agents till I found Self.
So I think you should be courageous and choose the best, not to try to limit the best to what is available or successful today.
And you should also remember that computer scientists do not have a broader audience, because very few languages and methodologies do mimic the sophisticated human cognitive processes. Until now I believe Self is one of the best and yet a lot of must still be added to accompany creative processes.
Best wishes
Albertina
Has anyone suggested anything similar to the Slim Binaries used in Oberon? These are, essentially, an intermediate parse tree, which can be passed between platforms until actually used, at which point a code generator builds the actual application in native code (much like the JIT, but without the bytecode layer; it would cache this generated code for future use). This has a number of advantages:
- The parse tree is usually more compact than the bytecode equivalent.
- It is language independent (sort of).
- It allows greater optimization, as all of the high-level structure
is accessible to the code generator. 4) All validation can be performed during the initial compilation, making the Just-In-Time part faster. 5) It would still leave the possibility of a JVM implementation; in fact, it would be considerably easier, as much of the work of compiling is aleady done. 6) It would make rewriting the entire Self environment in Self a practical option, provided there was an existing code generator on the initial development platform.
OTOH, SB itself is not an 'open' technology, so we would probably have to create our own equivalent (its copyrighted, but I don't think it is patented, I'd have to check). Also, the claim that it is language independent is rather questionable, at least in the existing system; like the JVM, it is definitely targetted towards imperative/OO hybrid languages, AFAICT.
Any comments?
Need a cure for the used car blues? iMotors pre-owned cars are: priced below Blue Book; fully tested & certified; & carry a 7 day/700 mile money back guarantee. Look no further iMotors.com is here! http://clickhere.egroups.com/click/1535
-- Easily schedule meetings and events using the group calendar! -- http://www.egroups.com/cal?listname
David Ungar Sun Microsystems Laboratories (650) 336-2618
Need a cure for the used car blues? iMotors pre-owned cars are: priced below Blue Book; fully tested & certified; & carry a 7 day/700 mile money back guarantee. Look no further iMotors.com is here! http://clickhere.egroups.com/click/1535
eGroups.com Home: http://www.egroups.com/group/self-interest/ http://www.egroups.com - Simplifying group communications
-- .----------------------------------------------------------. | Albertina Lourenci | | PhD in Architecture and Urbanism | | post-doctorate researcher | | Laboratory of Integrated Systems University of Sao Paulo | | Avenida Professor Luciano Gualberto, 158 Travessa 3 | | CEP: 05508-900 | | Sao Paulo Sao Paulo State Brazil | | Voice: +55 011 818 5254 | | Fax: +55 11 211 4574 | .----------------------------------------------------------.
Jay Osako wrote:
- The parse tree is usually more compact than the bytecode equivalent.
I really doubt this.
- It is language independent (sort of).
In the Oberon list, there is a guy who wants to translate C into Oberon. Several people pointed out problems, but nobody mentioned *the* killer problem: C has pointer math and Oberon does not (and so neither does Juice, which is the slim binaries you were talking about). For those interested in looking into this:
http://caesar.ics.uci.edu/juice/
- It allows greater optimization, as all of the high-level structure
is accessible to the code generator.
It is true that you won't be doing things like constant folding from a bytecode representation. But these things were probably done by the parser before generating the bytecodes.
On the other hand, at least the first Self compiler would read in the bytecodes and then generate something like a parse tree to do type analysis. In that case it would make sense to just save the parse tree directly.
BTW, the Beta people just love to work with AST (Abstract Syntax Trees) and Ole Madsen included several tools for working with them in Self 4.
- All validation can be performed during the initial compilation,
making the Just-In-Time part faster.
Why can't the exact same validation be made when generating the bytecodes?
- It would still leave the possibility of a JVM implementation; in
fact, it would be considerably easier, as much of the work of compiling is aleady done.
I don't see the difference.
- It would make rewriting the entire Self environment in Self a
practical option, provided there was an existing code generator on the initial development platform.
Once again, it seems to be that bytecodes and Juice style binaries are equal in this regard.
Please note that I am not against using ASTs to represent code. See my 1984 Smalltalk design for an example:
http://www.lsi.usp.br/~jecel/st84.txt
But I have come to the conclusion that bytecodes are equivalent and more compact, so now I prefer them. As long as there are few of them: 8 whole bytecodes is more than I can remember at once ;-)
-- Jecel
Great points, Gordon, and a good reply by jose. I've also a great respect for Gordon's attempt. When I first heard about it, I was thinking "great, there's somebody who doesn't know how difficult this is but simply tries it. Hey, he might be even successful." ;-) Honestly, most people - including me - never thought about doing this because they thought - even thought to believe it - that's way to difficult.
But the main question to answer is
What is our vision on Self?
And we've carefully do distinguish the
* language - that Smalltalk-style, round and square bracket thing * semantics - prototype based, slot accessing, dynamic inheritance * environment - kansas gui, outliners, morphic
because I'm sure different people understand different things when they talk about Self.
Can we do it together?
Hopefully.
In my opinion, a minoritary language like Self should be developed in a platform like Java VM. I am not a Java fan, but it provides a virtual machine in a variety of platforms, and also a "standard" graphical environment.
Again, the question must be: what's the goal. To bring Self-the language to a broader audience, this is a good way. If the goal is, to use Self-the semantics to script existing classes, this a good way. But if you want to use Self-the environment, I'm not sure anymore.
bye -- Stefan Matthias Aust // Bevor wir fallen, fallen wir lieber auf.
And we've carefully do distinguish the
- language - that Smalltalk-style, round and square bracket thing
- semantics - prototype based, slot accessing, dynamic inheritance
- environment - kansas gui, outliners, morphic
because I'm sure different people understand different things when they talk about Self.
Yes, propably.
In fact, Sunlabs Self is a big thing. (Again, I think what makes it different from Mozilla is the license). And there is a large portion of code written in C++ which is less nice than Self but that was the way to get that compiled quickly and to show that's possible to generate efficient assembler code from Self source at all. And there is a lot of things in it that go much beyond a simple Self language implementation. And some of them are of course tight to a special machine architecture or operating system.
As it is a fundamental Smalltalk philosophy, and Jecel pointed it out recently, too, a good OO system should be implemented in itSelf. (what a nice word game again... :-) Sunlabs Self already has a GUI, and it has a parser generator. I think, these things are very helpful for evolving Self, and they are very difficult to develop standalone, and I assume impossible to develop in Self if you don't have Self running already.
So, it may be more difficult to port Sunlab Self than to reimplement your onw Self from scratch, but at least when it comes down to a programming environment, you are going to have a hard time writing Self code with vi.
My proposal for whatever way to diversify Self afterwards, we could use Sunlab Self to bootstrap it.
Gordon.
Does anyone know how to reach Gordon & company in Germany this weekend? There was a question about templates & I was in the car and could not help at the time. I tried calling back later (3:30 in CA), but no one answered the phone number I had. Maybe everyone is asleep?
Anyway, I would like to help if I can. Here are the gcc flags used on the SPARC:
compiling:
gcc -xc++ -msupersparc -Wimplicit -Wreturn-type -Wswitch -Wcomment -Wformat -Wpointer-arith -Wbad-function-cast -Wconversion -Wstrict-prototypes -Woverloade d-virtual -fkeep-inline-functions -DGENERATE_ASSERTIONS -DTARGET_IS_FOR_DEBUGGIN G=1 -DTARGET_IS_PROFILED=0 -DTARGET_IS_OPTIMIZED=0 -DXLIB -DFAST_COMPILER -DSI C_COMPILER -DDYNLINK_SUPPORTED -DDEBUG -DCOMPILER=GCC_COMPILER -DASSEMBLER= -DMA NUFACTURER= -DTARGET_OS_VERSION=SOLARIS_VERSION -DTARGET_OS_FAMILY=UNIX_FAMILY -DHOST_ARCH=SPARC_ARCH -DTARGET_ARCH=SPARC_ARCH -I../../../vm/svr4/generated/ incls -I../../../vm/src/any/asm -I../../../vm/src/any/fast_compiler -I../../../v m/src/any/interpreter -I../../../vm/src/any/lookup -I../../../vm/src/any/memory -I../../../vm/src/any/objects -I../../../vm/src/any/os -I../../../vm/src/any/par ser -I../../../vm/src/any/prims -I../../../vm/src/any/runtime -I../../../vm/src/ any/sic -I../../../vm/src/any/zone -I../../../vm/src/unix/os -I../../../vm/src/u nix/prims -I../../../vm/src/unix/runtime -I../../../vm/src/sparc/asm -I../../../ vm/src/sparc/fast_compiler -I../../../vm/src/sparc/lookup -I../../../vm/src/spar c/memory -I../../../vm/src/sparc/prims -I../../../vm/src/sparc/runtime -I../../. ./vm/src/sparc/sic -I../../../vm/src/sparc/zone -I/usr/openwin/include -I../../. ./objects/glue -g -c ../../../vm/src/any/memory/ageTable.c ; \ "
Linking:
gcc -L/usr/openwin/lib -i -o Self asm.o disasm.o fields.o label.o nameDesc.o pcDesc.o regs.o scopeDesc.o blist.o codeGen.o fcompiler.o fscope.o r egisterState.o registerString.o abstract_interpreter.o interpreter.o stacking_in terpreter.o cacheStub.o complexLookup.o deps.o diDesc.o key.o sendDesc.o simpleL ookup.o slotRef.o target.o ageTable.o enumeration.o generation.o mapTable.o mapV tbls.o oopClosures.o oTable.o rSet.o search.o slotIterator.o slotList.o space.o spaceSize.o stringTable.o universe.o universe.more.o vmStrings.o assignmentMap.o blockMap.o blockOop.o byteVectorMap.o byteVectorOop.o codeLikeSlotsMap.o codeSl otsMap.o fctProxyMap.o fctProxyOop.o floatMap.o floatOop.o foreignOop.o immediat eMap.o map.o mapMap.o mapOop.o markMap.o markOop.o memOop.o mirrorMap.o mirrorOo p.o objVectorMap.o objVectorOop.o oop.o oopsOop.o processMap.o processOop.o prof ilerMap.o profilerOop.o proxyMap.o proxyOop.o slotDesc.o slotType.o slotsMap.o s lotsMapDeps.o slotsOop.o smiMap.o smiOop.o stringMap.o stringOop.o vframeMap.o v frameOop.o errorCodes.o itimer.o monitorWindow.o os.o platformWindow.o sig.o tim er.o branchSet.o byteCodes.o expr.o kinds.o labelSet.o list.o parser.o positionT able.o scanner.o send.o slot.o str.o stringUtil.o dynLink.o glue.o glueCheckSum. o glueDefs.o glueSupport.o miscPrims.o prim.o aCompiler.o allocation.o asyncMall oc.o callgraph.o clist.o conversion.o debug.o debugPrintable.o eventlog.o files. o frame.o framePieces.o frame_format.o frame_iterator.o hprofiler.o init.o inter ruptedCtx.o lprintf.o machineCache.o monitor.o monitorHooks.o monitorPieces.o nl rSupport.o nprofiler.o nprofiler.copygraph.o print.o process.o recompile.o regis terLocator.o runtime.o selfMonitor.o shell.o stack.o table.o uncommonBranch.o ut il.o vframe.o aNode.o basicBlock.o bitVector.o defUse.o inlining.o node.o nodeGe n.o opcode.o preg.o regAlloc.o rscope.o sic.o sicExpr.o sicInline.o sicPrimline. o sicScope.o sicSplit.o slist.o tracing.o addrDesc.o codeTable.o countStub.o fpr ofiler.o ncode.o nmethod.o nmethodScopes.o nmln.o scopeDescRecorder.o trapdoors. o zone.o zoneHeap.o errorCodes_unix.o itimer_unix.o os_unix.o platformWindow_uni x.o sig_unix.o signalBlocker_unix.o timer_unix.o unixPrims.o unixPrims.glue.o xl ibPrims.o interruptedCtx_unix.o machineCache_unix.o monitorHooks_unix.o monitorP ieces_unix.o asm_sparc.o disasm_sparc.o fields_sparc.o opc_sparc.o pinsn_sparc.o regs_sparc.o codeGen_sparc.o fcompiler_sparc.o registerState_sparc.o registerSt ring_sparc.o cacheStub_sparc.o diDesc_sparc.o sendDesc_sparc.o enum_sparc.o sear ch_sparc.o asmPrims_sparc.o memCopyPrims_sparc.o runtime_asm_sparc.o aCompiler_s parc.o conversion_sparc.o framePieces_sparc.o frame_format_sparc.o frame_iterato r_sparc.o frame_sparc.o interruptedCtx_sparc.o registerLocator_sparc.o runtime_s parc.o vframe_sparc.o genHelper_sparc.o node_sparc.o allocZone_sparc.o addrDesc_ sparc.o countStub_sparc.o nmethod_sparc.o trapdoors_sparc.o write.o vmDate.o /li b/libc.a ../../../objects/glue/svr4/xlib_glue.o ../../../objects/glue/svr4/stat_ glue.o ../../../objects/glue/svr4/termcap_glue.o ../../../objects/glue/svr4/tran scendental_glue.o /usr/ucblib/libtermcap.a /usr/ucblib/libucb.a -lm -lXext -ldl -lX11 -lm -lnsl -lsocket -lnsl -lc '
I hope you folks have gotten past this annoying bottleneck.
- Dave
David Ungar Sun Microsystems Laboratories (650) 336-2618
David Ungar wrote:
Maybe everyone is asleep?
At a little past midnight? That's when I normally start to code ;-)
Anyway, I would like to help if I can. Here are the gcc flags used on the SPARC:
I have never tried recompiling the VM yet, but doesn't the Makefile generate these flags automatically?
I hope you folks have gotten past this annoying bottleneck.
Me too! This will probably be a key event in Self history and it would be a shame for a minor problem to spoil it.
-- Check out your group's private Chat room -- http://www.egroups.com/ChatPage?listName=self-interest&m=1
Hmmm.... good idea! These ads aren't all bad after all :-)
There doesn't seem to be anybody there, though I had never tried it with HotJava before (I have eliminated all my other Java capable browsers...) and don't know if it is working.
Once more, the best of luck to you all! -- Jecel
Hi all,
First of all: Many thanks to Thorsten Dittmar for hosting the "Self Hacking Weekend 2000" and inviting me to his great place in Witten.
That's what is done so far: ===========================
1) Added a new 'Platform_linux' description with arch = i386 os = unix os_version = linux compiler = gcc and adapted makefiles
2) Reusing 'unix' os part
3) Cloned the 'ppc' processor specific code from 'src/ppc' to 'src/i386'. These new code will still generate ppc code as far as possible.
4) Compiling There is still sparc specific code in the 'src/unix' tree, which I disabled with '#if 0' temporarily.
In progress: ============
5) Linking I am sticking right now at linking: There is quite a long list of error messages (s. separate posting) Unfortunately, I can't find the dependency rule which links Self in the Makefiles. Is it a build in rule?
To be done: ===========
6) Debugging to the VM prompt with the ppc code generator untouched. This requires also dealing with signal handlers and stacks again. Signals are handled quite differently in Linux than a year ago when I used the Self 4.0 code.
7) Transplanting the i386 assembler from my Self 4.0 to Self 4.1
8) Rewriting the code generator and assembly code stuff to evaluate trivial Self expressions. (Like '1')
9) Complete rewriting the code generator to work with more complex Self expressions. (Like '1 _IntAdd: 1')
10) Adapt stack walking code. This is alse necessary for using blocks in Self.
Gordon.
Hi all,
The Self VM links now :-)
It crashes before main() in a constructor for a global variable. Here's the stack trace:
#0 abort () at ../sysdeps/generic/abort.c:50 #1 0x819486e in SaveNVRet () at ../../../vm/src/i386/runtime/registerLocator_i386.c:64 #2 0x820f44a in __Q29Trapdoors7ElementPv8Location (this=0x84ff698, d=0x8194864, t=R0) at ../../../vm/src/i386/zone/trapdoors_i386.h:21 #3 0x8195ff4 in _GLOBAL_.I.trapdoor_bytes__9Trapdoors () at ../../../vm/src/i386/zone/trapdoors_i386.c:11 #4 0x82059e8 in __do_global_ctors_aux () #5 0x804bc3a in _init ()
Gordon.
PS: Daniel has set up a small cluster to compile the Self VM in parallel with PVM. It takes now only 5 minutes to do a full compile of the VM.
The Self VM links now :-)
Great! Do you still get all those warnings about BoundedListTemplate? I would expect so, since templates in C++ are a little strange.
I had found this comment in vm/templates/link.make
# Rule that links Self is in Dependencies (created by makeFileList). # ${AOUT}: *.o # ${LD} -o $@ *.o ${PATCHED_OBJS} ${LIBS} # # files: *.o
which I assume means the bin/shell/makeFilesLists script...
It crashes before main() in a constructor for a global variable. Here's the stack trace:
#0 abort () at ../sysdeps/generic/abort.c:50 #1 0x819486e in SaveNVRet () at ../../../vm/src/i386/runtime/registerLocator_i386.c:64 #2 0x820f44a in __Q29Trapdoors7ElementPv8Location (this=0x84ff698, d=0x8194864, t=R0) at ../../../vm/src/i386/zone/trapdoors_i386.h:21 #3 0x8195ff4 in _GLOBAL_.I.trapdoor_bytes__9Trapdoors () at ../../../vm/src/i386/zone/trapdoors_i386.c:11 #4 0x82059e8 in __do_global_ctors_aux () #5 0x804bc3a in _init ()
Hmmm... I don't know what these "trapdoors" and "registerLocator" are all about. The Sparc versions of these seem to be empty implementations, so it probably is some PPC specific thing. Of course, it might just make your step 10 (walking the stack) easier.
Note that if you complete all your planned steps and get to the point where you might want to read in a Snapshot file, this is the first "little endian" implementation of Self and you might have a few complications with this.
Good luck! -- Jecel
Hi all,
I am back in Munich now. After linking the VM, I could get rid of the Trapdoor crash by simply taking the sparc code for trapdoors (i.e. no trapdoors). Now, I get to the main() function, and the next thing that needs to be fixed is the signal handling code.
In my system, the signal handler function gets three args: int sig: the signal number a pointer to a siginfo structure, and a void pointer which seems to be initialized to point to a 'struct ucontext' as declared in <asm/ucontext.h>. Has this changed with glibc 2.1?
Gordon.
This is the current linking error list:
Removing locks make[1]: `includeDB' is up to date. cd ../../../objects/glue/linux ; make Removing locks make[2]: `includeDB' is up to date. Compiling vmDate Linking Self label.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here label.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here nameDesc.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here nameDesc.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here pcDesc.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here pcDesc.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here regs.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here scopeDesc.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here scopeDesc.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here blist.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here codeGen.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here codeGen.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here fcompiler.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here fcompiler.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here fscope.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here fscope.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here registerState.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here registerState.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here registerString.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here abstract_interpreter.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here interpreter.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here interpreter.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here stacking_interpreter.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here cacheStub.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here cacheStub.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here complexLookup.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here complexLookup.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here deps.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here diDesc.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here diDesc.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here key.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here key.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here sendDesc.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here sendDesc.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here simpleLookup.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here simpleLookup.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here slotRef.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here slotRef.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here target.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here target.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here ageTable.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here enumeration.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here enumeration.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here generation.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here mapTable.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here mapVtbls.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here mapVtbls.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here oopClosures.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here oTable.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here rSet.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here search.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here slotIterator.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here slotList.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here space.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here space.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here spaceSize.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here stringTable.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here universe.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here universe.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here universe.more.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here universe.more.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here vmStrings.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here assignmentMap.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here blockMap.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here blockMap.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here blockOop.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here blockOop.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here byteVectorMap.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here byteVectorOop.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here byteVectorOop.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here codeLikeSlotsMap.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here codeSlotsMap.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here fctProxyMap.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here fctProxyOop.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here floatMap.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here floatOop.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here foreignOop.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here immediateMap.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here map.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here map.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here mapMap.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here mapOop.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here markMap.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here markOop.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here memOop.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here mirrorMap.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here mirrorOop.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here mirrorOop.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here objVectorMap.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here objVectorOop.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here objVectorOop.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here oop.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here oop.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here oopsOop.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here processMap.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here processMap.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here processOop.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here processOop.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here profilerMap.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here profilerMap.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here profilerOop.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here profilerOop.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here proxyMap.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here proxyOop.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here slotDesc.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here slotsMap.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here slotsMap.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here slotsMapDeps.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here slotsMapDeps.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here slotsOop.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here slotsOop.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here smiMap.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here smiOop.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here stringMap.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here stringOop.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here vframeMap.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here vframeMap.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here vframeOop.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here vframeOop.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here errorCodes.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here itimer.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here itimer.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here monitorWindow.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here monitorWindow.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here os.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here os.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here sig.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here sig.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here branchSet.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here byteCodes.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here expr.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here expr.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here kinds.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here labelSet.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here list.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here parser.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here positionTable.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here scanner.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here send.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here slot.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here str.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here stringUtil.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here dynLink.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here glue.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here glue.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here glueDefs.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here glueSupport.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here miscPrims.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here miscPrims.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here prim.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here prim.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here aCompiler.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here aCompiler.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here allocation.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here callgraph.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here clist.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here conversion.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here conversion.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here debug.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here debug.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here debugPrintable.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here eventlog.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here frame.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here frame.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here framePieces.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here framePieces.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here frame_iterator.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here frame_iterator.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here hprofiler.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here hprofiler.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here init.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here init.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here interruptedCtx.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here interruptedCtx.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here machineCache.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here machineCache.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here monitor.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here monitor.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here monitorHooks.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here monitorHooks.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here monitorPieces.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here monitorPieces.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here nlrSupport.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here nlrSupport.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here nprofiler.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here nprofiler.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here nprofiler.copygraph.o: warning: multiple common of `BoundedListTemplate<call_graph_edge *> type_info node' nprofiler.o: warning: previous common is here nprofiler.copygraph.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here nprofiler.copygraph.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here print.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here print.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here process.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here process.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here recompile.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here recompile.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here registerLocator.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here registerLocator.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here selfMonitor.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here selfMonitor.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here shell.o: warning: multiple common of `BoundedListTemplate<Token *> type_info node' scanner.o: warning: previous common is here shell.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here shell.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here stack.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here stack.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here table.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here uncommonBranch.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here uncommonBranch.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here util.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here vframe.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here vframe.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here inlining.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here inlining.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here node.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here node.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here rscope.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here rscope.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here sic.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here sic.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here sicPrimline.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here sicPrimline.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here sicScope.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here sicScope.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here addrDesc.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here addrDesc.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here codeTable.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here codeTable.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here countStub.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here countStub.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here fprofiler.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here fprofiler.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here ncode.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here ncode.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here nmethod.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here nmethod.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here nmethodScopes.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here nmethodScopes.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here nmln.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here nmln.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here scopeDescRecorder.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here scopeDescRecorder.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here zone.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here zone.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here zoneHeap.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here zoneHeap.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here itimer_unix.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here os_unix.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here os_unix.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here platformWindow_unix.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here sig_unix.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here sig_unix.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here unixPrims.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here unixPrims.glue.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here xlibPrims.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here xlibPrims.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here interruptedCtx_unix.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here interruptedCtx_unix.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here machineCache_unix.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here machineCache_unix.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here monitorHooks_unix.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here monitorHooks_unix.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here monitorPieces_unix.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here monitorPieces_unix.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here asm_i386.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here asm_i386.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here disasm_i386.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here disasm_i386.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here fcompiler_i386.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here fcompiler_i386.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here codeGen_i386.o: warning: multiple common of `BoundedListTemplate<char *> type_info node' nmethod.o: warning: previous common is here codeGen_i386.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here codeGen_i386.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here registerState_i386.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here registerState_i386.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here registerString_i386.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here cacheStub_i386.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here cacheStub_i386.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here sendDesc_i386.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here sendDesc_i386.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here aCompiler_i386.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here aCompiler_i386.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here conversion_i386.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here conversion_i386.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here framePieces_i386.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here framePieces_i386.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here frame_format_i386.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here frame_format_i386.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here frame_iterator_i386.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here frame_iterator_i386.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here frame_i386.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here frame_i386.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here interruptedCtx_i386.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here interruptedCtx_i386.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here registerLocator_i386.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here registerLocator_i386.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here runtime_i386.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here stubs_i386.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here vframe_i386.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here vframe_i386.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here addrDesc_i386.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here addrDesc_i386.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here countStub_i386.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here countStub_i386.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here nmethod_i386.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here nmethod_i386.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here trapdoors_i386.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here trapdoors_i386.o: warning: multiple common of `BoundedListTemplate<Label *> type_info node' asm.o: warning: previous common is here ../../../objects/glue/linux/xlib_glue.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here ../../../objects/glue/linux/stat_glue.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here ../../../objects/glue/linux/termcap_glue.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here ../../../objects/glue/linux/transcendental_glue.o: warning: multiple common of `BoundedListTemplate<preservedVmObj *> type_info node' asm.o: warning: previous common is here sig.o: In function `SignalInterface::handle_Self_signal(SelfSignal)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/os/sig.c:185: the `gets' function is dangerous and should not be used. /usr/i486-linux/bin/ld: warning: cannot find entry symbol start; defaulting to 0804cd10 interpreter.o: In function `interpret': /home/gordon/self/vm/linux/debug/../../../vm/src/any/interpreter/interpreter.c:136: undefined reference to `save1Arg' interpreter.o: In function `interpreter::interpret_method(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/interpreter/interpreter.c:183: undefined reference to `SaveNVAndCall5' interpreter.o: In function `interpreter::parentVF(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/interpreter/interpreter.c:270: undefined reference to `currentFrame' interpreter.o: In function `interpreter::block_scope_and_desc_of_home(frame *&, int &)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/interpreter/interpreter.c:366: undefined reference to `currentFrame' interpreter.o: In function `interpreter::send(int, oopClass *)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/interpreter/interpreter.c:429: undefined reference to `currentFrame' /home/gordon/self/vm/linux/debug/../../../vm/src/any/interpreter/interpreter.c:429: undefined reference to `SaveNVAndCall5' interpreter.o: In function `interpreter::send_prim(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/interpreter/interpreter.c:467: undefined reference to `CallPrimitiveFromInterpreter' /home/gordon/self/vm/linux/debug/../../../vm/src/any/interpreter/interpreter.c:467: undefined reference to `SaveNVAndCall5' interpreter.o: In function `interpreter::lookup_and_send(int, oopClass *, oopClass *)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/interpreter/interpreter.c:577: undefined reference to `SaveNVAndCall5' sendDesc.o: In function `sendDesc::first_sendDesc(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/lookup/sendDesc.c:15: undefined reference to `firstSelfFrameRetPC' sendDesc.o: In function `sendDesc::init(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/lookup/sendDesc.c:456: undefined reference to `firstSelfFrameSendDescEnd' simpleLookup.o: In function `simpleLookup::evaluateResult(oopClass **, int, nmethod *)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/lookup/simpleLookup_inline.h:29: undefined reference to `EnterSelf' rSet.o: In function `rSet::clear(char *, char *)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/memory/rSet.c:198: undefined reference to `OS::set_bytes(char *, char *, int)' space.o: In function `space::write_snapshot(_IO_FILE *)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/memory/space.c:438: undefined reference to `OS::set_access_before_writing_space(void *, void *, void *, void *)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/memory/space.c:453: undefined reference to `OS::reset_access_after_writing_space(void *, void *, void *, void *)' universe.o: In function `universe::write_snapshot(char *, char *, char *, spaceSizes *)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/memory/universe.c:688: undefined reference to `OS::set_sequential_access_before_writing_snapshot(void)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/memory/universe.c:711: undefined reference to `OS::set_normal_access_after_writing_snapshot(void)' universe.o: In function `universe::verify(bool)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/memory/universe.c:859: undefined reference to `malloc_verify' universe.more.o: In function `universe::garbage_collect(oopClass *)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/memory/universe.more.c:174: undefined reference to `OS::random_access(char *, char *)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/memory/universe.more.c:175: undefined reference to `OS::random_access(char *, char *)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/memory/universe.more.c:175: undefined reference to `OS::random_access(char *, char *)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/memory/universe.more.c:175: undefined reference to `OS::random_access(char *, char *)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/memory/universe.more.c:175: undefined reference to `OS::random_access(char *, char *)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/memory/universe.more.c:183: undefined reference to `ProcessInfo::update(void)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/memory/universe.more.c:184: undefined reference to `ProcessInfo::page_faults_IO(void)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/memory/universe.more.c:252: undefined reference to `OS::random_access(char *, char *)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/memory/universe.more.c:271: undefined reference to `ProcessInfo::update(void)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/memory/universe.more.c:272: undefined reference to `ProcessInfo::page_faults_IO(void)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/memory/universe.more.c:291: undefined reference to `OS::dont_need_pages(char *, char *)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/memory/universe.more.c:294: undefined reference to `OS::normal_access(char *, char *)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/memory/universe.more.c:294: undefined reference to `OS::normal_access(char *, char *)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/memory/universe.more.c:294: undefined reference to `OS::normal_access(char *, char *)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/memory/universe.more.c:294: undefined reference to `OS::normal_access(char *, char *)' map.o: In function `time_find_slot(slotDesc *(Map::*)(Map *, stringOopClass *), stringOopClass *, Map *)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/objects/map.c:755: undefined reference to `ProcessInfo::update(void)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/objects/map.c:756: undefined reference to `ProcessInfo::user_time(void)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/objects/map.c:759: undefined reference to `ProcessInfo::update(void)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/objects/map.c:760: undefined reference to `ProcessInfo::user_time(void)' os.o: In function `OS::user_time(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/os/os.c:230: undefined reference to `ProcessInfo::update(void)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/os/os.c:231: undefined reference to `ProcessInfo::user_time(void)' os.o: In function `OS::system_time(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/os/os.c:235: undefined reference to `ProcessInfo::update(void)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/os/os.c:236: undefined reference to `ProcessInfo::system_time(void)' os.o: In function `OS::cpu_time(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/os/os.c:240: undefined reference to `ProcessInfo::update(void)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/os/os.c:242: undefined reference to `ProcessInfo::user_time(void)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/os/os.c:242: undefined reference to `ProcessInfo::system_time(void)' os.o: In function `get_swap_space_prim(oopClass *, void *)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/os/os.c:271: undefined reference to `OS::get_swap_space_info(int &, int &)' prim.o: In function `PrimDesc::canBeConstantFolded(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/prims/prim.h:85: undefined reference to `SendDIMessage_stub' prim.o: In function `PrimDesc::canWalkStack(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/prims/prim.h:87: undefined reference to `SendMessage_stub' prim.o: In function `PrimDesc::verify(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/prims/prim.c:49: undefined reference to `smi_add_prim' /home/gordon/self/vm/linux/debug/../../../vm/src/any/prims/prim.c:49: undefined reference to `smi_and_prim' /home/gordon/self/vm/linux/debug/../../../vm/src/any/prims/prim.c:49: undefined reference to `smi_arithmetic_shift_left_prim' /home/gordon/self/vm/linux/debug/../../../vm/src/any/prims/prim.c:49: undefined reference to `smi_arithmetic_shift_right_prim' /home/gordon/self/vm/linux/debug/../../../vm/src/any/prims/prim.c:49: undefined reference to `smi_complement_prim' /home/gordon/self/vm/linux/debug/../../../vm/src/any/prims/prim.c:49: undefined reference to `smi_logical_shift_left_prim' /home/gordon/self/vm/linux/debug/../../../vm/src/any/prims/prim.c:49: undefined reference to `smi_logical_shift_right_prim' /home/gordon/self/vm/linux/debug/../../../vm/src/any/prims/prim.c:49: undefined reference to `smi_mul_prim' /home/gordon/self/vm/linux/debug/../../../vm/src/any/prims/prim.c:49: undefined reference to `smi_or_prim' /home/gordon/self/vm/linux/debug/../../../vm/src/any/prims/prim.c:49: undefined reference to `smi_sub_prim' /home/gordon/self/vm/linux/debug/../../../vm/src/any/prims/prim.c:49: undefined reference to `smi_xor_prim' allocation.o: In function `ResourceMark::ResourceMark(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/allocation.c:237: undefined reference to `currentFrame' allocation.o: In function `malloc_init(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/allocation.c:319: undefined reference to `set_new_handler' conversion.o: In function `Conversion::doit(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/conversion.c:13: undefined reference to `currentFrame' conversion.o: In function `Conversion::returnToSelf(oopClass *, char *, bool, frame *, int, sendDesc *, bool)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/conversion.c:436: undefined reference to `ContinueNLRAfterReturnTrap' /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/conversion.c:445: undefined reference to `ContinueNLRAfterReturnTrap' frame.o: In function `VMObj::VMObj(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/memory/oTable.h(.text+0xf): undefined reference to `ReturnTrap' /home/gordon/self/vm/linux/debug/../../../vm/src/any/memory/oTable.h(.text+0x22): undefined reference to `PrimCallReturnTrap' frame.o: In function `frame::patch_compiled_self_frame(void (*)(...))': /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/frame.c:230: undefined reference to `firstSelfFrameRetPC' /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/frame.c:235: undefined reference to `ReturnTrap' /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/frame.c:235: undefined reference to `PrimCallReturnTrap' /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/frame.c:237: undefined reference to `firstSelfFrameRetPC' frame.o: In function `frame::trace_patch(void (*)(...))': /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/frame.c:251: undefined reference to `ReturnTrap' /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/frame.c:251: undefined reference to `PrimCallReturnTrap' frame.o: In function `frame::return_addr_for_patching(bool, frame *)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/frame.c:267: undefined reference to `ReturnTrap' /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/frame.c:276: undefined reference to `ReturnTrap' /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/frame.c:276: undefined reference to `PrimCallReturnTrap' frame.o: In function `HandleReturnTrap': /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/frame.c:421: undefined reference to `currentFrame' /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/frame.c:505: undefined reference to `ContinueNLRAfterReturnTrap' frame.o: In function `frame::printVerbose(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/frame.c:567: undefined reference to `frame::printRegs(void)' init.o: In function `VMObj::VMObj(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/memory/oTable.h(.text+0x54): undefined reference to `processInfo_init(void)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/memory/oTable.h(.text+0x81): undefined reference to `uncommonBranch_init(void)' interruptedCtx.o: In function `InterruptedContext::print_C_stack(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/interruptedCtx.c:133: undefined reference to `currentFrame' monitorPieces.o: In function `OSActivityMonitor::activity(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/monitorPieces.c:45: undefined reference to `ProcessInfo::block_input_operations(void)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/monitorPieces.c:46: undefined reference to `ProcessInfo::block_output_operations(void)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/monitorPieces.c:47: undefined reference to `ProcessInfo::update(void)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/monitorPieces.c:49: undefined reference to `ProcessInfo::block_input_operations(void)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/monitorPieces.c:50: undefined reference to `ProcessInfo::block_output_operations(void)' monitorPieces.o: In function `MonitorCPUBar::init_CPU(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/monitorPieces.c:312: undefined reference to `ProcessInfo::user_time(void)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/monitorPieces.c:313: undefined reference to `ProcessInfo::system_time(void)' monitorPieces.o: In function `MonitorCPUBar::update(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/monitorPieces.c:355: undefined reference to `ProcessInfo::user_time(void)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/monitorPieces.c:356: undefined reference to `ProcessInfo::system_time(void)' nlrSupport.o: In function `NLRSupport::continue_NLR_into_interpreted_Self(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/nlrSupport.c:90: undefined reference to `ContinueNLRFromC' nlrSupport.o: In function `NLRSupport::continue_NLR_from_compiled_nonLIFO_block(frame *)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/nlrSupport.c:102: undefined reference to `ContinueNLRFromC' nlrSupport.o: In function `NLRSupport::continue_NLR_into_compiled_Self(bool, frame *)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/nlrSupport.c:126: undefined reference to `ContinueNLRFromC' nlrSupport.o: In function `NLRSupport::fix_current_return_address(char *)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/nlrSupport.c:197: undefined reference to `currentFrame' nprofiler.o: In function `EventBuffer::time(char *, ProcessTime)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/nprofiler.c:115: undefined reference to `ProcessInfo::update(void)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/nprofiler.c:120: undefined reference to `ProcessInfo::user_time(void)' process.o: In function `Process::transfer(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/process.c:65: undefined reference to `currentFrame' /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/process.c:85: undefined reference to `currentFrame' /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/process.c:116: undefined reference to `SetSPAndCall' process.o: In function `interruptCheck(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/process.c:1596: undefined reference to `currentFrame' process.o: In function `Process::runDoItMethod(oopClass *, oopClass *, oopClass **, int)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/process.c:1649: undefined reference to `EnterSelf' process.o: In function `switchToVMStack(void (*)(void))': /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/process.c:1753: undefined reference to `currentFrame' /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/process.c:1755: undefined reference to `SwitchStack0' process.o: In function `switchToVMStack(oopClass *(*)(...), void *)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/process.c:1757: undefined reference to `currentFrame' /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/process.c:1760: undefined reference to `SwitchStack1' process.o: In function `switchToVMStack(nmethod *(*)(compilingLookup *), compilingLookup *)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/process.c:1765: undefined reference to `currentFrame' /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/process.c:1768: undefined reference to `SwitchStack1' process.o: In function `switchToVMStack(oopClass *, oopClass *, nmethod *(*)(oopClass *, oopClass *))': /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/process.c:1772: undefined reference to `currentFrame' /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/process.c:1775: undefined reference to `SwitchStack2' process.o: In function `switchToVMStack_intSend(simpleLookup *, int, void (*)(simpleLookup *, int))': /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/process.c:1779: undefined reference to `currentFrame' /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/process.c:1784: undefined reference to `SwitchStack2' selfMonitor.o: In function `SelfMonitor::initialize_contents(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/selfMonitor.c:142: undefined reference to `ProcessInfo::update(void)' selfMonitor.o: In function `SelfMonitor::tick_redraw(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/selfMonitor.c:194: undefined reference to `ProcessInfo::update(void)' selfMonitor.o: In function `SelfMonitor::redraw_paging(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/selfMonitor.c:636: undefined reference to `ProcessInfo::page_faults_IO(void)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/selfMonitor.c:641: undefined reference to `ProcessInfo::page_faults_IO(void)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/selfMonitor.c:642: undefined reference to `ProcessInfo::page_faults_IO(void)' selfMonitor.o: In function `SelfMonitor::show_activities(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/selfMonitor.c:798: undefined reference to `ProcessInfo::block_input_operations(void)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/selfMonitor.c:799: undefined reference to `ProcessInfo::block_output_operations(void)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/selfMonitor.c:800: undefined reference to `ProcessInfo::update(void)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/selfMonitor.c:802: undefined reference to `ProcessInfo::block_input_operations(void)' /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/selfMonitor.c:803: undefined reference to `ProcessInfo::block_output_operations(void)' stack.o: In function `Stack::callee_of(frame const *)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/stack.c:34: undefined reference to `currentFrame' stack.o: In function `Stack::first_VM_frame(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/stack.c:49: undefined reference to `currentFrame' stack.o: In function `Stack::find_frame_entering(char *)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/stack.c:82: undefined reference to `currentFrame' stack.o: In function `Stack::interpreter_frame_for_continuing_NLR_from_primitive(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/stack.c:96: undefined reference to `currentFrame' /home/gordon/self/vm/linux/debug/../../../vm/src/any/runtime/stack.c:102: undefined reference to `CallPrimitiveFromInterpreter' os_unix.o: In function `OS::min_core(char *, unsigned int, char *)': /home/gordon/self/vm/linux/debug/../../../vm/src/unix/os/os_unix.c:279: undefined reference to `mincore' os_unix.o: In function `OS::start_decompressing_snapshot(_IO_FILE *, char *)': /home/gordon/self/vm/linux/debug/../../../vm/src/unix/os/os_unix.c:489: undefined reference to `FORK' sig_unix.o: In function `SignalInterface::is_on_signal_stack(char *)': /home/gordon/self/vm/linux/debug/../../../vm/src/unix/os/sig_unix.c:45: undefined reference to `currentFrame' sig_unix.o: In function `SignalInterface::initialize_platform(bool)': /home/gordon/self/vm/linux/debug/../../../vm/src/unix/os/sig_unix.c:64: undefined reference to `SignalInterface::init_signal_stack(void)' /home/gordon/self/vm/linux/debug/../../../vm/src/unix/os/sig_unix.c:66: undefined reference to `signal_handler(int, int, sigcontext *, char *)' /home/gordon/self/vm/linux/debug/../../../vm/src/unix/os/sig_unix.c:67: undefined reference to `signal_handler(int, int, sigcontext *, char *)' /home/gordon/self/vm/linux/debug/../../../vm/src/unix/os/sig_unix.c:70: undefined reference to `signal_handler(int, int, sigcontext *, char *)' /home/gordon/self/vm/linux/debug/../../../vm/src/unix/os/sig_unix.c:71: undefined reference to `signal_handler(int, int, sigcontext *, char *)' /home/gordon/self/vm/linux/debug/../../../vm/src/unix/os/sig_unix.c:75: undefined reference to `signal_handler(int, int, sigcontext *, char *)' sig_unix.o:/home/gordon/self/vm/linux/debug/../../../vm/src/unix/os/sig_unix.c:76: more undefined references to `signal_handler(int, int, sigcontext *, char *)' follow unixPrims.glue.o: In function `bind_wrap_BasicBindSocket_Family_Port_Address__glue': /home/gordon/self/vm/linux/debug/../../../vm/src/unix/prims/unixPrims.glue.c:20: undefined reference to `bind_wrap(int, short, unsigned short, char *, int, void *)' unixPrims.glue.o: In function `gethostbyname_wrap_BasicGetHostByName__glue': /home/gordon/self/vm/linux/debug/../../../vm/src/unix/prims/unixPrims.glue.c:20: undefined reference to `gethostbyname_wrap(char *, void *)' unixPrims.glue.o: In function `accept_wrap_BasicAcceptSocket_Info__glue': /home/gordon/self/vm/linux/debug/../../../vm/src/unix/prims/unixPrims.glue.c:20: undefined reference to `accept_wrap(int, objVectorOopClass *)' unixPrims.glue.o: In function `write_wrap_BasicWriteFile_Into_Offset_Count__glue': /home/gordon/self/vm/linux/debug/../../../vm/src/unix/prims/unixPrims.glue.c:20: undefined reference to `write_wrap(int, char *, int, int, int, void *)' machineCache_unix.o: In function `VMObj::VMObj(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/asm/label.h(.text+0x8): undefined reference to `FlushInstruction' machineCache_unix.o: In function `MachineCache::flush_instruction_cache_range(void *, void *)': /home/gordon/self/vm/linux/debug/../../../vm/src/unix/runtime/machineCache_unix.c:30: undefined reference to `FlushInstruction' asm_i386.o: In function `Assembler::check(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/i386/asm/asm_i386.c:271: undefined reference to `TestAsm' conversion_i386.o: In function `Conversion::fixConversionStack_for_vframe_conversion(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/i386/runtime/conversion_i386.c:18: undefined reference to `SaveSelfNonVolRegs_returnPC' conversion_i386.o: In function `Conversion::createFrame(int, nmethod *)': /home/gordon/self/vm/linux/debug/../../../vm/src/i386/runtime/conversion_i386.c:67: undefined reference to `SaveSelfNonVolRegs_returnPC' conversion_i386.o: In function `Conversion::fixConversionStack_for_returning_to_self(char *, sendDesc *)': /home/gordon/self/vm/linux/debug/../../../vm/src/i386/runtime/conversion_i386.c:87: undefined reference to `SaveSelfNonVolRegs_returnPC' /home/gordon/self/vm/linux/debug/../../../vm/src/i386/runtime/conversion_i386.c:88: undefined reference to `SaveSelfNonVolRegs_returnPC' conversion_i386.o: In function `Conversion::continue_after_return_trap_with_result(oopClass *, char *, char *)': /home/gordon/self/vm/linux/debug/../../../vm/src/i386/runtime/conversion_i386.c:99: undefined reference to `ContinueAfterReturnTrap' frame_iterator_i386.o: In function `VMObj::VMObj(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/any/memory/oTable.h(.text+0x1c): undefined reference to `SendMessage_stub_returnPC' /home/gordon/self/vm/linux/debug/../../../vm/src/any/memory/oTable.h(.text+0x33): undefined reference to `SendDIMessage_stub_returnPC' frame_i386.o: In function `frame::c_entry_point(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/i386/runtime/frame_i386.c:24: undefined reference to `SaveNVRet' registerLocator_i386.o: In function `RegisterLocator::update_addresses_from_VM_frame(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/i386/runtime/registerLocator_i386.c:20: undefined reference to `SaveSelfNonVolRegs_returnPC' /home/gordon/self/vm/linux/debug/../../../vm/src/i386/runtime/registerLocator_i386.c:27: undefined reference to `SendMessage_stub_returnPC' /home/gordon/self/vm/linux/debug/../../../vm/src/i386/runtime/registerLocator_i386.c:27: undefined reference to `SendDIMessage_stub_returnPC' /home/gordon/self/vm/linux/debug/../../../vm/src/i386/runtime/registerLocator_i386.c:27: undefined reference to `ReturnTrap_returnPC' registerLocator_i386.o: In function `RegisterLocator::for_SaveSelfNonVolRegs_frame(frame *)': /home/gordon/self/vm/linux/debug/../../../vm/src/i386/runtime/registerLocator_i386.c:41: undefined reference to `SaveSelfNonVolRegs_returnPC' runtime_i386.o: In function `first_inst_addr(void *)': /home/gordon/self/vm/linux/debug/../../../vm/src/i386/runtime/runtime_i386.h:55: undefined reference to `currentRTOC' runtime_i386.o: In function `fastPreemptionCheck(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/i386/runtime/runtime_i386.h:108: undefined reference to `currentFrame' trapdoors_i386.o: In function `global constructors keyed to Trapdoors::trapdoor_bytes(void)': /home/gordon/self/vm/linux/debug/../../../vm/src/i386/zone/trapdoors_i386.c:11: undefined reference to `SendMessage_stub' /home/gordon/self/vm/linux/debug/../../../vm/src/i386/zone/trapdoors_i386.c:12: undefined reference to `SendDIMessage_stub' /home/gordon/self/vm/linux/debug/../../../vm/src/i386/zone/trapdoors_i386.c:15: undefined reference to `SaveSelfNonVolRegs' ../../../objects/glue/linux/termcap_glue.o: In function `tgetenv_wrapper(char *, void *)': ../../../objects/glue/linux/termcap_glue.o(.text+0xd): undefined reference to `tgetent' ../../../objects/glue/linux/termcap_glue.o: In function `tgetstr_wrapper(char *, void *)': ../../../objects/glue/linux/termcap_glue.o(.text+0x46): undefined reference to `tgetstr' ../../../objects/glue/linux/termcap_glue.o: In function `tgoto_wrapper(char *, int, int, void *)': ../../../objects/glue/linux/termcap_glue.o(.text+0x81): undefined reference to `tgoto' ../../../objects/glue/linux/termcap_glue.o: In function `tgetnum_Getnum__glue': ../../../objects/glue/linux/termcap_glue.o(.text+0x7c2): undefined reference to `tgetnum' ../../../objects/glue/linux/termcap_glue.o: In function `tgetflag_Getflag__glue': ../../../objects/glue/linux/termcap_glue.o(.text+0x982): undefined reference to `tgetflag' collect2: ld returned 1 exit status make: *** [Self] Error 1
Hi,
Again, the question must be: what's the goal. To bring Self-the language to a broader audience, this is a good way. If the goal is, to use Self-the semantics to script existing classes, this a good way. But if you want to use Self-the environment, I'm not sure anymore.
I think it is not really a good goal to bring self to a broad audience right now. Look at Java, they have so many problems because the start up was to fast. We don't need a broad audience, we need a brilliant audience and after we have "finished" we can bring it to the broad audience.
Thorsten
I like this idea. When I started with mySelf, it wasn't more than a Self-Parser written in Smalltalk - a project without a true goal. Still, that helped me to understand the grammar (and all of its ambiguities) and to awake my interest in prototype-based software design. The more I was thinking about that topic, the more I wished I'd such a system. (I also studied other languages like Lua or NewtonScript but never bothered to use or implement one of these little languages)
Now I've a vision of a rapid prototyping environment which helps me to script existing components and I'd like to try out the semantics (perhaps also the language, perhaps not) of Self. I started with Smalltalk but in the meantime I switched to Java and created what I'd call a Self-simulator written on top of Java. It's a system which can compile and (although slowly) interprets the original byte code instructions. But most important, it can interface with existing Java classes without the need of wrapper classes.
It's my plan to release the source code in December or so when I'd some time to fix a few bugs and write some documentation. Then, one has to see whether the performance is fast enough or not. Please note, there's no GUI and if I'd go for a GUI, I'd probably do it mainly in Swing and use Self as glue.
If performance isn't sufficient, one could follow the way of JPython and dynamically create classes which are then loaded on the fly with a custom class loader. Some guys at the university of Berlin did some nice work on creating frameworks for class file construction and automatically adding delegation to Java by modifying class files through class loaders.
This is no approach for a self-containing Self system, but I never intended it.
And yes, I reinvented the wheel by ignoring that there's already a (although stopped) JSelf project in Argentinia. I don't care, my motivation is the fun of getting that thing, not having it (to quote Garfield).
bye -- Stefan Matthias Aust // Bevor wir fallen, fallen wir lieber auf.
I like this idea, too (this is my second email, please read Self in Java first). I already did some work in Smalltalk and it integrates quite well into the system. For mySelf, I used VisualWorks as I'm most familiar with this system and it's the fastet I know. However, mySelf works also in Squeak - with some minor changes to the Squeak system (the smalltalk parser needs to accept "_" as valid symbol character and not (only) as assignment operator - which should be := anyhow ;-)
So is it difficult create a prototypical, Self-language based system on Squeak - in the next, say, 3 months, ready for use in March 2000? I don't think so. All you need to add for Self semantic is true delegation and dynamic multiple inheritance. If that works - make it fast.
I've already a Squeak 2.6 VM variant which can do delegation based on a
delegate: selector withArguments: array to: delegatee
primitive function. It's a trivial modification. It would break if the delegated method would contain instance variable refences but that's not my problem. Simply don't use them anywhere but in primitive accessors. I'm currently working on multiple inheritance which should be that difficult either, although my patch will slowdown the whole system. Basically, my idea is to check in method lookup whether the class's superclass slot contains an array instead of a single class. In this case, I expect a list other classes I'll search. I know, this isn't exactly the Self semantics, but hopefully close enough for a first try. It's a simple multiple-inheritance patch.
To make it look more like Self, I might want to store a list of indices into the current method holder object (aka the object whose class I'm looking at at the moment) Now these object's classes are considered as candidates for the right method. I'm afraid this will still get into conflicts with the current lookup caching but perhaps some VM-experts can help out here.
Eventually, to support Self-style primitives, simply call as ordinary Smalltalk methods. Make sure, that all Self-style-objects share a common super class which is the place to implement the primitives. It could also overwrite #doesNotUnderstand to check for primitives and raise a better error.
My original Self parser was buggy, but it's my intend to port the (hopefully) correct parser I wrote in Java back to Smalltalk - and to Squeak. Then you could probably compile CompiledMethods with Self-semantics which can interact with the normal Squeak-System.
bye -- Stefan Matthias Aust // Bevor wir fallen, fallen wir lieber auf.
Hi all,
since I see, there is a strong demand for Self actually running on Windows somehow, and I see that my concerns about diversifying Self too much are not shared in this group, I would like to contribute something which I did some years ago and I did not feel worth publishing it so far because it is not really good. It runs on Windows though.
It is a really ugly and hardly functional implementation of Self in 16bit Smalltalk/V for Windows 2.0. It runs on Windows 3.0, 3.1, and propably (hopfully) on Windows 95, 98 and NT, and has a very basic GUI. I wish to apologize to the guy who does MySelf that I used also the code name mySelf for this project which show up on the splash screen and maybe somewhere inside the code. This was at a time where I did not know about the MySelf project, and I am not tied to this name at all.
When I tried to do something with it, I noticed how crutial a good GUI actually is in a language which gives you so much freedom as Self and Smalltalk.
You can get that at
where I put a small archive self4stvwin in the download seciton.
Have fun with it!
Gordon.
I think it was very nice, Gordon. Thanks for releasing this. I had to copy several DLLs from Smalltalk Express before it would work, though, and I still get several strange errors though the results are what I would expect.
And yes, having a good GUI is *very* important (though yours is actually better than what we had in Self before 4.0!).
-- Jecel
Hi all!
1) Is there a documentation that explains: a)project guidelines, like: - Structure of the Working_on_VM tree? - File and other naming conventions? - Coding styles? b)Separation of portable vs. non-portable code.
2) Any suggestions how long it might take to port to Windows. I assume not to go via Java, Smalltalk, Squeak, but to stay with C/C++? And where to start?
TIA Kokan
Kokan wrote:
- Is there a documentation that explains:
a)project guidelines, like:
- Structure of the Working_on_VM tree?
- File and other naming conventions?
- Coding styles?
If you download the VM files, you will find in the "doc" directory:
vmUseDoc[.dvi,.ps,.tex,.txt] which mostly explains how to use the custom development system to recompile the VM. There are some explanations on the directory structure, but they have changed a lot since this was written
vm-debugging.doc, I don't know what format this is in, so I can't read it very well. It has lots of tips on how to debug the VM
stackformat, looks like a comment extract from some source file that explains how the registers are used in the Sparc and the 68000 (now that is oooooold!)
b)Separation of portable vs. non-portable code.
This is the major difference between Self 4.0 and 4.1, but it seems you will have to figure this out for yourself. Actually, if you look at how the directory structure differs from that described in vmUseDoc you will have a good idea of what is happening.
- Any suggestions how long it might take to port to Windows. I assume
not to go via Java, Smalltalk, Squeak, but to stay with C/C++? And where to start?
My own option is to go via Self (since that is the language I like best!). I won't give any predictions, since none have come true so far....
-- Jecel
No. I really appreciate Gordon's work on porting Self to Linux (and of course Dave's work on doing the Mac port) but at least for me, this system isn't want I want right now. So there's the need for more than one system.
I also see the danger of splitting up too few people, but I see no better way and to at least share the knowledge of about implementing such systems which is nearly as good as sharing the code.
I like the comparision of Self and Mozilla. I agree with who wrote that Self suffers from the same problems as Mozilla. Open source projects tend to work out only if enough developers follow the project from shortly after the beginning so they can learn the code. Self is too big. I looked into the code a few times - mainly to find all primitives defined by Self and reading that code isn't easy.
C or C++ aren't the right languages to write large pieces of code. It's better to use a high level language (at least pure C is just a portable assembler IMHO) and then automatically transform the code. The reduces the amount of code and helps people to get an understanding.
So if we want to go for one SELF, I dare to say that we'd basically have to do the same as the Mozilla people did - starting all over. Perhaps, if we come up with a modular and portable base architecture, it's worth a try.
bye -- Stefan Matthias Aust // Bevor wir fallen, fallen wir lieber auf.
Hello folks!
I have started a new implementation of the Self VM for linux more than six months ago but I ran into a busy period. When I looked at the Self 4 sources I understood that a port was difficult and that continuing the evolution and improvement to the code was even more difficult. So I begun to write a small VM implementation. The program runs but it's very limited (parser,compiler(to asm),primitives, no gc, no maps,no blocks...). I'm now rewriting it from scratch. As for C/C++, I think that the VM should be small, very small, and as possibly close to the machine. Obviously a big part of the VM can be done in a portable way and the architecturial difference can be abstracted. The other parts can be written either in Self of in a mix of Self and extern libraries (that already come with that platform) using a flexible interface. Even the parser can be written in Self (the bootstrap parser can be linked when needed). Splitting is not a real problem if only VM is concearned, as long as source (of better binary) compatibility is mantained. The problem may arise if we will split in the application framework (Self 4). The amount of code written in self is more than the VM. Creating an interface/framework could be very interesting but running the already existing code it would be great. Fortunately we have already a "standard": the Self 4 release, so anyone who doeas a VM and mantains a compatible parser and runtime is not fragmenting the Self community but's adding more experience and differetiation of implementation, wich can be very productive (if the code amount is relatively small) because experimental project forks (like egcs) are difficult to mantain. One project can have some nice memory handling or compiler that can be integrated in the leading (bigger) project but it would be difficult to develop within him. I think that a intermediate layer of primitives can be extracted from the Self 4 VM and shared between other self implementation. I, personally, don't like much the X11 interface implemented through primitives, but changing the GUI code would be a too big work. As for portability, I'm currently working for linux/x86 and atari/linux/m68k, just to force me to keep my design portable :-) I someone is interested I can release my old code. I will be setting up a web site soon at http://openself.seul.org They provide also CVS support. If someone is interested for developing from scratch (this does not mean to reinvent warm water) this is the opportunity to begin at the very beginning, like Mozilla people did. I'm pleased to see that someone likes the idea of starting all over.
-------- Marko Mikulicic
you wrote:
No. I really appreciate Gordon's work on porting Self to Linux (and of course Dave's work on doing the Mac port) but at least for me, this system isn't want I want right now. So there's the need for more than one system.
I also see the danger of splitting up too few people, but I see no better way and to at least share the knowledge of about implementing such systems which is nearly as good as sharing the code.
I like the comparision of Self and Mozilla. I agree with who wrote that Self suffers from the same problems as Mozilla. Open source projects tend to work out only if enough developers follow the project from shortly after the beginning so they can learn the code. Self is too big. I looked into the code a few times - mainly to find all primitives defined by Self and reading that code isn't easy.
C or C++ aren't the right languages to write large pieces of code. It's better to use a high level language (at least pure C is just a portable assembler IMHO) and then automatically transform the code. The reduces the amount of code and helps people to get an understanding.
So if we want to go for one SELF, I dare to say that we'd basically have to do the same as the Mozilla people did - starting all over. Perhaps, if we come up with a modular and portable base architecture, it's worth a try.
bye
Stefan Matthias Aust // Bevor wir fallen, fallen wir lieber auf.
Need a cure for the used car blues? iMotors pre-owned cars are: priced below Blue Book; fully tested & certified; & carry a 7 day/700 mile money back guarantee. Look no further iMotors.com is here! http://clickhere.egroups.com/click/1535
-- Create a poll/survey for your group! -- http://www.egroups.com/vote?listname=self-interest&m=1
Thanks for the update on OpenSelf, Marko! I'll just make a few comments.
Even the parser can be written in Self (the bootstrap parser can be linked when needed).
A bootstrap parser is needed when creating a new "Self world" from nothing (or rather, from a bunch of .self files), but that isn't something you can't live without as Smalltalk has been proving since 1974...
Fortunately we have already a "standard": the Self 4 release, so anyone who doeas a VM and mantains a compatible parser and runtime is not fragmenting the Self community but's adding more experience and differetiation of implementation, wich can be very productive (if the code amount is relatively small) because experimental project forks (like egcs) are difficult to mantain.
Agreed. Which is why I have come to the conclusion that it is best for me to avoid any incompatibilities for now (like the parallelism in tinySelf 1 or my 3D GUI). I have never been very interested in being able to load Self 4 snapshots into Self/R, but now I see there are important non-technical reasons to do so.
I'm pleased to see that someone likes the idea of starting all over.
And I am pleased that we are not talking about starting over in the sense of making a new language just inspired by Self's ideas (like what happened during the whole 1990s without getting us anywhere).
But, as they said in the Highlander movies, in the end there can be only one :-)
-- Jecel
self-interest@lists.selflanguage.org