Age | Commit message (Collapse) | Author |
|
2009-01-16 Neal H. Walfield <neal@gnu.org>
* mm-init.c (mm_init) [!NDEBUG && i386]: Clear STORAGE and assert
that it is not VG_ADDR_VOID before freeing the associated storage.
Assert that the fault callback was called.
|
|
hurd/
2008-12-17 Neal H. Walfield <neal@gnu.org>
* exceptions.h: Merge contents of this file...
* thread.h: ... into this one. Update users.
* headers.m4: Don't link hurd/exceptions.h.
* Makefile.am (includehurd_HEADERS): Remove exceptions.h.
libc-parts/
2008-12-17 Neal H. Walfield <neal@gnu.org>
* backtrace.c: Don't include <hurd/exceptions.h>.
libhurd-mm/
2008-12-17 Neal H. Walfield <neal@gnu.org>
* anonymous.h: Don't include <hurd/exceptions.h>.
* as.h: Likewise.
* exceptions.c: Likewise.
* map.h: Likewise.
* message-buffer.c: Likewise.
* mm-init.c: Likewise.
* as-build.c: Don't include <hurd/exceptions.h>. Include
<viengoos/thread.h> and <viengoos/messenger.h>.
* as-dump.c: Include <viengoos/thread.h> and
<viengoos/messenger.h>.
* as-lookup.c: Likewise.
libpthread/
2008-12-17 Neal H. Walfield <neal@gnu.org>
* sysdeps/viengoos/ia32/pt-setup.c: Don't include
<hurd/exceptions.h> or <viengoos/thread.h>.
* sysdeps/viengoos/pt-startup.c (__pthread_startup): Don't include
<l4.h> or <hurd/exceptions.h>. Include <hurd/thread.h>.
(__pthread_startup): Set pthread->threadid using hurd_myself.
* sysdeps/viengoos/pt-sysdep.h: Don't cinlude
<hurd/exceptions.h>. Include <hurd/thread.h>.
* sysdeps/viengoos/pt-thread-dealloc.c: Don't include
<hurd/exceptions.h>. Include <hurd/thread.h>.
* sysdeps/viengoos/pt-thread-start.c: Don't include
<viengoos/thread.h> or <hurd/exceptions.h>. Include
<hurd/thread.h>.
libviengoos/
2008-12-17 Neal H. Walfield <neal@gnu.org>
* viengoos/misc.h: Don't include <hurd/exceptions.h>.
|
|
2008-12-17 Neal H. Walfield <neal@gnu.org>
* viengoos/activity.h: Add a "vg_" to public viengoos identifiers.
Update users.
* viengoos/addr-trans.h: Likewise.
* viengoos/addr.h: Likewise.
* viengoos/cap.h: Likewise.
* viengoos/folio.h: Likewise.
* viengoos/futex.h: Likewise.
* viengoos/rpc.h: Likewise.
* viengoos/thread.h: Likewise.
|
|
/
2008-12-17 Neal H. Walfield <neal@gnu.org>
* libviengoos: New directory.
* Makefile.am (SUBDIRS): Add libviengoos.
* configure.ac: Include libviengoos/headers.m4. Generate
libviengoos/Makefile.
hurd/
2008-12-17 Neal H. Walfield <neal@gnu.org>
* activity.h: Move to ../libviengoos/viengoos. Update references.
* addr-trans.h: Likewise.
* addr.h: Likewise.
* cap.h: Likewise.
* folio.h: Likewise.
* futex.h: Likewise.
* ipc.h: Likewise.
* message.h: Likewise.
* messenger.h: Likewise.
* rpc.h: Likewise.
* thread.h: Move viengoos specific bits...
* ../libviengoos/viengoos/thread.h: ... to this new file.
* thread.h (struct hurd_utcb): New structure.
* exceptions.h (hurd_utcb): Use a struct hurd_utcb *, not a
struct vg_utcb *. Update users.
(hurd_activation_state_alloc): Likewise.
(hurd_activation_state_free): Likewise.
(hurd_activation_handler_activated): Likewise.
(hurd_activation_handler_normal): Likewise.
* t-addr-trans.c: Move to ../libviengoos.
* t-addr.c: Likewise.
* t-rpc.c: Likewise.
* Makefile.am (TESTS, check_PROGRAMS, t_addr_CPPFLAGS)
(t_addr_SOURCES, t_addr_trans_CPPFLAGS, t_addr_trans_SOURCES)
(t_rpc_CPPFLAGS, t_rpc_SOURCES): Move from this file...
* ../libviengoos/Makefile.am.
* Makefile.am (includehurd_HEADERS): Don't mention activity.h,
addr-trans.h, addr.h, cap.h, folio.h, futex.h, ipc.h, message.h or
messenger.h.
* headers.m4: Don't create a link to hurd/addr.h,
hurd/addr-trans.h, hurd/cap.h, hurd/folio.h, hurd/rpc.h,
hurd/activity.h, hurd/futex.h, hurd/message.h, hurd/messenger.h or
hurd/ipc.h.
libviengoos/
2008-12-17 Neal H. Walfield <neal@gnu.org>
* Makefile.am: New file.
* headers.m4: Likewise.
* t-addr-trans.c: Move from ../hurd.
* t-addr.c: Likewise.
* t-rpc.c: Likewise.
* viengoos.h: Likewise.
* viengoos/activity.h: Likewise.
* viengoos/addr-trans.h: Likewise.
* viengoos/addr.h: Likewise.
* viengoos/cap.h: Likewise.
* viengoos/folio.h: Likewise.
* viengoos/futex.h: Likewise.
* viengoos/ipc.h: Likewise.
* viengoos/message.h: Likewise.
* viengoos/messenger.h: Likewise.
* viengoos/rpc.h: Likewise.
* viengoos/misc.h: Moved from ../viengoos/rm.h.
* viengoos/thread.h: New file split from ../hurd/thread.h.
libpthread/
2008-12-17 Neal H. Walfield <neal@gnu.org>
* Makefile.am: New file.
* headers.m4: Likewise.
* t-addr-trans.c: Move from ../hurd.
* t-addr.c: Likewise.
* t-rpc.c: Likewise.
* viengoos.h: Likewise.
* viengoos/activity.h: Likewise.
* viengoos/addr-trans.h: Likewise.
* viengoos/addr.h: Likewise.
* viengoos/cap.h: Likewise.
* viengoos/folio.h: Likewise.
* viengoos/futex.h: Likewise.
* viengoos/ipc.h: Likewise.
* viengoos/message.h: Likewise.
* viengoos/messenger.h: Likewise.
* viengoos/rpc.h: Likewise.
* viengoos/misc.h: Moved from ../viengoos/rm.h.
* viengoos/thread.h: New file split from ../hurd/thread.h.
viengoos/
2008-12-17 Neal H. Walfield <neal@gnu.org>
* rm.h: Move from here...
* ../libviengoos/viengoos/misc.h: ... to here. Update users.
* headers.m4: Don't link rm.h to hurd/rm.h.
* Makefile.am (viengoos_SOURCES): Remove rm.h.
|
|
hurd/
2008-12-11 Neal H. Walfield <neal@gnu.org>
Adapt RPC interfaces according to changes in IPC semantics.
* messenger.h: New file.
* message.h: New file.
* ipc.h: New file.
* headers.m4: Link sysroot/include/hurd/message.h to
hurd/message.h, sysroot/include/hurd/messenger.h to
hurd/messenger.h, and sysroot/include/hurd/ipc.h to hurd/ipc.h.
* cap.h: Include <hurd/addr.h> and <stdbool.h>.
(enum cap_type): Define cap_messenger, cap_rmessenger and
cap_type_count.
(cap_type_string): Handle cap_messenger and cap_rmessenger.
(cap_types_compatible): Likewise.
(cap_type_weak_p): Likewise.
(cap_type_weaken): Likewise.
(cap_type_strengthen): Likewise.
(oid_t): Replace L4 type with standard type.
(CAP_VOID): Define.
* rpc.h [! RPC_TARGET]: Don't error out if not defined.
[RPC_TARGET_ARG_]: Don't define or undefine.
[RPC_TARGET_]: Likewise.
[RPC_TARGET_NEED_ARG]: Ignore.
Don't include <l4/ipc.h> or <l4/space.h>. Include
<hurd/message.h> and <hurd/ipc.h>.
(reply_buffer) [RM_INTERN]: Declare.
(messenger_message_load) [RM_INTERN]: Likewise.
[! RM_INTERN] Include <hurd/message-buffer.h>.
(cap_t): Define.
(CPP_FOREACH): Define.
(CPP_SAFE_DEREF): Likewise.
(RPC_ARGUMENTS): Take additional argument prefix. Use it. Update
users.
(RPC_CHOP): Rename from this...
(RPC_CHOP2): ... to this. Update users.
(RPC_TYPE_SHIFT): New define.
(RPCLOADARG): Rewrite according to new marshalling semantics.
(RPCSTOREARG): Likewise.
(RPC_SEND_MARSHAL): Likewise.
(RPC_SEND_UNMARSHAL): Likewise.
(RPC_REPLY_MARSHAL): Likewise.
(RPC_REPLY_UNMARSHAL): Likewise.
(RPC_RECEIVE_MARSHAL): New define.
(RPC_MARSHAL_GEN_): Break this into...
(RPC_SEND_MARSHAL_GEN_): ... this...
(RPC_RECEIVE_MARSHAL_GEN_): ... this...
(RPC_REPLY_MARSHAL_GEN_): ... and this. Update users.
(RPC_MARSHAL_GEN_): Redefine in terms of the new macros.
(RPC_SEND_): Rewrite according to new marshalling and IPC
semantics.
(RPC_SEND_NONBLOCKING_): Define.
(RPC_): Rewrite according to new marshalling and IPC
semantics.
(RPC_REPLY_): Likewise.
(RPC_SIMPLE_): Don't define.
(RPC_SIMPLE): Don't define.
(RPC): Take additional argument ret_cap_count. Update users.
(rpc_error_reply_marshal): Rewrite according to new marshalling
and IPC semantics.
(rpc_error_reply): Likewise.
* t-rpc.c (RPC_TARGET_NEED_ARG): Don't define.
(RPC_TARGET): Define.
(RPC_noargs): Set to a large interger.
(RPC_caps): New define.
(noargs): Update interface specification according to new IDL
interface. Update users.
(onein): Likewise.
(oneout): Likewise.
(onlyin): Likewise.
(onlyout): Likewise.
(mix): Likewise.
(noargs): Likewise.
(onein): Likewise.
(oneout): Likewise.
(onlyin): Likewise.
(onlyout): Likewise.
(mix): New interface.
(RPC_TARGET): Don't undefine.
(main): Update to use the new RPC marshalling interface. Write a
test using the new `mix' interface.
* activity.h (RPC_TARGET_NEED_ARG): Don't undefine.
(RPC_TARGET): Don't define.
(activity_policy): Update interface specification according to new
IDL interface. Update users.
(activity_info): Likewise.
* cap.h: (RPC_TARGET_NEED_ARG): Don't undefine.
(RPC_TARGET): Don't define.
(RM_object_slot_copy_out): Don't define.
(RM_object_slot_copy_in): Likewise.
(RM_object_slot_read): Likewise.
(RM_object_reply_on_destruction): Define.
(cap_copy): Update interface specification according to new
IDL interface. Update users.
(cap_rubout): Likewise.
(cap_read): Likewise.
(object_discarded_clear): Likewise.
(object_discard): Likewise.
(object_status): Likewise.
(object_name): Likewise.
(object_reply_on_destruction): New interface replacing
thread_wait_destroy.
(object_slot_copy_out): Remove interface.
(object_slot_copy_in): Likewise.
(object_slot_read): Likewise.
(RPC_TARGET): Don't undefine.
* exceptions.h: Don't include <l4/thread.h>. Include
<l4/space.h>.
(RPC_STUB_PREFIX): Redefine to `activation'.
(RPC_ID_PREFIX EXCEPTION): Redefine to `ACTIVATION'.
(RPC_TARGET_NEED_ARG): Don't define.
(RPC_TARGET_ARG_TYPE): Likewise.
(RPC_TARGET): Likewise.
(EXCEPTION_fault): Rename from this...
(ACTIVATION_fault): ... to this. Update users.
(exception_method_id_string): Rename from this...
(activation_method_id_string): ... to this.
(struct exception_info): Rename from this...
(struct activation_fault_info): ... to this. Update users.
(EXCEPTION_INFO_FMT): Rename from this...
(ACTIVATION_FAULT_INFO_FMT): ... to this. Update users.
(EXCEPTION_INFO_PRINTF): Rename from this...
(ACTIVATION_FAULT_INFO_PRINTF): ... to this. Update users.
(fault): Update interface specification according to new IDL
interface. Update users.
* folio.h (RPC_TARGET_NEED_ARG): Don't undefine.
(RPC_TARGET): Don't define.
(folio_alloc): Update interface specification according to new IDL
interface. Update users.
(folio_free): Likewise.
(folio_object_alloc): Likewise.
(folio_policy): Likewise.
(RPC_TARGET): Don't undefine.
* futex.h (RPC_TARGET_NEED_ARG): Don't undefine.
(RPC_TARGET): Don't define.
(futex): Update interface specification according to new IDL
interface. Update users.
(RPC_TARGET): Don't undefine.
(futex_using): New function.
(futex): Implement in terms of it.
(futex_wait_using): New function.
(futex_wait): Implement in terms of it.
(futex_wake_using): New function.
(futex_wake): Implement in terms of it.
* thread.h (RM_thread_wait_object_destroyed): Don't define.
(RM_thread_raise_exception): Rename from this...
(RM_thread_activation_collect): ... to this.
(RM_thread_id): Define.
(RPC_TARGET_NEED_ARG): Don't undefine.
(RPC_TARGET): Don't define.
(struct hurd_thread_exregs_in): Remove fields aspace, activity,
exception_page, aspace_out, activity_out and exception_page_out.
(thread_exregs): Update interface specification according to new
IDL interface. Add additional parameters exception_messenger and
exception_messenger_out. Update users.
(thread_wait_object_destroyed): Remove interface.
(struct exception_buffer): Don't define.
(thread_raise_exception): Remove interface.
(thread_id): New interface.
(thread_activation_collect): Likewise.
(RPC_TARGET): Don't undefine.
* RPC: Update.
* exceptions.h (hurd_activation_handler_init_early): New
declaration.
(hurd_activation_handler_init): Likewise.
(hurd_utcb): Likewise.
(EXCEPTION_STACK_SIZE_LOG2): Don't define.
(EXCEPTION_STACK_SIZE): Likewise.
(hurd_activation_state_alloc): New declaration.
(exception_page_cleanup): Rename from this...
(hurd_activation_state_free): ... to this. Update users.
(exception_handler_activated): Rename from this...
(hurd_activation_handler_activated): ... to this.
(exception_handler_normal): Rename from this...
(hurd_activation_handler_normal): ... to this. Update users.
Take additional parameter utcb.
(exception_handler_entry): Rename from this...
(hurd_activation_handler_entry): ... to this.
(exception_handler_end): Rename from this...
(hurd_activation_handler_end): ... to this.
(hurd_activation_message_register): New declaration.
(hurd_activation_message_unregister): Likewise.
(hurd_activation_stack_dump): Likewise.
* thread.h [! __have_vg_thread_id_t] (__have_vg_thread_id_t):
Define.
[! __have_vg_thread_id_t && USE_L4]: Include <l4.h>.
[! __have_vg_thread_id_t && !USE_L4]: Include <stdint.h>.
[! __have_vg_thread_id_t] (vg_thread_id_t): Define.
[! __have_vg_thread_id_t] (vg_niltid): Define.
[! __have_vg_thread_id_t] (VG_THREAD_ID_FMT): Define.
[! __have_activation_frame] (__have_activation_frame): Define.
[! __have_activation_frame && USE_L4]: Include <l4/ipc.h>.
[! __have_activation_frame] (struct hurd_message_buffer): Declare.
[! __have_activation_frame] (struct activation_frame): Define in
this case. Add fields normal_mode_stack and canary.
[! __have_activation_frame && i386] (struct activation_frame):
Change regs to have 10 elements. Add fields eax, ecx, edx,
eflags, eip, ebx, edi, esi, ebp and esp.
[! __have_activation_frame && !USE_L4] (struct activation_frame):
Remove fields saved_sender, saved_receiver, saved_timeout,
saved_error_code, saved_flags, and saved_br0 in this case.
[__need_vg_thread_id_t || __need_activation_frame]
(__need_vg_thread_id_t): Undefine.
[__need_vg_thread_id_t || __need_activation_frame]
(__need_activation_frame): Likewise.
[!__need_vg_thread_id_t && !__need_activation_frame]: Include the
rest of the file in this case. Include <stdint.h>,
<hurd/types.h>, <hurd/addr.h>, <hurd/addr-trans.h>, <hurd/cap.h>,
<hurd/messenger.h> and <setjmp.h>.
(hurd_activation_frame_longjmp): New declaration.
(struct hurd_fault_catcher): New definition.
(hurd_fault_catcher_register): New declaration.
(hurd_fault_catcher_unregister): Likewise.
(struct exception_page): Rename from this...
(struct vg_utcb): ... to this. Update users. Remove field
exception. Add fields protected_payload, messenger_id,
inline_words, inline_caps, inline_word_count, inline_cap_count,
inline_data, exception_buffer, extant_messages, catchers,
alternate_stack, alternate_stack_inuse, canary0, canary1.
(UTCB_CANARY0): Define.
(UTCB_CANARY1): Likewise.
(THREAD_EXCEPTION_PAGE_SLOT): Rename from this...
(THREAD_UTCB): ... to this.
(THREAD_EXCEPTION_MESSENGER): Define.
(THREAD_SLOTS): Likewise.
(THREAD_SLOTS_LOG2): Likewise.
(HURD_EXREGS_SET_EXCEPTION_PAGE): Rename from this...
(HURD_EXREGS_SET_UTCB): ... to this. Update users.
(HURD_EXREGS_SET_EXCEPTION_MESSENGER): Define.
(HURD_EXREGS_SET_REGS): Add HURD_EXREGS_SET_EXCEPTION_MESSENGER.
(vg_myself): New function.
* startup.h (struct hurd_startup_data): Add field messengers.
viengoos/
2008-12-12 Neal H. Walfield <neal@gnu.org>
Implement messengers and convert to new IPC semantics.
* messenger.h: New file.
* messenger.c: New file.
* Makefile.am (viengoos_SOURCES): Add messenger.h and messenger.c.
* ager.c: Include "messenger.h".
(update_stats): Update notifivation code to use messengers.
* cap.c: Include <hurd/messenger.h>.
(cap_shootdown): Follow thread and messenger objects.
* object.h (object_wait_queue_head): Use and return struct
messenger *'s, not struct thread *'s. Update users.
(object_wait_queue_tail): Likewise.
(object_wait_queue_next): Likewise.
(object_wait_queue_prev): Likewise.
(object_wait_queue_enqueue): Likewise.
(object_wait_queue_dequeue): Likewise. Rename from this...
(object_wait_queue_unlink): ... to this.
(object_wait_queue_push): New declaration.
(folio_object_wait_queue_for_each): Use and return struct
messenger *'s, not struct thread *'s. Update users.
(object_wait_queue_for_each): Likewise.
* object.c: Include <hurd/messenger.h> and "messenger.h".
(folio_object_alloc): When destroying a messenger, call
messenger_destroy.
(folio_object_alloc): Send notifications using messengers.
(object_wait_queue_head): Use and return struct messenger *'s, not
struct thread *'s.
(object_wait_queue_tail): Likewise.
(object_wait_queue_next): Likewise.
(object_wait_queue_prev): Likewise.
(object_wait_queue_check): Likewise.
(object_wait_queue_enqueue): Likewise. Add MESSENGER to end of
the queue, not the beginning.
(object_wait_queue_push): New function.
(object_wait_queue_dequeue): Use and return struct messenger *'s,
not struct thread *'s. Rename from this...
(object_wait_queue_unlink): ... to this.
* pager.c: Include "messenger.h".
* thread.h: Don't include "list.h". Include <hurd/cap.h> and
<hurd/thread.h>.
(struct folio): Remove declaration.
(THREAD_SLOTS): Don't define.
(THREAD_WAIT_FUTEX): Move from here...
* messenger.h (MESSENGER_WAIT_FUTEX): ... to here.
* thread.h (THREAD_WAIT_DESTROY): Move from here...
* messenger.h (MESSENGER_WAIT_DESTROY): ... to here.
* thread.h (THREAD_WAIT_ACTIVITY_INFO): Move from here...
* messenger.h (MESSENGER_WAIT_ACTIVITY_INFO): ... to here.
* thread.h (struct thread): Rename field exception_page to utcb.
Add field exception_messenger. Remove fields wait_queue_p,
wait_queue_head, wait_queue_tail, wait_reason, wait_reason_arg,
wait_reason_arg2, wait_queue and futex_waiter_node.
(futex_waiters): Don't declare.
(thread_exregs): Change input capabilities to not be pointers to
capabilities but just capability structures. Add argument
exception_messenger. Remove arguments aspace_out, activity_out
and exception_page_out. Update users.
(thread_activate): New declaration.
(thread_raise_exception): Change MSG's type to be struct
vg_message *. Update users.
(thread_deliver_pending): New declaration.
* thread.c (thread_deinit): Remove code to remove THREAD from a
wait queue.
(thread_exregs): Change input capabilities to not be pointers to
capabilities but just capability structures. Update code. Add
argument exception_messenger. Set THREAD's exception messenger
according to it and CONTROL. Remove arguments aspace_out,
activity_out and exception_page_out. Don't save the old
capabilities.
(thread_raise_exception): Move body of function...
(thread_activate): ... to this new function. Update to use
messengers.
(thread_raise_exception): Implement in terms of it.
(thread_deliver_pending): New function.
* server.c: Include <hurd/ipc.h> and "messenger.h".
(DEBUG): If label is the IPC label, use "IPC" as the function.
(OBJECT_): Take additional parameter WRITABLE. Save whether the
object is writable in *WRITABLE. Update users.
(OBJECT): Likewise.
(server_loop): Update to use messengers and the new IPC interface.
Update method implementations appropriately. Don't marshal faults
using exception_fault_send_marshal but the new
activation_fault_send_marshal. Remove implementations of
object_slot_copy_out, object_slot_copy_in and object_slot_read.
Reimplement object_discard. In the thread_exregs implementation,
handle the exception messenger. Implement thread_id. Remove
thread_wait_object_destroyed. Implement
object_reply_on_destruction. In activity_info and
activity_policy, don't operate on PRINCIPAL but the invoke
activity. Implement thread_activation_collect. When blocking on
a futex, don't enqueue the calling thread but the reply messenger.
Implement the messenger_id method.
(REPLY): Redefine before processing an object invocation to reply
using the reply messenger included in the request.
* rm.h: Include <l4/message.h>.
(rm_method_id_string): Don't handle object_slot_copy_out,
object_slot_copy_in, object_slot_read, exception_collect or
thread_wait_object_destroyed. Handle object_reply_on_destruction,
thread_id, thread_activation_collect.
(RPC_TARGET_NEED_ARG): Don't undefine.
(RPC_TARGET): Don't define.
(struct io_buffer): Redefine in terms of L4_NUM_BRS.
(write): Update interface specification according to new IDL
interface. Update users.
(read): Likewise.
(as_dump): Likewise.
(fault): Likewise.
(RPC_STUB_PREFIX): Don't undefine.
(RPC_ID_PREFIX): Likewise.
libhurd-mm/
2008-12-12 Neal H. Walfield <neal@gnu.org>
Update to new RPC interface and IPC semantics. Support messengers.
* message-buffer.h: New file.
* message-buffer.c: Likewise.
* Makefile.am (libhurd_mm_a_SOURCES): Add message-buffer.h and
message-buffer.c.
* headers.m4: Link sysroot/include/hurd/message-buffer.h to
libhurd-mm/message-buffer.h.
* exceptions.c: Include <hurd/mm.h>, <hurd/rm.h> and
<backtrace.h>.
(hurd_fault_catcher_register): New function.
(hurd_fault_catcher_unregister): Likewise.
(hurd_activation_frame_longjmp): Likewise.
(utcb_state_save): Rename from this...
(l4_utcb_state_save): ... to this. Take a `struct
activation_frame *', not a `struct exception_frame *'.
(utcb_state_restore): Rename from this...
(l4_utcb_state_restore): ... to this. Take a `struct
activation_frame *', not a `struct exception_frame *'.
(exception_fetch_exception): Rename from this...
(hurd_activation_fetch): ... to this.
(hurd_activation_message_register): New function.
(hurd_activation_frame_longjmp): Likewise.
(exception_frame_slab): Rename from this...
(activation_frame_slab): ... to this. Use a static initializer.
(exception_frame_slab_alloc): Rename from this...
(activation_frame_slab_alloc): ... to this. Don't preserve the L4
utcb.
(exception_frame_slab_dealloc): Rename from this...
(activation_frame_slab_dealloc): ... to this.
(exception_frame_alloc): Rename from this...
(activation_frame_alloc): ... to this. If there are no
preallocated frames, panic. Move the hard allocation code to...
(check_activation_frame_reserve): ... this new function.
(hurd_activation_stack_dump): New function.
(hurd_activation_handler_normal): Take an additional parameter,
the utcb. Add consistency checks. Handle IPC and closures.
Update fault handling code to use the new fault interface. If
unable to resolve the fault via the pager mechanism, see if a
fault catcher in installed. Check the UTCB's canary. If running
on the alternate stack, clear UTCB->ALTERNATE_STACK_INUSE on exit.
(hurd_activation_handler_activated): Take a `struct vg_utcb *',
not a `struct exception_page *'. Handle IPC and closures.
Improve test to determine if the fault was a stack fault. If so,
return to normal mode to handle the fault and use an alternate
stack.
(activation_handler_area0): New local variable.
(activation_handler_msg): Likewise.
(initial_utcb): Likewise.
(simple_utcb_fetcher): New function.
(hurd_utcb): New variable.
(hurd_activation_handler_init_early): New function.
(hurd_activation_handler_init): Likewise.
(exception_handler_init): Remove function.
(ACTIVATION_AREA_SIZE_LOG2): Define.
(ACTIVATION_AREA_SIZE): Likewise.
(hurd_activation_state_alloc): New function.
(exception_page_cleanup): Rename from this...
(hurd_activation_state_free): ... to this. Rewrite.
* ia32-exception-entry.S (_hurd_activation_handler_entry): Save
the eflags before executing a sub instruction. Don't try to
smartly calculate the location of the UTCB. Instead, just reload
it.
(activation_frame_run): Use an alternate stack, if requested.
Save ebx and ebi. Pass the utcb to the callback.
* mm-init.c [i386]: Include <hurd/pager.h>.
Include <backtrace.h>.
(mm_init): Call hurd_activation_handler_init_early and
hurd_activation_handler_init. Don't call exception_handler_init.
(mm_init) [! NDEBUG && i386]: Test the activation code.
* as-build.c (do_index): Handle indexing a cap_thread or a
cap_messenger.
(as_build): Likewise.
* as-dump.c (do_walk): Handle indexing a cap_thread or a
cap_messenger.
* as-lookup.c (as_lookup_rel_internal): Likewise.
* as.c (as_walk): Likewise.
* storage.c: Include <backtrace.h>.
(shadow_setup): Update use of rm_folio_object_alloc according to
its new interface.
(storage_check_reserve_internal): Likewise.
(storage_free_): Likewise.
(FREE_PAGES_SERIALIZE): Bump to 32.
(storage_alloc): If we try to get storage more than 5 lives, print
a warning that we may be experiencing live lock.
* pager.h (pager_fault_t): Change info's type from `struct
exception_info' to `struct activation_fault_info'.
(PAGER_VOID): Define.
* map.h: Don't include <hurd/exceptions.h>. Include <hurd/as.h>.
(maps_lock_lock): Don't use EXCEPTION_STACK_SIZE but
AS_STACK_SPACE.
(map_fault): Change info's type from `struct exception_info' to
`struct activation_fault_info'.
* map.c (map_fault): Change info's type from `struct
exception_info' to `struct activation_fault_info'.
* as.h (AS_STACK_SPACE): Define.
(as_lock): Use AS_STACK_SPACE instead of EXCEPTION_STACK_SIZE.
(as_lock_readonly): Likewise.
* as.h (AS_CHECK_SHADOW): Only check the address translator for
capabilities that designate cappages.
* anonymous.h (ANONYMOUS_MAGIC): Define.
(struct anonymous_pager): Add field magic.
* anonymous.c (fault): Assert that ANON->MAGIC has the expected
value. Correctly size PAGES.
(mdestroy): Assert that ANON->MAGIC has the expected value.
(destroy): Likewise.
(advise): Likewise.
(anonymous_pager_alloc): Initialize ANON->MAGIC.
benchmarks/
2008-12-12 Neal H. Walfield <neal@gnu.org>
Update according to new RPC interfaces.
* activity-distribution.c (main): Update use of rm_activity_policy
and rm_activity_info to be consistent with the new interface.
Replace use of `struct exception_info' with `struct
activation_fault_info'.
* cache.c (helper): Update use of rm_activity_policy and
rm_activity_info to be consistent with the new interface.
* shared-memory-distribution.c (main): Likewise.
hieronymus/
2008-12-12 Neal H. Walfield <neal@gnu.org>
Update according to new RPC interfaces.
* hieronymus.c (activity_alloc): Update use of rm_activity_policy,
rm_activity_info and rm_folio_object_alloc to be consistent with
new interface. Replace use of rm_thread_wait_object_destroyed
with rm_object_reply_on_destruction.
libc-parts/
2008-12-11 Neal H. Walfield <neal@gnu.org>
Update to new RPC interfaces.
* _exit.c (_exit): Update use of rm_folio_object_alloc to be
consistent with the new interface.
* backtrace.c (RA) [!RM_INTERN]: Set up a fault catch handler to
avoid gratuitously faulting.
(backtrace) [!RM_INTERN]: Set up a jump buffer. Jump to it on a
fault.
(backtrace_print): Use s_printf, not printf.
* ia32-crt0.S (STACK_SIZE): Increase to 128 kb.
* process-spawn.c (process_spawn): Don't use a capability slot to
identify the root of the new thread's address space, allocate a
thread object. Allocate messengers for the new thread and save
them in STARTUP_DATA->MESSENGERS.
* s_printf.c (io_buffer_flush): Use the debug output interface.
(s_putchar): Don't call rm_write but use io_buffer_flush.
libpthread/
2008-12-11 Neal H. Walfield <neal@gnu.org>
Update to new RPC interfaces, IPC semantics.
* sysdeps/viengoos/bits/pthread-np.h: Include <hurd/exceptions.h>.
(pthread_hurd_utcb_np): New declaration.
* sysdeps/viengoos/pt-hurd-utcb-np.c: New file.
* Makefile.am (libpthread_a_SOURCES): Add pt-hurd-utcb.c.
* sysdeps/viengoos/pt-sysdep.h (EXCEPTION_AREA_SIZE): Don't
define.
(EXCEPTION_AREA_SIZE_LOG2): Likewise.
(EXCEPTION_PAGE): Likewise.
(PTHREAD_SYSDEP_MEMBERS): Remove fields exception_area, and
exception_area_va. Add fields utcb and lock_message_buffer.
* sysdeps/viengoos/pt-thread-alloc.c: Include
<hurd/message-buffer.h>.
(__pthread_thread_alloc): Initialize thread->lock_message_buffer.
When executed the first time, set the thread's L4 user-defined
handler. Initialize THREAD->UTCB with the thread's current utcb.
Set HURD_UTCB to PTHREAD_HURD_UTCB_NP. For subsequent threads,
don't manually set up the activation area. Instead, call
hurd_activation_state_alloc.
* sysdeps/viengoos/pt-thread-dealloc.c: Include
<hurd/message-buffer.h>.
(__pthread_thread_dealloc): Call __pthread_thread_halt. Don't
manually clean up the activation area. Instead, call
hurd_activation_state_free. Free THREAD->LOCK_MESSAGE_BUFFER.
* sysdeps/viengoos/ia32/pt-setup.c (stack_setup): Pre-fault the
first four pages of the new stack.
(__pthread_setup): Don't set up the activation area.
* sysdeps/viengoos/pt-wakeup.c (__pthread_wakeup): Use
futex_wake_using with the calling thread's lock messenger.
* sysdeps/viengoos/pt-block.c (__pthread_block): Use
futex_wait_using and provide THREAD->LOCK_MESSAGE_BUFFER as the
message buffer.
* sysdeps/viengoos/pt-thread-start.c (__pthread_thread_start):
Don't set the first thread's L4 user-defined handler here.
(__pthread_thread_start): Update use of rm_thread_exregs according
to be consistent with new interface.
* sysdeps/viengoos/pt-thread-halt.c (__pthread_thread_halt): If
THREAD is the current thread, call vg_suspend.
* sysdeps/viengoos/pt-setactivity-np.c (pthread_setactivity_np):
Update use of rm_thread_exregs according to be consistent with new
interface.
* sysdeps/viengoos/ia32/signal-dispatch-lowlevel.c
(signal_dispatch_lowlevel): Use __builtin_frame_address to get the
current stack frame's start. Update use of rm_thread_exregs
according to be consistent with new interface.
ruth/
2008-12-12 Neal H. Walfield <neal@gnu.org>
Update to new RPC interfaces.
* ruth.c (main): Update use of rm_folio_alloc,
rm_folio_object_alloc, rm_thread_exregs, rm_activity_policy,
rm_activity_info. Replace use of rm_thread_wait_object_destroy
with rm_object_reply_on_destruction. Replace use of `struct
exception_info' with `struct activation_fault_info'. Fix signal
test's use of condition variables to not rely on the scheduler.
When checking deallocation code, set up a fault handler to
programmatically determine success.
|
|
* mm-init.c (mm_init): Set OUTPUT_DEBUG to 1.
|
|
2008-02-11 Neal H. Walfield <neal@gnu.org>
* mm.h (mm_init_done): New declaration.
* mm-init.c (mm_init_done): Define.
(mm_init): Assert that MM_INIT_DONE is false. Set to true just
prior to returning.
newlib/
2008-02-11 Neal H. Walfield <neal@gnu.org>
* addon/newlib/libc/sys/hurd/getreent.c (__getreent): Assert
MM_INIT_DONE.
|
|
* mm-init.c: Don't include "exceptions.h". Include
<hurd/exceptions.h>.
|
|
2007-11-19 Neal H. Walfield <neal@gnu.org>
* Makefile.am (includehurd_HEADERS): Add exceptions.h.
* headers.m4: Link $(BUILDIR)/include/hurd/exceptions.h to
exceptions.h.
* exceptions.h: New file.
viengoos/
2007-11-19 Neal H. Walfield <neal@gnu.org>
* thread.h (struct thread): Add fields have_exception and
exception.
(UTCB_AREA_SIZE): Provide space for two UTCBs.
* thread.c: Include <hurd/exceptions.h>.
(thread_create_in): For each thread that we allocate, allocate two
consecutive l4 thread ids.
(thread_commission): Initialize the main thread and the exception
thread.
(thread_decommission): Destroy both the main thread and the
exception thread.
* rm.h: Add RM_exception_collect.
(rm_method_id_string): Handle RM_exception_collect.
(exception_collect): New RPC method.
* server.c: Include <hurd/exceptions.h>.
(server_loop): If FROM is the exception thread, look up the thread
object using the main thread id. Propagate any fault to the
exception thread. If not immediately successful, save the message
in THREAD->EXCEPTION and set THREAD->HAVE_EXCEPTION. Implement
the exception_collect method.
(DEBUG): Also print the method number.
libhurd-mm/
2007-11-19 Neal H. Walfield <neal@gnu.org>
* Makefile.am (libhurd_mm_a_SOURCES): Add exceptions.h,
exceptions.c, pager.h, pager.c, anonymous.h and anonymous.c.
* headers.m4: Link $(BUILDDIR)/include/hurd/pager.h to pager.h.
Link $(BUILDDIR)/include/hurd/anonymous.h to anonymous.h.
* mm-init.c: Include "exceptions.h".
(mm_init): Call exception_handler_init.
* pager.h: Completely rewrite.
* pager.c: Likewise.
* anonymous.h: Likewise.
* anonymous.c: Likewise.
* exceptions.h: New file.
* exceptions.c: Likewise.
* mmap.c: Include <hurd/anonymous.h>.
(mmap): Rewrite to use an anonymous pager.
|
|
* Makefile.am (includehurd_HEADERS): Remove vm.h. Add storage.h
and as.h.
(AM_CPPFLAGS): Rename from this...
(COMMON_CPPFLAGS): ... to this.
(libhurd_mm_a_SOURCES): Remove vm.h, vm.c, priv.h, store.c, map.c,
memory.c, pager.c, core.c, anonymous.c, anonymous.h,
physmem-user.h and physmem-user.c. Add capalloc.h, capalloc.c,
storage.h, storage.c, as.h and mmap.c.
* headers.m4: Don't link $(BUILDDIR)/include/hurd/vm.h to vm.h or
$(BUILDDIR)/include/hurd/anonymous.h to anonymous.h. Link
$(BUILDDIR)/include/hurd/as.h to as.h,
$(BUILDDIR)/include/hurd/storage.h to storage.h, and
$(BUILDDIR)/include/hurd/capalloc.h to libhurd-mm/capalloc.h.
* mm-init.c: Rewrite.
* mm.h: Likewise.
* as.c: Likewise.
* as.h: New file.
* capalloc.h: Likewise.
* capalloc.c: Likewise.
* mmap.c: Likewise.
* storage.h: Likewise.
* storage.c: Likewise.
* physmem-user.h: Remove file.
* physmem-user.c: Remove file.
|
|
* vm.h (hurd_vm_allocate): Remove declaration.
(hurd_vm_release): Rename from hurd_vm_deallocate. Update
callers.
(VM_HERE): Remove.
(VM_ZEROFILL): Remove.
* vm.c (hurd_vm_allocate): Remove function.
(hurd_vm_release): Rename from hurd_vm_deallocate.
* mm.h: Include <stdint.h>, <sys/types.h>, <l4/types.h> and
<hurd/physmem.h>.
(hurd_store_t): New typedef.
(hurd_memory_t): Likewise.
(hurd_memory_use): New declaration.
(hurd_memory_transfer): Likewise.
(hurd_store_fault_t): New typedef.
(hurd_store_init): New declaration.
(hurd_store_size): New declaration.
(HURD_VM_HERE): New definition.
(hurd_store_bind_to_vm): New declaration.
(hurd_store_flush): New declaration.
* priv.h: Include "vm.h" and "mm.h".
(here): New debugging macro.
(struct region): Move to...
* mm.h: ...here.
(struct hurd_memory): Rename from struct frame.
Rename field dc_start to cont_start. Add field cont. Remove
field refs. Update users.
(memory_slab): Rename from frame_slab. Update users.
(memory_alloc_into): Rename from frame_alloc_into. Update users.
(frame_alloc): Move to...
* priv.h (frame_insert): Move to...
* mm.h (hurd_store_cache): ...here.
* priv.h (frame_find_first): Move to...
* mm.h (hurd_store_find_cached): ...here.
* priv.h (frame_map): Move to...
* mm.h (hurd_memory_map): ...here.
* priv.h (frame_dealloc): Move to...
* mm.h (hurd_memory_dealloc): ...here.
* priv.h (struct hurd_store): Rename from struct store. Remove
fields server and handle. Add fields hook and fault. Rename
field frames to memory. Update users.
(store_find_free): Remove declaration.
(struct map): Add field store_offset.
(default_container): Likewise.
(map_init): Likewise.
(map_free): Rename from map_dealloc. Update callers.
(map_init): New declaration.
(map_find_first): Rename from map_find. Update callers.
(as_find_free): Rename from map_find_free. Update callers.
(container_find_free): Remove declaration.
(core_slab_allocate_buffer): Rename from
mem_slab_allocate_buffer. Update users.
(core_slab_deallocate_buffer): Rename from
mem_slab_deallocate_buffer. Update users.
(frame_spare): Rename to memory_spare. Update users.
(core_store): New declaration.
* map.c (VIRTUAL_MEMORY_START): Move from here...
* priv.h: ...to here.
* map.c (as): Move from here...
* as.c: ...to here.
(map_system_init): Rename from map_init. Reserve the UTCB and the
KIP.
(memory_spare): Rename from frame_spare.
(core_slab_allocate_buffer): Rename from mem_slab_allocate_buffer.
(core_slab_deallocate_buffer): Rename from
mem_slab_deallocate_buffer.
(map_init): New function.
(map_free): Rename from map_dealloc.
(map_find): Rename from map_find_first. Avoid gratuitous
hurd_btree_map_prev.
(map_find_free): Remove function.
(store_find_free): Move from here...
* as.c (as_find_free): ...to here.
* frame.c: Move from here...
* memory.c: ...to here. Include <hurd/startup.h>.
(swap_store): Remove definition.
(memory_slab): Rename from frame_slab.
(default_container): New static global.
(dc_offset): New function.
(memory_system_init): Likewise.
(memory_alloc_into): Rename from frame_alloc_into.
(hurd_memory_new): New function. Refactored from frame_alloc.
(hurd_memory_delete): New function.
(hurd_memory_alloc): Rename from frame_alloc. Rewritten to use
hurd_memory_new.
(frame_insert): Move from here...
* store.c (hurd_store_cache): ...to here.
* memory.c (hurd_memory_use): New function.
(hurd_memory_transfer): New function.
(hurd_memory_dealloc): Rename from frame_dealloc. Don't
deallocate too eagerly: split memory which is only partially
deallocated.
(frame_find_first): Move from here...
* store.c (hurd_store_find_cached): ...to here.
* memory.c (hurd_memory_map): Rename from frame_map. Loop
mapping all of the requested if a single RPC is insufficient.
* mm-init.c (default_container): Remove definition.
(hurd_mm_init): Don't initialize DEFAULT_CONTAINER. Don't
initialize the store data structures. Call memory_system_init,
core_system_init, hurd_anonymous_init, and map_system_init. Use
core_allocate rather than hurd_vm_allocate to allocate a stack for
the pager thread.
* pager.c (pager): Don't round ADDR. Call MAP->STORE->FAULT if
the physical memory is not cached.
* physmem-user.h: Include <hurd/physmem.h>. Improve
documentation.
(hurd_pm_control_t): Remove redundant typedef.
(hurd_pm_container_t): Likewise.
(hurd_pm_container_access_t): Remove typedef.
(HURD_PM_CONT_ALLOC_PARTIAL): Remove redundant define.
(HURD_PM_CONT_ALLOC_SQUASH): Likewise.
(HURD_PM_CONT_ALLOC_EXTRA): Likewise.
(HURD_PM_CONT_ALLOC_DMA): Likewise.
(hurd_pm_container_share): Change ACCESSS from a
hurd_pm_container_access_t * to a hurd_pm_container_t *.
(hurd_pm_container_map): Rename parameter rights to flags. Add
new parameter AMOUNT. Update callers.
* physmem-user.c (container_ops): Remove redundant enumeration.
(hurd_pm_container_create): Use hurd_pm_container_create_id as the
RPC identifier.
(hurd_pm_container_share): Use hurd_pm_container_share_id as the
RPC identifier.
(hurd_pm_container_allocate): Use hurd_pm_container_allocate_id as
the RPC identifier.
(hurd_pm_container_deallocate): Use
hurd_pm_container_deallocate_id as the RPC identifier.
(hurd_pm_container_map): Use hurd_pm_container_map_id as the RPC
identifier. If AMOUNTP is non-NULL, return the number of bytes
mapped in *AMOUNTP. Remove debugging code.
(hurd_pm_container_copy): Use hurd_pm_container_copy_id as the RPC
identifier.
* anonymous.h: New file.
* anonymous.c: New file.
* as.c: New file.
* core.c: New file.
* frame.c: Remove file.
* store.c: New file.
* Makefile.am (libhurd_mm_a_SOURCES): Add as.c, store.c, memory.c,
core.c, anonymous.c and anonymous.h. Remove frame.c.
* headers.m4: Install anonymous.h as <hurd/anonymous.h>.
|
|
2005-01-11 Neal H. Walfield <neal@gnu.org>
* libhurd-mm: New directory.
* Makefile.am (SUBDIRS): Add libhurd-mm.
* configure.ac: Add include for libhurd-mm/headers.m4.
(AC_CONFIG_FILES): Add libhurd-mm/Makefile.
deva/
2005-01-11 Neal H. Walfield <neal@gnu.org>
* Makefile.am (deva_SOURCES): Remove physmem-user.h and
physmem-user.c.
(deva_LDADD): Add ../libhurd-btree/libhurd-btree.a and
../libhurd-mm/libhurd-mm.a.
* ia32-cmain.c: Include <hurd/mm.h>.
(pager_tid): New global variable.
(cmain): Allocate a thread that the memory management subsystem
can use as the pager thread. Call hurd_mm_init. Set the
PAGER_TID as the current thread's pager.
* mmap.c: Rewrite to use new interfaces.
* physmem-user.h: Remove obsolete file.
* physmem-user.c: Likewise.
libhurd-mm/
2005-01-11 Neal H. Walfield <neal@gnu.org>
* Makefile.am: Initial check in.
* README: Likewise.
* frame.c: Likewise.
* headers.m4: Likewise.
* map.c: Likewise.
* mm-init.c: Likewise.
* mm.h: Likewise.
* pager.c: Likewise.
* physmem-user.c: Likewise.
* physmem-user.h: Likewise.
* priv.h: Likewise.
* vm.c: Likewise.
* vm.h: Likewise.
physmem/
2005-01-11 Neal H. Walfield <neal@gnu.org>
* Makefile.am (physmem_SOURCES): Add frame-entry.c and frame.c
(physmem_LDADD): Add ../libhurd-btree/libhurd-btree.a.
* frame-entry.c: New file.
* frame.c: New file.
* README: Rewrite.
* container.c: Likewise.
* physmem.h: Likewise.
* physmem.c (create_bootstrap_caps): Change container_t to struct
container *.
task/
2005-01-11 Neal H. Walfield <neal@gnu.org>
* Makefile.am (task_SOURCES): Remove physmem-user.h and
physmem-user.c.
(task_LDADD): Add ../libhurd-btree/libhurd-btree.a and
../libhurd-mm/libhurd-mm.a.
* ia32-cmain.c: Include <hurd/mm.h>.
(pager_tid): New global variable.
(cmain): Allocate a thread that the memory management subsystem
can use as the pager thread. Call hurd_mm_init. Set the
PAGER_TID as the current thread's pager.
* mmap.c: Rewrite to use new interfaces.
* physmem-user.h: Remove obsolete file.
* physmem-user.c: Likewise.
wortel/
2005-01-11 Neal H. Walfield <neal@gnu.org>
* startup.c (physmem_map): Rename . . .
(allocate): . . . to this. Rewrite it.
(map): New function.
(cmain): Call map, not physmem_map.
* wortel.c (setup_components): Allocate an extra thread for the
task server.
(start_elf): Update assert.
|