OSDN Git Service

(Libgoblin)
authorKoine Yuusuke(koinec) <koinec@users.osdn.me>
Mon, 9 Sep 2019 20:53:46 +0000 (05:53 +0900)
committerKoine Yuusuke(koinec) <koinec@users.osdn.me>
Mon, 9 Sep 2019 20:53:46 +0000 (05:53 +0900)
  * WorkBackup

libgoblin/drd64_libgoblin_dwarf_expression.c

index 8694d58..4057019 100644 (file)
@@ -755,6 +755,7 @@ DWord
                        case DW_OP_bra:                                 // 0x28
                                break;
                        case DW_OP_call2:                               // 0x98
+                               // 2019/09/10 (Required TEST!!)
                                w_value = *((Word *)pb_now);
                                pb_now          += 2;
                                qw_remain       -= 2;
@@ -765,10 +766,24 @@ DWord
                                p_exp->b_callers++;
                                p_exp->dw_depth         = dw_depth_resume;
                                p_exp->dw_status        = LIBGOBLIN_DWARF_STATUS_CALLING;
+
                                goto    goto_DWARF_Expression_Evaluate_post;
-                               break;
+                               break;  // NOT reach.
                        case DW_OP_call4:                               // 0x99
-                               break;
+                               // 2019/09/10 (Required TEST!!)
+                               dw_value        = *((DWord *)pb_now);
+                               pb_now          += 4;
+                               qw_remain       -= 4;
+                               
+                               p_exp->qw_calloffset    = (QWord)dw_value;
+                               p_exp->caller[ p_exp->b_callers ].pb_return             = pb_resume;
+                               p_exp->caller[ p_exp->b_callers ].qw_retremain  = qw_resume;
+                               p_exp->b_callers++;
+                               p_exp->dw_depth         = dw_depth_resume;
+                               p_exp->dw_status        = LIBGOBLIN_DWARF_STATUS_CALLING;
+
+                               goto    goto_DWARF_Expression_Evaluate_post;
+                               break;  // NOT reach.
                        case DW_OP_call_ref:                    // 0x9a
                                break;