From: kenner Date: Thu, 15 Jun 1995 02:21:06 +0000 (+0000) Subject: (main): Don't turn off auto_export because of -g. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=661ab6cfe581cdf55bea0d3cba6246443a4c95a2;p=platform%2Fupstream%2Flinaro-gcc.git (main): Don't turn off auto_export because of -g. (main): Ignore the argument to -o. (main): Place o_file after an initial .o (like crt0.o). If we have LD_INIT_SWITCH, use init and fini functions for executables, too. Specify the unique function names. (write_c_file_stat): Fix the case of destructors but no constructors. Don't include the generic-named functions for executables. (write_c_file): If we have LD_INIT_SWITCH, always use write_c_file_stat. (main): Also add _GLOBAL__D? to export list. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@9956 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/collect2.c b/gcc/collect2.c index 5edae57..fe22b83 100644 --- a/gcc/collect2.c +++ b/gcc/collect2.c @@ -1240,8 +1240,9 @@ main (argc, argv) #ifdef COLLECT_EXPORT_LIST case 'b': - if (!strncmp (arg, "-bE:", 4) - || !strncmp (arg, "-bexport:", 9)) + if ((!strncmp (arg, "-bE:", 4) + || !strncmp (arg, "-bexport:", 9)) + && strcmp (arg, "-bexport:/usr/lib/libg.exp")) auto_export = 0; break; #endif @@ -1258,7 +1259,10 @@ main (argc, argv) break; case 'o': - output_file = (arg[2] == '\0') ? argv[1] : &arg[2]; + if (arg[2] == '\0') + output_file = *ld1++ = *ld2++ = *++argv; + else + output_file = &arg[2]; break; case 'r': @@ -1289,10 +1293,15 @@ main (argc, argv) if (first_file) { first_file = 0; - /* place o_file BEFORE this argument! */ - ld2--; - *ld2++ = o_file; - *ld2++ = arg; + if (p[1] == 'o') + *ld2++ = o_file; + else + { + /* place o_file BEFORE this argument! */ + ld2--; + *ld2++ = o_file; + *ld2++ = arg; + } } if (p[1] == 'o') *object++ = arg; @@ -1315,19 +1324,6 @@ main (argc, argv) p = q; } - /* Tell the linker that we have initializer and finalizer functions. */ - if (shared_obj) - { -#ifdef LD_INIT_SWITCH - *ld2++ = LD_INIT_SWITCH; - *ld2++ = "_GLOBAL__DI"; -#endif -#ifdef LD_FINI_SWITCH - *ld2++ = LD_FINI_SWITCH; - *ld2++ = "_GLOBAL__DD"; -#endif - } - #ifdef COLLECT_EXPORT_LIST /* The AIX linker will discard static constructors in object files if nothing else in the file is referenced, so look at them first. */ @@ -1349,7 +1345,7 @@ main (argc, argv) #endif *c_ptr++ = c_file; - *object = *c_ptr = *ld1 = *ld2 = (char *)0; + *object = *c_ptr = *ld1 = (char *)0; if (vflag) { @@ -1462,11 +1458,22 @@ main (argc, argv) if (fclose (outf)) fatal_perror ("closing %s", c_file); + /* Tell the linker that we have initializer and finalizer functions. */ +#ifdef LD_INIT_SWITCH + *ld2++ = LD_INIT_SWITCH; + *ld2++ = initname; + *ld2++ = LD_FINI_SWITCH; + *ld2++ = fininame; +#endif + *ld2 = (char*)0; + #ifdef COLLECT_EXPORT_LIST if (shared_obj) { add_to_list (&exports, initname); add_to_list (&exports, fininame); + add_to_list (&exports, "_GLOBAL__DI"); + add_to_list (&exports, "_GLOBAL__DD"); exportf = fopen (export_file, "w"); if (exportf == (FILE *)0) fatal_perror ("%s", export_file); @@ -1775,6 +1782,8 @@ write_c_file_stat (stream, name) fprintf (stream, "\tp = ctors + %d;\n", constructors.number); fprintf (stream, "\twhile (p > ctors) (*--p)();\n"); } + else + fprintf (stream, "\t++count;\n"); fprintf (stream, "}\n"); write_list_with_asm (stream, "extern entry_pt ", destructors.first); fprintf (stream, "void %s() {\n", fininame); @@ -1791,8 +1800,11 @@ write_c_file_stat (stream, name) } fprintf (stream, "}\n"); - fprintf (stream, "void _GLOBAL__DI() {\n\t%s();\n}\n", initname); - fprintf (stream, "void _GLOBAL__DD() {\n\t%s();\n}\n", fininame); + if (shared_obj) + { + fprintf (stream, "void _GLOBAL__DI() {\n\t%s();\n}\n", initname); + fprintf (stream, "void _GLOBAL__DD() {\n\t%s();\n}\n", fininame); + } } /* Write the constructor/destructor tables. */ @@ -1829,10 +1841,12 @@ write_c_file (stream, name) FILE *stream; char *name; { - if (shared_obj) - write_c_file_stat (stream, name); - else +#ifndef LD_INIT_SWITCH + if (! shared_obj) write_c_file_glob (stream, name); + else +#endif + write_c_file_stat (stream, name); } static void