[SPARC]: Handle UNWIND_INFO properly.
David S. Miller [Fri, 12 May 2006 19:45:50 +0000 (12:45 -0700)]
For sparc32 we need R_SPARC_UA32 relocation support, for
sparc64 we need the handle R_SPARC_DISP32 relocations.

Based upon reports and initial patch by Martin Habets.

Signed-off-by: David S. Miller <davem@davemloft.net>

arch/sparc/kernel/module.c
arch/sparc64/defconfig
arch/sparc64/kernel/module.c
lib/Kconfig.debug

index 787d5f1..598682f 100644 (file)
@@ -113,6 +113,7 @@ int apply_relocate_add(Elf32_Shdr *sechdrs,
 
                switch (ELF32_R_TYPE(rel[i].r_info)) {
                case R_SPARC_32:
+               case R_SPARC_UA32:
                        location[0] = v >> 24;
                        location[1] = v >> 16;
                        location[2] = v >>  8;
index 22ca69f..f09a70b 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
 # Linux kernel version: 2.6.17-rc3
-# Mon May  8 15:12:53 2006
+# Fri May 12 12:43:49 2006
 #
 CONFIG_SPARC=y
 CONFIG_SPARC64=y
@@ -1309,6 +1309,7 @@ CONFIG_DEBUG_BUGVERBOSE=y
 # CONFIG_DEBUG_INFO is not set
 CONFIG_DEBUG_FS=y
 # CONFIG_DEBUG_VM is not set
+# CONFIG_UNWIND_INFO is not set
 CONFIG_FORCED_INLINING=y
 # CONFIG_RCU_TORTURE_TEST is not set
 # CONFIG_DEBUG_STACK_USAGE is not set
index 6c83e37..5798715 100644 (file)
@@ -143,6 +143,11 @@ int apply_relocate_add(Elf64_Shdr *sechdrs,
                        location[3] = v >>  0;
                        break;
 
+               case R_SPARC_DISP32:
+                       v -= (Elf64_Addr) location;
+                       *loc32 = v;
+                       break;
+
                case R_SPARC_WDISP30:
                        v -= (Elf64_Addr) location;
                        *loc32 = (*loc32 & ~0x3fffffff) |
index 6ecc180..ccb0c1f 100644 (file)
@@ -189,7 +189,7 @@ config FRAME_POINTER
 config UNWIND_INFO
        bool "Compile the kernel with frame unwind information"
        depends on !IA64
-       depends on !MODULES || !(MIPS || PARISC || PPC || SUPERH || SPARC64 || V850)
+       depends on !MODULES || !(MIPS || PARISC || PPC || SUPERH || V850)
        help
          If you say Y here the resulting kernel image will be slightly larger
          but not slower, and it will give very useful debugging information.