Skip to contentSkip to conversation

Quick way to get preprocessor output???

DISCUSSION Timothy Miller 2 participants 2 messages Apr 15, 2003

lore
Share & tools
lore
#0 lore raw

This is in regard to the kernel message compression I'm working on.

I'm starting work on the code parser for the kernel, and I find that a lot of the printk format strings have macros in them. Is there a quick and easy way to get preprocessor (.i) output from all kernel source files?

I'm sure I won't understand enough to hack all Makefiles, but in case I have to, what would be the best way of going about it? I know about using -E, but I don't want to take an excessive amount of time on this.

Of course, to actually implement the text compression, all Makefiles will have to change anyhow to pipe preprocessor output through a program whose output is then run through the compiler.

#1 lore raw
Quoted 2 lines · Timothy Miller

This is in regard to the kernel message compression I'm working on.

Something tells me that fun patches are going to show up.

Quoted 7 lines

I'm starting work on the code parser for the kernel, and I find that a lot of the printk format strings have macros in them. Is there a quick and easy way to get preprocessor (.i) output from all kernel source files?

I'm sure I won't understand enough to hack all Makefiles, but in case I have to, what would be the best way of going about it? I know about using -E, but I don't want to take an excessive amount of time on this.

Try the patch below or something similar. This was done by memory, without testing, for 2.5. The equivalent for 2.4 would be even simpler.

Actually, this should not work yet, the real trick would be to generate the .o files from .c *and* the .i, so the linker stage will find correct .o files and keep running.

In case you want to do allyesconfig, you will several hours fixing compile problems. The resulting .config after doing all that is on my system, you can have it if you want it.

Quoted 3 lines

Of course, to actually implement the text compression, all Makefiles will have to change anyhow to pipe preprocessor output through a program whose output is then run through the compiler.

Not all Makefiles, just one. :)

Jörn

Signature · 13 lines
And spam is a useful source of entropy for /dev/random too!
-- Jasmine Strong

--- linux-2.5.67/scripts/Makefile.build~pp_output	2003-04-07 19:32:25.000000000 +0200
+++ linux-2.5.67/scripts/Makefile.build	2003-04-15 17:12:32.000000000 +0200
@@ -157,7 +157,7 @@
 	$(call if_changed_dep,cc_i_c)
 
 quiet_cmd_cc_o_c = CC $(quiet_modtag)  $@
-cmd_cc_o_c       = $(CC) $(c_flags) -c -o $@ $<
+cmd_cc_o_c       = $(CC) $(c_flags) -C -E $< > $<.i
 
 # Built-in and composite module parts