libc: Update auto-gen scripts

Make the scripts use external/kernel-headers/original by default.

clean_header.py:  Document -k<path>, add -d<path>
find_headers.py:  Make kernel config files optional
update_all.py:    Allow setting the path to kernel headers on the command-line
update_all.py:    Better formatting of output on ttys
update_all.py:    Automatically perform "git add/rm" on affected files.
SYSCALLS.TXT:     Fix typo in __socketcall definition.
checksyscalls.py: Add support for superH architecture in the checks.
gensyscalls.py:   Automatically perform "git add/rm" on affected files.
cpp.py:           Fixed a bug that prevented certain type definitions to
                  be kept in the generated clean header (e.g.
                  struct ethtool_drvinfo in <linux/ethtool.h>)

All scripts will use the content of external/kernel-headers/original by default now.

The generated code removes all empty lines and trailing whitespace. This is useful
to ensure a unified output even if we change the parser again in the future.

The top-level disclaimer has been edited with update instructions to regenerate
the headers when needed.

Also, a warning is now inserted every 8th line in the final output:

/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */

Changes under kernel/arch-arm and kernel/arch-x86 should correspond to whitespace
differences and additionnal struct definitions that were missed by the previous
parser implementation.

Change-Id: Icd1c056bacd766759f3e9b7bb5d63a246f3d656a

WARNING: If you run these script, do not submit the result to gerrit for now.
         It seems there are discrepancies between the content of original headers
         and those currently commited under bionic/libc/kernel/.

         (This problem is the main motivation to insert the warning repeatedly).

         Current list of issues:

           - Missing SuperH headers (i.e. external/kernel-headers/original/asm-sh)
This commit is contained in:
David 'Digit' Turner
2010-10-11 22:11:06 +02:00
parent 040e18f362
commit fc2693110e
13 changed files with 432 additions and 237 deletions

View File

@@ -105,8 +105,29 @@ def find_bionic_root():
else:
return None
def find_original_kernel_headers():
"""try to find the directory containing the original kernel headers"""
bionic_root = find_bionic_root()
if not bionic_root:
D("Could not find Bionic root !!")
return None
path = os.path.normpath(bionic_root + "/../../external/kernel-headers/original")
if not os.path.isdir(path):
D("Could not find %s" % (path))
return None
return path
def find_kernel_headers():
"""try to find the directory containing the kernel headers for this machine"""
# First try to find the original kernel headers.
ret = find_original_kernel_headers()
if ret:
D("found original kernel headers in: %s" % (ret))
return ret
status, version = commands.getstatusoutput( "uname -r" ) # get Linux kernel version
if status != 0:
D("could not execute 'uname -r' command properly")
@@ -116,14 +137,39 @@ def find_kernel_headers():
if len(version) > 5 and version[-5:] == "-xenU":
version = version[:-5]
path = "/usr/src/linux-headers-" + version
D("probing %s for kernel headers" % (path+"/include"))
path = "/usr/src/linux-headers-" + version + "/include"
D("probing %s for kernel headers" % (path))
ret = os.path.isdir( path )
if ret:
D("found kernel headers in: %s" % (path + "/include"))
D("found kernel headers in: %s" % (path))
return path
return None
def find_arch_header(kernel_headers,arch,header):
# First, try in <root>/arch/<arm>/include/<header>
# corresponding to the location in the kernel source tree for
# certain architectures (e.g. arm).
path = "%s/arch/%s/include/asm/%s" % (kernel_headers, arch, header)
D("Probing for %s" % path)
if os.path.exists(path):
return path
# Try <root>/asm-<arch>/include/<header> corresponding to the location
# in the kernel source tree for other architectures (e.g. x86).
path = "%s/include/asm-%s/%s" % (kernel_headers, arch, header)
D("Probing for %s" % path)
if os.path.exists(path):
return path
# Otherwise, look under <root>/asm-<arch>/<header> corresponding
# the original kernel headers directory
path = "%s/asm-%s/%s" % (kernel_headers, arch, header)
D("Probing for %s" % path)
if os.path.exists(path):
return path
return None
# parser for the SYSCALLS.TXT file
#
@@ -212,7 +258,12 @@ class SysCallsTxtParser:
E("invalid syscall number in '%s'" % line)
return
print str(syscall_id) + ':' + str(syscall_id2) + ':' + str(syscall_id3)
global verbose
if verbose >= 2:
if call_id < 0:
print "%s: %d,%d,%d" % (syscall_name, syscall_id, syscall_id2, syscall_id3)
else:
print "%s(%d): %d,%d,%d" % (syscall_name, call_id, syscall_id, syscall_id2, syscall_id3)
t = { "id" : syscall_id,
"id2" : syscall_id2,