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:
@@ -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,
|
||||
|
Reference in New Issue
Block a user