From: Andrew Morton <akpm@osdl.org>
To: linux-arch@vger.kernel.org
Cc: Tim Schmielau <tim@physik3.uni-rostock.de>
Subject: Fw: [rft] testing BSD accounting format on different archs
Date: Sat, 24 Apr 2004 13:17:06 -0700 [thread overview]
Message-ID: <20040424131706.3d1f2c53.akpm@osdl.org> (raw)
[-- Attachment #1: Type: text/plain, Size: 621 bytes --]
Begin forwarded message:
Date: Sat, 24 Apr 2004 13:46:54 +0200 (CEST)
From: Tim Schmielau <tim@physik3.uni-rostock.de>
To: lkml <linux-kernel@vger.kernel.org>
Subject: [rft] testing BSD accounting format on different archs
I intend to modify the format of the BSD accounting file in a way that
a) allows cross-platform compatibility using patched acct tools and
b) is fully binary compatible with the current format.
To make sure these goals are met on all platforms, I'd like to see the
output of the attached program on all linux ports *except* x86
(I want to keep my Inbox manageable:).
Thanks a lot,
Tim
[-- Attachment #2: acct_test.c --]
[-- Type: TEXT/plain, Size: 7894 bytes --]
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <linux/types.h>
typedef __u16 comp_t;
#define ACCT_COMM 16
struct acct_v0
{
char ac_flag; /* Accounting Flags */
/*
* No binary format break with 2.0 - but when we hit 32bit uid we'll
* have to bite one
*/
__u16 ac_uid; /* Accounting Real User ID */
__u16 ac_gid; /* Accounting Real Group ID */
__u16 ac_tty; /* Accounting Control Terminal */
__u32 ac_btime; /* Accounting Process Creation Time */
comp_t ac_utime; /* Accounting User Time */
comp_t ac_stime; /* Accounting System Time */
comp_t ac_etime; /* Accounting Elapsed Time */
comp_t ac_mem; /* Accounting Average Memory Usage */
comp_t ac_io; /* Accounting Chars Transferred */
comp_t ac_rw; /* Accounting Blocks Read or Written */
comp_t ac_minflt; /* Accounting Minor Pagefaults */
comp_t ac_majflt; /* Accounting Major Pagefaults */
comp_t ac_swaps; /* Accounting Number of Swaps */
__u32 ac_exitcode; /* Accounting Exitcode */
char ac_comm[ACCT_COMM + 1]; /* Accounting Command Name */
char ac_pad[10]; /* Accounting Padding Bytes */
};
struct acct_v1
{
char ac_flag; /* Flags */
char ac_version; /* Always set to ACCT_VERSION */
/* for binary compatibility back until 2.0 */
__u16 ac_uid16; /* LSB of Real User ID */
__u16 ac_gid16; /* LSB of Real Group ID */
__u16 ac_tty; /* Control Terminal */
__u32 ac_btime; /* Process Creation Time */
comp_t ac_utime; /* User Time */
comp_t ac_stime; /* System Time */
comp_t ac_etime; /* Elapsed Time */
comp_t ac_mem; /* Average Memory Usage */
comp_t ac_io; /* Chars Transferred */
comp_t ac_rw; /* Blocks Read or Written */
comp_t ac_minflt; /* Minor Pagefaults */
comp_t ac_majflt; /* Major Pagefaults */
comp_t ac_swaps; /* Number of Swaps */
/*
* We still need to identify the platforms that used to have no padding
* before ac_exitcode
*/
__u16 ac_ahz; /* AHZ */
__u32 ac_exitcode; /* Exitcode */
char ac_comm[ACCT_COMM + 1]; /* Command Name */
__u8 ac_etime_hi; /* Elapsed Time MSB */
__u16 ac_etime_lo; /* Elapsed Time LSB */
__u32 ac_uid; /* Real User ID */
__u32 ac_gid; /* Real Group ID */
};
struct acct_v2
{
char ac_flag; /* Flags */
char ac_version; /* Always set to ACCT_VERSION */
/* for binary compatibility back until 2.0 */
__u16 ac_uid16; /* LSB of Real User ID */
__u16 ac_gid16; /* LSB of Real Group ID */
__u16 ac_tty; /* Control Terminal */
__u32 ac_btime; /* Process Creation Time */
comp_t ac_utime; /* User Time */
comp_t ac_stime; /* System Time */
comp_t ac_etime; /* Elapsed Time */
comp_t ac_mem; /* Average Memory Usage */
comp_t ac_io; /* Chars Transferred */
comp_t ac_rw; /* Blocks Read or Written */
comp_t ac_minflt; /* Minor Pagefaults */
comp_t ac_majflt; /* Major Pagefaults */
comp_t ac_swaps; /* Number of Swaps */
/*
* We still need to identify the platforms that used to have no padding
* before ac_exitcode
*/
__u32 ac_exitcode; /* Exitcode */
__u16 ac_ahz; /* AHZ */
char ac_comm[ACCT_COMM + 1]; /* Command Name */
__u8 ac_etime_hi; /* Elapsed Time MSB */
__u16 ac_etime_lo; /* Elapsed Time LSB */
__u32 ac_uid; /* Real User ID */
__u32 ac_gid; /* Real Group ID */
};
struct acct_v0 ac_v0;
struct acct_v1 ac_v1;
struct acct_v2 ac_v2;
#define of(base,member) (int)((void *)&(base.member)-(void *)&base)
#define offsets2(member) of(ac_v1,member),of(ac_v2,member)
#define offsets3(member) of(ac_v0,member),of(ac_v1,member),of(ac_v2,member)
#define offsets12(member0,member1) of(ac_v0,member0),of(ac_v1,member1),of(ac_v2,member1)
char filename[] = "acct_test_XXXXXX";
int main(void)
{
int i, fd;
unsigned char buf[16];
system("uname -m -p -i -o");
printf("\n"
" v0 v1 v2\n"
"ac_flag %3d %3d %3d\n"
"ac_version %3d %3d\n"
"ac_uid16 %3d %3d %3d\n"
"ac_gid16 %3d %3d %3d\n"
"ac_tty %3d %3d %3d\n"
"ac_btime %3d %3d %3d\n"
"ac_utime %3d %3d %3d\n"
"ac_stime %3d %3d %3d\n"
"ac_etime %3d %3d %3d\n"
"ac_mem %3d %3d %3d\n"
"ac_io %3d %3d %3d\n"
"ac_rw %3d %3d %3d\n"
"ac_minflt %3d %3d %3d\n"
"ac_majflt %3d %3d %3d\n"
"ac_swaps %3d %3d %3d\n"
"ac_ahz %3d %3d\n"
"ac_exitcode %3d %3d %3d\n"
"ac_comm %3d %3d %3d\n"
"ac_etime_hi %3d %3d\n"
"ac_etime_lo %3d %3d\n"
"ac_uid %3d %3d\n"
"ac_gid %3d %3d\n"
"sizeof(struct acct)\n"
" %3d %3d %3d\n\n",
offsets3(ac_flag),
offsets2(ac_version),
offsets12(ac_uid,ac_uid16),
offsets12(ac_gid,ac_gid16),
offsets3(ac_tty),
offsets3(ac_btime),
offsets3(ac_utime),
offsets3(ac_stime),
offsets3(ac_etime),
offsets3(ac_mem),
offsets3(ac_io),
offsets3(ac_rw),
offsets3(ac_minflt),
offsets3(ac_majflt),
offsets3(ac_swaps),
offsets2(ac_ahz),
offsets3(ac_exitcode),
offsets3(ac_comm),
offsets2(ac_etime_hi),
offsets2(ac_etime_lo),
offsets2(ac_uid),
offsets2(ac_gid),
(int)sizeof(ac_v0), (int)sizeof(ac_v1), (int)sizeof(ac_v2)
);
ac_v0.ac_flag = 0x01;
ac_v0.ac_uid = 0x0304;
ac_v0.ac_gid = 0x0506;
ac_v0.ac_tty = 0x0708;
ac_v0.ac_btime = 0x090a0b0c;
ac_v0.ac_utime = 0x0d0e;
ac_v0.ac_stime = 0x0f10;
ac_v0.ac_etime = 0x1112;
ac_v0.ac_mem = 0x1314;
ac_v0.ac_io = 0x1516;
ac_v0.ac_rw = 0x1718;
ac_v0.ac_minflt = 0x191a;
ac_v0.ac_majflt = 0x1b1c;
ac_v0.ac_swaps = 0x1d1e;
ac_v0.ac_exitcode = 0x21222324;
for (i=0; i<17; i++)
ac_v0.ac_comm[i] = 0x25+i;
for (i=0; i<10; i++)
ac_v0.ac_pad[i] = 0xf0+i;
ac_v1.ac_flag = ac_v2.ac_flag = 0x01;
ac_v1.ac_version = ac_v2.ac_version = 0x02;
ac_v1.ac_uid16 = ac_v2.ac_uid16 = 0x0304;
ac_v1.ac_gid16 = ac_v2.ac_gid16 = 0x0506;
ac_v1.ac_tty = ac_v2.ac_tty = 0x0708;
ac_v1.ac_btime = ac_v2.ac_btime = 0x090a0b0c;
ac_v1.ac_utime = ac_v2.ac_utime = 0x0d0e;
ac_v1.ac_stime = ac_v2.ac_stime = 0x0f10;
ac_v1.ac_etime = ac_v2.ac_etime = 0x1112;
ac_v1.ac_mem = ac_v2.ac_mem = 0x1314;
ac_v1.ac_io = ac_v2.ac_io = 0x1516;
ac_v1.ac_rw = ac_v2.ac_rw = 0x1718;
ac_v1.ac_minflt = ac_v2.ac_minflt = 0x191a;
ac_v1.ac_majflt = ac_v2.ac_majflt = 0x1b1c;
ac_v1.ac_swaps = ac_v2.ac_swaps = 0x1d1e;
ac_v1.ac_ahz = ac_v2.ac_ahz = 0x1f20;
ac_v1.ac_exitcode = ac_v2.ac_exitcode = 0x21222324;
for (i=0; i<17; i++)
ac_v1.ac_comm[i] = ac_v2.ac_comm[i] = 0x25+i;
ac_v1.ac_etime_hi = ac_v2.ac_etime_hi = 0x36;
ac_v1.ac_etime_lo = ac_v2.ac_etime_lo = 0x3738;
ac_v1.ac_uid = ac_v2.ac_uid = 0x393a3b3c;
ac_v1.ac_gid = ac_v2.ac_gid = 0x3d3e3f40;
fd = mkstemp(filename);
if (write(fd, &ac_v0, 64) != 64) {
perror("write ac_v0");
return 1;
}
if (write(fd, &ac_v1, 64) != 64) {
perror("write ac_v1");
return 1;
}
if (write(fd, &ac_v2, 64) < 64) {
perror("write ac_v2");
return 1;
}
if (lseek(fd, 0, SEEK_SET)!=0) {
perror("seek");
return 1;
}
for (i=0; i<12; i++) {
if (read(fd, buf, 16) != 16) {
perror("read");
return 1;
}
printf(" %02x %02x %02x %02x %02x %02x %02x %02x"
" %02x %02x %02x %02x %02x %02x %02x %02x\n",
buf[0x00], buf[0x01], buf[0x02], buf[0x03],
buf[0x04], buf[0x05], buf[0x06], buf[0x07],
buf[0x08], buf[0x09], buf[0x0a], buf[0x0b],
buf[0x0c], buf[0x0d], buf[0x0e], buf[0x0f]
);
if ((i&3) == 3)
printf("\n");
}
close(fd);
return 0;
}
next reply other threads:[~2004-04-24 20:17 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-04-24 20:17 Andrew Morton [this message]
2004-04-26 4:41 ` Fw: [rft] testing BSD accounting format on different archs David S. Miller
2004-04-26 20:22 ` David Mosberger
2004-04-26 21:14 ` Geert Uytterhoeven
2004-04-26 8:53 ` Arnd Bergmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20040424131706.3d1f2c53.akpm@osdl.org \
--to=akpm@osdl.org \
--cc=linux-arch@vger.kernel.org \
--cc=tim@physik3.uni-rostock.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox