aboutsummaryrefslogtreecommitdiffstats
path: root/exec/exec.c
diff options
context:
space:
mode:
Diffstat (limited to 'exec/exec.c')
-rw-r--r--exec/exec.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/exec/exec.c b/exec/exec.c
index b1c9825daff..7a8ef2c3a1a 100644
--- a/exec/exec.c
+++ b/exec/exec.c
@@ -831,7 +831,7 @@ insert_args (struct exec_tracee *tracee, USER_REGS_STRUCT *regs,
831 assert (new3 == new + effective_size); 831 assert (new3 == new + effective_size);
832 832
833 /* And that it is properly aligned. */ 833 /* And that it is properly aligned. */
834 assert (!(new3 & (sizeof new3 - 2))); 834 assert (!(new3 & (sizeof new3 - 1)));
835 835
836 /* Now modify the system call argument to point to new + 836 /* Now modify the system call argument to point to new +
837 text_size. */ 837 text_size. */
@@ -916,6 +916,9 @@ exec_0 (char *name, struct exec_tracee *tracee,
916 program_header program; 916 program_header program;
917 USER_WORD entry, program_entry, offset; 917 USER_WORD entry, program_entry, offset;
918 USER_WORD header_offset; 918 USER_WORD header_offset;
919#ifndef __mips__
920 USER_WORD name_len, aligned_len;
921#endif /* !__mips__ */
919 struct exec_jump_command jump; 922 struct exec_jump_command jump;
920#if defined __mips__ && !defined MIPS_NABI 923#if defined __mips__ && !defined MIPS_NABI
921 int fpu_mode; 924 int fpu_mode;
@@ -1146,6 +1149,26 @@ exec_0 (char *name, struct exec_tracee *tracee,
1146 sizeof jump); 1149 sizeof jump);
1147 loader_area_used += sizeof jump; 1150 loader_area_used += sizeof jump;
1148 1151
1152 /* TODO: MIPS support. */
1153#ifndef __mips__
1154 /* Copy the length of NAME and NAME itself to the loader area. */
1155 name_len = strlen (name);
1156 aligned_len = ((name_len + 1 + sizeof name_len - 1)
1157 & -sizeof name_len);
1158 if (sizeof loader_area - loader_area_used
1159 < aligned_len + sizeof name_len)
1160 goto fail1;
1161 memcpy (loader_area + loader_area_used, &name_len, sizeof name_len);
1162 loader_area_used += sizeof name_len;
1163 memcpy (loader_area + loader_area_used, name, name_len + 1);
1164 loader_area_used += name_len + 1;
1165
1166 /* Properly align the loader area. */
1167 offset = aligned_len - (name_len + 1);
1168 while (offset--)
1169 loader_area[loader_area_used++] = '\0';
1170#endif /* !__mips__ */
1171
1149 /* Close the file descriptor and return the number of bytes 1172 /* Close the file descriptor and return the number of bytes
1150 used. */ 1173 used. */
1151 1174