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
|
||||
@echo $@ is out-of-date, running configure
|
||||
@./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
|
||||
config-host.mak:
|
||||
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.log qemu-doc.pdf qemu-doc.pg qemu-doc.toc qemu-doc.tp
|
||||
rm -f qemu-doc.vr qemu-doc.txt
|
||||
rm -f qemu-plugins-ld.symbols qemu-plugins-ld64.symbols
|
||||
rm -f config.log
|
||||
rm -f linux-headers/asm
|
||||
rm -f docs/version.texi
|
||||
|
72
configure
vendored
72
configure
vendored
@ -30,6 +30,7 @@ TMPO="${TMPDIR1}/${TMPB}.o"
|
||||
TMPCXX="${TMPDIR1}/${TMPB}.cxx"
|
||||
TMPE="${TMPDIR1}/${TMPB}.exe"
|
||||
TMPMO="${TMPDIR1}/${TMPB}.mo"
|
||||
TMPTXT="${TMPDIR1}/${TMPB}.txt"
|
||||
|
||||
rm -f config.log
|
||||
|
||||
@ -5476,6 +5477,61 @@ if compile_prog "" "" ; then
|
||||
atomic64=yes
|
||||
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.
|
||||
# Even without a vector unit the compiler may expand these.
|
||||
@ -7283,6 +7339,22 @@ fi
|
||||
if test "$plugins" = "yes" ; then
|
||||
echo "CONFIG_PLUGIN=y" >> $config_host_mak
|
||||
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
|
||||
|
||||
if test "$tcg_interpreter" = "yes"; then
|
||||
|
2
plugins/.gitignore
vendored
Normal file
2
plugins/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
qemu-plugins-ld.symbols
|
||||
qemu-plugins-ld64.symbols
|
@ -5,3 +5,17 @@
|
||||
obj-y += loader.o
|
||||
obj-y += core.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
|
||||
|
38
plugins/qemu-plugins.symbols
Normal file
38
plugins/qemu-plugins.symbols
Normal file
@ -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
Block a user