|  | @c -*- mode: texinfo -*- | 
|  | @deftypefn Extension {simple_object_read *} simple_object_open_read @ | 
|  | (int @var{descriptor}, off_t @var{offset}, const char *{segment_name}, @ | 
|  | const char **@var{errmsg}, int *@var{err}) | 
|  |  | 
|  | Opens an object file for reading.  Creates and returns an | 
|  | @code{simple_object_read} pointer which may be passed to other | 
|  | functions to extract data from the object file. | 
|  |  | 
|  | @var{descriptor} holds a file descriptor which permits reading. | 
|  |  | 
|  | @var{offset} is the offset into the file; this will be @code{0} in the | 
|  | normal case, but may be a different value when reading an object file | 
|  | in an archive file. | 
|  |  | 
|  | @var{segment_name} is only used with the Mach-O file format used on | 
|  | Darwin aka Mac OS X.  It is required on that platform, and means to | 
|  | only look at sections within the segment with that name.  The | 
|  | parameter is ignored on other systems. | 
|  |  | 
|  | If an error occurs, this functions returns @code{NULL} and sets | 
|  | @code{*@var{errmsg}} to an error string and sets @code{*@var{err}} to | 
|  | an errno value or @code{0} if there is no relevant errno. | 
|  |  | 
|  | @end deftypefn | 
|  |  | 
|  | @deftypefn Extension {const char *} simple_object_find_sections @ | 
|  | (simple_object_read *@var{simple_object}, int (*@var{pfn}) (void *@var{data}, @ | 
|  | const char *@var{name}, off_t @var{offset}, off_t @var{length}), @ | 
|  | void *@var{data}, int *@var{err}) | 
|  |  | 
|  | This function calls @var{pfn} for each section in @var{simple_object}. | 
|  | It calls @var{pfn} with the section name, the offset within the file | 
|  | of the section contents, and the length of the section contents.  The | 
|  | offset within the file is relative to the offset passed to | 
|  | @code{simple_object_open_read}.  The @var{data} argument to this | 
|  | function is passed along to @var{pfn}. | 
|  |  | 
|  | If @var{pfn} returns @code{0}, the loop over the sections stops and | 
|  | @code{simple_object_find_sections} returns.  If @var{pfn} returns some | 
|  | other value, the loop continues. | 
|  |  | 
|  | On success @code{simple_object_find_sections} returns.  On error it | 
|  | returns an error string, and sets @code{*@var{err}} to an errno value | 
|  | or @code{0} if there is no relevant errno. | 
|  |  | 
|  | @end deftypefn | 
|  |  | 
|  | @deftypefn Extension {int} simple_object_find_section @ | 
|  | (simple_object_read *@var{simple_object} off_t *@var{offset}, @ | 
|  | off_t *@var{length}, const char **@var{errmsg}, int *@var{err}) | 
|  |  | 
|  | Look for the section @var{name} in @var{simple_object}.  This returns | 
|  | information for the first section with that name. | 
|  |  | 
|  | If found, return 1 and set @code{*@var{offset}} to the offset in the | 
|  | file of the section contents and set @code{*@var{length}} to the | 
|  | length of the section contents.  The value in @code{*@var{offset}} | 
|  | will be relative to the offset passed to | 
|  | @code{simple_object_open_read}. | 
|  |  | 
|  | If the section is not found, and no error occurs, | 
|  | @code{simple_object_find_section} returns @code{0} and set | 
|  | @code{*@var{errmsg}} to @code{NULL}. | 
|  |  | 
|  | If an error occurs, @code{simple_object_find_section} returns | 
|  | @code{0}, sets @code{*@var{errmsg}} to an error message, and sets | 
|  | @code{*@var{err}} to an errno value or @code{0} if there is no | 
|  | relevant errno. | 
|  |  | 
|  | @end deftypefn | 
|  |  | 
|  | @deftypefn Extension {void} simple_object_release_read @ | 
|  | (simple_object_read *@var{simple_object}) | 
|  |  | 
|  | Release all resources associated with @var{simple_object}.  This does | 
|  | not close the file descriptor. | 
|  |  | 
|  | @end deftypefn | 
|  |  | 
|  | @deftypefn Extension {simple_object_attributes *} simple_object_fetch_attributes @ | 
|  | (simple_object_read *@var{simple_object}, const char **@var{errmsg}, int *@var{err}) | 
|  |  | 
|  | Fetch the attributes of @var{simple_object}.  The attributes are | 
|  | internal information such as the format of the object file, or the | 
|  | architecture it was compiled for.  This information will persist until | 
|  | @code{simple_object_attributes_release} is called, even if | 
|  | @var{simple_object} itself is released. | 
|  |  | 
|  | On error this returns @code{NULL}, sets @code{*@var{errmsg}} to an | 
|  | error message, and sets @code{*@var{err}} to an errno value or | 
|  | @code{0} if there is no relevant errno. | 
|  |  | 
|  | @end deftypefn | 
|  |  | 
|  | @deftypefn Extension {const char *} simple_object_attributes_compare @ | 
|  | (simple_object_attributes *@var{attrs1}, simple_object_attributes *@var{attrs2}, @ | 
|  | int *@var{err}) | 
|  |  | 
|  | Compare @var{attrs1} and @var{attrs2}.  If they could be linked | 
|  | together without error, return @code{NULL}.  Otherwise, return an | 
|  | error message and set @code{*@var{err}} to an errno value or @code{0} | 
|  | if there is no relevant errno. | 
|  |  | 
|  | @end deftypefn | 
|  |  | 
|  | @deftypefn Extension {void} simple_object_release_attributes @ | 
|  | (simple_object_attributes *@var{attrs}) | 
|  |  | 
|  | Release all resources associated with @var{attrs}. | 
|  |  | 
|  | @end deftypefn | 
|  |  | 
|  | @deftypefn Extension {simple_object_write *} simple_object_start_write @ | 
|  | (simple_object_attributes @var{attrs}, const char *@var{segment_name}, @ | 
|  | const char **@var{errmsg}, int *@var{err}) | 
|  |  | 
|  | Start creating a new object file using the object file format | 
|  | described in @var{attrs}.  You must fetch attribute information from | 
|  | an existing object file before you can create a new one.  There is | 
|  | currently no support for creating an object file de novo. | 
|  |  | 
|  | @var{segment_name} is only used with Mach-O as found on Darwin aka Mac | 
|  | OS X.  The parameter is required on that target.  It means that all | 
|  | sections are created within the named segment.  It is ignored for | 
|  | other object file formats. | 
|  |  | 
|  | On error @code{simple_object_start_write} returns @code{NULL}, sets | 
|  | @code{*@var{ERRMSG}} to an error message, and sets @code{*@var{err}} | 
|  | to an errno value or @code{0} if there is no relevant errno. | 
|  |  | 
|  | @end deftypefn | 
|  |  | 
|  | @deftypefn Extension {simple_object_write_section *} simple_object_write_create_section @ | 
|  | (simple_object_write *@var{simple_object}, const char *@var{name}, @ | 
|  | unsigned int @var{align}, const char **@var{errmsg}, int *@var{err}) | 
|  |  | 
|  | Add a section to @var{simple_object}.  @var{name} is the name of the | 
|  | new section.  @var{align} is the required alignment expressed as the | 
|  | number of required low-order 0 bits (e.g., 2 for alignment to a 32-bit | 
|  | boundary). | 
|  |  | 
|  | The section is created as containing data, readable, not writable, not | 
|  | executable, not loaded at runtime.  The section is not written to the | 
|  | file until @code{simple_object_write_to_file} is called. | 
|  |  | 
|  | On error this returns @code{NULL}, sets @code{*@var{errmsg}} to an | 
|  | error message, and sets @code{*@var{err}} to an errno value or | 
|  | @code{0} if there is no relevant errno. | 
|  |  | 
|  | @end deftypefn | 
|  |  | 
|  | @deftypefn Extension {const char *} simple_object_write_add_data @ | 
|  | (simple_object_write *@var{simple_object}, @ | 
|  | simple_object_write_section *@var{section}, const void *@var{buffer}, @ | 
|  | size_t @var{size}, int @var{copy}, int *@var{err}) | 
|  |  | 
|  | Add data @var{buffer}/@var{size} to @var{section} in | 
|  | @var{simple_object}.  If @var{copy} is non-zero, the data will be | 
|  | copied into memory if necessary.  If @var{copy} is zero, @var{buffer} | 
|  | must persist until @code{simple_object_write_to_file} is called.  is | 
|  | released. | 
|  |  | 
|  | On success this returns @code{NULL}.  On error this returns an error | 
|  | message, and sets @code{*@var{err}} to an errno value or 0 if there is | 
|  | no relevant erro. | 
|  |  | 
|  | @end deftypefn | 
|  |  | 
|  | @deftypefn Extension {const char *} simple_object_write_to_file @ | 
|  | (simple_object_write *@var{simple_object}, int @var{descriptor}, int *@var{err}) | 
|  |  | 
|  | Write the complete object file to @var{descriptor}, an open file | 
|  | descriptor.  This writes out all the data accumulated by calls to | 
|  | @code{simple_object_write_create_section} and | 
|  | @var{simple_object_write_add_data}. | 
|  |  | 
|  | This returns @code{NULL} on success.  On error this returns an error | 
|  | message and sets @code{*@var{err}} to an errno value or @code{0} if | 
|  | there is no relevant errno. | 
|  |  | 
|  | @end deftypefn | 
|  |  | 
|  | @deftypefn Extension {void} simple_object_release_write @ | 
|  | (simple_object_write *@var{simple_object}) | 
|  |  | 
|  | Release all resources associated with @var{simple_object}. | 
|  |  | 
|  | @end deftypefn |