mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 08:19:36 +01:00 
			
		
		
		
	* Changed attributes of .pdata section so it is smart-linkable on x86_64.
* Changed alignment of .pdata section to 4. + Support saving RELOC_NONE relocations to .o files and reading them back on x86_64. git-svn-id: trunk@19070 -
This commit is contained in:
		
							parent
							
								
									782cdd8e9a
								
							
						
					
					
						commit
						6280ee2eed
					
				@ -926,7 +926,7 @@ implementation
 | 
			
		||||
                       ,oso_keep
 | 
			
		||||
{$endif FPC_USE_TLS_DIRECTORY}
 | 
			
		||||
          ],
 | 
			
		||||
          {pdata} [oso_load,oso_readonly,oso_keep],
 | 
			
		||||
          {pdata} [oso_data,oso_load,oso_readonly {$ifndef x86_64},oso_keep{$endif}],
 | 
			
		||||
          {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],
 | 
			
		||||
@ -1001,8 +1001,10 @@ implementation
 | 
			
		||||
          { For idata (at least idata2) it must be 4 bytes, because
 | 
			
		||||
            an entry is always (also in win64) 20 bytes and aligning
 | 
			
		||||
            on 8 bytes will insert 4 bytes between the entries resulting
 | 
			
		||||
            in a corrupt idata section }
 | 
			
		||||
          sec_idata2,sec_idata4,sec_idata5,sec_idata6,sec_idata7:
 | 
			
		||||
            in a corrupt idata section.
 | 
			
		||||
            Same story with .pdata, it has 4-byte elements which should
 | 
			
		||||
            be packed without gaps. }
 | 
			
		||||
          sec_idata2,sec_idata4,sec_idata5,sec_idata6,sec_idata7,sec_pdata:
 | 
			
		||||
            result:=4;
 | 
			
		||||
          else
 | 
			
		||||
            result:=sizeof(pint);
 | 
			
		||||
 | 
			
		||||
@ -1315,6 +1315,8 @@ const pemagic : array[0..3] of byte = (
 | 
			
		||||
                rel.reloctype:=IMAGE_REL_I386_SECREL32;
 | 
			
		||||
{$endif i386}
 | 
			
		||||
{$ifdef x86_64}
 | 
			
		||||
              RELOC_NONE :
 | 
			
		||||
                rel.reloctype:=IMAGE_REL_AMD64_ABSOLUTE;
 | 
			
		||||
              RELOC_RELATIVE :
 | 
			
		||||
                rel.reloctype:=IMAGE_REL_AMD64_REL32;
 | 
			
		||||
              RELOC_ABSOLUTE32 :
 | 
			
		||||
@ -1639,6 +1641,8 @@ const pemagic : array[0..3] of byte = (
 | 
			
		||||
               rel_type:=RELOC_SECREL32;
 | 
			
		||||
{$endif i386}
 | 
			
		||||
{$ifdef x86_64}
 | 
			
		||||
             IMAGE_REL_AMD64_ABSOLUTE:
 | 
			
		||||
               rel_type:=RELOC_NONE;
 | 
			
		||||
             IMAGE_REL_AMD64_REL32:
 | 
			
		||||
               rel_type:=RELOC_RELATIVE;
 | 
			
		||||
             IMAGE_REL_AMD64_ADDR32,
 | 
			
		||||
@ -1933,7 +1937,9 @@ const pemagic : array[0..3] of byte = (
 | 
			
		||||
                 begin
 | 
			
		||||
                   if (Copy(secname,1,6)='.edata') or
 | 
			
		||||
                      (Copy(secname,1,5)='.rsrc') or
 | 
			
		||||
{$ifndef x86_64}
 | 
			
		||||
                      (Copy(secname,1,6)='.pdata') or
 | 
			
		||||
{$endif}
 | 
			
		||||
                      (Copy(secname,1,4)='.fpc') then
 | 
			
		||||
                     include(secoptions,oso_keep);
 | 
			
		||||
                   if (Copy(secname,1,6)='.idata') then
 | 
			
		||||
 | 
			
		||||
@ -1024,9 +1024,10 @@ implementation
 | 
			
		||||
            Concat('  SYMBOL __RUNTIME_PSEUDO_RELOC_LIST_END__');
 | 
			
		||||
            Concat('  OBJSECTION .rdata*');
 | 
			
		||||
            Concat('  OBJSECTION .rodata*');
 | 
			
		||||
            Concat('  OBJSECTION .xdata*');
 | 
			
		||||
            Concat('ENDEXESECTION');
 | 
			
		||||
            Concat('EXESECTION .pdata');
 | 
			
		||||
            Concat('  OBJSECTION .pdata');
 | 
			
		||||
            Concat('  OBJSECTION .pdata*');
 | 
			
		||||
            Concat('ENDEXESECTION');
 | 
			
		||||
            Concat('EXESECTION .bss');
 | 
			
		||||
            Concat('  SYMBOL __bss_start__');
 | 
			
		||||
@ -1066,7 +1067,9 @@ implementation
 | 
			
		||||
            Concat('  OBJSECTION .idata$3*');
 | 
			
		||||
            Concat('  ZEROS 20');
 | 
			
		||||
            Concat('  OBJSECTION .idata$4*');
 | 
			
		||||
            Concat('  SYMBOL __IAT_start__');
 | 
			
		||||
            Concat('  OBJSECTION .idata$5*');
 | 
			
		||||
            Concat('  SYMBOL __IAT_end__');
 | 
			
		||||
            Concat('  OBJSECTION .idata$6*');
 | 
			
		||||
            Concat('  OBJSECTION .idata$7*');
 | 
			
		||||
            Concat('ENDEXESECTION');
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user