Module Name: src Committed By: martin Date: Sun May 2 11:43:30 UTC 2010
Modified Files: src/sys/arch/sparc64/sparc64: kobj_machdep.c Log Message: Fix R_SPARC_OLO10 relocations. XXX this whole code does not look like it would have a chance to work on 32bit kernels, but I can't test right now. To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/sys/arch/sparc64/sparc64/kobj_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/sparc64/sparc64/kobj_machdep.c diff -u src/sys/arch/sparc64/sparc64/kobj_machdep.c:1.3 src/sys/arch/sparc64/sparc64/kobj_machdep.c:1.4 --- src/sys/arch/sparc64/sparc64/kobj_machdep.c:1.3 Wed May 20 08:32:35 2009 +++ src/sys/arch/sparc64/sparc64/kobj_machdep.c Sun May 2 11:43:30 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: kobj_machdep.c,v 1.3 2009/05/20 08:32:35 jnemeth Exp $ */ +/* $NetBSD: kobj_machdep.c,v 1.4 2010/05/02 11:43:30 martin Exp $ */ /*- * Copyright (c) 2001 Jake Burkholder. @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kobj_machdep.c,v 1.3 2009/05/20 08:32:35 jnemeth Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kobj_machdep.c,v 1.4 2010/05/02 11:43:30 martin Exp $"); #define ELFSIZE ARCH_ELFSIZE @@ -164,7 +164,7 @@ _BM(22), _BM(10), /* _HIPLT22, LOPLT10 */ _BM(32), _BM(22), _BM(10), /* _PCPLT32, _PCPLT22, _PCPLT10 */ _BM(10), _BM(11), -1, /* _10, _11, _64 */ - _BM(13), _BM(22), /* _OLO10, _HH22 */ + _BM(10), _BM(22), /* _OLO10, _HH22 */ _BM(10), _BM(22), /* _HM10, _LM22 */ _BM(22), _BM(10), _BM(22), /* _PC_HH22, _PC_HM10, _PC_LM22 */ _BM(16), _BM(19), /* _WDISP16, _WDISP19 */ @@ -203,6 +203,9 @@ if (rtype == R_SPARC_NONE) return 0; + if ((rtype & 0x00ff) == R_SPARC_OLO10) + rtype = R_SPARC_OLO10; + if (rtype == R_SPARC_RELATIVE) { kobj_stat(ko, &base, NULL); value = rela->r_addend + (Elf_Addr)base; @@ -212,8 +215,7 @@ } if (rtype == R_SPARC_JMP_SLOT || rtype == R_SPARC_COPY || - rtype >= sizeof(reloc_target_bitmask) / - sizeof(*reloc_target_bitmask)) + rtype >= __arraycount(reloc_target_bitmask)) return -1; if (RELOC_UNALIGNED(rtype))