From 9f21696b100aee891659bb39d4850295f7877912 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Mon, 13 Feb 1995 20:21:44 +0000 Subject: [PATCH] Fix collecting under AIX From-SVN: r8933 --- gcc/collect2.c | 27 ++++++++++++++++++++------- gcc/config/rs6000/rs6000.h | 4 ++++ 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/gcc/collect2.c b/gcc/collect2.c index be28cc6..c47a167 100644 --- a/gcc/collect2.c +++ b/gcc/collect2.c @@ -824,6 +824,8 @@ main (argc, argv) char **ld1 = ld1_argv; char **ld2_argv = (char **) xcalloc (sizeof (char *), argc+5); char **ld2 = ld2_argv; + char **object_lst = (char **) xcalloc (sizeof (char *), argc); + char **object = object_lst; int first_file; int num_c_args = argc+7; @@ -1154,15 +1156,19 @@ main (argc, argv) break; } } - else if (first_file - && (p = rindex (arg, '.')) != (char *)0 + else if ((p = rindex (arg, '.')) != (char *)0 && (strcmp (p, ".o") == 0 || strcmp (p, ".a") == 0)) { - first_file = 0; - /* place o_file BEFORE this argument! */ - ld2--; - *ld2++ = o_file; - *ld2++ = arg; + if (first_file) + { + first_file = 0; + /* place o_file BEFORE this argument! */ + ld2--; + *ld2++ = o_file; + *ld2++ = arg; + } + if (p[1] == 'o') + *object++ = arg; } } @@ -1261,6 +1267,13 @@ main (argc, argv) if (rflag) return 0; +#ifdef COLLECT_SCAN_OBJECTS + /* The AIX linker will discard static constructors in object files if + nothing else in the file is referenced, so look at them first. */ + while (object_lst < object) + scan_prog_file (*object_lst++, PASS_FIRST); +#endif + scan_prog_file (output_file, PASS_FIRST); #ifdef SCAN_LIBRARIES diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h index 8daf168..099dda0 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -98,6 +98,10 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ /* Don't turn -B into -L if the argument specifies a relative file name. */ #define RELATIVE_PREFIX_NOT_LINKDIR +/* The AIX linker will discard static constructors in object files before + collect has a chance to see them, so scan the object files directly. */ +#define COLLECT_SCAN_OBJECTS + /* Architecture type. */ extern int target_flags; -- 2.7.4