Commit Graph

6257 Commits

Author SHA1 Message Date
Alexander von Gluck IV
2ac9acbba4 bcm2835: Improve framebuffer tracing and error trapping 2015-03-10 22:40:07 -05:00
Alexander von Gluck IV
2fc1ec2238 bcm2835: Adjust mailbox base register 2015-03-10 22:07:38 -05:00
Alexander von Gluck IV
f90ec6bffc bcm2835: Use mailbox calls again 2015-03-07 20:43:41 -06:00
Alexander von Gluck IV
ed9a0b70f3 u-boot/serial: Only reference pl011 on ARM
* This will likely change once we FDT.
2015-03-07 13:50:32 -06:00
Alexander von Gluck IV
deb4929b9a rpi1/rpi2: Use PL011 UART fallback in loader.
* Adjust UART base locations to reflect ARM pref base.
* We have a working haiku_loader_u-boot on Raspberry Pi 2!:q
2015-03-07 13:42:18 -06:00
Alexander von Gluck IV
196479ae96 headers/bcm283X: Don't depend on others to include board_config.h 2015-03-07 12:35:00 -06:00
Alexander von Gluck IV
427d40adb5 arm/targets: Add rpi2, rename raspberry_pi to rpi1
* The Raspberry pi 2 uses a new SoC which differs slightly
  from the Raspberry Pi 1.
* Someday these two board targets could go away when we get
  FDT support.
2015-03-07 12:31:12 -06:00
Alexander von Gluck IV
523c77e052 arm: Rename BCM2835 SoC header to bcm283X.h
* Fix a few typos in hrev48873
2015-03-07 11:11:53 -06:00
Alexander von Gluck IV
f8e19d47fb arm: Rename BCM2708 to BCM2805
* To while there was some compatibility between
  BCM2708 and BCM2805, it makes the BCM2806 changes
  more confusing. We don't have any valueable BCM2708
  targets.
2015-03-07 11:03:01 -06:00
Paweł Dziepak
91bf7d51f0 boot/arm: mailbox_bxm2708: add final and override specifiers
Signed-off-by: Paweł Dziepak <pdziepak@quarnos.org>
2015-03-06 19:03:59 +01:00
Paweł Dziepak
1410ffb696 boot/arm: use std::atomic<> to access bcm2708 mailbox
Signed-off-by: Paweł Dziepak <pdziepak@quarnos.org>
2015-03-06 19:03:59 +01:00
Paweł Dziepak
2b92ac2a70 boot/arm: enable C++14
Signed-off-by: Paweł Dziepak <pdziepak@quarnos.org>
2015-03-06 19:03:59 +01:00
Alexander von Gluck IV
5eeb4163fa platform/u-boot: Make bcm2708 mailbox code functional
* Functional == compiles. Needs tested :-)
2015-03-06 10:17:52 -06:00
Alexander von Gluck IV
5906dbb4d4 platform/u-boot: Work towards using arm mailbox driver
* Reference bcm2708 framebuffer when it makes sense
* Add bcm2708 define to Raspberry Pi board_config.h
2015-03-06 07:47:32 -06:00
Alexander von Gluck IV
7ddf9bcf0d boot/arm: bcm2708 cleanup; no functional change 2015-03-05 22:54:21 -06:00
Alexander von Gluck IV
c798e80b79 raspberry_pi: Move over to u-boot.
* The raspberry_pi loader wasn't in great shape anyway,
  but could still contain some valueable code.
2015-03-05 22:41:47 -06:00
Alexander von Gluck IV
8a06abf132 bcm2708: Convert framebuffer driver over to new format
* Remove from raspberry_pi bootloader (which should die soon)
* Change to use new arm device layout
* Create arch_mailbox to check arm mailboxes (WIP)
2015-03-05 22:41:47 -06:00
Adrien Destugues
1736cb1d59 driver_settings: fix allocating an empty settings
I misread the condition and broke this in 0687a01. Thanks to Axel for
reviewing!
* Refactor the code again to move all the error checking at the top of
the function, to make it easier to read.
2015-01-14 13:39:35 +01:00
Adrien Destugues
bcb793d37b Fix driver_settings in kernel mode outside of drivers.
The API allows to create driver settings which are not added to the
global list, however those were left partially uninitialized, and there
was no way to cleanly delete them.

Tag such unattached settings with a ref_count of -1, and have
delete_driver_settings check for this and handle the case correctly.

Note: #10494 comment 2 says the settings for packagefs shouldn't be
added to the kernel driver settings list, which is why I went with this
solution. An alternative would be always using the list and the
reference counting, but I don't know what the consequences are.

Fixes #10494.
2015-01-14 11:53:19 +01:00
Adrien Destugues
0687a01b53 driver_settings: don't strdup(NULL)
* This is not allowed by strdup POSIX specs and GCC may use its builtin
strdup which doesn't check for it.
* also refactor parse_driver_settings_string to create the
settings_handle using settings_new, to reduce code duplication.
2015-01-14 11:53:18 +01:00
PulkoMandy
98731302d8 fssh_api_wrapper: fix build on non-Haiku.
* I'm not sure why strings.h needs to be included before <new>, but it
wouldn't work otherwise.
2015-01-14 10:16:32 +01:00
Adrien Destugues
749bd21c45 rootfs: fs_shel build fix attempt.
Sorry, I can't test all cases when building from Haiku.

Including <new> after the fs shell wrapper makes the compiler fail
because new needs a size_t argument (not an fssh_size_t). But including
it before also fails because it includes C++ typedefs without the fssh
wrapper, leading to conflicts.

Undefining size_t just for the include of <new> isn't very clean, but
seems to work. new gets a size_t argument as it should and the other
typedefs aren't conflicting.
2015-01-13 16:21:14 +01:00
Adrien Destugues
a7d444d145 Remove old block cache implementation
This was not used anywhere except the tests written for it (which is
also removed).
2015-01-13 15:48:59 +01:00
Adrien Destugues
ace74964f1 Remove khash from the sources.
Fixes #9552.
2015-01-13 15:48:58 +01:00
Adrien Destugues
bb3092b298 rootfs: convert to BOpenHashTable.
* Add an fs-shell compatible version of BOpenHashTable in the fs_shell
to keep it working. The header is renamed to KOpenHashTable to avoid a
conflict with the OpenHashTable.h available in private/shared which is
not API compatible.
2015-01-13 15:48:58 +01:00
Adrien Destugues
9d1c3b8d4b block cache: convert to BOpenHashTable. 2015-01-13 15:48:56 +01:00
Rene Gollent
be60c04c89 modules: Fix #11746.
- When normalizing paths of the preloaded modules to their final mounted
  path, remove them from the hash table before updating their path. Otherwise,
  the remove would fail due to the hash no longer matching, which in turn
  would cause the code in question to introduce an infinite loop in the
  hash table's internal link list due to manually rewriting the next link.
2015-01-12 19:08:24 -05:00
Adrien Destugues
3395fdcd6a gcc4 build fix.
* offsetof is not allowed on non-POD types so we need to use
offset_of_member (gcc2 accepts offsetof, and C++11 relaxed the
constraints on where it is allowed so it should work there too)
* we have offset_of_member as a workaround until we switch to C++11,
move it from khash (which is soon to be removed) to list.h which is the
other place where it is used (for this one single call in our whole
codebase)

Also fix a typo in vfs.cpp.
2015-01-12 19:04:33 +01:00
Adrien Destugues
f9defd4526 VFS: migrate to BOpenHashTable. 2015-01-12 18:23:45 +01:00
Adrien Destugues
6235b4967b More useless inclusions of khash.h 2015-01-12 18:23:45 +01:00
Adrien Destugues
79b12613f5 legacy_drivers: convert to BOpenHashTable. 2015-01-12 18:23:44 +01:00
Adrien Destugues
887be0ac6a kernel/module: fully convert to BOpenHashTable 2015-01-12 18:23:44 +01:00
Adrien Destugues
c4718ea973 Missing std::nothrow on new
Forgot to add this when migrating to BOpenHashTable.
2015-01-12 09:46:40 +01:00
Rene Gollent
6e9704175e kernel: Style fix. 2015-01-09 19:49:52 -05:00
Rene Gollent
d05a5a70e0 kernel: Fix ELF hashtable iterator handling.
As a result of the refactoring for OpenHashTable, the iterator semantics
have changed a bit, such that the end of the table is no longer signalled
by the iterator returning NULL. This wasn't taken into account during
refactoring, which would lead to various places returning the last item
in the list in the case where no matching item was found, causing e.g.
drivers not to be loaded properly. This fixes the boot hang regressions
introduced in hrev48640.
2015-01-09 14:42:13 -05:00
Adrien Destugues
3b3cad8468 kernel elf: Fix Compare function
I forgot to change the function to return true on equality, instead of
returning the difference as khash required. Fixes a panic on boot.
2015-01-09 21:31:34 +01:00
Adrien Destugues
271ac910a4 Remove useless includes of khash.h
* These files were already converted to BOpenHashTable.
* For #9552.
2015-01-09 18:09:12 +01:00
Adrien Destugues
6a89f8040f devfs: migrate to BOpenHashTable
For #9552.
2015-01-09 18:09:10 +01:00
Adrien Destugues
69ff01cb9e Migrate image hash table to BOpenHashTable.
For #9552.
2015-01-09 18:09:09 +01:00
Adrien Destugues
57f933d348 CID603224: missing break in parsedate.
Could lead to wrongly setting the TYPE_MINUTE flag for an invalid (>59)
number of minutes. Harmless, as that flag is never used.
For completeness, also set the flag for seconds (also never used).

Fixes #11552.
2014-12-18 15:55:47 +01:00
Puck Meerburg
c038f26da8 Import div.c patch by Tri-Edge AI
Signed-off-by: Jérôme Duval <jerome.duval@gmail.com>
2014-12-14 18:06:21 +01:00
Puck Meerburg
a5f30beaad Fix #7008: Add a64l and l64a from glibc, and add some missing definitions in wchar.h and stdlib.h
Signed-off-by: Jérôme Duval <jerome.duval@gmail.com>
2014-12-14 18:06:09 +01:00
Adrien Destugues
38ec030ace FileDevice: implement icon ioctls
Fixes #9320.
2014-12-02 09:04:56 +01:00
Adrien Destugues
56abf4aa37 Fix std::isnan and friends for gcc2.
gcc2 was relying on the c99 functions being there, but they are not in
the std namespace.
* Disable the C99 functions and macros in C++ mode
* Redefine them as inline functions in cmath in the std namespace.

Fixes #7396.
2014-11-27 10:58:49 +01:00
Jérôme Duval
f3e381dd0c bios_ia32: for correctness, add clobber memory for asm invlpg.
* generated code is the same for x86_gcc2 and x86_64.
* fixed TRACE build for mmu.cpp.
2014-11-17 20:17:30 +01:00
PulkoMandy
8068b64b5c Fix build with guarded heap on x86_64
* Type mismatch.
2014-11-14 12:55:50 +01:00
Adrien Destugues
db214549c5 guarded_heap: fix build (volatile + atomic ops)
Unfortunately, the package manager uses more kernel memory and it's not
possible to boot to the desktop with the guarded heap anymore.
2014-11-12 16:20:24 +01:00
Adrien Destugues
7b4084f717 reject partitions with negative offset
I had a KDL when trying to read an audio CD which apparently uses this
as a copy protection scheme.
I don't know if this is the right place to do this, the KDL would happen
further down when the intel partitionning system or bfs would try to
read data from the disk at offset -2048.
2014-11-11 17:13:03 +01:00
Alexander von Gluck IV
57bc65034a Everything: Update lots of code to use B_COUNT_OF macro
* Likely not everything, but the obvious uses of B_COUNT_OF
2014-11-09 14:52:19 -06:00
Michael Lotz
9a6331459f kernel: Fix build with KDEBUG_LEVEL < 2.
The lock caller info isn't available in such a configuration.
2014-11-04 23:00:59 +01:00
François Revol
76b8f002e1 Implement lseek(SEEK_END) on devices
While the partitioning system does publish partitions as block
devices and report their size in stat(), the old BeOS-style
drivers have no means of reporting it this way.
So we fall back to ioctl(B_GET_GEOMETRY) to find out the size.
2014-11-04 20:47:04 +01:00
François Revol
b7ff6340ae U-Boot: always initialize args.arguments_count 2014-11-04 16:01:16 +01:00
François Revol
361f5a857f ARM: OMAP3: dynamically allocate the framebuffer
It seems to work on overo at least, which has only 128MB by default in QEMU.
2014-11-03 21:06:20 +01:00
François Revol
1cac4300c3 ARM: Add an mmu_get_virtual_mapping() call to bootloader
Will be needed to figure out the framebuffer address
once we allocate it properly instead of hardcoding.
2014-11-03 20:49:01 +01:00
François Revol
cb3ea122d3 U-Boot: delay checking /chosen:bootargs after remapping FDT
This avoids having to copy the strings.
For now we disregard argv[] as it is not remapped before
being used in add_stage2_driver_settings() and is not used
by the linux entry point.

This makes the overo loader panic at the same place as
the beagle xm one now, even though it fails to display
anything with the default RAM size since we allocate
the framebuffer beyond 128MB...
2014-11-03 19:41:38 +01:00
Michael Lotz
eac94f5db9 kernel: Also push lock caller in acquire_spinlock_nocheck. 2014-11-02 00:04:28 +01:00
Michael Lotz
41418981f4 kernel: Sync panic messages across acquire_spinlock versions.
* Always include last caller and lock value on both UP and MP path.
* Change lock value printing to hex format, as 0xdeadbeef is more
  obvious than its decimal counterpart.
2014-11-02 00:04:27 +01:00
Jessica Hamilton
22ea34153f access: fix to be POSIX compliant 2014-11-02 08:51:24 +13:00
François Revol
564a073b01 ARM: move uEnv.txt content to BoardSetup file
That's really where it belongs. Not all boards will need it,
but for now it's always created.
2014-11-01 19:57:48 +01:00
François Revol
95e9515c4b U-Boot: drop the bind on the flash image action 2014-11-01 19:08:57 +01:00
François Revol
92fcf262ff ARM: Check for RAM size in FDT
We skip the check when we already have ranges inserted,
like from the raspberry Pi start code, and we fall back to
32MB at SDRAM_BASE is not found.
2014-11-01 18:53:48 +01:00
François Revol
8d8bda071f U-Boot: generate a separate uImage for the boot tgz as well
We need this when using the linux entry point.
2014-11-01 17:11:01 +01:00
François Revol
d1ebf9716d U-Boot: ARM: Add a linux entry point to asm shell code
While the NetBSD entry point is handy as we can use a single uImage
with all 3 blobs, it bypasses U-Boot's own patching of the FDT since
it's not visible to it, so we won't get the RAM size and other things
through it.
2014-11-01 17:09:09 +01:00
François Revol
5de5d59d78 U-Boot: move gUImage and gFDT back to BSS section
No need for this trick anymore.
2014-11-01 16:39:44 +01:00
François Revol
909a14bb55 U-Boot: introduce a start_gen() catch-all entry
So we can pass it all the optional stuff instead of playing tricks
to initialize them outside of BSS.
2014-11-01 16:39:44 +01:00
Michael Lotz
bf685cdf2e kernel: Fix missing reference release in CreateThreadEvent.
CreateThreadEvent::DoDPC() missed a reference release to balance the
acquired reference before queuing the DPC, resulting in the
CreateThreadEvent objects being leaked.

This also removes the destructor that tried to cancel the DPC. Since
the class is reference counted and only destroyed when the DPC has
run and released the last reference, this didn't make much sense.
2014-11-01 16:32:04 +01:00
François Revol
1309cdade9 U-Boot: rework flash image rule to be more flexible
We can now specify arbitrary content and offsets for each.

Change the default block size to 1k.
2014-11-01 05:37:06 +01:00
François Revol
f680a1a723 U-Boot: skip flash-image targets if no U-Boot image is passed
When building flash images we want a U-Boot binary for now.
Testing for it avoids dd waiting for input on stdin
instead leaving no clue.
2014-11-01 02:15:09 +01:00
François Revol
88d51506d0 Move ARM device tree files to an arch-specific subfolder
FDT are also used on PPC at least, and at least skeleton.dtsi
might clash since there is a different one for PPC.
2014-10-31 16:28:48 +01:00
Michael Lotz
6a80e6889a kernel: Fix missing reference to team/thread in signal events.
The signal to the team/thread is only actually sent in a deferred
procedure. To ensure that the team/thread stays valid between the DPC
being queued and it actually running, we need to acquire a reference.

Fixes #11390, where the DPC was run after the team was already
destroyed.
2014-10-31 16:16:37 +01:00
Ithamar R. Adema
5d8ce4733c ARM: u-boot: Generate DTB and include in uImage 2014-10-31 12:08:03 +01:00
Ithamar R. Adema
a52dd58d2d ARM: kernel: introduce SoC abstraction
This introduces InterruptController and HardwareTimer classes to
handle the SoC specific implementations of timers and ints for
the ARM platform.

These could be improved and moved to a more 'generic' level once
we're confident they are 'good enough'.

NOTE: The OMAP timer implementation is fully untested and probably
      completely non-functional....
2014-10-31 11:37:02 +01:00
Ithamar R. Adema
1628632584 ARM: u-boot: fixup FDT handling
If we find an FDT (either from uImage or otherwise) we make sure
we map it after mmu_init() and use kernel_args to pass it to the
kernel (so it is available at all times there).
2014-10-31 11:21:38 +01:00
Ithamar R. Adema
b794d1f947 ARM: platform: grab the FDT from the bootloader 2014-10-31 11:19:00 +01:00
Ithamar R. Adema
f4c28fe71f loader: make sure bfs debug output ends up in log
Use dprintf instead of printf so any debug output ends up in
bootloader log instead of only being displayed on-screen.
2014-10-31 10:53:28 +01:00
Henry Harrington
601b2f7eda vm: Try harder to allocate early physical pages.
* On UEFI, pages are allocated top-down; previously,
  VM would fail to allocate early pages due to
  running into pages allocated at the top and
  assume it had run out of pages to map.

Signed-off-by: Jessica Hamilton <jessica.l.hamilton@gmail.com>
2014-10-31 13:42:48 +13:00
Ingo Weinhold
dfb13a8716 Increase the size of the kernel FD table
With packagefs potentially opening quite a few packages the default of
256 slots is a bit tight. It's 4096 now, which should be safe for a
while, but we might want to consider resizing the table dynamically and
probably even switching to another algorithm for allocating the slots.

Should fix #11328.
2014-10-29 21:07:03 +01:00
Ingo Weinhold
6bbd25f071 Make vfs_resize_fd_table() accessible in the kernel
Also update some types from int to uint32.
2014-10-29 21:07:02 +01:00
Ingo Weinhold
7ca277b9ca vm_soft_fault(): remove unused wiredRange parameter 2014-10-29 12:37:25 +01:00
Ingo Weinhold
078a965f65 vm_soft_fault(): Avoid deadlock waiting for wired ranges
* VMArea::AddWaiterIfWired(): Replace the ignoreRange argument by a
flags argument and introduce (currently only) flag
IGNORE_WRITE_WIRED_RANGES. If specified, ranges wired for writing
are ignored. Ignoring just a single specified range doesn't cut it
in vm_soft_fault(), and there aren't any other users of that feature.
* vm_soft_fault(): When having to unmap a page of a lower cache, this
page cannot be wired for writing. So we can safely ignore all
writed-wired ranges, instead of just our own. We even have to do that
in case there's another thread that concurrently tries to write-wire
the same page, since otherwise we'd deadlock waiting for each other.
2014-10-29 12:37:25 +01:00
Adrien Destugues
f26118f286 Change error code for already mounted partition to B_BAD_VALUE.
As Axel pointed out, B_BAD_DATA is not the correct code here. B_BUSY
could be used but I wantd a code different from the existing one for
"partition already being initialized".
2014-10-29 08:44:52 +01:00
Ingo Weinhold
8ef857d85c vm_soft_fault(): Avoid inconsistent state when seeing wired page
When we encounter a wired page that we'd have to unmap to map our newly
allocated one, we need to get rid of the latter before unlocking
everything and waiting for the wired page. Otherwise we'd leave things
in an inconsistent state (a page from an upper cache shadowing a mapped
page from a lower cache).
2014-10-29 02:36:09 +01:00
Ingo Weinhold
699b57307e VMAnonymousCache::_MergePagesSmallerConsumer(): Add ASSERT 2014-10-29 02:36:08 +01:00
Ingo Weinhold
9da590f73e Add vm_page_free_etc()
It additionally gets a vm_page_reservation* argument. If not NULL, the
page count of the reservation is incremented for the freed page.
2014-10-29 02:36:08 +01:00
Ingo Weinhold
70d3bd5592 vm_soft_fault(): Missing DEBUG_PAGE_ACCESS_END()
... in case we'd need to unmap a page that is wired.

Fixes the immediate issue of #10977. There's a problem remaining (as
discussed in comment 1): If two threads want to wire the same page at
the same time (which led to the assertion being triggered), they will
now deadlock, waiting for each other to remove the pre-registered
VMAreaWiredRange.
2014-10-29 02:36:08 +01:00
Michael Lotz
52d500e5b4 kernel: Workaround for double lock of spinlock in user timers.
The thread that is being [un]scheduled already has its time_lock locked
in {stop|continue}_cpu_timers(). When updating the TeamTimeUserTimer,
the team is asked for its cpu time. Team::CPUTime() then iterates the
threads of the team and locks the time_lock of the thread again.

This workaround passes a possibly locked thread through the relevant
functions so Team::CPUTime() can decide whether or not a thread it
iterates needs to be locked or not.

This works around #11032 and its duplicates #11314 and #11344.
2014-10-29 00:25:37 +01:00
Adrien Destugues
4ed39e6a62 disk device manager: check that partitions are unmounted before uninitializing.
when uninitializing a partition or a disk (removing the partition
table), check that all partitions from that table are unmounted, as they
are about to become invalid.

Fixes #8827.
2014-10-28 23:52:57 +01:00
PulkoMandy
6879e9df77 Tarfs: fix traces 2014-10-28 08:49:05 +01:00
Ithamar R. Adema
ed04ffb598 ARM: keep all pages we've mapped during kernel startup
Don't just keep the page directory, but also the actual allocates
pages for the pagetables we've created.
2014-10-26 23:43:35 +01:00
Ithamar R. Adema
a17ff8279b ARM: make sure we cleanup after the bootloader
The "2nd" assert that we always ran into was due to bootloader mappings
still being active after VM init. Turns out we missed a call in the
architecture specific code for cleaning this up.

Many thanks to Ingo for spending the time to figure this out!
2014-10-26 23:23:30 +01:00
Ingo Weinhold
4ce1f197fa x86 boot loader: check gKernelArgs.arch_args.pgtables overflow 2014-10-26 22:34:52 +01:00
Michael Lotz
831abecd6a kernel: Fix unbalanced release of sync object in FD select race.
When a file descriptor is closed between being selected and adding the
select info to its IO context, the select info needs to be cleaned up.
This is done by deselect_select_infos() which unconditionally also put
the select_sync associated with the infos. In this special case we do
not yet hold a reference to the select_sync however, so avoid putting
the corresponding sync object.

Fixes #11098, #10763 and #10230.
2014-10-26 00:30:08 +02:00
Ithamar R. Adema
9c71c67140 ARM: Fix OMAP3 framebuffer divider setting
QEMU was crashing since when setting the DSS divider we were _clearing_
the TV divider, and QEMU did not check for a divide by zero.

This "fixes" the QEMU crash and gets us a working framebuffer on Beagle ;)
2014-10-25 14:49:51 -07:00
Axel Dörfler
5a95af70a2 vfs/{b|btr|package|b}fs/ext2/exfat: common access check.
* Added VFS helper function check_access_permissions() that combines
  several partially correct versions to the one true version (tm).
* All but BFS (since recently) missed the S_IXOTH for root on directories,
  and all but packagefs missed proper group handling.
2014-10-25 18:47:15 +02:00
Ithamar R. Adema
2ce0d69a7e ARM: fix bootloader's mmu_map_physical_memory size
When the address is not page aligned, not only adjust the address
to start mapping, but also take the "overflow" on the last page
into account.

This makes the bootloader boot again ;)
2014-10-25 09:43:15 -07:00
Axel Dörfler
8efd5b7613 vfs: check the X permission on set cwd.
* When you change the current working directory, you actually
  should have the permission to enter that directory.
* This gives us a 0.04% better score on the perl test suite :-)
2014-10-25 15:57:38 +02:00
Michael Lotz
e9922e775f haiku_loader: Fix wrong size of gBootGDT on x86_64.
The BOOT_GDT_SEGMENT_COUNT was based on USER_DATA_SEGMENT on both
x86 and x86_64. However, on x86_64 the order of the segments is
different, leading to a too small gBootGDT array. Move the define to
the arch specific headers so they can be setup correctly in either case.
Also add a STATIC_ASSERT() to check that the descriptors fit into the
array.

Pointed out by CID 1210898.
2014-10-22 21:06:07 +02:00
Michael Lotz
368dd37798 runtime_loader: Fix missing include of util/kernel_cpp.h.
Due to the missing include, the builtin new and delete operators were
used in those two files instead of the ones from the include used
everywhere else in the runtime_loader.
2014-10-18 21:58:08 +02:00
Michael Lotz
8ea3e9126d Typo: Fix doubled "not" in comment. 2014-10-18 19:32:33 +02:00
Adrien Destugues
7554bc9a19 wctype: out of bound access in POSIX locale.
The POSIX locale has gLocaleRoster = NULL and relies on the non-wide
version of the implementation. However it doesn't check that the
characters are actually in range which leads to out of bound access and
crashes in __isctype.

Fixes #11322.
2014-10-06 16:54:31 +02:00
Lioncash
a4a9dade68 boot: Fix some always false conditions 2014-09-26 20:56:04 +02:00
Paweł Dziepak
9c5c599041 kernel: pagecache: provided buffers are not always in user memory
Source or destination buffers passed to pagecache functions may belong
to kernel memory (e.g. when the caller is packagefs). Because of that
we should tell vm_memcpy_{from, to}_physical() truth, not assume that all
buffers are in user memory. That's important because user memory page fault
handlers cannot be nested and these functions may be used while handling
a page fault.

With high probability fixes #11246.

Signed-off-by: Paweł Dziepak <pdziepak@quarnos.org>
2014-09-25 21:57:32 +02:00
Jérôme Duval
c8990b0907 _user_wait_for_objects: remove redundant check. 2014-09-17 21:04:14 +02:00
Jessica Hamilton
f0b0d6578b Undo accidental file mode changes. 2014-09-15 16:38:30 +12:00
Paweł Dziepak
95e97463d2 kernel: add generic wrapper for accessing user memory
This patch adds user_access() which can be used to gracefully handle
page faults that may happen when accessing user memory. It is used
by arch_cpu_user{memcpy, memset, strlcpy}() to allow using optimized
functions from the standard library.

Currently only x64 uses this, but nothing really is arch specific here.

Signed-off-by: Paweł Dziepak <pdziepak@quarnos.org>
2014-09-14 22:39:07 +02:00
Paweł Dziepak
4582b6e3a3 libroot/x86_64: new memcpy implementation
This patch introduces new memcpy() implementation that improves the
performance when the buffer is small. It was written for processors that
support ERMSB, but performs reasonably well on older CPUs as well.

The following benchmarks were done on Haswell i7 running Debian Jessie
with Linux 3.16.1. In each iteration 64MB buffer was copied, the
parameter "size" is the size of the buffer passed in a single call (i.e.
for "size: 2" memcpy() was called ~32 million times to copy the whole
64MB).

f - original implementation, g - new implementation, all buffers 16 byte
aligned

cpy, size:        8, f:    79971 µs, g:    20419 µs, ∆:   74.47%
cpy, size:       32, f:    42068 µs, g:    12159 µs, ∆:   71.10%
cpy, size:      128, f:    13408 µs, g:    10359 µs, ∆:   22.74%
cpy, size:      512, f:    10634 µs, g:    10433 µs, ∆:    1.89%
cpy, size:     1024, f:    10474 µs, g:    10536 µs, ∆:   -0.59%
cpy, size:     4096, f:     9419 µs, g:     8630 µs, ∆:    8.38%

f - glibc 2.19 implementation, g - new implementation, all buffers 16 byte
aligned

cpy, size:        8, f:    26299 µs, g:    20919 µs, ∆:   20.46%
cpy, size:       32, f:    11146 µs, g:    12159 µs, ∆:   -9.09%
cpy, size:      128, f:    10778 µs, g:    10354 µs, ∆:    3.93%
cpy, size:      512, f:    12291 µs, g:    10426 µs, ∆:   15.17%
cpy, size:     1024, f:    13923 µs, g:    10571 µs, ∆:   24.08%
cpy, size:     4096, f:    11770 µs, g:     8671 µs, ∆:   26.33%

f - glibc 2.19 implementation, g - new implementation, all buffers unaligned

cpy, size:       16, f:    13376 µs, g:    13009 µs, ∆:    2.74%
cpy, size:       32, f:    11130 µs, g:    12171 µs, ∆:   -9.35%
cpy, size:       64, f:    11017 µs, g:    11231 µs, ∆:   -1.94%
cpy, size:      128, f:    10884 µs, g:    10407 µs, ∆:    4.38%
cpy, size:      256, f:    10826 µs, g:    10106 µs, ∆:    6.65%
cpy, size:      512, f:    12354 µs, g:    10396 µs, ∆:   15.85%

Signed-off-by: Paweł Dziepak <pdziepak@quarnos.org>
2014-09-14 19:16:52 +02:00
Paweł Dziepak
1d7b716f84 libroot/x86_64: new memset implementation
This patch introduces new memset() implementation that improves the
performance when the buffer is small. It was written for processors that
support ERMSB, but performs reasonably well on older CPUs as well.

The following benchmarks were done on Haswell i7 running Debian Jessie
with Linux 3.16.1. In each iteration 64MB buffer was memset()ed, the
parameter "size" is the size of the buffer passed in a single call (i.e.
for "size: 2" memset() was called ~32 million times to memset the whole
64MB).

f - original implementation, g - new implementation, all buffers 16 byte
aligned

set, size:        8, f:    66885 µs, g:    17768 µs, ∆:   73.44%
set, size:       32, f:    17123 µs, g:     9163 µs, ∆:   46.49%
set, size:      128, f:     6677 µs, g:     6919 µs, ∆:   -3.62%
set, size:      512, f:    11656 µs, g:     7715 µs, ∆:   33.81%
set, size:     1024, f:     9156 µs, g:     7359 µs, ∆:   19.63%
set, size:     4096, f:     4936 µs, g:     5159 µs, ∆:   -4.52%

f - glibc 2.19 implementation, g - new implementation, all buffers 16 byte
aligned

set, size:        8, f:    19631 µs, g:    17828 µs, ∆:    9.18%
set, size:       32, f:     8545 µs, g:     9047 µs, ∆:   -5.87%
set, size:      128, f:     8304 µs, g:     6874 µs, ∆:   17.22%
set, size:      512, f:     7373 µs, g:     7486 µs, ∆:   -1.53%
set, size:     1024, f:     9007 µs, g:     7344 µs, ∆:   18.46%
set, size:     4096, f:     8169 µs, g:     5146 µs, ∆:   37.01%

Apparently, glibc uses SSE even for large buffers and therefore does not
takes advantage of ERMSB:

set, size:    16384, f:     7007 µs, g:     3223 µs, ∆:   54.00%
set, size:    32768, f:     6979 µs, g:     2930 µs, ∆:   58.02%
set, size:    65536, f:     6907 µs, g:     2826 µs, ∆:   59.08%
set, size:   131072, f:     6919 µs, g:     2752 µs, ∆:   60.23%

The new implementation handles unaligned buffers quite well:

f - glibc 2.19 implementation, g - new implementation, all buffers unaligned

set, size:       16, f:    10045 µs, g:    10498 µs, ∆:   -4.51%
set, size:       32, f:     8590 µs, g:     9358 µs, ∆:   -8.94%
set, size:       64, f:     8618 µs, g:     8585 µs, ∆:    0.38%
set, size:      128, f:     8393 µs, g:     6893 µs, ∆:   17.87%
set, size:      256, f:     8042 µs, g:     7621 µs, ∆:    5.24%
set, size:      512, f:     9661 µs, g:     7738 µs, ∆:   19.90%

Signed-off-by: Paweł Dziepak <pdziepak@quarnos.org>
2014-09-14 19:16:52 +02:00
Paweł Dziepak
718fd007a6 kernel/x86_64: clear xmm0-15 registers on syscall exit
As Alex pointed out we can leak possibly sensitive data in xmm registers
when returning from the kernel. To prevent that xmm0-15 are zeroed
before sysret or iret. The cost is negligible.

Signed-off-by: Paweł Dziepak <pdziepak@quarnos.org>
2014-09-14 19:16:52 +02:00
Paweł Dziepak
396b74228e kernel/x86_64: save fpu state at interrupts
The kernel is allowed to use fpu anywhere so we must make sure that
user state is not clobbered by saving fpu state at interrupt entry.
There is no need to do that in case of system calls since all fpu
data registers are caller saved.

We do not need, though, to save the whole fpu state at task swich
(again, thanks to calling convention). Only status and control
registers are preserved. This patch actually adds xmm0-15 register
to clobber list of task swich code, but the only reason of that is
to make sure that nothing bad happens inside the function that
executes that task swich. Inspection of the generated code shows
that no xmm registers are actually saved.

Signed-off-by: Paweł Dziepak <pdziepak@quarnos.org>
2014-09-14 19:16:52 +02:00
Paweł Dziepak
b41f281071 boot/x86_64: enable sse early
Enable SSE as a part of the "preparation of the environment to run any
C or C++ code" in the entry points of stage2 bootloader.

SSE2 is going to be used by memset() and memcpy().

Signed-off-by: Paweł Dziepak <pdziepak@quarnos.org>
2014-09-14 19:16:52 +02:00
Paweł Dziepak
acad7bf64a kernel/x86_64: make sure stack is properly aligned in syscalls
Just following the path of least resistance and adding andq $~15, %rsp
where appropriate. That should also make things harder to break
when changing the amount of stuff placed on stack before calling the
actual syscall routine.

Signed-off-by: Paweł Dziepak <pdziepak@quarnos.org>
2014-09-14 19:16:52 +02:00
Paweł Dziepak
f2f91078bd kernel/x86_64: remove memset and memcpy from commpage
There is absolutely no reason for these functions to be in commpage,
they don't do anything that involves the kernel in any way.

Additionaly, this patch rewrites memset and memcpy to C++, current
implementation is quite simple (though it may perform surprisingly
well when dealing with large buffers on cpus with ermsb). Better
versions are coming soon.

Signed-off-by: Paweł Dziepak <pdziepak@quarnos.org>
2014-09-14 19:16:52 +02:00
Paweł Dziepak
6156a508ad kernel/x86[_64]: remove get_optimized_functions from cpu modules
The possibility to specify custom memcpy and memset implementations
in cpu modules is currently unused and there is generally no point
in such feature.

There are only 2 x86 vendors that really matter and there isn't
very big difference in performance of the generic optmized versions
of these funcions across different models. Even if we wanted different
versions of memset and memcpy depending on the processor model or
features much better solution would be to use STT_GNU_IFUNC and save
one indirect call.

Long story short, we don't really benefit in any way from
get_optimized_functions and the feature it implements and it only adds
unnecessary complexity to the code.

Signed-off-by: Paweł Dziepak <pdziepak@quarnos.org>
2014-09-14 19:16:51 +02:00
Axel Dörfler
2dba000784 libroot: sethostname() now uses ftruncate().
* Before, it would just overwrite the previous name, leaving extra
  bytes from the previous name (they wouldn't become part of the
  host name, but it just didn't look that nice).
2014-09-14 14:11:00 +02:00
Paweł Dziepak
b52b104798 boot/x86_64: convert address of previous_debug_output
Together with the previous commit should fix #10535.

Signed-off-by: Paweł Dziepak <pdziepak@quarnos.org>
2014-09-12 01:09:17 +02:00
Paweł Dziepak
c343f75d76 boot/x86_64: call debug_cleanup() before preparing mmu data
long_mmu_init() prepares initial paging structures for 64 bit kernel.
Once that function completes bootloader cannot allocate any memory
that needs to be passed to the kernel.

Signed-off-by: Paweł Dziepak <pdziepak@quarnos.org>
2014-09-12 01:09:14 +02:00
Jessica Hamilton
e547662664 stage1/2 loaders: auto-generate binary files. Fixes #10723 2014-09-10 22:00:30 +12:00
PulkoMandy
0c65f35f47 u-boot: sync console implementation from raspberry port
* VT100 is much more common than VT52 which the u-boot port was
previously using (a legacy of the Atari m68k port)
 * Implement serial_getc (again, code is identical to raspberry port...)
so the boot menu can be used over the serial port. The enter key is
recognized, arrows currently aren't.
2014-09-09 22:06:21 +02:00
PulkoMandy
19ad221e37 Raspberry_pi: fix VT100 console driver
* Cursor coordinates are 1-based, not 0-based
 * Color change was disabled and broken

This implementation of our console over VT100 is generic and should be
moved out of the raspberry-pi specific folder. However, leaving it there
for now as we will have some bigger reorganization a swe add FDT support
here.
2014-09-09 22:06:20 +02:00
Ithamar R. Adema
1819aa71ee ARM: sync up VM code with x86
No big functional reason for this, but rather keep it in sync now
then have to do lots of work later on, when there are major changes.
Once I have it fully fleshed out for ARM, I might take a look if
we can generalise it a little more, as there's lots of code
_exactly_ the same for both platforms (and other platforms in
progress using the same code).
2014-09-08 00:52:33 +02:00
Ithamar R. Adema
eea45d0a32 ARM: cleanup of bootloader memory mapping
* Removes default mapping of a portion of the RAM (will be done
  as needed)
* Passes on the page directory area to kernel, so on early vm init
  the kernel can use the area for pagetable allocation.
* Leaves it to the platform to pass in physical memory range(s). This
  will ultimately come from FDT.
* Fix long standing issue with allocation of the heap, potentially
  causing other part of the bootloader to overwrite the heap.
* Implements pagetable allocator in kernel for early vm mapping.

This fixes the first PANIC seen, we now just get the same one later
on when the VM is up... more to come...
2014-09-07 20:56:15 +02:00
Ithamar R. Adema
3e450daa1c ARM: remove the loader from the memory map table
We have _start/_end symbols to mark our start and end, use those
to determine where we are loaded. We're slowly getting closer to
a fully dynamic handling of our memory map!
2014-09-07 20:56:15 +02:00
Ithamar R. Adema
e3020a5039 ARM: remove initrd handling from mmu code
Let the platform mmu_map_physical_memory the initrd region, and
reserve it before calling mmu_init. This removes another hardcoded
address, since e.g. U-Boot gets the address from the uImage file.
2014-09-07 20:56:14 +02:00
Ithamar R. Adema
0a163b65c7 ARM: define bootloader stack in linker script
This removes the need for the whole HAIKU_BOARD_LOADER_STACK_BASE
sing and dance, since it is always included in the bootloader binary
itself.
2014-09-07 20:56:14 +02:00
Ithamar R. Adema
6fb65b9dfe ARM: remove section handling TODO; no need for it
We will never use sections anyway..
2014-09-07 20:56:14 +02:00
Ithamar R. Adema
6048591e9d Revert "Added check to ensure KDL does not include frames beyond kernel entry in the backtrace. This prevents KDL from faulting when printing backtrace on ARM."
This reverts commit 3fbb24680c.

As I mentioned in #11131, this fix is not correct, and works around
the problem. The real reason was that arch_debug_call_with_fault_handler
was not working properly, so the fault handler went crazy.

With commit eb92810 that is fixed so this can be reverted.
2014-09-07 19:15:01 +02:00
Ithamar R. Adema
eb92810edc ARM: fix arch_debug_call_with_fault_handler
This fixes the problem with KDL freaking out when doing a stacktrace
and having its fault handler triggered. Have no clue how this could
have worked before, but it did :P
2014-09-07 19:14:29 +02:00
Michael Lotz
42a91653ba kernel: Fix missing else in dump_page_queue debugger command.
The entered page queue address would always be overwritten. Pointed
out by CID 610504.
2014-09-07 13:18:03 +02:00
Paweł Dziepak
ece6f8ba5d boot: remove check against large gaps between elf segments
As discussed on the ML the limitation of the gap between segments
imposed by this check is completely artifical and pointless.

Signed-off-by: Paweł Dziepak <pdziepak@quarnos.org>
2014-09-06 19:38:13 +02:00
Ithamar R. Adema
72b52fdf92 ARM: u-boot: work around dd issues on OSX
The oflag parameter does not exist on OSX, and neither on BSD. Just
use "cat" to append instead.
2014-09-05 22:32:18 +02:00
PulkoMandy
5de8dca2e4 Bootloader: fix loading of ARM ELF files
* Let the loader know about PT_ARM_UNWIND (and ignore it)
 * Allow up to 32K of space between sections of an ELF files as ARM ones
need that.
2014-09-02 18:15:50 +02:00
Arvind S Raj
3fbb24680c Added check to ensure KDL does not include frames beyond kernel entry in the backtrace. This prevents KDL from faulting when printing backtrace on ARM. 2014-09-02 13:39:57 +02:00
Ithamar R. Adema
f9f3b564ac ARM: only enable C++11 for libroot, not globally
This resembles the x86_64 build, and fixes the compilation issues
with the bootloader stdio.h header.

Fixes #11144
2014-09-01 15:28:49 +02:00
François Revol
66b9a96b18 typo 2014-08-31 02:06:37 +02:00
Ithamar R. Adema
586995da47 ARM: make ARM C++ unwind stubs panic
As suggested by Francois, thanks for paying attention!
2014-08-30 16:50:46 -07:00
Ithamar R. Adema
780ca2bd15 ARM: abort() is already pulled in using kernel_util.o
It was just here to make libgcc happy.
2014-08-30 16:43:49 -07:00
Ithamar R. Adema
ad5bdbdfd4 ELF: enlarge the allowed padding between sections
Turns out the padding on ARM is slightly larger, and prevented
the kernel add-ons from being loaded.
2014-08-30 16:43:48 -07:00
Ithamar R. Adema
cbe5cf641d ARM: add a couple of ARM specific stubs
These are ARM EABI specific exception handling functions, referenced
from the gcc c++ libraries.
2014-08-30 21:10:27 +02:00
Paweł Dziepak
72a446e10b libroot/x86_64: implement get_cpuid() in user mode
cpuid is available in user mode as well and it doesn't look like there
are going to be any x86 platforms with significantly different CPUs anytime
soon.

Signed-off-by: Paweł Dziepak <pdziepak@quarnos.org>
2014-08-26 19:01:37 +02:00
Paweł Dziepak
6d70d75a8e libroot/x86_64: rewrite system_time[_nsecs]() to C++
No functional change intended, just code deobfuscation.

Signed-off-by: Paweł Dziepak <pdziepak@quarnos.org>
2014-08-26 19:01:37 +02:00
Paweł Dziepak
2268a48350 kernel/x86_64: use C++11 style static assert
Signed-off-by: Paweł Dziepak <pdziepak@quarnos.org>
2014-08-25 23:07:32 +02:00
Paweł Dziepak
4b75a1e237 kernel/x86_64: implement x86_swap_pgdir in C++
No reason not to inline this function.

Signed-off-by: Paweł Dziepak <pdziepak@quarnos.org>
2014-08-25 23:07:29 +02:00
Paweł Dziepak
1eba40776d kernel/x86_64: rewrite cpuid.S -> cpuid.cpp
Just getting rid of some assembly, no functional change.

Signed-off-by: Paweł Dziepak <pdziepak@quarnos.org>
2014-08-25 23:07:22 +02:00
Paweł Dziepak
721a07ac24 libroot: remove ATOMIC_FUNCS_ARE_SYSCALLS
GCC knows whether these functions need to be implemented using syscalls
(or more clever solutions like in Linux) and calls libgcc in such case.

Signed-off-by: Paweł Dziepak <pdziepak@quarnos.org>
2014-08-25 23:07:18 +02:00
Paweł Dziepak
d3b1caa62d kernel, libroot: use C++11 atomics in atomic_*()
The less assembler in our sources the better. These functions wouldn't
be used very much since SupportDef.h inlines them, but the symbols should
be available.

Signed-off-by: Paweł Dziepak <pdziepak@quarnos.org>
2014-08-25 23:06:08 +02:00
Paweł Dziepak
aa58f7e431 os/arch: implement all atomic_*() using std::atomic<>
Time to get rid of some asm code. Surprisingly, it appears that
on x86[_64] the emitted code for atomic_test_and_get() isn't as efficient
as it could be, even with -O2, but cmpxchg is so expensive that this slight
difference shouldn't matter much.

Signed-off-by: Paweł Dziepak <pdziepak@quarnos.org>
2014-08-25 23:06:08 +02:00
Fredrik Holmqvist
454ca0b1aa Accidently push tracing on device_manager. Fixing. 2014-08-23 16:35:32 +02:00
Fredrik Holmqvist
ad5bbfb8e1 Update ACPICA to 20140724.
Previous update was 20121018. So it was about time don't you think? I think so :)

 * ACPI 5.1 is fully supported in ACPICA as of this release.

Changes are so many that I can just point to the Changelog:
  https://acpica.org/sites/acpica/files/changes_13.txt

Here is the work in progress: http://instagram.com/p/sCxrHnh2sU/
2014-08-23 16:30:50 +02:00
Arvind S Raj
7a402b996e Reimplemented atomic_get_and_set in C++.
Signed-off-by: Adrien Destugues <pulkomandy@pulkomandy.tk>

* C++ code written by pdziepak.
2014-08-18 08:45:40 +02:00
Oliver Tappe
e81d40a7c8 Fix debug build.
* Restore missing definitions of std::nothrow and mynothrow that are
  required for the debug build.
* Additionally, cleanup function overrides provided by kernel_cpp,
  such that any exceptions in kernel, bootloader or runtime_loader will 
  trigger a panic.
2014-08-17 20:24:02 +02:00
Ithamar R. Adema
21af7e541f ARM: remove all references to sfdisk
sfdisk is no longer used by the ARM build, since we can handle
everything with mtools (using mpartition instead of sfdisk).
2014-08-17 14:34:25 +02:00
Oliver Tappe
87e8603d9f Merge branch 'gcc_syslibs'
* From now on, the gcc-specific system libraries (libgcc, libsupc++ and
  libstdc++) are provided by separate packages built along with gcc:
  - gcc_syslibs contains the shared libraries (libgcc_s.so, libsupc++.so and
    libstdc++.so)
  - gcc_syslibs_devel contains the static libraries and both c++ and gcc
    headers
  The shared libraries now make proper use of symbol versioning and there
  are version-specific symlinks
* The buildsystem has been adjusted to no longer use the libraries and
  headers from the cross-compiler, but use the ones provided by the
  above-mentioned packages. The only exception is that the 32-bit libraries
  required for the bootloader of the x86_64 architecture are still taken
  from the cross-compiler.
2014-08-13 13:50:29 +02:00
Oliver Tappe
f7653b1b74 Optionally build glue code for bootstrap_stage0 platform. 2014-08-13 13:32:49 +02:00
Oliver Tappe
445257ffd6 Fix missing symbols in <stubbed>libroot.so.
* A couple of symbols reuse the same address (via weak symbols), so
  we adjust generate_stubs.py accordingly.
2014-08-13 13:32:49 +02:00
Oliver Tappe
b2883f6a0d Add support for building <stubbed>libroot.so.
* <stubbed>libroot.so is a shared library which contains all the symbols
  from libroot, but without any code. This library will be required by
  the (to be introduced) stage0 of the bootstrap process, in order to
  be able to link the shared gcc syslibs (libstdc++.so, libsupc++.so
  and libgcc_s.so).
2014-08-13 13:32:46 +02:00
Oliver Tappe
37f558d5a3 Let runtime_loader ignore RT_RELRO program headers.
* The new libstdc++.so contains program headers of type PT_RELRO (for
  making segments read-only after relocation). While the actual feature
  has not been implemented, the runtime_loader should now silently
  accept (and ignore) those program headers.
2014-08-13 13:32:45 +02:00
Oliver Tappe
220d040227 Use libstdc++, libsupc++ and libgcc from gcc_syslibs.
* Instead of faking libstdc++.so from libstdc++.a, use libstdc++.so
  from the gcc_syslibs build feature for everything except x86_gcc2.
* Use libgcc_s.so from the gcc_syslibs build feature for everything but
  x86_gcc2 (which still carries libgcc as part of libroot.so).
* Drop filtering of libgcc objects for libroot, as that is no longer
  necessary since we're only using libgcc-as-single-object for libroot
  with x86_gcc2, where the filtered object file doesn't exist. Should
  the objects that used to be filtered cause any problems as part of
  libgcc_s.so, we can always filter them as part of the gcc build.
* Use libsupc++.so from the gcc_syslibs build feature for everything but
  x86_gcc2.
* Adjust all Jamfiles accordingly.
* Deactivate building of faked libstdc++.so for non-x86-gcc2. For
  x86_gcc2, we still build libstdc++.so from the sources in the Haiku
  source tree as part of the Haiku build .
* Put gcc_syslibs package onto the image, when needed.
2014-08-13 13:32:44 +02:00
Jérôme Duval
3aeed6607c include strings.h where appriopriate...
instead or additionally to string.h, in preparation for functions move.
* moves str[n]casecmp() functions and others to strings.h.
* strings.h doesn't include string.h anymore.
* this solves #10949
2014-08-08 22:40:37 +02:00
Arvind S Raj
82d287ddcb Reserve 8MB space for kernel before RAM_loader
...so that kernel does not overwrite the loader.

Signed-off-by: Adrien Destugues <pulkomandy@pulkomandy.tk>

Fixes #11067.
2014-08-08 17:39:33 +02:00
Adrien Destugues
178be2a6d5 Style fix. 2014-08-08 09:15:38 +02:00
Arvind S Raj
fea7eea417 Check if gARMPagingMethod is null
in arch_vm_translation_map_is_kernel_page_accessible. Fix borrowed from x86
(commit 428b9e758c).

Signed-off-by: Adrien Destugues <pulkomandy@pulkomandy.tk>

Fixes #11107.
2014-08-08 08:37:12 +02:00
Jérôme Duval
4dc5ce8fd8 mknod[at](): moves from unistd.h to sys/stat.h
* this solves #10883.
2014-08-04 19:03:08 +02:00
François Revol
98f35f3a92 Add EHOSTDOWN to strerror() 2014-07-30 12:31:24 +02:00
François Revol
65b2278e9a How come we missed the case B_DONT_DO_THAT in strerror() ??? 2014-07-30 12:26:31 +02:00
François Revol
917634bc8a Add missing strings to strerror() for hrev46649 2014-07-30 12:26:31 +02:00
Arvind S Raj
7749faf602 Disable frame buffer for now since it's not essential. Fix involves correcting fault when writing to CM_CLKSEL_DSS during frame buffer initialisation. 2014-07-28 16:12:58 +02:00
François Revol
ae2cdda736 Fix type mismatch warnings 2014-07-28 14:50:15 +02:00
François Revol
3501a97d9b Add cases for uname() for all known platforms
After what QEMU linux-user says about those.

Not sure what to do for ARM. I used the lowest emulated CPU in QEMU.
2014-07-28 14:45:04 +02:00
François Revol
2692aea576 Fix "unhandled case in switch" warning 2014-07-28 14:45:04 +02:00
John Scipione
970910c21e Runtime loader: Fix unchecked return value
Tested by running Attraction! from haikuware.com

CID 1228648
2014-07-23 14:44:36 -04:00
Jessica Hamilton
dc2f4e9a2f find_directory.cpp: improve #ifdef macros with comments 2014-07-21 21:52:23 +00:00
Adrien Destugues
ba0b0f2319 Sorry, I didn't mean to commit this. 2014-07-21 09:41:00 +02:00
Adrien Destugues
043178a063 Add WizzNic
* Update sdl_image_x86 to a version that can load PNG files
* Update giflib_x86 to match what's required by the new SDL_image
package
2014-07-21 09:34:52 +02:00
Jessica Hamilton
ea7e2601d4 runtime_loader: only add ABI directories to system library paths
It only makes sense to add the ABI directories to library paths
created by Haiku itself. E.g. on a gcc2h build, appending x86.

This also fixes build issues where LIBRARY_PATH is amended, and
the target binaries and libraries are in different locations.

Note: the develop lib directories were excluded, as runtime_loader
shouldn't be looking at these in the first place.
2014-07-21 11:12:11 +12:00
Jonathan Schleifer
e0650f25c3 Build libsupc++-kernel without TLS 2014-07-20 20:32:34 +02:00
Julian Harnath
b916156a83 Move libroot synchronization functions to private namespace
* Prefix lock functions with __ to mark them as private. Add
  forwarding macros to keep existing code working.

* Avoids symbol name clashes with kernel lock APIs, occuring when
  using kernellandemu-lib in userlandfs. Thanks to Ingo for the
  suggestion.
2014-07-13 16:19:08 +02:00
Ingo Weinhold
e527b79631 Switch package file accessor classes to use BPositionIO
* PackageFileHeap{Reader,Writer} as well as Package{Reader,Writer} and
  their implementation and super classes do now internally use a
  BPositionIO instead of a FD to access the package file. This provides
  more flexibility needed for features to come.
* BPackageReader has already grown a new Init() version with a
  BPositionIO* parameter.
2014-07-12 15:40:22 +02:00
Ingo Weinhold
01e6d687c0 boot loader: Add pwrite(), lseek(), ftruncate()
ftruncate() is just a stub (needed for BFdIO).
2014-07-12 15:40:22 +02:00
Ingo Weinhold
1b50eb7d91 Remove unnecessary zlib build feature dependency 2014-07-12 15:40:21 +02:00
Axel Dörfler
de9c061339 bfs: Use the QueryParserUtils instead of its own copy.
* Ingo copied the methods into a shared location, and then obviously
  "forgot" to let BFS use them. As a side note for Ingo: the complete
  error GCC reported was "std::fssh_size_t" not defined with the macro
  wrapper as code location. The actual problem was a "using std::size_t"
  in some C++ header that accidentally got included after the wrapper.
* The shared Query code is not yet used. That'll be done another time.
* Renamed BFS_SHELL define to FS_SHELL, such that QueryParserUtils can be
  used in any file system shell, not just the bfs_shell.
2014-07-09 22:54:39 +02:00
Augustin Cavalier
d229332a33 CIDs 1162783 & 1162784: out-of-bounds access & write in MSI.
* The number of IO vectors is not 256 on x86, but rather 224 as set by
  NUM_IO_VECTORS in "arch_int.h".
* Jessicah mentioned hearing about MSI crashes before, but that was a
  few weeks ago.
* These were the only CIDs in the MSI code.

Signed-off-by: Michael Lotz <mmlr@mlotz.ch>
2014-07-08 20:39:37 +02:00
Augustin Cavalier
d71c5a1ebf #10717: Addressing issues brought up by Axel and Gerasim
Signed-off-by: Jessica Hamilton <jessica.l.hamilton@gmail.com>
2014-07-06 14:02:12 +12:00
Augustin Cavalier
ba38276d19 Ensure partition block size is not 0.
* I tried having this test in KDiskDeviceManager.cpp, but it
   failed booting in one case and did not solve the problem in another.
   I think this is because there is an Open() call here, and that rereads
   the blocksize.
 * Tested and it solved the problem for me.
 * Should fix #10717 and #9489 at least.

Signed-off-by: Jessica Hamilton <jessica.l.hamilton@gmail.com>
2014-07-06 10:24:14 +12:00
Ingo Weinhold
b3263ad3e1 Switch package kit to BZlibCompressionAlgorithm
... and remove the Zlib{Compressor,Decompressor} API.
2014-06-30 21:55:41 +02:00
Ingo Weinhold
6a89a36aa0 Move package kit Zlib* classes to support kit
Also move to B* namespace and no longer expose the zlib dependency in
the headers.
2014-06-30 21:55:41 +02:00
Arvind S Raj
6f742d85f9 Corrected check to ensure that command line options are indeed passed.
* Currently, no command line options are being passed via u-boot
  to haiku. However, the comparison doesn't ensure that cmdline
  is not an empty string - it merely ensures cmdline is not null.

Signed-off-by: Ithamar R. Adema <ithamar@upgrade-android.com>
2014-06-27 12:20:22 -07:00
Arvind S Raj
cf0ba4901d Move stack to SDRAM as specified in memory map.
* After initializing the page table and enabling MMU,
  the pre-MMU stack becomes invalid leading to a fault.
  This was fixed by moving the stack to SDRAM as specified
  in LOADER_MEMORYMAP before ARM entry point start_netbsd.

Signed-off-by: Ithamar R. Adema <ithamar@upgrade-android.com>
2014-06-27 12:20:16 -07:00
Ingo Weinhold
32832cbe47 Remove BPackageKit::BDataOutput
Use BDataIO instead.
2014-06-23 22:58:15 +02:00
Ingo Weinhold
dec78bb27c Add new error codes B_PARTIAL_{READ,WRITE} 2014-06-23 22:58:15 +02:00
Ingo Weinhold
d2d1af830b Revert "Move ZlibDecompressor to libshared"
This reverts commit 9af2105d36.

Conflicts:
	src/kits/package/Jamfile
2014-06-18 22:13:39 +02:00
Ingo Weinhold
a01adf34d6 Revert "boot packagefs: Fix zlib dependency declaration"
This reverts commit 0b565a6f51.
2014-06-18 22:13:37 +02:00
Ingo Weinhold
f39d7f1096 Revert "boot packagefs: Fix header path in zlib dependency"
This reverts commit aafc3386ef.
2014-06-18 22:13:37 +02:00
Ingo Weinhold
f648efd3d4 Revert "Fix zlib-dependencies of (boot & standard) packagefs."
This reverts commit 06ed405803.
2014-06-18 22:13:36 +02:00
Humdinger
6229115bac More small C++11 tweaks. 2014-06-16 19:34:56 +02:00
PulkoMandy
004f41565e Apply fix suggested by Ingo
* Fix mixup of HAIKU_IMAGE vs HAIKU_IMAGE_NAME
* Use $(1) and $(2) instead of $(<) and $(>)
* Remove useless count parameter to dd
2014-06-15 14:59:01 +02:00
PulkoMandy
4a2260f21a Let the bootloader know about ARMv7.
When an ARMv7 CPU is detected, immediately turn on the FPU. This allows
us to use vsnprintf in the TRACE call in that function, as our libc is
compiled with floating point support and will trigger a fault if the FPU
is not available.

This lets the boot go further, and crash in mmu_init. Next steps:
* Find why mmu_init is crashing
* Setup some fault handlers, otherwise we call uboot ones, and they are
not very helpful. They will also probably not work once the mmu is
enabledvery helpful. They will also probably not work once the mmu is
enabledvery helpful. They will also probably not work once the mmu is
enabled...
2014-06-13 22:15:54 +02:00
PulkoMandy
afe56d3ab3 Load uImage higher so it doesn't overwrite itself
Loading of haiku_loader from an uImage is a 2-step process:

* First, the uImage is loaded (in our case from SD card using fatload)
to RAM at a temporary address.
* Then (using bootm), it is unpacked. The uImage is a container format
and can hold several files, with a load and execution address. The files
are copied from the uImage to their final location, and it's better if
that doesn't overlap with the uImage content

When this loading is done, bootm jumps to the entry point found in the
uImage.

We now actually execute our code from haiku_loader. This crashes with
the following call stack:
* vsnprintf
* dprintf
* boot_arch_cpu_init
* cpu_init

It seems vsnprintf is trying to use VFP instructions (probably from the
libgcc) but that triggers some kind of fault, and the handler (setup by
uboot?) ends up crashing the system by jumping to unmapped memory at 0.
2014-06-13 20:26:51 +02:00
PulkoMandy
3d6edc43d9 Patch by dnivra (GSoC 2014, ARM suppport)
* Cleanup the SD card image building to allow jam -q @bootstrap-mmc to
work.

There are a few remaining tricks before you can safely build an image:
* This uses a non-POSIX du option, and is only tested with Linux du
only (Linux is the only supported system to run bootstrap builds,
anyway)
* The Python recipe in haikuports.cross is known to not build on
Debian/Ubuntu, but work fine on OpenSuse. There is a patch available in
haikuports bugtracker to allow the reverse.
* You need to populate the haikuports repo package list with some
packages (which don't exist yet) to make the build system happy. But our
git hook to generate the repositories is preventnig me to share this
hack.

Once built, the image currently crashes early in the kernel execution.
On to debug that!
2014-06-13 17:22:48 +02:00
Jérôme Duval
d64267ffb2 vfs: checks whether the mount's unmounting flag is already set.
* thanks to Ingo for suggesting the idea, quoting him:
"by holding sVnodeLock read-locked, get_mount() ensures that fs_unmount() can't
process the nodes. If it is already past that point, the root node check
(not NULL, not busy, ref count > 0) is supposed to detect that. But it doesn't
look like this can work. fs_unmount() doesn't set the root node to NULL (the
root node field is NULL only during a short period in fs_mount()), but it just
frees the nodes after releasing sVnodeLock. So the not busy and ref count > 0
checks could already access freed memory".
* tested OK, this fixes #10522.
* replaced mount->root_vnode by the local variable with the same value.
2014-06-09 21:45:28 +02:00
Jessica Hamilton
5700f5fcc3 libroot.so: update glibc's e_pow.S on x86. Fixes #9962 2014-06-07 09:33:15 +12:00