1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
|
#
# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
#
--- glibc-2.2.5/sysdeps/m68k/dl-machine.h~dl-machine-m68k.patch 2004-09-03 19:00:33.000000000 -0500
+++ glibc-2.2.5/sysdeps/m68k/dl-machine.h 2004-09-03 19:00:37.000000000 -0500
@@ -1,5 +1,5 @@
/* Machine-dependent ELF dynamic relocation inline functions. m68k version.
- Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc.
+ Copyright (C) 1996-2001, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -85,11 +85,11 @@
{
got[2] = (Elf32_Addr) &_dl_runtime_profile;
- if (_dl_name_match_p (_dl_profile, l))
+ if (_dl_name_match_p (GL(dl_profile), l))
{
/* This is the object we are looking for. Say that we really
want profiling and the timers are started. */
- _dl_profile_map = l;
+ GL(dl_profile_map) = l;
}
}
else
@@ -104,22 +104,22 @@
/* This code is used in dl-runtime.c to call the `fixup' function
and then redirect to the address it returns. */
#define TRAMPOLINE_TEMPLATE(tramp_name, fixup_name) \
-"| Trampoline for " #fixup_name "
- .globl " #tramp_name "
- .type " #tramp_name ", @function
-" #tramp_name ":
- | Save %a0 (struct return address) and %a1.
- move.l %a0, -(%sp)
- move.l %a1, -(%sp)
- | Call the real address resolver.
- jbsr " #fixup_name "
- | Restore register %a0 and %a1.
- move.l (%sp)+, %a1
- move.l (%sp)+, %a0
- | Pop parameters
- addq.l #8, %sp
- | Call real function.
- jmp (%d0)
+"| Trampoline for " #fixup_name "\n\
+ .globl " #tramp_name "\n\
+ .type " #tramp_name ", @function\n\
+" #tramp_name ":\n\
+ | Save %a0 (struct return address) and %a1.\n\
+ move.l %a0, -(%sp)\n\
+ move.l %a1, -(%sp)\n\
+ | Call the real address resolver.\n\
+ jbsr " #fixup_name "\n\
+ | Restore register %a0 and %a1.\n\
+ move.l (%sp)+, %a1\n\
+ move.l (%sp)+, %a0\n\
+ | Pop parameters\n\
+ addq.l #8, %sp\n\
+ | Call real function.\n\
+ jmp (%d0)\n\
.size " #tramp_name ", . - " #tramp_name "\n"
#ifndef PROF
#define ELF_MACHINE_RUNTIME_TRAMPOLINE \
@@ -143,50 +143,50 @@
its return value is the user program's entry point. */
#define RTLD_START asm ("\
- .text
- .globl _start
- .type _start,@function
-_start:
- move.l %sp, -(%sp)
- jbsr _dl_start
- addq.l #4, %sp
- /* FALLTHRU */
-
- .globl _dl_start_user
- .type _dl_start_user,@function
-_dl_start_user:
- | Save the user entry point address in %a4.
- move.l %d0, %a4
- | Point %a5 at the GOT.
- lea _GLOBAL_OFFSET_TABLE_@GOTPC(%pc), %a5
- | Remember the highest stack address.
- move.l %sp, ([__libc_stack_end@GOT.w, %a5])
- | See if we were run as a command with the executable file
- | name as an extra leading argument.
- move.l ([_dl_skip_args@GOT.w, %a5]), %d0
- | Pop the original argument count
- move.l (%sp)+, %d1
- | Subtract _dl_skip_args from it.
- sub.l %d0, %d1
- | Adjust the stack pointer to skip _dl_skip_args words.
- lea (%sp, %d0*4), %sp
- | Push back the modified argument count.
- move.l %d1, -(%sp)
- # Call _dl_init (struct link_map *main_map, int argc, char **argv, char **env)
- pea 8(%sp, %d1*4)
- pea 8(%sp)
- move.l %d1, -(%sp)
- move.l ([_dl_loaded@GOT.w, %a5]), -(%sp)
- jbsr _dl_init@PLTPC
- addq.l #8, %sp
- addq.l #8, %sp
- | Pass our finalizer function to the user in %a1.
- move.l _dl_fini@GOT.w(%a5), %a1
- | Initialize %fp with the stack pointer.
- move.l %sp, %fp
- | Jump to the user's entry point.
- jmp (%a4)
- .size _dl_start_user, . - _dl_start_user
+ .text\n\
+ .globl _start\n\
+ .type _start,@function\n\
+_start:\n\
+ move.l %sp, -(%sp)\n\
+ jbsr _dl_start\n\
+ addq.l #4, %sp\n\
+ /* FALLTHRU */\n\
+\n\
+ .globl _dl_start_user\n\
+ .type _dl_start_user,@function\n\
+_dl_start_user:\n\
+ | Save the user entry point address in %a4.\n\
+ move.l %d0, %a4\n\
+ | Point %a5 at the GOT.\n\
+ lea _GLOBAL_OFFSET_TABLE_@GOTPC(%pc), %a5\n\
+ | Remember the highest stack address.\n\
+ move.l %sp, ([__libc_stack_end@GOT.w, %a5])\n\
+ | See if we were run as a command with the executable file\n\
+ | name as an extra leading argument.\n\
+ move.l ([_dl_skip_args@GOT.w, %a5]), %d0\n\
+ | Pop the original argument count\n\
+ move.l (%sp)+, %d1\n\
+ | Subtract _dl_skip_args from it.\n\
+ sub.l %d0, %d1\n\
+ | Adjust the stack pointer to skip _dl_skip_args words.\n\
+ lea (%sp, %d0*4), %sp\n\
+ | Push back the modified argument count.\n\
+ move.l %d1, -(%sp)\n\
+ # Call _dl_init (struct link_map *main_map, int argc, char **argv, char **env)\n\
+ pea 8(%sp, %d1*4)\n\
+ pea 8(%sp)\n\
+ move.l %d1, -(%sp)\n\
+ move.l ([_rtld_global@GOT.w, %a5]), -(%sp)\n\
+ jbsr _dl_init@PLTPC\n\
+ addq.l #8, %sp\n\
+ addq.l #8, %sp\n\
+ | Pass our finalizer function to the user in %a1.\n\
+ move.l _dl_fini@GOT.w(%a5), %a1\n\
+ | Initialize %fp with the stack pointer.\n\
+ move.l %sp, %fp\n\
+ | Jump to the user's entry point.\n\
+ jmp (%a4)\n\
+ .size _dl_start_user, . - _dl_start_user\n\
.previous");
/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry, so
@@ -251,7 +251,7 @@
found. */
break;
if (sym->st_size > refsym->st_size
- || (sym->st_size < refsym->st_size && _dl_verbose))
+ || (sym->st_size < refsym->st_size && GL(dl_verbose)))
{
extern char **_dl_argv;
const char *strtab;
|