xref: /freebsd/contrib/elftoolchain/elfcopy/elfcopy.1 (revision ae500c1ff8974130f7f2692772cf288b90349e0d)
1a85fe12eSEd Maste.\" Copyright (c) 2008-2009,2011 Joseph Koshy.  All rights reserved.
2a85fe12eSEd Maste.\"
3a85fe12eSEd Maste.\" Redistribution and use in source and binary forms, with or without
4a85fe12eSEd Maste.\" modification, are permitted provided that the following conditions
5a85fe12eSEd Maste.\" are met:
6a85fe12eSEd Maste.\" 1. Redistributions of source code must retain the above copyright
7a85fe12eSEd Maste.\"    notice, this list of conditions and the following disclaimer.
8a85fe12eSEd Maste.\" 2. Redistributions in binary form must reproduce the above copyright
9a85fe12eSEd Maste.\"    notice, this list of conditions and the following disclaimer in the
10a85fe12eSEd Maste.\"    documentation and/or other materials provided with the distribution.
11a85fe12eSEd Maste.\"
12a85fe12eSEd Maste.\" This software is provided by Joseph Koshy ``as is'' and
13a85fe12eSEd Maste.\" any express or implied warranties, including, but not limited to, the
14a85fe12eSEd Maste.\" implied warranties of merchantability and fitness for a particular purpose
15a85fe12eSEd Maste.\" are disclaimed.  in no event shall Joseph Koshy be liable
16a85fe12eSEd Maste.\" for any direct, indirect, incidental, special, exemplary, or consequential
17a85fe12eSEd Maste.\" damages (including, but not limited to, procurement of substitute goods
18a85fe12eSEd Maste.\" or services; loss of use, data, or profits; or business interruption)
19a85fe12eSEd Maste.\" however caused and on any theory of liability, whether in contract, strict
20a85fe12eSEd Maste.\" liability, or tort (including negligence or otherwise) arising in any way
21a85fe12eSEd Maste.\" out of the use of this software, even if advised of the possibility of
22a85fe12eSEd Maste.\" such damage.
23a85fe12eSEd Maste.\"
24*ae500c1fSEd Maste.\" $Id: elfcopy.1 3642 2018-10-14 14:24:28Z jkoshy $
25a85fe12eSEd Maste.\"
26715d1396SEd Maste.Dd August 30, 2017
27a85fe12eSEd Maste.Dt ELFCOPY 1
28*ae500c1fSEd Maste.Os
29a85fe12eSEd Maste.Sh NAME
30839529caSEd Maste.Nm elfcopy ,
31839529caSEd Maste.Nm objcopy
32a85fe12eSEd Maste.Nd copy and translate object files
33a85fe12eSEd Maste.Sh SYNOPSIS
34a85fe12eSEd Maste.Nm
35a85fe12eSEd Maste.Op Fl I Ar objformat | Fl s Ar objformat | Fl -input-target= Ns Ar objformat
36a85fe12eSEd Maste.Op Fl K Ar symbolname | Fl -keep-symbol= Ns Ar symbolname
37a85fe12eSEd Maste.Op Fl L Ar symbolname | Fl -localize-symbol= Ns Ar symbolname
38a85fe12eSEd Maste.Op Fl N Ar symbolname | Fl -strip-symbol= Ns Ar symbolname
39a85fe12eSEd Maste.Op Fl O Ar objformat | Fl -output-target= Ns Ar objformat
40a85fe12eSEd Maste.Op Fl R Ar sectionname | Fl -remove-section= Ns Ar sectionname
41a85fe12eSEd Maste.Op Fl S | Fl -strip-all
42a85fe12eSEd Maste.Op Fl V | Fl -version
43a85fe12eSEd Maste.Op Fl W Ar symbolname | Fl -weaken-symbol= Ns Ar symbolname
44a85fe12eSEd Maste.Op Fl X | Fl -discard-locals
45a85fe12eSEd Maste.Op Fl d | Fl g | Fl -strip-debug
46a85fe12eSEd Maste.Op Fl h | Fl -help
47a85fe12eSEd Maste.Op Fl j Ar sectionname | Fl -only-section= Ns Ar sectionname
48a85fe12eSEd Maste.Op Fl p | Fl -preserve-dates
49a85fe12eSEd Maste.Op Fl w | Fl -wildcard
50a85fe12eSEd Maste.Op Fl x | Fl -discard-all
5195fd7f26SEd Maste.Op Fl -add-gnu-debuglink Ns = Ns Ar filename
52a85fe12eSEd Maste.Op Fl -add-section Ar sectionname Ns = Ns Ar filename
53a85fe12eSEd Maste.Oo
54a85fe12eSEd Maste.Fl -adjust-section-vma Ar section Ns {+|-|=} Ns Ar val |
55a85fe12eSEd Maste.Fl -change-section-address Ar section Ns {+|-|=} Ns Ar val
56a85fe12eSEd Maste.Oc
57a85fe12eSEd Maste.Oo
58a85fe12eSEd Maste.Fl -adjust-start Ns = Ns Ar increment |
59a85fe12eSEd Maste.Fl -change-start Ns = Ns Ar increment
60a85fe12eSEd Maste.Oc
61a85fe12eSEd Maste.Oo
62a85fe12eSEd Maste.Fl -adjust-vma Ns = Ns Ar increment |
63a85fe12eSEd Maste.Fl -change-addresses Ns = Ns Ar increment
64a85fe12eSEd Maste.Oc
65a85fe12eSEd Maste.Op Fl -adjust-warnings | Fl -change-warnings
66a85fe12eSEd Maste.Op Fl -change-section-lma Ar section Ns {+|-|=} Ns Ar val
67a85fe12eSEd Maste.Op Fl -change-section-vma Ar section Ns {+|-|=} Ns Ar val
6867d97fe7SEd Maste.Op Fl -extract-dwo
69a85fe12eSEd Maste.Op Fl -gap-fill Ns = Ns Ar val
70b6b6f9ccSEd Maste.Op Fl -globalize-symbol Ns = Ns ar symbolname
71b6b6f9ccSEd Maste.Op Fl -globalize-symbols Ns = Ns Ar filename
7267d97fe7SEd Maste.Op Fl -localize-hidden
73b6b6f9ccSEd Maste.Op Fl -localize-symbols Ns = Ns Ar filename
74a85fe12eSEd Maste.Op Fl -no-adjust-warnings | Fl -no-change-warnings
75a85fe12eSEd Maste.Op Fl -only-keep-debug
76a85fe12eSEd Maste.Op Fl -pad-to Ns = Ns Ar address
77a85fe12eSEd Maste.Op Fl -prefix-alloc-sections Ns = Ns Ar string
78a85fe12eSEd Maste.Op Fl -prefix-sections Ns = Ns Ar string
79a85fe12eSEd Maste.Op Fl -prefix-symbols Ns = Ns Ar string
80a85fe12eSEd Maste.Op Fl -rename-section Ar oldname Ns = Ns Ar newname Ns Op Ar ,flags
81a85fe12eSEd Maste.Op Fl -set-section-flags Ar sectionname Ns = Ns Ar flags
82a85fe12eSEd Maste.Op Fl -set-start Ns = Ns Ar address
83a85fe12eSEd Maste.Op Fl -srec-forceS3
84a85fe12eSEd Maste.Op Fl -srec-len Ns = Ns Ar val
8567d97fe7SEd Maste.Op Fl -strip-dwo
86431bcfcdSEd Maste.Op Fl -strip-symbols= Ns Ar filename
87a85fe12eSEd Maste.Op Fl -strip-unneeded
88a85fe12eSEd Maste.Ar infile
89a85fe12eSEd Maste.Op Ar outfile
90a85fe12eSEd Maste.Sh DESCRIPTION
91a85fe12eSEd MasteThe
92a85fe12eSEd Maste.Nm
93839529caSEd Masteutility copies the content of the binary object named by argument
94a85fe12eSEd Maste.Ar infile
95a85fe12eSEd Masteto that named by argument
96a85fe12eSEd Maste.Ar outfile ,
97a85fe12eSEd Mastetransforming it according to the command line options specified.
98a85fe12eSEd MasteIf argument
99a85fe12eSEd Maste.Ar outfile
100a85fe12eSEd Masteis not specified,
101a85fe12eSEd Maste.Nm
102a85fe12eSEd Mastewill create a temporary file and will subsequently rename it as
103a85fe12eSEd Maste.Ar infile .
104a85fe12eSEd Maste.Pp
105a85fe12eSEd MasteThe
106a85fe12eSEd Maste.Nm
107a85fe12eSEd Masteutility supports the following options:
108a85fe12eSEd Maste.Bl -tag -width indent
109a85fe12eSEd Maste.It Fl I Ar objformat | Fl s Ar objformat | Fl -input-target= Ns Ar objformat
110a85fe12eSEd MasteSpecify that the input file named by the argument
111a85fe12eSEd Maste.Ar infile
112a85fe12eSEd Masteis in the object format specified by the argument
113a85fe12eSEd Maste.Ar objformat .
114a85fe12eSEd Maste.It Fl K Ar symbolname | Fl -keep-symbol= Ns Ar symbolname
115a85fe12eSEd MasteCopy the symbol named by argument
116a85fe12eSEd Maste.Ar symbolname
117a85fe12eSEd Masteto the output.
118a85fe12eSEd Maste.It Fl L Ar symbolname | Fl -localize-symbol= Ns Ar symbolname
119a85fe12eSEd MasteMake the symbol named by argument
120a85fe12eSEd Maste.Ar symbolname
121a85fe12eSEd Mastelocal to the output file.
122a85fe12eSEd Maste.It Fl N Ar symbol | Fl -strip-symbol= Ns Ar symbolname
123a85fe12eSEd MasteDo not copy the symbol named by argument
124a85fe12eSEd Maste.Ar symbolname
125a85fe12eSEd Masteto the output.
126a85fe12eSEd Maste.It Fl O Ar objformat | Fl -output-target= Ns Ar objformat
127a85fe12eSEd MasteWrite the output file using the object format specified in argument
128a85fe12eSEd Maste.Ar objformat .
129839529caSEd MasteThe argument
130839529caSEd Maste.Ar objformat
131839529caSEd Masteshould be one of the target names recognized by
132839529caSEd Maste.Xr elftc_bfd_find_target 3 .
133a85fe12eSEd Maste.It Fl R Ar sectionname | Fl -remove-section= Ns Ar sectionname
134a85fe12eSEd MasteRemove any section with name
135a85fe12eSEd Maste.Ar sectionname
136a85fe12eSEd Mastefrom the output file.
137a85fe12eSEd Maste.It Fl S | Fl -strip-all
138a85fe12eSEd MasteDo not copy symbol and relocation information to the target file.
139a85fe12eSEd Maste.It Fl V | Fl -version
140a85fe12eSEd MastePrint a version identifier and exit.
141a85fe12eSEd Maste.It Fl W Ar symbolname | Fl -weaken-symbol= Ns Ar symbolname
142a85fe12eSEd MasteMark the symbol named by argument
143a85fe12eSEd Maste.Ar symbolname
144a85fe12eSEd Masteas weak in the output.
145a85fe12eSEd Maste.It Fl X | Fl -discard-locals
146a85fe12eSEd MasteDo not copy compiler generated local symbols to the output.
147a85fe12eSEd Maste.It Fl d | Fl g | Fl -strip-debug
148a85fe12eSEd MasteDo not copy debugging information to the target file.
149a85fe12eSEd Maste.It Fl h | Fl -help
150a85fe12eSEd MasteDisplay a help message and exit.
151a85fe12eSEd Maste.It Fl j Ar sectionname | Fl -only-section= Ns Ar sectionname
152a85fe12eSEd MasteCopy only the section named by argument
153a85fe12eSEd Maste.Ar sectionname
154a85fe12eSEd Masteto the output.
155a85fe12eSEd Maste.It Fl p | Fl -preserve-dates
156a85fe12eSEd MasteSet the access and modification times of the output file to the
157a85fe12eSEd Mastesame as those of the input.
158a85fe12eSEd Maste.It Fl w | Fl -wildcard
159a85fe12eSEd MasteUse shell-style patterns to name symbols.
160a85fe12eSEd MasteThe following meta-characters are recognized in patterns:
161a85fe12eSEd Maste.Bl -tag -width "...." -compact
162a85fe12eSEd Maste.It Li !
163a85fe12eSEd MasteIf this is the first character of the pattern, invert the sense of the
164a85fe12eSEd Mastepattern match.
165a85fe12eSEd Maste.It Li *
166a85fe12eSEd MasteMatches any string of characters in a symbol name.
167a85fe12eSEd Maste.It Li ?
168a85fe12eSEd MasteMatches zero or one character in a symbol name.
169a85fe12eSEd Maste.It Li [
170a85fe12eSEd MasteMark the start of a character class.
171a85fe12eSEd Maste.It Li \e
172a85fe12eSEd MasteRemove the special meaning of the next character in the pattern.
173a85fe12eSEd Maste.It Li ]
174a85fe12eSEd MasteMark the end of a character class.
175a85fe12eSEd Maste.El
176a85fe12eSEd Maste.It Fl x | Fl -discard-all
177a85fe12eSEd MasteDo not copy non-global symbols to the output.
17895fd7f26SEd Maste.It Fl -add-gnu-debuglink Ns = Ns Ar filename
17995fd7f26SEd MasteCreate a .gnu_debuglink section in the output file that references the
18095fd7f26SEd Mastedebug data in
18195fd7f26SEd Maste.Ar filename .
182a85fe12eSEd Maste.It Fl -add-section Ar sectionname Ns = Ns Ar filename
183a85fe12eSEd MasteAdd a new section to the output file with name
184a85fe12eSEd Maste.Ar sectionname .
185a85fe12eSEd MasteThe contents of the section are taken from the file named by
186a85fe12eSEd Masteargument
187a85fe12eSEd Maste.Ar filename .
188a85fe12eSEd MasteThe size of the section will be the number of bytes in file
189a85fe12eSEd Maste.Ar filename .
190a85fe12eSEd Maste.It Xo
191a85fe12eSEd Maste.Fl -adjust-section-vma Ar section Ns {+|-|=} Ns Ar val |
192a85fe12eSEd Maste.Fl -change-section-address Ar section Ns {+|-|=} Ns Ar val
193a85fe12eSEd Maste.Xc
194a85fe12eSEd MasteDepending on the operator specified, increase, decrease or set both
195a85fe12eSEd Mastethe virtual memory address and the load memory address of the section
196a85fe12eSEd Mastenamed by the argument
197a85fe12eSEd Maste.Ar section .
198a85fe12eSEd MasteThe argument
199a85fe12eSEd Maste.Ar val
200a85fe12eSEd Mastespecifies the desired increment, decrement or new value for the
201a85fe12eSEd Masteaddress.
202a85fe12eSEd Maste.It Xo
203a85fe12eSEd Maste.Fl -adjust-start Ns = Ns Ar increment |
204a85fe12eSEd Maste.Fl -change-start Ns = Ns Ar increment
205a85fe12eSEd Maste.Xc
206a85fe12eSEd MasteIncrease the entry point address of the output ELF object by the value
207a85fe12eSEd Mastespecified in the argument
208a85fe12eSEd Maste.Ar increment .
209a85fe12eSEd Maste.It Xo
210a85fe12eSEd Maste.Fl -adjust-vma Ns = Ns Ar increment |
211a85fe12eSEd Maste.Fl -change-addresses Ns = Ns Ar increment
212a85fe12eSEd Maste.Xc
213a85fe12eSEd MasteIncrease the virtual memory address and the load memory address of all
214a85fe12eSEd Mastesections by the value specified by the argument
215a85fe12eSEd Maste.Ar increment .
216a85fe12eSEd Maste.It Fl -adjust-warnings | Fl -change-warnings
217a85fe12eSEd MasteIssue a warning if the section specified by the options
218a85fe12eSEd Maste.Fl -change-section-address ,
219a85fe12eSEd Maste.Fl -change-section-lma
220a85fe12eSEd Masteor
221a85fe12eSEd Maste.Fl -change-section-vma
222a85fe12eSEd Mastedoes not exist in the input object.
223a85fe12eSEd MasteThis is the default.
224a85fe12eSEd Maste.It Fl -change-section-lma Ar section Ns {+|-|=} Ns Ar val
225a85fe12eSEd MasteChange or set the load memory address of the section named by the
226a85fe12eSEd Masteargument
227a85fe12eSEd Maste.Ar section .
228a85fe12eSEd MasteDepending on the operator specified, the value in argument
229a85fe12eSEd Maste.Ar val
230a85fe12eSEd Mastewill be used as an increment, a decrement or as the new value
231a85fe12eSEd Masteof the load memory address.
232a85fe12eSEd Maste.It Fl -change-section-vma Ar section Ns {+|-|=} Ns Ar val
233a85fe12eSEd MasteChange or set the virtual memory address of the section named by the
234a85fe12eSEd Masteargument
235a85fe12eSEd Maste.Ar section .
236a85fe12eSEd MasteDepending on the operator specified, the value in argument
237a85fe12eSEd Maste.Ar val
238a85fe12eSEd Mastewill be used as an increment, a decrement or as the new value
239a85fe12eSEd Masteof the virtual memory address.
24067d97fe7SEd Maste.It Fl -extract-dwo
24167d97fe7SEd MasteCopy only .dwo debug sections to the output file.
242a85fe12eSEd Maste.It Fl -gap-fill Ns = Ns Ar val
243a85fe12eSEd MasteFill the gaps between sections with the byte value specified by
244a85fe12eSEd Mastethe argument
245a85fe12eSEd Maste.Ar val .
246b6b6f9ccSEd Maste.It Fl -globalize-symbol Ns = Ns Ar symbolname
247b6b6f9ccSEd MasteMake the symbol named by argument
248b6b6f9ccSEd Maste.Ar symbolname
249b6b6f9ccSEd Masteglobal, so that it is visible outside of the file in which it is defined.
250b6b6f9ccSEd Maste.It Fl -globalize-symbols Ns = Ns Ar filename
251b6b6f9ccSEd MasteMake each symbol listed in the file specified by
252b6b6f9ccSEd Maste.Ar filename
253b6b6f9ccSEd Masteglobal.
25467d97fe7SEd Maste.It Fl -localize-hidden
25567d97fe7SEd MasteMake all hidden symbols local to the output file.
25667d97fe7SEd MasteThis includes symbols with internal visiblity.
257b6b6f9ccSEd Maste.It Fl -localize-symbols Ns = Ns Ar filename
258b6b6f9ccSEd MasteMake each symbol listed in the file specified by
259b6b6f9ccSEd Maste.Ar filename
260b6b6f9ccSEd Mastelocal to the output file.
261a85fe12eSEd Maste.It Fl -no-adjust-warnings | Fl -no-change-warnings
262a85fe12eSEd MasteDo not issue a warning if the section specified by the options
263a85fe12eSEd Maste.Fl -change-section-address ,
264a85fe12eSEd Maste.Fl -change-section-lma
265a85fe12eSEd Masteor
266a85fe12eSEd Maste.Fl -change-section-vma
267a85fe12eSEd Masteis missing in the input object.
268a85fe12eSEd Maste.It Fl -only-keep-debug
269a85fe12eSEd MasteCopy only debugging information to the output file.
270a85fe12eSEd Maste.It Fl -pad-to Ns = Ns Ar address
271a85fe12eSEd MastePad the load memory address of the output object to the value
272a85fe12eSEd Mastespecified by the argument
273a85fe12eSEd Maste.Ar address
274a85fe12eSEd Masteby increasing the size of the section with the highest load memory
275a85fe12eSEd Masteaddress.
276a85fe12eSEd Maste.It Fl -prefix-alloc-sections Ns = Ns Ar string
277a85fe12eSEd MastePrefix the section names of all the allocated sections with
278a85fe12eSEd Maste.Ar string .
279a85fe12eSEd Maste.It Fl -prefix-sections Ns = Ns Ar string
280a85fe12eSEd MastePrefix the section names of all the sections with
281a85fe12eSEd Maste.Ar string .
282a85fe12eSEd Maste.It Fl -prefix-symbols Ns = Ns Ar string
283a85fe12eSEd MastePrefix the symbol names of all the symbols with
284a85fe12eSEd Maste.Ar string .
285a85fe12eSEd Maste.It Fl -rename-section Ar oldname Ns = Ns Ar newname Ns Op Ar ,flags
286a85fe12eSEd MasteRename the section named by argument
287a85fe12eSEd Maste.Ar oldname
288a85fe12eSEd Masteto
289a85fe12eSEd Maste.Ar newname ,
290a85fe12eSEd Masteoptionally changing the sections flags to that specified by argument
291a85fe12eSEd Maste.Ar flags .
292a85fe12eSEd MasteAllowed values for the argument
293a85fe12eSEd Maste.Ar flags
294a85fe12eSEd Masteare as for option
295a85fe12eSEd Maste.Fl -set-section-flags
296a85fe12eSEd Mastebelow.
297a85fe12eSEd Maste.It Fl -set-section-flags Ar sectionname Ns = Ns Ar flags
298a85fe12eSEd MasteSet the flags for the section named by argument
299a85fe12eSEd Maste.Ar sectionname
300a85fe12eSEd Masteto those specified by argument
301a85fe12eSEd Maste.Ar flags .
302a85fe12eSEd MasteArgument
303a85fe12eSEd Maste.Ar flags
304a85fe12eSEd Masteis a comma separated list of the following flag names:
305a85fe12eSEd Maste.Bl -tag -width "readonly" -compact
306a85fe12eSEd Maste.It alloc
307a85fe12eSEd MasteThe section occupies space in the output file.
308a85fe12eSEd Maste.It code
309a85fe12eSEd MasteThe section contains machine instructions.
310a85fe12eSEd Maste.It contents
311a85fe12eSEd MasteThis flag is accepted but is ignored.
312a85fe12eSEd Maste.It data
313a85fe12eSEd MasteThe section contains writeable data.
314a85fe12eSEd Maste.It debug
315a85fe12eSEd MasteThe section holds debugging information.
316a85fe12eSEd Maste.It load
317a85fe12eSEd MasteThe section is loadable.
318a85fe12eSEd Maste.It noload
319a85fe12eSEd MasteThe section should not be loaded into memory.
320a85fe12eSEd Maste.It readonly
321a85fe12eSEd MasteThe section is not writable.
322a85fe12eSEd Maste.It rom
323a85fe12eSEd MasteThe section contains ROM'able contents.
324a85fe12eSEd Maste.It share
325a85fe12eSEd MasteThis flag is accepted but is ignored.
326a85fe12eSEd Maste.El
327a85fe12eSEd Maste.It Fl -set-start Ns = Ns Ar address
328a85fe12eSEd MasteSet the start address of the output ELF object to the value specified
329a85fe12eSEd Masteby the argument
330a85fe12eSEd Maste.Ar address .
331a85fe12eSEd Maste.It Fl -srec-forceS3
332a85fe12eSEd MasteOnly generate S-records of type
333a85fe12eSEd Maste.Dq S3 .
334a85fe12eSEd MasteThis option is only meaningful when the output target is set to
335a85fe12eSEd Maste.Dq srec .
336a85fe12eSEd Maste.It Fl -srec-len Ns = Ns Ar val
337a85fe12eSEd MasteSet the maximum length of an S-record line to
338a85fe12eSEd Maste.Ar val .
339a85fe12eSEd MasteThis option is only meaningful when the output target is set to
340a85fe12eSEd Maste.Dq srec .
34167d97fe7SEd Maste.It Fl -strip-dwo
34267d97fe7SEd MasteDo not copy .dwo debug sections to the output file.
343431bcfcdSEd Maste.It Fl -strip-symbols= Ns Ar filename
344431bcfcdSEd MasteDo not copy any of the symbols specified by
345431bcfcdSEd Maste.Ar filename
346431bcfcdSEd Masteto the output.
347a85fe12eSEd Maste.It Fl -strip-unneeded
348a85fe12eSEd MasteDo not copy symbols that are not needed for relocation processing.
349a85fe12eSEd Maste.El
350a85fe12eSEd Maste.Sh DIAGNOSTICS
351a85fe12eSEd Maste.Ex -std
352a85fe12eSEd Maste.Sh SEE ALSO
353a85fe12eSEd Maste.Xr ar 1 ,
354a85fe12eSEd Maste.Xr ld 1 ,
355a85fe12eSEd Maste.Xr mcs 1 ,
356a85fe12eSEd Maste.Xr strip 1 ,
357a85fe12eSEd Maste.Xr elf 3 ,
358839529caSEd Maste.Xr elftc_bfd_find_target 3 ,
359a85fe12eSEd Maste.Xr ar 5 ,
360a85fe12eSEd Maste.Xr elf 5
361839529caSEd Maste.Sh COMPATIBILITY
362839529caSEd MasteThe
363839529caSEd Maste.Nm
364839529caSEd Masteutility is expected to be option compatible with GNU
365839529caSEd Maste.Nm objcopy .
366a85fe12eSEd Maste.Sh HISTORY
367a85fe12eSEd Maste.Nm
368a85fe12eSEd Mastehas been implemented by
369b00fe64fSEd Maste.An Kai Wang Aq Mt kaiwang27@users.sourceforge.net .
370