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