Re: [util-linux] readprofile ignores the last element in /proc/profile

mita akinobu
2004-08-31T16:45:36Z

On Monday 30 August 2004 01:22, William Lee Irwin III wrote:
> Well, since I couldn't stop vomiting for hours after I looked at the
> code for readprofile(1), here's a reimplementation, with various
> misfeatures removed, included as a MIME attachment.

The rewritten readprofile still ignores the last element on my machine.

Boot option:
profile=2

System.map:
c0100264 t ignore_int
c0100298 T _stext
c0100298 T calibrate_delay
[...]
c03acbf1 T __spinlock_text_end
c03ae0af A _etext
c03ae0b0 A __start___ex_table

This is quick fix.

--- readprofile.c.orig 2004-08-31 23:01:23.000000000 +0900
+++ readprofile.c 2004-09-01 01:39:00.316750264 +0900
@@ -25,6 +25,7 @@ struct profile_state {
int fd, shift;
uint32_t *buf;
size_t bufsz;
+ size_t bufcnt;
struct sym syms[2], *last, *this;
unsigned long long stext, vaddr;
unsigned long total;
@@ -101,8 +102,8 @@ static int state_transition(struct profi
exit(EXIT_FAILURE);
}
}
- if (read(state->fd, state->buf, end - start) == end - start) {
- for (off = 0; off < (end - start)/sizeof(uint32_t); ++off)
+ if ((state->bufcnt = read(state->fd, state->buf, end - start)) >= 0) {
+ for (off = 0; off < (state->bufcnt)/sizeof(uint32_t); ++off)
state->last->hits += state->buf[off];
} else {
ret = 1;