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
This commit is contained in:
parent
9d44426f78
commit
2c73950ded
@ -1,3 +1,9 @@
|
||||
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-08 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* print-rtl.c (rtx_writer::print_rtx_operand_code_i): Print column
|
||||
|
22
gcc/asan.c
22
gcc/asan.c
@ -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);
|
||||
|
||||
|
@ -1,3 +1,26 @@
|
||||
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.
|
||||
|
||||
2018-10-09 Paul Thomas <pault@gcc.gnu.org>
|
||||
|
||||
PR fortran/87151
|
||||
|
@ -28,4 +28,4 @@ int main(int argc, char **argv) {
|
||||
/* { dg-output "WRITE of size 1 at .* thread T0.*" } */
|
||||
/* { dg-output " #0.*(Func2)?.*pr64820.(c:21)?.*" } */
|
||||
/* { dg-output "is located in stack of thread T0 at offset.*" } */
|
||||
/* { dg-output "\'local\' <== Memory access at offset 32 is inside this variable" } */
|
||||
/* { dg-output "\'local\' \\(line 14\\) <== Memory access at offset 32 is inside this variable" } */
|
||||
|
@ -50,4 +50,4 @@ int main(int argc, char **argv) {
|
||||
/* { dg-output "WRITE of size 1 at .* thread T0.*" } */
|
||||
/* { dg-output " #0.*(Func2)?.*use-after-return-1.(c:31)?.*" } */
|
||||
/* { dg-output "is located in stack of thread T0 at offset.*" } */
|
||||
/* { dg-output "\'local\' <== Memory access at offset 32 is inside this variable" } */
|
||||
/* { dg-output "\'local\' \\(line 24\\) <== Memory access at offset 32 is inside this variable" } */
|
||||
|
@ -28,4 +28,4 @@ main ()
|
||||
|
||||
// { dg-output "ERROR: AddressSanitizer: stack-buffer-underflow on address.*(\n|\r\n|\r)" }
|
||||
// { dg-output "READ of size . at.*" }
|
||||
// { dg-output ".*'arg' <== Memory access at offset \[0-9\]* underflows this variable.*" }
|
||||
// { dg-output ".*'arg' \\(line 18\\) <== Memory access at offset \[0-9\]* underflows this variable.*" }
|
||||
|
@ -21,4 +21,4 @@ main ()
|
||||
|
||||
// { dg-output "ERROR: AddressSanitizer: stack-buffer-overflow on address.*(\n|\r\n|\r)" }
|
||||
// { dg-output "READ of size . at.*" }
|
||||
// { dg-output ".*'arg' <== Memory access at offset \[0-9\]* partially overflows this variable.*" }
|
||||
// { dg-output ".*'arg' \\(line 11\\) <== Memory access at offset \[0-9\]* partially overflows this variable.*" }
|
||||
|
@ -25,4 +25,4 @@ main ()
|
||||
|
||||
// { dg-output "ERROR: AddressSanitizer: stack-buffer-overflow on address.*(\n|\r\n|\r)" }
|
||||
// { dg-output "READ of size . at.*" }
|
||||
// { dg-output ".*'arg' <== Memory access at offset \[0-9\]* overflows this variable.*" }
|
||||
// { dg-output ".*'arg' \\(line 14\\) <== Memory access at offset \[0-9\]* overflows this variable.*" }
|
||||
|
@ -18,4 +18,4 @@ int main() {
|
||||
|
||||
// { dg-output "ERROR: AddressSanitizer: stack-use-after-scope on address.*(\n|\r\n|\r)" }
|
||||
// { dg-output "READ of size 4 at.*" }
|
||||
// { dg-output ".*'v' <== Memory access at offset \[0-9\]* is inside this variable.*" }
|
||||
// { dg-output ".*'v' \\(line 9\\) <== Memory access at offset \[0-9\]* is inside this variable.*" }
|
||||
|
@ -37,4 +37,4 @@ int main(int argc, char **argv)
|
||||
|
||||
// { dg-output "ERROR: AddressSanitizer: stack-use-after-scope on address.*(\n|\r\n|\r)" }
|
||||
// { dg-output "READ of size 4 at.*" }
|
||||
// { dg-output ".*'x' <== Memory access at offset \[0-9\]* is inside this variable.*" }
|
||||
// { dg-output ".*'x' \\(line 31\\) <== Memory access at offset \[0-9\]* is inside this variable.*" }
|
||||
|
@ -14,4 +14,4 @@ int main()
|
||||
|
||||
// { dg-output "ERROR: AddressSanitizer: stack-use-after-scope on address.*(\n|\r\n|\r)" }
|
||||
// { dg-output "WRITE of size " }
|
||||
// { dg-output ".*'x' <== Memory access at offset \[0-9\]* is inside this variable.*" }
|
||||
// { dg-output ".*'x' \\(line 25\\) <== Memory access at offset \[0-9\]* is inside this variable.*" }
|
||||
|
@ -14,4 +14,4 @@ int main()
|
||||
|
||||
// { dg-output "ERROR: AddressSanitizer: stack-use-after-scope on address.*(\n|\r\n|\r)" }
|
||||
// { dg-output "WRITE of size " }
|
||||
// { dg-output ".*'x' <== Memory access at offset \[0-9\]* is inside this variable.*" }
|
||||
// { dg-output ".*'x' \\(line 25\\) <== Memory access at offset \[0-9\]* is inside this variable.*" }
|
||||
|
@ -14,4 +14,4 @@ int main()
|
||||
|
||||
// { dg-output "ERROR: AddressSanitizer: stack-use-after-scope on address.*(\n|\r\n|\r)" }
|
||||
// { dg-output "WRITE of size " }
|
||||
// { dg-output ".*'x' <== Memory access at offset \[0-9\]* is inside this variable.*" }
|
||||
// { dg-output ".*'x' \\(line 25\\) <== Memory access at offset \[0-9\]* is inside this variable.*" }
|
||||
|
@ -14,4 +14,4 @@ int main()
|
||||
|
||||
// { dg-output "ERROR: AddressSanitizer: stack-use-after-scope on address.*(\n|\r\n|\r)" }
|
||||
// { dg-output "READ of size " }
|
||||
// { dg-output ".*'x' <== Memory access at offset \[0-9\]* is inside this variable.*" }
|
||||
// { dg-output ".*'x' \\(line 25\\) <== Memory access at offset \[0-9\]* is inside this variable.*" }
|
||||
|
@ -14,4 +14,4 @@ int main()
|
||||
|
||||
// { dg-output "ERROR: AddressSanitizer: stack-use-after-scope on address.*(\n|\r\n|\r)" }
|
||||
// { dg-output "WRITE of size " }
|
||||
// { dg-output ".*'x' <== Memory access at offset \[0-9\]* is inside this variable.*" }
|
||||
// { dg-output ".*'x' \\(line 25\\) <== Memory access at offset \[0-9\]* is inside this variable.*" }
|
||||
|
@ -22,4 +22,4 @@ int main()
|
||||
|
||||
// { dg-output "ERROR: AddressSanitizer: stack-use-after-scope on address.*(\n|\r\n|\r)" }
|
||||
// { dg-output "READ of size.*" }
|
||||
// { dg-output ".*'x' <== Memory access at offset \[0-9\]* is inside this variable.*" }
|
||||
// { dg-output ".*'x' \\(line 9\\) <== Memory access at offset \[0-9\]* is inside this variable.*" }
|
||||
|
@ -15,4 +15,4 @@ main (void)
|
||||
|
||||
// { dg-output "ERROR: AddressSanitizer: stack-use-after-scope on address.*(\n|\r\n|\r)" }
|
||||
// { dg-output "READ of size 1 at.*" }
|
||||
// { dg-output ".*'my_char' <== Memory access at offset \[0-9\]* is inside this variable.*" }
|
||||
// { dg-output ".*'my_char' \\(line 9\\) <== Memory access at offset \[0-9\]* is inside this variable.*" }
|
||||
|
@ -20,4 +20,4 @@ main (int argc, char **argv)
|
||||
|
||||
// { dg-output "ERROR: AddressSanitizer: stack-use-after-scope on address.*(\n|\r\n|\r)" }
|
||||
// { dg-output "WRITE of size .*" }
|
||||
// { dg-output ".*'a' <== Memory access at offset \[0-9\]* is inside this variable.*" }
|
||||
// { dg-output ".*'a' \\(line 12\\) <== Memory access at offset \[0-9\]* is inside this variable.*" }
|
||||
|
@ -44,4 +44,4 @@ main (void)
|
||||
|
||||
// { dg-output "ERROR: AddressSanitizer: stack-use-after-scope on address.*(\n|\r\n|\r)" }
|
||||
// { dg-output "READ of size 4 at.*" }
|
||||
// { dg-output ".*'c' <== Memory access at offset \[0-9\]* is inside this variable.*" }
|
||||
// { dg-output ".*'c' \\(line 37\\) <== Memory access at offset \[0-9\]* is inside this variable.*" }
|
||||
|
@ -18,4 +18,4 @@ main (void)
|
||||
|
||||
// { dg-output "ERROR: AddressSanitizer: stack-use-after-scope on address.*(\n|\r\n|\r)" }
|
||||
// { dg-output "WRITE of size 1 at.*" }
|
||||
// { dg-output ".*'my_char' <== Memory access at offset \[0-9\]* overflows this variable.*" }
|
||||
// { dg-output ".*'my_char' \\(line 11\\) <== Memory access at offset \[0-9\]* overflows this variable.*" }
|
||||
|
@ -24,4 +24,4 @@ main (int argc, char **argv)
|
||||
|
||||
// { dg-output "ERROR: AddressSanitizer: stack-use-after-scope on address.*(\n|\r\n|\r)" }
|
||||
// { dg-output "READ of size 4 at.*" }
|
||||
// { dg-output ".*'values' <== Memory access at offset \[0-9\]* is inside this variable.*" }
|
||||
// { dg-output ".*'values' \\(line 10\\) <== Memory access at offset \[0-9\]* is inside this variable.*" }
|
||||
|
@ -20,4 +20,4 @@ main (int argc, char **argv)
|
||||
// { dg-final { scan-tree-dump-times {= \.ASAN_POISON \(\)} 1 "asan1" } }
|
||||
// { dg-output "ERROR: AddressSanitizer: stack-use-after-scope on address.*(\n|\r\n|\r)" }
|
||||
// { dg-output "READ of size .*" }
|
||||
// { dg-output ".*'a' <== Memory access at offset \[0-9\]* is inside this variable.*" }
|
||||
// { dg-output ".*'a' \\(line 12\\) <== Memory access at offset \[0-9\]* is inside this variable.*" }
|
||||
|
Loading…
Reference in New Issue
Block a user