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

toneman1138 at users.sourceforge.net toneman1138 at users.sourceforge.net
Sat Jul 3 07:05:28 CEST 2010


Revision: 50617
          http://scummvm.svn.sourceforge.net/scummvm/?rev=50617&view=rev
Author:   toneman1138
Date:     2010-07-03 05:05:27 +0000 (Sat, 03 Jul 2010)

Log Message:
-----------
moved plugin linker and elf32 header file to arm9/source and modified ds makefile to use dynamic plugins

Modified Paths:
--------------
    scummvm/branches/gsoc2010-plugins/backends/platform/ds/arm9/makefile

Added Paths:
-----------
    scummvm/branches/gsoc2010-plugins/backends/platform/ds/arm9/source/elf32.h
    scummvm/branches/gsoc2010-plugins/backends/platform/ds/arm9/source/plugin.ld

Removed Paths:
-------------
    scummvm/branches/gsoc2010-plugins/backends/platform/ds/elf32.h
    scummvm/branches/gsoc2010-plugins/backends/platform/ds/plugin.ld

Modified: scummvm/branches/gsoc2010-plugins/backends/platform/ds/arm9/makefile
===================================================================
--- scummvm/branches/gsoc2010-plugins/backends/platform/ds/arm9/makefile	2010-07-03 04:42:34 UTC (rev 50616)
+++ scummvm/branches/gsoc2010-plugins/backends/platform/ds/arm9/makefile	2010-07-03 05:05:27 UTC (rev 50617)
@@ -1,10 +1,16 @@
 srcdir      ?= .
 DEPDIR      := .deps
 
-#DYNAMIC_MODULES = 1
+DYNAMIC_MODULES = 1
 libndsdir = $(DEVKITPRO)/libnds
 #libndsdir = /home/neil/devkitpror21/libnds
 
+ifdef DYNAMIC_MODULES
+	ENABLED = DYNAMIC_PLUGIN
+else
+	ENABLED = STATIC_PLUGIN
+endif
+
 # Select the build by setting SCUMM_BUILD to a,b,c,d,e,f or g.
 # Anything else gets build a.
 
@@ -112,8 +118,8 @@
 ifdef DS_BUILD_A
 	DEFINES = -DDS_SCUMM_BUILD -DDS_BUILD_A -DUSE_ARM_GFX_ASM -DUSE_ARM_COSTUME_ASM
 	LOGO = logoa.bmp
-	ENABLE_SCUMM = STATIC_PLUGIN
-	DEFINES += -DENABLE_SCUMM=STATIC_PLUGIN
+	ENABLE_SCUMM = $(ENABLED)
+	DEFINES += -DENABLE_SCUMM=$(ENABLED)
 	MODULES += engines/scumm
 
 	USE_ARM_GFX_ASM = 1
@@ -123,66 +129,66 @@
 ifdef DS_BUILD_B
 	DEFINES = -DDS_NON_SCUMM_BUILD -DDS_BUILD_B
 	LOGO = logob.bmp
-	ENABLE_SKY = STATIC_PLUGIN
-	ENABLE_QUEEN = STATIC_PLUGIN
+	ENABLE_SKY = $(ENABLED)
+	ENABLE_QUEEN = $(ENABLED)
 	BUILD=scummvm-B
 endif
 
 ifdef DS_BUILD_C
 	DEFINES = -DDS_NON_SCUMM_BUILD -DDS_BUILD_C
 	LOGO = logoc.bmp
-	ENABLE_AGOS = STATIC_PLUGIN
+	ENABLE_AGOS = $(ENABLED)
 	BUILD=scummvm-C
 endif
 
 ifdef DS_BUILD_D
 	DEFINES = -DDS_NON_SCUMM_BUILD -DDS_BUILD_D
 	LOGO = logod.bmp
-	ENABLE_GOB = STATIC_PLUGIN
-	ENABLE_CINE = STATIC_PLUGIN
-	ENABLE_AGI = STATIC_PLUGIN
+	ENABLE_GOB = $(ENABLED)
+	ENABLE_CINE = $(ENABLED)
+	ENABLE_AGI = $(ENABLED)
 	BUILD=scummvm-D
 endif
 
 ifdef DS_BUILD_E
 	DEFINES = -DDS_NON_SCUMM_BUILD -DDS_BUILD_E
 	LOGO = logoe.bmp
-	ENABLE_SAGA = STATIC_PLUGIN
+	ENABLE_SAGA = $(ENABLED)
 	BUILD=scummvm-E
 endif
 
 ifdef DS_BUILD_F
 	DEFINES = -DDS_NON_SCUMM_BUILD -DDS_BUILD_F
 	LOGO = logof.bmp
-	ENABLE_KYRA = STATIC_PLUGIN
+	ENABLE_KYRA = $(ENABLED)
 	BUILD=scummvm-F
 endif
 
 ifdef DS_BUILD_G
 	DEFINES = -DDS_NON_SCUMM_BUILD -DDS_BUILD_G
 	LOGO = logog.bmp
-	ENABLE_LURE = STATIC_PLUGIN
+	ENABLE_LURE = $(ENABLED)
 	BUILD=scummvm-G
 endif
 
 ifdef DS_BUILD_H
 	DEFINES = -DDS_NON_SCUMM_BUILD -DDS_BUILD_H
 	LOGO = logoh.bmp
-	ENABLE_PARALLACTION = STATIC_PLUGIN
+	ENABLE_PARALLACTION = $(ENABLED)
 	BUILD=scummvm-H
 endif
 
 ifdef DS_BUILD_I
 	DEFINES = -DDS_NON_SCUMM_BUILD -DDS_BUILD_I
 	LOGO = logoi.bmp
-	ENABLE_MADE = STATIC_PLUGIN
+	ENABLE_MADE = $(ENABLED)
 	BUILD=scummvm-I
 endif
 
 ifdef DS_BUILD_K
 	DEFINES = -DDS_NON_SCUMM_BUILD -DDS_BUILD_K
 	LOGO = logok.bmp
-	ENABLE_CRUISE = STATIC_PLUGIN
+	ENABLE_CRUISE = $(ENABLED)
 	BUILD=scummvm-K
 endif
 
@@ -190,14 +196,14 @@
 #ifdef DS_BUILD_L
 #	DEFINES = -DDS_NON_SCUMM_BUILD -DDS_BUILD_L
 #	LOGO = logog.bmp
-#	ENABLE_DRASCULA = STATIC_PLUGIN
+#	ENABLE_DRASCULA = $(ENABLED)
 #	BUILD=scummvm-K
 #endif
 
 #ifdef DS_BUILD_M
 #	DEFINES = -DDS_NON_SCUMM_BUILD -DDS_BUILD_M
 #	LOGO = logog.bmp
-#	ENABLE_TUCKER = STATIC_PLUGIN
+#	ENABLE_TUCKER = $(ENABLED)
 #	BUILD=scummvm-K
 #endif
 
@@ -276,8 +282,8 @@
 EXECUTABLE = scummvm.elf
 PLUGIN_PREFIX =
 PLUGIN_SUFFIX = .plg
-PLUGIN_EXTRA_DEPS = plugin.x plugin.syms scummvm.elf
-PLUGIN_LDFLAGS = -nostartfiles -Wl,-q,-Tplugin.x,--just-symbols,scummvm.elf,--retain-symbols-file,plugin.syms -L$(ronindir)/lib
+PLUGIN_EXTRA_DEPS = plugin.ld plugin.syms scummvm.elf
+PLUGIN_LDFLAGS = -nostartfiles -Wl,-q,-Tplugin.ld,--just-symbols,scummvm.elf,--retain-symbols-file,plugin.syms
 MKDIR = mkdir -p
 RM = rm -f
 RM_REC = rm -rf
@@ -299,6 +305,10 @@
 		$(portdir)/source/touchkeyboard.o $(portdir)/source/zipreader.o\
 		$(portdir)/source/dsoptions.o $(portdir)/source/keys.o $(portdir)/source/wordcompletion.o\
 		$(portdir)/source/interrupt.o
+		
+ifdef DYNAMIC_MODULES
+	PORT_OBJS += $(portdir)/source/dsloader.o
+endif
 
 ifdef USE_PROFILER
 	PORT_OBJS += $(portdir)/source/profiler/cyg-profile.o

Copied: scummvm/branches/gsoc2010-plugins/backends/platform/ds/arm9/source/elf32.h (from rev 50615, scummvm/branches/gsoc2010-plugins/backends/platform/ds/elf32.h)
===================================================================
--- scummvm/branches/gsoc2010-plugins/backends/platform/ds/arm9/source/elf32.h	                        (rev 0)
+++ scummvm/branches/gsoc2010-plugins/backends/platform/ds/arm9/source/elf32.h	2010-07-03 05:05:27 UTC (rev 50617)
@@ -0,0 +1,192 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#ifndef BACKENDS_ELF_H
+#define BACKENDS_ELF_H
+
+/* ELF stuff */
+
+typedef unsigned short Elf32_Half, Elf32_Section;
+typedef unsigned int Elf32_Word, Elf32_Addr, Elf32_Off;
+typedef signed int  Elf32_Sword;
+typedef Elf32_Half Elf32_Versym;
+
+#define EI_NIDENT (16)
+#define SELFMAG         6
+
+/* ELF File format structures. Look up ELF structure for more details */
+
+// ELF header (contains info about the file)
+typedef struct {
+	unsigned char e_ident[EI_NIDENT];     /* Magic number and other info */
+	Elf32_Half    e_type;                 /* Object file type */
+	Elf32_Half    e_machine;              /* Architecture */
+	Elf32_Word    e_version;              /* Object file version */
+	Elf32_Addr    e_entry;                /* Entry point virtual address */
+	Elf32_Off     e_phoff;                /* Program header table file offset */
+	Elf32_Off     e_shoff;                /* Section header table file offset */
+	Elf32_Word    e_flags;                /* Processor-specific flags */
+	Elf32_Half    e_ehsize;               /* ELF header size in bytes */
+	Elf32_Half    e_phentsize;            /* Program header table entry size */
+	Elf32_Half    e_phnum;                /* Program header table entry count */
+	Elf32_Half    e_shentsize;            /* Section header table entry size */
+	Elf32_Half    e_shnum;                /* Section header table entry count */
+	Elf32_Half    e_shstrndx;             /* Section header string table index */
+} Elf32_Ehdr;
+
+// Should be in e_ident
+#define ELFMAG          "\177ELF\1\1"	/* ELF Magic number */
+
+// e_type values
+#define ET_NONE		0	/* no file type */
+#define ET_REL		1	/* relocatable */
+#define ET_EXEC		2	/* executable */
+#define ET_DYN		3	/* shared object */
+#define ET_CORE		4	/* core file */
+
+// e_machine values
+#define EM_ARM		40
+
+// Program header (contains info about segment)
+typedef struct {
+	Elf32_Word    p_type;                 /* Segment type */
+	Elf32_Off     p_offset;               /* Segment file offset */
+	Elf32_Addr    p_vaddr;                /* Segment virtual address */
+	Elf32_Addr    p_paddr;                /* Segment physical address */
+	Elf32_Word    p_filesz;               /* Segment size in file */
+	Elf32_Word    p_memsz;                /* Segment size in memory */
+	Elf32_Word    p_flags;                /* Segment flags */
+	Elf32_Word    p_align;                /* Segment alignment */
+} Elf32_Phdr;
+
+// p_type values
+#define PT_NULL 		0	/* ignored */
+#define PT_LOAD			1	/* loadable segment */
+#define PT_DYNAMIC		2	/* dynamic linking info */
+#define PT_INTERP		3	/* info about interpreter */
+#define PT_NOTE			4	/* note segment */
+#define PT_SHLIB		5	/* reserved */
+#define PT_PHDR			6	/* Program header table */
+#define PT_ARM_ARCHEXT 	0x70000000 /* Platform architecture compatibility information */
+#define PT_ARM_EXIDX 	0x70000001 /* Exception unwind tables */
+
+// p_flags value
+#define PF_X	1	/* execute */
+#define PF_W	2	/* write */
+#define PF_R	4	/* read */
+
+// Section header (contains info about section)
+typedef struct {
+	Elf32_Word    sh_name;                /* Section name (string tbl index) */
+	Elf32_Word    sh_type;                /* Section type */
+	Elf32_Word    sh_flags;               /* Section flags */
+	Elf32_Addr    sh_addr;                /* Section virtual addr at execution */
+	Elf32_Off     sh_offset;              /* Section file offset */
+	Elf32_Word    sh_size;                /* Section size in bytes */
+	Elf32_Word    sh_link;                /* Link to another section */
+	Elf32_Word    sh_info;                /* Additional section information */
+	Elf32_Word    sh_addralign;           /* Section alignment */
+	Elf32_Word    sh_entsize;             /* Entry size if section holds table */
+} Elf32_Shdr;
+
+// sh_type values
+#define SHT_NULL			0	/* Inactive section */
+#define SHT_PROGBITS                    1	/* Proprietary */
+#define SHT_SYMTAB			2	/* Symbol table */
+#define SHT_STRTAB			3	/* String table */
+#define SHT_RELA			4	/* Relocation entries with addend */
+#define SHT_HASH			5	/* Symbol hash table */
+#define SHT_DYNAMIC			6	/* Info for dynamic linking */
+#define SHT_NOTE			7	/* Note section */
+#define SHT_NOBITS			8	/* Occupies no space */
+#define SHT_REL				9	/* Relocation entries without addend */
+#define SHT_SHLIB			10	/* Reserved */
+#define SHT_DYNSYM			11	/* Minimal set of dynamic linking symbols */
+#define SHT_ARM_EXIDX 		0x70000001	/* Exception Index table */
+#define SHT_ARM_PREEMPTMAP 	0x70000002	/* BPABI DLL dynamic linking pre-emption map */
+#define SHT_ARM_ATTRIBUTES 	0x70000003	/* Object file compatibility attributes */
+
+// sh_flags values
+#define SHF_WRITE		0	/* writable section */
+#define SHF_ALLOC		2	/* section occupies memory */
+#define SHF_EXECINSTR	        4	/* machine instructions */
+
+// Symbol entry (contain info about a symbol)
+typedef struct {
+	Elf32_Word    st_name;                /* Symbol name (string tbl index) */
+	Elf32_Addr    st_value;               /* Symbol value */
+	Elf32_Word    st_size;                /* Symbol size */
+	unsigned char st_info;                /* Symbol type and binding */
+	unsigned char st_other;               /* Symbol visibility */
+	Elf32_Section st_shndx;               /* Section index */
+} Elf32_Sym;
+
+// Extract from the st_info
+#define SYM_TYPE(x)		((x)&0xF)
+#define SYM_BIND(x)		((x)>>4)
+
+// Symbol binding values from st_info
+#define STB_LOCAL 	0	/* Symbol not visible outside object */
+#define STB_GLOBAL 	1	/* Symbol visible to all object files */
+#define STB_WEAK	2	/* Similar to STB_GLOBAL */
+
+// Symbol type values from st_info
+#define STT_NOTYPE	0	/* Not specified */
+#define STT_OBJECT	1	/* Data object e.g. variable */
+#define STT_FUNC	2	/* Function */
+#define STT_SECTION	3	/* Section */
+#define STT_FILE	4	/* Source file associated with object file */
+
+// Special section header index values from st_shndex
+#define SHN_UNDEF  		0
+#define SHN_LOPROC 		0xFF00	/* Extended values */
+#define SHN_ABS	   		0xFFF1	/* Absolute value: don't relocate */
+#define SHN_COMMON 		0xFFF2	/* Common block. Not allocated yet */
+#define SHN_HIPROC 		0xFF1F
+#define SHN_HIRESERVE 	        0xFFFF
+
+// Relocation entry (info about how to relocate)
+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 */
+
+// ARM relocation types
+#define R_ARM_NONE			0
+#define R_ARM_PC24			1
+#define R_ARM_ABS32			2
+#define R_ARM_COPY			20
+#define R_ARM_GLOB_DAT			21
+#define R_ARM_JUMP_SLOT			22
+#define R_ARM_BASE_PREL			25
+#define R_ARM_GOT_BREL			26
+#define R_ARM_PLT32			27
+
+#endif /* BACKENDS_ELF_H */

Copied: scummvm/branches/gsoc2010-plugins/backends/platform/ds/arm9/source/plugin.ld (from rev 50615, scummvm/branches/gsoc2010-plugins/backends/platform/ds/plugin.ld)
===================================================================
--- scummvm/branches/gsoc2010-plugins/backends/platform/ds/arm9/source/plugin.ld	                        (rev 0)
+++ scummvm/branches/gsoc2010-plugins/backends/platform/ds/arm9/source/plugin.ld	2010-07-03 05:05:27 UTC (rev 50617)
@@ -0,0 +1,216 @@
+OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
+OUTPUT_ARCH(arm)
+/* PHDRS specifies ELF Program Headers (or segments) to the plugin linker */
+PHDRS {
+  plugin PT_LOAD ; /* Specifies that the plugin segment should be loaded from file */
+}
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  . = 0;
+  .interp         : { *(.interp) } : plugin 	/*The ": plugin" tells the linker to assign this and
+  	             								  the following sections to the "plugin" segment*/
+  .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.*) }
+   __exidx_end = .;
+  .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     :
+  {
+     PROVIDE_HIDDEN (__init_array_start = .);
+     KEEP (*(SORT(.init_array.*)))
+     KEEP (*(.init_array))
+     PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array     :
+  {
+    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_*) }
+}

Deleted: scummvm/branches/gsoc2010-plugins/backends/platform/ds/elf32.h
===================================================================
--- scummvm/branches/gsoc2010-plugins/backends/platform/ds/elf32.h	2010-07-03 04:42:34 UTC (rev 50616)
+++ scummvm/branches/gsoc2010-plugins/backends/platform/ds/elf32.h	2010-07-03 05:05:27 UTC (rev 50617)
@@ -1,192 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * $URL$
- * $Id$
- *
- */
-
-#ifndef BACKENDS_ELF_H
-#define BACKENDS_ELF_H
-
-/* ELF stuff */
-
-typedef unsigned short Elf32_Half, Elf32_Section;
-typedef unsigned int Elf32_Word, Elf32_Addr, Elf32_Off;
-typedef signed int  Elf32_Sword;
-typedef Elf32_Half Elf32_Versym;
-
-#define EI_NIDENT (16)
-#define SELFMAG         6
-
-/* ELF File format structures. Look up ELF structure for more details */
-
-// ELF header (contains info about the file)
-typedef struct {
-	unsigned char e_ident[EI_NIDENT];     /* Magic number and other info */
-	Elf32_Half    e_type;                 /* Object file type */
-	Elf32_Half    e_machine;              /* Architecture */
-	Elf32_Word    e_version;              /* Object file version */
-	Elf32_Addr    e_entry;                /* Entry point virtual address */
-	Elf32_Off     e_phoff;                /* Program header table file offset */
-	Elf32_Off     e_shoff;                /* Section header table file offset */
-	Elf32_Word    e_flags;                /* Processor-specific flags */
-	Elf32_Half    e_ehsize;               /* ELF header size in bytes */
-	Elf32_Half    e_phentsize;            /* Program header table entry size */
-	Elf32_Half    e_phnum;                /* Program header table entry count */
-	Elf32_Half    e_shentsize;            /* Section header table entry size */
-	Elf32_Half    e_shnum;                /* Section header table entry count */
-	Elf32_Half    e_shstrndx;             /* Section header string table index */
-} Elf32_Ehdr;
-
-// Should be in e_ident
-#define ELFMAG          "\177ELF\1\1"	/* ELF Magic number */
-
-// e_type values
-#define ET_NONE		0	/* no file type */
-#define ET_REL		1	/* relocatable */
-#define ET_EXEC		2	/* executable */
-#define ET_DYN		3	/* shared object */
-#define ET_CORE		4	/* core file */
-
-// e_machine values
-#define EM_ARM		40
-
-// Program header (contains info about segment)
-typedef struct {
-	Elf32_Word    p_type;                 /* Segment type */
-	Elf32_Off     p_offset;               /* Segment file offset */
-	Elf32_Addr    p_vaddr;                /* Segment virtual address */
-	Elf32_Addr    p_paddr;                /* Segment physical address */
-	Elf32_Word    p_filesz;               /* Segment size in file */
-	Elf32_Word    p_memsz;                /* Segment size in memory */
-	Elf32_Word    p_flags;                /* Segment flags */
-	Elf32_Word    p_align;                /* Segment alignment */
-} Elf32_Phdr;
-
-// p_type values
-#define PT_NULL 		0	/* ignored */
-#define PT_LOAD			1	/* loadable segment */
-#define PT_DYNAMIC		2	/* dynamic linking info */
-#define PT_INTERP		3	/* info about interpreter */
-#define PT_NOTE			4	/* note segment */
-#define PT_SHLIB		5	/* reserved */
-#define PT_PHDR			6	/* Program header table */
-#define PT_ARM_ARCHEXT 	0x70000000 /* Platform architecture compatibility information */
-#define PT_ARM_EXIDX 	0x70000001 /* Exception unwind tables */
-
-// p_flags value
-#define PF_X	1	/* execute */
-#define PF_W	2	/* write */
-#define PF_R	4	/* read */
-
-// Section header (contains info about section)
-typedef struct {
-	Elf32_Word    sh_name;                /* Section name (string tbl index) */
-	Elf32_Word    sh_type;                /* Section type */
-	Elf32_Word    sh_flags;               /* Section flags */
-	Elf32_Addr    sh_addr;                /* Section virtual addr at execution */
-	Elf32_Off     sh_offset;              /* Section file offset */
-	Elf32_Word    sh_size;                /* Section size in bytes */
-	Elf32_Word    sh_link;                /* Link to another section */
-	Elf32_Word    sh_info;                /* Additional section information */
-	Elf32_Word    sh_addralign;           /* Section alignment */
-	Elf32_Word    sh_entsize;             /* Entry size if section holds table */
-} Elf32_Shdr;
-
-// sh_type values
-#define SHT_NULL			0	/* Inactive section */
-#define SHT_PROGBITS                    1	/* Proprietary */
-#define SHT_SYMTAB			2	/* Symbol table */
-#define SHT_STRTAB			3	/* String table */
-#define SHT_RELA			4	/* Relocation entries with addend */
-#define SHT_HASH			5	/* Symbol hash table */
-#define SHT_DYNAMIC			6	/* Info for dynamic linking */
-#define SHT_NOTE			7	/* Note section */
-#define SHT_NOBITS			8	/* Occupies no space */
-#define SHT_REL				9	/* Relocation entries without addend */
-#define SHT_SHLIB			10	/* Reserved */
-#define SHT_DYNSYM			11	/* Minimal set of dynamic linking symbols */
-#define SHT_ARM_EXIDX 		0x70000001	/* Exception Index table */
-#define SHT_ARM_PREEMPTMAP 	0x70000002	/* BPABI DLL dynamic linking pre-emption map */
-#define SHT_ARM_ATTRIBUTES 	0x70000003	/* Object file compatibility attributes */
-
-// sh_flags values
-#define SHF_WRITE		0	/* writable section */
-#define SHF_ALLOC		2	/* section occupies memory */
-#define SHF_EXECINSTR	        4	/* machine instructions */
-
-// Symbol entry (contain info about a symbol)
-typedef struct {
-	Elf32_Word    st_name;                /* Symbol name (string tbl index) */
-	Elf32_Addr    st_value;               /* Symbol value */
-	Elf32_Word    st_size;                /* Symbol size */
-	unsigned char st_info;                /* Symbol type and binding */
-	unsigned char st_other;               /* Symbol visibility */
-	Elf32_Section st_shndx;               /* Section index */
-} Elf32_Sym;
-
-// Extract from the st_info
-#define SYM_TYPE(x)		((x)&0xF)
-#define SYM_BIND(x)		((x)>>4)
-
-// Symbol binding values from st_info
-#define STB_LOCAL 	0	/* Symbol not visible outside object */
-#define STB_GLOBAL 	1	/* Symbol visible to all object files */
-#define STB_WEAK	2	/* Similar to STB_GLOBAL */
-
-// Symbol type values from st_info
-#define STT_NOTYPE	0	/* Not specified */
-#define STT_OBJECT	1	/* Data object e.g. variable */
-#define STT_FUNC	2	/* Function */
-#define STT_SECTION	3	/* Section */
-#define STT_FILE	4	/* Source file associated with object file */
-
-// Special section header index values from st_shndex
-#define SHN_UNDEF  		0
-#define SHN_LOPROC 		0xFF00	/* Extended values */
-#define SHN_ABS	   		0xFFF1	/* Absolute value: don't relocate */
-#define SHN_COMMON 		0xFFF2	/* Common block. Not allocated yet */
-#define SHN_HIPROC 		0xFF1F
-#define SHN_HIRESERVE 	        0xFFFF
-
-// Relocation entry (info about how to relocate)
-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 */
-
-// ARM relocation types
-#define R_ARM_NONE			0
-#define R_ARM_PC24			1
-#define R_ARM_ABS32			2
-#define R_ARM_COPY			20
-#define R_ARM_GLOB_DAT			21
-#define R_ARM_JUMP_SLOT			22
-#define R_ARM_BASE_PREL			25
-#define R_ARM_GOT_BREL			26
-#define R_ARM_PLT32			27
-
-#endif /* BACKENDS_ELF_H */

Deleted: scummvm/branches/gsoc2010-plugins/backends/platform/ds/plugin.ld
===================================================================
--- scummvm/branches/gsoc2010-plugins/backends/platform/ds/plugin.ld	2010-07-03 04:42:34 UTC (rev 50616)
+++ scummvm/branches/gsoc2010-plugins/backends/platform/ds/plugin.ld	2010-07-03 05:05:27 UTC (rev 50617)
@@ -1,216 +0,0 @@
-OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
-OUTPUT_ARCH(arm)
-/* PHDRS specifies ELF Program Headers (or segments) to the plugin linker */
-PHDRS {
-  plugin PT_LOAD ; /* Specifies that the plugin segment should be loaded from file */
-}
-SECTIONS
-{
-  /* Read-only sections, merged into text segment: */
-  . = 0;
-  .interp         : { *(.interp) } : plugin 	/*The ": plugin" tells the linker to assign this and
-  	             								  the following sections to the "plugin" segment*/
-  .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.*) }
-   __exidx_end = .;
-  .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     :
-  {
-     PROVIDE_HIDDEN (__init_array_start = .);
-     KEEP (*(SORT(.init_array.*)))
-     KEEP (*(.init_array))
-     PROVIDE_HIDDEN (__init_array_end = .);
-  }
-  .fini_array     :
-  {
-    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