Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
x86
um
elfcore.c
Go to the documentation of this file.
1
#include <linux/elf.h>
2
#include <
linux/coredump.h
>
3
#include <linux/fs.h>
4
#include <
linux/mm.h
>
5
6
#include <asm/elf.h>
7
8
9
Elf32_Half
elf_core_extra_phdrs
(
void
)
10
{
11
return
vsyscall_ehdr
? (((
struct
elfhdr
*)
vsyscall_ehdr
)->e_phnum) : 0;
12
}
13
14
int
elf_core_write_extra_phdrs
(
struct
file
*
file
, loff_t
offset
,
size_t
*
size
,
15
unsigned
long
limit
)
16
{
17
if
(
vsyscall_ehdr
) {
18
const
struct
elfhdr
*
const
ehdrp =
19
(
struct
elfhdr
*)
vsyscall_ehdr
;
20
const
struct
elf_phdr
*
const
phdrp =
21
(
const
struct
elf_phdr
*) (
vsyscall_ehdr
+ ehdrp->e_phoff);
22
int
i
;
23
Elf32_Off
ofs = 0;
24
25
for
(i = 0; i < ehdrp->e_phnum; ++
i
) {
26
struct
elf_phdr
phdr = phdrp[
i
];
27
28
if
(phdr.p_type ==
PT_LOAD
) {
29
ofs = phdr.p_offset =
offset
;
30
offset += phdr.p_filesz;
31
}
else
{
32
phdr.p_offset += ofs;
33
}
34
phdr.p_paddr = 0;
/* match other core phdrs */
35
*size +=
sizeof
(phdr);
36
if
(*size > limit
37
|| !
dump_write
(file, &phdr,
sizeof
(phdr)))
38
return
0;
39
}
40
}
41
return
1;
42
}
43
44
int
elf_core_write_extra_data
(
struct
file
*
file
,
size_t
*
size
,
45
unsigned
long
limit
)
46
{
47
if
(
vsyscall_ehdr
) {
48
const
struct
elfhdr
*
const
ehdrp =
49
(
struct
elfhdr
*)
vsyscall_ehdr
;
50
const
struct
elf_phdr
*
const
phdrp =
51
(
const
struct
elf_phdr
*) (
vsyscall_ehdr
+ ehdrp->e_phoff);
52
int
i
;
53
54
for
(i = 0; i < ehdrp->e_phnum; ++
i
) {
55
if
(phdrp[i].p_type ==
PT_LOAD
) {
56
void
*
addr
= (
void
*) phdrp[i].p_vaddr;
57
size_t
filesz = phdrp[
i
].p_filesz;
58
59
*size += filesz;
60
if
(*size > limit
61
|| !
dump_write
(file, addr, filesz))
62
return
0;
63
}
64
}
65
}
66
return
1;
67
}
68
69
size_t
elf_core_extra_data_size
(
void
)
70
{
71
if
(
vsyscall_ehdr
) {
72
const
struct
elfhdr
*
const
ehdrp =
73
(
struct
elfhdr
*)
vsyscall_ehdr
;
74
const
struct
elf_phdr
*
const
phdrp =
75
(
const
struct
elf_phdr
*) (
vsyscall_ehdr
+ ehdrp->e_phoff);
76
int
i
;
77
78
for
(i = 0; i < ehdrp->e_phnum; ++
i
)
79
if
(phdrp[i].p_type ==
PT_LOAD
)
80
return
(
size_t
) phdrp[
i
].p_filesz;
81
}
82
return
0;
83
}
Generated on Thu Jan 10 2013 13:06:36 for Linux Kernel by
1.8.2