* [PATCH 0/2] perf tools: improve perf support on Android
@ 2014-05-16 23:14 Stephane Eranian
2014-05-16 23:14 ` [PATCH 1/2] perf tools: add cat as fallback pager Stephane Eranian
2014-05-16 23:14 ` [PATCH 2/2] perf tools: add automatic remapping of Android libraries Stephane Eranian
0 siblings, 2 replies; 6+ messages in thread
From: Stephane Eranian @ 2014-05-16 23:14 UTC (permalink / raw)
To: linux-kernel; +Cc: peterz, mingo, acme, jolsa, namhyung.kim, Michael Lentine
From: Michael Lentine <mlentine@google.com>
This short series of patches allow for the execution of perf natively
on the android devices.
The following changes are implemented:
- Have cat be the default page. Android does not have less or more pager.
this is a generic change which cleans up the code a bit
- Remap library paths to allow for data reporting on a linux pc with data
collected from an android device.
Patches relative to tip.git.
Signed-off-by: Michael Lentine <mlentine@google.com>
Michael Lentine (2):
perf tools: add a fallback for pager to use cat if less does not exist.
perf tools: add automatic remapping of Android libraries
tools/perf/util/map.c | 89 ++++++++++++++++++++++++++++++++++++++++++++++++-
tools/perf/util/pager.c | 12 +++----
2 files changed, 94 insertions(+), 7 deletions(-)
--
1.9.1.423.g4596e3a
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/2] perf tools: add cat as fallback pager
2014-05-16 23:14 [PATCH 0/2] perf tools: improve perf support on Android Stephane Eranian
@ 2014-05-16 23:14 ` Stephane Eranian
2014-05-17 1:55 ` David Ahern
2014-05-16 23:14 ` [PATCH 2/2] perf tools: add automatic remapping of Android libraries Stephane Eranian
1 sibling, 1 reply; 6+ messages in thread
From: Stephane Eranian @ 2014-05-16 23:14 UTC (permalink / raw)
To: linux-kernel; +Cc: peterz, mingo, acme, jolsa, namhyung.kim, Michael Lentine
From: Michael Lentine <mlentine@google.com>
This patch adds a fallback to cat for the pager. This is useful
on environmnents, such as Android, where less does not exist.
It is better to default to cat than to abort.
Reviewed-by: Stephane Eranian <eranian@google.com>
Signed-off-by: Michael Lentine <mlentine@google.com>
---
| 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
--git a/tools/perf/util/pager.c b/tools/perf/util/pager.c
index 3322b84..5feec3d 100644
--- a/tools/perf/util/pager.c
+++ b/tools/perf/util/pager.c
@@ -57,13 +57,13 @@ void setup_pager(void)
}
if (!pager)
pager = getenv("PAGER");
- if (!pager) {
- if (!access("/usr/bin/pager", X_OK))
- pager = "/usr/bin/pager";
- }
- if (!pager)
+ if (!(pager || access("/usr/bin/pager", X_OK)))
+ pager = "/usr/bin/pager";
+ if (!(pager || access("/usr/bin/less", X_OK)))
pager = "less";
- else if (!*pager || !strcmp(pager, "cat"))
+ if (!pager)
+ pager = "cat";
+ if (!*pager || !strcmp(pager, "cat"))
return;
spawned_pager = 1; /* means we are emitting to terminal */
--
1.9.1.423.g4596e3a
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/2] perf tools: add automatic remapping of Android libraries
2014-05-16 23:14 [PATCH 0/2] perf tools: improve perf support on Android Stephane Eranian
2014-05-16 23:14 ` [PATCH 1/2] perf tools: add cat as fallback pager Stephane Eranian
@ 2014-05-16 23:14 ` Stephane Eranian
2014-05-19 9:58 ` Jiri Olsa
1 sibling, 1 reply; 6+ messages in thread
From: Stephane Eranian @ 2014-05-16 23:14 UTC (permalink / raw)
To: linux-kernel; +Cc: peterz, mingo, acme, jolsa, namhyung.kim, Michael Lentine
From: Michael Lentine <mlentine@google.com>
This patch automtically adjusts the path of MMAP records
associated with Android system libraries. It enables running
perf reporting tools directly on the Android system natively.
Reviewed-by: Stephane Eranian <eranian@google.com>
Signed-off-by: Michael Lentine <mlentine@google.com>
---
tools/perf/util/map.c | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 88 insertions(+), 1 deletion(-)
diff --git a/tools/perf/util/map.c b/tools/perf/util/map.c
index ba5f5c0c..1960883 100644
--- a/tools/perf/util/map.c
+++ b/tools/perf/util/map.c
@@ -32,6 +32,86 @@ static inline int is_no_dso_memory(const char *filename)
!strcmp(filename, "[heap]");
}
+static inline int is_android_lib(const char *filename)
+{
+ return !strncmp(filename, "/data/app-lib", 13) ||
+ !strncmp(filename, "/system/lib", 11);
+}
+
+static inline bool replace_android_lib(const char *filename, char **newfilename)
+{
+ const char *libname;
+ char *app_abi;
+ size_t app_abi_length, new_length;
+ size_t lib_length = 0;
+
+ libname = strrchr(filename, '/');
+ if (libname)
+ lib_length = strlen(libname);
+
+ app_abi = getenv("APP_ABI");
+ if (!app_abi)
+ return false;
+
+ app_abi_length = strlen(app_abi);
+
+ if (!strncmp(filename, "/data/app-lib", 13)) {
+ char *apk_path;
+
+ if (!app_abi_length)
+ return false;
+
+ new_length = 7 + app_abi_length + lib_length;
+
+ apk_path = getenv("APK_PATH");
+ if(apk_path) {
+ snprintf(*newfilename, new_length + strlen(apk_path) + 1,
+ "%s/libs/%s/%s", apk_path, app_abi, libname);
+ } else {
+ snprintf(*newfilename, new_length,
+ "libs/%s/%s", app_abi, libname);
+ }
+ return true;
+ }
+
+ if (!strncmp(filename, "/system/lib/", 11)) {
+ char *ndk, *app;
+ const char *arch;
+ size_t ndk_length;
+ size_t app_length;
+
+ ndk = getenv("NDK_ROOT");
+ app = getenv("APP_PLATFORM");
+
+ if (!(ndk && app))
+ return false;
+
+ ndk_length = strlen(ndk);
+ app_length = strlen(app);
+
+ if (!(ndk_length && app_length && app_abi_length))
+ return false;
+
+ arch = !strncmp(app_abi, "arm", 3) ? "arm" :
+ !strncmp(app_abi, "mips", 4) ? "mips" :
+ !strncmp(app_abi, "x86", 3) ? "x86" : NULL;
+
+ if (!arch)
+ return false;
+
+ new_length = 27 + ndk_length +
+ app_length + lib_length
+ + strlen(arch);
+
+ snprintf(*newfilename, new_length,
+ "%s/platforms/%s/arch-%s/usr/lib/%s",
+ ndk, app, arch, libname);
+
+ return true;
+ }
+ return false;
+}
+
void map__init(struct map *map, enum map_type type,
u64 start, u64 end, u64 pgoff, struct dso *dso)
{
@@ -59,8 +139,9 @@ struct map *map__new(struct list_head *dsos__list, u64 start, u64 len,
if (map != NULL) {
char newfilename[PATH_MAX];
struct dso *dso;
- int anon, no_dso, vdso;
+ int anon, no_dso, vdso, android;
+ android = is_android_lib(filename);
anon = is_anon_memory(filename);
vdso = is_vdso_map(filename);
no_dso = is_no_dso_memory(filename);
@@ -75,6 +156,12 @@ struct map *map__new(struct list_head *dsos__list, u64 start, u64 len,
filename = newfilename;
}
+ if (android) {
+ char *newfilename_ptr = newfilename;
+ if (replace_android_lib(filename, &newfilename_ptr))
+ filename = newfilename;
+ }
+
if (vdso) {
pgoff = 0;
dso = vdso__dso_findnew(dsos__list);
--
1.9.1.423.g4596e3a
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 1/2] perf tools: add cat as fallback pager
2014-05-16 23:15 [PATCH 0/2] perf tools: improve perf support on Android Stephane Eranian
@ 2014-05-16 23:15 ` Stephane Eranian
0 siblings, 0 replies; 6+ messages in thread
From: Stephane Eranian @ 2014-05-16 23:15 UTC (permalink / raw)
To: linux-kernel; +Cc: peterz, mingo, acme, jolsa, namhyung, Michael Lentine
From: Michael Lentine <mlentine@google.com>
This patch adds a fallback to cat for the pager. This is useful
on environmnents, such as Android, where less does not exist.
It is better to default to cat than to abort.
Reviewed-by: Stephane Eranian <eranian@google.com>
Signed-off-by: Michael Lentine <mlentine@google.com>
---
| 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
--git a/tools/perf/util/pager.c b/tools/perf/util/pager.c
index 3322b84..5feec3d 100644
--- a/tools/perf/util/pager.c
+++ b/tools/perf/util/pager.c
@@ -57,13 +57,13 @@ void setup_pager(void)
}
if (!pager)
pager = getenv("PAGER");
- if (!pager) {
- if (!access("/usr/bin/pager", X_OK))
- pager = "/usr/bin/pager";
- }
- if (!pager)
+ if (!(pager || access("/usr/bin/pager", X_OK)))
+ pager = "/usr/bin/pager";
+ if (!(pager || access("/usr/bin/less", X_OK)))
pager = "less";
- else if (!*pager || !strcmp(pager, "cat"))
+ if (!pager)
+ pager = "cat";
+ if (!*pager || !strcmp(pager, "cat"))
return;
spawned_pager = 1; /* means we are emitting to terminal */
--
1.9.1.423.g4596e3a
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] perf tools: add cat as fallback pager
2014-05-16 23:14 ` [PATCH 1/2] perf tools: add cat as fallback pager Stephane Eranian
@ 2014-05-17 1:55 ` David Ahern
0 siblings, 0 replies; 6+ messages in thread
From: David Ahern @ 2014-05-17 1:55 UTC (permalink / raw)
To: Stephane Eranian, linux-kernel
Cc: peterz, mingo, acme, jolsa, namhyung.kim, Michael Lentine
On 5/16/14, 5:14 PM, Stephane Eranian wrote:
> From: Michael Lentine <mlentine@google.com>
>
> This patch adds a fallback to cat for the pager. This is useful
> on environmnents, such as Android, where less does not exist.
> It is better to default to cat than to abort.
>
> Reviewed-by: Stephane Eranian <eranian@google.com>
> Signed-off-by: Michael Lentine <mlentine@google.com>
> ---
> tools/perf/util/pager.c | 12 ++++++------
> 1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/tools/perf/util/pager.c b/tools/perf/util/pager.c
> index 3322b84..5feec3d 100644
> --- a/tools/perf/util/pager.c
> +++ b/tools/perf/util/pager.c
> @@ -57,13 +57,13 @@ void setup_pager(void)
> }
> if (!pager)
> pager = getenv("PAGER");
> - if (!pager) {
> - if (!access("/usr/bin/pager", X_OK))
> - pager = "/usr/bin/pager";
> - }
> - if (!pager)
> + if (!(pager || access("/usr/bin/pager", X_OK)))
> + pager = "/usr/bin/pager";
> + if (!(pager || access("/usr/bin/less", X_OK)))
> pager = "less";
If you check for /usr/bin/less shouldn't the full path be used here?
David
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2/2] perf tools: add automatic remapping of Android libraries
2014-05-16 23:14 ` [PATCH 2/2] perf tools: add automatic remapping of Android libraries Stephane Eranian
@ 2014-05-19 9:58 ` Jiri Olsa
0 siblings, 0 replies; 6+ messages in thread
From: Jiri Olsa @ 2014-05-19 9:58 UTC (permalink / raw)
To: Stephane Eranian
Cc: linux-kernel, peterz, mingo, acme, namhyung.kim, Michael Lentine
On Sat, May 17, 2014 at 01:14:47AM +0200, Stephane Eranian wrote:
> From: Michael Lentine <mlentine@google.com>
>
> This patch automtically adjusts the path of MMAP records
> associated with Android system libraries. It enables running
> perf reporting tools directly on the Android system natively.
could the changelog have more info about the lib name changes?
SNIP
> +
> + if (!strncmp(filename, "/data/app-lib", 13)) {
> + char *apk_path;
> +
> + if (!app_abi_length)
> + return false;
> +
> + new_length = 7 + app_abi_length + lib_length;
> +
> + apk_path = getenv("APK_PATH");
> + if(apk_path) {
> + snprintf(*newfilename, new_length + strlen(apk_path) + 1,
> + "%s/libs/%s/%s", apk_path, app_abi, libname);
> + } else {
> + snprintf(*newfilename, new_length,
> + "libs/%s/%s", app_abi, libname);
> + }
missing check for overflowing PATH_MAX for 'new_length' and 'new_length + strlen(apk_path) + 1'
> + return true;
> + }
> +
> + if (!strncmp(filename, "/system/lib/", 11)) {
> + char *ndk, *app;
> + const char *arch;
> + size_t ndk_length;
> + size_t app_length;
> +
> + ndk = getenv("NDK_ROOT");
> + app = getenv("APP_PLATFORM");
> +
> + if (!(ndk && app))
> + return false;
> +
> + ndk_length = strlen(ndk);
> + app_length = strlen(app);
> +
> + if (!(ndk_length && app_length && app_abi_length))
> + return false;
> +
> + arch = !strncmp(app_abi, "arm", 3) ? "arm" :
> + !strncmp(app_abi, "mips", 4) ? "mips" :
> + !strncmp(app_abi, "x86", 3) ? "x86" : NULL;
> +
> + if (!arch)
> + return false;
> +
> + new_length = 27 + ndk_length +
> + app_length + lib_length
> + + strlen(arch);
missing check for overflowing PATH_MAX for 'new_length'
> +
> + snprintf(*newfilename, new_length,
> + "%s/platforms/%s/arch-%s/usr/lib/%s",
> + ndk, app, arch, libname);
> +
> + return true;
> + }
> + return false;
> +}
> +
SNIP
> + if (android) {
> + char *newfilename_ptr = newfilename;
> + if (replace_android_lib(filename, &newfilename_ptr))
> + filename = newfilename;
Why is the newfilename_ptr needed? We could pass newfilename directly
to replace_android_lib function
if (replace_android_lib(filename, newfilename))
filename = newfilename;
thanks,
jirka
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2014-05-19 9:59 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-05-16 23:14 [PATCH 0/2] perf tools: improve perf support on Android Stephane Eranian
2014-05-16 23:14 ` [PATCH 1/2] perf tools: add cat as fallback pager Stephane Eranian
2014-05-17 1:55 ` David Ahern
2014-05-16 23:14 ` [PATCH 2/2] perf tools: add automatic remapping of Android libraries Stephane Eranian
2014-05-19 9:58 ` Jiri Olsa
-- strict thread matches above, loose matches on Subject: below --
2014-05-16 23:15 [PATCH 0/2] perf tools: improve perf support on Android Stephane Eranian
2014-05-16 23:15 ` [PATCH 1/2] perf tools: add cat as fallback pager Stephane Eranian
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox