Commit Graph

155 Commits

Author SHA1 Message Date
manu cb99a5f48e Implements SIOCNREAD ioctl (some kind of FIONREAD for sockets only). This
makes X11 binaries able to actually work: most of them were previously hang
in infinite loop wiaiting for data from the X server because SIOCNREAD
reported that some data where to be read whereas the X server had nothing
to say.

Tested (and works): xlogo, xterm, ghostview (IRIX build). Things are getting
interesting...
2002-03-03 20:12:17 +00:00
manu 63b308a593 FIxed typo 2002-02-23 22:43:56 +00:00
manu d2e60e82f8 Fixed various sysconf() commands 2002-02-23 22:35:15 +00:00
manu a9c374ed26 Added munmap() and mprotect() 2002-02-21 22:15:28 +00:00
manu 89e46d8a99 Reworked the o32/n32 matching scheme. IRIX uses some e_flags in the ELF
header to distinguish between o32, n32 and n64 ABIs. We now use this.
This suppress the need of the mips_option test, which had some fake positive.
This also removes the mandatory ordering of n32 vs o32 in the exec switch
(exec_conf.c)
2002-02-21 21:53:00 +00:00
manu 9d16e4d12b Added gethostid/sethostid and the HOSTID command to systeminfo() 2002-02-21 11:09:43 +00:00
manu 25e8963ed3 Fixed typo 2002-02-20 21:18:18 +00:00
manu 457750dabf Implemented irix_sys_systeminfo() 2002-02-17 22:49:53 +00:00
manu d383f72720 reworked signal handling:
- do not save/and restore registers that should not be saved and restore
- do give an accurate sigcontext pointer to the signal handler
- do use the struct sigreturna from IRIX.
This eliminates panics and hangs in certain circonstances

Also some cosmetic changes with tabs usage
2002-02-17 20:50:06 +00:00
manu 853adfc30b - implement SGI_GETSID command for syssgi()
- reworked SGI_GETPGID implementation to use the getpgid() system call instead
  of duplicating it.
2002-02-17 20:44:17 +00:00
manu 5ad92b8294 Fixed irix_blkcnt_t size (was 64 bit, changed to 32). This caused alignment
troubles in struct stat, hence giving wrong st_blocks, st_blksize and st_size
values.
2002-02-12 23:11:58 +00:00
manu bd184209e6 Correctly translate the st_rdev field in struct stat 2002-02-12 07:17:18 +00:00
manu b778bba3d3 Added system calls: getdents64/ngetdents64 2002-02-04 20:26:34 +00:00
manu 26aff33a7d Typo fix 2002-02-03 17:41:03 +00:00
manu 5c72031257 Added system calls: gettimeofday, getitimer, setitimer 2002-02-03 17:39:54 +00:00
manu 5b436803dd Removed the hack in mapelf to get libX11 loading. The new version assumes
that the load addresses in the section array are increasing, and that no
section in the array overlap with each other. IRIX proably makes the same
assumptions, but this has not been tested.

The key point with relocation is to always use the same offset for each
section. Because userland gets only the load address off the first section, it
has to assume that all the remaining sections kept the same offset with
respect to the first section. By using fixed offset instead of finding
some free space for each section, we can eliminate the libX11 load hack.
2002-02-03 17:28:19 +00:00
manu 98f3287e7d Added some system calls: gethostname, sethostname, getdomainname,
setdomainname, alarm
2002-02-03 01:21:47 +00:00
manu 4aa2e3fde7 Fixed the X11 load bug. dynamic linking now seems to be fully functionnal,
even for program with a DSO using overlapping load virtual addresses.

The fix is a mean hack, see the comments in irix_syssgi.c. It would be nice to
get uvm_map_findspace() to return the page we suggest instead of the page which
is 16384 bytes away.
2002-02-02 19:27:18 +00:00
manu 5e54c68a88 Fixed a bug introduced in the previous fix to mapelf:
we used load_psection, then ran each vmcmd and tried to relocate the failing
ones. This fails if there is two vmcmd for one section, and the second is
not a mapping (for instance a map_pagedvn and a map_zero), because the first
one gets relocated, but not the second one.

Additionnaly, it was not necessary to update the userlevel psection array:
libc stubs seems to do the job themselves.
2002-01-21 21:51:31 +00:00
manu ddd039179b Fixes the problem with libX11.so mapping by syssgi(MAPELF): the load address
for the text section of libx11.so was overlapping with other ELF sections
aloready loaded, and this resulted into an ENOMEM error.

syssgi(MAPELF) uses elf32_load_psection() from syssrc/sys/kern/exec_subr.c
The problem was never experienced with load_psection() because it only has
to load one section, hence the requested address are not already allocated.

The fix is done when the initial mapping at the default address fails by
finding a free location in the VM space using uvm_map_findspace(), and then
retrying to load the section.

Other details:
- once the ELF section has been relocated, the ELF program header must be
updated with the new address and copied back to userland. For now we always
do it, maybe we could copy it only when it was modified.
- We are able to emulate the exact address where IRIX loads libX11.so instead
of the default location
2002-01-19 14:56:02 +00:00
manu c8d430d60d missing include 2002-01-07 23:12:30 +00:00
manu 0b98511d4a Added code to match and launch n32 binaries (there is no N32 support in the
kernel yet)
2002-01-07 22:05:03 +00:00
manu 3b176652b8 Fixed wrong file name. 2002-01-06 21:43:10 +00:00
manu 365eb49355 Added compat/irix/irix_syscallnames.c 2002-01-06 21:34:30 +00:00
manu daf979dbeb Added symlink, rename and readlink 2001-12-27 11:07:23 +00:00
manu a965f74abe getpgid implemented 2001-12-27 09:31:09 +00:00
manu 2faf78e180 Reworked irix_syssgi_mapelf. It now uses elf_load_psection, and this
remove the odd bug which caused INSANE_DEBUG_IRIX to be mandatory in
order to avoid a panic when mapping libraries.
2001-12-26 22:18:25 +00:00
manu 945d746288 integrated a copy of svr4_waitsys(), which should be merged later.
This has not been fully tested, but it makes IRIX's /bin/sh able to survive
running an external command such as ls.
2001-12-26 11:04:20 +00:00
manu aeeecdfad1 Updated copyright (getdents code is from Christos, written in 1994) 2001-12-26 10:54:56 +00:00
manu 9423df444f Added accept, bind, connect, getpeername, getsockname, listen, recv, recvfrom,
recvmsg, select, send, sendmsg, sendto, setsockopt, shutdown, socket, readv,
and writev. IRIX's telnet now works.
2001-12-25 21:32:30 +00:00
manu ae9b01a907 Added getcontext/setcontext. This has not been fully tested, but it seems to
work enough for binaries that use it (eg: telnet).
Problems:
- what should we do with uc_filler?
- how to handle FP regs?
2001-12-25 19:04:18 +00:00
manu 0d7961013d Added irix_sys_lseek64() 2001-12-25 16:40:48 +00:00
manu e398957bea more UNIMPL IRIX system calls in the table... 2001-12-23 20:57:30 +00:00
manu b8f46be2f6 Added getdents/ngetdents. 2001-12-23 20:15:03 +00:00
manu aa8fce41ef implemented enough of getmountid to make commands using IRIX Universal Name
Service happy. Code in libc attempts to open files in the ns filesystem, and
then uses getmountid on failure to ensure that the ns filesystem is really
mounted. We don't emulate the ns filesystem yet, but getmountid now correctly
reports that ns is not present.
Note: It seems that the mountid of the ns filesystem should always be
00000005 00000000 00000000 7fff3000
2001-12-22 14:43:43 +00:00
manu cc381b2d11 implemented fxstat and lxstat. Fixed a bug in xstat (ino_t was wrong) 2001-12-22 12:09:20 +00:00
manu 7b2952c16e More TrustedIRIX stuff (not emulated, but we don't return EINVAL anymore) 2001-12-22 09:35:11 +00:00
manu cebd826075 more sysconf... 2001-12-08 19:29:03 +00:00
manu 4d54359755 Implemented irix_sys_xstat(). This duplicates some code already present
for svr4 compat, maybe these should be merged..
2001-12-08 18:08:04 +00:00
manu e3824c6c59 Added IRIX signal delivery 2001-12-08 11:17:37 +00:00
manu 9dfecbefdb Fixed stack setup for argument passing. argc and **argv need to be aligned
on a 16 bytes boundary. To get things done, we currently duplicate a lot of
code from copyargs(), this should be done in a nicer way.
2001-12-04 22:13:41 +00:00
manu 3225f7c7c3 One more thread related command in prctl to make dynamic linking happy 2001-12-02 18:06:59 +00:00
manu 77fa6038d9 Added errno translation 2001-12-02 16:16:57 +00:00
manu ef711afc33 Added enough of prctl emulation so that program do not crash on exit 2001-12-02 09:23:58 +00:00
manu 427b57c20e Added SGI_USE_FP_BCOPY and SGI_TOSSTSAVE commands that are also needed
for dynamic linking
2001-12-02 09:22:39 +00:00
manu cfcac1c4fb Uses svr4_mmap for mmap32 emulation. This will not implement all the
IRIX functionnality, but it should be enough to get dynamic linking working
2001-12-02 08:47:17 +00:00
manu e2898fe96b Added a bit of sysmp() emulation necessary for dynamic linking. 2001-12-02 08:30:10 +00:00
manu 0e18d4c1b0 Fixed a typo 2001-12-01 22:19:38 +00:00
manu 11ea5b82d7 Fixed a bug in vmcmdset reuse. IRIX binaries seems to pass syssgi(ELFMAP)
without crashing now.
2001-12-01 22:14:15 +00:00
manu cde20c2503 First implementation of syssgi(SGI_ELFMAP). 2001-11-30 21:56:03 +00:00
manu 7839e13a9c On IRIX, the first 88 system calls are quite plain SVR4, and the 137
remaining are IRIX specific. We know use SVR4 emulation for the first 88
system calls.
2001-11-28 12:00:53 +00:00
manu 46f63b37c1 Removed an unused line 2001-11-26 21:44:53 +00:00
manu be8254f3a8 Added code to match IRIX N32 binaries 2001-11-26 21:36:24 +00:00
lukem dab6ef8b56 add RCSIDs (including regeneration of files as appropriate) 2001-11-13 02:07:52 +00:00
manu e7a3ba084e Empty framework for upcoming work on IRIX_COMPAT 2001-09-22 18:51:35 +00:00