Skip to content

Commit 4b7ede0

Browse files
kkdwivediAlexei Starovoitov
authored andcommitted
selftests/bpf: Introduce cond_break_label
Add a new cond_break_label macro that jumps to the specified label when the cond_break termination check fires, and allows us to better handle the uncontrolled termination of the loop. Signed-off-by: Kumar Kartikeya Dwivedi <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Alexei Starovoitov <[email protected]>
1 parent dc438a9 commit 4b7ede0

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

tools/testing/selftests/bpf/bpf_experimental.h

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -368,12 +368,12 @@ l_true: \
368368
ret; \
369369
})
370370

371-
#define cond_break \
371+
#define __cond_break(expr) \
372372
({ __label__ l_break, l_continue; \
373373
asm volatile goto("may_goto %l[l_break]" \
374374
:::: l_break); \
375375
goto l_continue; \
376-
l_break: break; \
376+
l_break: expr; \
377377
l_continue:; \
378378
})
379379
#else
@@ -392,15 +392,15 @@ l_true: \
392392
ret; \
393393
})
394394

395-
#define cond_break \
395+
#define __cond_break(expr) \
396396
({ __label__ l_break, l_continue; \
397397
asm volatile goto("1:.byte 0xe5; \
398398
.byte 0; \
399399
.long ((%l[l_break] - 1b - 8) / 8) & 0xffff; \
400400
.short 0" \
401401
:::: l_break); \
402402
goto l_continue; \
403-
l_break: break; \
403+
l_break: expr; \
404404
l_continue:; \
405405
})
406406
#else
@@ -418,20 +418,23 @@ l_true: \
418418
ret; \
419419
})
420420

421-
#define cond_break \
421+
#define __cond_break(expr) \
422422
({ __label__ l_break, l_continue; \
423423
asm volatile goto("1:.byte 0xe5; \
424424
.byte 0; \
425425
.long (((%l[l_break] - 1b - 8) / 8) & 0xffff) << 16; \
426426
.short 0" \
427427
:::: l_break); \
428428
goto l_continue; \
429-
l_break: break; \
429+
l_break: expr; \
430430
l_continue:; \
431431
})
432432
#endif
433433
#endif
434434

435+
#define cond_break __cond_break(break)
436+
#define cond_break_label(label) __cond_break(goto label)
437+
435438
#ifndef bpf_nop_mov
436439
#define bpf_nop_mov(var) \
437440
asm volatile("%[reg]=%[reg]"::[reg]"r"((short)var))

0 commit comments

Comments
 (0)