auto import from //branches/cupcake/...@125939
diff --git a/libc/kernel/tools/clean_header.py b/libc/kernel/tools/clean_header.py
index bed9926..de4bf85 100755
--- a/libc/kernel/tools/clean_header.py
+++ b/libc/kernel/tools/clean_header.py
@@ -69,6 +69,7 @@
     list.removeVarsAndFuncs( statics )
     list.removeComments()
     list.removeEmptyLines()
+    list.removeMacroDefines( kernel_ignored_macros )
     list.insertDisclaimer( kernel.kernel_disclaimer )
 
     out = StringOutput()
diff --git a/libc/kernel/tools/cpp.py b/libc/kernel/tools/cpp.py
index 54ebaf4..4b4bd38 100644
--- a/libc/kernel/tools/cpp.py
+++ b/libc/kernel/tools/cpp.py
@@ -1571,6 +1571,13 @@
         """returns True iff this is a conditional directive block"""
         return self.directive in ["if","ifdef","ifndef","else","elif","endif"]
 
+    def isDefine(self):
+        """returns the macro name in a #define directive, or None otherwise"""
+        if self.directive != "define":
+            return None
+
+        return self.tokens[0].value
+
     def isIf(self):
         """returns True iff this is an #if-like directive block"""
         return self.directive in ["if","ifdef","ifndef","elif"]
@@ -1678,6 +1685,10 @@
             if b.isIf():
                 b.expr.optimize(macros)
 
+    def removeMacroDefines(self,macros):
+        """remove known macro definitions from a BlockList"""
+        self.blocks = remove_macro_defines(self.blocks,macros)
+
     def removePrefixed(self,prefix,names):
         for b in self.blocks:
             if b.isIf():
@@ -1994,6 +2005,16 @@
 #####################################################################################
 #####################################################################################
 
+def  remove_macro_defines( blocks, excludedMacros=set() ):
+    """remove macro definitions like #define <macroName>  ...."""
+    result = []
+    for b in blocks:
+        macroName = b.isDefine()
+        if macroName == None or not macroName in excludedMacros:
+            result.append(b)
+
+    return result
+
 def  find_matching_endif( blocks, i ):
     n     = len(blocks)
     depth = 1
diff --git a/libc/kernel/tools/defaults.py b/libc/kernel/tools/defaults.py
index da78b87..aad0092 100644
--- a/libc/kernel/tools/defaults.py
+++ b/libc/kernel/tools/defaults.py
@@ -73,6 +73,17 @@
         "x86" : kernel_known_x86_statics
     }
 
+# this is a list of macros which we want to specifically exclude from
+# the generated files.
+#
+kernel_ignored_macros = set(
+        [ "MAXHOSTNAMELEN",  # for some reason, Linux defines it to 64
+                             # while most of the BSD code expects this to be 256
+                             # so ignore the kernel-provided definition and
+                             # define it in the Bionic headers instead
+        ]
+    )
+
 # this is the standard disclaimer
 #
 kernel_disclaimer = """\