From daac729f4d7d13b64e64492f01287145f2c14b53 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Thu, 9 Mar 2006 06:16:28 +0000 Subject: [PATCH] Make the new and old front-ends more similar: now neither uses __main. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26629 91177308-0d34-0410-b5e6-96231b3b80d8 --- runtime/GCCLibraries/crtend/Makefile | 4 +- runtime/GCCLibraries/crtend/README.txt | 2 +- runtime/GCCLibraries/crtend/crtend.c | 59 +------------------------- runtime/GCCLibraries/crtend/listend.ll | 23 ---------- 4 files changed, 5 insertions(+), 83 deletions(-) delete mode 100644 runtime/GCCLibraries/crtend/listend.ll diff --git a/runtime/GCCLibraries/crtend/Makefile b/runtime/GCCLibraries/crtend/Makefile index 285f4be6d50..04e414fad67 100644 --- a/runtime/GCCLibraries/crtend/Makefile +++ b/runtime/GCCLibraries/crtend/Makefile @@ -20,7 +20,7 @@ DONT_BUILD_RELINKED = 1 LIBRARYNAME = crtend BYTECODE_DESTINATION = $(CFERuntimeLibDir) -MainSrc := crtend.c listend.ll +MainSrc := crtend.c GenericEHSrc := Exception.cpp SJLJEHSrc := SJLJ-Exception.cpp @@ -29,7 +29,7 @@ EXTRA_DIST := $(MainSrc) $(GenericEHSrc) $(SJLJEHSrc) \ include $(LEVEL)/Makefile.common -MainObj := $(ObjDir)/crtend.bc $(ObjDir)/listend.bc +MainObj := $(ObjDir)/crtend.bc GenericEHObj := $(ObjDir)/Exception.bc SJLJEHObj := $(ObjDir)/SJLJ-Exception.bc diff --git a/runtime/GCCLibraries/crtend/README.txt b/runtime/GCCLibraries/crtend/README.txt index ff070c442c2..a763cb26dd3 100644 --- a/runtime/GCCLibraries/crtend/README.txt +++ b/runtime/GCCLibraries/crtend/README.txt @@ -1,7 +1,7 @@ This directory contains the C and C++ runtime libraries for the LLVM GCC front-ends. It is composed of four distinct pieces: -1. __main and static ctor/dtor support. This is used by both C and C++ codes. +1. __main: now dead, but provided for compatibility. 2. Generic EH support routines. This is used by C/C++ programs that use setjmp/longjmp, and by C++ programs that make use of exceptions. diff --git a/runtime/GCCLibraries/crtend/crtend.c b/runtime/GCCLibraries/crtend/crtend.c index 74e7831deeb..561b6fd2415 100644 --- a/runtime/GCCLibraries/crtend/crtend.c +++ b/runtime/GCCLibraries/crtend/crtend.c @@ -7,65 +7,10 @@ * *===----------------------------------------------------------------------===* * - * This file defines the __main function, which is used to run static - * constructors and destructors in C++ programs, or with C programs that use GCC - * extensions to accomplish the same effect. - * - * The main data structures used to implement this functionality is the - * llvm.global_ctors and llvm.global_dtors lists, which are null terminated - * lists of TorRec (defined below) structures. + * This file defines the __main function, which we preserve for backwards + * compatibility. * \*===----------------------------------------------------------------------===*/ -#include - -/* TorRec - The record type for each element of the ctor/dtor list */ -typedef struct TorRec { - int Priority; - void (*FP)(void); -} TorRec; - -/* __llvm_getGlobalCtors, __llvm_getGlobalDtors - Interface to the LLVM - * listend.ll file to get access to the start of the ctor and dtor lists... - */ -TorRec *__llvm_getGlobalCtors(void); -TorRec *__llvm_getGlobalDtors(void); - -static void run_destructors(void); - -/* __main - A call to this function is automatically inserted into the top of - * the "main" function in the program compiled. This function is responsible - * for calling static constructors before the program starts executing. - */ void __main(void) { - /* Loop over all of the constructor records, calling each function pointer. */ - TorRec *R = __llvm_getGlobalCtors(); - - /* Recursively calling main is not legal C, but lots of people do it for - * testing stuff. We might as well work for them. - */ - static _Bool Initialized = 0; - if (Initialized) return; - Initialized = 1; - - /* Only register the global dtor handler if there is at least one global - * dtor! - */ - if (__llvm_getGlobalDtors()[0].FP) - if (atexit(run_destructors)) - abort(); /* Should be able to install ONE atexit handler! */ - - /* FIXME: This should sort the list by priority! */ - if (R->FP) - for (; R->FP; ++R) - R->FP(); -} - -static void run_destructors(void) { - /* Loop over all of the destructor records, calling each function pointer. */ - TorRec *R = __llvm_getGlobalDtors(); - - /* FIXME: This should sort the list by priority! */ - for (; R->FP; ++R) - R->FP(); } diff --git a/runtime/GCCLibraries/crtend/listend.ll b/runtime/GCCLibraries/crtend/listend.ll deleted file mode 100644 index a8cee070c9f..00000000000 --- a/runtime/GCCLibraries/crtend/listend.ll +++ /dev/null @@ -1,23 +0,0 @@ -; global_ctors/global_dtors terminator: this is used to add a terminating null -; value to the initialization list. - -%struct..TorRec = type { int, void ()* } - -%llvm.global_ctors = appending global [1 x %struct..TorRec] [ - %struct..TorRec { int 2147483647, void ()* null } - ] - -%llvm.global_dtors = appending global [1 x %struct..TorRec] [ - %struct..TorRec { int 2147483647, void ()* null } - ] - -implementation - -%struct..TorRec* %__llvm_getGlobalCtors() { - ret %struct..TorRec* getelementptr ([1 x %struct..TorRec]* %llvm.global_ctors, - long 0, long 0) -} -%struct..TorRec* %__llvm_getGlobalDtors() { - ret %struct..TorRec* getelementptr ([1 x %struct..TorRec]* %llvm.global_dtors, - long 0, long 0) -}