diff options
author | David 'Digit' Turner <digit@google.com> | 2010-10-11 22:11:06 +0200 |
---|---|---|
committer | David 'Digit' Turner <digit@google.com> | 2011-02-03 18:07:41 +0100 |
commit | fc2693110ee8a2ba22a445ad9855fbe9e118d439 (patch) | |
tree | 6bbfcf0620780f454b5c0ac2dbd5341a00cfa157 /libc/tools/bionic_utils.py | |
parent | 040e18f362716c0bab1d9c39a869b98d6c61584c (diff) | |
download | bionic-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.py | 59 |
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, |