Browse Source

Several SH lib loader patches by Stefan Allius <allius@atecom.com>
and "M. R. Brown" <mrbrown@0xd6.org>

Eric Andersen 22 years ago
parent
commit
9333e41422
5 changed files with 8 additions and 3 deletions
  1. 2 0
      ldso/ldso/ldso.c
  2. 2 0
      ldso/ldso/sh/dl-sysdep.h
  3. 1 2
      ldso/ldso/sh/elfinterp.c
  4. 2 0
      ldso/ldso/sh/ld_sysdep.h
  5. 1 1
      ldso/ldso/sh/resolve.S

+ 2 - 0
ldso/ldso/ldso.c

@@ -202,6 +202,8 @@ static inline void hexprint(unsigned long x)
 }
 #endif
 
+LD_BOOT(unsigned long args) __attribute__ ((unused));
+
 LD_BOOT(unsigned long args)
 {
 	unsigned int argc;

+ 2 - 0
ldso/ldso/sh/dl-sysdep.h

@@ -38,6 +38,8 @@
 			    - (unsigned long)(REL);		\
 		break;						\
 	case R_SH_DIR32:					\
+	case R_SH_GLOB_DAT:					\
+	case R_SH_JMP_SLOT:					\
 		*(REL)  = (SYMBOL) + (RELP)->r_addend;		\
 		break;						\
 	case R_SH_RELATIVE:					\

+ 1 - 2
ldso/ldso/sh/elfinterp.c

@@ -288,8 +288,7 @@ _dl_do_reloc (struct elf_resolve *tpnt,struct dyn_elf *scope,
 			/* handled later on */
 			break;
 		case R_SH_DIR32:
-			*reloc_addr = symbol_addr + rpnt->r_addend;
-			break;
+		case R_SH_GLOB_DAT:
 		case R_SH_JMP_SLOT:
 			*reloc_addr = symbol_addr + rpnt->r_addend;
 			break;

+ 2 - 0
ldso/ldso/sh/ld_sysdep.h

@@ -38,6 +38,8 @@
 			    - (unsigned long)(REL);		\
 		break;						\
 	case R_SH_DIR32:					\
+	case R_SH_GLOB_DAT:					\
+	case R_SH_JMP_SLOT:					\
 		*(REL)  = (SYMBOL) + (RELP)->r_addend;		\
 		break;						\
 	case R_SH_RELATIVE:					\

+ 1 - 1
ldso/ldso/sh/resolve.S

@@ -79,6 +79,6 @@ _dl_linux_resolve:
 
 	.balign	4
 3:
-	.long   _dl_linux_resolver - .jmp_loc
+	.long   _dl_linux_resolver@PLT-(.jmp_loc-(.))
 	.size	_dl_linux_resolve, . - _dl_linux_resolve