RTEMS-5
Annotated Report
Wed Aug 22 16:54:59 2018
40002bd4 <devFS_Show>:
#include <rtems/devfs.h>
#include <rtems/bspIo.h>
void devFS_Show(void)
{
40002bd4: 9d e3 bf a0 save %sp, -96, %sp
<== NOT EXECUTED
rtems_filesystem_location_info_t *rootloc = &rtems_filesystem_root->location;
40002bd8: 40 00 02 86 call 400035f0 <rtems_current_user_env_get>
<== NOT EXECUTED
40002bdc: 01 00 00 00 nop
<== NOT EXECUTED
if (rootloc->mt_entry->ops == &devFS_ops) {
40002be0: c2 02 20 04 ld [ %o0 + 4 ], %g1
40002be4: c4 00 60 14 ld [ %g1 + 0x14 ], %g2
40002be8: c6 00 a0 0c ld [ %g2 + 0xc ], %g3
40002bec: 03 10 00 34 sethi %hi(0x4000d000), %g1
40002bf0: 82 10 62 1c or %g1, 0x21c, %g1 ! 4000d21c <devFS_ops>
40002bf4: 80 a0 c0 01 cmp %g3, %g1
40002bf8: 22 80 00 04 be,a 40002c08 <devFS_Show+0x34>
<== ALWAYS TAKEN
40002bfc: c4 00 a0 10 ld [ %g2 + 0x10 ], %g2
(unsigned long) current->minor
);
}
}
}
}
40002c00: 81 c7 e0 08 ret
40002c04: 81 e8 00 00 restore
size_t n = data->count;
40002c08: c2 00 a0 04 ld [ %g2 + 4 ], %g1
for (i = 0; i < n; ++i) {
40002c0c: 80 a0 60 00 cmp %g1, 0
40002c10: 02 bf ff fc be 40002c00 <devFS_Show+0x2c>
<== NEVER TAKEN
40002c14: f8 00 80 00 ld [ %g2 ], %i4
40002c18: b3 28 60 02 sll %g1, 2, %i1
printk("/");
40002c1c: 21 10 00 34 sethi %hi(0x4000d000), %l0
40002c20: b2 06 40 01 add %i1, %g1, %i1
printk(
40002c24: 31 10 00 34 sethi %hi(0x4000d000), %i0
40002c28: b3 2e 60 02 sll %i1, 2, %i1
printk("%c", current->name [j]);
40002c2c: 35 10 00 34 sethi %hi(0x4000d000), %i2
40002c30: b2 07 00 19 add %i4, %i1, %i1
printk("/");
40002c34: a0 14 22 68 or %l0, 0x268, %l0
printk(
40002c38: b0 16 22 78 or %i0, 0x278, %i0
printk("%c", current->name [j]);
40002c3c: 10 80 00 05 b 40002c50 <devFS_Show+0x7c>
40002c40: b4 16 a2 70 or %i2, 0x270, %i2
for (i = 0; i < n; ++i) {
40002c44: 80 a7 00 19 cmp %i4, %i1
40002c48: 02 bf ff ee be 40002c00 <devFS_Show+0x2c>
40002c4c: 01 00 00 00 nop
if (current->name != NULL) {
40002c50: c2 07 00 00 ld [ %i4 ], %g1
40002c54: 80 a0 60 00 cmp %g1, 0
40002c58: 22 bf ff fb be,a 40002c44 <devFS_Show+0x70>
<== ALWAYS TAKEN
40002c5c: b8 07 20 14 add %i4, 0x14, %i4
size_t m = current->namelen;
40002c60: f6 07 20 04 ld [ %i4 + 4 ], %i3
<== NOT EXECUTED
printk("/");
40002c64: 40 00 02 4d call 40003598 <printk>
<== NOT EXECUTED
40002c68: 90 10 00 10 mov %l0, %o0
<== NOT EXECUTED
for (j = 0; j < m; ++j) {
40002c6c: 80 a6 e0 00 cmp %i3, 0
<== NOT EXECUTED
40002c70: 22 80 00 0c be,a 40002ca0 <devFS_Show+0xcc>
<== NOT EXECUTED
40002c74: d4 07 20 0c ld [ %i4 + 0xc ], %o2
<== NOT EXECUTED
40002c78: ba 10 20 00 clr %i5
<== NOT EXECUTED
printk("%c", current->name [j]);
40002c7c: c2 07 00 00 ld [ %i4 ], %g1
<== NOT EXECUTED
40002c80: d2 48 40 1d ldsb [ %g1 + %i5 ], %o1
<== NOT EXECUTED
40002c84: 40 00 02 45 call 40003598 <printk>
<== NOT EXECUTED
40002c88: 90 10 00 1a mov %i2, %o0
<== NOT EXECUTED
for (j = 0; j < m; ++j) {
40002c8c: ba 07 60 01 inc %i5
<== NOT EXECUTED
40002c90: 80 a6 c0 1d cmp %i3, %i5
<== NOT EXECUTED
40002c94: 32 bf ff fb bne,a 40002c80 <devFS_Show+0xac>
<== NOT EXECUTED
40002c98: c2 07 00 00 ld [ %i4 ], %g1
<== NOT EXECUTED
printk(
40002c9c: d4 07 20 0c ld [ %i4 + 0xc ], %o2
<== NOT EXECUTED
40002ca0: d2 07 20 08 ld [ %i4 + 8 ], %o1
<== NOT EXECUTED
40002ca4: 40 00 02 3d call 40003598 <printk>
<== NOT EXECUTED
40002ca8: 90 10 00 18 mov %i0, %o0
<== NOT EXECUTED
40002cac: 10 bf ff e6 b 40002c44 <devFS_Show+0x70>
<== NOT EXECUTED
40002cb0: b8 07 20 14 add %i4, 0x14, %i4
<== NOT EXECUTED
40009fe4 <devFS_close>:
int devFS_close(
rtems_libio_t *iop
)
{
const devFS_node *np = iop->pathinfo.node_access;
40009fe4: c2 02 20 14 ld [ %o0 + 0x14 ], %g1
<== NOT EXECUTED
return rtems_deviceio_close( iop, np->major, np->minor );
40009fe8: d4 00 60 0c ld [ %g1 + 0xc ], %o2
<== NOT EXECUTED
40009fec: d2 00 60 08 ld [ %g1 + 8 ], %o1
<== NOT EXECUTED
40009ff0: 82 13 c0 00 mov %o7, %g1
<== NOT EXECUTED
40009ff4: 7f ff e5 a3 call 40003680 <rtems_deviceio_close>
<== NOT EXECUTED
40009ff8: 9e 10 40 00 mov %g1, %o7
<== NOT EXECUTED
40009ffc <devFS_eval_path>:
}
void devFS_eval_path(
rtems_filesystem_eval_path_context_t *ctx
)
{
40009ffc: 9d e3 bf a0 save %sp, -96, %sp
<== NOT EXECUTED
*/
static inline const devFS_data *devFS_get_data(
const rtems_filesystem_location_info_t *loc
)
{
return (const devFS_data *) loc->mt_entry->immutable_fs_info;
4000a000: c2 06 20 2c ld [ %i0 + 0x2c ], %g1
4000a004: c2 00 60 10 ld [ %g1 + 0x10 ], %g1
size_t n = data->count;
4000a008: f4 00 60 04 ld [ %g1 + 4 ], %i2
4000a00c: e2 06 00 00 ld [ %i0 ], %l1
4000a010: f2 06 20 04 ld [ %i0 + 4 ], %i1
devFS_node *nodes = data->nodes;
4000a014: fa 00 40 00 ld [ %g1 ], %i5
for (i = 0; (free_node == NULL || node == NULL) && i < n; ++i) {
4000a018: 80 a6 a0 00 cmp %i2, 0
4000a01c: 02 80 00 36 be 4000a0f4 <devFS_eval_path+0xf8>
<== NEVER TAKEN
4000a020: e4 06 20 10 ld [ %i0 + 0x10 ], %l2
devFS_node *node = NULL;
4000a024: a0 10 20 00 clr %l0
devFS_node *free_node = NULL;
4000a028: b6 10 20 00 clr %i3
for (i = 0; (free_node == NULL || node == NULL) && i < n; ++i) {
4000a02c: 10 80 00 0e b 4000a064 <devFS_eval_path+0x68>
4000a030: b8 10 20 00 clr %i4
if (
4000a034: 80 a6 40 01 cmp %i1, %g1
4000a038: 02 80 00 11 be 4000a07c <devFS_eval_path+0x80>
4000a03c: 94 10 00 19 mov %i1, %o2
for (i = 0; (free_node == NULL || node == NULL) && i < n; ++i) {
4000a040: 80 a6 e0 00 cmp %i3, 0
4000a044: 02 80 00 05 be 4000a058 <devFS_eval_path+0x5c>
<== NEVER TAKEN
4000a048: b8 07 20 01 inc %i4
4000a04c: 80 a4 20 00 cmp %l0, 0
4000a050: 12 80 00 13 bne 4000a09c <devFS_eval_path+0xa0>
4000a054: 80 8c a0 40 btst 0x40, %l2
4000a058: 80 a6 80 1c cmp %i2, %i4
4000a05c: 02 80 00 18 be 4000a0bc <devFS_eval_path+0xc0>
4000a060: ba 07 60 14 add %i5, 0x14, %i5
if (current->name != NULL) {
4000a064: d0 07 40 00 ld [ %i5 ], %o0
4000a068: 80 a2 20 00 cmp %o0, 0
4000a06c: 32 bf ff f2 bne,a 4000a034 <devFS_eval_path+0x38>
4000a070: c2 07 60 04 ld [ %i5 + 4 ], %g1
4000a074: 10 bf ff f3 b 4000a040 <devFS_eval_path+0x44>
4000a078: b6 10 00 1d mov %i5, %i3
&& memcmp(current->name, path, pathlen) == 0
4000a07c: 40 00 08 69 call 4000c220 <memcmp>
4000a080: 92 10 00 11 mov %l1, %o1
4000a084: 80 a2 20 00 cmp %o0, 0
4000a088: 22 bf ff ee be,a 4000a040 <devFS_eval_path+0x44>
4000a08c: a0 10 00 1d mov %i5, %l0
for (i = 0; (free_node == NULL || node == NULL) && i < n; ++i) {
4000a090: 10 bf ff ed b 4000a044 <devFS_eval_path+0x48>
4000a094: 80 a6 e0 00 cmp %i3, 0
&free_node
);
int eval_flags = rtems_filesystem_eval_path_get_flags(ctx);
if (node != NULL) {
if ((eval_flags & RTEMS_FS_EXCLUSIVE) == 0) {
4000a098: 80 8c a0 40 btst 0x40, %l2
<== NOT EXECUTED
4000a09c: 12 80 00 06 bne 4000a0b4 <devFS_eval_path+0xb8>
4000a0a0: 01 00 00 00 nop
currentloc->node_access = node;
4000a0a4: e0 26 20 20 st %l0, [ %i0 + 0x20 ]
ctx->pathlen = 0;
4000a0a8: c0 26 20 04 clr [ %i0 + 4 ]
4000a0ac: 81 c7 e0 08 ret
4000a0b0: 81 e8 00 00 restore
rtems_filesystem_eval_path_clear_path(ctx);
} else {
rtems_filesystem_eval_path_error(ctx, EEXIST);
4000a0b4: 7f ff e5 d8 call 40003814 <rtems_filesystem_eval_path_error>
4000a0b8: 93 e8 20 11 restore %g0, 0x11, %o1
if (node != NULL) {
4000a0bc: 80 a4 20 00 cmp %l0, 0
4000a0c0: 12 bf ff f6 bne 4000a098 <devFS_eval_path+0x9c>
<== NEVER TAKEN
4000a0c4: 80 8c a0 20 btst 0x20, %l2
}
} else {
if ((eval_flags & RTEMS_FS_MAKE) != 0) {
4000a0c8: 02 80 00 0e be 4000a100 <devFS_eval_path+0x104>
4000a0cc: 80 a6 e0 00 cmp %i3, 0
if (free_node != NULL) {
4000a0d0: 02 80 00 0e be 4000a108 <devFS_eval_path+0x10c>
<== NEVER TAKEN
4000a0d4: 82 10 21 ff mov 0x1ff, %g1
free_node->mode = S_IRWXU | S_IRWXG | S_IRWXO;
4000a0d8: c2 26 e0 10 st %g1, [ %i3 + 0x10 ]
currentloc->node_access = free_node;
4000a0dc: f6 26 20 20 st %i3, [ %i0 + 0x20 ]
ctx->token = token;
4000a0e0: e2 26 20 08 st %l1, [ %i0 + 8 ]
ctx->tokenlen = tokenlen;
4000a0e4: f2 26 20 0c st %i1, [ %i0 + 0xc ]
ctx->pathlen = 0;
4000a0e8: c0 26 20 04 clr [ %i0 + 4 ]
}
} else {
rtems_filesystem_eval_path_error(ctx, ENOENT);
}
}
}
4000a0ec: 81 c7 e0 08 ret
4000a0f0: 81 e8 00 00 restore
if ((eval_flags & RTEMS_FS_MAKE) != 0) {
4000a0f4: 80 8c a0 20 btst 0x20, %l2
4000a0f8: 12 80 00 04 bne 4000a108 <devFS_eval_path+0x10c>
<== ALWAYS TAKEN
4000a0fc: 01 00 00 00 nop
rtems_filesystem_eval_path_error(ctx, ENOENT);
4000a100: 7f ff e5 c5 call 40003814 <rtems_filesystem_eval_path_error>
4000a104: 93 e8 20 02 restore %g0, 2, %o1
rtems_filesystem_eval_path_error(ctx, ENOSPC);
4000a108: 7f ff e5 c3 call 40003814 <rtems_filesystem_eval_path_error>
4000a10c: 93 e8 20 1c restore %g0, 0x1c, %o1
40002cb4 <devFS_ioctl>:
rtems_libio_t *iop,
ioctl_command_t command,
void *buffer
)
{
const devFS_node *np = iop->pathinfo.node_access;
40002cb4: c2 02 20 14 ld [ %o0 + 0x14 ], %g1
<== NOT EXECUTED
return rtems_deviceio_control( iop, command, buffer, np->major, np->minor );
40002cb8: d8 00 60 0c ld [ %g1 + 0xc ], %o4
<== NOT EXECUTED
40002cbc: d6 00 60 08 ld [ %g1 + 8 ], %o3
<== NOT EXECUTED
40002cc0: 82 13 c0 00 mov %o7, %g1
<== NOT EXECUTED
40002cc4: 40 00 02 b3 call 40003790 <rtems_deviceio_control>
<== NOT EXECUTED
40002cc8: 9e 10 40 00 mov %g1, %o7
<== NOT EXECUTED
40002ae0 <devFS_mknod>:
const char *name,
size_t namelen,
mode_t mode,
dev_t dev
)
{
40002ae0: 9d e3 bf a0 save %sp, -96, %sp
<== NOT EXECUTED
int rv = 0;
if (namelen != 3 || name [0] != 'd' || name [1] != 'e' || name [2] != 'v') {
40002ae4: 80 a6 a0 03 cmp %i2, 3
<== NOT EXECUTED
40002ae8: 22 80 00 18 be,a 40002b48 <devFS_mknod+0x68>
<== NOT EXECUTED
40002aec: c2 4e 40 00 ldsb [ %i1 ], %g1
if (S_ISBLK(mode) || S_ISCHR(mode)) {
40002af0: 03 00 00 2c sethi %hi(0xb000), %g1
40002af4: 05 00 00 08 sethi %hi(0x2000), %g2
40002af8: 82 0e c0 01 and %i3, %g1, %g1
40002afc: 80 a0 40 02 cmp %g1, %g2
40002b00: 12 80 00 29 bne 40002ba4 <devFS_mknod+0xc4>
40002b04: 01 00 00 00 nop
char *dupname = malloc(namelen);
40002b08: 40 00 01 5e call 40003080 <malloc>
40002b0c: 90 10 00 1a mov %i2, %o0
if (dupname != NULL) {
40002b10: 84 92 20 00 orcc %o0, 0, %g2
40002b14: 02 80 00 2a be 40002bbc <devFS_mknod+0xdc>
40002b18: 94 10 00 1a mov %i2, %o2
devFS_node *node = parentloc->node_access;
40002b1c: c2 06 20 08 ld [ %i0 + 8 ], %g1
node->name = dupname;
40002b20: c4 20 40 00 st %g2, [ %g1 ]
node->namelen = namelen;
40002b24: f4 20 60 04 st %i2, [ %g1 + 4 ]
node->major = rtems_filesystem_dev_major_t(dev);
node->minor = rtems_filesystem_dev_minor_t(dev);
node->mode = mode;
memcpy(dupname, name, namelen);
40002b28: 92 10 00 19 mov %i1, %o1
node->major = rtems_filesystem_dev_major_t(dev);
40002b2c: f8 20 60 08 st %i4, [ %g1 + 8 ]
int rv = 0;
40002b30: b0 10 20 00 clr %i0
node->minor = rtems_filesystem_dev_minor_t(dev);
40002b34: fa 20 60 0c st %i5, [ %g1 + 0xc ]
memcpy(dupname, name, namelen);
40002b38: 40 00 25 e3 call 4000c2c4 <memcpy>
40002b3c: f6 20 60 10 st %i3, [ %g1 + 0x10 ]
40002b40: 81 c7 e0 08 ret
40002b44: 81 e8 00 00 restore
if (namelen != 3 || name [0] != 'd' || name [1] != 'e' || name [2] != 'v') {
40002b48: 80 a0 60 64 cmp %g1, 0x64
40002b4c: 12 bf ff ea bne 40002af4 <devFS_mknod+0x14>
<== NEVER TAKEN
40002b50: 03 00 00 2c sethi %hi(0xb000), %g1
40002b54: c2 4e 60 01 ldsb [ %i1 + 1 ], %g1
40002b58: 80 a0 60 65 cmp %g1, 0x65
40002b5c: 12 bf ff e6 bne 40002af4 <devFS_mknod+0x14>
<== NEVER TAKEN
40002b60: 03 00 00 2c sethi %hi(0xb000), %g1
40002b64: c2 4e 60 02 ldsb [ %i1 + 2 ], %g1
40002b68: 80 a0 60 76 cmp %g1, 0x76
40002b6c: 12 bf ff e2 bne 40002af4 <devFS_mknod+0x14>
<== NEVER TAKEN
40002b70: 03 00 00 2c sethi %hi(0xb000), %g1
} else {
errno = ENOTSUP;
rv = -1;
}
} else {
if (!S_ISDIR(mode)) {
40002b74: 03 00 00 3c sethi %hi(0xf000), %g1
40002b78: b6 0e c0 01 and %i3, %g1, %i3
40002b7c: 03 00 00 10 sethi %hi(0x4000), %g1
40002b80: 80 a6 c0 01 cmp %i3, %g1
40002b84: 02 bf ff ef be 40002b40 <devFS_mknod+0x60>
<== ALWAYS TAKEN
40002b88: b0 10 20 00 clr %i0
errno = ENOTSUP;
40002b8c: 40 00 25 a0 call 4000c20c <__errno>
<== NOT EXECUTED
40002b90: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
40002b94: 82 10 20 86 mov 0x86, %g1
<== NOT EXECUTED
40002b98: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
rv = -1;
}
}
return rv;
}
40002b9c: 81 c7 e0 08 ret
<== NOT EXECUTED
40002ba0: 81 e8 00 00 restore
<== NOT EXECUTED
errno = ENOTSUP;
40002ba4: 40 00 25 9a call 4000c20c <__errno>
40002ba8: b0 10 3f ff mov -1, %i0
40002bac: 82 10 20 86 mov 0x86, %g1
40002bb0: c2 22 00 00 st %g1, [ %o0 ]
40002bb4: 81 c7 e0 08 ret
40002bb8: 81 e8 00 00 restore
errno = ENOMEM;
40002bbc: 40 00 25 94 call 4000c20c <__errno>
40002bc0: b0 10 3f ff mov -1, %i0
40002bc4: 82 10 20 0c mov 0xc, %g1
40002bc8: c2 22 00 00 st %g1, [ %o0 ]
40002bcc: 81 c7 e0 08 ret
40002bd0: 81 e8 00 00 restore
40002ce4 <devFS_read>:
rtems_libio_t *iop,
void *buffer,
size_t count
)
{
const devFS_node *np = iop->pathinfo.node_access;
40002ce4: c2 02 20 14 ld [ %o0 + 0x14 ], %g1
<== NOT EXECUTED
return rtems_deviceio_read( iop, buffer, count, np->major, np->minor );
40002ce8: d8 00 60 0c ld [ %g1 + 0xc ], %o4
<== NOT EXECUTED
40002cec: d6 00 60 08 ld [ %g1 + 8 ], %o3
<== NOT EXECUTED
40002cf0: 82 13 c0 00 mov %o7, %g1
<== NOT EXECUTED
40002cf4: 40 00 02 6f call 400036b0 <rtems_deviceio_read>
<== NOT EXECUTED
40002cf8: 9e 10 40 00 mov %g1, %o7
<== NOT EXECUTED
40002cfc <devFS_stat>:
const rtems_filesystem_location_info_t *loc,
struct stat *buf
)
{
int rv = 0;
const devFS_node *the_dev = loc->node_access;
40002cfc: c2 02 20 08 ld [ %o0 + 8 ], %g1
<== NOT EXECUTED
if (the_dev != NULL) {
40002d00: 80 a0 60 00 cmp %g1, 0
<== NOT EXECUTED
40002d04: 02 80 00 0a be 40002d2c <devFS_stat+0x30>
<== NOT EXECUTED
40002d08: 01 00 00 00 nop
buf->st_rdev = rtems_filesystem_make_dev_t( the_dev->major, the_dev->minor );
40002d0c: c6 00 60 0c ld [ %g1 + 0xc ], %g3
rtems_device_minor_number _minor
)
{
union __rtems_dev_t temp;
temp.__overlay.major = _major;
40002d10: c8 00 60 08 ld [ %g1 + 8 ], %g4
buf->st_mode = the_dev->mode;
40002d14: c2 00 60 10 ld [ %g1 + 0x10 ], %g1
40002d18: c2 22 60 0c st %g1, [ %o1 + 0xc ]
} else {
rv = rtems_filesystem_default_fstat(loc, buf);
}
return rv;
}
40002d1c: 90 10 20 00 clr %o0
buf->st_rdev = rtems_filesystem_make_dev_t( the_dev->major, the_dev->minor );
40002d20: c8 22 60 18 st %g4, [ %o1 + 0x18 ]
}
40002d24: 81 c3 e0 08 retl
40002d28: c6 22 60 1c st %g3, [ %o1 + 0x1c ]
rv = rtems_filesystem_default_fstat(loc, buf);
40002d2c: 82 13 c0 00 mov %o7, %g1
40002d30: 40 00 1b a8 call 40009bd0 <rtems_filesystem_default_fstat>
40002d34: 9e 10 40 00 mov %g1, %o7
40002d38 <devFS_write>:
rtems_libio_t *iop,
const void *buffer,
size_t count
)
{
const devFS_node *np = iop->pathinfo.node_access;
40002d38: c2 02 20 14 ld [ %o0 + 0x14 ], %g1
<== NOT EXECUTED
return rtems_deviceio_write( iop, buffer, count, np->major, np->minor );
40002d3c: d8 00 60 0c ld [ %g1 + 0xc ], %o4
<== NOT EXECUTED
40002d40: d6 00 60 08 ld [ %g1 + 8 ], %o3
<== NOT EXECUTED
40002d44: 82 13 c0 00 mov %o7, %g1
<== NOT EXECUTED
40002d48: 40 00 02 76 call 40003720 <rtems_deviceio_write>
<== NOT EXECUTED
40002d4c: 9e 10 40 00 mov %g1, %o7
<== NOT EXECUTED