From f5e04914fb476f5ea40a72b0cb675571347c953d Mon Sep 17 00:00:00 2001 From: David Edelsohn Date: Tue, 27 Oct 1998 08:23:17 -0500 Subject: [PATCH] collect2.c (aix64_flag): New variable. * collect2.c (aix64_flag): New variable. (main, case 'b'): Parse it. (GCC_CHECK_HDR): object magic number must match mode. (scan_prog_file): Only check for shared object if valid header. Print debugging if header/mode mismatch. From-SVN: r23365 --- gcc/ChangeLog | 12 ++++++++++-- gcc/collect2.c | 30 +++++++++++++++++++++++------- 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ba537b5..d664b98 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,4 +1,12 @@ -Tue Oct 27 10:15:02 EST 1998 Nick Clifton +Tue Oct 27 16:11:43 1998 David Edelsohn + + * collect2.c (aix64_flag): New variable. + (main, case 'b'): Parse it. + (GCC_CHECK_HDR): object magic number must match mode. + (scan_prog_file): Only check for shared object if valid header. + Print debugging if header/mode mismatch. + +Tue Oct 27 10:15:02 1998 Nick Clifton Added support for arm-elf-linux configuration, submitted by Philip Blundell , and integrated this with the arm-elf @@ -52,7 +60,7 @@ Tue Oct 27 10:15:02 EST 1998 Nick Clifton command line option. -Tue Oct 27 08:56:46 EST 1998 Andrew MacLeod +Tue Oct 27 08:56:46 1998 Andrew MacLeod * dwarfout.c (ASM_OUTPUT_DWARF_STRING_NEWLINE): ASM_OUTPUT_DWARF_STRING has been changed to not include a newline. Use this macro instead. diff --git a/gcc/collect2.c b/gcc/collect2.c index bf494c0..166cbe1 100644 --- a/gcc/collect2.c +++ b/gcc/collect2.c @@ -196,6 +196,7 @@ static int rflag; /* true if -r */ static int strip_flag; /* true if -s */ #ifdef COLLECT_EXPORT_LIST static int export_flag; /* true if -bE */ +static int aix64_flag; /* true if -b64 */ #endif int debug; /* true if -debug */ @@ -1264,6 +1265,8 @@ main (argc, argv) case 'b': if (arg[2] == 'E' || strncmp (&arg[2], "export", 6) == 0) export_flag = 1; + if (arg[2] == '6' && arg[3] == '4') + aix64_flag = 1; break; #endif @@ -2798,7 +2801,9 @@ scan_libraries (prog_name) (((X).n_sclass == C_EXT) && ((X).n_scnum == N_UNDEF)) # define GCC_SYMINC(X) ((X).n_numaux+1) # define GCC_SYMZERO(X) 0 -# define GCC_CHECK_HDR(X) (1) +# define GCC_CHECK_HDR(X) \ + ((HEADER (X).f_magic == U802TOCMAGIC && ! aix64_flag) \ + || (HEADER (X).f_magic == 0757 && aix64_flag)) #endif extern char *ldgetname (); @@ -2841,18 +2846,19 @@ scan_prog_file (prog_name, which_pass) #endif if ((ldptr = ldopen (prog_name, ldptr)) != NULL) { - - if (!MY_ISCOFF (HEADER (ldptr).f_magic)) + if (! MY_ISCOFF (HEADER (ldptr).f_magic)) fatal ("%s: not a COFF file", prog_name); -#ifdef COLLECT_EXPORT_LIST - /* Is current archive member a shared object? */ - is_shared = HEADER (ldptr).f_flags & F_SHROBJ; -#endif if (GCC_CHECK_HDR (ldptr)) { sym_count = GCC_SYMBOLS (ldptr); sym_index = GCC_SYMZERO (ldptr); + +#ifdef COLLECT_EXPORT_LIST + /* Is current archive member a shared object? */ + is_shared = HEADER (ldptr).f_flags & F_SHROBJ; +#endif + while (sym_index < sym_count) { GCC_SYMENT symbol; @@ -2970,6 +2976,16 @@ scan_prog_file (prog_name, which_pass) #endif } } +#ifdef COLLECT_EXPORT_LIST + else + { + /* If archive contains both 32-bit and 64-bit objects, + we want to skip objects in other mode so mismatch normal. */ + if (debug) + fprintf (stderr, "%s : magic=%o aix64=%d mismatch\n", + prog_name, HEADER (ldptr).f_magic, aix64_flag); + } +#endif } else { -- 2.7.4