[SAoC] 'DPP with Linux kernel headers' Project Thread

Cristian Becerescu cristian.becerescu at yahoo.com
Mon Dec 2 21:36:33 UTC 2019

Update for week 2 of Milestone 3

- Fixed the bitfields issue 
- Tested DPP with all the kernel headers included by Alex's 
driver + other 70 random kernel headers
- Discovered (what I hope to be the last) 5 issues

1. In some obscure parts of the kernel, there exists something 
like 'extern __visibile const void __nosave_begin;', which is a 
variable of type void (but declared extern, so the compiler 
doesn't complain). Still thinking about how DPP should translate 
this to valid D code.

2. Unknown enums in function return/param types won't generate 
opaque definitions for that enum (as it is the case for struct).

e.g.: enum A f(enum B); // A and B would be uknown identifiers
       struct C *f(struct D *); // C and D would be declared by 
default by DPP

3. Unreachable struct

// C
struct A {
     struct B {
         int a;
         int b;

void f(struct B *); // valid in C

// D
void f(B *); // not valid in D, this is how DPP translates the 
function declaration
void f(A.B *); // OK, this should probably be the actual output

4. 'struct sockaddr size not known', and some functions return 
this struct type by value (not pointer to it). Definition of this 
struct should probably be there. Will check to see if I missed 
any flags in the Makefile.

> (3) I've tried using DPP with other kernel headers as well 
> (specifically netdevice.h), and usually I get an error telling 
> me the resources have been exhausted.

For this issue I previously proposed 2 approaches, which have 
their own limitations (thanks Atila for pointing them out).
The exhaustion of memory seems to happen while cpp/clang is still 
running, so the issue is not about the lines array (which anyway 
would not be bigger than MB, and the RAM usage is more than 6GB). 
I will, therefore, do some profiling to narrow down the causes 
for this and decide if there's something we could do about it.

More information about the Digitalmars-d mailing list