Bug 60024 - global-buffer-overflow in init_regs_for_mode
Summary: global-buffer-overflow in init_regs_for_mode
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: rtl-optimization (show other bugs)
Version: 4.9.0
: P3 normal
Target Milestone: 4.9.0
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2014-02-01 14:35 UTC by H.J. Lu
Modified: 2014-02-03 15:11 UTC (History)
1 user (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2014-02-01 00:00:00


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description H.J. Lu 2014-02-01 14:35:46 UTC
When GCC is bootstrapped with --with-build-config=bootstrap-asan
r207375 gave

spawn -ignore SIGHUP /export/build/gnu/gcc-asan/build-x86_64-linux/gcc/testsuite/gfortran3/../../gfortran -B/export/build/gnu/gcc-asan/build-x86_64-linux/gcc/testsuite/gfortran3/../../ -B/export/build/gnu/gcc-asan/build-x86_64-linux/x86_64-unknown-linux-gnu/32/libgfortran/ /export/gnu/import/git/sources/gcc/gcc/testsuite/gfortran.dg/pr42294.f -fno-diagnostics-show-caret -fdiagnostics-color=never -O -O2 -fselective-scheduling2 -fsel-sched-pipelining -funroll-all-loops -S -m32 -o pr42294.s^M
=================================================================^M
^[[1m^[[31m==9831==ERROR: AddressSanitizer: global-buffer-overflow on address 0x000003deb6cd at pc 0x12f89cf bp 0x7ffffba71eb0 sp 0x7ffffba71ea8^M
^[[1m^[[0m^[[1m^[[34mREAD of size 1 at 0x000003deb6cd thread T0^[[1m^[[0m^M
    #0 0x12f89ce in init_regs_for_mode /export/gnu/import/git/sources/gcc/gcc/sel-sched.c:1124^M
    #1 0x12f89ce in mark_unavailable_hard_regs /export/gnu/import/git/sources/gcc/gcc/sel-sched.c:1292^M
    #2 0x12f89ce in find_used_regs /export/gnu/import/git/sources/gcc/gcc/sel-sched.c:3336^M
    #3 0x12f89ce in collect_unavailable_regs_from_bnds /export/gnu/import/git/sources/gcc/gcc/sel-sched.c:1630^M
    #4 0x12f89ce in find_best_reg_for_expr /export/gnu/import/git/sources/gcc/gcc/sel-sched.c:1693^M
    #5 0x12f89ce in fill_vec_av_set /export/gnu/import/git/sources/gcc/gcc/sel-sched.c:3853^M
    #6 0x12ff673 in fill_ready_list /export/gnu/import/git/sources/gcc/gcc/sel-sched.c:4083^M
    #7 0x12ff673 in find_best_expr /export/gnu/import/git/sources/gcc/gcc/sel-sched.c:4446^M
    #8 0x12ff673 in fill_insns /export/gnu/import/git/sources/gcc/gcc/sel-sched.c:5613^M
    #9 0x12ff673 in schedule_on_fences /export/gnu/import/git/sources/gcc/gcc/sel-sched.c:7434^M
    #10 0x12ff673 in sel_sched_region_2 /export/gnu/import/git/sources/gcc/gcc/sel-sched.c:7568^M
    #11 0x130bb8e in sel_sched_region_1 /export/gnu/import/git/sources/gcc/gcc/sel-sched.c:7607^M
    #12 0x130bb8e in sel_sched_region(int) /export/gnu/import/git/sources/gcc/gcc/sel-sched.c:7708^M
    #13 0x130f731 in run_selective_scheduling() /export/gnu/import/git/sources/gcc/gcc/sel-sched.c:7784^M
    #14 0x12a5cb1 in rest_of_handle_sched2 /export/gnu/import/git/sources/gcc/gcc/sched-rgn.c:3650^M
    #15 0x12a5cb1 in execute /export/gnu/import/git/sources/gcc/gcc/sched-rgn.c:3769^M
    #16 0x11768e4 in execute_one_pass(opt_pass*) /export/gnu/import/git/sources/gcc/gcc/passes.c:2229^M
    #17 0x11772c8 in execute_pass_list(opt_pass*) /export/gnu/import/git/sources/gcc/gcc/passes.c:2282^M
    #18 0x11772ee in execute_pass_list(opt_pass*) /export/gnu/import/git/sources/gcc/gcc/passes.c:2283^M
    #19 0x11772ee in execute_pass_list(opt_pass*) /export/gnu/import/git/sources/gcc/gcc/passes.c:2283^M
    #20 0xa71cfa in expand_function /export/gnu/import/git/sources/gcc/gcc/cgraphunit.c:1774^M
    #21 0xa770da in expand_all_functions /export/gnu/import/git/sources/gcc/gcc/cgraphunit.c:1908^M
    #22 0xa770da in compile() /export/gnu/import/git/sources/gcc/gcc/cgraphunit.c:2252^M
    #23 0xa7898a in finalize_compilation_unit() /export/gnu/import/git/sources/gcc/gcc/cgraphunit.c:2329^M
    #24 0xffd1e0 in write_global_declarations() /export/gnu/import/git/sources/gcc/gcc/langhooks.c:323^M
    #25 0x1367834 in compile_file /export/gnu/import/git/sources/gcc/gcc/toplev.c:562^M
    #26 0x136c7a3 in do_compile /export/gnu/import/git/sources/gcc/gcc/toplev.c:1914^M
    #27 0x136c7a3 in toplev_main(int, char**) /export/gnu/import/git/sources/gcc/gcc/toplev.c:1990^M
    #28 0x3743821ca4 in __libc_start_main (/lib64/libc.so.6+0x3743821ca4)^M
    #29 0x5d1e60 (/export/build/gnu/gcc-asan/build-x86_64-linux/gcc/f951+0x5d1e60)^M
^M
^[[1m^[[32m0x000003deb6cd is located 51 bytes to the left of global variable 'default_target_regs' from '/export/gnu/import/git/sources/gcc/gcc/reginfo.c' (0x3deb700) of size 20488^M
^[[1m^[[0m^[[1m^[[32m0x000003deb6cd is located 0 bytes to the right of global variable 'global_regs' from '/export/gnu/import/git/sources/gcc/gcc/reginfo.c' (0x3deb680) of size 77^M
Comment 1 H.J. Lu 2014-02-01 15:06:27 UTC
(In reply to H.J. Lu from comment #0)
> When GCC is bootstrapped with --with-build-config=bootstrap-asan
> r207375 gave
> 
> spawn -ignore SIGHUP
> /export/build/gnu/gcc-asan/build-x86_64-linux/gcc/testsuite/gfortran3/../../
> gfortran
> -B/export/build/gnu/gcc-asan/build-x86_64-linux/gcc/testsuite/gfortran3/../..
> /
> -B/export/build/gnu/gcc-asan/build-x86_64-linux/x86_64-unknown-linux-gnu/32/
> libgfortran/
> /export/gnu/import/git/sources/gcc/gcc/testsuite/gfortran.dg/pr42294.f
> -fno-diagnostics-show-caret -fdiagnostics-color=never -O -O2
> -fselective-scheduling2 -fsel-sched-pipelining -funroll-all-loops -S -m32 -o
> pr42294.s^M
> =================================================================^M
> ^[[1m^[[31m==9831==ERROR: AddressSanitizer: global-buffer-overflow on
> address 0x000003deb6cd at pc 0x12f89cf bp 0x7ffffba71eb0 sp 0x7ffffba71ea8^M
> ^[[1m^[[0m^[[1m^[[34mREAD of size 1 at 0x000003deb6cd thread T0^[[1m^[[0m^M
>     #0 0x12f89ce in init_regs_for_mode
> /export/gnu/import/git/sources/gcc/gcc/sel-sched.c:1124^M

(gdb) call ix86_hard_regno_mode_ok (cur_reg, mode)
$6 = false
(gdb) p cur_reg
$7 = 76
(gdb) p mode
$8 = DFmode
(gdb) p nregs
$9 = 2
(gdb) call ix86_hard_regno_mode_ok (cur_reg, mode)
$10 = false
(gdb)
Comment 2 hjl@gcc.gnu.org 2014-02-03 15:07:03 UTC
Author: hjl
Date: Mon Feb  3 15:06:31 2014
New Revision: 207427

URL: http://gcc.gnu.org/viewcvs?rev=207427&root=gcc&view=rev
Log:
Check if mode is OK first

	PR rtl-optimization/60024
	* sel-sched.c (init_regs_for_mode): Check if mode is OK first.

Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/sel-sched.c
Comment 3 H.J. Lu 2014-02-03 15:11:22 UTC
Fixed.