Issue |
117434
|
Summary |
Suggestions for implementing flang's built-in functions "backtrace"
|
Labels |
|
Assignees |
|
Reporter |
dty2
|
I notice that gfortran's have a intrinsic function "abort" that can abort and print a backtrace when called.
flang also has it, but it only aborts without printing a backtrace.
So, I modified it for flang, and my implemention is different from gfortran's. So I would like to get some suggestions...
the source is
```
! L2 Norm of a vector
function vector_norm(n,vec) result(norm)
implicit none
integer, intent(in) :: n
real, intent(in) :: vec(n)
real :: norm
norm = sqrt(sum(vec**2))
call backtrace
end function vector_norm
! Print matrix A to screen
subroutine print_matrix(n,m,A)
implicit none
integer, intent(in) :: n
integer, intent(in) :: m
integer, intent(in) :: A(n, m)
real :: v(9)
real :: vector_norm
integer :: i
v(:) = 9
do i = 1, n
print *, A(i, 1:m)
end do
print *, 'Vector norm = ', vector_norm(9,v)
end subroutine print_matrix
program test_backtrace
integer :: k(10, 10)
k = 9
call print_matrix(2, 3, k)
end program test_backtrace
```
And, gfortran's backtrace print like:
``` bash
#0 0x650cc12924a1 in vector_norm_
at /home/hunter/plct/fortran/test.f90:10
#1 0x650cc12923ed in print_matrix_
at /home/hunter/plct/fortran/test.f90:32
#2 0x650cc1292527 in test_backtrace
at /home/hunter/plct/fortran/test.f90:40
#3 0x650cc1292577 in main
at /home/hunter/plct/fortran/test.f90:41
```
And my implemention print like:
```
./test(_FortranABacktrace+0x32) [0x5b30328e1312]
./test(vector_norm_+0x129) [0x5b30328b38f9]
./test(print_matrix_+0x252) [0x5b30328b3b62]
./test(_QQmain+0x105) [0x5b30328b3c95]
./test(main+0x12) [0x5b30328b3cb2]
/usr/lib/libc.so.6(+0x25e08) [0x786915b75e08]
/usr/lib/libc.so.6(__libc_start_main+0x8c) [0x786915b75ecc]
./test(_start+0x25) [0x5b30328b36f5]
```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs