summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xextra/scripts/initfini.pl13
-rw-r--r--libc/sysdeps/linux/common/initfini.c4
2 files changed, 9 insertions, 8 deletions
diff --git a/extra/scripts/initfini.pl b/extra/scripts/initfini.pl
index ec6bdb36b..7c592daac 100755
--- a/extra/scripts/initfini.pl
+++ b/extra/scripts/initfini.pl
@@ -31,19 +31,20 @@ if ($initfini) {
} else {
die "(fatal) Please give me an --initfini argument$!";
}
-while($line = <INITFINI>) {
- if ($line =~ /^\w\.endp/) {
+while(<INITFINI>) {
+ if (/\.endp/) {
$endp=1;
next;
}
- if ($line =~ /^\w\.end/) {
+ if (/\.end/) {
$end=1;
next;
}
- if ($line =~ /\w\.align\(.*\)/) {
+ if (/\.align(.*)/) {
$alignval=$1;
next;
}
+
}
close(INITFINI);
@@ -79,8 +80,12 @@ while(<INITFINI>) {
}
if (/PROLOG_BEGINS/) {
$omitcrti = 0;
+ $omitcrtn = 0;
next;
}
+ if (/^_init:/ || /^_fini:/) {
+ $omitcrtn = 1;
+ }
if (/PROLOG_PAUSES/) {
$omitcrti = 1;
next;
diff --git a/libc/sysdeps/linux/common/initfini.c b/libc/sysdeps/linux/common/initfini.c
index 4f95fbfd1..a0b2869d9 100644
--- a/libc/sysdeps/linux/common/initfini.c
+++ b/libc/sysdeps/linux/common/initfini.c
@@ -101,9 +101,7 @@ _init (void)
/* Now the epilog. */
asm ("\n/*@_init_PROLOG_ENDS*/");
asm ("\n/*@_init_EPILOG_BEGINS*/");
- SECTION(".init");
}
-asm ("END_INIT");
/* End of the _init epilog, beginning of the _fini prolog. */
asm ("\n/*@_init_EPILOG_ENDS*/");
@@ -130,9 +128,7 @@ _fini (void)
/* Beginning of the _fini epilog. */
asm ("\n/*@_fini_EPILOG_BEGINS*/");
- SECTION (".fini");
}
-asm ("END_FINI");
/* End of the _fini epilog. Any further generated assembly (e.g. .ident)
is shared between both crt files. */