Skip to content

Commit

Permalink
[OpenMP] [Flang] Fix Issue llvm#76121
Browse files Browse the repository at this point in the history
Root cause: Segmentation fault is caused by null pointer dereference inside the __kmpc_fork_call_if function at https://github.com/llvm/llvm-project/blob/main/openmp/runtime/src/z_Linux_asm.S#L1186 . __kmpc_fork_call_if is missing case to handle argc=0 .

Fix: Added a check inside the __kmp_invoke_microtask function to handle the case when argc is 0.
  • Loading branch information
chandankds committed Feb 19, 2024
1 parent dd7386d commit 9b1ea42
Showing 1 changed file with 4 additions and 0 deletions.
4 changes: 4 additions & 0 deletions openmp/runtime/src/z_Linux_asm.S
Original file line number Diff line number Diff line change
Expand Up @@ -1150,6 +1150,9 @@ KMP_LABEL(kmp_invoke_pass_parms): // put 1st - 6th parms to pkfn in registers.
movq %rdi, %rbx // pkfn -> %rbx
leaq __gtid(%rbp), %rdi // &gtid -> %rdi (store 1st parm to pkfn)
leaq __tid(%rbp), %rsi // &tid -> %rsi (store 2nd parm to pkfn)
// Check if argc is 0
cmpq $0, %rax
je KMP_LABEL(kmp_no_args) // Jump ahead

movq %r8, %r11 // p_argv -> %r11

Expand Down Expand Up @@ -1195,6 +1198,7 @@ KMP_LABEL(kmp_1_exit):
cmovnsq (%r11), %rdx // p_argv[0] -> %rdx (store 3rd parm to pkfn)
#endif // KMP_MIC

KMP_LABEL(kmp_no_args):
call *%rbx // call (*pkfn)();
movq $1, %rax // move 1 into return register;

Expand Down

0 comments on commit 9b1ea42

Please sign in to comment.