[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 08/12] livepatch: Add support for inline asm hotpatching expectations
> diff --git a/xen/test/livepatch/Makefile b/xen/test/livepatch/Makefile > index 23113d3418..067861903f 100644 > --- a/xen/test/livepatch/Makefile > +++ b/xen/test/livepatch/Makefile > @@ -27,6 +27,8 @@ LIVEPATCH_ACTION_HOOKS_NOFUNC := > xen_action_hooks_nofunc.livepatch > LIVEPATCH_ACTION_HOOKS_MARKER:= xen_action_hooks_marker.livepatch > LIVEPATCH_ACTION_HOOKS_NOAPPLY:= xen_action_hooks_noapply.livepatch > LIVEPATCH_ACTION_HOOKS_NOREVERT:= xen_action_hooks_norevert.livepatch > +LIVEPATCH_EXPECTATIONS:= xen_expectations.livepatch > +LIVEPATCH_EXPECTATIONS_FAIL:= xen_expectations_fail.livepatch > > LIVEPATCHES += $(LIVEPATCH) > LIVEPATCHES += $(LIVEPATCH_BYE) > @@ -40,6 +42,8 @@ LIVEPATCHES += $(LIVEPATCH_ACTION_HOOKS_NOFUNC) > LIVEPATCHES += $(LIVEPATCH_ACTION_HOOKS_MARKER) > LIVEPATCHES += $(LIVEPATCH_ACTION_HOOKS_NOAPPLY) > LIVEPATCHES += $(LIVEPATCH_ACTION_HOOKS_NOREVERT) > +LIVEPATCHES += $(LIVEPATCH_EXPECTATIONS) > +LIVEPATCHES += $(LIVEPATCH_EXPECTATIONS_FAIL) > > LIVEPATCH_DEBUG_DIR ?= $(DEBUG_DIR)/xen-livepatch > > @@ -54,7 +58,7 @@ uninstall: > > .PHONY: clean > clean:: > - rm -f *.o .*.o.d *.livepatch config.h > + rm -f *.o .*.o.d *.livepatch config.h expect_config.h > > # > # To compute these values we need the binary files: xen-syms > @@ -182,8 +186,27 @@ xen_actions_hooks_norevert.o: config.h > $(LIVEPATCH_ACTION_HOOKS_NOREVERT): xen_action_hooks_marker.o > xen_hello_world_func.o note.o xen_note.o > $(LD) $(LDFLAGS) $(build_id_linker) -r -o > $(LIVEPATCH_ACTION_HOOKS_NOREVERT) $^ > > +CODE_GET_EXPECT=$(shell objdump -d --insn-width=1 $(1) | grep -A6 -E > '<'$(2)'>:' | tail -n +2 | awk 'BEGIN {printf "{"} {printf "0x%s,", $$2}' | > sed 's/,$$/}/g') > +.PHONY: expect_config.h > +expect_config.h: EXPECT_BYTES=$(call > CODE_GET_EXPECT,$(BASEDIR)/xen-syms,xen_extra_version) > +expect_config.h: EXPECT_BYTES_COUNT=6 > +expect_config.h: xen_expectations.o > + (set -e; \ > + echo "#define EXPECT_BYTES $(EXPECT_BYTES)"; \ > + echo "#define EXPECT_BYTES_COUNT $(EXPECT_BYTES_COUNT)") > $@ > + > +xen_expectations.o: expect_config.h > + > +.PHONY: $(LIVEPATCH_EXPECTATIONS) > +$(LIVEPATCH_EXPECTATIONS): xen_expectations.o xen_hello_world_func.o note.o > xen_note.o > + $(LD) $(LDFLAGS) $(build_id_linker) -r -o $(LIVEPATCH_EXPECTATIONS) $^ > + > +.PHONY: $(LIVEPATCH_EXPECTATIONS_FAIL) > +$(LIVEPATCH_EXPECTATIONS_FAIL): xen_expectations_fail.o > xen_hello_world_func.o note.o xen_note.o > + $(LD) $(LDFLAGS) $(build_id_linker) -r -o > $(LIVEPATCH_EXPECTATIONS_FAIL) $^ > + > .PHONY: livepatch > livepatch: $(LIVEPATCH) $(LIVEPATCH_BYE) $(LIVEPATCH_REPLACE) > $(LIVEPATCH_NOP) $(LIVEPATCH_NO_XEN_BUILDID) \ > $(LIVEPATCH_PREPOST_HOOKS) $(LIVEPATCH_PREPOST_HOOKS_FAIL) > $(LIVEPATCH_ACTION_HOOKS) \ > $(LIVEPATCH_ACTION_HOOKS_NOFUNC) $(LIVEPATCH_ACTION_HOOKS_MARKER) > $(LIVEPATCH_ACTION_HOOKS_NOAPPLY) \ > - $(LIVEPATCH_ACTION_HOOKS_NOREVERT) > + $(LIVEPATCH_ACTION_HOOKS_NOREVERT) $(LIVEPATCH_EXPECTATIONS) > $(LIVEPATCH_EXPECTATIONS_FAIL) > diff --git a/xen/test/livepatch/xen_expectations.c > b/xen/test/livepatch/xen_expectations.c > new file mode 100644 > index 0000000000..c8175a458b > --- /dev/null > +++ b/xen/test/livepatch/xen_expectations.c > @@ -0,0 +1,41 @@ > +/* > + * Copyright (c) 2019 Amazon.com, Inc. or its affiliates. All rights > reserved. > + * > + */ > + > +#include "expect_config.h" > +#include <xen/lib.h> > +#include <xen/types.h> > +#include <xen/version.h> > +#include <xen/livepatch.h> > +#include <xen/livepatch_payload.h> > + > +#include <public/sysctl.h> > + > +static const char livepatch_exceptions_str[] = "xen_extra_version"; > +extern const char *xen_hello_world(void); > + > +struct livepatch_func __section(".livepatch.funcs") livepatch_exceptions = { > + .version = LIVEPATCH_PAYLOAD_VERSION, > + .name = livepatch_exceptions_str, > + .new_addr = xen_hello_world, > + .old_addr = xen_extra_version, > + .new_size = EXPECT_BYTES_COUNT, > + .old_size = EXPECT_BYTES_COUNT, > + .expect = { > + .enabled = 1, > + .len = EXPECT_BYTES_COUNT, > + .data = EXPECT_BYTES > + }, > + > +}; When I compile with 32-bit ARM 'make tests' I get: arm-eabi-ld -EL -EL --build-id=sha1 -r -o xen_action_hooks_norevert.livepatch xen_action_hooks_marker.o xen_hello_world_func.o note.o xen_note.o make[3]: Circular expect_config.h <- xen_expectations.o dependency dropped. objdump: can't disassemble for architecture UNKNOWN! (set -e; \ echo "#define EXPECT_BYTES {"; \ echo "#define EXPECT_BYTES_COUNT 6") > expect_config.h arm-eabi-gcc -marm -DBUILD_ID -fno-strict-aliasing -std=gnu99 -Wall -Wstrict-prototypes -Wdeclaration-after-statement -Wno-unused-but-set-variable -Wno-unused-local-typedefs -O1 -fno-omit-frame-pointer -nostdinc -fno-builtin -fno-common -Werror -Wredundant-decls -Wno-pointer-arith -Wvla -pipe -D__XEN__ -include /home/konrad/A20/xen.git/xen/include/xen/config.h '-D__OBJECT_FILE__="xen_expectations.o"' -Wa,--strip-local-absolute -g -MMD -MF ./.xen_expectations.o.d -msoft-float -mcpu=cortex-a15 -DCONFIG_EARLY_PRINTK -DEARLY_PRINTK_INC=\"debug-8250.inc\" -DEARLY_PRINTK_BAUD= -DEARLY_UART_BASE_ADDRESS=0x01c28000 -DEARLY_UART_REG_SHIFT=2 -I/home/konrad/A20/xen.git/xen/include -fno-stack-protector -fno-exceptions -Wnested-externs -DGCC_HAS_VISIBILITY_ATTRIBUTE -marm -DBUILD_ID -fno-strict-aliasing -std=gnu99 -Wall -Wstrict-prototypes -Wdeclaration-after-statement -Wno-unused-but-set-variable -Wno-unused-local-typedefs -c xen_expectations.c -o xen_expectations.o xen_expectations.c:31:2: error: expected '}' before ';' token }; ^ xen_expectations.c:18:76: note: to match this '{' struct livepatch_func __section(".livepatch.funcs") livepatch_exceptions = { ^ make[3]: *** [/home/konrad/A20/xen.git/xen/Rules.mk:202: xen_expectations.o] Error 1 make[3]: Leaving directory '/home/konrad/A20/xen.git/xen/test/livepatch' And this is what expect_config.h looks like: #define EXPECT_BYTES { #define EXPECT_BYTES_COUNT 6 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |