2005-09-24 18:30:23

by Brian Gerst

[permalink] [raw]
Subject: [PATCH] Use .incbin for config_data.gz

Subject: [PATCH] Use .incbin for config_data.gz

Instead of creating config_data.h, use .incbin in inline assembly to
directly include config_data.gz.

Signed-off-by: Brian Gerst <[email protected]>

---

kernel/Makefile | 9 +--------
kernel/configs.c | 18 +++++++++++++-----
2 files changed, 14 insertions(+), 13 deletions(-)

5674a0222370187dbe3401cb7a380c491a13f167
diff --git a/kernel/Makefile b/kernel/Makefile
--- a/kernel/Makefile
+++ b/kernel/Makefile
@@ -41,16 +41,9 @@ ifneq ($(CONFIG_SCHED_NO_NO_OMIT_FRAME_P
CFLAGS_sched.o := $(PROFILING) -fno-omit-frame-pointer
endif

-$(obj)/configs.o: $(obj)/config_data.h
+$(obj)/configs.o: $(obj)/config_data.gz

-# config_data.h contains the same information as ikconfig.h but gzipped.
# Info from config_data can be extracted from /proc/config*
targets += config_data.gz
$(obj)/config_data.gz: .config FORCE
$(call if_changed,gzip)
-
-quiet_cmd_ikconfiggz = IKCFG $@
- cmd_ikconfiggz = (echo "static const char kernel_config_data[] = MAGIC_START"; cat $< | scripts/bin2c; echo "MAGIC_END;") > $@
-targets += config_data.h
-$(obj)/config_data.h: $(obj)/config_data.gz FORCE
- $(call if_changed,ikconfiggz)
diff --git a/kernel/configs.c b/kernel/configs.c
--- a/kernel/configs.c
+++ b/kernel/configs.c
@@ -46,12 +46,20 @@
*/
#define MAGIC_START "IKCFG_ST"
#define MAGIC_END "IKCFG_ED"
-#include "config_data.h"

+asm(
+".data\n"
+" .ascii \"" MAGIC_START "\"\n"
+"kernel_config_data:\n"
+" .incbin \"kernel/config_data.gz\"\n"
+"kernel_config_data_end:\n"
+" .ascii \"" MAGIC_END "\"\n"
+".previous\n"
+);

-#define MAGIC_SIZE (sizeof(MAGIC_START) - 1)
-#define kernel_config_data_size \
- (sizeof(kernel_config_data) - 1 - MAGIC_SIZE * 2)
+extern const char kernel_config_data[], kernel_config_data_end[];
+
+#define kernel_config_data_size (kernel_config_data_end - kernel_config_data)

#ifdef CONFIG_IKCONFIG_PROC

@@ -69,7 +77,7 @@ ikconfig_read_current(struct file *file,
return 0;

count = min(len, (size_t)(kernel_config_data_size - pos));
- if (copy_to_user(buf, kernel_config_data + MAGIC_SIZE + pos, count))
+ if (copy_to_user(buf, kernel_config_data + pos, count))
return -EFAULT;

*offset += count;


Attachments:
0002-Use-.incbin-for-config_data.gz.txt (2.16 kB)

2005-09-25 10:14:35

by Ingo Oeser

[permalink] [raw]
Subject: Re: [PATCH] Use .incbin for config_data.gz

Hi Brian,

On Saturday 24 September 2005 20:30, Brian Gerst wrote:
> Instead of creating config_data.h, use .incbin in inline assembly to
> directly include config_data.gz.

Good idea, but please make this .rodata instead of .data,
since this isn't going to be modified.

Regards

Ingo Oeser


Attachments:
(No filename) (293.00 B)
(No filename) (189.00 B)
Download all attachments

2005-09-25 13:16:55

by Brian Gerst

[permalink] [raw]
Subject: Re: [PATCH] Use .incbin for config_data.gz

Subject: [PATCH] Use .incbin for config_data.gz

Instead of creating config_data.h, use .incbin in inline assembly to
directly include config_data.gz.

Signed-off-by: Brian Gerst <[email protected]>

---

kernel/Makefile | 9 +--------
kernel/configs.c | 18 +++++++++++++-----
2 files changed, 14 insertions(+), 13 deletions(-)

5674a0222370187dbe3401cb7a380c491a13f167
diff --git a/kernel/Makefile b/kernel/Makefile
--- a/kernel/Makefile
+++ b/kernel/Makefile
@@ -41,16 +41,9 @@ ifneq ($(CONFIG_SCHED_NO_NO_OMIT_FRAME_P
CFLAGS_sched.o := $(PROFILING) -fno-omit-frame-pointer
endif

-$(obj)/configs.o: $(obj)/config_data.h
+$(obj)/configs.o: $(obj)/config_data.gz

-# config_data.h contains the same information as ikconfig.h but gzipped.
# Info from config_data can be extracted from /proc/config*
targets += config_data.gz
$(obj)/config_data.gz: .config FORCE
$(call if_changed,gzip)
-
-quiet_cmd_ikconfiggz = IKCFG $@
- cmd_ikconfiggz = (echo "static const char kernel_config_data[] = MAGIC_START"; cat $< | scripts/bin2c; echo "MAGIC_END;") > $@
-targets += config_data.h
-$(obj)/config_data.h: $(obj)/config_data.gz FORCE
- $(call if_changed,ikconfiggz)
diff --git a/kernel/configs.c b/kernel/configs.c
--- a/kernel/configs.c
+++ b/kernel/configs.c
@@ -46,12 +46,20 @@
*/
#define MAGIC_START "IKCFG_ST"
#define MAGIC_END "IKCFG_ED"
-#include "config_data.h"

+asm(
+".section .rodata, \"a\"\n"
+" .ascii \"" MAGIC_START "\"\n"
+"kernel_config_data:\n"
+" .incbin \"kernel/config_data.gz\"\n"
+"kernel_config_data_end:\n"
+" .ascii \"" MAGIC_END "\"\n"
+".previous\n"
+);

-#define MAGIC_SIZE (sizeof(MAGIC_START) - 1)
-#define kernel_config_data_size \
- (sizeof(kernel_config_data) - 1 - MAGIC_SIZE * 2)
+extern const char kernel_config_data[], kernel_config_data_end[];
+
+#define kernel_config_data_size (kernel_config_data_end - kernel_config_data)

#ifdef CONFIG_IKCONFIG_PROC

@@ -69,7 +77,7 @@ ikconfig_read_current(struct file *file,
return 0;

count = min(len, (size_t)(kernel_config_data_size - pos));
- if (copy_to_user(buf, kernel_config_data + MAGIC_SIZE + pos, count))
+ if (copy_to_user(buf, kernel_config_data + pos, count))
return -EFAULT;

*offset += count;


Attachments:
0002-Use-.incbin-for-config_data.gz.txt (2.18 kB)