aboutsummaryrefslogtreecommitdiffstats
path: root/exec/configure.ac
diff options
context:
space:
mode:
authorPo Lu2023-05-02 20:45:57 +0800
committerPo Lu2023-05-02 20:45:57 +0800
commitc47716f95b8fda9438047d2683a415a65c18ecbd (patch)
tree947c45293556f41ce02426889890b3442f2b7b36 /exec/configure.ac
parentf4512cca0b996e5343ebe57511f45a29f64c4a8e (diff)
downloademacs-c47716f95b8fda9438047d2683a415a65c18ecbd.tar.gz
emacs-c47716f95b8fda9438047d2683a415a65c18ecbd.zip
Update Android port
* exec/config.h.in (__bool_true_false_are_defined): * exec/configure.ac (REENTRANT): New definition. (READLINKAT_SYSCALL, READLINK_SYSCALL): New defines. Set on all hosts. * exec/exec.c (MIN, MAX): Remove redundant declarations. Move to config.h. (exec_0): Copy name of executable into NAME when !REENTRANT. * exec/exec.h (struct exec_tracee): New struct `exec_file'. * exec/trace.c (remove_tracee, handle_exec, handle_readlinkat) (process_system_call, after_fork): Handle readlinkat system calls.
Diffstat (limited to 'exec/configure.ac')
-rw-r--r--exec/configure.ac51
1 files changed, 51 insertions, 0 deletions
diff --git a/exec/configure.ac b/exec/configure.ac
index f3eef60173c..b948e184896 100644
--- a/exec/configure.ac
+++ b/exec/configure.ac
@@ -42,6 +42,11 @@ General Public License for more details.
42You should have received a copy of the GNU General Public License 42You should have received a copy of the GNU General Public License
43along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */]) 43along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */])
44 44
45AC_ARG_WITH([reentrancy],
46 [AS_HELP_STRING([--with-reentrancy],
47 [Generate library which can be used within a signal handler.])],
48 [AC_DEFINE([REENTRANT], [1])])
49
45AC_PROG_CC 50AC_PROG_CC
46AC_PROG_CPP 51AC_PROG_CPP
47AC_PROG_INSTALL 52AC_PROG_INSTALL
@@ -56,6 +61,7 @@ AC_TYPE_PID_T
56AC_HEADER_STDBOOL 61AC_HEADER_STDBOOL
57AC_CHECK_FUNCS([getpagesize stpcpy stpncpy]) 62AC_CHECK_FUNCS([getpagesize stpcpy stpncpy])
58AC_CHECK_DECLS([stpcpy, stpncpy]) 63AC_CHECK_DECLS([stpcpy, stpncpy])
64AC_CHECK_HEADERS([sys/param.h]) dnl for MIN and MAX
59 65
60AH_BOTTOM([ 66AH_BOTTOM([
61#ifdef HAVE_STDBOOL_H 67#ifdef HAVE_STDBOOL_H
@@ -73,6 +79,18 @@ typedef bool _Bool;
73# define true 1 79# define true 1
74# define __bool_true_false_are_defined 1 80# define __bool_true_false_are_defined 1
75#endif 81#endif
82
83#ifdef HAVE_SYS_PARAM_H
84#include <sys/param.h>
85#endif /* HAVE_SYS_PARAM_H */
86
87#ifndef MAX
88#define MAX(a, b) ((a) > (b) ? (a) : (b))
89#endif /* MAX */
90
91#ifndef MIN
92#define MIN(a, b) ((a) < (b) ? (a) : (b))
93#endif /* MIN */
76]) 94])
77 95
78AC_C_BIGENDIAN 96AC_C_BIGENDIAN
@@ -83,6 +101,8 @@ AH_TEMPLATE([USER_REGS_STRUCT], [Define to structure holding user registers.])
83AH_TEMPLATE([SYSCALL_NUM_REG], [Define to register holding the system call number.]) 101AH_TEMPLATE([SYSCALL_NUM_REG], [Define to register holding the system call number.])
84AH_TEMPLATE([SYSCALL_ARG_REG], [Define to register holding arg0 to system calls.]) 102AH_TEMPLATE([SYSCALL_ARG_REG], [Define to register holding arg0 to system calls.])
85AH_TEMPLATE([SYSCALL_ARG1_REG], [Define to register holding arg1 to system calls.]) 103AH_TEMPLATE([SYSCALL_ARG1_REG], [Define to register holding arg1 to system calls.])
104AH_TEMPLATE([SYSCALL_ARG2_REG], [Define to register holding arg2 to system calls.])
105AH_TEMPLATE([SYSCALL_ARG3_REG], [Define to register holding arg3 to system calls.])
86AH_TEMPLATE([SYSCALL_RET_REG], [Define to register holding value of system calls.]) 106AH_TEMPLATE([SYSCALL_RET_REG], [Define to register holding value of system calls.])
87AH_TEMPLATE([STACK_POINTER], [Define to register holding the stack pointer.]) 107AH_TEMPLATE([STACK_POINTER], [Define to register holding the stack pointer.])
88AH_TEMPLATE([EXEC_SYSCALL], [Define to number of the `exec' system call.]) 108AH_TEMPLATE([EXEC_SYSCALL], [Define to number of the `exec' system call.])
@@ -94,6 +114,9 @@ AH_TEMPLATE([EXECUTABLE_BASE], [Virtual address for loading PIC executables])
94AH_TEMPLATE([INTERPRETER_BASE], [Virtual address for loading PIC interpreters]) 114AH_TEMPLATE([INTERPRETER_BASE], [Virtual address for loading PIC interpreters])
95AH_TEMPLATE([CLONE_SYSCALL], [Define to number of the `clone' system call.]) 115AH_TEMPLATE([CLONE_SYSCALL], [Define to number of the `clone' system call.])
96AH_TEMPLATE([CLONE3_SYSCALL], [Define to number of the `clone3' system call.]) 116AH_TEMPLATE([CLONE3_SYSCALL], [Define to number of the `clone3' system call.])
117AH_TEMPLATE([READLINK_SYSCALL], [Define to number of the `readlink' system call.])
118AH_TEMPLATE([READLINKAT_SYSCALL], [Define to number of the `readlinkat' system call.])
119AH_TEMPLATE([REENTRANT], [Define to 1 if the library is used within a signal handler.])
97 120
98AC_CANONICAL_HOST 121AC_CANONICAL_HOST
99 122
@@ -206,6 +229,8 @@ AS_CASE([$host], [x86_64-*linux*],
206 AC_DEFINE([SYSCALL_RET_REG], [rax]) 229 AC_DEFINE([SYSCALL_RET_REG], [rax])
207 AC_DEFINE([SYSCALL_ARG_REG], [rdi]) 230 AC_DEFINE([SYSCALL_ARG_REG], [rdi])
208 AC_DEFINE([SYSCALL_ARG1_REG], [rsi]) 231 AC_DEFINE([SYSCALL_ARG1_REG], [rsi])
232 AC_DEFINE([SYSCALL_ARG2_REG], [rdx])
233 AC_DEFINE([SYSCALL_ARG3_REG], [r10])
209 AC_DEFINE([STACK_POINTER], [rsp]) 234 AC_DEFINE([STACK_POINTER], [rsp])
210 AC_DEFINE([EXEC_SYSCALL], [__NR_execve]) 235 AC_DEFINE([EXEC_SYSCALL], [__NR_execve])
211 AC_DEFINE([USER_WORD], [uintptr_t]) 236 AC_DEFINE([USER_WORD], [uintptr_t])
@@ -215,6 +240,8 @@ AS_CASE([$host], [x86_64-*linux*],
215 AC_DEFINE([INTERPRETER_BASE], [0x600000000000]) 240 AC_DEFINE([INTERPRETER_BASE], [0x600000000000])
216 AC_DEFINE([STACK_GROWS_DOWNWARDS], [1]) 241 AC_DEFINE([STACK_GROWS_DOWNWARDS], [1])
217 AC_DEFINE([CLONE_SYSCALL], [__NR_clone]) 242 AC_DEFINE([CLONE_SYSCALL], [__NR_clone])
243 AC_DEFINE([READLINK_SYSCALL], [__NR_readlink])
244 AC_DEFINE([READLINKAT_SYSCALL], [__NR_readlinkat])
218 exec_CHECK_LINUX_CLONE3 245 exec_CHECK_LINUX_CLONE3
219 # Make sure the loader doesn't conflict with other position 246 # Make sure the loader doesn't conflict with other position
220 # dependent code. 247 # dependent code.
@@ -232,6 +259,8 @@ AS_CASE([$host], [x86_64-*linux*],
232 AC_DEFINE([SYSCALL_RET_REG], [eax]) 259 AC_DEFINE([SYSCALL_RET_REG], [eax])
233 AC_DEFINE([SYSCALL_ARG_REG], [ebx]) 260 AC_DEFINE([SYSCALL_ARG_REG], [ebx])
234 AC_DEFINE([SYSCALL_ARG1_REG], [ecx]) 261 AC_DEFINE([SYSCALL_ARG1_REG], [ecx])
262 AC_DEFINE([SYSCALL_ARG2_REG], [edx])
263 AC_DEFINE([SYSCALL_ARG3_REG], [esi])
235 AC_DEFINE([STACK_POINTER], [esp]) 264 AC_DEFINE([STACK_POINTER], [esp])
236 AC_DEFINE([EXEC_SYSCALL], [__NR_execve]) 265 AC_DEFINE([EXEC_SYSCALL], [__NR_execve])
237 AC_DEFINE([USER_WORD], [uintptr_t]) 266 AC_DEFINE([USER_WORD], [uintptr_t])
@@ -239,6 +268,8 @@ AS_CASE([$host], [x86_64-*linux*],
239 AC_DEFINE([INTERPRETER_BASE], [0xaf000000]) 268 AC_DEFINE([INTERPRETER_BASE], [0xaf000000])
240 AC_DEFINE([STACK_GROWS_DOWNWARDS], [1]) 269 AC_DEFINE([STACK_GROWS_DOWNWARDS], [1])
241 AC_DEFINE([CLONE_SYSCALL], [__NR_clone]) 270 AC_DEFINE([CLONE_SYSCALL], [__NR_clone])
271 AC_DEFINE([READLINK_SYSCALL], [__NR_readlink])
272 AC_DEFINE([READLINKAT_SYSCALL], [__NR_readlinkat])
242 exec_CHECK_LINUX_CLONE3 273 exec_CHECK_LINUX_CLONE3
243 # Make sure the loader doesn't conflict with other position 274 # Make sure the loader doesn't conflict with other position
244 # dependent code. 275 # dependent code.
@@ -256,6 +287,8 @@ AS_CASE([$host], [x86_64-*linux*],
256 AC_DEFINE([SYSCALL_RET_REG], [[regs[0]]]) 287 AC_DEFINE([SYSCALL_RET_REG], [[regs[0]]])
257 AC_DEFINE([SYSCALL_ARG_REG], [[regs[0]]]) 288 AC_DEFINE([SYSCALL_ARG_REG], [[regs[0]]])
258 AC_DEFINE([SYSCALL_ARG1_REG], [[regs[1]]]) 289 AC_DEFINE([SYSCALL_ARG1_REG], [[regs[1]]])
290 AC_DEFINE([SYSCALL_ARG2_REG], [[regs[2]]])
291 AC_DEFINE([SYSCALL_ARG3_REG], [[regs[3]]])
259 AC_DEFINE([STACK_POINTER], [sp]) 292 AC_DEFINE([STACK_POINTER], [sp])
260 AC_DEFINE([EXEC_SYSCALL], [__NR_execve]) 293 AC_DEFINE([EXEC_SYSCALL], [__NR_execve])
261 AC_DEFINE([USER_WORD], [uintptr_t]) 294 AC_DEFINE([USER_WORD], [uintptr_t])
@@ -264,6 +297,8 @@ AS_CASE([$host], [x86_64-*linux*],
264 AC_DEFINE([INTERPRETER_BASE], [0x3f00000000]) 297 AC_DEFINE([INTERPRETER_BASE], [0x3f00000000])
265 AC_DEFINE([STACK_GROWS_DOWNWARDS], [1]) 298 AC_DEFINE([STACK_GROWS_DOWNWARDS], [1])
266 AC_DEFINE([CLONE_SYSCALL], [__NR_clone]) 299 AC_DEFINE([CLONE_SYSCALL], [__NR_clone])
300 # Note that aarch64 has no `readlink'.
301 AC_DEFINE([READLINKAT_SYSCALL], [__NR_readlinkat])
267 exec_CHECK_LINUX_CLONE3 302 exec_CHECK_LINUX_CLONE3
268 # Make sure the loader doesn't conflict with other position 303 # Make sure the loader doesn't conflict with other position
269 # dependent code. ARM places rather significant restrictions on 304 # dependent code. ARM places rather significant restrictions on
@@ -282,6 +317,8 @@ AS_CASE([$host], [x86_64-*linux*],
282 AC_DEFINE([SYSCALL_RET_REG], [[uregs[0]]]) 317 AC_DEFINE([SYSCALL_RET_REG], [[uregs[0]]])
283 AC_DEFINE([SYSCALL_ARG_REG], [[uregs[0]]]) 318 AC_DEFINE([SYSCALL_ARG_REG], [[uregs[0]]])
284 AC_DEFINE([SYSCALL_ARG1_REG], [[uregs[1]]]) 319 AC_DEFINE([SYSCALL_ARG1_REG], [[uregs[1]]])
320 AC_DEFINE([SYSCALL_ARG2_REG], [[uregs[2]]])
321 AC_DEFINE([SYSCALL_ARG3_REG], [[uregs[3]]])
285 AC_DEFINE([STACK_POINTER], [[uregs[13]]]) 322 AC_DEFINE([STACK_POINTER], [[uregs[13]]])
286 AC_DEFINE([EXEC_SYSCALL], [__NR_execve]) 323 AC_DEFINE([EXEC_SYSCALL], [__NR_execve])
287 AC_DEFINE([USER_WORD], [uintptr_t]) 324 AC_DEFINE([USER_WORD], [uintptr_t])
@@ -289,6 +326,8 @@ AS_CASE([$host], [x86_64-*linux*],
289 AC_DEFINE([INTERPRETER_BASE], [0x1f000000]) 326 AC_DEFINE([INTERPRETER_BASE], [0x1f000000])
290 AC_DEFINE([STACK_GROWS_DOWNWARDS], [1]) 327 AC_DEFINE([STACK_GROWS_DOWNWARDS], [1])
291 AC_DEFINE([CLONE_SYSCALL], [__NR_clone]) 328 AC_DEFINE([CLONE_SYSCALL], [__NR_clone])
329 AC_DEFINE([READLINK_SYSCALL], [__NR_readlink])
330 AC_DEFINE([READLINKAT_SYSCALL], [__NR_readlinkat])
292 exec_CHECK_LINUX_CLONE3 331 exec_CHECK_LINUX_CLONE3
293 LOADERFLAGS="$LOADERFLAGS $LDPREFIX-Ttext=0x20000000" 332 LOADERFLAGS="$LOADERFLAGS $LDPREFIX-Ttext=0x20000000"
294 exec_loader=loader-armeabi.s], 333 exec_loader=loader-armeabi.s],
@@ -300,6 +339,8 @@ AS_CASE([$host], [x86_64-*linux*],
300 AC_DEFINE([SYSCALL_RET_REG], [[uregs[0]]]) 339 AC_DEFINE([SYSCALL_RET_REG], [[uregs[0]]])
301 AC_DEFINE([SYSCALL_ARG_REG], [[uregs[0]]]) 340 AC_DEFINE([SYSCALL_ARG_REG], [[uregs[0]]])
302 AC_DEFINE([SYSCALL_ARG1_REG], [[uregs[1]]]) 341 AC_DEFINE([SYSCALL_ARG1_REG], [[uregs[1]]])
342 AC_DEFINE([SYSCALL_ARG2_REG], [[uregs[2]]])
343 AC_DEFINE([SYSCALL_ARG3_REG], [[uregs[3]]])
303 AC_DEFINE([STACK_POINTER], [[uregs[13]]]) 344 AC_DEFINE([STACK_POINTER], [[uregs[13]]])
304 AC_DEFINE([EXEC_SYSCALL], [__NR_execve]) 345 AC_DEFINE([EXEC_SYSCALL], [__NR_execve])
305 AC_DEFINE([USER_WORD], [uintptr_t]) 346 AC_DEFINE([USER_WORD], [uintptr_t])
@@ -307,6 +348,8 @@ AS_CASE([$host], [x86_64-*linux*],
307 AC_DEFINE([INTERPRETER_BASE], [0x1f000000]) 348 AC_DEFINE([INTERPRETER_BASE], [0x1f000000])
308 AC_DEFINE([STACK_GROWS_DOWNWARDS], [1]) 349 AC_DEFINE([STACK_GROWS_DOWNWARDS], [1])
309 AC_DEFINE([CLONE_SYSCALL], [__NR_clone]) 350 AC_DEFINE([CLONE_SYSCALL], [__NR_clone])
351 AC_DEFINE([READLINK_SYSCALL], [__NR_readlink])
352 AC_DEFINE([READLINKAT_SYSCALL], [__NR_readlinkat])
310 exec_CHECK_LINUX_CLONE3 353 exec_CHECK_LINUX_CLONE3
311 LOADERFLAGS="$LOADERFLAGS $LDPREFIX-Ttext=0x20000000" 354 LOADERFLAGS="$LOADERFLAGS $LDPREFIX-Ttext=0x20000000"
312 exec_loader=loader-armeabi.s], 355 exec_loader=loader-armeabi.s],
@@ -324,6 +367,8 @@ AS_CASE([$host], [x86_64-*linux*],
324 AC_DEFINE([SYSCALL_RET_REG], [[gregs[4]]]) # a0 367 AC_DEFINE([SYSCALL_RET_REG], [[gregs[4]]]) # a0
325 AC_DEFINE([SYSCALL_ARG_REG], [[gregs[4]]]) # a0 368 AC_DEFINE([SYSCALL_ARG_REG], [[gregs[4]]]) # a0
326 AC_DEFINE([SYSCALL_ARG1_REG], [[gregs[5]]]) # a1 369 AC_DEFINE([SYSCALL_ARG1_REG], [[gregs[5]]]) # a1
370 AC_DEFINE([SYSCALL_ARG2_REG], [[gregs[4]]]) # a2
371 AC_DEFINE([SYSCALL_ARG3_REG], [[gregs[5]]]) # a3
327 AC_DEFINE([STACK_POINTER], [[gregs[29]]]) # sp 372 AC_DEFINE([STACK_POINTER], [[gregs[29]]]) # sp
328 AC_DEFINE([EXEC_SYSCALL], [__NR_execve]) 373 AC_DEFINE([EXEC_SYSCALL], [__NR_execve])
329 AC_DEFINE([USER_WORD], [uintptr_t]) 374 AC_DEFINE([USER_WORD], [uintptr_t])
@@ -331,6 +376,8 @@ AS_CASE([$host], [x86_64-*linux*],
331 AC_DEFINE([INTERPRETER_BASE], [0x1f000000]) 376 AC_DEFINE([INTERPRETER_BASE], [0x1f000000])
332 AC_DEFINE([STACK_GROWS_DOWNWARDS], [1]) 377 AC_DEFINE([STACK_GROWS_DOWNWARDS], [1])
333 AC_DEFINE([CLONE_SYSCALL], [__NR_clone]) 378 AC_DEFINE([CLONE_SYSCALL], [__NR_clone])
379 AC_DEFINE([READLINK_SYSCALL], [__NR_readlink])
380 AC_DEFINE([READLINKAT_SYSCALL], [__NR_readlinkat])
334 AC_CHECK_DECL([_MIPS_SIM], [exec_CHECK_MIPS_NABI], 381 AC_CHECK_DECL([_MIPS_SIM], [exec_CHECK_MIPS_NABI],
335 [AC_MSG_ERROR([_MIPS_SIM could not be determined]), 382 [AC_MSG_ERROR([_MIPS_SIM could not be determined]),
336 [[ 383 [[
@@ -347,6 +394,8 @@ AS_CASE([$host], [x86_64-*linux*],
347 AC_DEFINE([SYSCALL_RET_REG], [[gregs[4]]]) # a0 394 AC_DEFINE([SYSCALL_RET_REG], [[gregs[4]]]) # a0
348 AC_DEFINE([SYSCALL_ARG_REG], [[gregs[4]]]) # a0 395 AC_DEFINE([SYSCALL_ARG_REG], [[gregs[4]]]) # a0
349 AC_DEFINE([SYSCALL_ARG1_REG], [[gregs[5]]]) # a1 396 AC_DEFINE([SYSCALL_ARG1_REG], [[gregs[5]]]) # a1
397 AC_DEFINE([SYSCALL_ARG2_REG], [[gregs[4]]]) # a2
398 AC_DEFINE([SYSCALL_ARG3_REG], [[gregs[5]]]) # a3
350 AC_DEFINE([STACK_POINTER], [[gregs[29]]]) # sp 399 AC_DEFINE([STACK_POINTER], [[gregs[29]]]) # sp
351 AC_DEFINE([EXEC_SYSCALL], [__NR_execve]) 400 AC_DEFINE([EXEC_SYSCALL], [__NR_execve])
352 AC_DEFINE([USER_WORD], [uintptr_t]) 401 AC_DEFINE([USER_WORD], [uintptr_t])
@@ -355,6 +404,8 @@ AS_CASE([$host], [x86_64-*linux*],
355 AC_DEFINE([INTERPRETER_BASE], [0x3f00000000]) 404 AC_DEFINE([INTERPRETER_BASE], [0x3f00000000])
356 AC_DEFINE([STACK_GROWS_DOWNWARDS], [1]) 405 AC_DEFINE([STACK_GROWS_DOWNWARDS], [1])
357 AC_DEFINE([CLONE_SYSCALL], [__NR_clone]) 406 AC_DEFINE([CLONE_SYSCALL], [__NR_clone])
407 AC_DEFINE([READLINK_SYSCALL], [__NR_readlink])
408 AC_DEFINE([READLINKAT_SYSCALL], [__NR_readlinkat])
358 AC_CACHE_CHECK([whether as understands `daddi'], 409 AC_CACHE_CHECK([whether as understands `daddi'],
359 [exec_cv_as_daddi], 410 [exec_cv_as_daddi],
360 [exec_cv_as_daddi=no 411 [exec_cv_as_daddi=no