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