@@ -33,6 +33,27 @@ if ![runto_main] {
3333 return 0
3434}
3535
36+ proc get_arc_defines { } {
37+ global target_info board_info decimal
38+
39+ set target_board [target_info name]
40+ set compiler [board_info $target_board compiler]
41+ set multilib ""
42+
43+ if { [board_info $target_board exists multilib_flags] } {
44+ set multilib "[board_info $target_board multilib_flags]"
45+ }
46+
47+ set options "$multilib -dM -E -"
48+ return [eval exec "$compiler $options < /dev/null"]
49+ }
50+
51+ set arc_defines [get_arc_defines]
52+ regexp "#define __SIZEOF_POINTER__ ($decimal)" $arc_defines -> arc_reg_size
53+ set is_arcv3 [regexp "__ARCV3__" $arc_defines]
54+ set is_arcv3_arc32 [regexp "__ARC64_ARCH32__" $arc_defines]
55+ set is_arcv3_arc64 [regexp "__ARC64_ARCH64__" $arc_defines]
56+
3657# Convert list of saved registers and their offsets to a GDB string.
3758proc saved_regs_to_str { savedregs funcname } {
3859 set str ""
@@ -109,7 +130,15 @@ prologue_test "noncallee_saved_regs_r12_st" { {r12 0} {r13 4} }
109130prologue_test "noncallee_saved_regs_r12_push" { {r12 0} {r13 4} }
110131prologue_test "noncallee_saved_regs_r2_push" { {r2 0} {r13 4} }
111132prologue_test "noncallee_saved_regs_gp_push" { {r25 4} {gp 0} }
112- prologue_test "noncallee_saved_regs_lp_count" { {r25 4} {lp_count 0} }
133+ # HS6x does not have loop instructions and registers but HS5x does. However,
134+ # it's not supported by GNU tools yet.
135+ if { !$is_arcv3 } {
136+ prologue_test "noncallee_saved_regs_lp_count" { {r25 4} {lp_count 0} }
137+ } else {
138+ if { $is_arcv3_arc32 } {
139+ xfail "noncallee_saved_regs_lp_count: loops are not implemented for HS5x yet"
140+ }
141+ }
113142prologue_test "noncallee_saved_regs_blink_out_of_prologue" { {r25 8} {gp 4} \
114143 {blink 0}}
115144# Argument registers are not reported as "saved" regs.
@@ -120,14 +149,28 @@ prologue_test "enter_s_nop"
120149prologue_test "enter_s_blink" { {blink 0} }
121150prologue_test "enter_s_fp" { {fp 0} } 0
122151# Layout of registers as stored by enter_s doesn't conform to ARC ABI.
123- prologue_test "enter_s_r13" { {r13 4} {fp 8} {blink 0} } 0
124- prologue_test "enter_s_r15" { {r13 0} {r14 4} {r15 8} } 0
152+ if { $is_arcv3 } {
153+ prologue_test "enter_s_r13" { {r14 8} {fp 0} {blink 4} } 0
154+ } else {
155+ prologue_test "enter_s_r13" { {r13 4} {fp 8} {blink 0} } 0
156+ }
157+ if { $is_arcv3 } {
158+ prologue_test "enter_s_r15" { {r14 0} {r15 4} {r16 8} } 0
159+ } else {
160+ prologue_test "enter_s_r15" { {r13 0} {r14 4} {r15 8} } 0
161+ }
125162# This enter_s saves GP, however because it is not a "calle-saved register",
126163# GDB will not report it as "saved register" (but maybe it should). GP is at
127164# offset 56.
128- prologue_test "enter_s_all" { {r13 4} {r14 8} {r15 12} {r16 16} {r17 20} \
129- {r18 24} {r19 28} {r20 32} {r21 36} {r22 40} {r23 44} {r24 48} {r25 52} \
130- {gp 56} {fp 60} {blink 0} } 0
165+ if { $is_arcv3 } {
166+ prologue_test "enter_s_all" { {r14 8} {r15 12} {r16 16} {r17 20} {r18 24} \
167+ {r19 28} {r20 32} {r21 36} {r22 40} {r23 44} {r24 48} {r25 52} \
168+ {r26 56} {fp 0} {blink 4} } 0
169+ } else {
170+ prologue_test "enter_s_all" { {r13 4} {r14 8} {r15 12} {r16 16} {r17 20} \
171+ {r18 24} {r19 28} {r20 32} {r21 36} {r22 40} {r23 44} {r24 48} \
172+ {r25 52} {gp 56} {fp 60} {blink 0} } 0
173+ }
131174
132175# Test more levels of backtrace.
133176gdb_breakpoint nested_prologue_inner temporary
@@ -154,7 +197,15 @@ prologue_test "cond_branch_in_prologue" { {r13 4} }
154197prologue_test "jump_in_prologue" { {r13 0} }
155198prologue_test "cond_jump_in_prologue" { {r13 4} }
156199prologue_test "predicated_insn" { {r13 8} {r15 0} }
157- prologue_test "loop_in_prologue" { {r25 4} {lp_count 0} }
200+ # HS6x does not have loop instructions and registers but HS5x does. However,
201+ # it's not supported by GNU tools yet.
202+ if { !$is_arcv3 } {
203+ prologue_test "loop_in_prologue" { {r25 4} {lp_count 0} }
204+ } else {
205+ if { $is_arcv3_arc32 } {
206+ xfail "loop_in_prologue: loops are not implemented for HS5x yet"
207+ }
208+ }
158209prologue_test "store_constant" { {r13 8} {r14 4} }
159210prologue_test "st_c_limm" { {r15 0} }
160211prologue_test "st_ab_writeback" { {r13 8} {r14 4} {r15 0} }
@@ -174,7 +225,10 @@ prologue_test "r_relative_store_unknown" { {r13 8} }
174225prologue_test "st_s_r0gp" { {r13 8} }
175226prologue_test "push_s_prologue" { {r0 28} {r1 16} {r2 4} {r3 24} {r12 32} \
176227 {r13 20} {r14 12} {r15 8} {blink 0}}
177- prologue_test "sub_s_cbu3" { {r13 4} {r14 0} }
228+ # ARCv3 targets does not have this instruction.
229+ if { !$is_arcv3 } {
230+ prologue_test "sub_s_cbu3" { {r13 4} {r14 0} }
231+ }
178232prologue_test "sub_s_bbc" { {r1 4} {r13 12} {r14 0} }
179233prologue_test "sub_s_bbu5" { {r13 8} {r14 0} }
180234prologue_test "sub_0bc" { {r13 4} {r14 0} }
0 commit comments