aboutsummaryrefslogtreecommitdiff
path: root/lib/csu/powerpc
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2012-03-11 20:04:09 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2012-03-11 20:04:09 +0000
commita22748dbd9f365c8a5f0483a973c2295b245b94c (patch)
tree87fa5b72982e5d814e7f1852737adcdcb1b08fc7 /lib/csu/powerpc
parent83aa9cc00c2d83d05a0efe7a1496d8aab4a153bb (diff)
Notes
Diffstat (limited to 'lib/csu/powerpc')
-rw-r--r--lib/csu/powerpc/Makefile6
-rw-r--r--lib/csu/powerpc/crt1.c27
2 files changed, 9 insertions, 24 deletions
diff --git a/lib/csu/powerpc/Makefile b/lib/csu/powerpc/Makefile
index 095a9ad14a68..1e1d1fa2d55a 100644
--- a/lib/csu/powerpc/Makefile
+++ b/lib/csu/powerpc/Makefile
@@ -18,21 +18,21 @@ CLEANFILES+= crt1.s gcrt1.s Scrt1.s
crt1.s: crt1.c
${CC} ${CFLAGS} -S -o ${.TARGET} ${.CURDIR}/crt1.c
- sed -i "" -e '/\.note\.ABI-tag/s/progbits/note/' ${.TARGET}
+ sed ${SED_FIX_NOTE} ${.TARGET}
crt1.o: crt1.s
${CC} ${CFLAGS} -c -o ${.TARGET} crt1.s
gcrt1.s: crt1.c
${CC} ${CFLAGS} -DGCRT -S -o ${.TARGET} ${.CURDIR}/crt1.c
- sed -i "" -e '/\.note\.ABI-tag/s/progbits/note/' ${.TARGET}
+ sed ${SED_FIX_NOTE} ${.TARGET}
gcrt1.o: gcrt1.s
${CC} ${CFLAGS} -c -o ${.TARGET} gcrt1.s
Scrt1.s: crt1.c
${CC} ${CFLAGS} -fPIC -DPIC -S -o ${.TARGET} ${.CURDIR}/crt1.c
- sed -i "" -e '/\.note\.ABI-tag/s/progbits/note/' ${.TARGET}
+ sed ${SED_FIX_NOTE} ${.TARGET}
Scrt1.o: Scrt1.s
${CC} ${CFLAGS} -c -o ${.TARGET} Scrt1.s
diff --git a/lib/csu/powerpc/crt1.c b/lib/csu/powerpc/crt1.c
index 67de2f5d6f42..c3be90da3481 100644
--- a/lib/csu/powerpc/crt1.c
+++ b/lib/csu/powerpc/crt1.c
@@ -52,17 +52,11 @@ __FBSDID("$FreeBSD$");
#include "libc_private.h"
#include "crtbrand.c"
+#include "ignore_init.c"
struct Struct_Obj_Entry;
struct ps_strings;
-extern int _DYNAMIC;
-#pragma weak _DYNAMIC
-
-extern void _fini(void);
-extern void _init(void);
-extern int main(int, char **, char **);
-
#ifdef GCRT
extern void _mcleanup(void);
extern void monstartup(void *, void *);
@@ -70,8 +64,6 @@ extern int eprol;
extern int etext;
#endif
-char **environ;
-const char *__progname = "";
struct ps_strings *__ps_strings;
void _start(int, char **, char **, const struct Struct_Obj_Entry *,
@@ -88,16 +80,11 @@ _start(int argc, char **argv, char **env,
const struct Struct_Obj_Entry *obj __unused, void (*cleanup)(void),
struct ps_strings *ps_strings)
{
- const char *s;
environ = env;
- if (argc > 0 && argv[0] != NULL) {
- __progname = argv[0];
- for (s = __progname; *s != '\0'; s++)
- if (*s == '/')
- __progname = s + 1;
- }
+ if (argc > 0 && argv[0] != NULL)
+ handle_progname(argv[0]);
if (ps_strings != (struct ps_strings *)0)
__ps_strings = ps_strings;
@@ -109,13 +96,11 @@ _start(int argc, char **argv, char **env,
#ifdef GCRT
atexit(_mcleanup);
-#endif
- atexit(_fini);
-#ifdef GCRT
monstartup(&eprol, &etext);
#endif
- _init();
- exit( main(argc, argv, env) );
+
+ handle_static_init(argc, argv, env);
+ exit(main(argc, argv, env));
}
#ifdef GCRT