Re: can't get BTF: type .rodata.cst32: not found

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Jan 27, 2022 at 5:50 PM Yonghong Song <yhs@xxxxxx> wrote:
>
>
>
> On 1/25/22 12:32 PM, Vincent Li wrote:
> > On Tue, Jan 25, 2022 at 9:52 AM Vincent Li <vincent.mc.li@xxxxxxxxx> wrote:
> >>
> >> this is macro I suspected in my implementation that could cause issue with BTF
> >>
> >> #define ENABLE_VTEP 1
> >> #define VTEP_ENDPOINT (__u32[]){0xec48a90a, 0xee48a90a, 0x1f48a90a,
> >> 0x2048a90a, }
> >> #define VTEP_MAC (__u64[]){0x562e984c3682, 0x582e984c3682,
> >> 0x5eaaed93fdf2, 0x5faaed93fdf2, }
> >> #define VTEP_NUMS 4
> >>
> >> On Tue, Jan 25, 2022 at 9:38 AM Vincent Li <vincent.mc.li@xxxxxxxxx> wrote:
> >>>
> >>> Hi
> >>>
> >>> While developing Cilium VTEP integration feature
> >>> https://github.com/cilium/cilium/pull/17370, I found a strange issue
> >>> that seems related to BTF and probably caused by my specific
> >>> implementation, the issue is described in
> >>> https://github.com/cilium/cilium/issues/18616, I don't know much about
> >>> BTF and not sure if my implementation is seriously flawed or just some
> >>> implementation bug or maybe not compatible with BTF. Strangely, the
> >>> issue appears related to number of VTEPs I use, no problem with 1 or 2
> >>> VTEP, 3, 4 VTEPs will have problem with BTF, any guidance from BTF
> >>> experts  are appreciated :-).
> >>>
> >>> Thanks
> >>>
> >>> Vincent
> >
> > Sorry for previous top post
> >
> > it looks the compiler compiles the cilium bpf_lxc.c to bpf_lxc.o
> > differently and added " [21] .rodata.cst32     PROGBITS
> > 0000000000000000  00011e68" when  following macro exceeded 2 members
> >
> > #define VTEP_ENDPOINT (__u32[]){0xec48a90a, 0xee48a90a, 0x1f48a90a,
> > 0x2048a90a, }
> >
> > no ".rodata.cst32" compiled in bpf_lxc.o  when above VTEP_ENDPOINT
> > member <=2. any reason why compiler would do that?
>
> Regarding to why compiler generates .rodata.cst32, the reason is
> you have some 32-byte constants which needs to be saved somewhere.
> For example,
>
> $ cat t.c
> struct t {
>    long c[2];
>    int d[4];
> };
> struct t g;
> int test()
> {
>     struct t tmp  = {.c = {1, 2}, .d = {3, 4}};
>     g = tmp;
>     return 0;
> }
>
> $ clang -target bpf -O2 -c t.c
> $ llvm-readelf -S t.o
> ...
>    [ 4] .rodata.cst32     PROGBITS        0000000000000000 0000a8 000020
> 20  AM  0   0  8
> ...
>
> In the above code, if you change the struct size, say from 32 bytes to
> 40 bytes, the rodata.cst32 will go away.

Thanks Yonghong! I guess it is cilium/ebpf needs to recognize rodata.cst32 then

Vincent



[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux