infix
A JIT-Powered FFI Library for C
Loading...
Searching...
No Matches
emit.h File Reference

Public API for the emit JIT code generation system. More...

#include <infix/infix.h>
#include <stdbool.h>
#include <stdint.h>
Include dependency graph for emit.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define INFIX_EMIT_API   __attribute__((visibility("default")))
 

Typedefs

typedef struct emit_context emit_context_t
 

Enumerations

enum  emit_architecture_t { EMIT_ARCH_X86_64 , EMIT_ARCH_AARCH64 }
 
enum  emit_format_t { EMIT_FORMAT_BINARY , EMIT_FORMAT_ELF , EMIT_FORMAT_PE }
 
enum  emit_section_flags_t { EMIT_SECTION_FLAG_NONE = 0 , EMIT_SECTION_FLAG_ALLOC = 1 << 0 , EMIT_SECTION_FLAG_WRITE = 1 << 1 , EMIT_SECTION_FLAG_EXECUTE = 1 << 2 }
 
enum  emit_visibility_t { EMIT_VISIBILITY_DEFAULT , EMIT_VISIBILITY_HIDDEN , EMIT_VISIBILITY_PROTECTED }
 
enum  emit_state_t { EMIT_STATE_IDLE , EMIT_STATE_SECTION_ACTIVE , EMIT_STATE_SECTION_INACTIVE }
 

Functions

INFIX_EMIT_API infix_status emit_create (emit_context_t **out_ctx, emit_architecture_t arch, emit_format_t format)
 
INFIX_EMIT_API void emit_destroy (emit_context_t *ctx)
 
INFIX_EMIT_API infix_status emit_add_section (emit_context_t *ctx, const char *name, emit_section_flags_t flags)
 
INFIX_EMIT_API infix_status emit_begin_section (emit_context_t *ctx, const char *name)
 
INFIX_EMIT_API infix_status emit_define_symbol (emit_context_t *ctx, const char *name, emit_visibility_t visibility, bool is_function)
 
INFIX_EMIT_API infix_status emit_emit_label (emit_context_t *ctx, const char *name)
 
INFIX_EMIT_API infix_status emit_create_label (emit_context_t *ctx, const char *name)
 
INFIX_EMIT_API infix_status emit_emit_u8 (emit_context_t *ctx, uint8_t value)
 
INFIX_EMIT_API infix_status emit_emit_u16 (emit_context_t *ctx, uint16_t value)
 
INFIX_EMIT_API infix_status emit_emit_u32 (emit_context_t *ctx, uint32_t value)
 
INFIX_EMIT_API infix_status emit_emit_u64 (emit_context_t *ctx, uint64_t value)
 
INFIX_EMIT_API infix_status emit_get_binary (const emit_context_t *ctx, const uint8_t **out_data, size_t *out_size)
 
INFIX_EMIT_API infix_status emit_get_offset (const emit_context_t *ctx, uint64_t *out_offset)
 
INFIX_EMIT_API infix_status emit_align (emit_context_t *ctx, uint64_t alignment)
 

Detailed Description

Public API for the emit JIT code generation system.

Copyright (c) 2025 Sanko Robinson

This source code is dual-licensed under the Artistic License 2.0 or the MIT License. You may choose to use the code under the terms of either license.

SPDX-License-Identifier: (Artistic-2.0 OR MIT)

Macro Definition Documentation

◆ INFIX_EMIT_API

#define INFIX_EMIT_API   __attribute__((visibility("default")))

Typedef Documentation

◆ emit_context_t

typedef struct emit_context emit_context_t

Enumeration Type Documentation

◆ emit_architecture_t

Enumerator
EMIT_ARCH_X86_64 
EMIT_ARCH_AARCH64 

◆ emit_format_t

Enumerator
EMIT_FORMAT_BINARY 
EMIT_FORMAT_ELF 
EMIT_FORMAT_PE 

◆ emit_section_flags_t

Enumerator
EMIT_SECTION_FLAG_NONE 
EMIT_SECTION_FLAG_ALLOC 
EMIT_SECTION_FLAG_WRITE 
EMIT_SECTION_FLAG_EXECUTE 

◆ emit_state_t

Enumerator
EMIT_STATE_IDLE 
EMIT_STATE_SECTION_ACTIVE 
EMIT_STATE_SECTION_INACTIVE 

◆ emit_visibility_t

Enumerator
EMIT_VISIBILITY_DEFAULT 
EMIT_VISIBILITY_HIDDEN 
EMIT_VISIBILITY_PROTECTED 

Function Documentation

◆ emit_add_section()

INFIX_EMIT_API infix_status emit_add_section ( emit_context_t ctx,
const char *  name,
emit_section_flags_t  flags 
)

◆ emit_align()

INFIX_EMIT_API infix_status emit_align ( emit_context_t ctx,
uint64_t  alignment 
)

◆ emit_begin_section()

INFIX_EMIT_API infix_status emit_begin_section ( emit_context_t ctx,
const char *  name 
)

◆ emit_create()

INFIX_EMIT_API infix_status emit_create ( emit_context_t **  out_ctx,
emit_architecture_t  arch,
emit_format_t  format 
)

◆ emit_create_label()

INFIX_EMIT_API infix_status emit_create_label ( emit_context_t ctx,
const char *  name 
)

◆ emit_define_symbol()

INFIX_EMIT_API infix_status emit_define_symbol ( emit_context_t ctx,
const char *  name,
emit_visibility_t  visibility,
bool  is_function 
)

◆ emit_destroy()

INFIX_EMIT_API void emit_destroy ( emit_context_t ctx)

◆ emit_emit_label()

INFIX_EMIT_API infix_status emit_emit_label ( emit_context_t ctx,
const char *  name 
)

◆ emit_emit_u16()

INFIX_EMIT_API infix_status emit_emit_u16 ( emit_context_t ctx,
uint16_t  value 
)

◆ emit_emit_u32()

INFIX_EMIT_API infix_status emit_emit_u32 ( emit_context_t ctx,
uint32_t  value 
)

◆ emit_emit_u64()

INFIX_EMIT_API infix_status emit_emit_u64 ( emit_context_t ctx,
uint64_t  value 
)

◆ emit_emit_u8()

INFIX_EMIT_API infix_status emit_emit_u8 ( emit_context_t ctx,
uint8_t  value 
)

◆ emit_get_binary()

INFIX_EMIT_API infix_status emit_get_binary ( const emit_context_t ctx,
const uint8_t **  out_data,
size_t *  out_size 
)

◆ emit_get_offset()

INFIX_EMIT_API infix_status emit_get_offset ( const emit_context_t ctx,
uint64_t *  out_offset 
)