| # Copyright 2014-2021 Free Software Foundation, Inc. |
| |
| # This program is free software; you can redistribute it and/or modify |
| # it under the terms of the GNU General Public License as published by |
| # the Free Software Foundation; either version 3 of the License, or |
| # (at your option) any later version. |
| # |
| # This program is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| # GNU General Public License for more details. |
| # |
| # You should have received a copy of the GNU General Public License |
| # along with this program. If not, see <http://www.gnu.org/licenses/>. |
| |
| # Some coverage testing of DWARF operators for the compiler |
| # integration. |
| |
| load_lib dwarf.exp |
| |
| # This test can only be run on targets which support DWARF-2 and use gas. |
| if {![dwarf2_support]} { |
| return 0 |
| } |
| |
| standard_testfile .c gdbjit-ops.S |
| |
| # |
| # A port of the pr10770.c test code to the DWARF assembler format. |
| # |
| |
| set assert_tos_non0 { |
| bra 3 |
| skip -3 |
| } |
| |
| set assert_tos_0 [subst { |
| lit0 |
| eq |
| $assert_tos_non0 |
| }] |
| |
| set program [subst { |
| lit0 |
| nop |
| $assert_tos_0 |
| lit1 |
| const1u 1 |
| eq |
| $assert_tos_non0 |
| lit16 |
| const2u 16 |
| eq |
| $assert_tos_non0 |
| lit31 |
| const4u 31 |
| ne |
| $assert_tos_0 |
| lit1 |
| neg |
| const1s -1 |
| eq |
| $assert_tos_non0 |
| lit16 |
| neg |
| const2s -16 |
| ne |
| $assert_tos_0 |
| lit31 |
| const4s -31 |
| neg |
| ne |
| $assert_tos_0 |
| lit7 |
| dup |
| plus_uconst 2 |
| lit9 |
| eq |
| $assert_tos_non0 |
| lit7 |
| eq |
| $assert_tos_non0 |
| lit20 |
| lit1 |
| drop |
| lit20 |
| eq |
| $assert_tos_non0 |
| lit17 |
| lit19 |
| over |
| lit17 |
| eq |
| $assert_tos_non0 |
| lit19 |
| eq |
| $assert_tos_non0 |
| lit17 |
| eq |
| $assert_tos_non0 |
| lit1 |
| lit2 |
| lit3 |
| lit4 |
| pick 2 |
| lit2 |
| eq |
| $assert_tos_non0 |
| lit4 |
| eq |
| $assert_tos_non0 |
| lit3 |
| eq |
| $assert_tos_non0 |
| pick 0 |
| lit2 |
| eq |
| $assert_tos_non0 |
| lit2 |
| eq |
| $assert_tos_non0 |
| lit1 |
| eq |
| $assert_tos_non0 |
| lit6 |
| lit12 |
| swap |
| lit6 |
| eq |
| $assert_tos_non0 |
| lit12 |
| eq |
| $assert_tos_non0 |
| lit7 |
| lit8 |
| lit9 |
| rot |
| lit8 |
| eq |
| $assert_tos_non0 |
| lit7 |
| eq |
| $assert_tos_non0 |
| lit9 |
| eq |
| $assert_tos_non0 |
| lit7 |
| abs |
| lit7 |
| eq |
| $assert_tos_non0 |
| const1s -123 |
| abs |
| const1u 123 |
| eq |
| $assert_tos_non0 |
| lit3 |
| lit6 |
| and |
| lit2 |
| eq |
| $assert_tos_non0 |
| lit3 |
| lit6 |
| or |
| lit7 |
| eq |
| $assert_tos_non0 |
| lit17 |
| lit2 |
| minus |
| lit15 |
| eq |
| $assert_tos_non0 |
| # Divide is signed truncating toward zero. |
| const1s -6 |
| const1s -2 |
| div |
| lit3 |
| eq |
| $assert_tos_non0 |
| const1s -7 |
| const1s 3 |
| div |
| const1s -2 |
| eq |
| $assert_tos_non0 |
| # Modulo is unsigned. |
| const1s -6 |
| const1s -4 |
| mod |
| const1s -6 |
| eq |
| $assert_tos_non0 |
| const1s -6 |
| lit4 |
| mod |
| lit2 |
| eq |
| $assert_tos_non0 |
| lit6 |
| const1s -4 |
| mod |
| lit6 |
| eq |
| $assert_tos_non0 |
| # Signed modulo can be implemented using 'over over div mul minus'. |
| const1s -6 |
| const1s -4 |
| over |
| over |
| div |
| mul |
| minus |
| const1s -2 |
| eq |
| $assert_tos_non0 |
| const1s -7 |
| lit3 |
| over |
| over |
| div |
| mul |
| minus |
| const1s -1 |
| eq |
| $assert_tos_non0 |
| lit7 |
| const1s -3 |
| over |
| over |
| div |
| mul |
| minus |
| lit1 |
| eq |
| $assert_tos_non0 |
| lit16 |
| lit31 |
| plus_uconst 1 |
| mul |
| const2u 512 |
| eq |
| $assert_tos_non0 |
| lit5 |
| not |
| lit31 |
| and |
| lit26 |
| eq |
| $assert_tos_non0 |
| lit12 |
| lit31 |
| plus |
| const1u 43 |
| eq |
| $assert_tos_non0 |
| const1s -6 |
| lit2 |
| plus |
| const1s -4 |
| eq |
| $assert_tos_non0 |
| const1s -6 |
| plus_uconst 3 |
| const1s -3 |
| eq |
| $assert_tos_non0 |
| lit16 |
| lit4 |
| shl |
| const2u 256 |
| eq |
| $assert_tos_non0 |
| lit16 |
| lit3 |
| shr |
| lit2 |
| eq |
| $assert_tos_non0 |
| const1s -16 |
| lit3 |
| shra |
| const1s -2 |
| eq |
| $assert_tos_non0 |
| lit3 |
| lit6 |
| xor |
| lit5 |
| eq |
| $assert_tos_non0 |
| lit3 |
| lit6 |
| le |
| $assert_tos_non0 |
| lit3 |
| lit3 |
| le |
| $assert_tos_non0 |
| lit6 |
| lit3 |
| le |
| $assert_tos_0 |
| lit3 |
| lit6 |
| lt |
| $assert_tos_non0 |
| lit3 |
| lit3 |
| lt |
| $assert_tos_0 |
| lit6 |
| lit3 |
| lt |
| $assert_tos_0 |
| lit3 |
| lit6 |
| ge |
| $assert_tos_0 |
| lit3 |
| lit3 |
| ge |
| $assert_tos_non0 |
| lit6 |
| lit3 |
| ge |
| $assert_tos_non0 |
| lit3 |
| lit6 |
| gt |
| $assert_tos_0 |
| lit3 |
| lit3 |
| gt |
| $assert_tos_0 |
| lit6 |
| lit3 |
| gt |
| $assert_tos_non0 |
| const1s -6 |
| lit1 |
| shr |
| lit0 |
| gt |
| $assert_tos_non0 |
| const1s -6 |
| lit1 |
| shra |
| lit0 |
| lt |
| $assert_tos_non0 |
| # Finally some result. |
| addr ptr |
| }] |
| |
| # Make some DWARF for the test. |
| set asm_file [standard_output_file $srcfile2] |
| Dwarf::assemble $asm_file { |
| # Creating a CU with 4-byte addresses lets this test link on both |
| # 32- and 64-bit machines. |
| cu { addr_size 4 } { |
| |
| declare_labels int_label |
| |
| compile_unit { |
| {name file1.txt} |
| {language @DW_LANG_C} |
| {low_pc func_start addr} |
| {high_pc func_end addr} |
| } { |
| global program |
| |
| int_label: base_type { |
| {name int} |
| {byte_size 4 sdata} |
| {encoding @DW_ATE_signed} |
| } |
| |
| subprogram { |
| {external 1 flag} |
| {name func} |
| {low_pc func_start addr} |
| {high_pc func_end addr} |
| } { |
| formal_parameter { |
| {name param} |
| {variable_parameter 1 flag} |
| {type :$int_label} |
| {location $program SPECIAL_expr} |
| } |
| |
| formal_parameter { |
| {name optimized_out} |
| {variable_parameter 1 flag} |
| {type :$int_label} |
| } |
| } |
| } |
| } |
| } |
| |
| if { [prepare_for_testing "failed to prepare" ${testfile} \ |
| [list $srcfile $asm_file] {nodebug}] } { |
| return -1 |
| } |
| |
| if ![runto func] { |
| return -1 |
| } |
| |
| if {[skip_compile_feature_tests]} { |
| untested "compile command not supported (could not find libcc1 shared library?)" |
| return -1 |
| } |
| |
| # If we have a bug, this will hang. |
| gdb_test_no_output "compile code (void) param" |
| |
| # We can't access optimized-out variables, but their presence should |
| # not affect compilations that don't refer to them. |
| gdb_test "compile code optimized_out" \ |
| ".*optimized out.*Compilation failed." |