diff options
Diffstat (limited to 'mdk-stage1/dietlibc/diet.c')
| -rw-r--r-- | mdk-stage1/dietlibc/diet.c | 367 | 
1 files changed, 0 insertions, 367 deletions
| diff --git a/mdk-stage1/dietlibc/diet.c b/mdk-stage1/dietlibc/diet.c deleted file mode 100644 index c3a053ac8..000000000 --- a/mdk-stage1/dietlibc/diet.c +++ /dev/null @@ -1,367 +0,0 @@ -#include <string.h> -#include <unistd.h> -#include <fcntl.h> -#include <stdio.h> -#include <stdlib.h> -#include <write12.h> - -#include "dietfeatures.h" - -/* goal: - *   when invoked as - * "diet gcc -c t.c" - *   exec - * "gcc -I/path/to/dietlibc/include -c t.c" - * - *   when invoked as - * "diet sparc-linux-gcc -o t t.o" - *   exec - * "sparc-linux-gcc -nostdlib -static -o t t.o /path/to/dietlibc/bin-sparc/start.o /path/to/dietlibc/bin-sparc/dietlibc.a" -*/ - -static void error(const char *message) { -  __write2(message); -  exit(1); -} - -static const char* Os[] = { -  "i386","-Os","-mpreferred-stack-boundary=2", -	 "-malign-functions=0","-malign-jumps=0", -	 "-malign-loops=0","-fomit-frame-pointer",0, -  "x86_64","-Os","-fno-omit-frame-pointer",0, -  "sparc","-Os","-mcpu=supersparc",0, -  "sparc64","-Os","-m64",0, -  "alpha","-Os","-fomit-frame-pointer",0, -  "arm","-Os","-fomit-frame-pointer",0, -  "mips","-Os","-fomit-frame-pointer","-mno-abicalls","-G","8","-fno-pic",0, -  "ppc","-Os","-fomit-frame-pointer","-mpowerpc-gpopt","-mpowerpc-gfxopt",0, -  "s390","-Os","-fomit-frame-pointer",0, -  "sh","-Os","-fomit-frame-pointer",0, -  "ia64","-Os","-fno-omit-frame-pointer",0, -  "x86_64","-Os","-fstrict-aliasing","-momit-leaf-frame-pointer","-mfance-math-387",0, -  0}; - -int main(int argc,char *argv[]) { -  int _link=0; -  int compile=0; -  int preprocess=0; -  int verbose=0; -  int profile=0; -  char diethome[]=DIETHOME; -  char platform[1000]; -#ifdef __DYN_LIB -  int shared=0; -#endif -  char* shortplatform=0; -#ifdef WANT_SAFEGUARD -  char safeguard1[]="-include"; -  char safeguard2[]=DIETHOME "/include/dietref.h"; -#endif -  const char *nostdlib="-nostdlib"; -  const char *libgcc="-lgcc"; -  char dashL[1000]; -  char dashstatic[]="-static"; -  int i; -  int mangleopts=0; -  char manglebuf[1024]; - -#ifdef INSTALLVERSION -  strcpy(platform,DIETHOME "/lib-"); -#else -#ifndef __DYN_LIB -  strcpy(platform,DIETHOME "/bin-"); -#else -  strcpy(platform,DIETHOME "/pic-"); -#endif -#endif -  strcpy(dashL,"-L"); - -  if (argc<2) { -usage: -    if (verbose) { -      __write2( -#ifdef __DYN_LIB -	       "dyn-" -#endif -	       "diet version " VERSION -#ifndef INSTALLVERSION -               " (non-install version in source tree)" -#endif -	       "\n\n"); -    } -    error("usage: diet [-v] [-Os] gcc command line\n" -	  "e.g.   diet -Os gcc -c t.c\n" -	  "or     diet sparc-linux-gcc -o foo foo.c bar.o\n"); -  } -  if (!strcmp(argv[1],"-v")) { -    ++argv; --argc; -    verbose=1; -  } -  if (argv[1] && !strcmp(argv[1],"-Os")) { -    ++argv; --argc; -    mangleopts=1; -  } -  if (!argv[1]) goto usage; -  { -    char *tmp=strchr(argv[1],0)-2; -    char *tmp2,*tmp3; -    char *cc=argv[1]; -    if (tmp<cc) goto donttouch; -    if ((tmp2=strstr(cc,"linux-"))) {	/* cross compiling? */ -      int len=strlen(platform); -      --tmp2; -      tmp3=strchr(cc,'-'); -      if (tmp3<tmp2) tmp2=tmp3; -      if (tmp2-cc>90) error("platform name too long!\n"); -      shortplatform=platform+len; -      memmove(shortplatform,argv[1],(size_t)(tmp2-cc)); -      platform[tmp2-cc+len]=0; -      if (shortplatform[0]=='i' && shortplatform[2]=='8' && shortplatform[3]=='6') shortplatform[1]='3'; -    } else { -#ifdef __sparc__ -#ifdef __arch64__ -      shortplatform="sparc64"; -#else -      shortplatform="sparc"; -#endif -#endif -#ifdef __powerpc__ -      shortplatform="ppc"; -#endif -#ifdef __i386__ -      shortplatform="i386"; -#endif -#ifdef __alpha__ -      shortplatform="alpha"; -#endif -#ifdef __arm__ -      shortplatform="arm"; -#endif -#ifdef __mips__ -      shortplatform="mips"; -#endif -#ifdef __s390__ -      shortplatform="s390"; -#endif -#ifdef __sh__ -      shortplatform="sh"; -#endif -#ifdef __hppa__ -      shortplatform="parisc"; -#endif -#ifdef __x86_64__ -      shortplatform="x86_64"; -#endif -#ifdef __ia64__ -	  shortplatform="ia64"; -#endif -      { -	char *tmp=platform+strlen(platform); -	strcpy(tmp,shortplatform); -	shortplatform=tmp; -      } -    } -    /* MIPS needs special handling.  If argv contains -EL, change -     * platform name to mipsel */ -    if (!strcmp(shortplatform,"mips")) { -      int i; -      for (i=1; i<argc; ++i) -	if (!strcmp(argv[i],"-EL")) -	  strcpy(shortplatform,"mipsel"); -    } -    strcat(dashL,platform); -    if (!strcmp(tmp,"cc")) { -      char **newargv; -      char **dest; -      char *a,*b,*c; -#ifdef WANT_DYNAMIC -      char *d,*e,*f; -#endif -/* we need to add -I... if the command line contains -c, -S or -E */ -      for (i=2; i<argc; ++i) { -	if (argv[i][0]=='-' && argv[i][1]=='M') -	  goto pp; -	if (!strcmp(argv[i],"-pg")) -	  profile=1; -	if (!strcmp(argv[i],"-c") || !strcmp(argv[i],"-S")) -	  compile=1; -	if (!strcmp(argv[i],"-E")) -pp: -	  preprocess=compile=1; -      } -/* we need to add -nostdlib if we are not compiling*/ -      _link=!compile; -#ifdef __DYN_LIB -      if (_link) { -	for (i=2; i<argc; ++i) -	  if (!strcmp(argv[i],"-shared")) { -	    shared=1; -	    _link=0; -	  } -      } -#endif -#if 0 -      for (i=2; i<argc; ++i) -	if (!strcmp(argv[i],"-o")) -	  if (!compile) _link=1; -#endif -      newargv=alloca(sizeof(char*)*(argc+100)); -      a=alloca(strlen(diethome)+20); -      b=alloca(strlen(platform)+20); -      c=alloca(strlen(platform)+20); - -      strcpy(a,"-I"); strcat(a,diethome); strcat(a,"/include"); -#ifndef __DYN_LIB -      strcpy(b,platform); -      if (profile) strcat(b,"/pstart.o"); else strcat(b,"/start.o"); -#ifdef INSTALLVERSION -      strcpy(c,platform); strcat(c,"/libc.a"); -#else -      strcpy(c,platform); strcat(c,"/dietlibc.a"); -#endif -#else -      strcpy(b,platform); strcat(b,"/dstart.o"); -      strcpy(c,"-lc"); -#endif - -#ifdef WANT_DYNAMIC -      d=alloca(strlen(platform)+20); -      e=alloca(strlen(platform)+20); -#ifdef __DYN_LIB -      strcpy(d,platform); -      strcpy(e,platform); -      if (shared) -	strcat(d,"/dyn_so_start.o"); -#ifdef INSTALLVERSION -      else -	strcat(d,"/dyn_dstart.o"); -      strcat(e,"/dyn_dstop.o"); -#else -      else -	strcat(d,"/dyn_start.o"); -      strcat(e,"/dyn_stop.o"); -#endif -#else -      strcpy(d,platform); strcat(d,"/dyn_start.o"); -      strcpy(e,platform); strcat(e,"/dyn_stop.o"); -#endif -#endif - -      dest=newargv; -      *dest++=argv[1]; -#ifndef __DYN_LIB -      if (_link) { *dest++=(char*)nostdlib; *dest++=dashstatic; *dest++=dashL; } -#else -      /* avoid R_*_COPY relocations */ -      *dest++="-fPIC"; -      if (_link || shared) { *dest++=(char*)nostdlib; *dest++=dashL; } -#endif -#ifdef WANT_SAFEGUARD -      if (compile && !preprocess) { -	*dest++=safeguard1; -	*dest++=safeguard2; -      } -#endif -      if (_link) { *dest++=b; } -#ifdef WANT_DYNAMIC -      if (_link) { *dest++=d; } -#endif -      for (i=2; i<argc; ++i) { -	if (mangleopts) -	  if (argv[i][0]=='-' && (argv[i][1]=='O' || argv[i][1]=='f' || argv[i][1]=='m')) { -	    if (strcmp(argv[i],"-fpic") && strcmp(argv[i],"-fno-pic")) -	      continue; -	  } -	*dest++=argv[i]; -      } -#ifndef __DYN_LIB -      if (compile || _link) *dest++=a; -#else -      if (compile || _link || shared) *dest++=a; -#endif -      *dest++="-D__dietlibc__"; -      if (mangleopts) { -	const char **o=Os; - -	{ -	  int fd; -	  char* tmp=getenv("HOME"); -	  if (tmp) { -	    if (strlen(tmp)+strlen(cc)<900) { -	      strcpy(manglebuf,tmp); -	      strcat(manglebuf,"/.diet/"); -	      strcat(manglebuf,cc); -	      if ((fd=open(manglebuf,O_RDONLY))>=0) { -		int len=read(fd,manglebuf,1023); -		if (len>0) { -		  int i; -		  manglebuf[len]=0; -		  *dest++=manglebuf; -		  for (i=1; i<len; ++i) { -		    if (manglebuf[i]==' ' || manglebuf[i]=='\n') { -		      manglebuf[i]=0; -		      if (i+1<len) -			*dest++=manglebuf+i+1; -		    } -		  } -		  goto incorporated; -		} -	      } -	    } -	  } -	} -	for (o=Os;*o;++o) { -	  if (!strcmp(*o,shortplatform)) { -	    ++o; -	    while (*o) { -	      *dest++=(char*)*o; -	      ++o; -	    } -	    break; -	  } else -	    while (*o) ++o; -	} -      } -incorporated: -      if (_link) { -	if (profile) *dest++="-lgmon"; -	if (!strcmp(shortplatform,"sparc") || !strcmp(shortplatform,"sparc64")) { -	  *dest++=(char*)libgcc; *dest++=c; -	} else { -	*dest++=c; *dest++=(char*)libgcc; -      } -      } -#ifdef WANT_DYNAMIC -      if (_link) { *dest++=e; } -#endif -#ifdef __DYN_LIB -      if (shared){ *dest++=c; } -      f=alloca(strlen(platform)+100); -      if (_link) { -	strcpy(f,"-Wl,-dynamic-linker="); -	strcat(f,platform); -//	strcat(f,"/diet-linux.so"); -	strcat(f,"/libdl.so"); -	*dest++=f; -      } -#endif -      *dest=0; -      if (verbose) { -	int i; -	for (i=0; newargv[i]; i++) { -	  __write2(newargv[i]); -	  __write2(" "); -	} -	__write2("\n"); -      } -      execvp(newargv[0],newargv); -      goto error; -    } else if (!strcmp(tmp,"ld")) { -    } -  } -donttouch: -  execvp(argv[1],argv+1); -error: -  error("execvp() failed!\n"); -  return 1; -} | 
