123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457 |
- '\" t
- .\" Manual page created with latex2man on Thu Aug 16 09:44:45 MDT 2007
- .\" NOTE: This file is generated, DO NOT EDIT.
- .de Vb
- .ft CW
- .nf
- ..
- .de Ve
- .ft R
- .fi
- ..
- .TH "UNW\\_CREATE\\_ADDR\\_SPACE" "3" "16 August 2007" "Programming Library " "Programming Library "
- .SH NAME
- unw_create_addr_space
- \-\- create address space for remote unwinding
- .PP
- .SH SYNOPSIS
- .PP
- #include <libunwind.h>
- .br
- .PP
- unw_addr_space_t
- unw_create_addr_space(unw_accessors_t *ap,
- int
- byteorder);
- .br
- .PP
- .SH DESCRIPTION
- .PP
- The unw_create_addr_space()
- routine creates a new unwind
- address\-space and initializes it based on the call\-back routines
- passed via the ap
- pointer and the specified byteorder\&.
- The call\-back routines are described in detail below. The
- byteorder
- can be set to 0 to request the default byte\-order of
- the unwind target. To request a particular byte\-order,
- byteorder
- can be set to any constant defined by
- <endian.h>\&.
- In particular, __LITTLE_ENDIAN
- would
- request little\-endian byte\-order and __BIG_ENDIAN
- would
- request big\-endian byte\-order. Whether or not a particular byte\-order
- is supported depends on the target platform.
- .PP
- .SH CALL\-BACK ROUTINES
- .PP
- Libunwind
- uses a set of call\-back routines to access the
- information it needs to unwind a chain of stack\-frames. These
- routines are specified via the ap
- argument, which points to a
- variable of type unw_accessors_t\&.
- The contents of this
- variable is copied into the newly\-created address space, so the
- variable must remain valid only for the duration of the call to
- unw_create_addr_space().
- .PP
- The first argument to every call\-back routine is an address\-space
- identifier (as)
- and the last argument is an arbitrary,
- application\-specified void\-pointer (arg).
- When invoking a
- call\-back routine, libunwind
- sets the as
- argument to the
- address\-space on whose behalf the invocation is made and the arg
- argument to the value that was specified when
- unw_init_remote(3)
- was called.
- .PP
- The synopsis and a detailed description of every call\-back routine
- follows below.
- .PP
- .SS CALL\-BACK ROUTINE SYNOPSIS
- .PP
- int
- find_proc_info(unw_addr_space_t
- as,
- .br
- \fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fPunw_word_t
- ip,
- unw_proc_info_t *pip,
- .br
- \fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fPint
- need_unwind_info,
- void *arg);
- .br
- void
- put_unwind_info(unw_addr_space_t
- as,
- .br
- \fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fPunw_proc_info_t *pip,
- void *arg);
- .br
- int
- get_dyn_info_list_addr(unw_addr_space_t
- as,
- .br
- \fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fPunw_word_t *dilap,
- void *arg);
- .br
- int
- access_mem(unw_addr_space_t
- as,
- .br
- \fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fPunw_word_t
- addr,
- unw_word_t *valp,
- .br
- \fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fPint
- write,
- void *arg);
- .br
- int
- access_reg(unw_addr_space_t
- as,
- .br
- \fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fPunw_regnum_t
- regnum,
- unw_word_t *valp,
- .br
- \fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fPint
- write,
- void *arg);
- .br
- int
- access_fpreg(unw_addr_space_t
- as,
- .br
- \fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fPunw_regnum_t
- regnum,
- unw_fpreg_t *fpvalp,
- .br
- \fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fPint
- write,
- void *arg);
- .br
- int
- resume(unw_addr_space_t
- as,
- .br
- \fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fPunw_cursor_t *cp,
- void *arg);
- .br
- int
- get_proc_name(unw_addr_space_t
- as,
- .br
- \fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fPunw_word_t
- addr,
- char *bufp,
- .br
- \fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fPsize_t
- buf_len,
- unw_word_t *offp,
- .br
- \fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fP\fB \fPvoid *arg);
- .br
- .PP
- .SS FIND_PROC_INFO
- .PP
- Libunwind
- invokes the find_proc_info()
- call\-back to
- locate the information need to unwind a particular procedure. The
- ip
- argument is an instruction\-address inside the procedure whose
- information is needed. The pip
- argument is a pointer to the
- variable used to return the desired information. The type of this
- variable is unw_proc_info_t\&.
- See
- unw_get_proc_info(3)
- for details. Argument
- need_unwind_info
- is zero if the call\-back does not need to
- provide values for the following members in the
- unw_proc_info_t
- structure: format,
- unwind_info_size,
- and unwind_info\&.
- If
- need_unwind_info
- is non\-zero, valid values need to be returned
- in these members. Furthermore, the contents of the memory addressed
- by the unwind_info
- member must remain valid until the info is
- released via the put_unwind_info
- call\-back (see below).
- .PP
- On successful completion, the find_proc_info()
- call\-back must
- return zero. Otherwise, the negative value of one of the
- unw_error_t
- error\-codes may be returned. In particular, this
- call\-back may return \-UNW_ESTOPUNWIND
- to signal the end of
- the frame\-chain.
- .PP
- .SS PUT_UNWIND_INFO
- .PP
- Libunwind
- invokes the put_unwind_info()
- call\-back to
- release the resources (such as memory) allocated by a previous call to
- find_proc_info()
- with the need_unwind_info
- argument
- set to a non\-zero value. The pip
- argument has the same value as
- the argument of the same name in the previous matching call to
- find_proc_info().
- Note that libunwind
- does \fInot\fP
- invoke put_unwind_info
- for calls to find_proc_info()
- with a zero need_unwind_info
- argument.
- .PP
- .SS GET_DYN_INFO_LIST_ADDR
- .PP
- Libunwind
- invokes the get_dyn_info_list_addr()
- call\-back to obtain the address of the head of the dynamic unwind\-info
- registration list. The variable stored at the returned address must
- have a type of unw_dyn_info_list_t
- (see
- _U_dyn_register(3)).
- The dliap
- argument is a pointer
- to a variable of type unw_word_t
- which is used to return the
- address of the dynamic unwind\-info registration list. If no dynamic
- unwind\-info registration list exist, the value pointed to by
- dliap
- must be cleared to zero. Libunwind
- will cache the
- value returned by get_dyn_info_list_addr()
- if caching is
- enabled for the given address\-space. The cache can be cleared with a
- call to unw_flush_cache().
- .PP
- On successful completion, the get_dyn_info_list_addr()
- call\-back must return zero. Otherwise, the negative value of one of
- the unw_error_t
- error\-codes may be returned.
- .PP
- .SS ACCESS_MEM
- .PP
- Libunwind
- invokes the access_mem()
- call\-back to read
- from or write to a word of memory in the target address\-space. The
- address of the word to be accessed is passed in argument addr\&.
- To read memory, libunwind
- sets argument write
- to zero and
- valp
- to point to the word that receives the read value. To
- write memory, libunwind
- sets argument write
- to a non\-zero
- value and valp
- to point to the word that contains the value to
- be written. The word that valp
- points to is always in the
- byte\-order of the host\-platform, regardless of the byte\-order of the
- target. In other words, it is the responsibility of the call\-back
- routine to convert between the target\&'s and the host\&'s byte\-order, if
- necessary.
- .PP
- On successful completion, the access_mem()
- call\-back must return zero. Otherwise, the negative value of one of
- the unw_error_t
- error\-codes may be returned.
- .PP
- .SS ACCESS_REG
- .PP
- Libunwind
- invokes the access_reg()
- call\-back to read
- from or write to a scalar (non\-floating\-point) CPU register. The
- index of the register to be accessed is passed in argument
- regnum\&.
- To read a register, libunwind
- sets argument
- write
- to zero and valp
- to point to the word that receives
- the read value. To write a register, libunwind
- sets argument
- write
- to a non\-zero value and valp
- to point to the word
- that contains the value to be written. The word that valp
- points to is always in the byte\-order of the host\-platform, regardless
- of the byte\-order of the target. In other words, it is the
- responsibility of the call\-back routine to convert between the
- target\&'s and the host\&'s byte\-order, if necessary.
- .PP
- On successful completion, the access_reg()
- call\-back must
- return zero. Otherwise, the negative value of one of the
- unw_error_t
- error\-codes may be returned.
- .PP
- .SS ACCESS_FPREG
- .PP
- Libunwind
- invokes the access_fpreg()
- call\-back to read
- from or write to a floating\-point CPU register. The index of the
- register to be accessed is passed in argument regnum\&.
- To read a
- register, libunwind
- sets argument write
- to zero and
- fpvalp
- to point to a variable of type unw_fpreg_t
- that
- receives the read value. To write a register, libunwind
- sets
- argument write
- to a non\-zero value and fpvalp
- to point to
- the variable of type unw_fpreg_t
- that contains the value to
- be written. The word that fpvalp
- points to is always in the
- byte\-order of the host\-platform, regardless of the byte\-order of the
- target. In other words, it is the responsibility of the call\-back
- routine to convert between the target\&'s and the host\&'s byte\-order, if
- necessary.
- .PP
- On successful completion, the access_fpreg()
- call\-back must
- return zero. Otherwise, the negative value of one of the
- unw_error_t
- error\-codes may be returned.
- .PP
- .SS RESUME
- .PP
- Libunwind
- invokes the resume()
- call\-back to resume
- execution in the target address space. Argument cp
- is the
- unwind\-cursor that identifies the stack\-frame in which execution
- should resume. By the time libunwind
- invokes the resume
- call\-back, it has already established the desired machine\- and
- memory\-state via calls to the access_reg(),
- access_fpreg,
- and access_mem()
- call\-backs. Thus, all
- the call\-back needs to do is perform whatever action is needed to
- actually resume execution.
- .PP
- The resume
- call\-back is invoked only in response to a call to
- unw_resume(3),
- so applications which never invoke
- unw_resume(3)
- need not define the resume
- callback.
- .PP
- On successful completion, the resume()
- call\-back must return
- zero. Otherwise, the negative value of one of the
- unw_error_t
- error\-codes may be returned. As a special case,
- when resuming execution in the local address space, the call\-back will
- not return on success.
- .PP
- .SS GET_PROC_NAME
- .PP
- Libunwind
- invokes the get_proc_name()
- call\-back to
- obtain the procedure\-name of a static (not dynamically generated)
- procedure. Argument addr
- is an instruction\-address within the
- procedure whose name is to be obtained. The bufp
- argument is a
- pointer to a character\-buffer used to return the procedure name. The
- size of this buffer is specified in argument buf_len\&.
- The
- returned name must be terminated by a NUL character. If the
- procedure\&'s name is longer than buf_len
- bytes, it must be
- truncated to buf_len\-1
- bytes, with the last byte in the
- buffer set to the NUL character and \-UNW_ENOMEM
- must be
- returned. Argument offp
- is a pointer to a word which is used to
- return the byte\-offset relative to the start of the procedure whose
- name is being returned. For example, if procedure foo()
- starts
- at address 0x40003000, then invoking get_proc_name()
- with
- addr
- set to 0x40003080 should return a value of 0x80 in the word
- pointed to by offp
- (assuming the procedure is at least 0x80
- bytes long).
- .PP
- On successful completion, the get_proc_name()
- call\-back must
- return zero. Otherwise, the negative value of one of the
- unw_error_t
- error\-codes may be returned.
- .PP
- .SH RETURN VALUE
- .PP
- On successful completion, unw_create_addr_space()
- returns a
- non\-NULL
- value that represents the newly created
- address\-space. Otherwise, NULL
- is returned.
- .PP
- .SH THREAD AND SIGNAL SAFETY
- .PP
- unw_create_addr_space()
- is thread\-safe but \fInot\fP
- safe to use from a signal handler.
- .PP
- .SH SEE ALSO
- .PP
- _U_dyn_register(3),
- libunwind(3),
- unw_destroy_addr_space(3),
- unw_get_proc_info(3),
- unw_init_remote(3),
- unw_resume(3)
- .PP
- .SH AUTHOR
- .PP
- David Mosberger\-Tang
- .br
- Email: \fBdmosberger@gmail.com\fP
- .br
- WWW: \fBhttp://www.nongnu.org/libunwind/\fP\&.
- .\" NOTE: This file is generated, DO NOT EDIT.
|