diff options
author | Andy Lutomirski <luto@amacapital.net> | 2014-05-19 18:58:33 -0400 |
---|---|---|
committer | H. Peter Anvin <hpa@linux.intel.com> | 2014-05-20 14:38:42 -0400 |
commit | a62c34bd2a8a3f159945becd57401e478818d51c (patch) | |
tree | 8721aca251b468606e52376fc811dd0c8beeaeb8 /arch/x86/vdso/vdso2c.h | |
parent | 78d683e838a60ec4ba4591cca4364cba84a9e626 (diff) |
x86, mm: Improve _install_special_mapping and fix x86 vdso naming
Using arch_vma_name to give special mappings a name is awkward. x86
currently implements it by comparing the start address of the vma to
the expected address of the vdso. This requires tracking the start
address of special mappings and is probably buggy if a special vma
is split or moved.
Improve _install_special_mapping to just name the vma directly. Use
it to give the x86 vvar area a name, which should make CRIU's life
easier.
As a side effect, the vvar area will show up in core dumps. This
could be considered weird and is fixable.
[hpa: I say we accept this as-is but be prepared to deal with knocking
out the vvars from core dumps if this becomes a problem.]
Cc: Cyrill Gorcunov <gorcunov@openvz.org>
Cc: Pavel Emelyanov <xemul@parallels.com>
Signed-off-by: Andy Lutomirski <luto@amacapital.net>
Link: http://lkml.kernel.org/r/276b39b6b645fb11e345457b503f17b83c2c6fd0.1400538962.git.luto@amacapital.net
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Diffstat (limited to 'arch/x86/vdso/vdso2c.h')
-rw-r--r-- | arch/x86/vdso/vdso2c.h | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/arch/x86/vdso/vdso2c.h b/arch/x86/vdso/vdso2c.h index ed2e894e89ab..3dcc61e796e9 100644 --- a/arch/x86/vdso/vdso2c.h +++ b/arch/x86/vdso/vdso2c.h | |||
@@ -136,7 +136,10 @@ static int GOFUNC(void *addr, size_t len, FILE *outfile, const char *name) | |||
136 | fprintf(outfile, "const struct vdso_image %s = {\n", name); | 136 | fprintf(outfile, "const struct vdso_image %s = {\n", name); |
137 | fprintf(outfile, "\t.data = raw_data,\n"); | 137 | fprintf(outfile, "\t.data = raw_data,\n"); |
138 | fprintf(outfile, "\t.size = %lu,\n", data_size); | 138 | fprintf(outfile, "\t.size = %lu,\n", data_size); |
139 | fprintf(outfile, "\t.pages = pages,\n"); | 139 | fprintf(outfile, "\t.text_mapping = {\n"); |
140 | fprintf(outfile, "\t\t.name = \"[vdso]\",\n"); | ||
141 | fprintf(outfile, "\t\t.pages = pages,\n"); | ||
142 | fprintf(outfile, "\t},\n"); | ||
140 | if (alt_sec) { | 143 | if (alt_sec) { |
141 | fprintf(outfile, "\t.alt = %lu,\n", | 144 | fprintf(outfile, "\t.alt = %lu,\n", |
142 | (unsigned long)alt_sec->sh_offset); | 145 | (unsigned long)alt_sec->sh_offset); |