[PATCH] RISC-V: Move __global_pointer$ to .sdata
Nelson Chu
nelson@rivosinc.com
Fri Jun 9 00:40:32 GMT 2023
>
> -SDATA_START_SYMBOLS="${CREATE_SHLIB-__SDATA_BEGIN__ = .;}
> - *(.srodata.cst16) *(.srodata.cst8) *(.srodata.cst4) *(.srodata.cst2)
> *(.srodata .srodata.*)"
> -
> -INITIAL_READONLY_SECTIONS=".interp : { *(.interp) }
> ${CREATE_PIE-${INITIAL_READONLY_SECTIONS}}"
>
> -INITIAL_READONLY_SECTIONS="${RELOCATING+${CREATE_SHLIB-${INITIAL_READONLY_SECTIONS}}}"
> -
> # We must cover as much of sdata as possible if it exists. If sdata+bss
> is
> # smaller than 0x1000 then we should start from bss end to cover as much
> of
> # the program as possible. But we can't allow gp to cover any of rodata,
> as
> # the address of variables in rodata may change during relaxation, so we
> start
> # from data in that case.
> -OTHER_END_SYMBOLS="${CREATE_SHLIB-__BSS_END__ = .;
> +SDATA_START_SYMBOLS="${CREATE_SHLIB-__SDATA_BEGIN__ = .;}
> + *(.srodata.cst16) *(.srodata.cst8) *(.srodata.cst4) *(.srodata.cst2)
> *(.srodata .srodata.*)
> __global_pointer$ = MIN(__SDATA_BEGIN__ + 0x800,
> MAX(__DATA_BEGIN__ + 0x800, __BSS_END__ -
> 0x800));}"
> +
> +INITIAL_READONLY_SECTIONS=".interp : { *(.interp) }
> ${CREATE_PIE-${INITIAL_READONLY_SECTIONS}}"
>
> +INITIAL_READONLY_SECTIONS="${RELOCATING+${CREATE_SHLIB-${INITIAL_READONLY_SECTIONS}}}"
> +
> +OTHER_END_SYMBOLS="${CREATE_SHLIB-__BSS_END__ = .;"
>
Just a minor case and not sure if it is right - If we don't have any sdata,
then the gp might be missing since it belongs to sdata? So the gp value
will be regarded as zero internally, and it's just like we disable the gp
relaxation when there is no sdata, but it can be enabled before this change.
Thanks
Nelson
More information about the Binutils
mailing list