n-i-bz Fix compilation on distros with glibc < 2.5
n-i-bz (vex 3098) Avoid generation of Neon insns on non-Neon hosts
n-i-bz Enable rt_sigpending syscall on ppc64 linux.
+n-i-bz mremap did not work properly on shared memory
Release 3.10.1 (25 November 2014)
old_seg = VG_(am_find_nsegment)( old_addr );
if (old_addr < old_seg->start || old_addr+old_len-1 > old_seg->end)
goto eINVAL;
- if (old_seg->kind != SkAnonC && old_seg->kind != SkFileC)
+ if (old_seg->kind != SkAnonC && old_seg->kind != SkFileC &&
+ old_seg->kind != SkShmC)
goto eINVAL;
vg_assert(old_len > 0);
mremap.vgtest \
mremap2.stderr.exp mremap2.stdout.exp mremap2.vgtest \
mremap3.stderr.exp mremap3.stdout.exp mremap3.vgtest \
+ mremap4.stderr.exp mremap4.vgtest \
pthread-stack.stderr.exp pthread-stack.vgtest \
stack-overflow.stderr.exp stack-overflow.vgtest
mremap \
mremap2 \
mremap3 \
+ mremap4 \
pthread-stack \
stack-overflow
--- /dev/null
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+#include <sys/stat.h>
+
+
+extern void *mremap(void *, size_t, size_t, int, ...);
+
+int main()
+{
+ int shmid = shmget(IPC_PRIVATE, 100 * 4096,
+ IPC_CREAT | IPC_EXCL | S_IRUSR | S_IWUSR);
+ assert(shmid != -1);
+
+ void *addr = shmat(shmid, NULL, 0);
+ assert(addr != (void *)-1);
+
+ addr = mremap(addr, 100 * 4096, 40 * 4096, 0);
+ assert(addr != (void *)-1);
+
+ return 0;
+}
--- /dev/null
+prog: mremap4
+vgopts: -q