Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
a922abe4
Commit
a922abe4
authored
Apr 13, 2003
by
Martin Schwidefsky
Committed by
Linus Torvalds
Apr 13, 2003
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[PATCH] s390/s390x unification (1/7)
Merge s390x and s390 to one architecture.
parent
0bde4b78
Changes
10
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
1539 additions
and
54 deletions
+1539
-54
Makefile
Makefile
+3
-1
arch/s390/Kconfig
arch/s390/Kconfig
+64
-33
arch/s390/Makefile
arch/s390/Makefile
+18
-4
arch/s390/boot/Makefile
arch/s390/boot/Makefile
+8
-9
arch/s390/defconfig
arch/s390/defconfig
+4
-2
arch/s390/kernel/Makefile
arch/s390/kernel/Makefile
+21
-5
arch/s390/kernel/binfmt_elf32.c
arch/s390/kernel/binfmt_elf32.c
+214
-0
arch/s390/kernel/compat_exec.c
arch/s390/kernel/compat_exec.c
+93
-0
arch/s390/kernel/compat_exec_domain.c
arch/s390/kernel/compat_exec_domain.c
+30
-0
arch/s390/kernel/compat_ioctl.c
arch/s390/kernel/compat_ioctl.c
+1084
-0
No files found.
Makefile
View file @
a922abe4
...
@@ -33,7 +33,9 @@ KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
...
@@ -33,7 +33,9 @@ KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
# then ARCH is assigned, getting whatever value it gets normally, and
# then ARCH is assigned, getting whatever value it gets normally, and
# SUBARCH is subsequently ignored.
# SUBARCH is subsequently ignored.
SUBARCH
:=
$(
shell
uname
-m
|
sed
-e
s/i.86/i386/
-e
s/sun4u/sparc64/
-e
s/arm.
*
/arm/
-e
s/sa110/arm/
)
SUBARCH
:=
$(
shell
uname
-m
|
sed
-e
s/i.86/i386/
-e
s/sun4u/sparc64/
\
-e
s/arm.
*
/arm/
-e
s/sa110/arm/
\
-e
s/s390x/s390/
)
ARCH
:=
$(SUBARCH)
ARCH
:=
$(SUBARCH)
# Remove hyphens since they have special meaning in RPM filenames
# Remove hyphens since they have special meaning in RPM filenames
...
...
arch/s390/Kconfig
View file @
a922abe4
...
@@ -7,10 +7,6 @@ config MMU
...
@@ -7,10 +7,6 @@ config MMU
bool
bool
default y
default y
config UID16
bool
default y
config RWSEM_GENERIC_SPINLOCK
config RWSEM_GENERIC_SPINLOCK
bool
bool
...
@@ -26,18 +22,29 @@ mainmenu "Linux Kernel Configuration"
...
@@ -26,18 +22,29 @@ mainmenu "Linux Kernel Configuration"
config ARCH_S390
config ARCH_S390
bool
bool
default y
default y
help
Select this option, if you want to run the Kernel on one of IBM's
mainframes of the S/390 generation. You should have installed the
s390-compiler released by IBM (based on gcc-2.95.1) before.
source "init/Kconfig"
config UID16
bool
default y
depends on ARCH_S390X = 'n'
source "init/Kconfig"
menu "Base setup"
menu "Base setup"
comment "Processor type and features"
comment "Processor type and features"
config ARCH_S390X
bool "64 bit kernel"
help
Select this option if you have a 64 bit IBM zSeries machine
and want to use the 64 bit addressing mode.
config ARCH_S390_31
bool
depends on ARCH_S390X = 'n'
default y
config SMP
config SMP
bool "Symmetric multi-processing support"
bool "Symmetric multi-processing support"
---help---
---help---
...
@@ -51,32 +58,15 @@ config SMP
...
@@ -51,32 +58,15 @@ config SMP
singleprocessor machines. On a singleprocessor machine, the kernel
singleprocessor machines. On a singleprocessor machine, the kernel
will run faster if you say N here.
will run faster if you say N here.
Note that if you say Y here and choose architecture "586" or
"Pentium" under "Processor family", the kernel will not work on 486
architectures. Similarly, multiprocessor kernels for the "PPro"
architecture may not work on all Pentium based boards.
People using multiprocessor machines who say Y here should also say
Y to "Enhanced Real Time Clock Support", below. The "Advanced Power
Management" code will be disabled if you say Y here.
See also the <file:Documentation/smp.tex>,
See also the <file:Documentation/smp.tex>,
<file:Documentation/smp.txt>, <file:Documentation/i386/IO-APIC.txt>,
<file:Documentation/smp.txt> and the SMP-HOWTO available at
<file:Documentation/nmi_watchdog.txt> and the SMP-HOWTO available at
<http://www.linuxdoc.org/docs.html#howto>.
<http://www.linuxdoc.org/docs.html#howto>.
If you don't know what to do here, say N.
Even if you don't know what to do here, say Y.
config MATHEMU
bool "IEEE FPU emulation"
help
This option is required for IEEE compliant floating point arithmetic
on the Alpha. The only time you would ever not say Y is to say M in
order to debug the code. Say Y unless you know what you are doing.
config NR_CPUS
config NR_CPUS
int "Maximum number of CPUs (2-32)"
int "Maximum number of CPUs (2-32)"
depends on SMP
depends on SMP
&& ARCH_S390X = 'n'
default "32"
default "32"
help
help
This allows you to specify the maximum number of CPUs which this
This allows you to specify the maximum number of CPUs which this
...
@@ -86,6 +76,47 @@ config NR_CPUS
...
@@ -86,6 +76,47 @@ config NR_CPUS
This is purely to save memory - each supported CPU adds
This is purely to save memory - each supported CPU adds
approximately eight kilobytes to the kernel image.
approximately eight kilobytes to the kernel image.
config NR_CPUS
int "Maximum number of CPUs (2-64)"
depends on SMP && ARCH_S390X
default "64"
help
This allows you to specify the maximum number of CPUs which this
kernel will support. The maximum supported value is 64 and the
minimum value which makes sense is 2.
This is purely to save memory - each supported CPU adds
approximately sixteen kilobytes to the kernel image.
config MATHEMU
bool "IEEE FPU emulation"
depends on ARCH_S390X = n
help
This option is required for IEEE compliant floating point arithmetic
on older S/390 machines. Say Y unless you know your machine doesn't
need this.
config S390_SUPPORT
bool "Kernel support for 31 bit emulation"
depends on ARCH_S390X
help
Select this option if you want to enable your system kernel to
handle system-calls from ELF binaries for 31 bit ESA. This option
(and some other stuff like libraries and such) is needed for
executing 31 bit applications. It is safe to say "Y".
config COMPAT
bool
depends on S390_SUPPORT
default y
config BINFMT_ELF32
tristate "Kernel support for 31 bit ELF binaries"
depends on S390_SUPPORT
help
This allows you to run 32-bit Linux/ELF binaries on your zSeries
in 64 bit mode. Everybody wants this; say Y.
comment "I/O subsystem configuration"
comment "I/O subsystem configuration"
config MACHCHK_WARNING
config MACHCHK_WARNING
...
@@ -144,15 +175,15 @@ choice
...
@@ -144,15 +175,15 @@ choice
prompt "IPL method generated into head.S"
prompt "IPL method generated into head.S"
depends on IPL
depends on IPL
default IPL_TAPE
default IPL_TAPE
config IPL_TAPE
bool "tape"
help
help
Select "tape" if you want to IPL the image from a Tape.
Select "tape" if you want to IPL the image from a Tape.
Select "vm_reader" if you are running under VM/ESA and want
Select "vm_reader" if you are running under VM/ESA and want
to IPL the image from the emulated card reader.
to IPL the image from the emulated card reader.
config IPL_TAPE
bool "tape"
config IPL_VM
config IPL_VM
bool "vm_reader"
bool "vm_reader"
...
...
arch/s390/Makefile
View file @
a922abe4
...
@@ -13,14 +13,28 @@
...
@@ -13,14 +13,28 @@
# Copyright (C) 1994 by Linus Torvalds
# Copyright (C) 1994 by Linus Torvalds
#
#
ifdef
CONFIG_ARCH_S390_31
LDFLAGS
:=
-m
elf_s390
LDFLAGS
:=
-m
elf_s390
OBJCOPYFLAGS
:=
-O
binary
LDFLAGS_vmlinux
:=
-e
start
LDFLAGS_BLOB
:=
--format
binary
--oformat
elf32-s390
LDFLAGS_BLOB
:=
--format
binary
--oformat
elf32-s390
CFLAGS
+=
-m31
UTS_MACHINE
:=
s390
endif
ifdef
CONFIG_ARCH_S390X
LDFLAGS
:=
-m
elf64_s390
MODFLAGS
+=
-fpic
-D__PIC__
LDFLAGS_BLOB
:=
--format
binary
--oformat
elf64-s390
CFLAGS
+=
-m64
UTS_MACHINE
:=
s390x
endif
CFLAGS
+=
-pipe
-fno-strength-reduce
-finline-limit
=
10000
-Wno-sign-compare
OBJCOPYFLAGS
:=
-O
binary
LDFLAGS_vmlinux
:=
-e
start
CFLAGS
+=
-pipe
-fno-strength-reduce
-finline-limit-10000
-Wno-sign-compare
head-y
:=
arch
/
$(ARCH)
/kernel/head.o
arch
/
$(ARCH)
/kernel/init_task.o
head-$(CONFIG_ARCH_S390_31)
+=
arch
/
$(ARCH)
/kernel/head.o
head-$(CONFIG_ARCH_S390X)
+=
arch
/
$(ARCH)
/kernel/head64.o
head-y
+=
arch
/
$(ARCH)
/kernel/init_task.o
core-y
+=
arch
/
$(ARCH)
/mm/
arch
/
$(ARCH)
/kernel/
core-y
+=
arch
/
$(ARCH)
/mm/
arch
/
$(ARCH)
/kernel/
libs-y
+=
arch
/
$(ARCH)
/lib/
libs-y
+=
arch
/
$(ARCH)
/lib/
...
...
arch/s390/boot/Makefile
View file @
a922abe4
...
@@ -2,19 +2,18 @@
...
@@ -2,19 +2,18 @@
# Makefile for the linux s390-specific parts of the memory manager.
# Makefile for the linux s390-specific parts of the memory manager.
#
#
targets
:=
image listing
COMPILE_VERSION
:=
__linux_compile_version_id__
`
hostname
|
\
tr
-c
'[0-9A-Za-z]'
'_'
`
__
`
date
|
\
tr
-c
'[0-9A-Za-z]'
'_'
`
_t
EXTRA_CFLAGS
:=
-DCOMPILE_VERSION
=
$(COMPILE_VERSION)
-gstabs
-I
.
EXTRA_AFLAGS
:=
-traditional
EXTRA_AFLAGS
:=
-traditional
quiet_cmd_listing
=
OBJDUMP
$@
cmd_listing
=
$(OBJDUMP)
--disassemble
--disassemble-all
\
targets
:=
image
--disassemble-zeroes
--reloc
vmlinux
>
$@
$(obj)/image
:
vmlinux FORCE
$(obj)/image
:
vmlinux FORCE
$(
call
if_changed,objcopy
)
$(
call
if_changed,objcopy
)
$(obj)/listing
:
vmlinux FORCE
$(
call
if_changed,listing
)
install
:
$(CONFIGURE) $(obj)/image
install
:
$(CONFIGURE) $(obj)/image
sh
-x
$(obj)
/install.sh
$(KERNELRELEASE)
$(obj)
/image
\
sh
-x
$(obj)
/install.sh
$(KERNELRELEASE)
$(obj)
/image
\
System.map Kerntypes
"
$(INSTALL_PATH)
"
System.map Kerntypes
"
$(INSTALL_PATH)
"
arch/s390/defconfig
View file @
a922abe4
...
@@ -2,9 +2,9 @@
...
@@ -2,9 +2,9 @@
# Automatically generated make config: don't edit
# Automatically generated make config: don't edit
#
#
CONFIG_MMU=y
CONFIG_MMU=y
CONFIG_UID16=y
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
CONFIG_ARCH_S390=y
CONFIG_ARCH_S390=y
CONFIG_UID16=y
#
#
# Code maturity level options
# Code maturity level options
...
@@ -36,9 +36,11 @@ CONFIG_KMOD=y
...
@@ -36,9 +36,11 @@ CONFIG_KMOD=y
#
#
# Processor type and features
# Processor type and features
#
#
# CONFIG_ARCH_S390X is not set
CONFIG_ARCH_S390_31=y
CONFIG_SMP=y
CONFIG_SMP=y
CONFIG_MATHEMU=y
CONFIG_NR_CPUS=32
CONFIG_NR_CPUS=32
CONFIG_MATHEMU=y
#
#
# I/O subsystem configuration
# I/O subsystem configuration
...
...
arch/s390/kernel/Makefile
View file @
a922abe4
...
@@ -2,17 +2,33 @@
...
@@ -2,17 +2,33 @@
# Makefile for the linux kernel.
# Makefile for the linux kernel.
#
#
extra-y
:=
head.o init_task.o
EXTRA_AFLAGS
:=
-traditional
EXTRA_AFLAGS
:=
-traditional
obj-y
:=
entry.o
bitmap.o traps.o time.o process.o
\
obj-y
:=
bitmap.o traps.o time.o process.o
\
setup.o sys_s390.o ptrace.o signal.o cpcmd.o ebcdic.o
\
setup.o sys_s390.o ptrace.o signal.o cpcmd.o ebcdic.o
\
semaphore.o reipl.o s390_ext.o debug.o
semaphore.o s390_ext.o debug.o
extra-$(CONFIG_ARCH_S390_31)
+=
head.o
extra-$(CONFIG_ARCH_S390X)
+=
head64.o
extra-y
+=
init_task.o
obj-$(CONFIG_MODULES)
+=
s390_ksyms.o module.o
obj-$(CONFIG_MODULES)
+=
s390_ksyms.o module.o
obj-$(CONFIG_SMP)
+=
smp.o
obj-$(CONFIG_SMP)
+=
smp.o
obj-$(CONFIG_S390_SUPPORT)
+=
compat_linux.o compat_signal.o
\
compat_ioctl.o compat_wrapper.o
\
compat_exec.o compat_exec_domain.o
obj-$(CONFIG_BINFMT_ELF32)
+=
binfmt_elf32.o
obj-$(CONFIG_ARCH_S390_31)
+=
entry.o reipl.o
obj-$(CONFIG_ARCH_S390X)
+=
entry64.o reipl64.o
ifdef
CONFIG_ARCH_S390X
$(obj)%.o
:
$(patsubst arch/s390/%
,
arch/s390x/%
,
$(src))%.c
$(
call
if_changed_dep,cc_o_c
)
endif
#
#
#
Kernel debugging
#
This is just to get the dependencies...
#
#
obj-$(CONFIG_REMOTE_DEBUG)
+=
gdb-stub.o
#gdb-low.o
binfmt_elf32.o
:
$(TOPDIR)/fs/binfmt_elf.c
arch/s390/kernel/binfmt_elf32.c
0 → 100644
View file @
a922abe4
/*
* Support for 32-bit Linux for S390 ELF binaries.
*
* Copyright (C) 2000 IBM Deutschland Entwicklung GmbH, IBM Corporation
* Author(s): Gerhard Tonn (ton@de.ibm.com)
*
* Heavily inspired by the 32-bit Sparc compat code which is
* Copyright (C) 1995, 1996, 1997, 1998 David S. Miller (davem@redhat.com)
* Copyright (C) 1995, 1996, 1997, 1998 Jakub Jelinek (jj@ultra.linux.cz)
*/
#define __ASMS390_ELF_H
#include <linux/time.h>
/*
* These are used to set parameters in the core dumps.
*/
#define ELF_CLASS ELFCLASS32
#define ELF_DATA ELFDATA2MSB
#define ELF_ARCH EM_S390
/*
* This is used to ensure we don't load something for the wrong architecture.
*/
#define elf_check_arch(x) \
(((x)->e_machine == EM_S390 || (x)->e_machine == EM_S390_OLD) \
&& (x)->e_ident[EI_CLASS] == ELF_CLASS)
/* ELF register definitions */
#define NUM_GPRS 16
#define NUM_FPRS 16
#define NUM_ACRS 16
#define TASK31_SIZE (0x80000000UL)
/* For SVR4/S390 the function pointer to be registered with `atexit` is
passed in R14. */
#define ELF_PLAT_INIT(_r, load_addr) \
do { \
_r->gprs[14] = 0; \
set_thread_flag(TIF_31BIT); \
} while(0)
#define USE_ELF_CORE_DUMP
#define ELF_EXEC_PAGESIZE 4096
/* This is the location that an ET_DYN program is loaded if exec'ed. Typical
use of this is to invoke "./ld.so someprog" to test out a new version of
the loader. We need to make sure that it is out of the way of the program
that it will "exec", and that there is sufficient room for the brk. */
#define ELF_ET_DYN_BASE (TASK31_SIZE / 3 * 2)
/* Wow, the "main" arch needs arch dependent functions too.. :) */
/* regs is struct pt_regs, pr_reg is elf_gregset_t (which is
now struct_user_regs, they are different) */
#define ELF_CORE_COPY_REGS(pr_reg, regs) \
{ \
int i; \
memcpy(&pr_reg.psw.mask, ®s->psw.mask, 4); \
memcpy(&pr_reg.psw.addr, ((char*)®s->psw.addr)+4, 4); \
for(i=0; i<NUM_GPRS; i++) \
pr_reg.gprs[i] = regs->gprs[i]; \
for(i=0; i<NUM_ACRS; i++) \
pr_reg.acrs[i] = regs->acrs[i]; \
pr_reg.orig_gpr2 = regs->orig_gpr2; \
}
/* This yields a mask that user programs can use to figure out what
instruction set this CPU supports. */
#define ELF_HWCAP (0)
/* This yields a string that ld.so will use to load implementation
specific libraries for optimization. This is more specific in
intent than poking at uname or /proc/cpuinfo.
For the moment, we have only optimizations for the Intel generations,
but that could change... */
#define ELF_PLATFORM (NULL)
#define SET_PERSONALITY(ex, ibcs2) \
do { \
if (ibcs2) \
set_personality(PER_SVR4); \
else if (current->personality != PER_LINUX32) \
set_personality(PER_LINUX); \
} while (0)
#include "compat_linux.h"
typedef
_s390_fp_regs32
elf_fpregset_t
;
typedef
struct
{
_psw_t32
psw
;
__u32
gprs
[
__NUM_GPRS
];
__u32
acrs
[
__NUM_ACRS
];
__u32
orig_gpr2
;
}
s390_regs32
;
typedef
s390_regs32
elf_gregset_t
;
#include <asm/processor.h>
#include <linux/module.h>
#include <linux/config.h>
#include <linux/elfcore.h>
#include <linux/binfmts.h>
#include <linux/compat.h>
int
setup_arg_pages32
(
struct
linux_binprm
*
bprm
);
#define elf_prstatus elf_prstatus32
struct
elf_prstatus32
{
struct
elf_siginfo
pr_info
;
/* Info associated with signal */
short
pr_cursig
;
/* Current signal */
u32
pr_sigpend
;
/* Set of pending signals */
u32
pr_sighold
;
/* Set of held signals */
pid_t
pr_pid
;
pid_t
pr_ppid
;
pid_t
pr_pgrp
;
pid_t
pr_sid
;
struct
compat_timeval
pr_utime
;
/* User time */
struct
compat_timeval
pr_stime
;
/* System time */
struct
compat_timeval
pr_cutime
;
/* Cumulative user time */
struct
compat_timeval
pr_cstime
;
/* Cumulative system time */
elf_gregset_t
pr_reg
;
/* GP registers */
int
pr_fpvalid
;
/* True if math co-processor being used. */
};
#define elf_prpsinfo elf_prpsinfo32
struct
elf_prpsinfo32
{
char
pr_state
;
/* numeric process state */
char
pr_sname
;
/* char for pr_state */
char
pr_zomb
;
/* zombie */
char
pr_nice
;
/* nice val */
u32
pr_flag
;
/* flags */
u16
pr_uid
;
u16
pr_gid
;
pid_t
pr_pid
,
pr_ppid
,
pr_pgrp
,
pr_sid
;
/* Lots missing */
char
pr_fname
[
16
];
/* filename of executable */
char
pr_psargs
[
ELF_PRARGSZ
];
/* initial part of arg list */
};
#include <linux/highuid.h>
#undef NEW_TO_OLD_UID
#undef NEW_TO_OLD_GID
#define NEW_TO_OLD_UID(uid) ((uid) > 65535) ? (u16)overflowuid : (u16)(uid)
#define NEW_TO_OLD_GID(gid) ((gid) > 65535) ? (u16)overflowgid : (u16)(gid)
#define elf_addr_t u32
/*
#define init_elf_binfmt init_elf32_binfmt
*/
#undef CONFIG_BINFMT_ELF
#ifdef CONFIG_BINFMT_ELF32
#define CONFIG_BINFMT_ELF CONFIG_BINFMT_ELF32
#endif
#undef CONFIG_BINFMT_ELF_MODULE
#ifdef CONFIG_BINFMT_ELF32_MODULE
#define CONFIG_BINFMT_ELF_MODULE CONFIG_BINFMT_ELF32_MODULE
#endif
#undef start_thread
#define start_thread start_thread31
#define setup_arg_pages(bprm) setup_arg_pages32(bprm)
#define elf_map elf_map32
MODULE_DESCRIPTION
(
"Binary format loader for compatibility with 32bit Linux for S390 binaries,"
" Copyright 2000 IBM Corporation"
);
MODULE_AUTHOR
(
"Gerhard Tonn <ton@de.ibm.com>"
);
#undef MODULE_DESCRIPTION
#undef MODULE_AUTHOR
#define jiffies_to_timeval jiffies_to_compat_timeval
static
__inline__
void
jiffies_to_compat_timeval
(
unsigned
long
jiffies
,
struct
compat_timeval
*
value
)
{
value
->
tv_usec
=
(
jiffies
%
HZ
)
*
(
1000000L
/
HZ
);
value
->
tv_sec
=
jiffies
/
HZ
;
}
#include "../../../fs/binfmt_elf.c"
static
unsigned
long
elf_map32
(
struct
file
*
filep
,
unsigned
long
addr
,
struct
elf_phdr
*
eppnt
,
int
prot
,
int
type
)
{
unsigned
long
map_addr
;
if
(
!
addr
)
addr
=
0x40000000
;
if
(
prot
&
PROT_READ
)
prot
|=
PROT_EXEC
;
down_write
(
&
current
->
mm
->
mmap_sem
);
map_addr
=
do_mmap
(
filep
,
ELF_PAGESTART
(
addr
),
eppnt
->
p_filesz
+
ELF_PAGEOFFSET
(
eppnt
->
p_vaddr
),
prot
,
type
,
eppnt
->
p_offset
-
ELF_PAGEOFFSET
(
eppnt
->
p_vaddr
));
up_write
(
&
current
->
mm
->
mmap_sem
);
return
(
map_addr
);
}
arch/s390/kernel/compat_exec.c
0 → 100644
View file @
a922abe4
/*
* Support for 32-bit Linux for S390 ELF binaries.
*
* Copyright (C) 2000 IBM Deutschland Entwicklung GmbH, IBM Corporation
* Author(s): Gerhard Tonn (ton@de.ibm.com)
*
* Separated from binfmt_elf32.c to reduce exports for module enablement.
*
*/
#include <linux/config.h>
#include <linux/slab.h>
#include <linux/file.h>
#include <linux/mman.h>
#include <linux/a.out.h>
#include <linux/stat.h>
#include <linux/fcntl.h>
#include <linux/smp_lock.h>
#include <linux/init.h>
#include <linux/pagemap.h>
#include <linux/highmem.h>
#include <linux/spinlock.h>
#include <linux/binfmts.h>
#include <linux/module.h>
#include <asm/uaccess.h>
#include <asm/pgalloc.h>
#include <asm/mmu_context.h>
#ifdef CONFIG_KMOD
#include <linux/kmod.h>
#endif
extern
void
put_dirty_page
(
struct
task_struct
*
tsk
,
struct
page
*
page
,
unsigned
long
address
);
#undef STACK_TOP
#define STACK_TOP TASK31_SIZE
int
setup_arg_pages32
(
struct
linux_binprm
*
bprm
)
{
unsigned
long
stack_base
;
struct
vm_area_struct
*
mpnt
;
struct
mm_struct
*
mm
=
current
->
mm
;
int
i
;
stack_base
=
STACK_TOP
-
MAX_ARG_PAGES
*
PAGE_SIZE
;
mm
->
arg_start
=
bprm
->
p
+
stack_base
;
bprm
->
p
+=
stack_base
;
if
(
bprm
->
loader
)
bprm
->
loader
+=
stack_base
;
bprm
->
exec
+=
stack_base
;
mpnt
=
kmem_cache_alloc
(
vm_area_cachep
,
SLAB_KERNEL
);
if
(
!
mpnt
)
return
-
ENOMEM
;
if
(
!
vm_enough_memory
((
STACK_TOP
-
(
PAGE_MASK
&
(
unsigned
long
)
bprm
->
p
))
>>
PAGE_SHIFT
))
{
kmem_cache_free
(
vm_area_cachep
,
mpnt
);
return
-
ENOMEM
;
}
down_write
(
&
mm
->
mmap_sem
);
{
mpnt
->
vm_mm
=
mm
;
mpnt
->
vm_start
=
PAGE_MASK
&
(
unsigned
long
)
bprm
->
p
;
mpnt
->
vm_end
=
STACK_TOP
;
mpnt
->
vm_page_prot
=
PAGE_COPY
;
mpnt
->
vm_flags
=
VM_STACK_FLAGS
;
mpnt
->
vm_ops
=
NULL
;
mpnt
->
vm_pgoff
=
0
;
mpnt
->
vm_file
=
NULL
;
INIT_LIST_HEAD
(
&
mpnt
->
shared
);
mpnt
->
vm_private_data
=
(
void
*
)
0
;
insert_vm_struct
(
mm
,
mpnt
);
mm
->
total_vm
=
(
mpnt
->
vm_end
-
mpnt
->
vm_start
)
>>
PAGE_SHIFT
;
}
for
(
i
=
0
;
i
<
MAX_ARG_PAGES
;
i
++
)
{
struct
page
*
page
=
bprm
->
page
[
i
];
if
(
page
)
{
bprm
->
page
[
i
]
=
NULL
;
put_dirty_page
(
current
,
page
,
stack_base
);
}
stack_base
+=
PAGE_SIZE
;
}
up_write
(
&
mm
->
mmap_sem
);
return
0
;
}
EXPORT_SYMBOL
(
setup_arg_pages32
);
arch/s390/kernel/compat_exec_domain.c
0 → 100644
View file @
a922abe4
/*
* Support for 32-bit Linux for S390 personality.
*
* Copyright (C) 2000 IBM Deutschland Entwicklung GmbH, IBM Corporation
* Author(s): Gerhard Tonn (ton@de.ibm.com)
*
*
*/
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/personality.h>
#include <linux/sched.h>
struct
exec_domain
s390_exec_domain
;
static
int
__init
s390_init
(
void
)
{
s390_exec_domain
.
name
=
"Linux/s390"
;
s390_exec_domain
.
handler
=
NULL
;
s390_exec_domain
.
pers_low
=
PER_LINUX32
;
s390_exec_domain
.
pers_high
=
PER_LINUX32
;
s390_exec_domain
.
signal_map
=
default_exec_domain
.
signal_map
;
s390_exec_domain
.
signal_invmap
=
default_exec_domain
.
signal_invmap
;
register_exec_domain
(
&
s390_exec_domain
);
return
0
;
}
__initcall
(
s390_init
);
arch/s390/kernel/compat_ioctl.c
0 → 100644
View file @
a922abe4
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment