Messages in this thread | | | Subject | Re: [PATCH] [RFC V1]s390/perf: fix 'start' address of module's map | From | Songshan Gong <> | Date | Wed, 13 Jul 2016 14:39:13 +0800 |
| |
在 7/11/2016 8:01 PM, Jiri Olsa 写道: > On Mon, Jul 11, 2016 at 07:06:14PM +0800, Songshan Gong wrote: > > SNIP > >>> >>> we have following functions in tools/lib/api/fs to read >>> single number from file, which I assume you do above: >>> >>> int sysfs__read_int(const char *entry, int *value); >>> int sysfs__read_ull(const char *entry, unsigned long long *value); >>> >>> please check if you could use some of them, >>> we could add some more generic one if needed >> >> It seems infeasible. >> Each value in /sys/module/[module name]/sections/.text is a string like >> "0x000003ff8130078\n". >> But the core function 'strtoull(line, NULL, 10)' in sysfs__read_ull is based >> on decimal. >> >> Maybe you can introduce a new argument indicating the value is based on hex >> or decimal, or binary? > > yea we could specify it directly and add something like: > > int filename__read_ull(const char *filename, unsigned long long *value, int base) > > plus some other higher layer helpers.. > > but I wonder if we could use the base 0 (like in the attached patch), > the man page says it should be able to detect the base > > we'd need to check all the current usage to make sure nothing gets broken > > jirka > >
Since your patch havn't pushed to devel branch, my next version patch will still use the origin method to parse value from /sys/.
Thanks.
> --- > diff --git a/tools/lib/api/fs/fs.c b/tools/lib/api/fs/fs.c > index 08556cf2c70d..d18ae548468a 100644 > --- a/tools/lib/api/fs/fs.c > +++ b/tools/lib/api/fs/fs.c > @@ -292,7 +292,7 @@ int filename__read_ull(const char *filename, unsigned long long *value) > return -1; > > if (read(fd, line, sizeof(line)) > 0) { > - *value = strtoull(line, NULL, 10); > + *value = strtoull(line, NULL, 0); > if (*value != ULLONG_MAX) > err = 0; > } >
-- SongShan Gong
| |