mirror of https://github.com/xemu-project/xemu.git
plugin: add API symbols to qemu-plugins.symbols
Signed-off-by: Emilio G. Cota <cota@braap.org> [AJB: moved into plugins] Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
40e8c6f48a
commit
26fffe29c0
7
Makefile
7
Makefile
|
@ -74,6 +74,12 @@ CONFIG_ALL=y
|
||||||
config-host.mak: $(SRC_PATH)/configure $(SRC_PATH)/pc-bios $(SRC_PATH)/VERSION
|
config-host.mak: $(SRC_PATH)/configure $(SRC_PATH)/pc-bios $(SRC_PATH)/VERSION
|
||||||
@echo $@ is out-of-date, running configure
|
@echo $@ is out-of-date, running configure
|
||||||
@./config.status
|
@./config.status
|
||||||
|
|
||||||
|
# Force configure to re-run if the API symbols are updated
|
||||||
|
ifeq ($(CONFIG_PLUGIN),y)
|
||||||
|
config-host.mak: $(SRC_PATH)/plugins/qemu-plugins.symbols
|
||||||
|
endif
|
||||||
|
|
||||||
else
|
else
|
||||||
config-host.mak:
|
config-host.mak:
|
||||||
ifneq ($(filter-out $(UNCHECKED_GOALS),$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
|
ifneq ($(filter-out $(UNCHECKED_GOALS),$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
|
||||||
|
@ -737,6 +743,7 @@ distclean: clean
|
||||||
rm -f qemu-doc.fn qemu-doc.fns qemu-doc.info qemu-doc.ky qemu-doc.kys
|
rm -f qemu-doc.fn qemu-doc.fns qemu-doc.info qemu-doc.ky qemu-doc.kys
|
||||||
rm -f qemu-doc.log qemu-doc.pdf qemu-doc.pg qemu-doc.toc qemu-doc.tp
|
rm -f qemu-doc.log qemu-doc.pdf qemu-doc.pg qemu-doc.toc qemu-doc.tp
|
||||||
rm -f qemu-doc.vr qemu-doc.txt
|
rm -f qemu-doc.vr qemu-doc.txt
|
||||||
|
rm -f qemu-plugins-ld.symbols qemu-plugins-ld64.symbols
|
||||||
rm -f config.log
|
rm -f config.log
|
||||||
rm -f linux-headers/asm
|
rm -f linux-headers/asm
|
||||||
rm -f docs/version.texi
|
rm -f docs/version.texi
|
||||||
|
|
|
@ -30,6 +30,7 @@ TMPO="${TMPDIR1}/${TMPB}.o"
|
||||||
TMPCXX="${TMPDIR1}/${TMPB}.cxx"
|
TMPCXX="${TMPDIR1}/${TMPB}.cxx"
|
||||||
TMPE="${TMPDIR1}/${TMPB}.exe"
|
TMPE="${TMPDIR1}/${TMPB}.exe"
|
||||||
TMPMO="${TMPDIR1}/${TMPB}.mo"
|
TMPMO="${TMPDIR1}/${TMPB}.mo"
|
||||||
|
TMPTXT="${TMPDIR1}/${TMPB}.txt"
|
||||||
|
|
||||||
rm -f config.log
|
rm -f config.log
|
||||||
|
|
||||||
|
@ -5476,6 +5477,61 @@ if compile_prog "" "" ; then
|
||||||
atomic64=yes
|
atomic64=yes
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
#########################################
|
||||||
|
# See if --dynamic-list is supported by the linker
|
||||||
|
ld_dynamic_list="no"
|
||||||
|
if test "$static" = "no" ; then
|
||||||
|
cat > $TMPTXT <<EOF
|
||||||
|
{
|
||||||
|
foo;
|
||||||
|
};
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat > $TMPC <<EOF
|
||||||
|
#include <stdio.h>
|
||||||
|
void foo(void);
|
||||||
|
|
||||||
|
void foo(void)
|
||||||
|
{
|
||||||
|
printf("foo\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
foo();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
|
||||||
|
ld_dynamic_list="yes"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
#########################################
|
||||||
|
# See if -exported_symbols_list is supported by the linker
|
||||||
|
|
||||||
|
ld_exported_symbols_list="no"
|
||||||
|
if test "$static" = "no" ; then
|
||||||
|
cat > $TMPTXT <<EOF
|
||||||
|
_foo
|
||||||
|
EOF
|
||||||
|
|
||||||
|
if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
|
||||||
|
ld_exported_symbols_list="yes"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "$plugins" = "yes" &&
|
||||||
|
test "$ld_dynamic_list" = "no" &&
|
||||||
|
test "$ld_exported_symbols_list" = "no" ; then
|
||||||
|
error_exit \
|
||||||
|
"Plugin support requires dynamic linking and specifying a set of symbols " \
|
||||||
|
"that are exported to plugins. Unfortunately your linker doesn't " \
|
||||||
|
"support the flag (--dynamic-list or -exported_symbols_list) used " \
|
||||||
|
"for this purpose. You can't build with --static."
|
||||||
|
fi
|
||||||
|
|
||||||
########################################
|
########################################
|
||||||
# See if 16-byte vector operations are supported.
|
# See if 16-byte vector operations are supported.
|
||||||
# Even without a vector unit the compiler may expand these.
|
# Even without a vector unit the compiler may expand these.
|
||||||
|
@ -7283,6 +7339,22 @@ fi
|
||||||
if test "$plugins" = "yes" ; then
|
if test "$plugins" = "yes" ; then
|
||||||
echo "CONFIG_PLUGIN=y" >> $config_host_mak
|
echo "CONFIG_PLUGIN=y" >> $config_host_mak
|
||||||
LIBS="-ldl $LIBS"
|
LIBS="-ldl $LIBS"
|
||||||
|
# Copy the export object list to the build dir
|
||||||
|
if test "$ld_dynamic_list" = "yes" ; then
|
||||||
|
echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
|
||||||
|
ld_symbols=qemu-plugins-ld.symbols
|
||||||
|
cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
|
||||||
|
elif test "$ld_exported_symbols_list" = "yes" ; then
|
||||||
|
echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
|
||||||
|
ld64_symbols=qemu-plugins-ld64.symbols
|
||||||
|
echo "# Automatically generated by configure - do not modify" > $ld64_symbols
|
||||||
|
grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
|
||||||
|
sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
|
||||||
|
else
|
||||||
|
error_exit \
|
||||||
|
"If \$plugins=yes, either \$ld_dynamic_list or " \
|
||||||
|
"\$ld_exported_symbols_list should have been set to 'yes'."
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$tcg_interpreter" = "yes"; then
|
if test "$tcg_interpreter" = "yes"; then
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
qemu-plugins-ld.symbols
|
||||||
|
qemu-plugins-ld64.symbols
|
|
@ -5,3 +5,17 @@
|
||||||
obj-y += loader.o
|
obj-y += loader.o
|
||||||
obj-y += core.o
|
obj-y += core.o
|
||||||
obj-y += api.o
|
obj-y += api.o
|
||||||
|
|
||||||
|
# Abuse -libs suffix to only link with --dynamic-list/-exported_symbols_list
|
||||||
|
# when the final binary includes the plugin object.
|
||||||
|
#
|
||||||
|
# Note that simply setting LDFLAGS is not enough: we build binaries that
|
||||||
|
# never link plugin.o, and the linker might fail (at least ld64 does)
|
||||||
|
# if the symbols in the list are not in the output binary.
|
||||||
|
ifdef CONFIG_HAS_LD_DYNAMIC_LIST
|
||||||
|
api.o-libs := -Wl,--dynamic-list=$(BUILD_DIR)/qemu-plugins-ld.symbols
|
||||||
|
else
|
||||||
|
ifdef CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST
|
||||||
|
api.o-libs := -Wl,-exported_symbols_list,$(BUILD_DIR)/qemu-plugins-ld64.symbols
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
{
|
||||||
|
qemu_plugin_uninstall;
|
||||||
|
qemu_plugin_reset;
|
||||||
|
qemu_plugin_register_vcpu_init_cb;
|
||||||
|
qemu_plugin_register_vcpu_exit_cb;
|
||||||
|
qemu_plugin_register_vcpu_idle_cb;
|
||||||
|
qemu_plugin_register_vcpu_resume_cb;
|
||||||
|
qemu_plugin_register_vcpu_insn_exec_cb;
|
||||||
|
qemu_plugin_register_vcpu_insn_exec_inline;
|
||||||
|
qemu_plugin_register_vcpu_mem_cb;
|
||||||
|
qemu_plugin_register_vcpu_mem_haddr_cb;
|
||||||
|
qemu_plugin_register_vcpu_mem_inline;
|
||||||
|
qemu_plugin_ram_addr_from_host;
|
||||||
|
qemu_plugin_register_vcpu_tb_trans_cb;
|
||||||
|
qemu_plugin_register_vcpu_tb_exec_cb;
|
||||||
|
qemu_plugin_register_vcpu_tb_exec_inline;
|
||||||
|
qemu_plugin_register_flush_cb;
|
||||||
|
qemu_plugin_register_vcpu_syscall_cb;
|
||||||
|
qemu_plugin_register_vcpu_syscall_ret_cb;
|
||||||
|
qemu_plugin_register_atexit_cb;
|
||||||
|
qemu_plugin_tb_n_insns;
|
||||||
|
qemu_plugin_tb_get_insn;
|
||||||
|
qemu_plugin_tb_vaddr;
|
||||||
|
qemu_plugin_insn_data;
|
||||||
|
qemu_plugin_insn_size;
|
||||||
|
qemu_plugin_insn_vaddr;
|
||||||
|
qemu_plugin_insn_haddr;
|
||||||
|
qemu_plugin_mem_size_shift;
|
||||||
|
qemu_plugin_mem_is_sign_extended;
|
||||||
|
qemu_plugin_mem_is_big_endian;
|
||||||
|
qemu_plugin_mem_is_store;
|
||||||
|
qemu_plugin_get_hwaddr;
|
||||||
|
qemu_plugin_hwaddr_is_io;
|
||||||
|
qemu_plugin_hwaddr_to_raddr;
|
||||||
|
qemu_plugin_vcpu_for_each;
|
||||||
|
qemu_plugin_n_vcpus;
|
||||||
|
qemu_plugin_n_max_vcpus;
|
||||||
|
};
|
Loading…
Reference in New Issue