summaryrefslogtreecommitdiffstats
path: root/libexec/rtld-aout/i386/mdprologue.S
diff options
context:
space:
mode:
Diffstat (limited to 'libexec/rtld-aout/i386/mdprologue.S')
-rw-r--r--libexec/rtld-aout/i386/mdprologue.S64
1 files changed, 18 insertions, 46 deletions
diff --git a/libexec/rtld-aout/i386/mdprologue.S b/libexec/rtld-aout/i386/mdprologue.S
index 43640c6..1de0f72 100644
--- a/libexec/rtld-aout/i386/mdprologue.S
+++ b/libexec/rtld-aout/i386/mdprologue.S
@@ -27,7 +27,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: mdprologue.S,v 1.4 1994/06/15 22:40:49 rich Exp $
+ * $Id: mdprologue.S,v 1.7 1994/12/04 07:42:44 mycroft Exp $
*/
/*
@@ -35,7 +35,6 @@
*/
#include <sys/syscall.h>
-#define LCALL(x,y) .byte 0x9a ; .long y; .word x
.text
.globl _binder, _binder_entry
@@ -46,76 +45,49 @@
_rtl: # crt0 calls us here
pushl %ebp # Allocate stack frame
- movl %esp, %ebp
+ movl %esp,%ebp
pushl %ebx
+
call 1f # PIC function prologue
1:
popl %ebx
- addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx
+ addl $_GLOBAL_OFFSET_TABLE_+[.-1b],%ebx
- movl 12(%ebp), %eax # Extract data from interface structure
+ movl 12(%ebp),%eax # Extract data from interface structure
movl (%eax),%eax # base address of ld.so (first field)
# setup arguments for rtld()
- movl (%ebx), %ecx # 1st entry in GOT is our __DYNAMIC
- addl %eax, %ecx # add load address
+ movl (%ebx),%ecx # 1st entry in GOT is our __DYNAMIC
+ addl %eax,%ecx # add load address
pushl %ecx # 3rd arg
pushl 12(%ebp) # 2nd arg == &crt.
pushl 8(%ebp) # 1st arg == version
- addl _rtld@GOT(%ebx), %eax # relocate address of function
+ addl _rtld@GOT(%ebx),%eax # relocate address of function
call %eax # _rtld(version, crtp, DYNAMIC)
addl $12,%esp # pop arguments
- movl -4(%ebp), %ebx # restore %ebx
- leave # remove stack frame,
- ret # let's rock
+ popl %ebx
+ leave # remove stack frame
+ ret
# First call to a procedure generally comes through here for
# binding.
_binder_entry:
pushl %ebp # setup a stack frame
- movl %esp, %ebp
+ movl %esp,%ebp
pusha # save all regs
- movl $0, %eax # clear
- movl 4(%ebp), %esi # return address in PLT
- movw (%esi), %ax # get hold of relocation number
- subl $6, %esi # make it point to the jmpslot
+ xorl %eax,%eax # clear
+ movl 4(%ebp),%esi # return address in PLT
+ movw (%esi),%ax # get hold of relocation number
+ subl $6,%esi # make it point to the jmpslot
pushl %eax # pushd arguments
pushl %esi #
call _binder@PLT # _binder(rpc, index)
- addl $8, %esp # pop arguments
- movl %eax, 4(%ebp) # return value from _binder() == actual
+ addl $8,%esp # pop arguments
+ movl %eax,4(%ebp) # return value from _binder() == actual
# address of function
popa # restore regs
leave # remove our stack frame
ret
-
- # Special system call stubs which return real and effective user and group
- # id's. Saves overhead of making separate calls for each.
- # !! Relies on compatability option in BSD 4.three-and-a-half
-
- .globl _getreuid, _getregid
-_getreuid:
- lea SYS_getuid, %eax
- LCALL(7,0)
- jc out
- movl 4(%esp), %ecx # get 1st arg
- movl %eax, (%ecx) # put value in it
- movl 8(%esp), %ecx # same for 2nd arg
- movl %edx, (%ecx) #
- ret # done
-
-_getregid:
- lea SYS_getgid, %eax
- LCALL(7,0)
- jc out
- movl 4(%esp), %ecx # get 1st arg
- movl %eax, (%ecx) # put value in it
- movl 8(%esp), %ecx # same for 2nd arg
- movl %edx, (%ecx) #
- ret # done
-
-out: jmp cerror@PLT # Call common error routine
-
OpenPOWER on IntegriCloud