File:  [Early Linux] / linux / kernel / printk.c
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 18:01:38 2018 UTC (23 months, 2 weeks ago) by root
Branches: linus, MAIN
CVS tags: linux011, linux010, HEAD
linux 0.10

    1: /*
    2:  *  linux/kernel/printk.c
    3:  *
    4:  *  (C) 1991  Linus Torvalds
    5:  */
    6: 
    7: /*
    8:  * When in kernel-mode, we cannot use printf, as fs is liable to
    9:  * point to 'interesting' things. Make a printf with fs-saving, and
   10:  * all is well.
   11:  */
   12: #include <stdarg.h>
   13: #include <stddef.h>
   14: 
   15: #include <linux/kernel.h>
   16: 
   17: static char buf[1024];
   18: 
   19: extern int vsprintf(char * buf, const char * fmt, va_list args);
   20: 
   21: int printk(const char *fmt, ...)
   22: {
   23: 	va_list args;
   24: 	int i;
   25: 
   26: 	va_start(args, fmt);
   27: 	i=vsprintf(buf,fmt,args);
   28: 	va_end(args);
   29: 	__asm__("push %%fs\n\t"
   30: 		"push %%ds\n\t"
   31: 		"pop %%fs\n\t"
   32: 		"pushl %0\n\t"
   33: 		"pushl $_buf\n\t"
   34: 		"pushl $0\n\t"
   35: 		"call _tty_write\n\t"
   36: 		"addl $8,%%esp\n\t"
   37: 		"popl %0\n\t"
   38: 		"pop %%fs"
   39: 		::"r" (i):"ax","cx","dx");
   40: 	return i;
   41: }

unix.superglobalmegacorp.com