Age | Commit message (Collapse) | Author | Lines |
|
the main motivation for this change is to aid in debugging. since the
main program's entry point is also named _start, it was difficult to
set breakpoints or quickly identify which _start execution stopped in.
|
|
|
|
|
|
two actual issues: one is that __dynlink no longer wants/needs a GOT
pointer argument, so the code to generate that argument can be
removed. the other issue was that in the i386 code, argc/argv were
being loaded into registers that would be call-clobbered, then copied
to preserved registers, rather than just being loaded into the proper
call-preserved registers to begin with.
this cleanup is in preparation for adding new dynamic linker
functionality (ability to explicitly invoke the dynamic linker to run
a program).
|
|
the return address was being truncated to 32 bits, preventing the
dlsym code from determining which module contains the calling code.
|
|
the asm wrapper is needed to get the return address without
compiler-specific extensions.
|
|
leaving it uninitialized caused unpredictable crashes or worse due to
calling an indeterminate function pointer.
|
|
some notes:
- library search path is hard coded
- x86_64 code is untested and may not work
- dlopen/dlsym is not yet implemented
- relocations in read-only memory won't work
|