summaryrefslogtreecommitdiff
path: root/libl4
diff options
context:
space:
mode:
authormarcus <marcus>2004-04-26 21:09:02 +0000
committermarcus <marcus>2004-04-26 21:09:02 +0000
commit15e85b434ecdcaaaf300151d54e2fdfb32aa15cb (patch)
tree2416fed28255258069c3cb4cc425bcec384b35fb /libl4
parent942bbdfae479c420ceb9f34600e35ba4d18ceedf (diff)
2004-04-26 Marcus Brinkmann <marcus@gnu.org>
* l4/ipc.h (__L4_map_item_t, __L4_grant_item_t, __L4_string_item_t): New member MR. (_L4_msg_append_map_item): Fix use of map_item. (_L4_msg_put_map_item): Likewise. (_L4_msg_get_map_item): Likewise. (_L4_msg_append_grant_item): Fix use of grant_item. (_L4_msg_put_grant_item): Likewise. (_L4_msg_get_grant_item): Likewise. (_L4_msg_append_simple_string_item): Fix use of string item. (_L4_msg_append_string_item): Likewise. (_L4_msg_put_string_item): Likewise. (_L4_msg_get_string_item): Likewise.
Diffstat (limited to 'libl4')
-rw-r--r--libl4/ChangeLog15
-rw-r--r--libl4/README1
-rw-r--r--libl4/l4/ipc.h37
3 files changed, 39 insertions, 14 deletions
diff --git a/libl4/ChangeLog b/libl4/ChangeLog
index cc0834e..a46b830 100644
--- a/libl4/ChangeLog
+++ b/libl4/ChangeLog
@@ -1,3 +1,18 @@
+2004-04-26 Marcus Brinkmann <marcus@gnu.org>
+
+ * l4/ipc.h (__L4_map_item_t, __L4_grant_item_t,
+ __L4_string_item_t): New member MR.
+ (_L4_msg_append_map_item): Fix use of map_item.
+ (_L4_msg_put_map_item): Likewise.
+ (_L4_msg_get_map_item): Likewise.
+ (_L4_msg_append_grant_item): Fix use of grant_item.
+ (_L4_msg_put_grant_item): Likewise.
+ (_L4_msg_get_grant_item): Likewise.
+ (_L4_msg_append_simple_string_item): Fix use of string item.
+ (_L4_msg_append_string_item): Likewise.
+ (_L4_msg_put_string_item): Likewise.
+ (_L4_msg_get_string_item): Likewise.
+
2004-04-23 Marco Gerards <metgerards@student.han.nl>
* l4/thread.h (__L4_STOP): Don't use _L4_XCHG_REGS_SET_SP and
diff --git a/libl4/README b/libl4/README
index 5ae90d8..766f562 100644
--- a/libl4/README
+++ b/libl4/README
@@ -140,3 +140,4 @@ TODO
* Sanitize the error handling. The GNU interface should return proper errno
values for all failures. ExchangeRegister can fail, so all functions using
it must also return an error value (l4_start_sp_ip etc).
+* Fix _L4_msg_get_string_item.
diff --git a/libl4/l4/ipc.h b/libl4/l4/ipc.h
index 78df5c4..be065a5 100644
--- a/libl4/l4/ipc.h
+++ b/libl4/l4/ipc.h
@@ -152,6 +152,9 @@ typedef union
{
_L4_map_item_t raw;
+ /* We need the following member to avoid breaking the aliasing rules. */
+ l4_word_t mr[2];
+
struct
{
_L4_BITFIELD4
@@ -219,9 +222,11 @@ typedef _L4_dword_t _L4_grant_item_t;
typedef union
{
-
_L4_grant_item_t raw;
+ /* We need the following member to avoid breaking the aliasing rules. */
+ _L4_word_t mr[2];
+
struct
{
_L4_BITFIELD4
@@ -290,6 +295,9 @@ typedef union
{
_L4_string_item_t raw;
+ /* We need the following member to avoid breaking the aliasing rules. */
+ l4_word_t mr[2];
+
struct
{
_L4_BITFIELD6
@@ -846,7 +854,7 @@ _L4_msg_append_map_item (_L4_msg_t msg, _L4_map_item_t map_item)
/* The "not last" bit is ignored for sending. */
int pos = 1 + _msg->tag.untyped + _msg->tag.typed;
- *((_L4_map_item_t *) &msg[pos]) = map_item;
+ ((__L4_map_item_t *) &msg[pos])->raw = map_item;
_msg->tag.typed += 2;
}
@@ -859,7 +867,7 @@ _L4_msg_append_grant_item (_L4_msg_t msg, _L4_grant_item_t grant_item)
/* The "not last" bit is ignored for sending. */
int pos = 1 + _msg->tag.untyped + _msg->tag.typed;
- *((_L4_grant_item_t *) &msg[pos]) = grant_item;
+ ((__L4_grant_item_t *) &msg[pos])->raw = grant_item;
_msg->tag.typed += 2;
}
@@ -878,7 +886,7 @@ _L4_msg_append_simple_string_item (_L4_msg_t msg,
_string_item.cont = 0;
_string_item.nr_substrings = 0;
- *((_L4_string_item_t *) &msg[pos]) = string_item;
+ ((__L4_string_item_t *) &msg[pos])->raw = string_item;
_msg->tag.typed += 2;
}
@@ -899,8 +907,8 @@ _L4_msg_append_string_item (_L4_msg_t msg, _L4_string_item_t *string_item)
_L4_word_t *substrings = &_string_item->string[1];
cont = _string_item->cont;
- *((__L4_string_item_t *) &msg[pos]) = *_string_item;
- pos += 2;
+ msg[pos++] = _string_item->mr[0];
+ msg[pos++] = _string_item->mr[1];
while (nr-- > 0)
msg[pos++] = *(substrings++);
@@ -927,7 +935,7 @@ _L4_msg_put_map_item (_L4_msg_t msg, _L4_word_t nr, _L4_map_item_t map_item)
__L4_msg_t *_msg = (__L4_msg_t *) msg;
_L4_word_t pos = 1 + _msg->tag.untyped + nr;
- *((_L4_map_item_t *) &msg[pos]) = map_item;
+ ((__L4_map_item_t *) &msg[pos])->raw = map_item;
}
@@ -939,7 +947,7 @@ _L4_msg_put_grant_item (_L4_msg_t msg, _L4_word_t nr,
__L4_msg_t *_msg = (__L4_msg_t *) msg;
_L4_word_t pos = 1 + _msg->tag.untyped + nr;
- *((_L4_grant_item_t *) &msg[pos]) = grant_item;
+ ((__L4_grant_item_t *) &msg[pos])->raw = grant_item;
}
@@ -956,7 +964,7 @@ _L4_msg_put_simple_string_item (_L4_msg_t msg, _L4_word_t nr,
_string_item.cont = 0;
_string_item.nr_substrings = 0;
- *((__L4_string_item_t *) &msg[pos]) = _string_item;
+ ((__L4_string_item_t *) &msg[pos])->raw = string_item;
}
@@ -976,8 +984,8 @@ _L4_msg_put_string_item (_L4_msg_t msg, _L4_word_t nr,
_L4_word_t *substrings = &_string_item->string[1];
cont = _string_item->cont;
- *((__L4_string_item_t *) &msg[pos]) = *_string_item;
- pos += 2;
+ msg[pos++] = _string_item->mr[0];
+ msg[pos++] = _string_item->mr[1];
while (nr-- > 0)
msg[pos++] = *(substrings++);
@@ -1009,7 +1017,8 @@ _L4_msg_get_map_item (_L4_msg_t msg, _L4_word_t nr, _L4_map_item_t *map_item)
{
__L4_msg_t *_msg = (__L4_msg_t *) msg;
_L4_word_t pos = 1 + _msg->tag.untyped + nr;
- *map_item = *((_L4_map_item_t *) &msg[pos]);
+
+ *map_item = ((__L4_map_item_t *) &msg[pos])->raw;
return sizeof (_L4_map_item_t) / sizeof (_L4_word_t);
}
@@ -1021,7 +1030,8 @@ _L4_msg_get_grant_item (_L4_msg_t msg, _L4_word_t nr,
{
__L4_msg_t *_msg = (__L4_msg_t *) msg;
_L4_word_t pos = 1 + _msg->tag.untyped + nr;
- *grant_item = *((_L4_grant_item_t *) &msg[pos]);
+
+ *grant_item = ((__L4_grant_item_t *) &msg[pos])->raw;
return sizeof (_L4_grant_item_t) / sizeof (_L4_word_t);
}
@@ -1042,7 +1052,6 @@ _L4_msg_get_string_item (_L4_msg_t msg, _L4_word_t nr,
_L4_word_t *substrings = &_string_item->string[1];
cont = _string_item->cont;
-
*((__L4_string_item_t *) &msg[pos]) = *_string_item;
pos += 2;