]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
s390: Remove _dl_skip_args usage
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Thu, 26 May 2022 16:13:05 +0000 (13:13 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Mon, 30 May 2022 19:33:25 +0000 (16:33 -0300)
Since ad43cac44a the generic code already shuffles the argv/envp/auxv
on the stack to remove the ld.so own arguments and thus _dl_skip_args
is always 0.   So there is no need to adjust the argc or argv.

Checked on s390x-linux-gnu and s390-linux-gnu.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
sysdeps/s390/s390-32/dl-machine.h
sysdeps/s390/s390-64/dl-machine.h

index 4392abb355e11c081fc63000aa3b8b61458618c8..b69787b0ad646d9909e36e8db3e65218935980c5 100644 (file)
@@ -186,52 +186,6 @@ _dl_start_user:\n\
        # Point %r12 at the GOT.\n\
        l     %r12,.Ladr0-.Llit(%r13)\n\
        ar    %r12,%r13\n\
-       # See if we were run as a command with the executable file\n\
-       # name as an extra leading argument.\n\
-       l     %r1,_dl_skip_args@GOT(%r12)\n\
-       l     %r1,0(%r1)        # load _dl_skip_args\n\
-       ltr   %r1,%r1\n\
-       je    4f                # Skip the arg adjustment if there were none.\n\
-       # Get the original argument count.\n\
-       l     %r0,96(%r15)\n\
-       # Subtract _dl_skip_args from it.\n\
-       sr    %r0,%r1\n\
-       # Store back the modified argument count.\n\
-       st    %r0,96(%r15)\n\
-       # Copy argv and envp forward to account for skipped argv entries.\n\
-       # We skipped at least one argument or we would not get here.\n\
-       la    %r6,100(%r15)     # Destination pointer i.e. &argv[0]\n\
-       lr    %r5,%r6\n\
-       lr    %r0,%r1\n\
-       sll   %r0,2\n           # Number of skipped bytes.\n\
-       ar    %r5,%r0           # Source pointer = Dest + Skipped args.\n\
-       # argv copy loop:\n\
-1:     l     %r7,0(%r5)        # Load a word from the source.\n\
-       st    %r7,0(%r6)        # Store the word in the destination.\n\
-       ahi   %r5,4\n\
-       ahi   %r6,4\n\
-       ltr   %r7,%r7\n\
-       jne   1b                # Stop after copying the NULL.\n\
-       # envp copy loop:\n\
-2:     l     %r7,0(%r5)        # Load a word from the source.\n\
-       st    %r7,0(%r6)        # Store the word in the destination.\n\
-       ahi   %r5,4\n\
-       ahi   %r6,4\n\
-       ltr   %r7,%r7\n\
-       jne   2b                # Stop after copying the NULL.\n\
-       # Now we have to zero out the envp entries after NULL to allow\n\
-       # start.S to properly find auxv by skipping zeroes.\n\
-       # zero out loop:\n\
-       lhi   %r7,0\n\
-3:     st    %r7,0(%r6)        # Store zero.\n\
-       ahi   %r6,4             # Advance dest pointer.\n\
-       ahi   %r1,-1            # Subtract one from the word count.\n\
-       ltr   %r1,%r1\n\
-       jne    3b               # Keep copying if the word count is non-zero.\n\
-       # Adjust _dl_argv\n\
-       la    %r6,100(%r15)\n\
-       l     %r1,_dl_argv@GOT(%r12)\n\
-       st    %r6,0(%r1)\n\
        # The special initializer gets called with the stack just\n\
        # as the application's entry point will see it; it can\n\
        # switch stacks if it moves these contents over.\n\
index 7a94b3a7a6a6b992692f05b2f231893e455ed8fe..74be0552dc42246df8ee24f871a2391798e3441b 100644 (file)
@@ -167,22 +167,6 @@ _dl_start_user:\n\
        lgr   %r8,%r2\n\
        # Point %r12 at the GOT.\n\
        larl  %r12,_GLOBAL_OFFSET_TABLE_\n\
-       # See if we were run as a command with the executable file\n\
-       # name as an extra leading argument.\n\
-       lghi  %r1,_dl_skip_args@GOT\n\
-       lg    %r1,0(%r1,%r12)\n\
-       lgf   %r1,0(%r1)          # load _dl_skip_args\n\
-       # Get the original argument count.\n\
-       lg    %r0,160(%r15)\n\
-       # Subtract _dl_skip_args from it.\n\
-       sgr   %r0,%r1\n\
-       # Adjust the stack pointer to skip _dl_skip_args words.\n\
-       sllg  %r1,%r1,3\n\
-       agr   %r15,%r1\n\
-       # Set the back chain to zero again\n\
-       xc    0(8,%r15),0(%r15)\n\
-       # Store back the modified argument count.\n\
-       stg   %r0,160(%r15)\n\
        # The special initializer gets called with the stack just\n\
        # as the application's entry point will see it; it can\n\
        # switch stacks if it moves these contents over.\n\