]> git.sur5r.net Git - u-boot/commitdiff
arc: relocate - minor refactoring and clean-up
authorAlexey Brodkin <abrodkin@synopsys.com>
Fri, 26 Dec 2014 16:36:30 +0000 (19:36 +0300)
committerAlexey Brodkin <abrodkin@synopsys.com>
Thu, 15 Jan 2015 19:38:42 +0000 (22:38 +0300)
 * use better symbols for relocatable region boundaries
("__image_copy_start" instead of "CONFIG_SYS_TEXT_BASE")
 * remove useless debug messages because they will only show up in case
of both problem (when normal "if" branch won't be taken) and DEBUG take
place which is pretty rare situation.

Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
arch/arc/include/asm/sections.h
arch/arc/lib/relocate.c

index 2a7a98713da6de4ad3139a1cff3135ad56fc84d8..b8f2a859fd9a17aff0db8b97decaa39faf2e556f 100644 (file)
@@ -12,5 +12,6 @@
 extern ulong __text_end;
 extern ulong __ivt_start;
 extern ulong __ivt_end;
+extern ulong __image_copy_start;
 
 #endif /* __ASM_ARC_SECTIONS_H */
index 5618b6ae938a2e9865c43ef3421b2973b7026fa5..7797782563bb7f6dc736440fa6fa7aa0818a9e5a 100644 (file)
@@ -26,7 +26,7 @@ int do_elf_reloc_fixups(void)
                offset_ptr_rom = (Elf32_Addr *)re_src->r_offset;
 
                /* Check that the location of the relocation is in .text */
-               if (offset_ptr_rom >= (Elf32_Addr *)CONFIG_SYS_TEXT_BASE &&
+               if (offset_ptr_rom >= (Elf32_Addr *)&__image_copy_start &&
                    offset_ptr_rom > last_offset) {
                        unsigned int val;
                        /* Switch to the in-RAM version */
@@ -48,9 +48,9 @@ int do_elf_reloc_fixups(void)
                                val = (val << 16) | (val >> 16);
 #endif
 
-                       /* Check that the target points into .text */
-                       if (val >= CONFIG_SYS_TEXT_BASE && val <=
-                           (unsigned int)&__bss_end) {
+                       /* Check that the target points into executable */
+                       if (val >= (unsigned int)&__image_copy_start && val <=
+                           (unsigned int)&__image_copy_end) {
                                val += gd->reloc_off;
 #ifdef __LITTLE_ENDIAN__
                                /* If location in ".text" section swap value */
@@ -59,14 +59,7 @@ int do_elf_reloc_fixups(void)
                                        val = (val << 16) | (val >> 16);
 #endif
                                memcpy(offset_ptr_ram, &val, sizeof(int));
-                       } else {
-                               debug("   %p: rom reloc %x, ram %p, value %x, limit %x\n",
-                                     re_src, re_src->r_offset, offset_ptr_ram,
-                                     val, (unsigned int)&__bss_end);
                        }
-               } else {
-                       debug("   %p: rom reloc %x, last %p\n", re_src,
-                             re_src->r_offset, last_offset);
                }
                last_offset = offset_ptr_rom;