Browse Source

Autogenerate offsets for Python

This makes the offset generator more generic to generate a python module
in addition to a header for assembly.
Simon Gaiser 5 years ago
parent
commit
402fce72ba

+ 2 - 2
LibOS/shim/src/.gitignore

@@ -1,3 +1,3 @@
 libsysdb.so.cached
-asm-offsets.h
-asm-offsets.s
+/asm-offsets.h
+/generated-offsets.s

+ 1 - 1
LibOS/shim/src/asm-offsets.c → LibOS/shim/src/generated-offsets.c

@@ -1,4 +1,4 @@
-#include <asm-offsets-build.h>
+#include <generated-offsets-build.h>
 
 #include <stddef.h>
 

+ 18 - 8
Makefile.rules

@@ -22,12 +22,12 @@ echo-cmd = $(if $($(quiet)cmd_$(1)), echo '  $(call escsq,$($(quiet)cmd_$(1)))';
 cmd = @$(echo-cmd) $(cmd_$(1))
 
 
-quiet_cmd_asm_offsets_s = [ $@ ]
-      cmd_asm_offsets_s = $(CC) $(CFLAGS) $(defs) -S $< -o $@
+quiet_cmd_generated_offsets_s = [ $@ ]
+      cmd_generated_offsets_s = $(CC) $(CFLAGS) $(defs) -S $< -o $@
 
-asm-offsets.s: asm-offsets.c $(headers)
-	$(call cmd,asm_offsets_s)
-CLEAN_FILES += asm-offsets.s
+generated-offsets.s: generated-offsets.c $(filter-out asm-offsets.h,$(headers))
+	$(call cmd,generated_offsets_s)
+CLEAN_FILES += generated-offsets.s
 
 
 quiet_cmd_asm_offsets_h = [ $@ ]
@@ -37,14 +37,24 @@ quiet_cmd_asm_offsets_h = [ $@ ]
 	 echo "\#ifndef _ASM_OFFSETS_H_"; \
 	 echo "\#define _ASM_OFFSETS_H_"; \
 	 echo ""; \
-	 awk '/\.ascii \" \#define/{val=$$5; gsub("\\$$", "", val); print $$3" "$$4" "val}' $^; \
+	 awk '/\.ascii "GENERATED_INTEGER/{print "\#ifndef " $$3 "\n\#define " $$3 " " $$4 "\n\#endif"}' $^; \
 	 echo ""; \
 	 echo "\#endif") > $@
 
-asm-offsets.h: asm-offsets.s
+asm-offsets.h: generated-offsets.s
 	$(call cmd,asm_offsets_h)
-CLEAN_FILES += asm-offests.h
+CLEAN_FILES += asm-offsets.h
 
+quiet_cmd_generated_offsets_py = [ $@ ]
+      cmd_generated_offsets_py = \
+	(set -e; \
+	 echo "\# DO NOT MODIFY. THIS FILE WAS AUTO-GENERATED."; \
+	 echo ""; \
+	 awk '/\.ascii "GENERATED_INTEGER/{print $$3 " = " $$4}' $^) > $@
+
+generated_offsets.py: generated-offsets.s
+	$(call cmd,generated_offsets_py)
+CLEAN_FILES += generated_offsets.py generated_offsets.pyc
 
 quiet_cmd_ln_sf = [ $@ ]
       cmd_ln_sf = ln -sf $(abspath $<) $@

+ 0 - 1
Pal/include/pal/asm-offsets-build.h

@@ -1 +0,0 @@
-../../src/asm-offsets-build.h

+ 1 - 0
Pal/include/pal/generated-offsets-build.h

@@ -0,0 +1 @@
+../../src/generated-offsets-build.h

+ 4 - 4
Pal/src/asm-offsets-build.h → Pal/src/generated-offsets-build.h

@@ -1,10 +1,10 @@
-#ifndef ASM_OFFSETS_BUILD_H
-#define ASM_OFFSETS_BUILD_H
+#ifndef GENERATED_OFFSETS_BUILD_H
+#define GENERATED_OFFSETS_BUILD_H
 
 #define DEFINE(name, value)     \
-    __asm__ volatile(".ascii \" #define " #name " %0 \"\n":: "i"(value))
+    __asm__ volatile(".ascii \"GENERATED_INTEGER " #name " %p0 \"\n":: "i"(value))
 
 #define OFFSET(name, str, member)   DEFINE(name, offsetof(struct str, member))
 #define OFFSET_T(name, str_t, member) DEFINE(name, offsetof(str_t, member))
 
-#endif /* ASM_OFFSETS_BUILD_H */
+#endif /* GENERATED_OFFSETS_BUILD_H */

+ 2 - 1
Pal/src/host/Linux-SGX/.gitignore

@@ -1,5 +1,6 @@
 /asm-offsets.h
-/asm-offsets.s
+/generated-offsets.s
+/generated_offsets.py
 /pal-sgx
 
 *.pem

+ 1 - 1
Pal/src/host/Linux-SGX/Makefile

@@ -3,7 +3,7 @@ include Makefile.am
 CFLAGS	+= -I. -Iinclude -I../.. -I../../../include -I../../../lib -Isgx-driver
 ASFLAGS += -I. -I../.. -I../../../include
 
-host_files = libpal-Linux-SGX.a pal-sgx debugger/sgx_gdb.so
+host_files = libpal-Linux-SGX.a pal-sgx debugger/sgx_gdb.so generated_offsets.py
 
 defs	= -DIN_PAL -DPAL_DIR=$(PAL_DIR) -DRUNTIME_DIR=$(RUNTIME_DIR)
 enclave-objs = $(addprefix db_,files devices pipes sockets streams memory \

+ 1 - 1
Pal/src/host/Linux-SGX/asm-offsets.c → Pal/src/host/Linux-SGX/generated-offsets.c

@@ -4,7 +4,7 @@
 #include "sgx_tls.h"
 #include "pal_security.h"
 
-#include <asm-offsets-build.h>
+#include <generated-offsets-build.h>
 
 void dummy(void)
 {