Ver código fonte

* ignore pic directive/switch if the platform doesn't support pic, resolves #9281

git-svn-id: trunk@8157 -
florian 18 anos atrás
pai
commit
5e60b52f28

+ 2 - 2
compiler/msg/errore.msg

@@ -345,8 +345,8 @@ scanner_e_illegal_warn_state=02079_E_Illegal state for $WARN directive
 % Only ON and OFF can be used as state with a \$warn compiler directive
 scan_e_only_packset=02080_E_Illegal set packing value
 % Only 0, 1, 2, 4, 8, DEFAULT and NORMAL are allowed as packset parameter
-scan_w_pic_ignored=02081_W_PIC directive ignored
-% Several targets like windows do not support the PIC directive and need it to be
+scan_w_pic_ignored=02081_W_PIC directive or switch ignored
+% Several targets like windows do not support neither need PIC so the PIC directive and switch are
 % ignored.
 scan_w_unsupported_switch_by_target=02082_W_The switch "$1" is not supported by the currently selected target
 % Some compiler switches like $E are not supported by all targets.

+ 1 - 1
compiler/msgidx.inc

@@ -729,7 +729,7 @@ const
   option_info=11024;
   option_help_pages=11025;
 
-  MsgTxtSize = 43728;
+  MsgTxtSize = 43738;
 
   MsgIdxMax : array[1..20] of longint=(
     24,83,237,83,63,49,107,22,135,60,

Diferenças do arquivo suprimidas por serem muito extensas
+ 195 - 194
compiler/msgtxt.inc


+ 10 - 2
compiler/options.pas

@@ -496,7 +496,10 @@ begin
                        break;
                      end;
                     'g' :
-                      include(init_settings.moduleswitches,cs_create_pic);
+                       if tf_no_pic_supported in target_info.flags then
+                         message(scan_w_pic_ignored)
+                       else
+                         include(init_settings.moduleswitches,cs_create_pic);
                     'h' :
                       begin
                          val(copy(more,j+1,length(more)-j),heapsize,code);
@@ -672,7 +675,12 @@ begin
            'f' :
              begin
                if more='PIC' then
-                 include(init_settings.moduleswitches,cs_create_pic)
+                 begin
+                   if tf_no_pic_supported in target_info.flags then
+                     message(scan_w_pic_ignored)
+                   else
+                     include(init_settings.moduleswitches,cs_create_pic)
+                 end
                else
                  IllegalPara(opt);
              end;

+ 3 - 3
compiler/scandir.pas

@@ -851,10 +851,10 @@ implementation
     procedure dir_pic;
       begin
         { windows doesn't need/support pic }
-        if not(target_info.system in system_windows+system_wince) then
-          do_moduleswitch(cs_create_pic)
+        if tf_no_pic_supported in target_info.flags then
+          message(scan_w_pic_ignored)
         else
-          message(scan_w_pic_ignored);
+          do_moduleswitch(cs_create_pic);
       end;
 
     procedure dir_pop;

+ 2 - 1
compiler/systems.pas

@@ -313,7 +313,8 @@ interface
             tf_winlikewidestring,
             tf_dwarf_relative_addresses,         // use offsets where the Dwarf spec requires this instead of absolute addresses (the latter is needed by Linux binutils)
             tf_dwarf_only_local_labels,          // only use local labels inside the Dwarf debug_info section (needed for e.g. Darwin)
-            tf_requires_proper_alignment
+            tf_requires_proper_alignment,
+            tf_no_pic_supported
        );
 
        psysteminfo = ^tsysteminfo;

+ 7 - 4
compiler/systems/i_win.pas

@@ -33,7 +33,7 @@ unit i_win;
             name         : 'Win32 for i386';
             shortname    : 'Win32';
             flags        : [tf_files_case_aware,tf_has_dllscanner,tf_use_function_relative_addresses
-                            ,tf_smartlink_sections{,tf_section_threadvars}{,tf_needs_dwarf_cfi},tf_winlikewidestring];
+                            ,tf_smartlink_sections{,tf_section_threadvars}{,tf_needs_dwarf_cfi},tf_winlikewidestring,tf_no_pic_supported];
             cpu          : cpu_i386;
             unit_env     : 'WIN32UNITS';
             extradefines : 'MSWINDOWS;WINDOWS';
@@ -92,7 +92,8 @@ unit i_win;
             system       : system_x86_64_win64;
             name         : 'Win64 for x64';
             shortname    : 'Win64';
-            flags        : [tf_files_case_aware,tf_has_dllscanner,tf_use_function_relative_addresses,tf_winlikewidestring];
+            flags        : [tf_files_case_aware,tf_has_dllscanner,tf_use_function_relative_addresses,
+                            tf_winlikewidestring,tf_no_pic_supported];
             cpu          : cpu_x86_64;
             unit_env     : 'WIN64UNITS';
             extradefines : 'MSWINDOWS;WINDOWS';
@@ -151,7 +152,8 @@ unit i_win;
             system       : system_arm_wince;
             name         : 'WinCE for ARM';
             shortname    : 'WinCE';
-            flags        : [tf_files_case_aware,tf_use_function_relative_addresses{,tf_winlikewidestring},tf_smartlink_sections,tf_requires_proper_alignment];
+            flags        : [tf_files_case_aware,tf_use_function_relative_addresses{,tf_winlikewidestring},
+                            tf_smartlink_sections,tf_requires_proper_alignment,tf_no_pic_supported];
             cpu          : cpu_arm;
             unit_env     : '';
             extradefines : 'UNDER_CE;WINDOWS;UNICODE';
@@ -210,7 +212,8 @@ unit i_win;
             system       : system_i386_wince;
             name         : 'WinCE for i386';
             shortname    : 'WinCE';
-            flags        : [tf_files_case_aware,tf_use_function_relative_addresses{,tf_winlikewidestring},tf_smartlink_sections];
+            flags        : [tf_files_case_aware,tf_use_function_relative_addresses
+                            {,tf_winlikewidestring},tf_smartlink_sections,tf_no_pic_supported];
             cpu          : cpu_i386;
             unit_env     : '';
             extradefines : 'UNDER_CE;WINDOWS;UNICODE';

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff