2
0
Эх сурвалжийг харах

* only use indirect symbol loads for (weak)external and private_external
symbols on darwin/ppc and darwin/i386, and also for common symbols on
darwin/ppc, as they're not required for other kinds of symbols on those
platforms (gcc doesn't use them either with -O1 and higher; it does use
them always for darwin/ppc64 except for local symbols, and hence so do we)

git-svn-id: trunk@22271 -

Jonas Maebe 13 жил өмнө
parent
commit
952ac1ffa6

+ 4 - 4
compiler/ppcgen/cgppc.pas

@@ -1015,12 +1015,12 @@ unit cgppc;
         if (target_info.system in [system_powerpc_darwin,system_powerpc64_darwin]) and
            assigned(ref.symbol) and
            not assigned(ref.relsymbol) and
-           ((ref.symbol.bind in [AB_EXTERNAL,AB_WEAK_EXTERNAL]) or
+           ((ref.symbol.bind in [AB_EXTERNAL,AB_WEAK_EXTERNAL,AB_PRIVATE_EXTERN,AB_COMMON]) or
             (cs_create_pic in current_settings.moduleswitches))then
           begin
-            if (ref.symbol.bind in [AB_EXTERNAL,AB_WEAK_EXTERNAL]) or
-               ((cs_create_pic in current_settings.moduleswitches) and
-                (ref.symbol.bind in [AB_COMMON,AB_GLOBAL,AB_PRIVATE_EXTERN])) then
+            if (ref.symbol.bind in [AB_EXTERNAL,AB_WEAK_EXTERNAL,AB_PRIVATE_EXTERN,AB_COMMON]) or
+               ((target_info.system=system_powerpc64_darwin) and
+                (ref.symbol.bind=AB_GLOBAL)) then
               begin
                 tmpreg := g_indirect_sym_load(list,ref.symbol.name,asmsym2indsymflags(ref.symbol));
                 ref.symbol:=nil;

+ 2 - 4
compiler/x86/cgx86.pas

@@ -495,12 +495,10 @@ unit cgx86;
           begin
             if assigned(ref.symbol) and
                not(assigned(ref.relsymbol)) and
-               ((ref.symbol.bind in [AB_EXTERNAL,AB_WEAK_EXTERNAL]) or
+               ((ref.symbol.bind in [AB_EXTERNAL,AB_WEAK_EXTERNAL,AB_PRIVATE_EXTERN]) or
                 (cs_create_pic in current_settings.moduleswitches)) then
              begin
-               if (ref.symbol.bind in [AB_EXTERNAL,AB_WEAK_EXTERNAL]) or
-                  ((cs_create_pic in current_settings.moduleswitches) and
-                   (ref.symbol.bind in [AB_COMMON,AB_GLOBAL,AB_PRIVATE_EXTERN])) then
+               if ref.symbol.bind in [AB_EXTERNAL,AB_WEAK_EXTERNAL,AB_PRIVATE_EXTERN] then
                  begin
                    hreg:=g_indirect_sym_load(list,ref.symbol.name,asmsym2indsymflags(ref.symbol));
                    ref.symbol:=nil;