Browse Source

* i386 PIC: Do not force EBX as a GOT register if tf_section_threadvars is not set. Actually forcing EBX here is a bad idea anyway.

git-svn-id: trunk@41463 -
yury 6 years ago
parent
commit
039aee9568
1 changed files with 4 additions and 1 deletions
  1. 4 1
      compiler/i386/cpupi.pas

+ 4 - 1
compiler/i386/cpupi.pas

@@ -100,8 +100,11 @@ unit cpupi;
       begin
       begin
         if (cs_create_pic in current_settings.moduleswitches) then
         if (cs_create_pic in current_settings.moduleswitches) then
           begin
           begin
-            if pi_uses_threadvar in flags then
+            if (pi_uses_threadvar in flags) and (tf_section_threadvars in target_info.flags) then
               begin
               begin
+                { FIXME: It is better to use an imaginary register for GOT and
+                  if EBX is needed for some reason just allocate EBX and
+                  copy GOT into it before its usage. }
                 cg.getcpuregister(list,NR_EBX);
                 cg.getcpuregister(list,NR_EBX);
                 got := NR_EBX;
                 got := NR_EBX;
               end
               end