Provided by: libunwind-dev_1.2.1-8ubuntu0.1_amd64 bug

NAME

       unw_create_addr_space -- create address space for remote unwinding

SYNOPSIS

       #include <libunwind.h>

       unw_addr_space_t unw_create_addr_space(unw_accessors_t *ap, int byteorder);

DESCRIPTION

       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.

CALL-BACK ROUTINES

       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().

       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.

       The synopsis and a detailed description of every call-back routine follows below.

   CALL-BACK ROUTINE SYNOPSIS
       int find_proc_info(unw_addr_space_t as,
                       unw_word_t ip, unw_proc_info_t *pip,
                       int need_unwind_info, void *arg);
       void put_unwind_info(unw_addr_space_t as,
                       unw_proc_info_t *pip, void *arg);
       int get_dyn_info_list_addr(unw_addr_space_t as,
                       unw_word_t *dilap, void *arg);
       int access_mem(unw_addr_space_t as,
                       unw_word_t addr, unw_word_t *valp,
                       int write, void *arg);
       int access_reg(unw_addr_space_t as,
                       unw_regnum_t regnum, unw_word_t *valp,
                       int write, void *arg);
       int access_fpreg(unw_addr_space_t as,
                       unw_regnum_t regnum, unw_fpreg_t *fpvalp,
                       int write, void *arg);
       int resume(unw_addr_space_t as,
                       unw_cursor_t *cp, void *arg);
       int get_proc_name(unw_addr_space_t as,
                       unw_word_t addr, char *bufp,
                       size_t buf_len, unw_word_t *offp,
                       void *arg);

   FIND_PROC_INFO
       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).

       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.

   PUT_UNWIND_INFO
       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
       not  invoke  put_unwind_info  for  calls  to find_proc_info() with a zero need_unwind_info
       argument.

   GET_DYN_INFO_LIST_ADDR
       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().

       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.

   ACCESS_MEM
       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.

       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.

   ACCESS_REG
       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.

       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.

   ACCESS_FPREG
       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.

       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.

   RESUME
       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.

       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.

       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.

   GET_PROC_NAME
       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).

       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.

RETURN VALUE

       On successful completion, unw_create_addr_space() returns a non-NULL value that represents
       the newly created address-space. Otherwise, NULL is returned.

THREAD AND SIGNAL SAFETY

       unw_create_addr_space() is thread-safe but not safe to use from a signal handler.

SEE ALSO

       _U_dyn_register(3),    libunwind(3),    unw_destroy_addr_space(3),   unw_get_proc_info(3),
       unw_init_remote(3), unw_resume(3)

AUTHOR

       David Mosberger-Tang
       Email: dmosberger@gmail.com
       WWW: http://www.nongnu.org/libunwind/.