diff options
Diffstat (limited to 'usr/src/cmd/sgs/rtld.4.x/rtldlib.s')
-rw-r--r-- | usr/src/cmd/sgs/rtld.4.x/rtldlib.s | 145 |
1 files changed, 0 insertions, 145 deletions
diff --git a/usr/src/cmd/sgs/rtld.4.x/rtldlib.s b/usr/src/cmd/sgs/rtld.4.x/rtldlib.s deleted file mode 100644 index dcaf82ac45..0000000000 --- a/usr/src/cmd/sgs/rtld.4.x/rtldlib.s +++ /dev/null @@ -1,145 +0,0 @@ -! CDDL HEADER START -! -! The contents of this file are subject to the terms of the -! Common Development and Distribution License (the "License"). -! You may not use this file except in compliance with the License. -! -! You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE -! or http://www.opensolaris.org/os/licensing. -! See the License for the specific language governing permissions -! and limitations under the License. -! -! When distributing Covered Code, include this CDDL HEADER in each -! file and include the License file at usr/src/OPENSOLARIS.LICENSE. -! If applicable, add the following below this CDDL HEADER, with the -! fields enclosed by brackets "[]" replaced with your own identifying -! information: Portions Copyright [yyyy] [name of copyright owner] -! -! CDDL HEADER END -! -! Copyright 2010 Sun Microsystems, Inc. All rights reserved. -! Use is subject to license terms. -! -! SPARC support routines for 4.x compatibility dynamic linker. - -#include <sys/asm_linkage.h> ! N.B.: although this is the 4.x -#include <sys/syscall.h> ! compatibility stuff, it actually - ! runs only on the SVR4 base, and - ! is compiled in an SVR4 .h environment - -#define AT_FDCWD 0xffd19553 - -! ld.so bootstrap. Called from crt0 of a dynamically linked program with: -! %i0: version number (always 1) -! %i1: address of crt0 structure, which contains: -! +0 base address of where we are mapped -! +4 open file descriptor for /dev/zero -! +8 open file descriptor for ld.so -! +c a.out _DYNAMIC address -! +10 environment strings -! +14 break address for adb/dbx - -start_rtld: - save %sp,-SA(MINFRAME),%sp ! build frame -L1: - call 1f ! get absolute address of _GOT_ - nop -1: - sethi %hi(__GLOBAL_OFFSET_TABLE_ - (L1 - 1b)), %l7 -L2: - or %l7, %lo(__GLOBAL_OFFSET_TABLE_ - (L1 - L2)), %l7 - add %l7, %o7, %l7 - mov %i0, %o0 ! pass version through - add %fp, %i1, %l0 ! get interface pointer - mov %l0, %o1 ! ptr to interface structure - ld [%l0], %l2 ! address where ld.so is mapped in - ld [%l7], %l1 ! ptr to ld.so first entry in globtable - add %l2, %l1, %o2 ! relocate ld.so _DYNAMIC - add %fp, 0xd8, %o3 ! point to arg count (is it safe?) - ld [%l7 + _rtld], %g1 ! manually fix pic reference to rtld - add %g1, %l2, %g1 ! by adding offset to GOT entry - jmpl %g1, %o7 ! go there - nop ! delay - mov 0,%o0 - mov %o0,%i0 - ret - restore - - -! -! aout_reloc_write -! Update a relocation offset, the value replaces any original -! value in the relocation offset. -! - - .global _aout_reloc_write - -_aout_reloc_write: - st %o1, [%o0] ! Store value in the offset - retl - iflush %o0 ! Flush instruction memory - - -! Special system call stubs to save system call overhead - - .global _open, _mmap, _munmap, _read, _write, _lseek, _close - .global _fstat, _sysconfig, __exit -_open: ! open(path, oflags, mode) => - mov %o2, %o3 ! openat(AT_FDCWD, path, oflag, mode) - mov %o1, %o2 - mov %o0, %o1 - sethi %hi(AT_FDCWD), %o0 - or %o0, %lo(AT_FDCWD), %o0 - ba __syscall - mov SYS_openat, %g1 - -_mmap: - sethi %hi(0x80000000), %g1 ! MAP_NEW - or %g1, %o3, %o3 - ba __syscall - mov SYS_mmap, %g1 - -_munmap: - ba __syscall - mov SYS_munmap, %g1 - -_read: - ba __syscall - mov SYS_read, %g1 - -_write: - ba __syscall - mov SYS_write, %g1 - -_lseek: - ba __syscall - mov SYS_lseek, %g1 - -_close: - ba __syscall - mov SYS_close, %g1 - -_fstat: ! fstat(fd, statb) => - mov %g0, %o3 ! fstatat(fd, NULL, statb, 0) - mov %o1, %o2 - mov %g0, %o1 - ba __syscall - mov SYS_fstatat, %g1 - -_sysconfig: - ba __syscall - mov SYS_sysconfig, %g1 - -__exit: - mov SYS_exit, %g1 - -__syscall: - t 0x8 ! call the system call - bcs __err_exit ! test for error - nop - retl ! return - nop - -__err_exit: - retl ! return - mov -1, %o0 |