Elf32_Rela *rela = (void *)sechdrs[relsec].sh_addr;
        Elf32_Sym *sym;
        unsigned long int *location;
-       unsigned long int locoffs;
        unsigned long int value;
 #if __GNUC__ < 4
        unsigned long int old_value;
                        break;
 
                case R_MICROBLAZE_64_PCREL:
-                       locoffs = (location[0] & 0xFFFF) << 16 |
+#if __GNUC__ < 4
+                       old_value = (location[0] & 0xFFFF) << 16 |
                                (location[1] & 0xFFFF);
-                       value -= (unsigned long int)(location) + 4 +
-                               locoffs;
+                       value -= old_value;
+#endif
+                       value -= (unsigned long int)(location) + 4;
                        location[0] = (location[0] & 0xFFFF0000) |
                                        (value >> 16);
                        location[1] = (location[1] & 0xFFFF0000) |
                                value);
                        break;
 
+               case R_MICROBLAZE_32_PCREL_LO:
+                       pr_debug("R_MICROBLAZE_32_PCREL_LO\n");
+                       break;
+
                case R_MICROBLAZE_NONE:
                        pr_debug("R_MICROBLAZE_NONE\n");
                        break;
                        printk(KERN_ERR "module %s: "
                                "Unknown relocation: %u\n",
                                module->name,
-                               ELF32_R_TYPE(rela->r_info));
+                               ELF32_R_TYPE(rela[i].r_info));
                        return -ENOEXEC;
                }
        }