OSDN Git Service

Prepare for standalone execution of ldso.
authorJoakim Tjernlund <joakim.tjernlund@transmode.se>
Wed, 25 May 2005 23:54:50 +0000 (23:54 -0000)
committerJoakim Tjernlund <joakim.tjernlund@transmode.se>
Wed, 25 May 2005 23:54:50 +0000 (23:54 -0000)
ldso/ldso/i386/dl-startup.h

index b0612b9..95609bb 100644 (file)
@@ -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"