Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
1e0d061b
Commit
1e0d061b
authored
Aug 04, 2009
by
Kyle McMartin
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'ptrace' into next
parents
582b0141
7209a334
Changes
10
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
563 additions
and
48 deletions
+563
-48
arch/parisc/Kconfig
arch/parisc/Kconfig
+1
-0
arch/parisc/include/asm/elf.h
arch/parisc/include/asm/elf.h
+1
-0
arch/parisc/include/asm/ptrace.h
arch/parisc/include/asm/ptrace.h
+37
-1
arch/parisc/include/asm/syscall.h
arch/parisc/include/asm/syscall.h
+40
-0
arch/parisc/include/asm/thread_info.h
arch/parisc/include/asm/thread_info.h
+8
-2
arch/parisc/kernel/asm-offsets.c
arch/parisc/kernel/asm-offsets.c
+2
-2
arch/parisc/kernel/entry.S
arch/parisc/kernel/entry.S
+15
-14
arch/parisc/kernel/ptrace.c
arch/parisc/kernel/ptrace.c
+436
-21
arch/parisc/kernel/signal.c
arch/parisc/kernel/signal.c
+9
-0
arch/parisc/kernel/syscall.S
arch/parisc/kernel/syscall.S
+14
-8
No files found.
arch/parisc/Kconfig
View file @
1e0d061b
...
...
@@ -18,6 +18,7 @@ config PARISC
select BUG
select HAVE_PERF_COUNTERS
select GENERIC_ATOMIC64 if !64BIT
select HAVE_ARCH_TRACEHOOK
help
The PA-RISC microprocessor is designed by Hewlett-Packard and used
in many of their workstations & servers (HP9000 700 and 800 series,
...
...
arch/parisc/include/asm/elf.h
View file @
1e0d061b
...
...
@@ -329,6 +329,7 @@ struct pt_regs; /* forward declaration... */
#define ELF_PLAT_INIT(_r, load_addr) _r->gr[23] = 0
#define USE_ELF_CORE_DUMP
#define CORE_DUMP_USE_REGSET
#define ELF_EXEC_PAGESIZE 4096
/* This is the location that an ET_DYN program is loaded if exec'ed. Typical
...
...
arch/parisc/include/asm/ptrace.h
View file @
1e0d061b
...
...
@@ -33,6 +33,35 @@ struct pt_regs {
unsigned
long
ipsw
;
/* CR22 */
};
/* regset as seen by PTRACE_{GET|SET}REGS and coredumps */
struct
user_regset_struct
{
unsigned
long
gr
[
32
];
unsigned
long
sr
[
8
];
unsigned
long
iaoq
[
2
];
unsigned
long
iasq
[
2
];
unsigned
long
sar
;
unsigned
long
iir
;
unsigned
long
isr
;
unsigned
long
ior
;
unsigned
long
cr22
;
unsigned
long
cr0
;
unsigned
long
cr24
;
unsigned
long
cr25
;
unsigned
long
cr26
;
unsigned
long
cr27
;
unsigned
long
cr28
;
unsigned
long
cr29
;
unsigned
long
cr30
;
unsigned
long
cr31
;
unsigned
long
cr8
;
unsigned
long
cr9
;
unsigned
long
cr12
;
unsigned
long
cr13
;
unsigned
long
cr10
;
unsigned
long
cr15
;
unsigned
long
__pad0
[
16
];
/* ELF_NGREG is 80, pad it out */
};
/*
* The numbers chosen here are somewhat arbitrary but absolutely MUST
* not overlap with any of the number assigned in <linux/ptrace.h>.
...
...
@@ -42,6 +71,10 @@ struct pt_regs {
* since we have taken branch traps too)
*/
#define PTRACE_SINGLEBLOCK 12
/* resume execution until next branch */
#define PTRACE_GETREGS 13
#define PTRACE_SETREGS 14
#define PTRACE_GETFPREGS 18
#define PTRACE_SETFPREGS 19
#ifdef __KERNEL__
...
...
@@ -59,8 +92,11 @@ void user_enable_block_step(struct task_struct *task);
#define user_mode(regs) (((regs)->iaoq[0] & 3) ? 1 : 0)
#define user_space(regs) (((regs)->iasq[1] != 0) ? 1 : 0)
#define instruction_pointer(regs) ((regs)->iaoq[0] & ~3)
#define user_stack_pointer(regs) ((regs)->gr[30])
unsigned
long
profile_pc
(
struct
pt_regs
*
);
extern
void
show_regs
(
struct
pt_regs
*
);
#endif
#endif
/* __KERNEL__ */
#endif
arch/parisc/include/asm/syscall.h
0 → 100644
View file @
1e0d061b
/* syscall.h */
#ifndef _ASM_PARISC_SYSCALL_H_
#define _ASM_PARISC_SYSCALL_H_
#include <linux/err.h>
#include <asm/ptrace.h>
static
inline
long
syscall_get_nr
(
struct
task_struct
*
tsk
,
struct
pt_regs
*
regs
)
{
return
regs
->
gr
[
20
];
}
static
inline
void
syscall_get_arguments
(
struct
task_struct
*
tsk
,
struct
pt_regs
*
regs
,
unsigned
int
i
,
unsigned
int
n
,
unsigned
long
*
args
)
{
BUG_ON
(
i
);
switch
(
n
)
{
case
6
:
args
[
5
]
=
regs
->
gr
[
21
];
case
5
:
args
[
4
]
=
regs
->
gr
[
22
];
case
4
:
args
[
3
]
=
regs
->
gr
[
23
];
case
3
:
args
[
2
]
=
regs
->
gr
[
24
];
case
2
:
args
[
1
]
=
regs
->
gr
[
25
];
case
1
:
args
[
0
]
=
regs
->
gr
[
26
];
break
;
default:
BUG
();
}
}
#endif
/*_ASM_PARISC_SYSCALL_H_*/
arch/parisc/include/asm/thread_info.h
View file @
1e0d061b
...
...
@@ -59,6 +59,9 @@ struct thread_info {
#define TIF_MEMDIE 5
#define TIF_RESTORE_SIGMASK 6
/* restore saved signal mask */
#define TIF_FREEZE 7
/* is freezing for suspend */
#define TIF_NOTIFY_RESUME 8
/* tracing notification pending */
#define TIF_SINGLESTEP 9
/* single stepping? */
#define TIF_BLOCKSTEP 10
/* branch stepping? */
#define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE)
#define _TIF_SIGPENDING (1 << TIF_SIGPENDING)
...
...
@@ -67,9 +70,12 @@ struct thread_info {
#define _TIF_32BIT (1 << TIF_32BIT)
#define _TIF_RESTORE_SIGMASK (1 << TIF_RESTORE_SIGMASK)
#define _TIF_FREEZE (1 << TIF_FREEZE)
#define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME)
#define _TIF_SINGLESTEP (1 << TIF_SINGLESTEP)
#define _TIF_BLOCKSTEP (1 << TIF_BLOCKSTEP)
#define _TIF_
USER_WORK_MASK (_TIF_SIGPENDING
| \
_TIF_NEED_RESCHED | _TIF_RESTORE_SIGMASK
)
#define _TIF_
DO_NOTIFY_RESUME_MASK (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK
| \
_TIF_NOTIFY_RESUME
)
#endif
/* __KERNEL__ */
...
...
arch/parisc/kernel/asm-offsets.c
View file @
1e0d061b
...
...
@@ -270,8 +270,8 @@ int main(void)
DEFINE
(
DTLB_OFF_COUNT
,
offsetof
(
struct
pdc_cache_info
,
dt_off_count
));
DEFINE
(
DTLB_LOOP
,
offsetof
(
struct
pdc_cache_info
,
dt_loop
));
BLANK
();
DEFINE
(
PA_BLOCKSTEP_BIT
,
31
-
PT_BLOCKSTEP_BIT
);
DEFINE
(
PA_SINGLESTEP_BIT
,
31
-
PT_SINGLESTEP_BIT
);
DEFINE
(
TIF_BLOCKSTEP_PA_BIT
,
31
-
TIF_BLOCKSTEP
);
DEFINE
(
TIF_SINGLESTEP_PA_BIT
,
31
-
TIF_SINGLESTEP
);
BLANK
();
DEFINE
(
ASM_PMD_SHIFT
,
PMD_SHIFT
);
DEFINE
(
ASM_PGDIR_SHIFT
,
PGDIR_SHIFT
);
...
...
arch/parisc/kernel/entry.S
View file @
1e0d061b
...
...
@@ -948,7 +948,7 @@ intr_check_sig:
/
*
As
above
*/
mfctl
%
cr30
,%
r1
LDREG
TI_FLAGS
(%
r1
),%
r19
ldi
(
_TIF_SIGPENDING
|
_TIF_RESTORE_SIGMASK
)
,
%
r20
ldi
_TIF_DO_NOTIFY_RESUME_MASK
,
%
r20
and
,
COND
(<>)
%
r19
,
%
r20
,
%
r0
b
,
n
intr_restore
/*
skip
past
if
we
've nothing to do */
...
...
@@ -2019,7 +2019,7 @@ syscall_check_resched:
.
import
do_signal
,
code
syscall_check_sig
:
LDREG
TI_FLAGS
-
THREAD_SZ_ALGN
-
FRAME_SIZE
(%
r30
),%
r19
ldi
(
_TIF_SIGPENDING
|
_TIF_RESTORE_SIGMASK
)
,
%
r26
ldi
_TIF_DO_NOTIFY_RESUME_MASK
,
%
r26
and
,
COND
(<>)
%
r19
,
%
r26
,
%
r0
b
,
n
syscall_restore
/*
skip
past
if
we
've nothing to do */
...
...
@@ -2047,12 +2047,13 @@ syscall_do_signal:
b
,
n
syscall_check_sig
syscall_restore
:
/
*
Are
we
being
ptraced
?
*/
LDREG
TI_TASK
-
THREAD_SZ_ALGN
-
FRAME_SIZE
(%
r30
),%
r1
ldw
TASK_PTRACE
(%
r1
),
%
r19
bb
,<
%
r19
,
31
,
syscall_restore_rfi
nop
/
*
Are
we
being
ptraced
?
*/
ldw
TASK_FLAGS
(%
r1
),%
r19
ldi
(
_TIF_SINGLESTEP
|
_TIF_BLOCKSTEP
),%
r2
and
,
COND
(=)
%
r19
,%
r2
,%
r0
b
,
n
syscall_restore_rfi
ldo
TASK_PT_FR31
(%
r1
),%
r19
/*
reload
fpregs
*/
rest_fp
%
r19
...
...
@@ -2113,16 +2114,16 @@ syscall_restore_rfi:
ldi
0x0b
,%
r20
/*
Create
new
PSW
*/
depi
-
1
,
13
,
1
,%
r20
/*
C
,
Q
,
D
,
and
I
bits
*/
/
*
The
values
of
PA_SINGLESTEP_BIT
and
PA_
BLOCKSTEP_BIT
are
*
set
in
include
/
linux
/
ptrace
.
h
and
converted
to
PA
bitmap
*
numbers
in
asm
-
offsets
.
c
*/
/
*
if
((%
r19
.
PA_
SINGLESTEP_BIT
))
{
%
r20
.27
=
1
}
*/
extru
,
=
%
r19
,
PA_SINGLESTEP
_BIT
,
1
,%
r0
/
*
The
values
of
SINGLESTEP_BIT
and
BLOCKSTEP_BIT
are
*
set
in
thread_info
.
h
and
converted
to
PA
bitmap
*
numbers
in
asm
-
offsets
.
c
*/
/
*
if
((%
r19
.
SINGLESTEP_BIT
))
{
%
r20
.27
=
1
}
*/
extru
,
=
%
r19
,
TIF_SINGLESTEP_PA
_BIT
,
1
,%
r0
depi
-
1
,
27
,
1
,%
r20
/*
R
bit
*/
/
*
if
((%
r19
.
PA_
BLOCKSTEP_BIT
))
{
%
r20
.7
=
1
}
*/
extru
,
=
%
r19
,
PA_BLOCKSTEP
_BIT
,
1
,%
r0
/
*
if
((%
r19
.
BLOCKSTEP_BIT
))
{
%
r20
.7
=
1
}
*/
extru
,
=
%
r19
,
TIF_BLOCKSTEP_PA
_BIT
,
1
,%
r0
depi
-
1
,
7
,
1
,%
r20
/*
T
bit
*/
STREG
%
r20
,
TASK_PT_PSW
(%
r1
)
...
...
arch/parisc/kernel/ptrace.c
View file @
1e0d061b
This diff is collapsed.
Click to expand it.
arch/parisc/kernel/signal.c
View file @
1e0d061b
...
...
@@ -21,6 +21,7 @@
#include <linux/errno.h>
#include <linux/wait.h>
#include <linux/ptrace.h>
#include <linux/tracehook.h>
#include <linux/unistd.h>
#include <linux/stddef.h>
#include <linux/compat.h>
...
...
@@ -467,6 +468,9 @@ handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka,
sigaddset
(
&
current
->
blocked
,
sig
);
recalc_sigpending
();
spin_unlock_irq
(
&
current
->
sighand
->
siglock
);
tracehook_signal_handler
(
sig
,
info
,
ka
,
regs
,
0
);
return
1
;
}
...
...
@@ -645,4 +649,9 @@ void do_notify_resume(struct pt_regs *regs, long in_syscall)
if
(
test_thread_flag
(
TIF_SIGPENDING
)
||
test_thread_flag
(
TIF_RESTORE_SIGMASK
))
do_signal
(
regs
,
in_syscall
);
if
(
test_thread_flag
(
TIF_NOTIFY_RESUME
))
{
clear_thread_flag
(
TIF_NOTIFY_RESUME
);
tracehook_notify_resume
(
regs
);
}
}
arch/parisc/kernel/syscall.S
View file @
1e0d061b
...
...
@@ -288,18 +288,23 @@ tracesys:
STREG
%
r18
,
PT_GR18
(%
r2
)
/
*
Finished
saving
things
for
the
debugger
*/
ldil
L
%
syscall_trace
,%
r1
copy
%
r2
,%
r26
ldil
L
%
do_syscall_trace_enter
,%
r1
ldil
L
%
tracesys_next
,%
r2
be
R
%
syscall_trace
(%
sr7
,%
r1
)
be
R
%
do_syscall_trace_enter
(%
sr7
,%
r1
)
ldo
R
%
tracesys_next
(%
r2
),%
r2
tracesys_next
:
tracesys_next
:
/
*
do_syscall_trace_enter
either
returned
the
syscallno
,
or
-
1
L
,
*
so
we
skip
restoring
the
PT_GR20
below
,
since
we
pulled
it
from
*
task
->
thread
.
regs
.
gr
[
20
]
above
.
*/
copy
%
ret0
,%
r20
ldil
L
%
sys_call_table
,%
r1
ldo
R
%
sys_call_table
(%
r1
),
%
r19
ldo
-
THREAD_SZ_ALGN
-
FRAME_SIZE
(%
r30
),%
r1
/*
get
task
ptr
*/
LDREG
TI_TASK
(%
r1
),
%
r1
LDREG
TASK_PT_GR20
(%
r1
),
%
r20
LDREG
TASK_PT_GR26
(%
r1
),
%
r26
/*
Restore
the
users
args
*/
LDREG
TASK_PT_GR25
(%
r1
),
%
r25
LDREG
TASK_PT_GR24
(%
r1
),
%
r24
...
...
@@ -336,7 +341,8 @@ tracesys_exit:
#ifdef CONFIG_64BIT
ldo
-
16
(%
r30
),%
r29
/*
Reference
param
save
area
*/
#endif
bl
syscall_trace
,
%
r2
ldo
TASK_REGS
(%
r1
),%
r26
bl
do_syscall_trace_exit
,%
r2
STREG
%
r28
,
TASK_PT_GR28
(%
r1
)
/*
save
return
value
now
*/
ldo
-
THREAD_SZ_ALGN
-
FRAME_SIZE
(%
r30
),%
r1
/*
get
task
ptr
*/
LDREG
TI_TASK
(%
r1
),
%
r1
...
...
@@ -353,12 +359,12 @@ tracesys_exit:
tracesys_sigexit
:
ldo
-
THREAD_SZ_ALGN
-
FRAME_SIZE
(%
r30
),%
r1
/*
get
task
ptr
*/
LDREG
0
(%
r1
),
%
r1
LDREG
TI_TASK
(%
r1
),
%
r1
#ifdef CONFIG_64BIT
ldo
-
16
(%
r30
),%
r29
/*
Reference
param
save
area
*/
#endif
bl
syscall_trace
,
%
r2
nop
bl
do_syscall_trace_exit
,
%
r2
ldo
TASK_REGS
(%
r1
),%
r26
ldil
L
%
syscall_exit_rfi
,%
r1
be
,
n
R
%
syscall_exit_rfi
(%
sr7
,%
r1
)
...
...
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