Lines Matching refs:ctx
193 static uint32_t zend_gdbjit_strz(zend_gdbjit_ctx *ctx, const char *str) in zend_gdbjit_strz() argument
195 uint8_t *p = ctx->p; in zend_gdbjit_strz()
196 uint32_t ofs = (uint32_t)(p - ctx->startp); in zend_gdbjit_strz()
200 ctx->p = p; in zend_gdbjit_strz()
205 static void zend_gdbjit_uleb128(zend_gdbjit_ctx *ctx, uint32_t v) in zend_gdbjit_uleb128() argument
207 uint8_t *p = ctx->p; in zend_gdbjit_uleb128()
211 ctx->p = p; in zend_gdbjit_uleb128()
215 static void zend_gdbjit_sleb128(zend_gdbjit_ctx *ctx, int32_t v) in zend_gdbjit_sleb128() argument
217 uint8_t *p = ctx->p; in zend_gdbjit_sleb128()
221 ctx->p = p; in zend_gdbjit_sleb128()
224 static void zend_gdbjit_secthdr(zend_gdbjit_ctx *ctx) in zend_gdbjit_secthdr() argument
228 *ctx->p++ = '\0'; in zend_gdbjit_secthdr()
231 sect = &ctx->obj.sect[GDBJIT_SECT_##id]; \ in zend_gdbjit_secthdr()
232 sect->name = zend_gdbjit_strz(ctx, "." #id); \ in zend_gdbjit_secthdr()
238 sect->addr = ctx->mcaddr; in zend_gdbjit_secthdr()
240 sect->size = ctx->szmcode; in zend_gdbjit_secthdr()
250 sect->size = sizeof(ctx->obj.sym); in zend_gdbjit_secthdr()
262 static void zend_gdbjit_symtab(zend_gdbjit_ctx *ctx) in zend_gdbjit_symtab() argument
266 *ctx->p++ = '\0'; in zend_gdbjit_symtab()
268 sym = &ctx->obj.sym[GDBJIT_SYM_FILE]; in zend_gdbjit_symtab()
269 sym->name = zend_gdbjit_strz(ctx, "JIT code"); in zend_gdbjit_symtab()
273 sym = &ctx->obj.sym[GDBJIT_SYM_FUNC]; in zend_gdbjit_symtab()
274 sym->name = zend_gdbjit_strz(ctx, ctx->name); in zend_gdbjit_symtab()
277 sym->size = ctx->szmcode; in zend_gdbjit_symtab()
290 #define DUV(x) (ctx->p = p, zend_gdbjit_uleb128(ctx, (x)), p = ctx->p)
291 #define DSV(x) (ctx->p = p, zend_gdbjit_sleb128(ctx, (x)), p = ctx->p)
292 #define DSTR(str) (ctx->p = p, zend_gdbjit_strz(ctx, (str)), p = ctx->p)
298 static void zend_gdbjit_ehframe(zend_gdbjit_ctx *ctx) in zend_gdbjit_ehframe() argument
300 uint8_t *p = ctx->p; in zend_gdbjit_ehframe()
321 DU32(ctx->szmcode); /* Machine code length. */ in zend_gdbjit_ehframe()
336 ctx->p = p; in zend_gdbjit_ehframe()
339 static void zend_gdbjit_debuginfo(zend_gdbjit_ctx *ctx) in zend_gdbjit_debuginfo() argument
341 uint8_t *p = ctx->p; in zend_gdbjit_debuginfo()
349 DSTR(ctx->filename); /* DW_AT_name. */ in zend_gdbjit_debuginfo()
350 DADDR(ctx->mcaddr); /* DW_AT_low_pc. */ in zend_gdbjit_debuginfo()
351 DADDR(ctx->mcaddr + ctx->szmcode); /* DW_AT_high_pc. */ in zend_gdbjit_debuginfo()
355 ctx->p = p; in zend_gdbjit_debuginfo()
358 static void zend_gdbjit_debugabbrev(zend_gdbjit_ctx *ctx) in zend_gdbjit_debugabbrev() argument
360 uint8_t *p = ctx->p; in zend_gdbjit_debugabbrev()
377 ctx->p = p; in zend_gdbjit_debugabbrev()
382 static void zend_gdbjit_debugline(zend_gdbjit_ctx *ctx) in zend_gdbjit_debugline() argument
384 uint8_t *p = ctx->p; in zend_gdbjit_debugline()
398 DSTR(ctx->filename); DUV(0); DUV(0); DUV(0); in zend_gdbjit_debugline()
402 DADDR(ctx->mcaddr); in zend_gdbjit_debugline()
403 if (ctx->lineno) (DB(DW_LNS_advance_line), DSV(ctx->lineno-1)); in zend_gdbjit_debugline()
405 DB(DW_LNS_advance_pc); DUV(ctx->szmcode); in zend_gdbjit_debugline()
409 ctx->p = p; in zend_gdbjit_debugline()
427 typedef void (*zend_gdbjit_initf) (zend_gdbjit_ctx *ctx);
429 static void zend_gdbjit_initsect(zend_gdbjit_ctx *ctx, int sect, zend_gdbjit_initf initf) in zend_gdbjit_initsect() argument
431 ctx->startp = ctx->p; in zend_gdbjit_initsect()
432 ctx->obj.sect[sect].ofs = (uintptr_t)((char *)ctx->p - (char *)&ctx->obj); in zend_gdbjit_initsect()
433 initf(ctx); in zend_gdbjit_initsect()
434 ctx->obj.sect[sect].size = (uintptr_t)(ctx->p - ctx->startp); in zend_gdbjit_initsect()
437 static void zend_gdbjit_buildobj(zend_gdbjit_ctx *ctx) in zend_gdbjit_buildobj() argument
439 zend_gdbjit_obj *obj = &ctx->obj; in zend_gdbjit_buildobj()
447 ctx->p = obj->space; in zend_gdbjit_buildobj()
448 zend_gdbjit_initsect(ctx, GDBJIT_SECT_shstrtab, zend_gdbjit_secthdr); in zend_gdbjit_buildobj()
449 zend_gdbjit_initsect(ctx, GDBJIT_SECT_strtab, zend_gdbjit_symtab); in zend_gdbjit_buildobj()
450 zend_gdbjit_initsect(ctx, GDBJIT_SECT_debug_info, zend_gdbjit_debuginfo); in zend_gdbjit_buildobj()
451 zend_gdbjit_initsect(ctx, GDBJIT_SECT_debug_abbrev, zend_gdbjit_debugabbrev); in zend_gdbjit_buildobj()
452 zend_gdbjit_initsect(ctx, GDBJIT_SECT_debug_line, zend_gdbjit_debugline); in zend_gdbjit_buildobj()
453 SECTALIGN(ctx->p, sizeof(uintptr_t)); in zend_gdbjit_buildobj()
454 zend_gdbjit_initsect(ctx, GDBJIT_SECT_eh_frame, zend_gdbjit_ehframe); in zend_gdbjit_buildobj()
455 ctx->objsize = (size_t)((char *)ctx->p - (char *)obj); in zend_gdbjit_buildobj()
457 ZEND_ASSERT(ctx->objsize < sizeof(zend_gdbjit_obj)); in zend_gdbjit_buildobj()
465 zend_gdbjit_ctx ctx; in zend_jit_gdb_register() local
467 ctx.mcaddr = (uintptr_t)start; in zend_jit_gdb_register()
468 ctx.szmcode = (uint32_t)size; in zend_jit_gdb_register()
469 ctx.name = name; in zend_jit_gdb_register()
470 ctx.filename = op_array ? ZSTR_VAL(op_array->filename) : "unknown"; in zend_jit_gdb_register()
471 ctx.lineno = op_array ? op_array->line_start : 0; in zend_jit_gdb_register()
473 zend_gdbjit_buildobj(&ctx); in zend_jit_gdb_register()
475 return zend_gdb_register_code(&ctx.obj, ctx.objsize); in zend_jit_gdb_register()