|
|
1.1 root 1: /* 1.1.1.2 ! root 2: * linux/kernel/printk.c ! 3: * ! 4: * (C) 1991 Linus Torvalds ! 5: */ ! 6: ! 7: /* 1.1 root 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: 1.1.1.2 ! root 19: extern int vsprintf(char * buf, const char * fmt, va_list args); ! 20: 1.1 root 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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.