Author: bonefish Date: 2011-06-12 00:32:34 +0200 (Sun, 12 Jun 2011) New Revision: 42110 Changeset: https://dev.haiku-os.org/changeset/42110 Added: haiku/branches/developer/bonefish/signals-merge/headers/private/kernel/DPC.h haiku/branches/developer/bonefish/signals-merge/headers/private/kernel/UserEvent.h haiku/branches/developer/bonefish/signals-merge/headers/private/kernel/UserTimer.h haiku/branches/developer/bonefish/signals-merge/headers/private/kernel/util/KernelReferenceable.h haiku/branches/developer/bonefish/signals-merge/headers/private/libroot/signal_private.h haiku/branches/developer/bonefish/signals-merge/headers/private/libroot/time_private.h haiku/branches/developer/bonefish/signals-merge/headers/private/libroot/times_private.h haiku/branches/developer/bonefish/signals-merge/headers/private/libroot/unistd_private.h haiku/branches/developer/bonefish/signals-merge/headers/private/system/signal_defs.h haiku/branches/developer/bonefish/signals-merge/headers/private/system/user_timer_defs.h haiku/branches/developer/bonefish/signals-merge/src/libs/posix_error_mapper/time.cpp haiku/branches/developer/bonefish/signals-merge/src/system/kernel/DPC.cpp haiku/branches/developer/bonefish/signals-merge/src/system/kernel/TeamThreadTables.h haiku/branches/developer/bonefish/signals-merge/src/system/kernel/UserEvent.cpp haiku/branches/developer/bonefish/signals-merge/src/system/kernel/UserTimer.cpp haiku/branches/developer/bonefish/signals-merge/src/system/kernel/arch/x86/x86_signals.cpp haiku/branches/developer/bonefish/signals-merge/src/system/kernel/arch/x86/x86_signals.h haiku/branches/developer/bonefish/signals-merge/src/system/kernel/arch/x86/x86_signals_asm.S haiku/branches/developer/bonefish/signals-merge/src/system/kernel/lib/kernel_lib.h haiku/branches/developer/bonefish/signals-merge/src/system/kernel/scheduler/scheduler_common.h haiku/branches/developer/bonefish/signals-merge/src/system/kernel/util/KernelReferenceable.cpp haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/pthread/pthread.cpp haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/signal/psiginfo.cpp haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/signal/psignal.cpp haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/signal/set_signal_mask.cpp haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/signal/sigaction.cpp haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/signal/signal.cpp haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/signal/signal_limits.cpp haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/signal/sigpending.cpp haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/signal/sigqueue.cpp haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/signal/sigset.cpp haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/signal/sigset_accessors.cpp haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/signal/sigsuspend.cpp haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/signal/sigtimedwait.cpp haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/signal/sigwait.cpp haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/signal/sigwaitinfo.cpp haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/signal/strsignal.cpp haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/sys/itimer.cpp haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/sys/times.cpp haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/sys/wait.cpp haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/time/clock.cpp haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/time/clock_support.cpp haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/time/timer_support.cpp haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/unistd/conf.cpp Removed: haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/signal/set_signal_disposition.cpp haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/signal/sigaction.c haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/signal/signal.c haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/signal/sigpending.c haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/signal/sigprocmask.c haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/signal/sigset.c haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/signal/sigsuspend.c haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/signal/sigwait.c haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/signal/strsignal.c haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/sys/itimer.c haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/sys/times.c haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/sys/wait.c haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/time/clock.c haiku/branches/developer/bonefish/signals-merge/src/system/libroot/posix/unistd/conf.c haiku/branches/developer/bonefish/signals-merge/src/tests/system/libroot/posix/posixtestsuite/conformance/interfaces/clock_getres/6-2.c haiku/branches/developer/bonefish/signals-merge/src/tests/system/libroot/posix/posixtestsuite/conformance/interfaces/clock_gettime/8-2.c haiku/branches/developer/bonefish/signals-merge/src/tests/system/libroot/posix/posixtestsuite/conformance/interfaces/clock_settime/17-1.c haiku/branches/developer/bonefish/signals-merge/src/tests/system/libroot/posix/posixtestsuite/conformance/interfaces/sigwait/3-1.c haiku/branches/developer/bonefish/signals-merge/src/tests/system/libroot/posix/posixtestsuite/conformance/interfaces/timer_delete/speculative/ haiku/branches/developer/bonefish/signals-merge/src/tests/system/libroot/posix/posixtestsuite/conformance/interfaces/timer_getoverrun/speculative/ haiku/branches/developer/bonefish/signals-merge/src/tests/system/libroot/posix/posixtestsuite/conformance/interfaces/timer_gettime/speculative/ haiku/branches/developer/bonefish/signals-merge/src/tests/system/libroot/posix/posixtestsuite/conformance/interfaces/timer_settime/speculative/ Modified: haiku/branches/developer/bonefish/signals-merge/ haiku/branches/developer/bonefish/signals-merge/build/jam/MainBuildRules haiku/branches/developer/bonefish/signals-merge/headers/libs/freetype2/ haiku/branches/developer/bonefish/signals-merge/headers/libs/png/png.h haiku/branches/developer/bonefish/signals-merge/headers/libs/png/pngconf.h haiku/branches/developer/bonefish/signals-merge/headers/libs/tiff/tiff.h haiku/branches/developer/bonefish/signals-merge/headers/libs/tiff/tiffio.h haiku/branches/developer/bonefish/signals-merge/headers/libs/tiff/tiffvers.h haiku/branches/developer/bonefish/signals-merge/headers/os/kernel/OS.h haiku/branches/developer/bonefish/signals-merge/headers/os/kernel/debugger.h haiku/branches/developer/bonefish/signals-merge/headers/posix/arch/x86/signal.h haiku/branches/developer/bonefish/signals-merge/headers/posix/limits.h haiku/branches/developer/bonefish/signals-merge/headers/posix/pthread.h haiku/branches/developer/bonefish/signals-merge/headers/posix/setjmp.h haiku/branches/developer/bonefish/signals-merge/headers/posix/signal.h haiku/branches/developer/bonefish/signals-merge/headers/posix/sys/types.h haiku/branches/developer/bonefish/signals-merge/headers/posix/sys/wait.h haiku/branches/developer/bonefish/signals-merge/headers/posix/time.h haiku/branches/developer/bonefish/signals-merge/headers/posix/unistd.h haiku/branches/developer/bonefish/signals-merge/headers/private/kernel/arch/thread.h haiku/branches/developer/bonefish/signals-merge/headers/private/kernel/arch/x86/arch_cpu.h haiku/branches/developer/bonefish/signals-merge/headers/private/kernel/arch/x86/arch_thread.h haiku/branches/developer/bonefish/signals-merge/headers/private/kernel/condition_variable.h haiku/branches/developer/bonefish/signals-merge/headers/private/kernel/cpu.h haiku/branches/developer/bonefish/signals-merge/headers/private/kernel/elf.h haiku/branches/developer/bonefish/signals-merge/headers/private/kernel/kscheduler.h haiku/branches/developer/bonefish/signals-merge/headers/private/kernel/ksignal.h haiku/branches/developer/bonefish/signals-merge/headers/private/kernel/lock.h haiku/branches/developer/bonefish/signals-merge/headers/private/kernel/real_time_clock.h haiku/branches/developer/bonefish/signals-merge/headers/private/kernel/team.h haiku/branches/developer/bonefish/signals-merge/headers/private/kernel/thread.h haiku/branches/developer/bonefish/signals-merge/headers/private/kernel/thread_types.h haiku/branches/developer/bonefish/signals-merge/headers/private/kernel/timer.h haiku/branches/developer/bonefish/signals-merge/headers/private/kernel/user_debugger.h haiku/branches/developer/bonefish/signals-merge/headers/private/kernel/usergroup.h haiku/branches/developer/bonefish/signals-merge/headers/private/kernel/util/AutoLock.h haiku/branches/developer/bonefish/signals-merge/headers/private/libroot/libroot_private.h haiku/branches/developer/bonefish/signals-merge/headers/private/libroot/pthread_private.h haiku/branches/developer/bonefish/signals-merge/headers/private/shared/syscall_utils.h haiku/branches/developer/bonefish/signals-merge/headers/private/system/arch/x86/arch_commpage_defs.h haiku/branches/developer/bonefish/signals-merge/headers/private/system/syscalls.h haiku/branches/developer/bonefish/signals-merge/headers/private/system/thread_defs.h haiku/branches/developer/bonefish/signals-merge/headers/private/system/tls.h haiku/branches/developer/bonefish/signals-merge/headers/private/system/user_thread_defs.h haiku/branches/developer/bonefish/signals-merge/src/add-ons/kernel/bus_managers/acpi/ haiku/branches/developer/bonefish/signals-merge/src/add-ons/kernel/debugger/invalidate_on_exit/invalidate_on_exit.cpp haiku/branches/developer/bonefish/signals-merge/src/add-ons/kernel/debugger/run_on_exit/run_on_exit.cpp haiku/branches/developer/bonefish/signals-merge/src/add-ons/kernel/drivers/network/ipro100/dev/ haiku/branches/developer/bonefish/signals-merge/src/add-ons/kernel/drivers/network/wlan/aironetwifi/dev/an/ haiku/branches/developer/bonefish/signals-merge/src/add-ons/kernel/drivers/network/wlan/atheroswifi/dev/ath/ haiku/branches/developer/bonefish/signals-merge/src/add-ons/kernel/drivers/network/wlan/broadcom43xx/dev/bwi/ haiku/branches/developer/bonefish/signals-merge/src/add-ons/kernel/drivers/network/wlan/iprowifi2200/dev/iwi/ haiku/branches/developer/bonefish/signals-merge/src/add-ons/kernel/drivers/network/wlan/iprowifi3945/dev/wpi/ haiku/branches/developer/bonefish/signals-merge/src/add-ons/kernel/drivers/network/wlan/iprowifi4965/dev/iwn/ haiku/branches/developer/bonefish/signals-merge/src/add-ons/kernel/drivers/network/wlan/marvell88w8335/dev/malo/ haiku/branches/developer/bonefish/signals-merge/src/add-ons/kernel/drivers/network/wlan/marvell88w8363/dev/mwl/ haiku/branches/developer/bonefish/signals-merge/src/add-ons/kernel/drivers/network/wlan/ralinkwifi/dev/ral/ haiku/branches/developer/bonefish/signals-merge/src/add-ons/kernel/drivers/network/wlan/wavelanwifi/dev/wi/ haiku/branches/developer/bonefish/signals-merge/src/add-ons/media/plugins/ffmpeg/ haiku/branches/developer/bonefish/signals-merge/src/apps/terminal/TermApp.cpp haiku/branches/developer/bonefish/signals-merge/src/bin/debug/profile/profile.cpp haiku/branches/developer/bonefish/signals-merge/src/bin/debug/scheduling_recorder/scheduling_recorder.cpp haiku/branches/developer/bonefish/signals-merge/src/bin/debug/strace/MemoryReader.cpp haiku/branches/developer/bonefish/signals-merge/src/bin/debug/strace/MemoryReader.h haiku/branches/developer/bonefish/signals-merge/src/bin/debug/strace/strace.cpp haiku/branches/developer/bonefish/signals-merge/src/bin/gdb/libiberty/config.h haiku/branches/developer/bonefish/signals-merge/src/build/libbe/storage/mime/ haiku/branches/developer/bonefish/signals-merge/src/kits/network/socket.cpp haiku/branches/developer/bonefish/signals-merge/src/libs/compat/freebsd_wlan/net80211/ haiku/branches/developer/bonefish/signals-merge/src/libs/compat/freebsd_wlan/net80211/ieee80211_node.c haiku/branches/developer/bonefish/signals-merge/src/libs/compat/freebsd_wlan/net80211/ieee80211_node.h haiku/branches/developer/bonefish/signals-merge/src/libs/freetype2/ haiku/branches/developer/bonefish/signals-merge/src/libs/png/ haiku/branches/developer/bonefish/signals-merge/src/libs/posix_error_mapper/Jamfile haiku/branches/developer/bonefish/signals-merge/src/libs/posix_error_mapper/pthread_thread.cpp haiku/branches/developer/bonefish/signals-merge/src/libs/posix_error_mapper/signal.cpp haiku/branches/developer/bonefish/signals-merge/src/libs/tiff/ haiku/branches/developer/bonefish/signals-merge/src/system/kernel/Jamfile haiku/branches/developer/bonefish/signals-merge/src/system/kernel/arch/arm/arch_thread.cpp haiku/branches/developer/bonefish/signals-merge/src/system/kernel/arch/m68k/arch_debug.cpp haiku/branches/developer/bonefish/signals-merge/src/system/kernel/arch/m68k/arch_int.cpp haiku/branches/developer/bonefish/signals-merge/src/system/kernel/arch/m68k/arch_thread.cpp haiku/branches/developer/bonefish/signals-merge/src/system/kernel/arch/mipsel/arch_thread.cpp haiku/branches/developer/bonefish/signals-merge/src/system/kernel/arch/ppc/arch_debug.cpp haiku/branches/developer/bonefish/signals-merge/src/system/kernel/arch/ppc/arch_int.cpp haiku/branches/developer/bonefish/signals-merge/src/system/kernel/arch/ppc/arch_thread.cpp haiku/branches/developer/bonefish/signals-merge/src/system/kernel/arch/x86/Jamfile haiku/branches/developer/bonefish/signals-merge/src/system/kernel/arch/x86/arch_commpage.cpp haiku/branches/developer/bonefish/signals-merge/src/system/kernel/arch/x86/arch_debug.cpp haiku/branches/developer/bonefish/signals-merge/src/system/kernel/arch/x86/arch_int.cpp haiku/branches/developer/bonefish/signals-merge/src/system/kernel/arch/x86/arch_interrupts.S haiku/branches/developer/bonefish/signals-merge/src/system/kernel/arch/x86/arch_thread.cpp haiku/branches/developer/bonefish/signals-merge/src/system/kernel/arch/x86/arch_user_debugger.cpp haiku/branches/developer/bonefish/signals-merge/src/system/kernel/arch/x86/arch_x86.S haiku/branches/developer/bonefish/signals-merge/src/system/kernel/arch/x86/asm_offsets.cpp haiku/branches/developer/bonefish/signals-merge/src/system/kernel/arch/x86/x86_syscalls.cpp haiku/branches/developer/bonefish/signals-merge/src/system/kernel/arch/x86/x86_syscalls.h haiku/branches/developer/bonefish/signals-merge/src/system/kernel/condition_variable.cpp haiku/branches/developer/bonefish/signals-merge/src/system/kernel/cpu.cpp haiku/branches/developer/bonefish/signals-merge/src/system/kernel/debug/debug_heap.cpp [... truncated: 87 changed files follow ...] Log: Merged signals branch. Ignoring tree conflict of src/system/libroot/posix/pthread/pthread.c caused by r40665. Property changes on: haiku/branches/developer/bonefish/signals-merge ___________________________________________________________________ Modified: svn:mergeinfo - /haiku/branches/developer/bonefish/signals:40148-40195 /haiku/branches/developer/bonefish/weak-symbols:39365-39568 + /haiku/branches/developer/bonefish/signals:40148-40195,40198-42104 /haiku/branches/developer/bonefish/weak-symbols:39365-39568 Modified: haiku/branches/developer/bonefish/signals-merge/build/jam/MainBuildRules =================================================================== --- haiku/branches/developer/bonefish/signals-merge/build/jam/MainBuildRules 2011-06-11 22:27:25 UTC (rev 42109) +++ haiku/branches/developer/bonefish/signals-merge/build/jam/MainBuildRules 2011-06-11 22:32:34 UTC (rev 42110) @@ -314,6 +314,11 @@ } } + # Turn off "invalid use of offsetof()" macro warning. We use offsetof() also + # for non-PODs. Since we're using the same compiler for the whole kernel and + # don't do virtual inheritence, that works well enough. + flags += -Wno-invalid-offsetof ; + # locate object, search for source, and set on target variables Depends $(header) : $(source) ; Property changes on: haiku/branches/developer/bonefish/signals-merge/headers/libs/freetype2 ___________________________________________________________________ Modified: svn:mergeinfo - /haiku/branches/developer/bonefish/signals/headers/libs/freetype2:40148-40195 /haiku/vendor/freetype2/2.4.4/include:40532 /haiku/vendor/freetype2/current/include:37946-40531 + /haiku/branches/developer/bonefish/signals/headers/libs/freetype2:40148-40195,40198-42104 /haiku/vendor/freetype2/2.4.4/include:40532 /haiku/vendor/freetype2/current/include:37946-40531 Property changes on: haiku/branches/developer/bonefish/signals-merge/headers/libs/png/png.h ___________________________________________________________________ Modified: svn:mergeinfo - /haiku/branches/developer/bonefish/signals/headers/libs/png/png.h:40148-40195 /haiku/branches/developer/bonefish/weak-symbols/headers/libs/png/png.h:39365-39568 /haiku/vendor/libpng/1.4.4/png.h:39522 /haiku/vendor/libpng/current/png.h:35840-39521 + /haiku/branches/developer/bonefish/signals/headers/libs/png/png.h:40148-40195,40198-42104 /haiku/branches/developer/bonefish/weak-symbols/headers/libs/png/png.h:39365-39568 /haiku/vendor/libpng/1.4.4/png.h:39522 /haiku/vendor/libpng/current/png.h:35840-39521 Property changes on: haiku/branches/developer/bonefish/signals-merge/headers/libs/png/pngconf.h ___________________________________________________________________ Modified: svn:mergeinfo - /haiku/branches/developer/bonefish/signals/headers/libs/png/pngconf.h:40148-40195 /haiku/branches/developer/bonefish/weak-symbols/headers/libs/png/pngconf.h:39365-39568 /haiku/vendor/libpng/1.4.4/pngconf.h:39522 /haiku/vendor/libpng/current/pngconf.h:35840-39521 + /haiku/branches/developer/bonefish/signals/headers/libs/png/pngconf.h:40148-40195,40198-42104 /haiku/branches/developer/bonefish/weak-symbols/headers/libs/png/pngconf.h:39365-39568 /haiku/vendor/libpng/1.4.4/pngconf.h:39522 /haiku/vendor/libpng/current/pngconf.h:35840-39521 Property changes on: haiku/branches/developer/bonefish/signals-merge/headers/libs/tiff/tiff.h ___________________________________________________________________ Modified: svn:mergeinfo - /haiku/branches/developer/bonefish/signals/headers/libs/tiff/tiff.h:40148-40195 /haiku/branches/developer/bonefish/weak-symbols/headers/libs/tiff/tiff.h:39365-39568 /haiku/vendor/libtiff/3.9.4/libtiff/tiff.h:38702 /haiku/vendor/libtiff/current/libtiff/tiff.h:38700-38701 + /haiku/branches/developer/bonefish/signals/headers/libs/tiff/tiff.h:40148-40195,40198-42104 /haiku/branches/developer/bonefish/weak-symbols/headers/libs/tiff/tiff.h:39365-39568 /haiku/vendor/libtiff/3.9.4/libtiff/tiff.h:38702 /haiku/vendor/libtiff/current/libtiff/tiff.h:38700-38701 Property changes on: haiku/branches/developer/bonefish/signals-merge/headers/libs/tiff/tiffio.h ___________________________________________________________________ Modified: svn:mergeinfo - /haiku/branches/developer/bonefish/signals/headers/libs/tiff/tiffio.h:40148-40195 /haiku/branches/developer/bonefish/weak-symbols/headers/libs/tiff/tiffio.h:39365-39568 /haiku/vendor/libtiff/3.9.4/libtiff/tiffio.h:38702 /haiku/vendor/libtiff/current/libtiff/tiffio.h:38700-38701 + /haiku/branches/developer/bonefish/signals/headers/libs/tiff/tiffio.h:40148-40195,40198-42104 /haiku/branches/developer/bonefish/weak-symbols/headers/libs/tiff/tiffio.h:39365-39568 /haiku/vendor/libtiff/3.9.4/libtiff/tiffio.h:38702 /haiku/vendor/libtiff/current/libtiff/tiffio.h:38700-38701 Property changes on: haiku/branches/developer/bonefish/signals-merge/headers/libs/tiff/tiffvers.h ___________________________________________________________________ Modified: svn:mergeinfo - /haiku/branches/developer/bonefish/signals/headers/libs/tiff/tiffvers.h:40148-40195 /haiku/branches/developer/bonefish/weak-symbols/headers/libs/tiff/tiffvers.h:39365-39568 /haiku/vendor/libtiff/3.9.4/libtiff/tiffvers.h:38702 /haiku/vendor/libtiff/current/libtiff/tiffvers.h:38700-38701 + /haiku/branches/developer/bonefish/signals/headers/libs/tiff/tiffvers.h:40148-40195,40198-42104 /haiku/branches/developer/bonefish/weak-symbols/headers/libs/tiff/tiffvers.h:39365-39568 /haiku/vendor/libtiff/3.9.4/libtiff/tiffvers.h:38702 /haiku/vendor/libtiff/current/libtiff/tiffvers.h:38700-38701 Modified: haiku/branches/developer/bonefish/signals-merge/headers/os/kernel/OS.h =================================================================== --- haiku/branches/developer/bonefish/signals-merge/headers/os/kernel/OS.h 2011-06-11 22:27:25 UTC (rev 42109) +++ haiku/branches/developer/bonefish/signals-merge/headers/os/kernel/OS.h 2011-06-11 22:32:34 UTC (rev 42110) @@ -311,6 +311,8 @@ #define B_REAL_TIME_PRIORITY 120 #define B_SYSTEM_TIMEBASE 0 + /* time base for snooze_*(), compatible with the clockid_t constants defined + in <time.h> */ #define B_FIRST_REAL_TIME_PRIORITY B_REAL_TIME_DISPLAY_PRIORITY @@ -739,6 +741,11 @@ extern double is_computer_on_fire(void); +/* signal related functions */ +int send_signal(thread_id threadID, unsigned int signal); +void set_signal_stack(void* base, size_t size); + + /* WARNING: Experimental API! */ enum { Modified: haiku/branches/developer/bonefish/signals-merge/headers/os/kernel/debugger.h =================================================================== --- haiku/branches/developer/bonefish/signals-merge/headers/os/kernel/debugger.h 2011-06-11 22:27:25 UTC (rev 42109) +++ haiku/branches/developer/bonefish/signals-merge/headers/os/kernel/debugger.h 2011-06-11 22:32:34 UTC (rev 42110) @@ -151,7 +151,7 @@ B_DEBUG_MESSAGE_CLEAR_WATCHPOINT, // clear a watchpoint B_DEBUG_MESSAGE_SET_SIGNAL_MASKS, // set/get a thread's masks of signals B_DEBUG_MESSAGE_GET_SIGNAL_MASKS, // the debugger is interested in - B_DEBUG_MESSAGE_SET_SIGNAL_HANDLER, // set/get a thread's signal handler for + B_DEBUG_MESSAGE_SET_SIGNAL_HANDLER, // set/get the team's signal handler for B_DEBUG_MESSAGE_GET_SIGNAL_HANDLER, // a signal B_DEBUG_MESSAGE_PREPARE_HANDOVER, // prepares the debugged team for being @@ -356,7 +356,6 @@ // B_DEBUG_MESSAGE_SET_SIGNAL_HANDLER typedef struct { - thread_id thread; // the thread int signal; // the signal struct sigaction handler; // the new signal handler } debug_nub_set_signal_handler; @@ -365,7 +364,6 @@ typedef struct { port_id reply_port; // port to send the reply to - thread_id thread; // the thread int signal; // the signal } debug_nub_get_signal_handler; Modified: haiku/branches/developer/bonefish/signals-merge/headers/posix/arch/x86/signal.h =================================================================== --- haiku/branches/developer/bonefish/signals-merge/headers/posix/arch/x86/signal.h 2011-06-11 22:27:25 UTC (rev 42109) +++ haiku/branches/developer/bonefish/signals-merge/headers/posix/arch/x86/signal.h 2011-06-11 22:32:34 UTC (rev 42110) @@ -90,7 +90,7 @@ unsigned char mm7[10]; unsigned char _reserved_154_159[6]; } mmx_regs; - + typedef struct xmmx_regs { unsigned char xmm0[16]; unsigned char xmm1[16]; @@ -105,7 +105,7 @@ typedef struct new_extended_regs { unsigned short fp_control; unsigned short fp_status; - unsigned short fp_tag; + unsigned short fp_tag; unsigned short fp_opcode; unsigned long fp_eip; unsigned short fp_cs; @@ -128,7 +128,7 @@ old_extended_regs old_format; new_extended_regs new_format; } state; - unsigned long format; + unsigned long format; } extended_regs; struct vregs { @@ -141,9 +141,11 @@ unsigned long ebp; unsigned long _reserved_1; extended_regs xregs; - unsigned long _reserved_2[3]; + unsigned long edi; + unsigned long esi; + unsigned long ebx; }; - + #endif /* __INTEL__ */ #endif /* _ARCH_SIGNAL_H_ */ Modified: haiku/branches/developer/bonefish/signals-merge/headers/posix/limits.h =================================================================== --- haiku/branches/developer/bonefish/signals-merge/headers/posix/limits.h 2011-06-11 22:27:25 UTC (rev 42109) +++ haiku/branches/developer/bonefish/signals-merge/headers/posix/limits.h 2011-06-11 22:32:34 UTC (rev 42110) @@ -71,6 +71,12 @@ #define _POSIX_STREAM_MAX (8) #define _POSIX_TTY_NAME_MAX (256) #define _POSIX_TZNAME_MAX (3) +#define _POSIX_SEM_VALUE_MAX INT_MAX +#define _POSIX_SIGQUEUE_MAX 32 +#define _POSIX_RTSIG_MAX 8 +#define _POSIX_CLOCKRES_MIN 20000000 +#define _POSIX_TIMER_MAX 32 +#define _POSIX_DELAYTIMER_MAX 32 #define _POSIX2_LINE_MAX (2048) Modified: haiku/branches/developer/bonefish/signals-merge/headers/posix/pthread.h =================================================================== --- haiku/branches/developer/bonefish/signals-merge/headers/posix/pthread.h 2011-06-11 22:27:25 UTC (rev 42109) +++ haiku/branches/developer/bonefish/signals-merge/headers/posix/pthread.h 2011-06-11 22:32:34 UTC (rev 42110) @@ -1,5 +1,5 @@ /* - * Copyright 2001-2010 Haiku Inc. All Rights Reserved. + * Copyright 2001-2011 Haiku, Inc. All Rights Reserved. * Distributed under the terms of the Haiku License. */ #ifndef _PTHREAD_H_ @@ -8,66 +8,10 @@ #include <sched.h> #include <stdint.h> +#include <sys/types.h> #include <time.h> -typedef struct _pthread_thread *pthread_t; -typedef struct _pthread_attr *pthread_attr_t; -typedef struct _pthread_mutex pthread_mutex_t; -typedef struct _pthread_mutexattr *pthread_mutexattr_t; -typedef struct _pthread_cond pthread_cond_t; -typedef struct _pthread_condattr *pthread_condattr_t; -typedef int pthread_key_t; -typedef struct _pthread_once pthread_once_t; -typedef struct _pthread_rwlock pthread_rwlock_t; -typedef struct _pthread_rwlockattr *pthread_rwlockattr_t; -typedef struct _pthread_spinlock pthread_spinlock_t; -/* -typedef struct _pthread_barrier *pthread_barrier_t; -typedef struct _pthread_barrierattr *pthread_barrierattr_t; -*/ - -struct _pthread_mutex { - uint32_t flags; - int32_t lock; - int32_t unused; - int32_t owner; - int32_t owner_count; -}; - -struct _pthread_cond { - uint32_t flags; - int32_t unused; - pthread_mutex_t *mutex; - int32_t waiter_count; - int32_t lock; -}; - -struct _pthread_once { - int32_t state; -}; - -struct _pthread_rwlock { - uint32_t flags; - int32_t owner; - union { - struct { - int32_t sem; - } shared; - struct { - int32_t lock_sem; - int32_t lock_count; - int32_t reader_count; - int32_t writer_count; - void* waiters[2]; - } local; - }; -}; - -struct _pthread_spinlock { - int32_t lock; -}; - #define PTHREAD_MUTEX_DEFAULT 0 #define PTHREAD_MUTEX_NORMAL 1 #define PTHREAD_MUTEX_ERRORCHECK 2 @@ -278,7 +222,6 @@ extern void pthread_exit(void *value_ptr); extern int pthread_join(pthread_t thread, void **_value); extern pthread_t pthread_self(void); -extern int pthread_kill(pthread_t thread, int sig); extern int pthread_getconcurrency(void); extern int pthread_setconcurrency(int newLevel); Modified: haiku/branches/developer/bonefish/signals-merge/headers/posix/setjmp.h =================================================================== --- haiku/branches/developer/bonefish/signals-merge/headers/posix/setjmp.h 2011-06-11 22:27:25 UTC (rev 42109) +++ haiku/branches/developer/bonefish/signals-merge/headers/posix/setjmp.h 2011-06-11 22:32:34 UTC (rev 42110) @@ -15,8 +15,7 @@ typedef struct __jmp_buf_tag { __jmp_buf regs; /* saved registers, stack & program pointer */ - int mask_was_saved; - sigset_t saved_mask; + sigset_t inverted_signal_mask; } jmp_buf[1]; typedef jmp_buf sigjmp_buf; Modified: haiku/branches/developer/bonefish/signals-merge/headers/posix/signal.h =================================================================== --- haiku/branches/developer/bonefish/signals-merge/headers/posix/signal.h 2011-06-11 22:27:25 UTC (rev 42109) +++ haiku/branches/developer/bonefish/signals-merge/headers/posix/signal.h 2011-06-11 22:32:34 UTC (rev 42110) @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 Haiku Inc. All Rights Reserved. + * Copyright 2002-2011, Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. */ #ifndef _SIGNAL_H_ @@ -10,48 +10,73 @@ typedef int sig_atomic_t; -typedef __haiku_int32 sigset_t; +typedef __haiku_uint64 sigset_t; -typedef void (*sighandler_t)(int); - /* GNU-like signal handler typedef */ -typedef void (*__signal_func_ptr)(int); - /* deprecated, for compatibility with BeOS only */ +/* macros defining the standard signal handling behavior */ +#define SIG_DFL ((__sighandler_t)0) /* "default" signal behaviour */ +#define SIG_IGN ((__sighandler_t)1) /* ignore signal */ +#define SIG_ERR ((__sighandler_t)-1) /* an error occurred during signal + processing */ +#define SIG_HOLD ((__sighandler_t)3) /* the signal was hold */ +/* macros specifying the event notification type (sigevent::sigev_notify) */ +#define SIGEV_NONE 0 /* no notification */ +#define SIGEV_SIGNAL 1 /* notify via queued signal */ +#define SIGEV_THREAD 2 /* notify via function called in new thread */ -/* macros defining the standard signal handling behavior */ -#define SIG_DFL ((sighandler_t)0) /* "default" signal behaviour */ -#define SIG_IGN ((sighandler_t)1) /* ignore signal */ -#define SIG_ERR ((sighandler_t)-1) /* an error occurred during signal processing */ -#define SIG_HOLD ((sighandler_t)3) /* the signal was hold */ -/* TODO: Support this structure, or more precisely the SA_SIGINFO flag. To do - * this properly we need real-time signal support. Both are commented out for - * the time being to not make "configure" scripts think we do support them. */ -#if 0 -typedef struct { - int si_signo; /* signal number */ - int si_code; /* signal code */ - int si_errno; /* if non zero, an error number associated with this signal */ - pid_t si_pid; /* sending process ID */ - uid_t si_uid; /* real user ID of sending process */ - void *si_addr; /* address of faulting instruction */ - int si_status; /* exit value or signal */ - long si_band; /* band event for SIGPOLL */ +union sigval { + int sival_int; + void* sival_ptr; +}; + +struct sigevent { + int sigev_notify; /* notification type */ + int sigev_signo; /* signal number */ + union sigval sigev_value; /* user-defined signal value */ + void (*sigev_notify_function)(union sigval); + /* notification function in case of + SIGEV_THREAD */ + pthread_attr_t* sigev_notify_attributes; + /* pthread creation attributes in case of + SIGEV_THREAD */ +}; + +typedef struct __siginfo_t { + int si_signo; /* signal number */ + int si_code; /* signal code */ + int si_errno; /* if non zero, an error number associated with + this signal */ + pid_t si_pid; /* sending process ID */ + uid_t si_uid; /* real user ID of sending process */ + void* si_addr; /* address of faulting instruction */ + int si_status; /* exit value or signal */ + long si_band; /* band event for SIGPOLL */ + union sigval si_value; /* signal value */ } siginfo_t; -#endif /* 0 */ -/* - * structure used by sigaction() - * - * Note: the 'sa_userdata' field is a non-POSIX extension. - * See the documentation for more info on this. - */ + +/* signal handler function types */ +typedef void (*__sighandler_t)(int); +typedef void (*__siginfo_handler_t)(int, siginfo_t*, void*); + +#ifdef __USE_GNU +typedef __sighandler_t sighandler_t; + /* GNU-like signal handler typedef */ +#endif + + +/* structure used by sigaction() */ struct sigaction { - sighandler_t sa_handler; - sigset_t sa_mask; - int sa_flags; - void *sa_userdata; /* will be passed to the signal handler */ + union { + __sighandler_t sa_handler; + __siginfo_handler_t sa_sigaction; + }; + sigset_t sa_mask; + int sa_flags; + void* sa_userdata; /* will be passed to the signal + handler, BeOS extension */ }; /* values for sa_flags */ @@ -61,7 +86,7 @@ #define SA_NODEFER 0x08 #define SA_RESTART 0x10 #define SA_ONSTACK 0x20 -/* #define SA_SIGINFO 0x40 */ +#define SA_SIGINFO 0x40 #define SA_NOMASK SA_NODEFER #define SA_STACK SA_ONSTACK #define SA_ONESHOT SA_RESETHAND @@ -73,20 +98,13 @@ #define MINSIGSTKSZ 4096 #define SIGSTKSZ 16384 -/* - * for signals using an alternate stack - */ +/* for signals using an alternate stack */ typedef struct stack_t { - void *ss_sp; + void* ss_sp; size_t ss_size; int ss_flags; } stack_t; -typedef struct sigstack { - int ss_onstack; - void *ss_sp; -} sigstack; - /* for the 'how' arg of sigprocmask() */ #define SIG_BLOCK 1 #define SIG_UNBLOCK 2 @@ -99,91 +117,166 @@ * some consistency with UN*X conventions so that things * like "kill -9" do what you expect. */ -#define SIGHUP 1 /* hangup -- tty is gone! */ -#define SIGINT 2 /* interrupt */ -#define SIGQUIT 3 /* `quit' special character typed in tty */ -#define SIGILL 4 /* illegal instruction */ -#define SIGCHLD 5 /* child process exited */ -#define SIGABRT 6 /* abort() called, dont' catch */ -#define SIGPIPE 7 /* write to a pipe w/no readers */ -#define SIGFPE 8 /* floating point exception */ -#define SIGKILL 9 /* kill a team (not catchable) */ -#define SIGSTOP 10 /* suspend a thread (not catchable) */ -#define SIGSEGV 11 /* segmentation violation (read: invalid pointer) */ -#define SIGCONT 12 /* continue execution if suspended */ -#define SIGTSTP 13 /* `stop' special character typed in tty */ -#define SIGALRM 14 /* an alarm has gone off (see alarm()) */ -#define SIGTERM 15 /* termination requested */ -#define SIGTTIN 16 /* read of tty from bg process */ -#define SIGTTOU 17 /* write to tty from bg process */ -#define SIGUSR1 18 /* app defined signal 1 */ -#define SIGUSR2 19 /* app defined signal 2 */ -#define SIGWINCH 20 /* tty window size changed */ -#define SIGKILLTHR 21 /* be specific: kill just the thread, not team */ -#define SIGTRAP 22 /* Trace/breakpoint trap */ -#define SIGPOLL 23 /* Pollable event */ -#define SIGPROF 24 /* Profiling timer expired */ -#define SIGSYS 25 /* Bad system call */ -#define SIGURG 26 /* High bandwidth data is available at socket */ -#define SIGVTALRM 27 /* Virtual timer expired */ -#define SIGXCPU 28 /* CPU time limit exceeded */ -#define SIGXFSZ 29 /* File size limit exceeded */ +#define SIGHUP 1 /* hangup -- tty is gone! */ +#define SIGINT 2 /* interrupt */ +#define SIGQUIT 3 /* `quit' special character typed in tty */ +#define SIGILL 4 /* illegal instruction */ +#define SIGCHLD 5 /* child process exited */ +#define SIGABRT 6 /* abort() called, dont' catch */ +#define SIGPIPE 7 /* write to a pipe w/no readers */ +#define SIGFPE 8 /* floating point exception */ +#define SIGKILL 9 /* kill a team (not catchable) */ +#define SIGSTOP 10 /* suspend a thread (not catchable) */ +#define SIGSEGV 11 /* segmentation violation (read: invalid pointer) */ +#define SIGCONT 12 /* continue execution if suspended */ +#define SIGTSTP 13 /* `stop' special character typed in tty */ +#define SIGALRM 14 /* an alarm has gone off (see alarm()) */ +#define SIGTERM 15 /* termination requested */ +#define SIGTTIN 16 /* read of tty from bg process */ +#define SIGTTOU 17 /* write to tty from bg process */ +#define SIGUSR1 18 /* app defined signal 1 */ +#define SIGUSR2 19 /* app defined signal 2 */ +#define SIGWINCH 20 /* tty window size changed */ +#define SIGKILLTHR 21 /* be specific: kill just the thread, not team */ +#define SIGTRAP 22 /* Trace/breakpoint trap */ +#define SIGPOLL 23 /* Pollable event */ +#define SIGPROF 24 /* Profiling timer expired */ +#define SIGSYS 25 /* Bad system call */ +#define SIGURG 26 /* High bandwidth data is available at socket */ +#define SIGVTALRM 27 /* Virtual timer expired */ +#define SIGXCPU 28 /* CPU time limit exceeded */ +#define SIGXFSZ 29 /* File size limit exceeded */ +#define SIGBUS 30 /* access to undefined portion of a memory object */ +#define SIGRESERVED1 31 /* reserved for future use */ +#define SIGRESERVED2 32 /* reserved for future use */ -#define SIGBUS SIGSEGV /* for old style code */ +#define SIGRTMIN (__signal_get_sigrtmin()) + /* lowest realtime signal number */ +#define SIGRTMAX (__signal_get_sigrtmax()) + /* greatest realtime signal number */ -/* - * Signal numbers 30-32 are currently free but may be used in future - * releases. Use them at your own peril (if you do use them, at least - * be smart and use them backwards from signal 32). - */ -#define MAX_SIGNO 32 /* the most signals that a single thread can reference */ -#define __signal_max 29 /* the largest signal number that is actually defined */ -#define NSIG (__signal_max+1) - /* the number of defined signals */ +#define __MAX_SIGNO 64 /* greatest possible signal number, can be used (+1) + as size of static arrays */ +#define NSIG (__MAX_SIGNO + 1) + /* BSD extension, size of the sys_siglist table, + obsolete */ +/* Signal code values appropriate for siginfo_t::si_code: */ +/* any signal */ +#define SI_USER 0 /* signal sent by user */ +#define SI_QUEUE 1 /* signal sent by sigqueue() */ +#define SI_TIMER 2 /* signal sent on timer_settime() timeout */ +#define SI_ASYNCIO 3 /* signal sent on asynchronous I/O completion */ +#define SI_MESGQ 4 /* signal sent on arrival of message on empty + message queue */ +/* SIGILL */ +#define ILL_ILLOPC 10 /* illegal opcode */ +#define ILL_ILLOPN 11 /* illegal operand */ +#define ILL_ILLADR 12 /* illegal addressing mode */ +#define ILL_ILLTRP 13 /* illegal trap */ +#define ILL_PRVOPC 14 /* privileged opcode */ +#define ILL_PRVREG 15 /* privileged register */ +#define ILL_COPROC 16 /* coprocessor error */ +#define ILL_BADSTK 17 /* internal stack error */ +/* SIGFPE */ +#define FPE_INTDIV 20 /* integer division by zero */ +#define FPE_INTOVF 21 /* integer overflow */ +#define FPE_FLTDIV 22 /* floating-point division by zero */ +#define FPE_FLTOVF 23 /* floating-point overflow */ +#define FPE_FLTUND 24 /* floating-point underflow */ +#define FPE_FLTRES 25 /* floating-point inexact result */ +#define FPE_FLTINV 26 /* invalid floating-point operation */ +#define FPE_FLTSUB 27 /* subscript out of range */ +/* SIGSEGV */ +#define SEGV_MAPERR 30 /* address not mapped to object */ +#define SEGV_ACCERR 31 /* invalid permissions for mapped object */ +/* SIGBUS */ +#define BUS_ADRALN 40 /* invalid address alignment */ +#define BUS_ADRERR 41 /* nonexistent physical address */ +#define BUS_OBJERR 42 /* object-specific hardware error */ +/* SIGTRAP */ +#define TRAP_BRKPT 50 /* process breakpoint */ +#define TRAP_TRACE 51 /* process trace trap. */ +/* SIGCHLD */ +#define CLD_EXITED 60 /* child exited */ +#define CLD_KILLED 61 /* child terminated abnormally without core dump */ +#define CLD_DUMPED 62 /* child terminated abnormally with core dump */ +#define CLD_TRAPPED 63 /* traced child trapped */ +#define CLD_STOPPED 64 /* child stopped */ +#define CLD_CONTINUED 65 /* stopped child continued */ +/* SIGPOLL */ +#define POLL_IN 70 /* input available */ +#define POLL_OUT 71 /* output available */ +#define POLL_MSG 72 /* input message available */ +#define POLL_ERR 73 /* I/O error */ +#define POLL_PRI 74 /* high priority input available */ +#define POLL_HUP 75 /* device disconnected */ + + /* the global table of text strings containing descriptions for each signal */ -extern const char * const sys_siglist[NSIG]; +extern const char* const sys_siglist[NSIG]; + /* BSD extension, obsolete, use strsignal() instead */ #ifdef __cplusplus extern "C" { #endif -sighandler_t signal(int sig, sighandler_t signalHandler); -sighandler_t sigset(int sig, sighandler_t signalHandler); -int raise(int sig); -int kill(pid_t pid, int sig); -int send_signal(pid_t tid, unsigned int sig); -int killpg(pid_t processGroupID, int sig); -int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); -int siginterrupt(int sig, int flag); -int sigprocmask(int how, const sigset_t *set, sigset_t *oset); -int sigpending(sigset_t *set); -int sigsuspend(const sigset_t *mask); -int sigwait(const sigset_t *set, int *sig); +/* signal management (actions and block masks) */ +__sighandler_t signal(int signal, __sighandler_t signalHandler); +int sigaction(int signal, const struct sigaction* action, + struct sigaction* oldAction); +__sighandler_t sigset(int signal, __sighandler_t signalHandler); +int sigignore(int signal); +int siginterrupt(int signal, int flag); -int sigemptyset(sigset_t *set); -int sigfillset(sigset_t *set); -int sigaddset(sigset_t *set, int signo); -int sigdelset(sigset_t *set, int signo); -int sigismember(const sigset_t *set, int signo); -int sigignore(int signo); -int sighold(int signo); -int sigrelse(int signo); -int sigpause(int signo); +int sigprocmask(int how, const sigset_t* set, sigset_t* oldSet); +int pthread_sigmask(int how, const sigset_t* set, sigset_t* oldSet); +int sighold(int signal); +int sigrelse(int signal); -void set_signal_stack(void *ptr, size_t size); -int sigaltstack(const stack_t *ss, stack_t *oss); +/* sending signals */ +int raise(int signal); +int kill(pid_t pid, int signal); +int killpg(pid_t processGroupID, int signal); +int sigqueue(pid_t pid, int signal, const union sigval userValue); +int pthread_kill(pthread_t thread, int signal); -/* pthread extension : equivalent of sigprocmask() */ -int pthread_sigmask(int how, const sigset_t *set, sigset_t *oset); +/* querying and waiting for signals */ +int sigpending(sigset_t* set); +int sigsuspend(const sigset_t* mask); +int sigpause(int signal); +int sigwait(const sigset_t* set, int* _signal); +int sigwaitinfo(const sigset_t* set, siginfo_t* info); +int sigtimedwait(const sigset_t* set, siginfo_t* info, + const struct timespec* timeout); +/* setting the per-thread signal stack */ +int sigaltstack(const stack_t* stack, stack_t* oldStack); + +/* signal set (sigset_t) manipulation */ +int sigemptyset(sigset_t* set); +int sigfillset(sigset_t* set); +int sigaddset(sigset_t* set, int signal); +int sigdelset(sigset_t* set, int signal); +int sigismember(const sigset_t* set, int signal); + +/* printing signal names */ +void psiginfo(const siginfo_t* info, const char* message); +void psignal(int signal, const char* message); + +/* implementation private */ +int __signal_get_sigrtmin(); +int __signal_get_sigrtmax(); + + #ifdef __cplusplus } #endif + /* TODO: move this into the documentation! * ================================================== * !!! SPECIAL NOTES CONCERNING NON-POSIX EXTENSIONS: @@ -205,7 +298,7 @@ * handling. It also allows an opportunity, via the 'sigaction' struct, to * enable additional data to be passed to the handler. For example: * void - * my_signal_handler(int sig, char *userData, vregs regs) + * my_signal_handler(int sig, char* userData, vregs* regs) * { * . . . * } @@ -213,7 +306,7 @@ * struct sigaction sa; * char data_buffer[32]; * - * sa.sa_handler = (sighandler_t)my_signal_handler; + * sa.sa_handler = (__sighandler_t)my_signal_handler; * sigemptyset(&sa.sa_mask); * sa.sa_userdata = userData; * @@ -223,8 +316,9 @@ * The two additional arguments available to the signal handler are extensions * to the Posix standard. This feature was introduced by the BeOS and retained * by Haiku. However, to remain compatible with Posix and ANSI C, the type - * of the sa_handler field is defined as 'sighandler_t'. This requires the handler - * to be cast when assigned to the sa_handler field, as in the example above. + * of the sa_handler field is defined as '__sighandler_t'. This requires the + * handler to be cast when assigned to the sa_handler field, as in the example + * above. * * The 3 arguments that Haiku provides to signal handlers are as follows: * 1) The first argument is the (usual) signal number. @@ -234,10 +328,14 @@ * * 3) The third argument is a pointer to a vregs struct (defined below). * The vregs struct contains the contents of the volatile registers at - * the time the signal was delivered to your thread. You can change the fields - * of the structure. After your signal handler completes, the OS uses this struct - * to reload the registers for your thread (privileged registers are not loaded - * of course). The vregs struct is of course terribly machine dependent. + * the time the signal was delivered to your thread. You can change the + * fields of the structure. After your signal handler completes, the OS uses + * this struct to reload the registers for your thread (privileged registers + * are not loaded of course). The vregs struct is of course terribly machine + * dependent. + * Note that in BeOS the vregs argument was passed by value, not by pointer. + * While Haiku retains binary compability with code compiled for BeOS, code + * built under Haiku must use the pointer argument. */ /* @@ -245,11 +343,22 @@ * * signal handlers get this as the last argument */ - typedef struct vregs vregs; + /* BeOS extension */ + /* include architecture specific definitions */ #include __HAIKU_ARCH_HEADER(signal.h) +typedef struct vregs mcontext_t; + +typedef struct __ucontext_t { + struct __ucontext_t* uc_link; + sigset_t uc_sigmask; + stack_t uc_stack; + mcontext_t uc_mcontext; +} ucontext_t; + + #endif /* _SIGNAL_H_ */ Modified: haiku/branches/developer/bonefish/signals-merge/headers/posix/sys/types.h =================================================================== --- haiku/branches/developer/bonefish/signals-merge/headers/posix/sys/types.h 2011-06-11 22:27:25 UTC (rev 42109) +++ haiku/branches/developer/bonefish/signals-merge/headers/posix/sys/types.h 2011-06-11 22:32:34 UTC (rev 42110) @@ -52,6 +52,70 @@ typedef __haiku_addr_t addr_t; typedef __haiku_int32 key_t; +typedef __haiku_std_int32 clockid_t; +typedef struct __timer_t* timer_t; + + +/* pthread types */ + +typedef struct _pthread_thread *pthread_t; +typedef struct _pthread_attr *pthread_attr_t; +typedef struct _pthread_mutex pthread_mutex_t; +typedef struct _pthread_mutexattr *pthread_mutexattr_t; +typedef struct _pthread_cond pthread_cond_t; +typedef struct _pthread_condattr *pthread_condattr_t; +typedef int pthread_key_t; +typedef struct _pthread_once pthread_once_t; +typedef struct _pthread_rwlock pthread_rwlock_t; +typedef struct _pthread_rwlockattr *pthread_rwlockattr_t; +typedef struct _pthread_spinlock pthread_spinlock_t; +/* +typedef struct _pthread_barrier *pthread_barrier_t; +typedef struct _pthread_barrierattr *pthread_barrierattr_t; +*/ + +struct _pthread_mutex { + __haiku_std_uint32 flags; + __haiku_std_int32 lock; + __haiku_std_int32 unused; + __haiku_std_int32 owner; + __haiku_std_int32 owner_count; +}; + +struct _pthread_cond { + __haiku_std_uint32 flags; + __haiku_std_int32 unused; + pthread_mutex_t* mutex; + __haiku_std_int32 waiter_count; + __haiku_std_int32 lock; +}; + +struct _pthread_once { + __haiku_std_int32 state; +}; + +struct _pthread_rwlock { + __haiku_std_uint32 flags; + __haiku_std_int32 owner; + union { + struct { + __haiku_std_int32 sem; + } shared; + struct { + __haiku_std_int32 lock_sem; + __haiku_std_int32 lock_count; + __haiku_std_int32 reader_count; + __haiku_std_int32 writer_count; + void* waiters[2]; + } local; + }; +}; + +struct _pthread_spinlock { + __haiku_std_int32 lock; +}; + + #include <null.h> #include <size_t.h> #include <time.h> Modified: haiku/branches/developer/bonefish/signals-merge/headers/posix/sys/wait.h =================================================================== --- haiku/branches/developer/bonefish/signals-merge/headers/posix/sys/wait.h 2011-06-11 22:27:25 UTC (rev 42109) +++ haiku/branches/developer/bonefish/signals-merge/headers/posix/sys/wait.h 2011-06-11 22:32:34 UTC (rev 42110) @@ -1,5 +1,5 @@ /* - * Copyright 2004-2010 Haiku Inc. All Rights Reserved. + * Copyright 2004-2011, Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. */ #ifndef _SYS_WAIT_H @@ -28,16 +28,12 @@ #define WIFCORED(value) ((value) & 0x10000) #define WIFCONTINUED(value) ((value) & 0x20000) -/* TODO: waitid() is part of the real-time signal extension. Uncomment when - * implemented! */ -#if 0 /* ID types for waitid() */ typedef enum { P_ALL, /* wait for any children, ignore ID */ P_PID, /* wait for the child whose process ID matches */ P_PGID /* wait for any child whose process group ID matches */ } idtype_t; -#endif /* 0 */ #ifdef __cplusplus @@ -46,7 +42,7 @@ extern pid_t wait(int *_status); extern pid_t waitpid(pid_t pid, int *_status, int options); -/* extern int waitid(idtype_t idType, id_t id, siginfo_t *info, int options); */ +extern int waitid(idtype_t idType, id_t id, siginfo_t *info, int options); #ifdef __cplusplus } Modified: haiku/branches/developer/bonefish/signals-merge/headers/posix/time.h =================================================================== --- haiku/branches/developer/bonefish/signals-merge/headers/posix/time.h 2011-06-11 22:27:25 UTC (rev 42109) +++ haiku/branches/developer/bonefish/signals-merge/headers/posix/time.h 2011-06-11 22:32:34 UTC (rev 42110) @@ -1,5 +1,5 @@ /* - * Copyright 2005-2010 Haiku Inc. All Rights Reserved. + * Copyright 2005-2011, Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. */ #ifndef _TIME_H_ @@ -9,17 +9,33 @@ #include <sys/types.h> +struct sigevent; /* defined in <signal.h> */ + + typedef __haiku_int32 clock_t; typedef __haiku_int32 time_t; typedef __haiku_int32 suseconds_t; typedef __haiku_uint32 useconds_t; -#define CLOCKS_PER_SEC 1000 + +#define CLOCKS_PER_SEC 1000000 #define CLK_TCK CLOCKS_PER_SEC #define MAX_TIMESTR 70 /* maximum length of a string returned by asctime(), and ctime() */ +#define CLOCK_MONOTONIC ((clockid_t)0) + /* system-wide monotonic clock (aka system time) */ +#define CLOCK_REALTIME ((clockid_t)-1) + /* system-wide real time clock */ +#define CLOCK_PROCESS_CPUTIME_ID ((clockid_t)-2) + /* clock measuring the used CPU time of the current process */ +#define CLOCK_THREAD_CPUTIME_ID ((clockid_t)-3) + /* clock measuring the used CPU time of the current thread */ + +#define TIMER_ABSTIME 1 /* absolute timer flag */ + + struct timespec { time_t tv_sec; /* seconds */ long tv_nsec; /* and nanoseconds */ @@ -72,6 +88,23 @@ const struct tm *tm); extern char *strptime(const char *buf, const char *format, struct tm *tm); +/* clock functions */ +int clock_getres(clockid_t clockID, struct timespec* resolution); +int clock_gettime(clockid_t clockID, struct timespec* time); +int clock_settime(clockid_t clockID, const struct timespec* time); +int clock_nanosleep(clockid_t clockID, int flags, + const struct timespec* time, struct timespec* remainingTime); +int clock_getcpuclockid(pid_t pid, clockid_t* _clockID); + +/* timer functions */ +int timer_create(clockid_t clockID, struct sigevent* event, + timer_t* timerID); +int timer_delete(timer_t timerID); +int timer_gettime(timer_t timerID, struct itimerspec* value); +int timer_settime(timer_t timerID, int flags, + const struct itimerspec* value, struct itimerspec* oldValue); +int timer_getoverrun(timer_t timerID); + /* special timezone support */ extern void tzset(void); Modified: haiku/branches/developer/bonefish/signals-merge/headers/posix/unistd.h =================================================================== --- haiku/branches/developer/bonefish/signals-merge/headers/posix/unistd.h 2011-06-11 22:27:25 UTC (rev 42109) +++ haiku/branches/developer/bonefish/signals-merge/headers/posix/unistd.h 2011-06-11 22:32:34 UTC (rev 42110) @@ -1,5 +1,5 @@ /* - * Copyright 2004-2010 Haiku Inc. All Rights Reserved. + * Copyright 2004-2011 Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. */ #ifndef _UNISTD_H_ @@ -45,10 +45,14 @@ #define _POSIX_THREAD_ATTR_STACKADDR (-1) /* currently unsupported */ #define _POSIX_THREAD_ATTR_STACKSIZE (200809L) #define _POSIX_THREAD_PRIORITY_SCHEDULING (-1) /* currently unsupported */ -#define _POSIX_REALTIME_SIGNALS (-1) /* currently unsupported */ +#define _POSIX_REALTIME_SIGNALS (200809L) #define _POSIX_MEMORY_PROTECTION (200809L) -#define _POSIX_SEM_VALUE_MAX INT_MAX +#define _POSIX_MONOTONIC_CLOCK (200809L) +#define _POSIX_TIMERS (200809L) +#define _POSIX_CPUTIME (200809L) +#define _POSIX_THREAD_CPUTIME (200809L) + /* pathconf() constants */ /* BeOS supported values, do not touch */ #define _PC_CHOWN_RESTRICTED 1 @@ -119,6 +123,14 @@ #define _SC_THREAD_PRIORITY_SCHEDULING 50 #define _SC_REALTIME_SIGNALS 51 #define _SC_MEMORY_PROTECTION 52 +#define _SC_SIGQUEUE_MAX 53 [... truncated: 29024 lines follow ...]