On Fri, Jan 20, 2023 at 12:01:12PM +0530, Kumar Kartikeya Dwivedi wrote: > On Fri, Jan 20, 2023 at 11:50:41AM IST, Alexei Starovoitov wrote: > > On Fri, Jan 20, 2023 at 09:13:11AM +0530, Kumar Kartikeya Dwivedi wrote: > > > + > > > +SEC("?tc") > > > +__failure __msg("cannot overwrite referenced dynptr") __log_level(2) > > > +int dynptr_pruning_overwrite(struct __sk_buff *ctx) > > > +{ > > > + asm volatile ( > > > + "r9 = 0xeB9F;" > > > + "r6 = %[ringbuf] ll;" > > > + "r1 = r6;" > > > + "r2 = 8;" > > > + "r3 = 0;" > > > + "r4 = r10;" > > > + "r4 += -16;" > > > + "call %[bpf_ringbuf_reserve_dynptr];" > > > + "if r0 == 0 goto pjmp1;" > > > + "goto pjmp2;" > > > + "pjmp1:" > > > + "*(u64 *)(r10 - 16) = r9;" > > > + "pjmp2:" > > > + "r1 = r10;" > > > + "r1 += -16;" > > > + "r2 = 0;" > > > + "call %[bpf_ringbuf_discard_dynptr];" > > > > It should still work if we remove "" from every line, right? > > Would it be easier to read? > > You mean write it like this? > > asm volatile ( > "r9 = 0xeB9F; \ > r6 = %[ringbuf] ll; \ > r1 = r6; \ > r2 = 8; \ > r3 = 0; \ > r4 = r10; \ > r4 += -16; \ > call %[bpf_ringbuf_reserve_dynptr]; \ > if r0 == 0 goto pjmp1; \ > goto pjmp2; \ > pjmp1: \ > *(u64 *)(r10 - 16) = r9; \ > pjmp2: \ > r1 = r10; \ > r1 += -16; \ > r2 = 0; \ > call %[bpf_ringbuf_discard_dynptr]; " > : > : __imm(bpf_ringbuf_reserve_dynptr), > __imm(bpf_ringbuf_discard_dynptr), > __imm_addr(ringbuf) > : __clobber_all > ); > > I guess that does look a bit cleaner, if you think the same I can try converting > them. Only asking to consider different options because once we start adding tests in this form everyone will copy paste the style. In verifier/precise.c we use: .errstr = "26: (85) call bpf_probe_read_kernel#113\ last_idx 26 first_idx 22\ regs=4 stack=0 before 25\ regs=4 stack=0 before 24\ regs=4 stack=0 before 23\ regs=4 stack=0 before 22\ so the following is another option: asm volatile ( "r9 = 0xeB9F;\ r6 = %[ringbuf] ll;\ r1 = r6;\ r2 = 8;\ r3 = 0;\ r4 = r10;\ r4 += -16; My vote goes to your 2nd approach where every \ is tab-aligned to the right.