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
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