Просмотр исходного кода

* changed assembler directives for darwin lazy/non-lazy symbol pointers
and init/fini routines into their section equivalents (based on patch
by Dmitry Boyarintsev, mantis #15037)

git-svn-id: trunk@14128 -

Jonas Maebe 15 лет назад
Родитель
Сommit
edacea82be

+ 4 - 0
compiler/aasmbase.pas

@@ -73,6 +73,10 @@ interface
          sec_pdata,
          { used for darwin import stubs }
          sec_stub,
+         sec_data_nonlazy,
+         sec_data_lazy,
+         sec_init_func,
+         sec_term_func,
          { stabs }
          sec_stab,sec_stabstr,
          { win32 }

+ 1 - 1
compiler/aasmdata.pas

@@ -313,7 +313,7 @@ implementation
           AsmLists[hal]:=TAsmList.create;
         { PIC data }
         if (target_info.system in [system_powerpc_darwin,system_powerpc64_darwin,system_i386_darwin,system_arm_darwin]) then
-          AsmLists[al_picdata].concat(tai_directive.create(asd_non_lazy_symbol_pointer,''));
+          AsmLists[al_picdata].concat(tai_section.create(sec_data_nonlazy,'',0));
         { CFI }
         FAsmCFI:=CAsmCFI.Create;
       end;

+ 4 - 4
compiler/aasmtai.pas

@@ -263,8 +263,8 @@ interface
       TStabType = (stab_stabs,stab_stabn,stab_stabd);
 
       TAsmDirective=(
-        asd_non_lazy_symbol_pointer,asd_indirect_symbol,asd_lazy_symbol_pointer,
-        asd_extern,asd_nasm_import, asd_toc_entry, asd_mod_init_func, asd_mod_term_func,
+        asd_indirect_symbol,
+        asd_extern,asd_nasm_import, asd_toc_entry,
         asd_reference,asd_no_dead_strip,asd_weak_reference,asd_lazy_reference,
         asd_weak_definition
       );
@@ -274,8 +274,8 @@ interface
       tempallocstr : array[boolean] of string[10]=('released','allocated');
       stabtypestr : array[TStabType] of string[5]=('stabs','stabn','stabd');
       directivestr : array[TAsmDirective] of string[23]=(
-        'non_lazy_symbol_pointer','indirect_symbol','lazy_symbol_pointer',
-        'extern','nasm_import', 'tc', 'mod_init_func', 'mod_term_func', 'reference',
+        'indirect_symbol',
+        'extern','nasm_import', 'tc', 'reference',
         'no_dead_strip','weak_reference','lazy_reference','weak_definition'
       );
 

+ 32 - 0
compiler/aggas.pas

@@ -270,6 +270,10 @@ implementation
           '.threadvar',
           '.pdata',
           '', { stubs }
+          '__DATA,__nl_symbol_ptr',
+          '__DATA,__la_symbol_ptr',
+          '__DATA,__mod_init_func',
+          '__DATA,__mod_term_func',
           '.stab',
           '.stabstr',
           '.idata$2','.idata$4','.idata$5','.idata$6','.idata$7','.edata',
@@ -323,6 +327,10 @@ implementation
           '.threadvar',
           '.pdata',
           '', { stubs }
+          '__DATA,__nl_symbol_ptr',
+          '__DATA,__la_symbol_ptr',
+          '__DATA,__mod_init_func',
+          '__DATA,__mod_term_func',
           '.stab',
           '.stabstr',
           '.idata$2','.idata$4','.idata$5','.idata$6','.idata$7','.edata',
@@ -1297,6 +1305,26 @@ implementation
                     exit;
                   end;
               end;
+            sec_data_nonlazy:
+              begin
+                result:='.section __DATA, __nl_symbol_ptr,non_lazy_symbol_pointers';
+                exit;
+              end;
+            sec_data_lazy:
+              begin
+                result:='.section __DATA, __la_symbol_ptr,lazy_symbol_pointers';
+                exit;
+              end;
+            sec_init_func:
+              begin
+                result:='.section __DATA, __mod_init_func, mod_init_funcs';
+                exit;
+              end;
+            sec_term_func:
+              begin
+                result:='.section __DATA, __mod_term_func, mod_term_funcs';
+                exit;
+              end;
             sec_objc_protocol_ext:
               begin
                 result:='.section __OBJC, __protocol_ext, regular, no_dead_strip';
@@ -1432,6 +1460,10 @@ implementation
          sec_code (* sec_pdata *),
          { used for darwin import stubs }
          sec_code (* sec_stub *),
+         sec_data,(* sec_data_nonlazy *)
+         sec_data,(* sec_data_lazy *)
+         sec_data,(* sec_init_func *)
+         sec_data,(* sec_term_func *)
          { stabs }
          sec_stab,sec_stabstr,
          { win32 }

+ 1 - 1
compiler/i386/ag386nsm.pas

@@ -454,7 +454,7 @@ interface
           '.bss',
           '.tbss',
           '.pdata',
-          '.text',
+          '.text','.data','.data','.data','.data',
           '.stab',
           '.stabstr',
           '.idata2','.idata4','.idata5','.idata6','.idata7','.edata',

+ 8 - 0
compiler/ogbase.pas

@@ -820,6 +820,10 @@ implementation
           'threadvar',
           'pdata',
           'stub',
+          'data_nonlazy',
+          'data_lazy',
+          'init_func',
+          'term_func',
           'stab','stabstr',
           'iData2','iData4','iData5','iData6','iData7','eData',
           'eh_frame',
@@ -896,6 +900,10 @@ implementation
           {threadvar} [oso_load,oso_write],
           {pdata} [oso_load,oso_readonly,oso_keep],
           {stub} [oso_Data,oso_load,oso_readonly,oso_executable],
+          {data_nonlazy}  [oso_Data,oso_load,oso_write],
+          {data_lazy} [oso_Data,oso_load,oso_write],
+          {init_func} [oso_Data,oso_load],
+          {term_func} [oso_Data,oso_load],
           {stab} [oso_Data,oso_noload,oso_debug],
           {stabstr} [oso_Data,oso_noload,oso_strings,oso_debug],
           {iData2} [oso_Data,oso_load,oso_write],

+ 6 - 2
compiler/ogcoff.pas

@@ -481,8 +481,12 @@ implementation
 
        coffsecnames : array[TAsmSectiontype] of string[length('__DATA, __datacoal_nt,coalesced')] = ('',
           '.text','.data','.data','.data','.bss','.tls',
-          '.text',
-          '.pdata',
+          '.pdata',{pdata}
+          '.text', {stub}
+          '.data',
+          '.data',
+          '.data',
+          '.data',
           '.stab','.stabstr',
           '.idata$2','.idata$4','.idata$5','.idata$6','.idata$7','.edata',
           '.eh_frame',

+ 8 - 0
compiler/ogelf.pas

@@ -577,6 +577,10 @@ implementation
 {$endif userodata}
           '.pdata',
           '.text', { darwin stubs }
+          '__DATA,__nl_symbol_ptr',
+          '__DATA,__la_symbol_ptr',
+          '__DATA,__mod_init_func',
+          '__DATA,__mod_term_func',
           '.stab','.stabstr',
           '.idata$2','.idata$4','.idata$5','.idata$6','.idata$7','.edata',
           '.eh_frame',
@@ -629,6 +633,10 @@ implementation
           '.threadvar',
           '.pdata',
           '', { stubs }
+          '__DATA,__nl_symbol_ptr',
+          '__DATA,__la_symbol_ptr',
+          '__DATA,__mod_init_func',
+          '__DATA,__mod_term_func',
           '.stab',
           '.stabstr',
           '.idata$2','.idata$4','.idata$5','.idata$6','.idata$7','.edata',

+ 2 - 1
compiler/powerpc/agppcmpw.pas

@@ -75,7 +75,8 @@ interface
         'csect', {read only data}
         'csect', {read only data - no relocations}
         'csect', {bss} 'csect', '',
-        'csect','csect','csect','csect',
+        'csect','csect','csect','csect','csect',
+        'csect','csect','csect',
          '','','','','','','','','','','','','','',
         '',
         '',

+ 1 - 1
compiler/ppcgen/cgppc.pas

@@ -309,7 +309,7 @@ unit cgppc;
 {$endif cpu64bitaddr}
         current_asmdata.asmlists[al_imports].concat(taicpu.op_reg(A_MTCTR,NR_R12));
         current_asmdata.asmlists[al_imports].concat(taicpu.op_none(A_BCTR));
-        current_asmdata.asmlists[al_imports].concat(tai_directive.create(asd_lazy_symbol_pointer,''));
+        current_asmdata.asmlists[al_imports].concat(tai_section.create(sec_data_lazy,'',0));
         current_asmdata.asmlists[al_imports].concat(Tai_symbol.Create(l1,0));
         current_asmdata.asmlists[al_imports].concat(tai_directive.create(asd_indirect_symbol,s));
         current_asmdata.asmlists[al_imports].concat(tai_const.createname('dyld_stub_binding_helper',0));

+ 2 - 2
compiler/systems/t_bsd.pas

@@ -87,7 +87,7 @@ implementation
 
     procedure texportlibdarwin.setinitname(list: TAsmList; const s: string);
       begin
-        list.concat(tai_directive.create(asd_mod_init_func,''));
+        list.concat(tai_section.Create(sec_init_func,'',0));
         list.concat(tai_align.create(sizeof(pint)));
         list.concat(Tai_const.Createname(s,0));
       end;
@@ -95,7 +95,7 @@ implementation
 
     procedure texportlibdarwin.setfininame(list: TAsmList; const s: string);
       begin
-        list.concat(tai_directive.create(asd_mod_term_func,''));
+        list.concat(tai_section.Create(sec_term_func,'',0));
         list.concat(tai_align.create(sizeof(pint)));
         list.concat(Tai_const.Createname(s,0));
       end;

+ 8 - 0
compiler/x86/agx86int.pas

@@ -64,6 +64,10 @@ implementation
         '','','','','','',
         '','','','',
         '',
+        '',
+        '',
+        '',
+        '',
         '','','','',
         '',
         '',
@@ -110,6 +114,10 @@ implementation
         '','','','',
         'idata$2','idata$4','idata$5','idata$6','idata$7','edata',
         '',
+        '',
+        '',
+        '',
+        '',
         '','','','',
         '',
         '',