| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
Message-Id: <Y3/Z1CGL8D4OwT66@viriathus>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* cpu.sym: retrieve size of vm_offset_t and mach_port_name_t from
gnumach headers at compile type.
* global.{c,h}: add port size as a variable and initialize it to the
port name size.
* lexxer.l: apply port or port name size to the corresponding types,
instead of using the word size.
* parser.y: update port size if we're generating for kernel-space
(server or client). Also re-initialize default port types to account
for this change.
* type.c: use port size instead of word size in default port types and
runtime checks.
There are many assumptions about mach_port_t:
- on kernel side, its size is the same as a pointer. This allows to
replace the port name with the address of the corresponding data
structure during copyin in mach_msg()
- in mig, this is also the "word size", which is derived from gnumach
headers as the size of integer_t
- its size is also the same as natural_t, so it's possible to model
structures like mach_port_status_t as an array of integer_t in
mig. This is convenient since arrays and structures can't have
mixed types.
- its size is always the same as the port name size
This patch does not change the current behaviour on 32-bit kernels,
but allows for some of these assumptions to be broken on 64-bit
kernels. This is needed to have 32-bit port names on 64-bit kernels
and be able to support a 32-bit userspace. It still leaves the choice
for a 64-bit userspace, if all integer_t and natural_t are to be
extended to 64 bit.
However keeping 32-bit port names seems to be the right thing, based on
previous discussions [1], even for a 64-bit kernel.
The only assumption kept is that in kernel-space ports are always the
size of a pointer, as they refer to a data structure and not to a
specific port name. To ensure this is true for various user/kernel
combinations, we dynamically change the port size if we're generating
code for kernel-space server or clients, and keep the size of a port the
same of a port name for user-space servers and clients.
[1] https://lists.gnu.org/archive/html/bug-hurd/2012-04/msg00000.html
Signed-off-by: Luca Dariz <luca@orpolo.org>
Message-Id: <20220403150020.120799-2-luca@orpolo.org>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
For variable-length arrays, up to 2048 bytes are transmitted inline.
If the array is larger, the data is transmitted out-of-line, and a
pointer to a vm_allocated region is stored at the beginning of the
array.
Previously, the generated code casted the field. Use a union instead.
This fixes the gcc warning `dereferencing type-punned pointer will
break strict-aliasing rules [-Wstrict-aliasing]'.
* global.c (OOLPostfix): New variable.
* global.h (OOLPostfix): New declaration.
* server.c (WriteServerCallArg): Avoid cast.
(WriteDestroyArg): Likewise.
(WritePackArgValue): Likewise.
(WritePackArg): Likewise.
* user.c (WriteExtractArgValue): Likewise.
* utils.c (WriteFieldDeclPrim): Generate a union with an additional
pointer field for variable-length arrays.
|
|
|
|
|
|
|
|
|
| |
* global.c (LintLib): Remove definition.
* global.h (LintLib): Remove declaration.
* header.c (WriteUserRoutine, WriteServerRoutine): Don't emit `Lint'
code.
* user.c (WriteIncludes): Likewise.
* utils.c (WriteRCSDecl): Likewise.
|
|
|
|
|
|
|
|
|
|
|
|
| |
[patch #5018 --- ``Remove support to msg_send interface.'']
* global.c (UseMsgRPC): Removed definition.
* global.h (UseMsgRPC): Removed declaration.
* mig.in (--help): Removed information about `-r' and `-R' options.
* migcom.c (parseArgs): Changed the switches `-r' and `-R' to deal with
the absence of obsolete the send/receive pairs.
* user.c (WriteRoutine): Adapted the use of `UseMsgRPC' as if it was
defined to `TRUE'.
(WriteMsgSendReceive): Removed, since it is not used anymore.
|
|
|
|
|
|
|
|
| |
* global.c (DefaultFiles): New variable, boolean initialized to true.
(more_global): Leave null file name variables alone if it's false.
* global.h (DefaultFiles): Declare it.
* migcom.c (parseArgs): New option -n clears it.
* mig.in: Grok -n (pass it through) and put it in the usage message.
|
|
|