Git Product home page Git Product logo

Comments (1)

lmb avatar lmb commented on May 29, 2024

It seems like the compiler is eliminating the line

flags |= (__u64) sample_size << 32;

for whatever reason:

$ llvm-objdump-9 -S elfs/send.o 

elfs/send.o:	file format ELF64-BPF


Disassembly of section xdp/send:

0000000000000000 xdp_send_prog:
       0:	61 12 00 00 00 00 00 00	r2 = *(u32 *)(r1 + 0)
       1:	61 13 04 00 00 00 00 00	r3 = *(u32 *)(r1 + 4)
       2:	3d 32 0c 00 00 00 00 00	if r2 >= r3 goto +12 <LBB0_2>
       3:	b7 04 00 00 ad de 00 00	r4 = 57005
       4:	6b 4a f8 ff 00 00 00 00	*(u16 *)(r10 - 8) = r4
       5:	1f 23 00 00 00 00 00 00	r3 -= r2
       6:	6b 3a fa ff 00 00 00 00	*(u16 *)(r10 - 6) = r3
       7:	bf a4 00 00 00 00 00 00	r4 = r10
       8:	07 04 00 00 f8 ff ff ff	r4 += -8
       9:	18 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00	r2 = 0 ll
      11:	18 03 00 00 ff ff ff ff 00 00 00 00 00 00 00 00	r3 = 4294967295 ll
      13:	b7 05 00 00 04 00 00 00	r5 = 4
      14:	85 00 00 00 19 00 00 00	call 25

0000000000000078 LBB0_2:
      15:	b7 00 00 00 02 00 00 00	r0 = 2
      16:	95 00 00 00 00 00 00 00	exit

The line

      11:	18 03 00 00 ff ff ff ff 00 00 00 00 00 00 00 00	r3 = 4294967295 ll

means that the third argument (r3) is always set to 4294967295 which is just the decimal representation of 0xffffffff aka BPF_F_CURRENT_CPU. My suspicion is that there is some weirdness because sample_size is 16 bits wide, but then shifted left by 32 bits which always produces zero.

Try something like the following:

flags |= ((__u64)sample_size) << 32;

Also, there is another bug in your code: if sample_size is > SAMPLE_SIZE you'll get an EOF.

from ebpf.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.