Browse Source

* don't put resstrs in multiple .o files. It is too dependent on the linker script

git-svn-id: trunk@3097 -
peter 19 years ago
parent
commit
c18c8e2412
1 changed files with 5 additions and 4 deletions
  1. 5 4
      compiler/cresstr.pas

+ 5 - 4
compiler/cresstr.pas

@@ -149,7 +149,11 @@ uses
         resstrlab : tasmsymbol;
         resstrlab : tasmsymbol;
         R : TResourceStringItem;
         R : TResourceStringItem;
       begin
       begin
-        current_asmdata.asmlists[al_resourcestrings].concat(Tai_cutobject.Create_begin);
+        { Put resourcestrings in a new objectfile. Putting it in multiple files
+	  makes the linking too dependent on the linker script requiring a SORT(*) for
+	  the data sections }
+        maybe_new_object_file(current_asmdata.asmlists[al_const]);
+        maybe_new_object_file(current_asmdata.asmlists[al_resourcestrings]);
         new_section(current_asmdata.asmlists[al_resourcestrings],sec_data,'resstridx_'+current_module.localsymtable.name^+'_start',sizeof(aint));
         new_section(current_asmdata.asmlists[al_resourcestrings],sec_data,'resstridx_'+current_module.localsymtable.name^+'_start',sizeof(aint));
         current_asmdata.AsmLists[al_resourcestrings].concat(tai_symbol.createname_global(
         current_asmdata.AsmLists[al_resourcestrings].concat(tai_symbol.createname_global(
           make_mangledname('RESSTR',current_module.localsymtable,'START'),AT_DATA,0));
           make_mangledname('RESSTR',current_module.localsymtable,'START'),AT_DATA,0));
@@ -168,7 +172,6 @@ uses
         R:=TResourceStringItem(List.First);
         R:=TResourceStringItem(List.First);
         while assigned(R) do
         while assigned(R) do
           begin
           begin
-            maybe_new_object_file(current_asmdata.asmlists[al_const]);
             new_section(current_asmdata.asmlists[al_const],sec_rodata,'resstrdata_'+R.name,sizeof(aint));
             new_section(current_asmdata.asmlists[al_const],sec_rodata,'resstrdata_'+R.name,sizeof(aint));
             { Write default value }
             { Write default value }
             if assigned(R.value) and (R.len<>0) then
             if assigned(R.value) and (R.len<>0) then
@@ -187,7 +190,6 @@ uses
                      HashValue    : LongWord;
                      HashValue    : LongWord;
                    end;
                    end;
             }
             }
-            current_asmdata.asmlists[al_resourcestrings].concat(Tai_cutobject.Create);
             new_section(current_asmdata.asmlists[al_resourcestrings],sec_data,'resstridx_'+r.name,sizeof(aint));
             new_section(current_asmdata.asmlists[al_resourcestrings],sec_data,'resstridx_'+r.name,sizeof(aint));
             resstrlab:=current_asmdata.DefineAsmSymbol(make_mangledname('RESSTR',R.Sym.owner,R.Sym.name),AB_GLOBAL,AT_DATA);
             resstrlab:=current_asmdata.DefineAsmSymbol(make_mangledname('RESSTR',R.Sym.owner,R.Sym.name),AB_GLOBAL,AT_DATA);
             current_asmdata.asmlists[al_resourcestrings].concat(tai_symbol.Create_global(resstrlab,0));
             current_asmdata.asmlists[al_resourcestrings].concat(tai_symbol.Create_global(resstrlab,0));
@@ -201,7 +203,6 @@ uses
             current_asmdata.asmlists[al_resourcestrings].concat(tai_symbol_end.create(resstrlab));
             current_asmdata.asmlists[al_resourcestrings].concat(tai_symbol_end.create(resstrlab));
             R:=TResourceStringItem(R.Next);
             R:=TResourceStringItem(R.Next);
           end;
           end;
-        current_asmdata.asmlists[al_resourcestrings].concat(Tai_cutobject.Create_end);
         new_section(current_asmdata.asmlists[al_resourcestrings],sec_data,'resstridx_'+current_module.localsymtable.name^+'_end',sizeof(aint));
         new_section(current_asmdata.asmlists[al_resourcestrings],sec_data,'resstridx_'+current_module.localsymtable.name^+'_end',sizeof(aint));
         current_asmdata.AsmLists[al_resourcestrings].concat(tai_symbol.createname_global(
         current_asmdata.AsmLists[al_resourcestrings].concat(tai_symbol.createname_global(
           make_mangledname('RESSTR',current_module.localsymtable,'END'),AT_DATA,0));
           make_mangledname('RESSTR',current_module.localsymtable,'END'),AT_DATA,0));