summaryrefslogtreecommitdiffstats
path: root/libc/tools/bionic_utils.py
diff options
context:
space:
mode:
authorDavid 'Digit' Turner <digit@google.com>2010-10-11 22:11:06 +0200
committerDavid 'Digit' Turner <digit@google.com>2011-02-03 18:07:41 +0100
commitfc2693110ee8a2ba22a445ad9855fbe9e118d439 (patch)
tree6bbfcf0620780f454b5c0ac2dbd5341a00cfa157 /libc/tools/bionic_utils.py
parent040e18f362716c0bab1d9c39a869b98d6c61584c (diff)
downloadbionic-fc2693110ee8a2ba22a445ad9855fbe9e118d439.zip
bionic-fc2693110ee8a2ba22a445ad9855fbe9e118d439.tar.gz
bionic-fc2693110ee8a2ba22a445ad9855fbe9e118d439.tar.bz2
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)
Diffstat (limited to 'libc/tools/bionic_utils.py')
-rw-r--r--libc/tools/bionic_utils.py59
1 files changed, 55 insertions, 4 deletions
diff --git a/libc/tools/bionic_utils.py b/libc/tools/bionic_utils.py
index 17eef13..e7c8c2d 100644
--- a/libc/tools/bionic_utils.py
+++ b/libc/tools/bionic_utils.py
@@ -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,