Skip to content

Commit dbd0bfc

Browse files
committed
Implemented AArch64 support for GDB/JIT interface.
Stack frame description is not accurate, so backtraces that involved JIT-ed code may be brocken. Disassemble and breakpoints on JIT-ed code work fine.
1 parent 272edad commit dbd0bfc

File tree

2 files changed

+11
-6
lines changed

2 files changed

+11
-6
lines changed

ext/opcache/jit/zend_jit.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -215,10 +215,8 @@ static bool zend_is_commutative(zend_uchar opcode)
215215
#include "jit/zend_jit_helpers.c"
216216
#include "jit/zend_jit_disasm.c"
217217
#ifndef _WIN32
218-
#if defined(__x86_64__) || defined(i386)
219218
# include "jit/zend_jit_gdb.c"
220-
#endif
221-
#include "jit/zend_jit_perf_dump.c"
219+
# include "jit/zend_jit_perf_dump.c"
222220
#endif
223221
#ifdef HAVE_OPROFILE
224222
# include "jit/zend_jit_oprofile.c"

ext/opcache/jit/zend_jit_gdb.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
*/
2222

2323

24-
#if defined(__x86_64__) || defined(i386)
24+
#if defined(__x86_64__) || defined(i386) || defined(__aarch64__)
2525

2626
#define HAVE_GDB
2727

@@ -93,7 +93,9 @@ enum {
9393
DW_REG_8, DW_REG_9, DW_REG_10, DW_REG_11,
9494
DW_REG_12, DW_REG_13, DW_REG_14, DW_REG_15,
9595
DW_REG_RA,
96-
/* TODO: ARM supports? */
96+
#elif defined(__aarch64__)
97+
DW_REG_SP = 31,
98+
DW_REG_RA = 30,
9799
#else
98100
#error "Unsupported target architecture"
99101
#endif
@@ -161,6 +163,8 @@ static const zend_elf_header zend_elfhdr_template = {
161163
.machine = 3,
162164
#elif defined(__x86_64__)
163165
.machine = 62,
166+
#elif defined(__aarch64__)
167+
.machine = 183,
164168
#else
165169
# error "Unsupported target architecture"
166170
#endif
@@ -328,6 +332,9 @@ static void zend_gdbjit_ehframe(zend_gdbjit_ctx *ctx)
328332
#elif defined(__x86_64__)
329333
DB(DW_CFA_advance_loc|4); /* sub $0x8,%rsp */
330334
DB(DW_CFA_def_cfa_offset); DUV(16); /* Aligned stack frame size. */
335+
#elif defined(__aarch64__)
336+
DB(DW_CFA_advance_loc|1); /* Only an approximation. */
337+
DB(DW_CFA_def_cfa_offset); DUV(32); /* Aligned stack frame size. */
331338
#else
332339
# error "Unsupported target architecture"
333340
#endif
@@ -493,4 +500,4 @@ static void zend_jit_gdb_init(void)
493500
#endif
494501
}
495502

496-
#endif /* defined(__x86_64__) || defined(i386) */
503+
#endif /* defined(__x86_64__) || defined(i386) || defined(__aarch64__) */

0 commit comments

Comments
 (0)