public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH][ARM]Use different startfile and endfile for elf target when generating shared object.
@ 2016-06-16 11:04 Renlin Li
  2016-12-14 15:34 ` [PING][PATCH][ARM]Use " Renlin Li
  2017-01-12 11:47 ` [PATCH][ARM]Use " kugan
  0 siblings, 2 replies; 11+ messages in thread
From: Renlin Li @ 2016-06-16 11:04 UTC (permalink / raw)
  To: gcc-patches; +Cc: Kyrill Tkachov, Ramana Radhakrishnan

[-- Attachment #1: Type: text/plain, Size: 1312 bytes --]

Hi all,

GCC has startfile and endfile spec string built into it.
startfile is used to specify objects files to include at the start of 
the link process. While endfile, on the other hand, is used to specify 
objects files to include at the end of the link process.

crtbegin.o is one of the object files specified by startfile spec 
string. IIUC, crtbeginS.o should be used in place of crtbegin.o when 
generating shared objects.
The same applies to crtend.o which is one of the endfile. crtendS.o 
should be used when generating shared objects.

This patch makes the change to use different crtbegin and crtend files 
when creating shared and static object for elf toolchain. The linux 
toolchain already did this differentiation.

So when the toolchain doesn't support shared object, the following error 
message will be produced:
ld: cannot find crtbeginS.o: No such file or directory

Still, those specs strings built into GCC can be overridden by using
-specs=command-line switch to specify a spec file.

arm-none-eabi regression test without new issues, OK for trunk?

Regards,
Renlin Li

gcc/ChangeLog:

2016-06-16  Renlin Li  <renlin.li@arm.com>

	* config/arm/unknown-elf.h (UNKNOWN_ELF_STARTFILE_SPEC): Use
	crtbeginS.o for shared object.
	(UNKNOWN_ELF_ENDFILE_SPEC): Use crtendS.o for shared object.

[-- Attachment #2: arm-start.diff --]
[-- Type: text/x-patch, Size: 836 bytes --]

diff --git a/gcc/config/arm/unknown-elf.h b/gcc/config/arm/unknown-elf.h
index fafe057..12ef497 100644
--- a/gcc/config/arm/unknown-elf.h
+++ b/gcc/config/arm/unknown-elf.h
@@ -29,14 +29,19 @@
 #endif
 
 /* Now we define the strings used to build the spec file.  */
-#define UNKNOWN_ELF_STARTFILE_SPEC	" crti%O%s crtbegin%O%s crt0%O%s"
+#define UNKNOWN_ELF_STARTFILE_SPEC	\
+  "crti%O%s \
+  %{!shared:crtbegin%O%s} %{shared:crtbeginS%O%s} \
+  crt0%O%s"
 
 #undef  STARTFILE_SPEC
 #define STARTFILE_SPEC	\
   "%{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s} "	\
   UNKNOWN_ELF_STARTFILE_SPEC
 
-#define UNKNOWN_ELF_ENDFILE_SPEC	"crtend%O%s crtn%O%s"
+#define UNKNOWN_ELF_ENDFILE_SPEC	\
+  "%{!shared:crtend%O%s} %{shared:crtendS%O%s} \
+  crtn%O%s"
 
 #undef  ENDFILE_SPEC
 #define ENDFILE_SPEC	UNKNOWN_ELF_ENDFILE_SPEC

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2017-06-07 16:41 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-06-16 11:04 [PATCH][ARM]Use different startfile and endfile for elf target when generating shared object Renlin Li
2016-12-14 15:34 ` [PING][PATCH][ARM]Use " Renlin Li
2017-01-12 11:24   ` Renlin Li
2017-06-07 16:41   ` Renlin Li
2017-01-12 11:47 ` [PATCH][ARM]Use " kugan
2017-01-12 15:50   ` Renlin Li
2017-01-13  8:48     ` Christophe Lyon
2017-01-13 10:22       ` Renlin Li
2017-01-13 11:14         ` Christophe Lyon
2017-01-13 12:26           ` Renlin Li
2017-01-13 12:45             ` Christophe Lyon

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).