* Renamed remaining .c files to .cpp, and made the necessary changes to let

them compile still.
* Some cleanup in ARM's start2.cpp.
* m68k stuff is still missing, though.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37249 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2010-06-25 08:03:58 +00:00
parent 2f0e75de7b
commit b6add3ffb6
9 changed files with 88 additions and 84 deletions
+1 -1
View File
@@ -26,7 +26,7 @@ local genericPlatformSources =
KernelMergeObject boot_platform_bios_ia32.o : KernelMergeObject boot_platform_bios_ia32.o :
shell.S shell.S
start.c start.cpp
debug.cpp debug.cpp
bios.S bios.S
console.cpp console.cpp
@@ -35,8 +35,8 @@ extern void (*__ctor_end)(void);
extern uint8 __bss_start; extern uint8 __bss_start;
extern uint8 _end; extern uint8 _end;
extern int main(stage2_args *args); extern "C" int main(stage2_args *args);
void _start(void); extern "C" void _start(void);
uint32 sBootOptions; uint32 sBootOptions;
@@ -60,7 +60,7 @@ call_ctors(void)
} }
uint32 extern "C" uint32
platform_boot_options(void) platform_boot_options(void)
{ {
#if 0 #if 0
@@ -71,7 +71,7 @@ platform_boot_options(void)
} }
void extern "C" void
platform_start_kernel(void) platform_start_kernel(void)
{ {
static struct kernel_args *args = &gKernelArgs; static struct kernel_args *args = &gKernelArgs;
@@ -103,7 +103,7 @@ platform_start_kernel(void)
} }
void extern "C" void
platform_exit(void) platform_exit(void)
{ {
// reset the system using the keyboard controller // reset the system using the keyboard controller
@@ -111,7 +111,7 @@ platform_exit(void)
} }
void extern "C" void
_start(void) _start(void)
{ {
stage2_args args; stage2_args args;
@@ -4,7 +4,7 @@ SubDirC++Flags -D_BOOT_MODE -fno-rtti ;
KernelMergeObject boot_platform_openfirmware.o : KernelMergeObject boot_platform_openfirmware.o :
console.cpp console.cpp
debug.c debug.cpp
devices.cpp devices.cpp
Handle.cpp Handle.cpp
heap.cpp heap.cpp
@@ -12,7 +12,7 @@ KernelMergeObject boot_platform_openfirmware.o :
mmu.cpp mmu.cpp
network.cpp network.cpp
real_time_clock.cpp real_time_clock.cpp
start.c start.cpp
support.cpp support.cpp
video.cpp video.cpp
@@ -1,22 +1,20 @@
/* /*
* Copyright 2003, Axel Dörfler, axeld@pinc-software.de. All rights reserved. * Copyright 2003-2010, Axel Dörfler, axeld@pinc-software.de.
* Distributed under the terms of the MIT License. * Distributed under the terms of the MIT License.
*/ */
#include <stdarg.h>
#include <boot/platform.h> #include <boot/platform.h>
#include <boot/stdio.h> #include <boot/stdio.h>
#include <platform/openfirmware/openfirmware.h> #include <platform/openfirmware/openfirmware.h>
#include <stdarg.h>
/** ToDo: this works only after console_init() was called. extern "C" void
* But it probably should do something before as well... panic(const char* format, ...)
*/
void
panic(const char *format, ...)
{ {
// TODO: this works only after console_init() was called.
va_list list; va_list list;
puts("*** PANIC ***"); puts("*** PANIC ***");
@@ -29,8 +27,8 @@ panic(const char *format, ...)
} }
void extern "C" void
dprintf(const char *format, ...) dprintf(const char* format, ...)
{ {
va_list list; va_list list;
@@ -1,5 +1,5 @@
/* /*
* Copyright 2003-2005, Axel Dörfler, axeld@pinc-software.de. All rights reserved. * Copyright 2003-2010, Axel Dörfler, axeld@pinc-software.de.
* Distributed under the terms of the MIT License. * Distributed under the terms of the MIT License.
*/ */
@@ -21,8 +21,9 @@
#define HEAP_SIZE 65536 #define HEAP_SIZE 65536
void _start(uint32 _unused1, uint32 _unused2, void *openFirmwareEntry); extern "C" void _start(uint32 _unused1, uint32 _unused2,
void start(void *openFirmwareEntry); void *openFirmwareEntry);
extern "C" void start(void *openFirmwareEntry);
// GCC defined globals // GCC defined globals
extern void (*__ctor_list)(void); extern void (*__ctor_list)(void);
@@ -79,7 +80,7 @@ determine_machine(void)
} }
void extern "C" void
platform_start_kernel(void) platform_start_kernel(void)
{ {
addr_t kernelEntry = gKernelArgs.kernel_image.elf_header.e_entry; addr_t kernelEntry = gKernelArgs.kernel_image.elf_header.e_entry;
@@ -100,14 +101,14 @@ platform_start_kernel(void)
} }
void extern "C" void
platform_exit(void) platform_exit(void)
{ {
of_interpret("reset-all", 0, 0); of_interpret("reset-all", 0, 0);
} }
uint32 extern "C" uint32
platform_boot_options(void) platform_boot_options(void)
{ {
// ToDo: implement me! // ToDo: implement me!
@@ -115,7 +116,7 @@ platform_boot_options(void)
} }
void extern "C" void
_start(uint32 _unused1, uint32 _unused3, void *openFirmwareEntry) _start(uint32 _unused1, uint32 _unused3, void *openFirmwareEntry)
{ {
// According to the PowerPC bindings, OpenFirmware should have created // According to the PowerPC bindings, OpenFirmware should have created
@@ -129,7 +130,7 @@ _start(uint32 _unused1, uint32 _unused3, void *openFirmwareEntry)
} }
void extern "C" void
start(void *openFirmwareEntry) start(void *openFirmwareEntry)
{ {
char bootargs[512]; char bootargs[512];
@@ -139,7 +140,7 @@ start(void *openFirmwareEntry)
args.heap_size = HEAP_SIZE; args.heap_size = HEAP_SIZE;
args.arguments = NULL; args.arguments = NULL;
of_init(openFirmwareEntry); of_init((int (*)(void*))openFirmwareEntry);
// check for arguments // check for arguments
if (of_getprop(gChosen, "bootargs", bootargs, sizeof(bootargs)) != OF_FAILED) { if (of_getprop(gChosen, "bootargs", bootargs, sizeof(bootargs)) != OF_FAILED) {
@@ -169,4 +170,3 @@ start(void *openFirmwareEntry)
of_exit(); of_exit();
} }
+1 -1
View File
@@ -25,7 +25,7 @@ local genericPlatformSources =
; ;
local bios_ia32_src = local bios_ia32_src =
start.c start.cpp
debug.cpp debug.cpp
bios.S bios.S
console.cpp console.cpp
+3 -3
View File
@@ -9,7 +9,7 @@ UsePrivateHeaders [ FDirName graphics common ] ;
UsePrivateHeaders [ FDirName graphics vesa ] ; UsePrivateHeaders [ FDirName graphics vesa ] ;
UsePrivateHeaders [ FDirName storage ] ; UsePrivateHeaders [ FDirName storage ] ;
# XXX: FIXME! move this to arch/arm ! # TODO: move this to arch/arm !
UsePrivateHeaders [ FDirName kernel arch arm board $(TARGET_BOOT_BOARD) ] ; UsePrivateHeaders [ FDirName kernel arch arm board $(TARGET_BOOT_BOARD) ] ;
@@ -36,8 +36,8 @@ local genericPlatformSources =
KernelMergeObject boot_platform_u-boot.o : KernelMergeObject boot_platform_u-boot.o :
shell.S shell.S
start2.c start2.cpp
debug.c debug.cpp
console.cpp console.cpp
serial.cpp serial.cpp
devices.cpp devices.cpp
@@ -1,5 +1,5 @@
/* /*
* Copyright 2004-2007, Axel Dörfler, axeld@pinc-software.de. * Copyright 2004-2010, Axel Dörfler, axeld@pinc-software.de.
* Distributed under the terms of the MIT License. * Distributed under the terms of the MIT License.
*/ */
@@ -14,8 +14,8 @@
/*! This works only after console_init() was called. /*! This works only after console_init() was called.
*/ */
void extern "C" void
panic(const char *format, ...) panic(const char* format, ...)
{ {
va_list list; va_list list;
@@ -35,8 +35,8 @@ panic(const char *format, ...)
} }
void extern "C" void
dprintf(const char *format, ...) dprintf(const char* format, ...)
{ {
char buffer[512]; char buffer[512];
va_list list; va_list list;
@@ -54,4 +54,3 @@ dprintf(const char *format, ...)
if (platform_boot_options() & BOOT_OPTION_DEBUG_OUTPUT) if (platform_boot_options() & BOOT_OPTION_DEBUG_OUTPUT)
fprintf(stderr, "%s", buffer); fprintf(stderr, "%s", buffer);
} }
@@ -1,5 +1,5 @@
/* /*
* Copyright 2003-2008, Axel Dörfler, axeld@pinc-software.de. * Copyright 2003-2010, Axel Dörfler, axeld@pinc-software.de.
* Distributed under the terms of the MIT License. * Distributed under the terms of the MIT License.
*/ */
@@ -7,6 +7,7 @@
#include "serial.h" #include "serial.h"
#include "console.h" #include "console.h"
#include "cpu.h" #include "cpu.h"
#include "mmu.h"
#include "smp.h" #include "smp.h"
#include "uimage.h" #include "uimage.h"
#include "keyboard.h" #include "keyboard.h"
@@ -17,26 +18,43 @@
#include <boot/stage2.h> #include <boot/stage2.h>
#include <arch/cpu.h> #include <arch/cpu.h>
#include <string.h> #include <string.h>
#define HEAP_SIZE (128 * 1024) #define HEAP_SIZE (128 * 1024)
typedef struct uboot_arm_gd {
struct board_data *bd;
uint32 flags;
uint32 baudrate;
uint32 have_console;
uint32 reloc_off;
uint32 env_addr;
uint32 env_valid;
uint32 fb_base;
} uboot_arm_gd;
// GCC defined globals // GCC defined globals
extern void (*__ctor_list)(void); extern void (*__ctor_list)(void);
extern void (*__ctor_end)(void); extern void (*__ctor_end)(void);
extern uint8 __bss_start; extern uint8 __bss_start;
extern uint8 _end; extern uint8 _end;
extern int main(stage2_args *args); extern "C" int main(stage2_args *args);
extern void _start(void); extern "C" void _start(void);
extern int start_raw(int argc, char **argv); extern "C" int start_raw(int argc, const char **argv);
extern void dump_uimage(struct image_header *image); extern "C" void dump_uimage(struct image_header *image);
extern struct image_header *gUImage; extern struct image_header *gUImage;
extern uboot_arm_gd *gUBootGlobalData;
extern uint8 gUBootOS;
uint32 sBootOptions; register volatile uboot_arm_gd *gGD asm ("r8");
static uint32 sBootOptions;
static void static void
@@ -58,14 +76,14 @@ call_ctors(void)
/* needed for libgcc unwind XXX */ /* needed for libgcc unwind XXX */
void extern "C" void
abort(void) abort(void)
{ {
panic("abort"); panic("abort");
} }
void extern "C" void
platform_start_kernel(void) platform_start_kernel(void)
{ {
static struct kernel_args *args = &gKernelArgs; static struct kernel_args *args = &gKernelArgs;
@@ -83,11 +101,11 @@ platform_start_kernel(void)
dprintf("kernel entry at %lx\n", dprintf("kernel entry at %lx\n",
gKernelArgs.kernel_image.elf_header.e_entry); gKernelArgs.kernel_image.elf_header.e_entry);
asm("MOV sp, %[adr]"::[adr] "r" (stackTop));
asm( "MOV sp, %[adr]"::[adr] "r" (stackTop) ); asm("MOV r0, %[args]"::[args] "r" (args));
asm( "MOV r0, %[args]"::[args] "r" (args) ); asm("MOV r1, #0"::);
asm( "MOV r1, #0"::); asm("MOV pc, %[entry]"::[entry] "r"
asm( "MOV pc, %[entry]"::[entry] "r" (gKernelArgs.kernel_image.elf_header.e_entry)); (gKernelArgs.kernel_image.elf_header.e_entry));
/* asm("movl %0, %%eax; " // move stack out of way /* asm("movl %0, %%eax; " // move stack out of way
"movl %%eax, %%esp; " "movl %%eax, %%esp; "
@@ -103,47 +121,34 @@ platform_start_kernel(void)
} }
void extern "C" void
platform_exit(void) platform_exit(void)
{ {
} }
typedef struct uboot_arm_gd { extern "C" int
struct board_data *bd; start_netbsd(struct board_info *bd, struct image_header *image,
uint32 flags; const char *consdev, const char *cmdline)
uint32 baudrate;
uint32 have_console;
uint32 reloc_off;
uint32 env_addr;
uint32 env_valid;
uint32 fb_base;
} uboot_arm_gd;
register volatile uboot_arm_gd *gGD asm ("r8");
extern uboot_arm_gd *gUBootGlobalData;
extern uint8 gUBootOS;
int
start_netbsd(struct board_info *bd, struct image_header *image, const char *consdev,
const char *cmdline)
{ {
const char *argv[] = { "haiku", cmdline }; const char *argv[] = { "haiku", cmdline };
int argc = 1; int argc = 1;
if (cmdline) if (cmdline)
argc++; argc++;
gUImage = image; gUImage = image;
start_raw(argc, argv); return start_raw(argc, argv);
} }
int
extern "C" int
start_linux(int argc, int archnum, void *atags) start_linux(int argc, int archnum, void *atags)
{ {
return 1;
} }
int extern "C" int
start_raw(int argc, char **argv) start_raw(int argc, const char **argv)
{ {
stage2_args args; stage2_args args;
@@ -154,18 +159,18 @@ start_raw(int argc, char **argv)
args.arguments = NULL; args.arguments = NULL;
args.platform.boot_tgz_data = NULL; args.platform.boot_tgz_data = NULL;
args.platform.boot_tgz_size = 0; args.platform.boot_tgz_size = 0;
serial_init(); serial_init();
console_init(); console_init();
cpu_init(); cpu_init();
// if we get passed a uimage, try to find the second blob // if we get passed a uimage, try to find the second blob
if (gUImage && image_multi_getimg(gUImage, 1, &args.platform.boot_tgz_data, if (gUImage != NULL
&args.platform.boot_tgz_size)) && image_multi_getimg(gUImage, 1, (uint32*)&args.platform.boot_tgz_data,
dprintf("Found boot tgz @ %p, %d bytes\n", args.platform.boot_tgz_data, &args.platform.boot_tgz_size)) {
args.platform.boot_tgz_size); dprintf("Found boot tgz @ %p, %" B_PRIu32 " bytes\n",
args.platform.boot_tgz_data, args.platform.boot_tgz_size);
}
{ //DEBUG: { //DEBUG:
int i; int i;
@@ -175,7 +180,7 @@ start_raw(int argc, char **argv)
dprintf("os: %d\n", gUBootOS); dprintf("os: %d\n", gUBootOS);
dprintf("gd @ %p\n", gGD); dprintf("gd @ %p\n", gGD);
dprintf("gd->bd @ %p\n", gGD->bd); dprintf("gd->bd @ %p\n", gGD->bd);
dprintf("fb_base %p\n", gGD->fb_base); dprintf("fb_base %p\n", (void*)gGD->fb_base);
dprintf("uimage @ %p\n", gUImage); dprintf("uimage @ %p\n", gUImage);
if (gUImage) if (gUImage)
dump_uimage(gUImage); dump_uimage(gUImage);
@@ -193,9 +198,11 @@ start_raw(int argc, char **argv)
serial_enable(); serial_enable();
main(&args); main(&args);
return 0;
} }
uint32
extern "C" uint32
platform_boot_options(void) platform_boot_options(void)
{ {
return sBootOptions; return sBootOptions;