[Scummvm-cvs-logs] SF.net SVN: scummvm:[51083] scummvm/branches/gsoc2010-plugins/backends/ platform/ds/arm9

toneman1138 at users.sourceforge.net toneman1138 at users.sourceforge.net
Wed Jul 21 10:50:30 CEST 2010


Revision: 51083
          http://scummvm.svn.sourceforge.net/scummvm/?rev=51083&view=rev
Author:   toneman1138
Date:     2010-07-21 08:50:30 +0000 (Wed, 21 Jul 2010)

Log Message:
-----------
switched out linker script for plugin linking on ds, added in check for RELA type relocations in ARM loader and coded for REL type relocations (DS now runs many games with Dynamic Plugins enabled)

Modified Paths:
--------------
    scummvm/branches/gsoc2010-plugins/backends/platform/ds/arm9/makefile
    scummvm/branches/gsoc2010-plugins/backends/platform/ds/arm9/source/dsloader.cpp
    scummvm/branches/gsoc2010-plugins/backends/platform/ds/arm9/source/elf32.h
    scummvm/branches/gsoc2010-plugins/backends/platform/ds/arm9/source/plugin.ld

Modified: scummvm/branches/gsoc2010-plugins/backends/platform/ds/arm9/makefile
===================================================================
--- scummvm/branches/gsoc2010-plugins/backends/platform/ds/arm9/makefile	2010-07-21 01:23:28 UTC (rev 51082)
+++ scummvm/branches/gsoc2010-plugins/backends/platform/ds/arm9/makefile	2010-07-21 08:50:30 UTC (rev 51083)
@@ -279,7 +279,7 @@
 PLUGIN_PREFIX =
 PLUGIN_SUFFIX = .plg
 PLUGIN_EXTRA_DEPS = $(portdir)/source/plugin.ld $(portdir)/source/plugin.syms $(EXECUTABLE)
-PLUGIN_LDFLAGS += -mno-crt0 $(DEVKITPRO)/devkitARM/arm-eabi/lib/ds_arm9_crt0.o -nostartfiles -Wl,-q,--just-symbols,$(EXECUTABLE),-T$(portdir)/source/plugin.ld,--retain-symbols-file,$(portdir)/source/plugin.syms -lstdc++ -lc -mthumb-interwork -mno-fpu#-Wl,--gc-sections
+PLUGIN_LDFLAGS += -nostartfiles -Wl,-q,--just-symbols,$(EXECUTABLE),-T$(portdir)/source/plugin.ld,--retain-symbols-file,$(portdir)/source/plugin.syms -lstdc++ -lc -mthumb-interwork -mno-fpu#-Wl,--gc-sections -mno-crt0 $(DEVKITPRO)/devkitARM/arm-eabi/lib/ds_arm9_crt0.o
 MKDIR = mkdir -p
 RM = rm -f
 RM_REC = rm -rf

Modified: scummvm/branches/gsoc2010-plugins/backends/platform/ds/arm9/source/dsloader.cpp
===================================================================
--- scummvm/branches/gsoc2010-plugins/backends/platform/ds/arm9/source/dsloader.cpp	2010-07-21 01:23:28 UTC (rev 51082)
+++ scummvm/branches/gsoc2010-plugins/backends/platform/ds/arm9/source/dsloader.cpp	2010-07-21 08:50:30 UTC (rev 51083)
@@ -116,12 +116,6 @@
 				a = *target;							// Get full 32 bits of addend
 				relocation = a + (Elf32_Addr)_segment;			   // Shift by main offset
 
-				/*TODO:
-				 * if (SYM_TYPE(sym->st_info) == STT_FUNC && symbol addresses a thumb instruction) {
-				 * 	relocation |= 1;
-				 * }
-				 */
-
 				*target = relocation;
 
 				DBG("R_ARM_ABS32: i=%d, a=%x, origTarget=%x, target=%x\n", i, a, origTarget, *target);
@@ -129,74 +123,19 @@
 			break;
 
 		case R_ARM_THM_CALL:
-
-			if (sym->st_shndx < SHN_LOPROC) {			// Only shift for plugin section.
-				a = *target & 0x00000fff;				// Get the correct bits for addend:
-				a += ((*target & 0x0fff0000) >> 4);		// Bits 0-11 of the first half-word encode the 12 most significant bits of the branch offset,
-														// bits 0-11 of the next half-word encode the 12 least significant bits.
-				a = (a << 8) >> 8;						// sign-extend
-				a = a << 1;								// branch offset is in units of half-bytes
-
-				relocation = a + (Elf32_Addr)_segment;	// Shift by main offset
-
-				/*TODO:
-				 * if (SYM_TYPE(sym->st_info) == STT_FUNC && symbol addresses a thumb instruction) {
-				 * 	relocation |= 1;
-				 * }
-				 */
-
-				relocation -= rel[i].r_offset;
-
-				*target = relocation;
-
-				DBG("R_ARM_THM_CALL: i=%d, a=%x, origTarget=%x, target=%x\n", i, a, origTarget, *target);
-			}
+			DBG("R_ARM_THM_CALL: PC-relative jump, ld takes care of necessary relocation work for us.\n");
 			break;
 
 		case R_ARM_CALL:
-			if (sym->st_shndx < SHN_LOPROC) {			// Only shift for plugin section.
-				a = *target & 0x00ffffff;
-				a = (a << 8) >> 6;				// Calculate addend by sign-extending (insn[23:0] << 2)
-				relocation = a + (Elf32_Addr)_segment;  // Shift by main offset
-
-				/*TODO:
-				 * if (SYM_TYPE(sym->st_info) == STT_FUNC && symbol addresses a thumb instruction) {
-				 * 	relocation |= 1;
-				 * }
-				 */
-
-				relocation = relocation - rel[i].r_offset;
-				relocation = relocation >> 2;
-				*target &= 0xff000000;					// Clean lower 26 target bits
-				*target |= (relocation & 0x00ffffff);
-
-				DBG("R_ARM_CALL: i=%d, a=%x, origTarget=%x, target=%x\n", i, a, origTarget, *target);
-			}
+			DBG("R_ARM_CALL: PC-relative jump, ld takes care of necessary relocation work for us.\n");
 			break;
 
 		case R_ARM_JUMP24:
-			if (sym->st_shndx < SHN_LOPROC) {			// Only shift for plugin section.
-				a = *target & 0x00ffffff;
-				a = (a << 8) >> 6;				// Calculate addend by sign-extending (insn[23:0] << 2)
-				relocation = a + (Elf32_Addr)_segment;  // Shift by main offset
-
-				/*TODO:
-				 * if (SYM_TYPE(sym->st_info) == STT_FUNC && symbol addresses a thumb instruction) {
-				 * 	relocation |= 1;
-				 * }
-				 */
-
-				relocation = relocation - rel[i].r_offset;
-				relocation = relocation >> 2;
-				*target &= 0xff000000;					// Clean lower 26 target bits
-				*target |= (relocation & 0x00ffffff);
-
-				DBG("R_ARM_CALL: i=%d, a=%x, origTarget=%x, target=%x\n", i, a, origTarget, *target);
-			}
+			DBG("R_ARM_JUMP24: PC-relative jump, ld takes care of all relocation work for us.\n");
 			break;
 
 		case R_ARM_V4BX:
-			DBG("R_ARM_V4BX: No relocation calculation necessary\n");
+			DBG("R_ARM_V4BX: No relocation calculation necessary.\n");
 			break;
 
 		default:

Modified: scummvm/branches/gsoc2010-plugins/backends/platform/ds/arm9/source/elf32.h
===================================================================
--- scummvm/branches/gsoc2010-plugins/backends/platform/ds/arm9/source/elf32.h	2010-07-21 01:23:28 UTC (rev 51082)
+++ scummvm/branches/gsoc2010-plugins/backends/platform/ds/arm9/source/elf32.h	2010-07-21 08:50:30 UTC (rev 51083)
@@ -173,6 +173,13 @@
 	Elf32_Word    r_info;                 /* Relocation type and symbol index */
 } Elf32_Rel;
 
+typedef struct
+{
+  Elf32_Addr    r_offset;               /* Address */
+  Elf32_Word    r_info;                 /* Relocation type and symbol index */
+  Elf32_Sword   r_addend;               /* Addend */
+} Elf32_Rela;
+
 // Access macros for the relocation info
 #define REL_TYPE(x)		((unsigned char) (x))	/* Extract relocation type */
 #define REL_INDEX(x)	((x)>>8)		/* Extract relocation index into symbol table */
@@ -181,6 +188,8 @@
 #define R_ARM_NONE			0
 #define R_ARM_ABS32			2
 #define R_ARM_THM_CALL      10
+#define R_ARM_CALL			28
+#define R_ARM_JUMP24		29
 #define R_ARM_V4BX 			40
 
 #endif /* BACKENDS_ELF_H */

Modified: scummvm/branches/gsoc2010-plugins/backends/platform/ds/arm9/source/plugin.ld
===================================================================
--- scummvm/branches/gsoc2010-plugins/backends/platform/ds/arm9/source/plugin.ld	2010-07-21 01:23:28 UTC (rev 51082)
+++ scummvm/branches/gsoc2010-plugins/backends/platform/ds/arm9/source/plugin.ld	2010-07-21 08:50:30 UTC (rev 51083)
@@ -1,4 +1,5 @@
-OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
+OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
+	      "elf32-littlearm")
 OUTPUT_ARCH(arm)
 
 /* PHDRS specifies ELF Program Headers (or segments) to the plugin linker */
@@ -6,247 +7,212 @@
   plugin PT_LOAD ; /* Specifies that the plugin segment should be loaded from file */
 }
 
-MEMORY {
-	rom	: ORIGIN = 0x08000000, LENGTH = 32M
-	ewram	: ORIGIN = 0x02000000, LENGTH = 4M - 4k
-	dtcm	: ORIGIN = 0x0b000000, LENGTH = 16K
-	vectors	: ORIGIN = 0x01000000, LENGTH = 256
-	itcm	: ORIGIN = 0x01000100, LENGTH = 32K - 256
-}
-
-__vectors_start	=	ORIGIN(vectors);
-__itcm_start	=	ORIGIN(itcm);
-__ewram_end	=	ORIGIN(ewram) + LENGTH(ewram);
-__eheap_end	=	ORIGIN(ewram) + LENGTH(ewram);
-__dtcm_start	=	ORIGIN(dtcm);
-__dtcm_top	=	ORIGIN(dtcm) + LENGTH(dtcm);
-__irq_flags	=	__dtcm_top - 0x08;
-__irq_vector	=	__dtcm_top - 0x04;
-
-__sp_svc	=	__dtcm_top - 0x100;
-__sp_irq	=	__sp_svc - 0x100;
-__sp_usr	=	__sp_irq - 0x100;
-
 SECTIONS
 {
-	.init	:
-	{
-		__text_start = . ;
-		KEEP (*(.init))
-		. = ALIGN(4);  /* REQUIRED. LD is flaky without it. */
-	} >ewram :plugin = 0xff
-
-	.plt : { *(.plt) } >ewram = 0xff
-
-	.text :   /* ALIGN (4): */
-	{
-		*(EXCLUDE_FILE (*.itcm*) .text)
-
-		*(.text.*)
-		*(.stub)
-		/* .gnu.warning sections are handled specially by elf32.em.  */
-		*(.gnu.warning)
-		*(.gnu.linkonce.t*)
-		*(.glue_7)
-		*(.glue_7t)
-		. = ALIGN(4);  /* REQUIRED. LD is flaky without it. */
-	} >ewram = 0xff
-
-	.fini           :
-	{
-		KEEP (*(.fini))
-	} >ewram =0xff
-
-	__text_end = . ;
-
-	.rodata :
-	{
-		*(.rodata)
-		*all.rodata*(*)
-		*(.roda)
-		*(.rodata.*)
-		*(.gnu.linkonce.r*)
-		SORT(CONSTRUCTORS)
-		. = ALIGN(4);   /* REQUIRED. LD is flaky without it. */
-	} >ewram = 0xff
-
-  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >ewram
+  /* Read-only sections, merged into text segment: */
+  . = 0;
+  .interp         : { *(.interp) } : plugin
+  .note.gnu.build-id : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.dyn        :
+    {
+      *(.rel.init)
+      *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
+      *(.rel.fini)
+      *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
+      *(.rel.data.rel.ro* .rel.gnu.linkonce.d.rel.ro.*)
+      *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
+      *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
+      *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
+      *(.rel.ctors)
+      *(.rel.dtors)
+      *(.rel.got)
+      *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
+      PROVIDE_HIDDEN (__rel_iplt_start = .);
+      *(.rel.iplt)
+      PROVIDE_HIDDEN (__rel_iplt_end = .);
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      PROVIDE_HIDDEN (__rel_iplt_start = .);
+      PROVIDE_HIDDEN (__rel_iplt_end = .);
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  .init           :
+  {
+    KEEP (*(.init))
+  } =0
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  } =0
+  .fini           :
+  {
+    KEEP (*(.fini))
+  } =0
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
    __exidx_start = .;
-  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >ewram
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
    __exidx_end = .;
-  /* Ensure the __preinit_array_start label is properly aligned.  We
-     could instead move the label definition inside the section, but
-     the linker would then create the section even if it turns out to
-     be empty, which isn't pretty.  */
-  . = ALIGN(32 / 8);
-  PROVIDE (__preinit_array_start = .);
-  .preinit_array     : { KEEP (*(.preinit_array)) } >ewram = 0xff
-  PROVIDE (__preinit_array_end = .);
-  PROVIDE (__init_array_start = .);
+  .eh_frame_hdr : { *(.eh_frame_hdr) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  /* Thread Local Storage sections  */
+  .tdata	  : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array     :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
   .init_array     :
   {
-       KEEP (*(SORT(.init_array.*)))
-       KEEP (*(.init_array))
-  } >ewram = 0xff
-  PROVIDE (__init_array_end = .);
-  PROVIDE (__fini_array_start = .);
+     PROVIDE_HIDDEN (__init_array_start = .);
+     KEEP (*(SORT(.init_array.*)))
+     KEEP (*(.init_array))
+     PROVIDE_HIDDEN (__init_array_end = .);
+  }
   .fini_array     :
   {
-       KEEP (*(.fini_array))
-       KEEP (*(SORT(.fini_array.*)))
-  } >ewram = 0xff
-  PROVIDE (__fini_array_end = .);
-
-	.ctors :
-	{
-	/* gcc uses crtbegin.o to find the start of the constructors, so
-		we make sure it is first.  Because this is a wildcard, it
-		doesn't matter if the user does not actually link against
-		crtbegin.o; the linker won't look for a file to match a
-		wildcard.  The wildcard also means that it doesn't matter which
-		directory crtbegin.o is in.  */
-		___plugin_ctors = .;
-		KEEP (*(SORT(.ctors.*)))
-		KEEP (*(.ctors))
-		. = ALIGN(4);   /* REQUIRED. LD is flaky without it. */
-		___plugin_ctors_end = .;
-	} >ewram = 0xff
-
-	.dtors :
-	{
-		___plugin_dtors = .;
-		KEEP (*(SORT(.dtors.*)))
-		KEEP (*(.dtors))
-		. = ALIGN(4);   /* REQUIRED. LD is flaky without it. */
-		___plugin_dtors_end = .;
-	} >ewram = 0xff
-
-	.eh_frame :
-	{
-		KEEP (*(.eh_frame))
-		. = ALIGN(4);   /* REQUIRED. LD is flaky without it. */
-	} >ewram = 0xff
-
-	.gcc_except_table :
-	{
-		*(.gcc_except_table)
-		. = ALIGN(4);   /* REQUIRED. LD is flaky without it. */
-	} >ewram = 0xff
-	.jcr            : { KEEP (*(.jcr)) } >ewram = 0
-	.got            : { *(.got.plt) *(.got) *(.rel.got) } >ewram = 0
-
-	.ewram ALIGN(4) : 
-	{
-		__ewram_start = ABSOLUTE(.) ;
-		*(.ewram)
-		*ewram.*(.text)
-		. = ALIGN(4);   /* REQUIRED. LD is flaky without it. */
-	} >ewram = 0xff
-
-
-	.data ALIGN(4) :
-	{
-		__data_start = ABSOLUTE(.);
-		*(.data)
-		*(.data.*)
-		*(.gnu.linkonce.d*)
-		CONSTRUCTORS
-		. = ALIGN(4);
-		__data_end = ABSOLUTE(.) ;
-	} >ewram = 0xff
-
-
-	__dtcm_lma = . ;
-	__bss_vma = . ;
-
-	.dtcm __dtcm_start : AT (__dtcm_lma)
-	{
-		*(.dtcm)
-		*(.dtcm.*)
-		. = ALIGN(4);
-		__dtcm_end = ABSOLUTE(.);
-	} >dtcm  = 0xff
-
-
-	__itcm_lma = __dtcm_lma + SIZEOF(.dtcm);
-
-	.itcm __itcm_start : AT (__itcm_lma)
-	{
-		*(.itcm)
-		*itcm.*(.text)
-		. = ALIGN(4);
-		__itcm_end = ABSOLUTE(.);
-	} >itcm = 0xff
-	
-	__vectors_lma = __itcm_lma + SIZEOF(.itcm);
-
-	.vectors __vectors_start : AT (__vectors_lma)
-	{
-		*(.vectors)
-		*vectors.*(.text)
-		. = ALIGN(4);
-		__vectors_end = ABSOLUTE(.);
-	} >vectors = 0xff
-	
-	.sbss __dtcm_end (NOLOAD): 
-	{
-		__sbss_start = ABSOLUTE(.);
-		__sbss_start__ = ABSOLUTE(.);
-		*(.sbss)
-		. = ALIGN(4);    /* REQUIRED. LD is flaky without it. */
-		__sbss_end = ABSOLUTE(.);
-	} >dtcm 
-
-	.bss __bss_vma (NOLOAD): 
-	{
-		__bss_start = ABSOLUTE(.);
-		__bss_start__ = ABSOLUTE(.);
-		*(.dynbss)
-		*(.gnu.linkonce.b*)
-		*(.bss*)
-		*(COMMON)
-		. = ALIGN(4);    /* REQUIRED. LD is flaky without it. */
-		__bss_end = ABSOLUTE(.) ;
-		__bss_end__ = __bss_end ;
-	} AT>ewram 
-
-
-	_end = __bss_end__ ;
-	__end__ = __bss_end__ ;
-
-	/* Stabs debugging sections.  */
-	.stab 0 : { *(.stab) }
-	.stabstr 0 : { *(.stabstr) }
-	.stab.excl 0 : { *(.stab.excl) }
-	.stab.exclstr 0 : { *(.stab.exclstr) }
-	.stab.index 0 : { *(.stab.index) }
-	.stab.indexstr 0 : { *(.stab.indexstr) }
-	.comment 0 : { *(.comment) }
-	/*	DWARF debug sections.
-		Symbols in the DWARF debugging sections are relative to the beginning
-		of the section so we begin them at 0.  */
-	/* DWARF 1 */
-	.debug          0 : { *(.debug) }
-	.line           0 : { *(.line) }
-	/* GNU DWARF 1 extensions */
-	.debug_srcinfo  0 : { *(.debug_srcinfo) }
-	.debug_sfnames  0 : { *(.debug_sfnames) }
-	/* DWARF 1.1 and DWARF 2 */
-	.debug_aranges  0 : { *(.debug_aranges) }
-	.debug_pubnames 0 : { *(.debug_pubnames) }
-	/* DWARF 2 */
-	.debug_info     0 : { *(.debug_info) }
-	.debug_abbrev   0 : { *(.debug_abbrev) }
-	.debug_line     0 : { *(.debug_line) }
-	.debug_frame    0 : { *(.debug_frame) }
-	.debug_str      0 : { *(.debug_str) }
-	.debug_loc      0 : { *(.debug_loc) }
-	.debug_macinfo  0 : { *(.debug_macinfo) }
-	/* SGI/MIPS DWARF 2 extensions */
-	.debug_weaknames 0 : { *(.debug_weaknames) }
-	.debug_funcnames 0 : { *(.debug_funcnames) }
-	.debug_typenames 0 : { *(.debug_typenames) }
-	.debug_varnames  0 : { *(.debug_varnames) }
-	.stack 0x80000 : { _stack = .; *(.stack) }
-	/* These must appear regardless of  .  */
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(.fini_array))
+    KEEP (*(SORT(.fini_array.*)))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    ___plugin_ctors = .;
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+    ___plugin_ctors_end = .;
+  }
+  .dtors          :
+  {
+    ___plugin_dtors = .;
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+    ___plugin_dtors_end = .;
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = . ;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we don't
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = . ; __bss_end__ = . ;
+  . = ALIGN(32 / 8);
+  . = ALIGN(32 / 8);
+  __end__ = . ;
+  _end = .; PROVIDE (end = .);
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+    .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
 }


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list