[Mono-dev] [PATCH]: Avoid --with-static_mono=no problems on Linux/Sparc

David S. Miller davem at davemloft.net
Tue Apr 4 18:42:35 EDT 2006


From: "Zoltan Varga" <vargaz at gmail.com>
Date: Wed, 5 Apr 2006 00:28:25 +0200

>   The patch no longer applies cleanly to gcconfig.h in mono SVN.

Here's an updated version:

2006-04-04  David S. Miller  <davem at sunset.davemloft.net>

	* include/private/gcconfig.h (LINUX and SPARC): Do not
	use _etest and GC_SysVGetDataStart() to figure out DATASTART.
	Instead use either SEARCH_FOR_DATA_START or __environ, based
	upin GLIBC version.

--- include/private/gcconfig.h.~1~	2006-04-04 14:14:58.000000000 -0700
+++ include/private/gcconfig.h	2006-04-04 15:31:57.000000000 -0700
@@ -990,16 +990,24 @@
 #     else
           Linux Sparc/a.out not supported
 #     endif
-      extern int _end[];
-      extern int _etext[];
-#     define DATAEND (_end)
 #     define SVR4
-      extern ptr_t GC_SysVGetDataStart();
-#     ifdef __arch64__
-#	define DATASTART GC_SysVGetDataStart(0x100000, _etext)
+#     include <features.h>
+#     if defined(__GLIBC__) && __GLIBC__ >= 2
+#	 define SEARCH_FOR_DATA_START
 #     else
-#       define DATASTART GC_SysVGetDataStart(0x10000, _etext)
+          extern char **__environ;
+#         define DATASTART ((ptr_t)(&__environ))
+		      /* hideous kludge: __environ is the first */
+		      /* word in crt0.o, and delimits the start */
+		      /* of the data segment, no matter which   */
+		      /* ld options were passed through.        */
+		      /* We could use _etext instead, but that  */
+		      /* would include .rodata, which may       */
+		      /* contain large read-only data tables    */
+		      /* that we'd rather not scan.		*/
 #     endif
+      extern int _end[];
+#     define DATAEND (_end)
 #     define LINUX_STACKBOTTOM
 #   endif
 #   ifdef OPENBSD



More information about the Mono-devel-list mailing list