[PATCH 4/8] Implement target_emit_ops
Antoine Tremblay
antoine.tremblay@ericsson.com
Fri Feb 5 20:09:00 GMT 2016
On 09/18/2015 08:43 AM, Yao Qi wrote:
> From: Pierre Langlois <pierre.langlois@arm.com>
>
> This patch implements compiling agent expressions to native code for
> AArch64. This allows us to compile conditions set on fast tracepoints.
>
> The compiled function has the following prologue:
>
> High *------------------------------------------------------*
> | LR |
> | FP | <- FP
> | x1 (ULONGEST *value) |
> | x0 (unsigned char *regs) |
> Low *------------------------------------------------------*
>
> We save the function's argument on the stack as well as the return
> address and the frame pointer. We then set the current frame pointer to
> point to the previous one.
>
> The generated code for the expression will freely update the stack
> pointer so we use the frame pointer to refer to `*value' and `*regs'.
> `*value' needs to be accessed in the epilogue of the function, in order
> to set it to whatever is on top of the stack. `*regs' needs to be passed
> down to the `gdb_agent_get_reg' function with the `reg' operation.
>
> +static void
> +aarch64_emit_prologue (void)
> +{
> + uint32_t buf[16];
> + uint32_t *p = buf;
> +
> + /* This function emit a prologue for the following function prototype:
> +
> + e
....
Hi,
I'm working on adding JIT compiling of agent expressions for ARM and
I've been looking at the aarch64 implementation.
I'm wondering is there a reason we don't use gcc to generate the
native bytecode like done on x86 ?
x86 has a macro like so :
#define EMIT_ASM(NAME, INSNS)
do
{
extern unsigned char start_ ## NAME, end_ ## NAME;
add_insns (&start_ ## NAME, &end_ ## NAME - &start_ ## NAME);
__asm__ ("jmp end_" #NAME "\n"
"\t" "start_" #NAME ":"
"\t" INSNS "\n"
"\t" "end_" #NAME ":");
} while (0)
Could the same be done for armv7 or there's a reason that prevents it ?
Same question for aarch64 ?
Thanks,
Antoine
More information about the Gdb-patches
mailing list