Skip to content

Instantly share code, notes, and snippets.

@master-q
Created May 27, 2019 10:12
Show Gist options
  • Save master-q/b8167531a5a0679b9a830ed12a75619f to your computer and use it in GitHub Desktop.
Save master-q/b8167531a5a0679b9a830ed12a75619f to your computer and use it in GitHub Desktop.
How to inject ATS's DWARF debug info
$ gcc -g -I /home/kiwamu/src/ATS-Postiats/ccomp/runtime/ -I /home/kiwamu/src/ATS-Postiats/ main_dats.c
$ gdb a.out
(gdb) b main.dats:atspre_g0int_add_int
Breakpoint 1 at 0x120a: file /home/kiwamu/src/ATS-Postiats/prelude/CATS/integer.cats, line 157.
(gdb) run
Starting program: /home/kiwamu/src/idiomaticca/regress/noinc/arithmetic_op/a.out
Breakpoint 1, atspre_g0int_add_int (x1=1, x2=2) at /home/kiwamu/src/ATS-Postiats/prelude/CATS/integer.cats:157
157 (atstype_int x1, atstype_int x2) { return (x1 + x2) ; }
(gdb) bt
#0 atspre_g0int_add_int (x1=1, x2=2) at /home/kiwamu/src/ATS-Postiats/prelude/CATS/integer.cats:157
#1 0x000055555555529c in mainats_1_void () at main.dats:4
#2 0x0000555555555635 in main (argc=1, argv=0x7fffffffd5d8, envp=0x7fffffffd5e8) at main.dats:3
(gdb) l
152 (atstype_int x) { return (x / 2) ; }
153 // end of [atspre_g0int_half_int]
154 ATSinline()
155 atstype_int
156 atspre_g0int_add_int
157 (atstype_int x1, atstype_int x2) { return (x1 + x2) ; }
158 // end of [atspre_g0int_add_int]
159 ATSinline()
160 atstype_int
161 atspre_g0int_sub_int
(gdb) up
#1 0x000055555555529c in mainats_1_void () at main.dats:4
4 1 + 2 - 3 * 4 / 4
(gdb) l
1 #include "share/atspre_staload.hats"
2
3 implement main () =
4 1 + 2 - 3 * 4 / 4
5
#include "share/atspre_staload.hats"
implement main () =
1 + 2 - 3 * 4 / 4
/*
**
** The C code is generated by [ATS/Postiats-0-4-0]
** The starting compilation time is: 2019-5-27: 18h:18m
**
*/
/*
** include runtime header files
*/
#ifndef _ATS_CCOMP_HEADER_NONE_
#include "pats_ccomp_config.h"
#include "pats_ccomp_basics.h"
#include "pats_ccomp_typedefs.h"
#include "pats_ccomp_instrset.h"
#include "pats_ccomp_memalloc.h"
#ifndef _ATS_CCOMP_EXCEPTION_NONE_
#include "pats_ccomp_memalloca.h"
#include "pats_ccomp_exception.h"
#endif // end of [_ATS_CCOMP_EXCEPTION_NONE_]
#endif /* _ATS_CCOMP_HEADER_NONE_ */
/*
** include prelude cats files
*/
#ifndef _ATS_CCOMP_PRELUDE_NONE_
//
#include "prelude/CATS/basics.cats"
#include "prelude/CATS/integer.cats"
#include "prelude/CATS/pointer.cats"
#include "prelude/CATS/integer_long.cats"
#include "prelude/CATS/integer_size.cats"
#include "prelude/CATS/integer_short.cats"
#include "prelude/CATS/bool.cats"
#include "prelude/CATS/char.cats"
#include "prelude/CATS/float.cats"
#include "prelude/CATS/integer_ptr.cats"
#include "prelude/CATS/integer_fixed.cats"
#include "prelude/CATS/memory.cats"
#include "prelude/CATS/string.cats"
#include "prelude/CATS/strptr.cats"
//
#include "prelude/CATS/fprintf.cats"
//
#include "prelude/CATS/filebas.cats"
//
#include "prelude/CATS/list.cats"
#include "prelude/CATS/option.cats"
#include "prelude/CATS/array.cats"
#include "prelude/CATS/arrayptr.cats"
#include "prelude/CATS/arrayref.cats"
#include "prelude/CATS/matrix.cats"
#include "prelude/CATS/matrixptr.cats"
//
#endif /* _ATS_CCOMP_PRELUDE_NONE_ */
/*
** for user-supplied prelude
*/
#ifdef _ATS_CCOMP_PRELUDE_USER_
//
#include _ATS_CCOMP_PRELUDE_USER_
//
#endif /* _ATS_CCOMP_PRELUDE_USER_ */
/*
** for user2-supplied prelude
*/
#ifdef _ATS_CCOMP_PRELUDE_USER2_
//
#include _ATS_CCOMP_PRELUDE_USER2_
//
#endif /* _ATS_CCOMP_PRELUDE_USER2_ */
/*
staload-prologues(beg)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/basics.dats: 1636(line=50, offs=1) -- 1675(line=50, offs=40)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/integer.dats: 1596(line=49, offs=1) -- 1635(line=49, offs=40)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/pointer.dats: 1533(line=44, offs=1) -- 1572(line=44, offs=40)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/integer_long.dats: 1602(line=49, offs=1) -- 1641(line=49, offs=40)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/integer_size.dats: 1597(line=49, offs=1) -- 1636(line=49, offs=40)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/integer_short.dats: 1603(line=49, offs=1) -- 1642(line=49, offs=40)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/char.dats: 1610(line=48, offs=1) -- 1649(line=48, offs=40)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/float.dats: 1636(line=50, offs=1) -- 1675(line=50, offs=40)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/string.dats: 1631(line=50, offs=1) -- 1670(line=50, offs=40)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/strptr.dats: 1629(line=50, offs=1) -- 1668(line=50, offs=40)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/strptr.dats: 1691(line=54, offs=1) -- 1738(line=54, offs=48)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/integer.dats: 1596(line=49, offs=1) -- 1635(line=49, offs=40)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/integer_ptr.dats: 1601(line=49, offs=1) -- 1640(line=49, offs=40)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/integer_fixed.dats: 1603(line=49, offs=1) -- 1642(line=49, offs=40)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/memory.dats: 1410(line=38, offs=1) -- 1449(line=39, offs=32)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/filebas.dats: 1607(line=49, offs=1) -- 1646(line=50, offs=32)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/filebas.dats: 1669(line=54, offs=1) -- 1715(line=55, offs=39)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/integer.dats: 1596(line=49, offs=1) -- 1635(line=49, offs=40)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/filebas.dats: 1738(line=59, offs=1) -- 1783(line=60, offs=38)
*/
/*
/home/kiwamu/src/ATS-Postiats/libats/libc/SATS/stdio.sats: 1390(line=36, offs=1) -- 1437(line=39, offs=3)
*/
#include \
"libats/libc/CATS/stdio.cats"
/*
/home/kiwamu/src/ATS-Postiats/libats/libc/SATS/stdio.sats: 1950(line=69, offs=1) -- 1999(line=71, offs=34)
*/
/*
/home/kiwamu/src/ATS-Postiats/libats/libc/SATS/sys/types.sats: 1390(line=36, offs=1) -- 1441(line=39, offs=3)
*/
#include \
"libats/libc/CATS/sys/types.cats"
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/filebas.dats: 1865(line=66, offs=1) -- 1912(line=66, offs=48)
*/
/*
/home/kiwamu/src/ATS-Postiats/libats/libc/SATS/sys/stat.sats: 1390(line=36, offs=1) -- 1440(line=39, offs=3)
*/
#include \
"libats/libc/CATS/sys/stat.cats"
/*
/home/kiwamu/src/ATS-Postiats/libats/libc/SATS/sys/stat.sats: 1756(line=58, offs=1) -- 1805(line=60, offs=34)
*/
/*
/home/kiwamu/src/ATS-Postiats/libats/libc/SATS/sys/types.sats: 1390(line=36, offs=1) -- 1441(line=39, offs=3)
*/
#include \
"libats/libc/CATS/sys/types.cats"
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/filebas.dats: 15937(line=927, offs=1) -- 15974(line=928, offs=30)
*/
/*
/home/kiwamu/src/ATS-Postiats/libats/libc/SATS/stdio.sats: 1390(line=36, offs=1) -- 1437(line=39, offs=3)
*/
#include \
"libats/libc/CATS/stdio.cats"
/*
/home/kiwamu/src/ATS-Postiats/libats/libc/SATS/stdio.sats: 1950(line=69, offs=1) -- 1999(line=71, offs=34)
*/
/*
/home/kiwamu/src/ATS-Postiats/libats/libc/SATS/sys/types.sats: 1390(line=36, offs=1) -- 1441(line=39, offs=3)
*/
#include \
"libats/libc/CATS/sys/types.cats"
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/list.dats: 1529(line=44, offs=1) -- 1568(line=45, offs=32)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/list.dats: 1569(line=46, offs=1) -- 1615(line=47, offs=39)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/unsafe.dats: 1532(line=44, offs=1) -- 1566(line=44, offs=35)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/list_vt.dats: 1538(line=44, offs=1) -- 1577(line=45, offs=32)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/list_vt.dats: 1578(line=46, offs=1) -- 1624(line=47, offs=39)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/unsafe.dats: 1532(line=44, offs=1) -- 1566(line=44, offs=35)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/SHARE/list_vt_mergesort.dats: 1546(line=44, offs=1) -- 1585(line=44, offs=40)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/SHARE/list_vt_quicksort.dats: 1546(line=44, offs=1) -- 1585(line=44, offs=40)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/array.dats: 1528(line=44, offs=1) -- 1567(line=45, offs=32)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/SHARE/array_bsearch.dats: 1531(line=44, offs=1) -- 1570(line=44, offs=40)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/SHARE/array_quicksort.dats: 1531(line=44, offs=1) -- 1570(line=44, offs=40)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/arrayptr.dats: 1532(line=44, offs=1) -- 1571(line=44, offs=40)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/arrayref.dats: 1532(line=44, offs=1) -- 1571(line=44, offs=40)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/matrix.dats: 1535(line=44, offs=1) -- 1574(line=44, offs=40)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/matrixptr.dats: 1538(line=44, offs=1) -- 1577(line=44, offs=40)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/matrixref.dats: 1538(line=44, offs=1) -- 1577(line=44, offs=40)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/stream.dats: 1523(line=44, offs=1) -- 1562(line=44, offs=40)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/stream_vt.dats: 1523(line=44, offs=1) -- 1562(line=44, offs=40)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/tostring.dats: 1528(line=44, offs=1) -- 1567(line=45, offs=32)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/unsafe.dats: 1532(line=44, offs=1) -- 1566(line=44, offs=35)
*/
/*
/home/kiwamu/src/ATS-Postiats/prelude/DATS/checkast.dats: 1531(line=44, offs=1) -- 1570(line=45, offs=32)
*/
/*
staload-prologues(end)
*/
/*
typedefs-for-tyrecs-and-tysums(beg)
*/
/*
typedefs-for-tyrecs-and-tysums(end)
*/
/*
dynconlst-declaration(beg)
*/
/*
dynconlst-declaration(end)
*/
/*
dyncstlst-declaration(beg)
*/
ATSdyncst_mac(atspre_g1int_sub_int)
ATSdyncst_mac(atspre_g1int_add_int)
ATSdyncst_mac(atspre_g1int_div_int)
ATSdyncst_mac(atspre_g1int_mul_int)
/*
dyncstlst-declaration(end)
*/
/*
dynvalist-implementation(beg)
*/
/*
dynvalist-implementation(end)
*/
/*
exnconlst-declaration(beg)
*/
#ifndef _ATS_CCOMP_EXCEPTION_NONE_
ATSextern()
atsvoid_t0ype
the_atsexncon_initize
(
atstype_exnconptr d2c, atstype_string exnmsg
) ;
#endif // end of [_ATS_CCOMP_EXCEPTION_NONE_]
/*
exnconlst-declaration(end)
*/
/*
extypelst-declaration(beg)
*/
/*
extypelst-declaration(end)
*/
/*
assumelst-declaration(beg)
*/
#ifndef _ATS_CCOMP_ASSUME_CHECK_NONE_
#endif // #ifndef(_ATS_CCOMP_ASSUME_CHECK_NONE_)
/*
assumelst-declaration(end)
*/
#if(0)
ATSextern()
atstkind_t0ype(atstype_int)
mainats_1_void() ;
#endif // end of [QUALIFIED]
/*
/home/kiwamu/src/idiomaticca/regress/noinc/arithmetic_op/main.dats: 54(line=3, offs=16) -- 78(line=4, offs=20)
*/
/*
local:
global: mainats_1_void$0$0(level=0)
local:
global:
*/
ATSextern()
atstkind_t0ype(atstype_int)
mainats_1_void()
{
/* tmpvardeclst(beg) */
ATStmpdec(tmpret0, atstkind_t0ype(atstype_int)) ;
ATStmpdec(tmp1, atstkind_t0ype(atstype_int)) ;
ATStmpdec(tmp2, atstkind_t0ype(atstype_int)) ;
ATStmpdec(tmp3, atstkind_t0ype(atstype_int)) ;
/* tmpvardeclst(end) */
#line 4 "main.dats"
ATSfunbody_beg()
/*
emit_instr: loc0 = /home/kiwamu/src/idiomaticca/regress/noinc/arithmetic_op/main.dats: 49(line=3, offs=11) -- 78(line=4, offs=20)
*/
#line 4 "main.dats"
ATSINSflab(__patsflab_main_1_void):
/*
emit_instr: loc0 = /home/kiwamu/src/idiomaticca/regress/noinc/arithmetic_op/main.dats: 61(line=4, offs=3) -- 66(line=4, offs=8)
*/
#line 4 "main.dats"
ATSINSmove(tmp1, atspre_g1int_add_int(ATSPMVi0nt(1), ATSPMVi0nt(2))) ;
/*
emit_instr: loc0 = /home/kiwamu/src/idiomaticca/regress/noinc/arithmetic_op/main.dats: 69(line=4, offs=11) -- 74(line=4, offs=16)
*/
#line 4 "main.dats"
ATSINSmove(tmp3, atspre_g1int_mul_int(ATSPMVi0nt(3), ATSPMVi0nt(4))) ;
/*
emit_instr: loc0 = /home/kiwamu/src/idiomaticca/regress/noinc/arithmetic_op/main.dats: 69(line=4, offs=11) -- 78(line=4, offs=20)
*/
#line 4 "main.dats"
ATSINSmove(tmp2, atspre_g1int_div_int(tmp3, ATSPMVi0nt(4))) ;
/*
emit_instr: loc0 = /home/kiwamu/src/idiomaticca/regress/noinc/arithmetic_op/main.dats: 61(line=4, offs=3) -- 78(line=4, offs=20)
*/
#line 4 "main.dats"
ATSINSmove(tmpret0, atspre_g1int_sub_int(tmp1, tmp2)) ;
#line 4 "main.dats"
ATSfunbody_end()
#line 4 "main.dats"
ATSreturn(tmpret0) ;
#line 368 "main_dats.c"
} /* end of [mainats_1_void] */
/*
** for initialization(dynloading)
*/
ATSdynloadflag_minit(_057_home_057_kiwamu_057_src_057_idiomaticca_057_regress_057_noinc_057_arithmetic_op_057_main_056_dats__dynloadflag) ;
ATSextern()
atsvoid_t0ype
_057_home_057_kiwamu_057_src_057_idiomaticca_057_regress_057_noinc_057_arithmetic_op_057_main_056_dats__dynload()
{
ATSfunbody_beg()
ATSdynload(/*void*/)
ATSdynloadflag_sta(
_057_home_057_kiwamu_057_src_057_idiomaticca_057_regress_057_noinc_057_arithmetic_op_057_main_056_dats__dynloadflag
) ;
ATSif(
ATSCKiseqz(
_057_home_057_kiwamu_057_src_057_idiomaticca_057_regress_057_noinc_057_arithmetic_op_057_main_056_dats__dynloadflag
)
) ATSthen() {
ATSdynloadset(_057_home_057_kiwamu_057_src_057_idiomaticca_057_regress_057_noinc_057_arithmetic_op_057_main_056_dats__dynloadflag) ;
/*
dynexnlst-initize(beg)
*/
/*
dynexnlst-initize(end)
*/
} /* ATSendif */
ATSfunbody_end()
ATSreturn_void(tmpret_void) ;
} /* end of [*_dynload] */
/*
** the ATS runtime
*/
#ifndef _ATS_CCOMP_RUNTIME_NONE_
#include "pats_ccomp_runtime.c"
#include "pats_ccomp_runtime_memalloc.c"
#ifndef _ATS_CCOMP_EXCEPTION_NONE_
#include "pats_ccomp_runtime2_dats.c"
#ifndef _ATS_CCOMP_RUNTIME_TRYWITH_NONE_
#include "pats_ccomp_runtime_trywith.c"
#endif /* _ATS_CCOMP_RUNTIME_TRYWITH_NONE_ */
#endif // end of [_ATS_CCOMP_EXCEPTION_NONE_]
#endif /* _ATS_CCOMP_RUNTIME_NONE_ */
/*
** the [main] implementation
*/
int
main
(
int argc, char **argv, char **envp
) {
int err = 0 ;
#line 3 "main.dats"
_057_home_057_kiwamu_057_src_057_idiomaticca_057_regress_057_noinc_057_arithmetic_op_057_main_056_dats__dynload() ;
#line 3 "main.dats"
ATSmainats_1_void(err) ;
#line 3 "main.dats"
return (err) ;
#line 430 "main_dats.c"
} /* end of [main] */
/* ****** ****** */
/* end-of-compilation-unit */
@master-q
Copy link
Author

It has already implemented on ATS2 with --gline option:

$ cp /home/kiwamu/src/ATS-Postiats/doc/BOOK/INT2PROGINATS/CODE/CHAP_DATAVTYPE/rbtree.dats ./
$ patsopt --gline -o rbtree_dats.c -d rbtree.dats
$ grep "^#line" rbtree_dats.c | wc -l
1924
$ gcc -g -DATS_MEMALLOC_LIBC -I /home/kiwamu/src/ATS-Postiats/ccomp/runtime/ -I /home/kiwamu/src/ATS-Postiats/ rbtree_dats.c
$ gdb a.out
(gdb) b 235
Breakpoint 1 at 0x15ee: /home/kiwamu/tmp/ats/rbtree/rbtree.dats:235. (10 locations)
(gdb) run
Starting program: /home/kiwamu/tmp/ats/rbtree/a.out 

Breakpoint 1, _057_home_057_kiwamu_057_tmp_057_ats_057_rbtree_057_rbtree_056_dats__rbtree_insert__2__1 (arg0=0x0, arg1=0x7fffffffd4e4, arg2=0x0) at /home/kiwamu/tmp/ats/rbtree/rbtree.dats:235
235     val t = ins (t, x0)
(gdb) bt
#0  _057_home_057_kiwamu_057_tmp_057_ats_057_rbtree_057_rbtree_056_dats__rbtree_insert__2__1 (arg0=0x0, arg1=0x7fffffffd4e4, arg2=0x0) at /home/kiwamu/tmp/ats/rbtree/rbtree.dats:235
#1  0x000055555555540b in mainats_0_void () at /home/kiwamu/tmp/ats/rbtree/rbtree.dats:311
#2  0x000055555555940b in main (argc=1, argv=0x7fffffffd668, envp=0x7fffffffd678) at /home/kiwamu/tmp/ats/rbtree/rbtree.dats:322
(gdb) l
230           end else (fold@{a}{..}{..}{0} (t); t)
231         end // end of [cons]
232       | ~nil () => cons{a}{..}{..}{0}(R, nil, x0, nil)
233     ) (* end of [ins] *)
234     //
235     val t = ins (t, x0)
236     //
237     in
238     //
239     case+ t of @cons(c as R, _, _, _) => (c := B; fold@ (t); t) | _ =>> t

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment