* NEWS: mention support for forward exports in PE-COFF dll's.
* ld.texinfo: Expand documentation of EXPORT statements in PE-COFF .def files.
This commit is contained in:
parent
a8d701fd09
commit
4b5bd4e780
|
@ -1,3 +1,9 @@
|
||||||
|
2006-01-31 Danny Smith dannysmith@users.sourceforge.net
|
||||||
|
|
||||||
|
* NEWS: Mention support for forward exports in PE-COFF dll's.
|
||||||
|
* ld.texinfo: Expand documentation of EXPORT statements in
|
||||||
|
PE-COFF .def files.
|
||||||
|
|
||||||
2006-01-31 Filip Navara <navaraf@reactos.com>
|
2006-01-31 Filip Navara <navaraf@reactos.com>
|
||||||
|
|
||||||
* deffile.h (struct def_file_export): Add field flag_forward.
|
* deffile.h (struct def_file_export): Add field flag_forward.
|
||||||
|
|
3
ld/NEWS
3
ld/NEWS
|
@ -1,5 +1,8 @@
|
||||||
-*- text -*-
|
-*- text -*-
|
||||||
|
|
||||||
|
* PE-COFF: Forward exports from DLL's can now be specified in .def files
|
||||||
|
passed directly to ld.
|
||||||
|
|
||||||
* Support for the Z80 processor family has been added.
|
* Support for the Z80 processor family has been added.
|
||||||
|
|
||||||
* Add support for the "@<file>" syntax to the command line, so that extra
|
* Add support for the "@<file>" syntax to the command line, so that extra
|
||||||
|
|
|
@ -5581,17 +5581,68 @@ Using a DEF file turns off the normal auto-export behavior, unless the
|
||||||
Here is an example of a DEF file for a shared library called @samp{xyz.dll}:
|
Here is an example of a DEF file for a shared library called @samp{xyz.dll}:
|
||||||
|
|
||||||
@example
|
@example
|
||||||
LIBRARY "xyz.dll" BASE=0x10000000
|
LIBRARY "xyz.dll" BASE=0x20000000
|
||||||
|
|
||||||
EXPORTS
|
EXPORTS
|
||||||
foo
|
foo
|
||||||
bar
|
bar
|
||||||
_bar = bar
|
_bar = bar
|
||||||
|
another_foo = abc.dll.afoo
|
||||||
|
var1 DATA
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
This example defines a base address and three symbols. The third
|
This example defines a DLL with a non-default base address and five
|
||||||
symbol is an alias for the second. For the complete format
|
symbols in the export table. The third exported symbol @code{_bar} is an
|
||||||
specification see ld/deffilep.y in the binutils sources.
|
alias for the second. The fourth symbol, @code{another_foo} is resolved
|
||||||
|
by "forwarding" to another module and treating it as an alias for
|
||||||
|
@code{afoo} exported from the DLL @samp{abc.dll}. The final symbol
|
||||||
|
@code{var1} is declared to be a data object.
|
||||||
|
|
||||||
|
The complete specification of an export symbol is:
|
||||||
|
|
||||||
|
@example
|
||||||
|
EXPORTS
|
||||||
|
( ( ( <name1> [ = <name2> ] )
|
||||||
|
| ( <name1> = <module-name> . <external-name>))
|
||||||
|
[ @@ <integer> ] [NONAME] [DATA] [CONSTANT] [PRIVATE] ) *
|
||||||
|
@end example
|
||||||
|
|
||||||
|
Declares @samp{<name1>} as an exported symbol from the DLL, or declares
|
||||||
|
@samp{<name1>} as an exported alias for @samp{<name2>}; or declares
|
||||||
|
@samp{<name1>} as a "forward" alias for the symbol
|
||||||
|
@samp{<external-name>} in the DLL @samp{<module-name>}.
|
||||||
|
Optionally, the symbol may be exported by the specified ordinal
|
||||||
|
@samp{<integer>} alias.
|
||||||
|
|
||||||
|
The optional keywords that follow the declaration indicate:
|
||||||
|
|
||||||
|
@code{NONAME}: Do not put the symbol name in the DLL's export table. It
|
||||||
|
will still be exported by its ordinal alias (either the value specified
|
||||||
|
by the .def specification or, otherwise, the value assigned by the
|
||||||
|
linker). The symbol name, however, does remain visible in the import
|
||||||
|
library (if any), unless @code{PRIVATE} is also specified.
|
||||||
|
|
||||||
|
@code{DATA}: The symbol is a variable or object, rather than a function.
|
||||||
|
The import lib will export only an indirect reference to @code{foo} as
|
||||||
|
the symbol @code{_imp__foo} (ie, @code{foo} must be resolved as
|
||||||
|
@code{*_imp__foo}).
|
||||||
|
|
||||||
|
@code{CONSTANT}: Like @code{DATA}, but put the undecorated @code{foo} as
|
||||||
|
well as @code{_imp__foo} into the import library. Both refer to the
|
||||||
|
read-only import address table's pointer to the variable, not to the
|
||||||
|
variable itself. This can be dangerous. If the user code fails to add
|
||||||
|
the @code{dllimport} attribute and also fails to explicitly add the
|
||||||
|
extra indirection that the use of the attribute enforces, the
|
||||||
|
application will behave unexpectedly.
|
||||||
|
|
||||||
|
@code{PRIVATE}: Put the symbol in the DLL's export table, but do not put
|
||||||
|
it into the static import library used to resolve imports at link time. The
|
||||||
|
symbol can still be imported using the @code{LoadLibrary/GetProcAddress}
|
||||||
|
API at runtime or by by using the GNU ld extension of linking directly to
|
||||||
|
the DLL without an import library.
|
||||||
|
|
||||||
|
See ld/deffilep.y in the binutils sources for the full specification of
|
||||||
|
other DEF file statements
|
||||||
|
|
||||||
@cindex creating a DEF file
|
@cindex creating a DEF file
|
||||||
While linking a shared dll, @command{ld} is able to create a DEF file
|
While linking a shared dll, @command{ld} is able to create a DEF file
|
||||||
|
|
Loading…
Reference in New Issue