diff options
author | Martin Liska <mliska@suse.cz> | 2018-10-09 10:34:52 +0200 |
---|---|---|
committer | Martin Liska <marxin@gcc.gnu.org> | 2018-10-09 08:34:52 +0000 |
commit | 2c73950deda1f9e594ce1a397e911b38bccb9b52 (patch) | |
tree | 4c400d5a0fb24f258d13e7c90d176dc402ad9ba9 /gcc/asan.c | |
parent | 9d44426f78d05a7c6bbf8327804c69e51e8de39b (diff) | |
download | gcc-2c73950deda1f9e594ce1a397e911b38bccb9b52.zip gcc-2c73950deda1f9e594ce1a397e911b38bccb9b52.tar.gz gcc-2c73950deda1f9e594ce1a397e911b38bccb9b52.tar.bz2 |
ASAN: emit line information of stack variables.
2018-10-09 Martin Liska <mliska@suse.cz>
* asan.c (asan_emit_stack_protection): If a stack variable
is located in a same file as current function, then emit
line info into variable definition string.
2018-10-09 Martin Liska <mliska@suse.cz>
* c-c++-common/asan/pr64820.c: Add line number to scanned
pattern.
* c-c++-common/asan/use-after-return-1.c: Likewise.
* g++.dg/asan/function-argument-1.C (main): Likewise.
* g++.dg/asan/function-argument-2.C (main): Likewise.
* g++.dg/asan/function-argument-3.C (main): Likewise.
* g++.dg/asan/use-after-scope-1.C (main): Likewise.
* g++.dg/asan/use-after-scope-2.C (main): Likewise.
* g++.dg/asan/use-after-scope-types-1.C (main): Likewise.
* g++.dg/asan/use-after-scope-types-2.C (main): Likewise.
* g++.dg/asan/use-after-scope-types-3.C (main): Likewise.
* g++.dg/asan/use-after-scope-types-4.C (main): Likewise.
* g++.dg/asan/use-after-scope-types-5.C (main): Likewise.
* gcc.dg/asan/pr78541.c (main): Likewise.
* gcc.dg/asan/use-after-scope-1.c (main): Likewise.
* gcc.dg/asan/use-after-scope-10.c (main): Likewise.
* gcc.dg/asan/use-after-scope-2.c (main): Likewise.
* gcc.dg/asan/use-after-scope-3.c (main): Likewise.
* gcc.dg/asan/use-after-scope-5.c (main): Likewise.
* gcc.dg/asan/use-after-scope-9.c (main): Likewise.
From-SVN: r264951
Diffstat (limited to 'gcc/asan.c')
-rw-r--r-- | gcc/asan.c | 22 |
1 files changed, 20 insertions, 2 deletions
@@ -1269,6 +1269,9 @@ asan_emit_stack_protection (rtx base, rtx pbase, unsigned int alignb, if (shadow_ptr_types[0] == NULL_TREE) asan_init_shadow_ptr_types (); + expanded_location cfun_xloc + = expand_location (DECL_SOURCE_LOCATION (current_function_decl)); + /* First of all, prepare the description string. */ pretty_printer asan_pp; @@ -1281,15 +1284,30 @@ asan_emit_stack_protection (rtx base, rtx pbase, unsigned int alignb, pp_space (&asan_pp); pp_wide_integer (&asan_pp, offsets[l - 1] - offsets[l]); pp_space (&asan_pp); + + expanded_location xloc + = expand_location (DECL_SOURCE_LOCATION (decl)); + char location[32]; + + if (xloc.file == cfun_xloc.file) + sprintf (location, ":%d", xloc.line); + else + location[0] = '\0'; + if (DECL_P (decl) && DECL_NAME (decl)) { - pp_decimal_int (&asan_pp, IDENTIFIER_LENGTH (DECL_NAME (decl))); + unsigned idlen + = IDENTIFIER_LENGTH (DECL_NAME (decl)) + strlen (location); + pp_decimal_int (&asan_pp, idlen); pp_space (&asan_pp); pp_tree_identifier (&asan_pp, DECL_NAME (decl)); + pp_string (&asan_pp, location); } else pp_string (&asan_pp, "9 <unknown>"); - pp_space (&asan_pp); + + if (l > 2) + pp_space (&asan_pp); } str_cst = asan_pp_string (&asan_pp); |