diff options
Diffstat (limited to 'csu')
-rw-r--r-- | csu/Makefile | 161 | ||||
-rw-r--r-- | csu/Versions | 13 | ||||
-rw-r--r-- | csu/abi-note.S | 72 | ||||
-rw-r--r-- | csu/check_fds.c | 97 | ||||
-rw-r--r-- | csu/dso_handle.c | 21 | ||||
-rw-r--r-- | csu/elf-init.c | 106 | ||||
-rw-r--r-- | csu/errno-loc.c | 28 | ||||
-rw-r--r-- | csu/errno.c | 35 | ||||
-rw-r--r-- | csu/gmon-start.c | 92 | ||||
-rw-r--r-- | csu/init-first.c | 102 | ||||
-rw-r--r-- | csu/init.c | 26 | ||||
-rw-r--r-- | csu/libc-start.c | 336 | ||||
-rw-r--r-- | csu/libc-tls.c | 217 | ||||
-rw-r--r-- | csu/start.c | 11 | ||||
-rw-r--r-- | csu/sysdep.c | 2 | ||||
-rw-r--r-- | csu/version.c | 74 |
16 files changed, 0 insertions, 1393 deletions
diff --git a/csu/Makefile b/csu/Makefile deleted file mode 100644 index 88646b6e8f..0000000000 --- a/csu/Makefile +++ /dev/null @@ -1,161 +0,0 @@ -# Makefile for csu code for GNU C library. -# Copyright (C) 1995-2017 Free Software Foundation, Inc. -# This file is part of the GNU C Library. - -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. - -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. - -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library; if not, see -# <http://www.gnu.org/licenses/>. - -# This directory contains the C startup code (that which calls main). This -# consists of the startfile, built from start.c and installed as crt0.o -# (traditionally) or crt1.o (for ELF). In ELF we also install crti.o and -# crtn.o, special "initializer" and "finalizer" files used in the link -# to make the .init and .fini sections work right. - -subdir := csu - -include ../Makeconfig - -routines = init-first libc-start $(libc-init) sysdep version check_fds \ - libc-tls elf-init dso_handle -aux = errno -elide-routines.os = libc-tls -static-only-routines = elf-init -csu-dummies = $(filter-out $(start-installed-name),crt1.o Mcrt1.o) -extra-objs = start.o \ - $(start-installed-name) g$(start-installed-name) $(csu-dummies) \ - S$(start-installed-name) -omit-deps = $(patsubst %.o,%,$(start-installed-name) g$(start-installed-name) \ - b$(start-installed-name) $(csu-dummies) \ - S$(start-installed-name)) -install-lib = $(start-installed-name) g$(start-installed-name) $(csu-dummies) -generated += version-info.h -before-compile += $(objpfx)version-info.h - -# No tests are allowed in the csu/ subdirectory because the startup -# code is compiled with special flags. -tests = - -CFLAGS-.o += $(no-stack-protector) -CFLAGS-.op += $(no-stack-protector) -CFLAGS-.os += $(no-stack-protector) - -ifeq (yes,$(build-shared)) -extra-objs += S$(start-installed-name) gmon-start.os -ifneq ($(start-installed-name),$(static-start-installed-name)) -extra-objs += gmon-start.o -endif -install-lib += S$(start-installed-name) -generated += start.os -else -extra-objs += gmon-start.o -endif - -ifneq ($(start-installed-name),$(static-start-installed-name)) -extra-objs += $(static-start-installed-name) g$(static-start-installed-name) -omit-deps += $(patsubst %.o,%,$(static-start-installed-name) \ - g$(static-start-installed-name)) -install-lib += $(static-start-installed-name) g$(static-start-installed-name) -endif - -before-compile += $(objpfx)abi-tag.h -generated += abi-tag.h - -# These are the special initializer/finalizer files. They are always the -# first and last file in the link. crti.o ... crtn.o define the global -# "functions" _init and _fini to run the .init and .fini sections. -crtstuff = crti crtn - -install-lib += $(crtstuff:=.o) -extra-objs += $(crtstuff:=.o) - -extra-objs += abi-note.o init.o -asm-CPPFLAGS += -I$(objpfx). - -include ../Rules - -# Make these in the lib pass so they're available in time to link things with. -subdir_lib: $(extra-objs:%=$(objpfx)%) - -define link-relocatable -$(CC) -nostdlib -nostartfiles -r -o $@ $^ -endef - -ifndef start-installed-name-rule -# We link the ELF startfile along with a SHT_NOTE section indicating -# the kernel ABI the binaries linked with this library will require. -$(objpfx)$(start-installed-name): $(objpfx)start.o $(objpfx)abi-note.o \ - $(objpfx)init.o - $(link-relocatable) -$(objpfx)S$(start-installed-name): $(objpfx)start.os $(objpfx)abi-note.o \ - $(objpfx)init.o - $(link-relocatable) -endif - -# The profiling startfile is made by linking together the normal -# startfile with gmon-start.o, which defines a constructor function -# to turn on profiling code at startup. -ifeq (yes,$(build-shared)) -$(objpfx)g$(start-installed-name): \ - $(objpfx)g%: $(objpfx)S% $(objpfx)gmon-start.os - $(link-relocatable) -ifneq ($(start-installed-name),$(static-start-installed-name)) -$(objpfx)g$(static-start-installed-name): \ - $(objpfx)g%: $(objpfx)% $(objpfx)gmon-start.o - $(link-relocatable) -endif -else -$(addprefix $(objpfx),$(sort g$(start-installed-name) \ - g$(static-start-installed-name))): \ - $(objpfx)g%: $(objpfx)% $(objpfx)gmon-start.o - $(link-relocatable) -endif - -# These extra files are sometimes expected by system standard linking -# procedures, but we have nothing for them to do. So compile empty files. -$(addprefix $(objpfx),$(filter-out $(start-installed-name), $(csu-dummies))):\ - $(before-compile) - $(COMPILE.c) -o $@ -x c /dev/null - -# These headers are used by the startup code. -$(objpfx)abi-tag.h: $(..)abi-tags - $(make-target-directory) - rm -f $@.new - sed -e 's/#.*$$//' -e '/^[ ]*$$/d' $< | \ - while read conf tagos tagver; do \ - test `expr '$(config-machine)-$(config-vendor)-$(config-os)' \ - : "$$conf"` != 0 || continue; \ - ( echo "$$tagos" | \ - sed -e 's/[^0-9xXa-fA-F ]//' \ - -e 's/^/#define __ABI_TAG_OS /'; \ - echo "#ifndef __ABI_TAG_VERSION"; \ - echo "$$tagver" | \ - sed -e 's/[^0-9xXa-fA-F]/ /g' -e 's/ *$$//' \ - -e 's/ /,/g' -e 's/^/# define __ABI_TAG_VERSION /'; \ - echo "#endif" ) > $@.new; \ - done - if test -r $@.new; then mv -f $@.new $@; \ - else echo >&2 'This configuration not matched in $<'; exit 1; fi - -all-Banner-files = $(wildcard $(addsuffix /Banner,\ - $(sort $(subdir-srcdirs) \ - $(sysdeps-srcdirs)))) -$(objpfx)version-info.h: $(common-objpfx)config.make $(all-Banner-files) - $(make-target-directory) - (files="$(all-Banner-files)"; \ - if test -n "$$files"; then \ - printf '"Available extensions:\\n"\n'; \ - sed -e '/^#/d' -e 's/^[[:space:]]*/ /' \ - -e 's/^\(.*\)$$/\"\1\\n\"/' $$files; \ - fi) > $@T - mv -f $@T $@ diff --git a/csu/Versions b/csu/Versions deleted file mode 100644 index 43010c3443..0000000000 --- a/csu/Versions +++ /dev/null @@ -1,13 +0,0 @@ -libc { - GLIBC_2.0 { - # helper functions - __libc_init_first; __libc_start_main; - } - GLIBC_2.1 { - # New special glibc functions. - gnu_get_libc_release; gnu_get_libc_version; - } - GLIBC_PRIVATE { - errno; - } -} diff --git a/csu/abi-note.S b/csu/abi-note.S deleted file mode 100644 index a231296148..0000000000 --- a/csu/abi-note.S +++ /dev/null @@ -1,72 +0,0 @@ -/* Special .init and .fini section support. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -/* Define an ELF note identifying the operating-system ABI that the - executable was created for. The ELF note information identifies a - particular OS or coordinated development effort within which the - ELF header's e_machine value plus (for dynamically linked programs) - the PT_INTERP dynamic linker name and DT_NEEDED shared library - names fully identify the runtime environment required by an - executable. - - The general format of ELF notes is as follows. - Offsets and lengths are bytes or (parenthetical references) to the - values in other fields. - -offset length contents -0 4 length of name -4 4 length of data -8 4 note type -12 (0) vendor name - - null-terminated ASCII string, padded to 4-byte alignment -12+(0) (4) note data, - - The GNU project and cooperating development efforts (including the - Linux community) use note type 1 and a vendor name string of "GNU" - for a note descriptor that indicates ABI requirements. The note data - is four 32-bit words. The first of these is an operating system - number (0=Linux, 1=Hurd, 2=Solaris, ...) and the remaining three - identify the earliest release of that OS that supports this ABI. - See abi-tags (top level) for details. */ - -#include <config.h> -#include <abi-tag.h> /* OS-specific ABI tag value */ - -/* The linker (GNU ld 2.8 and later) recognizes an allocated section whose - name begins with `.note' and creates a PT_NOTE program header entry - pointing at it. */ - - .section ".note.ABI-tag", "a" - .p2align 2 - .long 1f - 0f /* name length */ - .long 3f - 2f /* data length */ - .long 1 /* note type */ -0: .asciz "GNU" /* vendor name */ -1: .p2align 2 -2: .long __ABI_TAG_OS /* note data: the ABI tag */ - .long __ABI_TAG_VERSION -3: .p2align 2 /* pad out section */ diff --git a/csu/check_fds.c b/csu/check_fds.c deleted file mode 100644 index 062c879373..0000000000 --- a/csu/check_fds.c +++ /dev/null @@ -1,97 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <errno.h> -#include <fcntl.h> -#include <paths.h> -#include <unistd.h> -#include <sys/stat.h> -#include <sys/sysmacros.h> - -/* Try to get a machine dependent instruction which will make the - program crash. This is used in case everything else fails. */ -#include <abort-instr.h> -#ifndef ABORT_INSTRUCTION -/* No such instruction is available. */ -# define ABORT_INSTRUCTION -#endif - -#include <device-nrs.h> -#include <not-cancel.h> - - -/* Should other OSes (e.g., Hurd) have different versions which can - be written in a better way? */ -static void -check_one_fd (int fd, int mode) -{ - /* Note that fcntl() with this parameter is not a cancellation point. */ - if (__builtin_expect (__libc_fcntl (fd, F_GETFD), 0) == -1 - && errno == EBADF) - { - const char *name; - dev_t dev; - - /* For writable descriptors we use /dev/full. */ - if ((mode & O_ACCMODE) == O_WRONLY) - { - name = _PATH_DEV "full"; - dev = makedev (DEV_FULL_MAJOR, DEV_FULL_MINOR); - } - else - { - name = _PATH_DEVNULL; - dev = makedev (DEV_NULL_MAJOR, DEV_NULL_MINOR); - } - - /* Something is wrong with this descriptor, it's probably not - opened. Open /dev/null so that the SUID program we are - about to start does not accidentally use this descriptor. */ - int nullfd = open_not_cancel (name, mode, 0); - - /* We are very paranoid here. With all means we try to ensure - that we are actually opening the /dev/null device and nothing - else. - - Note that the following code assumes that STDIN_FILENO, - STDOUT_FILENO, STDERR_FILENO are the three lowest file - decsriptor numbers, in this order. */ - struct stat64 st; - if (__builtin_expect (nullfd != fd, 0) - || __builtin_expect (__fxstat64 (_STAT_VER, fd, &st), 0) != 0 - || __builtin_expect (S_ISCHR (st.st_mode), 1) == 0 - || st.st_rdev != dev) - /* We cannot even give an error message here since it would - run into the same problems. */ - while (1) - /* Try for ever and ever. */ - ABORT_INSTRUCTION; - } -} - - -void -__libc_check_standard_fds (void) -{ - /* Check all three standard file descriptors. The O_NOFOLLOW flag - is really paranoid but some people actually are. If /dev/null - should happen to be a symlink to somewhere else and not the - device commonly known as "/dev/null" we bail out. */ - check_one_fd (STDIN_FILENO, O_WRONLY | O_NOFOLLOW); - check_one_fd (STDOUT_FILENO, O_RDONLY | O_NOFOLLOW); - check_one_fd (STDERR_FILENO, O_RDONLY | O_NOFOLLOW); -} diff --git a/csu/dso_handle.c b/csu/dso_handle.c deleted file mode 100644 index 98648f6fbf..0000000000 --- a/csu/dso_handle.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -/* We have to define __dso_handle ourselves since we do not use gcc's - crtbegin files. */ -const void *const __dso_handle __attribute__ ((__visibility__ ("hidden"))) - = &__dso_handle; diff --git a/csu/elf-init.c b/csu/elf-init.c deleted file mode 100644 index 34ee89b843..0000000000 --- a/csu/elf-init.c +++ /dev/null @@ -1,106 +0,0 @@ -/* Startup support for ELF initializers/finalizers in the main executable. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <stddef.h> - - -/* These magic symbols are provided by the linker. */ -extern void (*__preinit_array_start []) (int, char **, char **) - attribute_hidden; -extern void (*__preinit_array_end []) (int, char **, char **) - attribute_hidden; -extern void (*__init_array_start []) (int, char **, char **) - attribute_hidden; -extern void (*__init_array_end []) (int, char **, char **) - attribute_hidden; -extern void (*__fini_array_start []) (void) attribute_hidden; -extern void (*__fini_array_end []) (void) attribute_hidden; - - -#ifndef NO_INITFINI -/* These function symbols are provided for the .init/.fini section entry - points automagically by the linker. */ -extern void _init (void); -extern void _fini (void); -#endif - - -/* These functions are passed to __libc_start_main by the startup code. - These get statically linked into each program. For dynamically linked - programs, this module will come from libc_nonshared.a and differs from - the libc.a module in that it doesn't call the preinit array. */ - - -void -__libc_csu_init (int argc, char **argv, char **envp) -{ - /* For dynamically linked executables the preinit array is executed by - the dynamic linker (before initializing any shared object). */ - -#ifndef LIBC_NONSHARED - /* For static executables, preinit happens right before init. */ - { - const size_t size = __preinit_array_end - __preinit_array_start; - size_t i; - for (i = 0; i < size; i++) - (*__preinit_array_start [i]) (argc, argv, envp); - } -#endif - -#ifndef NO_INITFINI - _init (); -#endif - - const size_t size = __init_array_end - __init_array_start; - for (size_t i = 0; i < size; i++) - (*__init_array_start [i]) (argc, argv, envp); -} - -/* This function should not be used anymore. We run the executable's - destructor now just like any other. We cannot remove the function, - though. */ -void -__libc_csu_fini (void) -{ -#ifndef LIBC_NONSHARED - size_t i = __fini_array_end - __fini_array_start; - while (i-- > 0) - (*__fini_array_start [i]) (); - -# ifndef NO_INITFINI - _fini (); -# endif -#endif -} diff --git a/csu/errno-loc.c b/csu/errno-loc.c deleted file mode 100644 index ddc4e14df2..0000000000 --- a/csu/errno-loc.c +++ /dev/null @@ -1,28 +0,0 @@ -/* MT support function to get address of `errno' variable, non-threaded - version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <errno.h> -#include <tls.h> - -int * -__errno_location (void) -{ - return &errno; -} -libc_hidden_def (__errno_location) diff --git a/csu/errno.c b/csu/errno.c deleted file mode 100644 index 8b2e3489c2..0000000000 --- a/csu/errno.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Definition of `errno' variable. Canonical version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <errno.h> -#include <tls.h> -#include <dl-sysdep.h> -#undef errno - -#if RTLD_PRIVATE_ERRNO - -/* Code compiled for rtld refers only to this name. */ -int rtld_errno attribute_hidden; - -#else - -__thread int errno; -extern __thread int __libc_errno __attribute__ ((alias ("errno"))) - attribute_hidden; - -#endif diff --git a/csu/gmon-start.c b/csu/gmon-start.c deleted file mode 100644 index a1f92d5e1a..0000000000 --- a/csu/gmon-start.c +++ /dev/null @@ -1,92 +0,0 @@ -/* Code to enable profiling at program startup. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sys/types.h> -#include <sys/gmon.h> -#include <stdlib.h> -#include <unistd.h> -#define __ASSEMBLY__ -#include <entry.h> - -/* Beginning and end of our code segment. We cannot declare them - as the external functions since we want the addresses of those - labels. Taking the address of a function may have different - meanings on different platforms. */ -#ifdef ENTRY_POINT_DECL -ENTRY_POINT_DECL(extern) -#else -extern char ENTRY_POINT[]; -#endif -extern char etext[]; - -#ifndef TEXT_START -# ifdef ENTRY_POINT_DECL -# define TEXT_START ENTRY_POINT -# else -# define TEXT_START &ENTRY_POINT -# endif -#endif - -#ifdef GMON_START_ARRAY_SECTION -static void __gmon_start__ (void); -static void (*const gmon_start_initializer) (void) - __attribute__ ((used, section (GMON_START_ARRAY_SECTION))) = &__gmon_start__; -static -#else -/* We cannot use the normal constructor mechanism to call - __gmon_start__ because gcrt1.o appears before crtbegin.o in the link. - Instead crti.o calls it specially. */ -extern void __gmon_start__ (void); -#endif - -void -__gmon_start__ (void) -{ - /* Protect from being called more than once. Since crti.o is linked - into every shared library, each of their init functions will call us. */ - static int called; - - if (called) - return; - - called = 1; - - /* Start keeping profiling records. */ - __monstartup ((u_long) TEXT_START, (u_long) &etext); - - /* Call _mcleanup before exiting; it will write out gmon.out from the - collected data. */ - atexit (&_mcleanup); -} diff --git a/csu/init-first.c b/csu/init-first.c deleted file mode 100644 index 510ea2db1e..0000000000 --- a/csu/init-first.c +++ /dev/null @@ -1,102 +0,0 @@ -/* Initialization code run first thing by the ELF startup code. Common version - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <ctype.h> -#include <stdio.h> -#include <stdlib.h> -#include <fcntl.h> -#include <unistd.h> -#include <sysdep.h> -#include <fpu_control.h> -#include <sys/param.h> -#include <sys/types.h> -#include <libc-internal.h> - -#include <ldsodefs.h> - -/* Set nonzero if we have to be prepared for more than one libc being - used in the process. Safe assumption if initializer never runs. */ -int __libc_multiple_libcs attribute_hidden = 1; - -/* Remember the command line argument and enviroment contents for - later calls of initializers for dynamic libraries. */ -int __libc_argc attribute_hidden; -char **__libc_argv attribute_hidden; - - -void -__libc_init_first (int argc, char **argv, char **envp) -{ -#ifdef SHARED - /* For DSOs we do not need __libc_init_first but instead _init. */ -} - -void -attribute_hidden -_init (int argc, char **argv, char **envp) -{ -#endif - - __libc_multiple_libcs = &_dl_starting_up && !_dl_starting_up; - - /* Make sure we don't initialize twice. */ - if (!__libc_multiple_libcs) - { - /* Set the FPU control word to the proper default value if the - kernel would use a different value. */ - if (__fpu_control != GLRO(dl_fpu_control)) - __setfpucw (__fpu_control); - } - - /* Save the command-line arguments. */ - __libc_argc = argc; - __libc_argv = argv; - __environ = envp; - -#ifndef SHARED - /* First the initialization which normally would be done by the - dynamic linker. */ - _dl_non_dynamic_init (); -#endif - -#ifdef VDSO_SETUP - VDSO_SETUP (); -#endif - - __init_misc (argc, argv, envp); - - /* Initialize ctype data. */ - __ctype_init (); - -#if defined SHARED && !defined NO_CTORS_DTORS_SECTIONS - __libc_global_ctors (); -#endif -} - -/* This function is defined here so that if this file ever gets into - ld.so we will get a link error. Having this file silently included - in ld.so causes disaster, because the _init definition above will - cause ld.so to gain an init function, which is not a cool thing. */ - -extern void _dl_start (void) __attribute__ ((noreturn)); - -void -_dl_start (void) -{ - abort (); -} diff --git a/csu/init.c b/csu/init.c deleted file mode 100644 index bb68386c9b..0000000000 --- a/csu/init.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Special startup support. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#if defined __GNUC__ && __GNUC__ >= 2 - -#include <_G_config.h> - -/* This records which stdio is linked against in the application. */ -const int _IO_stdin_used = _G_IO_IO_FILE_VERSION; - -#endif diff --git a/csu/libc-start.c b/csu/libc-start.c deleted file mode 100644 index c2dd1593eb..0000000000 --- a/csu/libc-start.c +++ /dev/null @@ -1,336 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <assert.h> -#include <stdlib.h> -#include <stdio.h> -#include <unistd.h> -#include <ldsodefs.h> -#include <exit-thread.h> -#include <libc-internal.h> - -#include <elf/dl-tunables.h> - -extern void __libc_init_first (int argc, char **argv, char **envp); - -extern int __libc_multiple_libcs; - -#include <tls.h> -#ifndef SHARED -# include <dl-osinfo.h> -# ifndef THREAD_SET_STACK_GUARD -/* Only exported for architectures that don't store the stack guard canary - in thread local area. */ -uintptr_t __stack_chk_guard attribute_relro; -# endif -# ifndef THREAD_SET_POINTER_GUARD -/* Only exported for architectures that don't store the pointer guard - value in thread local area. */ -uintptr_t __pointer_chk_guard_local - attribute_relro attribute_hidden __attribute__ ((nocommon)); -# endif -#endif - -#ifdef HAVE_PTR_NTHREADS -/* We need atomic operations. */ -# include <atomic.h> -#endif - - -#ifndef SHARED -# include <link.h> -# include <dl-irel.h> - -# ifdef ELF_MACHINE_IRELA -# define IREL_T ElfW(Rela) -# define IPLT_START __rela_iplt_start -# define IPLT_END __rela_iplt_end -# define IREL elf_irela -# elif defined ELF_MACHINE_IREL -# define IREL_T ElfW(Rel) -# define IPLT_START __rel_iplt_start -# define IPLT_END __rel_iplt_end -# define IREL elf_irel -# endif - -static void -apply_irel (void) -{ -# ifdef IREL - /* We use weak references for these so that we'll still work with a linker - that doesn't define them. Such a linker doesn't support IFUNC at all - and so uses won't work, but a statically-linked program that doesn't - use any IFUNC symbols won't have a problem. */ - extern const IREL_T IPLT_START[] __attribute__ ((weak)); - extern const IREL_T IPLT_END[] __attribute__ ((weak)); - for (const IREL_T *ipltent = IPLT_START; ipltent < IPLT_END; ++ipltent) - IREL (ipltent); -# endif -} -#endif - - -#ifdef LIBC_START_MAIN -# ifdef LIBC_START_DISABLE_INLINE -# define STATIC static -# else -# define STATIC static inline __attribute__ ((always_inline)) -# endif -#else -# define STATIC -# define LIBC_START_MAIN __libc_start_main -#endif - -#ifdef MAIN_AUXVEC_ARG -/* main gets passed a pointer to the auxiliary. */ -# define MAIN_AUXVEC_DECL , void * -# define MAIN_AUXVEC_PARAM , auxvec -#else -# define MAIN_AUXVEC_DECL -# define MAIN_AUXVEC_PARAM -#endif - -#ifndef ARCH_INIT_CPU_FEATURES -# define ARCH_INIT_CPU_FEATURES() -#endif - -STATIC int LIBC_START_MAIN (int (*main) (int, char **, char ** - MAIN_AUXVEC_DECL), - int argc, - char **argv, -#ifdef LIBC_START_MAIN_AUXVEC_ARG - ElfW(auxv_t) *auxvec, -#endif - __typeof (main) init, - void (*fini) (void), - void (*rtld_fini) (void), - void *stack_end) - __attribute__ ((noreturn)); - - -/* Note: the fini parameter is ignored here for shared library. It - is registered with __cxa_atexit. This had the disadvantage that - finalizers were called in more than one place. */ -STATIC int -LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL), - int argc, char **argv, -#ifdef LIBC_START_MAIN_AUXVEC_ARG - ElfW(auxv_t) *auxvec, -#endif - __typeof (main) init, - void (*fini) (void), - void (*rtld_fini) (void), void *stack_end) -{ - /* Result of the 'main' function. */ - int result; - - __libc_multiple_libcs = &_dl_starting_up && !_dl_starting_up; - -#ifndef SHARED - char **ev = &argv[argc + 1]; - - __environ = ev; - - /* Store the lowest stack address. This is done in ld.so if this is - the code for the DSO. */ - __libc_stack_end = stack_end; - -# ifdef HAVE_AUX_VECTOR - /* First process the auxiliary vector since we need to find the - program header to locate an eventually present PT_TLS entry. */ -# ifndef LIBC_START_MAIN_AUXVEC_ARG - ElfW(auxv_t) *auxvec; - { - char **evp = ev; - while (*evp++ != NULL) - ; - auxvec = (ElfW(auxv_t) *) evp; - } -# endif - _dl_aux_init (auxvec); - if (GL(dl_phdr) == NULL) -# endif - { - /* Starting from binutils-2.23, the linker will define the - magic symbol __ehdr_start to point to our own ELF header - if it is visible in a segment that also includes the phdrs. - So we can set up _dl_phdr and _dl_phnum even without any - information from auxv. */ - - extern const ElfW(Ehdr) __ehdr_start - __attribute__ ((weak, visibility ("hidden"))); - if (&__ehdr_start != NULL) - { - assert (__ehdr_start.e_phentsize == sizeof *GL(dl_phdr)); - GL(dl_phdr) = (const void *) &__ehdr_start + __ehdr_start.e_phoff; - GL(dl_phnum) = __ehdr_start.e_phnum; - } - } - - /* Initialize very early so that tunables can use it. */ - __libc_init_secure (); - - __tunables_init (__environ); - - ARCH_INIT_CPU_FEATURES (); - - /* Perform IREL{,A} relocations. */ - apply_irel (); - - /* The stack guard goes into the TCB, so initialize it early. */ - __libc_setup_tls (); - - /* Set up the stack checker's canary. */ - uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard (_dl_random); -# ifdef THREAD_SET_STACK_GUARD - THREAD_SET_STACK_GUARD (stack_chk_guard); -# else - __stack_chk_guard = stack_chk_guard; -# endif - -# ifdef DL_SYSDEP_OSCHECK - if (!__libc_multiple_libcs) - { - /* This needs to run to initiliaze _dl_osversion before TLS - setup might check it. */ - DL_SYSDEP_OSCHECK (__libc_fatal); - } -# endif - - /* Initialize libpthread if linked in. */ - if (__pthread_initialize_minimal != NULL) - __pthread_initialize_minimal (); - - /* Set up the pointer guard value. */ - uintptr_t pointer_chk_guard = _dl_setup_pointer_guard (_dl_random, - stack_chk_guard); -# ifdef THREAD_SET_POINTER_GUARD - THREAD_SET_POINTER_GUARD (pointer_chk_guard); -# else - __pointer_chk_guard_local = pointer_chk_guard; -# endif - -#endif - - /* Register the destructor of the dynamic linker if there is any. */ - if (__glibc_likely (rtld_fini != NULL)) - __cxa_atexit ((void (*) (void *)) rtld_fini, NULL, NULL); - -#ifndef SHARED - /* Call the initializer of the libc. This is only needed here if we - are compiling for the static library in which case we haven't - run the constructors in `_dl_start_user'. */ - __libc_init_first (argc, argv, __environ); - - /* Register the destructor of the program, if any. */ - if (fini) - __cxa_atexit ((void (*) (void *)) fini, NULL, NULL); - - /* Some security at this point. Prevent starting a SUID binary where - the standard file descriptors are not opened. We have to do this - only for statically linked applications since otherwise the dynamic - loader did the work already. */ - if (__builtin_expect (__libc_enable_secure, 0)) - __libc_check_standard_fds (); -#endif - - /* Call the initializer of the program, if any. */ -#ifdef SHARED - if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_IMPCALLS, 0)) - GLRO(dl_debug_printf) ("\ninitialize program: %s\n\n", argv[0]); -#endif - if (init) - (*init) (argc, argv, __environ MAIN_AUXVEC_PARAM); - -#ifdef SHARED - /* Auditing checkpoint: we have a new object. */ - if (__glibc_unlikely (GLRO(dl_naudit) > 0)) - { - struct audit_ifaces *afct = GLRO(dl_audit); - struct link_map *head = GL(dl_ns)[LM_ID_BASE]._ns_loaded; - for (unsigned int cnt = 0; cnt < GLRO(dl_naudit); ++cnt) - { - if (afct->preinit != NULL) - afct->preinit (&head->l_audit[cnt].cookie); - - afct = afct->next; - } - } -#endif - -#ifdef SHARED - if (__glibc_unlikely (GLRO(dl_debug_mask) & DL_DEBUG_IMPCALLS)) - GLRO(dl_debug_printf) ("\ntransferring control: %s\n\n", argv[0]); -#endif - -#ifndef SHARED - _dl_debug_initialize (0, LM_ID_BASE); -#endif -#ifdef HAVE_CLEANUP_JMP_BUF - /* Memory for the cancellation buffer. */ - struct pthread_unwind_buf unwind_buf; - - int not_first_call; - not_first_call = setjmp ((struct __jmp_buf_tag *) unwind_buf.cancel_jmp_buf); - if (__glibc_likely (! not_first_call)) - { - struct pthread *self = THREAD_SELF; - - /* Store old info. */ - unwind_buf.priv.data.prev = THREAD_GETMEM (self, cleanup_jmp_buf); - unwind_buf.priv.data.cleanup = THREAD_GETMEM (self, cleanup); - - /* Store the new cleanup handler info. */ - THREAD_SETMEM (self, cleanup_jmp_buf, &unwind_buf); - - /* Run the program. */ - result = main (argc, argv, __environ MAIN_AUXVEC_PARAM); - } - else - { - /* Remove the thread-local data. */ -# ifdef SHARED - PTHFCT_CALL (ptr__nptl_deallocate_tsd, ()); -# else - extern void __nptl_deallocate_tsd (void) __attribute ((weak)); - __nptl_deallocate_tsd (); -# endif - - /* One less thread. Decrement the counter. If it is zero we - terminate the entire process. */ - result = 0; -# ifdef SHARED - unsigned int *ptr = __libc_pthread_functions.ptr_nthreads; -# ifdef PTR_DEMANGLE - PTR_DEMANGLE (ptr); -# endif -# else - extern unsigned int __nptl_nthreads __attribute ((weak)); - unsigned int *const ptr = &__nptl_nthreads; -# endif - - if (! atomic_decrement_and_test (ptr)) - /* Not much left to do but to exit the thread, not the process. */ - __exit_thread (); - } -#else - /* Nothing fancy, just call the function. */ - result = main (argc, argv, __environ MAIN_AUXVEC_PARAM); -#endif - - exit (result); -} diff --git a/csu/libc-tls.c b/csu/libc-tls.c deleted file mode 100644 index 3c897bf28b..0000000000 --- a/csu/libc-tls.c +++ /dev/null @@ -1,217 +0,0 @@ -/* Initialization code for TLS in statically linked application. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <errno.h> -#include <ldsodefs.h> -#include <tls.h> -#include <unistd.h> -#include <stdio.h> -#include <sys/param.h> - - -#ifdef SHARED - #error makefile bug, this file is for static only -#endif - -dtv_t _dl_static_dtv[2 + TLS_SLOTINFO_SURPLUS]; - - -static struct -{ - struct dtv_slotinfo_list si; - /* The dtv_slotinfo_list data structure does not include the actual - information since it is defined as an array of size zero. We define - here the necessary entries. Note that it is not important whether - there is padding or not since we will always access the information - through the 'si' element. */ - struct dtv_slotinfo info[2 + TLS_SLOTINFO_SURPLUS]; -} static_slotinfo; - - -/* Highest dtv index currently needed. */ -size_t _dl_tls_max_dtv_idx; -/* Flag signalling whether there are gaps in the module ID allocation. */ -bool _dl_tls_dtv_gaps; -/* Information about the dtv slots. */ -struct dtv_slotinfo_list *_dl_tls_dtv_slotinfo_list; -/* Number of modules in the static TLS block. */ -size_t _dl_tls_static_nelem; -/* Size of the static TLS block. Giving this initialized value - preallocates some surplus bytes in the static TLS area. */ -size_t _dl_tls_static_size = 2048; -/* Size actually allocated in the static TLS block. */ -size_t _dl_tls_static_used; -/* Alignment requirement of the static TLS block. */ -size_t _dl_tls_static_align; - -/* Generation counter for the dtv. */ -size_t _dl_tls_generation; - - -/* Additional definitions needed by TLS initialization. */ -#ifdef TLS_INIT_HELPER -TLS_INIT_HELPER -#endif - -static void -init_slotinfo (void) -{ - /* Create the slotinfo list. */ - static_slotinfo.si.len = (((char *) (&static_slotinfo + 1) - - (char *) &static_slotinfo.si.slotinfo[0]) - / sizeof static_slotinfo.si.slotinfo[0]); - // static_slotinfo.si.next = NULL; already zero - - /* The slotinfo list. Will be extended by the code doing dynamic - linking. */ - GL(dl_tls_max_dtv_idx) = 1; - GL(dl_tls_dtv_slotinfo_list) = &static_slotinfo.si; -} - -static void -init_static_tls (size_t memsz, size_t align) -{ - /* That is the size of the TLS memory for this object. The initialized - value of _dl_tls_static_size is provided by dl-open.c to request some - surplus that permits dynamic loading of modules with IE-model TLS. */ - GL(dl_tls_static_size) = roundup (memsz + GL(dl_tls_static_size), - TLS_TCB_ALIGN); -#if TLS_TCB_AT_TP - GL(dl_tls_static_size) += TLS_TCB_SIZE; -#endif - GL(dl_tls_static_used) = memsz; - /* The alignment requirement for the static TLS block. */ - GL(dl_tls_static_align) = align; - /* Number of elements in the static TLS block. */ - GL(dl_tls_static_nelem) = GL(dl_tls_max_dtv_idx); -} - -void -__libc_setup_tls (void) -{ - void *tlsblock; - size_t memsz = 0; - size_t filesz = 0; - void *initimage = NULL; - size_t align = 0; - size_t max_align = TCB_ALIGNMENT; - size_t tcb_offset; - const ElfW(Phdr) *phdr; - - /* Look through the TLS segment if there is any. */ - if (_dl_phdr != NULL) - for (phdr = _dl_phdr; phdr < &_dl_phdr[_dl_phnum]; ++phdr) - if (phdr->p_type == PT_TLS) - { - /* Remember the values we need. */ - memsz = phdr->p_memsz; - filesz = phdr->p_filesz; - initimage = (void *) phdr->p_vaddr; - align = phdr->p_align; - if (phdr->p_align > max_align) - max_align = phdr->p_align; - break; - } - - /* We have to set up the TCB block which also (possibly) contains - 'errno'. Therefore we avoid 'malloc' which might touch 'errno'. - Instead we use 'sbrk' which would only uses 'errno' if it fails. - In this case we are right away out of memory and the user gets - what she/he deserves. - - The initialized value of _dl_tls_static_size is provided by dl-open.c - to request some surplus that permits dynamic loading of modules with - IE-model TLS. */ -#if TLS_TCB_AT_TP - /* Align the TCB offset to the maximum alignment, as - _dl_allocate_tls_storage (in elf/dl-tls.c) does using __libc_memalign - and dl_tls_static_align. */ - tcb_offset = roundup (memsz + GL(dl_tls_static_size), max_align); - tlsblock = __sbrk (tcb_offset + TLS_INIT_TCB_SIZE + max_align); -#elif TLS_DTV_AT_TP - tcb_offset = roundup (TLS_INIT_TCB_SIZE, align ?: 1); - tlsblock = __sbrk (tcb_offset + memsz + max_align - + TLS_PRE_TCB_SIZE + GL(dl_tls_static_size)); - tlsblock += TLS_PRE_TCB_SIZE; -#else - /* In case a model with a different layout for the TCB and DTV - is defined add another #elif here and in the following #ifs. */ -# error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined" -#endif - - /* Align the TLS block. */ - tlsblock = (void *) (((uintptr_t) tlsblock + max_align - 1) - & ~(max_align - 1)); - - /* Initialize the dtv. [0] is the length, [1] the generation counter. */ - _dl_static_dtv[0].counter = (sizeof (_dl_static_dtv) / sizeof (_dl_static_dtv[0])) - 2; - // _dl_static_dtv[1].counter = 0; would be needed if not already done - - struct link_map *main_map = GL(dl_ns)[LM_ID_BASE]._ns_loaded; - - /* Initialize the TLS block. */ -#if TLS_TCB_AT_TP - _dl_static_dtv[2].pointer.val = ((char *) tlsblock + tcb_offset - - roundup (memsz, align ?: 1)); - main_map->l_tls_offset = roundup (memsz, align ?: 1); -#elif TLS_DTV_AT_TP - _dl_static_dtv[2].pointer.val = (char *) tlsblock + tcb_offset; - main_map->l_tls_offset = tcb_offset; -#else -# error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined" -#endif - _dl_static_dtv[2].pointer.to_free = NULL; - /* sbrk gives us zero'd memory, so we don't need to clear the remainder. */ - memcpy (_dl_static_dtv[2].pointer.val, initimage, filesz); - - /* Install the pointer to the dtv. */ - - /* Initialize the thread pointer. */ -#if TLS_TCB_AT_TP - INSTALL_DTV ((char *) tlsblock + tcb_offset, _dl_static_dtv); - - const char *lossage = TLS_INIT_TP ((char *) tlsblock + tcb_offset); -#elif TLS_DTV_AT_TP - INSTALL_DTV (tlsblock, _dl_static_dtv); - const char *lossage = TLS_INIT_TP (tlsblock); -#else -# error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined" -#endif - if (__builtin_expect (lossage != NULL, 0)) - __libc_fatal (lossage); - - /* Update the executable's link map with enough information to make - the TLS routines happy. */ - main_map->l_tls_align = align; - main_map->l_tls_blocksize = memsz; - main_map->l_tls_initimage = initimage; - main_map->l_tls_initimage_size = filesz; - main_map->l_tls_modid = 1; - - init_slotinfo (); - // static_slotinfo.si.slotinfo[1].gen = 0; already zero - static_slotinfo.si.slotinfo[1].map = main_map; - - memsz = roundup (memsz, align ?: 1); - -#if TLS_DTV_AT_TP - memsz += tcb_offset; -#endif - - init_static_tls (memsz, MAX (TLS_TCB_ALIGN, max_align)); -} diff --git a/csu/start.c b/csu/start.c deleted file mode 100644 index d7d7a8510d..0000000000 --- a/csu/start.c +++ /dev/null @@ -1,11 +0,0 @@ -/* This file should define the low-level program entry point, - which should set up `__environ', and then do: - __libc_init(argc, argv, __environ); - exit(main(argc, argv, __environ)); - - This file should be prepared to be the first thing in the text section (on - Unix systems), or otherwise appropriately special. */ - -/* The first piece of initialized data. */ -int __data_start = 0; -weak_alias (__data_start, data_start) diff --git a/csu/sysdep.c b/csu/sysdep.c deleted file mode 100644 index 5442eee00d..0000000000 --- a/csu/sysdep.c +++ /dev/null @@ -1,2 +0,0 @@ -/* This file should contain any system-dependent functions - that will be used by many parts of the library. */ diff --git a/csu/version.c b/csu/version.c deleted file mode 100644 index e0d884dbf3..0000000000 --- a/csu/version.c +++ /dev/null @@ -1,74 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include "version.h" -#include <tls.h> -#include <libc-abis.h> -#include <gnu/libc-version.h> - -static const char __libc_release[] = RELEASE; -static const char __libc_version[] = VERSION; - -static const char banner[] = -"GNU C Library "PKGVERSION RELEASE" release version "VERSION", by Roland McGrath et al.\n\ -Copyright (C) 2017 Free Software Foundation, Inc.\n\ -This is free software; see the source for copying conditions.\n\ -There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n\ -PARTICULAR PURPOSE.\n\ -Compiled by GNU CC version "__VERSION__".\n" -#include "version-info.h" -#ifdef LIBC_ABIS_STRING -LIBC_ABIS_STRING -#endif -"For bug reporting instructions, please see:\n\ -"REPORT_BUGS_TO".\n"; - -#include <unistd.h> - -extern void __libc_print_version (void); -void -__libc_print_version (void) -{ - __write (STDOUT_FILENO, banner, sizeof banner - 1); -} - -extern const char *__gnu_get_libc_release (void); -const char * -__gnu_get_libc_release (void) -{ - return __libc_release; -} -weak_alias (__gnu_get_libc_release, gnu_get_libc_release) - -extern const char *__gnu_get_libc_version (void); -const char * -__gnu_get_libc_version (void) -{ - return __libc_version; -} -weak_alias (__gnu_get_libc_version, gnu_get_libc_version) - -/* This function is the entry point for the shared object. - Running the library as a program will get here. */ - -extern void __libc_main (void) __attribute__ ((noreturn)); -void -__libc_main (void) -{ - __libc_print_version (); - _exit (0); -} |