Changes from the Plan 9 acid (beyond the 
obvious changes necessary to compile without
Ken's compiler and with the new libmach interface).
========================================

the input-line print verb is %Z, so that %L can be for locations

the register block is explicitly "mapped" at 0 by xget1, xget2, ...
	for compatibility with old acid, even though libmach
	doesn't participate in this lie anymore.

main accepts pid, file, and core in any order

the ptab only records pids (no ctl fd anymore).

new builtin sysstop(pid) runs pid until the next syscall

map() returns 5-tuples: (name, filename, base, end, offset)
	filename is new

map() expects a 5-tuple too

new acid maps() prints maps nicely.

strace expects a list of register names and values like
	{"PC", *PC, "SP", *SP}

strace returns 5-tuples now:
	{fn, pc, callerpc, paramlist, locallist}

new builtin includepipe(cmd) includes the standard output
	of running cmd.

symbols returns 4-tuples now: {name, type, addr, file}

new builtin textfile() returns the current set of open text files
	as a list of {file, base} pairs.

new builtin textfile({file, base}) adds a new file's symbols and text
	offset by base for relocatables.

new builtin deltextfile(file) removes a file from the set of open text files.

both textfile and deltextfile update symbols.

new types: register is something that when dereferenced gives you
	the registers.  the Ureg is no longer mapped at 0.
	refconst is something that gives a constant when dereferenced.

new builtin register("AX") creates register values
new builtin refconst(0x123) creates refconst values

new builtin var("foo") is equivalent to the variable foo
	(it returns foo but can also be used as the lhs of an assignment).

new acid function getregs() returns a list of the current values of registers.
new acid function setregs() sets the current registers to those values.
	note that getregs and setregs operate on register locations, not the
		register values themselves.  
new acid function resetregs() sets registers to register("AX"), etc.
new acid function clearregs() sets all registers to constant -1.

the default register settings are as in resetregs(), not small numbers.
the Ureg is not mapped at 0 anymore.

new acid variables coretext, pids, systype, corefile, cmdline.

new behavior: local variable lookup, stk, etc., use the acid values of registers
	(*PC, *SP, and so on), so the thread support code can change the context
	completely.

unary + is applicable to more data types and prints more often.

====

yet to be done:

elflink has the linking info for elf on linux

