)]}'
{
  "commit": "b995344c116e04bd6bfeaf53364cd791d0dae45d",
  "tree": "6db3b94a147300dc45cf962a64aa1721053cfcce",
  "parents": [
    "1a7d840a2164072cb776c21b0bda5710deebd542"
  ],
  "author": {
    "name": "Thiago Jung Bauermann",
    "email": "thiago.bauermann@linaro.org",
    "time": "Sat Apr 27 18:38:22 2024 -0300"
  },
  "committer": {
    "name": "Thiago Jung Bauermann",
    "email": "thiago.bauermann@linaro.org",
    "time": "Fri Jun 07 18:25:06 2024 -0300"
  },
  "message": "gdb/aarch64: Disable displaced single-step for MOPS instructions\n\nThe AArch64 MOPS (Memory Operation) instructions provide a standardised\ninstruction sequence to perform a memset, memcpy or memmove.  A sequence is\nalways composed of three instructions: a prologue instruction, a main\ninstruction and an epilogue instruction.  As an illustration, here are the\nimplementations of these memory operations in glibc 2.39:\n\n  (gdb) disassemble/r\n  Dump of assembler code for function __memset_mops:\n  \u003d\u003e 0x0000fffff7e8d780 \u003c+0\u003e:     d503201f        nop\n     0x0000fffff7e8d784 \u003c+4\u003e:     aa0003e3        mov     x3, x0\n     0x0000fffff7e8d788 \u003c+8\u003e:     19c10443        setp    [x3]!, x2!, x1\n     0x0000fffff7e8d78c \u003c+12\u003e:    19c14443        setm    [x3]!, x2!, x1\n     0x0000fffff7e8d790 \u003c+16\u003e:    19c18443        sete    [x3]!, x2!, x1\n     0x0000fffff7e8d794 \u003c+20\u003e:    d65f03c0        ret\n  End of assembler dump.\n\n  (gdb) disassemble/r\n  Dump of assembler code for function __memcpy_mops:\n  \u003d\u003e 0x0000fffff7e8c580 \u003c+0\u003e:     d503201f        nop\n     0x0000fffff7e8c584 \u003c+4\u003e:     aa0003e3        mov     x3, x0\n     0x0000fffff7e8c588 \u003c+8\u003e:     19010443        cpyfp   [x3]!, [x1]!, x2!\n     0x0000fffff7e8c58c \u003c+12\u003e:    19410443        cpyfm   [x3]!, [x1]!, x2!\n     0x0000fffff7e8c590 \u003c+16\u003e:    19810443        cpyfe   [x3]!, [x1]!, x2!\n     0x0000fffff7e8c594 \u003c+20\u003e:    d65f03c0        ret\n  End of assembler dump.\n\n  (gdb) disassemble/r\n  Dump of assembler code for function __memmove_mops:\n  \u003d\u003e 0x0000fffff7e8d180 \u003c+0\u003e:     d503201f        nop\n     0x0000fffff7e8d184 \u003c+4\u003e:     aa0003e3        mov     x3, x0\n     0x0000fffff7e8d188 \u003c+8\u003e:     1d010443        cpyp    [x3]!, [x1]!, x2!\n     0x0000fffff7e8d18c \u003c+12\u003e:    1d410443        cpym    [x3]!, [x1]!, x2!\n     0x0000fffff7e8d190 \u003c+16\u003e:    1d810443        cpye    [x3]!, [x1]!, x2!\n     0x0000fffff7e8d194 \u003c+20\u003e:    d65f03c0        ret\n  End of assembler dump.\n\nThe Arm Architecture Reference Manual says that \"the prologue, main, and\nepilogue instructions are expected to be run in succession and to appear\nconsecutively in memory\".  Therefore this patch disables displaced stepping\non them.\n\nThe testcase verifies that MOPS sequences are correctly single-stepped.\n\nPR tdep/31666\nBug: https://sourceware.org/bugzilla/show_bug.cgi?id\u003d31666\nApproved-By: Luis Machado \u003cluis.machado@arm.com\u003e\nTested-By: Luis Machado \u003cluis.machado@arm.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "8d0553f3d7cdb9599640c0f93786034a9472332b",
      "old_mode": 33188,
      "old_path": "gdb/aarch64-tdep.c",
      "new_id": "05ecd421cd0e38c6b3040f2c035dd9cad110cce3",
      "new_mode": 33188,
      "new_path": "gdb/aarch64-tdep.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4a27867d4b5708f2e62e9a3c5944cc8c3100c82f",
      "new_mode": 33188,
      "new_path": "gdb/testsuite/gdb.arch/aarch64-mops-single-step.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2cb5fdcca36b3db2d61472afd69da03beeff821a",
      "new_mode": 33188,
      "new_path": "gdb/testsuite/gdb.arch/aarch64-mops-single-step.exp"
    },
    {
      "type": "modify",
      "old_id": "5aeaa8d09b47af4ee951d7dc95ffea8c250a2931",
      "old_mode": 33188,
      "old_path": "gdb/testsuite/lib/gdb.exp",
      "new_id": "590cd4583744b36964dbeaf4002a3f7c646ba4f7",
      "new_mode": 33188,
      "new_path": "gdb/testsuite/lib/gdb.exp"
    }
  ]
}
