diff mbox

[v5,11/16] livepatch: tests: Make them compile under ARM64

Message ID 20160923013308.GB29985@localhost.localdomain (mailing list archive)
State New, archived
Headers show

Commit Message

Konrad Rzeszutek Wilk Sept. 23, 2016, 1:33 a.m. UTC
.snip..
> > diff --git a/xen/test/Makefile b/xen/test/Makefile
> > index 8c53040..95c1755 100644
> > --- a/xen/test/Makefile
> > +++ b/xen/test/Makefile
> > @@ -1,6 +1,6 @@
> >  .PHONY: tests
> >  tests:
> I am wondering if there is any way to use the
> > -ifeq ($(XEN_TARGET_ARCH),x86_64)
> > +ifneq $(XEN_TARGET_ARCH),arm32)
> 
> NIT: I am wondering if you could instead use CONFIG_LIVEPATCH here, so the
> tests would only be built when livepatch is enabled.

Lets leave it as is and do it in the future. Right now the tests
are not compiled by default so not much harm here. But I do agree that
somehow exposing the CONFIG_LIVEPATCH and latching it off (in say
tests/livepatch/ directory) is a good TODO item.. 
> 
> >  	$(MAKE) -f $(BASEDIR)/Rules.mk -C livepatch livepatch
> >  endif
> > 
> > diff --git a/xen/test/livepatch/Makefile b/xen/test/livepatch/Makefile
> > index 48ff843..5db4d9c 100644
> > --- a/xen/test/livepatch/Makefile
> > +++ b/xen/test/livepatch/Makefile
> > @@ -1,5 +1,12 @@
> >  include $(XEN_ROOT)/Config.mk
> > 
> > +ifeq ($(XEN_TARGET_ARCH),x86_64)
> > +OBJCOPY_MAGIC := -I binary -O elf64-x86-64 -B i386:x86-64
> > +endif
> > +ifeq ($(XEN_TARGET_ARCH),arm64)
> > +OBJCOPY_MAGIC := -I binary -O elf64-littleaarch64 -B aarch64
> > +endif
> > +
> >  CODE_ADDR=$(shell nm --defined $(1) | grep $(2) | awk '{print "0x"$$1}')
> >  CODE_SZ=$(shell nm --defined -S $(1) | grep $(2) | awk '{ print "0x"$$2}')
> > 
> > @@ -54,8 +61,9 @@ $(LIVEPATCH): xen_hello_world_func.o xen_hello_world.o note.o
> >  .PHONY: note.o
> >  note.o:
> >  	$(OBJCOPY) -O binary --only-section=.note.gnu.build-id $(BASEDIR)/xen-syms $@.bin
> > -	$(OBJCOPY) -I binary -O elf64-x86-64 -B i386:x86-64 \
> > +	$(OBJCOPY) $(OBJCOPY_MAGIC) \
> >  		   --rename-section=.data=.livepatch.depends,alloc,load,readonly,data,contents -S $@.bin $@
> > +		   --rename-section=.data=.livepatch.depends -S $@.bin $@
> 
> I am not sure why you added this line. Did you intend to replace the
> previous one?

Fixed.
..snip..
> > @@ -25,6 +28,10 @@ const char *xen_hello_world(void)
> >       */
> >      rc = __get_user(tmp, non_canonical_addr);
> >      BUG_ON(rc != -EFAULT);
> > +#endif
> > +#ifdef CONFIG_ARM_64
> 
> NIT: I would use:
> 
> #if defined(CONFIG_ARM) && defined(CONFIG_HAS_ALTERNATIVE)
> 
> in order to handle alternative if we decide to add support for ARM32.

Done!

Here is the updated patch:


From c0dac442d15b5f0095b199ab4fff1fc414fb5719 Mon Sep 17 00:00:00 2001
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Date: Mon, 19 Sep 2016 16:04:55 -0400
Subject: [PATCH v6] livepatch: tests: Make them compile under ARM64

We need to two things:
1) Wrap the platform-specific objcopy parameters in defines
   The input and output parameters for $(OBJCOPY) are different
   based on the platforms. As such provide them in the
   OBJCOPY_MAGIC define and use that.

2) The alternative is a bit different (exists only under ARM64
   and x86), while and there are no exceptions under ARM at all.
   We use the LIVEPATCH_FEATURE CPU id feature for ARM similar to
   how it is done on x86.

We are not yet attempting to build them under ARM32 so
that is still ifdefed out.

Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>

---
Cc: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: George Dunlap <George.Dunlap@eu.citrix.com>
Cc: Ian Jackson <ian.jackson@eu.citrix.com>
Cc: Jan Beulich <jbeulich@suse.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>
Cc: Tim Deegan <tim@xen.org>
Cc: Wei Liu <wei.liu2@citrix.com>

v1: First submission
v2: Corrected description by Julien
    Add #ifeq instead of #else for ARM case.
v3: Moved 'asm(alter..)' by one space to the left.
v4: Rebase on top of "livepatch/tests: Make .livepatch.depends be read-only"
    Rewrote the commit description 2) a bit.
v6: Fixed the note.o --rename-section
    Replaced CONFIG_ARM_64 with defined(CONFIG_ARM) &&
    defined(CONFIG_HAS_ALTERNATIVE)
---
 xen/test/Makefile                         |  2 +-
 xen/test/livepatch/Makefile               | 11 +++++++++--
 xen/test/livepatch/xen_hello_world_func.c |  7 +++++++
 3 files changed, 17 insertions(+), 3 deletions(-)

Comments

Julien Grall Sept. 23, 2016, 9:50 a.m. UTC | #1
Hi Konrad,

On 23/09/16 02:33, Konrad Rzeszutek Wilk wrote:
> From c0dac442d15b5f0095b199ab4fff1fc414fb5719 Mon Sep 17 00:00:00 2001
> From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> Date: Mon, 19 Sep 2016 16:04:55 -0400
> Subject: [PATCH v6] livepatch: tests: Make them compile under ARM64
>
> We need to two things:
> 1) Wrap the platform-specific objcopy parameters in defines
>    The input and output parameters for $(OBJCOPY) are different
>    based on the platforms. As such provide them in the
>    OBJCOPY_MAGIC define and use that.
>
> 2) The alternative is a bit different (exists only under ARM64
>    and x86), while and there are no exceptions under ARM at all.
>    We use the LIVEPATCH_FEATURE CPU id feature for ARM similar to
>    how it is done on x86.
>
> We are not yet attempting to build them under ARM32 so
> that is still ifdefed out.
>
> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>

You can add my ack on this version:

Acked-by: Julien Grall <julien.grall@arm.com>

Regards,
Ross Lagerwall Sept. 27, 2016, 9:49 a.m. UTC | #2
On 09/23/2016 02:33 AM, Konrad Rzeszutek Wilk wrote:
> .snip..
>>> diff --git a/xen/test/Makefile b/xen/test/Makefile
>>> index 8c53040..95c1755 100644
>>> --- a/xen/test/Makefile
>>> +++ b/xen/test/Makefile
>>> @@ -1,6 +1,6 @@
>>>  .PHONY: tests
>>>  tests:
>> I am wondering if there is any way to use the
>>> -ifeq ($(XEN_TARGET_ARCH),x86_64)
>>> +ifneq $(XEN_TARGET_ARCH),arm32)
>>
>> NIT: I am wondering if you could instead use CONFIG_LIVEPATCH here, so the
>> tests would only be built when livepatch is enabled.
>
> Lets leave it as is and do it in the future. Right now the tests
> are not compiled by default so not much harm here. But I do agree that
> somehow exposing the CONFIG_LIVEPATCH and latching it off (in say
> tests/livepatch/ directory) is a good TODO item..
>>
>>>  	$(MAKE) -f $(BASEDIR)/Rules.mk -C livepatch livepatch
>>>  endif
>>>
>>> diff --git a/xen/test/livepatch/Makefile b/xen/test/livepatch/Makefile
>>> index 48ff843..5db4d9c 100644
>>> --- a/xen/test/livepatch/Makefile
>>> +++ b/xen/test/livepatch/Makefile
>>> @@ -1,5 +1,12 @@
>>>  include $(XEN_ROOT)/Config.mk
>>>
>>> +ifeq ($(XEN_TARGET_ARCH),x86_64)
>>> +OBJCOPY_MAGIC := -I binary -O elf64-x86-64 -B i386:x86-64
>>> +endif
>>> +ifeq ($(XEN_TARGET_ARCH),arm64)
>>> +OBJCOPY_MAGIC := -I binary -O elf64-littleaarch64 -B aarch64
>>> +endif
>>> +
>>>  CODE_ADDR=$(shell nm --defined $(1) | grep $(2) | awk '{print "0x"$$1}')
>>>  CODE_SZ=$(shell nm --defined -S $(1) | grep $(2) | awk '{ print "0x"$$2}')
>>>
>>> @@ -54,8 +61,9 @@ $(LIVEPATCH): xen_hello_world_func.o xen_hello_world.o note.o
>>>  .PHONY: note.o
>>>  note.o:
>>>  	$(OBJCOPY) -O binary --only-section=.note.gnu.build-id $(BASEDIR)/xen-syms $@.bin
>>> -	$(OBJCOPY) -I binary -O elf64-x86-64 -B i386:x86-64 \
>>> +	$(OBJCOPY) $(OBJCOPY_MAGIC) \
>>>  		   --rename-section=.data=.livepatch.depends,alloc,load,readonly,data,contents -S $@.bin $@
>>> +		   --rename-section=.data=.livepatch.depends -S $@.bin $@
>>
>> I am not sure why you added this line. Did you intend to replace the
>> previous one?
>
> Fixed.
> ..snip..
>>> @@ -25,6 +28,10 @@ const char *xen_hello_world(void)
>>>       */
>>>      rc = __get_user(tmp, non_canonical_addr);
>>>      BUG_ON(rc != -EFAULT);
>>> +#endif
>>> +#ifdef CONFIG_ARM_64
>>
>> NIT: I would use:
>>
>> #if defined(CONFIG_ARM) && defined(CONFIG_HAS_ALTERNATIVE)
>>
>> in order to handle alternative if we decide to add support for ARM32.
>
> Done!
>
> Here is the updated patch:
>
>
> From c0dac442d15b5f0095b199ab4fff1fc414fb5719 Mon Sep 17 00:00:00 2001
> From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> Date: Mon, 19 Sep 2016 16:04:55 -0400
> Subject: [PATCH v6] livepatch: tests: Make them compile under ARM64
>
> We need to two things:
> 1) Wrap the platform-specific objcopy parameters in defines
>    The input and output parameters for $(OBJCOPY) are different
>    based on the platforms. As such provide them in the
>    OBJCOPY_MAGIC define and use that.
>
> 2) The alternative is a bit different (exists only under ARM64
>    and x86), while and there are no exceptions under ARM at all.
>    We use the LIVEPATCH_FEATURE CPU id feature for ARM similar to
>    how it is done on x86.
>
> We are not yet attempting to build them under ARM32 so
> that is still ifdefed out.
>
> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
>

Reviewed-by: Ross Lagerwall <ross.lagerwall@citrix.com>
diff mbox

Patch

diff --git a/xen/test/Makefile b/xen/test/Makefile
index 8c53040..95c1755 100644
--- a/xen/test/Makefile
+++ b/xen/test/Makefile
@@ -1,6 +1,6 @@ 
 .PHONY: tests
 tests:
-ifeq ($(XEN_TARGET_ARCH),x86_64)
+ifneq $(XEN_TARGET_ARCH),arm32)
 	$(MAKE) -f $(BASEDIR)/Rules.mk -C livepatch livepatch
 endif
 
diff --git a/xen/test/livepatch/Makefile b/xen/test/livepatch/Makefile
index 48ff843..d844ad4 100644
--- a/xen/test/livepatch/Makefile
+++ b/xen/test/livepatch/Makefile
@@ -1,5 +1,12 @@ 
 include $(XEN_ROOT)/Config.mk
 
+ifeq ($(XEN_TARGET_ARCH),x86_64)
+OBJCOPY_MAGIC := -I binary -O elf64-x86-64 -B i386:x86-64
+endif
+ifeq ($(XEN_TARGET_ARCH),arm64)
+OBJCOPY_MAGIC := -I binary -O elf64-littleaarch64 -B aarch64
+endif
+
 CODE_ADDR=$(shell nm --defined $(1) | grep $(2) | awk '{print "0x"$$1}')
 CODE_SZ=$(shell nm --defined -S $(1) | grep $(2) | awk '{ print "0x"$$2}')
 
@@ -54,7 +61,7 @@  $(LIVEPATCH): xen_hello_world_func.o xen_hello_world.o note.o
 .PHONY: note.o
 note.o:
 	$(OBJCOPY) -O binary --only-section=.note.gnu.build-id $(BASEDIR)/xen-syms $@.bin
-	$(OBJCOPY) -I binary -O elf64-x86-64 -B i386:x86-64 \
+	$(OBJCOPY) $(OBJCOPY_MAGIC) \
 		   --rename-section=.data=.livepatch.depends,alloc,load,readonly,data,contents -S $@.bin $@
 	rm -f $@.bin
 
@@ -65,7 +72,7 @@  note.o:
 .PHONY: hello_world_note.o
 hello_world_note.o: $(LIVEPATCH)
 	$(OBJCOPY) -O binary --only-section=.note.gnu.build-id $(LIVEPATCH) $@.bin
-	$(OBJCOPY)  -I binary -O elf64-x86-64 -B i386:x86-64 \
+	$(OBJCOPY) $(OBJCOPY_MAGIC) \
 		   --rename-section=.data=.livepatch.depends,alloc,load,readonly,data,contents -S $@.bin $@
 	rm -f $@.bin
 
diff --git a/xen/test/livepatch/xen_hello_world_func.c b/xen/test/livepatch/xen_hello_world_func.c
index 0321f3e..1518f71 100644
--- a/xen/test/livepatch/xen_hello_world_func.c
+++ b/xen/test/livepatch/xen_hello_world_func.c
@@ -7,14 +7,17 @@ 
 
 #include <asm/alternative.h>
 #include <asm/livepatch.h>
+#ifdef CONFIG_X86
 #include <asm/nops.h>
 #include <asm/uaccess.h>
 
 static unsigned long *non_canonical_addr = (unsigned long *)0xdead000000000000ULL;
+#endif
 
 /* Our replacement function for xen_extra_version. */
 const char *xen_hello_world(void)
 {
+#ifdef CONFIG_X86
     unsigned long tmp;
     int rc;
 
@@ -25,6 +28,10 @@  const char *xen_hello_world(void)
      */
     rc = __get_user(tmp, non_canonical_addr);
     BUG_ON(rc != -EFAULT);
+#endif
+#if defined(CONFIG_ARM) && defined(CONFIG_HAS_ALTERNATIVE)
+    asm(ALTERNATIVE("nop", "nop", LIVEPATCH_FEATURE));
+#endif
 
     return "Hello World";
 }