Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/mips/mips Use the new ELF macros and structures fro...
details: https://anonhg.NetBSD.org/src/rev/57db25aa4a83
branches: trunk
changeset: 477672:57db25aa4a83
user: simonb <simonb%NetBSD.org@localhost>
date: Wed Oct 27 11:54:53 1999 +0000
description:
Use the new ELF macros and structures from <sys/exec_elf.h> and not the
old ones from <mips/elf.h>.
XXX: If there's no MIPS API issues, {pmax,pica,newsmips,hpcmips,mips}/elf.h
can be thrown away...
diffstat:
sys/arch/mips/mips/cpu_exec.c | 88 +++++++++++++++++++++---------------------
1 files changed, 45 insertions(+), 43 deletions(-)
diffs (202 lines):
diff -r 9abf4a15671f -r 57db25aa4a83 sys/arch/mips/mips/cpu_exec.c
--- a/sys/arch/mips/mips/cpu_exec.c Wed Oct 27 10:16:00 1999 +0000
+++ b/sys/arch/mips/mips/cpu_exec.c Wed Oct 27 11:54:53 1999 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: cpu_exec.c,v 1.20 1999/04/24 08:10:38 simonb Exp $ */
+/* $NetBSD: cpu_exec.c,v 1.21 1999/10/27 11:54:53 simonb Exp $ */
/*
* Copyright (c) 1992, 1993
@@ -58,8 +58,7 @@
#include <machine/reg.h>
#include <mips/regnum.h> /* symbolic register indices */
-#include <machine/elf.h>
-/*XXX*/
+int mips_elf_makecmds __P((struct proc *, struct exec_package *));
int exec_elf_mips32_makecmds __P((struct proc *, struct exec_package *));
@@ -81,10 +80,10 @@
/* If COMPAT_09 is defined, allow loading of old-style 4.4bsd a.out
executables. */
#ifdef COMPAT_09
- struct bsd_aouthdr *hdr = (struct bsd_aouthdr *)epp -> ep_hdr;
+ struct bsd_aouthdr *hdr = (struct bsd_aouthdr *)epp->ep_hdr;
/* Only handle paged files (laziness). */
- if (hdr -> a_magic != BSD_ZMAGIC)
+ if (hdr->a_magic != BSD_ZMAGIC)
#endif
{
/* If that failed, try old NetBSD-1.1 elf format */
@@ -95,18 +94,18 @@
#ifdef COMPAT_09
- epp -> ep_taddr = 0x1000;
- epp -> ep_entry = hdr -> a_entry;
- epp -> ep_tsize = hdr -> a_text;
- epp -> ep_daddr = epp -> ep_taddr + hdr -> a_text;
- epp -> ep_dsize = hdr -> a_data + hdr -> a_bss;
+ epp->ep_taddr = 0x1000;
+ epp->ep_entry = hdr->a_entry;
+ epp->ep_tsize = hdr->a_text;
+ epp->ep_daddr = epp->ep_taddr + hdr->a_text;
+ epp->ep_dsize = hdr->a_data + hdr->a_bss;
/*
* check if vnode is in open for writing, because we want to
* demand-page out of it. if it is, don't do it, for various
* reasons
*/
- if ((hdr -> a_text != 0 || hdr -> a_data != 0)
+ if ((hdr->a_text != 0 || hdr->a_data != 0)
&& epp->ep_vp->v_writecount != 0) {
#ifdef DIAGNOSTIC
if (epp->ep_vp->v_flag & VTEXT)
@@ -117,17 +116,17 @@
epp->ep_vp->v_flag |= VTEXT;
/* set up command for text segment */
- NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_pagedvn, hdr -> a_text,
+ NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_pagedvn, hdr->a_text,
epp->ep_taddr, epp->ep_vp, 0, VM_PROT_READ|VM_PROT_EXECUTE);
/* set up command for data segment */
- NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_pagedvn, hdr -> a_data,
- epp->ep_daddr, epp->ep_vp, hdr -> a_text,
+ NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_pagedvn, hdr->a_data,
+ epp->ep_daddr, epp->ep_vp, hdr->a_text,
VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE);
/* set up command for bss segment */
- NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_zero, hdr -> a_bss,
- epp->ep_daddr + hdr -> a_data, NULLVP, 0,
+ NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_zero, hdr->a_bss,
+ epp->ep_daddr + hdr->a_data, NULLVP, 0,
VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE);
return exec_aout_setup_stack(p, epp);
@@ -180,34 +179,37 @@
struct proc *p;
struct exec_package *epp;
{
- struct ehdr *ex = (struct ehdr *)epp -> ep_hdr;
- struct phdr ph;
+ Elf32_Ehdr *ex = (Elf32_Ehdr *)epp->ep_hdr;
+ Elf32_Phdr ph;
int i, error;
size_t resid;
/* Make sure we got enough data to check magic numbers... */
- if (epp -> ep_hdrvalid < sizeof (struct ehdr)) {
+ if (epp->ep_hdrvalid < sizeof (Elf32_Ehdr)) {
#ifdef DIAGNOSTIC
- if (epp -> ep_hdrlen < sizeof (struct ehdr))
- printf ("mips_elf_makecmds: execsw hdrsize too short!\n");
+ if (epp->ep_hdrlen < sizeof (Elf32_Ehdr))
+ printf ("mips_elf_makecmds: execsw hdrsize too short!\n");
#endif
return ENOEXEC;
}
/* See if it's got the basic elf magic number leadin... */
- if (ex -> elf_magic [0] != 127
- || bcmp ("ELF", &ex -> elf_magic [1], 3)) {
+ if (bcmp(ex->e_ident, ELFMAG, SELFMAG) != 0) {
return ENOEXEC;
}
- /* XXX: Check other magic numbers here. */
+
+ /* XXX: Check other magic numbers here. */
+ if (ex->e_ident[EI_CLASS] != ELFCLASS32) {
+ return ENOEXEC;
+ }
/* See if we got any program header information... */
- if (!ex -> phoff || !ex -> phcount) {
+ if (!ex->e_phoff || !ex->e_phnum) {
return ENOEXEC;
}
/* Set the entry point... */
- epp -> ep_entry = ex -> entry;
+ epp->ep_entry = ex->e_entry;
/*
* Check if vnode is open for writing, because we want to
@@ -227,12 +229,12 @@
epp->ep_daddr = 0;
epp->ep_dsize = 0;
- for (i = 0; i < ex -> phcount; i++) {
+ for (i = 0; i < ex->e_phnum; i++) {
#ifdef DEBUG
/*printf("obsolete elf: mapping %x %x %x\n", resid);*/
#endif
- if ((error = vn_rdwr(UIO_READ, epp -> ep_vp, (caddr_t)&ph,
- sizeof ph, ex -> phoff + i * sizeof ph,
+ if ((error = vn_rdwr(UIO_READ, epp->ep_vp, (caddr_t)&ph,
+ sizeof ph, ex->e_phoff + i * sizeof ph,
UIO_SYSSPACE, IO_NODELOCKED,
p->p_ucred, &resid, p))
!= 0)
@@ -243,21 +245,21 @@
}
/* We only care about loadable sections... */
- if (ph.type == PT_LOAD) {
+ if (ph.p_type == PT_LOAD) {
int prot = VM_PROT_READ | VM_PROT_EXECUTE;
int residue;
unsigned vaddr, offset, length;
- vaddr = ph.vaddr;
- offset = ph.offset;
- length = ph.filesz;
- residue = ph.memsz - ph.filesz;
+ vaddr = ph.p_vaddr;
+ offset = ph.p_offset;
+ length = ph.p_filesz;
+ residue = ph.p_memsz - ph.p_filesz;
- if (ph.flags & PF_W) {
+ if (ph.p_flags & PF_W) {
prot |= VM_PROT_WRITE;
- if (!epp->ep_daddr || vaddr < epp -> ep_daddr)
+ if (!epp->ep_daddr || vaddr < epp->ep_daddr)
epp->ep_daddr = vaddr;
- epp->ep_dsize += ph.memsz;
+ epp->ep_dsize += ph.p_memsz;
/* Read the data from the file... */
NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_readvn,
length, vaddr,
@@ -271,21 +273,21 @@
if (residue) {
vaddr &= ~(NBPG - 1);
offset &= ~(NBPG - 1);
- length = roundup (length + ph.vaddr
+ length = roundup (length + ph.p_vaddr
- vaddr, NBPG);
- residue = (ph.vaddr + ph.memsz)
+ residue = (ph.p_vaddr + ph.p_memsz)
- (vaddr + length);
}
} else {
vaddr &= ~(NBPG - 1);
offset &= ~(NBPG - 1);
- length = roundup (length + ph.vaddr - vaddr,
+ length = roundup (length + ph.p_vaddr - vaddr,
NBPG);
- residue = (ph.vaddr + ph.memsz)
+ residue = (ph.p_vaddr + ph.p_memsz)
- (vaddr + length);
- if (!epp->ep_taddr || vaddr < epp -> ep_taddr)
+ if (!epp->ep_taddr || vaddr < epp->ep_taddr)
epp->ep_taddr = vaddr;
- epp->ep_tsize += ph.memsz;
+ epp->ep_tsize += ph.p_memsz;
/* Map the data from the file... */
NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_pagedvn,
length, vaddr,
Home |
Main Index |
Thread Index |
Old Index