php-internal-docs 8.4.8
Unofficial docs for php/php-src
Loading...
Searching...
No Matches
ir_gdb.c File Reference
#include <stddef.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include "ir.h"
#include "ir_private.h"
#include "ir_elf.h"

Go to the source code of this file.

Data Structures

struct  _ir_gdbjit_obj
 
struct  _ir_gdbjit_ctx
 
struct  _ir_gdbjit_code_entry
 
struct  _ir_gdbjit_descriptor
 

Macros

#define DW_CIE_VERSION   1
 
#define SECTDEF(id, tp, al)
 
#define SECTALIGN(p, a)
 
#define DB(x)
 
#define DI8(x)
 
#define DU16(x)
 
#define DU32(x)
 
#define DADDR(x)
 
#define DUV(x)
 
#define DSV(x)
 
#define DSTR(str)
 
#define DALIGNNOP(s)
 
#define DSECT(name, stmt)
 
#define DLNE(op, s)
 

Typedefs

typedef struct _ir_gdbjit_obj ir_gdbjit_obj
 
typedef struct _ir_gdbjit_ctx ir_gdbjit_ctx
 
typedef void(* ir_gdbjit_initf) (ir_gdbjit_ctx *ctx)
 
typedef struct _ir_gdbjit_code_entry ir_gdbjit_code_entry
 
typedef struct _ir_gdbjit_descriptor ir_gdbjit_descriptor
 

Enumerations

enum  {
  DW_CFA_nop = 0x0 , DW_CFA_offset_extended = 0x5 , DW_CFA_def_cfa = 0xc , DW_CFA_def_cfa_offset = 0xe ,
  DW_CFA_offset_extended_sf = 0x11 , DW_CFA_advance_loc = 0x40 , DW_CFA_offset = 0x80
}
 
enum  { DW_EH_PE_udata4 = 0x03 , DW_EH_PE_textrel = 0x20 }
 
enum  { DW_TAG_compile_unit = 0x11 }
 
enum  { DW_children_no = 0 , DW_children_yes = 1 }
 
enum  { DW_AT_name = 0x03 , DW_AT_stmt_list = 0x10 , DW_AT_low_pc = 0x11 , DW_AT_high_pc = 0x12 }
 
enum  { DW_FORM_addr = 0x01 , DW_FORM_data4 = 0x06 , DW_FORM_string = 0x08 }
 
enum  { DW_LNS_extended_op = 0 , DW_LNS_copy = 1 , DW_LNS_advance_pc = 2 , DW_LNS_advance_line = 3 }
 
enum  { DW_LNE_end_sequence = 1 , DW_LNE_set_address = 2 }
 
enum  
 
enum  {
  GDBJIT_SECT_NULL , GDBJIT_SECT_text , GDBJIT_SECT_eh_frame , GDBJIT_SECT_shstrtab ,
  GDBJIT_SECT_strtab , GDBJIT_SECT_symtab , GDBJIT_SECT_debug_info , GDBJIT_SECT_debug_abbrev ,
  GDBJIT_SECT_debug_line , GDBJIT_SECT__MAX
}
 
enum  { GDBJIT_SYM_UNDEF , GDBJIT_SYM_FILE , GDBJIT_SYM_FUNC , GDBJIT_SYM__MAX }
 
enum  { IR_GDBJIT_NOACTION , IR_GDBJIT_REGISTER , IR_GDBJIT_UNREGISTER }
 

Functions

typedef IR_SET_ALIGNED (1, uint16_t unaligned_uint16_t)
 
typedef IR_SET_ALIGNED (1, uint32_t unaligned_uint32_t)
 
typedef IR_SET_ALIGNED (1, uintptr_t unaligned_uintptr_t)
 
IR_NEVER_INLINE void __jit_debug_register_code (void)
 
void ir_gdb_unregister_all (void)
 
bool ir_gdb_present (void)
 
int ir_gdb_register (const char *name, const void *start, size_t size, uint32_t sp_offset, uint32_t sp_adjustment)
 
void ir_gdb_init (void)
 

Variables

ir_gdbjit_descriptor __jit_debug_descriptor
 

Macro Definition Documentation

◆ DADDR

#define DADDR ( x)
Value:
(*(unaligned_uintptr_t *)p = (x), p += sizeof(uintptr_t))
p
Definition session.c:1105

Definition at line 293 of file ir_gdb.c.

◆ DALIGNNOP

#define DALIGNNOP ( s)
Value:
while ((uintptr_t)p & ((s)-1)) *p++ = DW_CFA_nop
char s[4]
Definition cdf.c:77
@ DW_CFA_nop
Definition ir_gdb.c:30

Definition at line 297 of file ir_gdb.c.

◆ DB

#define DB ( x)
Value:
(*p++ = (x))

Definition at line 289 of file ir_gdb.c.

◆ DI8

#define DI8 ( x)
Value:
(*(int8_t *)p = (x), p++)

Definition at line 290 of file ir_gdb.c.

◆ DLNE

#define DLNE ( op,
s )
Value:
(DB(DW_LNS_extended_op), DUV(1+(s)), DB((op)))
#define DB(x)
Definition ir_gdb.c:289
#define DUV(x)
Definition ir_gdb.c:294
@ DW_LNS_extended_op
Definition ir_gdb.c:67

Definition at line 400 of file ir_gdb.c.

◆ DSECT

#define DSECT ( name,
stmt )
Value:
{ unaligned_uint32_t *szp_##name = (uint32_t *)p; p += 4; stmt \
*szp_##name = (uint32_t)((p-(uint8_t *)szp_##name)-4); }
zend_string * name

Definition at line 298 of file ir_gdb.c.

◆ DSTR

#define DSTR ( str)
Value:
(ctx->p = p, ir_gdbjit_strz(ctx, (str)), p = ctx->p)

Definition at line 296 of file ir_gdb.c.

◆ DSV

#define DSV ( x)
Value:
(ctx->p = p, ir_gdbjit_sleb128(ctx, (x)), p = ctx->p)

Definition at line 295 of file ir_gdb.c.

◆ DU16

#define DU16 ( x)
Value:
(*(unaligned_uint16_t *)p = (x), p += 2)

Definition at line 291 of file ir_gdb.c.

◆ DU32

#define DU32 ( x)
Value:
(*(unaligned_uint32_t *)p = (x), p += 4)

Definition at line 292 of file ir_gdb.c.

◆ DUV

#define DUV ( x)
Value:
(ctx->p = p, ir_gdbjit_uleb128(ctx, (x)), p = ctx->p)

Definition at line 294 of file ir_gdb.c.

◆ DW_CIE_VERSION

#define DW_CIE_VERSION   1

Definition at line 26 of file ir_gdb.c.

◆ SECTALIGN

#define SECTALIGN ( p,
a )
Value:
((p) = (uint8_t *)(((uintptr_t)(p) + ((a)-1)) & ~(uintptr_t)((a)-1)))
$obj a
Definition test.php:84

Definition at line 285 of file ir_gdb.c.

◆ SECTDEF

#define SECTDEF ( id,
tp,
al )
Value:
sect = &ctx->obj.sect[GDBJIT_SECT_##id]; \
sect->name = ir_gdbjit_strz(ctx, "." #id); \
sect->type = ELFSECT_TYPE_##tp; \
sect->align = (al)

Typedef Documentation

◆ ir_gdbjit_code_entry

◆ ir_gdbjit_ctx

typedef struct _ir_gdbjit_ctx ir_gdbjit_ctx

◆ ir_gdbjit_descriptor

◆ ir_gdbjit_initf

typedef void(* ir_gdbjit_initf) (ir_gdbjit_ctx *ctx)

Definition at line 447 of file ir_gdb.c.

◆ ir_gdbjit_obj

typedef struct _ir_gdbjit_obj ir_gdbjit_obj

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
DW_TAG_compile_unit 

Definition at line 44 of file ir_gdb.c.

◆ anonymous enum

anonymous enum
Enumerator
GDBJIT_SYM_UNDEF 
GDBJIT_SYM_FILE 
GDBJIT_SYM_FUNC 
GDBJIT_SYM__MAX 

Definition at line 112 of file ir_gdb.c.

◆ anonymous enum

anonymous enum
Enumerator
DW_CFA_nop 
DW_CFA_offset_extended 
DW_CFA_def_cfa 
DW_CFA_def_cfa_offset 
DW_CFA_offset_extended_sf 
DW_CFA_advance_loc 
DW_CFA_offset 

Definition at line 29 of file ir_gdb.c.

◆ anonymous enum

anonymous enum
Enumerator
DW_AT_name 
DW_AT_stmt_list 
DW_AT_low_pc 
DW_AT_high_pc 

Definition at line 53 of file ir_gdb.c.

◆ anonymous enum

anonymous enum
Enumerator
GDBJIT_SECT_NULL 
GDBJIT_SECT_text 
GDBJIT_SECT_eh_frame 
GDBJIT_SECT_shstrtab 
GDBJIT_SECT_strtab 
GDBJIT_SECT_symtab 
GDBJIT_SECT_debug_info 
GDBJIT_SECT_debug_abbrev 
GDBJIT_SECT_debug_line 
GDBJIT_SECT__MAX 

Definition at line 99 of file ir_gdb.c.

◆ anonymous enum

anonymous enum
Enumerator
DW_LNS_extended_op 
DW_LNS_copy 
DW_LNS_advance_pc 
DW_LNS_advance_line 

Definition at line 66 of file ir_gdb.c.

◆ anonymous enum

anonymous enum
Enumerator
IR_GDBJIT_NOACTION 
IR_GDBJIT_REGISTER 
IR_GDBJIT_UNREGISTER 

Definition at line 483 of file ir_gdb.c.

◆ anonymous enum

anonymous enum

Definition at line 78 of file ir_gdb.c.

◆ anonymous enum

anonymous enum
Enumerator
DW_EH_PE_udata4 
DW_EH_PE_textrel 

Definition at line 39 of file ir_gdb.c.

◆ anonymous enum

anonymous enum
Enumerator
DW_children_no 
DW_children_yes 

Definition at line 48 of file ir_gdb.c.

◆ anonymous enum

anonymous enum
Enumerator
DW_LNE_end_sequence 
DW_LNE_set_address 

Definition at line 73 of file ir_gdb.c.

◆ anonymous enum

anonymous enum
Enumerator
DW_FORM_addr 
DW_FORM_data4 
DW_FORM_string 

Definition at line 60 of file ir_gdb.c.

Function Documentation

◆ __jit_debug_register_code()

IR_NEVER_INLINE void __jit_debug_register_code ( void )

Definition at line 511 of file ir_gdb.c.

◆ ir_gdb_init()

void ir_gdb_init ( void )

Definition at line 650 of file ir_gdb.c.

◆ ir_gdb_present()

bool ir_gdb_present ( void )

Definition at line 581 of file ir_gdb.c.

◆ ir_gdb_register()

int ir_gdb_register ( const char * name,
const void * start,
size_t size,
uint32_t sp_offset,
uint32_t sp_adjustment )

Definition at line 631 of file ir_gdb.c.

◆ ir_gdb_unregister_all()

void ir_gdb_unregister_all ( void )

Definition at line 547 of file ir_gdb.c.

◆ IR_SET_ALIGNED() [1/3]

typedef IR_SET_ALIGNED ( 1 ,
uint16_t unaligned_uint16_t )

◆ IR_SET_ALIGNED() [2/3]

typedef IR_SET_ALIGNED ( 1 ,
uint32_t unaligned_uint32_t )

◆ IR_SET_ALIGNED() [3/3]

typedef IR_SET_ALIGNED ( 1 ,
uintptr_t unaligned_uintptr_t )

Variable Documentation

◆ __jit_debug_descriptor

ir_gdbjit_descriptor __jit_debug_descriptor
Initial value:
= {
}
#define NULL
Definition gdcache.h:45
@ IR_GDBJIT_NOACTION
Definition ir_gdb.c:484

Definition at line 507 of file ir_gdb.c.