changeset 549:2edf40b17ee2

Select crtbegin.o and crtend.o variants more accurately for -static and -shared.
author Rob Landley <rob@landley.net>
date Tue, 23 Dec 2008 14:13:33 -0600
parents b826a6168464
children 64779e0f6c28
files sources/toys/ccwrap.c
diffstat 1 files changed, 5 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/sources/toys/ccwrap.c	Tue Dec 23 12:47:58 2008 -0600
+++ b/sources/toys/ccwrap.c	Tue Dec 23 14:13:33 2008 -0600
@@ -97,7 +97,7 @@
 int main(int argc, char **argv)
 {
 	int linking = 1, use_static_linking = 0;
-	int use_stdinc = 1, use_start = 1, use_stdlib = 1, use_pic = 0;
+	int use_stdinc = 1, use_start = 1, use_stdlib = 1, use_shared = 0;
 	int source_count = 0, verbose = 0;
 	int i, argcnt, liblen, lplen;
 	char **gcc_argv, **libraries, **libpath;
@@ -247,7 +247,7 @@
 					if (strstr(argv[i],static_linking)) use_static_linking = 1;
 					if (!strcmp("-shared",argv[i])) {
 						use_start = 0;
-						use_pic = 1;
+						use_shared = 1;
 					}
 					break;
 
@@ -312,12 +312,8 @@
 					break;
 
 				case 'f':
-					/* Check if we are doing PIC */
-					if (strcmp("-fPIC",argv[i]) == 0) use_pic = 1;
-					else if (strcmp("-fpic",argv[i]) == 0) use_pic = 1;
- 
 					// profiling
-					else if (strcmp("-fprofile-arcs",argv[i]) == 0) profile = 1;
+					if (strcmp("-fprofile-arcs",argv[i]) == 0) profile = 1;
 					break;
 
 				// --longopts
@@ -400,7 +396,7 @@
 		if (ctor_dtor) {
 			asprintf(gcc_argv+(argcnt++), "%s/lib/crti.o", devprefix);
 			asprintf(gcc_argv+(argcnt++), "%s/gcc/lib/crtbegin%s", devprefix,
-					use_pic ? "S.o" : ".o");
+					use_shared ? "S.o" : use_static_linking ? "T.o" : ".o");
 		}
 		if (use_start && !profile)
 			asprintf(gcc_argv+(argcnt++), "%s/lib/crt1.o", devprefix);
@@ -428,7 +424,7 @@
 		}
 		if (ctor_dtor) {
 			asprintf(gcc_argv+(argcnt++), "%s/gcc/lib/crtend%s", devprefix,
-					use_pic ? "S.o" : ".o");
+					use_shared ? "S.o" : ".o");
 			asprintf(gcc_argv+(argcnt++), "%s/lib/crtn.o", devprefix);
 		}
 	} else for (i=1; i<argc; i++) if (argv[i]) gcc_argv[argcnt++] = argv[i];