Lines Matching refs:ctx
198 static uint32_t zend_gdbjit_strz(zend_gdbjit_ctx *ctx, const char *str) in zend_gdbjit_strz() argument
200 uint8_t *p = ctx->p; in zend_gdbjit_strz()
201 uint32_t ofs = (uint32_t)(p - ctx->startp); in zend_gdbjit_strz()
205 ctx->p = p; in zend_gdbjit_strz()
210 static void zend_gdbjit_uleb128(zend_gdbjit_ctx *ctx, uint32_t v) in zend_gdbjit_uleb128() argument
212 uint8_t *p = ctx->p; in zend_gdbjit_uleb128()
216 ctx->p = p; in zend_gdbjit_uleb128()
220 static void zend_gdbjit_sleb128(zend_gdbjit_ctx *ctx, int32_t v) in zend_gdbjit_sleb128() argument
222 uint8_t *p = ctx->p; in zend_gdbjit_sleb128()
226 ctx->p = p; in zend_gdbjit_sleb128()
229 static void zend_gdbjit_secthdr(zend_gdbjit_ctx *ctx) in zend_gdbjit_secthdr() argument
233 *ctx->p++ = '\0'; in zend_gdbjit_secthdr()
236 sect = &ctx->obj.sect[GDBJIT_SECT_##id]; \ in zend_gdbjit_secthdr()
237 sect->name = zend_gdbjit_strz(ctx, "." #id); \ in zend_gdbjit_secthdr()
243 sect->addr = ctx->mcaddr; in zend_gdbjit_secthdr()
245 sect->size = ctx->szmcode; in zend_gdbjit_secthdr()
255 sect->size = sizeof(ctx->obj.sym); in zend_gdbjit_secthdr()
267 static void zend_gdbjit_symtab(zend_gdbjit_ctx *ctx) in zend_gdbjit_symtab() argument
271 *ctx->p++ = '\0'; in zend_gdbjit_symtab()
273 sym = &ctx->obj.sym[GDBJIT_SYM_FILE]; in zend_gdbjit_symtab()
274 sym->name = zend_gdbjit_strz(ctx, "JIT code"); in zend_gdbjit_symtab()
278 sym = &ctx->obj.sym[GDBJIT_SYM_FUNC]; in zend_gdbjit_symtab()
279 sym->name = zend_gdbjit_strz(ctx, ctx->name); in zend_gdbjit_symtab()
282 sym->size = ctx->szmcode; in zend_gdbjit_symtab()
299 #define DUV(x) (ctx->p = p, zend_gdbjit_uleb128(ctx, (x)), p = ctx->p)
300 #define DSV(x) (ctx->p = p, zend_gdbjit_sleb128(ctx, (x)), p = ctx->p)
301 #define DSTR(str) (ctx->p = p, zend_gdbjit_strz(ctx, (str)), p = ctx->p)
307 static void zend_gdbjit_ehframe(zend_gdbjit_ctx *ctx, uint32_t sp_offset, uint32_t sp_adjustment) in zend_gdbjit_ehframe() argument
309 uint8_t *p = ctx->p; in zend_gdbjit_ehframe()
334 DU32(ctx->szmcode); /* Machine code length. */ in zend_gdbjit_ehframe()
360 ctx->p = p; in zend_gdbjit_ehframe()
363 static void zend_gdbjit_debuginfo(zend_gdbjit_ctx *ctx) in zend_gdbjit_debuginfo() argument
365 uint8_t *p = ctx->p; in zend_gdbjit_debuginfo()
373 DSTR(ctx->filename); /* DW_AT_name. */ in zend_gdbjit_debuginfo()
374 DADDR(ctx->mcaddr); /* DW_AT_low_pc. */ in zend_gdbjit_debuginfo()
375 DADDR(ctx->mcaddr + ctx->szmcode); /* DW_AT_high_pc. */ in zend_gdbjit_debuginfo()
379 ctx->p = p; in zend_gdbjit_debuginfo()
382 static void zend_gdbjit_debugabbrev(zend_gdbjit_ctx *ctx) in zend_gdbjit_debugabbrev() argument
384 uint8_t *p = ctx->p; in zend_gdbjit_debugabbrev()
401 ctx->p = p; in zend_gdbjit_debugabbrev()
406 static void zend_gdbjit_debugline(zend_gdbjit_ctx *ctx) in zend_gdbjit_debugline() argument
408 uint8_t *p = ctx->p; in zend_gdbjit_debugline()
422 DSTR(ctx->filename); DUV(0); DUV(0); DUV(0); in zend_gdbjit_debugline()
426 DADDR(ctx->mcaddr); in zend_gdbjit_debugline()
427 if (ctx->lineno) (DB(DW_LNS_advance_line), DSV(ctx->lineno-1)); in zend_gdbjit_debugline()
429 DB(DW_LNS_advance_pc); DUV(ctx->szmcode); in zend_gdbjit_debugline()
433 ctx->p = p; in zend_gdbjit_debugline()
451 typedef void (*zend_gdbjit_initf) (zend_gdbjit_ctx *ctx);
453 static void zend_gdbjit_initsect(zend_gdbjit_ctx *ctx, int sect) in zend_gdbjit_initsect() argument
455 ctx->startp = ctx->p; in zend_gdbjit_initsect()
456 ctx->obj.sect[sect].ofs = (uintptr_t)((char *)ctx->p - (char *)&ctx->obj); in zend_gdbjit_initsect()
459 static void zend_gdbjit_initsect_done(zend_gdbjit_ctx *ctx, int sect) in zend_gdbjit_initsect_done() argument
461 ctx->obj.sect[sect].size = (uintptr_t)(ctx->p - ctx->startp); in zend_gdbjit_initsect_done()
464 static void zend_gdbjit_buildobj(zend_gdbjit_ctx *ctx, uint32_t sp_offset, uint32_t sp_adjustment) in zend_gdbjit_buildobj() argument
466 zend_gdbjit_obj *obj = &ctx->obj; in zend_gdbjit_buildobj()
474 ctx->p = obj->space; in zend_gdbjit_buildobj()
475 …zend_gdbjit_initsect(ctx, GDBJIT_SECT_shstrtab); zend_gdbjit_secthdr(ctx); zend_gdbjit_initsect_do… in zend_gdbjit_buildobj()
476 …zend_gdbjit_initsect(ctx, GDBJIT_SECT_strtab); zend_gdbjit_symtab(ctx); zend_gdbjit_initsect_done(… in zend_gdbjit_buildobj()
477 …zend_gdbjit_initsect(ctx, GDBJIT_SECT_debug_info); zend_gdbjit_debuginfo(ctx); zend_gdbjit_initsec… in zend_gdbjit_buildobj()
478 …zend_gdbjit_initsect(ctx, GDBJIT_SECT_debug_abbrev); zend_gdbjit_debugabbrev(ctx); zend_gdbjit_ini… in zend_gdbjit_buildobj()
479 …zend_gdbjit_initsect(ctx, GDBJIT_SECT_debug_line); zend_gdbjit_debugline(ctx); zend_gdbjit_initsec… in zend_gdbjit_buildobj()
480 SECTALIGN(ctx->p, sizeof(uintptr_t)); in zend_gdbjit_buildobj()
481 …zend_gdbjit_initsect(ctx, GDBJIT_SECT_eh_frame); zend_gdbjit_ehframe(ctx, sp_offset, sp_adjustment… in zend_gdbjit_buildobj()
482 ctx->objsize = (size_t)((char *)ctx->p - (char *)obj); in zend_gdbjit_buildobj()
484 ZEND_ASSERT(ctx->objsize < sizeof(zend_gdbjit_obj)); in zend_gdbjit_buildobj()
494 zend_gdbjit_ctx ctx; in zend_jit_gdb_register() local
496 ctx.mcaddr = (uintptr_t)start; in zend_jit_gdb_register()
497 ctx.szmcode = (uint32_t)size; in zend_jit_gdb_register()
498 ctx.name = name; in zend_jit_gdb_register()
499 ctx.filename = op_array ? ZSTR_VAL(op_array->filename) : "unknown"; in zend_jit_gdb_register()
500 ctx.lineno = op_array ? op_array->line_start : 0; in zend_jit_gdb_register()
502 zend_gdbjit_buildobj(&ctx, sp_offset, sp_adjustment); in zend_jit_gdb_register()
504 return zend_gdb_register_code(&ctx.obj, ctx.objsize); in zend_jit_gdb_register()