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

toneman1138 at users.sourceforge.net toneman1138 at users.sourceforge.net
Thu Jul 22 03:44:48 CEST 2010


Revision: 51130
          http://scummvm.svn.sourceforge.net/scummvm/?rev=51130&view=rev
Author:   toneman1138
Date:     2010-07-22 01:44:45 +0000 (Thu, 22 Jul 2010)

Log Message:
-----------
Added code for relocation R_ARM_TARGET1 (untested)

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

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-22 01:25:17 UTC (rev 51129)
+++ scummvm/branches/gsoc2010-plugins/backends/platform/ds/arm9/source/dsloader.cpp	2010-07-22 01:44:45 UTC (rev 51130)
@@ -106,7 +106,7 @@
 		// Get the target instruction in the code
 		unsigned int *target = (unsigned int *)((char *)relSegment + rel[i].r_offset);
 
-		unsigned int origTarget = *target;	// Save for debugging
+		unsigned int origTarget = *target;	//Save for debugging
 
 		// Act differently based on the type of relocation
 		switch (REL_TYPE(rel[i].r_info)) {
@@ -134,6 +134,18 @@
 			DBG("R_ARM_JUMP24: PC-relative jump, ld takes care of all relocation work for us.\n");
 			break;
 
+		case R_ARM_TARGET1:
+			if (sym->st_shndx < SHN_LOPROC) {			// Only shift for plugin section.
+				a = *target;							// Get full 32 bits of addend
+				relocation = a + (Elf32_Addr)_segment;			   // Shift by main offset
+
+				*target = relocation;
+
+				DBG("R_ARM_TARGET1: i=%d, a=%x, origTarget=%x, target=%x\n", i, a, origTarget, *target);
+				seterror("WARNING: THIS RELOCATION CODE UNTESTED!\n"); //TODO: test cruise for corpse on ARM target!
+			}
+			break;
+
 		case R_ARM_V4BX:
 			DBG("R_ARM_V4BX: No relocation calculation necessary.\n");
 			break;

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-22 01:25:17 UTC (rev 51129)
+++ scummvm/branches/gsoc2010-plugins/backends/platform/ds/arm9/source/elf32.h	2010-07-22 01:44:45 UTC (rev 51130)
@@ -190,6 +190,7 @@
 #define R_ARM_THM_CALL      10
 #define R_ARM_CALL			28
 #define R_ARM_JUMP24		29
+#define R_ARM_TARGET1		38
 #define R_ARM_V4BX 			40
 
 #endif /* BACKENDS_ELF_H */


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