summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--BCC.md186
-rw-r--r--LICENSE202
-rw-r--r--METADATA19
-rw-r--r--MODULE_LICENSE_APACHE20
-rw-r--r--NOTICE202
-rw-r--r--OWNERS4
-rw-r--r--README.md173
-rw-r--r--TODO5
-rw-r--r--addons/bashrc21
-rw-r--r--addons/bashrc.common37
-rw-r--r--addons/bashrc.silent4
-rwxr-xr-xaddons/build-debian-tar19
-rwxr-xr-xaddons/device-umount-all16
-rwxr-xr-xaddons/device-unpack28
-rwxr-xr-xaddons/get_kvers.sh12
-rwxr-xr-xaddons/run7
-rwxr-xr-xaddons/run-command10
-rw-r--r--addons/run.common42
-rwxr-xr-xadeb6
-rwxr-xr-xandrodeb386
-rwxr-xr-xbcc/build-bcc.sh12
-rwxr-xr-xbcc/build-kheaders-targz.sh39
-rw-r--r--bcc/misc/android-futex-contention-record2
-rw-r--r--bcc/misc/android-futex-contention-report4
-rw-r--r--bcc/misc/android-futex-contention.py115
-rw-r--r--bcc/misc/futex-contention.py63
-rw-r--r--bcc/misc/lockstat.py300
-rwxr-xr-xbuildimage11
-rwxr-xr-xbuildstrap76
-rw-r--r--packages/bcc25
-rw-r--r--packages/compilers9
-rw-r--r--packages/editors5
-rw-r--r--packages/scheduler4
-rw-r--r--packages/tracers5
-rwxr-xr-xutils/banners59
-rwxr-xr-xutils/packheaders.sh25
-rwxr-xr-xutils/support175
37 files changed, 1 insertions, 2307 deletions
diff --git a/BCC.md b/BCC.md
deleted file mode 100644
index 01b5a22..0000000
--- a/BCC.md
+++ /dev/null
@@ -1,186 +0,0 @@
-BCC (BPF compiler collection) for Android
-=========================================
-
-Introduction
-------------
-BCC is a compiler and a toolkit, containing powerful kernel tracing tools that
-trace at the lowest levels, including adding hooks to functions in kernel space
-and user space to deeply understand system behavior while being low in
-overhead. [Here's a presentation with an
-overview](http://www.joelfernandes.org/resources/bcc-ospm.pdf) and visit [BCC's
-project page](https://github.com/iovisor/bcc) for the official BCC
-documentation.
-
-Quick Start
------------
-adeb is the primary vehicle for running BCC on Android. It supports
-preparing the target Android device with necessary kernel headers, cloning and
-building BCC on device, and other setup. Take a look a quick look at [adeb
-README](https://github.com/joelagnel/adeb/blob/master/README.md) so that
-you're familiar with what it is.
-
-To download a prebuilt filesystem with BCC already built/installed for an ARM64
-device, you can just run:
-```
-adeb prepare --full
-```
-
-This downloads the FS and also downloads prebuilt kernel headers after
-detecting your device's kernel version. Running BCC this way may cause a warning
-at startup since the headers may not be an *exact* match for your kernel's
-sublevel (only version and patchlevel are matched), however it works well in
-our testing and could be used, as long as you can tolerate the warning.
-
-If you would like to setup your own kernel headers and prevent the warning,
-you can point adeb to the kernel sources which will extract headers from there:
-```
-adeb prepare --full --kernelsrc /path/to/kernel-source/
-```
-For targets other than ARM64, see the [Other Architectures
-section](https://github.com/joelagnel/adeb/blob/master/BCC.md#other-architectures-other-than-arm64)
-
-Now to run BCC, just start an adeb shell: `adeb shell`. This uses adb
-as the backend to start a shell into your adeb environment. Try running
-`opensnoop` or any of the other BCC tracers to confirm that the setup worked
-correctly.
-
-If building your own kernel, following are the kernel requirements:
-
-You need kernel 4.9 or newer. Anything less needs backports. Your kernel needs
-to be built with the following config options at the minimum:
-```
-CONFIG_KPROBES=y
-CONFIG_KPROBE_EVENT=y
-CONFIG_BPF_SYSCALL=y
-```
-Optionally,
-```
-CONFIG_UPROBES=y
-CONFIG_UPROBE_EVENT=y
-```
-Additionally, for the criticalsection BCC tracer to work, you need:
-```
-CONFIG_DEBUG_PREEMPT=y
-CONFIG_PREEMPTIRQ_EVENTS=y
-```
-
-Build BCC during adeb install (Optional)
---------------------------------------------
-If you would like the latest upstream BCC built and installed on your Android
-device, you can run:
-```
-adeb prepare --build --bcc --kernelsrc /path/to/kernel-source/
-```
-NOTE: This is a slow process and can take a long time. Since it not only builds
-BCC but also installs all non-BCC debian packages onto the filesystem and configures them.
-
-Other Architectures (other than ARM64)
------------------------
-By default adeb assumes the target Android device is based on ARM64
-processor architecture. For other architectures, use the --arch option. For
-example for x86_64 architecture, run:
-```
-adeb prepare --arch amd64 --build --bcc --kernelsrc /path/to/kernel-source/
-```
-Note: The --download option ignores the --arch flag. This is because we only
-provide pre-built filesystems for ARM64 at the moment.
-Note: If you pass --arch, you have to pass --build, because prebuilt
-filesystems are not available for non-arm64 devices.
-
-Common Issues
--------------
-Here are some common issues you may face when running different BCC tools.
-
-* Issue 1: Headers are missing on the target device.
-
-Symptom: This will usually result in an error like the following:
-```
-root@localhost:/# criticalstat
-
-In file included from <built-in>:2
-In file included from /virtual/include/bcc/bpf.h:12:
-In file included from include/linux/types.h:5:
-include/uapi/linux/types.h:4:10: fatal error: 'asm/types.h' file not found
-
-#include <asm/types.h>
-
- ^~~~~~~~~~~~~
-1 error generated.
-Traceback (most recent call last):
-
- File "./criticalstat.py", line 138, in <module>
- b = BPF(text=bpf_text)
- File "/usr/lib/python2.7/dist-packages/bcc/__init__.py", line 297, in __init__
- raise Exception("Failed to compile BPF text:\n%s" % text)
-Exception: Failed to compile BPF text:
-
-#include <uapi/linux/ptrace.h>
-#include <uapi/linux/limits.h>
-#include <linux/sched.h>
-
-extern char _stext[];
-```
-
-* Issue 2: `CONFIG_KPROBES` isn't enabled.
-
-Symptom: This will result in an error like the following:
-```
-Traceback (most recent call last):
- File "/usr/share/bcc/tools/cachetop", line 263, in <module>
- curses.wrapper(handle_loop, args)
- File "/usr/lib/python2.7/curses/wrapper.py", line 43, in wrapper
- return func(stdscr, *args, **kwds)
- File "/usr/share/bcc/tools/cachetop", line 172, in handle_loop
- b.attach_kprobe(event="add_to_page_cache_lru", fn_name="do_count")
- File "/usr/lib/python2.7/dist-packages/bcc/__init__.py", line 543, in
-attach_kprobe
- fn = self.load_func(fn_name, BPF.KPROBE)
- File "/usr/lib/python2.7/dist-packages/bcc/__init__.py", line 355, in
-load_func
- (func_name, errstr))
-Exception: Failed to load BPF program do_count: Invalid argument
-```
-
-* Issue 3: `CONFIG_BPF_SYSCALL` isn't enabled.
-
-Symptom: This may result in a compilation error like the following:
-```
-root@localhost:/# cachetop
-Traceback (most recent call last):
- File "/usr/share/bcc/tools/cachetop", line 263, in <module>
- curses.wrapper(handle_loop, args)
- File "/usr/lib/python2.7/curses/wrapper.py", line 43, in wrapper
- return func(stdscr, *args, **kwds)
- File "/usr/share/bcc/tools/cachetop", line 171, in handle_loop
- b = BPF(text=bpf_text)
- File "/usr/lib/python2.7/dist-packages/bcc/__init__.py", line 297, in __init__
- raise Exception("Failed to compile BPF text:\n%s" % text)
-Exception: Failed to compile BPF text:
-
-
- #include <uapi/linux/ptrace.h>
- struct key_t {
- u64 ip;
- u32 pid;
- u32 uid;
- char comm[16];
- };
-
- BPF_HASH(counts, struct key_t);
-
- int do_count(struct pt_regs *ctx) {
- struct key_t key = {};
- u64 zero = 0 , *val;
- u64 pid = bpf_get_current_pid_tgid();
- u32 uid = bpf_get_current_uid_gid();
-
- key.ip = PT_REGS_IP(ctx);
- key.pid = pid & 0xFFFFFFFF;
- key.uid = uid & 0xFFFFFFFF;
- bpf_get_current_comm(&(key.comm), 16);
-
- val = counts.lookup_or_init(&key, &zero); // update counter
- (*val)++;
- return 0;
- }
-```
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index d645695..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/METADATA b/METADATA
deleted file mode 100644
index a58b6bc..0000000
--- a/METADATA
+++ /dev/null
@@ -1,19 +0,0 @@
-name: "adeb"
-description: "adeb (also known as androdeb) provides a powerful Linux shell environment where one can run popular and mainstream Linux tracing, compiling, editing and other development tools on an existing Android device. All the commands typically available on a modern Linux system are supported in adeb."
-third_party {
- url {
- type: HOMEPAGE
- value: "https://github.com/joelagnel/adeb/README.md"
- }
- url {
- type: GIT
- value: "https://github.com/joelagnel/adeb.git"
- }
- version: "v0.99f"
- license_type: NOTICE
- last_upgrade_date {
- year: 2018
- month: 7
- day: 25
- }
-}
diff --git a/MODULE_LICENSE_APACHE2 b/MODULE_LICENSE_APACHE2
deleted file mode 100644
index e69de29..0000000
--- a/MODULE_LICENSE_APACHE2
+++ /dev/null
diff --git a/NOTICE b/NOTICE
deleted file mode 100644
index d645695..0000000
--- a/NOTICE
+++ /dev/null
@@ -1,202 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/OWNERS b/OWNERS
index afdffad..7529cb9 100644
--- a/OWNERS
+++ b/OWNERS
@@ -1,3 +1 @@
-# Default code reviewers picked from top 3 or more developers.
-# Please update this list if you find better candidates.
-joelaf@google.com
+include platform/system/core:/janitors/OWNERS
diff --git a/README.md b/README.md
deleted file mode 100644
index 23ae44d..0000000
--- a/README.md
+++ /dev/null
@@ -1,173 +0,0 @@
-adeb
---------
-
-**adeb** (also known as **androdeb**) provides a powerful Linux shell
-environment where one can run popular and mainstream Linux tracing, compiling,
-editing and other development tools on an existing Android device. All the
-commands typically available on a modern Linux system are supported in
-adeb.
-
-Usecases
---------
-1. Powerful development environment with all tools ready to go (editors,
-compilers, tracers, perl/python etc) for your on-device development.
-
-2. No more cross-compiler needed: Because it comes with gcc and clang, one can
-build target packages natively without needing to do any cross compilation. We even
-ship git, and have support to run apt-get to get any missing development packages
-from the web.
-
-3. Using these one can run popular tools such as BCC that are difficult to run
-in an Android environment due to lack of packages, dependencies and
-cross-compilation needed for their operation. [Check BCC on Android using
-adeb](https://github.com/joelagnel/adeb/blob/master/BCC.md) for more
-information on that.
-
-4. No more crippled tools: Its often a theme to build a static binary with
-features disabled, because you couldn't cross-compile the feature's dependencies. One
-classic example is perf. However, thanks to adeb, we can build perf natively
-on device without having to cripple it.
-
-Requirements for running
-------------------------
-Target:
-An ARM64 android N or later device which has "adb root" supported. Typically
-this is a build in a userdebug configuration. Device should have atleast 2 GB
-free space in the data partition. If you would like to use other architectures,
-see the [Other Architectures](https://github.com/joelagnel/adeb/blob/master/README.md#how-to-use-adeb-for-other-architectures-other-than-arm64) section.
-
-Host:
-A machine running recent Ubuntu or Debian, with 4GB of memory and 4GB free space.
-Host needs debootstrap and qemu-debootstrap packages.
-To install it, run `sudo apt-get install qemu-user-static debootstrap`.
-Other distributions may work but they are not tested.
-
-Quick Start Instructions
-------------------------
-* First clone this repository into adb and cd into it.
-```
-cd adeb
-
-# Add some short cuts:
-sudo ln -s $(pwd)/adeb /usr/bin/adeb
-
-# Cached image downloads result in a huge speed-up. These are automatic if you
-# cloned the repository using git. However, if you downloaded the repository
-# as a zip file (or you want to host images elsewere), you could set the
-# ADEB_REPO_URL environment variable in your bashrc file.
-# Disclaimer: Google is not liable for the below URL and this
-# is just an example.
-export ADEB_REPO_URL="github.com/joelagnel/adeb/"
-```
-
-* Installing adeb onto your device:
-First make sure device is connected to system
-Then run, for the base image:
-```
-adeb prepare
-```
-The previous command only downloads and installs the base image.
-Instead if you want to download and install the full image, do:
-```
-adeb prepare --full
-```
-
-* Now run adeb shell to enter your new environment!:
-```
-adeb shell
-```
-
-* Once done, hit `CTRL + D` and you will exit out of the shell.
-To remove adeb from the device, run:
-```
-adeb remove
-```
-If you have multiple devices connected, please add `-s <serialnumber>`.
-Serial numbers of all devices connected can be obtained by `adb devices`.
-
-* To update an existing adeb clone on your host, run:
-```
-adeb git-pull
-```
-
-More advanced usage instructions
---------------------------------
-### Install kernel headers in addition to preparing adeb device:
-```
-adeb prepare --kernelsrc /path/to/kernel-source
-```
-
-### Update kernel headers onto an already prepared device:
-
-If you need to put kernel sources for an existing install, run:
-```
-adeb prepare --kernelsrc /path/to/kernel-source --skip-install
-```
-Note: The kernel sources should have been built (atleast build should have started).
-
-### Build and prepare device with a custom rootfs locally:
-
-The adeb fs will be prepared locally by downloading packages as needed:
-```
-adeb prepare --build
-```
-This is unlike the default behavior, where the adeb rootfs is itself pulled from the web.
-
-If you wish to do a full build (that is locally prepare a rootfs with all packages, including bcc, then do):
-```
-adeb prepare --full --build
-```
-
-### Add kernel headers to device in addition to building locally:
-```
-adeb prepare --build --kernelsrc /path/to/kernel-source/
-```
-
-### Build/install a base image with BCC:
-```
-adeb prepare --build --bcc --kernelsrc /path/to/kernel-source/
-```
-Note: BCC is built from source. Also `--kernelsrc` is recommended for tools to
-function unless device has them already.
-
-### Extract the FS from the device, after its prepared:
-```
-adeb prepare --buildtar /path/
-```
-After device is prepared, it will extract the root fs from it
-and store it as a tar archive at `/path/adeb-fs.tgz`. This
-can be used later.
-
-### Use a previously prepared adeb rootfs tar from local:
-```
-adeb prepare --archive /path/adeb-fs.tgz
-```
-
-### Build a standalone raw EXT4 image out of the FS:
-```
-adeb prepare --build-image /path/to/image.img
-```
-This can then be passed to Qemu as -hda. Note: This option doesn't need a
-device connected.
-
-### How to use adeb for other Architectures (other than ARM64)
-By default adeb assumes the target Android device is based on ARM64
-processor architecture. For other architectures, use the --arch option. For
-example for x86_64 architecture, run:
-```
-adeb prepare --build --arch amd64 --bcc --kernelsrc /path/to/kernel-source/
-```
-Note: The --download option ignores the --arch flag. This is because we only
-provide pre-built filesystems for ARM64 at the moment.
-
-Common Trouble shooting
------------------
-1. Installing g++ with `apt-get install g++` fails.
-
-Solution: Run `adeb shell apt-get update` after the `adeb prepare` stage.
-
-2. It's too slow to use debootstrap to create debian fs
-
-Solution: Use a local mirror, for example in China you could use
-https://mirror.tuna.tsinghua.edu.cn/debian/ instead of debian official website
-http://deb.debian.org/debian/
diff --git a/TODO b/TODO
deleted file mode 100644
index 2efc767..0000000
--- a/TODO
+++ /dev/null
@@ -1,5 +0,0 @@
-TODO:
- - update androdeb with latest bcc (which will include criticalstat)
- - symlink whichever perf is installed to /usr/bin/perf
- - patch perf with the new futex contention script
- (probably it can just be dropped into a path)
diff --git a/addons/bashrc b/addons/bashrc
deleted file mode 100644
index 5ca6461..0000000
--- a/addons/bashrc
+++ /dev/null
@@ -1,21 +0,0 @@
-# The bannered bashrc
-source .bashrc.common
-
-if [ ! -f .banner.shown ]; then
-
-echo ""
-echo "##########################################################"
-echo "# Welcome to androdeb environment running on Android! #"
-echo "# Questions to: Joel Fernandes <joel@joelfernandes.org> #"
-echo " #"
-echo " Try running vim, gcc, clang, git, make, perf, filetop #"
-echo " ..etc or apt-get install something. #"
-echo "##########################################################"
-echo ""
-
-touch .banner.shown
-
-fi
-
-homedir=$( getent passwd "$USER" | cut -d: -f6 )
-export HOME=$homedir
diff --git a/addons/bashrc.common b/addons/bashrc.common
deleted file mode 100644
index 14e09d3..0000000
--- a/addons/bashrc.common
+++ /dev/null
@@ -1,37 +0,0 @@
-export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/share/bcc/tools/
-export TMPDIR=/tmp/
-
-psk=/proc/sys/kernel/kptr_restrict
-if [ -f $psk ]; then echo 0 > $psk; fi
-
-override_vers=1
-this_vers=$(/get_kvers.sh)
-if [ -d /kernel-headers/ ]; then
- export BCC_KERNEL_SOURCE=/kernel-headers/;
-
- h_vers=0
- vers_line=$(grep LINUX_VERSION_CODE /kernel-headers/include/generated/uapi/linux/version.h)
- if [ "x$vers_line" != "x" ]; then
- h_vers=$(echo $vers_line | cut -d ' ' -f3)
- fi
-
- if [ $this_vers -eq $h_vers ]; then
- override_vers=0
- else
- this_major=$(($this_vers / (256 * 256)))
- this_minor=$(($this_vers / 256 % 256))
- h_major=$(($h_vers / (256 * 256)))
- h_minor=$(($h_vers / 256 % 256))
- if [ $this_major -ne $h_major ] || [ $this_minor -ne $h_minor ]; then
- echo "Error: kernel version does not match installed headers ($this_major.$this_minor <> $h_major.$h_minor)"
- echo "BCC will not work"
- override_vers=0
- fi
- fi
-fi
-
-# Override kernel version if we haven't found headers with them.
-# Needed for BCC to work on slightly mismatched kernels.
-if [ $override_vers -eq 1 ]; then
- export BCC_LINUX_VERSION_CODE=$this_vers
-fi
diff --git a/addons/bashrc.silent b/addons/bashrc.silent
deleted file mode 100644
index 1e52500..0000000
--- a/addons/bashrc.silent
+++ /dev/null
@@ -1,4 +0,0 @@
-source .bashrc.common
-
-homedir=$( getent passwd "$USER" | cut -d: -f6 )
-export HOME=$homedir
diff --git a/addons/build-debian-tar b/addons/build-debian-tar
deleted file mode 100755
index 2c58c37..0000000
--- a/addons/build-debian-tar
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/system/bin/sh
-set -e
-# Build a tarball out of a android environment which I can then
-# upload to places for people who want to expedite the install
-
-# This script runs on the device
-
-spath=$( cd "$(dirname "$0")" ; pwd -P )
-cd $spath
-
-./device-umount-all
-
-if [ ! -d debian ]; then echo "Error: environment to tar doesn't exist"; exit 1; fi
-
-rm -rf debian-tar; cp -r debian debian-tar;
-rm -rf debian/debian; mv debian-tar debian/debian
-./run-command "tar -zcf androdeb-fs.tgz --exclude='debian/kernel-headers' debian"
-mv debian/androdeb-fs.tgz .
-rm -rf debian/debian-tar
diff --git a/addons/device-umount-all b/addons/device-umount-all
deleted file mode 100755
index fe3b092..0000000
--- a/addons/device-umount-all
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/system/bin/sh
-
-if [ "$1x" == "--debugx" ]; then
- set -x
-fi
-
-umount_all() {
- mpoints=$(mount|cut -d ' ' -f3|grep debian)
- for m in $mpoints;
- do umount $m 2>&1 > /dev/null
- done
-}
-
-for i in $(seq 0 6); do
- umount_all 2>&1 > /dev/null
-done
diff --git a/addons/device-unpack b/addons/device-unpack
deleted file mode 100755
index 14ba258..0000000
--- a/addons/device-unpack
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/system/bin/sh
-
-set -e
-
-# Script to do unpack of rootfs, ensures proper tear down
-# of existing environment. Expects debian rootfs in
-# /data/deb.tar.gz which it will delete after successful
-# unpack of rootfs.
-
-spath=$( cd "$(dirname "$0")" ; pwd -P )
-
-if [ ! -f /data/androdeb/deb.tar.gz ]; then
- echo "Debian rootfs tar doesn't existing at /data/deb.tar.gz"
- echo "Run androdeb with device connected first"
- exit 1
-fi
-
-if [ -d /data/androdeb/debian ]; then
- echo "androdeb environment already exists, doing a tear down"
- /data/androdeb/device-umount-all
- rm -rf /data/androdeb/debian
-fi
-
-
-tar -zxf /data/androdeb/deb.tar.gz -C /data/androdeb/ || die 2 "Couldn't unpack due to tar -x errors"
-rm /data/androdeb/deb.tar.gz
-
-echo "Unpack of rootfs successful!"
diff --git a/addons/get_kvers.sh b/addons/get_kvers.sh
deleted file mode 100755
index 3d18e32..0000000
--- a/addons/get_kvers.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/bash
-
-kvers=$(uname -r)
-
-MAJOR=$(echo $kvers | awk -F. '{ print $1 }')
-MINOR=$(echo $kvers | awk -F. '{ print $2 }')
-SUBVR=$(echo $kvers | awk -F. '{ print $3 }' | awk -F- '{ print $1 }' | sed 's/[^0-9]*//g')
-
-maj_num=$(($MAJOR * 65536))
-min_num=$(($MINOR * 256))
-
-echo $(($maj_num + $min_num + $SUBVR))
diff --git a/addons/run b/addons/run
deleted file mode 100755
index 9738504..0000000
--- a/addons/run
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/system/bin/sh
-spath=$( cd "$(dirname "$0")" ; pwd -P )
-cd $spath
-
-source run.common
-
-chroot debian/ /bin/bash
diff --git a/addons/run-command b/addons/run-command
deleted file mode 100755
index 6d5a8ca..0000000
--- a/addons/run-command
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/system/bin/sh
-spath=$( cd "$(dirname "$0")" ; pwd -P )
-cd $spath
-
-source run.common
-
-# Directly execute a command within the chroot of an Android device
-CMD="$*"
-
-chroot debian /bin/bash --rcfile '.bashrc.silent' -i -c "$CMD"
diff --git a/addons/run.common b/addons/run.common
deleted file mode 100644
index 5c45308..0000000
--- a/addons/run.common
+++ /dev/null
@@ -1,42 +0,0 @@
-do_mounts()
-{
- mount --bind /proc debian/proc/ > /dev/null
-
- mount --bind /dev debian/dev/ > /dev/null
- mount --bind /dev/pts debian/dev/pts > /dev/null
-
- mount --bind /sys debian/sys/ > /dev/null
- mount --bind /sys/fs/bpf/ debian/sys/fs/bpf/ > /dev/null
- mount --bind /sys/kernel/debug/ debian/sys/kernel/debug/ > /dev/null
- mount --bind /sys/kernel/debug/tracing/ debian/sys/kernel/debug/tracing/
-
- # Fix up weirdness with debugfs permission changing because of
- # above mounts.
- chmod 0777 /sys/kernel/debug > /dev/null
- chmod 0777 debian/sys/kernel/debug > /dev/null
- chmod 0777 /sys/kernel/debug/tracing > /dev/null
- chmod 0777 debian/sys/kernel/debug/tracing > /dev/null
-
- # Mount Android partitions
- if [ -d /d/ ]; then
- if [ ! -d debian/d ]; then ln -s /sys/kernel/debug debian/d; fi
- fi
-
- if [ -d /data/ ]; then
- mkdir -p debian/data/
- mount --bind /data debian/data/
- fi
-
- if [ -d /system/ ]; then
- mkdir -p debian/system/
- mount --bind /system debian/system/
- fi
-
- if [ -d /vendor/ ]; then
- mkdir -p debian/vendor/
- mount --bind /vendor debian/vendor/
- fi
-}
-
-mount | grep debian > /dev/null
-if [ $? -ne 0 ]; then do_mounts; fi
diff --git a/adeb b/adeb
deleted file mode 100755
index a651772..0000000
--- a/adeb
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/bash -e
-#
-# (c) Joel Fernandes <joel@joelfernandes.org>
-
-spath="$(dirname "$(readlink -f "$0")")"
-source $spath/androdeb
diff --git a/androdeb b/androdeb
deleted file mode 100755
index 3600a5b..0000000
--- a/androdeb
+++ /dev/null
@@ -1,386 +0,0 @@
-#!/bin/bash -e
-#
-# (c) Joel Fernandes <joel@joelfernandes.org>
-
-VERSION=v0.99g
-
-spath="$(dirname "$(readlink -f "$0")")"
-# spath=$( cd "$(dirname "$0")" ; pwd -P )
-curdir=$( pwd -P )
-source $spath/utils/support
-source $spath/utils/banners
-
-# Set default vars
-DISTRO=buster; ARCH=arm64
-ADB="adb"
-FULL=0 # Default to a minimal install
-DOWNLOAD=1 # Default to downloading from web
-SKIP_DEVICE=0 # Skip device preparation
-INSTALL_BCC=0 # Decide if BCC is to be installed
-
-# Default packages
-PACKAGES=""
-DEFAULT_PACKAGES="bash ca-certificates apt net-tools iputils-ping procps vim"
-
-EXTRA_FILES="none"
-
-config_full_build() {
- for f in $(ls $spath/packages); do source $spath/packages/$f; done;
-}
-
-# Parse command line parameters
-if [ $# -lt 1 ]; then usage; fi; POSITIONAL=()
-while [[ $# -gt 0 ]]; do key="$1";
-
-# If its shell mode, any future args become shell's args
-if [ "x$ASHELL" == "x1" ]; then
- if [ -z "$SHELL_ARGS" ]; then
- SHELL_ARGS=$key
- else
- SHELL_ARGS="$SHELL_ARGS $key"
- fi
- shift || true; continue
-fi
-
-case $key in
- shell) ASHELL=1; shift || true; ;;
- remove) REMOVE=1; shift || true; ;;
- git-pull) GIT_PULL=1; shift || true; ;;
- pull) PULL=1; shift || true; break ;;
- push) PUSH=1; shift || true; break ;;
- prepare) PREPARE=1; shift || true; ;;
- --full) FULL=1; config_full_build; shift || true; ;;
- --arch) ARCH=$2; shift || true; shift || true; ;;
- --archive) DOWNLOAD=0; TARF=$2; shift || true; shift || true; ;;
- --bcc) FULL=1; source $spath/packages/bcc; shift || true; ;;
- --kernelsrc) KERNELSRC="$2"; shift || true; shift || true; ;;
- --skip-install) SKIP_INSTALL=1; shift || true; ;;
- --kernel-headers-targz) KERNELHDRS=$2; shift || true; shift || true; ;;
- --tempdir) TDIR="$2"; shift || true; shift || true; ;;
- --build) DOWNLOAD=0; shift || true; ;;
- --buildtar) BTAR=1; DOWNLOAD=0; TARDIR="$2"; shift || true; shift || true; ;;
- --device|-s) ADB="$ADB -s $2"; shift || true; shift || true; ;;
- --build-image) BI=1; BUILD_IMAGEF=$2; SKIP_DEVICE=1; DOWNLOAD=0; shift || true; shift || true; ;;
- --debug) set -x; shift || true; ;;
- *) c_error "Unknown option ($1)"; usage; ;;
-esac
-done
-
-[ -z $ASHELL ] && box_out "adeb: $VERSION"
-
-if [ $FULL -eq 1 ]; then
- FNAME=androdeb-fs.tgz.zip
- FNAME_UZ=androdeb-fs.tgz
-else
- FNAME=androdeb-fs-minimal.tgz.zip
- FNAME_UZ=androdeb-fs-minimal.tgz
-fi
-
-if [ ! -z $BTAR ] && [ -z $TARDIR ]; then
- TARDIR=$spath
-fi
-
-if [ ! -z "$GIT_PULL" ]; then
- c_info "Updating androdeb by git pull"
- cd $spath
- git pull
- c_info "Done."
- exit 0
-fi
-
-if [ ! -z "$PULL" ]; then
- if [ $1 == "-a" ]; then
- PRESERVE="-a"
- c_info "Preserving filestamps and mode"
- shift || true
- fi
- file_count=`count_sources $@`
- i=0
- while [ $i -lt $file_count ]; do
- files["$i"]=/data/androdeb/debian/$1
- shift || true
- i=$((i + 1))
- done
- $ADB pull $PRESERVE "${files[@]}" "$@"
- exit 0
-fi
-
-if [ ! -z "$PUSH" ]; then
- file_count=`count_sources $@`
- i=0
- while [ $i -lt $file_count ]; do
- files["$i"]=$1
- shift || true
- i=$((i + 1))
- done
- dest=/data/androdeb/debian/$1
- $ADB push $sync "${files[@]}" $dest
- exit 0
-fi
-
-if [[ ! -z ${TARDIR+x} ]] && [[ ! -d $TARDIR ]]; then die 7 "Tar dir specified doesn't exist"; fi
-
-if [ -z $BI ]; then
- [ -z $ASHELL ] && c_info "Looking for device.."
- set +e
- do_adb_root "$ADB"
-
- if [ $? -ne 0 ]; then
- c_error "adb root failed, make sure:"
- c_error " * If multiple devices connected, provide --device <serialno> (or -s <serialno>)"
- c_error " * Try to run \"adb root\" manually and see if it works. Typically this needs a userdebug build."
- c_error ""
- c_error "Note: adb can be typically obtained using the android-tools-adb or the adb"
- c_error "packages on your distro, or by installing the Android SDK."
- die 3 "Exiting."
- fi
- set -e
-else
- [ ! -z $BUILD_IMAGEF ] || die 8 "--build-image passed but no image file provided"
-fi
-
-if [ ! -z "$REMOVE" ]; then
- die_if_no_androdeb "Nothing to remove."
- $ADB shell /data/androdeb/device-umount-all || true;
- $ADB shell rm -rf /data/androdeb; exit 0; fi
-
-##########################################################
-# SHELL
-##########################################################
-if [ ! -z ${ASHELL+x} ]; then
- set +e; $ADB shell ls /data/androdeb/debian/.bashrc > /dev/null 2>&1
- if [ $? -ne 0 ]; then
- die 2 "Device doesn't have an androdeb environment, run \"./androdeb prepare\" first";
- fi; set -e
-
- if [ ! -z ${SHELL_ARGS+x} ]; then
- # Explanation of quotes:
- # Outer quote is so that androdeb's bash passes the SHELL_ARGS as a single
- # argument to $ADB shell. Inner quotes is so that run-command can receive all
- # the args even though they may be separated by spaces. \m/
- $ADB shell -t /data/androdeb/run-command "\"$SHELL_ARGS\""
- else
- $ADB shell -t /data/androdeb/run
- fi
-
- exit 0
-fi
-
-##########################################################
-# PREPARE
-##########################################################
-
-function do_cleanup() {
- rm -rf $TDIR/*; if [ $MKTEMP -eq 1 ]; then rm -rf $TDIR; fi
-}
-
-function push_unpack_headers() {
- die_if_no_androdeb "Couldn't update headers."
-
- c_info "Storing kernel headers into androdeb /kernel-headers/"
- $ADB shell rm -rf /data/androdeb/debian/kernel-headers/
- $ADB shell mkdir /data/androdeb/debian/kernel-headers/
- run_quiet $ADB push $TDIR_ABS/kh.tgz /data/androdeb/
- $ADB shell tar -xvf /data/androdeb/kh.tgz -C /data/androdeb/debian/kernel-headers/ > /dev/null
- $ADB shell rm /data/androdeb/kh.tgz
-}
-
-function push_unpack_tarred_headers() {
- die_if_no_androdeb "Couldn't update headers."
-
- $ADB shell rm -rf /data/androdeb/debian/kernel-headers/
- $ADB shell mkdir /data/androdeb/debian/kernel-headers/
-
- c_info "Pushing headers tar onto device"
- run_quiet $ADB push $1 /data/androdeb/
-
- c_info "Storing kernel headers into androdeb root directory"
- $ADB shell tar -xvf /data/androdeb/$(basename $1) -C /data/androdeb/debian/ > /dev/null
-
- $ADB shell rm /data/androdeb/$(basename $1)
-}
-
-function all_done_banner() {
- c_info "All done! Run \"adeb shell\" to enter environment"
-}
-
-function detect_repo_url() {
- ADEB_REPO_URL=`cd $spath && git config -l | grep -m1 remote | grep url | sed -e "s/.*url=//" \
- -e "s/.*@//" \
- -e "s/https:\/\///" \
- -e "s/:/\//" \
- -e "s/\.git$//"`"/"
- c_info "Detected URL: $ADEB_REPO_URL"
-}
-
-function check_repo_url () {
- if [ -z $ADEB_REPO_URL ]; then
- c_info "No repository URL provided in enviromnent. Attempting to auto-detect it"
- detect_repo_url
- fi
-
- if [ -z $ADEB_REPO_URL ]; then
- c_warning "Automatic download is disabled. To enable it, please set the \$ADEB_REPO_URL"
- c_warning "environment variable as recommended in the setup instructions in the README.md"
- do_cleanup
- exit 0
- fi
-}
-
-function download_headers() {
- KERNEL_MAJOR=`$ADB shell uname -r | cut -d - -f 1 | cut -d . -f 1`
- KERNEL_MINOR=`$ADB shell uname -r | cut -d - -f 1 | cut -d . -f 2`
- KERNEL_VERSION="$KERNEL_MAJOR.$KERNEL_MINOR"
- PREBUILT_HEADERS_FILE=headers-$ARCH-$KERNEL_VERSION.tar.gz.zip
-
- check_repo_url
-
- curl -L https://$ADEB_REPO_URL/releases/download/$VERSION/$PREBUILT_HEADERS_FILE --output $TDIR_ABS/$PREBUILT_HEADERS_FILE ||
- die 9 "Failed to download kernel headers. Please check your internet connection and repository URL"
-
- unzip -e $TDIR_ABS/$PREBUILT_HEADERS_FILE -d $TDIR_ABS/ ||
- die 10 "Failed to download kernel headers. Kernel $KERNEL_VERSION for $ARCH may not be supported or ADEB_REPO_URL is incorrect."
- KERNELHDRS=$TDIR_ABS/`echo "$PREBUILT_HEADERS_FILE" | sed "s/.zip//"`
-}
-
-# Prepare is the last command checked
-if [ -z "$PREPARE" ]; then usage; fi
-
-if [ ! -z "$TARF" ] && [ ! -f $TARF ] && [ -z "$DOWNLOAD" ]; then die 5 "archive provided doesn't exist"; fi
-
-if [ ! -z "$KERNELSRC" ] && [ ! -d $KERNELSRC ]; then die 6 "Kernel source directory provided doesn't exist"; fi
-
-if [ ! -z "$KERNELHDRS" ] && [ ! -f $KERNELHDRS ]; then die 7 "Kernel headers tar.gz doesn't exist"; fi
-
-print_prepare_banner
-
-# Where do we want to store temporary files
-MKTEMP=0; if [[ -z ${TDIR+x} ]] || [[ ! -d "${TDIR}" ]]; then
- TDIR=`mktemp -d`; MKTEMP=1; fi
-rm -rf $TDIR/*
-TDIR_ABS=$( cd "$TDIR" ; pwd -P )
-
-if [ $DOWNLOAD -eq 1 ]; then
- c_info "Downloading Androdeb from the web..."; c_info ""
-
- # Github dropped tar gz support! ##?#??#! Now we've to zip everything.
- check_repo_url
-
- curl -L https://$ADEB_REPO_URL/releases/download/$VERSION/$FNAME --output $TDIR_ABS/$FNAME ||
- die 9 "Failed to download adeb release."
-
- unzip -e $TDIR_ABS/$FNAME -d $TDIR_ABS/ ||
- die 10 "Failed to download adeb release. Double check the ADEB_REPO_URL value."
- TARF=$TDIR_ABS/$FNAME_UZ
-fi
-
-if [ ! -z "$FULL" ] && [ -z "$KERNELSRC" ] && [ -z "$KERNELHDRS" ] && [ -z "$BI" ]; then
- c_info "Kernel headers are needed but none were provided. Downloading pre-built headers"
- download_headers
-fi
-
-OUT_TMP=$TDIR/debian; rm -rf $OUT_TMP; mkdir -p $OUT_TMP
-
-# Unpack the supplied kernel headers tar.gz directly into androdeb root
-if [ ! -z "$KERNELHDRS" ]; then
- c_info "Building updating kernel headers from supplied tar.gz ($KERNELHDRS)"
-
- # Is header tar gz update the only thing left to do?
- if [[ ! -z "$SKIP_INSTALL" ]]; then
- c_info "Skipping install"
- push_unpack_tarred_headers $KERNELHDRS; do_cleanup; all_done_banner; exit 0; fi
-
- tar -xvf $KERNELHDRS -C $OUT_TMP/ > /dev/null
-fi
-
-# Package kernel headers
-if [ ! -z "$KERNELSRC" ]; then
- c_info "Building and updating kernel headers from kernel source dir ($KERNELSRC)"
- $spath/bcc/build-kheaders-targz.sh ${KERNELSRC} $TDIR_ABS/kh.tgz > /dev/null
-
- # Is header update the only thing left to do?
- if [[ ! -z "$SKIP_INSTALL" ]]; then
- c_info "Skipping install"
- push_unpack_headers; do_cleanup; all_done_banner; exit 0; fi
-
- mkdir $OUT_TMP/kernel-headers
- tar -xvf $TDIR_ABS/kh.tgz -C $OUT_TMP/kernel-headers/ > /dev/null
-fi
-
-# Build FS from existing tar, very simple.
-if [ ! -z "$TARF" ]; then
- c_info "Using archive at $TARF for filesystem preparation"
- $ADB shell mkdir -p /data/androdeb/
-
- c_info "Pushing filesystem to device.."
- run_quiet $ADB push $TARF /data/androdeb/deb.tar.gz
-
- c_info "Pushing addons to device.."
- run_quiet $ADB push $spath/addons/* /data/androdeb/
-
- c_info "Unpacking filesystem in device.."
- run_quiet $ADB shell /data/androdeb/device-unpack
-
- if [ ! -z "$KERNELHDRS" ]; then push_unpack_tarred_headers $KERNELHDRS; fi
- if [ ! -z "$KERNELSRC" ]; then push_unpack_headers; fi
-
- do_cleanup; all_done_banner; exit 0
-fi
-
-PACKAGES+="$DEFAULT_PACKAGES"
-c_info "Using temporary directory: $TDIR"
-
-if [[ $EUID -ne 0 ]]; then c_info "The next stage runs as sudo, please enter password if asked."; fi
-
-ex_files=$(mktemp); echo $EXTRA_FILES > $ex_files
-
-sudo $spath/buildstrap $ARCH $DISTRO $TDIR $OUT_TMP \
- "$(make_csv "$PACKAGES")"\
- $ex_files $INSTALL_BCC $SKIP_DEVICE
-rm $ex_files
-
-# If we only wanted to prepare a rootfs and don't have
-# a device connected, then just echo that and skip cleanup
-if [ $SKIP_DEVICE -eq 1 ]; then
- c_info "Device preparation is being skipped for the selected options"
- c_info "any builds that need to happen on device may be cloned but not built."
-
- if [ ! -z $BI ]; then
- sudo $spath/buildimage $OUT_TMP $(dirname $BUILD_IMAGEF)/$(basename $BUILD_IMAGEF)
- sudo chmod a+rw $(dirname $BUILD_IMAGEF)/$(basename $BUILD_IMAGEF)
- c_info "Your .img has been built! Enjoy!"
- fi
-
- do_cleanup
- exit 0
-fi
-
-# Push tar to device and start unpack
-$ADB shell mkdir -p /data/androdeb/
-$ADB push $TDIR/deb.tar.gz /data/androdeb/
-$ADB push $spath/addons/* /data/androdeb/
-$ADB shell /data/androdeb/device-unpack
-
-# Build BCC and install bcc on device if needed
-if [ $INSTALL_BCC -eq 1 ]; then
- $ADB shell /data/androdeb/run-command /bcc-master/build-bcc.sh;
-fi
-
-# Extract a tar of the built, compiled and installed androdeb env
-if [[ ! -z ${TARDIR+x} ]]; then
- c_info "Creating tarball"
- pushd $TARDIR
- if [ $INSTALL_BCC -eq 0 ]; then
- mv $TDIR/deb.tar.gz $FNAME_UZ
- else
- $ADB shell /data/androdeb/build-debian-tar
- $ADB pull /data/androdeb/androdeb-fs.tgz $FNAME_UZ
- $ADB shell rm /data/androdeb/androdeb-fs.tgz;
- fi
- zip -r $FNAME $FNAME_UZ
- popd
-fi
-
-do_cleanup
-
-all_done_banner
diff --git a/bcc/build-bcc.sh b/bcc/build-bcc.sh
deleted file mode 100755
index a3ddc83..0000000
--- a/bcc/build-bcc.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/bash
-# This script should run within a bcc checkout
-
-spath=$( cd "$(dirname "$0")" ; pwd -P )
-cd $spath
-
-rm -rf build && mkdir -p build && cd build
-cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_C_COMPILER=clang-6.0 -DCMAKE_CXX_COMPILER=clang++-6.0
-make -j4
-make install
-cd ..
-rm -rf build
diff --git a/bcc/build-kheaders-targz.sh b/bcc/build-kheaders-targz.sh
deleted file mode 100755
index 06eed93..0000000
--- a/bcc/build-kheaders-targz.sh
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/bin/bash
-script_full_path=$( cd "$(dirname "$0")" ; pwd -P )
-
-if [ $# -ne 2 ]; then
- echo "illegal number of parameters, usage: ./build KERNEL_PATH out.tar.gz"
- exit 1
-fi
-
-# Please provide absolute paths
-KERNEL_PATH=$1
-OUT_TAR=$2
-
-KERNEL_PATH="$(dirname $(readlink -e $KERNEL_PATH))/$(basename $KERNEL_PATH)"
-if [ ! -d "$KERNEL_PATH" ]; then
- echo "Kernel directory couldn't be found"
- exit 3
-fi
-
-# kdir=$(basename $KERNEL_PATH)
-
-cd $KERNEL_PATH
-find arch -name include -type d -print | xargs -n1 -i: find : -type f > /tmp/kernel-headers.h
-find include >> /tmp/kernel-headers.h
-
-grep "include/generated/autoconf.h" /tmp/kernel-headers.h > /dev/null 2>&1
-retgrep=$?
-if [ $retgrep -ne 0 ]; then
- >&2 echo ""
- >&2 echo "The kernel sources at ${KERNEL_PATH} you pointed to aren't configured and built."
- >&2 echo "Please atleast run in your kernel sources:"
- >&2 echo $'make defconfig\nmake'
- >&2 echo $'\nNote: You dont need to do the full build since headers are generated early on.\n'
- >&2 echo "Note: Please build your kernel in tree (build and source should be in same directory)"
- >&2 echo ""
- exit $retgrep
-fi
-
-cat /tmp/kernel-headers.h | tar -zcf $OUT_TAR -T -
-rm /tmp/kernel-headers.h
diff --git a/bcc/misc/android-futex-contention-record b/bcc/misc/android-futex-contention-record
deleted file mode 100644
index a12ff79..0000000
--- a/bcc/misc/android-futex-contention-record
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/bash
-perf record -a -g -e syscalls:sys_enter_futex -e syscalls:sys_exit_futex -e sched:sched_waking $@
diff --git a/bcc/misc/android-futex-contention-report b/bcc/misc/android-futex-contention-report
deleted file mode 100644
index 7a8c122..0000000
--- a/bcc/misc/android-futex-contention-report
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/bash
-# description: futext contention measurement
-
-perf script $@ -s "$PERF_EXEC_PATH"/scripts/python/android-futex-contention.py
diff --git a/bcc/misc/android-futex-contention.py b/bcc/misc/android-futex-contention.py
deleted file mode 100644
index 5ef3841..0000000
--- a/bcc/misc/android-futex-contention.py
+++ /dev/null
@@ -1,115 +0,0 @@
-# futex contention
-# (c) 2010, Arnaldo Carvalho de Melo <acme@redhat.com>
-# Licensed under the terms of the GNU GPL License version 2
-#
-# Translation of:
-#
-# http://sourceware.org/systemtap/wiki/WSFutexContention
-#
-# to perf python scripting.
-#
-# Measures futex contention
-
-import os, sys
-sys.path.append(os.environ['PERF_EXEC_PATH'] + '/scripts/python/Perf-Trace-Util/lib/Perf/Trace')
-from Util import *
-
-process_names = {}
-thread_thislock = {}
-thread_blocktime = {}
-
-lock_waits = {} # long-lived stats on (tid,lock) blockage elapsed time
-waker_wakee = {} # maps the futex waker to wakee
-max_waits = {} # Details about a maximum contention like owner, owner chain
-process_names = {} # long-lived pid-to-execname mapping
-
-def android_lock(callchain):
- for c in callchain:
- if 'sym' in c and 'name' in c['sym']:
- name = c['sym']['name']
- else:
- continue
-
- if 'art::Monitor::Lock' in name:
- return True
- return False
-
-def print_callchain(callchain):
- for c in callchain:
- if 'sym' in c and 'name' in c['sym']:
- name = c['sym']['name']
- else:
- continue
-
- print(" %s" % (name))
-
-def sched__sched_waking(event_name, context, common_cpu,
- common_secs, common_nsecs, common_pid, common_comm,
- common_callchain, comm, pid, prio, success,
- target_cpu):
- waker_wakee[pid] = [common_pid, common_callchain]
-
-def syscalls__sys_enter_futex(event, ctxt, cpu, s, ns, tid, comm, callchain,
- nr, uaddr, op, val, utime, uaddr2, val3):
-
- cmd = op & FUTEX_CMD_MASK
- if cmd != FUTEX_WAIT or android_lock(callchain) == False:
- return # we don't care about originators of WAKE events
- # or futex uses that aren't android locks.
-
- process_names[tid] = comm
- thread_thislock[tid] = uaddr
- thread_blocktime[tid] = nsecs(s, ns)
-
-def syscalls__sys_exit_futex(event, ctxt, cpu, s, ns, tid, comm, callchain,
- nr, ret):
-
- waker_pid = -1
- waker_chain = "[no call chain]"
-
- if thread_blocktime.has_key(tid):
- # Gather stats about the contention (sum, min, max)
- elapsed = nsecs(s, ns) - thread_blocktime[tid]
- add_stats(lock_waits, (tid, thread_thislock[tid]), elapsed)
-
- # Track details about the maximum contention seen
- # including owner and its callchain
- if (tid, thread_thislock[tid]) in max_waits:
- prev_wait = max_waits[(tid, thread_thislock[tid])][0]
- else:
- prev_wait = 0
-
- if elapsed > prev_wait:
- if tid in waker_wakee:
- waker_pid = waker_wakee[tid][0]
- waker_chain = waker_wakee[tid][1]
-
- max_waits[(tid, thread_thislock[tid])] = [elapsed, waker_pid, waker_chain, callchain]
-
- del thread_blocktime[tid]
- del thread_thislock[tid]
-
-def trace_begin():
- print "Press control+C to stop and show the summary"
-
-def trace_end():
- for (tid, lock) in lock_waits:
- print("\n==============================================================\n")
- min, max, avg, count = lock_waits[tid, lock]
- print "%s[%d] lock %x contended %d times, %d avg ns, %d max ns" % \
- (process_names[tid], tid, lock, count, avg, max)
- print ""
-
- if not (tid, lock) in max_waits:
- print"Max contention info not available"
- continue
-
- print "Callstack of suffering task:"
- print_callchain(max_waits[tid, lock][3])
- print ""
-
- waker_pid = max_waits[tid, lock][1]
- waker_name = process_names[waker_pid] if waker_pid in process_names else "nameless-owner"
- print "Owner %s caused this contention of %d ns. Owner's Call stack below:" % (waker_name, max_waits[tid, lock][0])
- print_callchain(max_waits[tid, lock][2])
-
diff --git a/bcc/misc/futex-contention.py b/bcc/misc/futex-contention.py
deleted file mode 100644
index 5c96780..0000000
--- a/bcc/misc/futex-contention.py
+++ /dev/null
@@ -1,63 +0,0 @@
-# futex contention
-# (c) 2010, Arnaldo Carvalho de Melo <acme@redhat.com>
-# Licensed under the terms of the GNU GPL License version 2
-#
-# Translation of:
-#
-# http://sourceware.org/systemtap/wiki/WSFutexContention
-#
-# to perf python scripting.
-#
-# Measures futex contention
-
-import os, sys
-sys.path.append(os.environ['PERF_EXEC_PATH'] + '/scripts/python/Perf-Trace-Util/lib/Perf/Trace')
-from Util import *
-
-process_names = {}
-thread_thislock = {}
-thread_blocktime = {}
-
-lock_waits = {} # long-lived stats on (tid,lock) blockage elapsed time
-process_names = {} # long-lived pid-to-execname mapping
-
-def android_lock(callchain):
- for c in callchain:
- if 'sym' in c and 'name' in c['sym']:
- name = c['sym']['name']
- else:
- continue
-
- if 'art::Monitor::Lock' in name:
- return True
- return False
-
-def syscalls__sys_enter_futex(event, ctxt, cpu, s, ns, tid, comm, callchain,
- nr, uaddr, op, val, utime, uaddr2, val3):
-
- cmd = op & FUTEX_CMD_MASK
- if cmd != FUTEX_WAIT or android_lock(callchain) == False:
- return # we don't care about originators of WAKE events
- # or futex uses that aren't android locks.
-
- process_names[tid] = comm
- thread_thislock[tid] = uaddr
- thread_blocktime[tid] = nsecs(s, ns)
-
-def syscalls__sys_exit_futex(event, ctxt, cpu, s, ns, tid, comm, callchain,
- nr, ret):
- if thread_blocktime.has_key(tid):
- elapsed = nsecs(s, ns) - thread_blocktime[tid]
- add_stats(lock_waits, (tid, thread_thislock[tid]), elapsed)
- del thread_blocktime[tid]
- del thread_thislock[tid]
-
-def trace_begin():
- print "Press control+C to stop and show the summary"
-
-def trace_end():
- for (tid, lock) in lock_waits:
- min, max, avg, count = lock_waits[tid, lock]
- print "%s[%d] lock %x contended %d times, %d avg ns" % \
- (process_names[tid], tid, lock, count, avg)
-
diff --git a/bcc/misc/lockstat.py b/bcc/misc/lockstat.py
deleted file mode 100644
index fa3edda..0000000
--- a/bcc/misc/lockstat.py
+++ /dev/null
@@ -1,300 +0,0 @@
-#!/usr/bin/python
-#
-# lockstat Trace and display lock contention stats
-#
-# USAGE: lockstat
-
-# Licensed under the Apache License, Version 2.0 (the "License")
-# 28-Jul-2017 Gisle Dankel Created this.
-
-from bcc import BPF
-from ctypes import c_int
-from time import sleep
-from datetime import datetime
-import argparse
-import subprocess
-import os
-
-# One Lock object per TGID and uaddr.
-class Lock(object):
- def __init__(self):
- self.contention_count = 0
- self.elapsed_blocked = 0
- self.thread_count = 0
- self.last_stack_syms = []
-
- def update(self, count, block_time, last_stack_syms):
- self.contention_count += count
- self.elapsed_blocked += block_time
- self.thread_count += 1
- self.last_stack_syms = last_stack_syms
-
-def run_command_get_pid(command):
- p = subprocess.Popen(command.split())
- return p.pid
-
-examples = """
-EXAMPLES:
-
-./lockstat
- Trace calls to sys_futex and display contented locks every 5 seconds
- for all processes running on the system
-./lockstat -p <pid>
- Trace only for the specified pid and display contended locks
- every 5 seconds
-./lockstat -p <pid> -t
- Trace for a specified pid and print a message on each entry and exit to
- sys_futex until interrupted or killed
-./lockstat -p <pid> 10
- Trace the specified pid and show a message every 10 seconds
-./lockstat -c <command> 1 30
- Run the specified command and display contended locks every 1 second
- for a total of 30 times
-"""
-
-description = """
-Trace kernel futex events.
-These often occur because of lock contention, e.g. involving a pthread_mutex.
-This script resemblers the following SystemTap example:
-https://sourceware.org/systemtap/SystemTap_Beginners_Guide/futexcontentionsect.html
-"""
-
-parser = argparse.ArgumentParser(description=description,
- formatter_class=argparse.RawDescriptionHelpFormatter,
- epilog=examples)
-parser.add_argument("-p", "--pid", type=int, default=-1,
- help="the PID to trace; if not specified, trace all")
-parser.add_argument("-t", "--trace", action="store_true",
- help="print trace messages for each futex enter/exit")
-parser.add_argument("interval", nargs="?", default=5, type=int,
- help="interval in seconds to print summary")
-parser.add_argument("count", nargs="?", type=int,
- help="number of times to print the report before exiting")
-parser.add_argument("-c", "--command",
- help="execute and trace the specified command")
-
-args = parser.parse_args()
-
-pid = args.pid
-command = args.command
-interval = args.interval
-num_prints = args.count
-trace_all = args.trace
-
-if command is not None:
- print("Executing '%s' and tracing the resulting process." % command)
- pid = run_command_get_pid(command)
-
-bpf_source = """
-#include <uapi/linux/futex.h>
-#include <uapi/linux/ptrace.h>
-#include <linux/sched.h>
-#include <linux/time.h>
-
-struct comm_t {
- char name[TASK_COMM_LEN];
-};
-
-struct lock_key_t {
- u64 uaddr;
- u32 pid;
- u32 tgid;
-};
-
-struct lock_info_t {
- u64 elapsed_blocked;
- u64 contention_count;
- u64 sid;
-};
-
-BPF_HASH(pid_lock, u32, u64);
-BPF_HASH(pid_blocktime, u32, u64);
-BPF_HASH(tgid_comm, u32, struct comm_t);
-BPF_HASH(lock_stats, struct lock_key_t, struct lock_info_t, 1000000);
-BPF_STACK_TRACE(stack_traces, 16384);
-
-static inline int update_stats(u32 pid, u32 tgid, u64 uaddr, u64 block_time, u64 sid) {
- struct lock_key_t key = {};
- struct lock_info_t zero = {};
- struct lock_info_t *info;
-
- key.pid = pid;
- key.tgid = tgid;
- key.uaddr = uaddr;
- info = lock_stats.lookup_or_init(&key, &zero);
- info->elapsed_blocked += block_time;
- info->contention_count++;
- info->sid = sid;
-
- if (0 == tgid_comm.lookup(&tgid)) {
- struct comm_t comm;
- bpf_get_current_comm(&comm.name, sizeof(comm.name));
- tgid_comm.update(&tgid, &comm);
- }
- return 0;
-}
-
-// FIXME: Should attach to sys_enter_futex and sys_exit_futex tracepoints here,
-// but that does not currently work
-int sys_futex_enter(struct pt_regs *ctx, u32 *uaddr, int op, u32 val,
- struct timespec *utime, u32 *uaddr2, u32 val3) {
- int cmd = op & FUTEX_CMD_MASK;
- if (cmd != FUTEX_WAIT)
- return 0;
-
- u64 pid_tgid = bpf_get_current_pid_tgid();
- u32 pid = pid_tgid;
- u32 tgid = pid_tgid >> 32;
-
- if (!(THREAD_FILTER))
- return 0;
-
- u64 timestamp = bpf_ktime_get_ns();
- u64 uaddr64 = (u64) uaddr;
- pid_lock.update(&pid, &uaddr64);
- pid_blocktime.update(&pid, &timestamp);
-
- if (SHOULD_PRINT)
- bpf_trace_printk("enter sys_futex, pid = %u, uaddr = %x, "
- "cmd = %u\\n", pid, uaddr64, cmd);
- return 0;
-}
-
-int sys_futex_exit(struct pt_regs *ctx) {
- u64 pid_tgid = bpf_get_current_pid_tgid();
- u32 pid = pid_tgid;
- u32 tgid = pid_tgid >> 32;
- if (!(THREAD_FILTER))
- return 0;
-
- u64 *blocktime = pid_blocktime.lookup(&pid);
- u64 *uaddr = pid_lock.lookup(&pid);
- u64 timestamp = bpf_ktime_get_ns();
- u64 elapsed;
- u64 sid;
-
- if (blocktime == 0 || uaddr == 0)
- return 0; // not FUTEX_WAIT, or (less likely) missed futex_enter
-
- elapsed = timestamp - *blocktime;
-
- sid = stack_traces.get_stackid(ctx, BPF_F_USER_STACK);
- update_stats(pid, tgid, *uaddr, elapsed, sid);
- pid_lock.delete(&pid);
- pid_blocktime.delete(&pid);
-
- if (SHOULD_PRINT) {
- bpf_trace_printk("exit sys_futex, uaddr = %x, elapsed = %uns\\n",
- uaddr == 0 ? 0 : *uaddr, elapsed);
- }
- return 0;
-}
-
-"""
-
-bpf_source = bpf_source.replace("SHOULD_PRINT", "1" if trace_all else "0")
-
-thread_filter = '1'
-if pid != -1:
- print("Tracing pid %d, Ctrl+C to quit." % pid)
- # 'tgid' in kernel space is what people thin of as 'pid' in userspace
- thread_filter = "tgid == %d" % pid
-else:
- print("Tracing all processes, Ctrl+C to quit.")
-
-bpf_source = bpf_source.replace("THREAD_FILTER", thread_filter)
-
-bpf_program = BPF(text=bpf_source)
-bpf_program.attach_kprobe(event="SyS_futex", fn_name="sys_futex_enter")
-bpf_program.attach_kretprobe(event="SyS_futex", fn_name="sys_futex_exit")
-
-def get_syms(stack, pid):
- global bpf_program
- syms = []
- for addr in stack:
- s = bpf_program.sym(addr, pid, show_offset=True)
- syms.append(s)
- return syms
-
-def print_syms(syms):
- print("=========")
- for f in syms:
- print(f)
- print("=========")
-
-def is_android_monitor_lock(syms):
- for s in syms:
- if 'art::Monitor::Lock' in s:
- return True
- return False
-
-def disp_stack(stack, pid):
- for addr in stack:
- s = bpf_program.sym(addr, pid, show_offset=True)
-
-def create_tgid_stats():
- global bpf_program
- stats = bpf_program["lock_stats"]
- res = {}
- stack_traces = bpf_program['stack_traces']
- for key, val in stats.items():
- # Only display Android monitor locks
- if val.sid >= 0:
- ust = stack_traces.walk(val.sid)
- syms = get_syms(ust, key.pid)
- if not is_android_monitor_lock(syms):
- continue
- else:
- continue
-
- if not key.tgid in res:
- res[key.tgid] = {}
- if not key.uaddr in res[key.tgid]:
- res[key.tgid][key.uaddr] = Lock()
-
- lock = res[key.tgid][key.uaddr]
- lock.update(val.contention_count, val.elapsed_blocked, syms)
- return res
-
-def print_comm_stats(stats):
- if stats == {}:
- return
-
- comms = bpf_program["tgid_comm"]
- print("\n%s:" % (datetime.now().strftime("%H:%M:%S")))
- for tgid, locks in stats.items():
- comm = comms[c_int(tgid)].name
- print("\n %s (%d):" % (comm, tgid))
- sorted_locks = sorted(locks.items(),
- key=lambda x: x[1].elapsed_blocked,
- reverse=True)
- for addr, stats in sorted_locks:
- print(" %x: %dms (%d contentions involving %d threads, avg %dus)" %
- (addr, stats.elapsed_blocked / 1000000,
- stats.contention_count, stats.thread_count,
- stats.elapsed_blocked / stats.contention_count / 1000))
-
- # No use of displaying lock stacks since we're only
- # filtering for Android monitor locks.
- #
- # print("Last stack for this lock:")
- # print_syms(stats.last_stack_syms)
-
-count_so_far = 0
-while True:
- if trace_all:
- print(bpf_program.trace_fields())
- else:
- try:
- sleep(interval)
- except KeyboardInterrupt:
- exit()
- print_comm_stats(create_tgid_stats())
- count_so_far += 1
- bpf_program['tgid_comm'].clear()
- bpf_program['lock_stats'].clear()
- bpf_program['pid_lock'].clear()
- bpf_program['pid_blocktime'].clear()
-
- if num_prints is not None and count_so_far >= num_prints:
- exit()
diff --git a/buildimage b/buildimage
deleted file mode 100755
index ccdc65d..0000000
--- a/buildimage
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/bash
-set -e
-
-# Given a path, make an ext4 image out of it, store it in $2
-dd if=/dev/zero of=$2 bs=4k count=$((256 * 1024 * 2))
-mkfs.ext4 $2
-
-OUT=`mktemp -d`
-mount -o loop $2 $OUT/
-rsync -ra $1/ $OUT/
-umount $OUT/
diff --git a/buildstrap b/buildstrap
deleted file mode 100755
index b33b71e..0000000
--- a/buildstrap
+++ /dev/null
@@ -1,76 +0,0 @@
-#!/bin/bash
-
-spath="$(dirname "$(readlink -f "$0")")"
-source $spath/utils/support
-source $spath/utils/banners
-
-ARCH=$1
-DISTRO=$2
-TDIR=$3
-OUT_TMP=$4
-PACKAGES=$5
-EXTRA_FILES="$(cat $6)"
-INSTALL_BCC=$7
-SKIP_DEVICE=$8 # Skip any device-specific stages
-VARIANT="--variant=minbase"
-
-time qemu-debootstrap --arch $ARCH --include=$PACKAGES $VARIANT \
- $DISTRO $OUT_TMP http://deb.debian.org/debian/
-
-# Some reason debootstrap leaves these mounted
-umount $OUT_TMP/proc/sys/fs/binfmt_misc || true
-umount $OUT_TMP/proc || true
-
-# Make bash the default shell
-chroot $OUT_TMP rm /bin/sh || true
-chroot $OUT_TMP ln -s /bin/bash /bin/sh || true
-cp $spath/addons/bashrc $OUT_TMP/.bashrc
-cp $spath/addons/bashrc.common $OUT_TMP/.bashrc.common
-cp $spath/addons/bashrc.silent $OUT_TMP/.bashrc.silent
-cp $spath/addons/get_kvers.sh $OUT_TMP/
-
-for f in $EXTRA_FILES; do
- if [ $f == "none" ]; then continue; fi
- cp $f $OUT_TMP/
-done
-
-# Cleanup
-rm -rf $OUT_TMP/lib/udev/*
-rm -rf $OUT_TMP/var/lib/apt/lists/*
-rm -rf $OUT_TMP/var/cache/apt/archives/*deb
-rm -rf $OUT_TMP/usr/share/locale/*
-rm -rf $OUT_TMP/usr/lib/share/locale/*
-rm -rf $OUT_TMP/usr/share/doc/*
-rm -rf $OUT_TMP/usr/lib/share/doc/*
-rm -rf $OUT_TMP/usr/share/ieee-data/*
-rm -rf $OUT_TMP/usr/lib/share/ieee-data/*
-rm -rf $OUT_TMP/usr/share/man/*
-rm -rf $OUT_TMP/usr/lib/share/man/*
-
-# Fix apt-get issue: Android requires _apt user to be in the
-# AID_INET group which is also android specific.
-grep -ri _apt:x:100:65534 $OUT_TMP/etc/passwd > /dev/null 2>&1
-if [ $? -ne 0 ]; then
- c_warning "_apt user cannot be added to AID_INET group"
-else
- sed -i -e 's/_apt:x:100:65534/_apt:x:100:3003/' $OUT_TMP/etc/passwd
-fi
-
-# Add a default DNS server
-echo "nameserver 4.2.2.2" > $OUT_TMP/etc/resolv.conf
-
-# Clone BCC if needed
-if [ $INSTALL_BCC -eq 1 ]; then
- git clone https://github.com/iovisor/bcc.git $TDIR/debian/bcc-master
- cp $spath/bcc/build-bcc.sh $TDIR/debian/bcc-master/;
-fi
-
-# Should be really do this?
-chmod -R 0777 $TDIR/
-
-[ $SKIP_DEVICE -eq 0 ] || exit 0
-
-c_info "Compressing new filesystem to prepare to push to Android /data/androdeb/"
-tar -zcf $TDIR/deb.tar.gz -C $TDIR debian
-
-chmod 0777 $TDIR/deb.tar.gz
diff --git a/packages/bcc b/packages/bcc
deleted file mode 100644
index 1d91354..0000000
--- a/packages/bcc
+++ /dev/null
@@ -1,25 +0,0 @@
-PACKAGES+="
-llvm-6.0-dev
-libclang-6.0-dev
-libelf-dev
-libfl-dev
-libunwind-dev
-libdw-dev
-git
-gcc
-libtool
-autoconf
-make
-cmake
-iperf
-arping
-ethtool
-flex
-bison
-python
-clang-6.0
-python-netaddr
-python-pyroute2
-"
-
-INSTALL_BCC=1
diff --git a/packages/compilers b/packages/compilers
deleted file mode 100644
index f380dd3..0000000
--- a/packages/compilers
+++ /dev/null
@@ -1,9 +0,0 @@
-PACKAGES+="\
-git
-clang-6.0
-gcc
-libtool
-autoconf
-make
-cmake
-"
diff --git a/packages/editors b/packages/editors
deleted file mode 100644
index 99865fa..0000000
--- a/packages/editors
+++ /dev/null
@@ -1,5 +0,0 @@
-PACKAGES+="\
-vim
-nano
-git
-"
diff --git a/packages/scheduler b/packages/scheduler
deleted file mode 100644
index a5df38c..0000000
--- a/packages/scheduler
+++ /dev/null
@@ -1,4 +0,0 @@
-PACKAGES+="\
-git
-rt-app
-"
diff --git a/packages/tracers b/packages/tracers
deleted file mode 100644
index 38c1d43..0000000
--- a/packages/tracers
+++ /dev/null
@@ -1,5 +0,0 @@
-PACKAGES+="\
-linux-perf
-trace-cmd
-strace
-"
diff --git a/utils/banners b/utils/banners
deleted file mode 100755
index 5f975bc..0000000
--- a/utils/banners
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/bin/bash -x
-
-print_prepare_banner() {
- c_info "Preparing device..."
- if [ $FULL -eq 1 ]; then
- c_info "Doing a full install."
- else
- c_info "Doing a base install."
- fi
- c_info ""
-}
-
-usage() {
- c_info "USAGE:"
- c_info "adeb"
- c_info " shell Enter the androdeb shell environment and get to work!"
- c_info " remove Remove androdeb from the device"
- c_info " git-pull Git pull androdeb to update it on your host"
- c_info " pull Copy files from the androdeb filesystem in the device"
- c_info " push Copy files to the androdeb filesystem in the device"
- c_info ""
- c_info " prepare Prepare the device (when running for the first time)"
- c_info " By default, this will download and install a base image."
- c_info " ** Folowing are the prepare options **"
- c_info " --full Pass this to prepare to download and install the full image which"
- c_info " contains compilers, editors, tracers etc."
- c_info ""
- c_info " --build Instead of download, build and install the image onto the device"
- c_info ""
- c_info " --archive Use archive for root fs (overrides all other prepare options)"
- c_info ""
- c_info " --buildtar While preparing, also build a tar.gz.zip file of the filesystem,"
- c_info " this is how images that are downloaded by prepare are built"
- c_info ""
- c_info " --build-image Build an ext4 .img with the base image and BCC (useful for Qemu)"
- c_info ""
- c_info " ** Folowing are misc build options **"
- c_info " --tempdir Use a specific temporary directory for build operation"
- c_info " --arch Specify an ARCH to build for (default arm64)"
- c_info " --distro Debian distro to base on (default is buster)"
- c_info ""
- c_info " ** Folowing are the options for BCC **"
- c_info " --bcc Build and install BCC onto the device, from source"
- c_info " BCC is already included in 'prepare --full'"
- c_info ""
- c_info " --kernelsrc Extract kernel headers for BCC from this directory"
- c_info ""
- c_info " --skip-install Pass this to --kernelsrc if you wish to only extra/install kernel headers"
- c_info " and would like to exit after that (skips build/install of everything else)"
- c_info ""
- c_info " ** Folowing are device specific options ** "
- c_info " --device Serial number of adb device."
- c_info " -s Serial number of adb device."
- c_info ""
- c_info " --debug Debug all execution."
- exit 1
-}
-
-
diff --git a/utils/packheaders.sh b/utils/packheaders.sh
deleted file mode 100755
index d10b81b..0000000
--- a/utils/packheaders.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-
-# Utility to build kernel headers tar/zip file
-# must be run from the top level of a kernel source directory
-# and supplied an output file name
-
-MKTEMP=0; if [[ -z ${TDIR+x} ]] || [[ ! -d "${TDIR}" ]]; then
- TDIR=`mktemp -d`; MKTEMP=1; fi
-rm -rf $TDIR/*
-TDIR_ABS=$( cd "$TDIR" ; pwd -P )
-
-
-if [ $# -ne 1 ]; then
- echo "usage: makeheaders.sh <output file name>"
- exit 0
-fi
-
-mkdir -p $TDIR_ABS/kernel-headers
-
-find arch -name include -type d -print | xargs -n1 -i: find : -type f -exec cp --parents {} $TDIR_ABS/kernel-headers/ \;
-find include -exec cp --parents {} $TDIR_ABS/kernel-headers/ 2> /dev/null \;
-tar -zcf $1 --directory=$TDIR_ABS kernel-headers
-
-zip -r $1.zip $1
-rm -rf $TDIR/*; if [ $MKTEMP -eq 1 ]; then rm -rf $TDIR; fi
diff --git a/utils/support b/utils/support
deleted file mode 100755
index ad72e05..0000000
--- a/utils/support
+++ /dev/null
@@ -1,175 +0,0 @@
-#!/bin/bash -x
-# Utilities to interact with android more easily
-
-function run_quiet() { eval "$* >/dev/null 2>&1"; }
-
-make_csv() {
- out=""
- in=$1
- for p in $in; do
- if [ "x$out" == "x" ]; then
- out=$p
- else
- out="$out,$p"
- fi
- done
- echo $out
-}
-
-make_spaces() {
- out=""
- in=$1
- for p in $in; do
- if [ "x$out" == "x" ]; then
- out=$p
- else
- out="$out $p"
- fi
- done
- echo $out
-}
-
-cmd_exists() {
- which $1 > /dev/null
- return $?
-}
-
-do_adb_root() {
- ADB="$1"
- $ADB root > /dev/null 2>&1
- return $?
-}
-
-die() {
- exit_code=$1
- msg=$2
- c_error "$msg"
- exit $exit_code
-}
-
-die_if_no_androdeb() {
- set +e
- $ADB shell ls /data/androdeb/debian > /dev/null 2>&1
- if [ $? -ne 0 ]; then die 8 "Existing androdeb env not found on device. $1"; fi
- set -e
-}
-
-# Helper function to count number of source arguments in a list
-# when more than one argument is supplied, it is assumed the last argument
-# is a destination
-count_sources() {
- local source_count=$#
- if [ $source_count -gt 1 ]; then
- source_count=$((source_count - 1))
- fi
- echo "$source_count"
-}
-
-# Borrowed from project LISA.
-################################################################################
-# Logging functions
-################################################################################
-c_error() {
- NOW=$(date +"%H:%m:%S")
- # If there is only one parameter, let's assume it's just the message
- if [ $# -gt 1 ]; then
- local parent_lineno="$1"
- local message="$2"
- echo -e "${red}$NOW - ERROR: on or near line ${parent_lineno}: ${message}${nocol}"
- return
- fi
-
- local message="$1"
- echo -e "${red}$NOW - ERROR : ${message}${nocol}"
-}
-
-c_warning() {
- NOW=$(date +"%H:%m:%S")
- # If there is only one parameter, let's assume it's just the message
- if [ $# -gt 1 ]; then
- local parent_lineno="$1"
- local message="$2"
- echo -e "${yellow}$NOW - WARNING: on or near line ${parent_lineno}: ${message}${nocol}"
- return
- fi
- local message="$1"
- echo -e "${yellow}$NOW - WARNING : ${message}${nocol}"
-}
-
-c_info() {
- NOW=$(date +"%H:%m:%S")
- # If there is only one parameter, let's assume it's just the message
- if [ $# -gt 1 ]; then
- local parent_lineno="$1"
- local message="$2"
- echo -e "${blue}$NOW - INFO: on or near line ${parent_lineno}: ${message}${nocol}"
- return
- fi
- local message="$1"
- echo -e "${blue}$NOW - INFO : ${message}${nocol}"
-}
-
-d_notify() {
- MESSAGE=$1
- ICON=$2
- # Let's try to send a desktop notification,
- # silently fails if there is not support.
- notify-send \
- --icon=$ICON \
- --urgency=critical \
- --expire-time=1500 \
- "Test Series" \
- "$MESSAGE" \
- 2>/dev/null
-}
-
-my_tput() {
- if [ "${TERM-dumb}" == dumb ]; then
- return
- fi
- tput $*
-}
-
-box_out()
-{
- local s=("$@") b w
- for l in "${s[@]}"; do
- ((w<${#l})) && { b="$l"; w="${#l}"; }
- done
- my_tput setaf 3
- echo -e "|-${b//?/-}-|"
- for l in "${s[@]}"; do
- printf '| %s%*s%s |\n' "$(my_tput setaf 4)" "-$w" "$l" "$(my_tput setaf 3)"
- # echo "|-${b//?/-}-|"
- done
- echo "|-${b//?/-}-|"
- my_tput sgr 0
-}
-
-
-################################################################################
-# Colors
-################################################################################
-
-if [ -t 1 ]; then
- ncolors=$(my_tput colors)
- if [ -n "${ncolors}" ] && [ ${ncolors} -ge 8 ]; then
- nocol='\e[0m' # No Color
- white='\e[1;37m'
- black='\e[0;30m'
- blue='\e[0;34m'
- lblue='\e[1;34m'
- green='\e[0;32m'
- lgreen='\e[1;32m'
- cyan='\e[0;36m'
- lcyan='\e[1;36m'
- red='\e[0;31m'
- lred='\e[1;31m'
- purple='\e[0;35m'
- lpurple='\e[1;35m'
- brown='\e[0;33m'
- yellow='\e[1;33m'
- grey='\e[0;30m'
- lgrey='\e[0;37m'
- fi
-fi