Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
57cafcc8
Commit
57cafcc8
authored
Mar 30, 2004
by
David S. Miller
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://kernel.bkbits.net/wesolows/sparc32-2.6
into nuts.davemloft.net:/disk1/BK/sparc-2.6
parents
f96599ee
f756a8b3
Changes
15
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
316 additions
and
210 deletions
+316
-210
arch/sparc/defconfig
arch/sparc/defconfig
+225
-78
arch/sparc/kernel/entry.S
arch/sparc/kernel/entry.S
+7
-20
arch/sparc/kernel/head.S
arch/sparc/kernel/head.S
+0
-3
arch/sparc/kernel/init_task.c
arch/sparc/kernel/init_task.c
+4
-2
arch/sparc/kernel/module.c
arch/sparc/kernel/module.c
+13
-5
arch/sparc/kernel/signal.c
arch/sparc/kernel/signal.c
+2
-2
arch/sparc/kernel/sparc_ksyms.c
arch/sparc/kernel/sparc_ksyms.c
+45
-60
arch/sparc/kernel/sys_sunos.c
arch/sparc/kernel/sys_sunos.c
+2
-2
arch/sparc/kernel/traps.c
arch/sparc/kernel/traps.c
+5
-5
arch/sparc/lib/Makefile
arch/sparc/lib/Makefile
+3
-1
arch/sparc/lib/debuglocks.c
arch/sparc/lib/debuglocks.c
+2
-3
arch/sparc/math-emu/math.c
arch/sparc/math-emu/math.c
+2
-0
include/asm-sparc/asmmacro.h
include/asm-sparc/asmmacro.h
+0
-11
include/asm-sparc/smp.h
include/asm-sparc/smp.h
+4
-4
scripts/modpost.c
scripts/modpost.c
+2
-14
No files found.
arch/sparc/defconfig
View file @
57cafcc8
This diff is collapsed.
Click to expand it.
arch/sparc/kernel/entry.S
View file @
57cafcc8
...
...
@@ -288,10 +288,9 @@ bad_trap_handler:
wr
%
l0
,
PSR_ET
,
%
psr
WRITE_PAUSE
mov
%
l7
,
%
o0
!
trap
number
mov
%
l0
,
%
o1
!
psr
add
%
sp
,
STACKFRAME_SZ
,
%
o0
!
pt_regs
call
do_hw_interrupt
mov
%
l
1
,
%
o2
!
pc
mov
%
l
7
,
%
o1
!
trap
number
RESTORE_ALL
...
...
@@ -350,21 +349,15 @@ smp4m_ticker:
*
for
cross
calls
.
That
has
a
separate
entry
point
below
.
*/
maybe_smp4m_msg
:
GET_PROCESSOR
_M
ID
(
o3
)
GET_PROCESSOR
4M_
ID
(
o3
)
set
sun4m_interrupts
,
%
l5
ld
[%
l5
],
%
o5
sethi
%
hi
(
0x
60000000
),
%
o4
sethi
%
hi
(
0x
40000000
),
%
o2
sll
%
o3
,
12
,
%
o3
ld
[%
o5
+
%
o3
],
%
o1
andcc
%
o1
,
%
o
4
,
%
g0
andcc
%
o1
,
%
o
2
,
%
g0
be
,
a
smp4m_ticker
cmp
%
l7
,
14
sethi
%
hi
(
0x40000000
),
%
o2
add
%
o5
,
%
o3
,
%
o5
andcc
%
o1
,
%
o2
,
%
g0
be
,
a
1
f
sethi
%
hi
(
0x20000000
),
%
o2
1
:
st
%
o2
,
[%
o5
+
0x4
]
WRITE_PAUSE
ld
[%
o5
],
%
g0
...
...
@@ -374,15 +367,9 @@ maybe_smp4m_msg:
WRITE_PAUSE
wr
%
l4
,
PSR_ET
,
%
psr
WRITE_PAUSE
srl
%
o2
,
(
16
+
14
),
%
o2
tst
%
o2
bne
2
f
nop
call
smp_reschedule_irq
add
%
o7
,
8
,
%
o7
2
:
call
smp_stop_cpu_irq
nop
RESTORE_ALL
.
align
4
...
...
@@ -390,7 +377,7 @@ maybe_smp4m_msg:
linux_trap_ipi15_sun4m
:
SAVE_ALL
sethi
%
hi
(
0x80000000
),
%
o2
GET_PROCESSOR
_M
ID
(
o0
)
GET_PROCESSOR
4M_
ID
(
o0
)
set
sun4m_interrupts
,
%
l5
ld
[%
l5
],
%
o5
sll
%
o0
,
12
,
%
o0
...
...
arch/sparc/kernel/head.S
View file @
57cafcc8
...
...
@@ -746,9 +746,6 @@ go_to_highmem:
jmpl
%
g1
,
%
g0
nop
/
*
This
is
to
align
init_thread_union
properly
,
be
careful
.
-
DaveM
*/
.
align
8192
/*
The
code
above
should
be
at
beginning
and
we
have
to
take
care
about
*
short
jumps
,
as
branching
to
.
text
.
init
section
from
.
text
is
usually
*
impossible
*/
...
...
arch/sparc/kernel/init_task.c
View file @
57cafcc8
...
...
@@ -21,5 +21,7 @@ EXPORT_SYMBOL(init_task);
* If this is not aligned on a 8k boundry, then you should change code
* in etrap.S which assumes it.
*/
__asm__
(
".section
\"
.text
\"
,#alloc
\n
"
);
union
thread_union
init_thread_union
=
{
INIT_THREAD_INFO
(
init_task
)
};
union
thread_union
init_thread_union
__attribute__
((
section
(
".text"
)))
__attribute__
((
aligned
(
THREAD_SIZE
)))
=
{
INIT_THREAD_INFO
(
init_task
)
};
arch/sparc/kernel/module.c
View file @
57cafcc8
...
...
@@ -36,7 +36,9 @@ void module_free(struct module *mod, void *module_region)
table entries. */
}
/* Make generic code ignore STT_REGISTER dummy undefined symbols. */
/* Make generic code ignore STT_REGISTER dummy undefined symbols,
* and replace references to .func with func as in ppc64's dedotify.
*/
int
module_frob_arch_sections
(
Elf_Ehdr
*
hdr
,
Elf_Shdr
*
sechdrs
,
char
*
secstrings
,
...
...
@@ -44,7 +46,7 @@ int module_frob_arch_sections(Elf_Ehdr *hdr,
{
unsigned
int
symidx
;
Elf32_Sym
*
sym
;
c
onst
c
har
*
strtab
;
char
*
strtab
;
int
i
;
for
(
symidx
=
0
;
sechdrs
[
symidx
].
sh_type
!=
SHT_SYMTAB
;
symidx
++
)
{
...
...
@@ -57,9 +59,15 @@ int module_frob_arch_sections(Elf_Ehdr *hdr,
strtab
=
(
char
*
)
sechdrs
[
sechdrs
[
symidx
].
sh_link
].
sh_addr
;
for
(
i
=
1
;
i
<
sechdrs
[
symidx
].
sh_size
/
sizeof
(
Elf_Sym
);
i
++
)
{
if
(
sym
[
i
].
st_shndx
==
SHN_UNDEF
&&
ELF32_ST_TYPE
(
sym
[
i
].
st_info
)
==
STT_REGISTER
)
sym
[
i
].
st_shndx
=
SHN_ABS
;
if
(
sym
[
i
].
st_shndx
==
SHN_UNDEF
)
{
if
(
ELF32_ST_TYPE
(
sym
[
i
].
st_info
)
==
STT_REGISTER
)
sym
[
i
].
st_shndx
=
SHN_ABS
;
else
{
char
*
name
=
strtab
+
sym
[
i
].
st_name
;
if
(
name
[
0
]
==
'.'
)
memmove
(
name
,
name
+
1
,
strlen
(
name
));
}
}
}
return
0
;
}
...
...
arch/sparc/kernel/signal.c
View file @
57cafcc8
...
...
@@ -1128,9 +1128,9 @@ do_sys_sigstack(struct sigstack __user *ssptr, struct sigstack __user *ossptr,
/* Now see if we want to update the new state. */
if
(
ssptr
)
{
void
*
ss_sp
;
char
*
ss_sp
;
if
(
get_user
(
(
long
)
ss_sp
,
&
ssptr
->
the_stack
))
if
(
get_user
(
ss_sp
,
&
ssptr
->
the_stack
))
goto
out
;
/* If the current stack was set with sigaltstack, don't
swap stacks while we are on it. */
...
...
arch/sparc/kernel/sparc_ksyms.c
View file @
57cafcc8
...
...
@@ -92,31 +92,21 @@ extern void ___set_bit(void);
extern
void
___clear_bit
(
void
);
extern
void
___change_bit
(
void
);
/* One thing to note is that the way the symbols of the mul/div
* support routines are named is a mess, they all start with
* a '.' which makes it a bitch to export, here is the trick:
/* Alias functions whose names begin with "." and export the aliases.
* The module references will be fixed up by module_frob_arch_sections.
*/
#define DOT_ALIAS2(__ret, __x, __arg1, __arg2) \
extern __ret __x(__arg1, __arg2) \
__attribute__((weak, alias("." # __x)));
/* If the interface of any of these special functions does ever
* change in an incompatible way, you must modify this.
*/
#define DOT_PROTO(sym) extern int __dot_##sym(int, int)
#ifdef __GENKSYMS__
#define EXPORT_SYMBOL_DOT(sym) \
DOT_PROTO(sym); \
EXPORT_SYMBOL(__dot_ ## sym)
#else
/* !__GENKSYMS__ */
#define EXPORT_SYMBOL_DOT(sym) \
DOT_PROTO(sym) __asm__("." # sym); \
__CRC_SYMBOL(__dot_##sym, "") \
static const char __kstrtab___dot_##sym[] \
__attribute__((section("__ksymtab_strings"))) \
= "." #sym; \
static const struct kernel_symbol __ksymtab___dot_##sym \
__attribute__((section("__ksymtab"))) \
= { (unsigned long)&__dot_##sym, __kstrtab___dot_##sym }
#endif
DOT_ALIAS2
(
int
,
div
,
int
,
int
)
DOT_ALIAS2
(
int
,
mul
,
int
,
int
)
DOT_ALIAS2
(
int
,
rem
,
int
,
int
)
DOT_ALIAS2
(
unsigned
,
udiv
,
unsigned
,
unsigned
)
DOT_ALIAS2
(
unsigned
,
umul
,
unsigned
,
unsigned
)
DOT_ALIAS2
(
unsigned
,
urem
,
unsigned
,
unsigned
)
#undef DOT_ALIAS2
/* used by various drivers */
EXPORT_SYMBOL
(
sparc_cpu_model
);
...
...
@@ -180,21 +170,20 @@ EXPORT_SYMBOL(io_remap_page_range);
/* EXPORT_SYMBOL(iounit_map_dma_init); */
/* EXPORT_SYMBOL(iounit_map_dma_page); */
/* Btfixup stuff cannot have versions, it would be complicated too much */
#ifndef CONFIG_SMP
EXPORT_SYMBOL
_NOVERS
(
BTFIXUP_CALL
(
___xchg32
));
EXPORT_SYMBOL
(
BTFIXUP_CALL
(
___xchg32
));
#else
EXPORT_SYMBOL
_NOVERS
(
BTFIXUP_CALL
(
_
_smp_processor_id
));
EXPORT_SYMBOL
(
BTFIXUP_CALL
(
__hard
_smp_processor_id
));
#endif
EXPORT_SYMBOL
_NOVERS
(
BTFIXUP_CALL
(
enable_irq
));
EXPORT_SYMBOL
_NOVERS
(
BTFIXUP_CALL
(
disable_irq
));
EXPORT_SYMBOL
_NOVERS
(
BTFIXUP_CALL
(
__irq_itoa
));
EXPORT_SYMBOL
_NOVERS
(
BTFIXUP_CALL
(
mmu_unlockarea
));
EXPORT_SYMBOL
_NOVERS
(
BTFIXUP_CALL
(
mmu_lockarea
));
EXPORT_SYMBOL
_NOVERS
(
BTFIXUP_CALL
(
mmu_get_scsi_sgl
));
EXPORT_SYMBOL
_NOVERS
(
BTFIXUP_CALL
(
mmu_get_scsi_one
));
EXPORT_SYMBOL
_NOVERS
(
BTFIXUP_CALL
(
mmu_release_scsi_sgl
));
EXPORT_SYMBOL
_NOVERS
(
BTFIXUP_CALL
(
mmu_release_scsi_one
));
EXPORT_SYMBOL
(
BTFIXUP_CALL
(
enable_irq
));
EXPORT_SYMBOL
(
BTFIXUP_CALL
(
disable_irq
));
EXPORT_SYMBOL
(
BTFIXUP_CALL
(
__irq_itoa
));
EXPORT_SYMBOL
(
BTFIXUP_CALL
(
mmu_unlockarea
));
EXPORT_SYMBOL
(
BTFIXUP_CALL
(
mmu_lockarea
));
EXPORT_SYMBOL
(
BTFIXUP_CALL
(
mmu_get_scsi_sgl
));
EXPORT_SYMBOL
(
BTFIXUP_CALL
(
mmu_get_scsi_one
));
EXPORT_SYMBOL
(
BTFIXUP_CALL
(
mmu_release_scsi_sgl
));
EXPORT_SYMBOL
(
BTFIXUP_CALL
(
mmu_release_scsi_one
));
#ifdef CONFIG_SBUS
EXPORT_SYMBOL
(
sbus_root
);
...
...
@@ -271,15 +260,15 @@ EXPORT_SYMBOL(__prom_getsibling);
/* sparc library symbols */
EXPORT_SYMBOL
(
bcopy
);
EXPORT_SYMBOL
(
memchr
);
EXPORT_SYMBOL
_NOVERS
(
memscan
);
EXPORT_SYMBOL
_NOVERS
(
strlen
);
EXPORT_SYMBOL
(
memscan
);
EXPORT_SYMBOL
(
strlen
);
EXPORT_SYMBOL
(
strnlen
);
EXPORT_SYMBOL
(
strcpy
);
EXPORT_SYMBOL
(
strncpy
);
EXPORT_SYMBOL
(
strcat
);
EXPORT_SYMBOL
(
strncat
);
EXPORT_SYMBOL
(
strcmp
);
EXPORT_SYMBOL
_NOVERS
(
strncmp
);
EXPORT_SYMBOL
(
strncmp
);
EXPORT_SYMBOL
(
strchr
);
EXPORT_SYMBOL
(
strrchr
);
EXPORT_SYMBOL
(
strpbrk
);
...
...
@@ -309,28 +298,24 @@ EXPORT_SYMBOL(csum_partial);
/* Cache flushing. */
EXPORT_SYMBOL
(
sparc_flush_page_to_ram
);
/* No version information on this, heavily used in inline asm,
* and will always be 'void __ret_efault(void)'.
*/
EXPORT_SYMBOL_NOVERS
(
__ret_efault
);
/* No version information on these, as gcc produces such symbols. */
EXPORT_SYMBOL_NOVERS
(
memcmp
);
EXPORT_SYMBOL_NOVERS
(
memcpy
);
EXPORT_SYMBOL_NOVERS
(
memset
);
EXPORT_SYMBOL_NOVERS
(
memmove
);
EXPORT_SYMBOL_NOVERS
(
__ashrdi3
);
EXPORT_SYMBOL_NOVERS
(
__ashldi3
);
EXPORT_SYMBOL_NOVERS
(
__lshrdi3
);
EXPORT_SYMBOL_NOVERS
(
__muldi3
);
EXPORT_SYMBOL_NOVERS
(
__divdi3
);
EXPORT_SYMBOL_DOT
(
rem
);
EXPORT_SYMBOL_DOT
(
urem
);
EXPORT_SYMBOL_DOT
(
mul
);
EXPORT_SYMBOL_DOT
(
umul
);
EXPORT_SYMBOL_DOT
(
div
);
EXPORT_SYMBOL_DOT
(
udiv
);
EXPORT_SYMBOL
(
__ret_efault
);
EXPORT_SYMBOL
(
memcmp
);
EXPORT_SYMBOL
(
memcpy
);
EXPORT_SYMBOL
(
memset
);
EXPORT_SYMBOL
(
memmove
);
EXPORT_SYMBOL
(
__ashrdi3
);
EXPORT_SYMBOL
(
__ashldi3
);
EXPORT_SYMBOL
(
__lshrdi3
);
EXPORT_SYMBOL
(
__muldi3
);
EXPORT_SYMBOL
(
__divdi3
);
EXPORT_SYMBOL
(
rem
);
EXPORT_SYMBOL
(
urem
);
EXPORT_SYMBOL
(
mul
);
EXPORT_SYMBOL
(
umul
);
EXPORT_SYMBOL
(
div
);
EXPORT_SYMBOL
(
udiv
);
#ifdef CONFIG_DEBUG_BUGVERBOSE
EXPORT_SYMBOL
(
do_BUG
);
...
...
arch/sparc/kernel/sys_sunos.c
View file @
57cafcc8
...
...
@@ -343,7 +343,7 @@ static int sunos_filldir(void * __buf, const char * name, int namlen,
put_user
(
reclen
,
&
dirent
->
d_reclen
);
copy_to_user
(
dirent
->
d_name
,
name
,
namlen
);
put_user
(
0
,
dirent
->
d_name
+
namlen
);
((
char
*
)
dirent
)
+=
reclen
;
dirent
=
(
void
*
)
dirent
+
reclen
;
buf
->
curr
=
dirent
;
buf
->
count
-=
reclen
;
return
0
;
...
...
@@ -422,7 +422,7 @@ static int sunos_filldirentry(void * __buf, const char * name, int namlen,
put_user
(
reclen
,
&
dirent
->
d_reclen
);
copy_to_user
(
dirent
->
d_name
,
name
,
namlen
);
put_user
(
0
,
dirent
->
d_name
+
namlen
);
((
char
*
)
dirent
)
+=
reclen
;
dirent
=
(
void
*
)
dirent
+
reclen
;
buf
->
curr
=
dirent
;
buf
->
count
-=
reclen
;
return
0
;
...
...
arch/sparc/kernel/traps.c
View file @
57cafcc8
...
...
@@ -131,23 +131,23 @@ void die_if_kernel(char *str, struct pt_regs *regs)
do_exit
(
SIGSEGV
);
}
void
do_hw_interrupt
(
unsigned
long
type
,
unsigned
long
psr
,
unsigned
long
pc
)
void
do_hw_interrupt
(
struct
pt_regs
*
regs
,
unsigned
long
type
)
{
siginfo_t
info
;
if
(
type
<
0x80
)
{
/* Sun OS's puke from bad traps, Linux survives! */
printk
(
"Unimplemented Sparc TRAP, type = %02lx
\n
"
,
type
);
die_if_kernel
(
"Whee... Hello Mr. Penguin"
,
current
->
thread
.
k
regs
);
die_if_kernel
(
"Whee... Hello Mr. Penguin"
,
regs
);
}
if
(
psr
&
PSR_PS
)
die_if_kernel
(
"Kernel bad trap"
,
current
->
thread
.
k
regs
);
if
(
regs
->
psr
&
PSR_PS
)
die_if_kernel
(
"Kernel bad trap"
,
regs
);
info
.
si_signo
=
SIGILL
;
info
.
si_errno
=
0
;
info
.
si_code
=
ILL_ILLTRP
;
info
.
si_addr
=
(
void
*
)
pc
;
info
.
si_addr
=
(
void
*
)
regs
->
pc
;
info
.
si_trapno
=
type
-
0x80
;
force_sig_info
(
SIGILL
,
&
info
,
current
);
}
...
...
arch/sparc/lib/Makefile
View file @
57cafcc8
...
...
@@ -7,5 +7,7 @@ EXTRA_AFLAGS := -ansi -DST_DIV0=0x02
lib-y
:=
mul.o rem.o sdiv.o udiv.o umul.o urem.o ashrdi3.o memcpy.o memset.o
\
strlen.o checksum.o blockops.o memscan.o memcmp.o strncmp.o
\
strncpy_from_user.o divdi3.o udivdi3.o strlen_user.o
\
copy_user.o locks.o atomic.o atomic32.o bitops.o
debuglocks.o
\
copy_user.o locks.o atomic.o atomic32.o bitops.o
\
lshrdi3.o ashldi3.o rwsem.o muldi3.o bitext.o
lib-$(CONFIG_DEBUG_SPINLOCK)
+=
debuglocks.o
arch/sparc/lib/debuglocks.c
View file @
57cafcc8
...
...
@@ -12,8 +12,7 @@
#include <asm/psr.h>
#include <asm/system.h>
/* To enable this code, just define SPIN_LOCK_DEBUG in asm/spinlock.h */
#ifdef SPIN_LOCK_DEBUG
#ifdef CONFIG_SMP
/* Some notes on how these debugging routines work. When a lock is acquired
* an extra debugging member lock->owner_pc is set to the caller of the lock
...
...
@@ -200,4 +199,4 @@ void _do_write_unlock(rwlock_t *rw)
rw
->
lock
=
0
;
}
#endif
/* S
PIN_LOCK_DEBUG
*/
#endif
/* S
MP
*/
arch/sparc/math-emu/math.c
View file @
57cafcc8
...
...
@@ -327,6 +327,7 @@ static int do_one_mathemu(u32 insn, unsigned long *pfsr, unsigned long *fregs)
#ifdef DEBUG_MATHEMU
printk
(
"unknown FPop1: %03lx
\n
"
,(
insn
>>
5
)
&
0x1ff
);
#endif
break
;
}
}
else
if
((
insn
&
0xc1f80000
)
==
0x81a80000
)
/* FPOP2 */
{
switch
((
insn
>>
5
)
&
0x1ff
)
{
...
...
@@ -340,6 +341,7 @@ static int do_one_mathemu(u32 insn, unsigned long *pfsr, unsigned long *fregs)
#ifdef DEBUG_MATHEMU
printk
(
"unknown FPop2: %03lx
\n
"
,(
insn
>>
5
)
&
0x1ff
);
#endif
break
;
}
}
...
...
include/asm-sparc/asmmacro.h
View file @
57cafcc8
...
...
@@ -18,17 +18,6 @@
#define GET_PROCESSOR4D_ID(reg) \
lda [%g0] ASI_M_VIKING_TMP1, %reg;
/* Blackbox */
#define GET_PROCESSOR_ID(reg) \
sethi %hi(___b_smp_processor_id), %reg; \
sethi %hi(boot_cpu_id), %reg; \
ldub [%reg + %lo(boot_cpu_id)], %reg;
#define GET_PROCESSOR_MID(reg) \
rd %tbr, %reg; \
srl %reg, 12, %reg; \
and %reg, 3, %reg;
/* All trap entry points _must_ begin with this macro or else you
* lose. It makes sure the kernel has a proper window so that
* c-code can be called.
...
...
include/asm-sparc/smp.h
View file @
57cafcc8
...
...
@@ -53,8 +53,8 @@ void smp_info(struct seq_file *);
BTFIXUPDEF_CALL
(
void
,
smp_cross_call
,
smpfunc_t
,
unsigned
long
,
unsigned
long
,
unsigned
long
,
unsigned
long
,
unsigned
long
)
BTFIXUPDEF_CALL
(
void
,
smp_message_pass
,
int
,
int
,
unsigned
long
,
int
)
BTFIXUPDEF_CALL
(
int
,
__smp_processor_id
,
void
)
BTFIXUPDEF_BLACKBOX
(
smp_processor_id
)
BTFIXUPDEF_CALL
(
int
,
__
hard_
smp_processor_id
,
void
)
BTFIXUPDEF_BLACKBOX
(
hard_
smp_processor_id
)
BTFIXUPDEF_BLACKBOX
(
load_current
)
#define smp_cross_call(func,arg1,arg2,arg3,arg4,arg5) BTFIXUP_CALL(smp_cross_call)(func,arg1,arg2,arg3,arg4,arg5)
...
...
@@ -129,7 +129,7 @@ extern __inline__ int hard_smp_processor_id(void)
"=&r" (cpuid));
See btfixup.h and btfixupprep.c to understand how a blackbox works.
*/
__asm__
__volatile__
(
"sethi %%hi(___b_smp_processor_id), %0
\n\t
"
__asm__
__volatile__
(
"sethi %%hi(___b_
hard_
smp_processor_id), %0
\n\t
"
"sethi %%hi(boot_cpu_id), %0
\n\t
"
"ldub [%0 + %%lo(boot_cpu_id)], %0
\n\t
"
:
"=&r"
(
cpuid
));
...
...
@@ -141,7 +141,7 @@ extern __inline__ int hard_smp_processor_id(void)
int
cpuid
;
__asm__
__volatile__
(
"mov %%o7, %%g1
\n\t
"
"call ___f___smp_processor_id
\n\t
"
"call ___f___
hard_
smp_processor_id
\n\t
"
" nop
\n\t
"
"mov %%g2, %0
\n\t
"
:
"=r"
(
cpuid
)
:
:
"g1"
,
"g2"
);
return
cpuid
;
...
...
scripts/modpost.c
View file @
57cafcc8
...
...
@@ -141,26 +141,14 @@ new_symbol(const char *name, struct module *module, unsigned int *crc)
symbolhash
[
hash
]
=
new
;
}
#define DOTSYM_PFX "__dot_"
struct
symbol
*
find_symbol
(
const
char
*
name
)
{
struct
symbol
*
s
;
char
dotname
[
64
+
sizeof
(
DOTSYM_PFX
)];
/* .foo matches foo. PPC64 needs this. */
if
(
name
[
0
]
==
'.'
)
{
/*
For our purposes,
.foo matches foo. PPC64 needs this. */
if
(
name
[
0
]
==
'.'
)
name
++
;
strcpy
(
dotname
,
DOTSYM_PFX
);
strncat
(
dotname
,
name
,
sizeof
(
dotname
)
-
sizeof
(
DOTSYM_PFX
)
-
1
);
dotname
[
sizeof
(
dotname
)
-
1
]
=
0
;
/* Sparc32 wants .foo to match __dot_foo, try this first. */
for
(
s
=
symbolhash
[
tdb_hash
(
dotname
)
%
SYMBOL_HASH_SIZE
];
s
;
s
=
s
->
next
)
{
if
(
strcmp
(
s
->
name
,
dotname
)
==
0
)
return
s
;
}
}
for
(
s
=
symbolhash
[
tdb_hash
(
name
)
%
SYMBOL_HASH_SIZE
];
s
;
s
=
s
->
next
)
{
if
(
strcmp
(
s
->
name
,
name
)
==
0
)
...
...
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