Commit Graph

102 Commits

Author SHA1 Message Date
Axel Dörfler
2760c4cd73 * load_program() (and probably others) could call delete_image() with a NULL
pointer - which it now handles gracefully.
* This also fixes starting the runtime loader directly: it no longer crashes
  but will just return an error.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22409 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-10-02 13:17:19 +00:00
Marcus Overhagen
5aa7b7b6da Fix broken build and the compiler warning "enumeral mismatch in conditional expression".
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22332 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-27 13:33:47 +00:00
Ingo Weinhold
1873b4b37e Give the runtime loader a chance to reinit its semaphore after fork().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21886 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-11 00:14:26 +00:00
Axel Dörfler
4bef3723a1 * Followed Ingo's suggestion and send the message manually in the runtime loader;
therefore, we could remove the ugly defines from KMessage again, and compile it
  with KMESSAGE_CONTAINER_ONLY.
* Added KMessage::SetDeliveryInfo() to be able to send messages with a correct
  header.
* Fixed a bug in KMessage::SendTo() that would not send the senderTeam when passing
  a negative value for the parameter, but override it when passing in a valid
  value.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21740 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-29 21:36:49 +00:00
Axel Dörfler
74c0424a43 * Added a mechanism to retrieve a BMessage with eventual error descriptions
for _kern_load_image().
* Added KMessage to the runtime_loader (a bit hacky, though) - it will use
  it to deliver the above mentioned functionality.
* load_dependencies() did return the wrong status code in case a library
  was missing; now it returns B_MISSING_LIBRARY.
* load_dependencies() will now try to load all dependencies when a report
  message is requested; therefore, all missing libraries are listed.
* Renamed uspace_program_args to user_space_program_args.
* The kernel filled in various members of the user_space_program_args structure
  unsafely, ie. was not using user_memcpy().
* Renamed some local variables in team.c to better fit our style guide (ie.
  uargs to userArgs).
* Changed Tracker to use the new _kern_load_image() variant on Haiku to retrieve
  and report all missing libraries. This fixes bug #1324.
* Adapted kernel_cpp.cpp to the runtime loader as well; the latter will now
  compile with _LOADER_MODE defined.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21715 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-27 02:32:19 +00:00
Axel Dörfler
93c2088983 * Removed all user paths from the default runtime_loader paths.
* $PATH is now set differently when booted in safe mode (just like LIBRARY_PATH,
  and ADDON_PATH already were).
* This closes ticket #1103.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21406 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-06-13 23:12:00 +00:00
Ingo Weinhold
46f4d84912 * Got rid of sLoadingImages. It was always empty.
* The previous symbol resolution code was incorrect. It would search all
  loaded images in the order they had been loaded. Thus an add-on would
  possibly see a symbol of an earlier loaded add-on. Now we search
  recursively starting with the respective root image (executable or
  add-on).
* Added BeOS style symbol resolution and made it the default. A symbol
  undefined in an image is only searched in its direct dependencies.
  Fixes bug #889 (BeOS apps crashing under Haiku when opening a file
  panel).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21290 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-06-01 18:09:32 +00:00
Ingo Weinhold
0c0fea5de2 elf.c -> elf.cpp
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21283 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-06-01 06:46:57 +00:00
Travis Geiselbrecht
831486a2d3 Turn the assembly optimized memcpy (simple rep movsd) back on for x86. Had to hack around the make system a bit, and the result is pretty nasty, specifically due to the amount of places in the system where various targets poke their fingers into the libroot directory.
The solution is less than optimal, but should work for now.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20722 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-16 06:17:14 +00:00
Axel Dörfler
f0a5326923 * Made all exported safe against NULL pointers, this fixes bug #485.
* Slightly improved error codes.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19941 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-01-24 14:32:05 +00:00
Axel Dörfler
f5fc6356c4 Fixed a GCC 4 warning.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19059 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-10-13 11:37:00 +00:00
Axel Dörfler
57d9d07781 * Fixed another big bug that the new heap revealed: when loading an image failed,
it was never removed from the sLoadedImages list - and thus, would happily
  access invalid memory.
* get_next_image_dependency() is now using the global lock as well.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19047 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-10-11 17:50:06 +00:00
Axel Dörfler
5cfd3a1592 The heap now grows if needed; this allows VLC to load all of its plugins.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19046 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-10-11 17:45:13 +00:00
Axel Dörfler
6f0994d460 * Switched to the boot loader's heap implementation.
* This sane heap revealed a bunch of bugs (like sLoadedImageCount not being
  maintained that was used for various allocations).
* If the allocation of the image fails, opening the app will now just fail
  instead of crashing of overwriting random data (IOW VLC will now load
  okay, but cannot load some of its add-ons anymore).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19045 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-10-11 16:02:43 +00:00
Axel Dörfler
3862cbfeee Fixed a potential buffer overflow error.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19044 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-10-11 13:54:51 +00:00
Axel Dörfler
e979f4bac7 get_image_symbol() and get_nth_image_symbol() now accept NULL arguments for the
location and type parameters.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19010 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-10-06 12:17:06 +00:00
Axel Dörfler
0d7ec13a82 Simplified a bit, removed unneeded function stubs.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19009 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-10-06 11:46:23 +00:00
Axel Dörfler
7f4e6824df Added a private call to get the dependencies of a loaded image. This will be used
to determine linkage of libnet.so vs. libsocket.so/libbind.so in the libnetwork.so.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19008 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-10-06 11:40:20 +00:00
Axel Dörfler
fe7f3a2f1d Now supports symbolic links correctly, and no longer loads the same shared
library twice.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17929 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-06-27 00:07:42 +00:00
Axel Dörfler
0cd3c003d1 While investigating how our deals with doubled shared libs, I found two
issues:
* Our glue code was broken after all - it allowed Haiku apps to start under
  BeOS (and vice versa), but the initialization/termination functions were
  called with an invalid image ID - on *both* sides! As it turns out, the
  Be glue code did *something* with %ebx, but certainly didn't put the image
  ID in there, but just passed it on the stack, as we did before (just in
  the wrong order...). Therefore, the arch_call_init_term stuff is not
  necessary.
* When unloading add-ons, their termination functions were never called, as
  the image (for get_image_symbol()) was already made inaccessible, and
  therefore the symbol couldn't be found.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17928 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-06-26 22:09:13 +00:00
Axel Dörfler
3728e62e88 Unlike the ELF specs, BeOS ignores the path of shared objects specified by the DT_NEEDED
element. We now soften the rule that the absolute path should be used, and give libraries
another chance and search them in the standard search paths. This fixes bug #601 and lets
Becasso run on Haiku.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17669 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-05-31 15:59:42 +00:00
Axel Dörfler
d7b5138a70 Some more GCC 4.1.0 fixes, more to come (tomorrow).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17501 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-05-17 21:40:29 +00:00
Axel Dörfler
9c243392a4 Even short scripts are B_NOT_AN_EXECUTABLE, and not B_BAD_VALUE.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17472 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-05-16 01:01:17 +00:00
Axel Dörfler
9a6bbd514e Once libroot's getenv() is available, that one will be used instead of the one built in.
This makes the runtime_loader able to adopt path changes properly.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17380 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-05-08 23:50:09 +00:00
Jérôme Duval
ce91cbc42d now checks if a search entry is a directory and returns B_IS_A_DIRECTORY in case it's the sole entry for this name (btw getenv(PATH) doesn't return the current PATH)
fixes bug #569


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17372 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-05-08 20:07:01 +00:00
Axel Dörfler
0f0234a5d0 We no longer return B_OK in test_executable() for executables that don't
define an entry point (like shared libraries).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17022 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-06 06:16:20 +00:00
Axel Dörfler
2ed4099289 Renamed the linker script to runtime_loader.ld to match the rest.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16937 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-30 18:10:59 +00:00
Axel Dörfler
af3e5cd947 Renamed our runtime loader from rld.so to runtime_loader, and moved it into beos/system/.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16936 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-30 18:08:51 +00:00
Axel Dörfler
76cd9b1961 Renamed runtime loader source files.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16935 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-30 16:29:53 +00:00
Axel Dörfler
87a9cb2d70 * No longer tries to start an application that doesn't export an entry point != NULL.
This fixes bug #360.
* Also removed no longer necessary undefining of _KERNEL_MODE, as we're now built
  correctly.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16930 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-30 14:17:14 +00:00
Axel Dörfler
93c49610b5 Improved error output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16837 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-19 14:34:21 +00:00
Axel Dörfler
aa9383c1f2 And the final build fix: the boot loader was using libroot's strlen.o object
file (which does no longer exist) - it now uses the one from the kernel as a
quick fix.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16821 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-17 01:18:20 +00:00
Ingo Weinhold
bae7848e66 We were trashing non-volatile register ebx in the arch_call_{init,term}()
functions. Weird things could happen due to that. E.g. application crashes when 
unloading add-ons.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15994 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-17 02:21:17 +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
Stephan Aßmus
71d2531d52 terminate_program() is now actually called - forgot to commit this before...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15849 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-06 11:09:44 +00:00
Stephan Aßmus
34a9556215 Made our glue code compatible to BeOS again. IOW executables compiled for Haiku will
now run under BeOS as well (as long as they don't use any functions that are not
available under R5).
The solution is a bit messy, but we have to live with it :-)
The runtime loader now patches the __gRuntimeLoader symbol in libroot.so to point
to its exported structure instead of passing it to the init functions as an
argument.
(Hax0red by axeld and bonefish on stippi's assimilated machine -- resistence is futile)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15848 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-06 03:48:11 +00:00
Axel Dörfler
a31b66b768 Added tracing for calling the init routines.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15694 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-28 14:47:51 +00:00
Ingo Weinhold
353d20c0c5 * libroot and the runtime loader are no longer built with kernel rules.
* New rule Ld, analogously to KernelLd.
* Added StaticLibrary parameter for supplying additional objects.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15191 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-27 13:31:50 +00:00
Ingo Weinhold
38f6264454 Reorganized building of kernel, boot loader, and libroot.
Each component is built in the respective subdirectory now
and no longer in src/system/Jamfile.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15184 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-27 00:27:19 +00:00
Ingo Weinhold
df23b0271e Corrected the sizes of the text and data segments reported to the
kernel. They are now the sizes of the allocated areas, which might be a
bit more than the actually used size, but at least they are not
potentially less, as they were before. This could have unexpected
effects like the Tracker not finding its resources... 


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14977 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-17 00:27:42 +00:00
Ingo Weinhold
9cc1e772dc More debug output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14963 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-16 17:22:55 +00:00
Ingo Weinhold
ad512dbeac Print error code when relocation failed.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14958 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-16 15:21:54 +00:00
Ingo Weinhold
338b8dc301 Merged changes from branch build_system_redesign at revision 14573.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14574 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-29 16:27:43 +00:00
Marcus Overhagen
794df3bf25 This removes the inline assembly code for find_thread
from OS.h, sorry for triggering a complete rebuild.
To avoid doing a syscall for find_thread(0), the assembly
version is now in libroot. For BeOS R5 compatibility, 
_kfind_thread_ is retained. This will fix some compile 
problems, and provides a cleaner OS.h for future Haiku
versions.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14014 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-20 23:57:11 +00:00
Axel Dörfler
90f1dccb72 Our ELF loader now gets something like error handling - it may still have some
(memory) holes, but failing to load an add-on should no longer exit your
application. Reported by Korli.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13945 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-12 20:52:46 +00:00
Ingo Weinhold
7f53c2cc96 We now make sure, that images always have absolute paths, otherwise
their path could be invalid in other contexts (e.g. the debug server might
be unabled to find them). This seems to be what BeOS does, too.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13796 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-07-21 23:51:02 +00:00
Axel Dörfler
09105be0f8 Now uses the TO_PAGE_SIZE() macro already defined to round the debug area to a page size multiple.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13713 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-07-17 12:54:41 +00:00
Ingo Weinhold
28e0d4cd19 The runtime loader now creates a debug area through which other teams can
access a team's internal loader data.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13697 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-07-16 21:07:17 +00:00
Axel Dörfler
43ed6aa0db The "shebang" handler is supposed to parse arguments, too - we now do that.
Also, when the line is too long, E2BIG is returned.
Thanks to Korli who pointed me to this: http://homepages.cwi.nl/~aeb/std/shebang/


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13114 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-06-14 12:39:06 +00:00
Axel Dörfler
be22452f3b Apparently, both load_image() and exec*() support running scripts. We do that
now as well.
Also, both functions will now test if the executable exists and is valid; that
way, load_image()/exec*() can catch many errors without having to create a new
team (or erase the current one - an exec*("my invalid app") might now return
with an error).
The runtime linker now exports a function to test executables that is aware
of the search paths, and will also check user permissions upfront.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13113 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-06-14 11:23:29 +00:00
Axel Dörfler
718b5114e0 This should fix the build after all the kernel/system renaming.
If anything is still broken (and was not before :)), please shout.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12361 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-04-13 13:59:17 +00:00
Axel Dörfler
5af32e7526 Renamed src/kernel to src/system.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12359 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-04-13 13:06:35 +00:00