Commit graph

6218 commits

Author SHA1 Message Date
Andreas Kling
a12c2df43f LibPthread: Okay I'm dumb, let's convert mutex locks into Atomic<u32>& 2019-12-22 20:25:09 +01:00
Andreas Kling
2e280417e2 Build: Let's say "C++" while building .cpp files 2019-12-22 19:52:24 +01:00
Andreas Kling
823ee63095 AudioServer: Remove any pending mixer queues whose client disconnected
We were pumping the sound device full of silence even after the last
audio client disconnected.
2019-12-22 18:30:43 +01:00
Andreas Kling
11d49aedd8 AK: Add Vector::remove_all_matching() 2019-12-22 18:29:12 +01:00
Andreas Kling
9e3e13e410 LibPthread: Fix typo in pthread_mutex_lock()
We were casting the pthread_mutex_t* instead of pthread_mutex_t::lock
to an Atomic<u32>. This still worked fine, since "lock" is the first
member of pthread_mutex_t.
2019-12-22 17:25:55 +01:00
Andreas Kling
cb6a00c512 Run: Fix broken packet logging argument to QEMU (disabled by default) 2019-12-22 15:56:16 +01:00
Andreas Kling
8874ad7946 Net: Shrink the NetworkTask packet buffer
This thing was overflowing the NetworkTask's kernel stack. Oops!
2019-12-22 14:54:37 +01:00
Andreas Kling
0c97380ee6 LibPthread+LibC: Support PTHREAD_MUTEX_RECURSIVE
This allows SDL to build against our native recursive mutex instead
of providing its own. Also it's just a nice feature to have. :^)
2019-12-22 14:25:41 +01:00
Andreas Kling
523fd6533e Kernel: Unlock the Process when exit()ing
If there are more threads in a process when exit()ing, we need to give
them a chance to unwind any kernel stacks. This means we have to unlock
the process lock before giving control to the scheduler.

Fixes #891 (together with all of the other "no more main thread" work.)
2019-12-22 12:38:01 +01:00
Andreas Kling
f4978b2be1 Kernel: Use IntrusiveList to make WaitQueue allocation-free :^) 2019-12-22 12:38:01 +01:00
Andreas Kling
96cfddb3ac AK: Add IntrusiveList::take_first() 2019-12-22 12:38:01 +01:00
Andreas Kling
4b8851bd01 Kernel: Make TID's be unique PID's
This is a little strange, but it's how I understand things should work.

The first thread in a new process now has TID == PID.
Additional threads subsequently spawned in that process all have unique
TID's generated by the PID allocator. TIDs are now globally unique.
2019-12-22 12:38:01 +01:00
Andreas Kling
16812f0f98 Kernel: Get rid of "main thread" concept
The idea of all processes reliably having a main thread was nice in
some ways, but cumbersome in others. More importantly, it didn't match
up with POSIX thread semantics, so let's move away from it.

This thread gets rid of Process::main_thread() and you now we just have
a bunch of Thread objects floating around each Process.

When the finalizer nukes the last Thread in a Process, it will also
tear down the Process.

There's a bunch of more things to fix around this, but this is where we
get started :^)
2019-12-22 12:37:58 +01:00
Andrew Kaster
150837e7e8 LibC: Prevent assertions in malloc/free at exit time
This is a bit sad, but, with the Allocators as static globals their
destructors were running before some user code. Which doesn't really
make much sense, as none of the members of (at least the basic one) do
any real heavy lifting or have many resources to RAII.

To avoid the problem, just mmap the memory for the global arrays of
Allocators in __malloc_init and let the Kernel collect the memory when
we're done with the process.
2019-12-22 10:47:39 +01:00
Andrew Kaster
7edfdca4b2 LibGUI: Don't assert in ~GWidgetClassRegistration
These guys are all declared as globals, and their ASSERT_NOT_REACHED
in the destructor doesn't play nice with __cxa_atexit. As in, every
application will assert in __cxa_finalize if this assert isn't removed.
2019-12-22 10:47:39 +01:00
Andrew Kaster
824bbc7462 LibC: Support exit time destructors per the Itanium C++ ABI
Implement __cxa_atexit and __cxa_finalize per the Itanium spec,
and convert stdlib's atexit and exit() to to call them instead of
a custom 'C-only' atexit implementation.
2019-12-22 10:47:39 +01:00
Paweł Cholewa
e2dcf27a2e TextEditor: Ask before opening a file if current document is dirty
This commit should be a fix of issue #892
2019-12-22 09:10:26 +01:00
Andrew Kaster
aa0ee0e407 AK: InlineLinkedListIterator operator-> should return m_node directly
Little typo here. Don't think many people use this iterator :)
2019-12-22 09:07:47 +01:00
Andreas Kling
c5c1cc817e Kernel: Expose region executable bit in /proc/PID/vm
Also show it in SystemMonitor's process memory map table (as 'X') :^)
2019-12-21 16:26:42 +01:00
Andreas Kling
ae2d72377d Kernel: Enable the x86 WP bit to catch invalid memory writes in ring 0
Setting this bit will cause the CPU to generate a page fault when
writing to read-only memory, even if we're executing in the kernel.

Seemingly the only change needed to make this work was to have the
inode-backed page fault handler use a temporary mapping for writing
the read-from-disk data into the newly-allocated physical page.
2019-12-21 16:21:13 +01:00
Andreas Kling
70865e5a5d Travis: We don't have UseIt.sh anymore :^) 2019-12-21 00:19:49 +01:00
joshua stein
73c953b674 Build: get rid of UseIt.sh
The build system uses relative paths to the toolchain binaries, so
modifying $PATH is no longer necessary, and nothing needs
$SERENITY_ROOT anymore.
2019-12-20 23:55:08 +01:00
joshua stein
23158aef2e Build: only setup git defines for About application 2019-12-20 23:55:08 +01:00
Andreas Kling
44bc4008b7 Build: Get rid of the USERLAND define
Let's simplify things. There is now only KERNEL.
To see if you're on Serenity, check if __serenity__ is defined.
2019-12-20 22:59:11 +01:00
Andreas Kling
6c2c3d00a3 Build: Have makeall.sh clean up before running
This matches the old behavior where makeall.sh would always try to
produce a clean build.
2019-12-20 22:00:41 +01:00
Andreas Kling
097b8acf10 Toolchain: Use "make install" to install our LibC and LibM 2019-12-20 21:59:42 +01:00
Andreas Kling
ada70f2c8b Build: Abort makeall.sh without building a disk image if make fails 2019-12-20 21:54:55 +01:00
Andreas Kling
270beb5165 LibC: Always install as part of the default target
We always want to put crt0.o in the location where it can get picked
up by the i686-pc-serenity toolchain.

This feels a bit hackish but should get the build working again. :^)
2019-12-20 21:13:53 +01:00
Andreas Kling
4d1ce18477 Build: Add Libraries/LibPCIDB to library search path 2019-12-20 21:10:08 +01:00
Andreas Kling
ce6c63b117 Build: Oops, we forgot to build LibM 2019-12-20 21:09:10 +01:00
Andreas Kling
a8d69f4b76 Build: Add Libraries/LibPthread to the default includes 2019-12-20 21:06:26 +01:00
Andreas Kling
842716a0b5 Kernel+LibC: Build with basic -fstack-protector support
Use simple stack cookies to try to provoke an assertion failure on
stack overflow.

This is far from perfect, since we use a constant cookie instead of
generating a random one on startup, but it can still help us catch
bugs, which is the primary concern right now. :^)
2019-12-20 21:03:32 +01:00
Andreas Kling
f006e66a25 Kernel: Make sure we build with -mno-387, -mno-sse, etc. 2019-12-20 21:01:30 +01:00
Andreas Kling
6ec46aad66 LibC: Make sure we build crt0.o 2019-12-20 20:36:53 +01:00
Andreas Kling
bdaa74c85b Build: Make Kernel/makeall.sh a simple wrapper around the root Makefile 2019-12-20 20:22:16 +01:00
Andreas Kling
69c24b1ddb Build: Add PRE_CXX before the host CXX as well
This allows the use of ccache for building the host-side tools.
2019-12-20 20:22:08 +01:00
joshua stein
ac25438d54 Build: clean up build system, use one shared Makefile
Allow everything to be built from the top level directory with just
'make', cleaned with 'make clean', and installed with 'make
install'.  Also support these in any particular subdirectory.

Specifying 'make VERBOSE=1' will print each ld/g++/etc. command as
it runs.

Kernel and early host tools (IPCCompiler, etc.) are built as
object.host.o so that they don't conflict with other things built
with the cross-compiler.
2019-12-20 20:20:54 +01:00
Andreas Kling
f4b2b72c8e Kernel: Remove AK_MAKE_NONCOPYABLE from PDE and PTE classes
This avoids -Wclass-memaccess warnings exposed by the new Makefiles.
2019-12-20 20:20:23 +01:00
Andreas Kling
62c2309336 Kernel: Fix some warnings about passing non-POD to kprintf 2019-12-20 20:19:46 +01:00
Sergey Bugaev
d91c40de3b LibC: Make empty malloc blocks purgeable 2019-12-20 20:19:46 +01:00
Andreas Kling
ac007218bc WindowServer: Starting a drag should forget the active input window
When we're in a drag, we're no longer concerned with streaming mouse
events to the window that initiated the drag, so just clear the active
input window pointer.

This fixes an issue where you'd have to click once after drag and drop
in order to "release" the mouse from the active input window.
2019-12-20 20:19:38 +01:00
Andreas Kling
ea91f24a49 QuickShow: Allow dropping an image file on the QuickShow window
We now try to open image files dropped on us from FileManager. :^)

The QuickShow code is not exactly well-factored, and should be fixes up
to not do the same thing twice, etc.
2019-12-20 20:07:10 +01:00
Andreas Kling
f276030969 QuickShow: Don't disable background fill 2019-12-20 20:07:10 +01:00
Andreas Kling
6425b8714a TextEditor: Handle drop events
We now handle drop events with data type "url-list". This makes it
possible to drop a file from FileManager on TextEditor to open it.
2019-12-20 20:07:10 +01:00
Andreas Kling
cfcb38dff1 WindowServer+LibGUI: Add data_type and data fields to drag operations
These fields are intended to carry the real meat of a drag operation,
and the "text" is just for what we show on screen (alongside the cursor
during the actual drag.)

The data field is just a String for now, but in the future we should
make it something more flexible.
2019-12-20 20:07:10 +01:00
Andreas Kling
af7cb7ce1b LibGUI: GWidget::drop_event() should ignore the event by default
This will cause the event to bubble up the widget tree.
2019-12-20 20:07:10 +01:00
joshua stein
0a10462896 VirtualConsole: use memmove for an overlapping copy 2019-12-20 20:02:45 +01:00
Andreas Kling
b6ee8a2c8d Kernel: Rename vmo => vmobject everywhere 2019-12-19 19:15:27 +01:00
Andreas Kling
8ea4217c01 Kernel: Merge Process::fork() into sys$fork()
There was no good reason for this to be a separate function.
2019-12-19 19:07:41 +01:00
Andreas Kling
cb6734c5e7 Toolchain: Redirect git command output to /dev/null
Travis is currently failing and whining about the log being too long.
It appears to be filling up with output from the git hackery.
2019-12-19 18:52:07 +01:00