Skip to content
This repository was archived by the owner on Sep 30, 2022. It is now read-only.

Commit eedceaf

Browse files
authored
Merge pull request #1314 from ggouaillardet/topic/v2.x/memory_patcher_configury
configury: standardize memory/patcher symbol detection and make it mo…
2 parents 98aa769 + 0a6c8f4 commit eedceaf

File tree

2 files changed

+13
-53
lines changed

2 files changed

+13
-53
lines changed

opal/mca/memory/patcher/configure.m4

Lines changed: 6 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -36,57 +36,17 @@ AC_DEFUN([MCA_opal_memory_patcher_COMPILE_MODE], [
3636
AC_DEFUN([MCA_opal_memory_patcher_CONFIG],[
3737
AC_CONFIG_FILES([opal/mca/memory/patcher/Makefile])
3838

39-
OPAL_VAR_SCOPE_PUSH([memory_patcher_have___curbrk memory_patcher_have___mmap memory_patcher_have___syscall memory_patcher_have___mmap_prototype memory_patcher_have___syscall_prototype])
39+
AC_CHECK_FUNCS([__curbrk])
4040

41-
memory_patcher_have___curbrk=0
42-
memory_patcher_have___mmap=0
43-
memory_patcher_have___mmap_prototype=0
44-
memory_patcher_have___syscall=0
45-
memory_patcher_have___syscall_prototype=0
46-
47-
AC_MSG_CHECKING([for __curbrk symbol])
48-
AC_LINK_IFELSE([AC_LANG_PROGRAM([extern char *__curbrk;],[char *tmp = __curbrk;])],
49-
[AC_MSG_RESULT([yes])
50-
memory_patcher_have___curbrk=1],
51-
[AC_MSG_RESULT([no])])
52-
AC_DEFINE_UNQUOTED([OPAL_MEMORY_PATCHER_HAVE___CURBRK], [$memory_patcher_have___curbrk],
53-
[Whether the glibc __curbrk exists])
41+
AC_CHECK_HEADERS([linux/mman.h sys/syscall.h])
5442

55-
AC_MSG_CHECKING([whether __mmap prototype exists])
56-
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <sys/mman.h>],[char *tmp = __mmap (NULL, 0, 0, 0, 0, 0);])],
57-
[AC_MSG_RESULT([yes])
58-
memory_patcher_have___mmap_prototype=1],
59-
[AC_MSG_RESULT([no])])
60-
AC_DEFINE_UNQUOTED([OPAL_MEMORY_PATCHER_HAVE___MMAP_PROTO], [$memory_patcher_have___mmap_prototype],
61-
[Whether the internal __mmap call has a prototype])
43+
AC_CHECK_DECLS([__mmap], [], [], [#include <sys/mman.h>])
6244

63-
AC_MSG_CHECKING([whether __mmap symbol exists])
64-
AC_LINK_IFELSE([AC_LANG_PROGRAM([void *__mmap ();],[char *tmp = __mmap ();])],
65-
[AC_MSG_RESULT([yes])
66-
memory_patcher_have___mmap=1],
67-
[AC_MSG_RESULT([no])])
68-
AC_DEFINE_UNQUOTED([OPAL_MEMORY_PATCHER_HAVE___MMAP], [$memory_patcher_have___mmap],
69-
[Whether the internal __mmap call exists])
45+
AC_CHECK_FUNCS([__mmap])
7046

71-
AC_MSG_CHECKING([whether __syscall prototype exists])
72-
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <sys/syscall.h>],[char *tmp = __syscall (SYS_mmap, NULL);])],
73-
[AC_MSG_RESULT([yes])
74-
memory_patcher_have___syscall_prototype=1],
75-
[AC_MSG_RESULT([no])])
76-
AC_DEFINE_UNQUOTED([OPAL_MEMORY_PATCHER_HAVE___SYSCALL_PROTO], [$memory_patcher_have___syscall_prototype],
77-
[Whether the internal __syscall call has a prototype])
47+
AC_CHECK_DECLS([__syscall], [], [], [#include <sys/syscall.h>])
7848

79-
AC_MSG_CHECKING([whether __syscall symbol exists])
80-
AC_LINK_IFELSE([AC_LANG_PROGRAM([void *__syscall ();],[char *tmp = __syscall ();])],
81-
[AC_MSG_RESULT([yes])
82-
memory_patcher_have___syscall=1],
83-
[AC_MSG_RESULT([no])])
84-
AC_DEFINE_UNQUOTED([OPAL_MEMORY_PATCHER_HAVE___SYSCALL], [$memory_patcher_have___syscall],
85-
[Whether the internal __syscall call exists])
86-
87-
AC_CHECK_HEADERS([linux/mman.h sys/syscall.h])
49+
AC_CHECK_FUNCS([__syscall])
8850

8951
[$1]
90-
91-
OPAL_VAR_SCOPE_POP
9252
])

opal/mca/memory/patcher/memory_patcher_component.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ opal_memory_patcher_component_t mca_memory_patcher_component = {
9090
it out) */
9191
};
9292

93-
#if OPAL_MEMORY_PATCHER_HAVE___SYSCALL_PROTO && OPAL_MEMORY_PATCHER_HAVE___SYSCALL
93+
#if HAVE_DECL___SYSCALL && defined(HAVE___SYSCALL)
9494
/* calling __syscall is preferred on some systems when some arguments may be 64-bit. it also
9595
* has the benefit of having an off_t return type */
9696
#define memory_patcher_syscall __syscall
@@ -108,7 +108,7 @@ opal_memory_patcher_component_t mca_memory_patcher_component = {
108108
*/
109109
#if 0
110110

111-
#if OPAL_MEMORY_PATCHER_HAVE___MMAP && !OPAL_MEMORY_PATCHER_HAVE___MMAP_PROTO
111+
#if defined(HAVE___MMAP) && !HAVE_DECL___MMAP
112112
/* prototype for Apple's internal mmap function */
113113
void *__mmap (void *start, size_t length, int prot, int flags, int fd, off_t offset);
114114
#endif
@@ -125,7 +125,7 @@ static void *intercept_mmap(void *start, size_t length, int prot, int flags, int
125125
}
126126

127127
if (!original_mmap) {
128-
#if OPAL_MEMORY_PATCHER_HAVE___MMAP
128+
#ifdef HAVE___MMAP
129129
/* the darwin syscall returns an int not a long so call the underlying __mmap function */
130130
result = __mmap (start, length, prot, flags, fd, offset);
131131
#else
@@ -248,7 +248,7 @@ static int intercept_madvise (void *start, size_t length, int advice)
248248

249249
#if defined SYS_brk
250250

251-
#if OPAL_MEMORY_PATCHER_HAVE___CURBRK
251+
#ifdef HAVE___CURBRK
252252
extern void *__curbrk; /* in libc */
253253
#endif
254254

@@ -260,7 +260,7 @@ static int intercept_brk (void *addr)
260260
int result = 0;
261261
void *old_addr, *new_addr;
262262

263-
#if OPAL_MEMORY_PATCHER_HAVE___CURBRK
263+
#ifdef HAVE___CURBRK
264264
old_addr = __curbrk;
265265
#else
266266
old_addr = sbrk (0);
@@ -270,7 +270,7 @@ static int intercept_brk (void *addr)
270270
/* get the current_addr */
271271
new_addr = (void *) (intptr_t) memory_patcher_syscall(SYS_brk, addr);
272272

273-
#if OPAL_MEMORY_PATCHER_HAVE___CURBRK
273+
#ifdef HAVE___CURBRK
274274
/*
275275
* Note: if we were using glibc brk/sbrk, their __curbrk would get
276276
* updated, but since we're going straight to the syscall, we have
@@ -280,7 +280,7 @@ static int intercept_brk (void *addr)
280280
#endif
281281
} else {
282282
result = original_brk (addr);
283-
#if OPAL_MEMORY_PATCHER_HAVE___CURBRK
283+
#ifdef HAVE___CURBRK
284284
new_addr = __curbrk;
285285
#else
286286
new_addr = sbrk (0);

0 commit comments

Comments
 (0)