compiler. Fixes#5322 (the ones in /boot/develop would be overwritten).
* Simplified the Jamfile building these libraries.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35396 a95241bf-73f2-0310-859d-f6bbb57e9c96
compatibility between two different versions of a shared library.
Even when using this tool, you still need to make up your mind about compatibility, but
IMHO it helps a lot.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35380 a95241bf-73f2-0310-859d-f6bbb57e9c96
could prove to be a major PITA (because of all the dependencies that would need to be rebuilt)
* when adding a library to the image, its optional minor abi version is taken care of, too (i. e. a
corresponding link is created).
* the ABI-related links in /system/lib are now replicated in /boot/develop/lib/<arch>
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35362 a95241bf-73f2-0310-859d-f6bbb57e9c96
Update Netsurf and Bezilla packages to include compatible version of libjpeg. This is a temporary measure until they're properly rebuilt against libjpeg 8.
Closes ticket #5329.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35325 a95241bf-73f2-0310-859d-f6bbb57e9c96
build system
* declared ICU-libs as private system libraries, which causes them to no longer
be available for building software (they no longer are linked from the
development lib folder, so the linker won't find them)
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35323 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Added support to do larger raw allocations (up to one large chunk (128 pages))
in the slab areas. For an even larger allocation an area is created (haven't
seen that happen yet, though).
* Added kernel tracing (SLAB_MEMORY_MANAGER_TRACING).
* _FreeArea(): Copy and paste bug: The meta chunks of the to be freed area
would be added to the free lists instead of being removed from them. This
would corrupt the lists and also lead to all kinds of misuse of meta chunks.
object caches:
* Implemented CACHE_ALIGN_ON_SIZE. It is no longer set for all small object
caches, but the block allocator sets it on all power of two size caches.
* object_cache_reserve_internal(): Detect recursion and don't wait in such a
case. The function could deadlock itself, since
HashedObjectCache::CreateSlab() does allocate memory, thus potentially
reentering.
* object_cache_low_memory():
- I missed some returns when reworking that one in r35254, so the function
might stop early and also leave the cache in maintenance mode, which would
cause it to be ignored by object cache resizer and low memory handler from
that point on.
- Since ReturnSlab() potentially unlocks, the conditions weren't quite correct
and too many slabs could be freed.
- Simplified things a bit.
* object_cache_alloc(): Since object_cache_reserve_internal() does potentially
unlock the cache, the situation might have changed and their might not be an
empty slab available, but a partial one. The function would crash.
* Renamed the object cache tracing variable to SLAB_OBJECT_CACHE_TRACING.
* Renamed debugger command "cache_info" to "slab_cache" to avoid confusion with
the VMCache commands.
* ObjectCache::usage was not maintained anymore since I introduced the
MemoryManager. object_cache_get_usage() would thus always return 0 and the
block cache would not be considered cached memory. This was only of
informational relevance, though.
slab allocator misc.:
* Disable the object depots of block allocator caches for object sizes > 2 KB.
Allocations of those sizes aren't so common that the object depots yield any
benefit.
* The slab allocator is now fully self-sufficient. It allocates its bootstrap
memory from the MemoryManager, and the hash tables for HashedObjectCaches use
the block allocator instead of the heap, now.
* Added option to use the slab allocator for malloc() and friends
(USE_SLAB_ALLOCATOR_FOR_MALLOC). Currently disabled. Works in principle and
has virtually no lock contention. Handling for low memory situations is yet
missing, though.
* Improved the output of some debugger commands.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35283 a95241bf-73f2-0310-859d-f6bbb57e9c96
One just has to love the write overlay. That one really saved a lot
of work.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35224 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Added amd64-* as supported host gcc machine.
* Added work-around for AMD64 FreeBSD 8: It only has a static libsupc++,
which prevents us from building shared libraries, so we use the shared
libstdc++ instead.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35211 a95241bf-73f2-0310-859d-f6bbb57e9c96
You will want to edit /boot/home/config/settings/kernel/netfs-server before you
run netfs_server for the first time (or use netfs_server_prefs on the command
line, see below).
To run the server:
$ /system/servers/netfs_server &
To run the client:
$ /system/servers/authentication_server &
$ mkdir /dummy
$ mount -t userlandfs -p "netfs """ /dummy
A "Network" icon will appear on your desktop. Remote servers will appear inside
the "Network" folder (host name). Inside a folder for a server are the shares
of that server. (I.e. what has been defined as share in that respective server's
netfs-server driver settings file). netfs_server has actually a new settings
file format, you can create settings by using "netfs_server_prefs --help" on the
command line. Have fun!
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35172 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Moved the "tmp" directory out of /var, and to /boot/common/cache/.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35104 a95241bf-73f2-0310-859d-f6bbb57e9c96
Changed strings to sentence case in various places. This is the
case-misc.diff part of ticket #5169.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35043 a95241bf-73f2-0310-859d-f6bbb57e9c96
temporary solution as long as there is no package manager available. When
executing the script, it mentions this, too. This fixes#4680. Thank you.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35041 a95241bf-73f2-0310-859d-f6bbb57e9c96
B_USE_BUILTIN_ATOMIC_FUNCTIONS is defined most atomic_*() functions are
redefined as macros using the built-ins directly.
* Enabled that feature for the x86 build. Might work on other platforms as
well, but that needs to be tested.
No significant speedup for the -j8 Haiku image build.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35018 a95241bf-73f2-0310-859d-f6bbb57e9c96
only -jN and gcc's build system has problems with multiple jobs. It works
fine for binutils and gcc 4 though.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34990 a95241bf-73f2-0310-859d-f6bbb57e9c96
access to a vm_page. It is basically an atomically accessed thread ID field
in the vm_page structure, which is explicitly set by macros marking the
critical sections. As a first positive effect I had to review quite a bit of
code and found several issues.
* Added several TODOs and comments. Some harmless ones, but also a few
troublesome ones in vm.cpp regarding page unmapping.
* file_cache: PrecacheIO::Prepare()/read_into_cache: Removed superfluous
vm_page_allocate_page() return value checks. It cannot fail anymore.
* Removed the heavily contended "pages" lock. We use different policies now:
- sModifiedTemporaryPages is accessed atomically.
- sPageDeficitLock and sFreePageCondition are protected by a new mutex.
- The page queues have individual locks (mutexes).
- Renamed set_page_state_nolock() to set_page_state(). Unless the caller says
otherwise, it does now lock the affected pages queues itself. Also changed
the return value to void -- we panic() anyway.
* set_page_state(): Add free/clear pages to the beginning of their respective
queues as this is more cache-friendly.
* Pages with the states PAGE_STATE_WIRED or PAGE_STATE_UNUSED are no longer
in any queue. They were in the "active" queue, but there's no good reason
to have them there. In case we decide to let the page daemon work the queues
(like FreeBSD) they would just be in the way.
* Pulled the common part of vm_page_allocate_page_run[_no_base]() into a helper
function. Also fixed a bug I introduced previously: The functions must not
vm_page_unreserve_pages() on success, since they remove the pages from the
free/clear queue without decrementing sUnreservedFreePages.
* vm_page_set_state(): Changed return type to void. The function cannot really
fail and no-one was checking it anyway.
* vm_page_free(), vm_page_set_state(): Added assertion: The page must not be
free/clear before. This is implied by the policy that no-one is allowed to
access free/clear pages without holding the respective queue's lock, which is
not the case at this point. This found the bug fixed in r34912.
* vm_page_requeue(): Added general assertions. panic() when requeuing of
free/clear pages is requested. Same reason as above.
* vm_clone_area(), B_FULL_LOCK case: Don't map busy pages. The implementation is
still not correct, though.
My usual -j8 Haiku build test runs another 10% faster, now. The total kernel
time drops about 18%. As hoped the new locks have only a fraction of the old
"pages" lock contention. Other locks lead the "most wanted list" now.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34933 a95241bf-73f2-0310-859d-f6bbb57e9c96
'+' as part of their name, which is illegal for shell variables (where the
corresponding replacement character is 'X').
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34903 a95241bf-73f2-0310-859d-f6bbb57e9c96
(--update must be given as first option, but can be followed by others)
* added simple perl scripts that is used by configure to convert BuildSetup
from jam to shell format
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34896 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Determine HOST_LD and HOST_OBJCOPY in configure.
* Removed Solaris ld work-around in BuildSetup.
The change requires configure to be re-run. Alternatively HOST_{LD,OBJCOPY}
can be added to generated/build/BuildConfig.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34892 a95241bf-73f2-0310-859d-f6bbb57e9c96
TODO: determine which other command line tools may also fit under this new group.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34889 a95241bf-73f2-0310-859d-f6bbb57e9c96
* let BuildSetup set HAIKU_HOST_IS_BIG_ENDIAN according to HOST_GCC_MACHINE
* minor cleanup in BuildSetup
* when building ICU, set the endianness indicator suffix according to
HAIKU_HOST_IS_BIG_ENDIAN
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34864 a95241bf-73f2-0310-859d-f6bbb57e9c96
so that it can make use of the firmware installed by the OptionalPackage
Wifi-ipw2100+fw.
* Updating OptionalPackages to use the latest Wifi-ipw2100+fw package.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34833 a95241bf-73f2-0310-859d-f6bbb57e9c96
debug heap implementation.
* Added libroot_debug.so to the DevelopmentMin optional package. Since it has
the same soname as the standard libroot, it can simply be specified in
LD_PRELOAD to run a program with that version.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34788 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Added VMCache::MovePage() and MoveAllPages() to move pages between caches.
* VMAnonymousCache:
- _MergeSwapPages(): Avoid doing anything, if neither cache has swapped out
pages.
- _MergeSwapPages() does now also remove source cache pages that are
shadowed by consumer swap pages. This allows us to call _MergeSwapPages()
before _MergePagesSmallerSource(), save the swap page shadowing check
there and get rid of the vm_page::merge_swap flag. This is an
optimization based on the assumption that usually none or only few pages
are swapped out, so we save a lot of checks.
- Implemented _MergePagesSmallerConsumer() as an alternative to
_MergePagesSmallerSource(). The former is used when the source cache has
more pages than the consumer cache. It iterates over the consumer cache's
pages, moves them to the source and finally moves all pages back to the
consumer. The final move is relatively cheap (though unfortunately we
still have to update all pages' vm_page::cache field), so that overall we
save iterations of the main loop with the more expensive checks.
The optimizations particularly improve the common fork()+exec*() situations.
fork() uses CoW, which is implemented by putting two new empty caches between
the to be copied area and its cache. exec*() destroys one copy of the area,
its cache and thus causes merging of the other new cache with the old cache.
Since this usually happens in a very short time, the old cache does still
contain many pages and the new cache only few. Previously the many pages were
all checked and moved individually. Now we do that for the few pages instead.
A very extreme example of this situation is the Haiku image build. jam has a
huge heap (> 200 MB) and it fork()s+exec*()s for every action to be executed.
Since during the cache merging the cache is locked, any write access to a
heap page causes jam to block until the cache merging is done. Formerly that
took so long that it killed a lot of parallelism in multi-job builds. That
could be observed particularly well when lots of small actions where executed
(like the Link, XRes, Mimeset, SetType, SetVersion combos when building
executables/libraries/add-ons). Those look dramatically better now.
The overall speed improvement for a -j8 image build on my machine is only
about 15%, though.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34784 a95241bf-73f2-0310-859d-f6bbb57e9c96