Prechádzať zdrojové kódy

Prepare for standalone execution of ldso.

Joakim Tjernlund 20 rokov pred
rodič
commit
df77bb0e1a
1 zmenil súbory, kde vykonal 11 pridanie a 0 odobranie
  1. 11 0
      ldso/ldso/i386/dl-startup.h

+ 11 - 0
ldso/ldso/i386/dl-startup.h

@@ -16,6 +16,17 @@ asm(
     "	call 1f\n"
     "1:	popl	%ebx\n"
     "	addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx\n"
+    "	# See if we were run as a command with the executable file\n"
+    "	# name as an extra leading argument.\n"
+    "	movl _dl_skip_args@GOTOFF(%ebx), %eax\n"
+    "	# Pop the original argument count.\n"
+    "	popl %edx\n"
+    "	# Adjust the stack pointer to skip _dl_skip_args words.\n"
+    "	leal (%esp,%eax,4), %esp\n"
+    "	# Subtract _dl_skip_args from argc.\n"
+    "	subl %eax, %edx\n"
+    "	# Push argc back on the stack.\n"
+    "	push %edx\n"
     "	# Pass our FINI ptr() to the user in %edx, as per ELF ABI.\n"
     "	leal _dl_fini@GOTOFF(%ebx), %edx\n"
     "	# Jump to the user's entry point.\n"