aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2004-05-26 11:38:46 +0000
committerEric Andersen <andersen@codepoet.org>2004-05-26 11:38:46 +0000
commitee70fa5523520f810f77b8a94aa1ffdbd9aff057 (patch)
tree03a1804a24860e6d0902c00a4be0da4efa2deaa5
parent0dfe4e99562878bc575e682926c2e345661d08a1 (diff)
downloadbusybox-w32-ee70fa5523520f810f77b8a94aa1ffdbd9aff057.tar.gz
busybox-w32-ee70fa5523520f810f77b8a94aa1ffdbd9aff057.tar.bz2
busybox-w32-ee70fa5523520f810f77b8a94aa1ffdbd9aff057.zip
Patch from Yoshinori Sato:
This patch is uClinux-2.4.x for H8/300 module support. please apply. -- Yoshinori Sato
-rw-r--r--modutils/insmod.c50
1 files changed, 47 insertions, 3 deletions
diff --git a/modutils/insmod.c b/modutils/insmod.c
index 63ee9da71..5063be564 100644
--- a/modutils/insmod.c
+++ b/modutils/insmod.c
@@ -3,7 +3,7 @@
3 * Mini insmod implementation for busybox 3 * Mini insmod implementation for busybox
4 * 4 *
5 * This version of insmod supports x86, ARM, SH3/4/5, powerpc, m68k, 5 * This version of insmod supports x86, ARM, SH3/4/5, powerpc, m68k,
6 * MIPS, and v850e. 6 * MIPS, v850e, and H8/300.
7 * 7 *
8 * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org> 8 * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
9 * and Ron Alder <alder@lineo.com> 9 * and Ron Alder <alder@lineo.com>
@@ -18,6 +18,9 @@
18 * very minor changes required to also work with StrongArm and presumably 18 * very minor changes required to also work with StrongArm and presumably
19 * all ARM based systems. 19 * all ARM based systems.
20 * 20 *
21 * Yoshinori Sato <ysato@users.sourceforge.jp> 19-May-2004.
22 * added Renesas H8/300 support.
23 *
21 * Paul Mundt <lethal@linux-sh.org> 08-Aug-2003. 24 * Paul Mundt <lethal@linux-sh.org> 08-Aug-2003.
22 * Integrated support for sh64 (SH-5), from preliminary modutils 25 * Integrated support for sh64 (SH-5), from preliminary modutils
23 * patches from Benedict Gaster <benedict.gaster@superh.com>. 26 * patches from Benedict Gaster <benedict.gaster@superh.com>.
@@ -248,6 +251,17 @@ extern int insmod_ng_main( int argc, char **argv);
248#define ELFCLASSM ELFCLASS32 251#define ELFCLASSM ELFCLASS32
249#endif 252#endif
250 253
254#if defined(__H8300H__) || defined(__H8300S__)
255#define CONFIG_USE_SINGLE
256
257#define MATCH_MACHINE(x) (x == EM_H8_300)
258#define SHT_RELM SHT_RELA
259#define Elf32_RelM Elf32_Rela
260
261#define ELFCLASSM ELFCLASS32
262#define SYMBOL_PREFIX "_"
263#endif
264
251#ifndef SHT_RELM 265#ifndef SHT_RELM
252#error Sorry, but insmod.c does not yet support this architecture... 266#error Sorry, but insmod.c does not yet support this architecture...
253#endif 267#endif
@@ -282,7 +296,7 @@ extern int insmod_ng_main( int argc, char **argv);
282#ifndef MODUTILS_MODULE_H 296#ifndef MODUTILS_MODULE_H
283static const int MODUTILS_MODULE_H = 1; 297static const int MODUTILS_MODULE_H = 1;
284 298
285#ident "$Id: insmod.c,v 1.117 2004/04/14 17:51:22 andersen Exp $" 299#ident "$Id: insmod.c,v 1.118 2004/05/26 11:38:46 andersen Exp $"
286 300
287/* This file contains the structures used by the 2.0 and 2.1 kernels. 301/* This file contains the structures used by the 2.0 and 2.1 kernels.
288 We do not use the kernel headers directly because we do not wish 302 We do not use the kernel headers directly because we do not wish
@@ -503,7 +517,7 @@ int delete_module(const char *);
503#ifndef MODUTILS_OBJ_H 517#ifndef MODUTILS_OBJ_H
504static const int MODUTILS_OBJ_H = 1; 518static const int MODUTILS_OBJ_H = 1;
505 519
506#ident "$Id: insmod.c,v 1.117 2004/04/14 17:51:22 andersen Exp $" 520#ident "$Id: insmod.c,v 1.118 2004/05/26 11:38:46 andersen Exp $"
507 521
508/* The relocatable object is manipulated using elfin types. */ 522/* The relocatable object is manipulated using elfin types. */
509 523
@@ -1323,6 +1337,36 @@ arch_apply_relocation(struct obj_file *f,
1323 break; 1337 break;
1324#endif 1338#endif
1325 1339
1340#elif defined(__H8300H__) || defined(__H8300S__)
1341 case R_H8_DIR24R8:
1342 loc = (ElfW(Addr) *)((ElfW(Addr))loc - 1);
1343 *loc = (*loc & 0xff000000) | ((*loc & 0xffffff) + v);
1344 break;
1345 case R_H8_DIR24A8:
1346 *loc += v;
1347 break;
1348 case R_H8_DIR32:
1349 case R_H8_DIR32A16:
1350 *loc += v;
1351 break;
1352 case R_H8_PCREL16:
1353 v -= dot + 2;
1354 if ((Elf32_Sword)v > 0x7fff ||
1355 (Elf32_Sword)v < -(Elf32_Sword)0x8000)
1356 ret = obj_reloc_overflow;
1357 else
1358 *(unsigned short *)loc = v;
1359 break;
1360 case R_H8_PCREL8:
1361 v -= dot + 1;
1362 if ((Elf32_Sword)v > 0x7f ||
1363 (Elf32_Sword)v < -(Elf32_Sword)0x80)
1364 ret = obj_reloc_overflow;
1365 else
1366 *(unsigned char *)loc = v;
1367 break;
1368#endif
1369
1326#if defined(CONFIG_USE_PLT_ENTRIES) 1370#if defined(CONFIG_USE_PLT_ENTRIES)
1327 1371
1328bb_use_plt: 1372bb_use_plt: