4343#include <sys/time.h>
4444#include <sys/syscall.h>
4545
46+ #if defined(HAVE_LINUX_MMAN_H )
47+ #include <linux/mman.h>
48+ #endif
49+
4650#include "memory_patcher.h"
4751#undef opal_memory_changed
4852
@@ -162,11 +166,20 @@ static int intercept_munmap(void *start, size_t length)
162166
163167#if defined (SYS_mremap )
164168
169+ #if defined(__linux__ )
165170/* on linux this function has an optional extra argument but ... can not be used here because it
166171 * causes issues when intercepting a 4-argument mremap call */
167172static void * (* original_mremap ) (void * , size_t , size_t , int , void * );
173+ #else
174+ /* mremap has a different signature on BSD systems */
175+ static void * (* original_mremap ) (void * , size_t , void * , size_t , int );
176+ #endif
168177
178+ #if defined(__linux__ )
169179static void * intercept_mremap (void * start , size_t oldlen , size_t newlen , int flags , void * new_address )
180+ #else
181+ static void * intercept_mremap (void * start , size_t oldlen , void * new_address , size_t newlen , int flags )
182+ #endif
170183{
171184 OPAL_PATCHER_BEGIN ;
172185 void * result = MAP_FAILED ;
@@ -175,15 +188,25 @@ static void *intercept_mremap (void *start, size_t oldlen, size_t newlen, int fl
175188 opal_mem_hooks_release_hook (start , oldlen , true);
176189 }
177190
191+ #if defined(MREMAP_FIXED )
178192 if (!(flags & MREMAP_FIXED )) {
179193 new_address = NULL ;
180194 }
195+ #endif
181196
197+ #if defined(__linux__ )
182198 if (!original_mremap ) {
183199 result = (void * )(intptr_t ) memory_patcher_syscall (SYS_mremap , start , oldlen , newlen , flags , new_address );
184200 } else {
185201 result = original_mremap (start , oldlen , newlen , flags , new_address );
186202 }
203+ #else
204+ if (!original_mremap ) {
205+ result = (void * )(intptr_t ) memory_patcher_syscall (SYS_mremap , start , oldlen , new_address , newlen , flags );
206+ } else {
207+ result = original_mremap (start , oldlen , new_address , newlen , flags );
208+ }
209+ #endif
187210
188211 OPAL_PATCHER_END ;
189212 return result ;
0 commit comments