mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-27 23:55:52 +08:00
* collect2.c (COLLECT_SHARED_INIT_FUNC)
(COLLECT_SHARD_FINI_FUNC): Define default values. (write_c_file_stat): Use them to call construtor and destructor functions in shared libraries. * doc/tm.texi (COLLECT_SHARED_INIT_FUNC) (COLLECT_SHARD_FINI_FUNC): Document them. * config/netbsd.h (COLLECT_SHARED_INIT_FUNC) (COLLECT_SHARD_FINI_FUNC): Define. * config/netbsd.h (LINK_SPEC): Don't pull in estart if creating a shared library. Pass -shared through to the linker. * config/arm/netbsd.h (LINK_SPEC): Likewise. * config/arm/t-netbsd (TARGET_LIBGCC2_CFLAGS): Add -fpic. (SHLIB_EXT, SHLIB_NAME, SHLIB_SONAME, SHLIB_OBJS, SHLIB_LINK) (SHLIB_INSTALL): Define. From-SVN: r47975
This commit is contained in:
parent
3a79cccbde
commit
414e05cffb
@ -1,3 +1,22 @@
|
||||
2001-12-13 Richard Earnshaw <rearnsha@arm.com>
|
||||
|
||||
* collect2.c (COLLECT_SHARED_INIT_FUNC)
|
||||
(COLLECT_SHARD_FINI_FUNC): Define default values.
|
||||
(write_c_file_stat): Use them to call construtor and destructor
|
||||
functions in shared libraries.
|
||||
* doc/tm.texi (COLLECT_SHARED_INIT_FUNC)
|
||||
(COLLECT_SHARD_FINI_FUNC): Document them.
|
||||
* config/netbsd.h (COLLECT_SHARED_INIT_FUNC)
|
||||
(COLLECT_SHARD_FINI_FUNC): Define.
|
||||
|
||||
* config/netbsd.h (LINK_SPEC): Don't pull in estart if creating a
|
||||
shared library. Pass -shared through to the linker.
|
||||
* config/arm/netbsd.h (LINK_SPEC): Likewise.
|
||||
|
||||
* config/arm/t-netbsd (TARGET_LIBGCC2_CFLAGS): Add -fpic.
|
||||
(SHLIB_EXT, SHLIB_NAME, SHLIB_SONAME, SHLIB_OBJS, SHLIB_LINK)
|
||||
(SHLIB_INSTALL): Define.
|
||||
|
||||
2001-12-13 Richard Earnshaw <rearnsha@arm.com>
|
||||
|
||||
* arm.c (legitimize_pic_address): Handle LABEL_REFs in substantially
|
||||
|
@ -154,6 +154,15 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
||||
/* This must match tree.h. */
|
||||
#define DEFAULT_INIT_PRIORITY 65535
|
||||
|
||||
#ifndef COLLECT_SHARED_INIT_FUNC
|
||||
#define COLLECT_SHARED_INIT_FUNC(STREAM, FUNC) \
|
||||
fprintf ((STREAM), "void _GLOBAL__DI() {\n\t%s();\n}\n", (FUNC))
|
||||
#endif
|
||||
#ifndef COLLECT_SHARED_FINI_FUNC
|
||||
#define COLLECT_SHARED_FINI_FUNC(STREAM, FUNC) \
|
||||
fprintf ((STREAM), "void _GLOBAL__DD() {\n\t%s();\n}\n", (FUNC))
|
||||
#endif
|
||||
|
||||
#if defined (LDD_SUFFIX) || SUNOS4_SHARED_LIBRARIES
|
||||
#define SCAN_LIBRARIES
|
||||
#endif
|
||||
@ -1944,8 +1953,8 @@ write_c_file_stat (stream, name)
|
||||
|
||||
if (shared_obj)
|
||||
{
|
||||
fprintf (stream, "void _GLOBAL__DI() {\n\t%s();\n}\n", initname);
|
||||
fprintf (stream, "void _GLOBAL__DD() {\n\t%s();\n}\n", fininame);
|
||||
COLLECT_SHARED_INIT_FUNC(stream, initname);
|
||||
COLLECT_SHARED_FINI_FUNC(stream, fininame);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -67,8 +67,8 @@ Boston, MA 02111-1307, USA. */
|
||||
/* Pass -X to the linker so that it will strip symbols starting with 'L' */
|
||||
#undef LINK_SPEC
|
||||
#define LINK_SPEC "\
|
||||
-X %{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp %{R*} \
|
||||
%{static:-Bstatic} %{assert*} \
|
||||
-X %{!shared:%{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp %{R*} \
|
||||
%{static:-Bstatic}} %{shared} %{assert*} \
|
||||
"
|
||||
|
||||
#undef SIZE_TYPE
|
||||
|
@ -1,8 +1,25 @@
|
||||
# Just for these, we omit the frame pointer since it makes such a big
|
||||
# difference. It is then pointless adding debugging.
|
||||
TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer
|
||||
TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer -fpic
|
||||
LIBGCC2_DEBUG_CFLAGS = -g0
|
||||
|
||||
# Build a shared libgcc library.
|
||||
SHLIB_EXT = .so
|
||||
SHLIB_NAME = @shlib_base_name@.so
|
||||
SHLIB_SONAME = @shlib_base_name@.so.1
|
||||
SHLIB_OBJS = @shlib_objs@
|
||||
|
||||
SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
|
||||
-Wl,-soname,$(SHLIB_SONAME) \
|
||||
-o $(SHLIB_NAME) @multilib_flags@ $(SHLIB_OBJS) -lc && \
|
||||
rm -f $(SHLIB_SONAME) && \
|
||||
$(LN_S) $(SHLIB_NAME) $(SHLIB_SONAME)
|
||||
# $(slibdir) double quoted to protect it from expansion while building
|
||||
# libgcc.mk. We want this delayed until actual install time.
|
||||
SHLIB_INSTALL = $(INSTALL_DATA) $(SHLIB_NAME) $$(slibdir)/$(SHLIB_SONAME); \
|
||||
rm -f $$(slibdir)/$(SHLIB_NAME); \
|
||||
$(LN_S) $(SHLIB_SONAME) $$(slibdir)/$(SHLIB_NAME)
|
||||
|
||||
# Don't build enquire
|
||||
ENQUIRE=
|
||||
|
||||
|
@ -54,11 +54,26 @@
|
||||
#define LIB_SPEC "%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}"
|
||||
|
||||
/* Provide a LINK_SPEC appropriate for NetBSD. Here we provide support
|
||||
for the special GCC options -static, -assert, and -nostdlib. */
|
||||
for the special GCC options -shared, -static, -assert, and -nostdlib. */
|
||||
|
||||
#undef LINK_SPEC
|
||||
#define LINK_SPEC \
|
||||
"%{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp %{R*} %{static:-Bstatic} %{assert*}"
|
||||
"%{!shared:%{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp %{R*} %{static:-Bstatic}} %{shared} %{assert*}"
|
||||
|
||||
/* When building shared libraries, the initialization and finalization
|
||||
functions for the library are .init and .fini respectively. */
|
||||
|
||||
#define COLLECT_SHARED_INIT_FUNC(STREAM,FUNC) \
|
||||
do { \
|
||||
fprintf ((STREAM), "void __init() __asm__ (\".init\");"); \
|
||||
fprintf ((STREAM), "void __init() {\n\t%s();\n}\n", (FUNC)); \
|
||||
} while (0);
|
||||
|
||||
#define COLLECT_SHARED_FINI_FUNC(STREAM,FUNC) \
|
||||
do { \
|
||||
fprintf ((STREAM), "void __fini() __asm__ (\".fini\");"); \
|
||||
fprintf ((STREAM), "void __fini() {\n\t%s();\n}\n", (FUNC)); \
|
||||
} while (0);
|
||||
|
||||
/* This defines which switch letters take arguments. */
|
||||
#undef SWITCH_TAKES_ARG
|
||||
|
@ -6638,6 +6638,24 @@ the following symbol is an initialization routine.
|
||||
If defined, a C string constant for a switch that tells the linker that
|
||||
the following symbol is a finalization routine.
|
||||
|
||||
@item COLLECT_SHARED_INIT_FUNC (@var{stream}, @var{func})
|
||||
If defined, a C statement that will write a function that can be
|
||||
automatically called when a shared library is loaded. The function
|
||||
should call @var{func}, which takes no arguments. If not defined, and
|
||||
the object format requires an explicit initialization function, then a
|
||||
function called @var{_GLOBAL__DI} will be generated.
|
||||
|
||||
This function and the following one are used by collect2 when linking a
|
||||
shared library that needs constructors or destructors, or has DWARF2
|
||||
exception tables embedded in the code.
|
||||
|
||||
@item COLLECT_SHARED_FINI_FUNC (@var{stream}, @var{func})
|
||||
If defined, a C statement that will write a function that can be
|
||||
automatically called when a shared library is unloaded. The function
|
||||
should call @var{func}, which takes no arguments. If not defined, and
|
||||
the object format requires an explicit finalization function, then a
|
||||
function called @var{_GLOBAL__DD} will be generated.
|
||||
|
||||
@item INVOKE__main
|
||||
@findex INVOKE__main
|
||||
If defined, @code{main} will call @code{__main} despite the presence of
|
||||
|
Loading…
Reference in New Issue
Block a user