diff options
author | marcus <marcus> | 2004-04-26 21:09:02 +0000 |
---|---|---|
committer | marcus <marcus> | 2004-04-26 21:09:02 +0000 |
commit | 15e85b434ecdcaaaf300151d54e2fdfb32aa15cb (patch) | |
tree | 2416fed28255258069c3cb4cc425bcec384b35fb /libl4 | |
parent | 942bbdfae479c420ceb9f34600e35ba4d18ceedf (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/ChangeLog | 15 | ||||
-rw-r--r-- | libl4/README | 1 | ||||
-rw-r--r-- | libl4/l4/ipc.h | 37 |
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; |