Lines Matching refs:ctx
193 static uint32_t ir_gdbjit_strz(ir_gdbjit_ctx *ctx, const char *str) in ir_gdbjit_strz() argument
195 uint8_t *p = ctx->p; in ir_gdbjit_strz()
196 uint32_t ofs = (uint32_t)(p - ctx->startp); in ir_gdbjit_strz()
200 ctx->p = p; in ir_gdbjit_strz()
205 static void ir_gdbjit_uleb128(ir_gdbjit_ctx *ctx, uint32_t v) in ir_gdbjit_uleb128() argument
207 uint8_t *p = ctx->p; in ir_gdbjit_uleb128()
211 ctx->p = p; in ir_gdbjit_uleb128()
215 static void ir_gdbjit_sleb128(ir_gdbjit_ctx *ctx, int32_t v) in ir_gdbjit_sleb128() argument
217 uint8_t *p = ctx->p; in ir_gdbjit_sleb128()
221 ctx->p = p; in ir_gdbjit_sleb128()
224 static void ir_gdbjit_secthdr(ir_gdbjit_ctx *ctx) in ir_gdbjit_secthdr() argument
228 *ctx->p++ = '\0'; in ir_gdbjit_secthdr()
231 sect = &ctx->obj.sect[GDBJIT_SECT_##id]; \ in ir_gdbjit_secthdr()
232 sect->name = ir_gdbjit_strz(ctx, "." #id); \ in ir_gdbjit_secthdr()
238 sect->addr = ctx->mcaddr; in ir_gdbjit_secthdr()
240 sect->size = ctx->szmcode; in ir_gdbjit_secthdr()
250 sect->size = sizeof(ctx->obj.sym); in ir_gdbjit_secthdr()
262 static void ir_gdbjit_symtab(ir_gdbjit_ctx *ctx) in ir_gdbjit_symtab() argument
266 *ctx->p++ = '\0'; in ir_gdbjit_symtab()
268 sym = &ctx->obj.sym[GDBJIT_SYM_FILE]; in ir_gdbjit_symtab()
269 sym->name = ir_gdbjit_strz(ctx, "JIT code"); in ir_gdbjit_symtab()
273 sym = &ctx->obj.sym[GDBJIT_SYM_FUNC]; in ir_gdbjit_symtab()
274 sym->name = ir_gdbjit_strz(ctx, ctx->name); in ir_gdbjit_symtab()
277 sym->size = ctx->szmcode; in ir_gdbjit_symtab()
294 #define DUV(x) (ctx->p = p, ir_gdbjit_uleb128(ctx, (x)), p = ctx->p)
295 #define DSV(x) (ctx->p = p, ir_gdbjit_sleb128(ctx, (x)), p = ctx->p)
296 #define DSTR(str) (ctx->p = p, ir_gdbjit_strz(ctx, (str)), p = ctx->p)
302 static void ir_gdbjit_ehframe(ir_gdbjit_ctx *ctx, uint32_t sp_offset, uint32_t sp_adjustment) in ir_gdbjit_ehframe() argument
304 uint8_t *p = ctx->p; in ir_gdbjit_ehframe()
329 DU32(ctx->szmcode); /* Machine code length. */ in ir_gdbjit_ehframe()
355 ctx->p = p; in ir_gdbjit_ehframe()
358 static void ir_gdbjit_debuginfo(ir_gdbjit_ctx *ctx) in ir_gdbjit_debuginfo() argument
360 uint8_t *p = ctx->p; in ir_gdbjit_debuginfo()
368 DSTR(ctx->filename); /* DW_AT_name. */ in ir_gdbjit_debuginfo()
369 DADDR(ctx->mcaddr); /* DW_AT_low_pc. */ in ir_gdbjit_debuginfo()
370 DADDR(ctx->mcaddr + ctx->szmcode); /* DW_AT_high_pc. */ in ir_gdbjit_debuginfo()
374 ctx->p = p; in ir_gdbjit_debuginfo()
377 static void ir_gdbjit_debugabbrev(ir_gdbjit_ctx *ctx) in ir_gdbjit_debugabbrev() argument
379 uint8_t *p = ctx->p; in ir_gdbjit_debugabbrev()
397 ctx->p = p; in ir_gdbjit_debugabbrev()
402 static void ir_gdbjit_debugline(ir_gdbjit_ctx *ctx) in ir_gdbjit_debugline() argument
404 uint8_t *p = ctx->p; in ir_gdbjit_debugline()
418 DSTR(ctx->filename); DUV(0); DUV(0); DUV(0); in ir_gdbjit_debugline()
422 DADDR(ctx->mcaddr); in ir_gdbjit_debugline()
423 if (ctx->lineno) (DB(DW_LNS_advance_line), DSV(ctx->lineno-1)); in ir_gdbjit_debugline()
425 DB(DW_LNS_advance_pc); DUV(ctx->szmcode); in ir_gdbjit_debugline()
429 ctx->p = p; in ir_gdbjit_debugline()
447 typedef void (*ir_gdbjit_initf) (ir_gdbjit_ctx *ctx);
449 static void ir_gdbjit_initsect(ir_gdbjit_ctx *ctx, int sect) in ir_gdbjit_initsect() argument
451 ctx->startp = ctx->p; in ir_gdbjit_initsect()
452 ctx->obj.sect[sect].ofs = (uintptr_t)((char *)ctx->p - (char *)&ctx->obj); in ir_gdbjit_initsect()
455 static void ir_gdbjit_initsect_done(ir_gdbjit_ctx *ctx, int sect) in ir_gdbjit_initsect_done() argument
457 ctx->obj.sect[sect].size = (uintptr_t)(ctx->p - ctx->startp); in ir_gdbjit_initsect_done()
460 static void ir_gdbjit_buildobj(ir_gdbjit_ctx *ctx, uint32_t sp_offset, uint32_t sp_adjustment) in ir_gdbjit_buildobj() argument
462 ir_gdbjit_obj *obj = &ctx->obj; in ir_gdbjit_buildobj()
470 ctx->p = obj->space; in ir_gdbjit_buildobj()
471 …ir_gdbjit_initsect(ctx, GDBJIT_SECT_shstrtab); ir_gdbjit_secthdr(ctx); ir_gdbjit_initsect_done(ctx… in ir_gdbjit_buildobj()
472 …ir_gdbjit_initsect(ctx, GDBJIT_SECT_strtab); ir_gdbjit_symtab(ctx); ir_gdbjit_initsect_done(ctx, G… in ir_gdbjit_buildobj()
473 …ir_gdbjit_initsect(ctx, GDBJIT_SECT_debug_info); ir_gdbjit_debuginfo(ctx); ir_gdbjit_initsect_done… in ir_gdbjit_buildobj()
474 …ir_gdbjit_initsect(ctx, GDBJIT_SECT_debug_abbrev); ir_gdbjit_debugabbrev(ctx); ir_gdbjit_initsect_… in ir_gdbjit_buildobj()
475 …ir_gdbjit_initsect(ctx, GDBJIT_SECT_debug_line); ir_gdbjit_debugline(ctx); ir_gdbjit_initsect_done… in ir_gdbjit_buildobj()
476 SECTALIGN(ctx->p, sizeof(uintptr_t)); in ir_gdbjit_buildobj()
477 …ir_gdbjit_initsect(ctx, GDBJIT_SECT_eh_frame); ir_gdbjit_ehframe(ctx, sp_offset, sp_adjustment); i… in ir_gdbjit_buildobj()
478 ctx->objsize = (size_t)((char *)ctx->p - (char *)obj); in ir_gdbjit_buildobj()
480 IR_ASSERT(ctx->objsize < sizeof(ir_gdbjit_obj)); in ir_gdbjit_buildobj()
637 ir_gdbjit_ctx ctx; in ir_gdb_register() local
639 ctx.mcaddr = (uintptr_t)start; in ir_gdb_register()
640 ctx.szmcode = (uint32_t)size; in ir_gdb_register()
641 ctx.name = name; in ir_gdb_register()
642 ctx.filename = "unknown"; in ir_gdb_register()
643 ctx.lineno = 0; in ir_gdb_register()
645 ir_gdbjit_buildobj(&ctx, sp_offset, sp_adjustment); in ir_gdb_register()
647 return ir_gdb_register_code(&ctx.obj, ctx.objsize); in ir_gdb_register()