[llvm-commits] llvm-gcc patch
Chris Lattner
clattner at apple.com
Sun Oct 29 09:39:51 PST 2006
I just committed Anton's patch for PR973. This should greatly improve
static ctor/dtor handling on linux.
-Chris
Index: crtstuff.c
===================================================================
--- crtstuff.c (revision 119298)
+++ crtstuff.c (working copy)
@@ -51,9 +51,6 @@
This file must be compiled with gcc. */
-/* APPLE LOCAL begin LLVM */
-#ifndef __llvm__ /* FIXME: add inline asm support */
-
/* It is incorrect to include config.h here, because this file is being
compiled for the target, and hence definitions concerning only
the host
do not apply. */
@@ -69,6 +66,13 @@
#include "tm.h"
#include "unwind-dw2-fde.h"
+/* APPLE LOCAL begin LLVM */
+#ifdef __llvm__
+ /* FIXME: Remove when external weak linkage will be alive. */
+ #undef JCR_SECTION_NAME
+#endif
+/* APPLE LOCAL end LLVM */
+
#ifndef FORCE_CODE_SECTION_ALIGN
# define FORCE_CODE_SECTION_ALIGN
#endif
@@ -177,11 +181,25 @@
static func_ptr force_to_data[1] __attribute__ ((__unused__)) = { };
asm (CTORS_SECTION_ASM_OP);
STATIC func_ptr __CTOR_LIST__[1]
+/* APPLE LOCAL begin LLVM */
+#ifdef __llvm__
+/* FIXME: Remove when external weak linkage will be alive. */
+ __attribute__ ((__used__, aligned(sizeof(func_ptr))))
+#else
__attribute__ ((__unused__, aligned(sizeof(func_ptr))))
+#endif
+/* APPLE LOCAL end LLVM */
= { (func_ptr) (-1) };
#else
STATIC func_ptr __CTOR_LIST__[1]
- __attribute__ ((__unused__, section(".ctors"), aligned(sizeof
(func_ptr))))
+/* APPLE LOCAL begin LLVM */
+#ifdef __llvm__
+/* FIXME: Remove when external weak linkage will be alive. */
+ __attribute__ ((__used__, section(".ctors"), aligned(sizeof
(func_ptr))))
+#else
+ __attribute__ ((__unused__, section(".ctors"), aligned(sizeof
(func_ptr))))
+#endif
+/* APPLE LOCAL end LLVM */
= { (func_ptr) (-1) };
#endif /* __CTOR_LIST__ alternatives */
@@ -449,11 +467,25 @@
#elif defined(DTORS_SECTION_ASM_OP)
asm (DTORS_SECTION_ASM_OP);
STATIC func_ptr __DTOR_END__[1]
+/* APPLE LOCAL begin LLVM */
+#ifdef __llvm__
+/* FIXME: Remove when external weak linkage will be alive. */
+__attribute__ ((__used__, aligned(sizeof(func_ptr))))
+#else
__attribute__ ((unused, aligned(sizeof(func_ptr))))
+#endif
+/* APPLE LOCAL end LLVM */
= { (func_ptr) 0 };
#else
STATIC func_ptr __DTOR_END__[1]
- __attribute__((unused, section(".dtors"), aligned(sizeof(func_ptr))))
+/* APPLE LOCAL begin LLVM */
+#ifdef __llvm__
+/* FIXME: Remove when external weak linkage will be alive. */
+ __attribute__((__used__, section(".dtors"), aligned(sizeof
(func_ptr))))
+#else
+ __attribute__((unused, section(".dtors"), aligned(sizeof(func_ptr))))
+#endif
+/* APPLE LOCAL end LLVM */
= { (func_ptr) 0 };
#endif
@@ -558,5 +590,3 @@
#error "One of CRT_BEGIN or CRT_END must be defined."
#endif
-#endif
-/* APPLE LOCAL end LLVM */
More information about the llvm-commits
mailing list