59 lines
1.5 KiB
C
59 lines
1.5 KiB
C
$NetBSD: patch-libf95.a-0.93_runtime_main.c,v 1.3 2014/02/17 16:49:14 jperkin Exp $
|
|
|
|
* fixes missing restore stack address. PR pkg/47906
|
|
* Make MAIN_ weak to allow linking libf95 dynamically.
|
|
|
|
--- libf95.a-0.93/runtime/main.c.orig 2010-04-18 15:47:28.000000000 +0000
|
|
+++ libf95.a-0.93/runtime/main.c
|
|
@@ -37,11 +37,14 @@
|
|
void __main(void) {}
|
|
#endif
|
|
|
|
-
|
|
-
|
|
-
|
|
/* main()-- Entry point for the fortran program */
|
|
-void MAIN_(void);
|
|
+#ifdef __APPLE__
|
|
+void MAIN_(void);
|
|
+#elif __GNUC__ - 0 == 4 && __GNUC_MINOR__ < 2
|
|
+extern void weak_MAIN_(void) __attribute__((__weakref__("MAIN_")));
|
|
+#else
|
|
+static void weak_MAIN_(void) __attribute__((__weakref__("MAIN_")));
|
|
+#endif
|
|
|
|
int main(int argc, char *argv[]) {
|
|
|
|
@@ -50,17 +53,30 @@ int main(int argc, char *argv[]) {
|
|
* unaligned. */
|
|
|
|
#if HAVE_REAL_10 == 1 || HAVE_REAL_10 == 2
|
|
+ int diff;
|
|
asm("mov %%esp, %%eax\n"
|
|
"and $0x04, %%eax\n"
|
|
- "sub %%eax, %%esp\n" : : : "%eax");
|
|
+ "movl %%eax, %0\n"
|
|
+ "sub %%eax, %%esp\n" : "=r"(diff) : : "%eax");
|
|
#endif
|
|
|
|
g95_runtime_start(argc, argv);
|
|
|
|
- MAIN_(); /* Call the Fortran main program. */
|
|
+#ifdef __APPLE__
|
|
+ if (MAIN_)
|
|
+ MAIN_(); /* Call the Fortran main program. */
|
|
+#else
|
|
+ if (weak_MAIN_)
|
|
+ weak_MAIN_(); /* Call the Fortran main program. */
|
|
+#endif
|
|
|
|
memory_done();
|
|
g95_runtime_stop();
|
|
|
|
+#if HAVE_REAL_10 == 1 || HAVE_REAL_10 == 2
|
|
+ asm("mov %0, %%eax\n"
|
|
+ "add %%eax, %%esp\n" : : "r"(diff) : "%eax");
|
|
+#endif
|
|
+
|
|
return 0;
|
|
}
|