Commit Graph
100 Commits
Author SHA1 Message Date
Ingo Weinhold 71848dd62f arch_elf.c -> arch_elf.cpp
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15910 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-11 14:26:15 +00:00
Ingo Weinhold b33f1804ea Faster/shorter way of aligning something.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15909 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-11 14:14:50 +00:00
Ingo Weinhold b7ba8a182f We enable the FPU now, store the non-volatile FPU registers on
context switches and all FPU registers in an iframe. We might want
to rethink this, though.
The kernel initialization runs to the end now. No boot volume is
found yet, but that is expected.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15908 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-11 13:51:38 +00:00
Ingo Weinhold 9b6eaae234 * Fixed thread support. The entry and exist functions are now called,
too -- introduced a function ppc_kernel_thread_root() which calls the
  three functions (entry, start, exit) in sequence. This brings us well
  into the second part of the kernel initialization.
* Replaced stmw/lmw in ppc_context_switch() by individual stwu/lwzu
  sequences. The former ones are documented to perform suboptimal on
  some architecture implementations.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15904 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-11 02:17:29 +00:00
Ingo Weinhold 31ac264b1e Added TODO regarding the use of arch_cpu_global_TLB_invalidate().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15903 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-11 02:05:29 +00:00
Ingo Weinhold d0648592ca It appears I misjudged the availability of the "tlbia" instruction. Put
the previous implementation of arch_cpu_global_TLB_invalidate() back in
place (as fallback).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15902 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-11 01:31:15 +00:00
Ingo Weinhold 6c678c57c7 * The exception vector offset is now also part of the iframe.
* Cloned iframe stack management from x86.
* Reimplemented arch_thread_{get,set}_current_thread(). The
  thread structure is stored in SPRG2. It is set to NULL in
  arch_cpu_preboot_init(), now. A non-null current thread
  causes all kinds of undesired behavior in early boot code.
* We establish the address space mappings we know from the
  Open Firmware as areas. At least those in kernel address
  space. The ones in userland address space are tougher.
  Fortunately on my Mac mini there aren't any save the
  boot_loader stack, which is not needed any longer anyway.
* Added stack trace support to the kernel debugger. Mostly
  cloned and adjusted the x86 code. Some bits are still
  missing, like stack traces for other threads.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15890 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-10 03:00:33 +00:00
Ingo Weinhold 1777154c14 * Fixed tracing build.
* In reserve_boot_loader_ranges() we skip ranges that lie without
  the kernel address space (we failed and panic()ed before). The
  architecture specific code has to deal with those, if they are
  of any importance.
* sAvailableMemoryLock.sem was not set to -1 in vm_init() so code
  executed after semaphores were available but before the semaphore
  was created caused semaphore 0 to be acquired.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15889 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-10 02:22:24 +00:00
Ingo Weinhold 1cf0c3b3f2 Clear the back pointer in the root kernel stack frame, so stack traces
will end there.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15888 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-10 00:49:31 +00:00
Ingo Weinhold 42e94eb9b8 Give a bit more info, if a symbol could not be found.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15884 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-09 05:23:50 +00:00
Ingo Weinhold e2f7a6d61f Missed that one.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15883 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-09 03:42:39 +00:00
Ingo Weinhold 48fe700d70 arch_debug.c -> arch_debug.cpp
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15882 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-09 03:38:09 +00:00
Ingo Weinhold 7176dd57e5 Reworked the exception handling code. The former one ran into the
void after turning off BAT for the segment containing itself.
The monster macro for the exception vector code was not really
elegant besides being too long for the 32 byte performance
monitor exception slot. Furthermore wasting three of the SPRG*
registers as cheap scratch memory wasn't that nice either.

We now have a three-step approach: The exception vectors
themselves contain only five instructions which branch to common
code at the beginning of the same physical page. That one sets
up BAT for itself, turns address translation back on and jumps
into the kernel. There we turn off BAT again, dump an iframe,
and enter the actual exception handler (/dispatcher). Upon return
the registers are restored from the iframe and we get back to the
place where the exception occurred.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15881 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-09 03:30:52 +00:00
Ingo Weinhold c9eb843c35 Added comment about the use of some special purpose registers.
Haven't found a better place yet.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15880 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-09 03:11:31 +00:00
Ingo Weinhold e525ca0a4d Fixed relocation of negative 14, 16, or 24 bit values. In case of 14
and 24 bits the set upper bits were overwriting the upper bits of
the word at the target location (usually something like a branch
instruction).
This is the kind of bug that easily take six hours to find, especially
when working with interrupt code and being convinced that the problem
must be related.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15879 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-09 02:47:18 +00:00
Ingo Weinhold a06cbf3fc2 arch_int.c -> arch_int.cpp.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15876 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-08 17:14:26 +00:00
Ingo Weinhold 15af38b288 Removed pointless comment.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15864 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-08 04:54:47 +00:00
Ingo Weinhold 262e0a636b We use the same strategy for computing the system time as on x86 now.
The time base conversion factor is the 32 bit value
  2^32 * 1000000 / time base frequency,
so the system time can be computed by
  system time = time base * conversion factor / 2^32.
The expression in system_time() looks more complicated now, but is
actually much faster (factor 2.5 on my Mac mini). I'm positively
surprised, how good the assembly looks, that GCC 4 generates. There's
not that much potential for optimization by hand-coding the function.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15863 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-07 23:05:56 +00:00
Ingo Weinhold 8baf8813c0 Added "shutdown" debugger command. Implemented arch_cpu_shutdown() for
PPC.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15862 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-07 22:49:43 +00:00
Ingo Weinhold 85af525e59 * Added missing call to __ppc_setup_system_time(). system_time()
and real_time_clock[_usecs]() finally seem to work (at least in
  the kernel).
* Removed accidentially committed debug output.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15861 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-07 20:35:13 +00:00
Ingo Weinhold 67ea83c566 We use the generic physical page mapper for PPC now. I realized that it
is actually not that nice for PPC since we don't have large pages.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15860 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-07 20:32:32 +00:00
Ingo Weinhold 250995598d Tagged things that don't build for PPC, so that they are added
to the x86 image only.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15859 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-07 20:29:50 +00:00
Ingo Weinhold b264ddab5d Corrected copyright. :-)
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15858 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-07 20:27:13 +00:00
Ingo Weinhold 1005ea4b5d Fixed PPC build.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15857 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-07 19:35:18 +00:00
Ingo Weinhold 9e483db6ef Missing include.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15856 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-07 19:30:34 +00:00
Ingo Weinhold 3b36b30fef * Made vm_alloc_virtual_from_kernel_args() available to other kernel
parts, too. Fixed a potential overflow.
* The generic physical page mapper reserves the virtual address range
  for the IO space now, so that noone can interfere until an area has
  been created. The location of the IO space is no longer fixed; it
  didn't look to me like it was necessary for x86, and we definitely
  need to be flexible for PPC.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15855 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-07 17:37:21 +00:00
Ingo Weinhold 4f7d12cf6a Made C++ save.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15854 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-07 03:14:02 +00:00
Ingo Weinhold a71974c1f8 Pulled the algorithm for dynamically mapping physical pages into an
"IO space" out of the x86 specific source into arch/generic. We'll use
it for PPC as well.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15853 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-07 03:13:42 +00:00
Ingo Weinhold e55e1a0e66 Implemented the PPC specific RTC support. We search for an "rtc"
device in the Open Firmware implementation of boot loader and
pass its path to the kernel, where it's opened and used for
getting/setting the real time. The expensive atomic_*64() on PPC
32-bit make things a bit more complicated. Moreover, missing
64 bit multiplication and division instructions won't really
allow system_time() to be anywhere near as fast as on x86. :-/


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15837 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-04 04:55:04 +00:00
Ingo Weinhold 850f611735 Fixed GCC4 build.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15836 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-04 02:35:12 +00:00
Ingo Weinhold 09bb4e9ac5 The real_time_data structure contains an architecture specific
substructure now (that's the only member actually). The system time
offset is therefore accessed via architecture specific accessor
functions.
Note, that this commit breaks the PPC build. Since I want to rename at
least one file I've already changed, I can't avoid that.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15835 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-04 02:17:59 +00:00
Ingo Weinhold d9a5e6050f Pulled the conversion between seconds since the epoche and the split up
(year, month,...) representation out of the x86 specific code and put
respective support functions into real_time_clock.c. We'll need those
for the PPC specific part too.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15827 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-03 17:26:37 +00:00
Ingo Weinhold 27ceaeaccc Renamed arch_real_time_clock.c to arch_real_time_clock.cpp in
anticipation of the things to come. :-)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15825 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-03 16:34:41 +00:00
Ingo Weinhold 7afa713acb Reorganized the boot platform dependencies in the kernel a bit.
Basically the architecture specific code is now responsible to
init and make use of the platform specific code, now. The reason
being that we have only one kernel per platform and thus cannot
decide at compile time, which platform to use (if any).
The PPC implementation features an abstract base class PPCPlatform
(implemented for all supported platforms) through which platform
support is provided.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15824 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-03 16:26:39 +00:00
Ingo Weinhold 716a16ce61 * Find out a few interesting information about the system (like CPU,
bus, and time base frequency) in the PPC boot loader, and propagate
  them to the kernel via kernel_args.
* Now we use the correct time base frequency for timer calculations.
* Implemented PPC specific system info stuff. Added a few PPC CPU
  types to <OS.h>.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15817 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-03 13:30:23 +00:00
Ingo Weinhold c8cd524c67 * Refactored arch_vm_translation_map_init_post_area() a bit: Pulled out
remapping stuff into separate functions and made them available to
  others.
* Remap the exception handler space in arch_int_init_post_vm() into the
  kernel address space (same issue as with the page table).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15783 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-02 03:30:58 +00:00
Ingo Weinhold 835fb10b16 Added of_exit and of_enter KDL commands.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15782 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-02 02:30:31 +00:00
Ingo Weinhold ee4bf34dd0 Forgot to commit. Added symbol marking the begin of the boot loader.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15781 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-02 02:03:37 +00:00
Ingo Weinhold a1bcf2c880 * The OF memory management callback is now set in arch_mmu_init().
According to the spec we need to set it before taking over the MMU,
  but we can't call it before arch_mmu_init(), since we need the OF
  to allocate the page table. So we do it after we have allocated
  the new page table.
* Added PPC specific kernel_args: The virtual address ranges we want
  to keep in the kernel. We fill that in with the translations we
  find when initializing the MMU stuff. We remove the memory the
  boot loader occupies from those. Besides the stack for the boot
  loader only the OF stuff remains.
* arch_mmu_allocate() now starts to search at KERNEL_BASE for a free
  virtual address when no particular address is requested. This saves
  us further trouble in the kernel, since those allocations would
  need to be remapped otherwise.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15780 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-02 01:56:37 +00:00
Ingo Weinhold 10a83ac31f * Added tlbia() and tlbie() macros. Replaced ptesync() by ppc_sync();
the fact that I couldn't find ptesync in an otherwise more complete
  documentation I downloaded yesterday made me suspicious.
* arch_cpu_global_TLB_invalidate() uses tlbia now. The instruction is
  optional, but so is tlbie (how I understood it is that both exist,
  when the architecture implementation has a TLB). And the former loop
  looked just scary.
* Implemented arch_cpu_user_TLB_invalidate(). It does just the same as
  arch_cpu_global_TLB_invalidate().
* Some changes with respect to synchronization required on page table
  and segment register updates.
* Some more minor renaming. Pulled a new function
  remove_page_table_entry() out of unmap_tmap().
* In arch_vm_translation_map_init_post_area() we do now remap the page
  table into the kernel address space, if it was without before. The
  page table might actually be a good application for BAT, though.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15773 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-01 21:40:27 +00:00
Ingo Weinhold b019d8c5f3 * Renamed the static variables according to Haiku conventions.
* Renamed occurrences of ASID/asid to VSID/vsid where appropriate.
* vm_translation_map_arch_info::vsid_base is now the first usable
  VSID and doesn't need to be shifted anymore.
* Changed the VSID base shift from 4 to 3, since we need only 8 VSIDs
  per team.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15772 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-01 16:15:04 +00:00
Ingo Weinhold 8761241015 * Fixed calculation of num_pages. It came out one too small.
* Fixed several off-by-one comparisons with num_pages.
* vm_alloc_virtual_from_kernel_args() now makes sure the allocated
  region lies within the kernel address space (or is at least
  >= KERNEL_BASE).
* Simplified one or two patches.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15771 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-01 15:23:31 +00:00
Ingo Weinhold 5b35f4211e Implemented arch_debug_serial_getchar(), so we can even type something in
KDL. :-)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15770 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-01 15:09:11 +00:00
Ingo Weinhold b9b301b6c8 * Replace the arch_cpu_global_TLB_invalidate() sledge hammer in
fill_page_table_entry() by a ptesync(). Mapping the kernel heap
  took about 2 minutes here before.
* Added missing shift of the asid_base in ppc_translation_map_change_asid().
* Commented out the BAT stuff in arch_vm_translation_map_init_post_area().
  Besides that I think it won't work that way, it made the page table
  unaccessible; though I'm not sure why.
* Added a bit of documentation to the beginning of the file. Should give
  enough information to understand what happens here without further
  detailed knowledge about the architecture.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15769 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-01 15:07:53 +00:00
Ingo Weinhold 7c8af51f81 Added ptesync().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15768 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-01 14:44:29 +00:00
Ingo Weinhold 4c1fca768d Maybe I miss something, but I don't see the reason for the PPC
arch_mmu_allocate() to set the "cache inhibited" flag. One negative
effect was that for such memory the lwarx instruction (used by the
atomic_*() functions) does "... cause the system data storage error
handle to be invoked...", as the architecture specification puts it.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15759 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-30 22:10:54 +00:00
Ingo Weinhold 957a1b17eb * Introduced new build system variables
{HAIKU,HOST,TARGET}_KERNEL_PIC_{CC,LINK}FLAGS which define the
  compiler/linker flags specifying the kind of position independence
  the kernel shall have. For x86 we had and still have -fno-pic, but the
  PPC kernel has -fPIE (position independent executable) now, as we
  need to relocate it.
* The boot loader relocates the kernel now. Mostly copied the relocation
  code from the kernel ELF loader. Almost completely rewrote the PPC
  specific relocation code, though. It's more correct and more complete now
  (some things are still missing though).
* Added boot platform awareness to the kernel. Moved the generic
  Open Firmware code (openfirmware.c/h) from the boot loader to the kernel.
* The kernel PPC serial debug output is sent to the console for the time
  being.
* The PPC boot loader counts the CPUs now and allocates the kernel stacks
  (made OF device iteration a bit more flexible on the way -- the search
  can be restricted to subtree). Furthermore we really enter the kernel...
  (Yay! :-) ... and crash in the first dprintf() (in the atomic_set()
  called by acquire_spinlock()). kprintf() works, though.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15756 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-30 21:20:07 +00:00
Ingo Weinhold 8d99b63e92 Added missing PPC relocation type.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15752 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-30 19:49:42 +00:00
Ingo Weinhold be950af4df Removed unused kernel_args fields.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15746 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-30 17:56:52 +00:00
Ingo Weinhold 7022600734 Don't know what kernel_args::bootdir_addr was originally intended for,
but it's not initialized anymore.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15745 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-30 17:56:08 +00:00
Ingo Weinhold 5615edfd4d The server lazily opens the disk image now and closes and reopens it
when receiving a HELLO request. Thus it doesn't need to be restarted
when the image had been rebuilt. That was a bit annoying...


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15735 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-30 03:34:37 +00:00
Ingo Weinhold f84d7234a7 Moved jam into the buildtools modules, where it belongs.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15729 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-29 18:40:48 +00:00
Ingo Weinhold 74e7fd417e This should finally fix the spurious "No such file or directory" errors
reported from our build tools under Linux. As it seems Linux does not
translate dirent::d_ino for mount points (BeOS and Haiku do), which
caused us not to find a mount point entry in its parent directory.
Thanks to Vampyre for the hint.
Fixes bugs #73 and #76.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15726 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-29 18:25:29 +00:00
Ingo Weinhold 481b133143 Added missing wrappers for hypot() and hypotf(), fixing bug #75.
I wouldn't be surprised, if more wrappers are still missing.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15709 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-29 02:01:55 +00:00
Ingo Weinhold c83d9dad1c * platform_allocate_region() has a new boolean parameter "exactAddress"
specifying whether only the exact supplied address is acceptable. If
  false, the address is considered a hint only. It will be picked, if
  available, otherwise a greater address is tried to be acquired, and
  as last resort any address. This feature is only implemented for PPC.
  It is needed since the preferred kernel text base address 0x80000000
  might not be available (and actually isn't on my Mac mini).
* Fixed a bug in the PPC memory management code:
  is_{virtual,physical}_allocated() were checking whether the given
  range was completely contained by an existing range instead of
  checking for intersection. As a consequence we could (and did) allocate
  a range intersecting with already allocated ranges. The kernel segment
  thus overwrote OF memory for instance.
* The ELF loader makes sure that it got both text and data segment of
  the image to be loaded.

The PPC boot loader successfully loads kernel and modules now. Next
comes the hard part, I'm afraid.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15708 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-29 01:50:23 +00:00
Ingo Weinhold b566a43ec8 Reworked the PPC kernel linker script. Changed data segment alignment
in the boot loader script.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15707 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-29 01:24:02 +00:00
Ingo Weinhold 8cfaf4b974 For PPC the read/write (==data) segment is actually executable
(it contains the PLT).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15706 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-29 01:19:45 +00:00
Ingo Weinhold 68d3fc6f8f Don't allow allocation of zero sized area.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15700 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-28 20:02:34 +00:00
Ingo Weinhold ea5b67a88b Don't allocate the heap with of_claim(), but rather use
platform_allocation_region(). Since the callback stuff doesn't seem to
work, the Open Firmware didn't ask us to allocate memory in turn, and
thus we didn't know about the range that had been mapped and reused it
later.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15699 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-28 19:54:19 +00:00
Ingo Weinhold 22bc93e31c arch_mmu_allocate() translated the protection flags incorrectly
(B_WRITE_AREA to read-only).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15697 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-28 19:47:50 +00:00
Ingo Weinhold 9980540b63 Added a little server implementing the "remote disk" protocol featured
by the boot loader.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15690 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-27 22:03:27 +00:00
Ingo Weinhold d561d0ad68 Added a mini networking stack to the boot loader. It speaks basic ARP,
IP, and UDP, as well as a home brewn UDP based protocol, "remote disk",
which provides random access to a single remote file/device. The Open
Firmware flavored boot loader automatically initializes the net stack,
searches for a remote disk, and tries to boot from it, if the boot
device is a network device (e.g. when loading the boot loader via
TFTP).

This is quite nice for developing with a two-machine setup, since one
doesn't even need to install Haiku on the test machine anymore, but can
serve it directly from the development machine. When the networking
support in the kernel is working, this method could even be used to
fully boot, not just for loading kernel and initial modules.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15689 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-27 22:01:33 +00:00
Ingo Weinhold 9d577c1064 Fixed realloc(). Supplying a NULL pointer crashed. Furthermore, a size
argument value of 0 should only free the old allocation.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15688 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-27 21:36:51 +00:00
Ingo Weinhold 6470bb6152 Removed superfluous static variable I accidentially introduced.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15687 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-27 21:34:50 +00:00
Ingo Weinhold 3489b30126 Fixed some boot loader PPC BFS issues:
* bfs_inode must be packed, otherwise the structure is larger due to
  different alignment requirements.
* The off_t array returned by bfs_inode::Values() is in on-disk
  endianess. This was ignored in some places. Hope I squashed all
  occurences.
Those fixes should probably be back-ported to the kernel add-on, too.
Will do that when I get to that point in the kernel, unless someone
beats me to it.

The PPC boot loader does at least find the kernel on a BFS volume now.
Haven't dared to let it be loaded yet.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15686 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-27 21:33:11 +00:00
Ingo Weinhold 21796ee568 Added newly required functions arch_cpu_init_post_modules() and
arch_cpu_user_TLB_invalidate(). Empty at the moment; will have a look at
that later. The PPC kernel builds again, now.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15685 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-27 21:19:44 +00:00
Ingo Weinhold 31cfffdff4 Added missing include.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15684 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-27 21:17:25 +00:00
Ingo Weinhold 22a6522245 * Renamed of_call_method() to of_call_client_function() and added
of_call_method() which is actually an implementation of the
  "call-method" client function.
* of_interpret() announced one less return value than actually needed.
  Seemed to work anyway, though.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15683 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-27 21:15:56 +00:00
Ingo Weinhold 9897917b9c Added (more Be-ish) Add() methods.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15682 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-27 21:08:02 +00:00
Ingo Weinhold d0714598fd Fixed PPC build.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15679 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-27 01:51:43 +00:00
Ingo Weinhold 44c11fdbc1 Added console support functions required for the generic textual boot
menu. The menu basically works, but has a couple of problems. The
harmless ones are graphical: we get cursor artifacts when the colors
are changed, and the item selection doesn't quite look as it should.
More serious is the lack of Home/End, Page Up/Down keys. All I read from
the console is a '\0' byte when such a key is pressed. The cursor keys
work fortunately. I mapped the functionality of Page Up/Down
additionally to the Left/Right cursor keys. So the menu should be usable
at least. I guess, I'll leave it in that state; Axel wants a graphical
menu anyway.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15589 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-19 13:49:45 +00:00
Ingo Weinhold b821cecc36 Added of_interpret for interpreting arbitrary Forth code.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15588 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-19 13:40:15 +00:00
Ingo Weinhold 4c62b0919f Pulled platform independent part of the BIOS boot menu out into
platform/generic/...


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15587 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-19 13:35:01 +00:00
Ingo Weinhold 59d0807e01 Missing newline in output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15586 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-19 13:31:19 +00:00
Ingo Weinhold ccf56c61be Fixed PPC boot loader linker script.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15577 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-18 14:37:34 +00:00
Ingo Weinhold 8f75497433 Fixed endless loop.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15576 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-18 14:35:31 +00:00
Ingo Weinhold 2a1f9fe07a Rewrote KernelAddon. We were using Addon before, with the undesired side
effect that we were linking not only against the complete glue code, but
also against libroot.so. Now we explicitly link against
crtbegin.o/crtend.o only.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15545 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-15 13:01:25 +00:00
Ingo Weinhold cc094b2cb8 Added TODO.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15497 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-11 16:31:02 +00:00
Ingo Weinhold 210c204d16 Do I miss something? Why explicitly use headers/cpp?
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15496 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-11 16:26:54 +00:00
Ingo Weinhold 4612b9835c Directly use the atomic.S from libroot. This avoids needing to have a
file per architecture here.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15495 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-11 16:25:02 +00:00
Ingo Weinhold cbe35e2031 GCC 4 fix.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15494 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-11 16:22:51 +00:00
Ingo Weinhold bedeb04ec8 Forgot to check this in. GCC 4 fix.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15493 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-11 15:44:03 +00:00
Ingo Weinhold 998eb12d97 Ouch! Sometimes one simply doesn't find words... I wonder whether the
author ever checked the documentation for the function he was trying to
use.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15492 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-11 14:09:30 +00:00
Ingo Weinhold fad6687c9a Fixed PPC build.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15491 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-11 14:01:46 +00:00
Ingo Weinhold 2fee50849c GCC 4 fix.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15490 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-11 13:53:26 +00:00
Ingo Weinhold 711f8274f3 BlankLogo is also needed on PPC.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15489 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-11 13:50:20 +00:00
Ingo Weinhold d0769921ab Use atomic_set() instead of hard-coded x86 inline asm.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15488 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-11 13:44:40 +00:00
Ingo Weinhold c6745ed536 Fix build for PPC.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15487 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-11 13:34:28 +00:00
Ingo Weinhold 6e040d83ea Added __swap_{float,double} for PPC. They are probably horribly
suboptimal (if working at all) -- review is appreciated.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15486 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-11 13:26:50 +00:00
Ingo Weinhold d85fe0ec25 Compatibility functions. Actually not needed for PPC Haiku, but it's
easier to define them for now, since they are used unconditionally e.g.
in the Tracker sources.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15485 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-11 13:25:00 +00:00
Ingo Weinhold ff29286ffd Ouch, those should have been gone since the activation of new build
system.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15481 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-10 23:39:30 +00:00
Ingo Weinhold de69ef37bb Added a good deal of "#ifdef __INTEL__"s to allow compilation on PPC. As
one of the TODOs already says, the architecture specific parts should be
factored out into separate source files.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15480 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-10 23:12:49 +00:00
Ingo Weinhold fe14a904a8 * Implemented [sig]{set,long}jmp() for PPC. No idea, if it is any good,
but it compiles at least. :-)
* Pulled the architecture specific part out of <posix/setjmp.h> into
  <posix/arch/<arch>/arch_setjmp.h>.
* Moved setjmp_save_sigs.c from the x86 specific implementation into a
  "generic" sibling directory, since it is reusable (and actually used
  by the PPC implementation).
* Added generic/longjmp_return.c containing a function __longjmp_return,
  which is invoked at the end of siglongjmp(), resetting the signal mask
  and validating the return value. It is used by the PPC implementation,
  and should also be used by the x86 implementation, but I'll leave that
  to someone who's motivated enough to also test it. :-)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15479 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-10 22:56:52 +00:00
Ingo Weinhold 901f399036 * Removed libroot/posix/math completely and added the respective
functions from glibc 2.3.2. Adding those one by one is extremely
  boring and time-consuming work. We should probably just remove the
  math stuff again, add a verbatim copy of the glibc directories, and
  shuffle things around afterwards.
* Note that for x86 holds sizeof(long double) == 96. I removed the
  generic 128 bit long double functions that were in use before and
  added respective 96 bit versions to arch/x86 (or left them out, if
  they weren't used). For PPC the System V ABI spec supplement specifies
  sizeof(long double) == 128, but I had trouble configuring gcc to
  actually use that setting (looks like there simply is no support for
  TI mode for PPC 32). So we have to live with sizeof(long double) ==
  sizeof(double) == 64 for the time being.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15477 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-10 20:39:04 +00:00
Ingo Weinhold 27de84142b Empty implementations of PPC stack trace functions to make the build
system happy.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15476 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-10 20:17:49 +00:00
Ingo Weinhold b4add623a4 Fixed gcc4 build.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15475 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-10 20:16:41 +00:00
Ingo Weinhold a41a0db6f2 Solved linkage problems. Virtual destructors apparently shouldn't be defined
inline. Commented undefined virtual methods. BBitmapBuffer is still used, so
is ViewHWInterface.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15472 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-10 17:48:00 +00:00
Ingo Weinhold e695fe845d Removed atan.c. For PPC we're using the glibc implementation, for
x86 the Haiku image still builds, so it is apparently not used. I
guess it would be best to abandon our posix_math.o completely and
use the glibc math implementations instead.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15446 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-09 14:23:30 +00:00
Ingo Weinhold 379f146735 Added more missing math functions for PPC from glibc 2.3.2.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15445 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-09 14:16:39 +00:00
Ingo Weinhold 7c360a1007 Removed the x86 specific __compare_and_swap() implementation and
added a generic implementation using atomic_test_and_set().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15444 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-09 14:11:44 +00:00