On 2026-08-25 05:24, Uwe Kleine-König wrote:
> Hello,
>
> On Mon, Aug 24, 2026 at 06:04:03PM -0300, Mauricio Faria de Oliveira wrote:
>> On 2026-08-23 19:12, Uwe Kleine-König wrote:
>> > On Sat, Aug 22, 2026 at 01:57:24PM -0300, Mauricio Faria de Oliveira wrote:
>> >> On 2026-08-22 10:41, Uwe Kleine-König wrote:
>> >> > On Wed, Aug 19, 2026 at 03:16:16PM -0300, Mauricio Faria de Oliveira
>> >> > wrote:
>> >> >> The MODULE_SYSCTL_TABLE macro emits a struct module_sysctl_table
>> >> >> variable
>> >> >> with pointers to a sysctl table's path and entries, and table/entry
>> >> >> sizes.
>> >> >
>> >> > That new struct doesn't seem to contain any pointer?
>> >>
>> >> The struct module_sysctl_table fields .path and .table are pointers,
>> >> although with kernel_ulong_t type so that the same 32/64-bit size is
>> >> used in file2alias.c based on KERNEL_ELFCLASS (and not on the host,
>> >> which might differ with CROSS_COMPILE).
>> >
>> > Cross compilation isn't an issue for the already existing device id
>> > structures; many of them also contain pointers.
>> > (While modpost doesn't use the pointers, the size of the structures must
>> > be known to correctly interpret the arrays.)
>>
>> Indeed. I missed some device_id structures with pointers, and that
>> devicetable-offsets.c is cross-compiled to generate
>> devicetable-offsets.h for file2alias.c to use offsets and sizes of the
>> target architecture.
>>
>> I'll change .path and .table to pointers in the next version.
>
> I *think* the existing device-id structs use char[] for strings that are
> relevant for modpost. I look forward to you finding out if there is
> still a justification for that :-D
AFAICT, an array is simpler to read in file2alias as it is stored
directly in the symbol:
For example:
@ include/linux/device-id/of.h
struct of_device_id {
...
char compatible[128];
...
@ drivers/net/ethernet/korina.c
static const struct of_device_id korina_match[] = {
{
.compatible = "idt,3243x-emac",
...
MODULE_DEVICE_TABLE(of, korina_match);
which builds
$ objdump -t drivers/net/ethernet/korina.o | grep __mod_device_table
0000000000001020 l O .rodata 0000000000000190
__mod_device_table__kmod_korina__of__korina_match
$ objdump -s -j .rodata --start-address=0x1020
--stop-address=$((0x1020+0x190)) drivers/net/ethernet/korina.o
...
1020 00000000 00000000 00000000 00000000 ................
1030 00000000 00000000 00000000 00000000 ................
1040 00000000 00000000 00000000 00000000 ................
1050 00000000 00000000 00000000 00000000 ................
1060 6964742c 33323433 782d656d 61630000 idt,3243x-emac..
1070 00000000 00000000 00000000 00000000 ................
...
@ scripts/mod/file2lias.c
#define DEF_FIELD_ADDR(m, devid, f) \
typeof(((struct devid *)0)->f) *f = ((m) + OFF_##devid##_##f)
static void do_of_entry(struct module *mod, void *symval)
{
...
DEF_FIELD_ADDR(symval, of_device_id, compatible);
...
void handle_moddevtable(struct module *mod, struct elf_info *info,
Elf_Sym *sym, const char *symname)
{
void *symval;
...
symval = sym_get_data(info, sym);
On the other hand, a pointer is stored indirectly through a relocation
in the symbol, which is not as simple to read (i.e., 1. find the
relocation section for the symbol's section; 2. find the relocation in
that section by matching relocation offsets with an offset in the symbol
+ symbol address; 3. finally read the relocation's target).
>> > I would be great if your series didn't introduce a new obstacle for
>> > [CHERI].
>>
>> Absolutely. I'll be happy to adjust the series and testing for that.
>>
>> Could you please confirm one should just follow [1], which uses [2] to
>> build the LLVM toolchain, and use it to build the kernel [3]?
>>
>> [1] https://github.com/cheri-linux#building-and-running
>> [2] https://github.com/cheri-linux/buildroot
>> [3] https://github.com/CHERI-Alliance/linux/tree/codasip-cheri-riscv-7.1
>
> I used
> https://github.com/CHERI-Alliance/meta-cheri/tree/codasip-scarthgap and
> didn't care about toolchain and rootfs. It also has qemu integrated, so
> you can actually test it.
I'll take a look; thanks!
cheers,
>
> Best regards
> Uwe
--
Mauricio