changeset 948:ce8d2ff56908

Redo library sequencing, add -lgcc before -gcc_s (because that's what gcc expects).
author Rob Landley <rob@landley.net>
date Wed, 06 Jan 2010 21:36:38 -0600
parents b2a18805352c
children 1d6155f9be9f
files sources/toys/ccwrap.c
diffstat 1 files changed, 15 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/sources/toys/ccwrap.c	Wed Jan 06 06:27:05 2010 -0600
+++ b/sources/toys/ccwrap.c	Wed Jan 06 21:36:38 2010 -0600
@@ -427,30 +427,32 @@
 
 		for (i=1; i<argc; i++) if (argv[i]) cc_argv[argcnt++] = argv[i];
 
-		if (use_stdlib) {
-			//cc_argv[argcnt++] = "-Wl,--start-group";
-			if (!use_static_linking && use_shared_libgcc)
-				cc_argv[argcnt++] = "-Wl,--as-needed,-lgcc_s,--no-as-needed";
-			else {
-				cc_argv[argcnt++] = "-lgcc";
-				cc_argv[argcnt++] = "-lgcc_eh";
-			}
-		}
+		// Add shared libraries.
+
 		for (i = 0 ; i < liblen ; i++)
 			if (libraries[i]) cc_argv[argcnt++] = libraries[i];
+
+		// Add standard libraries
+
 		if (use_stdlib) {
 			if (cpp) {
 				cc_argv[argcnt++] = "-lstdc++";
 				cc_argv[argcnt++] = "-lm";
 			}
-			cc_argv[argcnt++] = "-lc";
 
+			// libgcc can call libc which can call libgcc
+
+			cc_argv[argcnt++] = "-lgcc";
 			if (!use_static_linking && use_shared_libgcc)
 				cc_argv[argcnt++] = "-Wl,--as-needed,-lgcc_s,--no-as-needed";
-			// Fall back to resolving stuff out of here.
+			else cc_argv[argcnt++] = "-lgcc_eh";
+
+			cc_argv[argcnt++] = "-lc";
+
 			cc_argv[argcnt++] = "-lgcc";
-			cc_argv[argcnt++] = "-lgcc_eh";
-			//cc_argv[argcnt++] = "-Wl,--end-group";
+			if (!use_static_linking && use_shared_libgcc)
+				cc_argv[argcnt++] = "-Wl,--as-needed,-lgcc_s,--no-as-needed";
+			else cc_argv[argcnt++] = "-lgcc_eh";
 		}
 		if (ctor_dtor) {
 			asprintf(cc_argv+(argcnt++), "%s/cc/lib/crtend%s", devprefix,