outcoff: BR 2685756: fix SAFESEH with an internal symbol
authorAndy Polyakov <appro@users.sourceforge.net>
Wed, 18 Mar 2009 21:49:23 +0000 (14:49 -0700)
committerH. Peter Anvin <hpa@linux.intel.com>
Wed, 18 Mar 2009 21:49:23 +0000 (14:49 -0700)
Fix the SAFESEH directive for the specific case of a symbol internal
to the program.  With the optimizer enabled, it would otherwise fail
unless the symbol is external.

output/outcoff.c

index 16d2719..1540c60 100644 (file)
@@ -726,7 +726,9 @@ static int coff_directives(char *directive, char *value, int pass)
            else
                sxseg = i;
        }
-       if (pass==2) {
+       /* pass0 == 2 is the only time when the full set of symbols are
+          guaranteed to be present; it is the final output pass. */
+       if (pass0 == 2) {
            uint32_t n;
            saa_rewind(syms);
            for (n = 0; n < nsyms; n++) {