Skip to content

Commit 5bf86e2

Browse files
author
Po Lu
committed
Port recent Android changes to mips64el
* exec/config-mips.m4.in (DADDI2, DADDI3): Disable at-clobbering by assembler macros expressly. * exec/loader-mips64el.s: Adapt from loader-mipsel.s. * exec/configure.ac (exec_cv_as_daddi): Properly escape reg names. * exec/exec.c (struct exec_jump_command, exec_0): Don't define or set `fpu_mode' if __LP64__. * exec/exec.h (struct exec_tracee): New field `callno'. * exec/trace.c (process_system_call): Always record the current system call number in TRACEE lest it should be required once it has been overwritten upon the syscall's completion. (seccomp_system_call): Likewise. (after_fork): Clear `tracee->callno'.
1 parent c3fe19a commit 5bf86e2

File tree

6 files changed

+253
-115
lines changed

6 files changed

+253
-115
lines changed

exec/config-mips.m4.in

+8-4
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,11 @@ define(`RESTORE', `ifelse(`@MIPS_N32@',`yes',` nop',` addi $sp, 32')')
3838
define(`FP', `ifelse(`@MIPS_N32@',`yes',`$s8',`$fp')')
3939

4040
dnl For mips64. Some assemblers don't want to assemble `daddi'.
41-
define(`DADDI2', `ifelse(`@DADDI_BROKEN@',`yes',` li $at, $2
42-
dadd $1, $1, $at',` daddi $1, $2')')
43-
define(`DADDI3', `ifelse(`@DADDI_BROKEN@',`yes',` li $at, $3
44-
dadd $1, $2, $at',` daddi $1, $2, $3')')
41+
define(`DADDI2', `ifelse(`@DADDI_BROKEN@',`yes',`.set noat
42+
li $at, $2
43+
dadd $1, $1, $at
44+
.set at',` daddi $1, $2')')
45+
define(`DADDI3', `ifelse(`@DADDI_BROKEN@',`yes',`.set noat
46+
li $at, $3
47+
dadd $1, $2, $at
48+
.set at',` daddi $1, $2, $3')')

exec/configure.ac

+6-6
Original file line numberDiff line numberDiff line change
@@ -455,12 +455,12 @@ AS_CASE([$host], [x86_64-*linux*],
455455
.section text
456456
.global __start
457457
__start:
458-
li $t0, 0
459-
li $t1, 0
460-
daddi $t0, $t1, 1
461-
daddi $t0, $t1, -1
462-
daddi $t0, -1
463-
daddi $t0, 1
458+
li \$t0, 0
459+
li \$t1, 0
460+
daddi \$t0, \$t1, 1
461+
daddi \$t0, \$t1, -1
462+
daddi \$t0, -1
463+
daddi \$t0, 1
464464
465465
_ACEOF
466466
$AS $ASFLAGS conftest.s -o conftest.$OBJEXT \

exec/exec.c

+5-4
Original file line numberDiff line numberDiff line change
@@ -231,10 +231,10 @@ struct exec_jump_command
231231
/* The value of AT_BASE inside the aux vector. */
232232
USER_WORD at_base;
233233

234-
#if defined __mips__
234+
#if defined __mips__ && !defined __LP64__
235235
/* The FPU mode to apply. Not used when !MIPS_NABI. */
236236
USER_WORD fpu_mode;
237-
#endif /* defined __mips__ */
237+
#endif /* defined __mips__ && !defined __LP64__ */
238238
};
239239

240240

@@ -918,6 +918,7 @@ exec_0 (char *name, struct exec_tracee *tracee,
918918
USER_WORD header_offset;
919919
USER_WORD name_len, aligned_len;
920920
struct exec_jump_command jump;
921+
/* This also encompasses !__LP64__. */
921922
#if defined __mips__ && !defined MIPS_NABI
922923
int fpu_mode;
923924
#endif /* defined __mips__ && !defined MIPS_NABI */
@@ -1130,9 +1131,9 @@ exec_0 (char *name, struct exec_tracee *tracee,
11301131
fpu_mode = FP_FRE;
11311132

11321133
jump.fpu_mode = fpu_mode;
1133-
#elif defined __mips__
1134+
#elif defined __mips__ && !defined __LP64__
11341135
jump.fpu_mode = 0;
1135-
#endif /* defined __mips__ && !defined MIPS_NABI */
1136+
#endif /* defined __mips__ && defined MIPS_NABI && !defined __LP64__ */
11361137

11371138
/* The offset used for at_phdr should be that of the first
11381139
mapping. */

exec/exec.h

+4
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,10 @@ struct exec_tracee
152152
completion. */
153153
USER_WORD sp;
154154

155+
/* ID of the system call that is pending completion. This value is
156+
not available as the call number is overwritten on success. */
157+
USER_WORD callno;
158+
155159
/* Name of the executable being run. */
156160
char *exec_file;
157161

0 commit comments

Comments
 (0)