| 1 |
21 |
khays |
@c -*- mode: texinfo -*-
|
| 2 |
|
|
@deftypefn Extension {simple_object_read *} simple_object_open_read @
|
| 3 |
|
|
(int @var{descriptor}, off_t @var{offset}, const char *{segment_name}, @
|
| 4 |
|
|
const char **@var{errmsg}, int *@var{err})
|
| 5 |
|
|
|
| 6 |
|
|
Opens an object file for reading. Creates and returns an
|
| 7 |
|
|
@code{simple_object_read} pointer which may be passed to other
|
| 8 |
|
|
functions to extract data from the object file.
|
| 9 |
|
|
|
| 10 |
|
|
@var{descriptor} holds a file descriptor which permits reading.
|
| 11 |
|
|
|
| 12 |
|
|
@var{offset} is the offset into the file; this will be @code{0} in the
|
| 13 |
|
|
normal case, but may be a different value when reading an object file
|
| 14 |
|
|
in an archive file.
|
| 15 |
|
|
|
| 16 |
|
|
@var{segment_name} is only used with the Mach-O file format used on
|
| 17 |
|
|
Darwin aka Mac OS X. It is required on that platform, and means to
|
| 18 |
|
|
only look at sections within the segment with that name. The
|
| 19 |
|
|
parameter is ignored on other systems.
|
| 20 |
|
|
|
| 21 |
|
|
If an error occurs, this functions returns @code{NULL} and sets
|
| 22 |
|
|
@code{*@var{errmsg}} to an error string and sets @code{*@var{err}} to
|
| 23 |
|
|
an errno value or @code{0} if there is no relevant errno.
|
| 24 |
|
|
|
| 25 |
|
|
@end deftypefn
|
| 26 |
|
|
|
| 27 |
|
|
@deftypefn Extension {const char *} simple_object_find_sections @
|
| 28 |
|
|
(simple_object_read *@var{simple_object}, int (*@var{pfn}) (void *@var{data}, @
|
| 29 |
|
|
const char *@var{name}, off_t @var{offset}, off_t @var{length}), @
|
| 30 |
|
|
void *@var{data}, int *@var{err})
|
| 31 |
|
|
|
| 32 |
|
|
This function calls @var{pfn} for each section in @var{simple_object}.
|
| 33 |
|
|
It calls @var{pfn} with the section name, the offset within the file
|
| 34 |
|
|
of the section contents, and the length of the section contents. The
|
| 35 |
|
|
offset within the file is relative to the offset passed to
|
| 36 |
|
|
@code{simple_object_open_read}. The @var{data} argument to this
|
| 37 |
|
|
function is passed along to @var{pfn}.
|
| 38 |
|
|
|
| 39 |
|
|
If @var{pfn} returns @code{0}, the loop over the sections stops and
|
| 40 |
|
|
@code{simple_object_find_sections} returns. If @var{pfn} returns some
|
| 41 |
|
|
other value, the loop continues.
|
| 42 |
|
|
|
| 43 |
|
|
On success @code{simple_object_find_sections} returns. On error it
|
| 44 |
|
|
returns an error string, and sets @code{*@var{err}} to an errno value
|
| 45 |
|
|
or @code{0} if there is no relevant errno.
|
| 46 |
|
|
|
| 47 |
|
|
@end deftypefn
|
| 48 |
|
|
|
| 49 |
|
|
@deftypefn Extension {int} simple_object_find_section @
|
| 50 |
|
|
(simple_object_read *@var{simple_object} off_t *@var{offset}, @
|
| 51 |
|
|
off_t *@var{length}, const char **@var{errmsg}, int *@var{err})
|
| 52 |
|
|
|
| 53 |
|
|
Look for the section @var{name} in @var{simple_object}. This returns
|
| 54 |
|
|
information for the first section with that name.
|
| 55 |
|
|
|
| 56 |
|
|
If found, return 1 and set @code{*@var{offset}} to the offset in the
|
| 57 |
|
|
file of the section contents and set @code{*@var{length}} to the
|
| 58 |
|
|
length of the section contents. The value in @code{*@var{offset}}
|
| 59 |
|
|
will be relative to the offset passed to
|
| 60 |
|
|
@code{simple_object_open_read}.
|
| 61 |
|
|
|
| 62 |
|
|
If the section is not found, and no error occurs,
|
| 63 |
|
|
@code{simple_object_find_section} returns @code{0} and set
|
| 64 |
|
|
@code{*@var{errmsg}} to @code{NULL}.
|
| 65 |
|
|
|
| 66 |
|
|
If an error occurs, @code{simple_object_find_section} returns
|
| 67 |
|
|
@code{0}, sets @code{*@var{errmsg}} to an error message, and sets
|
| 68 |
|
|
@code{*@var{err}} to an errno value or @code{0} if there is no
|
| 69 |
|
|
relevant errno.
|
| 70 |
|
|
|
| 71 |
|
|
@end deftypefn
|
| 72 |
|
|
|
| 73 |
|
|
@deftypefn Extension {void} simple_object_release_read @
|
| 74 |
|
|
(simple_object_read *@var{simple_object})
|
| 75 |
|
|
|
| 76 |
|
|
Release all resources associated with @var{simple_object}. This does
|
| 77 |
|
|
not close the file descriptor.
|
| 78 |
|
|
|
| 79 |
|
|
@end deftypefn
|
| 80 |
|
|
|
| 81 |
|
|
@deftypefn Extension {simple_object_attributes *} simple_object_fetch_attributes @
|
| 82 |
|
|
(simple_object_read *@var{simple_object}, const char **@var{errmsg}, int *@var{err})
|
| 83 |
|
|
|
| 84 |
|
|
Fetch the attributes of @var{simple_object}. The attributes are
|
| 85 |
|
|
internal information such as the format of the object file, or the
|
| 86 |
|
|
architecture it was compiled for. This information will persist until
|
| 87 |
|
|
@code{simple_object_attributes_release} is called, even if
|
| 88 |
|
|
@var{simple_object} itself is released.
|
| 89 |
|
|
|
| 90 |
|
|
On error this returns @code{NULL}, sets @code{*@var{errmsg}} to an
|
| 91 |
|
|
error message, and sets @code{*@var{err}} to an errno value or
|
| 92 |
|
|
@code{0} if there is no relevant errno.
|
| 93 |
|
|
|
| 94 |
|
|
@end deftypefn
|
| 95 |
|
|
|
| 96 |
|
|
@deftypefn Extension {const char *} simple_object_attributes_compare @
|
| 97 |
|
|
(simple_object_attributes *@var{attrs1}, simple_object_attributes *@var{attrs2}, @
|
| 98 |
|
|
int *@var{err})
|
| 99 |
|
|
|
| 100 |
|
|
Compare @var{attrs1} and @var{attrs2}. If they could be linked
|
| 101 |
|
|
together without error, return @code{NULL}. Otherwise, return an
|
| 102 |
|
|
error message and set @code{*@var{err}} to an errno value or @code{0}
|
| 103 |
|
|
if there is no relevant errno.
|
| 104 |
|
|
|
| 105 |
|
|
@end deftypefn
|
| 106 |
|
|
|
| 107 |
|
|
@deftypefn Extension {void} simple_object_release_attributes @
|
| 108 |
|
|
(simple_object_attributes *@var{attrs})
|
| 109 |
|
|
|
| 110 |
|
|
Release all resources associated with @var{attrs}.
|
| 111 |
|
|
|
| 112 |
|
|
@end deftypefn
|
| 113 |
|
|
|
| 114 |
|
|
@deftypefn Extension {simple_object_write *} simple_object_start_write @
|
| 115 |
|
|
(simple_object_attributes @var{attrs}, const char *@var{segment_name}, @
|
| 116 |
|
|
const char **@var{errmsg}, int *@var{err})
|
| 117 |
|
|
|
| 118 |
|
|
Start creating a new object file using the object file format
|
| 119 |
|
|
described in @var{attrs}. You must fetch attribute information from
|
| 120 |
|
|
an existing object file before you can create a new one. There is
|
| 121 |
|
|
currently no support for creating an object file de novo.
|
| 122 |
|
|
|
| 123 |
|
|
@var{segment_name} is only used with Mach-O as found on Darwin aka Mac
|
| 124 |
|
|
OS X. The parameter is required on that target. It means that all
|
| 125 |
|
|
sections are created within the named segment. It is ignored for
|
| 126 |
|
|
other object file formats.
|
| 127 |
|
|
|
| 128 |
|
|
On error @code{simple_object_start_write} returns @code{NULL}, sets
|
| 129 |
|
|
@code{*@var{ERRMSG}} to an error message, and sets @code{*@var{err}}
|
| 130 |
|
|
to an errno value or @code{0} if there is no relevant errno.
|
| 131 |
|
|
|
| 132 |
|
|
@end deftypefn
|
| 133 |
|
|
|
| 134 |
|
|
@deftypefn Extension {simple_object_write_section *} simple_object_write_create_section @
|
| 135 |
|
|
(simple_object_write *@var{simple_object}, const char *@var{name}, @
|
| 136 |
|
|
unsigned int @var{align}, const char **@var{errmsg}, int *@var{err})
|
| 137 |
|
|
|
| 138 |
|
|
Add a section to @var{simple_object}. @var{name} is the name of the
|
| 139 |
|
|
new section. @var{align} is the required alignment expressed as the
|
| 140 |
|
|
number of required low-order 0 bits (e.g., 2 for alignment to a 32-bit
|
| 141 |
|
|
boundary).
|
| 142 |
|
|
|
| 143 |
|
|
The section is created as containing data, readable, not writable, not
|
| 144 |
|
|
executable, not loaded at runtime. The section is not written to the
|
| 145 |
|
|
file until @code{simple_object_write_to_file} is called.
|
| 146 |
|
|
|
| 147 |
|
|
On error this returns @code{NULL}, sets @code{*@var{errmsg}} to an
|
| 148 |
|
|
error message, and sets @code{*@var{err}} to an errno value or
|
| 149 |
|
|
@code{0} if there is no relevant errno.
|
| 150 |
|
|
|
| 151 |
|
|
@end deftypefn
|
| 152 |
|
|
|
| 153 |
|
|
@deftypefn Extension {const char *} simple_object_write_add_data @
|
| 154 |
|
|
(simple_object_write *@var{simple_object}, @
|
| 155 |
|
|
simple_object_write_section *@var{section}, const void *@var{buffer}, @
|
| 156 |
|
|
size_t @var{size}, int @var{copy}, int *@var{err})
|
| 157 |
|
|
|
| 158 |
|
|
Add data @var{buffer}/@var{size} to @var{section} in
|
| 159 |
|
|
@var{simple_object}. If @var{copy} is non-zero, the data will be
|
| 160 |
|
|
copied into memory if necessary. If @var{copy} is zero, @var{buffer}
|
| 161 |
|
|
must persist until @code{simple_object_write_to_file} is called. is
|
| 162 |
|
|
released.
|
| 163 |
|
|
|
| 164 |
|
|
On success this returns @code{NULL}. On error this returns an error
|
| 165 |
|
|
message, and sets @code{*@var{err}} to an errno value or 0 if there is
|
| 166 |
|
|
no relevant erro.
|
| 167 |
|
|
|
| 168 |
|
|
@end deftypefn
|
| 169 |
|
|
|
| 170 |
|
|
@deftypefn Extension {const char *} simple_object_write_to_file @
|
| 171 |
|
|
(simple_object_write *@var{simple_object}, int @var{descriptor}, int *@var{err})
|
| 172 |
|
|
|
| 173 |
|
|
Write the complete object file to @var{descriptor}, an open file
|
| 174 |
|
|
descriptor. This writes out all the data accumulated by calls to
|
| 175 |
|
|
@code{simple_object_write_create_section} and
|
| 176 |
|
|
@var{simple_object_write_add_data}.
|
| 177 |
|
|
|
| 178 |
|
|
This returns @code{NULL} on success. On error this returns an error
|
| 179 |
|
|
message and sets @code{*@var{err}} to an errno value or @code{0} if
|
| 180 |
|
|
there is no relevant errno.
|
| 181 |
|
|
|
| 182 |
|
|
@end deftypefn
|
| 183 |
|
|
|
| 184 |
|
|
@deftypefn Extension {void} simple_object_release_write @
|
| 185 |
|
|
(simple_object_write *@var{simple_object})
|
| 186 |
|
|
|
| 187 |
|
|
Release all resources associated with @var{simple_object}.
|
| 188 |
|
|
|
| 189 |
|
|
@end deftypefn
|