This change adds an upper bound for symbols which are fixed up after u-boot
is relocated into RAM. This way portions that are left at their original
location can be referred to without having to manually fix up any pointers.
Signed-off-by: Gabe Black <gabeblack@chromium.org>
 
 int bios_setup(void)
 {
-       /*
-        * The BIOS section is not relocated and still in the ROM. The
-        * __bios_start symbol was adjusted, though, so adjust it back.
-        */
-       ulong bios_start = (ulong)&__bios_start - gd->reloc_off;
+       /* The BIOS section is not relocated and still in the ROM. */
+       ulong bios_start = (ulong)&__bios_start;
        ulong bios_size = (ulong)&__bios_size;
 
        static int done;
 
                        offset_ptr_ram = offset_ptr_rom + gd->reloc_off;
 
                        /* Check that the target points into .text */
-                       if (*offset_ptr_ram >= CONFIG_SYS_TEXT_BASE)
+                       if (*offset_ptr_ram >= CONFIG_SYS_TEXT_BASE &&
+                                       *offset_ptr_ram <
+                                       (CONFIG_SYS_TEXT_BASE + size)) {
                                *offset_ptr_ram += gd->reloc_off;
+                       }
                }
        } while (re_src++ < re_end);
 
 
 
 int realmode_setup(void)
 {
-       /*
-        * The realmode section is not relocated and still in the ROM. The
-        * __realmode_start symbol was adjusted, though, so adjust it back.
-        */
-       ulong realmode_start = (ulong)&__realmode_start - gd->reloc_off;
+       /* The realmode section is not relocated and still in the ROM. */
+       ulong realmode_start = (ulong)&__realmode_start;
        ulong realmode_size = (ulong)&__realmode_size;
 
        /* copy the realmode switch code */