bugfix: _barebox_image_size wrong if enable

张忠山 zzs213 at 126.com
Tue Jun 18 03:17:52 PDT 2019

> No, it is corrected during runtime in relocate_to_current_adr(). It
> seems older compilers need a runtime relocation fixup for this.

Yes, in relocate_to_current_adr() the address all be fixed up.

But if _barebox_image_size, __bss_start and __bss_stop all zero. the
barebox_base calculated by arm_mem_barebox_image() would wrong. but because it
align the base to 1M. So mostly it works fine. If the barebox size larger than
1M. It should fail.

> AFAIR this only happened for linker variables that point to absolute
> addresses. Differences between addresses also worked with the older
> compilers, and I think this is what your patch does:

No. my patch just for new toolchain. with old toolchain it has no effect,
Because all of the size is zero.

By using the newer toolchain:
	arm-poky-eabi-gcc (GCC) 8.2.0
	GNU ld (GNU Binutils)

In barebox config file:

Without my patch, in barebox.map

                0x000000000001ff40                __bss_start = .

                0x0000000000021bec                __bss_stop = .
                0x0000000000021bec                _end = .
                0xffffffffdc21ff40                _barebox_image_size = (__bss_start - 0x23e00000)

In code, printout barebox_base calculated by arm_mem_barebox_image():

        barebox_image_size     : 0xdc21ff40
        __bss_stop     : 0x00021bec
        __bss_start     : 0x0001ff40
        membase     : 0x20000000
        endmem      : 0x60000000
        barebox_base: 0x83d00000

barebox_base outof memory region!

After using my patch, the outpus is:

        barebox_image_size     : 0x0001ff40
        __bss_stop     : 0x00021bec
        __bss_start     : 0x0001ff40
        membase     : 0x20000000
        endmem      : 0x60000000
        barebox_base: 0x5ff00000

Best Regards,

More information about the barebox mailing list