[uClibc-cvs] uClibc/ldso/ldso/m68k dl-startup.h, 1.4, 1.5 dl-sysdep.h, 1.5, 1.6

Erik Andersen andersen at uclibc.org
Tue Feb 17 10:55:57 UTC 2004


Update of /var/cvs/uClibc/ldso/ldso/m68k
In directory nail:/tmp/cvs-serv25724/m68k

Modified Files:
	dl-startup.h dl-sysdep.h 
Log Message:
Seperate out the startup stuff from the non-startup stuff.
Begin converting some big ugly macros to inline functions
instead


Index: dl-sysdep.h
===================================================================
RCS file: /var/cvs/uClibc/ldso/ldso/m68k/dl-sysdep.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- dl-sysdep.h	14 Feb 2004 11:30:33 -0000	1.5
+++ dl-sysdep.h	17 Feb 2004 10:55:55 -0000	1.6
@@ -5,11 +5,6 @@
 /* Define this if the system uses RELOCA.  */
 #define ELF_USES_RELOCA
 
-/* Get a pointer to the argv array.  On many platforms this can be
-   just the address if the first argument, on other platforms we need
-   to do something a little more subtle here.  */
-#define GET_ARGV(ARGVP, ARGS) ((ARGVP) = ((unsigned int *) &(ARGS)))
-
 /* Initialization sequence for a GOT.  */
 #define INIT_GOT(GOT_BASE,MODULE)		\
 {						\
@@ -17,59 +12,7 @@
   GOT_BASE[1] = (int) (MODULE);			\
 }
 
-/* Here is a macro to perform a relocation.  This is only used when
-   bootstrapping the dynamic loader.  RELP is the relocation that we
-   are performing, REL is the pointer to the address we are
-   relocating.  SYMBOL is the symbol involved in the relocation, and
-   LOAD is the load address. */
-#define PERFORM_BOOTSTRAP_RELOC(RELP,REL,SYMBOL,LOAD,SYMTAB)	\
-  switch (ELF32_R_TYPE ((RELP)->r_info))			\
-    {								\
-    case R_68K_8:						\
-      *(char *) (REL) = (SYMBOL) + (RELP)->r_addend;		\
-      break;							\
-    case R_68K_16:						\
-      *(short *) (REL) = (SYMBOL) + (RELP)->r_addend;		\
-      break;							\
-    case R_68K_32:						\
-      *(REL) = (SYMBOL) + (RELP)->r_addend;			\
-      break;							\
-    case R_68K_PC8:						\
-      *(char *) (REL) = ((SYMBOL) + (RELP)->r_addend		\
-			 - (unsigned int) (REL));		\
-      break;							\
-    case R_68K_PC16:						\
-      *(short *) (REL) = ((SYMBOL) + (RELP)->r_addend		\
-			  - (unsigned int) (REL));		\
-      break;							\
-    case R_68K_PC32:						\
-      *(REL) = ((SYMBOL) + (RELP)->r_addend			\
-		- (unsigned int) (REL));			\
-      break;							\
-    case R_68K_GLOB_DAT:					\
-    case R_68K_JMP_SLOT:					\
-      *(REL) = (SYMBOL);					\
-      break;							\
-    case R_68K_RELATIVE:		/* Compatibility kludge */ \
-      *(REL) = ((unsigned int) (LOAD) + ((RELP)->r_addend ? : *(REL))); \
-      break;							\
-    default:							\
-      _dl_exit (1);						\
-    }
-
-
-/* Transfer control to the user's application, once the dynamic loader
-   is done.  */
-
-#define START()					\
-  __asm__ volatile ("unlk %%a6\n\t"		\
-		    "jmp %0@"			\
-		    : : "a" (_dl_elf_main));
-
-
-
 /* Here we define the magic numbers that this dynamic loader should accept */
-
 #define MAGIC1 EM_68K
 #undef MAGIC2
 /* Used for error messages */

Index: dl-startup.h
===================================================================
RCS file: /var/cvs/uClibc/ldso/ldso/m68k/dl-startup.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- dl-startup.h	7 Feb 2004 12:26:19 -0000	1.4
+++ dl-startup.h	17 Feb 2004 10:55:55 -0000	1.5
@@ -1,7 +1,65 @@
-/* Any assmbly language/system dependent hacks needed to setup boot1.c so it
- * will work as expected and cope with whatever platform specific wierdness is
- * needed for this architecture.  See arm/boot1_arch.h for an example of what
- * can be done.
+/*
+ * Architecture specific code used by dl-startup.c
  */
 
-#define DL_BOOT(X) void __attribute__ ((unused)) _dl_boot (X)
+/* For m68k we do not need any special setup so go right to _dl_boot() */
+#define DL_BOOT(X) __attribute__ ((unused)) void _dl_boot (X)
+
+/* Get a pointer to the argv array.  On many platforms this can be just
+ * the address if the first argument, on other platforms we need to
+ * do something a little more subtle here.  */
+#define GET_ARGV(ARGVP, ARGS) ((ARGVP) = ((unsigned int *) &(ARGS)))
+
+
+/* Handle relocation of the symbols in the dynamic loader. */
+static inline
+void PERFORM_BOOTSTRAP_RELOC(ELF_RELOC *rpnt, unsigned long *reloc_addr,
+	unsigned long symbol_addr, unsigned long load_addr, Elf32_Sym *symtab)
+{
+    switch (ELF32_R_TYPE(rpnt->r_info))
+    {
+	case R_68K_8:
+	    *(char *) reloc_addr = symbol_addr + rpnt->r_addend;
+	    break;
+	case R_68K_16:
+	    *(short *) reloc_addr = symbol_addr + rpnt->r_addend;
+	    break;
+	case R_68K_32:
+	    *reloc_addr = symbol_addr + rpnt->r_addend;
+	    break;
+	case R_68K_PC8:
+	    *(char *) reloc_addr = (symbol_addr + rpnt->r_addend
+		    - (unsigned int) reloc_addr);
+	    break;
+	case R_68K_PC16:
+	    *(short *) reloc_addr = (symbol_addr + rpnt->r_addend
+		    - (unsigned int) reloc_addr);
+	    break;
+	case R_68K_PC32:
+	    *reloc_addr = (symbol_addr + rpnt->r_addend
+		    - (unsigned int) reloc_addr);
+	    break;
+	case R_68K_GLOB_DAT:
+	case R_68K_JMP_SLOT:
+	    *reloc_addr = symbol_addr;
+	    break;
+	case R_68K_RELATIVE:
+	    *reloc_addr = ((unsigned int) load_addr +
+		    (rpnt->r_addend ? : : *reloc_addr));
+	    break;
+	default:
+	    _dl_exit (1);
+    }
+}
+
+
+/* Transfer control to the user's application, once the dynamic loader is
+ * done.  This routine has to exit the current function, then call the
+ * _dl_elf_main function.  */
+#define START()					\
+  __asm__ volatile ("unlk %%a6\n\t"		\
+		    "jmp %0@"			\
+		    : : "a" (_dl_elf_main));
+
+
+




More information about the uClibc-cvs mailing list