patches/glibc/2.2.5/dl-machine-alpha.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sat Feb 24 11:00:05 2007 +0000 (2007-02-24)
changeset 1 eeea35fbf182
permissions -rw-r--r--
Add the full crosstool-NG sources to the new repository of its own.
You might just say: 'Yeah! crosstool-NG's got its own repo!".
Unfortunately, that's because the previous repo got damaged beyond repair and I had no backup.
That means I'm putting backups in place in the afternoon.
That also means we've lost history... :-(
yann@1
     1
From http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/sysdeps/alpha/dl-machine.h.diff?r1=1.56&r2=1.57&cvsroot=glibc
yann@1
     2
(minus first hunk)
yann@1
     3
Lets glibc-2.2.5 compile with gcc-3.3
yann@1
     4
yann@1
     5
===================================================================
yann@1
     6
RCS file: /cvs/glibc/libc/sysdeps/alpha/dl-machine.h,v
yann@1
     7
retrieving revision 1.56
yann@1
     8
retrieving revision 1.57
yann@1
     9
diff -u -r1.56 -r1.57
yann@1
    10
--- libc/sysdeps/alpha/dl-machine.h	2001/12/12 00:10:27	1.56
yann@1
    11
+++ libc/sysdeps/alpha/dl-machine.h	2001/12/31 17:33:59	1.57
yann@1
    12
@@ -156,125 +157,126 @@
yann@1
    13
 #define TRAMPOLINE_TEMPLATE(tramp_name, fixup_name, IMB)	\
yann@1
    14
   extern void tramp_name (void);				\
yann@1
    15
   asm ( "\
yann@1
    16
-	.globl " #tramp_name "
yann@1
    17
-	.ent " #tramp_name "
yann@1
    18
-" #tramp_name ":
yann@1
    19
-	lda	$sp, -44*8($sp)
yann@1
    20
-	.frame	$sp, 44*8, $26
yann@1
    21
-	/* Preserve all integer registers that C normally doesn't.  */
yann@1
    22
-	stq	$26, 0*8($sp)
yann@1
    23
-	stq	$0, 1*8($sp)
yann@1
    24
-	stq	$1, 2*8($sp)
yann@1
    25
-	stq	$2, 3*8($sp)
yann@1
    26
-	stq	$3, 4*8($sp)
yann@1
    27
-	stq	$4, 5*8($sp)
yann@1
    28
-	stq	$5, 6*8($sp)
yann@1
    29
-	stq	$6, 7*8($sp)
yann@1
    30
-	stq	$7, 8*8($sp)
yann@1
    31
-	stq	$8, 9*8($sp)
yann@1
    32
-	stq	$16, 10*8($sp)
yann@1
    33
-	stq	$17, 11*8($sp)
yann@1
    34
-	stq	$18, 12*8($sp)
yann@1
    35
-	stq	$19, 13*8($sp)
yann@1
    36
-	stq	$20, 14*8($sp)
yann@1
    37
-	stq	$21, 15*8($sp)
yann@1
    38
-	stq	$22, 16*8($sp)
yann@1
    39
-	stq	$23, 17*8($sp)
yann@1
    40
-	stq	$24, 18*8($sp)
yann@1
    41
-	stq	$25, 19*8($sp)
yann@1
    42
-	stq	$29, 20*8($sp)
yann@1
    43
-	stt	$f0, 21*8($sp)
yann@1
    44
-	stt	$f1, 22*8($sp)
yann@1
    45
-	stt	$f10, 23*8($sp)
yann@1
    46
-	stt	$f11, 24*8($sp)
yann@1
    47
-	stt	$f12, 25*8($sp)
yann@1
    48
-	stt	$f13, 26*8($sp)
yann@1
    49
-	stt	$f14, 27*8($sp)
yann@1
    50
-	stt	$f15, 28*8($sp)
yann@1
    51
-	stt	$f16, 29*8($sp)
yann@1
    52
-	stt	$f17, 30*8($sp)
yann@1
    53
-	stt	$f18, 31*8($sp)
yann@1
    54
-	stt	$f19, 32*8($sp)
yann@1
    55
-	stt	$f20, 33*8($sp)
yann@1
    56
-	stt	$f21, 34*8($sp)
yann@1
    57
-	stt	$f22, 35*8($sp)
yann@1
    58
-	stt	$f23, 36*8($sp)
yann@1
    59
-	stt	$f24, 37*8($sp)
yann@1
    60
-	stt	$f25, 38*8($sp)
yann@1
    61
-	stt	$f26, 39*8($sp)
yann@1
    62
-	stt	$f27, 40*8($sp)
yann@1
    63
-	stt	$f28, 41*8($sp)
yann@1
    64
-	stt	$f29, 42*8($sp)
yann@1
    65
-	stt	$f30, 43*8($sp)
yann@1
    66
-	.mask	0x27ff01ff, -44*8
yann@1
    67
-	.fmask	0xfffffc03, -(44-21)*8
yann@1
    68
-	/* Set up our $gp */
yann@1
    69
-	br	$gp, .+4
yann@1
    70
-	ldgp	$gp, 0($gp)
yann@1
    71
-	.prologue 0
yann@1
    72
-	/* Set up the arguments for fixup: */
yann@1
    73
-	/* $16 = link_map out of plt0 */
yann@1
    74
-	/* $17 = offset of reloc entry = ($28 - $27 - 20) /12 * 24 */
yann@1
    75
-	/* $18 = return address */
yann@1
    76
-	subq	$28, $27, $17
yann@1
    77
-	ldq	$16, 8($27)
yann@1
    78
-	subq	$17, 20, $17
yann@1
    79
-	mov	$26, $18
yann@1
    80
-	addq	$17, $17, $17
yann@1
    81
-	/* Do the fixup */
yann@1
    82
-	bsr	$26, " ASM_ALPHA_NG_SYMBOL_PREFIX #fixup_name "..ng
yann@1
    83
-	/* Move the destination address into position.  */
yann@1
    84
-	mov	$0, $27
yann@1
    85
-	/* Restore program registers.  */
yann@1
    86
-	ldq	$26, 0*8($sp)
yann@1
    87
-	ldq	$0, 1*8($sp)
yann@1
    88
-	ldq	$1, 2*8($sp)
yann@1
    89
-	ldq	$2, 3*8($sp)
yann@1
    90
-	ldq	$3, 4*8($sp)
yann@1
    91
-	ldq	$4, 5*8($sp)
yann@1
    92
-	ldq	$5, 6*8($sp)
yann@1
    93
-	ldq	$6, 7*8($sp)
yann@1
    94
-	ldq	$7, 8*8($sp)
yann@1
    95
-	ldq	$8, 9*8($sp)
yann@1
    96
-	ldq	$16, 10*8($sp)
yann@1
    97
-	ldq	$17, 11*8($sp)
yann@1
    98
-	ldq	$18, 12*8($sp)
yann@1
    99
-	ldq	$19, 13*8($sp)
yann@1
   100
-	ldq	$20, 14*8($sp)
yann@1
   101
-	ldq	$21, 15*8($sp)
yann@1
   102
-	ldq	$22, 16*8($sp)
yann@1
   103
-	ldq	$23, 17*8($sp)
yann@1
   104
-	ldq	$24, 18*8($sp)
yann@1
   105
-	ldq	$25, 19*8($sp)
yann@1
   106
-	ldq	$29, 20*8($sp)
yann@1
   107
-	ldt	$f0, 21*8($sp)
yann@1
   108
-	ldt	$f1, 22*8($sp)
yann@1
   109
-	ldt	$f10, 23*8($sp)
yann@1
   110
-	ldt	$f11, 24*8($sp)
yann@1
   111
-	ldt	$f12, 25*8($sp)
yann@1
   112
-	ldt	$f13, 26*8($sp)
yann@1
   113
-	ldt	$f14, 27*8($sp)
yann@1
   114
-	ldt	$f15, 28*8($sp)
yann@1
   115
-	ldt	$f16, 29*8($sp)
yann@1
   116
-	ldt	$f17, 30*8($sp)
yann@1
   117
-	ldt	$f18, 31*8($sp)
yann@1
   118
-	ldt	$f19, 32*8($sp)
yann@1
   119
-	ldt	$f20, 33*8($sp)
yann@1
   120
-	ldt	$f21, 34*8($sp)
yann@1
   121
-	ldt	$f22, 35*8($sp)
yann@1
   122
-	ldt	$f23, 36*8($sp)
yann@1
   123
-	ldt	$f24, 37*8($sp)
yann@1
   124
-	ldt	$f25, 38*8($sp)
yann@1
   125
-	ldt	$f26, 39*8($sp)
yann@1
   126
-	ldt	$f27, 40*8($sp)
yann@1
   127
-	ldt	$f28, 41*8($sp)
yann@1
   128
-	ldt	$f29, 42*8($sp)
yann@1
   129
-	ldt	$f30, 43*8($sp)
yann@1
   130
-	/* Flush the Icache after having modified the .plt code.  */
yann@1
   131
-	" #IMB "
yann@1
   132
-	/* Clean up and turn control to the destination */
yann@1
   133
-	lda	$sp, 44*8($sp)
yann@1
   134
-	jmp	$31, ($27)
yann@1
   135
+	.globl " #tramp_name "					\n\
yann@1
   136
+	.ent " #tramp_name "					\n\
yann@1
   137
+" #tramp_name ":						\n\
yann@1
   138
+	lda	$sp, -44*8($sp)					\n\
yann@1
   139
+	.frame	$sp, 44*8, $26					\n\
yann@1
   140
+	/* Preserve all integer registers that C normally	\n\
yann@1
   141
+	   doesn't.  */						\n\
yann@1
   142
+	stq	$26, 0*8($sp)					\n\
yann@1
   143
+	stq	$0, 1*8($sp)					\n\
yann@1
   144
+	stq	$1, 2*8($sp)					\n\
yann@1
   145
+	stq	$2, 3*8($sp)					\n\
yann@1
   146
+	stq	$3, 4*8($sp)					\n\
yann@1
   147
+	stq	$4, 5*8($sp)					\n\
yann@1
   148
+	stq	$5, 6*8($sp)					\n\
yann@1
   149
+	stq	$6, 7*8($sp)					\n\
yann@1
   150
+	stq	$7, 8*8($sp)					\n\
yann@1
   151
+	stq	$8, 9*8($sp)					\n\
yann@1
   152
+	stq	$16, 10*8($sp)					\n\
yann@1
   153
+	stq	$17, 11*8($sp)					\n\
yann@1
   154
+	stq	$18, 12*8($sp)					\n\
yann@1
   155
+	stq	$19, 13*8($sp)					\n\
yann@1
   156
+	stq	$20, 14*8($sp)					\n\
yann@1
   157
+	stq	$21, 15*8($sp)					\n\
yann@1
   158
+	stq	$22, 16*8($sp)					\n\
yann@1
   159
+	stq	$23, 17*8($sp)					\n\
yann@1
   160
+	stq	$24, 18*8($sp)					\n\
yann@1
   161
+	stq	$25, 19*8($sp)					\n\
yann@1
   162
+	stq	$29, 20*8($sp)					\n\
yann@1
   163
+	stt	$f0, 21*8($sp)					\n\
yann@1
   164
+	stt	$f1, 22*8($sp)					\n\
yann@1
   165
+	stt	$f10, 23*8($sp)					\n\
yann@1
   166
+	stt	$f11, 24*8($sp)					\n\
yann@1
   167
+	stt	$f12, 25*8($sp)					\n\
yann@1
   168
+	stt	$f13, 26*8($sp)					\n\
yann@1
   169
+	stt	$f14, 27*8($sp)					\n\
yann@1
   170
+	stt	$f15, 28*8($sp)					\n\
yann@1
   171
+	stt	$f16, 29*8($sp)					\n\
yann@1
   172
+	stt	$f17, 30*8($sp)					\n\
yann@1
   173
+	stt	$f18, 31*8($sp)					\n\
yann@1
   174
+	stt	$f19, 32*8($sp)					\n\
yann@1
   175
+	stt	$f20, 33*8($sp)					\n\
yann@1
   176
+	stt	$f21, 34*8($sp)					\n\
yann@1
   177
+	stt	$f22, 35*8($sp)					\n\
yann@1
   178
+	stt	$f23, 36*8($sp)					\n\
yann@1
   179
+	stt	$f24, 37*8($sp)					\n\
yann@1
   180
+	stt	$f25, 38*8($sp)					\n\
yann@1
   181
+	stt	$f26, 39*8($sp)					\n\
yann@1
   182
+	stt	$f27, 40*8($sp)					\n\
yann@1
   183
+	stt	$f28, 41*8($sp)					\n\
yann@1
   184
+	stt	$f29, 42*8($sp)					\n\
yann@1
   185
+	stt	$f30, 43*8($sp)					\n\
yann@1
   186
+	.mask	0x27ff01ff, -44*8				\n\
yann@1
   187
+	.fmask	0xfffffc03, -(44-21)*8				\n\
yann@1
   188
+	/* Set up our $gp */					\n\
yann@1
   189
+	br	$gp, .+4					\n\
yann@1
   190
+	ldgp	$gp, 0($gp)					\n\
yann@1
   191
+	.prologue 0						\n\
yann@1
   192
+	/* Set up the arguments for fixup: */			\n\
yann@1
   193
+	/* $16 = link_map out of plt0 */			\n\
yann@1
   194
+	/* $17 = offset of reloc entry = ($28 - $27 - 20) /12 * 24 */\n\
yann@1
   195
+	/* $18 = return address */				\n\
yann@1
   196
+	subq	$28, $27, $17					\n\
yann@1
   197
+	ldq	$16, 8($27)					\n\
yann@1
   198
+	subq	$17, 20, $17					\n\
yann@1
   199
+	mov	$26, $18					\n\
yann@1
   200
+	addq	$17, $17, $17					\n\
yann@1
   201
+	/* Do the fixup */					\n\
yann@1
   202
+	bsr	$26, " ASM_ALPHA_NG_SYMBOL_PREFIX #fixup_name "..ng\n\
yann@1
   203
+	/* Move the destination address into position.  */	\n\
yann@1
   204
+	mov	$0, $27						\n\
yann@1
   205
+	/* Restore program registers.  */			\n\
yann@1
   206
+	ldq	$26, 0*8($sp)					\n\
yann@1
   207
+	ldq	$0, 1*8($sp)					\n\
yann@1
   208
+	ldq	$1, 2*8($sp)					\n\
yann@1
   209
+	ldq	$2, 3*8($sp)					\n\
yann@1
   210
+	ldq	$3, 4*8($sp)					\n\
yann@1
   211
+	ldq	$4, 5*8($sp)					\n\
yann@1
   212
+	ldq	$5, 6*8($sp)					\n\
yann@1
   213
+	ldq	$6, 7*8($sp)					\n\
yann@1
   214
+	ldq	$7, 8*8($sp)					\n\
yann@1
   215
+	ldq	$8, 9*8($sp)					\n\
yann@1
   216
+	ldq	$16, 10*8($sp)					\n\
yann@1
   217
+	ldq	$17, 11*8($sp)					\n\
yann@1
   218
+	ldq	$18, 12*8($sp)					\n\
yann@1
   219
+	ldq	$19, 13*8($sp)					\n\
yann@1
   220
+	ldq	$20, 14*8($sp)					\n\
yann@1
   221
+	ldq	$21, 15*8($sp)					\n\
yann@1
   222
+	ldq	$22, 16*8($sp)					\n\
yann@1
   223
+	ldq	$23, 17*8($sp)					\n\
yann@1
   224
+	ldq	$24, 18*8($sp)					\n\
yann@1
   225
+	ldq	$25, 19*8($sp)					\n\
yann@1
   226
+	ldq	$29, 20*8($sp)					\n\
yann@1
   227
+	ldt	$f0, 21*8($sp)					\n\
yann@1
   228
+	ldt	$f1, 22*8($sp)					\n\
yann@1
   229
+	ldt	$f10, 23*8($sp)					\n\
yann@1
   230
+	ldt	$f11, 24*8($sp)					\n\
yann@1
   231
+	ldt	$f12, 25*8($sp)					\n\
yann@1
   232
+	ldt	$f13, 26*8($sp)					\n\
yann@1
   233
+	ldt	$f14, 27*8($sp)					\n\
yann@1
   234
+	ldt	$f15, 28*8($sp)					\n\
yann@1
   235
+	ldt	$f16, 29*8($sp)					\n\
yann@1
   236
+	ldt	$f17, 30*8($sp)					\n\
yann@1
   237
+	ldt	$f18, 31*8($sp)					\n\
yann@1
   238
+	ldt	$f19, 32*8($sp)					\n\
yann@1
   239
+	ldt	$f20, 33*8($sp)					\n\
yann@1
   240
+	ldt	$f21, 34*8($sp)					\n\
yann@1
   241
+	ldt	$f22, 35*8($sp)					\n\
yann@1
   242
+	ldt	$f23, 36*8($sp)					\n\
yann@1
   243
+	ldt	$f24, 37*8($sp)					\n\
yann@1
   244
+	ldt	$f25, 38*8($sp)					\n\
yann@1
   245
+	ldt	$f26, 39*8($sp)					\n\
yann@1
   246
+	ldt	$f27, 40*8($sp)					\n\
yann@1
   247
+	ldt	$f28, 41*8($sp)					\n\
yann@1
   248
+	ldt	$f29, 42*8($sp)					\n\
yann@1
   249
+	ldt	$f30, 43*8($sp)					\n\
yann@1
   250
+	/* Flush the Icache after having modified the .plt code.  */\n\
yann@1
   251
+	" #IMB "						\n\
yann@1
   252
+	/* Clean up and turn control to the destination */	\n\
yann@1
   253
+	lda	$sp, 44*8($sp)					\n\
yann@1
   254
+	jmp	$31, ($27)					\n\
yann@1
   255
 	.end " #tramp_name)
yann@1
   256
 
yann@1
   257
 #ifndef PROF
yann@1
   258
@@ -292,85 +294,87 @@
yann@1
   259
    its return value is the user program's entry point.  */
yann@1
   260
 
yann@1
   261
 #define RTLD_START asm ("\
yann@1
   262
-.text
yann@1
   263
-	.set at
yann@1
   264
-	.globl _start
yann@1
   265
-	.ent _start
yann@1
   266
-_start:
yann@1
   267
-	br	$gp, 0f
yann@1
   268
-0:	ldgp	$gp, 0($gp)
yann@1
   269
-	.prologue 0
yann@1
   270
-	/* Pass pointer to argument block to _dl_start.  */
yann@1
   271
-	mov	$sp, $16
yann@1
   272
-	bsr	$26, "ASM_ALPHA_NG_SYMBOL_PREFIX"_dl_start..ng
yann@1
   273
-	.end _start
yann@1
   274
-	/* FALLTHRU */
yann@1
   275
-	.globl _dl_start_user
yann@1
   276
-	.ent _dl_start_user
yann@1
   277
-_dl_start_user:
yann@1
   278
-	.frame $30,0,$31,0
yann@1
   279
-	.prologue 0
yann@1
   280
-	/* Save the user entry point address in s0.  */
yann@1
   281
-	mov	$0, $9
yann@1
   282
-	/* Store the highest stack address.  */
yann@1
   283
-	stq	$30, __libc_stack_end
yann@1
   284
-	/* See if we were run as a command with the executable file
yann@1
   285
-	   name as an extra leading argument.  */
yann@1
   286
-	ldl	$1, _dl_skip_args
yann@1
   287
-	bne	$1, $fixup_stack
yann@1
   288
-$fixup_stack_ret:
yann@1
   289
-	/* The special initializer gets called with the stack just
yann@1
   290
-	   as the application's entry point will see it; it can
yann@1
   291
-	   switch stacks if it moves these contents over.  */
yann@1
   292
-" RTLD_START_SPECIAL_INIT "
yann@1
   293
-	/* Call _dl_init(_dl_loaded, argc, argv, envp) to run initializers.  */
yann@1
   294
-	ldq	$16, _dl_loaded
yann@1
   295
-	ldq	$17, 0($sp)
yann@1
   296
-	lda	$18, 8($sp)
yann@1
   297
-	s8addq	$17, 8, $19
yann@1
   298
-	addq	$19, $18, $19
yann@1
   299
-	jsr	$26, _dl_init
yann@1
   300
-	/* Pass our finalizer function to the user in $0. */
yann@1
   301
-	lda	$0, _dl_fini
yann@1
   302
-	/* Jump to the user's entry point.  */
yann@1
   303
-	mov	$9, $27
yann@1
   304
-	jmp	($9)
yann@1
   305
-$fixup_stack:
yann@1
   306
-	/* Adjust the stack pointer to skip _dl_skip_args words.  This
yann@1
   307
-	   involves copying everything down, since the stack pointer must
yann@1
   308
-	   always be 16-byte aligned.  */
yann@1
   309
-	ldq	$2, 0($sp)
yann@1
   310
-	ldq	$5, _dl_argv
yann@1
   311
-	subq	$31, $1, $6
yann@1
   312
-	subq	$2, $1, $2
yann@1
   313
-	s8addq	$6, $5, $5
yann@1
   314
-	mov	$sp, $4
yann@1
   315
-	s8addq	$1, $sp, $3
yann@1
   316
-	stq	$2, 0($sp)
yann@1
   317
-	stq	$5, _dl_argv
yann@1
   318
-	/* Copy down argv.  */
yann@1
   319
-0:	ldq	$5, 8($3)
yann@1
   320
-	addq	$4, 8, $4
yann@1
   321
-	addq	$3, 8, $3
yann@1
   322
-	stq	$5, 0($4)
yann@1
   323
-	bne	$5, 0b
yann@1
   324
-	/* Copy down envp.  */
yann@1
   325
-1:	ldq	$5, 8($3)
yann@1
   326
-	addq	$4, 8, $4
yann@1
   327
-	addq	$3, 8, $3
yann@1
   328
-	stq	$5, 0($4)
yann@1
   329
-	bne	$5, 1b
yann@1
   330
-	/* Copy down auxiliary table.  */
yann@1
   331
-2:	ldq	$5, 8($3)
yann@1
   332
-	ldq	$6, 16($3)
yann@1
   333
-	addq	$4, 16, $4
yann@1
   334
-	addq	$3, 16, $3
yann@1
   335
-	stq	$5, -8($4)
yann@1
   336
-	stq	$6, 0($4)
yann@1
   337
-	bne	$5, 2b
yann@1
   338
-	br	$fixup_stack_ret
yann@1
   339
-	.end _dl_start_user
yann@1
   340
-	.set noat
yann@1
   341
+.text								\n\
yann@1
   342
+	.set at							\n\
yann@1
   343
+	.globl _start						\n\
yann@1
   344
+	.ent _start						\n\
yann@1
   345
+_start:								\n\
yann@1
   346
+	br	$gp, 0f						\n\
yann@1
   347
+0:	ldgp	$gp, 0($gp)					\n\
yann@1
   348
+	.prologue 0						\n\
yann@1
   349
+	/* Pass pointer to argument block to _dl_start.  */	\n\
yann@1
   350
+	mov	$sp, $16					\n\
yann@1
   351
+	bsr	$26, "ASM_ALPHA_NG_SYMBOL_PREFIX"_dl_start..ng	\n\
yann@1
   352
+	.end _start						\n\
yann@1
   353
+	/* FALLTHRU */						\n\
yann@1
   354
+	.globl _dl_start_user					\n\
yann@1
   355
+	.ent _dl_start_user					\n\
yann@1
   356
+_dl_start_user:							\n\
yann@1
   357
+	.frame $30,0,$31,0					\n\
yann@1
   358
+	.prologue 0						\n\
yann@1
   359
+	/* Save the user entry point address in s0.  */		\n\
yann@1
   360
+	mov	$0, $9						\n\
yann@1
   361
+	/* Store the highest stack address.  */			\n\
yann@1
   362
+	stq	$30, __libc_stack_end				\n\
yann@1
   363
+	/* See if we were run as a command with the executable	\n\
yann@1
   364
+	   file name as an extra leading argument.  */		\n\
yann@1
   365
+	ldl	$1, _dl_skip_args				\n\
yann@1
   366
+	bne	$1, $fixup_stack				\n\
yann@1
   367
+$fixup_stack_ret:						\n\
yann@1
   368
+	/* The special initializer gets called with the stack	\n\
yann@1
   369
+	   just as the application's entry point will see it;	\n\
yann@1
   370
+	   it can switch stacks if it moves these contents	\n\
yann@1
   371
+	   over.  */						\n\
yann@1
   372
+" RTLD_START_SPECIAL_INIT "					\n\
yann@1
   373
+	/* Call _dl_init(_dl_loaded, argc, argv, envp) to run	\n\
yann@1
   374
+	   initializers.  */					\n\
yann@1
   375
+	ldq	$16, _dl_loaded					\n\
yann@1
   376
+	ldq	$17, 0($sp)					\n\
yann@1
   377
+	lda	$18, 8($sp)					\n\
yann@1
   378
+	s8addq	$17, 8, $19					\n\
yann@1
   379
+	addq	$19, $18, $19					\n\
yann@1
   380
+	jsr	$26, _dl_init					\n\
yann@1
   381
+	/* Pass our finalizer function to the user in $0. */	\n\
yann@1
   382
+	lda	$0, _dl_fini					\n\
yann@1
   383
+	/* Jump to the user's entry point.  */			\n\
yann@1
   384
+	mov	$9, $27						\n\
yann@1
   385
+	jmp	($9)						\n\
yann@1
   386
+$fixup_stack:							\n\
yann@1
   387
+	/* Adjust the stack pointer to skip _dl_skip_args words.\n\
yann@1
   388
+	   This involves copying everything down, since the	\n\
yann@1
   389
+	   stack pointer must always be 16-byte aligned.  */	\n\
yann@1
   390
+	ldq	$2, 0($sp)					\n\
yann@1
   391
+	ldq	$5, _dl_argv					\n\
yann@1
   392
+	subq	$31, $1, $6					\n\
yann@1
   393
+	subq	$2, $1, $2					\n\
yann@1
   394
+	s8addq	$6, $5, $5					\n\
yann@1
   395
+	mov	$sp, $4						\n\
yann@1
   396
+	s8addq	$1, $sp, $3					\n\
yann@1
   397
+	stq	$2, 0($sp)					\n\
yann@1
   398
+	stq	$5, _dl_argv					\n\
yann@1
   399
+	/* Copy down argv.  */					\n\
yann@1
   400
+0:	ldq	$5, 8($3)					\n\
yann@1
   401
+	addq	$4, 8, $4					\n\
yann@1
   402
+	addq	$3, 8, $3					\n\
yann@1
   403
+	stq	$5, 0($4)					\n\
yann@1
   404
+	bne	$5, 0b						\n\
yann@1
   405
+	/* Copy down envp.  */					\n\
yann@1
   406
+1:	ldq	$5, 8($3)					\n\
yann@1
   407
+	addq	$4, 8, $4					\n\
yann@1
   408
+	addq	$3, 8, $3					\n\
yann@1
   409
+	stq	$5, 0($4)					\n\
yann@1
   410
+	bne	$5, 1b						\n\
yann@1
   411
+	/* Copy down auxiliary table.  */			\n\
yann@1
   412
+2:	ldq	$5, 8($3)					\n\
yann@1
   413
+	ldq	$6, 16($3)					\n\
yann@1
   414
+	addq	$4, 16, $4					\n\
yann@1
   415
+	addq	$3, 16, $3					\n\
yann@1
   416
+	stq	$5, -8($4)					\n\
yann@1
   417
+	stq	$6, 0($4)					\n\
yann@1
   418
+	bne	$5, 2b						\n\
yann@1
   419
+	br	$fixup_stack_ret				\n\
yann@1
   420
+	.end _dl_start_user					\n\
yann@1
   421
+	.set noat						\n\
yann@1
   422
 .previous");
yann@1
   423
 
yann@1
   424
 #ifndef RTLD_START_SPECIAL_INIT