* Always create a section before emitting data to current_asmdata.asmlists[al_typedconsts]. Without it, such data ends up in sections created elsewhere, creating very non-obvious dependencies on other parts of compiler.

git-svn-id: trunk@17816 -
This commit is contained in:
sergei 2011-06-24 02:05:56 +00:00
parent 4e4b494b52
commit 7d99f95c45
7 changed files with 7 additions and 5 deletions

View File

@ -171,7 +171,7 @@ implementation
cg.a_jmp_flags(current_asmdata.CurrAsmList,F_GE,l2); cg.a_jmp_flags(current_asmdata.CurrAsmList,F_GE,l2);
hregister:=cg.getfpuregister(current_asmdata.CurrAsmList,OS_F64); hregister:=cg.getfpuregister(current_asmdata.CurrAsmList,OS_F64);
current_asmdata.asmlists[al_typedconsts].concat(tai_align.create(const_align(8))); new_section(current_asmdata.asmlists[al_typedconsts],sec_rodata_norel,l1.name,const_align(8));
current_asmdata.asmlists[al_typedconsts].concat(Tai_label.Create(l1)); current_asmdata.asmlists[al_typedconsts].concat(Tai_label.Create(l1));
{ I got this constant from a test program (FK) } { I got this constant from a test program (FK) }
current_asmdata.asmlists[al_typedconsts].concat(Tai_const.Create_32bit($41f00000)); current_asmdata.asmlists[al_typedconsts].concat(Tai_const.Create_32bit($41f00000));

View File

@ -156,7 +156,7 @@ begin
s64real: s64real:
begin begin
hregister := cg.getfpuregister(current_asmdata.CurrAsmList, OS_F64); hregister := cg.getfpuregister(current_asmdata.CurrAsmList, OS_F64);
current_asmdata.asmlists[al_typedconsts].concat(tai_align.Create(const_align(8))); new_section(current_asmdata.asmlists[al_typedconsts],sec_rodata_norel,l1.name,const_align(8));
current_asmdata.asmlists[al_typedconsts].concat(Tai_label.Create(l1)); current_asmdata.asmlists[al_typedconsts].concat(Tai_label.Create(l1));
{ I got this constant from a test program (FK) } { I got this constant from a test program (FK) }

View File

@ -1161,8 +1161,7 @@ implementation
(pd.visibility=vis_published) then (pd.visibility=vis_published) then
begin begin
current_asmdata.getdatalabel(l); current_asmdata.getdatalabel(l);
new_section(current_asmdata.asmlists[al_typedconsts],sec_rodata_norel,l.name,const_align(sizeof(pint)));
current_asmdata.asmlists[al_typedconsts].concat(cai_align.create(const_align(sizeof(pint))));
current_asmdata.asmlists[al_typedconsts].concat(Tai_label.Create(l)); current_asmdata.asmlists[al_typedconsts].concat(Tai_label.Create(l));
current_asmdata.asmlists[al_typedconsts].concat(Tai_const.Create_8bit(length(tsym(p).realname))); current_asmdata.asmlists[al_typedconsts].concat(Tai_const.Create_8bit(length(tsym(p).realname)));
current_asmdata.asmlists[al_typedconsts].concat(Tai_string.Create(tsym(p).realname)); current_asmdata.asmlists[al_typedconsts].concat(Tai_string.Create(tsym(p).realname));

View File

@ -167,7 +167,7 @@ implementation
s64real: s64real:
begin begin
hregister:=cg.getfpuregister(current_asmdata.CurrAsmList,OS_F64); hregister:=cg.getfpuregister(current_asmdata.CurrAsmList,OS_F64);
current_asmdata.asmlists[al_typedconsts].concat(tai_align.create(const_align(8))); new_section(current_asmdata.asmlists[al_typedconsts],sec_rodata_norel,l1.name,const_align(8));
current_asmdata.asmlists[al_typedconsts].concat(Tai_label.Create(l1)); current_asmdata.asmlists[al_typedconsts].concat(Tai_label.Create(l1));
{ I got this constant from a test program (FK) } { I got this constant from a test program (FK) }
current_asmdata.asmlists[al_typedconsts].concat(Tai_const.Create_32bit($41f00000)); current_asmdata.asmlists[al_typedconsts].concat(Tai_const.Create_32bit($41f00000));

View File

@ -348,6 +348,7 @@ implementation
current_asmdata.CurrAsmList.concat(taicpu.op_ref(A_FILD,S_IQ,leftref)); current_asmdata.CurrAsmList.concat(taicpu.op_ref(A_FILD,S_IQ,leftref));
cg.a_jmp_flags(current_asmdata.CurrAsmList,F_NC,l2); cg.a_jmp_flags(current_asmdata.CurrAsmList,F_NC,l2);
new_section(current_asmdata.asmlists[al_typedconsts],sec_rodata_norel,l1.name,const_align(sizeof(pint)));
current_asmdata.asmlists[al_typedconsts].concat(Tai_label.Create(l1)); current_asmdata.asmlists[al_typedconsts].concat(Tai_label.Create(l1));
{ I got this constant from a test program (FK) } { I got this constant from a test program (FK) }
current_asmdata.asmlists[al_typedconsts].concat(Tai_const.Create_32bit(0)); current_asmdata.asmlists[al_typedconsts].concat(Tai_const.Create_32bit(0));

View File

@ -164,6 +164,7 @@ interface
reg:=cg.getmmregister(current_asmdata.CurrAsmList,def_cgsize(resultdef)); reg:=cg.getmmregister(current_asmdata.CurrAsmList,def_cgsize(resultdef));
current_asmdata.getdatalabel(l1); current_asmdata.getdatalabel(l1);
new_section(current_asmdata.asmlists[al_typedconsts],sec_rodata_norel,l1.name,const_align(sizeof(pint)));
current_asmdata.asmlists[al_typedconsts].concat(Tai_label.Create(l1)); current_asmdata.asmlists[al_typedconsts].concat(Tai_label.Create(l1));
case def_cgsize(resultdef) of case def_cgsize(resultdef) of
OS_F32: OS_F32:

View File

@ -136,6 +136,7 @@ implementation
end; end;
cg.a_jmp_flags(current_asmdata.CurrAsmList,F_NC,l2); cg.a_jmp_flags(current_asmdata.CurrAsmList,F_NC,l2);
new_section(current_asmdata.asmlists[al_typedconsts],sec_rodata_norel,l1.name,const_align(sizeof(pint)));
current_asmdata.asmlists[al_typedconsts].concat(Tai_label.Create(l1)); current_asmdata.asmlists[al_typedconsts].concat(Tai_label.Create(l1));
reference_reset_symbol(href,l1,0,4); reference_reset_symbol(href,l1,0,4);
{ simplify for PIC } { simplify for PIC }