parent
							
								
									69a96ab79e
								
							
						
					
					
						commit
						784198236a
					
				@ -0,0 +1,41 @@
 | 
				
			||||
/*
 | 
				
			||||
 *  linux/kernel/printk.c
 | 
				
			||||
 *
 | 
				
			||||
 *  (C) 1991  Linus Torvalds
 | 
				
			||||
 */
 | 
				
			||||
 | 
				
			||||
/*
 | 
				
			||||
 * When in kernel-mode, we cannot use printf, as fs is liable to
 | 
				
			||||
 * point to 'interesting' things. Make a printf with fs-saving, and
 | 
				
			||||
 * all is well.
 | 
				
			||||
 */
 | 
				
			||||
#include <stdarg.h>
 | 
				
			||||
#include <stddef.h>
 | 
				
			||||
 | 
				
			||||
#include <linux/kernel.h>
 | 
				
			||||
 | 
				
			||||
static char buf[1024];
 | 
				
			||||
 | 
				
			||||
extern int vsprintf(char * buf, const char * fmt, va_list args);
 | 
				
			||||
 | 
				
			||||
int printk(const char *fmt, ...)
 | 
				
			||||
{
 | 
				
			||||
	va_list args;
 | 
				
			||||
	int i;
 | 
				
			||||
 | 
				
			||||
	va_start(args, fmt);
 | 
				
			||||
	i=vsprintf(buf,fmt,args);
 | 
				
			||||
	va_end(args);
 | 
				
			||||
	__asm__("push %%fs\n\t"
 | 
				
			||||
		"push %%ds\n\t"
 | 
				
			||||
		"pop %%fs\n\t"
 | 
				
			||||
		"pushl %0\n\t"
 | 
				
			||||
		"pushl $buf\n\t"
 | 
				
			||||
		"pushl $0\n\t"
 | 
				
			||||
		"call tty_write\n\t"
 | 
				
			||||
		"addl $8,%%esp\n\t"
 | 
				
			||||
		"popl %0\n\t"
 | 
				
			||||
		"pop %%fs"
 | 
				
			||||
		::"r" (i):"ax","cx","dx");
 | 
				
			||||
	return i;
 | 
				
			||||
}
 | 
				
			||||
					Loading…
					
					
				
		Reference in new issue