truncates symbols in certain computations to 32 bit. See https://sourceware.org/bugzilla/show_bug.cgi?id=16821
		
			
				
	
	
		
			186 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			186 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #ifdef __x86_64__
 | |
| OUTPUT_FORMAT(pei-x86-64)
 | |
| SEARCH_DIR("/usr/x86_64-pc-cygwin/lib/w32api"); SEARCH_DIR("=/usr/lib/w32api");
 | |
| #else
 | |
| #undef i386
 | |
| OUTPUT_FORMAT(pei-i386)
 | |
| SEARCH_DIR("/usr/i686-pc-cygwin/lib/w32api"); SEARCH_DIR("=/usr/lib/w32api");
 | |
| #endif
 | |
| #define __CONCAT1(a,b)	a##b
 | |
| #define __CONCAT(a,b) __CONCAT1(a,b)
 | |
| #define _SYM(x)	__CONCAT(__USER_LABEL_PREFIX__, x)
 | |
| SECTIONS
 | |
| {
 | |
|   .text  __image_base__ + __section_alignment__  :
 | |
|   {
 | |
|      *(.init)
 | |
|     *(.text)
 | |
|     *(.text.*)
 | |
|     *(SORT(.text$*))
 | |
|     *(.glue_7t)
 | |
|     *(.glue_7)
 | |
| #ifdef __x86_64__
 | |
|     . = ALIGN(8);
 | |
|      ___CTOR_LIST__ = .; __CTOR_LIST__ = .;
 | |
| 			LONG (-1); LONG (-1); *(SORT(.ctors.*)); *(.ctors); *(.ctor); LONG (0); LONG (0);
 | |
|      ___DTOR_LIST__ = .; __DTOR_LIST__ = .;
 | |
| 			LONG (-1); LONG (-1); *(SORT(.dtors.*)); *(.dtors); *(.dtor);  LONG (0); LONG (0);
 | |
| #else
 | |
|      ___CTOR_LIST__ = .; __CTOR_LIST__ = .;
 | |
| 			LONG (-1); *(SORT(.ctors.*)); *(.ctors); *(.ctor); LONG (0);
 | |
|      ___DTOR_LIST__ = .; __DTOR_LIST__ = .;
 | |
| 			LONG (-1); *(SORT(.dtors.*)); *(.dtors); *(.dtor);  LONG (0);
 | |
| #endif
 | |
|      *(.fini)
 | |
|     /* ??? Why is .gcc_exc here?  */
 | |
|      *(.gcc_exc)
 | |
|      etext = .;
 | |
|     *(.gcc_except_table)
 | |
|   }
 | |
|   .autoload_text ALIGN(__section_alignment__) :
 | |
|   {
 | |
|     *(.*_autoload_text);
 | |
|   }
 | |
|   /* The Cygwin DLL uses a section to avoid copying certain data
 | |
|      on fork.  This used to be named ".data$nocopy".  The linker used
 | |
|      to include this between __data_start__ and __data_end__, but that
 | |
|      breaks building the cygwin dll.  Instead, we name the section
 | |
|      ".data_cygwin_nocopy" and explicitly include it after __data_end__. */
 | |
|   .data ALIGN(__section_alignment__) :
 | |
|   {
 | |
|     __data_start__ = .;
 | |
|     *(.data)
 | |
|     *(.data2)
 | |
|     *(SORT(.data$*))
 | |
|     __data_end__ = .;
 | |
|     *(.data_cygwin_nocopy)
 | |
|   }
 | |
|   .rdata ALIGN(__section_alignment__) :
 | |
|   {
 | |
|     *(.rdata)
 | |
|     *(SORT(.rdata$*))
 | |
|     *(.rdata_cygwin_nocopy)
 | |
|     ___RUNTIME_PSEUDO_RELOC_LIST__ = .;
 | |
|     __RUNTIME_PSEUDO_RELOC_LIST__ = .;
 | |
|     *(.rdata_runtime_pseudo_reloc)
 | |
|     ___RUNTIME_PSEUDO_RELOC_LIST_END__ = .;
 | |
|     __RUNTIME_PSEUDO_RELOC_LIST_END__ = .;
 | |
|   }
 | |
|   .eh_frame ALIGN(__section_alignment__) :
 | |
|   {
 | |
|     *(.eh_frame*)
 | |
|   }
 | |
|   .pdata ALIGN(__section_alignment__) :
 | |
|   {
 | |
|     *(.pdata*)
 | |
|   }
 | |
| #ifdef __x86_64__
 | |
|   .xdata ALIGN(__section_alignment__) :
 | |
|   {
 | |
|     *(.xdata*)
 | |
|   }
 | |
| #endif
 | |
|   .bss ALIGN(__section_alignment__) :
 | |
|   {
 | |
|     __bss_start__ = .;
 | |
|     *(.bss)
 | |
|     *(COMMON)
 | |
|     __bss_end__ = .;
 | |
|   }
 | |
|   .edata ALIGN(__section_alignment__) :
 | |
|   {
 | |
|     *(.edata)
 | |
|   }
 | |
|   .reloc BLOCK(__section_alignment__) :
 | |
|   {
 | |
|     *(.reloc)
 | |
|   }
 | |
|   .cygwin_dll_common ALIGN(__section_alignment__):
 | |
|   {
 | |
|     *(.cygwin_dll_common)
 | |
|   }
 | |
|   .idata ALIGN(__section_alignment__) :
 | |
|   {
 | |
|     /* This cannot currently be handled with grouped sections.
 | |
| 	See pe.em:sort_sections.  */
 | |
|     SORT(*)(.idata$2)
 | |
|     SORT(*)(.idata$3)
 | |
|     /* These zeroes mark the end of the import list.  */
 | |
|     LONG (0); LONG (0); LONG (0); LONG (0); LONG (0);
 | |
|     SORT(*)(.idata$4)
 | |
|     SORT(*)(.idata$5)
 | |
|     SORT(*)(.idata$6)
 | |
|     SORT(*)(.idata$7)
 | |
|     . = ALIGN(16);
 | |
|   }
 | |
|   .gnu_debuglink_overlay ALIGN(__section_alignment__) (NOLOAD):
 | |
|   {
 | |
|     BYTE(0)	/* c */
 | |
|     BYTE(0)	/* y */
 | |
|     BYTE(0)	/* g */
 | |
|     BYTE(0)	/* w */
 | |
|     BYTE(0)	/* i */
 | |
|     BYTE(0)	/* n */
 | |
|     BYTE(0)	/* 1 */
 | |
|     BYTE(0)	/* . */
 | |
|     BYTE(0)	/* d */
 | |
|     BYTE(0)	/* b */
 | |
|     BYTE(0)	/* g */
 | |
|     BYTE(0)	/* \0 */
 | |
|     LONG(0)	/* checksum */
 | |
|   }
 | |
|   .rsrc BLOCK(__section_alignment__) :
 | |
|   {
 | |
|     *(.rsrc)
 | |
|     *(SORT(.rsrc$*))
 | |
|     _SYM (_cygheap_start) = .;
 | |
|   }
 | |
|   .cygheap ALIGN(__section_alignment__) :
 | |
|   {
 | |
| #ifdef __x86_64__
 | |
|     . = . + (3072 * 1024);
 | |
| #else
 | |
|     . = . + (2048 * 1024);
 | |
| #endif
 | |
|     . = ALIGN(0x10000);
 | |
|     _SYM (_cygheap_end) = .;
 | |
|   }
 | |
|   /DISCARD/ :
 | |
|   {
 | |
|     *(.debug$S)
 | |
|     *(.debug$T)
 | |
|     *(.debug$F)
 | |
|     *(.drectve)
 | |
|   }
 | |
|   .stab ALIGN(__section_alignment__) (NOLOAD) :
 | |
|   {
 | |
|     *(.stab)
 | |
|   }
 | |
|   .stabstr ALIGN(__section_alignment__) (NOLOAD) :
 | |
|   {
 | |
|     *(.stabstr)
 | |
|   }
 | |
|   /* DWARF 1.1 and DWARF 2 */
 | |
|   .debug_aranges  ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_aranges) }
 | |
|   .debug_pubnames ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_pubnames) }
 | |
|   .debug_pubtypes ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_pubtypes) }
 | |
|   /* DWARF 2 */
 | |
|   .debug_info     ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_info) }
 | |
|   .debug_abbrev   ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_abbrev) }
 | |
|   .debug_line     ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_line) }
 | |
|   .debug_frame    ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_frame) }
 | |
|   .debug_str      ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_str) }
 | |
|   .debug_loc      ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_loc) }
 | |
|   .debug_macinfo  ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_macinfo) }
 | |
|   /* SGI/MIPS DWARF 2 extensions. */
 | |
|   .debug_weaknames ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_weaknames) }
 | |
|   .debug_funcnames ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_funcnames) }
 | |
|   .debug_typenames ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_typenames) }
 | |
|   .debug_varnames  ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_varnames) }
 | |
|   .debug_macro    ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_macro) }
 | |
|   /* DWARF 3. */
 | |
|   .debug_ranges   ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_ranges) }
 | |
|   /* DWARF 4. */
 | |
|   .debug_types	  ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_types .gnu.linkonce.wt.*) }
 | |
| }
 |