summaryrefslogtreecommitdiffstats
path: root/sys/i386/ibcs2/imgact_coff.c
diff options
context:
space:
mode:
authorswallace <swallace@FreeBSD.org>1995-10-10 17:33:19 +0000
committerswallace <swallace@FreeBSD.org>1995-10-10 17:33:19 +0000
commit5668a5f30b8fbc1b006b74162ab6e6d8e41ae048 (patch)
treeddc366d665718e8dd5fcfff4aa17b371aea627b9 /sys/i386/ibcs2/imgact_coff.c
parent3d99fa02c6f51d2b360b70cb65220e18115759f8 (diff)
downloadFreeBSD-src-5668a5f30b8fbc1b006b74162ab6e6d8e41ae048.zip
FreeBSD-src-5668a5f30b8fbc1b006b74162ab6e6d8e41ae048.tar.gz
Change alternate space base name from /emul/ibcs2 to /compat/ibcs2,
in line with linux alt space of /compat/linux. This was pointed out by Stefan Esser. In cheching alt space for libraries in imgact_coff.c, use const ibcs2_emul_path instead of its own local string. Also do a proper malloc of temp name according to MAXPATHLEN.
Diffstat (limited to 'sys/i386/ibcs2/imgact_coff.c')
-rw-r--r--sys/i386/ibcs2/imgact_coff.c44
1 files changed, 26 insertions, 18 deletions
diff --git a/sys/i386/ibcs2/imgact_coff.c b/sys/i386/ibcs2/imgact_coff.c
index 2318f7d..31c8ecf 100644
--- a/sys/i386/ibcs2/imgact_coff.c
+++ b/sys/i386/ibcs2/imgact_coff.c
@@ -53,7 +53,6 @@ extern int exec_coff_imgact __P((struct image_params *iparams));
static int load_coff_section __P((struct vmspace *vmspace, struct vnode *vp, vm_offset_t offset, caddr_t vmaddr, size_t memsz, size_t filsz, vm_prot_t prot));
-
static int
load_coff_section(vmspace, vp, offset, vmaddr, memsz, filsz, prot)
struct vmspace *vmspace;
@@ -380,23 +379,32 @@ exec_coff_imgact(iparams)
foff)) {
return ENOEXEC;
}
- for (j = off; j < scns[i].s_size + off; j++) {
- char *libname;
- char libbuf[40];
-
- libname = buf + j + 4 * *(long*)(buf + j + 4);
- j += 4* *(long*)(buf + j);
-
- DPRINTF(("%s(%d): shared library %s\n",
- __FILE__, __LINE__, libname));
- strcpy(libbuf, "/emul/ibcs2");
- strcpy(&libbuf[11], libname);
- error = coff_load_file(iparams->proc, libbuf);
- if (error)
- error = coff_load_file(iparams->proc, libname);
- if (error)
- break;
- }
+ if(scns[i].s_size) {
+ char *libbuf;
+ int emul_path_len = strlen(ibcs2_emul_path);
+
+ libbuf = malloc(MAXPATHLEN + emul_path_len,
+ M_TEMP, M_WAITOK);
+ strcpy(libbuf, ibcs2_emul_path);
+
+ for (j = off; j < scns[i].s_size + off; j++) {
+ char *libname;
+
+ libname = buf + j + 4 * *(long*)(buf + j + 4);
+ j += 4* *(long*)(buf + j);
+
+ DPRINTF(("%s(%d): shared library %s\n",
+ __FILE__, __LINE__, libname));
+ strcpy(&libbuf[emul_path_len], libname);
+ error = coff_load_file(iparams->proc, libbuf);
+ if (error)
+ error = coff_load_file(iparams->proc,
+ libname);
+ if (error)
+ break;
+ }
+ free(libbuf, M_TEMP);
+ }
if (vm_map_remove(kernel_map,
(vm_offset_t) buf,
(vm_offset_t) buf + len))
OpenPOWER on IntegriCloud