Cirio News
January 26, 1993
(December 30, 1992?)
User Interface Changes:
(1) [Viewers]
Added Disassemble button to CirioRemote Viewers interface.
[changes in RemoteDriver3, StackCirio, StackCirioImpl]
A disassembler of RS6000 and MIPS has not been implemented yet.
(2) [CommandLine]
Added RemoteDisassemble command correspond to Disassemble command of CirioRemote Viewers. The syntax is:
RemoteDisassemble [CProcName | PC]
[change in CommandLineCirioImpl, StackCirio, StackCirioImpl]
(3) [CommandLine]
Added BreakAtAddress command correspond to SetBreakAtAddress command of CirioRemote Viewers. The syntax is:
BreakAtAddress Address
[change in CommandLineCirioImpl, StackCirio, StackCirioImpl]
Bug Fixes:
(4) Several bug fix of Solaris2.x debugging.
[change in SunELFFiles]
(5) Support long magic number to distingish ELF files (4 bytes is not enough length to distingish ELF files).
[change in ObjectFilesImpl, ObjectFilesPrivate, SGIFiles, SunELFFiles]
(6) Flush command trigers off the .o search for Solaris 2.x.
[change in StackCirioImpl.NoteFileCacheFlush]
(7) Added "rhome" to the maching list for FX network.
[change in CirioDeltaFaceSunImpl.DebuggeeNameToDebuggerName]
January 7, 1993
New Features:
(1) SGI/IRIX 4.05 (and IRIX 5.0 untested) remote debugging capability.
[changes in CirioBreakAccess, CirioBreakAccessImpl, CirioNubAccessImpl, CirioTargets, CirioTargetsImpl, LoadStateAccessImpl, ObjectFiles, ObjectFilesImpl, ObjectFilesPrivate, RCTW, RCTWFrames, RCTWOrdinaries, StackCirioImpl]
[added SGI, SGIFiles]
December 30, 1992
New Features:
(1) Solaris 2.x remote debugging capability.
[changes in CirioTargetsImpl, LoadStateAccess, LoadStateAccessImpl, ObjectFiles, ObjectFilesImpl, ObjectFilesPrivate, RCTWFrames, RCTWOrdinaries, RMTWFrames, RMTWModules, StackCirioImpl]
[added RMTWBackdoor, SunELFFiles]
Bug Fixes:
(2) Fixed a type query problem with BYTE variables (XDT#130).
[change in CedarNumericTypesImpl.NumericalPrintType]
(3) Fixed a bug in argument parsing that was causing a crash.
[change in RemoteDriver3.Driver]
(4) Fixed a bug in FlushCache (XDT#124).
[change in RMTWAtomics.CheckForSpecialCTX]
(5) Catched MobAccess.MobError (XDT#127).
[change in RMTWModules]
(6) Catched CirioMemory.Error before CirioBackstop.Protect to show the frame of ENABLE clause which has local variable (XDT#128).
[change in RMTWFrames.FinalBuildProcFrameNode]
(7) Fixed a address fault problem when showing a frame which contains a MACHINE CODE procedure (XDT#131).
[change in RMTWCompounds.RecordIndexToNTConstant]
September 28, 1992
(1) Fixed a bug in SunADotOut symbol parsing that was recently introduced. This bug did not affect Mesa debugging - only C debugging.
[change in ObjectFilesImpl.GenSymbolStabs (syntheticOuter)]
September 17, 1992
(1) Fixed a problem with INT16 variables (actually with other numeric subranges as well).
[changes in RMTWAtomics.AnalyzeCedarNumericSEH]
(2) Implemented a workaround for a problem with NetworkName.AddressFromName when NIS is not running (e.g. on home configurations).
[changes in CommandLineCirioImpl, RemoteDriver3]
August 15, 1992
(1) Cirio will now refuse to connect to it's own <Machine> <Port> when remote debugging (Viewers: CirioRemote command or CommandLineCirio: CirioConnectToWorld command).
(2) CommandLineCirio now automatically starts a NetCommander on port (CirioNubLocalGetPort + 10000). It also gives messages to the user explaining why this is good and how to connect to the NetCommander.
(3) Fixed a bug in CirioBreakAccessImpl.UpdateSpacers that was causing a crash.
July 24, 1992
(1) Michael Plass's SPARC disassembler has been integrated. The show-source-position operation in machine language now prints a disassembly of the current procedure.
Sometimes the speculative estimation of register contents goes so wrong that a fetch is attempted from an un-mapped address. Sometimes this causes strange behavior. For example, I've seen a message on the UNIX stdout saying something about the debuggee being stopped due to a signal --- while the debugger continues to successfully interact with the debuggee; asking UNIX to resume the debuggee (eg, with "%" in the C-shell) seems to restore complete normality.
(2) There is now some "expression interpretation" available in machine language. Actually, "expression" is a bit generous. What's done is just a variety of symbol lookups. Every result is a description of a loader symbol (ie, symbol defined in the symbol table that the loader sees). Remember that different operating systems have different relations between the name used in C source and the name given to the loader; SunOS, for example, prepends an underscore. The possible "expressions" are of the form:
<number> (in Mesa syntax, or C's hex syntax) => a symbol whose value the the largest value of any symbol not greater than the given number. For example, an address anywhere within a procedure should "evaluate" to the symbol for the procedure.
<C program name>.<item name> => the most recently defined text (ie, code space) symbol in a compilation unit whose name's last step (ie, the part after the last "/") is the given program name followed by a dot and arbitrary stuff. For example, "RopeImpl.←RopeImpl←P0" will "evaluate" (in SunOS) to the symbol for RopeImpl←P0 in a program named "/foo/bar/RopeImpl.c2c.o".
<item name> => the most recently defined loader symbol of the given name. For example, "←RopeImpl←P0" should evaluate (in SunOS) to the same symbol as in the previous case.
(3) Breakpoints can now be set at arbitrary addresses through the Viewers interfaces, by middle clicking the "SetBreak" button with the desired address selected. The address should be in Mesa, or C's hex, syntax.
(4) Cirio now tries harder to find patch space for breakpoints. Any patch area near enough to the break address will now be usable.
Sadly, Cirio searches only once for a patch area near enough to the breakpoint --- if it's full, you're still out of luck.
(4) The "Interpreter" command now takes an optional list of search directories.
(5) We've recently noticed that the "AddDir" button in a local Cirio tool breaks the tool it's invoked in --- and any others that exist at the time it's used. Giving search directories to the "Interpreter" command breaks previously-existing Cirio tools. The successful way to add a search directory is to first delete all existing local Cirio tools, then issue the "RecreateThisWorldCirioConnection" Cedar command, then issue an "Interpreter" command with the desired directories.
July 20, 1992
(1) Relaxed Cirio's response to double definitions. Now it prints a message and continues (instead of terminating) the type analysis.
When your C source includes something like
typedef struct label←t {
int val[14];
} label←t;
the result of Sun's cc includes
fffffb05 - 00 0008 LSYM label←t:T(16,4)=s8val:(16,5)=ar(0,1);0;1;(0,1),0,64;;
fffffb05 - 00 0008 LSYM label←t:t(16,4)
the result of gcc includes
00000000 - 00 0000 LSYM label←t:T28=s8val:29=ar1;0;1;1,0,64;;
00000000 - 00 0000 LSYM label←t:t28
and you can't C-debug this module with Cirio because of some problem with redefinition of "label←t". I think this is the reason for certain code that previously mystified Laurie and me; we should now make it allow redefinition where the new and old defintions are = REFs.
June 25, 1992
(1) Bug fix in C-type parsing.
(2) Changed CirioBreakAccessImpl.mesa to use the platform dependent name translation for "SomePatchSpace".
June 2, 1992
(1) Changed Cirio's C type parsing protocol (in RCTW and ObjectFiles) to return a CirioTypes.Type (rather than a "DotOType" string).
(2) This allows Cirio to accomodate different C type grammars.
April 27, 1992
(1) Fixed the bug introduced last time around.
(2) Made another small improvement in the handling of gcc output.
April, 1992
(1) Made some changes to the handling of Sun a.out files so that gcc results as well as Sun cc results can be interpreted. Also improved the handling of Sun cc output. Also introduced a bug.
(2) Added a rudimentary attempt at finding C source files. Adding directories to the global search list helps.
March 30, 1992
(1) Workaround for the following AIX ld bug installed in XCOFFFiles.mesa.
On AIX (both 3.1.5 & 3.2), it seems static symbols are not relocated by ld. This causes Cirio to be unable to find the correct "versionStamp" address for cinded object files. Single object files work fine.
(2) Performance improvement for Cirio's inital connection time found and implemented by Carl Hauser. It seems to be about twice as fast now.
(3) Minor change to hot frame detection. It should now do a better job of predicting the hot frame for uncaught errors. It sure would be nice if PCR could provide this information.
March 6, 1992
RS6000 debugging works.
March 5, 1992
New Features:
(1) Opaque types can now be "seen" remotely. This functionality requires support in CedarCore and new DebugNub functionality.
(2) Some RS6000 remote debugging capability. All of the following functions are working:
Connection manipulation
connect to /disconnect from an RS6000 pcr world
stop / resume / kill execution of an RS6000 pcr world
Thread manipulation
select (add) threads by filter (callingdebugger, ready, all)
list available threads
get thread summary
detail thread
proceed, abort, etc. thread
Frame manipulation
walk stack
show source position
show frame
expression evaluation including ampersand procedures, GLOBALVARS and EXPRTYPE
Basically everything except breakpoints is working. Breakpoints should be finished shortly.
User Interface Changes:
(3) [Viewers]
Added Find and Word buttons to CirioRemote Viewers interface.
(4) [CommandLine]
Improved CommandLineCirio to give a helpful message when a command is issued out of context.
(5) [CommandLine]
Changed the Walkstack command in CommandLineCirio to accept "Co" for "Cooler" and "W" for "Warmer". The syntax is now:
WalkStack [[Co[oler] | W[armer] [NumberOfFrames]] | AbsoluteFrameNumber] [C | Cedar]
Bug Fixes:
(6) Timeout errors during attempts to StopRemoteWorld now do not cause a Cirio crash.
February 13, 1992
(1) Added another &-proc:
&RdXStringBody: PROC [addr: CARD, char-count: CARD];
&RdXString couldn't be used when only an XStringBody was available.
Also fixed a problem with the implementation.
(2) Fixed memory dump procedures. The last release only printed 3 out of every 4 words.
(3) NIL answers to KillRemoteWorld verification in CommandLineCirio are now handled correctly.
(4) CirioHelp command in CommandLine cirio only displays currently available commands, instead of all CommandLineCirioCommands. If "all" is passed in as an argument, all commands are listed.
(5) New argument ("listed") accepted for Kill, Freeze, Proceed, Abort, and Summary commands in CommandLineCirio. When the new argument is supplied, the invoked command does its operation on all threads that have been added.
(6) XCOFF stab reader now parses stab strings better, and source positions can be determined.
February 3, 1992
(1) Cirio now understands how to do pointer comparisons (=, #, <, >, <=, >=), e.g.
&1 ← @r
105F5588H@
&2 ← @s
105F558CH@
&3 ← @s=@r
FALSE
&4 ← @s=@r+4
TRUE
&5 ← @s#@r+4
FALSE
&6 ← @s<@r+4
FALSE
&7 ← @s>=@r+4
TRUE
(2) Corrected thread id displaying - it sometimes displayed the wrong number even though it did the right operation.
January 29, 1992
(1) Attempts to print unbound variant records now result in an error message - not a crash.
(2) Attempts to print sequences with integer indices now succeed.
(3) Corrected CommandLineCirio's treatment of thread indices which caused confusion when threads numbers were not contiguous.
January 23, 1992
(1) Added three more &-procs:
&RdMem: PROC [addr: CARD, bytes: INTEGER, base: CARD];
&IndirectRdMem: PROC [addr: CARD, bytes: INTEGER, base: CARD];
&RdXString: PROC [XString-var-byte-address: CARD, char-count: CARD];
(2) An error is raised when trying to default variables for AmpersandProcs when no procedure with this functionality exists. This condition was not previously checked for.
January 17, 1992
Moved SameBreakWorld* into CirioBase to eliminate the need to recompile Druid to track Cirio changes.
January 16, 1992
(1) Cirio's file location searching order has been modified. Cirio now searches:
(1) in the user supplied and default working directories
(2) in the version maps
(3) in the locations found in the object files
(4) in other locations it stumbles across.
(2) A new default working directory has been included in Cirio - "-compiled:/CirioCompiledData/". This internal working directory contains the mobs that Cirio needs to make a connection. This makes Cirio startup slightly faster and makes Cirio significantly easier to distribute to sites without PCedar releases.
January 10, 1992
(1) Types and values are now printed on streams, instead of converted to ropes. StructuredStreams are used to format the output nicely with whitespace.
(2) Opaque types are now seen through, in the local case.
(3) Bound COMPUTED and OVERLAID variant record types now work correctly. (Bound non-COMPUTED non-OVERLAID variant record types are now slightly wrong --- the tag is missing).
(4) Most non-understood typestring contructs now produce broken types, rather than invalidating the whole typestring analysis. Array and procedure constructions are now understood.
January 6, 1992
(1) New Command: ChangeCirioMessageLevel
Usage: ChangeCirioMessageLevel [level]
Valid levels: urgent: Only displays necessary messages
normal: Displays necessary and informative messages
debug: All messages available are displayed
If no level is supplied, then the current level is displayed.
Profile Entry:
Cirio.MessageLevel urgent | normal | debug
default is "normal"
There are still problems throughout Cirio with using this, because not all output goes through SystemInterface.ShowReport. Not all levels are guaranteed correct.
December 23, 1991
(1) Further internal reoganization in the inexorable march toward righteousness. Type graph cycles are now broken at REFs when analyzing mob data structures. Records from mobs continue to defer analysis of their fields, just for laziness' sake.
(2) Introduced some analysis of typestrings, applied in the case of REF ANYs. A REF ANY value now appears as a REF to the actual type of the referent, when debugging locally and the analysis of the typestring describing that type succeeds. The analysis will fail if an opaque or painted type from a module not in the $Intermediate version map is encountered. The analysis will also fail on various other unimplemented cases.
(3) Added two more &-procs:
&GetTypestring: PROC [code: CARD] RETURNS [string, whyNot: Rope.ROPE];
&GetConcreteTypecode: PROC [opaque: CARD] RETURNS [concrete: CARD, whyNot: Rope.ROPE];
December 13, 1991
(1) Breakpoints can now be set in C code. Because C doesn't have any general way of testing whether a given object file was compiled from a given version of a source file (unlike Mesa, which records the source file's create date in the object file), the breakpoint-setting operation always works on the most recently loaded object code compiled from the indicated source.
(2) Fixed a swarm of bugs introduced in the October upheaval in connection with multi-word procedure parameters.
December 6, 1991
Fixed two bugs:
(1) A small bug in "CirioRemote" argument parsing.
(2) A bug (#2869) in ObjectFile parsing. The problem would show itself with a message like:
"failure due to internal Cirio error: redefinition of dotOType (0,282)"
November 27, 1991
The CirioRemote command will now accept an initial list of working directories on the command line. This feature is useful if you are trying to debug a world that uses different versions of basic files, e.g. Rope.mob. The syntax is:
CirioRemote <hostname> [<portnumber> [<listOfWorkingDirectories>]]
For example:
CirioRemote swift 4815 /NewCedarFiles /MyTestFiles /MyFriendsTestFiles
October 17, 1991
During the past few months, Cirio has been undergoing some major changes. The goal of these changes is to make Cirio a multi-target debugger - specifically to support XSoft's product goals.
Cirio's treatment of object files, stacks, memory, breakpoints, etc. was revised so that several target-specific implementations could co-exist peacefully.
The SPARC/SunOS4* target should be functionally equivalent to the previous version of Cirio.
The RS6000/XCOFF target is still undergoing changes and is not yet ready for use.
August 17, 1991
(1) Made both local and remote connections start out with this list of directories to search for files: /PCedar2.0/Cirio/, /PCedar2.0/CirioThings/, /PCedar2.0/Atom/, /PCedar2.0/Rope/. This makes the navel-examination done at startup succeed even in the absense of version maps. The files needed are currently: CirioThings/CirioRopeHelper.mob, Cirio/CCTypesImpl.mob, Cirio/CirioTypes.mob, Cirio/NewAmpersandProcs.mob, Cirio/NewAmpersandProcsImpl.mob, Rope/Rope.mob, and Atom/AtomPrivate.mob. For C interpretation, the file /CedarCommon2.0/FamousFiles/c.kipperedParseTables is also needed.
August 9, 1991
(1) `CirioRemote localhost' should now work reasonably on a machine that's not running NIS (nee YP) and an automounter.
August 8, 1991
(1) Added machine language to those barely understood by Cirio. Cirio cannot interpret any machine-language expressions or statements. But it can print machine-language frames. Such a printout lists the PC, SP, and the input, local, and output registers. When used in conjunction with the disassembler in SparcAids, and the memory dumping available in the Cedar language, this might be just enough to do some debugging of optimized code.
(2) Made the `frame banner' (what's printed as you WalkStack into a frame) more informative: if the frame is in optimized code, the code base address and module offset are now printed; they were already being printed when the fram is in unoptimized code. The code base address is where the code of the containing object file starts in memory; the module offset is where the code of the compilation unit responsible for the frame in question starts within all the code of the containing object file.
July 12, 1991
(1) Cirio now catches the error that occurs when it interprets an expression that tries to divide by zero.
(2) When the remote world goes away, Cirio now stores that information so that it doesn't try further interactions. The breakcheckdaemon already noticed when the remote world went away, but didn't record this fact in any data structure, it only stopped its own train of action.
July 3, 1991
(1) New Command added
←
Usage: ← <expression>
(2) Fixed procedure called after QuitWorld is called so that it wouldn't try outputting to a non-existent viewer.
(3) Increased the intelligence of hot frame detection. Added some cases to the check procedure for finding hot frames.
July 2, 1991
(1) Cirio now prints less information about a procedure when the printing depth is less than 3.
(2) Cirio now prints some symbolic information about a procedure implemented in an optimized module. When the printing depth is deep (>2), such a procedure is printed as "loadedFile.guessedComponent.cProcName"; loadedFile is the UNIX name of a file that UNIX ran (such as "/tmp/CommanderWorldPackage") or the PCR incremental loader loaded (such as "/pseudo/pcedar2.0/crrpc/sun4-o3/crrpcimpl.c2c.o.~4~"); guessedComponent is a guess at the UNIX file name of the compilation unit (such as "IOCommonImpl.c2c.o") within the loaded file; and cProcName is the C-level name of the procedure (such as "ultEndOf←P960"). When the printing depth is shallow, the loadedFile is omitted.
(3) Added another ampersand procedure to give access to the incremental loader in the debuggee (ie, not for casual users).
&GetFileEntry:
PROC [seqNum:
CARD]
RETURNS [
REF FileEntry];
This procedure provides direct access to a CirioNub procedure.
June 8, 1991
(1) Cirio should now find frame extensions and global links (which I think it doesn't use) that are misplaced by Mimosa into the NIL context. In user-ese, that means Cirio is now able to determine the addresses of more local variables than before.
(2) Cirio now knows where Mimosa hides the variables local to an ENABLE scope.
June 5, 1991
(1) Added the `CirioBugTreatment' command, which offers the option to change how Cirio reacts to its own uncaught errors (some of which are due to bugs, and some of which are due to erroneous input). The command takes one optional argument, indicating the new treatment: `catch', the old and default behavior, means to catch and report the error; `reject' means to not catch the error; and `oz' means to first call XRllDebugger (which punts directly to the debug nub for remote debugging) and then catch and report the error. When invoked with no arguments, `CirioBugTreatment' simply reports the current state.
June 4, 1991
(1) Major internal re-organization. There is no longer a distinction between type-time and structure-time --- at least for the Cedar part; the C part has been left working the old way, so this revision of Cirio can be brought to a timely conclusion.
(2) The static links out of procedures with no local variables now can be seen. The static links out of ENABLE scopes now can be seen.
(3) Data whose size is not a multiple of 32 bits now are correctly extracted from REF targets and local frames.
(4) Variant records now print without crashing.
(5) Broken remote-Cirio tools can now be deleted.
May 5, 1991
(1) Made a few changes to the way Stack Summaries and Frames are presented:
(1.1) Cirio now attempts to determine the first "interesting frame" and begin the summary with that frame. In general, the "interesting frame" will be the one that caused the debugger to be invoked, raised an error, etc. [The "interesting frame" is determined heuristically since pcr doesn't currently save this information. Hopefully the next version of pcr will be able to supply it.]
The "interesting frame" is indicated by the characters "=>" displayed in the left margin. If you select another frame by "walking the stack", the selected frame is indicated by the characters "->" displayed in the left margin. The only way to see a frame "hotter" than the "interesting frame" is to "walk the stack" to select it.
The summary will start with the "hotter" of the selected frame or the "interesting frame". For example:
quick summary for thread with index 1
debug message = ClientRequest
-> 6: llDebugger←P60 (pc=88H, from CirioThingsImpl.c2c.o)
LoadStateAccessImpl reports no guessedEmbeddedFile for abs PC = 19326128
7: unreadable frame
=> 8: ←TestSort←P300 (pc=8C0H, from QuickSortTest.o)
9: ←NoName←Q576 (pc=EFCH, from QuickSortTest.o)
10: ←XR𡤎nable (pc=5CH, from SignalsImpl.c2c.o)
11: ←RunQuickSortTest←P360 (pc=A8CH, from QuickSortTest.o)
12: ←QuickSortTest←P0 (pc=208H, from QuickSortTest.o)
13: 𡤍oStartProgram←P3180 (pc=44C0H, from InstallationScopesImpl.c2c.o)
14: 𡤍oStartConfig←P3120 (pc=4424H, from InstallationScopesImpl.c2c.o)
15: ←XR←StartCedarModule (pc=4814H, from InstallationScopesImpl.c2c.o)
16: ←XR←run←QuickSortTestConfig (pc=118H, from QuickSortTestConfig or QuickSortTestConfig.o)
....
(1.2) When detailing a thread, the "interesting frame" is automatically selected - you don't need to "walk the stack" to select it prior to doing operations like SourcePosition, ShowFrame, etc.
(1.3) ShowFrame now includes the address of the frame in the information displayed about the frame. (This address can be used to directly access the frame when Cirio doesn't tell you what you wanted to know.) The new output looks like this:
Showing frame:
(frame address: 1461888)
""
<node of unknown type (frame's procedures not implemented)>
Arguments--
^[min:10, max:19]
Results--
^[]
Variables--
---Global Frame ommitted---
(2) Changed the "Listed threads:" control buttons interface slightly. The "Listed threads:" buttons now appear only if threads have been added via the "CallingDebugger", "Ready" or "All" threads selection buttons.
April 12, 1991
(1) Added a new set of buttons to the Viewer user interface to provide thread control for a set of "Listed threads:". These buttons are similar to the ones provided for individual thread control, but operate on ALL threads appearing in the threads list.
(2) Some useful (and perhaps previously undocumented) operators for use in expression evaluation:
`@Foo' prints the address of Foo
`Foo?' prints the type of Foo
`Foo!' each `!' increases the print depth (by 1) and width (by 10) of Foo
`Foo$' turns on copious debugging output for the evaluation of Foo - this is not for the faint of heart!
March 20, 1991
(1) Added StackCirio.ClearBreakPointAtPosition to support specifying a "break to clear" by it's source file position (analagous to SetBreak). This functionality is currently only available from the CommandLine or dbxtool user interface - it is not yet available from the Viewers user interface.
(2) Fixed several address faults.
January 13, 1991
(1) Attention for breakpoint is implemented. When PCR world(Debugnub.o) get a SIGINT, an message "SIGINT: debuggee needs attention." will appear in RemoteCirio / CommandLineCirio. Latest PCR(3𡤄, dated Jan 14, 1991) is required.
(2) As the deamon is introduced for WaitSig(), the communication between Cirio and Debunnub.o becomes slow in RemoteWorld Running.(Each WaitSig() takes 2 second) But, usual debugging is done in RemoteWorld stopping. So it will affect only StopRemoteWorld/ResumeRemoteWorld.
December 13, 1990
(1) Atoms will print out (as `$"pname"' for an ATOM with `pname' as its print-name).
(2) Non-understood types will be printed as raw bits, if the length is known.
(3) Broken nodes and types should now include a description of the problem in their printing.
(4) ShowFrame omits the global frame (which is now accessible via GLOBALVARS). Unless the print depth is greater than 3, which is the default - and there's currently no way to override the default.
(5) The stack summaries come in two flavors: (1) with the embedded-module-relative PC, and (2) without. Flavor 1 is under the left mouse button on the summary screen button, and Flavor 2 is under the middle mouse button.
(6) The stack-specific buttons in a remote Cirio tool now include one, named `*', that offers all the functions of the others; these buttons have been PopUpButtons for a while now.
(7) You can now, in principle, take the address of any value with a runtime address. However, the result is always a POINTER TO .., never a POINTER TO READONLY ..! Be careful not to store through such pointers! Some kinds of values, such as procedures in global frames, don't actually support taking their addresses.
(8) Cirio works a little better now when you load multiple copies and versions of a program. The remaining bug I know about is that the SetBreak operations are not sufficiently choosy about matching up a loaded program with the source indicated.
December 7, 1990
(1) `GLOBALVARS[Foo]' denotes the global variables of the most recently loaded instance of module Foo. `GLOBALVARS[Foo, 3]' denotes the global variables of the 4th most recently loaded instance of module Foo. The GLOBALVARS construct may appear on the left side of an assignment.
(2) `EXPRTYPE[e]' denotes the statically apparent type of expression `e'.
September 4, 1990
(1) Fixed PopUpDriver2 to call LocalCirio.ReleaseConnection where it should, resulting in faster creation of new local debug tools. Thanks to Carl Hauser for finding this problem and fix.
August 31, 1990
(1) The user now controls the language being interpreted. When Cirio's attention is focused on a particular stack, there's a `Language' button that is used to control the language used in that stack.
(2) C source line numbers can now be reported; it still will not open a viewer for you.
(3) Conditional expressions (test?ifTrue:ifNot) now work. += and friends now work (but they evaluate the left argument twice).
(4) Procedure values now exist (although you still cannot call them).
(5) Adding integers to pointers now works. The ``ptr[idx]'' syntax works.
August 28, 1990
(1) C debugging gets better.
`Global' variables (static, extern, and common) should work now.
Assignment should work now.
(2) Opaque values should no longer cause address faults.
August 22, 1990
(1) C debugging begins to appear. Not available yet:
Anything involving C source locations (this includes anything involving breakpoints in C code).
`Global' variables (static, extern, and common). Note that this means ShowFrame will always fail.
Assignment.
Procedure values.
`Ampersand-variables' (and -procedures). I think the way to approach these is to make `ampersand' be a logical concept, bound to one of underscore (←) or octothorpe (#) in C.
User control over which language is interpreted.
(2) The prompt tells you the language in which your expressions will be interpreted. A prompt that looks like `&42 ← ' indicates Cedar; a prompt like `/* 47 */ ' indicates C.
(3) Various other kinds of cleanup:
I now believe that variables used inside an ENABLE or ! but declared outside should be visible from frames outside the ENABLE or !. Actually, this has been the case for quite a while, but I was confused by other bugs that appeared when I tried this case.
A ROPE that was NIL used to cause a crash; it no longer does.
It's now possible to see SEQUENCE values.
(4) It's still so impossible to see an opaque value that you'll get an address fault if you try.
July 20, 1990
(1) Cirio now has some more ampersand procs, to make it possible to build ROPE parameters passable to the &Lookup.. procedures. This is an interim solution; there is a deeper bogon that needs to be annihilated. Don't try to get ROPEs made with these procedures into the target world (aka debugee), neither by passing them to target-world procedures nor by storing them into target-world data structures nor by any other method you can think of; I don't know what will happen if you try, but I know it won't be helpful. In just the same way, don't try to pass target-world ROPEs to the &Lookup.. or the ..LocalRope.. procedures. Doing these things could cause memory smashes!
&MakeLocalRope5:
PROC [c1, c2, c3, c4, c5:
CHAR]
RETURNS [
ROPE];
Makes a ROPE in the debugger (not debugee, aka target) containing up to 5 characters. The first space an following characters, if any, are not included in the result.
&MakeLocalRope10:
PROC [c1, c2, c3, c4, c5, c6, c7, c8, c9, c10:
CHAR]
RETURNS [
ROPE];
Makes a ROPE in the debugger (not debugee, aka target) containing up to 10 characters. The first space an following characters, if any, are not included in the result.
&LocalRopeConcat:
PROC [base, rest:
ROPE]
RETURNS [
ROPE];
Like Rope.Concat.
&LocalRopeCat:
PROC [r1, r2, r3, r4, r5:
ROPE]
RETURNS [
ROPE];
Like Rope.Cat.
&LocalRopeSubstr:
PROC [base:
ROPE, start, len:
INT]
RETURNS [
ROPE];
Like Rope.Substr.
Spring 1990
(1) A few &Lookup.. procedures weren't documented. They follow. The &Lookup.. procedures are mainly useful for debugging the debugger; they provide lower-level access to loadstate information in the debuggee.
&LookupFileEntryByStemName:
PROC [stemName:
ROPE, numToSkip:
INT]
RETURNS [name:
ROPE, type, value, size, fileSeqNum:
CARD];
This procedure provides direct access to a CirioNub procedure.
&LookupSymEntryByName:
PROC [sym:
ROPE, caseSensitive:
BOOLEAN, externOnly:
BOOLEAN, numToSkip:
INT]
RETURNS [name:
ROPE, type, value, size, fileSeqNum:
CARD];
This procedure provides direct access to a CirioNub procedure.
June 8, 1990
(0) Cirio now understands ROPEs as such (and Rope.Texts, too). Don't be discouraged by all the things you can't do with them --- you can't do those things with REFs either.
(1) Cirio now has more ampersand procs.
&MemDump:
PROC [addr:
CARD, bytes:
INTEGER ← 16];
The given address is rounded down to the nearest word boundary. Prints, in hex and as characters, the contents of the indicated bytes in the target world. Until the debugee CirioNub is improved, don't give invalid addresses. Note that when debugging from PCedar, default values don't work (yet).
&IndirectMemDump:
PROC [addr:
CARD, bytes:
INTEGER ← 16];
Like &MemDump, but first reads the address to start dumping from the word at the given address (which is first rounded down to the nearest word boundary).
&PokeCard:
PROC [addr, val:
CARD, mask:
CARD ← 0FFFFFFFFH];
The given address is rounded down to the nearest word boundary. Alters a 32-bit word, or a subset thereof, in the target world. The value and mask are treated as CARDs: the 2i's bit of the val and mask affect the 2i's bit of the word-interpreted-as-a-CARD at the rounded address. Until the debugee CirioNub is improved, don't give invalid addresses.
(2) It is now possible to take the address (with @) of many kinds of varaibles.
(3) It is now possible to assign to the referent of a REF <some numeric type>.
(4) When cross-debugging (from D to P), correct byte orders are now used.
(5) The version map usage has been slightly changed (hopefully for the better). In PCedar, you want the following profile entries:
VersionMap.SourceMaps: [PCedar2.0]<VersionMap>PCedarSource.VersionMap
VersionMap.IntermediateMaps: [PCedar2.0]<VersionMap>PCedarIntermediate.VersionMap
VersionMap.ExecutableMaps: [PCedar2.0]<VersionMap>PCedarSparcExecutable.VersionMap [PCedar2.0]<VersionMap>PCedarSparcOptExecutable.VersionMap
In DCedar, you need the same entries, except that the names are VersionMap.PSourceMaps, VersionMap.PIntermediateMaps, and VersionMap.PExecutableMaps, respectively.
April 17, 1990 2:31:02 pm PDT
(0) When a Cirio tool starts up, it spends an initial period examining its navel" in order to construct the ampersand procedures. This period may include several messages about its activities. The period is completed when the tool prints its date and time, followed by the "&1 ← " prompt.
WARNING: until certain low level locks are repaired, one should avoid loading any packages into the PCedar world until a tool completes its initial period.
(1) Cirio now has ampersand vars. A Cirio prompt now has the form: "&n ← ", where n starts at 1 and increases for each expression evaluated. After evaluation, &n will continue to hold the result of the evaluation. Further, one can name ones own ampersand vars, e.g., one might type "&foo ← exp".
(2) Cirio now has a small collection of ampersand procs. These are procedures that are part of Cirio which can be invoked through expressions typed into the typescript.
(a) &dr[byte-address, word-count]
Accepts two 32 bit cardinal values. Prints the decimal value of word-count 32-bit words, starting at byte-address.
(b) &RdRope[rope-var-byte-address, char-count]
Accepts two 32 bit cardinal values. The first is the address of a rope variable (not the rope). The second is the number of characters to print. Handles ropes built up from components. (Reads the rope structure and converts to a sequence of characters.)
As an example of use, assume that rope is a visible variable of type Rope.Rope.
First, evaluate the expression "@rope". This will proceduce a byte-address of the rope variable, for example, 2345678B.
Second, evaluate "&RdRope[2345678B, 100]".
(c) &LookupMatchingSymEntryByValue[symId: CARD, val: CARD, wantedTypes: CARD, ignoreClasses: CARD, numToSkip: INT]
This procedure provides direct access to a CirioNub procedure. It's behavior is a teensy bit complicated. See me or Alan.
A typical call might be:
&LookupMatchingSymEntryByValue[0, 12345, 37777777777B, 0, 0]
(d) &LookupMatchingSymEntryByName[symId: CARD, pattern: Rope.ROPE, caseSensitive: BOOLEAN, wantedTypes: CARD, ignoreClasses: CARD, numToSkip: INT]
This procedure provides direct access to a CirioNub procedure. It's behavior is a teensy bit complicated. See me or Alan. (This procedure is not usable on the Sun until we get Rope.ROPE procedure parameters working.)
March 21, 1990 11:12:31 am PST
It has become harder to find mobs and other files both remotely from a D-Machine and locally from a Sun. The difficulties have to do with PFS naming conventions.
work-around
Use AddDir to add the full path name of the directory from which the file was executed. BE SURE to use bracket syntax, but DO NOT include "-vux:" or "-ux:". (In order to avoid using "-vux:" or "-ux:", you can make an appropriate prefix map entry.)