new helper: dump_align()
dump_skip to given alignment... Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
7b1f4020d0
commit
22a8cb8248
|
@ -156,7 +156,7 @@ static int spufs_arch_write_note(struct spu_context *ctx, int i,
|
|||
if (!dump_emit(cprm, fullname, en.n_namesz))
|
||||
goto Eio;
|
||||
|
||||
if (!dump_skip(cprm, roundup(cprm->written, 4) - cprm->written))
|
||||
if (!dump_align(cprm, 4))
|
||||
goto Eio;
|
||||
|
||||
do {
|
||||
|
|
|
@ -1225,12 +1225,6 @@ static int notesize(struct memelfnote *en)
|
|||
return sz;
|
||||
}
|
||||
|
||||
static int alignfile(struct coredump_params *cprm)
|
||||
{
|
||||
static const char buf[4] = { 0, };
|
||||
return dump_emit(cprm, buf, roundup(cprm->written, 4) - cprm->written);
|
||||
}
|
||||
|
||||
static int writenote(struct memelfnote *men, struct coredump_params *cprm)
|
||||
{
|
||||
struct elf_note en;
|
||||
|
@ -1239,8 +1233,8 @@ static int writenote(struct memelfnote *men, struct coredump_params *cprm)
|
|||
en.n_type = men->type;
|
||||
|
||||
return dump_emit(cprm, &en, sizeof(en)) &&
|
||||
dump_emit(cprm, men->name, en.n_namesz) && alignfile(cprm) &&
|
||||
dump_emit(cprm, men->data, men->datasz) && alignfile(cprm);
|
||||
dump_emit(cprm, men->name, en.n_namesz) && dump_align(cprm, 4) &&
|
||||
dump_emit(cprm, men->data, men->datasz) && dump_align(cprm, 4);
|
||||
}
|
||||
|
||||
static void fill_elf_header(struct elfhdr *elf, int segs,
|
||||
|
|
|
@ -1267,12 +1267,6 @@ static int notesize(struct memelfnote *en)
|
|||
|
||||
/* #define DEBUG */
|
||||
|
||||
static int alignfile(struct coredump_params *cprm)
|
||||
{
|
||||
static const char buf[4] = { 0, };
|
||||
return dump_emit(cprm, buf, roundup(cprm->written, 4) - cprm->written);
|
||||
}
|
||||
|
||||
static int writenote(struct memelfnote *men, struct coredump_params *cprm)
|
||||
{
|
||||
struct elf_note en;
|
||||
|
@ -1281,8 +1275,8 @@ static int writenote(struct memelfnote *men, struct coredump_params *cprm)
|
|||
en.n_type = men->type;
|
||||
|
||||
return dump_emit(cprm, &en, sizeof(en)) &&
|
||||
dump_emit(cprm, men->name, en.n_namesz) && alignfile(cprm) &&
|
||||
dump_emit(cprm, men->data, men->datasz) && alignfile(cprm);
|
||||
dump_emit(cprm, men->name, en.n_namesz) && dump_align(cprm, 4) &&
|
||||
dump_emit(cprm, men->data, men->datasz) && dump_align(cprm, 4);
|
||||
}
|
||||
|
||||
static inline void fill_elf_fdpic_header(struct elfhdr *elf, int segs)
|
||||
|
|
|
@ -728,3 +728,12 @@ int dump_skip(struct coredump_params *cprm, size_t nr)
|
|||
}
|
||||
}
|
||||
EXPORT_SYMBOL(dump_skip);
|
||||
|
||||
int dump_align(struct coredump_params *cprm, int align)
|
||||
{
|
||||
unsigned mod = cprm->written & (align - 1);
|
||||
if (align & (align - 1))
|
||||
return -EINVAL;
|
||||
return mod ? dump_skip(cprm, align - mod) : 0;
|
||||
}
|
||||
EXPORT_SYMBOL(dump_align);
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
struct coredump_params;
|
||||
extern int dump_skip(struct coredump_params *cprm, size_t nr);
|
||||
extern int dump_emit(struct coredump_params *cprm, const void *addr, int nr);
|
||||
extern int dump_align(struct coredump_params *cprm, int align);
|
||||
#ifdef CONFIG_COREDUMP
|
||||
extern void do_coredump(siginfo_t *siginfo);
|
||||
#else
|
||||
|
|
Loading…
Reference in New Issue