Kernel printk format string compression: C syntax problem

Timothy Miller (miller@techsource.com)
Fri, 06 Jun 2003 13:27:35 -0400


Some of you may recall that I've been working on a way to compress
kernel printk format strings so as to shrink the kernel memory image a
bit. My results so far are that given the amount of space required for
all kernel strings, I can compress them to half their original size.
Given something the size of an allyesconfig kernel, that's not much
compression over-all, but it's still interesting. Additionally, the
means to compress the kernel messages are a compile-time issue and
completely transparent to the coder.

I am, however, encountering a problem, and I was hoping some people who
know C syntax better than both myself and the C syntax spec I found at
"http://eic.sourceforge.net/iso_c.html" could help me solve it.

Here's an example of the problem:

This line from process.c starts out as:

printk("EIP: %04x:[<%08lx>] CPU: %d\n",0xffff & regs->xcs,regs->eip,
(current_thread_info()->cpu));

And is replaced by:

printk( "EIP\200\3164x:[<\3168lx>] CPU\200%d\n" ,0xffff &
regs->xcs,regs->eip, (current_thread_info()->cpu));

GCC 3.0.4 makes the following complaint:

arch/i386/kernel/process.c:173: warning: too many arguments for format

What I believe is happening is that where I have the escape code "\316"
concatenated with the literal "8", the compiler is seeing it as "\3168"
and doesn't want to take it. Now, it's just a warning, and it MAY be
doing the right thing, but what I want to know is the PROPER UNAMBIGUOUS
way to specify at 3-digit octal escape code which is followed
immediately by a literal digit.

Any suggestions?

Thank you.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/