Moved "__progname" from startup code to libroot_init.c (because BeOS start_dyn.o
doesn't export it), initialization has also moved to initialize_before(). Added BeOS compatibility stubs to allow execution of BeOS native apps - added comments to every function; some of them might be removed later on again. Also moved "environ" to posix/stdlib/env.c for the same reason. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@2446 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -1,21 +1,71 @@
|
|||||||
/*
|
/*
|
||||||
** Copyright 2002, Manuel J. Petit. All rights reserved.
|
** Copyright 2003, Axel Dörfler, [email protected]. All rights reserved.
|
||||||
** Distributed under the terms of the NewOS License.
|
** Distributed under the terms of the OpenBeOS License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include <user_runtime.h>
|
#include <user_runtime.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
|
||||||
extern void __init__dlfcn(struct uspace_program_args const *args);
|
|
||||||
extern void __init__image(struct uspace_program_args const *args);
|
extern void __init__image(struct uspace_program_args const *args);
|
||||||
|
extern void __init__dlfcn(struct uspace_program_args const *args);
|
||||||
|
|
||||||
void initialize_before(image_id imageID, struct uspace_program_args const *args);
|
void initialize_before(image_id imageID, struct uspace_program_args const *args);
|
||||||
|
|
||||||
|
char *__progname = NULL;
|
||||||
|
|
||||||
|
thread_id __main_thread_id;
|
||||||
|
char **argv_save;
|
||||||
|
// needed for BeOS compatibility - they get set in the original
|
||||||
|
// BeOS startup code, but they won't be initialized when the
|
||||||
|
// OpenBeOS startup code is used.
|
||||||
|
|
||||||
|
|
||||||
|
// ToDo: these functions are defined in libgcc - this one is included in
|
||||||
|
// libroot.so in BeOS, but we probably don't want to do that.
|
||||||
|
// Since we don't yet have libgcc at all, it's defined here for now
|
||||||
|
// so that BeOS executables will find them.
|
||||||
|
// Remove them later!
|
||||||
|
|
||||||
|
|
||||||
|
void __deregister_frame_info(void);
|
||||||
|
void
|
||||||
|
__deregister_frame_info(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void __register_frame_info(void);
|
||||||
|
void
|
||||||
|
__register_frame_info(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
initialize_before(image_id imageID, struct uspace_program_args const *args)
|
initialize_before(image_id imageID, struct uspace_program_args const *args)
|
||||||
{
|
{
|
||||||
__init__dlfcn(args);
|
char *programPath = args->argv[0];
|
||||||
__init__image(args);
|
if (programPath) {
|
||||||
|
if ((__progname = strrchr(programPath, '/')) == NULL)
|
||||||
|
__progname = programPath;
|
||||||
|
else
|
||||||
|
__progname++;
|
||||||
|
}
|
||||||
|
|
||||||
|
__init__image(args);
|
||||||
|
__init__dlfcn(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void _init_c_library_(void);
|
||||||
|
void
|
||||||
|
_init_c_library_(void)
|
||||||
|
{
|
||||||
|
// This function is called from the BeOS start_dyn.o - so it's called once
|
||||||
|
// for every application that was compiled under BeOS.
|
||||||
|
// Our libroot functions are already initialized above, so we don't have to
|
||||||
|
// do anything here.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -64,3 +64,13 @@ __init__image(struct uspace_program_args const *args)
|
|||||||
{
|
{
|
||||||
gRuntimeLinker = args->rld_export;
|
gRuntimeLinker = args->rld_export;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void _call_init_routines_(void);
|
||||||
|
void
|
||||||
|
_call_init_routines_(void)
|
||||||
|
{
|
||||||
|
// This is called by the original BeOS startup code.
|
||||||
|
// We don't need it, because our loader already does the job, right?
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -146,3 +146,11 @@ snooze_until(bigtime_t time, int timeBase)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void _thread_do_exit_notification(void);
|
||||||
|
void
|
||||||
|
_thread_do_exit_notification(void)
|
||||||
|
{
|
||||||
|
// this is called from the original BeOS startup code
|
||||||
|
// has probably to do with the on_exit stuff.
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,9 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
|
||||||
|
char **environ = NULL;
|
||||||
|
|
||||||
|
|
||||||
int setenv(const char *name, const char *value, int overwrite)
|
int setenv(const char *name, const char *value, int overwrite)
|
||||||
{
|
{
|
||||||
return sys_setenv(name, value, overwrite);
|
return sys_setenv(name, value, overwrite);
|
||||||
|
|||||||
Reference in New Issue
Block a user