lkml.org 
[lkml]   [1998]   [Mar]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: c++ module support?
From
Date
James Mastros <root@jennifer-unix.dyn.ml.org> writes:

> On 24 Mar 1998, Neal Becker wrote:
> > Can kernel modules be written in c++? Are there any known
> > restrictions? (Other than the init_module must be declared extern C).
>
> The kernel (and insmod) don't care what language the module is written in
> (as far as it knows, you could have typed the bytecode into a hex-editor)
> -- so long as it is validly executable bytecode, and all data passed back
> and forth is in the format that the kernel expects it (note that all
> functions that you give out pointers to are going to need to be extern c.)

No, g++ uses normal C calling conventions, so there is no need for extern "C"
if you use pointers [only methods will expect a this arguments]. extern "C"
is only needed if you want to _link_ with C or C++ code, but not if you
pass pointers.

Caveats:

- You might have a hard time to compile all needed kernel includes with g++.
- You need to wrap the kernel includes with extern "C" {
...
}
to link with the kernel.
- Linux kernel includes depend heavily on inline assembler and volatile
semantics. Earlier versions of g++ were known to have bugs in this regard
(ignoring volatile in many cases etc.). If the g++ version you use does this
you might get anything between subtly wrong code to all break loose @)
- C++ depends more on the runtime library (for new, exceptions etc.). You
can't use the normal libgcc2 or libstdc++, and have to reimplement the
needed runtime routines to work in the kernel environment.


-Andi

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu

\
 
 \ /
  Last update: 2005-03-22 13:41    [W:0.038 / U:12.676 seconds]
©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site