more RELOCATABLE + errata code model issues

Alexandre Ghiti alex at ghiti.fr
Mon Sep 18 09:59:37 PDT 2023


On 18/09/2023 17:15, Palmer Dabbelt wrote:
> On Mon, 18 Sep 2023 03:36:03 PDT (-0700), Conor Dooley wrote:
>>
>> Hey Alex,
>>
>> LKP reported [1] some issues with relocatable kernels & code models.
>> You didn't touch the commit that caused the issues, so you didn't see
>> the failure report I guess, but Prabhakar is looking for some guidance
>> on what he should do to resolve the problems. Copy-pasting from his
>> mail:
>>> > All errors (new ones prefixed by >>):
>>> > > >> ld.lld: error: relocation R_RISCV_LO12_I cannot be used against
>>> > >> symbol 'riscv_cbom_block_size'; recompile with -fPIC
>>> >    >>> defined in vmlinux.a(arch/riscv/mm/cacheflush.o)
>>> >    >>> referenced by errata.c
>>> >    >>> arch/riscv/errata/andes/errata.o:(andes_errata_patch_func) 
>>> in archive vmlinux.a
>>> > I did reproduce this issue locally. The andes errata is not 
>>> compiled as medany. The config is RELOCATABLE + MEDLOW. I can see 
>>> the cacheflush.o is compiled with medany flag.
>>> I can fix the build by adding a medany flag as below:
>>> +#ifdef CONFIG_RISCV_ALTERNATIVE_EARLY
>>> +CFLAGS_errata.o := -mcmodel=medany
>>> #endif
>>>
>>> But I am not sure if this is correct approach. Any pointers on this?
>>
>> The T-Head errata have something similar, so seems like fair game to me.
>> Any thoughts?
>
> We're using medany as a cheap way to get PIC, so anything that's 
> pre-relocation will need medany.  We don't really have a good way to 
> check that, medany isn't supposed to be ABI (we're really just abusing 
> it here for PIC).  Thus none of this gets checked at build time, and I 
> won't catch any errata pre-merge because I'm in QEMU. So this is all 
> kind of fragile.
>
> So maybe there's a better way to do all that, but for now just adding 
> medany seems like the way to go.


There is the pre-mmu documentation now that gives hint about what to do 
for the very early code: 
https://elixir.bootlin.com/linux/v6.6-rc2/source/Documentation/riscv/boot.rst#L151 
but admittedly, it does not state that it would result in compilation 
errors, maybe that can be added.


>
>> Thanks,
>> Conor.
>>
>> [1] - https://lore.kernel.org/all/202309111311.8tcq3KVc-lkp@intel.com/
>
> _______________________________________________
> linux-riscv mailing list
> linux-riscv at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-riscv



More information about the linux-riscv mailing list