mirror of
https://github.com/freebsd/freebsd-src.git
synced 2024-11-30 04:22:44 +00:00
Changed the dimensions of __CTOR_LIST__ and __DTOR_LIST__ from 0
to 2. This makes them agree with the declarations in libgcc, and clears the way once again for linking c++rt0.o into all libraries, and eliminating CPLUSPLUSLIB from <bsd.lib.mk>. (I have not made that change yet, because there is still a bootstrapping problem for "make world".) Also, removed a check which ensured that the constructor count in the first word of __CTOR_LIST__ was greater than zero before traversing the list. I had added that check earlier, but it is no longer necessary, now that there is guaranteed to be at least 2 words in __CTOR_LIST__.
This commit is contained in:
parent
53ee9bec58
commit
89370a31f2
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=14161
@ -27,7 +27,7 @@
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: c++rt0.c,v 1.3 1995/06/27 09:53:24 dfr Exp $
|
||||
* $Id: c++rt0.c,v 1.4 1996/01/15 17:53:25 jdp Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -38,8 +38,8 @@
|
||||
* number of pointers in each.
|
||||
* The tables are also null-terminated.
|
||||
*/
|
||||
void (*__CTOR_LIST__[0])(void);
|
||||
void (*__DTOR_LIST__[0])(void);
|
||||
void (*__CTOR_LIST__[2])(void);
|
||||
void (*__DTOR_LIST__[2])(void);
|
||||
|
||||
static void
|
||||
__dtors(void)
|
||||
@ -54,18 +54,10 @@ __dtors(void)
|
||||
static void
|
||||
__ctors(void)
|
||||
{
|
||||
/*
|
||||
* If the shared library doesn't have any static constructors in it,
|
||||
* then __CTOR_LIST__ will come out as a simple COMMON region of
|
||||
* 4 bytes. That is why we have to check the count in the first
|
||||
* word.
|
||||
*/
|
||||
if ((unsigned long) __CTOR_LIST__[0] > 0) {
|
||||
void (**p)(void) = __CTOR_LIST__ + 1;
|
||||
void (**p)(void) = __CTOR_LIST__ + 1;
|
||||
|
||||
while (*p)
|
||||
(**p++)();
|
||||
}
|
||||
while (*p)
|
||||
(**p++)();
|
||||
}
|
||||
|
||||
extern void __init() asm(".init");
|
||||
|
Loading…
Reference in New Issue
Block a user