xref: /netbsd-src/external/gpl3/gcc.old/dist/libiberty/simple-object.txh (revision 1debfc3d3fad8af6f31804271c18e67f77b4d718)
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