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
ia64
kernel
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
Elf64_Half
elf_core_extra_phdrs
(
void
)
10
{
11
return
GATE_EHDR
->e_phnum;
12
}
13
14
int
elf_core_write_extra_phdrs
(
struct
file
*
file
, loff_t
offset
,
size_t
*
size
,
15
unsigned
long
limit
)
16
{
17
const
struct
elf_phdr
*
const
gate_phdrs =
18
(
const
struct
elf_phdr
*) (
GATE_ADDR
+
GATE_EHDR
->e_phoff);
19
int
i
;
20
Elf64_Off
ofs = 0;
21
22
for
(i = 0; i <
GATE_EHDR
->e_phnum; ++
i
) {
23
struct
elf_phdr
phdr = gate_phdrs[
i
];
24
25
if
(phdr.p_type ==
PT_LOAD
) {
26
phdr.p_memsz =
PAGE_ALIGN
(phdr.p_memsz);
27
phdr.p_filesz = phdr.p_memsz;
28
if
(ofs == 0) {
29
ofs = phdr.p_offset =
offset
;
30
offset += phdr.p_filesz;
31
}
else
{
32
phdr.p_offset = ofs;
33
}
34
}
else
{
35
phdr.p_offset += ofs;
36
}
37
phdr.p_paddr = 0;
/* match other core phdrs */
38
*size +=
sizeof
(phdr);
39
if
(*size > limit || !
dump_write
(file, &phdr,
sizeof
(phdr)))
40
return
0;
41
}
42
return
1;
43
}
44
45
int
elf_core_write_extra_data
(
struct
file
*
file
,
size_t
*
size
,
46
unsigned
long
limit
)
47
{
48
const
struct
elf_phdr
*
const
gate_phdrs =
49
(
const
struct
elf_phdr
*) (
GATE_ADDR
+
GATE_EHDR
->e_phoff);
50
int
i
;
51
52
for
(i = 0; i <
GATE_EHDR
->e_phnum; ++
i
) {
53
if
(gate_phdrs[i].p_type ==
PT_LOAD
) {
54
void
*
addr
= (
void
*)gate_phdrs[i].p_vaddr;
55
size_t
memsz =
PAGE_ALIGN
(gate_phdrs[i].p_memsz);
56
57
*size += memsz;
58
if
(*size > limit || !
dump_write
(file, addr, memsz))
59
return
0;
60
break
;
61
}
62
}
63
return
1;
64
}
65
66
size_t
elf_core_extra_data_size
(
void
)
67
{
68
const
struct
elf_phdr
*
const
gate_phdrs =
69
(
const
struct
elf_phdr
*) (
GATE_ADDR
+
GATE_EHDR
->e_phoff);
70
int
i
;
71
size_t
size
= 0;
72
73
for
(i = 0; i <
GATE_EHDR
->e_phnum; ++
i
) {
74
if
(gate_phdrs[i].p_type ==
PT_LOAD
) {
75
size +=
PAGE_ALIGN
(gate_phdrs[i].p_memsz);
76
break
;
77
}
78
}
79
return
size
;
80
}
Generated on Thu Jan 10 2013 13:06:36 for Linux Kernel by
1.8.2