Mercurial > hg > aboriginal
changeset 547:65b71915c836
Clean up ccwrap some more.
author | Rob Landley <rob@landley.net> |
---|---|
date | Tue, 23 Dec 2008 01:19:10 -0600 |
parents | a7f128fc53b5 |
children | b826a6168464 |
files | sources/toys/ccwrap.c |
diffstat | 1 files changed, 19 insertions(+), 42 deletions(-) [+] |
line wrap: on
line diff
--- a/sources/toys/ccwrap.c Tue Dec 23 01:18:22 2008 -0600 +++ b/sources/toys/ccwrap.c Tue Dec 23 01:19:10 2008 -0600 @@ -2,7 +2,7 @@ /* * Copyright (C) 2000 Manuel Novoa III * Copyright (C) 2002-2003 Erik Andersen - * Copyright (C) 2006 Rob Landley <rob@landley.net> + * Copyright (C) 2006-2008 Rob Landley <rob@landley.net> * * Wrapper to use uClibc with gcc, and make gcc relocatable. */ @@ -102,18 +102,16 @@ int i, argcnt, liblen, lplen; char **gcc_argv, **libraries, **libpath; char *dlstr, *incstr, *devprefix, *libstr; - char *cc, *rpath_link, *rpath; - char *crtbegin_path[2], *crtend_path[2]; + char *cc; char *debug_wrapper=getenv("WRAPPER_DEBUG"); // For C++ - char *crti_path, *crtn_path, *cpp = NULL; + char *cpp = NULL; int len, ctor_dtor = 1, use_nostdinc_plus = 0; // For profiling int profile = 0; - char *gcrt1_path; if(debug_wrapper) { fprintf(stderr,"incoming: "); @@ -167,22 +165,11 @@ } devprefix = getenv("WRAPPER_TOPDIR"); - if (!devprefix) { - devprefix = topdir; - } + if (!devprefix) devprefix = topdir; incstr = getenv("UCLIBC_GCC_INC"); libstr = getenv("UCLIBC_GCC_LIB"); - asprintf(&rpath_link,"-Wl,-rpath-link,%s/lib", devprefix); - asprintf(&rpath, "-Wl,-rpath,%s/lib", devprefix); - - asprintf(&crti_path, "%s/lib/crti.o", devprefix); - asprintf(&crtn_path, "%s/lib/crtn.o", devprefix); - - // profiling - asprintf(&gcrt1_path, "%s/lib/gcrt1.o", devprefix); - // Figure out where the dynamic linker is. dlstr = getenv("UCLIBC_DYNAMIC_LINKER"); if (!dlstr) dlstr = "/lib/ld-uClibc.so.0"; @@ -376,12 +363,6 @@ } argcnt = 0; - if (ctor_dtor) { - asprintf(crtbegin_path, "%s/gcc/lib/crtbegin.o", devprefix); - asprintf(crtbegin_path+1, "%s/gcc/lib/crtbeginS.o", devprefix); - asprintf(crtend_path, "%s/gcc/lib/crtend.o", devprefix); - asprintf(crtend_path+1, "%s/gcc/lib/crtendS.o", devprefix); - } gcc_argv[argcnt++] = cpp ? cpp : cc; @@ -392,16 +373,15 @@ // gcc_argv[argcnt++] = "-Wl,-elf2flt"; //#endif gcc_argv[argcnt++] = nostdlib; - if (use_static_linking) { + if (use_static_linking) gcc_argv[argcnt++] = static_linking; - } else { - if (dlstr) { - gcc_argv[argcnt++] = dlstr; - } - } + else if (dlstr) gcc_argv[argcnt++] = dlstr; for ( i = 0 ; i < lplen ; i++ ) if (libpath[i]) gcc_argv[argcnt++] = libpath[i]; - gcc_argv[argcnt++] = rpath_link; /* just to be safe */ + + // just to be safe: + asprintf(gcc_argv+(argcnt++),"-Wl,-rpath-link,%s/lib", devprefix); + if( libstr ) gcc_argv[argcnt++] = libstr; @@ -430,16 +410,13 @@ if (linking && source_count) { - if (profile) { - gcc_argv[argcnt++] = gcrt1_path; - } + if (profile) + asprintf(gcc_argv+(argcnt++), "%s/lib/gcrt1.o", devprefix); + if (ctor_dtor) { - gcc_argv[argcnt++] = crti_path; - if (use_pic) { - gcc_argv[argcnt++] = crtbegin_path[1]; - } else { - gcc_argv[argcnt++] = crtbegin_path[0]; - } + asprintf(gcc_argv+(argcnt++), "%s/lib/crti.o", devprefix); + asprintf(gcc_argv+(argcnt++), "%s/gcc/lib/crtbegin%s", devprefix, + use_pic ? "S.o" : ".o"); } if (use_start && !profile) asprintf(gcc_argv+(argcnt++), "%s/lib/crt1.o", devprefix); @@ -466,8 +443,9 @@ //gcc_argv[argcnt++] = "-Wl,--end-group"; } if (ctor_dtor) { - gcc_argv[argcnt++] = crtend_path[use_pic ? 1 : 0]; - gcc_argv[argcnt++] = crtn_path; + asprintf(gcc_argv+(argcnt++), "%s/gcc/lib/crtend%s", devprefix, + use_pic ? "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]; @@ -486,7 +464,6 @@ fprintf(stderr, "\n\n"); } - //no need to free memory from xstrcat because we never return. execvp(gcc_argv[0], gcc_argv); fprintf(stderr, "%s: %s\n", cpp ? cpp : cc, strerror(errno)); exit(EXIT_FAILURE);