[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] recent major -unstable changes cause ia64 build to be broken



On May 10, 2005, at 6:05 PM, Magenheimer, Dan (HP Labs Fort Collins) wrote:

it. Here I will repeat my point about relying on implicit includes... :)

Though I agree in principle with not using implicit includes,
it doesn't really work in reality.

Sorry, I strongly disagree. In this case, if every user of alloc_xenheap_page() had included xen/mm.h, you would not have had any problem.

For example, many
header files declare structs that use typedefs for elements
of the struct, which creates a direct dependency on a header
file.  The only way to avoid including the header file directly
in the "parent" header file is by "instructing" all the users
of the "parent" header to first include the subsidiary ones.
The C language doesn't deal with this very well, resulting
in very obscure error messages if something is missing.
And since typedefs cannot be duplicately declared even if
identical (a bug in C I think), there's a catch-22.

If a.h uses something defined in b.h, a.h must include b.h. It is a dependency. It's that simple.

I'm not saying recursive includes don't happen; they do. But once you've got that working and you explicitly include your dependencies, you won't see problems like this mm.h one, where changing one header file causes 10 loosely related files to break. Coincidentally, it also greatly simplifies writing a new set of header files for a new architecture. ;)

I suspect the source of many of your problems is due to the strange combination of two unrelated code bases, which makes your headers even more brittle than Xen/x86...

--
Hollis Blanchard
IBM Linux Technology Center


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.