From 3dd27dc54f3fd38d2b1e9b7fb53938be4df8da7c Mon Sep 17 00:00:00 2001
From: Andris Pavenis <andris.pavenis@iki.fi>
Date: Tue, 5 Nov 2013 11:52:17 +0200
Subject: [PATCH] POST_LINK_SPEC: new define for additional steps after linking
This allows to avoid redefining LINK_COMMAND_SPEC when
additional steps are needed after linking
An example: invoking stubify after linking for DJGPP
---
gcc/doc/tm.texi | 6 ++++++
gcc/doc/tm.texi.in | 6 ++++++
gcc/gcc.c | 8 +++++++-
3 files changed, 19 insertions(+), 1 deletion(-)
@@ -402,6 +402,12 @@ the target makefile fragment or if none of the options listed in
@xref{Target Fragment}.
@end defmac
+@defmac POST_LINK_SPEC
+A C string constant giving complete commands needed to execute after linker.
+This macro allows to avoid redefining LINK_COMMAND_SPEC when additional
+steps are needed after invoking linker. The default value is empty string.
+@end defmac
+
@defmac RELATIVE_PREFIX_NOT_LINKDIR
Define this macro to tell @command{gcc} that it should only translate
a @option{-B} prefix into a @option{-L} linker option if the prefix
@@ -400,6 +400,12 @@ the target makefile fragment or if none of the options listed in
@xref{Target Fragment}.
@end defmac
+@defmac POST_LINK_SPEC
+A C string constant giving complete commands needed to execute after linker.
+This macro allows to avoid redefining LINK_COMMAND_SPEC when additional
+steps are needed after invoking linker. The default value is empty string.
+@end defmac
+
@defmac RELATIVE_PREFIX_NOT_LINKDIR
Define this macro to tell @command{gcc} that it should only translate
a @option{-B} prefix into a @option{-L} linker option if the prefix
@@ -745,6 +745,10 @@ proper position among the other output files. */
%{fvtable-verify=preinit: -lvtv -u_vtable_map_vars_start -u_vtable_map_vars_end}}"
#endif
+#ifndef POST_LINK_SPEC
+#define POST_LINK_SPEC ""
+#endif
+
/* -u* was put back because both BSD and SysV seem to support it. */
/* %{static:} simply prevents an error message if the target machine
doesn't handle -static. */
@@ -770,7 +774,7 @@ proper position among the other output files. */
%(mflib) " STACK_SPLIT_SPEC "\
%{fprofile-arcs|fprofile-generate*|coverage:-lgcov} " SANITIZER_SPEC " \
%{!nostdlib:%{!nodefaultlibs:%(link_ssp) %(link_gcc_c_sequence)}}\
- %{!nostdlib:%{!nostartfiles:%E}} %{T*} }}}}}}"
+ %{!nostdlib:%{!nostartfiles:%E}} %{T*} \n%(post_link) }}}}}}"
#endif
#ifndef LINK_LIBGCC_SPEC
@@ -812,6 +816,7 @@ static const char *linker_name_spec = LINKER_NAME;
static const char *linker_plugin_file_spec = "";
static const char *lto_wrapper_spec = "";
static const char *lto_gcc_spec = "";
+static const char *post_link_spec = POST_LINK_SPEC;
static const char *link_command_spec = LINK_COMMAND_SPEC;
static const char *link_libgcc_spec = LINK_LIBGCC_SPEC;
static const char *startfile_prefix_spec = STARTFILE_PREFIX_SPEC;
@@ -1304,6 +1309,7 @@ static struct spec_list static_specs[] =
INIT_STATIC_SPEC ("linker_plugin_file", &linker_plugin_file_spec),
INIT_STATIC_SPEC ("lto_wrapper", <o_wrapper_spec),
INIT_STATIC_SPEC ("lto_gcc", <o_gcc_spec),
+ INIT_STATIC_SPEC ("post_link", &post_link_spec),
INIT_STATIC_SPEC ("link_libgcc", &link_libgcc_spec),
INIT_STATIC_SPEC ("md_exec_prefix", &md_exec_prefix),
INIT_STATIC_SPEC ("md_startfile_prefix", &md_startfile_prefix),
--
1.8.3.1