lede-packages-rs

git clone git://archive.git.mtrnord.blog/MTRNord/lede-packages-rs.git
Log | Files | Refs | README | LICENSE

1001-ext-opcache-fix-detection-of-shm-mmap.patch (3683B)


      1 From dc8bb6a53bfdfe42d9ae81d4e78c6155ad4bfd6e Mon Sep 17 00:00:00 2001
      2 From: Michael Heimpold <mhei@heimpold.de>
      3 Date: Sun, 17 May 2015 16:50:50 +0200
      4 Subject: [PATCH] ext/opcache: fix detection of shm/mmap
      5 
      6 The detection of sysvipc and mmap doesn't work well when cross-compiling,
      7 so I decided to only check for the availability of the functions involved.
      8 This is not a clean solution, but works for now(tm) :-)
      9 
     10 It should be discussed with upstream to find a better solution.
     11 
     12 This solves the issue reported at
     13 https://github.com/openwrt/packages/issues/1010
     14 and makes opcache usable on OpenWrt.
     15 
     16 Signed-off-by: Michael Heimpold <mhei@heimpold.de>
     17 ---
     18  ext/opcache/config.m4 |  122 ++-----------------------------------------------
     19  1 file changed, 4 insertions(+), 118 deletions(-)
     20 
     21 diff --git a/ext/opcache/config.m4 b/ext/opcache/config.m4
     22 index b7e4835..7b6c0aa 100644
     23 --- a/ext/opcache/config.m4
     24 +++ b/ext/opcache/config.m4
     25 @@ -11,127 +11,13 @@ if test "$PHP_OPCACHE" != "no"; then
     26      AC_DEFINE(HAVE_MPROTECT, 1, [Define if you have mprotect() function])
     27    ])
     28  
     29 -  AC_MSG_CHECKING(for sysvipc shared memory support)
     30 -  AC_TRY_RUN([
     31 -#include <sys/types.h>
     32 -#include <sys/wait.h>
     33 -#include <sys/ipc.h>
     34 -#include <sys/shm.h>
     35 -#include <unistd.h>
     36 -#include <string.h>
     37 -
     38 -int main() {
     39 -  pid_t pid;
     40 -  int status;
     41 -  int ipc_id;
     42 -  char *shm;
     43 -  struct shmid_ds shmbuf;
     44 -
     45 -  ipc_id = shmget(IPC_PRIVATE, 4096, (IPC_CREAT | SHM_R | SHM_W));
     46 -  if (ipc_id == -1) {
     47 -    return 1;
     48 -  }
     49 -
     50 -  shm = shmat(ipc_id, NULL, 0);
     51 -  if (shm == (void *)-1) {
     52 -    shmctl(ipc_id, IPC_RMID, NULL);
     53 -    return 2;
     54 -  }
     55 -
     56 -  if (shmctl(ipc_id, IPC_STAT, &shmbuf) != 0) {
     57 -    shmdt(shm);
     58 -    shmctl(ipc_id, IPC_RMID, NULL);
     59 -    return 3;
     60 -  }
     61 -
     62 -  shmbuf.shm_perm.uid = getuid();
     63 -  shmbuf.shm_perm.gid = getgid();
     64 -  shmbuf.shm_perm.mode = 0600;
     65 -
     66 -  if (shmctl(ipc_id, IPC_SET, &shmbuf) != 0) {
     67 -    shmdt(shm);
     68 -    shmctl(ipc_id, IPC_RMID, NULL);
     69 -    return 4;
     70 -  }
     71 -
     72 -  shmctl(ipc_id, IPC_RMID, NULL);
     73 -
     74 -  strcpy(shm, "hello");
     75 -
     76 -  pid = fork();
     77 -  if (pid < 0) {
     78 -    return 5;
     79 -  } else if (pid == 0) {
     80 -    strcpy(shm, "bye");
     81 -    return 6;
     82 -  }
     83 -  if (wait(&status) != pid) {
     84 -    return 7;
     85 -  }
     86 -  if (!WIFEXITED(status) || WEXITSTATUS(status) != 6) {
     87 -    return 8;
     88 -  }
     89 -  if (strcmp(shm, "bye") != 0) {
     90 -    return 9;
     91 -  }
     92 -  return 0;
     93 -}
     94 -],dnl
     95 +  AC_CHECK_FUNC(shmget,[
     96      AC_DEFINE(HAVE_SHM_IPC, 1, [Define if you have SysV IPC SHM support])
     97 -    msg=yes,msg=no,msg=no)
     98 -  AC_MSG_RESULT([$msg])
     99 -
    100 -  AC_MSG_CHECKING(for mmap() using MAP_ANON shared memory support)
    101 -  AC_TRY_RUN([
    102 -#include <sys/types.h>
    103 -#include <sys/wait.h>
    104 -#include <sys/mman.h>
    105 -#include <unistd.h>
    106 -#include <string.h>
    107 -
    108 -#ifndef MAP_ANON
    109 -# ifdef MAP_ANONYMOUS
    110 -#  define MAP_ANON MAP_ANONYMOUS
    111 -# endif
    112 -#endif
    113 -#ifndef MAP_FAILED
    114 -# define MAP_FAILED ((void*)-1)
    115 -#endif
    116 -
    117 -int main() {
    118 -  pid_t pid;
    119 -  int status;
    120 -  char *shm;
    121 -
    122 -  shm = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0);
    123 -  if (shm == MAP_FAILED) {
    124 -    return 1;
    125 -  }
    126 -
    127 -  strcpy(shm, "hello");
    128 +  ])
    129  
    130 -  pid = fork();
    131 -  if (pid < 0) {
    132 -    return 5;
    133 -  } else if (pid == 0) {
    134 -    strcpy(shm, "bye");
    135 -    return 6;
    136 -  }
    137 -  if (wait(&status) != pid) {
    138 -    return 7;
    139 -  }
    140 -  if (!WIFEXITED(status) || WEXITSTATUS(status) != 6) {
    141 -    return 8;
    142 -  }
    143 -  if (strcmp(shm, "bye") != 0) {
    144 -    return 9;
    145 -  }
    146 -  return 0;
    147 -}
    148 -],dnl
    149 +  AC_CHECK_FUNC(mmap,[
    150      AC_DEFINE(HAVE_SHM_MMAP_ANON, 1, [Define if you have mmap(MAP_ANON) SHM support])
    151 -    msg=yes,msg=no,msg=no)
    152 -  AC_MSG_RESULT([$msg])
    153 +  ])
    154  
    155    AC_MSG_CHECKING(for mmap() using /dev/zero shared memory support)
    156    AC_TRY_RUN([
    157 -- 
    158 1.7.10.4
    159