Commit Graph

2667 Commits

Author SHA1 Message Date
François Revol
6a6efce864 10000l for Ingo for having me spend hours spotting this funny typo!
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27981 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-11 21:47:00 +00:00
Ingo Weinhold
1b6eff280f * Replaced the vm_get_physical_page() "flags"
PHYSICAL_PAGE_{NO,CAN}_WAIT into an actual flag
  PHYSICAL_PAGE_DONT_WAIT.
* Pass the flags through to the chunk mapper callback.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27979 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-11 20:55:32 +00:00
Ingo Weinhold
5e50de7e2e Don't disable interrupts in flush_tmap() and map_iospace_chunk(), just
pin the thread to the current CPU.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27975 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-11 18:12:10 +00:00
Ingo Weinhold
6503e5d9c6 Added functions to pin a thread to the current CPU (i.e. it will only be
scheduled on that CPU) and to avoid unscheduling it.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27974 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-11 18:11:12 +00:00
Ingo Weinhold
d654f56af2 * Added kernel tracing for the page daemon and the page writer.
* Added some commented out debug output in vm.cpp. 


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27971 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-11 15:17:12 +00:00
Jérôme Duval
3c4a3ce31c * correctly init ref_count on driver settings handles
* unload settings when ref_count is zero and boot device is available


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27969 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-11 14:58:12 +00:00
François Revol
85f9771aec Avoid crashing if gccPlatform is NULL, thanks Axel!
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27968 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-11 08:41:54 +00:00
Ingo Weinhold
4eaa43ac48 * Added "flags" parameter to VMCache::Read().
* Use the new VMCache::Read() flags parameter to directly read into the
  physical page in the page fault handler instead of mapping it first.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27966 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-11 07:30:44 +00:00
Axel Dörfler
2716cfd3d7 * Threw away the broken stat() vs. _stat() mechanism to allow for more fields
in struct stat.
* Instead, I followed Marcus' great idea and added a compatibility check in
  the runtime loader: now, R5 binaries (also shared libraries) are detected,
  and they get special versions for stat(), fstat(), and lstat() that return
  the smaller stat struct.
* However, I've disabled (in src/system/libroot/posix/sys/stat.c) using the
  larger stat field for now, as this breaks some of our optional packages.
  So until we rebuild them all, this shouldn't be enabled.
* This should now also be used for BeOS compatibility in libnetwork.so.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27961 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-10 22:13:05 +00:00
Ingo Weinhold
1b3b00c2a1 memset() returned the wrong value. Fascinatingly there's even software
(APR) that uses it.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27960 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-10 21:49:03 +00:00
Ingo Weinhold
78594e1f21 Save one byte of code.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27959 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-10 20:07:08 +00:00
Ingo Weinhold
b18c9b97ae * Implemented x86 assembly version of memset().
* memset() is now available through the commpage.
* CPU modules can provide a model-optimized memset().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27952 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-10 18:43:46 +00:00
Ingo Weinhold
379ad6d037 * Moved the arch specific stuff in src/system/kernel/lib into arch/...
subdirectories. Also moved the x86 kernel arch_string.S there.
* Moved memcpy.c from src/system/libroot/posix/string into the
  arch/generic subdirectory.
* Dealt with the consequences of moving things around. Affected are also
  the boot loader and runtime loader builds.

Adjust the m68k and ppc parts, too, but only the x86 build is tested.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27947 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-09 23:47:01 +00:00
Stefano Ceccherini
026c75e91c add ctype-extn.c to the build. It contains the function versions of the is*** defines. Without this, bash 3 refuses to compile on haiku
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27946 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-09 14:58:45 +00:00
Rene Gollent
aa420f85e2 Added TRACE macros to this file and redid its dprintfs to use that instead.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27945 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-09 13:41:15 +00:00
François Revol
4129f84603 - add team id on a TRACE()
- try to accomodate for low ram systems by making the first kernel heap allocation smaller


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27943 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-09 12:11:49 +00:00
François Revol
93861ead3e Better floppy media descriptor for the fake FAT.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27937 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-09 09:50:00 +00:00
Rene Gollent
8b6f1d5ef5 Fixed warnings with tracing enabled and made some very noisy dprintfs trace-only
as they were flooding the syslog.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27935 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-09 03:53:00 +00:00
Ingo Weinhold
7867cf37df Increase the heap size in 64 KB steps. Was 4 KB before, which was a bit
slow for short-running, heap-intensive programs.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27925 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-08 14:05:47 +00:00
Ingo Weinhold
74785e79db * Added "from" address space parameter to vm_swap_address_space()/
arch_vm_aspace_swap().
* The x86 implementation does now maintain a bit mask per
  vm_translation_map_arch_info indicating on which CPUs the address
  space is active. This allows flush_tmap() to avoid ICI for user
  address spaces when the team isn't currently running on any other CPU.
  In this context ICI is relatively expensive, particularly since we map
  most pages via vm_map_page() and therefore invoke flush_tmap() pretty
  much for every single page.
  This optimization speeds up a "hello world" compilation about 20% on
  my machine (KDEBUG turned off, freshly booted), but interestingly it
  has virtually no effect on the "-j2" haiku build time.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27912 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-07 21:39:19 +00:00
Ingo Weinhold
6bbe7eb8ca * smp.c -> smp.cpp
* Added smp_send_multicast_ici(), which sends the message to all CPUs
  specified via a mask.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27910 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-07 21:14:24 +00:00
Ingo Weinhold
3fea1d5918 Simplified x86_next_page_directory().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27904 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-07 13:08:44 +00:00
Ingo Weinhold
dbe295f827 Moved vm_translation_map_arch_info definition to the header.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27902 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-07 11:49:13 +00:00
Ingo Weinhold
032ff97fbd When a thread times out on a locking primitive, reschedule only, if the
timed out thread has a higher priority than the currently running one.
Maybe we should even restrict this behavior to realtime threads.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27897 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-06 23:00:17 +00:00
Axel Dörfler
0555803a41 Applied patch by Romain, thanks!:
* get_nth_symbol() did not correctly iterate over the symbol hash, causing it
  to return the same symbols more than once, and omit others.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27896 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-06 21:03:58 +00:00
Ingo Weinhold
dee62ec06b Yay, infinite loop when debug output is disabled.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27878 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-05 15:17:31 +00:00
Ingo Weinhold
57a45758e2 * Fixed several instances of conversions from page to byte counts. We
need to cast explicitly before the multiplication/shift, since the
  former is 32 bit and the latter 64 bit. The worst instance was in
  swap_file_add(), where the page count was int32, so that swap file
  sizes between 2 and 4 GB resulted in a negative available swap space
  size. Fixes bug #2721.
* Fixed and added optional debug output.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27877 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-05 14:37:50 +00:00
Ingo Weinhold
e43cb37bcd Moved several VM related debug settings to kernel_debug_config.h.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27876 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-05 13:15:04 +00:00
Axel Dörfler
de33b3bed0 * connect() and bind() now make sure that sockaddr::sa_len is set correctly.
* Renamed MAX_SOCKET_ADDRESS_LEN to MAX_SOCKET_ADDRESS_LENGTH.
* Whitespace cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27865 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-04 16:38:10 +00:00
Axel Dörfler
da720168c1 * Applied a patch by Jan Klötzke: added a description for buffers passed
to the function.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27862 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-04 07:45:15 +00:00
Ingo Weinhold
b50e620202 Fixed various warnings.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27841 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-02 21:22:03 +00:00
Axel Dörfler
4787aab961 * Fixed the build when ENABLE_SWAP_SUPPORT is not defined.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27838 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-02 08:28:04 +00:00
Ingo Weinhold
e18bafbdb5 Print the error code. Supposedly B_NO_MEMORY, but one never knows.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27835 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-01 21:58:59 +00:00
Axel Dörfler
56ab6f077f * I accidently broke get_next_locked_block_cache() in r27074; it would always
ignore every other cache (starting from the first).
* The consequence of this was that no blocks were written back automatically
  for those caches, and their transactions were never idle, causing bug #2781.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27831 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-01 17:05:26 +00:00
Ingo Weinhold
567f78895b Fully inline {disable,restore}_interrupts() and friends when including
<int.h>. Performance-wise not really significant, but gives nicer
profiling results.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27827 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-01 14:33:10 +00:00
Ingo Weinhold
f8bdc2443d Created a central place for putting kernel debug enabling macros.
Currently it only contains KDEBUG and the block cache debugging macros.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27816 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-01 11:56:44 +00:00
Axel Dörfler
2c348abbf7 * Most of the other file systems now maintain the st_blocks value. It might not
always be correct, but should be at least close.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27793 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-30 14:29:34 +00:00
Axel Dörfler
3ddf6441ea * Fixed warning.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27790 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-30 14:13:55 +00:00
Axel Dörfler
d99477440f * The "ints" KDL command now also prints function names, and the interrupt
function argument data.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27784 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-29 18:06:38 +00:00
Ingo Weinhold
715fbb94b4 arch_debug_get_stack_trace(): We do want the return address of the last
skipped iframe. "profile" didn't capture the top-most function, unless
run with "-s 1".


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27778 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-29 13:42:49 +00:00
Ingo Weinhold
f965a969b1 Extended the profiling API. When using the variable stack trace depth
buffer format, the buffer can now also contain other events than just
stack traces. ATM these are only references to the image events
(created/deleted). Therefore we no longer have to flush the profiling
buffer after such an event, since the debugger can exactly match the
samples. Since we couldn't flush when the profiling timer hit while the
thread was in the kernel, that wasn't working that well anyway.
"profile -f" fails to translate stack trace addresses only very rarely,
now.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27775 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-29 00:53:38 +00:00
Ingo Weinhold
99409ebb19 Generate a debug event for a loaded user image. When a debugged team
exec*()ed, the debugger never got notified that a runtime loader image
was created.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27773 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-29 00:39:38 +00:00
Ingo Weinhold
f711e9dc45 Use esi instead of ebp. The latter usually is the stack frame pointer --
using it for something else screws stack traces while being in such a
function.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27772 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-29 00:37:35 +00:00
Ingo Weinhold
abe717da05 * When the initialization of a B_KEEP_LOADED module failed, it was kept
loaded anyway, causing bug #2776.
* Removed temporary debug output.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27767 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-28 13:25:43 +00:00
Ingo Weinhold
bd5bd2c61e Normalize() didn't update fPathLength correctly. This did probably screw
up module image paths in module_init_post_boot_device(). Not sure whether
it also could cause #2776.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27760 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-27 19:11:40 +00:00
Ingo Weinhold
2701272f24 Temporary debug output to track down #2776.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27759 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-27 19:07:30 +00:00
Ingo Weinhold
c6b1356e4b * Enforced 80 column limit.
* Added/improved debug output.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27758 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-27 17:45:12 +00:00
Ingo Weinhold
7805eb0cc2 Changed the handling for hardware-caused terminal signals:
* No longer send a SIGKILL when a page fault occurred, there was no
  signal handler, and the debugger told us to continue as usual. Instead
  we send a SIGSEGV. Instead in handle_signal() when not in the main
  thread and there's no handler for the signal, we first send the main
  thread a SIGKILL before letting the thread die.
  So in cases where the main thread caused an unhandled page fault, the
  team will die from the SIGSEGV, now. This fixes bug #2773. 
* For the other hardware-caused signals we do now do the same as in case
  of page faults, i.e. we first check whether the thread has a handler
  for the signal in question. If so, we don't notify the debugger, but
  send the signal right away.
* B_GENERAL_PROTECTION_FAULT is translated to SIGILL now. Seems better
  than SIGKILL.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27757 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-27 14:08:13 +00:00
Ingo Weinhold
9618c0dc63 Panic when trying to access the small data region. It is not loaded from
disk.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27755 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-27 00:35:25 +00:00
Ingo Weinhold
1cd8c4cc08 Let the boot loader set the kernel image's name.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27754 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-27 00:33:20 +00:00
Ingo Weinhold
0dc4d1e5ca Reverted r27685, r27676, r27665, and r27664, the changes related to
letting the boot loader provide full paths for the pre-loaded images.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27753 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-27 00:28:10 +00:00
Ingo Weinhold
6075e354ab * Call module_init_post_boot_device() right after the boot volume has
been mounted, before anyone could try to load any modules from it.
  Also pass it a flag whether the boot volume is where the boot loader
  pre-loaded the modules from.
* module_init_post_boot_device() changes the pre-loaded module image
  paths to normalized boot volume paths, now. Got rid of the code in
  register_preloaded_module_image() which tried something like this.
* Changed module image ref counting. A referenced module has single
  reference to its image, which is released when the module becomes
  unreferenced.
* get_module() for a reference module will not try to re-get and re-set
  the module's image anymore. That could lead to a similar module (from
  different paths) being loaded at the same time. A module from a new
  file can only be loaded when the old one has been put completely.
* Simplified B_KEEP_ALIVE module handling a bit. When the module is
  initialized, we add another reference, which we'll never free. Thus
  the module remains loaded without special handling. Removed
  module_image::keep_loaded. A B_KEEP_ALIVE module remains referenced
  and thus its image remains referenced, too.
* Removed module::file, a cached path to the module's image. An
  optimization that wouldn't work with multiple root directories for
  modules (/boot/beos/..., /boot/common/...) or when module files were
  moved. get_module() does now always search the image file, when the
  module is still unreferenced. This should be a bit slower than before,
  but I didn't notice any difference in VMware at least. If it turns out
  to be a problem we could introduce a more intelligent cache that stays
  up to date by using node monitoring.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27752 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-26 23:59:53 +00:00
Ingo Weinhold
e8d3eff968 * vfs_normalize_path() and _user_normalize_path() use a common helper
function (normalize_path()), now. There was some code duplication
  before.
* Added "bool traverseLink" parameter to vfs_normalize_path(). When
  true and the leaf component is a symlink, it will be resolved.
* KPath:
  - Added similar leaf link traversal parameter to SetTo() and
    SetPath().
  - Added Normalize().
  - Added DetachBuffer(), which returns the object's current buffer and
    unsets itself.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27751 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-26 23:30:28 +00:00
Ingo Weinhold
5def543d91 Insert the application image at the head of the list. Work-around for
code (like found in Firefox) that relies on get_next_image_info() to
return it first.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27732 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-25 11:47:12 +00:00
Ingo Weinhold
8a85be4636 Register the commpage as an image and its entries as symbols.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27722 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-24 14:41:42 +00:00
Ingo Weinhold
fec47a5702 Added functions elf_create_memory_image() and
elf_add_memory_image_symbol(). The former creates and registers a new
image that has not been loaded from a file. The latter adds a symbol to
its symbol table. This is mainly a debug feature, allowing to name code
or data in memory regions that aren't associated with loaded ELF
objects.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27721 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-24 14:40:24 +00:00
Ingo Weinhold
8cc146385f Use the new <asm_defs.h> header in x86 assembly files. Particularly
added FUNCTION_END() calls for a good deal of functions. The respective
ELF symbols do now have a correct size.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27718 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-23 22:50:30 +00:00
Ingo Weinhold
a6d671fc8e The variable_stack_depth field in the profiler update message was not
set correctly. Could cause "profile" to crash.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27716 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-23 22:43:40 +00:00
Ingo Weinhold
52d0d5e53e elf_load_user_image() does now register the loaded image. That is every
team does have a runtime loader image. The "profile" tool can thus
translate addresses in the runtime loader correctly.
Note that this change will break code that assumes that the application
image is the first image returned by get_next_image_info().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27715 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-23 21:13:38 +00:00
Ingo Weinhold
5181b35bee Introduced a separate flag for indicating that disable_debugger() had
been called for a team, and fail installing the default debugger if it
is set. This makes disable_debugger() actually work. Fixes bug #2763.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27713 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-23 20:17:58 +00:00
Ingo Weinhold
0135e2e324 * Increased the maximum profiling caller stack depth significantly.
* Extended the profiling API by an option to record a variable number of
  samples per tick. The stack depth is used as a maximum.
* Added new option "-f" to the "profile" tool. When specified it
  increments the hit counts of all symbols in the full available caller
  stack. I.e. the resulting hit counts will approximate the total time
  spent in each function or any function directly or indirectly called
  by it. Thus "_start" and "main" will usually get 100% and leaf
  functions only what time has actually been spent in them.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27699 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-23 01:08:27 +00:00
Axel Dörfler
4a47b14ea4 * Enlarged a single kernel_args chunk to 32 KB (was 16 KB).
* Reduced the kernel_args array size from 32 to 16 (7 are used on a normal
  build).
* Cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27690 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-22 15:36:46 +00:00
Ingo Weinhold
65a9d40a9d * Added hash_dump_table() function, dumping the whole table.
* Fixed hash_remove_current(): It didn't update "lastElement" and thus
  always also removed all elements in the same bucket preceding the one
  to be removed. Also got rid of the useless "for" loop.
  Fixes #2757.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27689 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-22 14:58:40 +00:00
Ingo Weinhold
8839d592bc Added syscall _kern_read_kernel_image_symbols() for reading a kernel
image's symbol and string tables.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27687 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-22 11:13:38 +00:00
Axel Dörfler
8c8b846226 * Do not try to recreate the path of a preloaded module if a full path has been
passed in by the boot loader.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27686 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-22 09:13:30 +00:00
Axel Dörfler
18ee966f0a * The boot loader now replaces the first path component of all path names
passed to the kernel with "boot" instead of the volume name; the kernel
  mounts the boot volume always as "/boot".
* This should fix #2757.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27685 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-22 08:58:07 +00:00
Ingo Weinhold
32f1784d37 Doubled heap size to 128 KB. Should hopefully fix bug #2756.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27680 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-21 21:43:12 +00:00
Ingo Weinhold
5a150dfe6d * Added optional tracing for allocations.
* Lifted hard-coded 64 KB heap limit.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27679 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-21 21:42:17 +00:00
Ingo Weinhold
cc3b6f3a05 malloc() now also logs an error when a request could not be served.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27677 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-21 21:25:58 +00:00
Ingo Weinhold
4ed420362a Log an error when there's not enough memory for the inode.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27676 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-21 21:19:25 +00:00
Ingo Weinhold
eebbbf4494 Reduced the minimum timeout enforced by apic_set_hardware_timer() from
1 ms to 1 us. The long minimum timeout seriously screwed profiling,
since by default it works with 1 ms ticks, stopping the timer when the
thread is unscheduled and restarting it with the remaining time when it
is scheduled again.

I could also imagine that this had a negative effect on latencies and
the precision of thread wakeup times.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27672 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-21 16:53:50 +00:00
Ingo Weinhold
7326b92ce0 user_debug_update_new_thread_flags() was setting some of the thread
flags on the wrong thread (the current one instead of the newly created
one). This would cause the thread not to be debugged as it should, e.g.
profiling wouldn't work correctly.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27671 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-21 16:41:49 +00:00
Ingo Weinhold
b34e395eaf The boot loader does now set the names of the images it loads to the
full paths.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27665 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-21 13:00:31 +00:00
Ingo Weinhold
6aa2c9ecf1 * Directory stores its parent directory (if any), now.
* Adjusted used files systems accordingly.
* BFS::Stream::GetName() was broken. It accessed the small data region
  which wasn't loaded, since BFS::Stream derived from bfs_inode, which
  is a variably-sized structure with the small data region at the end.
  Changed that to a ref-counted, shared member instead.
* Implemented RootFileSystem::GetName().
* Added Directory::GetPath() to get a full path of the directory or an
  entry.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27664 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-21 12:55:41 +00:00
Ingo Weinhold
ecfad924e0 Solution for the potential deadlock when needing to flush the profiling
buffer during a timer event that interrupted a kernel function: We do
now flush the buffer as soon as it is 70% full, *if* we didn't interrupt
a kernel function. When the buffer runs full and we still haven't hit a
user function, we drop the tick. The number of dropped ticks is recorded
and sent to the debugger with the next update message.
Reverted the previous partial solution (the temporary disabling of
profiling while in debugger support code).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27658 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-20 22:04:03 +00:00
Ingo Weinhold
eba9a4c3ee * Introduced a per-team counter that is incremented whenever an image
is created or deleted (or exec*() has been invoked). The counter is
  sent with several debugger messages.
* Track the image event counter that is used when samples are added to
  the profiling buffer. If the current team counter differs, we flush
  the buffer first (sending an update message to the debugger), so that
  the debugger has a chance to match the addresses to the correct images.
* Disable profiling for a thread while it runs in the debugger support
  code. This fixes potential deadlocks which could occur when a
  profiling timer event occurred that would require the buffer to be
  flushed while the thread was just sending something to the debugger or
  waiting for a command. As it turns out, this is not sufficient either,
  since we should never try to flush the buffer when the timer event
  occurred in the kernel, since the thread might hold a lock that the
  debugger thread could try to acquire. Will implement a more general
  solution later.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27656 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-20 20:37:10 +00:00
Ingo Weinhold
4ed8088f9a Added new debugger message B_DEBUGGER_MESSAGE_TEAM_EXEC, sent when
exec*() has been called.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27650 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-20 13:59:41 +00:00
Ingo Weinhold
78b13af677 The handling of a full profiling buffer couldn't work for two reasons:
* We can't enable interrupts in an interrupt handler. Instead we use the
  newly introduced callback feature, which notifies the debugger right
  before returning from the interrupt.
* We didn't indicate that the profiling buffer was full and that the
  thread shouldn't be profiled ATM. Therefore it could happen that it
  was profiled while trying to notify the debugger that the profiling
  buffer was full, resulting in a deadlock. Introduce a respective flag
  in the thread debug structure.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27649 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-20 12:44:41 +00:00
Ingo Weinhold
23884ae025 Introduced a callback field in the thread structure. It can be set in an
interrupt handler and will be executed right before returning from the
interrupt.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27648 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-20 12:38:27 +00:00
Ingo Weinhold
424f833bc9 * Changed the profiling API: Instead of sending all functions that shall
be tracked to the kernel, which then counts the hits, an area is
  passed to kernel in which the hits are recorded. When the area is
  full, the debugger is notified. For some reason that part doesn't work
  yet -- the whole system freezes when waiting for a reply.
* Reorganized the profile tool code a bit. For one with respect to the
  changed API, but also to prepare tracking of image creation/deletion.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27640 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-20 00:34:03 +00:00
Axel Dörfler
e73923b0c2 * Renamed static recursive lock variables to match our coding style guidelines.
* Renamed runtime loader semphore to something clearer.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27623 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-18 14:01:29 +00:00
Axel Dörfler
9a6072a35f * Resolved TODO added by Ingo: the runtime loader now lazily updates its
image IDs when needed.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27611 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-18 08:04:29 +00:00
Ingo Weinhold
56302466dc * image.c -> image.cpp
* Added global hash table for images.
* Improved a bit of code by using the new image hash table. E.g.
  _get_image_info() can return infos for images of any team, now.
* Fixed remove_images() comment: The function must not be invoked with
  the team lock being held.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27606 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-18 00:03:25 +00:00
Ingo Weinhold
cbc456de3b Added TODO regarding updating the image ID's after fork().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27604 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-17 22:56:18 +00:00
Ingo Weinhold
4eba6974b5 When quitting the debug nub thread very early (i.e. right after its
creation), we didn't release the team debug info spinlock and reenabled
interrupts.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27602 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-17 22:38:17 +00:00
Axel Dörfler
ca7cb625b9 * Implemented a (private for now) get_system_info_etc() call, that can retrieve
various system information.
* Implemented retrieving some VM stats via this call.
* The VM now maintains a page fault counter, and sets system_info::page_faults
  accordingly.
* Added a (pretty simple) "vmstat" command line app.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27597 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-17 16:27:17 +00:00
Ingo Weinhold
5f87692c66 Increased the maximal port message size to 256 KB. The profiling
messages easily hit the previous limit. Maybe another solution should be
sought.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27591 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-17 00:23:25 +00:00
Ingo Weinhold
cbcebd3330 * Extended the debugger API by sampling-based profiling support. This is
still pretty much work in progress.
* Introduced init_thread_debug_info() which is used instead of
  clear_thread_debug_info() when the thread is created. The latter
  requires former initialization.
* user_debug_thread_deleted() is now already invoked in thread_exit(),
  not in the undertaker.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27531 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-15 13:36:31 +00:00
Ingo Weinhold
243300b289 For the time being allow page faults to happen when interrupts are
disabled, as long as a fault handler is installed for the thread. It
allows user_memcpy() to be invoked with interrupts disabled -- in this
case it will simply fail, when the address is valid, but not mapped yet.
This is a more desirable behavior for debug facilities, though in all
other cases it is likely a bug. We should probably introduce a thread
flag to discriminate these situations.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27530 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-15 13:18:11 +00:00
Ingo Weinhold
e670fc6f63 Added new parameter "skipIframes" to arch_debug_get_stack_trace(). That
many iframes are supposed to be skipped before recording the stack
trace. Currently implemented for x86 only.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27529 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-15 13:09:14 +00:00
Ingo Weinhold
b4ec7b8ee5 Added (kernel private) B_PEEK_PORT_MESSAGE flag for read_port_etc().
When specified, the message is read but not removed from the port.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27527 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-15 12:59:49 +00:00
Axel Dörfler
4722f139ea * If we're in the kernel debugger, we won't even try to use ACPI to power off,
as we cannot do so with interrupts turned off (ACPI needs to allocate memory
  dynamically).
* Turn off interrupts right before going to sleep (_GTS), this at least works
  in VMware, maybe it also works on real hardware.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27500 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-14 08:52:14 +00:00
Michael Lotz
84cd8e6902 CID 1251: If the NetStack::Init() fails, return the corresponding error instead
of setting the global net stack to a deleted value.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27479 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-13 14:41:42 +00:00
Michael Lotz
2391ca5568 CID 56: Fix the wrong NULL check.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27478 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-13 14:27:31 +00:00
Michael Lotz
3ba6733d61 * CID 312 and CID 313: The device can be NULL in ReadLockPartition().
* CID 314 and CID 315: Same as above just for WriteLockPartition.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27476 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-13 13:57:40 +00:00
Michael Lotz
b1effc0c77 CID 316: If path can be null, path->InitCheck() shouldn't be used. Split it up
into two seperate checks instead and return B_BAD_VALUE on a passed NULL path.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27475 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-13 13:43:50 +00:00
Ryan Leavengood
dd84bf1de8 Reverting r27437 as per Axel's advice. The variable size is initialized by the
call to ElementAt. Marked CID 1306 as false.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27451 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-12 13:46:50 +00:00
Ryan Leavengood
c2a59f2305 Remove the null check as per Axel's advice: valid arguments within the range
are never null.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27450 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-12 13:44:00 +00:00
Ryan Leavengood
52a542adfc Fixed CID 1306: initialize size to 0.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27437 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-12 06:43:07 +00:00
Ryan Leavengood
0f3a576f7e Fixed CID 1300: the pointer last is never modified in the loop, so there is no
need for a null check. Or the null check needs to be moved to after last is
initialized. But if the user_memcpy of cookie succeeds, last should not be null
since it is just a copy of cookie. Probably.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27429 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-12 04:40:37 +00:00