123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386 |
- .TH DEBUGGER 2
- .SH NAME
- cisctrace, risctrace, ciscframe, riscframe, localaddr, symoff,
- fpformat, beieee80ftos, beieeesftos, beieeedftos, leieee80ftos,
- leieeesftos, leieeedftos, ieeesftos, ieeedftos \- machine-independent debugger functions
- .SH SYNOPSIS
- .B #include <u.h>
- .br
- .B #include <libc.h>
- .br
- .B #include <bio.h>
- .br
- .B #include <mach.h>
- .PP
- .ta \w'\fLmachines 'u
- .nf
- .B
- int cisctrace(Map *map, ulong pc, ulong sp, ulong link,
- .B
- Tracer trace)
- .PP
- .nf
- .B
- int risctrace(Map *map, ulong pc, ulong sp, ulong link,
- .B
- Tracer trace)
- .PP
- .nf
- .B
- ulong ciscframe(Map *map, ulong addr, ulong pc, ulong sp,
- .B
- ulong link)
- .PP
- .nf
- .B
- ulong riscframe(Map *map, ulong addr, ulong pc, ulong sp,
- .B
- ulong link)
- .PP
- .nf
- .B
- int localaddr(Map *map, char *fn, char *var, long *ret,
- .B
- Rgetter rget)
- .PP
- .B
- int symoff(char *buf, int n, long addr, int type)
- .PP
- .B
- int fpformat(Map *map, Reglist *rp, char *buf, int n, int code)
- .PP
- .B
- int beieee80ftos(char *buf, int n, void *fp)
- .PP
- .B
- int beieeesftos(char *buf, int n, void *fp)
- .PP
- .B
- int beieeedftos(char *buf, int n, void *fp)
- .PP
- .B
- int leieee80ftos(char *buf, int n, void *fp)
- .PP
- .B
- int leieeesftos(char *buf, int n, void *fp)
- .PP
- .B
- int leieeedftos(char *buf, int n, void *fp)
- .PP
- .B
- int ieeesftos(char *buf, int n, ulong f)
- .PP
- .B
- int ieeedftos(char *buf, int n, ulong high, ulong low)
- .PP
- .B
- extern Machdata *machdata;
- .SH DESCRIPTION
- These functions provide machine-independent implementations
- of common debugger functions.
- Many of the functions assume that global variables
- .I mach
- and
- .I machdata
- point to the
- .I Mach
- and
- .I Machdata
- data structures describing the target architecture.
- The former contains machine parameters and a description of
- the register set; it is usually
- set by invoking
- .I crackhdr
- (see
- .IR mach (2))
- to interpret the header of an executable.
- The
- .I Machdata
- structure
- is primarily a jump table specifying
- functions appropriate for processing an
- executable image for a given architecture.
- Each application is responsible for setting
- .I machdata
- to the address of the
- .I Machdata
- structure for the target architecture.
- Many of the functions described here are not
- called directly; instead, they are invoked
- indirectly through the
- .I Machdata
- jump table.
- .PP
- These functions must retrieve data and register contents
- from an executing image. The
- .I Map
- (see
- .IR mach (2))
- data structure
- supports the consistent retrieval of data, but
- no uniform access mechanism exists for registers.
- The application passes the address of a register
- retrieval function as an argument to those functions
- requiring register values.
- This function, called an
- .IR Rgetter ,
- is of the form
- .PP
- .RS
- .B "ulong rget(Map *map, char *name);
- .RE
- .PP
- It returns the contents of a register when given
- the address of a
- .I Map
- associated with an executing image and the name of the register.
- .PP
- .I Cisctrace
- and
- .I risctrace
- unwind the stack for up to 40 levels or until the frame for
- .I main
- is found. They return the
- count of the number of levels unwound. These functions
- process stacks conforming to the generic compiler model for
- .SM RISC
- and
- .SM CISC
- architectures, respectively.
- .I Map
- is the address of a
- .I Map
- data structure associated with the image
- of an executing process.
- .IR Sp ,
- .I pc
- and
- .I link
- are starting values for the stack pointer, program counter, and
- link register from which the unwinding is to take place. Normally, they are
- the current contents of the appropriate
- registers but they can be any values defining a legitimate
- process context, for example, an alternate stack in a
- multi-threaded process.
- .I Trace
- is the address of an application-supplied function to be called
- on each iteration as the frame unwinds. The prototype of this
- function is:
- .PP
- .RS
- .B "void tracer(Map *map, ulong pc, ulong fp, Symbol *s);
- .RE
- .PP
- where
- .I Map
- is the
- .I Map
- pointer passed to
- .I cisctrace
- or
- .I risctrace
- and
- .I pc
- and
- .I fp
- are the program counter and frame pointer.
- .I S
- is the address of a
- .I Symbol
- structure, as defined in
- .IR symbol (2),
- containing the symbol table information for the
- function owning the frame (i.e., the function that
- caused the frame to be instantiated).
- .PP
- .I Ciscframe
- and
- .I riscframe
- calculate the frame pointer associated with
- a function. They are suitable for
- programs conforming to the
- .SM CISC
- and
- .SM RISC
- stack models.
- .I Map
- is the address of a
- .I Map
- associated with the memory image of an executing
- process.
- .I Addr
- is the entry point of the desired function.
- .IR Pc ,
- .I sp
- and
- .I link
- are the program counter, stack pointer and link register of
- an execution context. As with the stack trace
- functions, these can be the current values of the
- registers or any legitimate execution context.
- The value of the frame pointer is returned. A return
- value of zero indicates an error.
- .PP
- .I Localaddr
- fills the location
- pointed to by
- .I ret
- with the address of a local variable.
- .I Map
- is the address of a
- .I Map
- associated with an executing memory image.
- .I Fn
- and
- .I var
- are pointers to the names of the function and variable of interest.
- .I Rget
- is the address of a register retrieval function.
- If both
- .I fn
- and
- .I var
- are non-zero, the frame for function
- .I fn
- is calculated and the address of the automatic or
- argument named
- .I var
- in that frame is returned.
- If
- .I var
- is zero, the address of the
- frame for function
- .I fn
- is returned.
- In all cases, the frame for the function named
- .I fn
- must be instantiated somewhere on the current stack.
- If there are multiple frames for the function (that is, if
- it is recursive), the most recent frame is used.
- The search starts from the context defined by the
- current value of the program counter and stack pointer.
- If a valid address is found,
- .I localaddr
- returns 1. A negative return indicates an error in
- resolving the address.
- .PP
- .I Symoff
- converts a virtual address to a symbolic reference. The
- string containing that reference is of
- the form `name+offset', where `name' is the name of the
- nearest symbol with an address less than
- or equal to the target address and `offset' is the hexadecimal offset
- beyond that symbol. If `offset' is zero, only the name of
- the symbol is printed. If no symbol is found within 4,096
- bytes of the address, the address is formatted as a hexadecimal
- address.
- .I Buf
- is the address of a buffer of
- .I n
- characters to receive the formatted string.
- .I Addr
- is the address to be converted.
- .I Type
- is the type code of the search space:
- .BR CTEXT ,
- .BR CDATA ,
- or
- .BR CANY .
- .I Symoff
- returns the length of the formatted string contained in
- .IR buf .
- .PP
- .I Fpformat
- converts the contents of a floating point register to a
- string.
- .I Map
- is the address of a
- .I Map
- associated with an executing process.
- .I Rp
- is the address of a
- .I Reglist
- data structure describing the desired register.
- .I Buf
- is the address of a buffer of
- .I n
- characters to hold the resulting string.
- .I Code
- must be either
- .B F
- or
- .BR f,
- selecting double
- or single precision, respectively. If
- .I code
- is
- .BR F ,
- the contents of the specified register and
- the following register
- are interpreted as a double precision floating point
- number; this
- is only meaningful for architectures that implement
- double precision floats by combining adjacent
- single precision registers.
- For
- .I code
- .BR f ,
- the specified register is formatted
- as a single precision float.
- .I Fpformat
- returns 1 if the number is successfully converted or \-1
- in the case of an error.
- .PP
- .IR Beieee80ftos ,
- .I beieeesftos
- and
- .I beieeedftos
- convert big-endian 80-bit extended, 32-bit single precision,
- and 64-bit double precision floating point values to
- a string.
- .IR Leieee80ftos ,
- .IR leieeesftos ,
- and
- .I leieeedftos
- are the little-endian counterparts.
- .I Buf
- is the address of a buffer of
- .I n
- characters to receive the formatted string.
- .I Fp
- is the address of the floating point value to be
- converted. These functions return the length of
- the resulting string.
- .PP
- .I Ieeesftos
- converts the 32-bit single precision floating point value
- .IR f ,
- to a string in
- .IR buf ,
- a buffer of
- .I n
- bytes. It returns the length of the resulting string.
- .PP
- .I Ieeedftos
- converts a 64-bit double precision floating point value
- to a character string.
- .I Buf
- is the address of a buffer of
- .I n
- characters to hold the resulting string.
- .I High
- and
- .I low
- contain the most and least significant 32 bits of
- the floating point value, respectively.
- .I Ieeedftos
- returns the number of characters in the resulting string.
- .SH SOURCE
- .B /sys/src/libmach
- .SH "SEE ALSO"
- .IR mach (2),
- .IR symbol (2),
- .IR errstr (2)
- .SH DIAGNOSTICS
- Set
- .IR errstr .
|