[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