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
2d6d3d27
Commit
2d6d3d27
authored
Feb 19, 2004
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://kernel.bkbits.net/gregkh/linux/pci-2.6
into ppc970.osdl.org:/home/torvalds/v2.5/linux
parents
44bd49d5
f1db380a
Changes
35
Hide whitespace changes
Inline
Side-by-side
Showing
35 changed files
with
448 additions
and
520 deletions
+448
-520
arch/sparc/Makefile
arch/sparc/Makefile
+0
-9
arch/sparc/kernel/entry.S
arch/sparc/kernel/entry.S
+202
-203
arch/sparc/kernel/etrap.S
arch/sparc/kernel/etrap.S
+7
-8
arch/sparc/kernel/head.S
arch/sparc/kernel/head.S
+88
-89
arch/sparc/kernel/rtrap.S
arch/sparc/kernel/rtrap.S
+13
-14
arch/sparc/kernel/sclow.S
arch/sparc/kernel/sclow.S
+1
-2
arch/sparc/kernel/sparc_ksyms.c
arch/sparc/kernel/sparc_ksyms.c
+1
-2
arch/sparc/kernel/sunos_asm.S
arch/sparc/kernel/sunos_asm.S
+19
-20
arch/sparc/kernel/trampoline.S
arch/sparc/kernel/trampoline.S
+22
-23
arch/sparc/kernel/wof.S
arch/sparc/kernel/wof.S
+7
-8
arch/sparc/kernel/wuf.S
arch/sparc/kernel/wuf.S
+7
-8
arch/sparc/lib/ashldi3.S
arch/sparc/lib/ashldi3.S
+2
-4
arch/sparc/lib/ashrdi3.S
arch/sparc/lib/ashrdi3.S
+2
-4
arch/sparc/lib/atomic.S
arch/sparc/lib/atomic.S
+0
-1
arch/sparc/lib/bitops.S
arch/sparc/lib/bitops.S
+6
-7
arch/sparc/lib/blockops.S
arch/sparc/lib/blockops.S
+3
-4
arch/sparc/lib/checksum.S
arch/sparc/lib/checksum.S
+10
-11
arch/sparc/lib/copy_user.S
arch/sparc/lib/copy_user.S
+2
-3
arch/sparc/lib/locks.S
arch/sparc/lib/locks.S
+0
-1
arch/sparc/lib/lshrdi3.S
arch/sparc/lib/lshrdi3.S
+2
-4
arch/sparc/lib/memcmp.S
arch/sparc/lib/memcmp.S
+3
-5
arch/sparc/lib/memcpy.S
arch/sparc/lib/memcpy.S
+3
-5
arch/sparc/lib/memscan.S
arch/sparc/lib/memscan.S
+5
-7
arch/sparc/lib/memset.S
arch/sparc/lib/memset.S
+9
-10
arch/sparc/lib/strlen.S
arch/sparc/lib/strlen.S
+2
-4
arch/sparc/lib/strlen_user.S
arch/sparc/lib/strlen_user.S
+3
-5
arch/sparc/lib/strncmp.S
arch/sparc/lib/strncmp.S
+3
-5
arch/sparc/lib/strncpy_from_user.S
arch/sparc/lib/strncpy_from_user.S
+2
-3
arch/sparc/math-emu/Makefile
arch/sparc/math-emu/Makefile
+1
-1
arch/sparc/mm/viking.S
arch/sparc/mm/viking.S
+0
-1
include/asm-sparc/asmmacro.h
include/asm-sparc/asmmacro.h
+4
-4
include/asm-sparc/checksum.h
include/asm-sparc/checksum.h
+3
-4
include/asm-sparc/cprefix.h
include/asm-sparc/cprefix.h
+0
-25
include/asm-sparc/head.h
include/asm-sparc/head.h
+8
-8
include/asm-sparc/winmacro.h
include/asm-sparc/winmacro.h
+8
-8
No files found.
arch/sparc/Makefile
View file @
2d6d3d27
...
...
@@ -11,21 +11,12 @@
# Uncomment the first CFLAGS if you are doing kgdb source level
# debugging of the kernel to get the proper debugging information.
IS_EGCS
:=
$(
shell
if
$(CC)
-m32
-S
-o
/dev/null
-xc
/dev/null
>
/dev/null 2>&1
;
then
echo
y
;
else
echo
n
;
fi
;
)
NEW_GAS
:=
$(
shell
if
$(LD)
--version
2>&1 |
grep
'elf64_sparc'
>
/dev/null
;
then
echo
y
;
else
echo
n
;
fi
)
ifeq
($(NEW_GAS),y)
AS
:=
$(AS)
-32
LDFLAGS
:=
-m
elf32_sparc
endif
#CFLAGS := $(CFLAGS) -g -pipe -fcall-used-g5 -fcall-used-g7
ifneq
($(IS_EGCS),y)
CFLAGS
:=
$(CFLAGS)
-pipe
-mno-fpu
-fcall-used-g5
-fcall-used-g7
else
CFLAGS
:=
$(CFLAGS)
-m32
-pipe
-mno-fpu
-fcall-used-g5
-fcall-used-g7
AFLAGS
:=
$(AFLAGS)
-m32
endif
#LDFLAGS_vmlinux = -N -Ttext 0xf0004000
# Since 2.5.40, the first stage is left not btfix-ed.
...
...
arch/sparc/kernel/entry.S
View file @
2d6d3d27
...
...
@@ -19,7 +19,6 @@
#include <asm/ptrace.h>
#include <asm/asm_offsets.h>
#include <asm/psr.h>
#include <asm/cprefix.h>
#include <asm/vaddrs.h>
#include <asm/memreg.h>
#include <asm/page.h>
...
...
@@ -68,8 +67,8 @@ in_trap_handler:
!
available
before
jumping
into
C
code
.
It
will
also
restore
the
world
if
you
!
return
from
handle_exception
.
.
globl
C_LABEL
(
trap_low
)
C_LABEL
(
trap_low
)
:
.
globl
trap_low
trap_low
:
rd
%
wim
,
%
l3
SAVE_ALL
...
...
@@ -104,7 +103,7 @@ C_LABEL(trap_low):
wr
%
l0
,
PSR_ET
,
%
psr
WRITE_PAUSE
call
C_LABEL
(
handle_exception
)
call
handle_exception
add
%
sp
,
STACKFRAME_SZ
,
%
o0
!
Pass
address
of
registers
/
*
Load
new
kgdb
register
set
.
*/
...
...
@@ -134,8 +133,8 @@ C_LABEL(trap_low):
#ifdef CONFIG_BLK_DEV_FD
.
text
.
align
4
.
globl
C_LABEL
(
floppy_hardint
)
C_LABEL
(
floppy_hardint
)
:
.
globl
floppy_hardint
floppy_hardint
:
/
*
*
This
code
cannot
touch
registers
%
l0
%
l1
and
%
l2
*
because
SAVE_ALL
depends
on
their
values
.
It
depends
...
...
@@ -149,21 +148,21 @@ C_LABEL(floppy_hardint):
*/
/
*
Do
we
have
work
to
do
?
*/
sethi
%
hi
(
C_LABEL
(
doing_pdma
)
),
%
l7
ld
[%
l7
+
%
lo
(
C_LABEL
(
doing_pdma
)
)],
%
l7
sethi
%
hi
(
doing_pdma
),
%
l7
ld
[%
l7
+
%
lo
(
doing_pdma
)],
%
l7
cmp
%
l7
,
0
be
floppy_dosoftint
nop
/
*
Load
fdc
register
base
*/
sethi
%
hi
(
C_LABEL
(
fdc_status
)
),
%
l3
ld
[%
l3
+
%
lo
(
C_LABEL
(
fdc_status
)
)],
%
l3
sethi
%
hi
(
fdc_status
),
%
l3
ld
[%
l3
+
%
lo
(
fdc_status
)],
%
l3
/
*
Setup
register
addresses
*/
sethi
%
hi
(
C_LABEL
(
pdma_vaddr
)
),
%
l5
!
transfer
buffer
ld
[%
l5
+
%
lo
(
C_LABEL
(
pdma_vaddr
)
)],
%
l4
sethi
%
hi
(
C_LABEL
(
pdma_size
)
),
%
l5
!
bytes
to
go
ld
[%
l5
+
%
lo
(
C_LABEL
(
pdma_size
)
)],
%
l6
sethi
%
hi
(
pdma_vaddr
),
%
l5
!
transfer
buffer
ld
[%
l5
+
%
lo
(
pdma_vaddr
)],
%
l4
sethi
%
hi
(
pdma_size
),
%
l5
!
bytes
to
go
ld
[%
l5
+
%
lo
(
pdma_size
)],
%
l6
next_byte
:
ldub
[%
l3
],
%
l7
...
...
@@ -195,15 +194,15 @@ floppy_write:
/
*
fall
through
...
*/
floppy_tdone
:
sethi
%
hi
(
C_LABEL
(
pdma_vaddr
)
),
%
l5
st
%
l4
,
[%
l5
+
%
lo
(
C_LABEL
(
pdma_vaddr
)
)]
sethi
%
hi
(
C_LABEL
(
pdma_size
)
),
%
l5
st
%
l6
,
[%
l5
+
%
lo
(
C_LABEL
(
pdma_size
)
)]
sethi
%
hi
(
pdma_vaddr
),
%
l5
st
%
l4
,
[%
l5
+
%
lo
(
pdma_vaddr
)]
sethi
%
hi
(
pdma_size
),
%
l5
st
%
l6
,
[%
l5
+
%
lo
(
pdma_size
)]
/
*
Flip
terminal
count
pin
*/
set
C_LABEL
(
auxio_register
)
,
%
l7
set
auxio_register
,
%
l7
ld
[%
l7
],
%
l7
set
C_LABEL
(
sparc_cpu_model
)
,
%
l5
set
sparc_cpu_model
,
%
l5
ld
[%
l5
],
%
l5
subcc
%
l5
,
1
,
%
g0
/*
enum
{
sun4c
=
1
}
; */
be
1
f
...
...
@@ -228,9 +227,9 @@ floppy_tdone:
stb
%
l5
,
[%
l7
]
/
*
Prevent
recursion
*/
sethi
%
hi
(
C_LABEL
(
doing_pdma
)
),
%
l7
sethi
%
hi
(
doing_pdma
),
%
l7
b
floppy_dosoftint
st
%
g0
,
[%
l7
+
%
lo
(
C_LABEL
(
doing_pdma
)
)]
st
%
g0
,
[%
l7
+
%
lo
(
doing_pdma
)]
/
*
We
emptied
the
FIFO
,
but
we
haven
't read everything
*
as
of
yet
.
Store
the
current
transfer
address
and
...
...
@@ -238,10 +237,10 @@ floppy_tdone:
*
fast
IRQ
comes
in
.
*/
floppy_fifo_emptied
:
sethi
%
hi
(
C_LABEL
(
pdma_vaddr
)
),
%
l5
st
%
l4
,
[%
l5
+
%
lo
(
C_LABEL
(
pdma_vaddr
)
)]
sethi
%
hi
(
C_LABEL
(
pdma_size
)
),
%
l7
st
%
l6
,
[%
l7
+
%
lo
(
C_LABEL
(
pdma_size
)
)]
sethi
%
hi
(
pdma_vaddr
),
%
l5
st
%
l4
,
[%
l5
+
%
lo
(
pdma_vaddr
)]
sethi
%
hi
(
pdma_size
),
%
l7
st
%
l6
,
[%
l7
+
%
lo
(
pdma_size
)]
/
*
Restore
condition
codes
*/
wr
%
l0
,
0x0
,
%
psr
...
...
@@ -251,13 +250,13 @@ floppy_fifo_emptied:
rett
%
l2
floppy_overrun
:
sethi
%
hi
(
C_LABEL
(
pdma_vaddr
)
),
%
l5
st
%
l4
,
[%
l5
+
%
lo
(
C_LABEL
(
pdma_vaddr
)
)]
sethi
%
hi
(
C_LABEL
(
pdma_size
)
),
%
l5
st
%
l6
,
[%
l5
+
%
lo
(
C_LABEL
(
pdma_size
)
)]
sethi
%
hi
(
pdma_vaddr
),
%
l5
st
%
l4
,
[%
l5
+
%
lo
(
pdma_vaddr
)]
sethi
%
hi
(
pdma_size
),
%
l5
st
%
l6
,
[%
l5
+
%
lo
(
pdma_size
)]
/
*
Prevent
recursion
*/
sethi
%
hi
(
C_LABEL
(
doing_pdma
)
),
%
l7
st
%
g0
,
[%
l7
+
%
lo
(
C_LABEL
(
doing_pdma
)
)]
sethi
%
hi
(
doing_pdma
),
%
l7
st
%
g0
,
[%
l7
+
%
lo
(
doing_pdma
)]
/
*
fall
through
...
*/
floppy_dosoftint
:
...
...
@@ -273,7 +272,7 @@ floppy_dosoftint:
mov
11
,
%
o0
!
floppy
irq
level
(
unused
anyway
)
mov
%
g0
,
%
o1
!
devid
is
not
used
in
fast
interrupts
call
C_LABEL
(
sparc_floppy_irq
)
call
sparc_floppy_irq
add
%
sp
,
STACKFRAME_SZ
,
%
o2
!
struct
pt_regs
*
regs
RESTORE_ALL
...
...
@@ -290,7 +289,7 @@ bad_trap_handler:
mov
%
l7
,
%
o0
!
trap
number
mov
%
l0
,
%
o1
!
psr
call
C_LABEL
(
do_hw_interrupt
)
call
do_hw_interrupt
mov
%
l1
,
%
o2
!
pc
RESTORE_ALL
...
...
@@ -322,7 +321,7 @@ real_irq_continue:
WRITE_PAUSE
mov
%
l7
,
%
o0
!
irq
level
patch_handler_irq
:
call
C_LABEL
(
handler_irq
)
call
handler_irq
add
%
sp
,
STACKFRAME_SZ
,
%
o1
!
pt_regs
ptr
or
%
l0
,
PSR_PIL
,
%
g2
!
restore
PIL
after
handler_irq
wr
%
g2
,
PSR_ET
,
%
psr
!
keep
ET
up
...
...
@@ -339,7 +338,7 @@ smp4m_ticker:
WRITE_PAUSE
wr
%
g2
,
PSR_ET
,
%
psr
WRITE_PAUSE
call
C_LABEL
(
smp4m_percpu_timer_interrupt
)
call
smp4m_percpu_timer_interrupt
add
%
sp
,
STACKFRAME_SZ
,
%
o0
wr
%
l0
,
PSR_ET
,
%
psr
WRITE_PAUSE
...
...
@@ -351,7 +350,7 @@ smp4m_ticker:
*/
maybe_smp4m_msg
:
GET_PROCESSOR_MID
(
o3
,
o2
)
set
C_LABEL
(
sun4m_interrupts
)
,
%
l5
set
sun4m_interrupts
,
%
l5
ld
[%
l5
],
%
o5
sethi
%
hi
(
0x60000000
),
%
o4
sll
%
o3
,
12
,
%
o3
...
...
@@ -378,10 +377,10 @@ maybe_smp4m_msg:
tst
%
o2
bne
2
f
nop
call
C_LABEL
(
smp_reschedule_irq
)
call
smp_reschedule_irq
add
%
o7
,
8
,
%
o7
2
:
call
C_LABEL
(
smp_stop_cpu_irq
)
call
smp_stop_cpu_irq
nop
RESTORE_ALL
...
...
@@ -391,7 +390,7 @@ linux_trap_ipi15_sun4m:
SAVE_ALL
sethi
%
hi
(
0x80000000
),
%
o2
GET_PROCESSOR_MID
(
o0
,
o1
)
set
C_LABEL
(
sun4m_interrupts
)
,
%
l5
set
sun4m_interrupts
,
%
l5
ld
[%
l5
],
%
o5
sll
%
o0
,
12
,
%
o0
add
%
o5
,
%
o0
,
%
o5
...
...
@@ -407,7 +406,7 @@ linux_trap_ipi15_sun4m:
WRITE_PAUSE
wr
%
l4
,
PSR_ET
,
%
psr
WRITE_PAUSE
call
C_LABEL
(
smp4m_cross_call_irq
)
call
smp4m_cross_call_irq
nop
b
ret_trap_lockless_ipi
clr
%
l6
...
...
@@ -426,7 +425,7 @@ linux_trap_ipi15_sun4m:
WRITE_PAUSE
wr
%
l4
,
PSR_ET
,
%
psr
WRITE_PAUSE
call
C_LABEL
(
sun4m_nmi
)
call
sun4m_nmi
nop
st
%
l4
,
[%
l5
+
0x8
]
WRITE_PAUSE
...
...
@@ -447,7 +446,7 @@ smp4d_ticker:
WRITE_PAUSE
wr
%
g2
,
PSR_ET
,
%
psr
WRITE_PAUSE
call
C_LABEL
(
smp4d_percpu_timer_interrupt
)
call
smp4d_percpu_timer_interrupt
add
%
sp
,
STACKFRAME_SZ
,
%
o0
wr
%
l0
,
PSR_ET
,
%
psr
WRITE_PAUSE
...
...
@@ -475,7 +474,7 @@ linux_trap_ipi15_sun4d:
WRITE_PAUSE
wr
%
l4
,
PSR_ET
,
%
psr
WRITE_PAUSE
call
C_LABEL
(
smp4d_cross_call_irq
)
call
smp4d_cross_call_irq
nop
b
ret_trap_lockless_ipi
clr
%
l6
...
...
@@ -513,7 +512,7 @@ bad_instruction:
add
%
sp
,
STACKFRAME_SZ
,
%
o0
mov
%
l1
,
%
o1
mov
%
l2
,
%
o2
call
C_LABEL
(
do_illegal_instruction
)
call
do_illegal_instruction
mov
%
l0
,
%
o3
RESTORE_ALL
...
...
@@ -533,7 +532,7 @@ priv_instruction:
add
%
sp
,
STACKFRAME_SZ
,
%
o0
mov
%
l1
,
%
o1
mov
%
l2
,
%
o2
call
C_LABEL
(
do_priv_instruction
)
call
do_priv_instruction
mov
%
l0
,
%
o3
RESTORE_ALL
...
...
@@ -552,7 +551,7 @@ mna_handler:
WRITE_PAUSE
ld
[%
l1
],
%
o1
call
C_LABEL
(
kernel_unaligned_trap
)
call
kernel_unaligned_trap
add
%
sp
,
STACKFRAME_SZ
,
%
o0
RESTORE_ALL
...
...
@@ -564,7 +563,7 @@ mna_fromuser:
WRITE_PAUSE
ld
[%
l1
],
%
o1
call
C_LABEL
(
user_unaligned_trap
)
call
user_unaligned_trap
add
%
sp
,
STACKFRAME_SZ
,
%
o0
RESTORE_ALL
...
...
@@ -581,7 +580,7 @@ fpd_trap_handler:
add
%
sp
,
STACKFRAME_SZ
,
%
o0
mov
%
l1
,
%
o1
mov
%
l2
,
%
o2
call
C_LABEL
(
do_fpd_trap
)
call
do_fpd_trap
mov
%
l0
,
%
o3
RESTORE_ALL
...
...
@@ -593,8 +592,8 @@ fpe_trap_handler:
set
fpsave_magic
,
%
l5
cmp
%
l1
,
%
l5
be
1
f
sethi
%
hi
(
C_LABEL
(
fpsave
)
),
%
l5
or
%
l5
,
%
lo
(
C_LABEL
(
fpsave
)
),
%
l5
sethi
%
hi
(
fpsave
),
%
l5
or
%
l5
,
%
lo
(
fpsave
),
%
l5
cmp
%
l1
,
%
l5
bne
2
f
sethi
%
hi
(
fpsave_catch2
),
%
l5
...
...
@@ -620,7 +619,7 @@ fpe_trap_handler:
add
%
sp
,
STACKFRAME_SZ
,
%
o0
mov
%
l1
,
%
o1
mov
%
l2
,
%
o2
call
C_LABEL
(
do_fpe_trap
)
call
do_fpe_trap
mov
%
l0
,
%
o3
RESTORE_ALL
...
...
@@ -637,7 +636,7 @@ do_tag_overflow:
add
%
sp
,
STACKFRAME_SZ
,
%
o0
mov
%
l1
,
%
o1
mov
%
l2
,
%
o2
call
C_LABEL
(
handle_tag_overflow
)
call
handle_tag_overflow
mov
%
l0
,
%
o3
RESTORE_ALL
...
...
@@ -654,7 +653,7 @@ do_watchpoint:
add
%
sp
,
STACKFRAME_SZ
,
%
o0
mov
%
l1
,
%
o1
mov
%
l2
,
%
o2
call
C_LABEL
(
handle_watchpoint
)
call
handle_watchpoint
mov
%
l0
,
%
o3
RESTORE_ALL
...
...
@@ -671,7 +670,7 @@ do_reg_access:
add
%
sp
,
STACKFRAME_SZ
,
%
o0
mov
%
l1
,
%
o1
mov
%
l2
,
%
o2
call
C_LABEL
(
handle_reg_access
)
call
handle_reg_access
mov
%
l0
,
%
o3
RESTORE_ALL
...
...
@@ -688,7 +687,7 @@ do_cp_disabled:
add
%
sp
,
STACKFRAME_SZ
,
%
o0
mov
%
l1
,
%
o1
mov
%
l2
,
%
o2
call
C_LABEL
(
handle_cp_disabled
)
call
handle_cp_disabled
mov
%
l0
,
%
o3
RESTORE_ALL
...
...
@@ -705,7 +704,7 @@ do_cp_exception:
add
%
sp
,
STACKFRAME_SZ
,
%
o0
mov
%
l1
,
%
o1
mov
%
l2
,
%
o2
call
C_LABEL
(
handle_cp_exception
)
call
handle_cp_exception
mov
%
l0
,
%
o3
RESTORE_ALL
...
...
@@ -722,7 +721,7 @@ do_hw_divzero:
add
%
sp
,
STACKFRAME_SZ
,
%
o0
mov
%
l1
,
%
o1
mov
%
l2
,
%
o2
call
C_LABEL
(
handle_hw_divzero
)
call
handle_hw_divzero
mov
%
l0
,
%
o3
RESTORE_ALL
...
...
@@ -739,7 +738,7 @@ do_flush_windows:
bne
dfw_kernel
nop
call
C_LABEL
(
flush_user_windows
)
call
flush_user_windows
nop
/
*
Advance
over
the
trap
instruction
.
*/
...
...
@@ -805,8 +804,8 @@ linux_trap_nmi_sun4c:
/
*
Ugh
,
we
need
to
clear
the
IRQ
line
.
This
is
now
*
a
very
sun4c
specific
trap
handler
...
*/
sethi
%
hi
(
C_LABEL
(
interrupt_enable
)
),
%
l5
ld
[%
l5
+
%
lo
(
C_LABEL
(
interrupt_enable
)
)],
%
l5
sethi
%
hi
(
interrupt_enable
),
%
l5
ld
[%
l5
+
%
lo
(
interrupt_enable
)],
%
l5
ldub
[%
l5
],
%
l6
andn
%
l6
,
INTS_ENAB
,
%
l6
stb
%
l6
,
[%
l5
]
...
...
@@ -829,51 +828,51 @@ linux_trap_nmi_sun4c:
lda
[%
o0
]
ASI_CONTROL
,
%
o4
!
async
vaddr
sub
%
o0
,
0x4
,
%
o0
lda
[%
o0
]
ASI_CONTROL
,
%
o3
!
async
error
call
C_LABEL
(
sparc_lvl15_nmi
)
call
sparc_lvl15_nmi
add
%
sp
,
STACKFRAME_SZ
,
%
o0
RESTORE_ALL
.
align
4
.
globl
C_LABEL
(
invalid_segment_patch1_ff
)
.
globl
C_LABEL
(
invalid_segment_patch2_ff
)
C_LABEL
(
invalid_segment_patch1_ff
)
:
cmp
%
l4
,
0xff
C_LABEL
(
invalid_segment_patch2_ff
)
:
mov
0xff
,
%
l3
.
globl
invalid_segment_patch1_ff
.
globl
invalid_segment_patch2_ff
invalid_segment_patch1_ff
:
cmp
%
l4
,
0xff
invalid_segment_patch2_ff
:
mov
0xff
,
%
l3
.
align
4
.
globl
C_LABEL
(
invalid_segment_patch1_1ff
)
.
globl
C_LABEL
(
invalid_segment_patch2_1ff
)
C_LABEL
(
invalid_segment_patch1_1ff
)
:
cmp
%
l4
,
0x1ff
C_LABEL
(
invalid_segment_patch2_1ff
)
:
mov
0x1ff
,
%
l3
.
globl
invalid_segment_patch1_1ff
.
globl
invalid_segment_patch2_1ff
invalid_segment_patch1_1ff
:
cmp
%
l4
,
0x1ff
invalid_segment_patch2_1ff
:
mov
0x1ff
,
%
l3
.
align
4
.
globl
C_LABEL
(
num_context_patch1_16
),
C_LABEL
(
num_context_patch2_16
)
C_LABEL
(
num_context_patch1_16
)
:
mov
0x10
,
%
l7
C_LABEL
(
num_context_patch2_16
)
:
mov
0x10
,
%
l7
.
globl
num_context_patch1_16
,
num_context_patch2_16
num_context_patch1_16
:
mov
0x10
,
%
l7
num_context_patch2_16
:
mov
0x10
,
%
l7
.
align
4
.
globl
C_LABEL
(
vac_linesize_patch_32
)
C_LABEL
(
vac_linesize_patch_32
)
:
subcc
%
l7
,
32
,
%
l7
.
globl
vac_linesize_patch_32
vac_linesize_patch_32
:
subcc
%
l7
,
32
,
%
l7
.
align
4
.
globl
C_LABEL
(
vac_hwflush_patch1_on
),
C_LABEL
(
vac_hwflush_patch2_on
)
.
globl
vac_hwflush_patch1_on
,
vac_hwflush_patch2_on
/*
*
Ugly
,
but
we
cant
use
hardware
flushing
on
the
sun4
and
we
'd require
*
two
instructions
(
Anton
)
*/
#ifdef CONFIG_SUN4
C_LABEL
(
vac_hwflush_patch1_on
)
:
nop
vac_hwflush_patch1_on
:
nop
#else
C_LABEL
(
vac_hwflush_patch1_on
)
:
addcc
%
l7
,
-
PAGE_SIZE
,
%
l7
vac_hwflush_patch1_on
:
addcc
%
l7
,
-
PAGE_SIZE
,
%
l7
#endif
C_LABEL
(
vac_hwflush_patch2_on
)
:
sta
%
g0
,
[%
l3
+
%
l7
]
ASI_HWFLUSHSEG
vac_hwflush_patch2_on
:
sta
%
g0
,
[%
l3
+
%
l7
]
ASI_HWFLUSHSEG
.
globl
C_LABEL
(
invalid_segment_patch1
),
C_LABEL
(
invalid_segment_patch2
)
.
globl
C_LABEL
(
num_context_patch1
),
C_LABEL
(
num_context_patch2
)
.
globl
C_LABEL
(
vac_linesize_patch
),
C_LABEL
(
vac_hwflush_patch1
)
.
globl
C_LABEL
(
vac_hwflush_patch2
)
.
globl
invalid_segment_patch1
,
invalid_segment_patch2
.
globl
num_context_patch1
,
num_context_patch2
.
globl
vac_linesize_patch
,
vac_hwflush_patch1
.
globl
vac_hwflush_patch2
.
align
4
.
globl
sun4c_fault
...
...
@@ -886,8 +885,8 @@ C_LABEL(vac_hwflush_patch2_on): sta %g0, [%l3 + %l7] ASI_HWFLUSHSEG
!
We
want
error
in
%
l5
,
vaddr
in
%
l6
sun4c_fault
:
#ifdef CONFIG_SUN4
sethi
%
hi
(
C_LABEL
(
sun4c_memerr_reg
)
),
%
l4
ld
[%
l4
+%
lo
(
C_LABEL
(
sun4c_memerr_reg
)
)],
%
l4
!
memerr
ctrl
reg
addr
sethi
%
hi
(
sun4c_memerr_reg
),
%
l4
ld
[%
l4
+%
lo
(
sun4c_memerr_reg
)],
%
l4
!
memerr
ctrl
reg
addr
ld
[%
l4
],
%
l6
!
memerr
ctrl
reg
ld
[%
l4
+
4
],
%
l5
!
memerr
vaddr
reg
andcc
%
l6
,
0x80
,
%
g0
!
check
for
error
type
...
...
@@ -895,7 +894,7 @@ sun4c_fault:
be
0
f
!
normal
error
sethi
%
hi
(
AC_BUS_ERROR
),
%
l4
!
bus
err
reg
addr
call
C_LABEL
(
prom_halt
)
!
something
weird
happened
call
prom_halt
!
something
weird
happened
!
what
exactly
did
happen
?
!
what
should
we
do
here
?
...
...
@@ -959,12 +958,12 @@ sun4c_fault:
/
*
Test
for
NULL
pte_t
*
in
vmalloc
area
.
*/
sethi
%
hi
(
VMALLOC_START
),
%
l4
cmp
%
l5
,
%
l4
blu
,
a
C_LABEL
(
invalid_segment_patch1
)
blu
,
a
invalid_segment_patch1
lduXa
[%
l5
]
ASI_SEGMAP
,
%
l4
sethi
%
hi
(
C_LABEL
(
swapper_pg_dir
)
),
%
l4
sethi
%
hi
(
swapper_pg_dir
),
%
l4
srl
%
l5
,
SUN4C_PGDIR_SHIFT
,
%
l6
or
%
l4
,
%
lo
(
C_LABEL
(
swapper_pg_dir
)
),
%
l4
or
%
l4
,
%
lo
(
swapper_pg_dir
),
%
l4
sll
%
l6
,
2
,
%
l6
ld
[%
l4
+
%
l6
],
%
l4
#ifdef CONFIG_SUN4
...
...
@@ -976,15 +975,15 @@ sun4c_fault:
be
sun4c_fault_fromuser
lduXa
[%
l5
]
ASI_SEGMAP
,
%
l4
C_LABEL
(
invalid_segment_patch1
)
:
invalid_segment_patch1
:
cmp
%
l4
,
0x7f
bne
1
f
sethi
%
hi
(
C_LABEL
(
sun4c_kfree_ring
)
),
%
l4
or
%
l4
,
%
lo
(
C_LABEL
(
sun4c_kfree_ring
)
),
%
l4
sethi
%
hi
(
sun4c_kfree_ring
),
%
l4
or
%
l4
,
%
lo
(
sun4c_kfree_ring
),
%
l4
ld
[%
l4
+
0x18
],
%
l3
deccc
%
l3
!
do
we
have
a
free
entry
?
bcs
,
a
2
f
!
no
,
unmap
one
.
sethi
%
hi
(
C_LABEL
(
sun4c_kernel_ring
)
),
%
l4
sethi
%
hi
(
sun4c_kernel_ring
),
%
l4
st
%
l3
,
[%
l4
+
0x18
]
!
sun4c_kfree_ring
.
num_entries
--
...
...
@@ -997,8 +996,8 @@ C_LABEL(invalid_segment_patch1):
st
%
l7
,
[%
l3
+
0x04
]
!
next
->
prev
=
entry
->
prev
st
%
l3
,
[%
l7
+
0x00
]
!
entry
->
prev
->
next
=
next
sethi
%
hi
(
C_LABEL
(
sun4c_kernel_ring
)
),
%
l4
or
%
l4
,
%
lo
(
C_LABEL
(
sun4c_kernel_ring
)
),
%
l4
sethi
%
hi
(
sun4c_kernel_ring
),
%
l4
or
%
l4
,
%
lo
(
sun4c_kernel_ring
),
%
l4
!
head
=
&
sun4c_kernel_ring
.
ringhd
ld
[%
l4
+
0x00
],
%
l7
!
head
->
next
...
...
@@ -1016,7 +1015,7 @@ C_LABEL(invalid_segment_patch1):
ld
[%
l6
+
0x08
],
%
l5
2
:
or
%
l4
,
%
lo
(
C_LABEL
(
sun4c_kernel_ring
)
),
%
l4
or
%
l4
,
%
lo
(
sun4c_kernel_ring
),
%
l4
!
head
=
&
sun4c_kernel_ring
.
ringhd
ld
[%
l4
+
0x04
],
%
l6
!
entry
=
head
->
prev
...
...
@@ -1030,11 +1029,11 @@ C_LABEL(invalid_segment_patch1):
sethi
%
hi
((
64
*
1024
)),
%
l7
#endif
9
:
C_LABEL
(
vac_hwflush_patch1
)
:
C_LABEL
(
vac_linesize_patch
)
:
vac_hwflush_patch1
:
vac_linesize_patch
:
subcc
%
l7
,
16
,
%
l7
bne
9
b
C_LABEL
(
vac_hwflush_patch2
)
:
vac_hwflush_patch2
:
sta
%
g0
,
[%
l3
+
%
l7
]
ASI_FLUSHSEG
st
%
l5
,
[%
l6
+
0x08
]
!
entry
->
vaddr
=
address
...
...
@@ -1055,7 +1054,7 @@ C_LABEL(vac_hwflush_patch2):
mov
%
l3
,
%
l5
!
address
=
tmp
4
:
C_LABEL
(
num_context_patch1
)
:
num_context_patch1
:
mov
0x08
,
%
l7
ld
[%
l6
+
0x08
],
%
l4
...
...
@@ -1072,7 +1071,7 @@ C_LABEL(num_context_patch1):
3
:
deccc
%
l7
sethi
%
hi
(
AC_CONTEXT
),
%
l3
stba
%
l7
,
[%
l3
]
ASI_CONTROL
C_LABEL
(
invalid_segment_patch2
)
:
invalid_segment_patch2
:
mov
0x7f
,
%
l3
stXa
%
l3
,
[%
l5
]
ASI_SEGMAP
andn
%
l4
,
0x1ff
,
%
l3
...
...
@@ -1108,12 +1107,12 @@ C_LABEL(invalid_segment_patch2):
add
%
l5
,
%
l4
,
%
l5
b
7
f
sethi
%
hi
(
C_LABEL
(
sun4c_kernel_faults
)
),
%
l4
sethi
%
hi
(
sun4c_kernel_faults
),
%
l4
1
:
srl
%
l5
,
SUN4C_PGDIR_SHIFT
,
%
l3
sethi
%
hi
(
C_LABEL
(
swapper_pg_dir
)
),
%
l4
or
%
l4
,
%
lo
(
C_LABEL
(
swapper_pg_dir
)
),
%
l4
sethi
%
hi
(
swapper_pg_dir
),
%
l4
or
%
l4
,
%
lo
(
swapper_pg_dir
),
%
l4
sll
%
l3
,
2
,
%
l3
ld
[%
l4
+
%
l3
],
%
l4
#ifndef CONFIG_SUN4
...
...
@@ -1137,11 +1136,11 @@ C_LABEL(invalid_segment_patch2):
bne
2
b
add
%
l5
,
%
l4
,
%
l5
sethi
%
hi
(
C_LABEL
(
sun4c_kernel_faults
)
),
%
l4
sethi
%
hi
(
sun4c_kernel_faults
),
%
l4
7
:
ld
[%
l4
+
%
lo
(
C_LABEL
(
sun4c_kernel_faults
)
)],
%
l3
ld
[%
l4
+
%
lo
(
sun4c_kernel_faults
)],
%
l3
inc
%
l3
st
%
l3
,
[%
l4
+
%
lo
(
C_LABEL
(
sun4c_kernel_faults
)
)]
st
%
l3
,
[%
l4
+
%
lo
(
sun4c_kernel_faults
)]
/
*
Restore
condition
codes
*/
wr
%
l0
,
0x0
,
%
psr
...
...
@@ -1163,14 +1162,14 @@ sun4c_fault_fromuser:
wr
%
l0
,
PSR_ET
,
%
psr
WRITE_PAUSE
call
C_LABEL
(
do_sun4c_fault
)
call
do_sun4c_fault
add
%
sp
,
STACKFRAME_SZ
,
%
o0
!
arg1
=
pt_regs
ptr
RESTORE_ALL
.
align
4
.
globl
C_LABEL
(
srmmu_fault
)
C_LABEL
(
srmmu_fault
)
:
.
globl
srmmu_fault
srmmu_fault
:
mov
0x400
,
%
l5
mov
0x300
,
%
l4
...
...
@@ -1197,7 +1196,7 @@ C_LABEL(srmmu_fault):
wr
%
l0
,
PSR_ET
,
%
psr
WRITE_PAUSE
call
C_LABEL
(
do_sparc_fault
)
call
do_sparc_fault
add
%
sp
,
STACKFRAME_SZ
,
%
o0
!
arg1
=
pt_regs
ptr
RESTORE_ALL
...
...
@@ -1207,19 +1206,19 @@ C_LABEL(srmmu_fault):
*
like
indir_syscall
(
scall_num
,
arg0
,
arg1
,
arg2
...
)
; etc.
*
This
is
complete
brain
damage
.
*/
.
globl
C_LABEL
(
sunos_indir
)
C_LABEL
(
sunos_indir
)
:
.
globl
sunos_indir
sunos_indir
:
mov
%
o7
,
%
l4
cmp
%
o0
,
NR_SYSCALLS
blu
,
a
1
f
sll
%
o0
,
0x2
,
%
o0
sethi
%
hi
(
C_LABEL
(
sunos_nosys
)
),
%
l6
sethi
%
hi
(
sunos_nosys
),
%
l6
b
2
f
or
%
l6
,
%
lo
(
C_LABEL
(
sunos_nosys
)
),
%
l6
or
%
l6
,
%
lo
(
sunos_nosys
),
%
l6
1
:
set
C_LABEL
(
sunos_sys_table
)
,
%
l7
set
sunos_sys_table
,
%
l7
ld
[%
l7
+
%
o0
],
%
l6
2
:
...
...
@@ -1233,17 +1232,17 @@ C_LABEL(sunos_indir):
#endif
.
align
4
.
globl
C_LABEL
(
sys_nis_syscall
)
C_LABEL
(
sys_nis_syscall
)
:
.
globl
sys_nis_syscall
sys_nis_syscall
:
mov
%
o7
,
%
l5
add
%
sp
,
STACKFRAME_SZ
,
%
o0
!
pt_regs
*
regs
arg
call
C_LABEL
(
c_sys_nis_syscall
)
call
c_sys_nis_syscall
mov
%
l5
,
%
o7
.
align
4
.
globl
C_LABEL
(
sys_ptrace
)
C_LABEL
(
sys_ptrace
)
:
call
C_LABEL
(
do_ptrace
)
.
globl
sys_ptrace
sys_ptrace
:
call
do_ptrace
add
%
sp
,
STACKFRAME_SZ
,
%
o0
ld
[%
curptr
+
TI_FLAGS
],
%
l5
...
...
@@ -1251,49 +1250,49 @@ C_LABEL(sys_ptrace):
be
1
f
nop
call
C_LABEL
(
syscall_trace
)
call
syscall_trace
nop
1
:
RESTORE_ALL
.
align
4
.
globl
C_LABEL
(
sys_execve
)
C_LABEL
(
sys_execve
)
:
.
globl
sys_execve
sys_execve
:
mov
%
o7
,
%
l5
add
%
sp
,
STACKFRAME_SZ
,
%
o0
!
pt_regs
*
regs
arg
call
C_LABEL
(
sparc_execve
)
call
sparc_execve
mov
%
l5
,
%
o7
.
align
4
.
globl
C_LABEL
(
sys_pipe
)
C_LABEL
(
sys_pipe
)
:
.
globl
sys_pipe
sys_pipe
:
mov
%
o7
,
%
l5
add
%
sp
,
STACKFRAME_SZ
,
%
o0
!
pt_regs
*
regs
arg
call
C_LABEL
(
sparc_pipe
)
call
sparc_pipe
mov
%
l5
,
%
o7
.
align
4
.
globl
C_LABEL
(
sys_sigaltstack
)
C_LABEL
(
sys_sigaltstack
)
:
.
globl
sys_sigaltstack
sys_sigaltstack
:
mov
%
o7
,
%
l5
mov
%
fp
,
%
o2
call
C_LABEL
(
do_sigaltstack
)
call
do_sigaltstack
mov
%
l5
,
%
o7
.
align
4
.
globl
C_LABEL
(
sys_sigstack
)
C_LABEL
(
sys_sigstack
)
:
.
globl
sys_sigstack
sys_sigstack
:
mov
%
o7
,
%
l5
mov
%
fp
,
%
o2
call
C_LABEL
(
do_sys_sigstack
)
call
do_sys_sigstack
mov
%
l5
,
%
o7
.
align
4
.
globl
C_LABEL
(
sys_sigpause
)
C_LABEL
(
sys_sigpause
)
:
.
globl
sys_sigpause
sys_sigpause
:
/
*
Note
:
%
o0
already
has
correct
value
...
*/
call
C_LABEL
(
do_sigpause
)
call
do_sigpause
add
%
sp
,
STACKFRAME_SZ
,
%
o1
ld
[%
curptr
+
TI_FLAGS
],
%
l5
...
...
@@ -1301,7 +1300,7 @@ C_LABEL(sys_sigpause):
be
1
f
nop
call
C_LABEL
(
syscall_trace
)
call
syscall_trace
nop
1
:
...
...
@@ -1309,9 +1308,9 @@ C_LABEL(sys_sigpause):
RESTORE_ALL
.
align
4
.
globl
C_LABEL
(
sys_sigsuspend
)
C_LABEL
(
sys_sigsuspend
)
:
call
C_LABEL
(
do_sigsuspend
)
.
globl
sys_sigsuspend
sys_sigsuspend
:
call
do_sigsuspend
add
%
sp
,
STACKFRAME_SZ
,
%
o0
ld
[%
curptr
+
TI_FLAGS
],
%
l5
...
...
@@ -1319,7 +1318,7 @@ C_LABEL(sys_sigsuspend):
be
1
f
nop
call
C_LABEL
(
syscall_trace
)
call
syscall_trace
nop
1
:
...
...
@@ -1327,10 +1326,10 @@ C_LABEL(sys_sigsuspend):
RESTORE_ALL
.
align
4
.
globl
C_LABEL
(
sys_rt_sigsuspend
)
C_LABEL
(
sys_rt_sigsuspend
)
:
.
globl
sys_rt_sigsuspend
sys_rt_sigsuspend
:
/
*
Note
:
%
o0
,
%
o1
already
have
correct
value
...
*/
call
C_LABEL
(
do_rt_sigsuspend
)
call
do_rt_sigsuspend
add
%
sp
,
STACKFRAME_SZ
,
%
o2
ld
[%
curptr
+
TI_FLAGS
],
%
l5
...
...
@@ -1338,7 +1337,7 @@ C_LABEL(sys_rt_sigsuspend):
be
1
f
nop
call
C_LABEL
(
syscall_trace
)
call
syscall_trace
nop
1
:
...
...
@@ -1346,9 +1345,9 @@ C_LABEL(sys_rt_sigsuspend):
RESTORE_ALL
.
align
4
.
globl
C_LABEL
(
sys_sigreturn
)
C_LABEL
(
sys_sigreturn
)
:
call
C_LABEL
(
do_sigreturn
)
.
globl
sys_sigreturn
sys_sigreturn
:
call
do_sigreturn
add
%
sp
,
STACKFRAME_SZ
,
%
o0
ld
[%
curptr
+
TI_FLAGS
],
%
l5
...
...
@@ -1356,7 +1355,7 @@ C_LABEL(sys_sigreturn):
be
1
f
nop
call
C_LABEL
(
syscall_trace
)
call
syscall_trace
nop
1
:
...
...
@@ -1366,9 +1365,9 @@ C_LABEL(sys_sigreturn):
RESTORE_ALL
.
align
4
.
globl
C_LABEL
(
sys_rt_sigreturn
)
C_LABEL
(
sys_rt_sigreturn
)
:
call
C_LABEL
(
do_rt_sigreturn
)
.
globl
sys_rt_sigreturn
sys_rt_sigreturn
:
call
do_rt_sigreturn
add
%
sp
,
STACKFRAME_SZ
,
%
o0
ld
[%
curptr
+
TI_FLAGS
],
%
l5
...
...
@@ -1376,7 +1375,7 @@ C_LABEL(sys_rt_sigreturn):
be
1
f
nop
call
C_LABEL
(
syscall_trace
)
call
syscall_trace
nop
1
:
...
...
@@ -1391,8 +1390,8 @@ C_LABEL(sys_rt_sigreturn):
*
XXX
code
just
like
on
sparc64
...
-
DaveM
*/
.
align
4
.
globl
C_LABEL
(
sys_fork
)
,
flush_patch_two
C_LABEL
(
sys_fork
)
:
.
globl
sys_fork
,
flush_patch_two
sys_fork
:
mov
%
o7
,
%
l5
flush_patch_two
:
FLUSH_ALL_KERNEL_WINDOWS
;
...
...
@@ -1406,12 +1405,12 @@ flush_patch_two:
std
%
g4
,
[%
o4
+
AOFF_task_thread
+
AOFF_thread_fork_kpsr
]
add
%
sp
,
STACKFRAME_SZ
,
%
o2
!
arg2
:
pt_regs
ptr
mov
0
,
%
o3
call
C_LABEL
(
sparc_do_fork
)
call
sparc_do_fork
mov
%
l5
,
%
o7
/
*
Whee
,
kernel
threads
!
*/
.
globl
C_LABEL
(
sys_clone
)
,
flush_patch_three
C_LABEL
(
sys_clone
)
:
.
globl
sys_clone
,
flush_patch_three
sys_clone
:
mov
%
o7
,
%
l5
flush_patch_three
:
FLUSH_ALL_KERNEL_WINDOWS
;
...
...
@@ -1430,12 +1429,12 @@ flush_patch_three:
std
%
g4
,
[%
o4
+
AOFF_task_thread
+
AOFF_thread_fork_kpsr
]
add
%
sp
,
STACKFRAME_SZ
,
%
o2
!
arg2
:
pt_regs
ptr
mov
0
,
%
o3
call
C_LABEL
(
sparc_do_fork
)
call
sparc_do_fork
mov
%
l5
,
%
o7
/
*
Whee
,
real
vfork
!
*/
.
globl
C_LABEL
(
sys_vfork
)
,
flush_patch_four
C_LABEL
(
sys_vfork
)
:
.
globl
sys_vfork
,
flush_patch_four
sys_vfork
:
flush_patch_four
:
FLUSH_ALL_KERNEL_WINDOWS
;
ld
[%
curptr
+
TI_TASK
],
%
o4
...
...
@@ -1447,16 +1446,16 @@ flush_patch_four:
sethi
%
hi
(
0x4000
| 0x0100 |
SIGCHLD
),
%
o0
mov
%
fp
,
%
o1
or
%
o0
,
%
lo
(
0x4000
| 0x0100 |
SIGCHLD
),
%
o0
sethi
%
hi
(
C_LABEL
(
sparc_do_fork
)
),
%
l1
sethi
%
hi
(
sparc_do_fork
),
%
l1
mov
0
,
%
o3
jmpl
%
l1
+
%
lo
(
C_LABEL
(
sparc_do_fork
)
),
%
g0
jmpl
%
l1
+
%
lo
(
sparc_do_fork
),
%
g0
add
%
sp
,
STACKFRAME_SZ
,
%
o2
.
align
4
linux_sparc_ni_syscall
:
sethi
%
hi
(
C_LABEL
(
sys_ni_syscall
)
),
%
l7
sethi
%
hi
(
sys_ni_syscall
),
%
l7
b
syscall_is_too_hard
or
%
l7
,
%
lo
(
C_LABEL
(
sys_ni_syscall
)
),
%
l7
or
%
l7
,
%
lo
(
sys_ni_syscall
),
%
l7
linux_fast_syscall
:
andn
%
l7
,
3
,
%
l7
...
...
@@ -1467,7 +1466,7 @@ linux_fast_syscall:
mov
%
i3
,
%
o3
linux_syscall_trace
:
call
C_LABEL
(
syscall_trace
)
call
syscall_trace
nop
mov
%
i0
,
%
o0
mov
%
i1
,
%
o1
...
...
@@ -1476,11 +1475,11 @@ linux_syscall_trace:
b
2
f
mov
%
i4
,
%
o4
.
globl
C_LABEL
(
ret_from_fork
)
C_LABEL
(
ret_from_fork
)
:
.
globl
ret_from_fork
ret_from_fork
:
call
schedule_tail
mov
%
g3
,
%
o0
b
C_LABEL
(
ret_sys_call
)
b
ret_sys_call
ld
[%
sp
+
STACKFRAME_SZ
+
PT_I0
],
%
o0
/
*
Linux
native
and
SunOS
system
calls
enter
here
...
*/
...
...
@@ -1518,8 +1517,8 @@ syscall_is_too_hard:
st
%
o0
,
[%
sp
+
STACKFRAME_SZ
+
PT_I0
]
.
globl
C_LABEL
(
ret_sys_call
)
C_LABEL
(
ret_sys_call
)
:
.
globl
ret_sys_call
ret_sys_call
:
ld
[%
curptr
+
TI_FLAGS
],
%
l6
cmp
%
o0
,
-
ENOIOCTLCMD
ld
[%
sp
+
STACKFRAME_SZ
+
PT_PSR
],
%
g3
...
...
@@ -1554,7 +1553,7 @@ C_LABEL(ret_sys_call):
st
%
l2
,
[%
sp
+
STACKFRAME_SZ
+
PT_NPC
]
linux_syscall_trace2
:
call
C_LABEL
(
syscall_trace
)
call
syscall_trace
add
%
l1
,
0x4
,
%
l2
/*
npc
=
npc
+
4
*/
st
%
l1
,
[%
sp
+
STACKFRAME_SZ
+
PT_PC
]
b
ret_trap_entry
...
...
@@ -1595,7 +1594,7 @@ solaris_syscall:
nop
mov
%
i0
,
%
l5
call
C_LABEL
(
do_solaris_syscall
)
call
do_solaris_syscall
add
%
sp
,
STACKFRAME_SZ
,
%
o0
st
%
o0
,
[%
sp
+
STACKFRAME_SZ
+
PT_I0
]
...
...
@@ -1651,7 +1650,7 @@ sunos_syscall:
nop
nop
mov
%
i0
,
%
l5
call
C_LABEL
(
do_sunos_syscall
)
call
do_sunos_syscall
add
%
sp
,
STACKFRAME_SZ
,
%
o0
#endif
...
...
@@ -1664,7 +1663,7 @@ bsd_syscall:
blu
,
a
1
f
sll
%
g1
,
2
,
%
l4
set
C_LABEL
(
sys_ni_syscall
)
,
%
l7
set
sys_ni_syscall
,
%
l7
b
bsd_is_too_hard
nop
...
...
@@ -1707,8 +1706,8 @@ bsd_is_too_hard:
*/
sub
%
g0
,
%
o0
,
%
o0
#if 0 /* XXX todo XXX */
sethi
%
hi
(
C_LABEL
(
bsd_xlatb_rorl
),
%
o3
or
%
o3
,
%
lo
(
C_LABEL
(
bsd_xlatb_rorl
)
),
%
o3
sethi
%
hi
(
bsd_xlatb_rorl
),
%
o3
or
%
o3
,
%
lo
(
bsd_xlatb_rorl
),
%
o3
sll
%
o0
,
2
,
%
o0
ld
[%
o3
+
%
o0
],
%
o0
#endif
...
...
@@ -1731,8 +1730,8 @@ bsd_is_too_hard:
*
void
*
fpqueue
,
unsigned
long
*
fpqdepth
)
*/
.
globl
C_LABEL
(
fpsave
)
C_LABEL
(
fpsave
)
:
.
globl
fpsave
fpsave
:
st
%
fsr
,
[%
o1
]
!
this
can
trap
on
us
if
fpu
is
in
bogon
state
ld
[%
o1
],
%
g1
set
0x2000
,
%
g4
...
...
@@ -1782,13 +1781,13 @@ fpsave_catch:
st
%
fsr
,
[%
o1
]
fpsave_catch2
:
b
C_LABEL
(
fpsave
)
+
4
b
fpsave
+
4
st
%
fsr
,
[%
o1
]
/
*
void
fpload
(
unsigned
long
*
fpregs
,
unsigned
long
*
fsr
)
; */
.
globl
C_LABEL
(
fpload
)
C_LABEL
(
fpload
)
:
.
globl
fpload
fpload
:
ldd
[%
o0
+
0x00
],
%f0
ldd
[%
o0
+
0x08
],
%f2
ldd
[%
o0
+
0x10
],
%f4
...
...
@@ -1809,8 +1808,8 @@ C_LABEL(fpload):
retl
nop
.
globl
C_LABEL
(
ndelay
)
C_LABEL
(
ndelay
)
:
.
globl
ndelay
ndelay
:
save
%
sp
,
-
STACKFRAME_SZ
,
%
sp
mov
%
i0
,
%
o0
call
.
umul
...
...
@@ -1818,8 +1817,8 @@ C_LABEL(ndelay):
ba
delay_continue
nop
.
globl
C_LABEL
(
udelay
)
C_LABEL
(
udelay
)
:
.
globl
udelay
udelay
:
save
%
sp
,
-
STACKFRAME_SZ
,
%
sp
mov
%
i0
,
%
o0
sethi
%
hi
(
0x10c6
),
%
o1
...
...
@@ -1827,12 +1826,12 @@ C_LABEL(udelay):
or
%
o1
,
%
lo
(
0x10c6
),
%
o1
delay_continue
:
#ifndef CONFIG_SMP
sethi
%
hi
(
C_LABEL
(
loops_per_jiffy
)
),
%
o3
sethi
%
hi
(
loops_per_jiffy
),
%
o3
call
.
umul
ld
[%
o3
+
%
lo
(
C_LABEL
(
loops_per_jiffy
)
)],
%
o1
ld
[%
o3
+
%
lo
(
loops_per_jiffy
)],
%
o1
#else
GET_PROCESSOR_OFFSET
(
o4
,
o2
)
set
C_LABEL
(
cpu_data
)
,
%
o3
set
cpu_data
,
%
o3
call
.
umul
ld
[%
o3
+
%
o4
],
%
o1
#endif
...
...
@@ -1858,14 +1857,14 @@ breakpoint_trap:
WRITE_PAUSE
st
%
i0
,
[%
sp
+
STACKFRAME_SZ
+
PT_G0
]
!
for
restarting
syscalls
call
C_LABEL
(
sparc_breakpoint
)
call
sparc_breakpoint
add
%
sp
,
STACKFRAME_SZ
,
%
o0
RESTORE_ALL
.
align
4
.
globl
C_LABEL
(
__handle_exception
)
,
flush_patch_exception
C_LABEL
(
__handle_exception
)
:
.
globl
__handle_exception
,
flush_patch_exception
__handle_exception
:
flush_patch_exception
:
FLUSH_ALL_KERNEL_WINDOWS
;
ldd
[%
o0
],
%
o6
...
...
@@ -1873,7 +1872,7 @@ flush_patch_exception:
mov
1
,
%
g1
!
signal
EFAULT
condition
.
align
4
.
globl
C_LABEL
(
kill_user_windows
)
,
kuw_patch1_7win
.
globl
kill_user_windows
,
kuw_patch1_7win
.
globl
kuw_patch1
kuw_patch1_7win
:
sll
%
o3
,
6
,
%
o3
...
...
@@ -1881,7 +1880,7 @@ kuw_patch1_7win: sll %o3, 6, %o3
*
case
scenerio
,
it
is
several
times
better
than
taking
the
*
traps
with
the
old
method
of
just
doing
flush_user_windows
()
.
*/
C_LABEL
(
kill_user_windows
)
:
kill_user_windows
:
ld
[%
g6
+
TI_UWINMASK
],
%
o0
!
get
current
umask
orcc
%
g0
,
%
o0
,
%
g0
!
if
no
bits
set
,
we
are
done
be
3
f
!
nothing
to
do
...
...
@@ -1911,8 +1910,8 @@ kuw_patch1:
st
%
g0
,
[%
g6
+
TI_W_SAVED
]
!
no
windows
saved
.
align
4
.
globl
C_LABEL
(
restore_current
)
C_LABEL
(
restore_current
)
:
.
globl
restore_current
restore_current
:
LOAD_CURRENT
(
g6
,
o0
)
retl
nop
...
...
@@ -1932,8 +1931,8 @@ linux_trap_ipi15_pcic:
*
The
busy
loop
is
necessary
because
the
PIO
error
*
sometimes
does
not
go
away
quickly
and
we
trap
again
.
*/
sethi
%
hi
(
C_LABEL
(
pcic_regs
)
),
%
o1
ld
[%
o1
+
%
lo
(
C_LABEL
(
pcic_regs
)
)],
%
o2
sethi
%
hi
(
pcic_regs
),
%
o1
ld
[%
o1
+
%
lo
(
pcic_regs
)],
%
o2
!
Get
pending
status
for
printouts
later
.
ld
[%
o2
+
PCI_SYS_INT_PENDING
],
%
o0
...
...
@@ -1952,12 +1951,12 @@ linux_trap_ipi15_pcic:
wr
%
l4
,
PSR_ET
,
%
psr
WRITE_PAUSE
call
C_LABEL
(
pcic_nmi
)
call
pcic_nmi
add
%
sp
,
STACKFRAME_SZ
,
%
o1
!
struct
pt_regs
*
regs
RESTORE_ALL
.
globl
C_LABEL
(
pcic_nmi_trap_patch
)
C_LABEL
(
pcic_nmi_trap_patch
)
:
.
globl
pcic_nmi_trap_patch
pcic_nmi_trap_patch
:
sethi
%
hi
(
linux_trap_ipi15_pcic
),
%
l3
jmpl
%
l3
+
%
lo
(
linux_trap_ipi15_pcic
),
%
g0
rd
%
psr
,
%
l0
...
...
arch/sparc/kernel/etrap.S
View file @
2d6d3d27
...
...
@@ -5,7 +5,6 @@
*
Copyright
(
C
)
1995
David
S
.
Miller
(
davem
@
caip
.
rutgers
.
edu
)
*/
#include <asm/cprefix.h>
#include <asm/head.h>
#include <asm/asi.h>
#include <asm/contregs.h>
...
...
@@ -217,9 +216,9 @@ tsetup_patch6:
/
*
Call
MMU
-
architecture
dependent
stack
checking
*
routine
.
*/
.
globl
C_LABEL
(
tsetup_mmu_patchme
)
C_LABEL
(
tsetup_mmu_patchme
)
:
b
C_LABEL
(
tsetup_sun4c_stackchk
)
.
globl
tsetup_mmu_patchme
tsetup_mmu_patchme
:
b
tsetup_sun4c_stackchk
andcc
%
sp
,
0x7
,
%
g0
/
*
Architecture
specific
stack
checking
routines
.
When
either
...
...
@@ -229,8 +228,8 @@ C_LABEL(tsetup_mmu_patchme):
*/
#define glob_tmp g1
.
globl
C_LABEL
(
tsetup_sun4c_stackchk
)
C_LABEL
(
tsetup_sun4c_stackchk
)
:
.
globl
tsetup_sun4c_stackchk
tsetup_sun4c_stackchk
:
/
*
Done
by
caller
:
andcc
%
sp
,
0x7
,
%
g0
*/
bne
trap_setup_user_stack_is_bolixed
sra
%
sp
,
29
,
%
glob_tmp
...
...
@@ -276,8 +275,8 @@ tsetup_sun4c_onepage:
jmpl
%
t_retpc
+
0x8
,
%
g0
mov
%
t_kstack
,
%
sp
.
globl
C_LABEL
(
tsetup_srmmu_stackchk
)
C_LABEL
(
tsetup_srmmu_stackchk
)
:
.
globl
tsetup_srmmu_stackchk
tsetup_srmmu_stackchk
:
/
*
Check
results
of
callers
andcc
%
sp
,
0x7
,
%
g0
*/
bne
trap_setup_user_stack_is_bolixed
sethi
%
hi
(
PAGE_OFFSET
),
%
glob_tmp
...
...
arch/sparc/kernel/head.S
View file @
2d6d3d27
...
...
@@ -14,7 +14,6 @@
#include <linux/config.h>
#include <linux/init.h>
#include <asm/cprefix.h>
#include <asm/head.h>
#include <asm/asi.h>
#include <asm/contregs.h>
...
...
@@ -34,18 +33,18 @@
*/
.
align
4
.
globl
C_LABEL
(
cputyp
)
C_LABEL
(
cputyp
)
:
.
globl
cputyp
cputyp
:
.
word
1
.
align
4
.
globl
C_LABEL
(
cputypval
)
C_LABEL
(
cputypval
)
:
.
globl
cputypval
cputypval
:
.
asciz
"sun4c"
.
ascii
" "
C_LABEL
(
cputypvalend
)
:
C_LABEL
(
cputypvallen
)
=
C_LABEL
(
cputypvar
)
-
C_LABEL
(
cputypval
)
cputypvalend
:
cputypvallen
=
cputypvar
-
cputypval
.
align
4
/*
...
...
@@ -56,12 +55,12 @@ C_LABEL(cputypvallen) = C_LABEL(cputypvar) - C_LABEL(cputypval)
/*
Uh
,
actually
Linus
it
is
I
who
cannot
spell
.
Too
much
murky
*
Sparc
assembly
will
do
this
to
ya
.
*/
C_LABEL
(
cputypvar
)
:
cputypvar
:
.
asciz
"compatability"
/*
Tested
on
SS
-
5
,
SS
-
10
.
Probably
someone
at
Sun
applied
a
spell
-
checker
.
*/
.
align
4
C_LABEL
(
cputypvar_sun4m
)
:
cputypvar_sun4m
:
.
asciz
"compatible"
.
align
4
...
...
@@ -88,14 +87,14 @@ sun4e_notsup:
/
*
The
Sparc
trap
table
,
bootloader
gives
us
control
at
_start
.
*/
.
text
.
globl
start
,
_stext
,
_start
,
__stext
.
globl
C_LABEL
(
trapbase
)
.
globl
trapbase
_start
:
/
*
danger
danger
*/
__stext
:
_stext
:
start
:
C_LABEL
(
trapbase
)
:
trapbase
:
#ifdef CONFIG_SMP
C_LABEL
(
trapbase_cpu0
)
:
trapbase_cpu0
:
#endif
/*
We
get
control
passed
to
us
here
at
t_zero
.
*/
t_zero
:
b
gokernel
; nop; nop; nop;
...
...
@@ -202,13 +201,13 @@ t_badfc:BAD_TRAP(0xfc) BAD_TRAP(0xfd)
dbtrap
:
BAD_TRAP
(0
xfe
)
/*
Debugger
/
PROM
breakpoint
#
1
*/
dbtrap2
:
BAD_TRAP
(
0xff
)
/
*
Debugger
/
PROM
breakpoint
#
2
*/
.
globl
C_LABEL
(
end_traptable
)
C_LABEL
(
end_traptable
)
:
.
globl
end_traptable
end_traptable
:
#ifdef CONFIG_SMP
/
*
Trap
tables
for
the
other
cpus
.
*/
.
globl
C_LABEL
(
trapbase_cpu1
),
C_LABEL
(
trapbase_cpu2
),
C_LABEL
(
trapbase_cpu3
)
C_LABEL
(
trapbase_cpu1
)
:
.
globl
trapbase_cpu1
,
trapbase_cpu2
,
trapbase_cpu3
trapbase_cpu1
:
BAD_TRAP
(0
x0
)
SRMMU_TFAULT
TRAP_ENTRY
(
0x2
,
bad_instruction
)
TRAP_ENTRY
(0
x3
,
priv_instruction
)
TRAP_ENTRY
(
0x4
,
fpd_trap_handler
)
WINDOW_SPILL
WINDOW_FILL
TRAP_ENTRY
(
0x7
,
mna_handler
)
...
...
@@ -276,7 +275,7 @@ C_LABEL(trapbase_cpu1):
BAD_TRAP
(0
xf7
)
BAD_TRAP
(
0xf8
)
BAD_TRAP
(
0xf9
)
BAD_TRAP
(
0xfa
)
BAD_TRAP
(
0xfb
)
BAD_TRAP
(0
xfc
)
BAD_TRAP
(
0xfd
)
BAD_TRAP
(
0xfe
)
BAD_TRAP
(
0xff
)
C_LABEL
(
trapbase_cpu2
)
:
trapbase_cpu2
:
BAD_TRAP
(0
x0
)
SRMMU_TFAULT
TRAP_ENTRY
(
0x2
,
bad_instruction
)
TRAP_ENTRY
(0
x3
,
priv_instruction
)
TRAP_ENTRY
(
0x4
,
fpd_trap_handler
)
WINDOW_SPILL
WINDOW_FILL
TRAP_ENTRY
(
0x7
,
mna_handler
)
...
...
@@ -344,7 +343,7 @@ C_LABEL(trapbase_cpu2):
BAD_TRAP
(0
xf7
)
BAD_TRAP
(
0xf8
)
BAD_TRAP
(
0xf9
)
BAD_TRAP
(
0xfa
)
BAD_TRAP
(
0xfb
)
BAD_TRAP
(0
xfc
)
BAD_TRAP
(
0xfd
)
BAD_TRAP
(
0xfe
)
BAD_TRAP
(
0xff
)
C_LABEL
(
trapbase_cpu3
)
:
trapbase_cpu3
:
BAD_TRAP
(0
x0
)
SRMMU_TFAULT
TRAP_ENTRY
(
0x2
,
bad_instruction
)
TRAP_ENTRY
(0
x3
,
priv_instruction
)
TRAP_ENTRY
(
0x4
,
fpd_trap_handler
)
WINDOW_SPILL
WINDOW_FILL
TRAP_ENTRY
(
0x7
,
mna_handler
)
...
...
@@ -418,25 +417,25 @@ C_LABEL(trapbase_cpu3):
/*
This
was
the
only
reasonable
way
I
could
think
of
to
properly
align
*
these
page
-
table
data
structures
.
*/
.
globl
C_LABEL
(
pg0
),
C_LABEL
(
pg1
),
C_LABEL
(
pg2
),
C_LABEL
(
pg3
)
.
globl
C_LABEL
(
empty_bad_page
)
.
globl
C_LABEL
(
empty_bad_page_table
)
.
globl
C_LABEL
(
empty_zero_page
)
.
globl
C_LABEL
(
swapper_pg_dir
)
C_LABEL
(
swapper_pg_dir
)
:
.
skip
PAGE_SIZE
C_LABEL
(
pg0
):
.
skip
PAGE_SIZE
C_LABEL
(
pg1
):
.
skip
PAGE_SIZE
C_LABEL
(
pg2
):
.
skip
PAGE_SIZE
C_LABEL
(
pg3
):
.
skip
PAGE_SIZE
C_LABEL
(
empty_bad_page
)
:
.
skip
PAGE_SIZE
C_LABEL
(
empty_bad_page_table
):
.
skip
PAGE_SIZE
C_LABEL
(
empty_zero_page
):
.
skip
PAGE_SIZE
.
global
C_LABEL
(
root_flags
)
.
global
C_LABEL
(
ram_flags
)
.
global
C_LABEL
(
root_dev
)
.
global
C_LABEL
(
sparc_ramdisk_image
)
.
global
C_LABEL
(
sparc_ramdisk_size
)
.
globl
pg0
,
pg1
,
pg2
,
pg3
.
globl
empty_bad_page
.
globl
empty_bad_page_table
.
globl
empty_zero_page
.
globl
swapper_pg_dir
swapper_pg_dir
:
.
skip
PAGE_SIZE
pg0
:
.
skip
PAGE_SIZE
pg1
:
.
skip
PAGE_SIZE
pg2
:
.
skip
PAGE_SIZE
pg3
:
.
skip
PAGE_SIZE
empty_bad_page
:
.
skip
PAGE_SIZE
empty_bad_page_table
:
.
skip
PAGE_SIZE
empty_zero_page
:
.
skip
PAGE_SIZE
.
global
root_flags
.
global
ram_flags
.
global
root_dev
.
global
sparc_ramdisk_image
.
global
sparc_ramdisk_size
/*
This
stuff
has
to
be
in
sync
with
SILO
and
other
potential
boot
loaders
*
Fields
should
be
kept
upward
compatible
and
whenever
any
change
is
made
,
...
...
@@ -445,17 +444,17 @@ C_LABEL(empty_zero_page): .skip PAGE_SIZE
.
ascii
"HdrS"
.
word
LINUX_VERSION_CODE
.
half
0x0203
/*
HdrS
version
*/
C_LABEL
(
root_flags
)
:
root_flags
:
.
half
1
C_LABEL
(
root_dev
)
:
root_dev
:
.
half
0
C_LABEL
(
ram_flags
)
:
ram_flags
:
.
half
0
C_LABEL
(
sparc_ramdisk_image
)
:
sparc_ramdisk_image
:
.
word
0
C_LABEL
(
sparc_ramdisk_size
)
:
sparc_ramdisk_size
:
.
word
0
.
word
C_LABEL
(
reboot_command
)
.
word
reboot_command
.
word
0
,
0
,
0
.
word
_end
...
...
@@ -517,7 +516,7 @@ copy_prom_lvl14:
/
*
DJHR
*
preserve
our
linked
/
calculated
instructions
*/
set
C_LABEL
(
lvl14_save
)
,
%
g1
set
lvl14_save
,
%
g1
set
t_irq14
,
%
g3
sub
%
g1
,
%
l6
,
%
g1
!
translate
to
physical
sub
%
g3
,
%
l6
,
%
g3
!
translate
to
physical
...
...
@@ -761,11 +760,11 @@ execute_in_high_mem:
mov
%
l0
,
%
o0
!
put
back
romvec
mov
%
l1
,
%
o1
!
and
debug_vec
sethi
%
hi
(
C_LABEL
(
prom_vector_p
)
),
%
g1
st
%
o0
,
[%
g1
+
%
lo
(
C_LABEL
(
prom_vector_p
)
)]
sethi
%
hi
(
prom_vector_p
),
%
g1
st
%
o0
,
[%
g1
+
%
lo
(
prom_vector_p
)]
sethi
%
hi
(
C_LABEL
(
linux_dbvec
)
),
%
g1
st
%
o1
,
[%
g1
+
%
lo
(
C_LABEL
(
linux_dbvec
)
)]
sethi
%
hi
(
linux_dbvec
),
%
g1
st
%
o1
,
[%
g1
+
%
lo
(
linux_dbvec
)]
ld
[%
o0
+
0x4
],
%
o3
and
%
o3
,
0x3
,
%
o5
!
get
the
version
...
...
@@ -808,10 +807,10 @@ found_version:
or
%
g0
,
%
g0
,
%
o0
!
next_node
(
0
)
=
first_node
or
%
o0
,
%
g0
,
%
g6
sethi
%
hi
(
C_LABEL
(
cputypvar
)
),
%
o1
!
First
node
has
cpu
-
arch
or
%
o1
,
%
lo
(
C_LABEL
(
cputypvar
)
),
%
o1
sethi
%
hi
(
C_LABEL
(
cputypval
)
),
%
o2
!
information
,
the
string
or
%
o2
,
%
lo
(
C_LABEL
(
cputypval
)
),
%
o2
sethi
%
hi
(
cputypvar
),
%
o1
!
First
node
has
cpu
-
arch
or
%
o1
,
%
lo
(
cputypvar
),
%
o1
sethi
%
hi
(
cputypval
),
%
o2
!
information
,
the
string
or
%
o2
,
%
lo
(
cputypval
),
%
o2
ld
[%
l1
],
%
l0
!
'compatibility'
tells
ld
[%
l0
+
0xc
],
%
l0
!
that
we
want
'sun4x'
where
call
%
l0
!
x
is
one
of
''
,
'c'
,
'm'
,
...
...
@@ -824,17 +823,17 @@ found_version:
nop
or
%
g6
,
%
g0
,
%
o0
sethi
%
hi
(
C_LABEL
(
cputypvar_sun4m
)
),
%
o1
or
%
o1
,
%
lo
(
C_LABEL
(
cputypvar_sun4m
)
),
%
o1
sethi
%
hi
(
C_LABEL
(
cputypval
)
),
%
o2
or
%
o2
,
%
lo
(
C_LABEL
(
cputypval
)
),
%
o2
sethi
%
hi
(
cputypvar_sun4m
),
%
o1
or
%
o1
,
%
lo
(
cputypvar_sun4m
),
%
o1
sethi
%
hi
(
cputypval
),
%
o2
or
%
o2
,
%
lo
(
cputypval
),
%
o2
ld
[%
l1
],
%
l0
ld
[%
l0
+
0xc
],
%
l0
call
%
l0
nop
got_prop
:
set
C_LABEL
(
cputypval
)
,
%
o2
set
cputypval
,
%
o2
ldub
[%
o2
+
0x4
],
%
l1
cmp
%
l1
,
' '
...
...
@@ -853,7 +852,7 @@ got_prop:
b
no_sun4u_here
!
AIEEE
,
a
V9
sun4u
...
Get
our
BIG
BROTHER
kernel
:
))
nop
1
:
set
C_LABEL
(
cputypval
)
,
%
l1
1
:
set
cputypval
,
%
l1
ldub
[%
l1
+
0x4
],
%
l1
cmp
%
l1
,
'm'
!
Test
for
sun4d
,
sun4e
?
be
sun4m_init
...
...
@@ -875,8 +874,8 @@ got_prop:
sun4d_init
:
/
*
Need
to
patch
call
to
handler_irq
*/
set
C_LABEL
(
patch_handler_irq
)
,
%
g4
set
C_LABEL
(
sun4d_handler_irq
)
,
%
g5
set
patch_handler_irq
,
%
g4
set
sun4d_handler_irq
,
%
g5
sethi
%
hi
(
0x40000000
),
%
g3
!
call
sub
%
g5
,
%
g4
,
%
g5
srl
%
g5
,
2
,
%
g5
...
...
@@ -997,8 +996,8 @@ sun4c_continue_boot:
*
show
-
time
!
*/
sethi
%
hi
(
C_LABEL
(
cputyp
)
),
%
o0
st
%
g4
,
[%
o0
+
%
lo
(
C_LABEL
(
cputyp
)
)]
sethi
%
hi
(
cputyp
),
%
o0
st
%
g4
,
[%
o0
+
%
lo
(
cputyp
)]
/
*
Turn
on
Supervisor
,
EnableFloating
,
and
all
the
PIL
bits
.
*
Also
puts
us
in
register
window
zero
with
traps
off
.
...
...
@@ -1008,14 +1007,14 @@ sun4c_continue_boot:
WRITE_PAUSE
/
*
I
want
a
kernel
stack
NOW
!
*/
set
C_LABEL
(
init_thread_union
)
,
%
g1
set
init_thread_union
,
%
g1
set
(
THREAD_SIZE
-
STACKFRAME_SZ
),
%
g2
add
%
g1
,
%
g2
,
%
sp
mov
0
,
%
fp
/*
And
for
good
luck
*/
/
*
Zero
out
our
BSS
section
.
*/
set
C_LABEL
(
__bss_start
)
,
%
o0
!
First
address
of
BSS
set
C_LABEL
(
end
)
,
%
o1
!
Last
address
of
BSS
set
__bss_start
,
%
o0
!
First
address
of
BSS
set
end
,
%
o1
!
Last
address
of
BSS
add
%
o0
,
0x1
,
%
o0
1
:
stb
%
g0
,
[%
o0
]
...
...
@@ -1026,11 +1025,11 @@ sun4c_continue_boot:
/
*
Initialize
the
uwinmask
value
for
init
task
just
in
case
.
*
But
first
make
current_set
[
boot_cpu_id
]
point
to
something
useful
.
*/
set
C_LABEL
(
init_thread_union
)
,
%
g6
set
C_LABEL
(
current_set
)
,
%
g2
set
init_thread_union
,
%
g6
set
current_set
,
%
g2
#ifdef CONFIG_SMP
sethi
%
hi
(
C_LABEL
(
boot_cpu_id4
)
),
%
g3
ldub
[%
g3
+
%
lo
(
C_LABEL
(
boot_cpu_id4
)
)],
%
g3
sethi
%
hi
(
boot_cpu_id4
),
%
g3
ldub
[%
g3
+
%
lo
(
boot_cpu_id4
)],
%
g3
st
%
g6
,
[%
g2
]
add
%
g2
,
%
g3
,
%
g2
#endif
...
...
@@ -1124,14 +1123,14 @@ sun4c_continue_boot:
st
%
g4
,
[%
g5
+
0x1c
]
2
:
sethi
%
hi
(
C_LABEL
(
nwindows
)
),
%
g4
st
%
g3
,
[%
g4
+
%
lo
(
C_LABEL
(
nwindows
)
)]
!
store
final
value
sethi
%
hi
(
nwindows
),
%
g4
st
%
g3
,
[%
g4
+
%
lo
(
nwindows
)]
!
store
final
value
sub
%
g3
,
0x1
,
%
g3
sethi
%
hi
(
C_LABEL
(
nwindowsm1
)
),
%
g4
st
%
g3
,
[%
g4
+
%
lo
(
C_LABEL
(
nwindowsm1
)
)]
sethi
%
hi
(
nwindowsm1
),
%
g4
st
%
g3
,
[%
g4
+
%
lo
(
nwindowsm1
)]
/
*
Here
we
go
,
start
using
Linux
's trap table... */
set
C_LABEL
(
trapbase
)
,
%
g3
set
trapbase
,
%
g3
wr
%
g3
,
0x0
,
%
tbr
WRITE_PAUSE
...
...
@@ -1147,12 +1146,12 @@ sun4c_continue_boot:
*
off
to
start_kernel
()
.
*/
sethi
%
hi
(
C_LABEL
(
prom_vector_p
)
),
%
g5
ld
[%
g5
+
%
lo
(
C_LABEL
(
prom_vector_p
)
)],
%
o0
call
C_LABEL
(
prom_init
)
sethi
%
hi
(
prom_vector_p
),
%
g5
ld
[%
g5
+
%
lo
(
prom_vector_p
)],
%
o0
call
prom_init
nop
call
C_LABEL
(
start_kernel
)
call
start_kernel
nop
/
*
We
should
not
get
here
.
*/
...
...
@@ -1162,7 +1161,7 @@ sun4c_continue_boot:
sun4_init
:
#ifdef CONFIG_SUN4
/*
There
,
happy
now
Adrian
?
*/
set
C_LABEL
(
cputypval
)
,
%
o2
!
Let
everyone
know
we
set
cputypval
,
%
o2
!
Let
everyone
know
we
set
' '
,
%
o0
!
are
a
"sun4 "
architecture
stb
%
o0
,
[%
o2
+
0x4
]
...
...
@@ -1289,8 +1288,8 @@ halt_me:
*
gets
initialized
in
c
-
code
so
all
routines
can
use
it
.
*/
.
globl
C_LABEL
(
prom_vector_p
)
C_LABEL
(
prom_vector_p
)
:
.
globl
prom_vector_p
prom_vector_p
:
.
word
0
/*
We
calculate
the
following
at
boot
time
,
window
fills
/
spills
and
trap
entry
...
...
@@ -1298,25 +1297,25 @@ C_LABEL(prom_vector_p):
*/
.
align
4
.
globl
C_LABEL
(
nwindows
)
.
globl
C_LABEL
(
nwindowsm1
)
C_LABEL
(
nwindows
)
:
.
globl
nwindows
.
globl
nwindowsm1
nwindows
:
.
word
8
C_LABEL
(
nwindowsm1
)
:
nwindowsm1
:
.
word
7
/*
Boot
time
debugger
vector
value
.
We
need
this
later
on
.
*/
.
align
4
.
globl
C_LABEL
(
linux_dbvec
)
C_LABEL
(
linux_dbvec
)
:
.
globl
linux_dbvec
linux_dbvec
:
.
word
0
.
word
0
.
align
8
.
globl
C_LABEL
(
lvl14_save
)
C_LABEL
(
lvl14_save
)
:
.
globl
lvl14_save
lvl14_save
:
.
word
0
.
word
0
.
word
0
...
...
arch/sparc/kernel/rtrap.S
View file @
2d6d3d27
...
...
@@ -4,7 +4,6 @@
*
Copyright
(
C
)
1995
David
S
.
Miller
(
davem
@
caip
.
rutgers
.
edu
)
*/
#include <asm/cprefix.h>
#include <asm/page.h>
#include <asm/ptrace.h>
#include <asm/psr.h>
...
...
@@ -47,9 +46,9 @@ rtrap_7win_patch5: and %g1, 0x7f, %g1
.
globl
ret_trap_entry
,
rtrap_patch1
,
rtrap_patch2
.
globl
rtrap_patch3
,
rtrap_patch4
,
rtrap_patch5
.
globl
C_LABEL
(
ret_trap_lockless_ipi
)
.
globl
ret_trap_lockless_ipi
ret_trap_entry
:
C_LABEL
(
ret_trap_lockless_ipi
)
:
ret_trap_lockless_ipi
:
andcc
%
t_psr
,
PSR_PS
,
%
g0
be
1
f
nop
...
...
@@ -64,7 +63,7 @@ C_LABEL(ret_trap_lockless_ipi):
be
signal_p
nop
call
C_LABEL
(
schedule
)
call
schedule
nop
ld
[%
curptr
+
TI_FLAGS
],
%
g2
...
...
@@ -76,7 +75,7 @@ signal_p:
clr
%
o0
mov
%
l5
,
%
o2
mov
%
l6
,
%
o3
call
C_LABEL
(
do_signal
)
call
do_signal
add
%
sp
,
STACKFRAME_SZ
,
%
o1
!
pt_regs
ptr
/
*
Fall
through
.
*/
...
...
@@ -95,7 +94,7 @@ ret_trap_continue:
WRITE_PAUSE
mov
1
,
%
o1
call
C_LABEL
(
try_to_clear_window_buffer
)
call
try_to_clear_window_buffer
add
%
sp
,
STACKFRAME_SZ
,
%
o0
b
signal_p
...
...
@@ -131,8 +130,8 @@ rtrap_patch2: and %glob_tmp, 0xff, %glob_tmp
*
branch
to
the
user
stack
checking
routine
*
for
return
from
traps
.
*/
.
globl
C_LABEL
(
rtrap_mmu_patchme
)
C_LABEL
(
rtrap_mmu_patchme
):
b
C_LABEL
(
sun4c_rett_stackchk
)
.
globl
rtrap_mmu_patchme
rtrap_mmu_patchme
:
b
sun4c_rett_stackchk
andcc
%
fp
,
0x7
,
%
g0
ret_trap_userwins_ok
:
...
...
@@ -165,7 +164,7 @@ ret_trap_unaligned_pc:
wr
%
t_psr
,
PSR_ET
,
%
psr
WRITE_PAUSE
call
C_LABEL
(
do_memaccess_unaligned
)
call
do_memaccess_unaligned
nop
b
signal_p
...
...
@@ -215,15 +214,15 @@ ret_trap_user_stack_is_bolixed:
wr
%
t_psr
,
PSR_ET
,
%
psr
WRITE_PAUSE
call
C_LABEL
(
window_ret_fault
)
call
window_ret_fault
add
%
sp
,
STACKFRAME_SZ
,
%
o0
b
signal_p
ld
[%
curptr
+
TI_FLAGS
],
%
g2
.
globl
C_LABEL
(
sun4c_rett_stackchk
)
C_LABEL
(
sun4c_rett_stackchk
)
:
.
globl
sun4c_rett_stackchk
sun4c_rett_stackchk
:
be
1
f
and
%
fp
,
0xfff
,
%
g1
!
delay
slot
...
...
@@ -286,8 +285,8 @@ sun4c_rett_onepage:
b
ret_trap_userwins_ok
save
%
g0
,
%
g0
,
%
g0
.
globl
C_LABEL
(
srmmu_rett_stackchk
)
C_LABEL
(
srmmu_rett_stackchk
)
:
.
globl
srmmu_rett_stackchk
srmmu_rett_stackchk
:
bne
ret_trap_user_stack_is_bolixed
sethi
%
hi
(
PAGE_OFFSET
),
%
g1
cmp
%
g1
,
%
fp
...
...
arch/sparc/kernel/sclow.S
View file @
2d6d3d27
...
...
@@ -6,7 +6,6 @@
*
Copyright
(
C
)
1996
David
S
.
Miller
(
davem
@
caip
.
rutgers
.
edu
)
*/
#include <asm/cprefix.h>
#include <asm/ptrace.h>
#include <asm/asm_offsets.h>
#include <asm/errno.h>
...
...
@@ -31,7 +30,7 @@
jmp
%
l2
; \
rett
%
l2
+
4
;
#define LABEL(func)
CONCAT(func, _low)
#define LABEL(func)
func##_low
.
globl
LABEL
(
sunosnop
)
LABEL
(
sunosnop
):
...
...
arch/sparc/kernel/sparc_ksyms.c
View file @
2d6d3d27
...
...
@@ -298,8 +298,7 @@ EXPORT_SYMBOL(__copy_user);
EXPORT_SYMBOL
(
__strncpy_from_user
);
/* Networking helper routines. */
/* XXX This is NOVERS because C_LABEL_STR doesn't get the version number. -DaveM */
EXPORT_SYMBOL_NOVERS
(
__csum_partial_copy_sparc_generic
);
EXPORT_SYMBOL
(
__csum_partial_copy_sparc_generic
);
EXPORT_SYMBOL
(
csum_partial
);
/* Cache flushing. */
...
...
arch/sparc/kernel/sunos_asm.S
View file @
2d6d3d27
...
...
@@ -9,7 +9,6 @@
*
Copyright
(
C
)
1995
Adrian
M
.
Rodriguez
(
adrian
@
remus
.
rutgers
.
edu
)
*/
#include <asm/cprefix.h>
#include <asm/ptrace.h>
.
text
...
...
@@ -19,50 +18,50 @@
*
value
as
in
[%
sp
+
STACKFRAME_SZ
+
PT_I0
]
*/
/
*
SunOS
getpid
()
returns
pid
in
%
o0
and
ppid
in
%
o1
*/
.
globl
C_LABEL
(
sunos_getpid
)
C_LABEL
(
sunos_getpid
)
:
call
C_LABEL
(
sys_getppid
)
.
globl
sunos_getpid
sunos_getpid
:
call
sys_getppid
nop
call
C_LABEL
(
sys_getpid
)
call
sys_getpid
st
%
o0
,
[%
sp
+
STACKFRAME_SZ
+
PT_I1
]
b
C_LABEL
(
ret_sys_call
)
b
ret_sys_call
st
%
o0
,
[%
sp
+
STACKFRAME_SZ
+
PT_I0
]
/
*
SunOS
getuid
()
returns
uid
in
%
o0
and
euid
in
%
o1
*/
.
globl
C_LABEL
(
sunos_getuid
)
C_LABEL
(
sunos_getuid
)
:
call
C_LABEL
(
sys_geteuid16
)
.
globl
sunos_getuid
sunos_getuid
:
call
sys_geteuid16
nop
call
C_LABEL
(
sys_getuid16
)
call
sys_getuid16
st
%
o0
,
[%
sp
+
STACKFRAME_SZ
+
PT_I1
]
b
C_LABEL
(
ret_sys_call
)
b
ret_sys_call
st
%
o0
,
[%
sp
+
STACKFRAME_SZ
+
PT_I0
]
/
*
SunOS
getgid
()
returns
gid
in
%
o0
and
egid
in
%
o1
*/
.
globl
C_LABEL
(
sunos_getgid
)
C_LABEL
(
sunos_getgid
)
:
call
C_LABEL
(
sys_getegid16
)
.
globl
sunos_getgid
sunos_getgid
:
call
sys_getegid16
nop
call
C_LABEL
(
sys_getgid16
)
call
sys_getgid16
st
%
o0
,
[%
sp
+
STACKFRAME_SZ
+
PT_I1
]
b
C_LABEL
(
ret_sys_call
)
b
ret_sys_call
st
%
o0
,
[%
sp
+
STACKFRAME_SZ
+
PT_I0
]
/
*
SunOS
's execv() call only specifies the argv argument, the
*
environment
settings
are
the
same
as
the
calling
processes
.
*/
.
globl
C_LABEL
(
sunos_execv
)
C_LABEL
(
sunos_execv
)
:
.
globl
sunos_execv
sunos_execv
:
st
%
g0
,
[%
sp
+
STACKFRAME_SZ
+
PT_I2
]
call
C_LABEL
(
sparc_execve
)
call
sparc_execve
add
%
sp
,
STACKFRAME_SZ
,
%
o0
b
C_LABEL
(
ret_sys_call
)
b
ret_sys_call
ld
[%
sp
+
STACKFRAME_SZ
+
PT_I0
],
%
o0
arch/sparc/kernel/trampoline.S
View file @
2d6d3d27
...
...
@@ -6,7 +6,6 @@
*/
#include <linux/init.h>
#include <asm/cprefix.h>
#include <asm/head.h>
#include <asm/psr.h>
#include <asm/page.h>
...
...
@@ -15,8 +14,8 @@
#include <asm/vaddrs.h>
#include <asm/contregs.h>
.
globl
C_LABEL
(
sun4m_cpu_startup
),
C_LABEL
(
__smp4m_processor_id
)
.
globl
C_LABEL
(
sun4d_cpu_startup
),
C_LABEL
(
__smp4d_processor_id
)
.
globl
sun4m_cpu_startup
,
__smp4m_processor_id
.
globl
sun4d_cpu_startup
,
__smp4d_processor_id
__INIT
.
align
4
...
...
@@ -26,21 +25,21 @@
*
in
and
sets
PIL
in
%
psr
to
15
,
no
irqs
.
*/
C_LABEL
(
sun4m_cpu_startup
)
:
sun4m_cpu_startup
:
cpu1_startup
:
sethi
%
hi
(
C_LABEL
(
trapbase_cpu1
)
),
%
g3
sethi
%
hi
(
trapbase_cpu1
),
%
g3
b
1
f
or
%
g3
,
%
lo
(
C_LABEL
(
trapbase_cpu1
)
),
%
g3
or
%
g3
,
%
lo
(
trapbase_cpu1
),
%
g3
cpu2_startup
:
sethi
%
hi
(
C_LABEL
(
trapbase_cpu2
)
),
%
g3
sethi
%
hi
(
trapbase_cpu2
),
%
g3
b
1
f
or
%
g3
,
%
lo
(
C_LABEL
(
trapbase_cpu2
)
),
%
g3
or
%
g3
,
%
lo
(
trapbase_cpu2
),
%
g3
cpu3_startup
:
sethi
%
hi
(
C_LABEL
(
trapbase_cpu3
)
),
%
g3
sethi
%
hi
(
trapbase_cpu3
),
%
g3
b
1
f
or
%
g3
,
%
lo
(
C_LABEL
(
trapbase_cpu3
)
),
%
g3
or
%
g3
,
%
lo
(
trapbase_cpu3
),
%
g3
1
:
/
*
Set
up
a
sane
%
psr
--
PIL
<
0xf
>
S
<
0x1
>
PS
<
0x1
>
CWP
<
0x0
>
*/
...
...
@@ -58,7 +57,7 @@ cpu3_startup:
WRITE_PAUSE
/
*
Give
ourselves
a
stack
and
curptr
.
*/
set
C_LABEL
(
current_set
)
,
%
g5
set
current_set
,
%
g5
srl
%
g3
,
10
,
%
g4
and
%
g4
,
0xc
,
%
g4
ld
[%
g5
+
%
g4
],
%
g6
...
...
@@ -73,13 +72,13 @@ cpu3_startup:
WRITE_PAUSE
/
*
Init
our
caches
,
etc
.
*/
set
C_LABEL
(
poke_srmmu
)
,
%
g5
set
poke_srmmu
,
%
g5
ld
[%
g5
],
%
g5
call
%
g5
nop
/
*
Start
this
processor
.
*/
call
C_LABEL
(
smp4m_callin
)
call
smp4m_callin
nop
b
,
a
smp_do_cpu_idle
...
...
@@ -88,22 +87,22 @@ cpu3_startup:
.
align
4
smp_do_cpu_idle
:
call
C_LABEL
(
init_idle
)
call
init_idle
nop
call
C_LABEL
(
cpu_idle
)
call
cpu_idle
mov
0
,
%
o0
call
C_LABEL
(
cpu_panic
)
call
cpu_panic
nop
C_LABEL
(
__smp4m_processor_id
)
:
__smp4m_processor_id
:
rd
%
tbr
,
%
g2
srl
%
g2
,
12
,
%
g2
and
%
g2
,
3
,
%
g2
retl
mov
%
g1
,
%
o7
C_LABEL
(
__smp4d_processor_id
)
:
__smp4d_processor_id
:
lda
[%
g0
]
ASI_M_VIKING_TMP1
,
%
g2
retl
mov
%
g1
,
%
o7
...
...
@@ -114,7 +113,7 @@ C_LABEL(__smp4d_processor_id):
__INIT
.
align
4
C_LABEL
(
sun4d_cpu_startup
)
:
sun4d_cpu_startup
:
/
*
Set
up
a
sane
%
psr
--
PIL
<
0xf
>
S
<
0x1
>
PS
<
0x1
>
CWP
<
0x0
>
*/
set
(
PSR_PIL
| PSR_S |
PSR_PS
),
%
g1
wr
%
g1
,
0x0
,
%
psr
!
traps
off
though
...
...
@@ -126,7 +125,7 @@ C_LABEL(sun4d_cpu_startup):
WRITE_PAUSE
/
*
Set
tbr
-
we
use
just
one
trap
table
.
*/
set
C_LABEL
(
trapbase
)
,
%
g1
set
trapbase
,
%
g1
wr
%
g1
,
0x0
,
%
tbr
WRITE_PAUSE
...
...
@@ -138,7 +137,7 @@ C_LABEL(sun4d_cpu_startup):
sta
%
g1
,
[%
g0
]
ASI_M_VIKING_TMP1
/
*
Give
ourselves
a
stack
and
curptr
.
*/
set
C_LABEL
(
current_set
)
,
%
g5
set
current_set
,
%
g5
srl
%
g3
,
1
,
%
g4
ld
[%
g5
+
%
g4
],
%
g6
...
...
@@ -152,13 +151,13 @@ C_LABEL(sun4d_cpu_startup):
WRITE_PAUSE
/
*
Init
our
caches
,
etc
.
*/
set
C_LABEL
(
poke_srmmu
)
,
%
g5
set
poke_srmmu
,
%
g5
ld
[%
g5
],
%
g5
call
%
g5
nop
/
*
Start
this
processor
.
*/
call
C_LABEL
(
smp4d_callin
)
call
smp4d_callin
nop
b
,
a
smp_do_cpu_idle
arch/sparc/kernel/wof.S
View file @
2d6d3d27
...
...
@@ -4,7 +4,6 @@
*
Copyright
(
C
)
1995
David
S
.
Miller
(
davem
@
caip
.
rutgers
.
edu
)
*/
#include <asm/cprefix.h>
#include <asm/contregs.h>
#include <asm/page.h>
#include <asm/ptrace.h>
...
...
@@ -164,8 +163,8 @@ spwin_fromuser:
*
the
label
'spwin_user_stack_is_bolixed'
which
will
take
*
care
of
things
at
that
point
.
*/
.
globl
C_LABEL
(
spwin_mmu_patchme
)
C_LABEL
(
spwin_mmu_patchme
):
b
C_LABEL
(
spwin_sun4c_stackchk
)
.
globl
spwin_mmu_patchme
spwin_mmu_patchme
:
b
spwin_sun4c_stackchk
andcc
%
sp
,
0x7
,
%
g0
spwin_good_ustack
:
...
...
@@ -253,7 +252,7 @@ spnwin_patch3: and %twin_tmp, 0xff, %twin_tmp ! patched on 7win Sparcs
/
*
Turn
on
traps
and
call
c
-
code
to
deal
with
it
.
*/
wr
%
t_psr
,
PSR_ET
,
%
psr
nop
call
C_LABEL
(
window_overflow_fault
)
call
window_overflow_fault
nop
/
*
Return
from
trap
if
C
-
code
actually
fixes
things
,
if
it
...
...
@@ -307,8 +306,8 @@ spwin_bad_ustack_from_kernel:
*
As
noted
above
%
curptr
cannot
be
touched
by
this
routine
at
all
.
*/
.
globl
C_LABEL
(
spwin_sun4c_stackchk
)
C_LABEL
(
spwin_sun4c_stackchk
)
:
.
globl
spwin_sun4c_stackchk
spwin_sun4c_stackchk
:
/
*
LOCATION
:
Window
to
be
saved
on
the
stack
*/
/
*
See
if
the
stack
is
in
the
address
space
hole
but
first
,
...
...
@@ -379,8 +378,8 @@ spwin_sun4c_onepage:
*
works
for
all
current
v8
/
srmmu
implementations
,
we
'll
*
see
...
*/
.
globl
C_LABEL
(
spwin_srmmu_stackchk
)
C_LABEL
(
spwin_srmmu_stackchk
)
:
.
globl
spwin_srmmu_stackchk
spwin_srmmu_stackchk
:
/
*
LOCATION
:
Window
to
be
saved
on
the
stack
*/
/
*
Because
of
SMP
concerns
and
speed
we
play
a
trick
.
...
...
arch/sparc/kernel/wuf.S
View file @
2d6d3d27
...
...
@@ -4,7 +4,6 @@
*
Copyright
(
C
)
1995
David
S
.
Miller
*/
#include <asm/cprefix.h>
#include <asm/contregs.h>
#include <asm/page.h>
#include <asm/ptrace.h>
...
...
@@ -135,8 +134,8 @@ fwin_from_user:
/
*
Branch
to
the
architecture
specific
stack
validation
*
routine
.
They
can
be
found
below
...
*/
.
globl
C_LABEL
(
fwin_mmu_patchme
)
C_LABEL
(
fwin_mmu_patchme
):
b
C_LABEL
(
sun4c_fwin_stackchk
)
.
globl
fwin_mmu_patchme
fwin_mmu_patchme
:
b
sun4c_fwin_stackchk
andcc
%
sp
,
0x7
,
%
g0
#define STACK_OFFSET (THREAD_SIZE - TRACEREG_SZ - STACKFRAME_SZ)
...
...
@@ -190,7 +189,7 @@ fwin_user_stack_is_bolixed:
wr
%
t_psr
,
PSR_ET
,
%
psr
!
enable
traps
nop
call
C_LABEL
(
window_underflow_fault
)
call
window_underflow_fault
mov
%
g4
,
%
o0
b
ret_trap_entry
...
...
@@ -244,8 +243,8 @@ fwin_user_finish_up:
*/
.
align
4
.
globl
C_LABEL
(
sun4c_fwin_stackchk
)
C_LABEL
(
sun4c_fwin_stackchk
)
:
.
globl
sun4c_fwin_stackchk
sun4c_fwin_stackchk
:
/
*
LOCATION
:
Window
'W'
*/
/
*
Caller
did
'andcc %sp, 0x7, %g0'
*/
...
...
@@ -295,8 +294,8 @@ sun4c_fwin_onepage:
/
*
A
page
had
bad
page
permissions
,
losing
...
*/
b
,
a
fwin_user_stack_is_bolixed
.
globl
C_LABEL
(
srmmu_fwin_stackchk
)
C_LABEL
(
srmmu_fwin_stackchk
)
:
.
globl
srmmu_fwin_stackchk
srmmu_fwin_stackchk
:
/
*
LOCATION
:
Window
'W'
*/
/
*
Caller
did
'andcc %sp, 0x7, %g0'
*/
...
...
arch/sparc/lib/ashldi3.S
View file @
2d6d3d27
...
...
@@ -5,12 +5,10 @@
*
Copyright
(
C
)
1999
David
S
.
Miller
(
davem
@
redhat
.
com
)
*/
#include <asm/cprefix.h>
.
text
.
align
4
.
globl
C_LABEL
(
__ashldi3
)
C_LABEL
(
__ashldi3
)
:
.
globl
__ashldi3
__ashldi3
:
cmp
%
o2
,
0
be
9
f
mov
0x20
,
%
g2
...
...
arch/sparc/lib/ashrdi3.S
View file @
2d6d3d27
...
...
@@ -5,12 +5,10 @@
*
Copyright
(
C
)
1995
David
S
.
Miller
(
davem
@
caip
.
rutgers
.
edu
)
*/
#include <asm/cprefix.h>
.
text
.
align
4
.
globl
C_LABEL
(
__ashrdi3
)
C_LABEL
(
__ashrdi3
)
:
.
globl
__ashrdi3
__ashrdi3
:
tst
%
o2
be
3
f
or
%
g0
,
32
,
%
g2
...
...
arch/sparc/lib/atomic.S
View file @
2d6d3d27
...
...
@@ -4,7 +4,6 @@
*/
#include <linux/config.h>
#include <asm/cprefix.h>
#include <asm/ptrace.h>
#include <asm/psr.h>
...
...
arch/sparc/lib/bitops.S
View file @
2d6d3d27
...
...
@@ -4,7 +4,6 @@
*/
#include <linux/config.h>
#include <asm/cprefix.h>
#include <asm/ptrace.h>
#include <asm/psr.h>
...
...
@@ -29,7 +28,7 @@ ___set_bit:
wr
%
g5
,
0x0
,
%
psr
nop
; nop; nop
#ifdef CONFIG_SMP
set
C_LABEL
(
bitops_spinlock
)
,
%
g5
set
bitops_spinlock
,
%
g5
2
:
ldstub
[%
g5
],
%
g7
!
Spin
on
the
byte
lock
for
SMP
.
orcc
%
g7
,
0x0
,
%
g0
!
Did
we
get
it
?
bne
2
b
!
Nope
...
...
...
@@ -39,7 +38,7 @@ ___set_bit:
and
%
g7
,
%
g2
,
%
g2
#ifdef CONFIG_SMP
st
%
g5
,
[%
g1
]
set
C_LABEL
(
bitops_spinlock
)
,
%
g5
set
bitops_spinlock
,
%
g5
stb
%
g0
,
[%
g5
]
#else
st
%
g5
,
[%
g1
]
...
...
@@ -58,7 +57,7 @@ ___clear_bit:
wr
%
g5
,
0x0
,
%
psr
nop
; nop; nop
#ifdef CONFIG_SMP
set
C_LABEL
(
bitops_spinlock
)
,
%
g5
set
bitops_spinlock
,
%
g5
2
:
ldstub
[%
g5
],
%
g7
!
Spin
on
the
byte
lock
for
SMP
.
orcc
%
g7
,
0x0
,
%
g0
!
Did
we
get
it
?
bne
2
b
!
Nope
...
...
...
@@ -68,7 +67,7 @@ ___clear_bit:
and
%
g7
,
%
g2
,
%
g2
#ifdef CONFIG_SMP
st
%
g5
,
[%
g1
]
set
C_LABEL
(
bitops_spinlock
)
,
%
g5
set
bitops_spinlock
,
%
g5
stb
%
g0
,
[%
g5
]
#else
st
%
g5
,
[%
g1
]
...
...
@@ -87,7 +86,7 @@ ___change_bit:
wr
%
g5
,
0x0
,
%
psr
nop
; nop; nop
#ifdef CONFIG_SMP
set
C_LABEL
(
bitops_spinlock
)
,
%
g5
set
bitops_spinlock
,
%
g5
2
:
ldstub
[%
g5
],
%
g7
!
Spin
on
the
byte
lock
for
SMP
.
orcc
%
g7
,
0x0
,
%
g0
!
Did
we
get
it
?
bne
2
b
!
Nope
...
...
...
@@ -97,7 +96,7 @@ ___change_bit:
and
%
g7
,
%
g2
,
%
g2
#ifdef CONFIG_SMP
st
%
g5
,
[%
g1
]
set
C_LABEL
(
bitops_spinlock
)
,
%
g5
set
bitops_spinlock
,
%
g5
stb
%
g0
,
[%
g5
]
#else
st
%
g5
,
[%
g1
]
...
...
arch/sparc/lib/blockops.S
View file @
2d6d3d27
...
...
@@ -4,7 +4,6 @@
*
Copyright
(
C
)
1996
David
S
.
Miller
(
davem
@
caip
.
rutgers
.
edu
)
*/
#include <asm/cprefix.h>
#include <asm/page.h>
/
*
Zero
out
64
bytes
of
memory
at
(
buf
+
offset
)
.
...
...
@@ -46,9 +45,9 @@
.
text
.
align
4
.
globl
C_LABEL
(
bzero_1page
),
C_LABEL
(
__copy_1page
)
.
globl
bzero_1page
,
__copy_1page
C_LABEL
(
bzero_1page
)
:
bzero_1page
:
/*
NOTE
:
If
you
change
the
number
of
insns
of
this
routine
,
please
check
*
arch
/
sparc
/
mm
/
hypersparc
.
S
*/
/
*
%
o0
=
buf
*/
...
...
@@ -67,7 +66,7 @@ C_LABEL(bzero_1page):
retl
nop
C_LABEL
(
__copy_1page
)
:
__copy_1page
:
/*
NOTE
:
If
you
change
the
number
of
insns
of
this
routine
,
please
check
*
arch
/
sparc
/
mm
/
hypersparc
.
S
*/
/
*
%
o0
=
dst
,
%
o1
=
src
*/
...
...
arch/sparc/lib/checksum.S
View file @
2d6d3d27
...
...
@@ -13,7 +13,6 @@
*
BSD4
.4
portable
checksum
routine
*/
#include <asm/cprefix.h>
#include <asm/errno.h>
#define CSUM_BIGCHUNK(buf, offset, sum, t0, t1, t2, t3, t4, t5) \
...
...
@@ -104,8 +103,8 @@ csum_partial_fix_alignment:
/
*
The
common
case
is
to
get
called
with
a
nicely
aligned
*
buffer
of
size
0x20
.
Follow
the
code
path
for
that
case
.
*/
.
globl
C_LABEL
(
csum_partial
)
C_LABEL
(
csum_partial
)
:
/
*
%
o0
=
buf
,
%
o1
=
len
,
%
o2
=
sum
*/
.
globl
csum_partial
csum_partial
:
/
*
%
o0
=
buf
,
%
o1
=
len
,
%
o2
=
sum
*/
andcc
%
o0
,
0x7
,
%
g0
!
alignment
problems
?
bne
csum_partial_fix_alignment
!
yep
,
handle
it
sethi
%
hi
(
cpte
-
8
),
%
g7
!
prepare
table
jmp
ptr
...
...
@@ -142,8 +141,8 @@ cpte: bne csum_partial_end_cruft ! yep, handle it
cpout
:
retl
!
get
outta
here
mov
%
o2
,
%
o0
!
return
computed
csum
.
globl
C_LABEL
(
__csum_partial_copy_start
),
C_LABEL
(
__csum_partial_copy_end
)
C_LABEL
(
__csum_partial_copy_start
)
:
.
globl
__csum_partial_copy_start
,
__csum_partial_copy_end
__csum_partial_copy_start
:
/*
Work
around
cpp
-
rob
*/
#define ALLOC #alloc
...
...
@@ -329,8 +328,8 @@ cc_dword_align:
*
out
of
you
,
game
over
,
lights
out
.
*/
.
align
8
.
globl
C_LABEL
(
__csum_partial_copy_sparc_generic
)
C_LABEL
(
__csum_partial_copy_sparc_generic
)
:
.
globl
__csum_partial_copy_sparc_generic
__csum_partial_copy_sparc_generic
:
/
*
%
o0
=
src
,
%
o1
=
dest
,
%
g1
=
len
,
%
g7
=
sum
*/
xor
%
o0
,
%
o1
,
%
o4
!
get
changing
bits
andcc
%
o4
,
3
,
%
g0
!
check
for
mismatched
alignment
...
...
@@ -472,7 +471,7 @@ ccslow: cmp %g1, 0
4
:
addcc
%
g7
,
%
g5
,
%
g7
retl
addx
%
g0
,
%
g7
,
%
o0
C_LABEL
(
__csum_partial_copy_end
)
:
__csum_partial_copy_end
:
/*
We
do
these
strange
calculations
for
the
csum_
*
_from_user
case
only
,
ie
.
*
we
only
bother
with
faults
on
loads
...
*/
...
...
@@ -551,7 +550,7 @@ C_LABEL(__csum_partial_copy_end):
mov
%
i5
,
%
o0
mov
%
i7
,
%
o1
mov
%
i4
,
%
o2
call
C_LABEL
(
lookup_fault
)
call
lookup_fault
mov
%
g7
,
%
i4
cmp
%
o0
,
2
bne
1
f
...
...
@@ -561,7 +560,7 @@ C_LABEL(__csum_partial_copy_end):
mov
%
i0
,
%
o1
mov
%
i1
,
%
o0
5
:
call
C_LABEL
(
__memcpy
)
call
__memcpy
mov
%
i2
,
%
o2
tst
%
o0
bne
,
a
2
f
...
...
@@ -570,7 +569,7 @@ C_LABEL(__csum_partial_copy_end):
2
:
mov
%
i1
,
%
o0
6
:
call
C_LABEL
(
__bzero
)
call
__bzero
mov
%
i3
,
%
o1
1
:
ld
[%
sp
+
168
],
%
o2
!
struct_ptr
of
parent
...
...
arch/sparc/lib/copy_user.S
View file @
2d6d3d27
...
...
@@ -11,7 +11,6 @@
*
Returns
0
if
successful
,
otherwise
count
of
bytes
not
copied
yet
*/
#include <asm/cprefix.h>
#include <asm/ptrace.h>
#include <asm/asmmacro.h>
#include <asm/page.h>
...
...
@@ -118,7 +117,7 @@
.
globl
__copy_user_begin
__copy_user_begin
:
.
globl
C_LABEL
(
__copy_user
)
.
globl
__copy_user
dword_align
:
andcc
%
o1
,
1
,
%
g0
be
4
f
...
...
@@ -145,7 +144,7 @@ dword_align:
b
3
f
add
%
o0
,
2
,
%
o0
C_LABEL
(
__copy_user
)
:
/
*
%
o0
=
dst
%
o1
=
src
%
o2
=
len
*/
__copy_user
:
/
*
%
o0
=
dst
%
o1
=
src
%
o2
=
len
*/
xor
%
o0
,
%
o1
,
%
o4
1
:
andcc
%
o4
,
3
,
%
o5
...
...
arch/sparc/lib/locks.S
View file @
2d6d3d27
...
...
@@ -6,7 +6,6 @@
*
Copyright
(
C
)
1998
Jakub
Jelinek
(
jj
@
ultra
.
linux
.
cz
)
*/
#include <asm/cprefix.h>
#include <asm/ptrace.h>
#include <asm/psr.h>
#include <asm/smp.h>
...
...
arch/sparc/lib/lshrdi3.S
View file @
2d6d3d27
/*
$Id
:
lshrdi3
.
S
,
v
1
.1
1999
/
03
/
21
06
:
37
:
45
davem
Exp
$
*/
#include <asm/cprefix.h>
.
globl
C_LABEL
(
__lshrdi3
)
C_LABEL
(
__lshrdi3
):
.
globl
__lshrdi3
__lshrdi3
:
cmp
%
o2
,
0
be
3
f
mov
0x20
,
%
g2
...
...
arch/sparc/lib/memcmp.S
View file @
2d6d3d27
#include <asm/cprefix.h>
.
text
.
align
4
.
global
C_LABEL
(
__memcmp
),
C_LABEL
(
memcmp
)
C_LABEL
(
__memcmp
)
:
C_LABEL
(
memcmp
)
:
.
global
__memcmp
,
memcmp
__memcmp
:
memcmp
:
#if 1
cmp
%
o2
,
0
ble
L3
...
...
arch/sparc/lib/memcpy.S
View file @
2d6d3d27
...
...
@@ -9,13 +9,11 @@
#ifdef __KERNEL__
#include <asm/cprefix.h>
#define FUNC(x) \
.
globl
C_LABEL
(
x
)
;
\
.
type
C_LABEL
(
x
),
@
function
;
\
.
globl
x
;
\
.
type
x
,
@
function
;
\
.
align
4
; \
C_LABEL
(
x
)
:
x
:
#undef FASTER_REVERSE
#undef FASTER_NONALIGNED
...
...
arch/sparc/lib/memscan.S
View file @
2d6d3d27
...
...
@@ -4,8 +4,6 @@
*
Copyright
(
C
)
1996
David
S
.
Miller
(
davem
@
caip
.
rutgers
.
edu
)
*/
#include <asm/cprefix.h>
/*
In
essence
,
this
is
just
a
fancy
strlen
.
*/
#define LO_MAGIC 0x01010101
...
...
@@ -13,9 +11,9 @@
.
text
.
align
4
.
globl
C_LABEL
(
__memscan_zero
),
C_LABEL
(
__memscan_generic
)
.
globl
C_LABEL
(
memscan
)
C_LABEL
(
__memscan_zero
)
:
.
globl
__memscan_zero
,
__memscan_generic
.
globl
memscan
__memscan_zero
:
/
*
%
o0
=
addr
,
%
o1
=
size
*/
cmp
%
o1
,
0
bne
,
a
1
f
...
...
@@ -114,8 +112,8 @@ mzero_found_it:
retl
sub
%
o0
,
2
,
%
o0
C_LABEL
(
memscan
)
:
C_LABEL
(
__memscan_generic
)
:
memscan
:
__memscan_generic
:
/
*
%
o0
=
addr
,
%
o1
=
c
,
%
o2
=
size
*/
cmp
%
o2
,
0
bne
,
a
0
f
...
...
arch/sparc/lib/memset.S
View file @
2d6d3d27
...
...
@@ -7,7 +7,6 @@
*
occurs
and
we
were
called
as
clear_user
.
*/
#include <asm/cprefix.h>
#include <asm/ptrace.h>
/*
Work
around
cpp
-
rob
*/
...
...
@@ -61,12 +60,12 @@
.
globl
__bzero_begin
__bzero_begin
:
.
globl
C_LABEL
(
__bzero
),
C_LABEL
(
__memset
)
,
.
globl
C_LABEL
(
memset
)
.
globl
C_LABEL
(
__memset_start
),
C_LABEL
(
__memset_end
)
C_LABEL
(
__memset_start
)
:
C_LABEL
(
__memset
)
:
C_LABEL
(
memset
)
:
.
globl
__bzero
,
__memset
,
.
globl
memset
.
globl
__memset_start
,
__memset_end
__memset_start
:
__memset
:
memset
:
and
%
o1
,
0xff
,
%
g3
sll
%
g3
,
8
,
%
g2
or
%
g3
,
%
g2
,
%
g3
...
...
@@ -90,7 +89,7 @@ C_LABEL(memset):
b
4
f
sub
%
o0
,
%
o2
,
%
o0
C_LABEL
(
__bzero
)
:
__bzero
:
mov
%
g0
,
%
g3
1
:
cmp
%
o1
,
7
...
...
@@ -168,7 +167,7 @@ C_LABEL(__bzero):
0
:
retl
clr
%
o0
C_LABEL
(
__memset_end
)
:
__memset_end
:
.
section
.
fixup
,#
alloc
,#
execinstr
.
align
4
...
...
@@ -195,7 +194,7 @@ C_LABEL(__memset_end):
save
%
sp
,
-
104
,
%
sp
mov
%
i5
,
%
o0
mov
%
i7
,
%
o1
call
C_LABEL
(
lookup_fault
)
call
lookup_fault
mov
%
i4
,
%
o2
ret
restore
...
...
arch/sparc/lib/strlen.S
View file @
2d6d3d27
...
...
@@ -5,8 +5,6 @@
*
Copyright
(
C
)
1996
Jakub
Jelinek
(
jj
@
sunsite
.
mff
.
cuni
.
cz
)
*/
#include <asm/cprefix.h>
#define LO_MAGIC 0x01010101
#define HI_MAGIC 0x80808080
...
...
@@ -42,8 +40,8 @@
mov
2
,
%
o0
.
align
4
.
global
C_LABEL
(
strlen
)
C_LABEL
(
strlen
)
:
.
global
strlen
strlen
:
mov
%
o0
,
%
o1
andcc
%
o0
,
3
,
%
g0
bne
0
b
...
...
arch/sparc/lib/strlen_user.S
View file @
2d6d3d27
...
...
@@ -8,8 +8,6 @@
*
Copyright
(
C
)
1996
Jakub
Jelinek
(
jj
@
sunsite
.
mff
.
cuni
.
cz
)
*/
#include <asm/cprefix.h>
#define LO_MAGIC 0x01010101
#define HI_MAGIC 0x80808080
...
...
@@ -47,10 +45,10 @@
mov
3
,
%
o0
.
align
4
.
global
C_LABEL
(
__strlen_user
),
C_LABEL
(
__strnlen_user
)
C_LABEL
(
__strlen_user
)
:
.
global
__strlen_user
,
__strnlen_user
__strlen_user
:
sethi
%
hi
(
32768
),
%
o1
C_LABEL
(
__strnlen_user
)
:
__strnlen_user
:
mov
%
o1
,
%
g1
mov
%
o0
,
%
o1
andcc
%
o0
,
3
,
%
g0
...
...
arch/sparc/lib/strncmp.S
View file @
2d6d3d27
...
...
@@ -3,13 +3,11 @@
*
generic
strncmp
routine
.
*/
#include <asm/cprefix.h>
.
text
.
align
4
.
global
C_LABEL
(
__strncmp
),
C_LABEL
(
strncmp
)
C_LABEL
(
__strncmp
)
:
C_LABEL
(
strncmp
)
:
.
global
__strncmp
,
strncmp
__strncmp
:
strncmp
:
mov
%
o0
,
%
g3
mov
0
,
%
o3
...
...
arch/sparc/lib/strncpy_from_user.S
View file @
2d6d3d27
...
...
@@ -3,7 +3,6 @@
*
Copyright
(
C
)
1996
David
S
.
Miller
*/
#include <asm/cprefix.h>
#include <asm/ptrace.h>
#include <asm/errno.h>
...
...
@@ -17,8 +16,8 @@
*
bytes
copied
if
we
hit
a
null
byte
*/
.
globl
C_LABEL
(
__strncpy_from_user
)
C_LABEL
(
__strncpy_from_user
)
:
.
globl
__strncpy_from_user
__strncpy_from_user
:
/
*
%
o0
=
dest
,
%
o1
=
src
,
%
o2
=
count
*/
mov
%
o2
,
%
o3
1
:
...
...
arch/sparc/math-emu/Makefile
View file @
2d6d3d27
...
...
@@ -2,7 +2,7 @@
# Makefile for the FPU instruction emulation.
#
obj-y
:=
math.o
ashldi3.o
obj-y
:=
math.o
EXTRA_AFLAGS
:=
-ansi
EXTRA_CFLAGS
=
-I
.
-I
$(TOPDIR)
/include/math-emu
-w
arch/sparc/mm/viking.S
View file @
2d6d3d27
...
...
@@ -15,7 +15,6 @@
#include <asm/page.h>
#include <asm/pgtsrmmu.h>
#include <asm/viking.h>
#include <asm/cprefix.h>
#include <asm/btfixup.h>
#ifdef CONFIG_SMP
...
...
include/asm-sparc/asmmacro.h
View file @
2d6d3d27
...
...
@@ -26,17 +26,17 @@
#define GET_PROCESSOR_MID(reg, tmp) \
rd %tbr, %reg; \
sethi %hi(
C_LABEL(mid_xlate)
), %tmp; \
sethi %hi(
mid_xlate
), %tmp; \
srl %reg, 12, %reg; \
or %tmp, %lo(
C_LABEL(mid_xlate)
), %tmp; \
or %tmp, %lo(
mid_xlate
), %tmp; \
and %reg, 3, %reg; \
ldub [%tmp + %reg], %reg;
#define GET_PROCESSOR_OFFSET(reg, tmp) \
GET_PROCESSOR_ID(reg) \
sethi %hi(
C_LABEL(cpu_offset)
), %tmp; \
sethi %hi(
cpu_offset
), %tmp; \
sll %reg, 2, %reg; \
or %tmp, %lo(
C_LABEL(cpu_offset)
), %tmp; \
or %tmp, %lo(
cpu_offset
), %tmp; \
ld [%tmp + %reg], %reg;
/* All trap entry points _must_ begin with this macro or else you
...
...
include/asm-sparc/checksum.h
View file @
2d6d3d27
...
...
@@ -18,7 +18,6 @@
#include <linux/in6.h>
#include <asm/uaccess.h>
#include <asm/cprefix.h>
/* computes the checksum of a memory block at buff, length len,
* and adds in "sum" (32-bit)
...
...
@@ -51,7 +50,7 @@ csum_partial_copy_nocheck (const char *src, char *dst, int len,
register
int
l
asm
(
"g1"
)
=
len
;
__asm__
__volatile__
(
"call
"
C_LABEL_STR
(
__csum_partial_copy_sparc_generic
)
"
\n\t
"
"call
__csum_partial_copy_sparc_generic
\n\t
"
" mov %6, %%g7
\n
"
:
"=&r"
(
ret
),
"=&r"
(
d
),
"=&r"
(
l
)
:
"0"
(
ret
),
"1"
(
d
),
"2"
(
l
),
"r"
(
sum
)
...
...
@@ -81,7 +80,7 @@ csum_partial_copy_from_user(const char *src, char *dst, int len,
".word 1f,2
\n\t
"
".previous
\n
"
"1:
\n\t
"
"call
"
C_LABEL_STR
(
__csum_partial_copy_sparc_generic
)
"
\n\t
"
"call
__csum_partial_copy_sparc_generic
\n\t
"
" st %8, [%%sp + 64]
\n
"
:
"=&r"
(
ret
),
"=&r"
(
d
),
"=&r"
(
l
),
"=&r"
(
s
)
:
"0"
(
ret
),
"1"
(
d
),
"2"
(
l
),
"3"
(
s
),
"r"
(
err
)
...
...
@@ -110,7 +109,7 @@ csum_partial_copy_to_user(const char *src, char *dst, int len,
".word 1f,1
\n\t
"
".previous
\n
"
"1:
\n\t
"
"call
"
C_LABEL_STR
(
__csum_partial_copy_sparc_generic
)
"
\n\t
"
"call
__csum_partial_copy_sparc_generic
\n\t
"
" st %8, [%%sp + 64]
\n
"
:
"=&r"
(
ret
),
"=&r"
(
d
),
"=&r"
(
l
),
"=&r"
(
s
)
:
"0"
(
ret
),
"1"
(
d
),
"2"
(
l
),
"3"
(
s
),
"r"
(
err
)
...
...
include/asm-sparc/cprefix.h
deleted
100644 → 0
View file @
44bd49d5
/* cprefix.h: This file is included by assembly source which needs
* to know what the c-label prefixes are. The newer versions
* of cpp that come with gcc predefine such things to help
* us out. The reason this stuff is needed is to make
* solaris compiles of the kernel work.
*
* Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
*/
#ifndef __SPARC_CPREFIX_H
#define __SPARC_CPREFIX_H
#if defined(__svr4__) || defined(__ELF__)
#define C_LABEL_PREFIX
#define C_LABEL_STR(name) #name
#else
#define C_LABEL_PREFIX _
#define C_LABEL_STR(name) "_" #name
#endif
#define CONCAT(a, b) CONCAT2(a, b)
#define CONCAT2(a, b) a##b
#define C_LABEL(name) CONCAT(C_LABEL_PREFIX, name)
#endif
/* !(__SPARC_CPREFIX_H) */
include/asm-sparc/head.h
View file @
2d6d3d27
...
...
@@ -22,8 +22,8 @@
/* Data/text faults. Defaults to sun4c version at boot time. */
#define SPARC_TFAULT rd %psr, %l0; rd %wim, %l3; b sun4c_fault; mov 1, %l7;
#define SPARC_DFAULT rd %psr, %l0; rd %wim, %l3; b sun4c_fault; mov 0, %l7;
#define SRMMU_TFAULT rd %psr, %l0; rd %wim, %l3; b
C_LABEL(srmmu_fault)
; mov 1, %l7;
#define SRMMU_DFAULT rd %psr, %l0; rd %wim, %l3; b
C_LABEL(srmmu_fault)
; mov 0, %l7;
#define SRMMU_TFAULT rd %psr, %l0; rd %wim, %l3; b
srmmu_fault
; mov 1, %l7;
#define SRMMU_DFAULT rd %psr, %l0; rd %wim, %l3; b
srmmu_fault
; mov 0, %l7;
/* This is for traps we should NEVER get. */
#define BAD_TRAP(num) \
...
...
@@ -41,17 +41,17 @@
/* Software trap for Linux system calls. */
#define LINUX_SYSCALL_TRAP \
sethi %hi(
C_LABEL(sys_call_table)
), %l7; \
or %l7, %lo(
C_LABEL(sys_call_table)
), %l7; \
sethi %hi(
sys_call_table
), %l7; \
or %l7, %lo(
sys_call_table
), %l7; \
b linux_sparc_syscall; \
rd %psr, %l0;
/* Software trap for SunOS4.1.x system calls. */
#define SUNOS_SYSCALL_TRAP \
rd %psr, %l0; \
sethi %hi(
C_LABEL(sunos_sys_table)
), %l7; \
sethi %hi(
sunos_sys_table
), %l7; \
b linux_sparc_syscall; \
or %l7, %lo(
C_LABEL(sunos_sys_table)
), %l7;
or %l7, %lo(
sunos_sys_table
), %l7;
#define SUNOS_NO_SYSCALL_TRAP \
b sunos_syscall; \
...
...
@@ -80,8 +80,8 @@
/* Software trap for Sparc-netbsd system calls. */
#define NETBSD_SYSCALL_TRAP \
sethi %hi(
C_LABEL(sys_call_table)
), %l7; \
or %l7, %lo(
C_LABEL(sys_call_table)
), %l7; \
sethi %hi(
sys_call_table
), %l7; \
or %l7, %lo(
sys_call_table
), %l7; \
b bsd_syscall; \
rd %psr, %l0;
...
...
include/asm-sparc/winmacro.h
View file @
2d6d3d27
...
...
@@ -106,9 +106,9 @@
#ifdef CONFIG_SMP
#define LOAD_CURRENT4M(dest_reg, idreg) \
rd %tbr, %idreg; \
sethi %hi(
C_LABEL(current_set)
), %dest_reg; \
sethi %hi(
current_set
), %dest_reg; \
srl %idreg, 10, %idreg; \
or %dest_reg, %lo(
C_LABEL(current_set)
), %dest_reg; \
or %dest_reg, %lo(
current_set
), %dest_reg; \
and %idreg, 0xc, %idreg; \
ld [%idreg + %dest_reg], %dest_reg;
...
...
@@ -119,15 +119,15 @@
/* Blackbox - take care with this... - check smp4m and smp4d before changing this. */
#define LOAD_CURRENT(dest_reg, idreg) \
sethi %hi(___b_load_current), %idreg; \
sethi %hi(
C_LABEL(current_set)
), %dest_reg; \
sethi %hi(
C_LABEL(boot_cpu_id4)
), %idreg; \
or %dest_reg, %lo(
C_LABEL(current_set)
), %dest_reg; \
ldub [%idreg + %lo(
C_LABEL(boot_cpu_id4)
)], %idreg; \
sethi %hi(
current_set
), %dest_reg; \
sethi %hi(
boot_cpu_id4
), %idreg; \
or %dest_reg, %lo(
current_set
), %dest_reg; \
ldub [%idreg + %lo(
boot_cpu_id4
)], %idreg; \
ld [%idreg + %dest_reg], %dest_reg;
#else
#define LOAD_CURRENT(dest_reg, idreg) \
sethi %hi(
C_LABEL(current_set)
), %idreg; \
ld [%idreg + %lo(
C_LABEL(current_set)
)], %dest_reg;
sethi %hi(
current_set
), %idreg; \
ld [%idreg + %lo(
current_set
)], %dest_reg;
#endif
#endif
/* !(_SPARC_WINMACRO_H) */
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