[RFC,v2,1/3] selftests/x86: Fixed Makefile for SGX selftest
diff mbox series

Message ID 20190424062623.4345-2-cedric.xing@intel.com
State New
Headers show
Series
  • An alternative __vdso_sgx_enter_enclave() to allow enclave/host parameter passing using untrusted stack
Related show

Commit Message

Xing, Cedric April 24, 2019, 6:26 a.m. UTC
The original x86/sgx/Makefile doesn't work when 'x86/sgx' is specified as the
test target. This patch fixes that problem, along with minor changes to the
dependencies between 'x86' and 'x86/sgx' in selftests/x86/Makefile.

Signed-off-by: Cedric Xing <cedric.xing@intel.com>
---
 tools/testing/selftests/x86/Makefile     | 12 +++----
 tools/testing/selftests/x86/sgx/Makefile | 45 +++++++++---------------
 2 files changed, 22 insertions(+), 35 deletions(-)

Comments

Jarkko Sakkinen July 12, 2019, 3:19 a.m. UTC | #1
On Tue, Apr 23, 2019 at 11:26:21PM -0700, Cedric Xing wrote:
> The original x86/sgx/Makefile doesn't work when 'x86/sgx' is specified as the
> test target. This patch fixes that problem, along with minor changes to the
> dependencies between 'x86' and 'x86/sgx' in selftests/x86/Makefile.
> 
> Signed-off-by: Cedric Xing <cedric.xing@intel.com>
> ---
>  tools/testing/selftests/x86/Makefile     | 12 +++----
>  tools/testing/selftests/x86/sgx/Makefile | 45 +++++++++---------------
>  2 files changed, 22 insertions(+), 35 deletions(-)
> 
> diff --git a/tools/testing/selftests/x86/Makefile b/tools/testing/selftests/x86/Makefile
> index 4fc9a42f56ea..1294c5f5b6ca 100644
> --- a/tools/testing/selftests/x86/Makefile
> +++ b/tools/testing/selftests/x86/Makefile
> @@ -70,11 +70,11 @@ all_32: $(BINARIES_32)
>  
>  all_64: $(BINARIES_64)
>  
> -all_64: $(SUBDIRS_64)
> -	@for DIR in $(SUBDIRS_64); do			\
> -		BUILD_TARGET=$(OUTPUT)/$$DIR;		\
> -		mkdir $$BUILD_TARGET  -p;		\
> -		make OUTPUT=$$BUILD_TARGET -C $$DIR $@;	\
> +all_64: | $(SUBDIRS_64)
> +	@for DIR in $|; do					\
> +		BUILD_TARGET=$(OUTPUT)/$$DIR;			\
> +		mkdir $$BUILD_TARGET  -p;			\
> +		$(MAKE) OUTPUT=$$BUILD_TARGET -C $$DIR $@;	\

This is not fix for anything. It is change in semantics. This diff
should be isolated to its own commit as you are changing something
outside of SGX scope.

>  	done
>  
>  EXTRA_CLEAN := $(BINARIES_32) $(BINARIES_64)
> @@ -90,7 +90,7 @@ ifeq ($(CAN_BUILD_I386)$(CAN_BUILD_X86_64),01)
>  all: warn_32bit_failure
>  
>  warn_32bit_failure:
> -	@echo "Warning: you seem to have a broken 32-bit build" 2>&1; 	\
> +	@echo "Warning: you seem to have a broken 32-bit build" 2>&1;	\

Please clean this up.

>  	echo "environment.  This will reduce test coverage of 64-bit" 2>&1; \
>  	echo "kernels.  If you are using a Debian-like distribution," 2>&1; \
>  	echo "try:"; 2>&1; \
> diff --git a/tools/testing/selftests/x86/sgx/Makefile b/tools/testing/selftests/x86/sgx/Makefile
> index 1fd6f2708e81..3af15d7c8644 100644
> --- a/tools/testing/selftests/x86/sgx/Makefile
> +++ b/tools/testing/selftests/x86/sgx/Makefile
> @@ -2,47 +2,34 @@ top_srcdir = ../../../../..
>  
>  include ../../lib.mk
>  
> -HOST_CFLAGS := -Wall -Werror -g $(INCLUDES) -fPIC
> -ENCL_CFLAGS := -Wall -Werror -static -nostdlib -nostartfiles -fPIC \
> +ifeq ($(shell $(CC) -dumpmachine | cut --delimiter=- -f1),x86_64)
> +all: all_64
> +endif
> +
> +HOST_CFLAGS := -Wall -Werror -g $(INCLUDES)
> +ENCL_CFLAGS := -Wall -Werror -static -nostdlib -nostartfiles -fPIE \
>  	       -fno-stack-protector -mrdrnd $(INCLUDES)
>  
>  TEST_CUSTOM_PROGS := $(OUTPUT)/test_sgx
>  all_64: $(TEST_CUSTOM_PROGS)
>  
> -$(TEST_CUSTOM_PROGS): $(OUTPUT)/main.o $(OUTPUT)/sgx_call.o \
> -		      $(OUTPUT)/encl_piggy.o
> +$(TEST_CUSTOM_PROGS): main.c sgx_call.S $(OUTPUT)/encl_piggy.o
>  	$(CC) $(HOST_CFLAGS) -o $@ $^
>  
> -$(OUTPUT)/main.o: main.c
> -	$(CC) $(HOST_CFLAGS) -c $< -o $@
> -
> -$(OUTPUT)/sgx_call.o: sgx_call.S
> -	$(CC) $(HOST_CFLAGS) -c $< -o $@
> -
> -$(OUTPUT)/encl_piggy.o: $(OUTPUT)/encl.bin $(OUTPUT)/encl.ss
> -	$(CC) $(HOST_CFLAGS) -c encl_piggy.S -o $@
> +$(OUTPUT)/encl_piggy.o: encl_piggy.S $(OUTPUT)/encl.bin $(OUTPUT)/encl.ss
> +	$(CC) $(HOST_CFLAGS) -I$(OUTPUT) -c $< -o $@
>  
> -$(OUTPUT)/encl.bin: $(OUTPUT)/encl.elf $(OUTPUT)/sgxsign
> +$(OUTPUT)/encl.bin: $(OUTPUT)/encl.elf
>  	objcopy --remove-section=.got.plt -O binary $< $@
>  
> -$(OUTPUT)/encl.elf: $(OUTPUT)/encl.o $(OUTPUT)/encl_bootstrap.o
> -	$(CC) $(ENCL_CFLAGS) -T encl.lds -o $@ $^
> +$(OUTPUT)/encl.elf: encl.lds encl.c encl_bootstrap.S
> +	$(CC) $(ENCL_CFLAGS) -T $^ -o $@
>  
> -$(OUTPUT)/encl.o: encl.c
> -	$(CC) $(ENCL_CFLAGS) -c $< -o $@
> -
> -$(OUTPUT)/encl_bootstrap.o: encl_bootstrap.S
> -	$(CC) $(ENCL_CFLAGS) -c $< -o $@
> -
> -$(OUTPUT)/encl.ss: $(OUTPUT)/encl.bin  $(OUTPUT)/sgxsign
> -	$(OUTPUT)/sgxsign signing_key.pem $(OUTPUT)/encl.bin $(OUTPUT)/encl.ss
> +$(OUTPUT)/encl.ss: $(OUTPUT)/sgxsign signing_key.pem $(OUTPUT)/encl.bin
> +	$^ $@
>  
>  $(OUTPUT)/sgxsign: sgxsign.c
>  	$(CC) -o $@ $< -lcrypto
>  
> -EXTRA_CLEAN := $(OUTPUT)/sgx-selftest $(OUTPUT)/sgx-selftest.o \
> -	       $(OUTPUT)/sgx_call.o $(OUTPUT)/encl.bin $(OUTPUT)/encl.ss \
> -	       $(OUTPUT)/encl.elf $(OUTPUT)/encl.o $(OUTPUT)/encl_bootstrap.o \
> -	       $(OUTPUT)/sgxsign
> -
> -.PHONY: clean
> +EXTRA_CLEAN := $(TEST_CUSTOM_PROGS) $(addprefix $(OUTPUT)/,	\
> +		encl.elf encl.bin encl.ss encl_piggy.o sgxsign)
> -- 
> 2.17.1
> 

What are all these changes to the makefile? I don't see mention of them
in the commit message.

/Jarkko
Xing, Cedric July 13, 2019, 6:58 a.m. UTC | #2
On 7/11/2019 8:19 PM, Jarkko Sakkinen wrote:
> On Tue, Apr 23, 2019 at 11:26:21PM -0700, Cedric Xing wrote:
>> The original x86/sgx/Makefile doesn't work when 'x86/sgx' is specified as the
>> test target. This patch fixes that problem, along with minor changes to the
>> dependencies between 'x86' and 'x86/sgx' in selftests/x86/Makefile.
>>
>> Signed-off-by: Cedric Xing <cedric.xing@intel.com>
>> ---
>>   tools/testing/selftests/x86/Makefile     | 12 +++----
>>   tools/testing/selftests/x86/sgx/Makefile | 45 +++++++++---------------
>>   2 files changed, 22 insertions(+), 35 deletions(-)
>>
>> diff --git a/tools/testing/selftests/x86/Makefile b/tools/testing/selftests/x86/Makefile
>> index 4fc9a42f56ea..1294c5f5b6ca 100644
>> --- a/tools/testing/selftests/x86/Makefile
>> +++ b/tools/testing/selftests/x86/Makefile
>> @@ -70,11 +70,11 @@ all_32: $(BINARIES_32)
>>   
>>   all_64: $(BINARIES_64)
>>   
>> -all_64: $(SUBDIRS_64)
>> -	@for DIR in $(SUBDIRS_64); do			\
>> -		BUILD_TARGET=$(OUTPUT)/$$DIR;		\
>> -		mkdir $$BUILD_TARGET  -p;		\
>> -		make OUTPUT=$$BUILD_TARGET -C $$DIR $@;	\
>> +all_64: | $(SUBDIRS_64)
>> +	@for DIR in $|; do					\
>> +		BUILD_TARGET=$(OUTPUT)/$$DIR;			\
>> +		mkdir $$BUILD_TARGET  -p;			\
>> +		$(MAKE) OUTPUT=$$BUILD_TARGET -C $$DIR $@;	\
> 
> This is not fix for anything. It is change in semantics. This diff
> should be isolated to its own commit as you are changing something
> outside of SGX scope.

I have removed all changes to x86/Makefile from v4.

The current x86/Makefile only builds but cannot run sgx selftest. I 
don't see it as an urgent issue though.

>>   	done
>>   
>>   EXTRA_CLEAN := $(BINARIES_32) $(BINARIES_64)
>> @@ -90,7 +90,7 @@ ifeq ($(CAN_BUILD_I386)$(CAN_BUILD_X86_64),01)
>>   all: warn_32bit_failure
>>   
>>   warn_32bit_failure:
>> -	@echo "Warning: you seem to have a broken 32-bit build" 2>&1; 	\
>> +	@echo "Warning: you seem to have a broken 32-bit build" 2>&1;	\
> 
> Please clean this up.
> 
>>   	echo "environment.  This will reduce test coverage of 64-bit" 2>&1; \
>>   	echo "kernels.  If you are using a Debian-like distribution," 2>&1; \
>>   	echo "try:"; 2>&1; \
>> diff --git a/tools/testing/selftests/x86/sgx/Makefile b/tools/testing/selftests/x86/sgx/Makefile
>> index 1fd6f2708e81..3af15d7c8644 100644
>> --- a/tools/testing/selftests/x86/sgx/Makefile
>> +++ b/tools/testing/selftests/x86/sgx/Makefile
>> @@ -2,47 +2,34 @@ top_srcdir = ../../../../..
>>   
>>   include ../../lib.mk
>>   
>> -HOST_CFLAGS := -Wall -Werror -g $(INCLUDES) -fPIC
>> -ENCL_CFLAGS := -Wall -Werror -static -nostdlib -nostartfiles -fPIC \
>> +ifeq ($(shell $(CC) -dumpmachine | cut --delimiter=- -f1),x86_64)
>> +all: all_64
>> +endif
>> +
>> +HOST_CFLAGS := -Wall -Werror -g $(INCLUDES)
>> +ENCL_CFLAGS := -Wall -Werror -static -nostdlib -nostartfiles -fPIE \
>>   	       -fno-stack-protector -mrdrnd $(INCLUDES)
>>   
>>   TEST_CUSTOM_PROGS := $(OUTPUT)/test_sgx
>>   all_64: $(TEST_CUSTOM_PROGS)
>>   
>> -$(TEST_CUSTOM_PROGS): $(OUTPUT)/main.o $(OUTPUT)/sgx_call.o \
>> -		      $(OUTPUT)/encl_piggy.o
>> +$(TEST_CUSTOM_PROGS): main.c sgx_call.S $(OUTPUT)/encl_piggy.o
>>   	$(CC) $(HOST_CFLAGS) -o $@ $^
>>   
>> -$(OUTPUT)/main.o: main.c
>> -	$(CC) $(HOST_CFLAGS) -c $< -o $@
>> -
>> -$(OUTPUT)/sgx_call.o: sgx_call.S
>> -	$(CC) $(HOST_CFLAGS) -c $< -o $@
>> -
>> -$(OUTPUT)/encl_piggy.o: $(OUTPUT)/encl.bin $(OUTPUT)/encl.ss
>> -	$(CC) $(HOST_CFLAGS) -c encl_piggy.S -o $@
>> +$(OUTPUT)/encl_piggy.o: encl_piggy.S $(OUTPUT)/encl.bin $(OUTPUT)/encl.ss
>> +	$(CC) $(HOST_CFLAGS) -I$(OUTPUT) -c $< -o $@
>>   
>> -$(OUTPUT)/encl.bin: $(OUTPUT)/encl.elf $(OUTPUT)/sgxsign
>> +$(OUTPUT)/encl.bin: $(OUTPUT)/encl.elf
>>   	objcopy --remove-section=.got.plt -O binary $< $@
>>   
>> -$(OUTPUT)/encl.elf: $(OUTPUT)/encl.o $(OUTPUT)/encl_bootstrap.o
>> -	$(CC) $(ENCL_CFLAGS) -T encl.lds -o $@ $^
>> +$(OUTPUT)/encl.elf: encl.lds encl.c encl_bootstrap.S
>> +	$(CC) $(ENCL_CFLAGS) -T $^ -o $@
>>   
>> -$(OUTPUT)/encl.o: encl.c
>> -	$(CC) $(ENCL_CFLAGS) -c $< -o $@
>> -
>> -$(OUTPUT)/encl_bootstrap.o: encl_bootstrap.S
>> -	$(CC) $(ENCL_CFLAGS) -c $< -o $@
>> -
>> -$(OUTPUT)/encl.ss: $(OUTPUT)/encl.bin  $(OUTPUT)/sgxsign
>> -	$(OUTPUT)/sgxsign signing_key.pem $(OUTPUT)/encl.bin $(OUTPUT)/encl.ss
>> +$(OUTPUT)/encl.ss: $(OUTPUT)/sgxsign signing_key.pem $(OUTPUT)/encl.bin
>> +	$^ $@
>>   
>>   $(OUTPUT)/sgxsign: sgxsign.c
>>   	$(CC) -o $@ $< -lcrypto
>>   
>> -EXTRA_CLEAN := $(OUTPUT)/sgx-selftest $(OUTPUT)/sgx-selftest.o \
>> -	       $(OUTPUT)/sgx_call.o $(OUTPUT)/encl.bin $(OUTPUT)/encl.ss \
>> -	       $(OUTPUT)/encl.elf $(OUTPUT)/encl.o $(OUTPUT)/encl_bootstrap.o \
>> -	       $(OUTPUT)/sgxsign
>> -
>> -.PHONY: clean
>> +EXTRA_CLEAN := $(TEST_CUSTOM_PROGS) $(addprefix $(OUTPUT)/,	\
>> +		encl.elf encl.bin encl.ss encl_piggy.o sgxsign)
>> -- 
>> 2.17.1
>>
> 
> What are all these changes to the makefile? I don't see mention of them
> in the commit message.

Added description to the commit message in v4.

> /Jarkko
>

Patch
diff mbox series

diff --git a/tools/testing/selftests/x86/Makefile b/tools/testing/selftests/x86/Makefile
index 4fc9a42f56ea..1294c5f5b6ca 100644
--- a/tools/testing/selftests/x86/Makefile
+++ b/tools/testing/selftests/x86/Makefile
@@ -70,11 +70,11 @@  all_32: $(BINARIES_32)
 
 all_64: $(BINARIES_64)
 
-all_64: $(SUBDIRS_64)
-	@for DIR in $(SUBDIRS_64); do			\
-		BUILD_TARGET=$(OUTPUT)/$$DIR;		\
-		mkdir $$BUILD_TARGET  -p;		\
-		make OUTPUT=$$BUILD_TARGET -C $$DIR $@;	\
+all_64: | $(SUBDIRS_64)
+	@for DIR in $|; do					\
+		BUILD_TARGET=$(OUTPUT)/$$DIR;			\
+		mkdir $$BUILD_TARGET  -p;			\
+		$(MAKE) OUTPUT=$$BUILD_TARGET -C $$DIR $@;	\
 	done
 
 EXTRA_CLEAN := $(BINARIES_32) $(BINARIES_64)
@@ -90,7 +90,7 @@  ifeq ($(CAN_BUILD_I386)$(CAN_BUILD_X86_64),01)
 all: warn_32bit_failure
 
 warn_32bit_failure:
-	@echo "Warning: you seem to have a broken 32-bit build" 2>&1; 	\
+	@echo "Warning: you seem to have a broken 32-bit build" 2>&1;	\
 	echo "environment.  This will reduce test coverage of 64-bit" 2>&1; \
 	echo "kernels.  If you are using a Debian-like distribution," 2>&1; \
 	echo "try:"; 2>&1; \
diff --git a/tools/testing/selftests/x86/sgx/Makefile b/tools/testing/selftests/x86/sgx/Makefile
index 1fd6f2708e81..3af15d7c8644 100644
--- a/tools/testing/selftests/x86/sgx/Makefile
+++ b/tools/testing/selftests/x86/sgx/Makefile
@@ -2,47 +2,34 @@  top_srcdir = ../../../../..
 
 include ../../lib.mk
 
-HOST_CFLAGS := -Wall -Werror -g $(INCLUDES) -fPIC
-ENCL_CFLAGS := -Wall -Werror -static -nostdlib -nostartfiles -fPIC \
+ifeq ($(shell $(CC) -dumpmachine | cut --delimiter=- -f1),x86_64)
+all: all_64
+endif
+
+HOST_CFLAGS := -Wall -Werror -g $(INCLUDES)
+ENCL_CFLAGS := -Wall -Werror -static -nostdlib -nostartfiles -fPIE \
 	       -fno-stack-protector -mrdrnd $(INCLUDES)
 
 TEST_CUSTOM_PROGS := $(OUTPUT)/test_sgx
 all_64: $(TEST_CUSTOM_PROGS)
 
-$(TEST_CUSTOM_PROGS): $(OUTPUT)/main.o $(OUTPUT)/sgx_call.o \
-		      $(OUTPUT)/encl_piggy.o
+$(TEST_CUSTOM_PROGS): main.c sgx_call.S $(OUTPUT)/encl_piggy.o
 	$(CC) $(HOST_CFLAGS) -o $@ $^
 
-$(OUTPUT)/main.o: main.c
-	$(CC) $(HOST_CFLAGS) -c $< -o $@
-
-$(OUTPUT)/sgx_call.o: sgx_call.S
-	$(CC) $(HOST_CFLAGS) -c $< -o $@
-
-$(OUTPUT)/encl_piggy.o: $(OUTPUT)/encl.bin $(OUTPUT)/encl.ss
-	$(CC) $(HOST_CFLAGS) -c encl_piggy.S -o $@
+$(OUTPUT)/encl_piggy.o: encl_piggy.S $(OUTPUT)/encl.bin $(OUTPUT)/encl.ss
+	$(CC) $(HOST_CFLAGS) -I$(OUTPUT) -c $< -o $@
 
-$(OUTPUT)/encl.bin: $(OUTPUT)/encl.elf $(OUTPUT)/sgxsign
+$(OUTPUT)/encl.bin: $(OUTPUT)/encl.elf
 	objcopy --remove-section=.got.plt -O binary $< $@
 
-$(OUTPUT)/encl.elf: $(OUTPUT)/encl.o $(OUTPUT)/encl_bootstrap.o
-	$(CC) $(ENCL_CFLAGS) -T encl.lds -o $@ $^
+$(OUTPUT)/encl.elf: encl.lds encl.c encl_bootstrap.S
+	$(CC) $(ENCL_CFLAGS) -T $^ -o $@
 
-$(OUTPUT)/encl.o: encl.c
-	$(CC) $(ENCL_CFLAGS) -c $< -o $@
-
-$(OUTPUT)/encl_bootstrap.o: encl_bootstrap.S
-	$(CC) $(ENCL_CFLAGS) -c $< -o $@
-
-$(OUTPUT)/encl.ss: $(OUTPUT)/encl.bin  $(OUTPUT)/sgxsign
-	$(OUTPUT)/sgxsign signing_key.pem $(OUTPUT)/encl.bin $(OUTPUT)/encl.ss
+$(OUTPUT)/encl.ss: $(OUTPUT)/sgxsign signing_key.pem $(OUTPUT)/encl.bin
+	$^ $@
 
 $(OUTPUT)/sgxsign: sgxsign.c
 	$(CC) -o $@ $< -lcrypto
 
-EXTRA_CLEAN := $(OUTPUT)/sgx-selftest $(OUTPUT)/sgx-selftest.o \
-	       $(OUTPUT)/sgx_call.o $(OUTPUT)/encl.bin $(OUTPUT)/encl.ss \
-	       $(OUTPUT)/encl.elf $(OUTPUT)/encl.o $(OUTPUT)/encl_bootstrap.o \
-	       $(OUTPUT)/sgxsign
-
-.PHONY: clean
+EXTRA_CLEAN := $(TEST_CUSTOM_PROGS) $(addprefix $(OUTPUT)/,	\
+		encl.elf encl.bin encl.ss encl_piggy.o sgxsign)