patches/glibc/2.2.5/dl-machine-sparc.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sat Jul 28 21:34:41 2007 +0000 (2007-07-28)
changeset 301 2be7232a73ac
permissions -rw-r--r--
Bump version to 0.2.2.
yann@1
     1
--- glibc-2.2.5/sysdeps/sparc/sparc32/dl-machine.h.old	Sat Jun  7 18:19:03 2003
yann@1
     2
+++ glibc-2.2.5/sysdeps/sparc/sparc32/dl-machine.h	Sat Jun  7 18:20:04 2003
yann@1
     3
@@ -148,23 +148,23 @@
yann@1
     4
    and then redirect to the address it returns.  */
yann@1
     5
 #define TRAMPOLINE_TEMPLATE(tramp_name, fixup_name)	\
yann@1
     6
   asm ( "\
yann@1
     7
-	.text
yann@1
     8
-	.globl	" #tramp_name "
yann@1
     9
-	.type	" #tramp_name ", @function
yann@1
    10
-	.align	32
yann@1
    11
-" #tramp_name ":
yann@1
    12
-	/* Set up the arguments to fixup --
yann@1
    13
-	   %o0 = link_map out of plt0
yann@1
    14
-	   %o1 = offset of reloc entry
yann@1
    15
-	   %o2 = return address  */
yann@1
    16
-	ld	[%o7 + 8], %o0
yann@1
    17
-	srl	%g1, 10, %o1
yann@1
    18
-	mov	%i7, %o2
yann@1
    19
-	call	" #fixup_name "
yann@1
    20
-	 sub	%o1, 4*12, %o1
yann@1
    21
-	jmp	%o0
yann@1
    22
-	 restore
yann@1
    23
-	.size	" #tramp_name ", . - " #tramp_name "
yann@1
    24
+	.text\n\
yann@1
    25
+	.globl	" #tramp_name "\n\
yann@1
    26
+	.type	" #tramp_name ", @function\n\
yann@1
    27
+	.align	32\n\
yann@1
    28
+" #tramp_name ":\n\
yann@1
    29
+	/* Set up the arguments to fixup --\n\
yann@1
    30
+	   %o0 = link_map out of plt0\n\
yann@1
    31
+	   %o1 = offset of reloc entry\n\
yann@1
    32
+	   %o2 = return address  */\n\
yann@1
    33
+	ld	[%o7 + 8], %o0\n\
yann@1
    34
+	srl	%g1, 10, %o1\n\
yann@1
    35
+	mov	%i7, %o2\n\
yann@1
    36
+	call	" #fixup_name "\n\
yann@1
    37
+	 sub	%o1, 4*12, %o1\n\
yann@1
    38
+	jmp	%o0\n\
yann@1
    39
+	 restore\n\
yann@1
    40
+	.size	" #tramp_name ", . - " #tramp_name "\n\
yann@1
    41
 	.previous")
yann@1
    42
 
yann@1
    43
 #ifndef PROF
yann@1
    44
@@ -199,96 +199,96 @@
yann@1
    45
    its return value is the user program's entry point.  */
yann@1
    46
 
yann@1
    47
 #define RTLD_START __asm__ ("\
yann@1
    48
-	.text
yann@1
    49
-	.globl	_start
yann@1
    50
-	.type	_start, @function
yann@1
    51
-	.align	32
yann@1
    52
-_start:
yann@1
    53
-  /* Allocate space for functions to drop their arguments.  */
yann@1
    54
-	sub	%sp, 6*4, %sp
yann@1
    55
-  /* Pass pointer to argument block to _dl_start.  */
yann@1
    56
-	call	_dl_start
yann@1
    57
-	 add	%sp, 22*4, %o0
yann@1
    58
-	/* FALTHRU */
yann@1
    59
-	.globl	_dl_start_user
yann@1
    60
-	.type	_dl_start_user, @function
yann@1
    61
-_dl_start_user:
yann@1
    62
-  /* Load the PIC register.  */
yann@1
    63
-1:	call	2f
yann@1
    64
-	 sethi	%hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
yann@1
    65
-2:	or	%l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
yann@1
    66
-	add	%l7, %o7, %l7
yann@1
    67
-  /* Save the user entry point address in %l0 */
yann@1
    68
-	mov	%o0, %l0
yann@1
    69
-  /* Store the highest stack address.  */
yann@1
    70
-	sethi	%hi(__libc_stack_end), %g2
yann@1
    71
-	or	%g2, %lo(__libc_stack_end), %g2
yann@1
    72
-	ld	[%l7 + %g2], %l1
yann@1
    73
-	sethi	%hi(_dl_skip_args), %g2
yann@1
    74
-	add	%sp, 6*4, %l2
yann@1
    75
-	or	%g2, %lo(_dl_skip_args), %g2
yann@1
    76
-	st	%l2, [%l1]
yann@1
    77
-  /* See if we were run as a command with the executable file name as an
yann@1
    78
-     extra leading argument.  If so, adjust the contents of the stack.  */
yann@1
    79
-	ld	[%l7+%g2], %i0
yann@1
    80
-	ld	[%i0], %i0
yann@1
    81
-	tst	%i0
yann@1
    82
-	beq	3f
yann@1
    83
-	 ld	[%sp+22*4], %i5		/* load argc */
yann@1
    84
-	/* Find out how far to shift.  */
yann@1
    85
-	sethi	%hi(_dl_argv), %l3
yann@1
    86
-	or	%l3, %lo(_dl_argv), %l3
yann@1
    87
-	ld	[%l7+%l3], %l3
yann@1
    88
-	sub	%i5, %i0, %i5
yann@1
    89
-	ld	[%l3], %l4
yann@1
    90
-	sll	%i0, 2, %i2
yann@1
    91
-	st	%i5, [%sp+22*4]
yann@1
    92
-	sub	%l4, %i2, %l4
yann@1
    93
-	add	%sp, 23*4, %i1
yann@1
    94
-	add	%i1, %i2, %i2
yann@1
    95
-	st	%l4, [%l3]
yann@1
    96
-	/* Copy down argv */
yann@1
    97
-21:	ld	[%i2], %i3
yann@1
    98
-	add	%i2, 4, %i2
yann@1
    99
-	tst	%i3
yann@1
   100
-	st	%i3, [%i1]
yann@1
   101
-	bne	21b
yann@1
   102
-	 add	%i1, 4, %i1
yann@1
   103
-	/* Copy down env */
yann@1
   104
-22:	ld	[%i2], %i3
yann@1
   105
-	add	%i2, 4, %i2
yann@1
   106
-	tst	%i3
yann@1
   107
-	st	%i3, [%i1]
yann@1
   108
-	bne	22b
yann@1
   109
-	 add	%i1, 4, %i1
yann@1
   110
-	/* Copy down auxiliary table.  */
yann@1
   111
-23:	ld	[%i2], %i3
yann@1
   112
-	ld	[%i2+4], %i4
yann@1
   113
-	add	%i2, 8, %i2
yann@1
   114
-	tst	%i3
yann@1
   115
-	st	%i3, [%i1]
yann@1
   116
-	st	%i4, [%i1+4]
yann@1
   117
-	bne	23b
yann@1
   118
-	 add	%i1, 8, %i1
yann@1
   119
-  /* %o0 = _dl_loaded, %o1 = argc, %o2 = argv, %o3 = envp.  */
yann@1
   120
-3:	sethi	%hi(_dl_loaded), %o0
yann@1
   121
-	add	%sp, 23*4, %o2
yann@1
   122
-	orcc	%o0, %lo(_dl_loaded), %o0
yann@1
   123
-	sll	%i5, 2, %o3
yann@1
   124
-	ld	[%l7+%o0], %o0
yann@1
   125
-	add	%o3, 4, %o3
yann@1
   126
-	mov	%i5, %o1
yann@1
   127
-	add	%o2, %o3, %o3
yann@1
   128
-	call	_dl_init
yann@1
   129
-	 ld	[%o0], %o0
yann@1
   130
-  /* Pass our finalizer function to the user in %g1.  */
yann@1
   131
-	sethi	%hi(_dl_fini), %g1
yann@1
   132
-	or	%g1, %lo(_dl_fini), %g1
yann@1
   133
-	ld	[%l7+%g1], %g1
yann@1
   134
-  /* Jump to the user's entry point and deallocate the extra stack we got.  */
yann@1
   135
-	jmp	%l0
yann@1
   136
-	 add	%sp, 6*4, %sp
yann@1
   137
-	.size   _dl_start_user, . - _dl_start_user
yann@1
   138
+	.text\n\
yann@1
   139
+	.globl	_start\n\
yann@1
   140
+	.type	_start, @function\n\
yann@1
   141
+	.align	32\n\
yann@1
   142
+_start:\n\
yann@1
   143
+  /* Allocate space for functions to drop their arguments.  */\n\
yann@1
   144
+	sub	%sp, 6*4, %sp\n\
yann@1
   145
+  /* Pass pointer to argument block to _dl_start.  */\n\
yann@1
   146
+	call	_dl_start\n\
yann@1
   147
+	 add	%sp, 22*4, %o0\n\
yann@1
   148
+	/* FALTHRU */\n\
yann@1
   149
+	.globl	_dl_start_user\n\
yann@1
   150
+	.type	_dl_start_user, @function\n\
yann@1
   151
+_dl_start_user:\n\
yann@1
   152
+  /* Load the PIC register.  */\n\
yann@1
   153
+1:	call	2f\n\
yann@1
   154
+	 sethi	%hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7\n\
yann@1
   155
+2:	or	%l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7\n\
yann@1
   156
+	add	%l7, %o7, %l7\n\
yann@1
   157
+  /* Save the user entry point address in %l0 */\n\
yann@1
   158
+	mov	%o0, %l0\n\
yann@1
   159
+  /* Store the highest stack address.  */\n\
yann@1
   160
+	sethi	%hi(__libc_stack_end), %g2\n\
yann@1
   161
+	or	%g2, %lo(__libc_stack_end), %g2\n\
yann@1
   162
+	ld	[%l7 + %g2], %l1\n\
yann@1
   163
+	sethi	%hi(_dl_skip_args), %g2\n\
yann@1
   164
+	add	%sp, 6*4, %l2\n\
yann@1
   165
+	or	%g2, %lo(_dl_skip_args), %g2\n\
yann@1
   166
+	st	%l2, [%l1]\n\
yann@1
   167
+  /* See if we were run as a command with the executable file name as an\n\
yann@1
   168
+     extra leading argument.  If so, adjust the contents of the stack.  */\n\
yann@1
   169
+	ld	[%l7+%g2], %i0\n\
yann@1
   170
+	ld	[%i0], %i0\n\
yann@1
   171
+	tst	%i0\n\
yann@1
   172
+	beq	3f\n\
yann@1
   173
+	 ld	[%sp+22*4], %i5		/* load argc */\n\
yann@1
   174
+	/* Find out how far to shift.  */\n\
yann@1
   175
+	sethi	%hi(_dl_argv), %l3\n\
yann@1
   176
+	or	%l3, %lo(_dl_argv), %l3\n\
yann@1
   177
+	ld	[%l7+%l3], %l3\n\
yann@1
   178
+	sub	%i5, %i0, %i5\n\
yann@1
   179
+	ld	[%l3], %l4\n\
yann@1
   180
+	sll	%i0, 2, %i2\n\
yann@1
   181
+	st	%i5, [%sp+22*4]\n\
yann@1
   182
+	sub	%l4, %i2, %l4\n\
yann@1
   183
+	add	%sp, 23*4, %i1\n\
yann@1
   184
+	add	%i1, %i2, %i2\n\
yann@1
   185
+	st	%l4, [%l3]\n\
yann@1
   186
+	/* Copy down argv */\n\
yann@1
   187
+21:	ld	[%i2], %i3\n\
yann@1
   188
+	add	%i2, 4, %i2\n\
yann@1
   189
+	tst	%i3\n\
yann@1
   190
+	st	%i3, [%i1]\n\
yann@1
   191
+	bne	21b\n\
yann@1
   192
+	 add	%i1, 4, %i1\n\
yann@1
   193
+	/* Copy down env */\n\
yann@1
   194
+22:	ld	[%i2], %i3\n\
yann@1
   195
+	add	%i2, 4, %i2\n\
yann@1
   196
+	tst	%i3\n\
yann@1
   197
+	st	%i3, [%i1]\n\
yann@1
   198
+	bne	22b\n\
yann@1
   199
+	 add	%i1, 4, %i1\n\
yann@1
   200
+	/* Copy down auxiliary table.  */\n\
yann@1
   201
+23:	ld	[%i2], %i3\n\
yann@1
   202
+	ld	[%i2+4], %i4\n\
yann@1
   203
+	add	%i2, 8, %i2\n\
yann@1
   204
+	tst	%i3\n\
yann@1
   205
+	st	%i3, [%i1]\n\
yann@1
   206
+	st	%i4, [%i1+4]\n\
yann@1
   207
+	bne	23b\n\
yann@1
   208
+	 add	%i1, 8, %i1\n\
yann@1
   209
+  /* %o0 = _dl_loaded, %o1 = argc, %o2 = argv, %o3 = envp.  */\n\
yann@1
   210
+3:	sethi	%hi(_dl_loaded), %o0\n\
yann@1
   211
+	add	%sp, 23*4, %o2\n\
yann@1
   212
+	orcc	%o0, %lo(_dl_loaded), %o0\n\
yann@1
   213
+	sll	%i5, 2, %o3\n\
yann@1
   214
+	ld	[%l7+%o0], %o0\n\
yann@1
   215
+	add	%o3, 4, %o3\n\
yann@1
   216
+	mov	%i5, %o1\n\
yann@1
   217
+	add	%o2, %o3, %o3\n\
yann@1
   218
+	call	_dl_init\n\
yann@1
   219
+	 ld	[%o0], %o0\n\
yann@1
   220
+  /* Pass our finalizer function to the user in %g1.  */\n\
yann@1
   221
+	sethi	%hi(_dl_fini), %g1\n\
yann@1
   222
+	or	%g1, %lo(_dl_fini), %g1\n\
yann@1
   223
+	ld	[%l7+%g1], %g1\n\
yann@1
   224
+  /* Jump to the user's entry point and deallocate the extra stack we got.  */\n\
yann@1
   225
+	jmp	%l0\n\
yann@1
   226
+	 add	%sp, 6*4, %sp\n\
yann@1
   227
+	.size   _dl_start_user, . - _dl_start_user\n\
yann@1
   228
 	.previous");
yann@1
   229
 
yann@1
   230
 static inline Elf32_Addr