Don't use BFD_VMA_FMT in binutils
[binutils-gdb.git] / gdbserver / ax.cc
1 /* Agent expression code for remote server.
2 Copyright (C) 2009-2022 Free Software Foundation, Inc.
3
4 This file is part of GDB.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program. If not, see <http://www.gnu.org/licenses/>. */
18
19 #include "server.h"
20 #include "ax.h"
21 #include "gdbsupport/format.h"
22 #include "tracepoint.h"
23 #include "gdbsupport/rsp-low.h"
24
25 static void ax_vdebug (const char *, ...) ATTRIBUTE_PRINTF (1, 2);
26
27 #ifdef IN_PROCESS_AGENT
28 bool debug_agent = 0;
29 #endif
30
31 static void
32 ax_vdebug (const char *fmt, ...)
33 {
34 char buf[1024];
35 va_list ap;
36
37 va_start (ap, fmt);
38 vsprintf (buf, fmt, ap);
39 #ifdef IN_PROCESS_AGENT
40 fprintf (stderr, PROG "/ax: %s\n", buf);
41 #else
42 threads_debug_printf (PROG "/ax: %s", buf);
43 #endif
44 va_end (ap);
45 }
46
47 #define ax_debug(fmt, args...) \
48 do { \
49 if (debug_threads) \
50 ax_vdebug ((fmt), ##args); \
51 } while (0)
52
53 /* This enum must exactly match what is documented in
54 gdb/doc/agentexpr.texi, including all the numerical values. */
55
56 enum gdb_agent_op
57 {
58 #define DEFOP(NAME, SIZE, DATA_SIZE, CONSUMED, PRODUCED, VALUE) \
59 gdb_agent_op_ ## NAME = VALUE,
60 #include "gdbsupport/ax.def"
61 #undef DEFOP
62 gdb_agent_op_last
63 };
64
65 static const char * const gdb_agent_op_names [gdb_agent_op_last] =
66 {
67 "?undef?"
68 #define DEFOP(NAME, SIZE, DATA_SIZE, CONSUMED, PRODUCED, VALUE) , # NAME
69 #include "gdbsupport/ax.def"
70 #undef DEFOP
71 };
72
73 #ifndef IN_PROCESS_AGENT
74 static const unsigned char gdb_agent_op_sizes [gdb_agent_op_last] =
75 {
76 0
77 #define DEFOP(NAME, SIZE, DATA_SIZE, CONSUMED, PRODUCED, VALUE) , SIZE
78 #include "gdbsupport/ax.def"
79 #undef DEFOP
80 };
81 #endif
82
83 /* A wrapper for gdb_agent_op_names that does some bounds-checking. */
84
85 static const char *
86 gdb_agent_op_name (int op)
87 {
88 if (op < 0 || op >= gdb_agent_op_last || gdb_agent_op_names[op] == NULL)
89 return "?undef?";
90 return gdb_agent_op_names[op];
91 }
92
93 #ifndef IN_PROCESS_AGENT
94
95 /* The packet form of an agent expression consists of an 'X', number
96 of bytes in expression, a comma, and then the bytes. */
97
98 struct agent_expr *
99 gdb_parse_agent_expr (const char **actparm)
100 {
101 const char *act = *actparm;
102 ULONGEST xlen;
103 struct agent_expr *aexpr;
104
105 ++act; /* skip the X */
106 act = unpack_varlen_hex (act, &xlen);
107 ++act; /* skip a comma */
108 aexpr = XNEW (struct agent_expr);
109 aexpr->length = xlen;
110 aexpr->bytes = (unsigned char *) xmalloc (xlen);
111 hex2bin (act, aexpr->bytes, xlen);
112 *actparm = act + (xlen * 2);
113 return aexpr;
114 }
115
116 void
117 gdb_free_agent_expr (struct agent_expr *aexpr)
118 {
119 if (aexpr != NULL)
120 {
121 free (aexpr->bytes);
122 free (aexpr);
123 }
124 }
125
126 /* Convert the bytes of an agent expression back into hex digits, so
127 they can be printed or uploaded. This allocates the buffer,
128 callers should free when they are done with it. */
129
130 char *
131 gdb_unparse_agent_expr (struct agent_expr *aexpr)
132 {
133 char *rslt;
134
135 rslt = (char *) xmalloc (2 * aexpr->length + 1);
136 bin2hex (aexpr->bytes, rslt, aexpr->length);
137 return rslt;
138 }
139
140 /* Bytecode compilation. */
141
142 CORE_ADDR current_insn_ptr;
143
144 int emit_error;
145
146 static struct bytecode_address
147 {
148 int pc;
149 CORE_ADDR address;
150 int goto_pc;
151 /* Offset and size of field to be modified in the goto block. */
152 int from_offset, from_size;
153 struct bytecode_address *next;
154 } *bytecode_address_table;
155
156 void
157 emit_prologue (void)
158 {
159 target_emit_ops ()->emit_prologue ();
160 }
161
162 void
163 emit_epilogue (void)
164 {
165 target_emit_ops ()->emit_epilogue ();
166 }
167
168 static void
169 emit_add (void)
170 {
171 target_emit_ops ()->emit_add ();
172 }
173
174 static void
175 emit_sub (void)
176 {
177 target_emit_ops ()->emit_sub ();
178 }
179
180 static void
181 emit_mul (void)
182 {
183 target_emit_ops ()->emit_mul ();
184 }
185
186 static void
187 emit_lsh (void)
188 {
189 target_emit_ops ()->emit_lsh ();
190 }
191
192 static void
193 emit_rsh_signed (void)
194 {
195 target_emit_ops ()->emit_rsh_signed ();
196 }
197
198 static void
199 emit_rsh_unsigned (void)
200 {
201 target_emit_ops ()->emit_rsh_unsigned ();
202 }
203
204 static void
205 emit_ext (int arg)
206 {
207 target_emit_ops ()->emit_ext (arg);
208 }
209
210 static void
211 emit_log_not (void)
212 {
213 target_emit_ops ()->emit_log_not ();
214 }
215
216 static void
217 emit_bit_and (void)
218 {
219 target_emit_ops ()->emit_bit_and ();
220 }
221
222 static void
223 emit_bit_or (void)
224 {
225 target_emit_ops ()->emit_bit_or ();
226 }
227
228 static void
229 emit_bit_xor (void)
230 {
231 target_emit_ops ()->emit_bit_xor ();
232 }
233
234 static void
235 emit_bit_not (void)
236 {
237 target_emit_ops ()->emit_bit_not ();
238 }
239
240 static void
241 emit_equal (void)
242 {
243 target_emit_ops ()->emit_equal ();
244 }
245
246 static void
247 emit_less_signed (void)
248 {
249 target_emit_ops ()->emit_less_signed ();
250 }
251
252 static void
253 emit_less_unsigned (void)
254 {
255 target_emit_ops ()->emit_less_unsigned ();
256 }
257
258 static void
259 emit_ref (int size)
260 {
261 target_emit_ops ()->emit_ref (size);
262 }
263
264 static void
265 emit_if_goto (int *offset_p, int *size_p)
266 {
267 target_emit_ops ()->emit_if_goto (offset_p, size_p);
268 }
269
270 static void
271 emit_goto (int *offset_p, int *size_p)
272 {
273 target_emit_ops ()->emit_goto (offset_p, size_p);
274 }
275
276 static void
277 write_goto_address (CORE_ADDR from, CORE_ADDR to, int size)
278 {
279 target_emit_ops ()->write_goto_address (from, to, size);
280 }
281
282 static void
283 emit_const (LONGEST num)
284 {
285 target_emit_ops ()->emit_const (num);
286 }
287
288 static void
289 emit_reg (int reg)
290 {
291 target_emit_ops ()->emit_reg (reg);
292 }
293
294 static void
295 emit_pop (void)
296 {
297 target_emit_ops ()->emit_pop ();
298 }
299
300 static void
301 emit_stack_flush (void)
302 {
303 target_emit_ops ()->emit_stack_flush ();
304 }
305
306 static void
307 emit_zero_ext (int arg)
308 {
309 target_emit_ops ()->emit_zero_ext (arg);
310 }
311
312 static void
313 emit_swap (void)
314 {
315 target_emit_ops ()->emit_swap ();
316 }
317
318 static void
319 emit_stack_adjust (int n)
320 {
321 target_emit_ops ()->emit_stack_adjust (n);
322 }
323
324 /* FN's prototype is `LONGEST(*fn)(int)'. */
325
326 static void
327 emit_int_call_1 (CORE_ADDR fn, int arg1)
328 {
329 target_emit_ops ()->emit_int_call_1 (fn, arg1);
330 }
331
332 /* FN's prototype is `void(*fn)(int,LONGEST)'. */
333
334 static void
335 emit_void_call_2 (CORE_ADDR fn, int arg1)
336 {
337 target_emit_ops ()->emit_void_call_2 (fn, arg1);
338 }
339
340 static void
341 emit_eq_goto (int *offset_p, int *size_p)
342 {
343 target_emit_ops ()->emit_eq_goto (offset_p, size_p);
344 }
345
346 static void
347 emit_ne_goto (int *offset_p, int *size_p)
348 {
349 target_emit_ops ()->emit_ne_goto (offset_p, size_p);
350 }
351
352 static void
353 emit_lt_goto (int *offset_p, int *size_p)
354 {
355 target_emit_ops ()->emit_lt_goto (offset_p, size_p);
356 }
357
358 static void
359 emit_ge_goto (int *offset_p, int *size_p)
360 {
361 target_emit_ops ()->emit_ge_goto (offset_p, size_p);
362 }
363
364 static void
365 emit_gt_goto (int *offset_p, int *size_p)
366 {
367 target_emit_ops ()->emit_gt_goto (offset_p, size_p);
368 }
369
370 static void
371 emit_le_goto (int *offset_p, int *size_p)
372 {
373 target_emit_ops ()->emit_le_goto (offset_p, size_p);
374 }
375
376 /* Scan an agent expression for any evidence that the given PC is the
377 target of a jump bytecode in the expression. */
378
379 static int
380 is_goto_target (struct agent_expr *aexpr, int pc)
381 {
382 int i;
383 unsigned char op;
384
385 for (i = 0; i < aexpr->length; i += 1 + gdb_agent_op_sizes[op])
386 {
387 op = aexpr->bytes[i];
388
389 if (op == gdb_agent_op_goto || op == gdb_agent_op_if_goto)
390 {
391 int target = (aexpr->bytes[i + 1] << 8) + aexpr->bytes[i + 2];
392 if (target == pc)
393 return 1;
394 }
395 }
396
397 return 0;
398 }
399
400 /* Given an agent expression, turn it into native code. */
401
402 enum eval_result_type
403 compile_bytecodes (struct agent_expr *aexpr)
404 {
405 int pc = 0;
406 int done = 0;
407 unsigned char op, next_op;
408 int arg;
409 /* This is only used to build 64-bit value for constants. */
410 ULONGEST top;
411 struct bytecode_address *aentry, *aentry2;
412
413 #define UNHANDLED \
414 do \
415 { \
416 ax_debug ("Cannot compile op 0x%x\n", op); \
417 return expr_eval_unhandled_opcode; \
418 } while (0)
419
420 if (aexpr->length == 0)
421 {
422 ax_debug ("empty agent expression\n");
423 return expr_eval_empty_expression;
424 }
425
426 bytecode_address_table = NULL;
427
428 while (!done)
429 {
430 op = aexpr->bytes[pc];
431
432 ax_debug ("About to compile op 0x%x, pc=%d\n", op, pc);
433
434 /* Record the compiled-code address of the bytecode, for use by
435 jump instructions. */
436 aentry = XNEW (struct bytecode_address);
437 aentry->pc = pc;
438 aentry->address = current_insn_ptr;
439 aentry->goto_pc = -1;
440 aentry->from_offset = aentry->from_size = 0;
441 aentry->next = bytecode_address_table;
442 bytecode_address_table = aentry;
443
444 ++pc;
445
446 emit_error = 0;
447
448 switch (op)
449 {
450 case gdb_agent_op_add:
451 emit_add ();
452 break;
453
454 case gdb_agent_op_sub:
455 emit_sub ();
456 break;
457
458 case gdb_agent_op_mul:
459 emit_mul ();
460 break;
461
462 case gdb_agent_op_div_signed:
463 UNHANDLED;
464 break;
465
466 case gdb_agent_op_div_unsigned:
467 UNHANDLED;
468 break;
469
470 case gdb_agent_op_rem_signed:
471 UNHANDLED;
472 break;
473
474 case gdb_agent_op_rem_unsigned:
475 UNHANDLED;
476 break;
477
478 case gdb_agent_op_lsh:
479 emit_lsh ();
480 break;
481
482 case gdb_agent_op_rsh_signed:
483 emit_rsh_signed ();
484 break;
485
486 case gdb_agent_op_rsh_unsigned:
487 emit_rsh_unsigned ();
488 break;
489
490 case gdb_agent_op_trace:
491 UNHANDLED;
492 break;
493
494 case gdb_agent_op_trace_quick:
495 UNHANDLED;
496 break;
497
498 case gdb_agent_op_log_not:
499 emit_log_not ();
500 break;
501
502 case gdb_agent_op_bit_and:
503 emit_bit_and ();
504 break;
505
506 case gdb_agent_op_bit_or:
507 emit_bit_or ();
508 break;
509
510 case gdb_agent_op_bit_xor:
511 emit_bit_xor ();
512 break;
513
514 case gdb_agent_op_bit_not:
515 emit_bit_not ();
516 break;
517
518 case gdb_agent_op_equal:
519 next_op = aexpr->bytes[pc];
520 if (next_op == gdb_agent_op_if_goto
521 && !is_goto_target (aexpr, pc)
522 && target_emit_ops ()->emit_eq_goto)
523 {
524 ax_debug ("Combining equal & if_goto");
525 pc += 1;
526 aentry->pc = pc;
527 arg = aexpr->bytes[pc++];
528 arg = (arg << 8) + aexpr->bytes[pc++];
529 aentry->goto_pc = arg;
530 emit_eq_goto (&(aentry->from_offset), &(aentry->from_size));
531 }
532 else if (next_op == gdb_agent_op_log_not
533 && (aexpr->bytes[pc + 1] == gdb_agent_op_if_goto)
534 && !is_goto_target (aexpr, pc + 1)
535 && target_emit_ops ()->emit_ne_goto)
536 {
537 ax_debug ("Combining equal & log_not & if_goto");
538 pc += 2;
539 aentry->pc = pc;
540 arg = aexpr->bytes[pc++];
541 arg = (arg << 8) + aexpr->bytes[pc++];
542 aentry->goto_pc = arg;
543 emit_ne_goto (&(aentry->from_offset), &(aentry->from_size));
544 }
545 else
546 emit_equal ();
547 break;
548
549 case gdb_agent_op_less_signed:
550 next_op = aexpr->bytes[pc];
551 if (next_op == gdb_agent_op_if_goto
552 && !is_goto_target (aexpr, pc))
553 {
554 ax_debug ("Combining less_signed & if_goto");
555 pc += 1;
556 aentry->pc = pc;
557 arg = aexpr->bytes[pc++];
558 arg = (arg << 8) + aexpr->bytes[pc++];
559 aentry->goto_pc = arg;
560 emit_lt_goto (&(aentry->from_offset), &(aentry->from_size));
561 }
562 else if (next_op == gdb_agent_op_log_not
563 && !is_goto_target (aexpr, pc)
564 && (aexpr->bytes[pc + 1] == gdb_agent_op_if_goto)
565 && !is_goto_target (aexpr, pc + 1))
566 {
567 ax_debug ("Combining less_signed & log_not & if_goto");
568 pc += 2;
569 aentry->pc = pc;
570 arg = aexpr->bytes[pc++];
571 arg = (arg << 8) + aexpr->bytes[pc++];
572 aentry->goto_pc = arg;
573 emit_ge_goto (&(aentry->from_offset), &(aentry->from_size));
574 }
575 else
576 emit_less_signed ();
577 break;
578
579 case gdb_agent_op_less_unsigned:
580 emit_less_unsigned ();
581 break;
582
583 case gdb_agent_op_ext:
584 arg = aexpr->bytes[pc++];
585 if (arg < (sizeof (LONGEST) * 8))
586 emit_ext (arg);
587 break;
588
589 case gdb_agent_op_ref8:
590 emit_ref (1);
591 break;
592
593 case gdb_agent_op_ref16:
594 emit_ref (2);
595 break;
596
597 case gdb_agent_op_ref32:
598 emit_ref (4);
599 break;
600
601 case gdb_agent_op_ref64:
602 emit_ref (8);
603 break;
604
605 case gdb_agent_op_if_goto:
606 arg = aexpr->bytes[pc++];
607 arg = (arg << 8) + aexpr->bytes[pc++];
608 aentry->goto_pc = arg;
609 emit_if_goto (&(aentry->from_offset), &(aentry->from_size));
610 break;
611
612 case gdb_agent_op_goto:
613 arg = aexpr->bytes[pc++];
614 arg = (arg << 8) + aexpr->bytes[pc++];
615 aentry->goto_pc = arg;
616 emit_goto (&(aentry->from_offset), &(aentry->from_size));
617 break;
618
619 case gdb_agent_op_const8:
620 emit_stack_flush ();
621 top = aexpr->bytes[pc++];
622 emit_const (top);
623 break;
624
625 case gdb_agent_op_const16:
626 emit_stack_flush ();
627 top = aexpr->bytes[pc++];
628 top = (top << 8) + aexpr->bytes[pc++];
629 emit_const (top);
630 break;
631
632 case gdb_agent_op_const32:
633 emit_stack_flush ();
634 top = aexpr->bytes[pc++];
635 top = (top << 8) + aexpr->bytes[pc++];
636 top = (top << 8) + aexpr->bytes[pc++];
637 top = (top << 8) + aexpr->bytes[pc++];
638 emit_const (top);
639 break;
640
641 case gdb_agent_op_const64:
642 emit_stack_flush ();
643 top = aexpr->bytes[pc++];
644 top = (top << 8) + aexpr->bytes[pc++];
645 top = (top << 8) + aexpr->bytes[pc++];
646 top = (top << 8) + aexpr->bytes[pc++];
647 top = (top << 8) + aexpr->bytes[pc++];
648 top = (top << 8) + aexpr->bytes[pc++];
649 top = (top << 8) + aexpr->bytes[pc++];
650 top = (top << 8) + aexpr->bytes[pc++];
651 emit_const (top);
652 break;
653
654 case gdb_agent_op_reg:
655 emit_stack_flush ();
656 arg = aexpr->bytes[pc++];
657 arg = (arg << 8) + aexpr->bytes[pc++];
658 emit_reg (arg);
659 break;
660
661 case gdb_agent_op_end:
662 ax_debug ("At end of expression\n");
663
664 /* Assume there is one stack element left, and that it is
665 cached in "top" where emit_epilogue can get to it. */
666 emit_stack_adjust (1);
667
668 done = 1;
669 break;
670
671 case gdb_agent_op_dup:
672 /* In our design, dup is equivalent to stack flushing. */
673 emit_stack_flush ();
674 break;
675
676 case gdb_agent_op_pop:
677 emit_pop ();
678 break;
679
680 case gdb_agent_op_zero_ext:
681 arg = aexpr->bytes[pc++];
682 if (arg < (sizeof (LONGEST) * 8))
683 emit_zero_ext (arg);
684 break;
685
686 case gdb_agent_op_swap:
687 next_op = aexpr->bytes[pc];
688 /* Detect greater-than comparison sequences. */
689 if (next_op == gdb_agent_op_less_signed
690 && !is_goto_target (aexpr, pc)
691 && (aexpr->bytes[pc + 1] == gdb_agent_op_if_goto)
692 && !is_goto_target (aexpr, pc + 1))
693 {
694 ax_debug ("Combining swap & less_signed & if_goto");
695 pc += 2;
696 aentry->pc = pc;
697 arg = aexpr->bytes[pc++];
698 arg = (arg << 8) + aexpr->bytes[pc++];
699 aentry->goto_pc = arg;
700 emit_gt_goto (&(aentry->from_offset), &(aentry->from_size));
701 }
702 else if (next_op == gdb_agent_op_less_signed
703 && !is_goto_target (aexpr, pc)
704 && (aexpr->bytes[pc + 1] == gdb_agent_op_log_not)
705 && !is_goto_target (aexpr, pc + 1)
706 && (aexpr->bytes[pc + 2] == gdb_agent_op_if_goto)
707 && !is_goto_target (aexpr, pc + 2))
708 {
709 ax_debug ("Combining swap & less_signed & log_not & if_goto");
710 pc += 3;
711 aentry->pc = pc;
712 arg = aexpr->bytes[pc++];
713 arg = (arg << 8) + aexpr->bytes[pc++];
714 aentry->goto_pc = arg;
715 emit_le_goto (&(aentry->from_offset), &(aentry->from_size));
716 }
717 else
718 emit_swap ();
719 break;
720
721 case gdb_agent_op_getv:
722 emit_stack_flush ();
723 arg = aexpr->bytes[pc++];
724 arg = (arg << 8) + aexpr->bytes[pc++];
725 emit_int_call_1 (get_get_tsv_func_addr (),
726 arg);
727 break;
728
729 case gdb_agent_op_setv:
730 arg = aexpr->bytes[pc++];
731 arg = (arg << 8) + aexpr->bytes[pc++];
732 emit_void_call_2 (get_set_tsv_func_addr (),
733 arg);
734 break;
735
736 case gdb_agent_op_tracev:
737 UNHANDLED;
738 break;
739
740 /* GDB never (currently) generates any of these ops. */
741 case gdb_agent_op_float:
742 case gdb_agent_op_ref_float:
743 case gdb_agent_op_ref_double:
744 case gdb_agent_op_ref_long_double:
745 case gdb_agent_op_l_to_d:
746 case gdb_agent_op_d_to_l:
747 case gdb_agent_op_trace16:
748 UNHANDLED;
749 break;
750
751 default:
752 ax_debug ("Agent expression op 0x%x not recognized\n", op);
753 /* Don't struggle on, things will just get worse. */
754 return expr_eval_unrecognized_opcode;
755 }
756
757 /* This catches errors that occur in target-specific code
758 emission. */
759 if (emit_error)
760 {
761 ax_debug ("Error %d while emitting code for %s\n",
762 emit_error, gdb_agent_op_name (op));
763 return expr_eval_unhandled_opcode;
764 }
765
766 ax_debug ("Op %s compiled\n", gdb_agent_op_name (op));
767 }
768
769 /* Now fill in real addresses as goto destinations. */
770 for (aentry = bytecode_address_table; aentry; aentry = aentry->next)
771 {
772 int written = 0;
773
774 if (aentry->goto_pc < 0)
775 continue;
776
777 /* Find the location that we are going to, and call back into
778 target-specific code to write the actual address or
779 displacement. */
780 for (aentry2 = bytecode_address_table; aentry2; aentry2 = aentry2->next)
781 {
782 if (aentry2->pc == aentry->goto_pc)
783 {
784 ax_debug ("Want to jump from %s to %s\n",
785 paddress (aentry->address),
786 paddress (aentry2->address));
787 write_goto_address (aentry->address + aentry->from_offset,
788 aentry2->address, aentry->from_size);
789 written = 1;
790 break;
791 }
792 }
793
794 /* Error out if we didn't find a destination. */
795 if (!written)
796 {
797 ax_debug ("Destination of goto %d not found\n",
798 aentry->goto_pc);
799 return expr_eval_invalid_goto;
800 }
801 }
802
803 return expr_eval_no_error;
804 }
805
806 #endif
807
808 /* Make printf-type calls using arguments supplied from the host. We
809 need to parse the format string ourselves, and call the formatting
810 function with one argument at a time, partly because there is no
811 safe portable way to construct a varargs call, and partly to serve
812 as a security barrier against bad format strings that might get
813 in. */
814
815 static void
816 ax_printf (CORE_ADDR fn, CORE_ADDR chan, const char *format,
817 int nargs, ULONGEST *args)
818 {
819 const char *f = format;
820 int i;
821 const char *current_substring;
822 int nargs_wanted;
823
824 ax_debug ("Printf of \"%s\" with %d args", format, nargs);
825
826 format_pieces fpieces (&f);
827
828 nargs_wanted = 0;
829 for (auto &&piece : fpieces)
830 if (piece.argclass != literal_piece)
831 ++nargs_wanted;
832
833 if (nargs != nargs_wanted)
834 error (_("Wrong number of arguments for specified format-string"));
835
836 i = 0;
837 for (auto &&piece : fpieces)
838 {
839 current_substring = piece.string;
840 ax_debug ("current substring is '%s', class is %d",
841 current_substring, piece.argclass);
842 switch (piece.argclass)
843 {
844 case string_arg:
845 {
846 gdb_byte *str;
847 CORE_ADDR tem;
848 int j;
849
850 tem = args[i];
851 if (tem == 0)
852 {
853 printf (current_substring, "(null)");
854 break;
855 }
856
857 /* This is a %s argument. Find the length of the string. */
858 for (j = 0;; j++)
859 {
860 gdb_byte c;
861
862 read_inferior_memory (tem + j, &c, 1);
863 if (c == 0)
864 break;
865 }
866
867 /* Copy the string contents into a string inside GDB. */
868 str = (gdb_byte *) alloca (j + 1);
869 if (j != 0)
870 read_inferior_memory (tem, str, j);
871 str[j] = 0;
872
873 printf (current_substring, (char *) str);
874 }
875 break;
876
877 case long_long_arg:
878 #if defined (PRINTF_HAS_LONG_LONG)
879 {
880 long long val = args[i];
881
882 printf (current_substring, val);
883 break;
884 }
885 #else
886 error (_("long long not supported in agent printf"));
887 #endif
888 case int_arg:
889 {
890 int val = args[i];
891
892 printf (current_substring, val);
893 break;
894 }
895
896 case long_arg:
897 {
898 long val = args[i];
899
900 printf (current_substring, val);
901 break;
902 }
903
904 case size_t_arg:
905 {
906 size_t val = args[i];
907
908 printf (current_substring, val);
909 break;
910 }
911
912 case literal_piece:
913 /* Print a portion of the format string that has no
914 directives. Note that this will not include any
915 ordinary %-specs, but it might include "%%". That is
916 why we use printf_filtered and not puts_filtered here.
917 Also, we pass a dummy argument because some platforms
918 have modified GCC to include -Wformat-security by
919 default, which will warn here if there is no
920 argument. */
921 printf (current_substring, 0);
922 break;
923
924 default:
925 error (_("Format directive in '%s' not supported in agent printf"),
926 current_substring);
927 }
928
929 /* Maybe advance to the next argument. */
930 if (piece.argclass != literal_piece)
931 ++i;
932 }
933
934 fflush (stdout);
935 }
936
937 /* The agent expression evaluator, as specified by the GDB docs. It
938 returns 0 if everything went OK, and a nonzero error code
939 otherwise. */
940
941 enum eval_result_type
942 gdb_eval_agent_expr (struct eval_agent_expr_context *ctx,
943 struct agent_expr *aexpr,
944 ULONGEST *rslt)
945 {
946 int pc = 0;
947 #define STACK_MAX 100
948 ULONGEST stack[STACK_MAX], top;
949 int sp = 0;
950 unsigned char op;
951 int arg;
952
953 /* This union is a convenient way to convert representations. For
954 now, assume a standard architecture where the hardware integer
955 types have 8, 16, 32, 64 bit types. A more robust solution would
956 be to import stdint.h from gnulib. */
957 union
958 {
959 union
960 {
961 unsigned char bytes[1];
962 unsigned char val;
963 } u8;
964 union
965 {
966 unsigned char bytes[2];
967 unsigned short val;
968 } u16;
969 union
970 {
971 unsigned char bytes[4];
972 unsigned int val;
973 } u32;
974 union
975 {
976 unsigned char bytes[8];
977 ULONGEST val;
978 } u64;
979 } cnv;
980
981 if (aexpr->length == 0)
982 {
983 ax_debug ("empty agent expression");
984 return expr_eval_empty_expression;
985 }
986
987 /* Cache the stack top in its own variable. Much of the time we can
988 operate on this variable, rather than dinking with the stack. It
989 needs to be copied to the stack when sp changes. */
990 top = 0;
991
992 while (1)
993 {
994 op = aexpr->bytes[pc++];
995
996 ax_debug ("About to interpret byte 0x%x", op);
997
998 switch (op)
999 {
1000 case gdb_agent_op_add:
1001 top += stack[--sp];
1002 break;
1003
1004 case gdb_agent_op_sub:
1005 top = stack[--sp] - top;
1006 break;
1007
1008 case gdb_agent_op_mul:
1009 top *= stack[--sp];
1010 break;
1011
1012 case gdb_agent_op_div_signed:
1013 if (top == 0)
1014 {
1015 ax_debug ("Attempted to divide by zero");
1016 return expr_eval_divide_by_zero;
1017 }
1018 top = ((LONGEST) stack[--sp]) / ((LONGEST) top);
1019 break;
1020
1021 case gdb_agent_op_div_unsigned:
1022 if (top == 0)
1023 {
1024 ax_debug ("Attempted to divide by zero");
1025 return expr_eval_divide_by_zero;
1026 }
1027 top = stack[--sp] / top;
1028 break;
1029
1030 case gdb_agent_op_rem_signed:
1031 if (top == 0)
1032 {
1033 ax_debug ("Attempted to divide by zero");
1034 return expr_eval_divide_by_zero;
1035 }
1036 top = ((LONGEST) stack[--sp]) % ((LONGEST) top);
1037 break;
1038
1039 case gdb_agent_op_rem_unsigned:
1040 if (top == 0)
1041 {
1042 ax_debug ("Attempted to divide by zero");
1043 return expr_eval_divide_by_zero;
1044 }
1045 top = stack[--sp] % top;
1046 break;
1047
1048 case gdb_agent_op_lsh:
1049 top = stack[--sp] << top;
1050 break;
1051
1052 case gdb_agent_op_rsh_signed:
1053 top = ((LONGEST) stack[--sp]) >> top;
1054 break;
1055
1056 case gdb_agent_op_rsh_unsigned:
1057 top = stack[--sp] >> top;
1058 break;
1059
1060 case gdb_agent_op_trace:
1061 agent_mem_read (ctx, NULL, (CORE_ADDR) stack[--sp],
1062 (ULONGEST) top);
1063 if (--sp >= 0)
1064 top = stack[sp];
1065 break;
1066
1067 case gdb_agent_op_trace_quick:
1068 arg = aexpr->bytes[pc++];
1069 agent_mem_read (ctx, NULL, (CORE_ADDR) top, (ULONGEST) arg);
1070 break;
1071
1072 case gdb_agent_op_log_not:
1073 top = !top;
1074 break;
1075
1076 case gdb_agent_op_bit_and:
1077 top &= stack[--sp];
1078 break;
1079
1080 case gdb_agent_op_bit_or:
1081 top |= stack[--sp];
1082 break;
1083
1084 case gdb_agent_op_bit_xor:
1085 top ^= stack[--sp];
1086 break;
1087
1088 case gdb_agent_op_bit_not:
1089 top = ~top;
1090 break;
1091
1092 case gdb_agent_op_equal:
1093 top = (stack[--sp] == top);
1094 break;
1095
1096 case gdb_agent_op_less_signed:
1097 top = (((LONGEST) stack[--sp]) < ((LONGEST) top));
1098 break;
1099
1100 case gdb_agent_op_less_unsigned:
1101 top = (stack[--sp] < top);
1102 break;
1103
1104 case gdb_agent_op_ext:
1105 arg = aexpr->bytes[pc++];
1106 if (arg < (sizeof (LONGEST) * 8))
1107 {
1108 LONGEST mask = 1 << (arg - 1);
1109 top &= ((LONGEST) 1 << arg) - 1;
1110 top = (top ^ mask) - mask;
1111 }
1112 break;
1113
1114 case gdb_agent_op_ref8:
1115 agent_mem_read (ctx, cnv.u8.bytes, (CORE_ADDR) top, 1);
1116 top = cnv.u8.val;
1117 break;
1118
1119 case gdb_agent_op_ref16:
1120 agent_mem_read (ctx, cnv.u16.bytes, (CORE_ADDR) top, 2);
1121 top = cnv.u16.val;
1122 break;
1123
1124 case gdb_agent_op_ref32:
1125 agent_mem_read (ctx, cnv.u32.bytes, (CORE_ADDR) top, 4);
1126 top = cnv.u32.val;
1127 break;
1128
1129 case gdb_agent_op_ref64:
1130 agent_mem_read (ctx, cnv.u64.bytes, (CORE_ADDR) top, 8);
1131 top = cnv.u64.val;
1132 break;
1133
1134 case gdb_agent_op_if_goto:
1135 if (top)
1136 pc = (aexpr->bytes[pc] << 8) + (aexpr->bytes[pc + 1]);
1137 else
1138 pc += 2;
1139 if (--sp >= 0)
1140 top = stack[sp];
1141 break;
1142
1143 case gdb_agent_op_goto:
1144 pc = (aexpr->bytes[pc] << 8) + (aexpr->bytes[pc + 1]);
1145 break;
1146
1147 case gdb_agent_op_const8:
1148 /* Flush the cached stack top. */
1149 stack[sp++] = top;
1150 top = aexpr->bytes[pc++];
1151 break;
1152
1153 case gdb_agent_op_const16:
1154 /* Flush the cached stack top. */
1155 stack[sp++] = top;
1156 top = aexpr->bytes[pc++];
1157 top = (top << 8) + aexpr->bytes[pc++];
1158 break;
1159
1160 case gdb_agent_op_const32:
1161 /* Flush the cached stack top. */
1162 stack[sp++] = top;
1163 top = aexpr->bytes[pc++];
1164 top = (top << 8) + aexpr->bytes[pc++];
1165 top = (top << 8) + aexpr->bytes[pc++];
1166 top = (top << 8) + aexpr->bytes[pc++];
1167 break;
1168
1169 case gdb_agent_op_const64:
1170 /* Flush the cached stack top. */
1171 stack[sp++] = top;
1172 top = aexpr->bytes[pc++];
1173 top = (top << 8) + aexpr->bytes[pc++];
1174 top = (top << 8) + aexpr->bytes[pc++];
1175 top = (top << 8) + aexpr->bytes[pc++];
1176 top = (top << 8) + aexpr->bytes[pc++];
1177 top = (top << 8) + aexpr->bytes[pc++];
1178 top = (top << 8) + aexpr->bytes[pc++];
1179 top = (top << 8) + aexpr->bytes[pc++];
1180 break;
1181
1182 case gdb_agent_op_reg:
1183 /* Flush the cached stack top. */
1184 stack[sp++] = top;
1185 arg = aexpr->bytes[pc++];
1186 arg = (arg << 8) + aexpr->bytes[pc++];
1187 {
1188 int regnum = arg;
1189 struct regcache *regcache = ctx->regcache;
1190
1191 switch (register_size (regcache->tdesc, regnum))
1192 {
1193 case 8:
1194 collect_register (regcache, regnum, cnv.u64.bytes);
1195 top = cnv.u64.val;
1196 break;
1197 case 4:
1198 collect_register (regcache, regnum, cnv.u32.bytes);
1199 top = cnv.u32.val;
1200 break;
1201 case 2:
1202 collect_register (regcache, regnum, cnv.u16.bytes);
1203 top = cnv.u16.val;
1204 break;
1205 case 1:
1206 collect_register (regcache, regnum, cnv.u8.bytes);
1207 top = cnv.u8.val;
1208 break;
1209 default:
1210 internal_error (__FILE__, __LINE__,
1211 "unhandled register size");
1212 }
1213 }
1214 break;
1215
1216 case gdb_agent_op_end:
1217 ax_debug ("At end of expression, sp=%d, stack top cache=0x%s",
1218 sp, pulongest (top));
1219 if (rslt)
1220 {
1221 if (sp <= 0)
1222 {
1223 /* This should be an error */
1224 ax_debug ("Stack is empty, nothing to return");
1225 return expr_eval_empty_stack;
1226 }
1227 *rslt = top;
1228 }
1229 return expr_eval_no_error;
1230
1231 case gdb_agent_op_dup:
1232 stack[sp++] = top;
1233 break;
1234
1235 case gdb_agent_op_pop:
1236 if (--sp >= 0)
1237 top = stack[sp];
1238 break;
1239
1240 case gdb_agent_op_pick:
1241 arg = aexpr->bytes[pc++];
1242 stack[sp] = top;
1243 top = stack[sp - arg];
1244 ++sp;
1245 break;
1246
1247 case gdb_agent_op_rot:
1248 {
1249 ULONGEST tem = stack[sp - 1];
1250
1251 stack[sp - 1] = stack[sp - 2];
1252 stack[sp - 2] = top;
1253 top = tem;
1254 }
1255 break;
1256
1257 case gdb_agent_op_zero_ext:
1258 arg = aexpr->bytes[pc++];
1259 if (arg < (sizeof (LONGEST) * 8))
1260 top &= ((LONGEST) 1 << arg) - 1;
1261 break;
1262
1263 case gdb_agent_op_swap:
1264 /* Interchange top two stack elements, making sure top gets
1265 copied back onto stack. */
1266 stack[sp] = top;
1267 top = stack[sp - 1];
1268 stack[sp - 1] = stack[sp];
1269 break;
1270
1271 case gdb_agent_op_getv:
1272 /* Flush the cached stack top. */
1273 stack[sp++] = top;
1274 arg = aexpr->bytes[pc++];
1275 arg = (arg << 8) + aexpr->bytes[pc++];
1276 top = agent_get_trace_state_variable_value (arg);
1277 break;
1278
1279 case gdb_agent_op_setv:
1280 arg = aexpr->bytes[pc++];
1281 arg = (arg << 8) + aexpr->bytes[pc++];
1282 agent_set_trace_state_variable_value (arg, top);
1283 /* Note that we leave the value on the stack, for the
1284 benefit of later/enclosing expressions. */
1285 break;
1286
1287 case gdb_agent_op_tracev:
1288 arg = aexpr->bytes[pc++];
1289 arg = (arg << 8) + aexpr->bytes[pc++];
1290 agent_tsv_read (ctx, arg);
1291 break;
1292
1293 case gdb_agent_op_tracenz:
1294 agent_mem_read_string (ctx, NULL, (CORE_ADDR) stack[--sp],
1295 (ULONGEST) top);
1296 if (--sp >= 0)
1297 top = stack[sp];
1298 break;
1299
1300 case gdb_agent_op_printf:
1301 {
1302 int nargs, slen, i;
1303 CORE_ADDR fn = 0, chan = 0;
1304 /* Can't have more args than the entire size of the stack. */
1305 ULONGEST args[STACK_MAX];
1306 char *format;
1307
1308 nargs = aexpr->bytes[pc++];
1309 slen = aexpr->bytes[pc++];
1310 slen = (slen << 8) + aexpr->bytes[pc++];
1311 format = (char *) &(aexpr->bytes[pc]);
1312 pc += slen;
1313 /* Pop function and channel. */
1314 fn = top;
1315 if (--sp >= 0)
1316 top = stack[sp];
1317 chan = top;
1318 if (--sp >= 0)
1319 top = stack[sp];
1320 /* Pop arguments into a dedicated array. */
1321 for (i = 0; i < nargs; ++i)
1322 {
1323 args[i] = top;
1324 if (--sp >= 0)
1325 top = stack[sp];
1326 }
1327
1328 /* A bad format string means something is very wrong; give
1329 up immediately. */
1330 if (format[slen - 1] != '\0')
1331 error (_("Unterminated format string in printf bytecode"));
1332
1333 ax_printf (fn, chan, format, nargs, args);
1334 }
1335 break;
1336
1337 /* GDB never (currently) generates any of these ops. */
1338 case gdb_agent_op_float:
1339 case gdb_agent_op_ref_float:
1340 case gdb_agent_op_ref_double:
1341 case gdb_agent_op_ref_long_double:
1342 case gdb_agent_op_l_to_d:
1343 case gdb_agent_op_d_to_l:
1344 case gdb_agent_op_trace16:
1345 ax_debug ("Agent expression op 0x%x valid, but not handled",
1346 op);
1347 /* If ever GDB generates any of these, we don't have the
1348 option of ignoring. */
1349 return expr_eval_unhandled_opcode;
1350
1351 default:
1352 ax_debug ("Agent expression op 0x%x not recognized", op);
1353 /* Don't struggle on, things will just get worse. */
1354 return expr_eval_unrecognized_opcode;
1355 }
1356
1357 /* Check for stack badness. */
1358 if (sp >= (STACK_MAX - 1))
1359 {
1360 ax_debug ("Expression stack overflow");
1361 return expr_eval_stack_overflow;
1362 }
1363
1364 if (sp < 0)
1365 {
1366 ax_debug ("Expression stack underflow");
1367 return expr_eval_stack_underflow;
1368 }
1369
1370 ax_debug ("Op %s -> sp=%d, top=0x%s",
1371 gdb_agent_op_name (op), sp, phex_nz (top, 0));
1372 }
1373 }