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
Kirill Smelkov
linux
Commits
0e7c39d5
Commit
0e7c39d5
authored
Nov 08, 2002
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://are.twiddle.net/axp-2.5
into home.transmeta.com:/home/torvalds/v2.5/linux
parents
083606d2
1c819f89
Changes
9
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
871 additions
and
785 deletions
+871
-785
arch/alpha/kernel/alpha_ksyms.c
arch/alpha/kernel/alpha_ksyms.c
+0
-1
arch/alpha/kernel/asm-offsets.c
arch/alpha/kernel/asm-offsets.c
+11
-0
arch/alpha/kernel/entry.S
arch/alpha/kernel/entry.S
+803
-615
arch/alpha/kernel/irq_alpha.c
arch/alpha/kernel/irq_alpha.c
+12
-15
arch/alpha/kernel/osf_sys.c
arch/alpha/kernel/osf_sys.c
+4
-77
arch/alpha/kernel/process.c
arch/alpha/kernel/process.c
+6
-21
arch/alpha/kernel/ptrace.c
arch/alpha/kernel/ptrace.c
+4
-4
arch/alpha/kernel/traps.c
arch/alpha/kernel/traps.c
+28
-49
arch/alpha/math-emu/math.c
arch/alpha/math-emu/math.c
+3
-3
No files found.
arch/alpha/kernel/alpha_ksyms.c
View file @
0e7c39d5
...
@@ -144,7 +144,6 @@ EXPORT_SYMBOL(pci_dac_dma_to_offset);
...
@@ -144,7 +144,6 @@ EXPORT_SYMBOL(pci_dac_dma_to_offset);
EXPORT_SYMBOL
(
dump_thread
);
EXPORT_SYMBOL
(
dump_thread
);
EXPORT_SYMBOL
(
dump_fpu
);
EXPORT_SYMBOL
(
dump_fpu
);
EXPORT_SYMBOL
(
hwrpb
);
EXPORT_SYMBOL
(
hwrpb
);
EXPORT_SYMBOL
(
wrusp
);
EXPORT_SYMBOL
(
start_thread
);
EXPORT_SYMBOL
(
start_thread
);
EXPORT_SYMBOL
(
alpha_read_fp_reg
);
EXPORT_SYMBOL
(
alpha_read_fp_reg
);
EXPORT_SYMBOL
(
alpha_read_fp_reg_s
);
EXPORT_SYMBOL
(
alpha_read_fp_reg_s
);
...
...
arch/alpha/kernel/asm-offsets.c
View file @
0e7c39d5
...
@@ -20,11 +20,22 @@ void foo(void)
...
@@ -20,11 +20,22 @@ void foo(void)
DEFINE
(
TI_FLAGS
,
offsetof
(
struct
thread_info
,
flags
));
DEFINE
(
TI_FLAGS
,
offsetof
(
struct
thread_info
,
flags
));
DEFINE
(
TI_CPU
,
offsetof
(
struct
thread_info
,
cpu
));
DEFINE
(
TI_CPU
,
offsetof
(
struct
thread_info
,
cpu
));
BLANK
();
BLANK
();
DEFINE
(
TASK_BLOCKED
,
offsetof
(
struct
task_struct
,
blocked
));
DEFINE
(
TASK_UID
,
offsetof
(
struct
task_struct
,
uid
));
DEFINE
(
TASK_EUID
,
offsetof
(
struct
task_struct
,
euid
));
DEFINE
(
TASK_GID
,
offsetof
(
struct
task_struct
,
gid
));
DEFINE
(
TASK_EGID
,
offsetof
(
struct
task_struct
,
egid
));
DEFINE
(
TASK_REAL_PARENT
,
offsetof
(
struct
task_struct
,
real_parent
));
DEFINE
(
TASK_TGID
,
offsetof
(
struct
task_struct
,
tgid
));
BLANK
();
DEFINE
(
PT_PTRACED
,
PT_PTRACED
);
DEFINE
(
PT_PTRACED
,
PT_PTRACED
);
DEFINE
(
CLONE_VM
,
CLONE_VM
);
DEFINE
(
CLONE_VM
,
CLONE_VM
);
DEFINE
(
CLONE_UNTRACED
,
CLONE_UNTRACED
);
DEFINE
(
CLONE_UNTRACED
,
CLONE_UNTRACED
);
DEFINE
(
SIGCHLD
,
SIGCHLD
);
DEFINE
(
SIGCHLD
,
SIGCHLD
);
BLANK
();
BLANK
();
DEFINE
(
HAE_CACHE
,
offsetof
(
struct
alpha_machine_vector
,
hae_cache
));
DEFINE
(
HAE_CACHE
,
offsetof
(
struct
alpha_machine_vector
,
hae_cache
));
DEFINE
(
HAE_REG
,
offsetof
(
struct
alpha_machine_vector
,
hae_register
));
DEFINE
(
HAE_REG
,
offsetof
(
struct
alpha_machine_vector
,
hae_register
));
}
}
arch/alpha/kernel/entry.S
View file @
0e7c39d5
This diff is collapsed.
Click to expand it.
arch/alpha/kernel/irq_alpha.c
View file @
0e7c39d5
...
@@ -37,14 +37,13 @@ void (*perf_irq)(unsigned long, struct pt_regs *) = dummy_perf;
...
@@ -37,14 +37,13 @@ void (*perf_irq)(unsigned long, struct pt_regs *) = dummy_perf;
*/
*/
asmlinkage
void
asmlinkage
void
do_entInt
(
unsigned
long
type
,
unsigned
long
vector
,
unsigned
long
la_ptr
,
do_entInt
(
unsigned
long
type
,
unsigned
long
vector
,
unsigned
long
a3
,
unsigned
long
a4
,
unsigned
long
a5
,
unsigned
long
la_ptr
,
struct
pt_regs
*
regs
)
struct
pt_regs
regs
)
{
{
switch
(
type
)
{
switch
(
type
)
{
case
0
:
case
0
:
#ifdef CONFIG_SMP
#ifdef CONFIG_SMP
handle_ipi
(
&
regs
);
handle_ipi
(
regs
);
return
;
return
;
#else
#else
irq_err_count
++
;
irq_err_count
++
;
...
@@ -56,32 +55,32 @@ do_entInt(unsigned long type, unsigned long vector, unsigned long la_ptr,
...
@@ -56,32 +55,32 @@ do_entInt(unsigned long type, unsigned long vector, unsigned long la_ptr,
#ifdef CONFIG_SMP
#ifdef CONFIG_SMP
{
{
long
cpu
;
long
cpu
;
smp_percpu_timer_interrupt
(
&
regs
);
smp_percpu_timer_interrupt
(
regs
);
cpu
=
smp_processor_id
();
cpu
=
smp_processor_id
();
if
(
cpu
!=
boot_cpuid
)
{
if
(
cpu
!=
boot_cpuid
)
{
kstat_cpu
(
cpu
).
irqs
[
RTC_IRQ
]
++
;
kstat_cpu
(
cpu
).
irqs
[
RTC_IRQ
]
++
;
}
else
{
}
else
{
handle_irq
(
RTC_IRQ
,
&
regs
);
handle_irq
(
RTC_IRQ
,
regs
);
}
}
}
}
#else
#else
handle_irq
(
RTC_IRQ
,
&
regs
);
handle_irq
(
RTC_IRQ
,
regs
);
#endif
#endif
return
;
return
;
case
2
:
case
2
:
alpha_mv
.
machine_check
(
vector
,
la_ptr
,
&
regs
);
alpha_mv
.
machine_check
(
vector
,
la_ptr
,
regs
);
return
;
return
;
case
3
:
case
3
:
alpha_mv
.
device_interrupt
(
vector
,
&
regs
);
alpha_mv
.
device_interrupt
(
vector
,
regs
);
return
;
return
;
case
4
:
case
4
:
perf_irq
(
vector
,
&
regs
);
perf_irq
(
vector
,
regs
);
return
;
return
;
default:
default:
printk
(
KERN_CRIT
"Hardware intr %ld %lx? Huh?
\n
"
,
printk
(
KERN_CRIT
"Hardware intr %ld %lx? Huh?
\n
"
,
type
,
vector
);
type
,
vector
);
}
}
printk
(
"PC = %016lx PS=%04lx
\n
"
,
regs
.
pc
,
regs
.
ps
);
printk
(
KERN_CRIT
"PC = %016lx PS=%04lx
\n
"
,
regs
->
pc
,
regs
->
ps
);
}
}
void
__init
void
__init
...
@@ -96,10 +95,8 @@ common_init_isa_dma(void)
...
@@ -96,10 +95,8 @@ common_init_isa_dma(void)
void
__init
void
__init
init_IRQ
(
void
)
init_IRQ
(
void
)
{
{
/* Uh, this really MUST come first, just in case
/* Just in case the platform init_irq() causes interrupts/mchecks
* the platform init_irq() causes interrupts/mchecks
(as is the case with RAWHIDE, at least). */
* (as is the case with RAWHIDE, at least).
*/
wrent
(
entInt
,
0
);
wrent
(
entInt
,
0
);
alpha_mv
.
init_irq
();
alpha_mv
.
init_irq
();
...
...
arch/alpha/kernel/osf_sys.c
View file @
0e7c39d5
...
@@ -45,7 +45,6 @@
...
@@ -45,7 +45,6 @@
extern
int
do_pipe
(
int
*
);
extern
int
do_pipe
(
int
*
);
extern
asmlinkage
unsigned
long
sys_brk
(
unsigned
long
);
extern
asmlinkage
unsigned
long
sys_brk
(
unsigned
long
);
extern
int
sys_getpriority
(
int
,
int
);
extern
asmlinkage
unsigned
long
sys_create_module
(
char
*
,
unsigned
long
);
extern
asmlinkage
unsigned
long
sys_create_module
(
char
*
,
unsigned
long
);
/*
/*
...
@@ -172,68 +171,9 @@ osf_getdirentries(unsigned int fd, struct osf_dirent *dirent,
...
@@ -172,68 +171,9 @@ osf_getdirentries(unsigned int fd, struct osf_dirent *dirent,
#undef ROUND_UP
#undef ROUND_UP
#undef NAME_OFFSET
#undef NAME_OFFSET
/*
* Alpha syscall convention has no problem returning negative
* values:
*/
asmlinkage
int
osf_getpriority
(
int
which
,
int
who
,
int
a2
,
int
a3
,
int
a4
,
int
a5
,
struct
pt_regs
regs
)
{
extern
int
sys_getpriority
(
int
,
int
);
int
prio
;
/*
* We don't need to acquire the kernel lock here, because
* all of these operations are local. sys_getpriority
* will get the lock as required..
*/
prio
=
sys_getpriority
(
which
,
who
);
if
(
prio
>=
0
)
{
regs
.
r0
=
0
;
/* special return: no errors */
prio
=
20
-
prio
;
}
return
prio
;
}
/*
* No need to acquire the kernel lock, we're local..
*/
asmlinkage
unsigned
long
sys_getxuid
(
int
a0
,
int
a1
,
int
a2
,
int
a3
,
int
a4
,
int
a5
,
struct
pt_regs
regs
)
{
struct
task_struct
*
tsk
=
current
;
(
&
regs
)
->
r20
=
tsk
->
euid
;
return
tsk
->
uid
;
}
asmlinkage
unsigned
long
sys_getxgid
(
int
a0
,
int
a1
,
int
a2
,
int
a3
,
int
a4
,
int
a5
,
struct
pt_regs
regs
)
{
struct
task_struct
*
tsk
=
current
;
(
&
regs
)
->
r20
=
tsk
->
egid
;
return
tsk
->
gid
;
}
asmlinkage
unsigned
long
sys_getxpid
(
int
a0
,
int
a1
,
int
a2
,
int
a3
,
int
a4
,
int
a5
,
struct
pt_regs
regs
)
{
struct
task_struct
*
tsk
=
current
;
/*
* This isn't strictly "local" any more and we should actually
* acquire the kernel lock. The "p_opptr" pointer might change
* if the parent goes away (or due to ptrace). But any race
* isn't actually going to matter, as if the parent happens
* to change we can happily return either of the pids.
*/
(
&
regs
)
->
r20
=
tsk
->
real_parent
->
tgid
;
return
tsk
->
tgid
;
}
asmlinkage
unsigned
long
asmlinkage
unsigned
long
osf_mmap
(
unsigned
long
addr
,
unsigned
long
len
,
unsigned
long
prot
,
osf_mmap
(
unsigned
long
addr
,
unsigned
long
len
,
unsigned
long
prot
,
unsigned
long
flags
,
unsigned
long
fd
,
unsigned
long
off
)
unsigned
long
flags
,
unsigned
long
fd
,
unsigned
long
off
)
{
{
struct
file
*
file
=
NULL
;
struct
file
*
file
=
NULL
;
unsigned
long
ret
=
-
EBADF
;
unsigned
long
ret
=
-
EBADF
;
...
@@ -502,19 +442,6 @@ sys_getdtablesize(void)
...
@@ -502,19 +442,6 @@ sys_getdtablesize(void)
return
NR_OPEN
;
return
NR_OPEN
;
}
}
asmlinkage
int
sys_pipe
(
int
a0
,
int
a1
,
int
a2
,
int
a3
,
int
a4
,
int
a5
,
struct
pt_regs
regs
)
{
int
fd
[
2
],
error
;
error
=
do_pipe
(
fd
);
if
(
!
error
)
{
regs
.
r20
=
fd
[
1
];
error
=
fd
[
0
];
}
return
error
;
}
/*
/*
* For compatibility with OSF/1 only. Use utsname(2) instead.
* For compatibility with OSF/1 only. Use utsname(2) instead.
*/
*/
...
@@ -723,8 +650,8 @@ osf_sigstack(struct sigstack *uss, struct sigstack *uoss)
...
@@ -723,8 +650,8 @@ osf_sigstack(struct sigstack *uss, struct sigstack *uoss)
*/
*/
asmlinkage
unsigned
long
asmlinkage
unsigned
long
alpha_create_module
(
char
*
module_name
,
unsigned
long
size
,
do_
alpha_create_module
(
char
*
module_name
,
unsigned
long
size
,
int
a3
,
int
a4
,
int
a5
,
int
a6
,
struct
pt_regs
regs
)
struct
pt_regs
*
regs
)
{
{
long
retval
;
long
retval
;
...
@@ -735,7 +662,7 @@ alpha_create_module(char *module_name, unsigned long size,
...
@@ -735,7 +662,7 @@ alpha_create_module(char *module_name, unsigned long size,
the error number is a small negative number, while the address
the error number is a small negative number, while the address
is always negative but much larger. */
is always negative but much larger. */
if
(
retval
+
1000
<
0
)
if
(
retval
+
1000
<
0
)
regs
.
r0
=
0
;
regs
->
r0
=
0
;
unlock_kernel
();
unlock_kernel
();
return
retval
;
return
retval
;
...
...
arch/alpha/kernel/process.c
View file @
0e7c39d5
...
@@ -42,18 +42,6 @@
...
@@ -42,18 +42,6 @@
#include "proto.h"
#include "proto.h"
#include "pci_impl.h"
#include "pci_impl.h"
/*
* No need to acquire the kernel lock, we're entirely local..
*/
asmlinkage
int
sys_sethae
(
unsigned
long
hae
,
unsigned
long
a1
,
unsigned
long
a2
,
unsigned
long
a3
,
unsigned
long
a4
,
unsigned
long
a5
,
struct
pt_regs
regs
)
{
(
&
regs
)
->
hae
=
hae
;
return
0
;
}
void
default_idle
(
void
)
void
default_idle
(
void
)
{
{
barrier
();
barrier
();
...
@@ -227,6 +215,9 @@ flush_thread(void)
...
@@ -227,6 +215,9 @@ flush_thread(void)
with respect to the FPU. This is all exceptions disabled. */
with respect to the FPU. This is all exceptions disabled. */
current_thread_info
()
->
ieee_state
=
0
;
current_thread_info
()
->
ieee_state
=
0
;
wrfpcr
(
FPCR_DYN_NORMAL
|
ieee_swcr_to_fpcr
(
0
));
wrfpcr
(
FPCR_DYN_NORMAL
|
ieee_swcr_to_fpcr
(
0
));
/* Clean slate for TLS. */
current_thread_info
()
->
pcb
.
unique
=
0
;
}
}
void
void
...
@@ -244,16 +235,15 @@ release_thread(struct task_struct *dead_task)
...
@@ -244,16 +235,15 @@ release_thread(struct task_struct *dead_task)
* with parameters (SIGCHLD, 0).
* with parameters (SIGCHLD, 0).
*/
*/
int
int
alpha_clone
(
unsigned
long
clone_flags
,
unsigned
long
usp
,
alpha_clone
(
unsigned
long
clone_flags
,
unsigned
long
usp
,
int
*
user_tid
,
int
*
user_tid
,
struct
switch_stack
*
swstack
)
struct
pt_regs
*
regs
)
{
{
struct
task_struct
*
p
;
struct
task_struct
*
p
;
struct
pt_regs
*
u_regs
=
(
struct
pt_regs
*
)
(
swstack
+
1
);
if
(
!
usp
)
if
(
!
usp
)
usp
=
rdusp
();
usp
=
rdusp
();
p
=
do_fork
(
clone_flags
&
~
CLONE_IDLETASK
,
usp
,
u_
regs
,
0
,
user_tid
);
p
=
do_fork
(
clone_flags
&
~
CLONE_IDLETASK
,
usp
,
regs
,
0
,
user_tid
);
return
IS_ERR
(
p
)
?
PTR_ERR
(
p
)
:
p
->
pid
;
return
IS_ERR
(
p
)
?
PTR_ERR
(
p
)
:
p
->
pid
;
}
}
...
@@ -282,7 +272,6 @@ copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
...
@@ -282,7 +272,6 @@ copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
unsigned
long
unused
,
unsigned
long
unused
,
struct
task_struct
*
p
,
struct
pt_regs
*
regs
)
struct
task_struct
*
p
,
struct
pt_regs
*
regs
)
{
{
extern
void
ret_from_sys_call
(
void
);
extern
void
ret_from_fork
(
void
);
extern
void
ret_from_fork
(
void
);
struct
thread_info
*
childti
=
p
->
thread_info
;
struct
thread_info
*
childti
=
p
->
thread_info
;
...
@@ -304,11 +293,7 @@ copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
...
@@ -304,11 +293,7 @@ copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
stack
=
((
struct
switch_stack
*
)
regs
)
-
1
;
stack
=
((
struct
switch_stack
*
)
regs
)
-
1
;
childstack
=
((
struct
switch_stack
*
)
childregs
)
-
1
;
childstack
=
((
struct
switch_stack
*
)
childregs
)
-
1
;
*
childstack
=
*
stack
;
*
childstack
=
*
stack
;
#ifdef CONFIG_SMP
childstack
->
r26
=
(
unsigned
long
)
ret_from_fork
;
childstack
->
r26
=
(
unsigned
long
)
ret_from_fork
;
#else
childstack
->
r26
=
(
unsigned
long
)
ret_from_sys_call
;
#endif
childti
->
pcb
.
usp
=
usp
;
childti
->
pcb
.
usp
=
usp
;
childti
->
pcb
.
ksp
=
(
unsigned
long
)
childstack
;
childti
->
pcb
.
ksp
=
(
unsigned
long
)
childstack
;
childti
->
pcb
.
flags
=
1
;
/* set FEN, clear everything else */
childti
->
pcb
.
flags
=
1
;
/* set FEN, clear everything else */
...
...
arch/alpha/kernel/ptrace.c
View file @
0e7c39d5
...
@@ -249,8 +249,8 @@ void ptrace_disable(struct task_struct *child)
...
@@ -249,8 +249,8 @@ void ptrace_disable(struct task_struct *child)
}
}
asmlinkage
long
asmlinkage
long
sys_ptrace
(
long
request
,
long
pid
,
long
addr
,
long
data
,
do_
sys_ptrace
(
long
request
,
long
pid
,
long
addr
,
long
data
,
int
a4
,
int
a5
,
struct
pt_regs
regs
)
struct
pt_regs
*
regs
)
{
{
struct
task_struct
*
child
;
struct
task_struct
*
child
;
long
ret
;
long
ret
;
...
@@ -307,14 +307,14 @@ sys_ptrace(long request, long pid, long addr, long data,
...
@@ -307,14 +307,14 @@ sys_ptrace(long request, long pid, long addr, long data,
if
(
copied
!=
sizeof
(
tmp
))
if
(
copied
!=
sizeof
(
tmp
))
goto
out
;
goto
out
;
regs
.
r0
=
0
;
/* special return: no errors */
regs
->
r0
=
0
;
/* special return: no errors */
ret
=
tmp
;
ret
=
tmp
;
goto
out
;
goto
out
;
}
}
/* Read register number ADDR. */
/* Read register number ADDR. */
case
PTRACE_PEEKUSR
:
case
PTRACE_PEEKUSR
:
regs
.
r0
=
0
;
/* special return: no errors */
regs
->
r0
=
0
;
/* special return: no errors */
ret
=
get_reg
(
child
,
addr
);
ret
=
get_reg
(
child
,
addr
);
DBG
(
DBG_MEM
,
(
"peek $%ld->%#lx
\n
"
,
addr
,
ret
));
DBG
(
DBG_MEM
,
(
"peek $%ld->%#lx
\n
"
,
addr
,
ret
));
goto
out
;
goto
out
;
...
...
arch/alpha/kernel/traps.c
View file @
0e7c39d5
...
@@ -210,8 +210,7 @@ long alpha_fp_emul (unsigned long pc);
...
@@ -210,8 +210,7 @@ long alpha_fp_emul (unsigned long pc);
asmlinkage
void
asmlinkage
void
do_entArith
(
unsigned
long
summary
,
unsigned
long
write_mask
,
do_entArith
(
unsigned
long
summary
,
unsigned
long
write_mask
,
unsigned
long
a2
,
unsigned
long
a3
,
unsigned
long
a4
,
struct
pt_regs
*
regs
)
unsigned
long
a5
,
struct
pt_regs
regs
)
{
{
long
si_code
=
FPE_FLTINV
;
long
si_code
=
FPE_FLTINV
;
siginfo_t
info
;
siginfo_t
info
;
...
@@ -221,23 +220,23 @@ do_entArith(unsigned long summary, unsigned long write_mask,
...
@@ -221,23 +220,23 @@ do_entArith(unsigned long summary, unsigned long write_mask,
emulate the instruction. If the processor supports
emulate the instruction. If the processor supports
precise exceptions, we don't have to search. */
precise exceptions, we don't have to search. */
if
(
!
amask
(
AMASK_PRECISE_TRAP
))
if
(
!
amask
(
AMASK_PRECISE_TRAP
))
si_code
=
alpha_fp_emul
(
regs
.
pc
-
4
);
si_code
=
alpha_fp_emul
(
regs
->
pc
-
4
);
else
else
si_code
=
alpha_fp_emul_imprecise
(
&
regs
,
write_mask
);
si_code
=
alpha_fp_emul_imprecise
(
regs
,
write_mask
);
if
(
si_code
==
0
)
return
;
}
}
die_if_kernel
(
"Arithmetic fault"
,
&
regs
,
0
,
0
);
die_if_kernel
(
"Arithmetic fault"
,
regs
,
0
,
0
);
info
.
si_signo
=
SIGFPE
;
info
.
si_signo
=
SIGFPE
;
info
.
si_errno
=
0
;
info
.
si_errno
=
0
;
info
.
si_code
=
si_code
;
info
.
si_code
=
si_code
;
info
.
si_addr
=
(
void
*
)
regs
.
pc
;
info
.
si_addr
=
(
void
*
)
regs
->
pc
;
send_sig_info
(
SIGFPE
,
&
info
,
current
);
send_sig_info
(
SIGFPE
,
&
info
,
current
);
}
}
asmlinkage
void
asmlinkage
void
do_entIF
(
unsigned
long
type
,
unsigned
long
a1
,
do_entIF
(
unsigned
long
type
,
struct
pt_regs
*
regs
)
unsigned
long
a2
,
unsigned
long
a3
,
unsigned
long
a4
,
unsigned
long
a5
,
struct
pt_regs
regs
)
{
{
siginfo_t
info
;
siginfo_t
info
;
int
signo
,
code
;
int
signo
,
code
;
...
@@ -245,13 +244,13 @@ do_entIF(unsigned long type, unsigned long a1,
...
@@ -245,13 +244,13 @@ do_entIF(unsigned long type, unsigned long a1,
if
(
!
opDEC_testing
||
type
!=
4
)
{
if
(
!
opDEC_testing
||
type
!=
4
)
{
if
(
type
==
1
)
{
if
(
type
==
1
)
{
const
unsigned
int
*
data
const
unsigned
int
*
data
=
(
const
unsigned
int
*
)
regs
.
pc
;
=
(
const
unsigned
int
*
)
regs
->
pc
;
printk
(
"Kernel bug at %s:%d
\n
"
,
printk
(
"Kernel bug at %s:%d
\n
"
,
(
const
char
*
)(
data
[
1
]
|
(
long
)
data
[
2
]
<<
32
),
(
const
char
*
)(
data
[
1
]
|
(
long
)
data
[
2
]
<<
32
),
data
[
0
]);
data
[
0
]);
}
}
die_if_kernel
((
type
==
1
?
"Kernel Bug"
:
"Instruction fault"
),
die_if_kernel
((
type
==
1
?
"Kernel Bug"
:
"Instruction fault"
),
&
regs
,
type
,
0
);
regs
,
type
,
0
);
}
}
switch
(
type
)
{
switch
(
type
)
{
...
@@ -260,10 +259,10 @@ do_entIF(unsigned long type, unsigned long a1,
...
@@ -260,10 +259,10 @@ do_entIF(unsigned long type, unsigned long a1,
info
.
si_errno
=
0
;
info
.
si_errno
=
0
;
info
.
si_code
=
TRAP_BRKPT
;
info
.
si_code
=
TRAP_BRKPT
;
info
.
si_trapno
=
0
;
info
.
si_trapno
=
0
;
info
.
si_addr
=
(
void
*
)
regs
.
pc
;
info
.
si_addr
=
(
void
*
)
regs
->
pc
;
if
(
ptrace_cancel_bpt
(
current
))
{
if
(
ptrace_cancel_bpt
(
current
))
{
regs
.
pc
-=
4
;
/* make pc point to former bpt */
regs
->
pc
-=
4
;
/* make pc point to former bpt */
}
}
send_sig_info
(
SIGTRAP
,
&
info
,
current
);
send_sig_info
(
SIGTRAP
,
&
info
,
current
);
...
@@ -273,15 +272,15 @@ do_entIF(unsigned long type, unsigned long a1,
...
@@ -273,15 +272,15 @@ do_entIF(unsigned long type, unsigned long a1,
info
.
si_signo
=
SIGTRAP
;
info
.
si_signo
=
SIGTRAP
;
info
.
si_errno
=
0
;
info
.
si_errno
=
0
;
info
.
si_code
=
__SI_FAULT
;
info
.
si_code
=
__SI_FAULT
;
info
.
si_addr
=
(
void
*
)
regs
.
pc
;
info
.
si_addr
=
(
void
*
)
regs
->
pc
;
info
.
si_trapno
=
0
;
info
.
si_trapno
=
0
;
send_sig_info
(
SIGTRAP
,
&
info
,
current
);
send_sig_info
(
SIGTRAP
,
&
info
,
current
);
return
;
return
;
case
2
:
/* gentrap */
case
2
:
/* gentrap */
info
.
si_addr
=
(
void
*
)
regs
.
pc
;
info
.
si_addr
=
(
void
*
)
regs
->
pc
;
info
.
si_trapno
=
regs
.
r16
;
info
.
si_trapno
=
regs
->
r16
;
switch
((
long
)
regs
.
r16
)
{
switch
((
long
)
regs
->
r16
)
{
case
GEN_INTOVF
:
case
GEN_INTOVF
:
signo
=
SIGFPE
;
signo
=
SIGFPE
;
code
=
FPE_INTOVF
;
code
=
FPE_INTOVF
;
...
@@ -341,7 +340,7 @@ do_entIF(unsigned long type, unsigned long a1,
...
@@ -341,7 +340,7 @@ do_entIF(unsigned long type, unsigned long a1,
info
.
si_signo
=
signo
;
info
.
si_signo
=
signo
;
info
.
si_errno
=
0
;
info
.
si_errno
=
0
;
info
.
si_code
=
code
;
info
.
si_code
=
code
;
info
.
si_addr
=
(
void
*
)
regs
.
pc
;
info
.
si_addr
=
(
void
*
)
regs
->
pc
;
send_sig_info
(
signo
,
&
info
,
current
);
send_sig_info
(
signo
,
&
info
,
current
);
return
;
return
;
...
@@ -358,26 +357,26 @@ do_entIF(unsigned long type, unsigned long a1,
...
@@ -358,26 +357,26 @@ do_entIF(unsigned long type, unsigned long a1,
we get the correct PC. If not, we set a flag
we get the correct PC. If not, we set a flag
to correct it every time through. */
to correct it every time through. */
if
(
opDEC_testing
)
{
if
(
opDEC_testing
)
{
if
(
regs
.
pc
==
opDEC_test_pc
)
{
if
(
regs
->
pc
==
opDEC_test_pc
)
{
opDEC_fix
=
4
;
opDEC_fix
=
4
;
regs
.
pc
+=
4
;
regs
->
pc
+=
4
;
printk
(
"opDEC fixup enabled.
\n
"
);
printk
(
"opDEC fixup enabled.
\n
"
);
}
}
return
;
return
;
}
}
regs
.
pc
+=
opDEC_fix
;
regs
->
pc
+=
opDEC_fix
;
/* EV4 does not implement anything except normal
/* EV4 does not implement anything except normal
rounding. Everything else will come here as
rounding. Everything else will come here as
an illegal instruction. Emulate them. */
an illegal instruction. Emulate them. */
si_code
=
alpha_fp_emul
(
regs
.
pc
-
4
);
si_code
=
alpha_fp_emul
(
regs
->
pc
-
4
);
if
(
si_code
==
0
)
if
(
si_code
==
0
)
return
;
return
;
if
(
si_code
>
0
)
{
if
(
si_code
>
0
)
{
info
.
si_signo
=
SIGFPE
;
info
.
si_signo
=
SIGFPE
;
info
.
si_errno
=
0
;
info
.
si_errno
=
0
;
info
.
si_code
=
si_code
;
info
.
si_code
=
si_code
;
info
.
si_addr
=
(
void
*
)
regs
.
pc
;
info
.
si_addr
=
(
void
*
)
regs
->
pc
;
send_sig_info
(
SIGFPE
,
&
info
,
current
);
send_sig_info
(
SIGFPE
,
&
info
,
current
);
return
;
return
;
}
}
...
@@ -406,7 +405,7 @@ do_entIF(unsigned long type, unsigned long a1,
...
@@ -406,7 +405,7 @@ do_entIF(unsigned long type, unsigned long a1,
info
.
si_signo
=
SIGILL
;
info
.
si_signo
=
SIGILL
;
info
.
si_errno
=
0
;
info
.
si_errno
=
0
;
info
.
si_code
=
ILL_ILLOPC
;
info
.
si_code
=
ILL_ILLOPC
;
info
.
si_addr
=
regs
.
pc
;
info
.
si_addr
=
(
void
*
)
regs
->
pc
;
send_sig_info
(
SIGILL
,
&
info
,
current
);
send_sig_info
(
SIGILL
,
&
info
,
current
);
}
}
...
@@ -418,18 +417,16 @@ do_entIF(unsigned long type, unsigned long a1,
...
@@ -418,18 +417,16 @@ do_entIF(unsigned long type, unsigned long a1,
and if we don't put something on the entry point we'll oops. */
and if we don't put something on the entry point we'll oops. */
asmlinkage
void
asmlinkage
void
do_entDbg
(
unsigned
long
type
,
unsigned
long
a1
,
do_entDbg
(
struct
pt_regs
*
regs
)
unsigned
long
a2
,
unsigned
long
a3
,
unsigned
long
a4
,
unsigned
long
a5
,
struct
pt_regs
regs
)
{
{
siginfo_t
info
;
siginfo_t
info
;
die_if_kernel
(
"Instruction fault"
,
&
regs
,
type
,
0
);
die_if_kernel
(
"Instruction fault"
,
regs
,
0
,
0
);
info
.
si_signo
=
SIGILL
;
info
.
si_signo
=
SIGILL
;
info
.
si_errno
=
0
;
info
.
si_errno
=
0
;
info
.
si_code
=
ILL_ILLOPC
;
info
.
si_code
=
ILL_ILLOPC
;
info
.
si_addr
=
regs
.
pc
;
info
.
si_addr
=
(
void
*
)
regs
->
pc
;
force_sig_info
(
SIGILL
,
&
info
,
current
);
force_sig_info
(
SIGILL
,
&
info
,
current
);
}
}
...
@@ -1083,22 +1080,6 @@ do_entUnaUser(void * va, unsigned long opcode,
...
@@ -1083,22 +1080,6 @@ do_entUnaUser(void * va, unsigned long opcode,
return
;
return
;
}
}
/*
* Unimplemented system calls.
*/
asmlinkage
long
alpha_ni_syscall
(
unsigned
long
a0
,
unsigned
long
a1
,
unsigned
long
a2
,
unsigned
long
a3
,
unsigned
long
a4
,
unsigned
long
a5
,
struct
pt_regs
regs
)
{
/* We only get here for OSF system calls, minus #112;
the rest go to sys_ni_syscall. */
#if 0
printk("<sc %ld(%lx,%lx,%lx)>", regs.r0, a0, a1, a2);
#endif
return
-
ENOSYS
;
}
void
void
trap_init
(
void
)
trap_init
(
void
)
{
{
...
@@ -1114,9 +1095,7 @@ trap_init(void)
...
@@ -1114,9 +1095,7 @@ trap_init(void)
wrent
(
entDbg
,
6
);
wrent
(
entDbg
,
6
);
/* Hack for Multia (UDB) and JENSEN: some of their SRMs have
/* Hack for Multia (UDB) and JENSEN: some of their SRMs have
* a bug in the handling of the opDEC fault. Fix it up if so.
a bug in the handling of the opDEC fault. Fix it up if so. */
*/
if
(
implver
()
==
IMPLVER_EV4
)
if
(
implver
()
==
IMPLVER_EV4
)
{
opDEC_check
();
opDEC_check
();
}
}
}
arch/alpha/math-emu/math.c
View file @
0e7c39d5
...
@@ -223,12 +223,12 @@ alpha_fp_emul (unsigned long pc)
...
@@ -223,12 +223,12 @@ alpha_fp_emul (unsigned long pc)
FP_CONV
(
S
,
D
,
1
,
1
,
SR
,
DB
);
FP_CONV
(
S
,
D
,
1
,
1
,
SR
,
DB
);
goto
pack_s
;
goto
pack_s
;
}
else
{
}
else
{
/* CVTST need do nothing else but copy the
vb
=
alpha_read_fp_reg_s
(
fb
);
bits and repack. */
FP_UNPACK_SP
(
SB
,
&
vb
);
DR_c
=
DB_c
;
DR_c
=
DB_c
;
DR_s
=
DB_s
;
DR_s
=
DB_s
;
DR_e
=
DB_e
;
DR_e
=
DB_e
;
DR_f
=
DB_f
;
DR_f
=
SB_f
<<
(
52
-
23
)
;
goto
pack_d
;
goto
pack_d
;
}
}
...
...
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