Revision cb59670870d90ff8bc31f5f2efc407c6fe4938c0 authored by Linus Torvalds on 16 January 2015, 01:58:16 UTC, committed by Linus Torvalds on 16 January 2015, 01:58:16 UTC
Pull fuse fixes from Miklos Szeredi: "This fixes a regression in the latest fuse update plus a fix for a rather theoretical memory ordering issue" * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse: fuse: add memory barrier to INIT fuse: fix LOOKUP vs INIT compat handling
miscthings.c
#include <linux/threads.h>
#include <linux/stddef.h> // for NULL
#include <linux/elf.h> // for AT_NULL
/* The following function nicked from arch/ppc/kernel/process.c and
* adapted slightly */
/*
* XXX ld.so expects the auxiliary table to start on
* a 16-byte boundary, so we have to find it and
* move it up. :-(
*/
void shove_aux_table(unsigned long sp)
{
int argc;
char *p;
unsigned long e;
unsigned long aux_start, offset;
argc = *(int *)sp;
sp += sizeof(int) + (argc + 1) * sizeof(char *);
/* skip over the environment pointers */
do {
p = *(char **)sp;
sp += sizeof(char *);
} while (p != NULL);
aux_start = sp;
/* skip to the end of the auxiliary table */
do {
e = *(unsigned long *)sp;
sp += 2 * sizeof(unsigned long);
} while (e != AT_NULL);
offset = ((aux_start + 15) & ~15) - aux_start;
if (offset != 0) {
do {
sp -= sizeof(unsigned long);
e = *(unsigned long *)sp;
*(unsigned long *)(sp + offset) = e;
} while (sp > aux_start);
}
}
/* END stuff taken from arch/ppc/kernel/process.c */
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...