Since man people seem to be thinking about using C++ in modules, here
is my example, if you really need to do so. Comments welcome.
- Jan
--- cpp_mod.cpp ---
extern "C"
{
#include <linux/types.h>
#include <linux/module.h>
#include <linux/kernel.h>
}
/* can't include <linux/vmalloc.h>, because it in turn includes */
/* <linux/list.h> which uses C++ keywords a variable names */
extern "C" void * vmalloc(unsigned long size);
extern "C" void vfree(void * addr);
// extern "C" int atexit(void (*function)(void));
/* include this explicitely: g++ might optimize instance in module.h away !*/
static char kernel_version[] = UTS_RELEASE;
MODULE_AUTHOR("Jan Willamowius");
MODULE_DESCRIPTION("Demo for C++ usage in modules");
MODULE_PARM(param1, "i");
static int param1 = 0;
void * operator new(size_t amt)
{
void * pReturn = NULL;
pReturn = vmalloc(amt);
printk("NEW: size = %d returns 0x%p\n", amt, pReturn);
return pReturn;
}
void operator delete( void *p )
{
printk("FREE: ptr = 0x%p\n", p);
vfree(p);
}
/*
int atexit(void (*function)(void))
{
printk("ATEXIT\n");
return 0;
};
*/
class Myclass
{
public:
int c;
void printit();
Myclass();
~Myclass();
};
Myclass::Myclass()
{
c = 1;
printk("*******CONSTRUCTOR %d\n", c );
}
Myclass::~Myclass()
{
}
void Myclass::printit()
{
printk("******* PRINTIT %d\n", c );
}
int init_module()
{
// static Myclass mc;
// mc.printit();
Myclass * mc = new Myclass;
mc->printit();
delete mc;
return 0;
}
void cleanup_module()
{
}
-- Jan Willamowius, http://www.willamowius.de/ Microsoft has a year 2000 problem. I'm part of it. I'm running Linux.- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/