summaryrefslogtreecommitdiff
path: root/libc/sysdeps/unix/sysv/linux/sparc
diff options
context:
space:
mode:
Diffstat (limited to 'libc/sysdeps/unix/sysv/linux/sparc')
-rw-r--r--libc/sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c27
-rw-r--r--libc/sysdeps/unix/sysv/linux/sparc/sysdep.h7
2 files changed, 25 insertions, 9 deletions
diff --git a/libc/sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c b/libc/sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c
index e181d9d36..ba44a61c8 100644
--- a/libc/sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c
+++ b/libc/sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c
@@ -154,6 +154,22 @@ __get_clockfreq_via_proc_openprom (void)
return result;
}
+static void set_obp_int (struct openpromio *op, int val)
+{
+ char *cp = op->oprom_array;
+ int *ip = (int *) cp;
+
+ *ip = val;
+}
+
+static int get_obp_int (struct openpromio *op)
+{
+ char *cp = op->oprom_array;
+ int *ip = (int *) cp;
+
+ return *ip;
+}
+
static hp_timing_t
__get_clockfreq_via_dev_openprom (void)
{
@@ -171,11 +187,11 @@ __get_clockfreq_via_dev_openprom (void)
obp_cmd->oprom_size =
sizeof (obp_buf) - sizeof (unsigned int);
- *(int *) obp_cmd->oprom_array = 0;
+ set_obp_int (obp_cmd, 0);
ret = ioctl (obp_dev_fd, OPROMCHILD, (char *) obp_cmd);
if (ret == 0)
{
- int cur_node = *(int *) obp_cmd->oprom_array;
+ int cur_node = get_obp_int (obp_cmd);
while (cur_node != 0 && cur_node != -1)
{
@@ -190,15 +206,14 @@ __get_clockfreq_via_dev_openprom (void)
strcpy (obp_cmd->oprom_array, "clock-frequency");
ret = ioctl (obp_dev_fd, OPROMGETPROP, (char *) obp_cmd);
if (ret == 0)
- result =
- (hp_timing_t) *(unsigned int *) obp_cmd->oprom_array;
+ result = (hp_timing_t) get_obp_int (obp_cmd);
}
obp_cmd->oprom_size = sizeof (obp_buf) - sizeof (unsigned int);
- *(int *) obp_cmd->oprom_array = cur_node;
+ set_obp_int (obp_cmd, cur_node);
ret = ioctl (obp_dev_fd, OPROMNEXT, (char *) obp_cmd);
if (ret < 0)
break;
- cur_node = *(int *)obp_cmd->oprom_array;
+ cur_node = get_obp_int (obp_cmd);
}
}
}
diff --git a/libc/sysdeps/unix/sysv/linux/sparc/sysdep.h b/libc/sysdeps/unix/sysv/linux/sparc/sysdep.h
index 336c8538b..30144b9f6 100644
--- a/libc/sysdeps/unix/sysv/linux/sparc/sysdep.h
+++ b/libc/sysdeps/unix/sysv/linux/sparc/sysdep.h
@@ -23,7 +23,7 @@
#define INLINE_SYSCALL(name, nr, args...) \
({ INTERNAL_SYSCALL_DECL(err); \
unsigned int resultvar = INTERNAL_SYSCALL(name, err, nr, args); \
- if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (resultvar, err), 0)) \
+ if (INTERNAL_SYSCALL_ERROR_P (resultvar, err)) \
{ \
__set_errno (INTERNAL_SYSCALL_ERRNO (resultvar, err)); \
resultvar = 0xffffffff; \
@@ -44,7 +44,8 @@
inline_syscall##nr(__SYSCALL_STRING, err, name, args)
#undef INTERNAL_SYSCALL_ERROR_P
-#define INTERNAL_SYSCALL_ERROR_P(val, err) ((err) != 0)
+#define INTERNAL_SYSCALL_ERROR_P(val, err) \
+ ((void) (val), __builtin_expect((err) != 0, 0))
#undef INTERNAL_SYSCALL_ERRNO
#define INTERNAL_SYSCALL_ERRNO(val, err) (-(val))
@@ -152,7 +153,7 @@
"0" (__g1), "1" (__o0), "2" (__o1), \
"r" (__o2), "r" (__o3), "r" (__o4) : \
__SYSCALL_CLOBBERS); \
- if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (__o0, __g1), 0)) \
+ if (INTERNAL_SYSCALL_ERROR_P (__o0, __g1)) \
{ \
__set_errno (INTERNAL_SYSCALL_ERRNO (__o0, __g1)); \
__o0 = -1L; \