Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(397)

Side by Side Diff: gdb/spu-tdep.c

Issue 11969036: Merge GDB 7.5.1 (Closed) Base URL: http://git.chromium.org/native_client/nacl-gdb.git@master
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « gdb/spu-multiarch.c ('k') | gdb/stabsread.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* SPU target-dependent code for GDB, the GNU debugger. 1 /* SPU target-dependent code for GDB, the GNU debugger.
2 Copyright (C) 2006-2012 Free Software Foundation, Inc. 2 Copyright (C) 2006-2012 Free Software Foundation, Inc.
3 3
4 Contributed by Ulrich Weigand <uweigand@de.ibm.com>. 4 Contributed by Ulrich Weigand <uweigand@de.ibm.com>.
5 Based on a port by Sid Manning <sid@us.ibm.com>. 5 Based on a port by Sid Manning <sid@us.ibm.com>.
6 6
7 This file is part of GDB. 7 This file is part of GDB.
8 8
9 This program is free software; you can redistribute it and/or modify 9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by 10 it under the terms of the GNU General Public License as published by
(...skipping 831 matching lines...) Expand 10 before | Expand all | Expand 10 after
842 control or the beginning of the function or reach the hard 842 control or the beginning of the function or reach the hard
843 limit for the size of an epilogue. */ 843 limit for the size of an epilogue. */
844 844
845 static int 845 static int
846 spu_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc) 846 spu_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc)
847 { 847 {
848 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); 848 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
849 CORE_ADDR scan_pc, func_start, func_end, epilogue_start, epilogue_end; 849 CORE_ADDR scan_pc, func_start, func_end, epilogue_start, epilogue_end;
850 bfd_byte buf[4]; 850 bfd_byte buf[4];
851 unsigned int insn; 851 unsigned int insn;
852 int rt, ra, rb, rc, immed; 852 int rt, ra, rb, immed;
853 853
854 /* Find the search limits based on function boundaries and hard limit. 854 /* Find the search limits based on function boundaries and hard limit.
855 We assume the epilogue can be up to 64 instructions long. */ 855 We assume the epilogue can be up to 64 instructions long. */
856 856
857 const int spu_max_epilogue_size = 64 * 4; 857 const int spu_max_epilogue_size = 64 * 4;
858 858
859 if (!find_pc_partial_function (pc, NULL, &func_start, &func_end)) 859 if (!find_pc_partial_function (pc, NULL, &func_start, &func_end))
860 return 0; 860 return 0;
861 861
862 if (pc - func_start < spu_max_epilogue_size) 862 if (pc - func_start < spu_max_epilogue_size)
(...skipping 580 matching lines...) Expand 10 before | Expand all | Expand 10 after
1443 { 1443 {
1444 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); 1444 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1445 CORE_ADDR pc = get_frame_register_unsigned (this_frame, SPU_PC_REGNUM); 1445 CORE_ADDR pc = get_frame_register_unsigned (this_frame, SPU_PC_REGNUM);
1446 CORE_ADDR sp = get_frame_register_unsigned (this_frame, SPU_SP_REGNUM); 1446 CORE_ADDR sp = get_frame_register_unsigned (this_frame, SPU_SP_REGNUM);
1447 return frame_id_build (SPUADDR (tdep->id, sp), SPUADDR (tdep->id, pc & -4)); 1447 return frame_id_build (SPUADDR (tdep->id, sp), SPUADDR (tdep->id, pc & -4));
1448 } 1448 }
1449 1449
1450 /* Function return value access. */ 1450 /* Function return value access. */
1451 1451
1452 static enum return_value_convention 1452 static enum return_value_convention
1453 spu_return_value (struct gdbarch *gdbarch, struct type *func_type, 1453 spu_return_value (struct gdbarch *gdbarch, struct value *function,
1454 struct type *type, struct regcache *regcache, 1454 struct type *type, struct regcache *regcache,
1455 gdb_byte *out, const gdb_byte *in) 1455 gdb_byte *out, const gdb_byte *in)
1456 { 1456 {
1457 struct type *func_type = function ? value_type (function) : NULL;
1457 enum return_value_convention rvc; 1458 enum return_value_convention rvc;
1458 int opencl_vector = 0; 1459 int opencl_vector = 0;
1459 1460
1460 if (func_type) 1461 if (func_type)
1461 { 1462 {
1462 func_type = check_typedef (func_type); 1463 func_type = check_typedef (func_type);
1463 1464
1464 if (TYPE_CODE (func_type) == TYPE_CODE_PTR) 1465 if (TYPE_CODE (func_type) == TYPE_CODE_PTR)
1465 func_type = check_typedef (TYPE_TARGET_TYPE (func_type)); 1466 func_type = check_typedef (TYPE_TARGET_TYPE (func_type));
1466 1467
(...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after
1935 sal = find_function_start_sal (sym, 1); 1936 sal = find_function_start_sal (sym, 1);
1936 pc = sal.pc; 1937 pc = sal.pc;
1937 } 1938 }
1938 } 1939 }
1939 1940
1940 /* Use a numerical address for the set_breakpoint command to avoid having 1941 /* Use a numerical address for the set_breakpoint command to avoid having
1941 the breakpoint re-set incorrectly. */ 1942 the breakpoint re-set incorrectly. */
1942 xsnprintf (buf, sizeof buf, "*%s", core_addr_to_string (pc)); 1943 xsnprintf (buf, sizeof buf, "*%s", core_addr_to_string (pc));
1943 create_breakpoint (get_objfile_arch (objfile), buf /* arg */, 1944 create_breakpoint (get_objfile_arch (objfile), buf /* arg */,
1944 NULL /* cond_string */, -1 /* thread */, 1945 NULL /* cond_string */, -1 /* thread */,
1946 NULL /* extra_string */,
1945 0 /* parse_condition_and_thread */, 1 /* tempflag */, 1947 0 /* parse_condition_and_thread */, 1 /* tempflag */,
1946 bp_breakpoint /* type_wanted */, 1948 bp_breakpoint /* type_wanted */,
1947 0 /* ignore_count */, 1949 0 /* ignore_count */,
1948 AUTO_BOOLEAN_FALSE /* pending_break_support */, 1950 AUTO_BOOLEAN_FALSE /* pending_break_support */,
1949 &bkpt_breakpoint_ops /* ops */, 0 /* from_tty */, 1951 &bkpt_breakpoint_ops /* ops */, 0 /* from_tty */,
1950 1 /* enabled */, 0 /* internal */, 0); 1952 1 /* enabled */, 0 /* internal */, 0);
1951 } 1953 }
1952 1954
1953 1955
1954 /* Look up OBJFILE loaded into FRAME's SPU context. */ 1956 /* Look up OBJFILE loaded into FRAME's SPU context. */
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
2023 static void 2025 static void
2024 info_spu_event_command (char *args, int from_tty) 2026 info_spu_event_command (char *args, int from_tty)
2025 { 2027 {
2026 struct frame_info *frame = get_selected_frame (NULL); 2028 struct frame_info *frame = get_selected_frame (NULL);
2027 ULONGEST event_status = 0; 2029 ULONGEST event_status = 0;
2028 ULONGEST event_mask = 0; 2030 ULONGEST event_mask = 0;
2029 struct cleanup *chain; 2031 struct cleanup *chain;
2030 gdb_byte buf[100]; 2032 gdb_byte buf[100];
2031 char annex[32]; 2033 char annex[32];
2032 LONGEST len; 2034 LONGEST len;
2033 int rc, id; 2035 int id;
2034 2036
2035 if (gdbarch_bfd_arch_info (get_frame_arch (frame))->arch != bfd_arch_spu) 2037 if (gdbarch_bfd_arch_info (get_frame_arch (frame))->arch != bfd_arch_spu)
2036 error (_("\"info spu\" is only supported on the SPU architecture.")); 2038 error (_("\"info spu\" is only supported on the SPU architecture."));
2037 2039
2038 id = get_frame_register_unsigned (frame, SPU_ID_REGNUM); 2040 id = get_frame_register_unsigned (frame, SPU_ID_REGNUM);
2039 2041
2040 xsnprintf (annex, sizeof annex, "%d/event_status", id); 2042 xsnprintf (annex, sizeof annex, "%d/event_status", id);
2041 len = target_read (&current_target, TARGET_OBJECT_SPU, annex, 2043 len = target_read (&current_target, TARGET_OBJECT_SPU, annex,
2042 buf, 0, (sizeof (buf) - 1)); 2044 buf, 0, (sizeof (buf) - 1));
2043 if (len <= 0) 2045 if (len <= 0)
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
2080 ULONGEST signal1 = 0; 2082 ULONGEST signal1 = 0;
2081 ULONGEST signal1_type = 0; 2083 ULONGEST signal1_type = 0;
2082 int signal1_pending = 0; 2084 int signal1_pending = 0;
2083 ULONGEST signal2 = 0; 2085 ULONGEST signal2 = 0;
2084 ULONGEST signal2_type = 0; 2086 ULONGEST signal2_type = 0;
2085 int signal2_pending = 0; 2087 int signal2_pending = 0;
2086 struct cleanup *chain; 2088 struct cleanup *chain;
2087 char annex[32]; 2089 char annex[32];
2088 gdb_byte buf[100]; 2090 gdb_byte buf[100];
2089 LONGEST len; 2091 LONGEST len;
2090 int rc, id; 2092 int id;
2091 2093
2092 if (gdbarch_bfd_arch_info (gdbarch)->arch != bfd_arch_spu) 2094 if (gdbarch_bfd_arch_info (gdbarch)->arch != bfd_arch_spu)
2093 error (_("\"info spu\" is only supported on the SPU architecture.")); 2095 error (_("\"info spu\" is only supported on the SPU architecture."));
2094 2096
2095 id = get_frame_register_unsigned (frame, SPU_ID_REGNUM); 2097 id = get_frame_register_unsigned (frame, SPU_ID_REGNUM);
2096 2098
2097 xsnprintf (annex, sizeof annex, "%d/signal1", id); 2099 xsnprintf (annex, sizeof annex, "%d/signal1", id);
2098 len = target_read (&current_target, TARGET_OBJECT_SPU, annex, buf, 0, 4); 2100 len = target_read (&current_target, TARGET_OBJECT_SPU, annex, buf, 0, 4);
2099 if (len < 0) 2101 if (len < 0)
2100 error (_("Could not read signal1.")); 2102 error (_("Could not read signal1."));
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
2201 static void 2203 static void
2202 info_spu_mailbox_command (char *args, int from_tty) 2204 info_spu_mailbox_command (char *args, int from_tty)
2203 { 2205 {
2204 struct frame_info *frame = get_selected_frame (NULL); 2206 struct frame_info *frame = get_selected_frame (NULL);
2205 struct gdbarch *gdbarch = get_frame_arch (frame); 2207 struct gdbarch *gdbarch = get_frame_arch (frame);
2206 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); 2208 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2207 struct cleanup *chain; 2209 struct cleanup *chain;
2208 char annex[32]; 2210 char annex[32];
2209 gdb_byte buf[1024]; 2211 gdb_byte buf[1024];
2210 LONGEST len; 2212 LONGEST len;
2211 int i, id; 2213 int id;
2212 2214
2213 if (gdbarch_bfd_arch_info (gdbarch)->arch != bfd_arch_spu) 2215 if (gdbarch_bfd_arch_info (gdbarch)->arch != bfd_arch_spu)
2214 error (_("\"info spu\" is only supported on the SPU architecture.")); 2216 error (_("\"info spu\" is only supported on the SPU architecture."));
2215 2217
2216 id = get_frame_register_unsigned (frame, SPU_ID_REGNUM); 2218 id = get_frame_register_unsigned (frame, SPU_ID_REGNUM);
2217 2219
2218 chain = make_cleanup_ui_out_tuple_begin_end (current_uiout, "SPUInfoMailbox"); 2220 chain = make_cleanup_ui_out_tuple_begin_end (current_uiout, "SPUInfoMailbox");
2219 2221
2220 xsnprintf (annex, sizeof annex, "%d/mbox_info", id); 2222 xsnprintf (annex, sizeof annex, "%d/mbox_info", id);
2221 len = target_read (&current_target, TARGET_OBJECT_SPU, annex, 2223 len = target_read (&current_target, TARGET_OBJECT_SPU, annex,
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
2349 2351
2350 ui_out_table_body (current_uiout); 2352 ui_out_table_body (current_uiout);
2351 2353
2352 for (i = 0; i < nr; i++) 2354 for (i = 0; i < nr; i++)
2353 { 2355 {
2354 struct cleanup *cmd_chain; 2356 struct cleanup *cmd_chain;
2355 ULONGEST mfc_cq_dw0; 2357 ULONGEST mfc_cq_dw0;
2356 ULONGEST mfc_cq_dw1; 2358 ULONGEST mfc_cq_dw1;
2357 ULONGEST mfc_cq_dw2; 2359 ULONGEST mfc_cq_dw2;
2358 int mfc_cmd_opcode, mfc_cmd_tag, rclass_id, tclass_id; 2360 int mfc_cmd_opcode, mfc_cmd_tag, rclass_id, tclass_id;
2359 int lsa, size, list_lsa, list_size, mfc_lsa, mfc_size; 2361 int list_lsa, list_size, mfc_lsa, mfc_size;
2360 ULONGEST mfc_ea; 2362 ULONGEST mfc_ea;
2361 int list_valid_p, noop_valid_p, qw_valid_p, ea_valid_p, cmd_error_p; 2363 int list_valid_p, noop_valid_p, qw_valid_p, ea_valid_p, cmd_error_p;
2362 2364
2363 /* Decode contents of MFC Command Queue Context Save/Restore Registers. 2365 /* Decode contents of MFC Command Queue Context Save/Restore Registers.
2364 See "Cell Broadband Engine Registers V1.3", section 3.3.2.1. */ 2366 See "Cell Broadband Engine Registers V1.3", section 3.3.2.1. */
2365 2367
2366 mfc_cq_dw0 2368 mfc_cq_dw0
2367 = extract_unsigned_integer (buf + 32*seq[i], 8, byte_order); 2369 = extract_unsigned_integer (buf + 32*seq[i], 8, byte_order);
2368 mfc_cq_dw1 2370 mfc_cq_dw1
2369 = extract_unsigned_integer (buf + 32*seq[i] + 8, 8, byte_order); 2371 = extract_unsigned_integer (buf + 32*seq[i] + 8, 8, byte_order);
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
2443 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); 2445 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2444 ULONGEST dma_info_type; 2446 ULONGEST dma_info_type;
2445 ULONGEST dma_info_mask; 2447 ULONGEST dma_info_mask;
2446 ULONGEST dma_info_status; 2448 ULONGEST dma_info_status;
2447 ULONGEST dma_info_stall_and_notify; 2449 ULONGEST dma_info_stall_and_notify;
2448 ULONGEST dma_info_atomic_command_status; 2450 ULONGEST dma_info_atomic_command_status;
2449 struct cleanup *chain; 2451 struct cleanup *chain;
2450 char annex[32]; 2452 char annex[32];
2451 gdb_byte buf[1024]; 2453 gdb_byte buf[1024];
2452 LONGEST len; 2454 LONGEST len;
2453 int i, id; 2455 int id;
2454 2456
2455 if (gdbarch_bfd_arch_info (get_frame_arch (frame))->arch != bfd_arch_spu) 2457 if (gdbarch_bfd_arch_info (get_frame_arch (frame))->arch != bfd_arch_spu)
2456 error (_("\"info spu\" is only supported on the SPU architecture.")); 2458 error (_("\"info spu\" is only supported on the SPU architecture."));
2457 2459
2458 id = get_frame_register_unsigned (frame, SPU_ID_REGNUM); 2460 id = get_frame_register_unsigned (frame, SPU_ID_REGNUM);
2459 2461
2460 xsnprintf (annex, sizeof annex, "%d/dma_info", id); 2462 xsnprintf (annex, sizeof annex, "%d/dma_info", id);
2461 len = target_read (&current_target, TARGET_OBJECT_SPU, annex, 2463 len = target_read (&current_target, TARGET_OBJECT_SPU, annex,
2462 buf, 0, 40 + 16 * 32); 2464 buf, 0, 40 + 16 * 32);
2463 if (len <= 0) 2465 if (len <= 0)
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
2522 struct frame_info *frame = get_selected_frame (NULL); 2524 struct frame_info *frame = get_selected_frame (NULL);
2523 struct gdbarch *gdbarch = get_frame_arch (frame); 2525 struct gdbarch *gdbarch = get_frame_arch (frame);
2524 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); 2526 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2525 ULONGEST dma_info_type; 2527 ULONGEST dma_info_type;
2526 ULONGEST dma_info_mask; 2528 ULONGEST dma_info_mask;
2527 ULONGEST dma_info_status; 2529 ULONGEST dma_info_status;
2528 struct cleanup *chain; 2530 struct cleanup *chain;
2529 char annex[32]; 2531 char annex[32];
2530 gdb_byte buf[1024]; 2532 gdb_byte buf[1024];
2531 LONGEST len; 2533 LONGEST len;
2532 int i, id; 2534 int id;
2533 2535
2534 if (gdbarch_bfd_arch_info (gdbarch)->arch != bfd_arch_spu) 2536 if (gdbarch_bfd_arch_info (gdbarch)->arch != bfd_arch_spu)
2535 error (_("\"info spu\" is only supported on the SPU architecture.")); 2537 error (_("\"info spu\" is only supported on the SPU architecture."));
2536 2538
2537 id = get_frame_register_unsigned (frame, SPU_ID_REGNUM); 2539 id = get_frame_register_unsigned (frame, SPU_ID_REGNUM);
2538 2540
2539 xsnprintf (annex, sizeof annex, "%d/proxydma_info", id); 2541 xsnprintf (annex, sizeof annex, "%d/proxydma_info", id);
2540 len = target_read (&current_target, TARGET_OBJECT_SPU, annex, 2542 len = target_read (&current_target, TARGET_OBJECT_SPU, annex,
2541 buf, 0, 24 + 8 * 32); 2543 buf, 0, 24 + 8 * 32);
2542 if (len <= 0) 2544 if (len <= 0)
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
2808 add_cmd ("mailbox", class_info, info_spu_mailbox_command, 2810 add_cmd ("mailbox", class_info, info_spu_mailbox_command,
2809 _("Display SPU mailbox facility status.\n"), 2811 _("Display SPU mailbox facility status.\n"),
2810 &infospucmdlist); 2812 &infospucmdlist);
2811 add_cmd ("dma", class_info, info_spu_dma_command, 2813 add_cmd ("dma", class_info, info_spu_dma_command,
2812 _("Display MFC DMA status.\n"), 2814 _("Display MFC DMA status.\n"),
2813 &infospucmdlist); 2815 &infospucmdlist);
2814 add_cmd ("proxydma", class_info, info_spu_proxydma_command, 2816 add_cmd ("proxydma", class_info, info_spu_proxydma_command,
2815 _("Display MFC Proxy-DMA status.\n"), 2817 _("Display MFC Proxy-DMA status.\n"),
2816 &infospucmdlist); 2818 &infospucmdlist);
2817 } 2819 }
OLDNEW
« no previous file with comments | « gdb/spu-multiarch.c ('k') | gdb/stabsread.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698