summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Configurations/10-main.conf2
-rw-r--r--Configurations/unix-Makefile.tmpl2
-rw-r--r--providers/fips/self_test.c16
3 files changed, 17 insertions, 3 deletions
diff --git a/Configurations/10-main.conf b/Configurations/10-main.conf
index a07624e96b..138ad8a6ae 100644
--- a/Configurations/10-main.conf
+++ b/Configurations/10-main.conf
@@ -1180,7 +1180,7 @@ my %targets = (
module_ldflags => "-Wl,-G,-bsymbolic,-bnoentry",
shared_ldflag => "-Wl,-G,-bsymbolic,-bnoentry",
shared_defflag => "-Wl,-bE:",
- shared_fipsflag => "-Wl,-binitfini:init:cleanup",
+ shared_fipsflag => "-Wl,-binitfini:_init:_cleanup",
perl_platform => 'AIX',
},
"aix-gcc" => {
diff --git a/Configurations/unix-Makefile.tmpl b/Configurations/unix-Makefile.tmpl
index 80f38dd1a2..ff04e65163 100644
--- a/Configurations/unix-Makefile.tmpl
+++ b/Configurations/unix-Makefile.tmpl
@@ -1838,7 +1838,7 @@ EOF
my @deps = compute_lib_depends(@{$args{deps}});
my $shared_def = join("", map { ' '.$target{shared_defflag}.$_ } @defs);
# Next line needs to become "less magic" (see PR #11950)
- $shared_def .= ' '.$target{shared_fipsflag} if (m/providers\/fips/ && defined $target{shared_fipsflag});
+ $shared_def .= ' '.$target{shared_fipsflag} if (defined $target{shared_fipsflag} && $shared_def =~ m/providers\/fips/);
my $objs = join(" \\\n\t\t", fill_lines(' ', $COLUMNS - 16, @objs));
my $deps = join(" \\\n" . ' ' x (length($dso) + 2),
fill_lines(' ', $COLUMNS - length($dso) - 2,
diff --git a/providers/fips/self_test.c b/providers/fips/self_test.c
index a4d7a4ffe2..e6813e292d 100644
--- a/providers/fips/self_test.c
+++ b/providers/fips/self_test.c
@@ -105,10 +105,24 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
}
return TRUE;
}
-#elif defined(__sun) || defined(_AIX)
+#elif defined(__sun)
# pragma init(init)
# pragma fini(cleanup)
+#elif defined(_AIX)
+void _init(void);
+void _cleanup(void);
+# pragma init(_init)
+# pragma fini(_cleanup)
+void _init(void)
+{
+ init();
+}
+void _cleanup(void)
+{
+ cleanup();
+}
+
#elif defined(__hpux)
# pragma init "init"
# pragma fini "cleanup"