Merge "Switch to elfutils 0.153."
diff --git a/0.153/Android.mk b/0.153/Android.mk
new file mode 100755
index 0000000..260fae2
--- /dev/null
+++ b/0.153/Android.mk
@@ -0,0 +1,15 @@
+# Copyright (C) 2013 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+include $(call all-subdir-makefiles)
diff --git a/0.153/libdw/Android.mk b/0.153/libdw/Android.mk
new file mode 100755
index 0000000..d196931
--- /dev/null
+++ b/0.153/libdw/Android.mk
@@ -0,0 +1,185 @@
+# Copyright (C) 2013 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+LOCAL_PATH := $(call my-dir)
+
+supported_platforms := linux-x86
+cur_platform := $(filter $(HOST_OS)-$(HOST_ARCH),$(supported_platforms))
+
+ifdef cur_platform
+
+#
+# host libdw
+#
+
+include $(CLEAR_VARS)
+
+LIBDW_SRC_FILES := \
+ cfi.c \
+ cie.c \
+ dwarf_abbrevhaschildren.c \
+ dwarf_abbrev_hash.c \
+ dwarf_addrdie.c \
+ dwarf_arrayorder.c \
+ dwarf_attr.c \
+ dwarf_attr_integrate.c \
+ dwarf_begin.c \
+ dwarf_begin_elf.c \
+ dwarf_bitoffset.c \
+ dwarf_bitsize.c \
+ dwarf_bytesize.c \
+ dwarf_cfi_addrframe.c \
+ dwarf_child.c \
+ dwarf_cuoffset.c \
+ dwarf_decl_column.c \
+ dwarf_decl_file.c \
+ dwarf_decl_line.c \
+ dwarf_diecu.c \
+ dwarf_diename.c \
+ dwarf_dieoffset.c \
+ dwarf_end.c \
+ dwarf_entry_breakpoints.c \
+ dwarf_entrypc.c \
+ dwarf_error.c \
+ dwarf_filesrc.c \
+ dwarf_formaddr.c \
+ dwarf_formblock.c \
+ dwarf_formflag.c \
+ dwarf_formref.c \
+ dwarf_formref_die.c \
+ dwarf_formsdata.c \
+ dwarf_formstring.c \
+ dwarf_formudata.c \
+ dwarf_frame_cfa.c \
+ dwarf_func_inline.c \
+ dwarf_getabbrevattr.c \
+ dwarf_getabbrev.c \
+ dwarf_getabbrevcode.c \
+ dwarf_getabbrevtag.c \
+ dwarf_getarange_addr.c \
+ dwarf_getarangeinfo.c \
+ dwarf_getaranges.c \
+ dwarf_getattrcnt.c \
+ dwarf_getattrs.c \
+ dwarf_getcfi.c \
+ dwarf_getelf.c \
+ dwarf_getfuncs.c \
+ dwarf_getlocation.c \
+ dwarf_getmacros.c \
+ dwarf_getpubnames.c \
+ dwarf_getscopes.c \
+ dwarf_getscopes_die.c \
+ dwarf_getscopevar.c \
+ dwarf_getsrc_die.c \
+ dwarf_getsrcdirs.c \
+ dwarf_getsrc_file.c \
+ dwarf_getsrcfiles.c \
+ dwarf_getsrclines.c \
+ dwarf_getstring.c \
+ dwarf_hasattr.c \
+ dwarf_hasattr_integrate.c \
+ dwarf_haschildren.c \
+ dwarf_hasform.c \
+ dwarf_haspc.c \
+ dwarf_highpc.c \
+ dwarf_lineaddr.c \
+ dwarf_linebeginstatement.c \
+ dwarf_lineblock.c \
+ dwarf_linecol.c \
+ dwarf_lineendsequence.c \
+ dwarf_lineepiloguebegin.c \
+ dwarf_lineno.c \
+ dwarf_lineprologueend.c \
+ dwarf_linesrc.c \
+ dwarf_lowpc.c \
+ dwarf_macro_opcode.c \
+ dwarf_macro_param1.c \
+ dwarf_macro_param2.c \
+ dwarf_next_cfi.c \
+ dwarf_nextcu.c \
+ dwarf_offabbrev.c \
+ dwarf_offdie.c \
+ dwarf_onearange.c \
+ dwarf_onesrcline.c \
+ dwarf_ranges.c \
+ dwarf_siblingof.c \
+ dwarf_sig8_hash.c \
+ dwarf_srclang.c \
+ dwarf_tag.c \
+ dwarf_whatattr.c \
+ dwarf_whatform.c \
+ fde.c \
+ frame-cache.c \
+ libdw_alloc.c \
+ libdw_findcu.c \
+ libdw_form.c \
+ libdw_visit_scopes.c \
+ memory-access.c
+
+LOCAL_SRC_FILES := $(LIBDW_SRC_FILES)
+
+LOCAL_C_INCLUDES := \
+ $(LOCAL_PATH)/.. \
+ $(LOCAL_PATH)/../lib \
+ $(LOCAL_PATH)/../libdw \
+ $(LOCAL_PATH)/../libelf
+
+ifeq ($(HOST_OS),darwin)
+ LOCAL_CFLAGS += -fnested-functions
+endif
+
+LOCAL_C_INCLUDES += $(LOCAL_PATH)/../host-$(HOST_OS)-fixup
+
+LOCAL_CFLAGS += -DHAVE_CONFIG_H -std=gnu99 -D_GNU_SOURCE -DIS_LIBDW
+
+# to fix machine-dependent issues
+LOCAL_CFLAGS += -include $(LOCAL_PATH)/../host-$(HOST_OS)-fixup/AndroidFixup.h
+
+# to suppress the "pointer of type ‘void *’ used in arithmetic" warning
+LOCAL_CFLAGS += -Wno-pointer-arith
+
+LOCAL_MODULE:= libdw
+
+include $(BUILD_HOST_STATIC_LIBRARY)
+
+#
+# target libdw
+#
+
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(LIBDW_SRC_FILES)
+
+LOCAL_C_INCLUDES := \
+ $(LOCAL_PATH)/.. \
+ $(LOCAL_PATH)/../lib \
+ $(LOCAL_PATH)/../libdw \
+ $(LOCAL_PATH)/../libelf
+
+LOCAL_C_INCLUDES += $(LOCAL_PATH)/../bionic-fixup
+
+LOCAL_CFLAGS += -include $(LOCAL_PATH)/../bionic-fixup/AndroidFixup.h
+
+LOCAL_CFLAGS += -DHAVE_CONFIG_H -std=gnu99 -DIS_LIBDW -Werror
+
+# to suppress the "pointer of type ‘void *’ used in arithmetic" warning
+LOCAL_CFLAGS += -Wno-pointer-arith
+
+LOCAL_MODULE_TAGS := eng
+
+LOCAL_MODULE:= libdw
+
+include $(BUILD_STATIC_LIBRARY)
+
+endif #cur_platform
diff --git a/0.153/libdwfl/Android.mk b/0.153/libdwfl/Android.mk
new file mode 100755
index 0000000..7b5ba16
--- /dev/null
+++ b/0.153/libdwfl/Android.mk
@@ -0,0 +1,112 @@
+# Copyright (C) 2013 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+LOCAL_PATH := $(call my-dir)
+
+supported_platforms := linux-x86
+cur_platform := $(filter $(HOST_OS)-$(HOST_ARCH),$(supported_platforms))
+
+ifdef cur_platform
+
+#
+# host libdwfl
+#
+
+include $(CLEAR_VARS)
+
+LIBDWFL_SRC_FILES := \
+ dwfl_begin.c \
+ dwfl_build_id_find_elf.c \
+ dwfl_build_id_find_debuginfo.c \
+ dwfl_end.c \
+ dwfl_error.c \
+ dwfl_module.c \
+ dwfl_module_addrdie.c \
+ dwfl_module_addrsym.c \
+ dwfl_module_build_id.c \
+ dwfl_module_getdwarf.c \
+ dwfl_module_getsym.c \
+ dwfl_report_elf.c \
+ find-debuginfo.c \
+ image-header.c \
+ libdwfl_crc32.c \
+ libdwfl_crc32_file.c \
+ offline.c \
+ open.c \
+ relocate.c
+
+LOCAL_SRC_FILES := $(LIBDWFL_SRC_FILES) \
+ dwfl_addrdwarf.c \
+ dwfl_addrmodule.c \
+ dwfl_module_report_build_id.c \
+ linux-kernel-modules.c \
+ segment.c
+
+LOCAL_C_INCLUDES := \
+ $(LOCAL_PATH)/.. \
+ $(LOCAL_PATH)/../lib \
+ $(LOCAL_PATH)/../libdwfl \
+ $(LOCAL_PATH)/../libebl \
+ $(LOCAL_PATH)/../libdw \
+ $(LOCAL_PATH)/../libelf
+
+LOCAL_C_INCLUDES += $(LOCAL_PATH)/../host-$(HOST_OS)-fixup
+
+LOCAL_CFLAGS += -DHAVE_CONFIG_H -std=gnu99 -D_GNU_SOURCE
+
+# to suppress the "pointer of type ‘void *’ used in arithmetic" warning
+LOCAL_CFLAGS += -Wno-pointer-arith
+
+ifeq ($(HOST_OS),darwin)
+ LOCAL_CFLAGS += -fnested-functions
+endif
+
+# to fix machine-dependent issues
+LOCAL_CFLAGS += -include $(LOCAL_PATH)/../host-$(HOST_OS)-fixup/AndroidFixup.h
+
+LOCAL_MODULE:= libdwfl
+
+include $(BUILD_HOST_STATIC_LIBRARY)
+
+#
+# target libdwfl
+#
+
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(LIBDWFL_SRC_FILES)
+
+LOCAL_C_INCLUDES := \
+ $(LOCAL_PATH)/.. \
+ $(LOCAL_PATH)/../lib \
+ $(LOCAL_PATH)/../libdwfl \
+ $(LOCAL_PATH)/../libebl \
+ $(LOCAL_PATH)/../libdw \
+ $(LOCAL_PATH)/../libelf
+
+
+LOCAL_C_INCLUDES += $(LOCAL_PATH)/../bionic-fixup
+
+LOCAL_CFLAGS += -include $(LOCAL_PATH)/../bionic-fixup/AndroidFixup.h
+
+LOCAL_CFLAGS += -DHAVE_CONFIG_H -std=gnu99 -Werror
+
+# to suppress the "pointer of type ‘void *’ used in arithmetic" warning
+LOCAL_CFLAGS += -Wno-pointer-arith
+
+LOCAL_MODULE:= libdwfl
+
+include $(BUILD_STATIC_LIBRARY)
+
+endif #cur_platform
diff --git a/0.153/libdwfl/linux-kernel-modules.c b/0.153/libdwfl/linux-kernel-modules.c
index ae74a49..e239272 100644
--- a/0.153/libdwfl/linux-kernel-modules.c
+++ b/0.153/libdwfl/linux-kernel-modules.c
@@ -50,6 +50,9 @@
/* We include this before config.h because it can't handle _FILE_OFFSET_BITS.
Everything we need here is fine if its declarations just come first. */
+/* TODO ANDROID - defined in AndroidConfig.h. */
+#undef _FILE_OFFSET_BITS
+
#include <fts.h>
#include <config.h>
diff --git a/0.153/libebl/Android.mk b/0.153/libebl/Android.mk
new file mode 100755
index 0000000..a602d6d
--- /dev/null
+++ b/0.153/libebl/Android.mk
@@ -0,0 +1,120 @@
+# Copyright (C) 2013 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+LOCAL_PATH := $(call my-dir)
+
+supported_platforms := linux-x86
+cur_platform := $(filter $(HOST_OS)-$(HOST_ARCH),$(supported_platforms))
+
+ifdef cur_platform
+
+#
+# host libebl
+#
+#
+include $(CLEAR_VARS)
+
+LIBEBL_SRC_FILES := \
+ eblabicfi.c \
+ eblauxvinfo.c \
+ eblbackendname.c \
+ eblbsspltp.c \
+ eblcheckobjattr.c \
+ ebl_check_special_section.c \
+ ebl_check_special_symbol.c \
+ eblclosebackend.c \
+ eblcopyrelocp.c \
+ eblcorenote.c \
+ eblcorenotetypename.c \
+ ebldebugscnp.c \
+ ebldynamictagcheck.c \
+ ebldynamictagname.c \
+ eblelfclass.c \
+ eblelfdata.c \
+ eblelfmachine.c \
+ eblgotpcreloccheck.c \
+ eblgstrtab.c \
+ eblmachineflagcheck.c \
+ eblmachineflagname.c \
+ eblmachinesectionflagcheck.c \
+ eblnonerelocp.c \
+ eblobjecttypename.c \
+ eblobjnote.c \
+ eblobjnotetypename.c \
+ eblopenbackend.c \
+ eblosabiname.c \
+ eblreginfo.c \
+ eblrelativerelocp.c \
+ eblrelocsimpletype.c \
+ eblreloctypecheck.c \
+ eblreloctypename.c \
+ eblrelocvaliduse.c \
+ eblretval.c \
+ eblsectionname.c \
+ eblsectionstripp.c \
+ eblsectiontypename.c \
+ eblshflagscombine.c \
+ eblstrtab.c \
+ eblsymbolbindingname.c \
+ eblsymboltypename.c \
+ ebl_syscall_abi.c \
+ eblsysvhashentrysize.c
+
+LOCAL_SRC_FILES := $(LIBEBL_SRC_FILES)
+
+LOCAL_C_INCLUDES := \
+ $(LOCAL_PATH)/.. \
+ $(LOCAL_PATH)/../lib \
+ $(LOCAL_PATH)/../libebl \
+ $(LOCAL_PATH)/../libasm \
+ $(LOCAL_PATH)/../libelf \
+ $(LOCAL_PATH)/../libdw
+
+LOCAL_C_INCLUDES += $(LOCAL_PATH)/../host-$(HOST_OS)-fixup
+
+LOCAL_CFLAGS += -DHAVE_CONFIG_H -std=gnu99 -D_GNU_SOURCE
+
+LOCAL_CFLAGS += -include $(LOCAL_PATH)/../host-$(HOST_OS)-fixup/AndroidFixup.h
+
+LOCAL_MODULE:= libebl
+
+include $(BUILD_HOST_STATIC_LIBRARY)
+
+#
+# target libebl
+#
+
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(LIBEBL_SRC_FILES)
+
+LOCAL_C_INCLUDES := \
+ $(LOCAL_PATH)/.. \
+ $(LOCAL_PATH)/../lib \
+ $(LOCAL_PATH)/../libebl \
+ $(LOCAL_PATH)/../libasm \
+ $(LOCAL_PATH)/../libelf \
+ $(LOCAL_PATH)/../libdw
+
+LOCAL_C_INCLUDES += $(LOCAL_PATH)/../bionic-fixup
+
+LOCAL_CFLAGS += -include $(LOCAL_PATH)/../bionic-fixup/AndroidFixup.h
+
+LOCAL_CFLAGS += -DHAVE_CONFIG_H -std=gnu99 -Werror
+
+LOCAL_MODULE:= libebl
+
+include $(BUILD_STATIC_LIBRARY)
+
+endif #cur_platform
diff --git a/0.153/libelf/Android.mk b/0.153/libelf/Android.mk
new file mode 100755
index 0000000..f9fcbcc
--- /dev/null
+++ b/0.153/libelf/Android.mk
@@ -0,0 +1,190 @@
+# Copyright (C) 2013 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+LOCAL_PATH := $(call my-dir)
+
+supported_platforms := linux-x86
+cur_platform := $(filter $(HOST_OS)-$(HOST_ARCH),$(supported_platforms))
+
+ifdef cur_platform
+
+#
+# host libelf
+#
+
+include $(CLEAR_VARS)
+
+LIBELF_SRC_FILES := \
+ elf32_checksum.c \
+ elf32_fsize.c \
+ elf32_getehdr.c \
+ elf32_getphdr.c \
+ elf32_getshdr.c \
+ elf32_newehdr.c \
+ elf32_newphdr.c \
+ elf32_offscn.c \
+ elf32_updatenull.c \
+ elf32_xlatetof.c \
+ elf32_xlatetom.c \
+ elf64_checksum.c \
+ elf64_fsize.c \
+ elf64_getehdr.c \
+ elf64_getphdr.c \
+ elf64_getshdr.c \
+ elf64_newehdr.c \
+ elf64_newphdr.c \
+ elf64_offscn.c \
+ elf64_updatenull.c \
+ elf64_xlatetof.c \
+ elf64_xlatetom.c \
+ elf_begin.c \
+ elf_clone.c \
+ elf_cntl.c \
+ elf_end.c \
+ elf_error.c \
+ elf_fill.c \
+ elf_flagdata.c \
+ elf_flagehdr.c \
+ elf_flagelf.c \
+ elf_flagphdr.c \
+ elf_flagscn.c \
+ elf_flagshdr.c \
+ elf_getarhdr.c \
+ elf_getaroff.c \
+ elf_getarsym.c \
+ elf_getbase.c \
+ elf_getdata.c \
+ elf_getdata_rawchunk.c \
+ elf_getident.c \
+ elf_getphdrnum.c \
+ elf_getscn.c \
+ elf_getshdrnum.c \
+ elf_getshdrstrndx.c \
+ elf_gnu_hash.c \
+ elf_hash.c \
+ elf_kind.c \
+ elf_memory.c \
+ elf_ndxscn.c \
+ elf_newdata.c \
+ elf_newscn.c \
+ elf_next.c \
+ elf_nextscn.c \
+ elf_rand.c \
+ elf_rawdata.c \
+ elf_rawfile.c \
+ elf_readall.c \
+ elf_scnshndx.c \
+ elf_strptr.c \
+ elf_update.c \
+ elf_version.c \
+ gelf_checksum.c \
+ gelf_fsize.c \
+ gelf_getauxv.c \
+ gelf_getclass.c \
+ gelf_getdyn.c \
+ gelf_getehdr.c \
+ gelf_getlib.c \
+ gelf_getmove.c \
+ gelf_getnote.c \
+ gelf_getphdr.c \
+ gelf_getrela.c \
+ gelf_getrel.c \
+ gelf_getshdr.c \
+ gelf_getsym.c \
+ gelf_getsyminfo.c \
+ gelf_getsymshndx.c \
+ gelf_getverdaux.c \
+ gelf_getverdef.c \
+ gelf_getvernaux.c \
+ gelf_getverneed.c \
+ gelf_getversym.c \
+ gelf_newehdr.c \
+ gelf_newphdr.c \
+ gelf_offscn.c \
+ gelf_update_auxv.c \
+ gelf_update_dyn.c \
+ gelf_update_ehdr.c \
+ gelf_update_lib.c \
+ gelf_update_move.c \
+ gelf_update_phdr.c \
+ gelf_update_rela.c \
+ gelf_update_rel.c \
+ gelf_update_shdr.c \
+ gelf_update_sym.c \
+ gelf_update_syminfo.c \
+ gelf_update_symshndx.c \
+ gelf_update_verdaux.c \
+ gelf_update_verdef.c \
+ gelf_update_vernaux.c \
+ gelf_update_verneed.c \
+ gelf_update_versym.c \
+ gelf_xlate.c \
+ gelf_xlatetof.c \
+ gelf_xlatetom.c \
+ libelf_crc32.c \
+ libelf_next_prime.c \
+ nlist.c
+
+LOCAL_SRC_FILES := $(LIBELF_SRC_FILES)
+
+LOCAL_C_INCLUDES := \
+ $(LOCAL_PATH)/.. \
+ $(LOCAL_PATH)/../lib \
+ $(LOCAL_PATH)/../libelf
+
+LOCAL_C_INCLUDES += $(LOCAL_PATH)/../host-$(HOST_OS)-fixup
+
+LOCAL_CFLAGS += -DHAVE_CONFIG_H -std=gnu99 -D_GNU_SOURCE
+
+# to suppress the "pointer of type ‘void *’ used in arithmetic" warning
+LOCAL_CFLAGS += -Wno-pointer-arith
+
+ifeq ($(HOST_OS),darwin)
+ LOCAL_CFLAGS += -fnested-functions
+endif
+
+# to fix machine-dependent issues
+LOCAL_CFLAGS += -include $(LOCAL_PATH)/../host-$(HOST_OS)-fixup/AndroidFixup.h
+
+LOCAL_MODULE := libelf
+
+include $(BUILD_HOST_STATIC_LIBRARY)
+
+#
+# target libelf
+#
+
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(LIBELF_SRC_FILES)
+
+LOCAL_C_INCLUDES := \
+ $(LOCAL_PATH)/.. \
+ $(LOCAL_PATH)/../lib \
+ $(LOCAL_PATH)/../libelf
+
+LOCAL_C_INCLUDES += $(LOCAL_PATH)/../bionic-fixup
+
+LOCAL_CFLAGS += -DHAVE_CONFIG_H -std=gnu99 -Werror
+
+# to suppress the "pointer of type ‘void *’ used in arithmetic" warning
+LOCAL_CFLAGS += -Wno-pointer-arith
+
+LOCAL_CFLAGS += -include $(LOCAL_PATH)/../bionic-fixup/AndroidFixup.h
+
+LOCAL_MODULE := libelf
+
+include $(BUILD_STATIC_LIBRARY)
+
+endif #cur_platform
diff --git a/ABOUT-NLS b/ABOUT-NLS
deleted file mode 100644
index ec20977..0000000
--- a/ABOUT-NLS
+++ /dev/null
@@ -1,1101 +0,0 @@
-1 Notes on the Free Translation Project
-***************************************
-
-Free software is going international! The Free Translation Project is
-a way to get maintainers of free software, translators, and users all
-together, so that free software will gradually become able to speak many
-languages. A few packages already provide translations for their
-messages.
-
- If you found this `ABOUT-NLS' file inside a distribution, you may
-assume that the distributed package does use GNU `gettext' internally,
-itself available at your nearest GNU archive site. But you do _not_
-need to install GNU `gettext' prior to configuring, installing or using
-this package with messages translated.
-
- Installers will find here some useful hints. These notes also
-explain how users should proceed for getting the programs to use the
-available translations. They tell how people wanting to contribute and
-work on translations can contact the appropriate team.
-
- When reporting bugs in the `intl/' directory or bugs which may be
-related to internationalization, you should tell about the version of
-`gettext' which is used. The information can be found in the
-`intl/VERSION' file, in internationalized packages.
-
-1.1 Quick configuration advice
-==============================
-
-If you want to exploit the full power of internationalization, you
-should configure it using
-
- ./configure --with-included-gettext
-
-to force usage of internationalizing routines provided within this
-package, despite the existence of internationalizing capabilities in the
-operating system where this package is being installed. So far, only
-the `gettext' implementation in the GNU C library version 2 provides as
-many features (such as locale alias, message inheritance, automatic
-charset conversion or plural form handling) as the implementation here.
-It is also not possible to offer this additional functionality on top
-of a `catgets' implementation. Future versions of GNU `gettext' will
-very likely convey even more functionality. So it might be a good idea
-to change to GNU `gettext' as soon as possible.
-
- So you need _not_ provide this option if you are using GNU libc 2 or
-you have installed a recent copy of the GNU gettext package with the
-included `libintl'.
-
-1.2 INSTALL Matters
-===================
-
-Some packages are "localizable" when properly installed; the programs
-they contain can be made to speak your own native language. Most such
-packages use GNU `gettext'. Other packages have their own ways to
-internationalization, predating GNU `gettext'.
-
- By default, this package will be installed to allow translation of
-messages. It will automatically detect whether the system already
-provides the GNU `gettext' functions. If not, the included GNU
-`gettext' library will be used. This library is wholly contained
-within this package, usually in the `intl/' subdirectory, so prior
-installation of the GNU `gettext' package is _not_ required.
-Installers may use special options at configuration time for changing
-the default behaviour. The commands:
-
- ./configure --with-included-gettext
- ./configure --disable-nls
-
-will, respectively, bypass any pre-existing `gettext' to use the
-internationalizing routines provided within this package, or else,
-_totally_ disable translation of messages.
-
- When you already have GNU `gettext' installed on your system and run
-configure without an option for your new package, `configure' will
-probably detect the previously built and installed `libintl.a' file and
-will decide to use this. This might not be desirable. You should use
-the more recent version of the GNU `gettext' library. I.e. if the file
-`intl/VERSION' shows that the library which comes with this package is
-more recent, you should use
-
- ./configure --with-included-gettext
-
-to prevent auto-detection.
-
- The configuration process will not test for the `catgets' function
-and therefore it will not be used. The reason is that even an
-emulation of `gettext' on top of `catgets' could not provide all the
-extensions of the GNU `gettext' library.
-
- Internationalized packages usually have many `po/LL.po' files, where
-LL gives an ISO 639 two-letter code identifying the language. Unless
-translations have been forbidden at `configure' time by using the
-`--disable-nls' switch, all available translations are installed
-together with the package. However, the environment variable `LINGUAS'
-may be set, prior to configuration, to limit the installed set.
-`LINGUAS' should then contain a space separated list of two-letter
-codes, stating which languages are allowed.
-
-1.3 Using This Package
-======================
-
-As a user, if your language has been installed for this package, you
-only have to set the `LANG' environment variable to the appropriate
-`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code,
-and `CC' is an ISO 3166 two-letter country code. For example, let's
-suppose that you speak German and live in Germany. At the shell
-prompt, merely execute `setenv LANG de_DE' (in `csh'),
-`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
-This can be done from your `.login' or `.profile' file, once and for
-all.
-
- You might think that the country code specification is redundant.
-But in fact, some languages have dialects in different countries. For
-example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The
-country code serves to distinguish the dialects.
-
- The locale naming convention of `LL_CC', with `LL' denoting the
-language and `CC' denoting the country, is the one use on systems based
-on GNU libc. On other systems, some variations of this scheme are
-used, such as `LL' or `LL_CC.ENCODING'. You can get the list of
-locales supported by your system for your language by running the
-command `locale -a | grep '^LL''.
-
- Not all programs have translations for all languages. By default, an
-English message is shown in place of a nonexistent translation. If you
-understand other languages, you can set up a priority list of languages.
-This is done through a different environment variable, called
-`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG'
-for the purpose of message handling, but you still need to have `LANG'
-set to the primary language; this is required by other parts of the
-system libraries. For example, some Swedish users who would rather
-read translations in German than English for when Swedish is not
-available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
-
- Special advice for Norwegian users: The language code for Norwegian
-bokma*l changed from `no' to `nb' recently (in 2003). During the
-transition period, while some message catalogs for this language are
-installed under `nb' and some older ones under `no', it's recommended
-for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and
-older translations are used.
-
- In the `LANGUAGE' environment variable, but not in the `LANG'
-environment variable, `LL_CC' combinations can be abbreviated as `LL'
-to denote the language's main dialect. For example, `de' is equivalent
-to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
-(Portuguese as spoken in Portugal) in this context.
-
-1.4 Translating Teams
-=====================
-
-For the Free Translation Project to be a success, we need interested
-people who like their own language and write it well, and who are also
-able to synergize with other translators speaking the same language.
-Each translation team has its own mailing list. The up-to-date list of
-teams can be found at the Free Translation Project's homepage,
-`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams"
-area.
-
- If you'd like to volunteer to _work_ at translating messages, you
-should become a member of the translating team for your own language.
-The subscribing address is _not_ the same as the list itself, it has
-`-request' appended. For example, speakers of Swedish can send a
-message to `sv-request@li.org', having this message body:
-
- subscribe
-
- Keep in mind that team members are expected to participate
-_actively_ in translations, or at solving translational difficulties,
-rather than merely lurking around. If your team does not exist yet and
-you want to start one, or if you are unsure about what to do or how to
-get started, please write to `translation@iro.umontreal.ca' to reach the
-coordinator for all translator teams.
-
- The English team is special. It works at improving and uniformizing
-the terminology in use. Proven linguistic skills are praised more than
-programming skills, here.
-
-1.5 Available Packages
-======================
-
-Languages are not equally supported in all packages. The following
-matrix shows the current state of internationalization, as of October
-2006. The matrix shows, in regard of each package, for which languages
-PO files have been submitted to translation coordination, with a
-translation percentage of at least 50%.
-
- Ready PO files af am ar az be bg bs ca cs cy da de el en en_GB eo
- +----------------------------------------------------+
- GNUnet | [] |
- a2ps | [] [] [] [] [] |
- aegis | () |
- ant-phone | () |
- anubis | [] |
- ap-utils | |
- aspell | [] [] [] [] [] |
- bash | [] [] [] |
- batchelor | [] |
- bfd | |
- bibshelf | [] |
- binutils | [] |
- bison | [] [] |
- bison-runtime | |
- bluez-pin | [] [] [] [] [] |
- cflow | [] |
- clisp | [] [] |
- console-tools | [] [] |
- coreutils | [] [] [] |
- cpio | |
- cpplib | [] [] [] |
- cryptonit | [] |
- darkstat | [] () [] |
- dialog | [] [] [] [] [] [] |
- diffutils | [] [] [] [] [] [] |
- doodle | [] |
- e2fsprogs | [] [] |
- enscript | [] [] [] [] |
- error | [] [] [] [] |
- fetchmail | [] [] () [] |
- fileutils | [] [] |
- findutils | [] [] [] |
- flex | [] [] [] |
- fslint | [] |
- gas | |
- gawk | [] [] [] |
- gbiff | [] |
- gcal | [] |
- gcc | [] |
- gettext-examples | [] [] [] [] [] |
- gettext-runtime | [] [] [] [] [] |
- gettext-tools | [] [] |
- gimp-print | [] [] [] [] |
- gip | [] |
- gliv | [] |
- glunarclock | [] |
- gmult | [] [] |
- gnubiff | () |
- gnucash | () () [] |
- gnucash-glossary | [] () |
- gnuedu | |
- gnulib | [] [] [] [] [] [] |
- gnunet-gtk | |
- gnutls | |
- gpe-aerial | [] [] |
- gpe-beam | [] [] |
- gpe-calendar | |
- gpe-clock | [] [] |
- gpe-conf | [] [] |
- gpe-contacts | |
- gpe-edit | [] |
- gpe-filemanager | |
- gpe-go | [] |
- gpe-login | [] [] |
- gpe-ownerinfo | [] [] |
- gpe-package | |
- gpe-sketchbook | [] [] |
- gpe-su | [] [] |
- gpe-taskmanager | [] [] |
- gpe-timesheet | [] |
- gpe-today | [] [] |
- gpe-todo | |
- gphoto2 | [] [] [] [] |
- gprof | [] [] |
- gpsdrive | () () |
- gramadoir | [] [] |
- grep | [] [] [] [] [] [] |
- gretl | |
- gsasl | |
- gss | |
- gst-plugins | [] [] [] [] |
- gst-plugins-base | [] [] [] |
- gst-plugins-good | [] [] [] [] [] [] [] |
- gstreamer | [] [] [] [] [] [] [] |
- gtick | () |
- gtkam | [] [] [] |
- gtkorphan | [] [] |
- gtkspell | [] [] [] [] |
- gutenprint | [] |
- hello | [] [] [] [] [] |
- id-utils | [] [] |
- impost | |
- indent | [] [] [] |
- iso_3166 | [] [] |
- iso_3166_2 | |
- iso_4217 | [] |
- iso_639 | [] [] |
- jpilot | [] |
- jtag | |
- jwhois | |
- kbd | [] [] [] [] |
- keytouch | |
- keytouch-editor | |
- keytouch-keyboa... | |
- latrine | () |
- ld | [] |
- leafpad | [] [] [] [] [] |
- libc | [] [] [] [] [] |
- libexif | [] |
- libextractor | [] |
- libgpewidget | [] [] [] |
- libgpg-error | [] |
- libgphoto2 | [] [] |
- libgphoto2_port | [] [] |
- libgsasl | |
- libiconv | [] [] |
- libidn | [] [] |
- lifelines | [] () |
- lilypond | [] |
- lingoteach | |
- lynx | [] [] [] [] |
- m4 | [] [] [] [] |
- mailutils | [] |
- make | [] [] |
- man-db | [] () [] [] |
- minicom | [] [] [] |
- mysecretdiary | [] [] |
- nano | [] [] [] |
- nano_1_0 | [] () [] [] |
- opcodes | [] |
- parted | |
- pilot-qof | [] |
- psmisc | [] |
- pwdutils | |
- python | |
- qof | |
- radius | [] |
- recode | [] [] [] [] [] [] |
- rpm | [] [] |
- screem | |
- scrollkeeper | [] [] [] [] [] [] [] [] |
- sed | [] [] [] |
- sh-utils | [] [] |
- shared-mime-info | [] [] [] [] |
- sharutils | [] [] [] [] [] [] |
- shishi | |
- silky | |
- skencil | [] () |
- sketch | [] () |
- solfege | |
- soundtracker | [] [] |
- sp | [] |
- stardict | [] |
- system-tools-ba... | [] [] [] [] [] [] [] [] [] |
- tar | [] |
- texinfo | [] [] [] |
- textutils | [] [] [] |
- tin | () () |
- tp-robot | [] |
- tuxpaint | [] [] [] [] [] |
- unicode-han-tra... | |
- unicode-transla... | |
- util-linux | [] [] [] [] |
- vorbis-tools | [] [] [] [] |
- wastesedge | () |
- wdiff | [] [] [] [] |
- wget | [] [] |
- xchat | [] [] [] [] [] [] |
- xkeyboard-config | |
- xpad | [] [] |
- +----------------------------------------------------+
- af am ar az be bg bs ca cs cy da de el en en_GB eo
- 10 0 1 2 9 22 1 42 41 2 60 95 16 1 17 16
-
- es et eu fa fi fr ga gl gu he hi hr hu id is it
- +--------------------------------------------------+
- GNUnet | |
- a2ps | [] [] [] () |
- aegis | |
- ant-phone | [] |
- anubis | [] |
- ap-utils | [] [] |
- aspell | [] [] [] |
- bash | [] [] [] |
- batchelor | [] [] |
- bfd | [] |
- bibshelf | [] [] [] |
- binutils | [] [] [] |
- bison | [] [] [] [] [] [] |
- bison-runtime | [] [] [] [] [] |
- bluez-pin | [] [] [] [] [] |
- cflow | [] |
- clisp | [] [] |
- console-tools | |
- coreutils | [] [] [] [] [] [] |
- cpio | [] [] [] |
- cpplib | [] [] |
- cryptonit | [] |
- darkstat | [] () [] [] [] |
- dialog | [] [] [] [] [] [] [] [] |
- diffutils | [] [] [] [] [] [] [] [] [] |
- doodle | [] [] |
- e2fsprogs | [] [] [] |
- enscript | [] [] [] |
- error | [] [] [] [] [] |
- fetchmail | [] |
- fileutils | [] [] [] [] [] [] |
- findutils | [] [] [] [] |
- flex | [] [] [] |
- fslint | [] |
- gas | [] [] |
- gawk | [] [] [] [] |
- gbiff | [] |
- gcal | [] [] |
- gcc | [] |
- gettext-examples | [] [] [] [] [] [] |
- gettext-runtime | [] [] [] [] [] [] |
- gettext-tools | [] [] [] |
- gimp-print | [] [] |
- gip | [] [] [] |
- gliv | () |
- glunarclock | [] [] [] |
- gmult | [] [] [] |
- gnubiff | () () |
- gnucash | () () () |
- gnucash-glossary | [] [] |
- gnuedu | [] |
- gnulib | [] [] [] [] [] [] [] [] |
- gnunet-gtk | |
- gnutls | |
- gpe-aerial | [] [] |
- gpe-beam | [] [] |
- gpe-calendar | |
- gpe-clock | [] [] [] [] |
- gpe-conf | [] |
- gpe-contacts | [] [] |
- gpe-edit | [] [] [] [] |
- gpe-filemanager | [] |
- gpe-go | [] [] [] |
- gpe-login | [] [] [] |
- gpe-ownerinfo | [] [] [] [] [] |
- gpe-package | [] |
- gpe-sketchbook | [] [] |
- gpe-su | [] [] [] [] |
- gpe-taskmanager | [] [] [] |
- gpe-timesheet | [] [] [] [] |
- gpe-today | [] [] [] [] |
- gpe-todo | [] |
- gphoto2 | [] [] [] [] [] |
- gprof | [] [] [] [] |
- gpsdrive | () () [] () |
- gramadoir | [] [] |
- grep | [] [] [] [] [] [] [] [] [] [] [] [] |
- gretl | [] [] [] |
- gsasl | [] [] |
- gss | [] |
- gst-plugins | [] [] [] |
- gst-plugins-base | [] [] |
- gst-plugins-good | [] [] [] |
- gstreamer | [] [] [] |
- gtick | [] |
- gtkam | [] [] [] [] |
- gtkorphan | [] [] |
- gtkspell | [] [] [] [] [] [] |
- gutenprint | [] |
- hello | [] [] [] [] [] [] [] [] [] [] [] [] [] |
- id-utils | [] [] [] [] [] |
- impost | [] [] |
- indent | [] [] [] [] [] [] [] [] [] [] |
- iso_3166 | [] [] [] |
- iso_3166_2 | [] |
- iso_4217 | [] [] [] [] |
- iso_639 | [] [] [] [] [] |
- jpilot | [] [] |
- jtag | [] |
- jwhois | [] [] [] [] [] |
- kbd | [] [] |
- keytouch | [] |
- keytouch-editor | [] |
- keytouch-keyboa... | [] |
- latrine | [] [] [] |
- ld | [] [] |
- leafpad | [] [] [] [] [] [] |
- libc | [] [] [] [] [] |
- libexif | [] |
- libextractor | [] |
- libgpewidget | [] [] [] [] [] |
- libgpg-error | |
- libgphoto2 | [] [] [] |
- libgphoto2_port | [] [] |
- libgsasl | [] [] |
- libiconv | [] [] |
- libidn | [] [] |
- lifelines | () |
- lilypond | [] |
- lingoteach | [] [] [] |
- lynx | [] [] [] |
- m4 | [] [] [] [] |
- mailutils | [] [] |
- make | [] [] [] [] [] [] [] [] |
- man-db | () |
- minicom | [] [] [] [] |
- mysecretdiary | [] [] [] |
- nano | [] [] [] [] [] [] |
- nano_1_0 | [] [] [] [] [] |
- opcodes | [] [] [] [] |
- parted | [] [] [] [] |
- pilot-qof | |
- psmisc | [] [] [] |
- pwdutils | |
- python | |
- qof | [] |
- radius | [] [] |
- recode | [] [] [] [] [] [] [] [] |
- rpm | [] [] |
- screem | |
- scrollkeeper | [] [] [] |
- sed | [] [] [] [] [] |
- sh-utils | [] [] [] [] [] [] [] |
- shared-mime-info | [] [] [] [] [] [] |
- sharutils | [] [] [] [] [] [] [] [] |
- shishi | |
- silky | [] |
- skencil | [] [] |
- sketch | [] [] |
- solfege | [] |
- soundtracker | [] [] [] |
- sp | [] |
- stardict | [] |
- system-tools-ba... | [] [] [] [] [] [] [] [] |
- tar | [] [] [] [] [] [] [] |
- texinfo | [] [] |
- textutils | [] [] [] [] [] |
- tin | [] () |
- tp-robot | [] [] [] [] |
- tuxpaint | [] [] |
- unicode-han-tra... | |
- unicode-transla... | [] [] |
- util-linux | [] [] [] [] [] [] [] |
- vorbis-tools | [] [] |
- wastesedge | () |
- wdiff | [] [] [] [] [] [] [] [] |
- wget | [] [] [] [] [] [] [] [] |
- xchat | [] [] [] [] [] [] [] [] |
- xkeyboard-config | [] [] [] [] |
- xpad | [] [] [] |
- +--------------------------------------------------+
- es et eu fa fi fr ga gl gu he hi hr hu id is it
- 88 22 14 2 40 115 61 14 1 8 1 6 59 31 0 52
-
- ja ko ku ky lg lt lv mk mn ms mt nb ne nl nn no
- +-------------------------------------------------+
- GNUnet | |
- a2ps | () [] [] () |
- aegis | () |
- ant-phone | [] |
- anubis | [] [] [] |
- ap-utils | [] |
- aspell | [] [] |
- bash | [] |
- batchelor | [] [] |
- bfd | |
- bibshelf | [] |
- binutils | |
- bison | [] [] [] |
- bison-runtime | [] [] [] |
- bluez-pin | [] [] [] |
- cflow | |
- clisp | [] |
- console-tools | |
- coreutils | [] |
- cpio | |
- cpplib | [] |
- cryptonit | [] |
- darkstat | [] [] |
- dialog | [] [] |
- diffutils | [] [] [] |
- doodle | |
- e2fsprogs | [] |
- enscript | [] |
- error | [] |
- fetchmail | [] [] |
- fileutils | [] [] |
- findutils | [] |
- flex | [] [] |
- fslint | [] [] |
- gas | |
- gawk | [] [] |
- gbiff | [] |
- gcal | |
- gcc | |
- gettext-examples | [] [] |
- gettext-runtime | [] [] [] |
- gettext-tools | [] [] |
- gimp-print | [] [] |
- gip | [] [] |
- gliv | [] |
- glunarclock | [] [] |
- gmult | [] [] |
- gnubiff | |
- gnucash | () () |
- gnucash-glossary | [] |
- gnuedu | |
- gnulib | [] [] [] [] |
- gnunet-gtk | |
- gnutls | |
- gpe-aerial | [] |
- gpe-beam | [] |
- gpe-calendar | [] |
- gpe-clock | [] [] [] |
- gpe-conf | [] [] |
- gpe-contacts | [] |
- gpe-edit | [] [] [] |
- gpe-filemanager | [] [] |
- gpe-go | [] [] [] |
- gpe-login | [] [] [] |
- gpe-ownerinfo | [] [] |
- gpe-package | [] [] |
- gpe-sketchbook | [] [] |
- gpe-su | [] [] [] |
- gpe-taskmanager | [] [] [] [] |
- gpe-timesheet | [] |
- gpe-today | [] [] |
- gpe-todo | [] |
- gphoto2 | [] [] |
- gprof | |
- gpsdrive | () () () |
- gramadoir | () |
- grep | [] [] [] [] |
- gretl | |
- gsasl | [] |
- gss | |
- gst-plugins | [] |
- gst-plugins-base | |
- gst-plugins-good | [] |
- gstreamer | [] |
- gtick | |
- gtkam | [] |
- gtkorphan | [] |
- gtkspell | [] [] |
- gutenprint | |
- hello | [] [] [] [] [] [] |
- id-utils | [] |
- impost | |
- indent | [] [] |
- iso_3166 | [] |
- iso_3166_2 | [] |
- iso_4217 | [] [] [] |
- iso_639 | [] [] |
- jpilot | () () () |
- jtag | |
- jwhois | [] |
- kbd | [] |
- keytouch | [] |
- keytouch-editor | |
- keytouch-keyboa... | |
- latrine | [] |
- ld | |
- leafpad | [] [] |
- libc | [] [] [] [] [] |
- libexif | |
- libextractor | |
- libgpewidget | [] |
- libgpg-error | |
- libgphoto2 | [] |
- libgphoto2_port | [] |
- libgsasl | [] |
- libiconv | |
- libidn | [] [] |
- lifelines | [] |
- lilypond | |
- lingoteach | [] |
- lynx | [] [] |
- m4 | [] [] |
- mailutils | |
- make | [] [] [] |
- man-db | () |
- minicom | [] |
- mysecretdiary | [] |
- nano | [] [] [] |
- nano_1_0 | [] [] [] |
- opcodes | [] |
- parted | [] [] |
- pilot-qof | |
- psmisc | [] [] [] |
- pwdutils | |
- python | |
- qof | |
- radius | |
- recode | [] |
- rpm | [] [] |
- screem | [] |
- scrollkeeper | [] [] [] [] |
- sed | [] [] |
- sh-utils | [] [] |
- shared-mime-info | [] [] [] [] [] |
- sharutils | [] [] |
- shishi | |
- silky | [] |
- skencil | |
- sketch | |
- solfege | |
- soundtracker | |
- sp | () |
- stardict | [] [] |
- system-tools-ba... | [] [] [] [] |
- tar | [] [] [] |
- texinfo | [] [] [] |
- textutils | [] [] [] |
- tin | |
- tp-robot | [] |
- tuxpaint | [] |
- unicode-han-tra... | |
- unicode-transla... | |
- util-linux | [] [] |
- vorbis-tools | [] |
- wastesedge | [] |
- wdiff | [] [] |
- wget | [] [] |
- xchat | [] [] [] [] |
- xkeyboard-config | [] |
- xpad | [] [] [] |
- +-------------------------------------------------+
- ja ko ku ky lg lt lv mk mn ms mt nb ne nl nn no
- 52 24 2 2 1 3 0 2 3 21 0 15 1 97 5 1
-
- nso or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv ta
- +------------------------------------------------------+
- GNUnet | |
- a2ps | () [] [] [] [] [] [] |
- aegis | () () |
- ant-phone | [] [] |
- anubis | [] [] [] |
- ap-utils | () |
- aspell | [] [] |
- bash | [] [] [] |
- batchelor | [] [] |
- bfd | |
- bibshelf | [] |
- binutils | [] [] |
- bison | [] [] [] [] [] |
- bison-runtime | [] [] [] [] |
- bluez-pin | [] [] [] [] [] [] [] [] [] |
- cflow | [] |
- clisp | [] |
- console-tools | [] |
- coreutils | [] [] [] [] |
- cpio | [] [] [] |
- cpplib | [] |
- cryptonit | [] [] |
- darkstat | [] [] [] [] [] [] |
- dialog | [] [] [] [] [] [] [] [] [] |
- diffutils | [] [] [] [] [] [] |
- doodle | [] [] |
- e2fsprogs | [] [] |
- enscript | [] [] [] [] [] |
- error | [] [] [] [] |
- fetchmail | [] [] [] |
- fileutils | [] [] [] [] [] |
- findutils | [] [] [] [] [] [] |
- flex | [] [] [] [] [] |
- fslint | [] [] [] [] |
- gas | |
- gawk | [] [] [] [] |
- gbiff | [] |
- gcal | [] |
- gcc | [] |
- gettext-examples | [] [] [] [] [] [] [] [] |
- gettext-runtime | [] [] [] [] [] [] [] [] |
- gettext-tools | [] [] [] [] [] [] [] |
- gimp-print | [] [] |
- gip | [] [] [] [] |
- gliv | [] [] [] [] |
- glunarclock | [] [] [] [] [] [] |
- gmult | [] [] [] [] |
- gnubiff | () |
- gnucash | () [] |
- gnucash-glossary | [] [] [] |
- gnuedu | |
- gnulib | [] [] [] [] [] |
- gnunet-gtk | [] |
- gnutls | [] [] |
- gpe-aerial | [] [] [] [] [] [] [] |
- gpe-beam | [] [] [] [] [] [] [] |
- gpe-calendar | [] |
- gpe-clock | [] [] [] [] [] [] [] [] |
- gpe-conf | [] [] [] [] [] [] [] |
- gpe-contacts | [] [] [] [] [] |
- gpe-edit | [] [] [] [] [] [] [] [] |
- gpe-filemanager | [] [] |
- gpe-go | [] [] [] [] [] [] |
- gpe-login | [] [] [] [] [] [] [] [] |
- gpe-ownerinfo | [] [] [] [] [] [] [] [] |
- gpe-package | [] [] |
- gpe-sketchbook | [] [] [] [] [] [] [] [] |
- gpe-su | [] [] [] [] [] [] [] [] |
- gpe-taskmanager | [] [] [] [] [] [] [] [] |
- gpe-timesheet | [] [] [] [] [] [] [] [] |
- gpe-today | [] [] [] [] [] [] [] [] |
- gpe-todo | [] [] [] [] |
- gphoto2 | [] [] [] [] [] |
- gprof | [] [] [] |
- gpsdrive | [] [] [] |
- gramadoir | [] [] |
- grep | [] [] [] [] [] [] [] [] |
- gretl | [] |
- gsasl | [] [] [] |
- gss | [] [] [] |
- gst-plugins | [] [] [] [] |
- gst-plugins-base | [] |
- gst-plugins-good | [] [] [] [] |
- gstreamer | [] [] [] |
- gtick | [] |
- gtkam | [] [] [] [] |
- gtkorphan | [] |
- gtkspell | [] [] [] [] [] [] [] [] |
- gutenprint | [] |
- hello | [] [] [] [] [] [] [] [] |
- id-utils | [] [] [] [] |
- impost | [] |
- indent | [] [] [] [] [] [] |
- iso_3166 | [] [] [] [] [] [] |
- iso_3166_2 | |
- iso_4217 | [] [] [] [] |
- iso_639 | [] [] [] [] |
- jpilot | |
- jtag | [] |
- jwhois | [] [] [] [] |
- kbd | [] [] [] |
- keytouch | [] |
- keytouch-editor | [] |
- keytouch-keyboa... | [] |
- latrine | [] [] |
- ld | [] |
- leafpad | [] [] [] [] [] [] |
- libc | [] [] [] [] [] |
- libexif | [] |
- libextractor | [] [] |
- libgpewidget | [] [] [] [] [] [] [] |
- libgpg-error | [] [] |
- libgphoto2 | [] |
- libgphoto2_port | [] [] [] |
- libgsasl | [] [] [] [] |
- libiconv | [] [] |
- libidn | [] [] () |
- lifelines | [] [] |
- lilypond | |
- lingoteach | [] |
- lynx | [] [] [] |
- m4 | [] [] [] [] [] |
- mailutils | [] [] [] [] |
- make | [] [] [] [] |
- man-db | [] [] |
- minicom | [] [] [] [] [] |
- mysecretdiary | [] [] [] [] |
- nano | [] [] [] |
- nano_1_0 | [] [] [] [] |
- opcodes | [] [] |
- parted | [] |
- pilot-qof | [] |
- psmisc | [] [] |
- pwdutils | [] [] |
- python | |
- qof | [] [] |
- radius | [] [] |
- recode | [] [] [] [] [] [] [] |
- rpm | [] [] [] [] |
- screem | |
- scrollkeeper | [] [] [] [] [] [] [] |
- sed | [] [] [] [] [] [] [] [] [] |
- sh-utils | [] [] [] |
- shared-mime-info | [] [] [] [] [] |
- sharutils | [] [] [] [] |
- shishi | [] |
- silky | [] |
- skencil | [] [] [] |
- sketch | [] [] [] |
- solfege | [] |
- soundtracker | [] [] |
- sp | |
- stardict | [] [] [] |
- system-tools-ba... | [] [] [] [] [] [] [] [] [] |
- tar | [] [] [] [] [] |
- texinfo | [] [] [] [] |
- textutils | [] [] [] |
- tin | () |
- tp-robot | [] |
- tuxpaint | [] [] [] [] [] |
- unicode-han-tra... | |
- unicode-transla... | |
- util-linux | [] [] [] [] |
- vorbis-tools | [] [] |
- wastesedge | |
- wdiff | [] [] [] [] [] [] |
- wget | [] [] [] [] |
- xchat | [] [] [] [] [] [] [] |
- xkeyboard-config | [] [] |
- xpad | [] [] [] |
- +------------------------------------------------------+
- nso or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv ta
- 0 2 3 58 30 54 5 73 72 4 40 46 11 50 128 2
-
- tg th tk tr uk ven vi wa xh zh_CN zh_HK zh_TW zu
- +---------------------------------------------------+
- GNUnet | [] | 2
- a2ps | [] [] [] | 19
- aegis | | 0
- ant-phone | [] [] | 6
- anubis | [] [] [] | 11
- ap-utils | () [] | 4
- aspell | [] [] [] | 15
- bash | [] | 11
- batchelor | [] [] | 9
- bfd | | 1
- bibshelf | [] | 7
- binutils | [] [] [] | 9
- bison | [] [] [] | 19
- bison-runtime | [] [] [] | 15
- bluez-pin | [] [] [] [] [] [] | 28
- cflow | [] [] | 5
- clisp | | 6
- console-tools | [] [] | 5
- coreutils | [] [] | 16
- cpio | [] [] [] | 9
- cpplib | [] [] [] [] | 11
- cryptonit | | 5
- darkstat | [] () () | 15
- dialog | [] [] [] [] [] | 30
- diffutils | [] [] [] [] | 28
- doodle | [] | 6
- e2fsprogs | [] [] | 10
- enscript | [] [] [] | 16
- error | [] [] [] [] | 18
- fetchmail | [] [] | 12
- fileutils | [] [] [] | 18
- findutils | [] [] [] | 17
- flex | [] [] | 15
- fslint | [] | 9
- gas | [] | 3
- gawk | [] [] | 15
- gbiff | [] | 5
- gcal | [] | 5
- gcc | [] [] [] | 6
- gettext-examples | [] [] [] [] [] [] | 27
- gettext-runtime | [] [] [] [] [] [] | 28
- gettext-tools | [] [] [] [] [] | 19
- gimp-print | [] [] | 12
- gip | [] [] | 12
- gliv | [] [] | 8
- glunarclock | [] [] [] | 15
- gmult | [] [] [] [] | 15
- gnubiff | [] | 1
- gnucash | () | 2
- gnucash-glossary | [] [] | 9
- gnuedu | [] | 2
- gnulib | [] [] [] [] [] | 28
- gnunet-gtk | | 1
- gnutls | | 2
- gpe-aerial | [] [] | 14
- gpe-beam | [] [] | 14
- gpe-calendar | [] | 3
- gpe-clock | [] [] [] [] | 21
- gpe-conf | [] [] | 14
- gpe-contacts | [] [] | 10
- gpe-edit | [] [] [] [] | 20
- gpe-filemanager | [] | 6
- gpe-go | [] [] | 15
- gpe-login | [] [] [] [] [] | 21
- gpe-ownerinfo | [] [] [] [] | 21
- gpe-package | [] | 6
- gpe-sketchbook | [] [] | 16
- gpe-su | [] [] [] | 20
- gpe-taskmanager | [] [] [] | 20
- gpe-timesheet | [] [] [] [] | 18
- gpe-today | [] [] [] [] [] | 21
- gpe-todo | [] | 7
- gphoto2 | [] [] [] [] | 20
- gprof | [] [] | 11
- gpsdrive | | 4
- gramadoir | [] | 7
- grep | [] [] [] [] | 34
- gretl | | 4
- gsasl | [] [] | 8
- gss | [] | 5
- gst-plugins | [] [] [] | 15
- gst-plugins-base | [] [] [] | 9
- gst-plugins-good | [] [] [] [] [] | 20
- gstreamer | [] [] [] | 17
- gtick | [] | 3
- gtkam | [] | 13
- gtkorphan | [] | 7
- gtkspell | [] [] [] [] [] [] | 26
- gutenprint | | 3
- hello | [] [] [] [] [] | 37
- id-utils | [] [] | 14
- impost | [] | 4
- indent | [] [] [] [] | 25
- iso_3166 | [] [] [] [] | 16
- iso_3166_2 | | 2
- iso_4217 | [] [] | 14
- iso_639 | [] | 14
- jpilot | [] [] [] [] | 7
- jtag | [] | 3
- jwhois | [] [] [] | 13
- kbd | [] [] | 12
- keytouch | [] | 4
- keytouch-editor | | 2
- keytouch-keyboa... | [] | 3
- latrine | [] [] | 8
- ld | [] [] [] [] | 8
- leafpad | [] [] [] [] | 23
- libc | [] [] [] | 23
- libexif | [] | 4
- libextractor | [] | 5
- libgpewidget | [] [] [] | 19
- libgpg-error | [] | 4
- libgphoto2 | [] | 8
- libgphoto2_port | [] [] [] | 11
- libgsasl | [] | 8
- libiconv | [] | 7
- libidn | [] [] | 10
- lifelines | | 4
- lilypond | | 2
- lingoteach | [] | 6
- lynx | [] [] [] | 15
- m4 | [] [] [] | 18
- mailutils | [] | 8
- make | [] [] [] | 20
- man-db | [] | 6
- minicom | [] | 14
- mysecretdiary | [] [] | 12
- nano | [] [] | 17
- nano_1_0 | [] [] [] | 18
- opcodes | [] [] | 10
- parted | [] [] [] | 10
- pilot-qof | [] | 3
- psmisc | [] | 10
- pwdutils | [] | 3
- python | | 0
- qof | [] | 4
- radius | [] | 6
- recode | [] [] [] | 25
- rpm | [] [] [] [] | 14
- screem | [] | 2
- scrollkeeper | [] [] [] [] | 26
- sed | [] [] [] | 22
- sh-utils | [] | 15
- shared-mime-info | [] [] [] [] | 24
- sharutils | [] [] [] | 23
- shishi | | 1
- silky | [] | 4
- skencil | [] | 7
- sketch | | 6
- solfege | | 2
- soundtracker | [] [] | 9
- sp | [] | 3
- stardict | [] [] [] [] | 11
- system-tools-ba... | [] [] [] [] [] [] [] | 37
- tar | [] [] [] [] | 20
- texinfo | [] [] [] | 15
- textutils | [] [] [] | 17
- tin | | 1
- tp-robot | [] [] [] | 10
- tuxpaint | [] [] [] | 16
- unicode-han-tra... | | 0
- unicode-transla... | | 2
- util-linux | [] [] [] | 20
- vorbis-tools | [] [] | 11
- wastesedge | | 1
- wdiff | [] [] | 22
- wget | [] [] [] | 19
- xchat | [] [] [] [] | 29
- xkeyboard-config | [] [] [] [] | 11
- xpad | [] [] [] | 14
- +---------------------------------------------------+
- 77 teams tg th tk tr uk ven vi wa xh zh_CN zh_HK zh_TW zu
- 170 domains 0 1 1 77 39 0 136 10 1 48 5 54 0 2028
-
- Some counters in the preceding matrix are higher than the number of
-visible blocks let us expect. This is because a few extra PO files are
-used for implementing regional variants of languages, or language
-dialects.
-
- For a PO file in the matrix above to be effective, the package to
-which it applies should also have been internationalized and
-distributed as such by its maintainer. There might be an observable
-lag between the mere existence a PO file and its wide availability in a
-distribution.
-
- If October 2006 seems to be old, you may fetch a more recent copy of
-this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date
-matrix with full percentage details can be found at
-`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'.
-
-1.6 Using `gettext' in new packages
-===================================
-
-If you are writing a freely available program and want to
-internationalize it you are welcome to use GNU `gettext' in your
-package. Of course you have to respect the GNU Library General Public
-License which covers the use of the GNU `gettext' library. This means
-in particular that even non-free programs can use `libintl' as a shared
-library, whereas only free software can use `libintl' as a static
-library or use modified versions of `libintl'.
-
- Once the sources are changed appropriately and the setup can handle
-the use of `gettext' the only thing missing are the translations. The
-Free Translation Project is also available for packages which are not
-developed inside the GNU project. Therefore the information given above
-applies also for every other Free Software Project. Contact
-`translation@iro.umontreal.ca' to make the `.pot' files available to
-the translation teams.
-
diff --git a/AUTHORS b/AUTHORS
deleted file mode 100644
index 29b776f..0000000
--- a/AUTHORS
+++ /dev/null
@@ -1,2 +0,0 @@
-For Now:
-Ulrich Drepper.
diff --git a/COPYING b/COPYING
deleted file mode 100644
index 60549be..0000000
--- a/COPYING
+++ /dev/null
@@ -1,340 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) 19yy <name of author>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program 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 General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) 19yy name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/ChangeLog b/ChangeLog
deleted file mode 100644
index 9a90de7..0000000
--- a/ChangeLog
+++ /dev/null
@@ -1,206 +0,0 @@
-2008-12-30 Ulrich Drepper <drepper@redhat.com>
-
- * configure.ac: We need automake 1.8 now.
-
-2008-12-24 Roland McGrath <roland@redhat.com>
-
- * configure.ac: Use automake flags dist-bzip2 no-dist-gzip,
- distribute only in .tar.bz2 form now.
-
-2008-12-16 Roland McGrath <roland@redhat.com>
-
- * Makefile.am (pkginclude_HEADERS): New variable, install version.h.
- * configure.ac: Create it, substituting @eu_version@ with
- PACKAGE_VERSION canonicalized to four digits of decimal.
-
-2008-08-25 Roland McGrath <roland@redhat.com>
-
- * configure.ac (--enable-tls): Set AM_CONDITIONAL USE_TLS too.
-
-2008-08-21 Roland McGrath <roland@redhat.com>
-
- * configure.ac (AH_BOTTOM): Emit #include <eu-config.h> and
- move the contents to lib/eu-config.h instead of keeping them here.
-
-2007-12-20 Ulrich Drepper <drepper@redhat.com>
-
- * configure.ac: Add support for --enable-debugpred.
- Update likely/unlikely macros for it.
-
-2007-06-05 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: Remove traces of mini builds.
- * configure.ac: Don't use libelf-po/POTFILES.in as config file
- anymore.
-
-2007-05-16 Roland McGrath <roland@redhat.com>
-
- * configure.ac (AM_INIT_AUTOMAKE): Use -Wno-portability.
-
-2006-11-02 Roland McGrath <roland@redhat.com>
-
- * Makefile.am (EXTRA_DIST): Add EXCEPTION file.
-
-2006-08-29 Roland McGrath <roland@redhat.com>
-
- * configure.ac: Use AM_MAINTAINER_MODE.
-
-2006-07-12 Ulrich Drepper <drepper@redhat.com>
-
- * configure.ac (internal_function): Don't use internal visibility.
-
-2006-07-05 Ulrich Drepper <drepper@redhat.com>
-
- * configure.ac: Add dummy automake conditional to get dependencies
- for non-generic linker right. See src/Makefile.am.
-
-2005-11-18 Roland McGrath <roland@redhat.com>
-
- * Makefile.am (DISTCHECK_CONFIGURE_FLAGS): New variable.
-
-2005-11-16 Roland McGrath <roland@redhat.com>
-
- * configure.ac: Define HAVE_LIBASM and STANDALONE conditionals.
- In config.h, define ELFUTILS_HEADER macro.
-
-2005-11-15 Roland McGrath <roland@redhat.com>
-
- * Makefile.am (all_SUBDIRS): Add backends.
- * configure.ac: Write backends/Makefile.
-
- * configure.ac: Add --enable-tests-rpath option.
-
-2005-09-16 Roland McGrath <roland@redhat.com>
-
- * configure.ac (ALLOW_UNALIGNED) [__ia64__ || __alpha__]:
- Don't set it, since on IA64 you get error messages for unaligned
- accesses, and on Alpha it's at least very slow.
-
-2005-08-29 Ulrich Drepper <drepper@redhat.com>
-
- * configure.ac: Fix GCOV make condition generation.
-
-2005-08-28 Ulrich Drepper <drepper@redhat.com>
-
- * configure.ac: Add --enable-gcov option.
-
-2005-08-06 Ulrich Drepper <drepper@redhat.com>
-
- * configure.ac: Add --enable-gprof option.
-
-2005-07-27 Roland McGrath <roland@redhat.com>
-
- * Makefile.am (all_SUBDIRS): Put libdwfl before libdw.
-
-2005-07-21 Roland McGrath <roland@redhat.com>
-
- * configure.ac: Take --enable-libebl-subdir=DIR to set LIBEBL_SUBDIR.
-
-2005-06-01 Roland McGrath <roland@redhat.com>
-
- * Makefile.am (all_SUBDIRS): Add libdwfl.
- * configure.ac: Write libdwfl/Makefile.
-
-2005-05-19 Roland McGrath <roland@redhat.com>
-
- * configure.ac [AH_BOTTOM] (INTDECL, _INTDECL): New macros.
-
-2005-05-10 Ulrich Drepper <drepper@redhat.com>
-
- * configure.ac: Define MODVERSION in config.h.
-
-2005-02-22 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am (all_SUBDIRS): Don't add doc subdir for now.
- * configure.ac: Don't use doc subdir for now.
-
-2005-02-15 Ulrich Drepper <drepper@redhat.com>
-
- * configure.ac: Remove AM_GNU_GETTEXT use. Use only AM_PO_SUBDIRS.
-
-2005-02-06 Ulrich Drepper <drepper@redhat.com>
-
- * configure.ac (AM_INIT_AUTOMAKE): Removed dist-bzip2.
-
- * Makefile.am (EXTRA_DIST): Remove splint.rc.
- * splint.rc: Removed.
-
-2004-09-25 Ulrich Drepper <drepper@redhat.com>
-
- * configure.ac: Make compile with gcc 4.0.
-
-2004-03-06 Ulrich Drepper <drepper@redhat.com>
-
- * configure.ac: Use AS_HELP_STRING where applicable.
-
-2004-01-23 Ulrich Drepper <drepper@redhat.com>
-
- * configure.ac: Check for C99 compiler.
-
- * configure.ac: Change locking macros in config.h to at least
- evaluate the parameter. Define base_cpu to none for generic linker.
-
-2004-01-21 Ulrich Drepper <drepper@redhat.com>
-
- * configure.ac: Print error message in case --disable-generic is
- used if no linker support for the architecture is available.
-
-2004-01-18 Ulrich Drepper <drepper@redhat.com>
-
- * configure.ac: Dont generate libebl-po/Makefile.in,
- libdw-po/Makefile.in, libasm-po/Makefile.in.
-
- * Makefile.am (all_SUBDIRS): Remove libebl-po, libdw-po, libasm-po.
-
-2004-01-17 Ulrich Drepper <drepper@redhat.com>
-
- * configure.ac: Pretty printing of help message.
-
- * configure.ac: Move AC_SYS_LARGEFILE test to the front.
-
- * configure.ac: Add --enable-mudflap option.
-
-2004-01-17 Ulrich Drepper <drepper@redhat.com>
-
- * configure.ac: Major cleanups. Use aux dir.
- * config.guess: Moved to new config subdir.
- * config.rpath: Likewise.
- * config.sub: Likewise.
- * depcomp: Likewise.
- * install-sh: Likewise.
- * missing: Likewise.
- * mkinstalldirs: Likewise.
- * Makefile.am (mini_SUBDIRS): Add config.
- (EXTRA_DIST): Remove config.rpath.
-
- * configure.ac: Add AC_REVISION.
-
- * configure.ac: Add --enable-mudflap option.
-
-2004-01-11 Ulrich Drepper <drepper@redhat.com>
-
- * configure.ac: Drop libdwarf directory. Add libdw-po.
- * Makefile.am (all_SUBDIRS): Likewise.
- * elfutils.spec: Don't distribute anything from libdwarf.
-
-2004-01-05 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: Support separate libelf built.
-
- * elfutils.spec.in: Create separata elfutils-libelf-devel package.
- Install libdw DSOs.
-
- * configure.ac (AC_CONFIG_SRCDIR): Use libelf/libelf.h as the file
- name.
-
-2003-08-13 Ulrich Drepper <drepper@redhat.com>
-
- * elfutils.spec.in: Remove references to libebl.so.
-
-2003-08-11 Ulrich Drepper <drepper@redhat.com>
-
- * Moved to CVS archive.
-
-2000-08-25 Ulrich Drepper <drepper@redhat.com>
-
- * The beginning. See the NEWS file for the time being.
diff --git a/EXCEPTION b/EXCEPTION
deleted file mode 100644
index 491c576..0000000
--- a/EXCEPTION
+++ /dev/null
@@ -1,11 +0,0 @@
-This file describes the limits of the Exception under which you are allowed
-to distribute Non-GPL Code in linked combination with Red Hat elfutils.
-For the full text of the license, please see one of the header files
-included with the source distribution or the file COPYING found in the
-top level directory of the source.
-
-The Approved Interfaces are the functions declared in the files:
-
-libelf.h
-libdw.h
-libdwfl.h
diff --git a/GPG-KEY b/GPG-KEY
deleted file mode 100644
index cd60f82..0000000
--- a/GPG-KEY
+++ /dev/null
@@ -1,33 +0,0 @@
-Public key for drepper@redhat.com
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.2.1 (GNU/Linux)
-
-mQGiBDuFth0RBACPcHEkyqJE26wTXuuuCxpqJjxlBnNFkJGkWUoeu89QjzWgzXy/
-EA8+ptNBgCTPKnLEqhkRUyxAT/Uz+t+xbKqUtL54IzYfxO4NQsN/VVM0uppNfIJb
-MWvAjvpp2HCkd/32i693rlH+G9dvG8K57by3PBRHBgH2L8Q7t/QvA2AWpwCgzokX
-DDUiitysGn4rWO0rBBoR6OED/3ehpcHtbGixNoubRZAxpw99VTKs/I76OkrQzqcm
-+w+zwZeihJXC88yAHA77/LBB3YKaX3G4CmDQUbeRJ9zPlETTLmRMcF61dQdq/3qV
-Biq1sm6ctZ4uEpm8HnysKMT+VY4Xmj9LLzF2BdING9frcX9rk8Vk25iCLBronS0M
-IU3WA/sEvlUFlfbyCBRBoq+Rlr9u05fnHc7CLMKI7EIS1T1dLPxH1ivuUhyYNGAM
-RhCivBbT2Z0t/R4ksu3VdnPGkCyAAdWNSafSGqCYUzQH0u5Z8HK6c2iXrIX3Ipk5
-DhQOQ6k1tyYzuQw3cCf7RYRJ9/iup8RlscVt2kmGnSucqpxJCbQjVWxyaWNoIERy
-ZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT6IVwQTEQIAFwUCO4W2HQULBwoDBAMV
-AwIDFgIBAheAAAoJENoowjp5/0R0SqUAoL5HBbaRWR19vjldUeJvYCG2AR94AKDL
-nmVEaykaZWyyNg0OTuxLe1boa4hGBBARAgAGBQI8iQDvAAoJEFWW3Qzpv2U97wgA
-n1RVl6FbIHVVmT224nOp5b98OZVnAJ9ehXzM60RbmGi3kJNS30II+SGft4hGBBMR
-AgAGBQI9Tvt0AAoJEP3S3qzTM8uhUy0AoNqATBj2usEtJduGHukKZ9mQaycFAJ9y
-lq0MmZJwMZ3699e6rgMiHAMAVbkCDQQ7hbZPEAgAzuFAPq1sYUtpJClwX7+pdz1K
-dIgbxDKoSHh2rSRx24HLYY/xg9ps6fZF21/SBialKaB8BFnIeh8S9LXUtWt9aUeC
-klnnQwPbR0BGRcZAS7+nHZ9agiMd4CRe4RWFmS6KhIeUsDa70+8XhIm/C+Ogd7ag
-kBw7ykTb/jWHMyvcP9iY0QtmIatfVTDJUm7Rm5TtM1mDCml/gWIQJ5ezr9gv2NUG
-3kpNYwP+G9o4BLyTOHamix/0YHI/HiZSYiwq40ao0zROd/yXY6/a3mitN96AidJL
-5I5tbqnrFy6LmRvWmyOxWkJD/bF31rrO5PfVUgcVpUxbtW44PtVilhLuh+qjTwAD
-BQf+NTHwjUw1j+PZs/y5XnPw0x0ZdYGEl0I7NqtMgCxI4ZHT9jaLcLXARb3UVEuc
-1LuJ1tAA1ss1c1NLK3Lg+uZzeKMRffRYEUg0Emer8QGWr1uSOxDHcAzuRZX3PYNX
-cEGEyEm443DDnXr/4b8zYK6O+sy1Ld+SVxxp6jwtk0LyT7okgD0E1dDUzX+qxpsV
-ujbzdH4bdqocKouMNMT+BHeobNZpR4Tyz5+pwW+rw1+XZebyBUkIPXOoWPZpUTDG
-fZ+om9xfg0JOcKZIZ0X91dLQp5x99aCmzwWeWy9LFPTAf9pYky8wXzteEotE/Tkm
-DeA1caPC9IEK9BBrrS9TeubrEIhGBBgRAgAGBQI7hbZPAAoJENoowjp5/0R0Z38A
-mgM4FAquwltH0ooTdAmBMoCfKb4/AJ9ufAh4Rl9sFaCie/j8jdo02bcV1A==
-=Yeua
------END PGP PUBLIC KEY BLOCK-----
diff --git a/INSTALL b/INSTALL
deleted file mode 100644
index d3c5b40..0000000
--- a/INSTALL
+++ /dev/null
@@ -1,237 +0,0 @@
-Installation Instructions
-*************************
-
-Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
-2006, 2007 Free Software Foundation, Inc.
-
-This file is free documentation; the Free Software Foundation gives
-unlimited permission to copy, distribute and modify it.
-
-Basic Installation
-==================
-
-Briefly, the shell commands `./configure; make; make install' should
-configure, build, and install this package. The following
-more-detailed instructions are generic; see the `README' file for
-instructions specific to this package.
-
- The `configure' shell script attempts to guess correct values for
-various system-dependent variables used during compilation. It uses
-those values to create a `Makefile' in each directory of the package.
-It may also create one or more `.h' files containing system-dependent
-definitions. Finally, it creates a shell script `config.status' that
-you can run in the future to recreate the current configuration, and a
-file `config.log' containing compiler output (useful mainly for
-debugging `configure').
-
- It can also use an optional file (typically called `config.cache'
-and enabled with `--cache-file=config.cache' or simply `-C') that saves
-the results of its tests to speed up reconfiguring. Caching is
-disabled by default to prevent problems with accidental use of stale
-cache files.
-
- If you need to do unusual things to compile the package, please try
-to figure out how `configure' could check whether to do them, and mail
-diffs or instructions to the address given in the `README' so they can
-be considered for the next release. If you are using the cache, and at
-some point `config.cache' contains results you don't want to keep, you
-may remove or edit it.
-
- The file `configure.ac' (or `configure.in') is used to create
-`configure' by a program called `autoconf'. You need `configure.ac' if
-you want to change it or regenerate `configure' using a newer version
-of `autoconf'.
-
-The simplest way to compile this package is:
-
- 1. `cd' to the directory containing the package's source code and type
- `./configure' to configure the package for your system.
-
- Running `configure' might take a while. While running, it prints
- some messages telling which features it is checking for.
-
- 2. Type `make' to compile the package.
-
- 3. Optionally, type `make check' to run any self-tests that come with
- the package.
-
- 4. Type `make install' to install the programs and any data files and
- documentation.
-
- 5. You can remove the program binaries and object files from the
- source code directory by typing `make clean'. To also remove the
- files that `configure' created (so you can compile the package for
- a different kind of computer), type `make distclean'. There is
- also a `make maintainer-clean' target, but that is intended mainly
- for the package's developers. If you use it, you may have to get
- all sorts of other programs in order to regenerate files that came
- with the distribution.
-
- 6. Often, you can also type `make uninstall' to remove the installed
- files again.
-
-Compilers and Options
-=====================
-
-Some systems require unusual options for compilation or linking that the
-`configure' script does not know about. Run `./configure --help' for
-details on some of the pertinent environment variables.
-
- You can give `configure' initial values for configuration parameters
-by setting variables in the command line or in the environment. Here
-is an example:
-
- ./configure CC=c99 CFLAGS=-g LIBS=-lposix
-
- *Note Defining Variables::, for more details.
-
-Compiling For Multiple Architectures
-====================================
-
-You can compile the package for more than one kind of computer at the
-same time, by placing the object files for each architecture in their
-own directory. To do this, you can use GNU `make'. `cd' to the
-directory where you want the object files and executables to go and run
-the `configure' script. `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'.
-
- With a non-GNU `make', it is safer to compile the package for one
-architecture at a time in the source code directory. After you have
-installed the package for one architecture, use `make distclean' before
-reconfiguring for another architecture.
-
-Installation Names
-==================
-
-By default, `make install' installs the package's commands under
-`/usr/local/bin', include files under `/usr/local/include', etc. You
-can specify an installation prefix other than `/usr/local' by giving
-`configure' the option `--prefix=PREFIX'.
-
- You can specify separate installation prefixes for
-architecture-specific files and architecture-independent files. If you
-pass the option `--exec-prefix=PREFIX' to `configure', the package uses
-PREFIX as the prefix for installing programs and libraries.
-Documentation and other data files still use the regular prefix.
-
- In addition, if you use an unusual directory layout you can give
-options like `--bindir=DIR' to specify different values for particular
-kinds of files. Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.
-
- If the package supports it, you can cause programs to be installed
-with an extra prefix or suffix on their names by giving `configure' the
-option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
-
-Optional Features
-=================
-
-Some packages pay attention to `--enable-FEATURE' options to
-`configure', where FEATURE indicates an optional part of the package.
-They may also pay attention to `--with-PACKAGE' options, where PACKAGE
-is something like `gnu-as' or `x' (for the X Window System). The
-`README' should mention any `--enable-' and `--with-' options that the
-package recognizes.
-
- For packages that use the X Window System, `configure' can usually
-find the X include and library files automatically, but if it doesn't,
-you can use the `configure' options `--x-includes=DIR' and
-`--x-libraries=DIR' to specify their locations.
-
-Specifying the System Type
-==========================
-
-There may be some features `configure' cannot figure out automatically,
-but needs to determine by the type of machine the package will run on.
-Usually, assuming the package is built to be run on the _same_
-architectures, `configure' can figure that out, but if it prints a
-message saying it cannot guess the machine type, give it the
-`--build=TYPE' option. TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name which has the form:
-
- CPU-COMPANY-SYSTEM
-
-where SYSTEM can have one of these forms:
-
- OS KERNEL-OS
-
- See the file `config.sub' for the possible values of each field. If
-`config.sub' isn't included in this package, then this package doesn't
-need to know the machine type.
-
- If you are _building_ compiler tools for cross-compiling, you should
-use the option `--target=TYPE' to select the type of system they will
-produce code for.
-
- If you want to _use_ a cross compiler, that generates code for a
-platform different from the build platform, you should specify the
-"host" platform (i.e., that on which the generated programs will
-eventually be run) with `--host=TYPE'.
-
-Sharing Defaults
-================
-
-If you want to set default values for `configure' scripts to share, you
-can create a site shell script called `config.site' that gives default
-values for variables like `CC', `cache_file', and `prefix'.
-`configure' looks for `PREFIX/share/config.site' if it exists, then
-`PREFIX/etc/config.site' if it exists. Or, you can set the
-`CONFIG_SITE' environment variable to the location of the site script.
-A warning: not all `configure' scripts look for a site script.
-
-Defining Variables
-==================
-
-Variables not defined in a site shell script can be set in the
-environment passed to `configure'. However, some packages may run
-configure again during the build, and the customized values of these
-variables may be lost. In order to avoid this problem, you should set
-them in the `configure' command line, using `VAR=value'. For example:
-
- ./configure CC=/usr/local2/bin/gcc
-
-causes the specified `gcc' to be used as the C compiler (unless it is
-overridden in the site shell script).
-
-Unfortunately, this technique does not work for `CONFIG_SHELL' due to
-an Autoconf bug. Until the bug is fixed you can use this workaround:
-
- CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
-
-`configure' Invocation
-======================
-
-`configure' recognizes the following options to control how it operates.
-
-`--help'
-`-h'
- Print a summary of the options to `configure', and exit.
-
-`--version'
-`-V'
- Print the version of Autoconf used to generate the `configure'
- script, and exit.
-
-`--cache-file=FILE'
- Enable the cache: use and save the results of the tests in FILE,
- traditionally `config.cache'. FILE defaults to `/dev/null' to
- disable caching.
-
-`--config-cache'
-`-C'
- Alias for `--cache-file=config.cache'.
-
-`--quiet'
-`--silent'
-`-q'
- Do not print messages saying which checks are being made. To
- suppress all normal output, redirect it to `/dev/null' (any error
- messages will still be shown).
-
-`--srcdir=DIR'
- Look for the package's source code in directory DIR. Usually
- `configure' can determine that directory automatically.
-
-`configure' also accepts some other, not widely useful, options. Run
-`configure --help' for more details.
-
diff --git a/Makefile.am b/Makefile.am
deleted file mode 100644
index 44d67d5..0000000
--- a/Makefile.am
+++ /dev/null
@@ -1,53 +0,0 @@
-## Process this file with automake to create Makefile.in
-## Configure input file for elfutils.
-##
-## Copyright (C) 1996-2002, 2003, 2004, 2005, 2006, 2008 Red Hat, Inc.
-## This file is part of Red Hat elfutils.
-##
-## Red Hat elfutils is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by the
-## Free Software Foundation; version 2 of the License.
-##
-## Red Hat elfutils 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
-## General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License along
-## with Red Hat elfutils; if not, write to the Free Software Foundation,
-## Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-##
-## Red Hat elfutils is an included package of the Open Invention Network.
-## An included package of the Open Invention Network is a package for which
-## Open Invention Network licensees cross-license their patents. No patent
-## license is granted, either expressly or impliedly, by designation as an
-## included package. Should you wish to participate in the Open Invention
-## Network licensing program, please visit www.openinventionnetwork.com
-## <http://www.openinventionnetwork.com>.
-##
-ACLOCAL_AMFLAGS = -I m4
-
-pkginclude_HEADERS = version.h
-
-# Add doc back when we have some real content.
-SUBDIRS = config m4 lib libelf libebl libdwfl libdw libcpu libasm backends \
- src po tests
-
-EXTRA_DIST = elfutils.spec GPG-KEY NOTES EXCEPTION
-
-# Make sure the test install uses lib64 when $LIB will yield lib64.
-# Make sure the test build uses the same compiler, which on e.g. ppc64
-# determines which platform we are actually testing.
-DISTCHECK_CONFIGURE_FLAGS = \
- --libdir=`echo $(libdir) | sed "s,^$(exec_prefix),$$dc_install_base,"`\
- CC="$(CC)"
-
-distcheck-hook:
- chmod -R u+w $(distdir)
-
-rpm: dist
- rpmbuild -ts --sign elfutils-@PACKAGE_VERSION@.tar.gz
-
-# Tell version 3.79 and up of GNU make to not build goals in this
-# directory in parallel.
-.NOTPARALLEL:
diff --git a/Makefile.in b/Makefile.in
deleted file mode 100644
index d7c9306..0000000
--- a/Makefile.in
+++ /dev/null
@@ -1,694 +0,0 @@
-# Makefile.in generated by automake 1.10.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = .
-DIST_COMMON = README $(am__configure_deps) $(pkginclude_HEADERS) \
- $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(srcdir)/config.h.in $(top_srcdir)/config/elfutils.spec.in \
- $(top_srcdir)/config/version.h.in $(top_srcdir)/configure \
- ABOUT-NLS AUTHORS COPYING ChangeLog INSTALL NEWS THANKS TODO
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
- configure.lineno config.status.lineno
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = config.h
-CONFIG_CLEAN_FILES = elfutils.spec version.h
-SOURCES =
-DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
- html-recursive info-recursive install-data-recursive \
- install-dvi-recursive install-exec-recursive \
- install-html-recursive install-info-recursive \
- install-pdf-recursive install-ps-recursive install-recursive \
- installcheck-recursive installdirs-recursive pdf-recursive \
- ps-recursive uninstall-recursive
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
- $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
- *) f=$$p;; \
- esac;
-am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-am__installdirs = "$(DESTDIR)$(pkgincludedir)"
-pkgincludeHEADERS_INSTALL = $(INSTALL_HEADER)
-HEADERS = $(pkginclude_HEADERS)
-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
- distclean-recursive maintainer-clean-recursive
-ETAGS = etags
-CTAGS = ctags
-DIST_SUBDIRS = $(SUBDIRS)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-distdir = $(PACKAGE)-$(VERSION)
-top_distdir = $(distdir)
-am__remove_distdir = \
- { test ! -d $(distdir) \
- || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
- && rm -fr $(distdir); }; }
-GZIP_ENV = --best
-DIST_ARCHIVES = $(distdir).tar.bz2
-distuninstallcheck_listfiles = find . -type f -print
-distcleancheck_listfiles = find . -type f -print
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEBUGPRED = @DEBUGPRED@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EXEEXT = @EXEEXT@
-GMSGFMT = @GMSGFMT@
-GMSGFMT_015 = @GMSGFMT_015@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LDFLAGS = @LDFLAGS@
-LEX = @LEX@
-LEXLIB = @LEXLIB@
-LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
-LIBEBL_SUBDIR = @LIBEBL_SUBDIR@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LOCALEDIR = @LOCALEDIR@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MKDIR_P = @MKDIR_P@
-MODVERSION = @MODVERSION@
-MSGFMT = @MSGFMT@
-MSGFMT_015 = @MSGFMT_015@
-MSGMERGE = @MSGMERGE@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-RANLIB = @RANLIB@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-USE_NLS = @USE_NLS@
-VERSION = @VERSION@
-XGETTEXT = @XGETTEXT@
-XGETTEXT_015 = @XGETTEXT_015@
-YACC = @YACC@
-YFLAGS = @YFLAGS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-base_cpu = @base_cpu@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-eu_version = @eu_version@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-ACLOCAL_AMFLAGS = -I m4
-pkginclude_HEADERS = version.h
-
-# Add doc back when we have some real content.
-SUBDIRS = config m4 lib libelf libebl libdwfl libdw libcpu libasm backends \
- src po tests
-
-EXTRA_DIST = elfutils.spec GPG-KEY NOTES EXCEPTION
-
-# Make sure the test install uses lib64 when $LIB will yield lib64.
-# Make sure the test build uses the same compiler, which on e.g. ppc64
-# determines which platform we are actually testing.
-DISTCHECK_CONFIGURE_FLAGS = \
- --libdir=`echo $(libdir) | sed "s,^$(exec_prefix),$$dc_install_base,"`\
- CC="$(CC)"
-
-all: config.h
- $(MAKE) $(AM_MAKEFLAGS) all-recursive
-
-.SUFFIXES:
-am--refresh:
- @:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- echo ' cd $(srcdir) && $(AUTOMAKE) --gnits '; \
- cd $(srcdir) && $(AUTOMAKE) --gnits \
- && exit 0; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits Makefile'; \
- cd $(top_srcdir) && \
- $(AUTOMAKE) --gnits Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- echo ' $(SHELL) ./config.status'; \
- $(SHELL) ./config.status;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- $(SHELL) ./config.status --recheck
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(srcdir) && $(AUTOCONF)
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
-
-config.h: stamp-h1
- @if test ! -f $@; then \
- rm -f stamp-h1; \
- $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
- else :; fi
-
-stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
- @rm -f stamp-h1
- cd $(top_builddir) && $(SHELL) ./config.status config.h
-$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_srcdir) && $(AUTOHEADER)
- rm -f stamp-h1
- touch $@
-
-distclean-hdr:
- -rm -f config.h stamp-h1
-elfutils.spec: $(top_builddir)/config.status $(top_srcdir)/config/elfutils.spec.in
- cd $(top_builddir) && $(SHELL) ./config.status $@
-version.h: $(top_builddir)/config.status $(top_srcdir)/config/version.h.in
- cd $(top_builddir) && $(SHELL) ./config.status $@
-install-pkgincludeHEADERS: $(pkginclude_HEADERS)
- @$(NORMAL_INSTALL)
- test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)"
- @list='$(pkginclude_HEADERS)'; for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- f=$(am__strip_dir) \
- echo " $(pkgincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgincludedir)/$$f'"; \
- $(pkgincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgincludedir)/$$f"; \
- done
-
-uninstall-pkgincludeHEADERS:
- @$(NORMAL_UNINSTALL)
- @list='$(pkginclude_HEADERS)'; for p in $$list; do \
- f=$(am__strip_dir) \
- echo " rm -f '$(DESTDIR)$(pkgincludedir)/$$f'"; \
- rm -f "$(DESTDIR)$(pkgincludedir)/$$f"; \
- done
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-# (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
- @failcom='exit 1'; \
- for f in x $$MAKEFLAGS; do \
- case $$f in \
- *=* | --[!k]*);; \
- *k*) failcom='fail=yes';; \
- esac; \
- done; \
- dot_seen=no; \
- target=`echo $@ | sed s/-recursive//`; \
- list='$(SUBDIRS)'; for subdir in $$list; do \
- echo "Making $$target in $$subdir"; \
- if test "$$subdir" = "."; then \
- dot_seen=yes; \
- local_target="$$target-am"; \
- else \
- local_target="$$target"; \
- fi; \
- (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
- || eval $$failcom; \
- done; \
- if test "$$dot_seen" = "no"; then \
- $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
- fi; test -z "$$fail"
-
-$(RECURSIVE_CLEAN_TARGETS):
- @failcom='exit 1'; \
- for f in x $$MAKEFLAGS; do \
- case $$f in \
- *=* | --[!k]*);; \
- *k*) failcom='fail=yes';; \
- esac; \
- done; \
- dot_seen=no; \
- case "$@" in \
- distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
- *) list='$(SUBDIRS)' ;; \
- esac; \
- rev=''; for subdir in $$list; do \
- if test "$$subdir" = "."; then :; else \
- rev="$$subdir $$rev"; \
- fi; \
- done; \
- rev="$$rev ."; \
- target=`echo $@ | sed s/-recursive//`; \
- for subdir in $$rev; do \
- echo "Making $$target in $$subdir"; \
- if test "$$subdir" = "."; then \
- local_target="$$target-am"; \
- else \
- local_target="$$target"; \
- fi; \
- (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
- || eval $$failcom; \
- done && test -z "$$fail"
-tags-recursive:
- list='$(SUBDIRS)'; for subdir in $$list; do \
- test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
- done
-ctags-recursive:
- list='$(SUBDIRS)'; for subdir in $$list; do \
- test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
- done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- here=`pwd`; \
- if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
- include_option=--etags-include; \
- empty_fix=.; \
- else \
- include_option=--include; \
- empty_fix=; \
- fi; \
- list='$(SUBDIRS)'; for subdir in $$list; do \
- if test "$$subdir" = .; then :; else \
- test ! -f $$subdir/TAGS || \
- tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
- fi; \
- done; \
- list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$tags $$unique; \
- fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- test -z "$(CTAGS_ARGS)$$tags$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$tags $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && cd $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) $$here
-
-distclean-tags:
- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
- @case `sed 15q $(srcdir)/NEWS` in \
- *"$(VERSION)"*) : ;; \
- *) \
- echo "NEWS not updated; not releasing" 1>&2; \
- exit 1;; \
- esac
- $(am__remove_distdir)
- test -d $(distdir) || mkdir $(distdir)
- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- list='$(DISTFILES)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
- fi; \
- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
- else \
- test -f $(distdir)/$$file \
- || cp -p $$d/$$file $(distdir)/$$file \
- || exit 1; \
- fi; \
- done
- list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
- if test "$$subdir" = .; then :; else \
- test -d "$(distdir)/$$subdir" \
- || $(MKDIR_P) "$(distdir)/$$subdir" \
- || exit 1; \
- distdir=`$(am__cd) $(distdir) && pwd`; \
- top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
- (cd $$subdir && \
- $(MAKE) $(AM_MAKEFLAGS) \
- top_distdir="$$top_distdir" \
- distdir="$$distdir/$$subdir" \
- am__remove_distdir=: \
- am__skip_length_check=: \
- distdir) \
- || exit 1; \
- fi; \
- done
- -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
- ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
- ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
- ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
- || chmod -R a+r $(distdir)
-dist-gzip: distdir
- tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
- $(am__remove_distdir)
-dist-bzip2: distdir
- tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
- $(am__remove_distdir)
-
-dist-lzma: distdir
- tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
- $(am__remove_distdir)
-
-dist-tarZ: distdir
- tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
- $(am__remove_distdir)
-
-dist-shar: distdir
- shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
- $(am__remove_distdir)
-
-dist-zip: distdir
- -rm -f $(distdir).zip
- zip -rq $(distdir).zip $(distdir)
- $(am__remove_distdir)
-
-dist dist-all: distdir
- tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
- $(am__remove_distdir)
-
-# This target untars the dist file and tries a VPATH configuration. Then
-# it guarantees that the distribution is self-contained by making another
-# tarfile.
-distcheck: dist
- case '$(DIST_ARCHIVES)' in \
- *.tar.gz*) \
- GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
- *.tar.bz2*) \
- bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
- *.tar.lzma*) \
- unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\
- *.tar.Z*) \
- uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
- *.shar.gz*) \
- GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
- *.zip*) \
- unzip $(distdir).zip ;;\
- esac
- chmod -R a-w $(distdir); chmod a+w $(distdir)
- mkdir $(distdir)/_build
- mkdir $(distdir)/_inst
- chmod a-w $(distdir)
- dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
- && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
- && $(MAKE) $(AM_MAKEFLAGS) distcheck-hook \
- && cd $(distdir)/_build \
- && ../configure --srcdir=.. --prefix="$$dc_install_base" \
- $(DISTCHECK_CONFIGURE_FLAGS) \
- && $(MAKE) $(AM_MAKEFLAGS) \
- && $(MAKE) $(AM_MAKEFLAGS) dvi \
- && $(MAKE) $(AM_MAKEFLAGS) check \
- && $(MAKE) $(AM_MAKEFLAGS) install \
- && $(MAKE) $(AM_MAKEFLAGS) installcheck \
- && $(MAKE) $(AM_MAKEFLAGS) uninstall \
- && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
- distuninstallcheck \
- && chmod -R a-w "$$dc_install_base" \
- && ({ \
- (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
- && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
- && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
- && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
- distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
- } || { rm -rf "$$dc_destdir"; exit 1; }) \
- && rm -rf "$$dc_destdir" \
- && $(MAKE) $(AM_MAKEFLAGS) dist \
- && rm -rf $(DIST_ARCHIVES) \
- && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
- $(am__remove_distdir)
- @(echo "$(distdir) archives ready for distribution: "; \
- list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
- sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
-distuninstallcheck:
- @cd $(distuninstallcheck_dir) \
- && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
- || { echo "ERROR: files left after uninstall:" ; \
- if test -n "$(DESTDIR)"; then \
- echo " (check DESTDIR support)"; \
- fi ; \
- $(distuninstallcheck_listfiles) ; \
- exit 1; } >&2
-distcleancheck: distclean
- @if test '$(srcdir)' = . ; then \
- echo "ERROR: distcleancheck can only run from a VPATH build" ; \
- exit 1 ; \
- fi
- @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
- || { echo "ERROR: files left in build directory after distclean:" ; \
- $(distcleancheck_listfiles) ; \
- exit 1; } >&2
-check-am: all-am
-check: check-recursive
-all-am: Makefile $(HEADERS) config.h
-installdirs: installdirs-recursive
-installdirs-am:
- for dir in "$(DESTDIR)$(pkgincludedir)"; do \
- test -z "$$dir" || $(MKDIR_P) "$$dir"; \
- done
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-recursive
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-clean: clean-recursive
-
-clean-am: clean-generic mostlyclean-am
-
-distclean: distclean-recursive
- -rm -f $(am__CONFIG_DISTCLEAN_FILES)
- -rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-hdr distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-info: info-recursive
-
-info-am:
-
-install-data-am: install-pkgincludeHEADERS
-
-install-dvi: install-dvi-recursive
-
-install-exec-am:
-
-install-html: install-html-recursive
-
-install-info: install-info-recursive
-
-install-man:
-
-install-pdf: install-pdf-recursive
-
-install-ps: install-ps-recursive
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
- -rm -f $(am__CONFIG_DISTCLEAN_FILES)
- -rm -rf $(top_srcdir)/autom4te.cache
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-generic
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am: uninstall-pkgincludeHEADERS
-
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
- install-strip
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
- all all-am am--refresh check check-am clean clean-generic \
- ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
- dist-lzma dist-shar dist-tarZ dist-zip distcheck distclean \
- distclean-generic distclean-hdr distclean-tags distcleancheck \
- distdir distuninstallcheck dvi dvi-am html html-am info \
- info-am install install-am install-data install-data-am \
- install-dvi install-dvi-am install-exec install-exec-am \
- install-html install-html-am install-info install-info-am \
- install-man install-pdf install-pdf-am \
- install-pkgincludeHEADERS install-ps install-ps-am \
- install-strip installcheck installcheck-am installdirs \
- installdirs-am maintainer-clean maintainer-clean-generic \
- mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \
- tags-recursive uninstall uninstall-am \
- uninstall-pkgincludeHEADERS
-
-
-distcheck-hook:
- chmod -R u+w $(distdir)
-
-rpm: dist
- rpmbuild -ts --sign elfutils-@PACKAGE_VERSION@.tar.gz
-
-# Tell version 3.79 and up of GNU make to not build goals in this
-# directory in parallel.
-.NOTPARALLEL:
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/NEWS b/NEWS
deleted file mode 100644
index baa9d59..0000000
--- a/NEWS
+++ /dev/null
@@ -1,1048 +0,0 @@
-Version 0.138:
-
-Install <elfutils/version.h> header file for applications to use in source
-version compatibility checks.
-
-libebl: backend fixes for i386 TLS relocs; backend support for NT_386_IOPERM
-
-libcpu: disassembler fixes
-
-libdwfl: bug fixes
-
-libelf: bug fixes
-
-nm: bug fixes for handling corrupt input files
-
-Version 0.137:
-
-Minor fixes for unreleased 0.136 release.
-
-Version 0.136:
-
-libdwfl: bug fixes; new "segment" interfaces;
- all the libdwfl-based tools now support --core=COREFILE option
-
-Version 0.135:
-
-libdwfl: bug fixes
-
-strip: changed handling of ET_REL files wrt symbol tables and relocs
-
-Version 0.134:
-
-elflint: backend improvements for sparc, alpha
-
-libdwfl, libelf: bug fixes
-
-Version 0.133:
-
-readelf, elflint, libebl: SHT_GNU_ATTRIBUTE section handling (readelf -A)
-
-readelf: core note handling for NT_386_TLS, NT_PPC_SPE, Alpha NT_AUXV
-
-libdwfl: bug fixes and optimization in relocation handling
-
-elfcmp: bug fix for non-allocated section handling
-
-ld: implement newer features of binutils linker.
-
-Version 0.132:
-
-libcpu: Implement x86 and x86-64 disassembler.
-libasm: Add interface for disassembler.
-
-all programs: add debugging of branch prediction.
-
-libelf: new function elf_scnshndx.
-
-Version 0.131:
-
-libdw: DW_FORM_ref_addr support; dwarf_formref entry point now deprecated;
- bug fixes for oddly-formatted DWARF
-
-libdwfl: bug fixes in offline archive support, symbol table handling;
- apply partial relocations for dwfl_module_address_section on ET_REL
-
-libebl: powerpc backend support for Altivec registers
-
-Version 0.130:
-
-readelf: -p option can take an argument like -x for one section,
- or no argument (as before) for all SHF_STRINGS sections;
- new option --archive-index (or -c);
- improved -n output for core files, on many machines
-
-libelf: new function elf_getdata_rawchunk, replaces gelf_rawchunk;
- new functions gelf_getnote, gelf_getauxv, gelf_update_auxv
-
-readelf, elflint: handle SHT_NOTE sections without requiring phdrs
-
-elflint: stricter checks on debug sections
-
-libdwfl: new functions dwfl_build_id_find_elf, dwfl_build_id_find_debuginfo,
- dwfl_module_build_id, dwfl_module_report_build_id;
- support dynamic symbol tables found via phdrs;
- dwfl_standard_find_debuginfo now uses build IDs when available
-
-unstrip: new option --list (or -n)
-
-libebl: backend improvements for sparc, alpha, powerpc
-
-Version 0.129:
-
-readelf: new options --hex-dump (or -x), --strings (or -p)
-
-addr2line: new option --symbols (or -S)
-
-Version 0.128:
-
-new program: unstrip
-
-elfcmp: new option --hash-inexact
-
-Version 0.127:
-
-libdw: new function dwarf_getsrcdirs
-
-libdwfl: new functions dwfl_module_addrsym, dwfl_report_begin_add,
- dwfl_module_address_section
-
-Version 0.126:
-
-new program: ar
-
-Version 0.125:
-
-elflint: Compare DT_GNU_HASH tests.
-
-move archives into -static RPMs
-
-libelf, elflint: better support for core file handling
-
-Version 0.124:
-
-libebl: sparc backend support for return value location
-
-libebl, libdwfl: backend register name support extended with more info
-
-libelf, libdw: bug fixes for unaligned accesses on machines that care
-
-readelf, elflint: trivial bugs fixed
-
-Version 0.123:
-
-libebl: Backend build fixes, thanks to Stepan Kasal.
-
-libebl: ia64 backend support for register names, return value location
-
-libdwfl: Handle truncated linux kernel module section names.
-
-libdwfl: Look for linux kernel "vmlinux" files with ".debug" suffix.
-
-elflint: Fix checks to permit --hash-style=gnu format.
-
-Version 0.122:
-
-libebl: add function to test for relative relocation
-
-elflint: fix and extend DT_RELCOUNT/DT_RELACOUNT checks
-
-elflint, readelf: add support for DT_GNU_HASH
-libelf: add elf_gnu_hash
-
-elflint, readelf: add support for 64-bit SysV-style hash tables
-
-libdwfl: new functions dwfl_module_getsymtab, dwfl_module_getsym.
-
-Version 0.121:
-
-libelf: bug fixes for rewriting existing files when using mmap.
-
-make all installed headers usable in C++ code.
-
-readelf: better output format.
-
-elflint: fix tests of dynamic section content.
-
-ld: Implement --as-needed, --execstack, PT_GNU_STACK. Many small patches.
-
-libdw, libdwfl: handle files without aranges info.
-
-Version 0.120:
-
-Bug fixes.
-
-dwarf.h updated for DWARF 3.0 final specification.
-
-libdwfl: New function dwfl_version.
-
-The license is now GPL for most files. The libelf, libebl, libdw,
-and libdwfl libraries have additional exceptions. Add reference to
-OIN.
-
-Version 0.119:
-
-bug fixes
-
-Version 0.118:
-
-elflint: more tests.
-
-libdwfl: New function dwfl_module_register_names.
-
-libebl: New backend hook for register names.
-
-Version 0.117:
-
-libdwfl: New function dwfl_module_return_value_location.
-
-libebl: Backend improvements for several CPUs.
-
-Version 0.116:
-
-libdw: New functions dwarf_ranges, dwarf_entrypc, dwarf_diecu,
- dwarf_entry_breakpoints. Removed Dwarf_Func type and functions
- dwarf_func_name, dwarf_func_lowpc, dwarf_func_highpc,
- dwarf_func_entrypc, dwarf_func_die; dwarf_getfuncs callback now uses
- Dwarf_Die, and dwarf_func_file, dwarf_func_line, dwarf_func_col
- replaced by dwarf_decl_file, dwarf_decl_line, dwarf_decl_column;
- dwarf_func_inline, dwarf_func_inline_instances now take Dwarf_Die.
- Type Dwarf_Loc renamed to Dwarf_Op; dwarf_getloclist,
- dwarf_addrloclists renamed dwarf_getlocation, dwarf_getlocation_addr.
-
-Version 0.115:
-
-libelf: speed-ups of non-mmap reading.
-
-strings: New program.
-
-Implement --enable-gcov option for configure.
-
-libdw: New function dwarf_getscopes_die.
-
-Version 0.114:
-
-libelf: new function elf_getaroff
-
-libdw: Added dwarf_func_die, dwarf_func_inline, dwarf_func_inline_instances.
-
-libdwfl: New functions dwfl_report_offline, dwfl_offline_section_address,
- dwfl_linux_kernel_report_offline.
-
-ranlib: new program
-
-Version 0.113:
-
-elflint: relax a bit. Allow version definitions for defined symbols against
-DSO versions also for symbols in nobits sections. Allow .rodata section
-to have STRINGS and MERGE flag set.
-
-strip: add some more compatibility with binutils.
-
-Version 0.112:
-
-elfcmp: some more relaxation.
-
-elflint: many more tests, especially regarding to symbol versioning.
-
-libelf: Add elfXX_offscn and gelf_offscn.
-
-libasm: asm_begin interface changes.
-
-libebl: Add three new interfaces to directly access machine, class, and
-data encoding information.
-
-objdump: New program. Just the beginning.
-
-Version 0.111:
-
-libdw: now contains all of libdwfl. The latter is not installed anymore.
-
-elfcmp: little usability tweak, name and index of differing section is printed.
-
-Version 0.110:
-
-libelf: fix a number of problems with elf_update
-
-elfcmp: fix a few bugs. Compare gaps.
-
-Fix a few PLT problems and mudflap build issues.
-
-libebl: Don't expose Ebl structure definition in libebl.h. It's now private.
-
-Version 0.109:
-
-libebl: Check for matching modules.
-
-elflint: Check that copy relocations only happen for OBJECT or NOTYPE symbols.
-
-elfcmp: New program.
-
-libdwfl: New library.
-
-Version 0.108:
-
-strip: fix bug introduced in last change
-
-libdw: records returned by dwarf_getsrclines are now sorted by address
-
-Version 0.107:
-
-readelf: improve DWARF output format
-
-strip: support Linux kernel modules
-
-Version 0.106:
-
-libdw: Updated dwarf.h from DWARF3 spec
-libdw: add new funtions dwarf_func_entrypc, dwarf_func_file, dwarf_func_line,
-dwarf_func_col, dwarf_getsrc_file
-
-Version 0.105:
-
-addr2line: New program
-
-libdw: add new functions: dwarf_addrdie, dwarf_macro_*, dwarf_getfuncs,
-dwarf_func_*.
-
-findtextrel: use dwarf_addrdie
-
-Version 0.104:
-
-findtextrel: New program.
-
-Version 0.103:
-
-libdw: Fix using libdw.h with gcc < 4 and C++ code. Compiler bug.
-
-Version 0.102:
-
-More Makefile and spec file cleanups.
-
-Version 0.101:
-
-Remove most gettext autoconf handling.
-
-Add more warnings
-
-Fix resulting problems. One actual bug found and fixed this way
-
-Version 0.100:
-
-libebl: Fix x86-64 relocations.
-
-Add -Wunused -Wextra warnings.
-
-Some cleanups resulting from those additional warnings.
-
-Lots of Makefile cleanup.
-
-Version 0.99:
-
-libelf: add gelf_checksum prototype to <libelf.h>
-
-libelf: fix elf*_checksum handling of NOBITS sections
-
-Finish mudflap support.
-
-Fix three bugs found by mudflap.
-
-ld: add as_needed support
-
-Version 0.98:
-
-readelf: in section to segment mapping, indicate read-only sections.
-
-elflint: more relaxation for GNU ld
-
-Version 0.97:
-
-Fix compiling with gcc 4.0.
-Some tests called elflint without appropriate LD_LIBRARY_PATH.
-
-Version 0.96:
-
-Fix support for platforms with lib64.
-
-Version 0.95:
-
-libebl: add ppc and ppc64 support
-
-readelf: fix minimal memory leak.
-
-Add support to compile with mudflap.
-
-Modernize configure.ac. Move scripts in config subdir.
-
-Modernize *-po directory infrastructure.
-
-libelf: Add gelf_getlib and gelf_update_lib
-
-readelf: print liblist sections
-
-Version 0.94:
-
-Fix some minimal build problems.
-
-Version 0.93:
-
-ibdw: tons of new functionality and bug fixes. Several interface changes.
-
-readelf: use libdw now.
-
-libdwarf: removed completely.
-
-Version 0.92:
-
-configuration changes.
-
-Version 0.91:
-
-libdw: fix memory handling. Implement source line handling.
-nm: use libdw instead of libdwarf.
-libelf: change to GPL from OSL1 for now.
-
-Version 0.90:
-
-libebl: Recognize a few more section types and dynamic tags and return
-approriate strings.
-
-Version 0.89:
-
-strip: fix overwriting of symbol table in input file.
-
-Version 0.88:
-
-libebl: Add some ia64 bits.
-
-Version 0.87:
-
-Bug fixes for big endian and some 64-bit machines.
-
-Version 0.86:
-
-strip: fix handling of Alpha and s390x which use incorrect hash bucket sizes.
-
-ld: tons of changes, moving towards usability.
-
-Version 0.85:
-
-strip: update section group symbol index if the associated symbol table changed
-
-libelf: fix two problems with generating output not via mmap
-
-elflint: add probably 10-15 more tests
-libebl: add support for some of the new tests
-
-ld: gazillion changes
-
-Version 0.84:
-
-elflint: deal with .rel.dyn section. Fix a problem with rela platforms.
-Handle PT_GNU_STACK. Change to write messages to stdout.
-
-readelf: fix a problem with version information in the symbol table output.
-
-strip: update all version symbol table entries
-
-Version 0.83:
-
-size: fix a warning
-
-strip: last changed caused problems when the symbol table is before the
-relocation section. Fixed. This fix also improved the asymptotic
-behavior if many symbol table sections are present.
-
-Version 0.82:
-
-Run strip tests with the correct libelf and libebl.
-
-libelf: fix bug in verneed byte order changing code.
-
-Version 0.81:
-
-strip: Remove unused symbol table entries. This might require updating
-various other sections.
-
-Version 0.80:
-
-Fix some libelf problems with ET_REL files.
-
-Version 0.79:
-
-More warning changes, mainly by jbj.
-
-libdw: yet more new code. dwarf_child and dwarf_sibling should now actually
-work.
-
-Version 0.78:
-
-libdw: 10+ new functions. get-pubnames2 works now fully. Almost all the
-code needed for nm is in place.
-
-Version 0.77:
-
-cleanups to compile cleanly with gcc 3.3 and -Werror.
-
-libdw: some new code.
-
-Version 0.76:
-
-libebl: Fix last patch to recognize relocation sections. We must not
-use the name.
-
-Version 0.75:
-
-libebl: .debug_ranges is a DWARF 3 debug section
-libebl: recognize relocation sections for debug section
-Patches by Jakub Jelinek.
-
-Version 0.74:
-
-Cleanups and more SPARC support by Tom Callaway <tcallaway@redhat.com>.
-
-Version 0.73:
-
-64-bit cleanups for the programs.
-
-Version 0.72:
-
-libelf: and yet more fun with endian tranformation at output time.
-
-Version 0.71:
-
-libelf: more fun with endian tranformation at output time. Add test for it.
-
-Version 0.70:
-
-libelf: Two little bugs left from previous patch to handle section output
-order.
-
-libelf: add unlikely in some more places.
-
-Version 0.69:
-
-libelf: fix output routines to handle case where section indeces and
-ordre in the output file don't match correctly. Patch by Jakub.
-
-elflint: fix test of note section content for 64-bit platforms and files
-with different byte order.
-
-Version 0.68:
-
-libebl: Fix SH_ENTSIZE_HASH definition (patch by Jakub)
-
-Version 0.67:
-
-libelf: correct mistake in error string handling.
-
-libelf: Implement ELF_F_PERMISSIVE.
-strip: Implement --permissive option.
-
-Version 0.66:
-
-strip: Implement -g option.
-
-libelf: Handle broken hash table entry sizes.
-
-libebl: New function ebl_debugscn_p. Use it where appropriate.
-
-Version 0.65:
-
-libelf: Use correct file size for NOBITS section with ELF_F_LAYOUT set
-
-Version 0.64:
-
-libelf: Make error handling more robust.
-libelf: Use TLS in error handler if configured with --enable-tls
-
-tests: input files are now distributed, not uuencoded in the shell scripts
-
-libdw: implement error handling, dwarf_get_pubnames
-
-Version 0.63:
-
-Build (incomplete) libdw.
-
-Version 0.62:
-
-Get rid of libtool.
-
-Version 0.61:
-
-Fix URL of OSL.
-
-Version 0.60:
-
-libebl: Handle .gnu.warning.* sections correctly.
-
-size: Implement -t option.
-
-libebl: Add IA-64 support.
-libebl: Update SH relocations.
-libebl: Add Alpha support.
-libebl: Add Arm support.
-libebl: Add support for all currently known architecture to the loader.
-
-Version 0.59:
-
-nm: Implement -S option. Correct portable output format. Implement -s option.
-
-libelf: Take offset of archive into account in elf_rand.
-
-Version 0.58:
-
-strip: fix handling of ET_REL files.
-Add tests for strip.
-
-Version 0.57:
-
-strip: respect layout of input file
-
-Version 0.56:
-
-strip: handle files with large number of sections.
-
-Version 0.55:
-
-libelf: quite a few bug fixes by Alex Larsson.
-
-strip: implement -f option to place stripped sections into a separate
-file. By Alex Larsson.
-
-Version 0.54:
-
-strip: don't let STT_SECTION symbols keeps sections from being removed
-
-elflint: local symbols are allowed in .dynsym
-elflint: special case .rel.dyn a bit
-
-Version 0.53:
-
-elflint: check types and flags of special sections defined in gABI
-
-libebl: add x86-64 support
-
-Version 0.52:
-
-Start improvement of debug info handling in nm.
-
-libasm: implement asm_adduleb128 and asm_addsleb128 and a test for them
-
-Version 0.51:
-
-Fix build on 64-bit platforms.
-
-Version 0.50:
-
-nm: print file/line number also for local symbols
-
-use versions scripts not libtool's useless -export-symbols option
-
-Version 0.49:
-
-Update to autoconf 2.54 and automake 1.7.
-
-elflint: check note sections
-
-libdwarf: a number of bug fixes
-
-readelf: print .debug_info section content
-
-dwarf.h: Update from draft 7
-
-Version 0.48:
-
-libcpu: beginning
-
-libelf: new function to read parts of the ELF file
-
-libebl: support for note section handling
-
-readelf: dump note sections
-
-Version 0.47:
-
-libelf: fix little new section-handling related bugs in elf_getshstrndx
-and elf_nextscn
-
-elflint: tests for mandatory content of dynamic section
-
-libasm: better handling of absolute symbols
-
-Version 0.46:
-
-libasm: rewrite to store Elf_Scn* instead of indices
-
-nm: finish many-section support
-
-nm: use debug in to print file/line info in sysv format
-
-libdwarf: fix a few bugs in DIE handling
-
-Version 0.45:
-
-libelf: major rewrite to keep Elf_Scn references valid until elf_end
-
-Version 0.44:
-
-libasm: Add support for bss, ABS, and COM sections.
-
-libebl: ebl_section_name takes now two index arguments to distinguish
-between special sections and extended sections
-
-Version 0.43:
-
-General: fix a few problem gcc 3.1 had with the code.
-
-libelf: implement {gelf,elf32,elf64}_checksum
-
-libelf: optimze DSO: fewer relocations, fewer PLTs
-
-add msg_tst test
-
-ld: use correct section header string table index; write correct index
-
-add dependencies for *.sym files
-
-Version 0.42:
-
-libelf: add elf_getshnum and elf_getshstrndx
-
-libebl: update section type name function
-
-elflint: tons of fixes wrt large number of sections. New tests in this area.
-Same amount of other bug fixes.
-
-size, strip, nm: better support for large number of sections. Including
-using correct section header string table
-
-libasm: correctly create data structures for large number of sections
-
-new tests asm-tst4 and asm-tst5 to check large number of sections
-
-libasm: implement section group generation
-
-elflint: more tests on section groups. Improve performance on existing
-section group tests
-
-Version 0.41:
-
-ld: add undefined symbols to dynamic symbol table if --export-dynamic is
-not given
-
-ld: fix value of e_entry
-
-Version 0.40:
-
-elflint: print section names in error messages
-
-elflint: mustn't warn about multiple DT_NULL
-
-ld: don't emit all symbols if --export-dynamic is not given
-
-ld: correct compute symbol address in output file (section index was off by 1)
-
-ld: generate correct version info in dynsym without --export-dynamic and
-in symtab
-
-Version 0.39:
-
-Fix check of various e_*size entries in elflint.
-
-Handle text output in asm_newsym.
-
-Finish checks in asm-tst3.
-
-Version 0.38:
-
-Update to autoconf 2.53, automake 1.6, gettext 0.11+.
-
-Introduce *.sym files to restrict export from DSOs.
-
-Use attribute_hidden and internal_function to optimize DSO code.
-
-Add TLS definitions in elf.h and handle them in readelf.
-
-Fix bug in verdef section generation in ld.
-
-Add initial libasm code.
-
-Version 0.37:
-
-Implement better hash size optimization heuristic in ld. It uses a formula
-taking number of tests into account.
-
-Lots of small bug fixes.
-
-Improve readelf output format. Respect various sh_link/sh_info values.
-Correctly print versioning information for symbol tables.
-
-Version 0.36:
-
-Implement preprocessing of linker script. Recognize -z combreloc.
-
-Version 0.35:
-
-Implement -z ignore|record for ld.
-
-Implement creating of .gnu.version_r and .gnu.version sections. The
-.gnu.version does not yet contain correct info for defined and versioned
-symbols (means .gnu.version_d is not yet implemented).
-
-Implement gelf_update_* functions to create versioning data.
-
-Version 0.34:
-
-Add DT_RUNPATH/DT_RPATH entries to dynamic section. Create .plt and
-.rel.plt sections (completely). Add support for all four PLT related
-dynamic section entries. Add callback function for PLT creation.
-
-More tests in elflint. Add support for very strict checking which for
-now flags level 2 (deprecated features) usage.
-
-Version 0.33:
-
-Create dynamic symbol table, dynamic string table, and hash table to ld.
-
-Add hash table histogram support to readelf.
-
-Version 0.32:
-
-more work on elflint
-
-ld now creates the dynamic section and references it. Start adding entries
-to dynamic section.
-
-Version 0.31:
-
-Start implementing elflint.
-
-Version 0.30:
-
-Fix handling of NOBITS sections in elf_getdata.
-
-Start implementing generation of executables and DSOs in ld.
-Generation of program header mostly done. Address computation done.
-Extension of linker script syntax.
-
-Various cleanups.
-
-Implement section group handling in readelf.
-
-Version 0.29:
-
-Implement section groups. This involved a lot of code moving. The
-new code is entirely untested since gas/gcc are currently not able to
-create section groups. ld works fine on files without section groups.
-
-Version 0.28:
-
-Fix problem with adding more section in elf_newscn. The section pointers
-for the data buffers wasn't adjusted.
-
-Fix elf_getdata with nonzero second parameter. Correctly handle creation
-of internal data buffer for machines without unaligned access.
-
-Version 0.27:
-
-Start adding support to selectively add sections. Includes support for
-section groups.
-Add --gc-sections/--no-gc-sections options.
-Add general section merging support.
-
-Fix a bug in section group support in strip.
-
-Fix some potential problems with hash value in dynamic hash implementation.
-
-Version 0.26:
-
-section merging works in ld.
-
-Version 0.25:
-
-Actually create data structures from version map file and use it to hide
-symbols in ld.
-
-Implement -s -s for ld.
-
-Version 0.24:
-
-Improve relocation table output in readelf. Avoid some crashes.
-Finish many section handling in readelf.
-
-Finish: finish implementation of ld -r. At least some simple tests pass.
-
-Version 0.23:
-
-Fix a number of errors in ELF_C_WRITE handling.
-
-Almost finished implementation of ld -r. The data sections are all copied.
-Handling of symbol tables is missing.
-
-Version 0.22:
-
-Handle DSO and archive input files correctly if -r option is given.
-
-Gracefully deal with no phdr in new file in libelf.
-Fix various small error handling problems.
-Don't mmap file for output unless the command says so.
-
-Add code to create ELF section header table to ld finalize routines.
-
-Version 0.21:
-
-Fix some problems with recursive handling of archives in libelf.
-
-Improve messages printed by nm.
-
-Add symbol binding name handling to libebl. Fix section name handling in
-libebl.
-
-readelf and nm use more libebl functions.
-
-Handle XINDEX correctly in nm and string.
-
-Add first machine ld backend library (i386).
-Use it. Recognize -r and --shared. Avoid using -lxxx parameters for -r.
-Create ELF header in output file. Change mode of output file according to
-output file type. Reorganize callback initialization in ld.
-
-Version 0.20:
-
-Fix some memory leaks in libelf.
-
-Version 0.19:
-
-Implement reading version script. Both inside linker scripts and via the
---version-script command line parameter. Uses the same code.
-What remains to be done is to implement a data structure which allows
-efficient matching against the version names to decide which pattern
-matches.
-
-Beginning of output generation and output writing functions.
-
-Version 0.18:
-
-Finish implementation for DSO input file handling. Implement rpath, runpath,
-and LD_LIBRARY_PATH handling.
-
-Version 0.17:
-
-make handling of e_shnum overflow in libelf standard conforming
-
-ld now actually can handle DSOs in linker scripts. Handling of DT_RUNPATH,
-DT_RPATH, -rpath, -rpath-link still remains to be implemented.
-
-fix handling of -L parameters. Make actual use of the default_paths element.
-
-make re-definition of symbols in and from DSO compatible with existing linker
-
-Version 0.16:
-
-more work on assigning input sections to output sections.
-
-Add gelf_xlatetof and gelf_xlatetom which were accidently left out.
-
-Fix memory handling of section headers.
-
-Version 0.15:
-
-Add many-section support to ld. Add various new command line parameters.
-Allow pagesize to be specified in linker script or on the command line.
-Collect input sections in list for the output section according to the rules
-specified in the linker script.
-
-Version 0.14:
-
-Fix some problems in the internal list handling which had the result
-that we didn't look for some of the unresolved symbols.
-
-Free some memory if we know we don't need it anymore.
-
-Optimize the list of unresolved symbols. Throw out symbols which are
-meanwhile resolved.
-
-Version 0.13:
-
-Got file reading correct now. The files are all read while parsing
-the parameters. No creating of data structures to describe the linker
-command line. The symbol table is built up while reading the files.
-DSOs are handled now. -( -) handling is optimized.
-
-Version 0.12:
-
-Linker read linker scripts everywhere. Handles --whole-archive. Recognizes
---dynamic and --static. Collects defined and undefined symbols. Recognizes
-conflicts.
-
-libebl now defines functions to call the callbacks. Add generic name handling
-in these new functions. Remove the code from readelf and call the new
-functions.
-
-Version 0.11:
-
-Start of linker. Basic argument parsing, finding of input files,
-linker script reading.
-
-Version 0.10:
-
-Implement dwarf_get_fde_n(), dwarf_get_abbrev(), dwarf_get_abbrev_tag(),
-dwarf_get_abbrev_code(), dwarf_get_abbrev_children_flag(),
-dwarf_get_abbrev_entry(), dwarf_get_fde_at_pc(), and tests for it.
-
-Version 0.9:
-
-Implement dwarf_get_fde_list_eh(), dwarf_get_cie_of_fde(),
-dwarf_get_fde_range(), dwarf_get_cie_info(), dwarf_get_fde_instr_bytes(),
-and tests for them.
-
-Version 0.8:
-
-Make handling of binaries in other byte order work and add tests for it.
-
-Version 0.7:
-
-Implement dwarf_get_aranges(), dwarf_get_arange(), dwarf_get_cu_die_offset(),
-dwarf_get_arange_info(), and tests for them.
-
-Version 0.6:
-
-Implement dwarf_get_global(), dwarf_globname(), dwarf_global_die_offset(),
-dwarf_global_cu_offset(), dwarf_global_name_offsets(), and tests for them
-
-Version 0.5:
-
-Implemented dwarf_srclines(), dwarf_srcfiles(), dwarf_linebeginstatement(),
-dwarf_lineendsequence(), dwarf_lineno(), dwarf_lineaddr(), dwarf_lineoff(),
-dwarf_linesrc(), dwarf_lineblock(), dwarf_lineprologueend(),
-dwarf_lineepiloguebegin(), and tests for them.
-
-Version 0.4:
-
-Implemented dwarf_loclist().
-
-Version 0.3:
-
-Implemented dwarf_dieoffset(), dwarf_die_CU_offset(), dwarf_diename() and
-tests.
-
-Implemented dwarf_attrlist(), dwarf_hasattr(), dwarf_attr(), dwarf_lowpc(),
-dwarf_highpc(), dwarf_bytesize(), dwarf_bitsize(), dwarf_bitoffset(),
-dwarf_srclang(), dwarf_arrayorder(), dwarf_hasform(), dwarf_whatform(),
-dwarf_whatattr(), dwarf_formref(), dwarf_global_formref(), dwarf_formaddr(),
-dwarf_formflag(), dwarf_formudata(), dwarf_formsdata(), dwarf_formblock,
-dwarf_formstring() and tests for them.
-
-Version 0.2:
-
-Implemented dwarf_offdie()), dwarf_tag(), dwarf_dieoffset(),
-dwarf_die_CU_offset(), dwarf_diename() and tests for them.
-
-Version 0.1:
-
-First libdwarf functions work.
-
-Version 0.0:
-
-libelf and parts of libebl are done.
diff --git a/NOTES b/NOTES
deleted file mode 100644
index 4f06b8d..0000000
--- a/NOTES
+++ /dev/null
@@ -1,73 +0,0 @@
-- old GNU ld's behavior wrt DSOs seems to be severely broken.
-
- y.o reference foo()
- y1.o defines foo(), references bar()
- y2.o defines bar()
- libbar.so defines bar()
-
- Running
-
- gcc -o y y.o -lbar y1.o y2.o
-
- uses the bar() definition from libbar.so and does not mention the definition
- in y2.o at all (no duplicate symbol message). Correct is to use the
- definition in y2.o.
-
-
- y.o reference foo()
- y1.o defines foo(), references bar()
- y2.o in liby2.a defines bar()
- libbar.so defines bar()
-
- Running
-
- gcc -o y y.o -lbar y1.o -ly3
-
- has to use the definition in -lbar and not pull the definition from liby3.a.
-
-
-- the old linker follows DT_NEEDED entries and adds the objects referenced
- this way which define a symbol which is needed as a DT_NEEDED to the
- generated binary. This is wrong since the DT_NEEDED changes the search
- path in the object (which is breadth first).
-
-
-- the old linker supported extern "C++", extern "java" in version scripts.
- I believe this implementation is severly broken and needs a redesign
- (how do wildcards work with these languages*?). Therefore it is left
- out for now.
-
-
-- what should happen if two sections in different files with the same
- name have different types and/or the flags are different
-
-
-- section names in input files are mostly irrelevant. Exceptions:
-
- .comment/SHT_PROGBITS in strip, ld
-
- .debug \
- .line |
- .debug_srcinfo |
- .debug_sfnames |
- .debug_aranges |
- .debug_pubnames |
- .debug_info |
- .debug_abbrev |
- .debug_line |
- .debug_abbrev > DWARF sections in ld
- .debug_line |
- .debug_frame |
- .debug_str |
- .debug_loc |
- .debug_macinfo |
- .debug_weaknames |
- .debug_funcnames |
- .debug_typenames |
- .debug_varnames /
-
- Sections created in output files follow the naming of special section
- from the gABI.
-
- In no place is a section solely indentified by its name. Internal
- references always use the section index.
diff --git a/README b/README
deleted file mode 100644
index afc9407..0000000
--- a/README
+++ /dev/null
@@ -1,6 +0,0 @@
-Fundamental design decision:
-
-- the sizes of external and internal types are assumed to be the same.
- This leaves byte ordering aside. While assuming this the code can be
- greatly simplified and speed increases. Since no change violating this
- assumption is in sight this is believed to be a worthwhile optimization.
diff --git a/THANKS b/THANKS
deleted file mode 100644
index 3ee88d1..0000000
--- a/THANKS
+++ /dev/null
@@ -1,6 +0,0 @@
-At least the following have submitted valuable patches:
-
-Jeff Johnson building. rpm wrestling
-Alexander Larsson separate debug info
-Jakub Jelinek bug fixes, testing
-Roland McGrath lots of libdw{,fl} hacking
diff --git a/TODO b/TODO
deleted file mode 100644
index b2bcf6e..0000000
--- a/TODO
+++ /dev/null
@@ -1,160 +0,0 @@
- ToDo list for elfutils -*-outline-*-
- ----------------------
-
-Time-stamp: <2008-02-03 14:15:41 drepper>
-
-* mkinstalldirs
-
- Remove everywhere. Use mkdir -p.
-
-* libelf:
-
-** verify section
-
- Currently the elf_update function trusts the user blindly if the
- ELF_F_LAYOUT flag is set. This is OK if the data is prepared by a
- ELF_C_NULL call but not if the user prepared the data herself
-
-** break out archive handling from elf_begin
-
- The handling of archives (especially of the symbol tables) must be
- broken out of elf_begin. There are several different forms of
- archives and only when having the archive handling separately this
- remains maintainable.
-
-
-* libdw
-
-** More memory access checks needed
-
- All accesses to the debug sections should make sure the offsets are
- valid. This is currently especially a problem with leb128 accesses.
-
-** Low level macro information operations
-
- in 5.11.3 are not implemented. gcc currently does not emit this
- information so I cannot test it.
-
-** Rename dwarf_getabbrev
-
-
-* nm:
-
-** add demangler support
-
- Use demangler from libiberty.
-
-** add support to read debugging symbols
-
- Implement -l option for BSD and POSIX format
-
-
-* strip:
-
-** support SHT_SYMTAB_SHNDX
-
- should be removed if not needed anymore
-
-* ld:
-
-** sanity check .rel sh_info content
-
- the sh_info of all .rel sections with the same name must point to
- sections which also have the same name
-
-** use ld.so.conf
-
- to locate shared libraries also use /etc/ld.so.conf
-
-** handle object files for different architectures
-
- ld.so is expected to ignore object files for different architectures and
- continue looking for a matching file (e.g., ignore 32-bit binaries on
- 64-bit platforms and vice versa). We probably need the same in ld.
-
-** reuse after elf_end
-
- Some files are closed using elf_end. They are removed from memory only
- if no reference is left (especially for archives this is a problem).
- The old mapping should be reused in that case. The problem is worse
- for files which are not mapped read-only (archives again).
-
-** size for STT_SECTION entries
-
- The STT_SECTION entries have zero for the size but can easily get
- the size of the section.
-
-** .eh_frame_hdr
-
- Not implemented at all in the moment except for recognition of the option
- itself.
-
-* elflint
-
-** additional checks
-
- 1st GOT entry == _DYNAMIC
-
- check versioning info:
-
- always BASE in verdef
- sh_size/sh_entsize matches last offset != 0
-
- check whether any relocation is for a merge-able section
-
- check TLS relocation depencies
-
-*** for x86
-
- check that R_386_TLS_GD is followed by R_386_PLT32 for __tls_get_addr
-
-** relax
-
- prelink generated files
-
-* elfcmp
-
-** treat relocation sections special
-
- Differences in the relocation sections can be ignored if all
- the same symbols with the same targets are present and the order
- of overlapping relocations doesn't change. There really never
- should be overlapping relocations but who knows.
-
-* mcs
-
- Sun has it. Can modify sections which are not in segments.
-
- -a string
- Append string to the comment section of the ELF object
- files. If string contains embedded blanks, it must be
- enclosed in quotation marks.
-
- -c Compress the contents of the comment section of the
- ELF object files. All duplicate entries are removed.
- The ordering of the remaining entries is not dis-
- turbed.
-
- -d Delete the contents of the comment section from the
- ELF object files. The section header for the comment
- section is also removed.
-
- -n name
- Specify the name of the comment section to access if
- other than .comment. By default, mcs deals with the
- section named .comment. This option can be used to
- specify another section. mcs can take multiple -n
- options to allow for specification of multiple sec-
- tion comments.
-
- -p Print the contents of the comment section on the stan-
- dard output. Each section printed is tagged by the
- name of the file from which it was extracted, using
- the format file[member_name]: for archive files and
- file: for other files.
-
- -V Print on standard error the version number of mcs.
-
-Local Variables:
-eval:(hide-body)
-End:
diff --git a/aclocal.m4 b/aclocal.m4
deleted file mode 100644
index d126997..0000000
--- a/aclocal.m4
+++ /dev/null
@@ -1,921 +0,0 @@
-# generated automatically by aclocal 1.10.1 -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-m4_ifndef([AC_AUTOCONF_VERSION],
- [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(AC_AUTOCONF_VERSION, [2.63],,
-[m4_warning([this file was generated for autoconf 2.63.
-You have another version of autoconf. It may work, but is not guaranteed to.
-If you have problems, you may need to regenerate the build system entirely.
-To do so, use the procedure documented by the package, typically `autoreconf'.])])
-
-# Copyright (C) 2002, 2003, 2005, 2006, 2007 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_AUTOMAKE_VERSION(VERSION)
-# ----------------------------
-# Automake X.Y traces this macro to ensure aclocal.m4 has been
-# generated from the m4 files accompanying Automake X.Y.
-# (This private macro should not be called outside this file.)
-AC_DEFUN([AM_AUTOMAKE_VERSION],
-[am__api_version='1.10'
-dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
-dnl require some minimum version. Point them to the right macro.
-m4_if([$1], [1.10.1], [],
- [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
-])
-
-# _AM_AUTOCONF_VERSION(VERSION)
-# -----------------------------
-# aclocal traces this macro to find the Autoconf version.
-# This is a private macro too. Using m4_define simplifies
-# the logic in aclocal, which can simply ignore this definition.
-m4_define([_AM_AUTOCONF_VERSION], [])
-
-# AM_SET_CURRENT_AUTOMAKE_VERSION
-# -------------------------------
-# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
-# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
-AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.10.1])dnl
-m4_ifndef([AC_AUTOCONF_VERSION],
- [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-_AM_AUTOCONF_VERSION(AC_AUTOCONF_VERSION)])
-
-# AM_AUX_DIR_EXPAND -*- Autoconf -*-
-
-# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
-# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
-# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
-#
-# Of course, Automake must honor this variable whenever it calls a
-# tool from the auxiliary directory. The problem is that $srcdir (and
-# therefore $ac_aux_dir as well) can be either absolute or relative,
-# depending on how configure is run. This is pretty annoying, since
-# it makes $ac_aux_dir quite unusable in subdirectories: in the top
-# source directory, any form will work fine, but in subdirectories a
-# relative path needs to be adjusted first.
-#
-# $ac_aux_dir/missing
-# fails when called from a subdirectory if $ac_aux_dir is relative
-# $top_srcdir/$ac_aux_dir/missing
-# fails if $ac_aux_dir is absolute,
-# fails when called from a subdirectory in a VPATH build with
-# a relative $ac_aux_dir
-#
-# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
-# are both prefixed by $srcdir. In an in-source build this is usually
-# harmless because $srcdir is `.', but things will broke when you
-# start a VPATH build or use an absolute $srcdir.
-#
-# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
-# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
-# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
-# and then we would define $MISSING as
-# MISSING="\${SHELL} $am_aux_dir/missing"
-# This will work as long as MISSING is not called from configure, because
-# unfortunately $(top_srcdir) has no meaning in configure.
-# However there are other variables, like CC, which are often used in
-# configure, and could therefore not use this "fixed" $ac_aux_dir.
-#
-# Another solution, used here, is to always expand $ac_aux_dir to an
-# absolute PATH. The drawback is that using absolute paths prevent a
-# configured tree to be moved without reconfiguration.
-
-AC_DEFUN([AM_AUX_DIR_EXPAND],
-[dnl Rely on autoconf to set up CDPATH properly.
-AC_PREREQ([2.50])dnl
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
-])
-
-# AM_CONDITIONAL -*- Autoconf -*-
-
-# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 8
-
-# AM_CONDITIONAL(NAME, SHELL-CONDITION)
-# -------------------------------------
-# Define a conditional.
-AC_DEFUN([AM_CONDITIONAL],
-[AC_PREREQ(2.52)dnl
- ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
- [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
-AC_SUBST([$1_TRUE])dnl
-AC_SUBST([$1_FALSE])dnl
-_AM_SUBST_NOTMAKE([$1_TRUE])dnl
-_AM_SUBST_NOTMAKE([$1_FALSE])dnl
-if $2; then
- $1_TRUE=
- $1_FALSE='#'
-else
- $1_TRUE='#'
- $1_FALSE=
-fi
-AC_CONFIG_COMMANDS_PRE(
-[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
- AC_MSG_ERROR([[conditional "$1" was never defined.
-Usually this means the macro was only invoked conditionally.]])
-fi])])
-
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 9
-
-# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
-# written in clear, in which case automake, when reading aclocal.m4,
-# will think it sees a *use*, and therefore will trigger all it's
-# C support machinery. Also note that it means that autoscan, seeing
-# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
-
-
-# _AM_DEPENDENCIES(NAME)
-# ----------------------
-# See how the compiler implements dependency checking.
-# NAME is "CC", "CXX", "GCJ", or "OBJC".
-# We try a few techniques and use that to set a single cache variable.
-#
-# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
-# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
-# dependency, and given that the user is not expected to run this macro,
-# just rely on AC_PROG_CC.
-AC_DEFUN([_AM_DEPENDENCIES],
-[AC_REQUIRE([AM_SET_DEPDIR])dnl
-AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
-AC_REQUIRE([AM_MAKE_INCLUDE])dnl
-AC_REQUIRE([AM_DEP_TRACK])dnl
-
-ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
- [$1], CXX, [depcc="$CXX" am_compiler_list=],
- [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
- [$1], UPC, [depcc="$UPC" am_compiler_list=],
- [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
- [depcc="$$1" am_compiler_list=])
-
-AC_CACHE_CHECK([dependency style of $depcc],
- [am_cv_$1_dependencies_compiler_type],
-[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
- # We make a subdir and do the tests there. Otherwise we can end up
- # making bogus files that we don't know about and never remove. For
- # instance it was reported that on HP-UX the gcc test will end up
- # making a dummy file named `D' -- because `-MD' means `put the output
- # in D'.
- mkdir conftest.dir
- # Copy depcomp to subdir because otherwise we won't find it if we're
- # using a relative directory.
- cp "$am_depcomp" conftest.dir
- cd conftest.dir
- # We will build objects and dependencies in a subdirectory because
- # it helps to detect inapplicable dependency modes. For instance
- # both Tru64's cc and ICC support -MD to output dependencies as a
- # side effect of compilation, but ICC will put the dependencies in
- # the current directory while Tru64 will put them in the object
- # directory.
- mkdir sub
-
- am_cv_$1_dependencies_compiler_type=none
- if test "$am_compiler_list" = ""; then
- am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
- fi
- for depmode in $am_compiler_list; do
- # Setup a source with many dependencies, because some compilers
- # like to wrap large dependency lists on column 80 (with \), and
- # we should not choose a depcomp mode which is confused by this.
- #
- # We need to recreate these files for each test, as the compiler may
- # overwrite some of them when testing with obscure command lines.
- # This happens at least with the AIX C compiler.
- : > sub/conftest.c
- for i in 1 2 3 4 5 6; do
- echo '#include "conftst'$i'.h"' >> sub/conftest.c
- # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
- # Solaris 8's {/usr,}/bin/sh.
- touch sub/conftst$i.h
- done
- echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
- case $depmode in
- nosideeffect)
- # after this tag, mechanisms are not by side-effect, so they'll
- # only be used when explicitly requested
- if test "x$enable_dependency_tracking" = xyes; then
- continue
- else
- break
- fi
- ;;
- none) break ;;
- esac
- # We check with `-c' and `-o' for the sake of the "dashmstdout"
- # mode. It turns out that the SunPro C++ compiler does not properly
- # handle `-M -o', and we need to detect this.
- if depmode=$depmode \
- source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
- depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
- $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
- >/dev/null 2>conftest.err &&
- grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
- grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
- grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
- ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
- # icc doesn't choke on unknown options, it will just issue warnings
- # or remarks (even with -Werror). So we grep stderr for any message
- # that says an option was ignored or not supported.
- # When given -MP, icc 7.0 and 7.1 complain thusly:
- # icc: Command line warning: ignoring option '-M'; no argument required
- # The diagnosis changed in icc 8.0:
- # icc: Command line remark: option '-MP' not supported
- if (grep 'ignoring option' conftest.err ||
- grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
- am_cv_$1_dependencies_compiler_type=$depmode
- break
- fi
- fi
- done
-
- cd ..
- rm -rf conftest.dir
-else
- am_cv_$1_dependencies_compiler_type=none
-fi
-])
-AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
-AM_CONDITIONAL([am__fastdep$1], [
- test "x$enable_dependency_tracking" != xno \
- && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
-])
-
-
-# AM_SET_DEPDIR
-# -------------
-# Choose a directory name for dependency files.
-# This macro is AC_REQUIREd in _AM_DEPENDENCIES
-AC_DEFUN([AM_SET_DEPDIR],
-[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
-AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
-])
-
-
-# AM_DEP_TRACK
-# ------------
-AC_DEFUN([AM_DEP_TRACK],
-[AC_ARG_ENABLE(dependency-tracking,
-[ --disable-dependency-tracking speeds up one-time build
- --enable-dependency-tracking do not reject slow dependency extractors])
-if test "x$enable_dependency_tracking" != xno; then
- am_depcomp="$ac_aux_dir/depcomp"
- AMDEPBACKSLASH='\'
-fi
-AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
-AC_SUBST([AMDEPBACKSLASH])dnl
-_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
-])
-
-# Generate code to set up dependency tracking. -*- Autoconf -*-
-
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-#serial 3
-
-# _AM_OUTPUT_DEPENDENCY_COMMANDS
-# ------------------------------
-AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
-[for mf in $CONFIG_FILES; do
- # Strip MF so we end up with the name of the file.
- mf=`echo "$mf" | sed -e 's/:.*$//'`
- # Check whether this is an Automake generated Makefile or not.
- # We used to match only the files named `Makefile.in', but
- # some people rename them; so instead we look at the file content.
- # Grep'ing the first line is not enough: some people post-process
- # each Makefile.in and add a new line on top of each file to say so.
- # Grep'ing the whole file is not good either: AIX grep has a line
- # limit of 2048, but all sed's we know have understand at least 4000.
- if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
- dirpart=`AS_DIRNAME("$mf")`
- else
- continue
- fi
- # Extract the definition of DEPDIR, am__include, and am__quote
- # from the Makefile without running `make'.
- DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
- test -z "$DEPDIR" && continue
- am__include=`sed -n 's/^am__include = //p' < "$mf"`
- test -z "am__include" && continue
- am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
- # When using ansi2knr, U may be empty or an underscore; expand it
- U=`sed -n 's/^U = //p' < "$mf"`
- # Find all dependency output files, they are included files with
- # $(DEPDIR) in their names. We invoke sed twice because it is the
- # simplest approach to changing $(DEPDIR) to its actual value in the
- # expansion.
- for file in `sed -n "
- s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
- sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
- # Make sure the directory exists.
- test -f "$dirpart/$file" && continue
- fdir=`AS_DIRNAME(["$file"])`
- AS_MKDIR_P([$dirpart/$fdir])
- # echo "creating $dirpart/$file"
- echo '# dummy' > "$dirpart/$file"
- done
-done
-])# _AM_OUTPUT_DEPENDENCY_COMMANDS
-
-
-# AM_OUTPUT_DEPENDENCY_COMMANDS
-# -----------------------------
-# This macro should only be invoked once -- use via AC_REQUIRE.
-#
-# This code is only required when automatic dependency tracking
-# is enabled. FIXME. This creates each `.P' file that we will
-# need in order to bootstrap the dependency handling code.
-AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
-[AC_CONFIG_COMMANDS([depfiles],
- [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
- [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
-])
-
-# Do all the work for Automake. -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2008 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 13
-
-# This macro actually does too much. Some checks are only needed if
-# your package does certain things. But this isn't really a big deal.
-
-# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
-# AM_INIT_AUTOMAKE([OPTIONS])
-# -----------------------------------------------
-# The call with PACKAGE and VERSION arguments is the old style
-# call (pre autoconf-2.50), which is being phased out. PACKAGE
-# and VERSION should now be passed to AC_INIT and removed from
-# the call to AM_INIT_AUTOMAKE.
-# We support both call styles for the transition. After
-# the next Automake release, Autoconf can make the AC_INIT
-# arguments mandatory, and then we can depend on a new Autoconf
-# release and drop the old call support.
-AC_DEFUN([AM_INIT_AUTOMAKE],
-[AC_PREREQ([2.60])dnl
-dnl Autoconf wants to disallow AM_ names. We explicitly allow
-dnl the ones we care about.
-m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
-AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
-AC_REQUIRE([AC_PROG_INSTALL])dnl
-if test "`cd $srcdir && pwd`" != "`pwd`"; then
- # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
- # is not polluted with repeated "-I."
- AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
- # test to see if srcdir already configured
- if test -f $srcdir/config.status; then
- AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
- fi
-fi
-
-# test whether we have cygpath
-if test -z "$CYGPATH_W"; then
- if (cygpath --version) >/dev/null 2>/dev/null; then
- CYGPATH_W='cygpath -w'
- else
- CYGPATH_W=echo
- fi
-fi
-AC_SUBST([CYGPATH_W])
-
-# Define the identity of the package.
-dnl Distinguish between old-style and new-style calls.
-m4_ifval([$2],
-[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
- AC_SUBST([PACKAGE], [$1])dnl
- AC_SUBST([VERSION], [$2])],
-[_AM_SET_OPTIONS([$1])dnl
-dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
-m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
- [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
-
-_AM_IF_OPTION([no-define],,
-[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
- AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
-
-# Some tools Automake needs.
-AC_REQUIRE([AM_SANITY_CHECK])dnl
-AC_REQUIRE([AC_ARG_PROGRAM])dnl
-AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
-AM_MISSING_PROG(AUTOCONF, autoconf)
-AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
-AM_MISSING_PROG(AUTOHEADER, autoheader)
-AM_MISSING_PROG(MAKEINFO, makeinfo)
-AM_PROG_INSTALL_SH
-AM_PROG_INSTALL_STRIP
-AC_REQUIRE([AM_PROG_MKDIR_P])dnl
-# We need awk for the "check" target. The system "awk" is bad on
-# some platforms.
-AC_REQUIRE([AC_PROG_AWK])dnl
-AC_REQUIRE([AC_PROG_MAKE_SET])dnl
-AC_REQUIRE([AM_SET_LEADING_DOT])dnl
-_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
- [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
- [_AM_PROG_TAR([v7])])])
-_AM_IF_OPTION([no-dependencies],,
-[AC_PROVIDE_IFELSE([AC_PROG_CC],
- [_AM_DEPENDENCIES(CC)],
- [define([AC_PROG_CC],
- defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
-AC_PROVIDE_IFELSE([AC_PROG_CXX],
- [_AM_DEPENDENCIES(CXX)],
- [define([AC_PROG_CXX],
- defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
-AC_PROVIDE_IFELSE([AC_PROG_OBJC],
- [_AM_DEPENDENCIES(OBJC)],
- [define([AC_PROG_OBJC],
- defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
-])
-])
-
-
-# When config.status generates a header, we must update the stamp-h file.
-# This file resides in the same directory as the config header
-# that is generated. The stamp files are numbered to have different names.
-
-# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
-# loop where config.status creates the headers, so we can generate
-# our stamp files there.
-AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
-[# Compute $1's index in $config_headers.
-_am_arg=$1
-_am_stamp_count=1
-for _am_header in $config_headers :; do
- case $_am_header in
- $_am_arg | $_am_arg:* )
- break ;;
- * )
- _am_stamp_count=`expr $_am_stamp_count + 1` ;;
- esac
-done
-echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
-
-# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_INSTALL_SH
-# ------------------
-# Define $install_sh.
-AC_DEFUN([AM_PROG_INSTALL_SH],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
-AC_SUBST(install_sh)])
-
-# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 2
-
-# Check whether the underlying file-system supports filenames
-# with a leading dot. For instance MS-DOS doesn't.
-AC_DEFUN([AM_SET_LEADING_DOT],
-[rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
- am__leading_dot=.
-else
- am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-AC_SUBST([am__leading_dot])])
-
-# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2005
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 5
-
-# AM_PROG_LEX
-# -----------
-# Autoconf leaves LEX=: if lex or flex can't be found. Change that to a
-# "missing" invocation, for better error output.
-AC_DEFUN([AM_PROG_LEX],
-[AC_PREREQ(2.50)dnl
-AC_REQUIRE([AM_MISSING_HAS_RUN])dnl
-AC_REQUIRE([AC_PROG_LEX])dnl
-if test "$LEX" = :; then
- LEX=${am_missing_run}flex
-fi])
-
-# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
-# From Jim Meyering
-
-# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 4
-
-AC_DEFUN([AM_MAINTAINER_MODE],
-[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
- dnl maintainer-mode is disabled by default
- AC_ARG_ENABLE(maintainer-mode,
-[ --enable-maintainer-mode enable make rules and dependencies not useful
- (and sometimes confusing) to the casual installer],
- USE_MAINTAINER_MODE=$enableval,
- USE_MAINTAINER_MODE=no)
- AC_MSG_RESULT([$USE_MAINTAINER_MODE])
- AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes])
- MAINT=$MAINTAINER_MODE_TRUE
- AC_SUBST(MAINT)dnl
-]
-)
-
-AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
-
-# Check to see how 'make' treats includes. -*- Autoconf -*-
-
-# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 3
-
-# AM_MAKE_INCLUDE()
-# -----------------
-# Check to see how make treats includes.
-AC_DEFUN([AM_MAKE_INCLUDE],
-[am_make=${MAKE-make}
-cat > confinc << 'END'
-am__doit:
- @echo done
-.PHONY: am__doit
-END
-# If we don't find an include directive, just comment out the code.
-AC_MSG_CHECKING([for style of include used by $am_make])
-am__include="#"
-am__quote=
-_am_result=none
-# First try GNU make style include.
-echo "include confinc" > confmf
-# We grep out `Entering directory' and `Leaving directory'
-# messages which can occur if `w' ends up in MAKEFLAGS.
-# In particular we don't look at `^make:' because GNU make might
-# be invoked under some other name (usually "gmake"), in which
-# case it prints its new name instead of `make'.
-if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
- am__include=include
- am__quote=
- _am_result=GNU
-fi
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
- echo '.include "confinc"' > confmf
- if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
- am__include=.include
- am__quote="\""
- _am_result=BSD
- fi
-fi
-AC_SUBST([am__include])
-AC_SUBST([am__quote])
-AC_MSG_RESULT([$_am_result])
-rm -f confinc confmf
-])
-
-# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
-
-# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 5
-
-# AM_MISSING_PROG(NAME, PROGRAM)
-# ------------------------------
-AC_DEFUN([AM_MISSING_PROG],
-[AC_REQUIRE([AM_MISSING_HAS_RUN])
-$1=${$1-"${am_missing_run}$2"}
-AC_SUBST($1)])
-
-
-# AM_MISSING_HAS_RUN
-# ------------------
-# Define MISSING if not defined so far and test if it supports --run.
-# If it does, set am_missing_run to use it, otherwise, to nothing.
-AC_DEFUN([AM_MISSING_HAS_RUN],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-AC_REQUIRE_AUX_FILE([missing])dnl
-test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
-# Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
- am_missing_run="$MISSING --run "
-else
- am_missing_run=
- AC_MSG_WARN([`missing' script is too old or missing])
-fi
-])
-
-# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_MKDIR_P
-# ---------------
-# Check for `mkdir -p'.
-AC_DEFUN([AM_PROG_MKDIR_P],
-[AC_PREREQ([2.60])dnl
-AC_REQUIRE([AC_PROG_MKDIR_P])dnl
-dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P,
-dnl while keeping a definition of mkdir_p for backward compatibility.
-dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
-dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
-dnl Makefile.ins that do not define MKDIR_P, so we do our own
-dnl adjustment using top_builddir (which is defined more often than
-dnl MKDIR_P).
-AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
-case $mkdir_p in
- [[\\/$]]* | ?:[[\\/]]*) ;;
- */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
-esac
-])
-
-# Helper functions for option handling. -*- Autoconf -*-
-
-# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 3
-
-# _AM_MANGLE_OPTION(NAME)
-# -----------------------
-AC_DEFUN([_AM_MANGLE_OPTION],
-[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
-
-# _AM_SET_OPTION(NAME)
-# ------------------------------
-# Set option NAME. Presently that only means defining a flag for this option.
-AC_DEFUN([_AM_SET_OPTION],
-[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
-
-# _AM_SET_OPTIONS(OPTIONS)
-# ----------------------------------
-# OPTIONS is a space-separated list of Automake options.
-AC_DEFUN([_AM_SET_OPTIONS],
-[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
-
-# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
-# -------------------------------------------
-# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
-AC_DEFUN([_AM_IF_OPTION],
-[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
-
-# Check to make sure that the build environment is sane. -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 4
-
-# AM_SANITY_CHECK
-# ---------------
-AC_DEFUN([AM_SANITY_CHECK],
-[AC_MSG_CHECKING([whether build environment is sane])
-# Just in case
-sleep 1
-echo timestamp > conftest.file
-# Do `set' in a subshell so we don't clobber the current shell's
-# arguments. Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
- set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
- if test "$[*]" = "X"; then
- # -L didn't work.
- set X `ls -t $srcdir/configure conftest.file`
- fi
- rm -f conftest.file
- if test "$[*]" != "X $srcdir/configure conftest.file" \
- && test "$[*]" != "X conftest.file $srcdir/configure"; then
-
- # If neither matched, then we have a broken ls. This can happen
- # if, for instance, CONFIG_SHELL is bash and it inherits a
- # broken ls alias from the environment. This has actually
- # happened. Such a system could not be considered "sane".
- AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
-alias in your environment])
- fi
-
- test "$[2]" = conftest.file
- )
-then
- # Ok.
- :
-else
- AC_MSG_ERROR([newly created file is older than distributed files!
-Check your system clock])
-fi
-AC_MSG_RESULT(yes)])
-
-# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_INSTALL_STRIP
-# ---------------------
-# One issue with vendor `install' (even GNU) is that you can't
-# specify the program used to strip binaries. This is especially
-# annoying in cross-compiling environments, where the build's strip
-# is unlikely to handle the host's binaries.
-# Fortunately install-sh will honor a STRIPPROG variable, so we
-# always use install-sh in `make install-strip', and initialize
-# STRIPPROG with the value of the STRIP variable (set by the user).
-AC_DEFUN([AM_PROG_INSTALL_STRIP],
-[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
-# Installed binaries are usually stripped using `strip' when the user
-# run `make install-strip'. However `strip' might not be the right
-# tool to use in cross-compilation environments, therefore Automake
-# will honor the `STRIP' environment variable to overrule this program.
-dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
-if test "$cross_compiling" != no; then
- AC_CHECK_TOOL([STRIP], [strip], :)
-fi
-INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
-AC_SUBST([INSTALL_STRIP_PROGRAM])])
-
-# Copyright (C) 2006 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# _AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
-# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
-# This macro is traced by Automake.
-AC_DEFUN([_AM_SUBST_NOTMAKE])
-
-# Check how to create a tarball. -*- Autoconf -*-
-
-# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 2
-
-# _AM_PROG_TAR(FORMAT)
-# --------------------
-# Check how to create a tarball in format FORMAT.
-# FORMAT should be one of `v7', `ustar', or `pax'.
-#
-# Substitute a variable $(am__tar) that is a command
-# writing to stdout a FORMAT-tarball containing the directory
-# $tardir.
-# tardir=directory && $(am__tar) > result.tar
-#
-# Substitute a variable $(am__untar) that extract such
-# a tarball read from stdin.
-# $(am__untar) < result.tar
-AC_DEFUN([_AM_PROG_TAR],
-[# Always define AMTAR for backward compatibility.
-AM_MISSING_PROG([AMTAR], [tar])
-m4_if([$1], [v7],
- [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
- [m4_case([$1], [ustar],, [pax],,
- [m4_fatal([Unknown tar format])])
-AC_MSG_CHECKING([how to create a $1 tar archive])
-# Loop over all known methods to create a tar archive until one works.
-_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
-_am_tools=${am_cv_prog_tar_$1-$_am_tools}
-# Do not fold the above two line into one, because Tru64 sh and
-# Solaris sh will not grok spaces in the rhs of `-'.
-for _am_tool in $_am_tools
-do
- case $_am_tool in
- gnutar)
- for _am_tar in tar gnutar gtar;
- do
- AM_RUN_LOG([$_am_tar --version]) && break
- done
- am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
- am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
- am__untar="$_am_tar -xf -"
- ;;
- plaintar)
- # Must skip GNU tar: if it does not support --format= it doesn't create
- # ustar tarball either.
- (tar --version) >/dev/null 2>&1 && continue
- am__tar='tar chf - "$$tardir"'
- am__tar_='tar chf - "$tardir"'
- am__untar='tar xf -'
- ;;
- pax)
- am__tar='pax -L -x $1 -w "$$tardir"'
- am__tar_='pax -L -x $1 -w "$tardir"'
- am__untar='pax -r'
- ;;
- cpio)
- am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
- am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
- am__untar='cpio -i -H $1 -d'
- ;;
- none)
- am__tar=false
- am__tar_=false
- am__untar=false
- ;;
- esac
-
- # If the value was cached, stop now. We just wanted to have am__tar
- # and am__untar set.
- test -n "${am_cv_prog_tar_$1}" && break
-
- # tar/untar a dummy directory, and stop if the command works
- rm -rf conftest.dir
- mkdir conftest.dir
- echo GrepMe > conftest.dir/file
- AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
- rm -rf conftest.dir
- if test -s conftest.tar; then
- AM_RUN_LOG([$am__untar <conftest.tar])
- grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
- fi
-done
-rm -rf conftest.dir
-
-AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
-AC_MSG_RESULT([$am_cv_prog_tar_$1])])
-AC_SUBST([am__tar])
-AC_SUBST([am__untar])
-]) # _AM_PROG_TAR
-
-m4_include([m4/nls.m4])
-m4_include([m4/po.m4])
-m4_include([m4/progtest.m4])
diff --git a/android.patch b/android.patch
deleted file mode 100644
index 7d50f4f..0000000
--- a/android.patch
+++ /dev/null
@@ -1,491 +0,0 @@
-diff -r -u -d /local/elfutils-0.138/libdw/dwarf_begin.c ./libdw/dwarf_begin.c
---- /local/elfutils-0.138/libdw/dwarf_begin.c 2008-12-10 20:33:30.000000000 -0800
-+++ ./libdw/dwarf_begin.c 2012-03-09 10:19:33.000000000 -0800
-@@ -94,7 +94,9 @@
- /* Get an ELF descriptor. */
- elf = elf_begin (fd, elfcmd, NULL);
- if (elf == NULL)
-+ /* ANDROID_CHANGE_BEGIN */
- {
-+#if 0
- /* Test why the `elf_begin" call failed. */
- struct stat64 st;
-
-@@ -104,6 +106,10 @@
- __libdw_seterrno (DWARF_E_INVALID_FILE);
- else
- __libdw_seterrno (DWARF_E_IO_ERROR);
-+#else
-+ __libdw_seterrno (DWARF_E_IO_ERROR);
-+#endif
-+ /* ANDROID_CHANGE_END */
- }
- else
- {
-diff -r -u -d /local/elfutils-0.138/libdw/dwarf_getpubnames.c ./libdw/dwarf_getpubnames.c
---- /local/elfutils-0.138/libdw/dwarf_getpubnames.c 2008-12-10 20:33:30.000000000 -0800
-+++ ./libdw/dwarf_getpubnames.c 2012-03-12 11:09:29.000000000 -0700
-@@ -60,6 +60,9 @@
- #include <libdwP.h>
- #include <dwarf.h>
-
-+/* ANDROID_CHANGE_BEGIN */
-+#include <AndroidFixup.h>
-+/* ANDROID_CHANGE_END */
-
- static int
- get_offsets (Dwarf *dbg)
-diff -r -u -d /local/elfutils-0.138/libdw/dwarf_getsrc_file.c ./libdw/dwarf_getsrc_file.c
---- /local/elfutils-0.138/libdw/dwarf_getsrc_file.c 2008-12-10 20:33:30.000000000 -0800
-+++ ./libdw/dwarf_getsrc_file.c 2012-03-12 12:42:46.000000000 -0700
-@@ -59,7 +59,6 @@
-
- #include "libdwP.h"
-
--
- int
- dwarf_getsrc_file (Dwarf *dbg, const char *fname, int lineno, int column,
- Dwarf_Line ***srcsp, size_t *nsrcs)
-diff -r -u -d /local/elfutils-0.138/libdw/libdw_alloc.c ./libdw/libdw_alloc.c
---- /local/elfutils-0.138/libdw/libdw_alloc.c 2008-12-10 20:33:30.000000000 -0800
-+++ ./libdw/libdw_alloc.c 2012-03-09 10:19:35.000000000 -0800
-@@ -58,6 +58,9 @@
- #include <sys/param.h>
- #include "libdwP.h"
-
-+/* ANDROID_CHANGE_BEGIN */
-+#include <AndroidFixup.h>
-+/* ANDROID_CHANGE_END */
-
- void *
- __libdw_allocate (Dwarf *dbg, size_t minsize, size_t align)
-diff -r -u -d /local/elfutils-0.138/libdwfl/dwfl_build_id_find_elf.c ./libdwfl/dwfl_build_id_find_elf.c
---- /local/elfutils-0.138/libdwfl/dwfl_build_id_find_elf.c 2008-12-10 20:33:30.000000000 -0800
-+++ ./libdwfl/dwfl_build_id_find_elf.c 2012-03-12 12:23:29.000000000 -0700
-@@ -52,7 +52,6 @@
- #include <fcntl.h>
- #include <unistd.h>
-
--
- int
- internal_function
- __libdwfl_open_by_build_id (Dwfl_Module *mod, bool debug, char **file_name)
-@@ -84,8 +83,16 @@
- ".debug");
-
- const Dwfl_Callbacks *const cb = mod->dwfl->callbacks;
-+
-+/* ANDROID_CHANGE_BEGIN */
-+#ifdef __BIONIC__
-+ char *path = strdup ((cb->debuginfo_path ? *cb->debuginfo_path : NULL)
-+ ?: DEFAULT_DEBUGINFO_PATH);
-+#else
- char *path = strdupa ((cb->debuginfo_path ? *cb->debuginfo_path : NULL)
- ?: DEFAULT_DEBUGINFO_PATH);
-+#endif
-+/* ANDROID_CHANGE_END */
-
- int fd = -1;
- char *dir;
-@@ -103,7 +110,6 @@
- if (unlikely (name == NULL))
- break;
- memcpy (mempcpy (name, dir, dirlen), id_name, sizeof id_name);
--
- fd = TEMP_FAILURE_RETRY (open64 (name, O_RDONLY));
- if (fd >= 0)
- {
-@@ -119,6 +125,12 @@
- free (name);
- }
-
-+/* ANDROID_CHANGE_BEGIN */
-+#ifdef __BIONIC__
-+ free(path);
-+#endif
-+/* ANDROID_CHANGE_END */
-+
- /* If we simply found nothing, clear errno. If we had some other error
- with the file, report that. Possibly this should treat other errors
- like ENOENT too. But ignoring all errors could mask some that should
-diff -r -u -d /local/elfutils-0.138/libdwfl/dwfl_error.c ./libdwfl/dwfl_error.c
---- /local/elfutils-0.138/libdwfl/dwfl_error.c 2008-12-10 20:33:30.000000000 -0800
-+++ ./libdwfl/dwfl_error.c 2012-03-12 12:39:16.000000000 -0700
-@@ -218,7 +218,14 @@
- switch (error &~ 0xffff)
- {
- case OTHER_ERROR (ERRNO):
-+ /* ANDROID_CHANGE_BEGIN */
-+#ifdef __BIONIC__
-+ strerror_r (error & 0xffff, "bad", 0);
-+ return NULL;
-+#else
- return strerror_r (error & 0xffff, "bad", 0);
-+#endif
-+ /* ANDROID_CHANGE_END */
- case OTHER_ERROR (LIBELF):
- return elf_errmsg (error & 0xffff);
- case OTHER_ERROR (LIBDW):
-diff -r -u -d /local/elfutils-0.138/libdwfl/dwfl_module_build_id.c ./libdwfl/dwfl_module_build_id.c
---- /local/elfutils-0.138/libdwfl/dwfl_module_build_id.c 2008-12-30 21:48:23.000000000 -0800
-+++ ./libdwfl/dwfl_module_build_id.c 2012-03-12 12:40:16.000000000 -0700
-@@ -139,9 +139,17 @@
- return result;
- }
-
-+/* ANDROID_CHANGE_BEGIN */
-+#if 0
- int
- __dwfl_module_build_id (Dwfl_Module *mod,
- const unsigned char **bits, GElf_Addr *vaddr)
-+#else
-+int
-+dwfl_module_build_id (Dwfl_Module *mod,
-+ const unsigned char **bits, GElf_Addr *vaddr)
-+#endif
-+/* ANDROID_CHANGE_END */
- {
- if (mod == NULL)
- return -1;
-@@ -164,6 +172,9 @@
- *vaddr = mod->build_id_vaddr;
- return mod->build_id_len;
- }
-+
-+/* ANDROID_CHANGE_BEGIN */
-+#if 0
- extern __typeof__ (dwfl_module_build_id) INTUSE(dwfl_module_build_id)
- __attribute__ ((alias ("__dwfl_module_build_id")));
- asm (".symver "
-@@ -180,3 +191,5 @@
- }
- asm (".symver "
- "_BUG_COMPAT_dwfl_module_build_id, dwfl_module_build_id@ELFUTILS_0.130");
-+#endif
-+/* ANDROID_CHANGE_END */
-diff -r -u -d /local/elfutils-0.138/libdwfl/dwfl_module_getdwarf.c ./libdwfl/dwfl_module_getdwarf.c
---- /local/elfutils-0.138/libdwfl/dwfl_module_getdwarf.c 2008-12-10 20:33:30.000000000 -0800
-+++ ./libdwfl/dwfl_module_getdwarf.c 2012-03-12 12:24:14.000000000 -0700
-@@ -53,7 +53,6 @@
- #include <unistd.h>
- #include "../libdw/libdwP.h" /* DWARF_E_* values are here. */
-
--
- /* Open libelf FILE->fd and compute the load base of ELF as loaded in MOD.
- When we return success, FILE->elf and FILE->bias are set up. */
- static inline Dwfl_Error
-diff -r -u -d /local/elfutils-0.138/libdwfl/dwfl_module_getsrc_file.c ./libdwfl/dwfl_module_getsrc_file.c
---- /local/elfutils-0.138/libdwfl/dwfl_module_getsrc_file.c 2008-12-10 20:33:30.000000000 -0800
-+++ ./libdwfl/dwfl_module_getsrc_file.c 2012-03-12 12:42:55.000000000 -0700
-@@ -50,7 +50,6 @@
- #include "libdwflP.h"
- #include "../libdw/libdwP.h"
-
--
- int
- dwfl_module_getsrc_file (Dwfl_Module *mod,
- const char *fname, int lineno, int column,
-diff -r -u -d /local/elfutils-0.138/libdwfl/find-debuginfo.c ./libdwfl/find-debuginfo.c
---- /local/elfutils-0.138/libdwfl/find-debuginfo.c 2008-12-10 20:33:30.000000000 -0800
-+++ ./libdwfl/find-debuginfo.c 2012-03-12 12:24:39.000000000 -0700
-@@ -53,7 +53,6 @@
- #include <unistd.h>
- #include "system.h"
-
--
- /* Try to open64 [DIR/][SUBDIR/]DEBUGLINK, return file descriptor or -1.
- On success, *DEBUGINFO_FILE_NAME has the malloc'd name of the open file. */
- static int
-@@ -145,8 +144,15 @@
- indicated by the debug directory path setting. */
-
- const Dwfl_Callbacks *const cb = mod->dwfl->callbacks;
-+/* ANDROID_CHANGE_BEGIN */
-+#ifdef __BIONIC__
-+ char *path = strdup ((cb->debuginfo_path ? *cb->debuginfo_path : NULL)
-+ ?: DEFAULT_DEBUGINFO_PATH);
-+#else
- char *path = strdupa ((cb->debuginfo_path ? *cb->debuginfo_path : NULL)
- ?: DEFAULT_DEBUGINFO_PATH);
-+#endif
-+/* ANDROID_CHANGE_END */
-
- /* A leading - or + in the whole path sets whether to check file CRCs. */
- bool defcheck = true;
-@@ -156,8 +162,15 @@
- ++path;
- }
-
-+ /* ANDROID_CHANGE_BEGIN */
-+#ifdef __BIONIC__
-+ char *file_dirname = (file_basename == file_name ? NULL
-+ : strndup (file_name, file_basename - 1 - file_name));
-+#else
- char *file_dirname = (file_basename == file_name ? NULL
- : strndupa (file_name, file_basename - 1 - file_name));
-+#endif
-+ /* ANDROID_CHANGE_END */
- char *p;
- while ((p = strsep (&path, ":")) != NULL)
- {
-@@ -201,17 +214,36 @@
- case ENOTDIR:
- continue;
- default:
-+/* ANDROID_CHANGE_BEGIN */
-+#ifdef __BIONIC__
-+ free(path);
-+ free(file_dirname);
-+#endif
-+/* ANDROID_CHANGE_END */
- return -1;
- }
- if (validate (mod, fd, check, debuglink_crc))
- {
- *debuginfo_file_name = fname;
-+/* ANDROID_CHANGE_BEGIN */
-+#ifdef __BIONIC__
-+ free(path);
-+ free(file_dirname);
-+#endif
-+/* ANDROID_CHANGE_END */
- return fd;
- }
- free (fname);
- close (fd);
- }
-
-+/* ANDROID_CHANGE_BEGIN */
-+#ifdef __BIONIC__
-+ free(path);
-+ free(file_dirname);
-+#endif
-+/* ANDROID_CHANGE_END */
-+
- /* No dice. */
- errno = 0;
- return -1;
-diff -r -u -d /local/elfutils-0.138/libebl/eblopenbackend.c ./libebl/eblopenbackend.c
---- /local/elfutils-0.138/libebl/eblopenbackend.c 2008-12-10 20:33:30.000000000 -0800
-+++ ./libebl/eblopenbackend.c 2012-03-16 16:55:06.000000000 -0700
-@@ -196,8 +196,15 @@
- uint32_t descsz, const char *desc);
- static bool default_debugscn_p (const char *name);
- static bool default_copy_reloc_p (int reloc);
-+/* ANDROID_CHANGE_BEGIN */
-+#ifndef __APPLE__
- static bool default_none_reloc_p (int reloc);
- static bool default_relative_reloc_p (int reloc);
-+#else
-+#define default_none_reloc_p default_copy_reloc_p
-+#define default_relative_reloc_p default_copy_reloc_p
-+#endif
-+/* ANDROID_CHANGE_END */
- static bool default_check_special_symbol (Elf *elf, GElf_Ehdr *ehdr,
- const GElf_Sym *sym,
- const char *name,
-@@ -677,8 +684,12 @@
- {
- return false;
- }
-+/* ANDROID_CHANGE_BEGIN */
-+#ifndef __APPLE__
- strong_alias (default_copy_reloc_p, default_none_reloc_p)
- strong_alias (default_copy_reloc_p, default_relative_reloc_p)
-+#endif
-+/* ANDROID_CHANGE_END */
-
- static bool
- default_check_special_symbol (Elf *elf __attribute__ ((unused)),
-diff -r -u -d /local/elfutils-0.138/libebl/libeblP.h ./libebl/libeblP.h
---- /local/elfutils-0.138/libebl/libeblP.h 2008-12-10 20:33:30.000000000 -0800
-+++ ./libebl/libeblP.h 2012-03-09 10:19:37.000000000 -0800
-@@ -55,7 +55,6 @@
- #include <libebl.h>
- #include <libintl.h>
-
--
- /* Backend handle. */
- struct ebl
- {
-diff -r -u -d /local/elfutils-0.138/libelf/elf32_fsize.c ./libelf/elf32_fsize.c
---- /local/elfutils-0.138/libelf/elf32_fsize.c 2008-12-10 20:33:30.000000000 -0800
-+++ ./libelf/elf32_fsize.c 2012-03-09 10:19:38.000000000 -0800
-@@ -88,5 +88,9 @@
- * __libelf_type_sizes[0][ELFW(ELFCLASS,LIBELFBITS) - 1][type]);
- #endif
- }
-+/* ANDROID_CHANGE_BEGIN */
-+#ifndef __APPLE__
- #define local_strong_alias(n1, n2) strong_alias (n1, n2)
- local_strong_alias (elfw2(LIBELFBITS, fsize), __elfw2(LIBELFBITS, msize))
-+#endif
-+/* ANDROID_CHANGE_END */
-diff -r -u -d /local/elfutils-0.138/libelf/elf_begin.c ./libelf/elf_begin.c
---- /local/elfutils-0.138/libelf/elf_begin.c 2008-12-10 20:33:30.000000000 -0800
-+++ ./libelf/elf_begin.c 2012-03-09 10:19:38.000000000 -0800
-@@ -68,7 +68,6 @@
- #include "libelfP.h"
- #include "common.h"
-
--
- /* Create descriptor for archive in memory. */
- static inline Elf *
- file_read_ar (int fildes, void *map_address, off_t offset, size_t maxsize,
-diff -r -u -d /local/elfutils-0.138/libelf/elf_getdata_rawchunk.c ./libelf/elf_getdata_rawchunk.c
---- /local/elfutils-0.138/libelf/elf_getdata_rawchunk.c 2008-12-10 20:33:30.000000000 -0800
-+++ ./libelf/elf_getdata_rawchunk.c 2012-03-15 11:14:32.000000000 -0700
-@@ -64,7 +64,13 @@
- Elf_Data *
- elf_getdata_rawchunk (elf, offset, size, type)
- Elf *elf;
-+ /* ANDROID_CHANGE_BEGIN */
-+#if 0
- off64_t offset;
-+#else
-+ off_t offset;
-+#endif
-+ /* ANDROID_CHANGE_END */
- size_t size;
- Elf_Type type;
- {
-@@ -78,8 +84,15 @@
- return NULL;
- }
-
-+ /* ANDROID_CHANGE_BEGIN */
-+#if 0
- if (unlikely (size > elf->maximum_size
- || (off64_t) (elf->maximum_size - size) < offset))
-+#else
-+ if (unlikely (size > elf->maximum_size
-+ || (off_t) (elf->maximum_size - size) < offset))
-+#endif
-+ /* ANDROID_CHANGE_END */
- {
- /* Invalid request. */
- __libelf_seterrno (ELF_E_INVALID_OP);
-diff -r -u -d /local/elfutils-0.138/libelf/elf.h ./libelf/elf.h
---- /local/elfutils-0.138/libelf/elf.h 2008-12-10 20:33:30.000000000 -0800
-+++ ./libelf/elf.h 2012-03-09 10:19:38.000000000 -0800
-@@ -21,7 +21,15 @@
- #ifndef _ELF_H
- #define _ELF_H 1
-
-+/* ANDROID_CHANGE_BEGIN */
-+/*
-+ * elf.h may be directly included from a different project, and features.h does
-+ * not exist on host Mac OS.
-+ */
-+#ifndef __APPLE__
- #include <features.h>
-+#endif
-+/* ANDROID_CHANGE_END */
-
- __BEGIN_DECLS
-
-diff -r -u -d /local/elfutils-0.138/libelf/gelf_xlate.c ./libelf/gelf_xlate.c
---- /local/elfutils-0.138/libelf/gelf_xlate.c 2008-12-10 20:33:30.000000000 -0800
-+++ ./libelf/gelf_xlate.c 2012-03-09 10:19:39.000000000 -0800
-@@ -229,7 +229,11 @@
- }
- }
- };
-+/* ANDROID_CHANGE_BEGIN */
-+#ifndef __APPLE__
- /* For now we only handle the case where the memory representation is the
- same as the file representation. Should this change we have to define
- separate functions. For now reuse them. */
- strong_alias (__elf_xfctstom, __elf_xfctstof)
-+#endif
-+/* ANDROID_CHANGE_END */
-diff -r -u -d /local/elfutils-0.138/libelf/libelf.h ./libelf/libelf.h
---- /local/elfutils-0.138/libelf/libelf.h 2008-12-17 16:29:37.000000000 -0800
-+++ ./libelf/libelf.h 2012-03-15 11:07:48.000000000 -0700
-@@ -95,7 +95,13 @@
- Elf_Type d_type; /* Type of this piece of data. */
- unsigned int d_version; /* ELF version. */
- size_t d_size; /* Size in bytes. */
-+ /* ANDROID_CHANGE_BEGIN */
-+#if 0
- loff_t d_off; /* Offset into section. */
-+#else
-+ off_t d_off; /* Offset into section. */
-+#endif
-+ /* ANDROID_CHANGE_END */
- size_t d_align; /* Alignment in section. */
- } Elf_Data;
-
-@@ -157,7 +163,13 @@
- uid_t ar_uid; /* User ID. */
- gid_t ar_gid; /* Group ID. */
- mode_t ar_mode; /* File mode. */
-+ /* ANDROID_CHANGE_BEGIN */
-+#if 0
- loff_t ar_size; /* File size. */
-+#else
-+ off_t ar_size; /* File size. */
-+#endif
-+ /* ANDROID_CHANGE_END */
- char *ar_rawname; /* Original name of archive member. */
- } Elf_Arhdr;
-
-@@ -198,13 +210,25 @@
- extern int elf_end (Elf *__elf);
-
- /* Update ELF descriptor and write file to disk. */
--extern loff_t elf_update (Elf *__elf, Elf_Cmd __cmd);
-+/* ANDROID_CHANGE_BEGIN */
-+#if 0
-+extern off_t elf_update (Elf *__elf, Elf_Cmd __cmd);
-+#else
-+#endif
-+/* ANDROID_CHANGE_END */
-+
-
- /* Determine what kind of file is associated with ELF. */
- extern Elf_Kind elf_kind (Elf *__elf) __attribute__ ((__pure__));
-
- /* Get the base offset for an object file. */
-+/* ANDROID_CHANGE_BEGIN */
-+#if 0
- extern loff_t elf_getbase (Elf *__elf);
-+#else
-+extern off_t elf_getbase (Elf *__elf);
-+#endif
-+/* ANDROID_CHANGE_END */
-
-
- /* Retrieve file identification data. */
-@@ -305,9 +329,17 @@
- /* Get data translated from a chunk of the file contents as section data
- would be for TYPE. The resulting Elf_Data pointer is valid until
- elf_end (ELF) is called. */
-+/* ANDROID_CHANGE_BEGIN */
-+#if 0
- extern Elf_Data *elf_getdata_rawchunk (Elf *__elf,
- loff_t __offset, size_t __size,
- Elf_Type __type);
-+#else
-+extern Elf_Data *elf_getdata_rawchunk (Elf *__elf,
-+ off_t __offset, size_t __size,
-+ Elf_Type __type);
-+#endif
-+/* ANDROID_CHANGE_END */
-
-
- /* Return pointer to string at OFFSET in section INDEX. */
-@@ -318,7 +350,13 @@
- extern Elf_Arhdr *elf_getarhdr (Elf *__elf);
-
- /* Return offset in archive for current file ELF. */
-+/* ANDROID_CHANGE_BEGIN */
-+#if 0
- extern loff_t elf_getaroff (Elf *__elf);
-+#else
-+extern off_t elf_getaroff (Elf *__elf);
-+#endif
-+/* ANDROID_CHANGE_END */
-
- /* Select archive element at OFFSET. */
- extern size_t elf_rand (Elf *__elf, size_t __offset);
diff --git a/backends/ChangeLog b/backends/ChangeLog
deleted file mode 100644
index 85609b1..0000000
--- a/backends/ChangeLog
+++ /dev/null
@@ -1,355 +0,0 @@
-2008-10-04 Ulrich Drepper <drepper@redhat.com>
-
- * i386_reloc.def: Fix entries for TLS_GOTDESC, TLS_DESC_CALL, and
- TLS_DESC.
-
-2008-08-01 Roland McGrath <roland@redhat.com>
-
- * x86_corenote.c: New file.
- * Makefile.am (noinst_HEADERS): Add it.
- * i386_corenote.c: Include it, use EXTRA_NOTES_IOPERM in EXTRA_NOTES.
- * x86_64_corenote.c: Likewise.
-
- * linux-core-note.c (prstatus_items): Use 'B' instead of 'b'
- for sigpend and sighold.
-
-2008-07-04 Roland McGrath <roland@redhat.com>
-
- * i386_syscall.c: New file.
- * x86_64_syscall.c: New file.
- * ppc_syscall.c: New file.
- * Makefile.am (i386_SRCS, x86_64_SRCS, ppc_SRCS, ppc64_SRCS): Add them.
- * i386_init.c (i386_init): Initialize syscall_abi hook.
- * x86_64_init.c (x86_64_init): Likewise.
- * ppc_init.c (ppc_init): Likewise.
- * ppc64_init.c (ppc64_init): Likewise.
-
- * ppc_corenote.c (PRSTATUS_REGSET_ITEMS): Add nip.
- Fix offset calculation for 64-bit case.
-
-2008-04-04 Roland McGrath <roland@redhat.com>
-
- * alpha_symbol.c (alpha_check_special_section): New function.
- * alpha_init.c (alpha_init): Initialize check_special_section hook.
-
-2008-03-31 Roland McGrath <roland@redhat.com>
-
- * sparc_symbol.c (sparc_symbol_type_name): New function.
- (sparc_dynamic_tag_name): New function.
- (sparc_dynamic_tag_check): New function.
- * sparc_init.c (sparc_init): Initialize those hooks.
-
- * sparc_symbol.c (sparc_check_special_section): New function.
- * sparc_init.c (sparc_init): Initialize check_special_section hook.
-
-2008-02-20 Roland McGrath <roland@redhat.com>
-
- * ppc_attrs.c: New file.
- * Makefile.am (ppc_SRCS, ppc64_SRCS): Add it.
- * ppc_init.c (ppc_init): Initialize check_object_attribute hook.
-
-2008-02-14 Roland McGrath <roland@redhat.com>
-
- * alpha_auxv.c: New file.
- * Makefile.am (alpha_SRCS): Add it.
- * alpha_init.c (alpha_init): Initialize auxv_info hook.
-
-2008-02-08 Roland McGrath <roland@redhat.com>
-
- * ppc_corenote.c (spe_regs): New const variable.
- (EXTRA_NOTES): Use it for NT_PPC_SPE.
-
-2008-01-02 Roland McGrath <roland@redhat.com>
-
- * i386_corenote.c (tls_items): New const table.
- (tls_info): New function, uses it.
- (EXTRA_NOTES): Use it to handle NT_386_TLS.
-
-2008-01-08 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: Add x86-64 disassembler.
- * x86_64_init.c (x86_64_init): Hook up disassembler.
-
-2007-12-28 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: Add x86 disassembler.
- * i386_init.c (i386_init): Hook up disassembler.
-
-2007-12-15 Roland McGrath <roland@redhat.com>
-
- * ppc_regs.c (ppc_register_info): Return "spefscr", not "spr512".
-
-2007-10-18 Roland McGrath <roland@redhat.com>
-
- * ppc_regs.c (ppc_register_info): Assign 67 to "vscr".
- Return "vector" and 32 bits for vscr and vrsave.
- * ppc_corenote.c (altivec_regs): New variable.
- (EXTRA_NOTES): New macro, handle NT_PPC_VMX.
-
- * linux-core-note.c (EXTRA_REGSET): New macro.
- Remove NT_PRXFPREG case. Instead, use EXTRA_NOTES if defined.
- * i386_corenote.c (EXTRA_NOTES): Define it.
-
-2007-10-09 Roland McGrath <roland@redhat.com>
-
- * sparc_auxv.c: New file.
- * Makefile.am (sparc_SRCS): Add it.
- * sparc_init.c (sparc_init): Initialize auxv_info hook.
-
-2007-10-08 Roland McGrath <roland@redhat.com>
-
- * linux-core-note.c (TIMEVAL_FIELD): New macro.
- (prstatus_items): Use it.
- * sparc_corenote.c: New file.
- * sparc64_corenote.c: New file.
- * Makefile.am (sparc_SRCS): Add them.
- * sparc_init.c (sparc_init): Initialize core_note hook.
-
- * sparc_symbol.c (sparc_machine_flag_check): New function.
- * sparc_init.c (sparc_init): Use it.
-
-2007-09-27 Roland McGrath <roland@redhat.com>
-
- * alpha_retval.c: Use dwarf_attr_integrate and dwarf_hasattr_integrate.
- * i386_retval.c: Likewise.
- * ia64_retval.c: Likewise.
- * ppc64_retval.c: Likewise.
- * ppc_retval.c: Likewise.
- * s390_retval.c: Likewise.
- * sparc_retval.c: Likewise.
- * x86_64_retval.c: Likewise.
-
-2007-10-31 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: More dependencies for the libebl_* libraries.
-
-2007-08-23 Roland McGrath <roland@redhat.com>
-
- * x86_64_regs.c (x86_64_register_info): Put %rflags in "integer" set.
-
-2007-08-22 Roland McGrath <roland@redhat.com>
-
- * linux-core-note.c (prstatus_items): Add .group initializers.
- (prpsinfo_items): Likewise.
- * x86_64_corenote.c (PRSTATUS_REGSET_ITEMS): Likewise.
- * i386_corenote.c (PRSTATUS_REGSET_ITEMS): Likewise.
- * ppc_corenote.c (PRSTATUS_REGSET_ITEMS): Likewise.
-
-2007-08-20 Roland McGrath <roland@redhat.com>
-
- * ppc_symbol.c (ppc_check_special_symbol): For _GLOBAL_OFFSET_TABLE_
- when DT_PPC_GOT is not found, anywhere in the section is valid.
-
-2007-08-19 Roland McGrath <roland@redhat.com>
-
- * i386_auxv.c: New file.
- * Makefile.am (i386_SRCS, x86_64_SRCS): Add it.
- * ppc_auxv.c: New file.
- * Makefile.am (ppc_SRCS, ppc64_SRCS): Add it.
- * i386_init.c (i386_init): Initialize auxv_info hook.
- * x86_64_init.c (x86_64_init): Likewise.
- * ppc_init.c (ppc_init): Likewise.
- * ppc64_init.c (ppc64_init): Likewise.
-
- * alpha_corenote.c: New file.
- * Makefile.am (alpha_SRCS): Add it.
- * alpha_init.c (alpha_init): Initialize core_note hook.
-
- * ppc_corenote.c: New file.
- * ppc64_corenote.c: New file.
- * Makefile.am (ppc_SRCS, ppc64_SRCS): Add them.
- * ppc_init.c (ppc_init): Initialize core_note hook.
- * ppc64_init.c (ppc64_init): Likewise.
-
- * linux-core-note.c: New file.
- * Makefile.am (noinst_HEADERS): Add it.
- * i386_corenote.c: Rewritten.
- * x86_64_corenote.c: Likewise.
-
-2007-05-23 Roland McGrath <roland@redhat.com>
-
- * alpha_regs.c (alpha_register_info): fp -> s6
-
-2007-04-26 Roland McGrath <roland@redhat.com>
-
- * alpha_symbol.c (alpha_machine_section_flag_check): New function.
- * alpha_init.c (alpha_init): Initialize hook.
-
- * alpha_regs.c: New file.
- * Makefile.am (alpha_SRCS): Add it.
- * alpha_init.c (alpha_init): Initialize register_info hook.
-
-2007-04-22 Roland McGrath <roland@redhat.com>
-
- * ppc_regs.c (ppc_register_info): Use some names instead of sprNNN:
- mq, xer, lr, ctr, dsisr, dar, dec, vrsave.
- Set *BITS to 64 for FPU registers.
-
- * i386_regs.c (i386_register_info): Set *BITS to 16 for fctrl, fstat.
- * x86_64_regs.c (x86_64_register_info): Likewise for fcw, fsw.
-
-2007-04-01 Roland McGrath <roland@redhat.com>
-
- * x86_64_regs.c (x86_64_register_info): Add more registers from newer
- ABI spec.
-
-2007-01-11 Roland McGrath <roland@redhat.com>
-
- * ia64_symbol.c (ia64_machine_section_flag_check): New function.
- * ia64_init.c (ia64_init): Use it.
-
- * ia64_symbol.c (ia64_section_type_name): Typo fix in string.
-
-2006-10-09 Roland McGrath <roland@redhat.com>
-
- * ia64_symbol.c (ia64_reloc_simple_type): Treat SECREL types as simple.
-
-2006-08-29 Roland McGrath <roland@redhat.com>
-
- * sparc_retval.c: New file.
- * Makefile.am (sparc_SRCS): Add it.
- * sparc_init.c (sparc_init): Initialize return_value_location hook.
-
-2006-08-22 Roland McGrath <roland@redhat.com>
-
- * i386_regs.c (i386_register_name): Renamed i386_register_info.
- Take new args, yield more info.
- * i386_init.c (i386_init): Update initializer.
- * ia64_regs.c (ia64_register_name): Likewise.
- * ia64_init.c (ia64_init): Likewise.
- * ppc_regs.c (ppc_register_name): Likewise.
- * ppc64_init.c (ppc64_init): Likewise.
- * ppc_init.c (ppc_init): Likewise.
- * s390_regs.c (s390_register_name): Likewise.
- * s390_init.c (s390_init): Likewise.
- * sparc_regs.c (sparc_register_name): Likewise.
- * sparc_init.c (sparc_init): Likewise.
- * x86_64_regs.c (x86_64_register_name): Likewise.
- * x86_64_init.c (x86_64_init): Likewise.
-
-2006-08-08 Roland McGrath <roland@redhat.com>
-
- * Makefile.am (%.os): Don't depend on %.o, since we don't actually
- need static object for anything here. This rule is the only source of
- .deps/ files.
-
-2006-06-23 Stepan Kasal <skasal@redhat.com>
-
- * Makefile.am (PACKAGE_VERSION): Remove superfluous definition.
-
-2006-08-03 Roland McGrath <roland@redhat.com>
-
- * sparc_regs.c (sparc_register_name): List 32 FPU regs only for
- EM_SPARC. EM_SPARC32PLUS also has 64.
-
-2006-07-21 Roland McGrath <roland@redhat.com>
-
- * i386_regs.c (i386_register_name): Fix return value when using stpcpy.
- * ppc_regs.c (ppc_register_name): Likewise.
- * s390_regs.c (s390_register_name): Likewise.
-
- * ia64_retval.c: New file.
- * Makefile.am (ia64_SRCS): Add it.
- * ia64_init.c (ia64_init): Install return_value_location hook.
-
- * ia64_regs.c: New file.
- * Makefile.am (ia64_SRCS): Add it.
- * ia64_init.c (ia64_init): Install register_name hook.
-
-2006-07-05 Ulrich Drepper <drepper@redhat.com>
-
- * alpha_init.c: Initialize sysvhash_entrysize.
- * s390_init.c: Likewise.
-
-2006-07-04 Ulrich Drepper <drepper@redhat.com>
-
- * common-reloc.c (relative_reloc_p): New function.
- (init_reloc): Hook it up.
- * ia64_reloc.def: Define NO_RELATIVE_RELOC.
-
-2006-06-13 Roland McGrath <roland@redhat.com>
-
- * ppc64_retval.c: Remove SVR4_STRUCT_RETURN braino.
-
-2006-06-12 Ulrich Drepper <drepper@redhat.com>
-
- * common-reloc.c (none_reloc_p): New function.
- (init_reloc): Hook it up.
-
-2006-02-22 Roland McGrath <roland@redhat.com>
-
- * ppc64_retval.c (SVR4_STRUCT_RETURN): New macro.
- (ppc64_return_value_location): Use registers for aggregate conditional
- on that.
- * ppc_retval.c (SVR4_STRUCT_RETURN): New macro.
- (ppc_return_value_location): Use registers for aggregate conditional
- on that.
-
-2006-01-12 Roland McGrath <roland@redhat.com>
-
- * s390_retval.c: New file.
- * Makefile.am (s390_SRCS): Add it.
- * s390_init.c (s390_init): Install return_value_location hook.
-
-2006-01-11 Roland McGrath <roland@redhat.com>
-
- * s390_regs.c: New file.
- * Makefile.am (s390_SRCS): Add it.
- * s390_init.c (s390_init): Install register_name hook.
-
- * s390_reloc.def: Update bits per
- Martin Schwidefsky <schwidefsky@de.ibm.com>.
-
-2005-12-10 Ulrich Drepper
-
- * common-reloc.c (R_NAME): Generate string correctly.
-
-2005-12-05 Roland McGrath <roland@redhat.com>
-
- * i386_regs.c (i386_register_name): Use a table for the first 8 regs.
- * x86_64_regs.c (x86_64_register_name): Likewise.
-
-2005-11-25 Roland McGrath <roland@redhat.com>
-
- * i386_regs.c (i386_register_name): Return 0, not 1, for gaps.
-
- * i386_regs.c: New file.
- * ppc_regs.c: New file.
- * sparc_regs.c: New file.
- * x86_64_regs.c: New file.
- * Makefile.am
- (i386_SRCS, x86_64_SRCS, ppc_SRCS, ppc64_SRCS, sparc_SRCS): Add them.
- * i386_init.c: Initialize register_name hook.
- * ppc_init.c: Likewise.
- * ppc64_init.c: Likewise.
- * sparc_init.c: Likewise.
- * x86_64_init.c: Likewise.
-
-2005-11-19 Roland McGrath <roland@redhat.com>
-
- * ppc64_reloc.def: REL30 -> ADDR30.
-
-2005-11-18 Roland McGrath <roland@redhat.com>
-
- * alpha_init.c: Use HOOK macro.
- * arm_init.c: Likewise.
- * i386_init.c: Likewise.
- * ia64_init.c: Likewise.
- * ppc64_init.c: Likewise.
- * ppc_init.c: Likewise.
- * s390_init.c: Likewise.
- * sh_init.c: Likewise.
- * sparc_init.c: Likewise.
- * x86_64_init.c: Likewise.
-
-2005-11-17 Roland McGrath <roland@redhat.com>
-
- * Makefile.am (uninstall): Don't try to remove $(pkgincludedir).
- (CLEANFILES): Add libebl_$(m).so.
-
- * ppc_reloc.def: Update bits per Alan Modra <amodra@bigpond.net.au>.
- * ppc64_reloc.def: Likewise.
-
-2005-11-15 Roland McGrath <roland@redhat.com>
-
- * Contents moved here from ../libebl.
diff --git a/backends/Makefile.am b/backends/Makefile.am
deleted file mode 100644
index 5b55294..0000000
--- a/backends/Makefile.am
+++ /dev/null
@@ -1,154 +0,0 @@
-## Process this file with automake to create Makefile.in
-##
-## Copyright (C) 2000-2006, 2007, 2008 Red Hat, Inc.
-## This file is part of Red Hat elfutils.
-##
-## Red Hat elfutils is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by the
-## Free Software Foundation; version 2 of the License.
-##
-## Red Hat elfutils 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
-## General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License along
-## with Red Hat elfutils; if not, write to the Free Software Foundation,
-## Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-##
-## Red Hat elfutils is an included package of the Open Invention Network.
-## An included package of the Open Invention Network is a package for which
-## Open Invention Network licensees cross-license their patents. No patent
-## license is granted, either expressly or impliedly, by designation as an
-## included package. Should you wish to participate in the Open Invention
-## Network licensing program, please visit www.openinventionnetwork.com
-## <http://www.openinventionnetwork.com>.
-##
-DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H -DOBJDIR=\"$(shell pwd)\"
-if MUDFLAP
-AM_CFLAGS = -fmudflap
-else
-AM_CFLAGS =
-endif
-AM_CFLAGS += -fpic -Wall -Wshadow -Werror -Wunused -Wextra -Wformat=2 \
- -std=gnu99
-INCLUDES = -I$(srcdir) -I$(top_srcdir)/libebl -I$(top_srcdir)/libasm \
- -I$(top_srcdir)/libelf -I$(top_srcdir)/libdw \
- -I$(top_srcdir)/lib -I..
-
-
-modules = i386 sh x86_64 ia64 alpha arm sparc ppc ppc64 s390
-libebl_pic = libebl_i386_pic.a libebl_sh_pic.a libebl_x86_64_pic.a \
- libebl_ia64_pic.a libebl_alpha_pic.a libebl_arm_pic.a \
- libebl_sparc_pic.a libebl_ppc_pic.a libebl_ppc64_pic.a \
- libebl_s390_pic.a
-noinst_LIBRARIES = $(libebl_pic)
-noinst_DATA = $(libebl_pic:_pic.a=.so)
-
-
-if MUDFLAP
-libelf = ../libelf/libelf.a
-libdw = ../libdw/libdw.a
-libmudflap = -lmudflap
-else
-libelf = ../libelf/libelf.so
-libdw = ../libdw/libdw.so
-libmudflap =
-endif
-
-
-textrel_check = if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi
-
-
-i386_SRCS = i386_init.c i386_symbol.c i386_corenote.c \
- i386_retval.c i386_regs.c i386_auxv.c i386_syscall.c
-cpu_i386 = ../libcpu/libcpu_i386.a
-libebl_i386_pic_a_SOURCES = $(i386_SRCS)
-am_libebl_i386_pic_a_OBJECTS = $(i386_SRCS:.c=.os)
-
-sh_SRCS = sh_init.c sh_symbol.c
-libebl_sh_pic_a_SOURCES = $(sh_SRCS)
-am_libebl_sh_pic_a_OBJECTS = $(sh_SRCS:.c=.os)
-
-x86_64_SRCS = x86_64_init.c x86_64_symbol.c x86_64_corenote.c \
- x86_64_retval.c x86_64_regs.c i386_auxv.c x86_64_syscall.c
-cpu_x86_64 = ../libcpu/libcpu_x86_64.a
-libebl_x86_64_pic_a_SOURCES = $(x86_64_SRCS)
-am_libebl_x86_64_pic_a_OBJECTS = $(x86_64_SRCS:.c=.os)
-
-ia64_SRCS = ia64_init.c ia64_symbol.c ia64_regs.c ia64_retval.c
-libebl_ia64_pic_a_SOURCES = $(ia64_SRCS)
-am_libebl_ia64_pic_a_OBJECTS = $(ia64_SRCS:.c=.os)
-
-alpha_SRCS = alpha_init.c alpha_symbol.c alpha_retval.c alpha_regs.c \
- alpha_corenote.c alpha_auxv.c
-libebl_alpha_pic_a_SOURCES = $(alpha_SRCS)
-am_libebl_alpha_pic_a_OBJECTS = $(alpha_SRCS:.c=.os)
-
-arm_SRCS = arm_init.c arm_symbol.c
-libebl_arm_pic_a_SOURCES = $(arm_SRCS)
-am_libebl_arm_pic_a_OBJECTS = $(arm_SRCS:.c=.os)
-
-sparc_SRCS = sparc_init.c sparc_symbol.c sparc_regs.c sparc_retval.c \
- sparc_corenote.c sparc64_corenote.c sparc_auxv.c
-libebl_sparc_pic_a_SOURCES = $(sparc_SRCS)
-am_libebl_sparc_pic_a_OBJECTS = $(sparc_SRCS:.c=.os)
-
-ppc_SRCS = ppc_init.c ppc_symbol.c ppc_retval.c ppc_regs.c \
- ppc_corenote.c ppc_auxv.c ppc_attrs.c ppc_syscall.c
-libebl_ppc_pic_a_SOURCES = $(ppc_SRCS)
-am_libebl_ppc_pic_a_OBJECTS = $(ppc_SRCS:.c=.os)
-
-ppc64_SRCS = ppc64_init.c ppc64_symbol.c ppc64_retval.c \
- ppc64_corenote.c ppc_regs.c ppc_auxv.c ppc_attrs.c ppc_syscall.c
-libebl_ppc64_pic_a_SOURCES = $(ppc64_SRCS)
-am_libebl_ppc64_pic_a_OBJECTS = $(ppc64_SRCS:.c=.os)
-
-s390_SRCS = s390_init.c s390_symbol.c s390_regs.c s390_retval.c
-libebl_s390_pic_a_SOURCES = $(s390_SRCS)
-am_libebl_s390_pic_a_OBJECTS = $(s390_SRCS:.c=.os)
-
-
-libebl_%.so: libebl_%_pic.a libebl_%.map $(libelf) $(libdw) \
- $(cpu_$(@:libebl_%.so=%)
- $(LINK) -shared -o $@ -Wl,--whole-archive,$<\
- $(cpu_$(@:libebl_%.so=%)) -Wl,--no-whole-archive \
- -Wl,--version-script,$(word 2,$^) \
- -Wl,-z,defs -Wl,--as-needed $(libelf) $(libdw) $(libmudflap)
- $(textrel_check)
-
-# XXX Should not be needed...
-libebl_i386.so: $(cpu_i386)
-libebl_x86_64.so: $(cpu_x86_64)
-
-libebl_%.map: Makefile
- echo 'ELFUTILS_$(PACKAGE_VERSION) { global: $*_init; local: *; };' > $@
-
-%.os: %.c
- if $(COMPILE) -c -o $@ -fpic -DPIC -DSHARED -MT $@ -MD -MP \
- -MF "$(DEPDIR)/$*.Tpo" `test -f '$<' || echo '$(srcdir)/'`$<; \
- then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
- else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
- fi
-
-install: install-am install-ebl-modules
-install-ebl-modules:
- $(mkinstalldirs) $(DESTDIR)$(libdir)/$(LIBEBL_SUBDIR)
- for m in $(modules); do \
- $(INSTALL_PROGRAM) libebl_$${m}.so $(DESTDIR)$(libdir)/$(LIBEBL_SUBDIR)/libebl_$${m}-$(PACKAGE_VERSION).so; \
- ln -fs libebl_$${m}-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir)/$(LIBEBL_SUBDIR)/libebl_$${m}.so; \
- done
-
-uninstall: uninstall-am
- for m in $(modules); do \
- rm -f $(DESTDIR)$(libdir)/$(LIBEBL_SUBDIR)/libebl_$${m}-$(PACKAGE_VERSION).so; \
- rm -f $(DESTDIR)$(libdir)/$(LIBEBL_SUBDIR)/libebl_$${m}.so; \
- done
- rmdir --ignore-fail-on-non-empty $(DESTDIR)$(libdir)/$(LIBEBL_SUBDIR)
-
-noinst_HEADERS = libebl_CPU.h common-reloc.c linux-core-note.c x86_corenote.c
-EXTRA_DIST = $(foreach m,$(modules),$($(m)_SRCS)) $(modules:=_reloc.def)
-
-CLEANFILES = *.gcno *.gcda \
- $(foreach m,$(modules),\
- libebl_$(m).so $(am_libebl_$(m)_pic_a_OBJECTS))
diff --git a/backends/Makefile.in b/backends/Makefile.in
deleted file mode 100644
index 6e1d3d7..0000000
--- a/backends/Makefile.in
+++ /dev/null
@@ -1,675 +0,0 @@
-# Makefile.in generated by automake 1.10.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = backends
-DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
- $(srcdir)/Makefile.in ChangeLog
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-LIBRARIES = $(noinst_LIBRARIES)
-AR = ar
-ARFLAGS = cru
-libebl_alpha_pic_a_AR = $(AR) $(ARFLAGS)
-libebl_alpha_pic_a_LIBADD =
-am__objects_1 = alpha_init.$(OBJEXT) alpha_symbol.$(OBJEXT) \
- alpha_retval.$(OBJEXT) alpha_regs.$(OBJEXT) \
- alpha_corenote.$(OBJEXT) alpha_auxv.$(OBJEXT)
-libebl_alpha_pic_a_OBJECTS = $(am_libebl_alpha_pic_a_OBJECTS)
-libebl_arm_pic_a_AR = $(AR) $(ARFLAGS)
-libebl_arm_pic_a_LIBADD =
-am__objects_2 = arm_init.$(OBJEXT) arm_symbol.$(OBJEXT)
-libebl_arm_pic_a_OBJECTS = $(am_libebl_arm_pic_a_OBJECTS)
-libebl_i386_pic_a_AR = $(AR) $(ARFLAGS)
-libebl_i386_pic_a_LIBADD =
-am__objects_3 = i386_init.$(OBJEXT) i386_symbol.$(OBJEXT) \
- i386_corenote.$(OBJEXT) i386_retval.$(OBJEXT) \
- i386_regs.$(OBJEXT) i386_auxv.$(OBJEXT) i386_syscall.$(OBJEXT)
-libebl_i386_pic_a_OBJECTS = $(am_libebl_i386_pic_a_OBJECTS)
-libebl_ia64_pic_a_AR = $(AR) $(ARFLAGS)
-libebl_ia64_pic_a_LIBADD =
-am__objects_4 = ia64_init.$(OBJEXT) ia64_symbol.$(OBJEXT) \
- ia64_regs.$(OBJEXT) ia64_retval.$(OBJEXT)
-libebl_ia64_pic_a_OBJECTS = $(am_libebl_ia64_pic_a_OBJECTS)
-libebl_ppc64_pic_a_AR = $(AR) $(ARFLAGS)
-libebl_ppc64_pic_a_LIBADD =
-am__objects_5 = ppc64_init.$(OBJEXT) ppc64_symbol.$(OBJEXT) \
- ppc64_retval.$(OBJEXT) ppc64_corenote.$(OBJEXT) \
- ppc_regs.$(OBJEXT) ppc_auxv.$(OBJEXT) ppc_attrs.$(OBJEXT) \
- ppc_syscall.$(OBJEXT)
-libebl_ppc64_pic_a_OBJECTS = $(am_libebl_ppc64_pic_a_OBJECTS)
-libebl_ppc_pic_a_AR = $(AR) $(ARFLAGS)
-libebl_ppc_pic_a_LIBADD =
-am__objects_6 = ppc_init.$(OBJEXT) ppc_symbol.$(OBJEXT) \
- ppc_retval.$(OBJEXT) ppc_regs.$(OBJEXT) ppc_corenote.$(OBJEXT) \
- ppc_auxv.$(OBJEXT) ppc_attrs.$(OBJEXT) ppc_syscall.$(OBJEXT)
-libebl_ppc_pic_a_OBJECTS = $(am_libebl_ppc_pic_a_OBJECTS)
-libebl_s390_pic_a_AR = $(AR) $(ARFLAGS)
-libebl_s390_pic_a_LIBADD =
-am__objects_7 = s390_init.$(OBJEXT) s390_symbol.$(OBJEXT) \
- s390_regs.$(OBJEXT) s390_retval.$(OBJEXT)
-libebl_s390_pic_a_OBJECTS = $(am_libebl_s390_pic_a_OBJECTS)
-libebl_sh_pic_a_AR = $(AR) $(ARFLAGS)
-libebl_sh_pic_a_LIBADD =
-am__objects_8 = sh_init.$(OBJEXT) sh_symbol.$(OBJEXT)
-libebl_sh_pic_a_OBJECTS = $(am_libebl_sh_pic_a_OBJECTS)
-libebl_sparc_pic_a_AR = $(AR) $(ARFLAGS)
-libebl_sparc_pic_a_LIBADD =
-am__objects_9 = sparc_init.$(OBJEXT) sparc_symbol.$(OBJEXT) \
- sparc_regs.$(OBJEXT) sparc_retval.$(OBJEXT) \
- sparc_corenote.$(OBJEXT) sparc64_corenote.$(OBJEXT) \
- sparc_auxv.$(OBJEXT)
-libebl_sparc_pic_a_OBJECTS = $(am_libebl_sparc_pic_a_OBJECTS)
-libebl_x86_64_pic_a_AR = $(AR) $(ARFLAGS)
-libebl_x86_64_pic_a_LIBADD =
-am__objects_10 = x86_64_init.$(OBJEXT) x86_64_symbol.$(OBJEXT) \
- x86_64_corenote.$(OBJEXT) x86_64_retval.$(OBJEXT) \
- x86_64_regs.$(OBJEXT) i386_auxv.$(OBJEXT) \
- x86_64_syscall.$(OBJEXT)
-libebl_x86_64_pic_a_OBJECTS = $(am_libebl_x86_64_pic_a_OBJECTS)
-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-SOURCES = $(libebl_alpha_pic_a_SOURCES) $(libebl_arm_pic_a_SOURCES) \
- $(libebl_i386_pic_a_SOURCES) $(libebl_ia64_pic_a_SOURCES) \
- $(libebl_ppc64_pic_a_SOURCES) $(libebl_ppc_pic_a_SOURCES) \
- $(libebl_s390_pic_a_SOURCES) $(libebl_sh_pic_a_SOURCES) \
- $(libebl_sparc_pic_a_SOURCES) $(libebl_x86_64_pic_a_SOURCES)
-DIST_SOURCES = $(libebl_alpha_pic_a_SOURCES) \
- $(libebl_arm_pic_a_SOURCES) $(libebl_i386_pic_a_SOURCES) \
- $(libebl_ia64_pic_a_SOURCES) $(libebl_ppc64_pic_a_SOURCES) \
- $(libebl_ppc_pic_a_SOURCES) $(libebl_s390_pic_a_SOURCES) \
- $(libebl_sh_pic_a_SOURCES) $(libebl_sparc_pic_a_SOURCES) \
- $(libebl_x86_64_pic_a_SOURCES)
-DATA = $(noinst_DATA)
-HEADERS = $(noinst_HEADERS)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEBUGPRED = @DEBUGPRED@
-DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H -DOBJDIR=\"$(shell pwd)\"
-DEPDIR = @DEPDIR@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EXEEXT = @EXEEXT@
-GMSGFMT = @GMSGFMT@
-GMSGFMT_015 = @GMSGFMT_015@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LDFLAGS = @LDFLAGS@
-LEX = @LEX@
-LEXLIB = @LEXLIB@
-LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
-LIBEBL_SUBDIR = @LIBEBL_SUBDIR@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LOCALEDIR = @LOCALEDIR@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MKDIR_P = @MKDIR_P@
-MODVERSION = @MODVERSION@
-MSGFMT = @MSGFMT@
-MSGFMT_015 = @MSGFMT_015@
-MSGMERGE = @MSGMERGE@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-RANLIB = @RANLIB@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-USE_NLS = @USE_NLS@
-VERSION = @VERSION@
-XGETTEXT = @XGETTEXT@
-XGETTEXT_015 = @XGETTEXT_015@
-YACC = @YACC@
-YFLAGS = @YFLAGS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-base_cpu = @base_cpu@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-eu_version = @eu_version@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-@MUDFLAP_FALSE@AM_CFLAGS = -fpic -Wall -Wshadow -Werror -Wunused \
-@MUDFLAP_FALSE@ -Wextra -Wformat=2 -std=gnu99
-@MUDFLAP_TRUE@AM_CFLAGS = -fmudflap -fpic -Wall -Wshadow -Werror \
-@MUDFLAP_TRUE@ -Wunused -Wextra -Wformat=2 -std=gnu99
-INCLUDES = -I$(srcdir) -I$(top_srcdir)/libebl -I$(top_srcdir)/libasm \
- -I$(top_srcdir)/libelf -I$(top_srcdir)/libdw \
- -I$(top_srcdir)/lib -I..
-
-modules = i386 sh x86_64 ia64 alpha arm sparc ppc ppc64 s390
-libebl_pic = libebl_i386_pic.a libebl_sh_pic.a libebl_x86_64_pic.a \
- libebl_ia64_pic.a libebl_alpha_pic.a libebl_arm_pic.a \
- libebl_sparc_pic.a libebl_ppc_pic.a libebl_ppc64_pic.a \
- libebl_s390_pic.a
-
-noinst_LIBRARIES = $(libebl_pic)
-noinst_DATA = $(libebl_pic:_pic.a=.so)
-@MUDFLAP_FALSE@libelf = ../libelf/libelf.so
-@MUDFLAP_TRUE@libelf = ../libelf/libelf.a
-@MUDFLAP_FALSE@libdw = ../libdw/libdw.so
-@MUDFLAP_TRUE@libdw = ../libdw/libdw.a
-@MUDFLAP_FALSE@libmudflap =
-@MUDFLAP_TRUE@libmudflap = -lmudflap
-textrel_check = if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi
-i386_SRCS = i386_init.c i386_symbol.c i386_corenote.c \
- i386_retval.c i386_regs.c i386_auxv.c i386_syscall.c
-
-cpu_i386 = ../libcpu/libcpu_i386.a
-libebl_i386_pic_a_SOURCES = $(i386_SRCS)
-am_libebl_i386_pic_a_OBJECTS = $(i386_SRCS:.c=.os)
-sh_SRCS = sh_init.c sh_symbol.c
-libebl_sh_pic_a_SOURCES = $(sh_SRCS)
-am_libebl_sh_pic_a_OBJECTS = $(sh_SRCS:.c=.os)
-x86_64_SRCS = x86_64_init.c x86_64_symbol.c x86_64_corenote.c \
- x86_64_retval.c x86_64_regs.c i386_auxv.c x86_64_syscall.c
-
-cpu_x86_64 = ../libcpu/libcpu_x86_64.a
-libebl_x86_64_pic_a_SOURCES = $(x86_64_SRCS)
-am_libebl_x86_64_pic_a_OBJECTS = $(x86_64_SRCS:.c=.os)
-ia64_SRCS = ia64_init.c ia64_symbol.c ia64_regs.c ia64_retval.c
-libebl_ia64_pic_a_SOURCES = $(ia64_SRCS)
-am_libebl_ia64_pic_a_OBJECTS = $(ia64_SRCS:.c=.os)
-alpha_SRCS = alpha_init.c alpha_symbol.c alpha_retval.c alpha_regs.c \
- alpha_corenote.c alpha_auxv.c
-
-libebl_alpha_pic_a_SOURCES = $(alpha_SRCS)
-am_libebl_alpha_pic_a_OBJECTS = $(alpha_SRCS:.c=.os)
-arm_SRCS = arm_init.c arm_symbol.c
-libebl_arm_pic_a_SOURCES = $(arm_SRCS)
-am_libebl_arm_pic_a_OBJECTS = $(arm_SRCS:.c=.os)
-sparc_SRCS = sparc_init.c sparc_symbol.c sparc_regs.c sparc_retval.c \
- sparc_corenote.c sparc64_corenote.c sparc_auxv.c
-
-libebl_sparc_pic_a_SOURCES = $(sparc_SRCS)
-am_libebl_sparc_pic_a_OBJECTS = $(sparc_SRCS:.c=.os)
-ppc_SRCS = ppc_init.c ppc_symbol.c ppc_retval.c ppc_regs.c \
- ppc_corenote.c ppc_auxv.c ppc_attrs.c ppc_syscall.c
-
-libebl_ppc_pic_a_SOURCES = $(ppc_SRCS)
-am_libebl_ppc_pic_a_OBJECTS = $(ppc_SRCS:.c=.os)
-ppc64_SRCS = ppc64_init.c ppc64_symbol.c ppc64_retval.c \
- ppc64_corenote.c ppc_regs.c ppc_auxv.c ppc_attrs.c ppc_syscall.c
-
-libebl_ppc64_pic_a_SOURCES = $(ppc64_SRCS)
-am_libebl_ppc64_pic_a_OBJECTS = $(ppc64_SRCS:.c=.os)
-s390_SRCS = s390_init.c s390_symbol.c s390_regs.c s390_retval.c
-libebl_s390_pic_a_SOURCES = $(s390_SRCS)
-am_libebl_s390_pic_a_OBJECTS = $(s390_SRCS:.c=.os)
-noinst_HEADERS = libebl_CPU.h common-reloc.c linux-core-note.c x86_corenote.c
-EXTRA_DIST = $(foreach m,$(modules),$($(m)_SRCS)) $(modules:=_reloc.def)
-CLEANFILES = *.gcno *.gcda \
- $(foreach m,$(modules),\
- libebl_$(m).so $(am_libebl_$(m)_pic_a_OBJECTS))
-
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
- && exit 0; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits backends/Makefile'; \
- cd $(top_srcdir) && \
- $(AUTOMAKE) --gnits backends/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-clean-noinstLIBRARIES:
- -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
-libebl_alpha_pic.a: $(libebl_alpha_pic_a_OBJECTS) $(libebl_alpha_pic_a_DEPENDENCIES)
- -rm -f libebl_alpha_pic.a
- $(libebl_alpha_pic_a_AR) libebl_alpha_pic.a $(libebl_alpha_pic_a_OBJECTS) $(libebl_alpha_pic_a_LIBADD)
- $(RANLIB) libebl_alpha_pic.a
-libebl_arm_pic.a: $(libebl_arm_pic_a_OBJECTS) $(libebl_arm_pic_a_DEPENDENCIES)
- -rm -f libebl_arm_pic.a
- $(libebl_arm_pic_a_AR) libebl_arm_pic.a $(libebl_arm_pic_a_OBJECTS) $(libebl_arm_pic_a_LIBADD)
- $(RANLIB) libebl_arm_pic.a
-libebl_i386_pic.a: $(libebl_i386_pic_a_OBJECTS) $(libebl_i386_pic_a_DEPENDENCIES)
- -rm -f libebl_i386_pic.a
- $(libebl_i386_pic_a_AR) libebl_i386_pic.a $(libebl_i386_pic_a_OBJECTS) $(libebl_i386_pic_a_LIBADD)
- $(RANLIB) libebl_i386_pic.a
-libebl_ia64_pic.a: $(libebl_ia64_pic_a_OBJECTS) $(libebl_ia64_pic_a_DEPENDENCIES)
- -rm -f libebl_ia64_pic.a
- $(libebl_ia64_pic_a_AR) libebl_ia64_pic.a $(libebl_ia64_pic_a_OBJECTS) $(libebl_ia64_pic_a_LIBADD)
- $(RANLIB) libebl_ia64_pic.a
-libebl_ppc64_pic.a: $(libebl_ppc64_pic_a_OBJECTS) $(libebl_ppc64_pic_a_DEPENDENCIES)
- -rm -f libebl_ppc64_pic.a
- $(libebl_ppc64_pic_a_AR) libebl_ppc64_pic.a $(libebl_ppc64_pic_a_OBJECTS) $(libebl_ppc64_pic_a_LIBADD)
- $(RANLIB) libebl_ppc64_pic.a
-libebl_ppc_pic.a: $(libebl_ppc_pic_a_OBJECTS) $(libebl_ppc_pic_a_DEPENDENCIES)
- -rm -f libebl_ppc_pic.a
- $(libebl_ppc_pic_a_AR) libebl_ppc_pic.a $(libebl_ppc_pic_a_OBJECTS) $(libebl_ppc_pic_a_LIBADD)
- $(RANLIB) libebl_ppc_pic.a
-libebl_s390_pic.a: $(libebl_s390_pic_a_OBJECTS) $(libebl_s390_pic_a_DEPENDENCIES)
- -rm -f libebl_s390_pic.a
- $(libebl_s390_pic_a_AR) libebl_s390_pic.a $(libebl_s390_pic_a_OBJECTS) $(libebl_s390_pic_a_LIBADD)
- $(RANLIB) libebl_s390_pic.a
-libebl_sh_pic.a: $(libebl_sh_pic_a_OBJECTS) $(libebl_sh_pic_a_DEPENDENCIES)
- -rm -f libebl_sh_pic.a
- $(libebl_sh_pic_a_AR) libebl_sh_pic.a $(libebl_sh_pic_a_OBJECTS) $(libebl_sh_pic_a_LIBADD)
- $(RANLIB) libebl_sh_pic.a
-libebl_sparc_pic.a: $(libebl_sparc_pic_a_OBJECTS) $(libebl_sparc_pic_a_DEPENDENCIES)
- -rm -f libebl_sparc_pic.a
- $(libebl_sparc_pic_a_AR) libebl_sparc_pic.a $(libebl_sparc_pic_a_OBJECTS) $(libebl_sparc_pic_a_LIBADD)
- $(RANLIB) libebl_sparc_pic.a
-libebl_x86_64_pic.a: $(libebl_x86_64_pic_a_OBJECTS) $(libebl_x86_64_pic_a_DEPENDENCIES)
- -rm -f libebl_x86_64_pic.a
- $(libebl_x86_64_pic_a_AR) libebl_x86_64_pic.a $(libebl_x86_64_pic_a_OBJECTS) $(libebl_x86_64_pic_a_LIBADD)
- $(RANLIB) libebl_x86_64_pic.a
-
-mostlyclean-compile:
- -rm -f *.$(OBJEXT)
-
-distclean-compile:
- -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alpha_auxv.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alpha_corenote.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alpha_init.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alpha_regs.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alpha_retval.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alpha_symbol.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arm_init.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arm_symbol.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386_auxv.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386_corenote.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386_init.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386_regs.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386_retval.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386_symbol.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386_syscall.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ia64_init.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ia64_regs.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ia64_retval.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ia64_symbol.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppc64_corenote.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppc64_init.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppc64_retval.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppc64_symbol.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppc_attrs.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppc_auxv.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppc_corenote.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppc_init.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppc_regs.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppc_retval.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppc_symbol.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppc_syscall.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s390_init.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s390_regs.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s390_retval.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s390_symbol.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sh_init.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sh_symbol.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sparc64_corenote.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sparc_auxv.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sparc_corenote.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sparc_init.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sparc_regs.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sparc_retval.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sparc_symbol.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/x86_64_corenote.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/x86_64_init.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/x86_64_regs.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/x86_64_retval.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/x86_64_symbol.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/x86_64_syscall.Po@am__quote@
-
-.c.o:
-@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
-
-.c.obj:
-@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- mkid -fID $$unique
-tags: TAGS
-
-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- here=`pwd`; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$tags $$unique; \
- fi
-ctags: CTAGS
-CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- test -z "$(CTAGS_ARGS)$$tags$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$tags $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && cd $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) $$here
-
-distclean-tags:
- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- list='$(DISTFILES)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
- fi; \
- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
- else \
- test -f $(distdir)/$$file \
- || cp -p $$d/$$file $(distdir)/$$file \
- || exit 1; \
- fi; \
- done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LIBRARIES) $(DATA) $(HEADERS)
-installdirs:
-install-exec: install-exec-am
-install-data: install-data-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am
-
-distclean: distclean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
- distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-info: install-info-am
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-ps: install-ps-am
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
- clean-noinstLIBRARIES ctags distclean distclean-compile \
- distclean-generic distclean-tags distdir dvi dvi-am html \
- html-am info info-am install install-am install-data \
- install-data-am install-dvi install-dvi-am install-exec \
- install-exec-am install-html install-html-am install-info \
- install-info-am install-man install-pdf install-pdf-am \
- install-ps install-ps-am install-strip installcheck \
- installcheck-am installdirs maintainer-clean \
- maintainer-clean-generic mostlyclean mostlyclean-compile \
- mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
- uninstall-am
-
-
-libebl_%.so: libebl_%_pic.a libebl_%.map $(libelf) $(libdw) \
- $(cpu_$(@:libebl_%.so=%)
- $(LINK) -shared -o $@ -Wl,--whole-archive,$<\
- $(cpu_$(@:libebl_%.so=%)) -Wl,--no-whole-archive \
- -Wl,--version-script,$(word 2,$^) \
- -Wl,-z,defs -Wl,--as-needed $(libelf) $(libdw) $(libmudflap)
- $(textrel_check)
-
-# XXX Should not be needed...
-libebl_i386.so: $(cpu_i386)
-libebl_x86_64.so: $(cpu_x86_64)
-
-libebl_%.map: Makefile
- echo 'ELFUTILS_$(PACKAGE_VERSION) { global: $*_init; local: *; };' > $@
-
-%.os: %.c
- if $(COMPILE) -c -o $@ -fpic -DPIC -DSHARED -MT $@ -MD -MP \
- -MF "$(DEPDIR)/$*.Tpo" `test -f '$<' || echo '$(srcdir)/'`$<; \
- then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
- else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
- fi
-
-install: install-am install-ebl-modules
-install-ebl-modules:
- $(mkinstalldirs) $(DESTDIR)$(libdir)/$(LIBEBL_SUBDIR)
- for m in $(modules); do \
- $(INSTALL_PROGRAM) libebl_$${m}.so $(DESTDIR)$(libdir)/$(LIBEBL_SUBDIR)/libebl_$${m}-$(PACKAGE_VERSION).so; \
- ln -fs libebl_$${m}-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir)/$(LIBEBL_SUBDIR)/libebl_$${m}.so; \
- done
-
-uninstall: uninstall-am
- for m in $(modules); do \
- rm -f $(DESTDIR)$(libdir)/$(LIBEBL_SUBDIR)/libebl_$${m}-$(PACKAGE_VERSION).so; \
- rm -f $(DESTDIR)$(libdir)/$(LIBEBL_SUBDIR)/libebl_$${m}.so; \
- done
- rmdir --ignore-fail-on-non-empty $(DESTDIR)$(libdir)/$(LIBEBL_SUBDIR)
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/backends/alpha_auxv.c b/backends/alpha_auxv.c
deleted file mode 100644
index 38a8bcd..0000000
--- a/backends/alpha_auxv.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Alpha-specific auxv handling.
- Copyright (C) 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#define BACKEND alpha_
-#include "libebl_CPU.h"
-
-int
-EBLHOOK(auxv_info) (GElf_Xword a_type, const char **name, const char **format)
-{
- if (a_type != AT_HWCAP)
- return 0;
-
- *name = "HWCAP";
- *format = "b"
- "bwx\0" "fix\0" "cix\0" "0x08\0"
- "0x10\0" "0x20\0" "0x40\0" "0x80\0"
- "max\0" "precise_trap\0"
- "\0";
- return 1;
-}
diff --git a/backends/alpha_corenote.c b/backends/alpha_corenote.c
deleted file mode 100644
index dcc62e9..0000000
--- a/backends/alpha_corenote.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/* PowerPC specific core note handling.
- Copyright (C) 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <elf.h>
-#include <inttypes.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <sys/time.h>
-
-#define BACKEND alpha_
-#include "libebl_CPU.h"
-
-static const Ebl_Register_Location prstatus_regs[] =
- {
- { .offset = 0, .regno = 0, .count = 31, .bits = 64 }, /* r0-r30 */
- { .offset = 32 * 8, .regno = 64, .count = 1, .bits = 64 }, /* pc */
- { .offset = 33 * 8, .regno = 66, .count = 1, .bits = 64 }, /* unique */
- };
-#define PRSTATUS_REGS_SIZE (33 * 8)
-
-static const Ebl_Register_Location fpregset_regs[] =
- {
- { .offset = 0, .regno = 32, .count = 32, .bits = 64 }, /* f0-f30, fpcr */
- };
-#define FPREGSET_SIZE (32 * 8)
-
-#define ULONG uint64_t
-#define ALIGN_ULONG 8
-#define TYPE_ULONG ELF_T_XWORD
-#define TYPE_LONG ELF_T_SXWORD
-#define PID_T int32_t
-#define UID_T uint32_t
-#define GID_T uint32_t
-#define ALIGN_PID_T 4
-#define ALIGN_UID_T 4
-#define ALIGN_GID_T 4
-#define TYPE_PID_T ELF_T_SWORD
-#define TYPE_UID_T ELF_T_WORD
-#define TYPE_GID_T ELF_T_WORD
-
-#include "linux-core-note.c"
diff --git a/backends/alpha_init.c b/backends/alpha_init.c
deleted file mode 100644
index 1ca99ab..0000000
--- a/backends/alpha_init.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Initialization of Alpha specific backend library.
- Copyright (C) 2002, 2005, 2006, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#define BACKEND alpha_
-#define RELOC_PREFIX R_ALPHA_
-#include "libebl_CPU.h"
-
-/* This defines the common reloc hooks based on alpha_reloc.def. */
-#include "common-reloc.c"
-
-
-const char *
-alpha_init (elf, machine, eh, ehlen)
- Elf *elf __attribute__ ((unused));
- GElf_Half machine __attribute__ ((unused));
- Ebl *eh;
- size_t ehlen;
-{
- /* Check whether the Elf_BH object has a sufficent size. */
- if (ehlen < sizeof (Ebl))
- return NULL;
-
- /* We handle it. */
- eh->name = "Alpha";
- alpha_init_reloc (eh);
- HOOK (eh, dynamic_tag_name);
- HOOK (eh, dynamic_tag_check);
- HOOK (eh, reloc_simple_type);
- HOOK (eh, return_value_location);
- HOOK (eh, machine_section_flag_check);
- HOOK (eh, check_special_section);
- HOOK (eh, register_info);
- HOOK (eh, core_note);
- HOOK (eh, auxv_info);
- eh->sysvhash_entrysize = sizeof (Elf64_Xword);
-
- return MODVERSION;
-}
diff --git a/backends/alpha_regs.c b/backends/alpha_regs.c
deleted file mode 100644
index 3bb9a6c..0000000
--- a/backends/alpha_regs.c
+++ /dev/null
@@ -1,161 +0,0 @@
-/* Register names and numbers for Alpha DWARF.
- Copyright (C) 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <string.h>
-#include <dwarf.h>
-
-#define BACKEND alpha_
-#include "libebl_CPU.h"
-
-ssize_t
-alpha_register_info (Ebl *ebl __attribute__ ((unused)),
- int regno, char *name, size_t namelen,
- const char **prefix, const char **setname,
- int *bits, int *type)
-{
- if (name == NULL)
- return 67;
-
- if (regno < 0 || regno > 66 || namelen < 7)
- return -1;
-
- *prefix = "$";
-
- *bits = 64;
- *type = DW_ATE_signed;
- *setname = "integer";
- if (regno >= 32 && regno < 64)
- {
- *setname = "FPU";
- *type = DW_ATE_float;
- }
-
- switch (regno)
- {
- case 0:
- name[0] = 'v';
- name[1] = '0';
- namelen = 2;
- break;
-
- case 1 ... 8:
- name[0] = 't';
- name[1] = regno - 1 + '0';
- namelen = 2;
- break;
-
- case 9 ... 15:
- name[0] = 's';
- name[1] = regno - 9 + '0';
- namelen = 2;
- break;
-
- case 16 ... 21:
- name[0] = 'a';
- name[1] = regno - 16 + '0';
- namelen = 2;
- break;
-
- case 22 ... 23:
- name[0] = 't';
- name[1] = regno - 22 + '8';
- namelen = 2;
- break;
-
- case 24 ... 25:
- name[0] = 't';
- name[1] = '1';
- name[2] = regno - 24 + '0';
- namelen = 3;
- break;
-
- case 26:
- *type = DW_ATE_address;
- return stpcpy (name, "ra") + 1 - name;
-
- case 27:
- return stpcpy (name, "t12") + 1 - name;
-
- case 28:
- return stpcpy (name, "at") + 1 - name;
-
- case 29:
- *type = DW_ATE_address;
- return stpcpy (name, "gp") + 1 - name;
-
- case 30:
- *type = DW_ATE_address;
- return stpcpy (name, "sp") + 1 - name;
-
- case 31:
- return stpcpy (name, "zero") + 1 - name;
-
- case 32 ... 32 + 9:
- name[0] = 'f';
- name[1] = regno - 32 + '0';
- namelen = 2;
- break;
-
- case 32 + 10 ... 32 + 19:
- name[0] = 'f';
- name[1] = '1';
- name[2] = regno - 32 - 10 + '0';
- namelen = 3;
- break;
-
- case 32 + 20 ... 32 + 29:
- name[0] = 'f';
- name[1] = '2';
- name[2] = regno - 32 - 20 + '0';
- namelen = 3;
- break;
-
- case 32 + 30:
- return stpcpy (name, "f30") + 1 - name;
-
- case 32 + 31:
- *type = DW_ATE_unsigned;
- return stpcpy (name, "fpcr") + 1 - name;
-
- case 64:
- *type = DW_ATE_address;
- return stpcpy (name, "pc") + 1 - name;
-
- case 66:
- *type = DW_ATE_address;
- return stpcpy (name, "unique") + 1 - name;
-
- default:
- *setname = NULL;
- return 0;
- }
-
- name[namelen++] = '\0';
- return namelen;
-}
diff --git a/backends/alpha_reloc.def b/backends/alpha_reloc.def
deleted file mode 100644
index 347a483..0000000
--- a/backends/alpha_reloc.def
+++ /dev/null
@@ -1,60 +0,0 @@
-/* List the relocation types for alpha. -*- C -*-
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-/* NAME, REL|EXEC|DYN */
-
-RELOC_TYPE (NONE, 0)
-RELOC_TYPE (REFLONG, REL|EXEC|DYN)
-RELOC_TYPE (REFQUAD, REL|EXEC|DYN)
-RELOC_TYPE (GPREL32, REL)
-RELOC_TYPE (LITERAL, REL)
-RELOC_TYPE (LITUSE, REL)
-RELOC_TYPE (GPDISP, REL)
-RELOC_TYPE (BRADDR, REL)
-RELOC_TYPE (HINT, REL)
-RELOC_TYPE (SREL16, REL)
-RELOC_TYPE (SREL32, REL)
-RELOC_TYPE (SREL64, REL)
-RELOC_TYPE (GPRELHIGH, REL)
-RELOC_TYPE (GPRELLOW, REL)
-RELOC_TYPE (GPREL16, REL)
-RELOC_TYPE (COPY, 0)
-RELOC_TYPE (GLOB_DAT, EXEC|DYN)
-RELOC_TYPE (JMP_SLOT, EXEC|DYN)
-RELOC_TYPE (RELATIVE, EXEC|DYN)
-RELOC_TYPE (TLS_GD_HI, REL)
-RELOC_TYPE (TLSGD, REL)
-RELOC_TYPE (TLS_LDM, REL)
-RELOC_TYPE (DTPMOD64, REL|EXEC|DYN)
-RELOC_TYPE (GOTDTPREL, REL)
-RELOC_TYPE (DTPREL64, REL|EXEC|DYN)
-RELOC_TYPE (DTPRELHI, REL)
-RELOC_TYPE (DTPRELLO, REL)
-RELOC_TYPE (DTPREL16, REL)
-RELOC_TYPE (GOTTPREL, REL)
-RELOC_TYPE (TPREL64, REL|EXEC|DYN)
-RELOC_TYPE (TPRELHI, REL)
-RELOC_TYPE (TPRELLO, REL)
-RELOC_TYPE (TPREL16, REL)
diff --git a/backends/alpha_retval.c b/backends/alpha_retval.c
deleted file mode 100644
index 57ba867..0000000
--- a/backends/alpha_retval.c
+++ /dev/null
@@ -1,162 +0,0 @@
-/* Function return value location for Alpha ELF ABI.
- Copyright (C) 2005, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <dwarf.h>
-
-#define BACKEND alpha_
-#include "libebl_CPU.h"
-
-
-/* $0. */
-static const Dwarf_Op loc_intreg[] =
- {
- { .atom = DW_OP_reg0 }
- };
-#define nloc_intreg 1
-
-/* $f0, or pair $f0, $f1. */
-static const Dwarf_Op loc_fpreg[] =
- {
- { .atom = DW_OP_regx, .number = 32 }, { .atom = DW_OP_piece, .number = 4 },
- { .atom = DW_OP_regx, .number = 33 }, { .atom = DW_OP_piece, .number = 4 },
- };
-#define nloc_fpreg 1
-#define nloc_fpregpair 4
-
-/* The return value is a structure and is actually stored in stack space
- passed in a hidden argument by the caller. But, the compiler
- helpfully returns the address of that space in $0. */
-static const Dwarf_Op loc_aggregate[] =
- {
- { .atom = DW_OP_breg0, .number = 0 }
- };
-#define nloc_aggregate 1
-
-int
-alpha_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp)
-{
- /* Start with the function's type, and get the DW_AT_type attribute,
- which is the type of the return value. */
-
- Dwarf_Attribute attr_mem;
- Dwarf_Attribute *attr = dwarf_attr_integrate (functypedie, DW_AT_type,
- &attr_mem);
- if (attr == NULL)
- /* The function has no return value, like a `void' function in C. */
- return 0;
-
- Dwarf_Die die_mem;
- Dwarf_Die *typedie = dwarf_formref_die (attr, &die_mem);
- int tag = dwarf_tag (typedie);
-
- /* Follow typedefs and qualifiers to get to the actual type. */
- while (tag == DW_TAG_typedef
- || tag == DW_TAG_const_type || tag == DW_TAG_volatile_type
- || tag == DW_TAG_restrict_type || tag == DW_TAG_mutable_type)
- {
- attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem);
- typedie = dwarf_formref_die (attr, &die_mem);
- tag = dwarf_tag (typedie);
- }
-
- switch (tag)
- {
- case -1:
- return -1;
-
- case DW_TAG_subrange_type:
- if (! dwarf_hasattr_integrate (typedie, DW_AT_byte_size))
- {
- attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem);
- typedie = dwarf_formref_die (attr, &die_mem);
- tag = dwarf_tag (typedie);
- }
- /* Fall through. */
-
- case DW_TAG_base_type:
- case DW_TAG_enumeration_type:
- case DW_TAG_pointer_type:
- case DW_TAG_ptr_to_member_type:
- {
- Dwarf_Word size;
- if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_byte_size,
- &attr_mem), &size) != 0)
- {
- if (tag == DW_TAG_pointer_type || tag == DW_TAG_ptr_to_member_type)
- size = 8;
- else
- return -1;
- }
- if (tag == DW_TAG_base_type)
- {
- Dwarf_Word encoding;
- if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_encoding,
- &attr_mem),
- &encoding) != 0)
- return -1;
-
- *locp = loc_fpreg;
- if (encoding == DW_ATE_float)
- {
- if (size <= 8)
- return nloc_fpreg;
- goto aggregate;
- }
- if (encoding == DW_ATE_complex_float)
- {
- if (size <= 8 * 2)
- return nloc_fpregpair;
- goto aggregate;
- }
- }
- if (size <= 8)
- {
- *locp = loc_intreg;
- return nloc_intreg;
- }
- }
-
- /* Else fall through. */
-
- case DW_TAG_structure_type:
- case DW_TAG_class_type:
- case DW_TAG_union_type:
- case DW_TAG_string_type:
- case DW_TAG_array_type:
- aggregate:
- *locp = loc_aggregate;
- return nloc_aggregate;
- }
-
- /* XXX We don't have a good way to return specific errors from ebl calls.
- This value means we do not understand the type, but it is well-formed
- DWARF and might be valid. */
- return -2;
-}
diff --git a/backends/alpha_symbol.c b/backends/alpha_symbol.c
deleted file mode 100644
index aa45c61..0000000
--- a/backends/alpha_symbol.c
+++ /dev/null
@@ -1,123 +0,0 @@
-/* Alpha specific symbolic name handling.
- Copyright (C) 2002,2005,2007,2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <elf.h>
-#include <stddef.h>
-
-#define BACKEND alpha_
-#include "libebl_CPU.h"
-
-
-const char *
-alpha_dynamic_tag_name (int64_t tag, char *buf __attribute__ ((unused)),
- size_t len __attribute__ ((unused)))
-{
- switch (tag)
- {
- case DT_ALPHA_PLTRO:
- return "ALPHA_PLTRO";
- default:
- break;
- }
- return NULL;
-}
-
-bool
-alpha_dynamic_tag_check (int64_t tag)
-{
- return tag == DT_ALPHA_PLTRO;
-}
-
-/* Check for the simple reloc types. */
-Elf_Type
-alpha_reloc_simple_type (Ebl *ebl __attribute__ ((unused)), int type)
-{
- switch (type)
- {
- case R_ALPHA_REFLONG:
- return ELF_T_WORD;
- case R_ALPHA_REFQUAD:
- return ELF_T_XWORD;
- default:
- return ELF_T_NUM;
- }
-}
-
-
-/* Check whether SHF_MASKPROC flags are valid. */
-bool
-alpha_machine_section_flag_check (GElf_Xword sh_flags)
-{
- return (sh_flags &~ (SHF_ALPHA_GPREL)) == 0;
-}
-
-bool
-alpha_check_special_section (Ebl *ebl,
- int ndx __attribute__ ((unused)),
- const GElf_Shdr *shdr,
- const char *sname __attribute__ ((unused)))
-{
- if ((shdr->sh_flags
- & (SHF_WRITE | SHF_EXECINSTR)) == (SHF_WRITE | SHF_EXECINSTR)
- && shdr->sh_addr != 0)
- {
- /* This is ordinarily flagged, but is valid for an old-style PLT.
-
- Look for the SHT_DYNAMIC section and the DT_PLTGOT tag in it.
- Its d_ptr should match the .plt section's sh_addr. */
-
- Elf_Scn *scn = NULL;
- while ((scn = elf_nextscn (ebl->elf, scn)) != NULL)
- {
- GElf_Shdr scn_shdr;
- if (likely (gelf_getshdr (scn, &scn_shdr) != NULL)
- && scn_shdr.sh_type == SHT_DYNAMIC
- && scn_shdr.sh_entsize != 0)
- {
- GElf_Addr pltgot = 0;
- Elf_Data *data = elf_getdata (scn, NULL);
- if (data != NULL)
- for (size_t i = 0; i < data->d_size / scn_shdr.sh_entsize; ++i)
- {
- GElf_Dyn dyn;
- if (unlikely (gelf_getdyn (data, i, &dyn) == NULL))
- break;
- if (dyn.d_tag == DT_PLTGOT)
- pltgot = dyn.d_un.d_ptr;
- else if (dyn.d_tag == DT_ALPHA_PLTRO && dyn.d_un.d_val != 0)
- return false; /* This PLT should not be writable. */
- }
- return pltgot == shdr->sh_addr;
- }
- }
- }
-
- return false;
-}
diff --git a/backends/arm_init.c b/backends/arm_init.c
deleted file mode 100644
index 172af19..0000000
--- a/backends/arm_init.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Initialization of Arm specific backend library.
- Copyright (C) 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#define BACKEND arm_
-#define RELOC_PREFIX R_ARM_
-#include "libebl_CPU.h"
-
-/* This defines the common reloc hooks based on arm_reloc.def. */
-#include "common-reloc.c"
-
-
-const char *
-arm_init (elf, machine, eh, ehlen)
- Elf *elf __attribute__ ((unused));
- GElf_Half machine __attribute__ ((unused));
- Ebl *eh;
- size_t ehlen;
-{
- /* Check whether the Elf_BH object has a sufficent size. */
- if (ehlen < sizeof (Ebl))
- return NULL;
-
- /* We handle it. */
- eh->name = "ARM";
- arm_init_reloc (eh);
- HOOK (eh, reloc_simple_type);
-
- return MODVERSION;
-}
diff --git a/backends/arm_reloc.def b/backends/arm_reloc.def
deleted file mode 100644
index c5a72cc..0000000
--- a/backends/arm_reloc.def
+++ /dev/null
@@ -1,77 +0,0 @@
-/* List the relocation types for arm. -*- C -*-
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-/* NAME, REL|EXEC|DYN */
-
-RELOC_TYPE (NONE, REL) /* It really is used in ET_REL on ARM. */
-RELOC_TYPE (PC24, REL)
-RELOC_TYPE (ABS32, REL)
-RELOC_TYPE (REL32, REL)
-RELOC_TYPE (PC13, REL)
-RELOC_TYPE (ABS16, REL)
-RELOC_TYPE (ABS12, REL)
-RELOC_TYPE (THM_ABS5, REL)
-RELOC_TYPE (ABS8, REL)
-RELOC_TYPE (SBREL32, REL)
-RELOC_TYPE (THM_PC22, REL)
-RELOC_TYPE (THM_PC8, REL)
-RELOC_TYPE (AMP_VCALL9, REL)
-RELOC_TYPE (SWI24, REL)
-RELOC_TYPE (THM_SWI8, REL)
-RELOC_TYPE (XPC25, REL)
-RELOC_TYPE (THM_XPC22, REL)
-RELOC_TYPE (TLS_DTPMOD32, EXEC|DYN)
-RELOC_TYPE (TLS_DTPOFF32, EXEC|DYN)
-RELOC_TYPE (TLS_TPOFF32, EXEC|DYN)
-RELOC_TYPE (COPY, EXEC)
-RELOC_TYPE (GLOB_DAT, EXEC|DYN)
-RELOC_TYPE (JUMP_SLOT, EXEC|DYN)
-RELOC_TYPE (RELATIVE, EXEC|DYN)
-RELOC_TYPE (GOTOFF, REL)
-RELOC_TYPE (GOTPC, REL)
-RELOC_TYPE (GOT32, REL)
-RELOC_TYPE (PLT32, REL)
-RELOC_TYPE (ALU_PCREL_7_0, REL)
-RELOC_TYPE (ALU_PCREL_15_8, REL)
-RELOC_TYPE (ALU_PCREL_23_15, REL)
-RELOC_TYPE (LDR_SBREL_11_0, REL)
-RELOC_TYPE (ALU_SBREL_19_12, REL)
-RELOC_TYPE (ALU_SBREL_27_20, REL)
-RELOC_TYPE (GNU_VTENTRY, REL)
-RELOC_TYPE (GNU_VTINHERIT, REL)
-RELOC_TYPE (THM_PC11, REL)
-RELOC_TYPE (THM_PC9, REL)
-RELOC_TYPE (TLS_GD32, REL)
-RELOC_TYPE (TLS_LDM32, REL)
-RELOC_TYPE (TLS_LDO32, REL)
-RELOC_TYPE (TLS_IE32, REL)
-RELOC_TYPE (TLS_LE32, REL)
-RELOC_TYPE (RXPC25, REL)
-RELOC_TYPE (RSBREL32, REL)
-RELOC_TYPE (THM_RPC22, REL)
-RELOC_TYPE (RREL32, REL)
-RELOC_TYPE (RABS22, REL)
-RELOC_TYPE (RPC24, REL)
-RELOC_TYPE (RBASE, REL)
diff --git a/backends/arm_symbol.c b/backends/arm_symbol.c
deleted file mode 100644
index 6d2f56d..0000000
--- a/backends/arm_symbol.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Arm specific symbolic name handling.
- Copyright (C) 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <elf.h>
-#include <stddef.h>
-
-#define BACKEND arm_
-#include "libebl_CPU.h"
-
-/* Check for the simple reloc types. */
-Elf_Type
-arm_reloc_simple_type (Ebl *ebl __attribute__ ((unused)), int type)
-{
- switch (type)
- {
- case R_ARM_ABS32:
- return ELF_T_WORD;
- case R_ARM_ABS16:
- return ELF_T_HALF;
- case R_ARM_ABS8:
- return ELF_T_BYTE;
- default:
- return ELF_T_NUM;
- }
-}
diff --git a/backends/common-reloc.c b/backends/common-reloc.c
deleted file mode 100644
index 191b22a..0000000
--- a/backends/common-reloc.c
+++ /dev/null
@@ -1,143 +0,0 @@
-/* Common code for ebl reloc functions.
- Copyright (C) 2005, 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libebl_CPU.h"
-#include <assert.h>
-
-#define R_TYPE(name) PASTE (RELOC_PREFIX, name)
-#define PASTE(a, b) PASTE_1 (a, b)
-#define PASTE_1(a, b) a##b
-#define R_NAME(name) R_NAME_1 (RELOC_PREFIX, name)
-#define R_NAME_1(prefix, type) R_NAME_2 (prefix, type)
-#define R_NAME_2(prefix, type) #prefix #type
-
-#define RELOC_TYPES STRINGIFIED_PASTE (BACKEND, reloc.def)
-#define STRINGIFIED_PASTE(a, b) STRINGIFY (PASTE (a, b))
-#define STRINGIFY(x) STRINGIFY_1 (x)
-#define STRINGIFY_1(x) #x
-
-/* Provide a table of reloc type names, in a PIC-friendly fashion. */
-
-static const struct EBLHOOK(reloc_nametable)
-{
- char zero;
-#define RELOC_TYPE(type, uses) \
- char name_##type[sizeof R_NAME (type)];
-#include RELOC_TYPES
-#undef RELOC_TYPE
-} EBLHOOK(reloc_nametable) =
- {
- '\0',
-#define RELOC_TYPE(type, uses) R_NAME (type),
-#include RELOC_TYPES
-#undef RELOC_TYPE
- };
-#define reloc_namestr (&EBLHOOK(reloc_nametable).zero)
-
-static const uint_fast16_t EBLHOOK(reloc_nameidx)[] =
-{
-#define RELOC_TYPE(type, uses) \
- [R_TYPE (type)] = offsetof (struct EBLHOOK(reloc_nametable), name_##type),
-#include RELOC_TYPES
-#undef RELOC_TYPE
-};
-#define nreloc \
- ((int) (sizeof EBLHOOK(reloc_nameidx) / sizeof EBLHOOK(reloc_nameidx)[0]))
-
-#define REL (1 << (ET_REL - 1))
-#define EXEC (1 << (ET_EXEC - 1))
-#define DYN (1 << (ET_DYN - 1))
-static const uint8_t EBLHOOK(reloc_valid)[] =
-{
-#define RELOC_TYPE(type, uses) [R_TYPE (type)] = uses,
-#include RELOC_TYPES
-#undef RELOC_TYPE
-};
-#undef REL
-#undef EXEC
-#undef DYN
-
-const char *
-EBLHOOK(reloc_type_name) (int reloc,
- char *buf __attribute__ ((unused)),
- size_t len __attribute__ ((unused)))
-{
- if (reloc >= 0 && reloc < nreloc && EBLHOOK(reloc_nameidx)[reloc] != 0)
- return &reloc_namestr[EBLHOOK(reloc_nameidx)[reloc]];
- return NULL;
-}
-
-bool
-EBLHOOK(reloc_type_check) (int reloc)
-{
- return reloc >= 0 && reloc < nreloc && EBLHOOK(reloc_nameidx)[reloc] != 0;
-}
-
-bool
-EBLHOOK(reloc_valid_use) (Elf *elf, int reloc)
-{
- uint8_t uses = EBLHOOK(reloc_valid)[reloc];
-
- GElf_Ehdr ehdr_mem;
- GElf_Ehdr *ehdr = gelf_getehdr (elf, &ehdr_mem);
- assert (ehdr != NULL);
- uint8_t type = ehdr->e_type;
-
- return type > ET_NONE && type < ET_CORE && (uses & (1 << (type - 1)));
-}
-
-
-bool
-EBLHOOK(copy_reloc_p) (int reloc)
-{
- return reloc == R_TYPE (COPY);
-}
-
-bool
-EBLHOOK(none_reloc_p) (int reloc)
-{
- return reloc == R_TYPE (NONE);
-}
-
-#ifndef NO_RELATIVE_RELOC
-bool
-EBLHOOK(relative_reloc_p) (int reloc)
-{
- return reloc == R_TYPE (RELATIVE);
-}
-#endif
-
-static void
-EBLHOOK(init_reloc) (Ebl *ebl)
-{
- ebl->reloc_type_name = EBLHOOK(reloc_type_name);
- ebl->reloc_type_check = EBLHOOK(reloc_type_check);
- ebl->reloc_valid_use = EBLHOOK(reloc_valid_use);
- ebl->copy_reloc_p = EBLHOOK(copy_reloc_p);
- ebl->none_reloc_p = EBLHOOK(none_reloc_p);
-#ifndef NO_RELATIVE_RELOC
- ebl->relative_reloc_p = EBLHOOK(relative_reloc_p);
-#endif
-}
diff --git a/backends/i386_auxv.c b/backends/i386_auxv.c
deleted file mode 100644
index 5f7b15e..0000000
--- a/backends/i386_auxv.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/* i386 specific auxv handling.
- Copyright (C) 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#define BACKEND i386_
-#include "libebl_CPU.h"
-
-int
-EBLHOOK(auxv_info) (GElf_Xword a_type, const char **name, const char **format)
-{
- if (a_type != AT_HWCAP)
- return 0;
-
- *name = "HWCAP";
- *format = "b"
- "fpu\0" "vme\0" "de\0" "pse\0" "tsc\0" "msr\0" "pae\0" "mce\0"
- "cx8\0" "apic\0" "10\0" "sep\0" "mtrr\0" "pge\0" "mca\0" "cmov\0"
- "pat\0" "pse36\0" "pn\0" "clflush\0" "20\0" "dts\0" "acpi\0" "mmx\0"
- "fxsr\0" "sse\0" "sse2\0" "ss\0" "ht\0" "tm\0" "ia64\0" "pbe\0" "\0";
- return 1;
-}
-
-__typeof (i386_auxv_info) x86_64_auxv_info
- __attribute__ ((alias ("i386_auxv_info")));
diff --git a/backends/i386_corenote.c b/backends/i386_corenote.c
deleted file mode 100644
index c371c4c..0000000
--- a/backends/i386_corenote.c
+++ /dev/null
@@ -1,134 +0,0 @@
-/* i386 specific core note handling.
- Copyright (C) 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <elf.h>
-#include <inttypes.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <sys/time.h>
-
-#define BACKEND i386_
-#include "libebl_CPU.h"
-
-
-static const Ebl_Register_Location prstatus_regs[] =
- {
-#define GR(at, n, dwreg) \
- { .offset = at * 4, .regno = dwreg, .count = n, .bits = 32 }
-#define SR(at, n, dwreg) \
- { .offset = at * 4, .regno = dwreg, .count = n, .bits = 16, .pad = 2 }
-
- GR (0, 1, 3), /* %ebx */
- GR (1, 2, 1), /* %ecx-%edx */
- GR (3, 2, 6), /* %esi-%edi */
- GR (5, 1, 5), /* %ebp */
- GR (6, 1, 0), /* %eax */
- SR (7, 1, 43), /* %ds */
- SR (8, 1, 40), /* %es */
- SR (9, 1, 44), /* %fs */
- SR (10, 1, 45), /* %gs */
- /* 11, 1, orig_eax */
- GR (12, 1, 8), /* %eip */
- SR (13, 1, 41), /* %cs */
- GR (14, 1, 9), /* eflags */
- GR (15, 1, 4), /* %esp */
- SR (16, 1, 42), /* %ss */
-
-#undef GR
-#undef SR
- };
-#define PRSTATUS_REGS_SIZE (17 * 4)
-
-#define ULONG uint32_t
-#define PID_T int32_t
-#define UID_T uint16_t
-#define GID_T uint16_t
-#define ALIGN_ULONG 4
-#define ALIGN_PID_T 4
-#define ALIGN_UID_T 2
-#define ALIGN_GID_T 2
-#define TYPE_ULONG ELF_T_WORD
-#define TYPE_PID_T ELF_T_SWORD
-#define TYPE_UID_T ELF_T_HALF
-#define TYPE_GID_T ELF_T_HALF
-
-#define PRSTATUS_REGSET_ITEMS \
- { \
- .name = "orig_eax", .type = ELF_T_SWORD, .format = 'd', \
- .offset = offsetof (struct EBLHOOK(prstatus), pr_reg) + (4 * 11), \
- .group = "register" \
- }
-
-static const Ebl_Register_Location fpregset_regs[] =
- {
- { .offset = 0, .regno = 37, .count = 2, .bits = 32 }, /* fctrl-fstat */
- { .offset = 7 * 4, .regno = 11, .count = 8, .bits = 80 }, /* stN */
- };
-#define FPREGSET_SIZE 108
-
-static const Ebl_Register_Location prxfpreg_regs[] =
- {
- { .offset = 0, .regno = 37, .count = 2, .bits = 16 }, /* fctrl-fstat */
- { .offset = 24, .regno = 39, .count = 1, .bits = 32 }, /* mxcsr */
- { .offset = 32, .regno = 11, .count = 8, .bits = 80, .pad = 6 }, /* stN */
- { .offset = 32 + 128, .regno = 21, .count = 8, .bits = 128 }, /* xmm */
- };
-
-#define EXTRA_NOTES \
- EXTRA_REGSET (NT_PRFPXREG, 512, prxfpreg_regs) \
- case NT_386_TLS: \
- return tls_info (descsz, regs_offset, nregloc, reglocs, nitems, items); \
- EXTRA_NOTES_IOPERM
-
-static const Ebl_Core_Item tls_items[] =
- {
- { .type = ELF_T_WORD, .offset = 0x0, .format = 'd', .name = "index" },
- { .type = ELF_T_WORD, .offset = 0x4, .format = 'x', .name = "base" },
- { .type = ELF_T_WORD, .offset = 0x8, .format = 'x', .name = "limit" },
- { .type = ELF_T_WORD, .offset = 0xc, .format = 'x', .name = "flags" },
- };
-
-static int
-tls_info (GElf_Word descsz, GElf_Word *regs_offset,
- size_t *nregloc, const Ebl_Register_Location **reglocs,
- size_t *nitems, const Ebl_Core_Item **items)
-{
- if (descsz % 16 != 0)
- return 0;
-
- *regs_offset = 0;
- *nregloc = 0;
- *reglocs = NULL;
- *nitems = sizeof tls_items / sizeof tls_items[0];
- *items = tls_items;
- return 1;
-}
-
-#include "x86_corenote.c"
-#include "linux-core-note.c"
diff --git a/backends/i386_init.c b/backends/i386_init.c
deleted file mode 100644
index f046dfb..0000000
--- a/backends/i386_init.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Initialization of i386 specific backend library.
- Copyright (C) 2000, 2001, 2002, 2005, 2006, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#define BACKEND i386_
-#define RELOC_PREFIX R_386_
-#include "libebl_CPU.h"
-
-/* This defines the common reloc hooks based on i386_reloc.def. */
-#include "common-reloc.c"
-
-const char *
-i386_init (elf, machine, eh, ehlen)
- Elf *elf __attribute__ ((unused));
- GElf_Half machine __attribute__ ((unused));
- Ebl *eh;
- size_t ehlen;
-{
- /* Check whether the Elf_BH object has a sufficent size. */
- if (ehlen < sizeof (Ebl))
- return NULL;
-
- /* We handle it. */
- eh->name = "Intel 80386";
- i386_init_reloc (eh);
- HOOK (eh, reloc_simple_type);
- HOOK (eh, gotpc_reloc_check);
- HOOK (eh, core_note);
- generic_debugscn_p = eh->debugscn_p;
- HOOK (eh, debugscn_p);
- HOOK (eh, return_value_location);
- HOOK (eh, register_info);
- HOOK (eh, syscall_abi);
- HOOK (eh, auxv_info);
- HOOK (eh, disasm);
-
- return MODVERSION;
-}
diff --git a/backends/i386_regs.c b/backends/i386_regs.c
deleted file mode 100644
index 5cf0d81..0000000
--- a/backends/i386_regs.c
+++ /dev/null
@@ -1,149 +0,0 @@
-/* Register names and numbers for i386 DWARF.
- Copyright (C) 2005, 2006, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <string.h>
-#include <dwarf.h>
-
-#define BACKEND i386_
-#include "libebl_CPU.h"
-
-ssize_t
-i386_register_info (Ebl *ebl __attribute__ ((unused)),
- int regno, char *name, size_t namelen,
- const char **prefix, const char **setname,
- int *bits, int *type)
-{
- if (name == NULL)
- return 46;
-
- if (regno < 0 || regno > 45 || namelen < 6)
- return -1;
-
- *prefix = "%";
- *bits = 32;
- *type = DW_ATE_unsigned;
- if (regno < 11)
- {
- *setname = "integer";
- if (regno < 9)
- *type = DW_ATE_signed;
- }
- else if (regno < 19)
- {
- *setname = "x87";
- *type = DW_ATE_float;
- *bits = 80;
- }
- else if (regno < 29)
- {
- *setname = "SSE";
- *bits = 128;
- }
- else if (regno < 37)
- {
- *setname = "MMX";
- *bits = 64;
- }
- else if (regno < 40)
- *setname = "FPU-control";
- else
- {
- *setname = "segment";
- *bits = 16;
- }
-
- switch (regno)
- {
- static const char baseregs[][2] =
- {
- "ax", "cx", "dx", "bx", "sp", "bp", "si", "di", "ip"
- };
-
- case 4:
- case 5:
- case 8:
- *type = DW_ATE_address;
- case 0 ... 3:
- case 6 ... 7:
- name[0] = 'e';
- name[1] = baseregs[regno][0];
- name[2] = baseregs[regno][1];
- namelen = 3;
- break;
-
- case 9:
- return stpcpy (name, "eflags") + 1 - name;
- case 10:
- return stpcpy (name, "trapno") + 1 - name;
-
- case 11 ... 18:
- name[0] = 's';
- name[1] = 't';
- name[2] = regno - 11 + '0';
- namelen = 3;
- break;
-
- case 21 ... 28:
- name[0] = 'x';
- name[1] = 'm';
- name[2] = 'm';
- name[3] = regno - 21 + '0';
- namelen = 4;
- break;
-
- case 29 ... 36:
- name[0] = 'm';
- name[1] = 'm';
- name[2] = regno - 29 + '0';
- namelen = 3;
- break;
-
- case 37:
- *bits = 16;
- return stpcpy (name, "fctrl") + 1 - name;
- case 38:
- *bits = 16;
- return stpcpy (name, "fstat") + 1 - name;
- case 39:
- return stpcpy (name, "mxcsr") + 1 - name;
-
- case 40 ... 45:
- name[0] = "ecsdfg"[regno - 40];
- name[1] = 's';
- namelen = 2;
- break;
-
- default:
- *setname = NULL;
- return 0;
- }
-
- name[namelen++] = '\0';
- return namelen;
-}
diff --git a/backends/i386_reloc.def b/backends/i386_reloc.def
deleted file mode 100644
index bc1b835..0000000
--- a/backends/i386_reloc.def
+++ /dev/null
@@ -1,66 +0,0 @@
-/* List the relocation types for i386. -*- C -*-
- Copyright (C) 2000, 2001, 2002, 2003, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-/* NAME, REL|EXEC|DYN */
-
-RELOC_TYPE (NONE, 0)
-RELOC_TYPE (COPY, EXEC)
-RELOC_TYPE (32, REL|EXEC|DYN)
-RELOC_TYPE (PC32, REL|EXEC|DYN)
-RELOC_TYPE (GOT32, REL)
-RELOC_TYPE (PLT32, REL)
-RELOC_TYPE (GLOB_DAT, EXEC|DYN)
-RELOC_TYPE (JMP_SLOT, EXEC|DYN)
-RELOC_TYPE (RELATIVE, EXEC|DYN)
-RELOC_TYPE (GOTOFF, REL)
-RELOC_TYPE (GOTPC, REL)
-RELOC_TYPE (32PLT, REL)
-RELOC_TYPE (TLS_TPOFF, EXEC|DYN)
-RELOC_TYPE (TLS_IE, REL)
-RELOC_TYPE (TLS_GOTIE, REL)
-RELOC_TYPE (TLS_LE, REL)
-RELOC_TYPE (TLS_GD, REL)
-RELOC_TYPE (TLS_LDM, REL)
-RELOC_TYPE (16, REL)
-RELOC_TYPE (PC16, REL)
-RELOC_TYPE (8, REL)
-RELOC_TYPE (PC8, REL)
-RELOC_TYPE (TLS_GD_32, REL)
-RELOC_TYPE (TLS_GD_PUSH, REL)
-RELOC_TYPE (TLS_GD_CALL, REL)
-RELOC_TYPE (TLS_GD_POP, REL)
-RELOC_TYPE (TLS_LDM_32, REL)
-RELOC_TYPE (TLS_LDM_PUSH, REL)
-RELOC_TYPE (TLS_LDM_CALL, REL)
-RELOC_TYPE (TLS_LDM_POP, REL)
-RELOC_TYPE (TLS_LDO_32, REL)
-RELOC_TYPE (TLS_IE_32, REL)
-RELOC_TYPE (TLS_LE_32, REL)
-RELOC_TYPE (TLS_DTPMOD32, EXEC|DYN)
-RELOC_TYPE (TLS_DTPOFF32, EXEC|DYN)
-RELOC_TYPE (TLS_TPOFF32, EXEC|DYN)
-RELOC_TYPE (TLS_GOTDESC, REL)
-RELOC_TYPE (TLS_DESC_CALL, REL)
-RELOC_TYPE (TLS_DESC, EXEC)
diff --git a/backends/i386_retval.c b/backends/i386_retval.c
deleted file mode 100644
index c3bab10..0000000
--- a/backends/i386_retval.c
+++ /dev/null
@@ -1,153 +0,0 @@
-/* Function return value location for Linux/i386 ABI.
- Copyright (C) 2005, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <dwarf.h>
-
-#define BACKEND i386_
-#include "libebl_CPU.h"
-
-
-/* %eax, or pair %eax, %edx. */
-static const Dwarf_Op loc_intreg[] =
- {
- { .atom = DW_OP_reg0 }, { .atom = DW_OP_piece, .number = 4 },
- { .atom = DW_OP_reg1 }, { .atom = DW_OP_piece, .number = 4 },
- };
-#define nloc_intreg 1
-#define nloc_intregpair 4
-
-/* %st(0). */
-static const Dwarf_Op loc_fpreg[] =
- {
- { .atom = DW_OP_reg11 }
- };
-#define nloc_fpreg 1
-
-/* The return value is a structure and is actually stored in stack space
- passed in a hidden argument by the caller. But, the compiler
- helpfully returns the address of that space in %eax. */
-static const Dwarf_Op loc_aggregate[] =
- {
- { .atom = DW_OP_breg0, .number = 0 }
- };
-#define nloc_aggregate 1
-
-int
-i386_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp)
-{
- /* Start with the function's type, and get the DW_AT_type attribute,
- which is the type of the return value. */
-
- Dwarf_Attribute attr_mem;
- Dwarf_Attribute *attr = dwarf_attr_integrate (functypedie, DW_AT_type,
- &attr_mem);
- if (attr == NULL)
- /* The function has no return value, like a `void' function in C. */
- return 0;
-
- Dwarf_Die die_mem;
- Dwarf_Die *typedie = dwarf_formref_die (attr, &die_mem);
- int tag = dwarf_tag (typedie);
-
- /* Follow typedefs and qualifiers to get to the actual type. */
- while (tag == DW_TAG_typedef
- || tag == DW_TAG_const_type || tag == DW_TAG_volatile_type
- || tag == DW_TAG_restrict_type || tag == DW_TAG_mutable_type)
- {
- attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem);
- typedie = dwarf_formref_die (attr, &die_mem);
- tag = dwarf_tag (typedie);
- }
-
- switch (tag)
- {
- case -1:
- return -1;
-
- case DW_TAG_subrange_type:
- if (! dwarf_hasattr_integrate (typedie, DW_AT_byte_size))
- {
- attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem);
- typedie = dwarf_formref_die (attr, &die_mem);
- tag = dwarf_tag (typedie);
- }
- /* Fall through. */
-
- case DW_TAG_base_type:
- case DW_TAG_enumeration_type:
- case DW_TAG_pointer_type:
- case DW_TAG_ptr_to_member_type:
- {
- Dwarf_Word size;
- if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_byte_size,
- &attr_mem), &size) != 0)
- {
- if (tag == DW_TAG_pointer_type || tag == DW_TAG_ptr_to_member_type)
- size = 4;
- else
- return -1;
- }
- if (tag == DW_TAG_base_type)
- {
- Dwarf_Word encoding;
- if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_encoding,
- &attr_mem),
- &encoding) != 0)
- return -1;
- if (encoding == DW_ATE_float)
- {
- if (size > 16)
- return -2;
- *locp = loc_fpreg;
- return nloc_fpreg;
- }
- }
- *locp = loc_intreg;
- if (size <= 4)
- return nloc_intreg;
- if (size <= 8)
- return nloc_intregpair;
-
- /* Else fall through. */
- }
-
- case DW_TAG_structure_type:
- case DW_TAG_class_type:
- case DW_TAG_union_type:
- case DW_TAG_array_type:
- *locp = loc_aggregate;
- return nloc_aggregate;
- }
-
- /* XXX We don't have a good way to return specific errors from ebl calls.
- This value means we do not understand the type, but it is well-formed
- DWARF and might be valid. */
- return -2;
-}
diff --git a/backends/i386_symbol.c b/backends/i386_symbol.c
deleted file mode 100644
index 5d6c0ef..0000000
--- a/backends/i386_symbol.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/* i386 specific symbolic name handling.
- Copyright (C) 2000, 2001, 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <elf.h>
-#include <stddef.h>
-#include <string.h>
-
-#define BACKEND i386_
-#include "libebl_CPU.h"
-
-
-/* Return true if the symbol type is that referencing the GOT. */
-bool
-i386_gotpc_reloc_check (Elf *elf __attribute__ ((unused)), int type)
-{
- return type == R_386_GOTPC;
-}
-
-/* Check for the simple reloc types. */
-Elf_Type
-i386_reloc_simple_type (Ebl *ebl __attribute__ ((unused)), int type)
-{
- switch (type)
- {
- case R_386_32:
- return ELF_T_SWORD;
- case R_386_16:
- return ELF_T_HALF;
- case R_386_8:
- return ELF_T_BYTE;
- default:
- return ELF_T_NUM;
- }
-}
-
-/* Check section name for being that of a debug information section. */
-bool (*generic_debugscn_p) (const char *);
-bool
-i386_debugscn_p (const char *name)
-{
- return (generic_debugscn_p (name)
- || strcmp (name, ".stab") == 0
- || strcmp (name, ".stabstr") == 0);
-}
diff --git a/backends/i386_syscall.c b/backends/i386_syscall.c
deleted file mode 100644
index 4d6e438..0000000
--- a/backends/i386_syscall.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/* Linux/i386 system call ABI in DWARF register numbers.
- Copyright (C) 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#define BACKEND i386_
-#include "libebl_CPU.h"
-
-int
-i386_syscall_abi (Ebl *ebl __attribute__ ((unused)),
- int *sp, int *pc, int *callno, int args[6])
-{
- *sp = 4; /* %esp */
- *pc = 8; /* %eip */
- *callno = 0; /* %eax */
- args[0] = 3; /* %ebx */
- args[1] = 1; /* %ecx */
- args[2] = 2; /* %edx */
- args[3] = 6; /* %esi */
- args[4] = 7; /* %edi */
- args[5] = 5; /* %ebp */
- return 0;
-}
diff --git a/backends/ia64_init.c b/backends/ia64_init.c
deleted file mode 100644
index 290c192..0000000
--- a/backends/ia64_init.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Initialization of IA-64 specific backend library.
- Copyright (C) 2002, 2003, 2005, 2006, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#define BACKEND ia64_
-#define RELOC_PREFIX R_IA64_
-#include "libebl_CPU.h"
-
-/* This defines the common reloc hooks based on ia64_reloc.def. */
-#include "common-reloc.c"
-
-const char *
-ia64_init (elf, machine, eh, ehlen)
- Elf *elf __attribute__ ((unused));
- GElf_Half machine __attribute__ ((unused));
- Ebl *eh;
- size_t ehlen;
-{
- /* Check whether the Elf_BH object has a sufficent size. */
- if (ehlen < sizeof (Ebl))
- return NULL;
-
- /* We handle it. */
- eh->name = "Intel IA-64";
- ia64_init_reloc (eh);
- HOOK (eh, reloc_simple_type);
- HOOK (eh, segment_type_name);
- HOOK (eh, section_type_name);
- HOOK (eh, dynamic_tag_name);
- HOOK (eh, dynamic_tag_check);
- HOOK (eh, machine_flag_check);
- HOOK (eh, machine_section_flag_check);
- HOOK (eh, register_info);
- HOOK (eh, return_value_location);
-
- return MODVERSION;
-}
diff --git a/backends/ia64_regs.c b/backends/ia64_regs.c
deleted file mode 100644
index 0460739..0000000
--- a/backends/ia64_regs.c
+++ /dev/null
@@ -1,270 +0,0 @@
-/* Register names and numbers for IA64 DWARF.
- Copyright (C) 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <string.h>
-#include <dwarf.h>
-
-#define BACKEND i386_
-#include "libebl_CPU.h"
-
-ssize_t
-ia64_register_info (Ebl *ebl __attribute__ ((unused)),
- int regno, char *name, size_t namelen,
- const char **prefix, const char **setname,
- int *bits, int *type)
-{
- if (name == NULL)
- return 687 + 64;
-
- if (regno < 0 || regno > 687 + 63 || namelen < 12)
- return -1;
-
- *prefix = "ar.";
- *setname = "application";
- *bits = 64;
- *type = DW_ATE_signed;
- switch (regno)
- {
- case 0 ... 9:
- name[0] = 'r';
- name[1] = (regno - 0) + '0';
- namelen = 2;
- *setname = "integer";
- *prefix = "";
- break;
-
- case 10 ... 99:
- name[0] = 'r';
- name[1] = (regno - 0) / 10 + '0';
- name[2] = (regno - 0) % 10 + '0';
- namelen = 3;
- *setname = "integer";
- *prefix = "";
- break;
-
- case 100 ... 127:
- name[0] = 'r';
- name[1] = '1';
- name[2] = (regno - 100) / 10 + '0';
- name[3] = (regno - 0) % 10 + '0';
- namelen = 4;
- *setname = "integer";
- *prefix = "";
- break;
-
- case 128 + 0 ... 128 + 9:
- name[0] = 'f';
- name[1] = (regno - 128) + '0';
- namelen = 2;
- *type = DW_ATE_float;
- *bits = 128;
- *setname = "FPU";
- *prefix = "";
- break;
-
- case 128 + 10 ... 128 + 99:
- name[0] = 'f';
- name[1] = (regno - 128) / 10 + '0';
- name[2] = (regno - 128) % 10 + '0';
- namelen = 3;
- *setname = "FPU";
- *prefix = "";
- break;
-
- case 128 + 100 ... 128 + 127:
- name[0] = 'f';
- name[1] = '1';
- name[2] = (regno - 128 - 100) / 10 + '0';
- name[3] = (regno - 128) % 10 + '0';
- namelen = 4;
- *type = DW_ATE_float;
- *bits = 128;
- *setname = "FPU";
- *prefix = "";
- break;
-
- case 320 + 0 ... 320 + 7:
- name[0] = 'b';
- name[1] = (regno - 320) + '0';
- namelen = 2;
- *type = DW_ATE_address;
- *setname = "branch";
- *prefix = "";
- break;
-
- case 328 ... 333:
- {
- static const char named_special[][5] =
- {
- "vfp", "vrap", "pr", "ip", "psr", "cfm"
- };
- *setname = "special";
- *prefix = "";
- *type = regno == 331 ? DW_ATE_address : DW_ATE_unsigned;
- return stpcpy (name, named_special[regno - 328]) + 1 - name;
- }
-
- case 590:
- *setname = "special";
- *prefix = "";
- *type = DW_ATE_unsigned;
- return stpcpy (name, "bof") + 1 - name;
-
- case 334 + 0 ... 334 + 7:
- name[0] = 'k';
- name[1] = 'r';
- name[2] = (regno - 334) + '0';
- namelen = 3;
- *prefix = "";
- break;
-
- case 334 + 8 ... 334 + 127:
- {
- static const char named_ar[][9] =
- {
- [16 - 8] = "rsc",
- [17 - 8] = "bsp",
- [18 - 8] = "bspstore",
- [19 - 8] = "rnat",
- [21 - 8] = "fcr",
- [24 - 8] = "eflag",
- [25 - 8] = "csd",
- [26 - 8] = "ssd",
- [27 - 8] = "cflg",
- [28 - 8] = "fsr",
- [29 - 8] = "fir",
- [30 - 8] = "fdr",
- [32 - 8] = "ccv",
- [36 - 8] = "unat",
- [40 - 8] = "fpsr",
- [44 - 8] = "itc",
- [64 - 8] = "pfs",
- [65 - 8] = "lc",
- [66 - 8] = "ec",
- };
- const size_t idx = regno - (334 + 8);
- *type = DW_ATE_unsigned;
- if (idx == 1 || idx == 2)
- *type = DW_ATE_address;
- if (idx < sizeof named_ar / sizeof named_ar[0]
- && named_ar[idx][0] != '\0')
- return stpcpy (name, named_ar[idx]) + 1 - name;
-
- name[0] = 'a';
- name[1] = 'r';
- switch (regno - 334)
- {
- case 0 ... 9:
- name[2] = (regno - 334) + '0';
- namelen = 3;
- break;
- case 10 ... 99:
- name[2] = (regno - 334) / 10 + '0';
- name[3] = (regno - 334) % 10 + '0';
- namelen = 4;
- break;
- case 100 ... 127:
- name[2] = '1';
- name[3] = (regno - 334 - 100) / 10 + '0';
- name[4] = (regno - 334) % 10 + '0';
- namelen = 5;
- break;
- }
- *prefix = "";
- break;
- }
-
- case 462 + 0 ... 462 + 9:
- name[0] = 'n';
- name[1] = 'a';
- name[2] = 't';
- name[3] = (regno - 462) + '0';
- namelen = 4;
- *setname = "NAT";
- *type = DW_ATE_boolean;
- *bits = 1;
- *prefix = "";
- break;
-
- case 462 + 10 ... 462 + 99:
- name[0] = 'n';
- name[1] = 'a';
- name[2] = 't';
- name[3] = (regno - 462) / 10 + '0';
- name[4] = (regno - 462) % 10 + '0';
- namelen = 5;
- *setname = "NAT";
- *type = DW_ATE_boolean;
- *bits = 1;
- *prefix = "";
- break;
-
- case 462 + 100 ... 462 + 127:
- name[0] = 'n';
- name[1] = 'a';
- name[2] = 't';
- name[3] = '1';
- name[4] = (regno - 462 - 100) / 10 + '0';
- name[5] = (regno - 462) % 10 + '0';
- namelen = 6;
- *setname = "NAT";
- *type = DW_ATE_boolean;
- *bits = 1;
- *prefix = "";
- break;
-
- case 687 + 0 ... 687 + 9:
- name[0] = 'p';
- name[1] = (regno - 687) + '0';
- namelen = 2;
- *setname = "predicate";
- *type = DW_ATE_boolean;
- *bits = 1;
- *prefix = "";
- break;
-
- case 687 + 10 ... 687 + 63:
- name[0] = 'p';
- name[1] = (regno - 687) / 10 + '0';
- name[2] = (regno - 687) % 10 + '0';
- namelen = 3;
- *setname = "predicate";
- *type = DW_ATE_boolean;
- *bits = 1;
- *prefix = "";
- break;
-
- default:
- *setname = NULL;
- return 0;
- }
-
- name[namelen++] = '\0';
- return namelen;
-}
diff --git a/backends/ia64_reloc.def b/backends/ia64_reloc.def
deleted file mode 100644
index a423465..0000000
--- a/backends/ia64_reloc.def
+++ /dev/null
@@ -1,110 +0,0 @@
-/* List the relocation types for ia64. -*- C -*-
- Copyright (C) 2005, 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-/* NAME, REL|EXEC|DYN */
-
-RELOC_TYPE (NONE, 0)
-RELOC_TYPE (IMM14, REL)
-RELOC_TYPE (IMM22, REL)
-RELOC_TYPE (IMM64, REL)
-RELOC_TYPE (DIR32MSB, REL|EXEC|DYN)
-RELOC_TYPE (DIR32LSB, REL|EXEC|DYN)
-RELOC_TYPE (DIR64MSB, REL|EXEC|DYN)
-RELOC_TYPE (DIR64LSB, REL|EXEC|DYN)
-RELOC_TYPE (GPREL22, REL)
-RELOC_TYPE (GPREL64I, REL)
-RELOC_TYPE (GPREL32MSB, REL)
-RELOC_TYPE (GPREL32LSB, REL)
-RELOC_TYPE (GPREL64MSB, REL)
-RELOC_TYPE (GPREL64LSB, REL)
-RELOC_TYPE (LTOFF22, REL)
-RELOC_TYPE (LTOFF64I, REL)
-RELOC_TYPE (PLTOFF22, REL)
-RELOC_TYPE (PLTOFF64I, REL)
-RELOC_TYPE (PLTOFF64MSB, REL)
-RELOC_TYPE (PLTOFF64LSB, REL)
-RELOC_TYPE (FPTR64I, REL)
-RELOC_TYPE (FPTR32MSB, REL|EXEC|DYN)
-RELOC_TYPE (FPTR32LSB, REL|EXEC|DYN)
-RELOC_TYPE (FPTR64MSB, REL|EXEC|DYN)
-RELOC_TYPE (FPTR64LSB, REL|EXEC|DYN)
-RELOC_TYPE (PCREL60B, REL)
-RELOC_TYPE (PCREL21B, REL)
-RELOC_TYPE (PCREL21M, REL)
-RELOC_TYPE (PCREL21F, REL)
-RELOC_TYPE (PCREL32MSB, REL|EXEC|DYN)
-RELOC_TYPE (PCREL32LSB, REL|EXEC|DYN)
-RELOC_TYPE (PCREL64MSB, REL|EXEC|DYN)
-RELOC_TYPE (PCREL64LSB, REL|EXEC|DYN)
-RELOC_TYPE (LTOFF_FPTR22, REL)
-RELOC_TYPE (LTOFF_FPTR64I, REL)
-RELOC_TYPE (LTOFF_FPTR32MSB, REL)
-RELOC_TYPE (LTOFF_FPTR32LSB, REL)
-RELOC_TYPE (LTOFF_FPTR64MSB, REL)
-RELOC_TYPE (LTOFF_FPTR64LSB, REL)
-RELOC_TYPE (SEGREL32MSB, REL)
-RELOC_TYPE (SEGREL32LSB, REL)
-RELOC_TYPE (SEGREL64MSB, REL)
-RELOC_TYPE (SEGREL64LSB, REL)
-RELOC_TYPE (SECREL32MSB, REL)
-RELOC_TYPE (SECREL32LSB, REL)
-RELOC_TYPE (SECREL64MSB, REL)
-RELOC_TYPE (SECREL64LSB, REL)
-RELOC_TYPE (REL32MSB, EXEC|DYN)
-RELOC_TYPE (REL32LSB, EXEC|DYN)
-RELOC_TYPE (REL64MSB, EXEC|DYN)
-RELOC_TYPE (REL64LSB, EXEC|DYN)
-RELOC_TYPE (LTV32MSB, REL)
-RELOC_TYPE (LTV32LSB, REL)
-RELOC_TYPE (LTV64MSB, REL)
-RELOC_TYPE (LTV64LSB, REL)
-RELOC_TYPE (PCREL21BI, REL)
-RELOC_TYPE (PCREL22, REL)
-RELOC_TYPE (PCREL64I, REL)
-RELOC_TYPE (IPLTMSB, REL|EXEC|DYN)
-RELOC_TYPE (IPLTLSB, REL|EXEC|DYN)
-RELOC_TYPE (COPY, EXEC)
-RELOC_TYPE (SUB, 0)
-RELOC_TYPE (LTOFF22X, REL)
-RELOC_TYPE (LDXMOV, REL)
-RELOC_TYPE (TPREL14, REL)
-RELOC_TYPE (TPREL22, REL)
-RELOC_TYPE (TPREL64I, REL)
-RELOC_TYPE (TPREL64MSB, REL|EXEC|DYN)
-RELOC_TYPE (TPREL64LSB, REL|EXEC|DYN)
-RELOC_TYPE (LTOFF_TPREL22, REL)
-RELOC_TYPE (DTPMOD64MSB, REL|EXEC|DYN)
-RELOC_TYPE (DTPMOD64LSB, REL|EXEC|DYN)
-RELOC_TYPE (LTOFF_DTPMOD22, REL)
-RELOC_TYPE (DTPREL14, REL)
-RELOC_TYPE (DTPREL22, REL)
-RELOC_TYPE (DTPREL64I, REL)
-RELOC_TYPE (DTPREL32MSB, REL|EXEC|DYN)
-RELOC_TYPE (DTPREL32LSB, REL|EXEC|DYN)
-RELOC_TYPE (DTPREL64MSB, REL|EXEC|DYN)
-RELOC_TYPE (DTPREL64LSB, REL|EXEC|DYN)
-RELOC_TYPE (LTOFF_DTPREL22, REL)
-
-#define NO_RELATIVE_RELOC 1
diff --git a/backends/ia64_retval.c b/backends/ia64_retval.c
deleted file mode 100644
index 238cd9e..0000000
--- a/backends/ia64_retval.c
+++ /dev/null
@@ -1,371 +0,0 @@
-/* Function return value location for IA64 ABI.
- Copyright (C) 2006, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <dwarf.h>
-
-#define BACKEND ia64_
-#include "libebl_CPU.h"
-
-
-/* r8, or pair r8, r9, or aggregate up to r8-r11. */
-static const Dwarf_Op loc_intreg[] =
- {
- { .atom = DW_OP_reg8 }, { .atom = DW_OP_piece, .number = 8 },
- { .atom = DW_OP_reg9 }, { .atom = DW_OP_piece, .number = 8 },
- { .atom = DW_OP_reg10 }, { .atom = DW_OP_piece, .number = 8 },
- { .atom = DW_OP_reg11 }, { .atom = DW_OP_piece, .number = 8 },
- };
-#define nloc_intreg 1
-#define nloc_intregs(n) (2 * (n))
-
-/* f8, or aggregate up to f8-f15. */
-#define DEFINE_FPREG(size) \
- static const Dwarf_Op loc_fpreg_##size[] = \
- { \
- { .atom = DW_OP_regx, .number = 128 + 8 }, \
- { .atom = DW_OP_piece, .number = size }, \
- { .atom = DW_OP_regx, .number = 128 + 9 }, \
- { .atom = DW_OP_piece, .number = size }, \
- { .atom = DW_OP_regx, .number = 128 + 10 }, \
- { .atom = DW_OP_piece, .number = size }, \
- { .atom = DW_OP_regx, .number = 128 + 11 }, \
- { .atom = DW_OP_piece, .number = size }, \
- { .atom = DW_OP_regx, .number = 128 + 12 }, \
- { .atom = DW_OP_piece, .number = size }, \
- { .atom = DW_OP_regx, .number = 128 + 13 }, \
- { .atom = DW_OP_piece, .number = size }, \
- { .atom = DW_OP_regx, .number = 128 + 14 }, \
- { .atom = DW_OP_piece, .number = size }, \
- { .atom = DW_OP_regx, .number = 128 + 15 }, \
- { .atom = DW_OP_piece, .number = size }, \
- }
-#define nloc_fpreg 1
-#define nloc_fpregs(n) (2 * (n))
-
-DEFINE_FPREG (4);
-DEFINE_FPREG (8);
-DEFINE_FPREG (10);
-
-#undef DEFINE_FPREG
-
-
-/* The return value is a structure and is actually stored in stack space
- passed in a hidden argument by the caller. But, the compiler
- helpfully returns the address of that space in r8. */
-static const Dwarf_Op loc_aggregate[] =
- {
- { .atom = DW_OP_breg8, .number = 0 }
- };
-#define nloc_aggregate 1
-
-
-/* If this type is an HFA small enough to be returned in FP registers,
- return the number of registers to use. Otherwise 9, or -1 for errors. */
-static int
-hfa_type (Dwarf_Die *typedie, const Dwarf_Op **locp, int fpregs_used)
-{
- /* Descend the type structure, counting elements and finding their types.
- If we find a datum that's not an FP type (and not quad FP), punt.
- If we find a datum that's not the same FP type as the first datum, punt.
- If we count more than eight total homogeneous FP data, punt. */
-
- inline int hfa (const Dwarf_Op *loc, int nregs)
- {
- if (fpregs_used == 0)
- *locp = loc;
- else if (*locp != loc)
- return 9;
- return fpregs_used + nregs;
- }
-
- int tag = dwarf_tag (typedie);
- switch (tag)
- {
- Dwarf_Attribute attr_mem;
-
- case -1:
- return -1;
-
- case DW_TAG_base_type:;
- int size = dwarf_bytesize (typedie);
- if (size < 0)
- return -1;
-
- Dwarf_Word encoding;
- if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_encoding,
- &attr_mem), &encoding) != 0)
- return -1;
-
- switch (encoding)
- {
- case DW_ATE_float:
- switch (size)
- {
- case 4: /* float */
- return hfa (loc_fpreg_4, 1);
- case 8: /* double */
- return hfa (loc_fpreg_8, 1);
- case 10: /* x86-style long double, not really used */
- return hfa (loc_fpreg_10, 1);
- }
- break;
-
- case DW_ATE_complex_float:
- switch (size)
- {
- case 4 * 2: /* complex float */
- return hfa (loc_fpreg_4, 2);
- case 8 * 2: /* complex double */
- return hfa (loc_fpreg_8, 2);
- case 10 * 2: /* complex long double (x86-style) */
- return hfa (loc_fpreg_10, 2);
- }
- break;
- }
- break;
-
- case DW_TAG_structure_type:
- case DW_TAG_class_type:
- case DW_TAG_union_type:;
- Dwarf_Die child_mem;
- switch (dwarf_child (typedie, &child_mem))
- {
- default:
- return -1;
-
- case 1: /* No children: empty struct. */
- break;
-
- case 0:; /* Look at each element. */
- int max_used = fpregs_used;
- do
- switch (dwarf_tag (&child_mem))
- {
- case -1:
- return -1;
-
- case DW_TAG_member:;
- Dwarf_Die child_type_mem;
- Dwarf_Die *child_typedie
- = dwarf_formref_die (dwarf_attr_integrate (&child_mem,
- DW_AT_type,
- &attr_mem),
- &child_type_mem);
- if (tag == DW_TAG_union_type)
- {
- int used = hfa_type (child_typedie, locp, fpregs_used);
- if (used < 0 || used > 8)
- return used;
- if (used > max_used)
- max_used = used;
- }
- else
- {
- fpregs_used = hfa_type (child_typedie, locp, fpregs_used);
- if (fpregs_used < 0 || fpregs_used > 8)
- return fpregs_used;
- }
- }
- while (dwarf_siblingof (&child_mem, &child_mem) == 0);
- if (tag == DW_TAG_union_type)
- fpregs_used = max_used;
- break;
- }
- break;
-
- case DW_TAG_array_type:;
- size = dwarf_bytesize (typedie);
- if (size < 0)
- return 9;
- if (size == 0)
- break;
-
- Dwarf_Die base_type_mem;
- Dwarf_Die *base_typedie
- = dwarf_formref_die (dwarf_attr_integrate (typedie, DW_AT_type,
- &attr_mem),
- &base_type_mem);
-
- int used = hfa_type (base_typedie, locp, 0);
- if (used < 0 || used > 8)
- return used;
- if (size % (*locp)[1].number != 0)
- return 0;
- size /= (*locp)[1].number;
- fpregs_used += used * size;
- break;
-
- default:
- return 9;
- }
-
- return fpregs_used;
-}
-
-int
-ia64_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp)
-{
- /* Start with the function's type, and get the DW_AT_type attribute,
- which is the type of the return value. */
-
- Dwarf_Attribute attr_mem;
- Dwarf_Attribute *attr = dwarf_attr_integrate (functypedie, DW_AT_type,
- &attr_mem);
- if (attr == NULL)
- /* The function has no return value, like a `void' function in C. */
- return 0;
-
- Dwarf_Die die_mem;
- Dwarf_Die *typedie = dwarf_formref_die (attr, &die_mem);
- int tag = dwarf_tag (typedie);
-
- /* Follow typedefs and qualifiers to get to the actual type. */
- while (tag == DW_TAG_typedef
- || tag == DW_TAG_const_type || tag == DW_TAG_volatile_type
- || tag == DW_TAG_restrict_type || tag == DW_TAG_mutable_type)
- {
- attr = dwarf_attr (typedie, DW_AT_type, &attr_mem);
- typedie = dwarf_formref_die (attr, &die_mem);
- tag = dwarf_tag (typedie);
- }
-
- Dwarf_Word size;
- switch (tag)
- {
- case -1:
- return -1;
-
- case DW_TAG_subrange_type:
- if (! dwarf_hasattr_integrate (typedie, DW_AT_byte_size))
- {
- attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem);
- typedie = dwarf_formref_die (attr, &die_mem);
- tag = dwarf_tag (typedie);
- }
- /* Fall through. */
-
- case DW_TAG_base_type:
- case DW_TAG_enumeration_type:
- case DW_TAG_pointer_type:
- case DW_TAG_ptr_to_member_type:
- if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_byte_size,
- &attr_mem), &size) != 0)
- {
- if (tag == DW_TAG_pointer_type || tag == DW_TAG_ptr_to_member_type)
- size = 8;
- else
- return -1;
- }
- if (tag == DW_TAG_base_type)
- {
- Dwarf_Word encoding;
- if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_encoding,
- &attr_mem),
- &encoding) != 0)
- return -1;
-
- switch (encoding)
- {
- case DW_ATE_float:
- switch (size)
- {
- case 4: /* float */
- *locp = loc_fpreg_4;
- return nloc_fpreg;
- case 8: /* double */
- *locp = loc_fpreg_8;
- return nloc_fpreg;
- case 10: /* x86-style long double, not really used */
- *locp = loc_fpreg_10;
- return nloc_fpreg;
- case 16: /* long double, IEEE quad format */
- *locp = loc_intreg;
- return nloc_intregs (2);
- }
- return -2;
-
- case DW_ATE_complex_float:
- switch (size)
- {
- case 4 * 2: /* complex float */
- *locp = loc_fpreg_4;
- return nloc_fpregs (2);
- case 8 * 2: /* complex double */
- *locp = loc_fpreg_8;
- return nloc_fpregs (2);
- case 10 * 2: /* complex long double (x86-style) */
- *locp = loc_fpreg_10;
- return nloc_fpregs (2);
- case 16 * 2: /* complex long double (IEEE quad) */
- *locp = loc_intreg;
- return nloc_intregs (4);
- }
- return -2;
- }
- }
-
- intreg:
- *locp = loc_intreg;
- if (size <= 8)
- return nloc_intreg;
- if (size <= 32)
- return nloc_intregs ((size + 7) / 8);
-
- large:
- *locp = loc_aggregate;
- return nloc_aggregate;
-
- case DW_TAG_structure_type:
- case DW_TAG_class_type:
- case DW_TAG_union_type:
- case DW_TAG_array_type:
- if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_byte_size,
- &attr_mem), &size) != 0)
- return -1;
-
- /* If this qualifies as an homogeneous floating-point aggregate
- (HFA), then it should be returned in FP regs. */
- int nfpreg = hfa_type (typedie, locp, 0);
- if (nfpreg < 0)
- return nfpreg;
- else if (nfpreg > 0 && nfpreg <= 8)
- return nfpreg == 1 ? nloc_fpreg : nloc_fpregs (nfpreg);
-
- if (size > 32)
- goto large;
-
- goto intreg;
- }
-
- /* XXX We don't have a good way to return specific errors from ebl calls.
- This value means we do not understand the type, but it is well-formed
- DWARF and might be valid. */
- return -2;
-}
diff --git a/backends/ia64_symbol.c b/backends/ia64_symbol.c
deleted file mode 100644
index 2609db0..0000000
--- a/backends/ia64_symbol.c
+++ /dev/null
@@ -1,147 +0,0 @@
-/* IA-64 specific symbolic name handling.
- Copyright (C) 2002, 2003, 2005, 2006, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <elf.h>
-#include <stddef.h>
-#include <assert.h>
-
-#define BACKEND ia64_
-#include "libebl_CPU.h"
-
-
-const char *
-ia64_segment_type_name (int segment, char *buf __attribute__ ((unused)),
- size_t len __attribute__ ((unused)))
-{
- switch (segment)
- {
- case PT_IA_64_ARCHEXT:
- return "IA_64_ARCHEXT";
- case PT_IA_64_UNWIND:
- return "IA_64_UNWIND";
- case PT_IA_64_HP_OPT_ANOT:
- return "IA_64_HP_OPT_ANOT";
- case PT_IA_64_HP_HSL_ANOT:
- return "IA_64_HP_HSL_ANOT";
- case PT_IA_64_HP_STACK:
- return "IA_64_HP_STACK";
- default:
- break;
- }
- return NULL;
-}
-
-const char *
-ia64_dynamic_tag_name (int64_t tag, char *buf __attribute__ ((unused)),
- size_t len __attribute__ ((unused)))
-{
- switch (tag)
- {
- case DT_IA_64_PLT_RESERVE:
- return "IA_64_PLT_RESERVE";
- default:
- break;
- }
- return NULL;
-}
-
-/* Check dynamic tag. */
-bool
-ia64_dynamic_tag_check (int64_t tag)
-{
- return tag == DT_IA_64_PLT_RESERVE;
-}
-
-/* Check whether machine flags are valid. */
-bool
-ia64_machine_flag_check (GElf_Word flags)
-{
- return ((flags &~ EF_IA_64_ABI64) == 0);
-}
-
-/* Check whether SHF_MASKPROC flags are valid. */
-bool
-ia64_machine_section_flag_check (GElf_Xword sh_flags)
-{
- return (sh_flags &~ (SHF_IA_64_SHORT | SHF_IA_64_NORECOV)) == 0;
-}
-
-/* Return symbolic representation of section type. */
-const char *
-ia64_section_type_name (int type,
- char *buf __attribute__ ((unused)),
- size_t len __attribute__ ((unused)))
-{
- switch (type)
- {
- case SHT_IA_64_EXT:
- return "SHT_IA_64_EXT";
- case SHT_IA_64_UNWIND:
- return "SHT_IA_64_UNWIND";
- }
-
- return NULL;
-}
-
-/* Check for the simple reloc types. */
-Elf_Type
-ia64_reloc_simple_type (Ebl *ebl, int type)
-{
- switch (type)
- {
- /* The SECREL types when used with non-allocated sections
- like .debug_* are the same as direct absolute relocs
- applied to those sections, since a 0 section address is assumed.
- So we treat them the same here. */
-
- case R_IA64_SECREL32MSB:
- case R_IA64_DIR32MSB:
- if (ebl->data == ELFDATA2MSB)
- return ELF_T_WORD;
- break;
- case R_IA64_SECREL32LSB:
- case R_IA64_DIR32LSB:
- if (ebl->data == ELFDATA2LSB)
- return ELF_T_WORD;
- break;
- case R_IA64_DIR64MSB:
- case R_IA64_SECREL64MSB:
- if (ebl->data == ELFDATA2MSB)
- return ELF_T_XWORD;
- break;
- case R_IA64_SECREL64LSB:
- case R_IA64_DIR64LSB:
- if (ebl->data == ELFDATA2LSB)
- return ELF_T_XWORD;
- break;
- }
-
- return ELF_T_NUM;
-}
diff --git a/backends/libebl_CPU.h b/backends/libebl_CPU.h
deleted file mode 100644
index b00e723..0000000
--- a/backends/libebl_CPU.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Common interface for libebl modules.
- Copyright (C) 2000, 2001, 2002, 2003, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifndef _LIBEBL_CPU_H
-#define _LIBEBL_CPU_H 1
-
-#include <libeblP.h>
-
-#define EBLHOOK(name) EBLHOOK_1(BACKEND, name)
-#define EBLHOOK_1(a, b) EBLHOOK_2(a, b)
-#define EBLHOOK_2(a, b) a##b
-
-/* Constructor. */
-extern const char *EBLHOOK(init) (Elf *elf, GElf_Half machine,
- Ebl *eh, size_t ehlen);
-
-#include "ebl-hooks.h"
-
-#define HOOK(eh, name) eh->name = EBLHOOK(name)
-
-extern bool (*generic_debugscn_p) (const char *) attribute_hidden;
-
-
-#endif /* libebl_CPU.h */
diff --git a/backends/linux-core-note.c b/backends/linux-core-note.c
deleted file mode 100644
index 7b1fc02..0000000
--- a/backends/linux-core-note.c
+++ /dev/null
@@ -1,222 +0,0 @@
-/* Common core note type descriptions for Linux.
- Copyright (C) 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-/* The including CPU_corenote.c file provides prstatus_regs and
- defines macros ULONG, [PUG]ID_T, and ALIGN_*, TYPE_*.
-
- Here we describe the common layout used in <linux/elfcore.h>. */
-
-#define CHAR int8_t
-#define ALIGN_CHAR 1
-#define TYPE_CHAR ELF_T_BYTE
-#define SHORT uint16_t
-#define ALIGN_SHORT 2
-#define TYPE_SHORT ELF_T_HALF
-#define INT int32_t
-#define ALIGN_INT 4
-#define TYPE_INT ELF_T_SWORD
-
-#define FIELD(type, name) type name __attribute__ ((aligned (ALIGN_##type)))
-
-struct EBLHOOK(siginfo)
-{
- FIELD (INT, si_signo);
- FIELD (INT, si_code);
- FIELD (INT, si_errno);
-};
-
-struct EBLHOOK(timeval)
-{
- FIELD (ULONG, tv_sec);
- FIELD (ULONG, tv_usec);
-};
-
-/* On sparc64, tv_usec (suseconds_t) is actually 32 bits with 32 bits padding.
- The 'T'|0x80 value for .format indicates this as a special kludge. */
-#if SUSECONDS_HALF
-# define TIMEVAL_FIELD(name) FIELD (time, ULONG, name, 'T'|0x80, .count = 2)
-#else
-# define TIMEVAL_FIELD(name) FIELD (time, ULONG, name, 'T', .count = 2)
-#endif
-
-
-struct EBLHOOK(prstatus)
-{
- struct EBLHOOK(siginfo) pr_info;
- FIELD (SHORT, pr_cursig);
- FIELD (ULONG, pr_sigpend);
- FIELD (ULONG, pr_sighold);
- FIELD (PID_T, pr_pid);
- FIELD (PID_T, pr_ppid);
- FIELD (PID_T, pr_pgrp);
- FIELD (PID_T, pr_sid);
- struct EBLHOOK(timeval) pr_utime;
- struct EBLHOOK(timeval) pr_stime;
- struct EBLHOOK(timeval) pr_cutime;
- struct EBLHOOK(timeval) pr_cstime;
- FIELD (ULONG, pr_reg[PRSTATUS_REGS_SIZE / sizeof (ULONG)]);
- FIELD (INT, pr_fpvalid);
-};
-
-#define FNAMESZ 16
-#define PRARGSZ 80
-
-struct EBLHOOK(prpsinfo)
-{
- FIELD (CHAR, pr_state);
- FIELD (CHAR, pr_sname);
- FIELD (CHAR, pr_zomb);
- FIELD (CHAR, pr_nice);
- FIELD (ULONG, pr_flag);
- FIELD (UID_T, pr_uid);
- FIELD (GID_T, pr_gid);
- FIELD (PID_T, pr_pid);
- FIELD (PID_T, pr_ppid);
- FIELD (PID_T, pr_pgrp);
- FIELD (PID_T, pr_sid);
- FIELD (CHAR, pr_fname[FNAMESZ]);
- FIELD (CHAR, pr_psargs[PRARGSZ]);
-};
-
-#undef FIELD
-
-#define FIELD(igroup, itype, item, fmt, ...) \
- { \
- .name = #item, \
- .group = #igroup, \
- .offset = offsetof (struct EBLHOOK(prstatus), pr_##item), \
- .type = TYPE_##itype, \
- .format = fmt, \
- __VA_ARGS__ \
- }
-
-static const Ebl_Core_Item prstatus_items[] =
- {
- FIELD (signal, INT, info.si_signo, 'd'),
- FIELD (signal, INT, info.si_code, 'd'),
- FIELD (signal, INT, info.si_errno, 'd'),
- FIELD (signal, SHORT, cursig, 'd'),
- FIELD (signal, ULONG, sigpend, 'B'),
- FIELD (signal, ULONG, sighold, 'B'),
- FIELD (identity, PID_T, pid, 'd', .thread_identifier = true),
- FIELD (identity, PID_T, ppid, 'd'),
- FIELD (identity, PID_T, pgrp, 'd'),
- FIELD (identity, PID_T, sid, 'd'),
- TIMEVAL_FIELD (utime),
- TIMEVAL_FIELD (stime),
- TIMEVAL_FIELD (cutime),
- TIMEVAL_FIELD (cstime),
-#ifdef PRSTATUS_REGSET_ITEMS
- PRSTATUS_REGSET_ITEMS,
-#endif
- FIELD (register, INT, fpvalid, 'd'),
- };
-
-#undef FIELD
-
-#define FIELD(igroup, itype, item, fmt, ...) \
- { \
- .name = #item, \
- .group = #igroup, \
- .offset = offsetof (struct EBLHOOK(prpsinfo), pr_##item), \
- .type = TYPE_##itype, \
- .format = fmt, \
- __VA_ARGS__ \
- }
-
-static const Ebl_Core_Item prpsinfo_items[] =
- {
- FIELD (state, CHAR, state, 'd'),
- FIELD (state, CHAR, sname, 'c'),
- FIELD (state, CHAR, zomb, 'd'),
- FIELD (state, CHAR, nice, 'd'),
- FIELD (state, ULONG, flag, 'x'),
- FIELD (identity, UID_T, uid, 'd'),
- FIELD (identity, GID_T, gid, 'd'),
- FIELD (identity, PID_T, pid, 'd'),
- FIELD (identity, PID_T, ppid, 'd'),
- FIELD (identity, PID_T, pgrp, 'd'),
- FIELD (identity, PID_T, sid, 'd'),
- FIELD (command, CHAR, fname, 's', .count = FNAMESZ),
- FIELD (command, CHAR, psargs, 's', .count = PRARGSZ),
- };
-
-#undef FIELD
-
-int
-EBLHOOK(core_note) (n_type, descsz,
- regs_offset, nregloc, reglocs, nitems, items)
- GElf_Word n_type;
- GElf_Word descsz;
- GElf_Word *regs_offset;
- size_t *nregloc;
- const Ebl_Register_Location **reglocs;
- size_t *nitems;
- const Ebl_Core_Item **items;
-{
- switch (n_type)
- {
- case NT_PRSTATUS:
- if (descsz != sizeof (struct EBLHOOK(prstatus)))
- return 0;
- *regs_offset = offsetof (struct EBLHOOK(prstatus), pr_reg);
- *nregloc = sizeof prstatus_regs / sizeof prstatus_regs[0];
- *reglocs = prstatus_regs;
- *nitems = sizeof prstatus_items / sizeof prstatus_items[0];
- *items = prstatus_items;
- return 1;
-
- case NT_PRPSINFO:
- if (descsz != sizeof (struct EBLHOOK(prpsinfo)))
- return 0;
- *regs_offset = 0;
- *nregloc = 0;
- *reglocs = NULL;
- *nitems = sizeof prpsinfo_items / sizeof prpsinfo_items[0];
- *items = prpsinfo_items;
- return 1;
-
-#define EXTRA_REGSET(type, size, table) \
- case type: \
- if (descsz != size) \
- return 0; \
- *regs_offset = 0; \
- *nregloc = sizeof table / sizeof table[0]; \
- *reglocs = table; \
- *nitems = 0; \
- *items = NULL; \
- return 1;
-
-#ifdef FPREGSET_SIZE
- EXTRA_REGSET (NT_FPREGSET, FPREGSET_SIZE, fpregset_regs)
-#endif
-
-#ifdef EXTRA_NOTES
- EXTRA_NOTES
-#endif
- }
-
- return 0;
-}
diff --git a/backends/ppc64_corenote.c b/backends/ppc64_corenote.c
deleted file mode 100644
index 9d6a6a4..0000000
--- a/backends/ppc64_corenote.c
+++ /dev/null
@@ -1,2 +0,0 @@
-#define BITS 64
-#include "ppc_corenote.c"
diff --git a/backends/ppc64_init.c b/backends/ppc64_init.c
deleted file mode 100644
index 3060a60..0000000
--- a/backends/ppc64_init.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Initialization of PPC64 specific backend library.
- Copyright (C) 2004, 2005, 2006, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#define BACKEND ppc64_
-#define RELOC_PREFIX R_PPC64_
-#include "libebl_CPU.h"
-
-/* This defines the common reloc hooks based on ppc64_reloc.def. */
-#include "common-reloc.c"
-
-
-const char *
-ppc64_init (elf, machine, eh, ehlen)
- Elf *elf __attribute__ ((unused));
- GElf_Half machine __attribute__ ((unused));
- Ebl *eh;
- size_t ehlen;
-{
- /* Check whether the Elf_BH object has a sufficent size. */
- if (ehlen < sizeof (Ebl))
- return NULL;
-
- /* We handle it. */
- eh->name = "PowerPC 64-bit";
- ppc64_init_reloc (eh);
- HOOK (eh, reloc_simple_type);
- HOOK (eh, dynamic_tag_name);
- HOOK (eh, dynamic_tag_check);
- HOOK (eh, copy_reloc_p);
- HOOK (eh, check_special_symbol);
- HOOK (eh, bss_plt_p);
- HOOK (eh, return_value_location);
- HOOK (eh, register_info);
- HOOK (eh, syscall_abi);
- HOOK (eh, core_note);
- HOOK (eh, auxv_info);
-
- return MODVERSION;
-}
diff --git a/backends/ppc64_reloc.def b/backends/ppc64_reloc.def
deleted file mode 100644
index e51512b..0000000
--- a/backends/ppc64_reloc.def
+++ /dev/null
@@ -1,143 +0,0 @@
-/* List the relocation types for ppc64. -*- C -*-
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-/* NAME, REL|EXEC|DYN */
-
-RELOC_TYPE (NONE, 0)
-RELOC_TYPE (ADDR32, REL|EXEC|DYN)
-RELOC_TYPE (ADDR24, REL)
-RELOC_TYPE (ADDR16, REL) /* note 1 */
-RELOC_TYPE (ADDR16_LO, REL) /* note 1 */
-RELOC_TYPE (ADDR16_HI, REL) /* note 1 */
-RELOC_TYPE (ADDR16_HA, REL) /* note 1 */
-RELOC_TYPE (ADDR14, REL) /* note 1 */
-RELOC_TYPE (ADDR14_BRTAKEN, REL) /* note 1 */
-RELOC_TYPE (ADDR14_BRNTAKEN, REL) /* note 1 */
-RELOC_TYPE (REL24, REL)
-RELOC_TYPE (REL14, REL)
-RELOC_TYPE (REL14_BRTAKEN, REL)
-RELOC_TYPE (REL14_BRNTAKEN, REL)
-RELOC_TYPE (GOT16, REL)
-RELOC_TYPE (GOT16_LO, REL)
-RELOC_TYPE (GOT16_HI, REL)
-RELOC_TYPE (GOT16_HA, REL)
-RELOC_TYPE (COPY, EXEC)
-RELOC_TYPE (GLOB_DAT, EXEC|DYN)
-RELOC_TYPE (JMP_SLOT, EXEC|DYN)
-RELOC_TYPE (RELATIVE, EXEC|DYN)
-RELOC_TYPE (UADDR32, REL|EXEC|DYN)
-RELOC_TYPE (UADDR16, REL)
-RELOC_TYPE (REL32, REL|EXEC|DYN)
-RELOC_TYPE (PLT32, REL)
-RELOC_TYPE (PLTREL32, REL)
-RELOC_TYPE (PLT16_LO, REL)
-RELOC_TYPE (PLT16_HI, REL)
-RELOC_TYPE (PLT16_HA, REL)
-RELOC_TYPE (SECTOFF, REL)
-RELOC_TYPE (SECTOFF_LO, REL)
-RELOC_TYPE (SECTOFF_HI, REL)
-RELOC_TYPE (SECTOFF_HA, REL)
-RELOC_TYPE (ADDR30, REL) /* note 1 */
-RELOC_TYPE (ADDR64, REL|EXEC|DYN)
-RELOC_TYPE (ADDR16_HIGHER, REL) /* note 1 */
-RELOC_TYPE (ADDR16_HIGHERA, REL) /* note 1 */
-RELOC_TYPE (ADDR16_HIGHEST, REL) /* note 1 */
-RELOC_TYPE (ADDR16_HIGHESTA, REL) /* note 1 */
-RELOC_TYPE (UADDR64, REL|EXEC|DYN)
-RELOC_TYPE (REL64, REL|EXEC|DYN)
-RELOC_TYPE (PLT64, REL)
-RELOC_TYPE (PLTREL64, REL)
-RELOC_TYPE (TOC16, REL)
-RELOC_TYPE (TOC16_LO, REL)
-RELOC_TYPE (TOC16_HI, REL)
-RELOC_TYPE (TOC16_HA, REL)
-RELOC_TYPE (TOC, REL)
-RELOC_TYPE (PLTGOT16, REL)
-RELOC_TYPE (PLTGOT16_LO, REL)
-RELOC_TYPE (PLTGOT16_HI, REL)
-RELOC_TYPE (PLTGOT16_HA, REL)
-RELOC_TYPE (ADDR16_DS, REL) /* note 1 */
-RELOC_TYPE (ADDR16_LO_DS, REL) /* note 1 */
-RELOC_TYPE (GOT16_DS, REL)
-RELOC_TYPE (GOT16_LO_DS, REL)
-RELOC_TYPE (PLT16_LO_DS, REL)
-RELOC_TYPE (SECTOFF_DS, REL)
-RELOC_TYPE (SECTOFF_LO_DS, REL)
-RELOC_TYPE (TOC16_DS, REL)
-RELOC_TYPE (TOC16_LO_DS, REL)
-RELOC_TYPE (PLTGOT16_DS, REL)
-RELOC_TYPE (PLTGOT16_LO_DS, REL)
-RELOC_TYPE (TLS, REL)
-RELOC_TYPE (DTPMOD64, REL|EXEC|DYN) /* note 3 */
-RELOC_TYPE (TPREL16, REL) /* note 2 */
-RELOC_TYPE (TPREL16_LO, REL) /* note 2 */
-RELOC_TYPE (TPREL16_HI, REL) /* note 2 */
-RELOC_TYPE (TPREL16_HA, REL) /* note 2 */
-RELOC_TYPE (TPREL64, REL|EXEC|DYN) /* note 3 */
-RELOC_TYPE (DTPREL16, REL)
-RELOC_TYPE (DTPREL16_LO, REL)
-RELOC_TYPE (DTPREL16_HI, REL)
-RELOC_TYPE (DTPREL16_HA, REL)
-RELOC_TYPE (DTPREL64, REL|EXEC|DYN) /* note 3 */
-RELOC_TYPE (GOT_TLSGD16, REL)
-RELOC_TYPE (GOT_TLSGD16_LO, REL)
-RELOC_TYPE (GOT_TLSGD16_HI, REL)
-RELOC_TYPE (GOT_TLSGD16_HA, REL)
-RELOC_TYPE (GOT_TLSLD16, REL)
-RELOC_TYPE (GOT_TLSLD16_LO, REL)
-RELOC_TYPE (GOT_TLSLD16_HI, REL)
-RELOC_TYPE (GOT_TLSLD16_HA, REL)
-RELOC_TYPE (GOT_TPREL16_DS, REL)
-RELOC_TYPE (GOT_TPREL16_LO_DS, REL)
-RELOC_TYPE (GOT_TPREL16_HI, REL)
-RELOC_TYPE (GOT_TPREL16_HA, REL)
-RELOC_TYPE (GOT_DTPREL16_DS, REL)
-RELOC_TYPE (GOT_DTPREL16_LO_DS, REL)
-RELOC_TYPE (GOT_DTPREL16_HI, REL)
-RELOC_TYPE (GOT_DTPREL16_HA, REL)
-RELOC_TYPE (TPREL16_DS, REL) /* note 2 */
-RELOC_TYPE (TPREL16_LO_DS, REL) /* note 2 */
-RELOC_TYPE (TPREL16_HIGHER, REL) /* note 2 */
-RELOC_TYPE (TPREL16_HIGHERA, REL) /* note 2 */
-RELOC_TYPE (TPREL16_HIGHEST, REL) /* note 2 */
-RELOC_TYPE (TPREL16_HIGHESTA, REL) /* note 2 */
-RELOC_TYPE (DTPREL16_DS, REL)
-RELOC_TYPE (DTPREL16_LO_DS, REL)
-RELOC_TYPE (DTPREL16_HIGHER, REL)
-RELOC_TYPE (DTPREL16_HIGHERA, REL)
-RELOC_TYPE (DTPREL16_HIGHEST, REL)
-RELOC_TYPE (DTPREL16_HIGHESTA, REL)
-
-/* Notes from Alan Modra:
-
- 1) These can appear in DYN and EXEC with improper assembly, but they
- aren't really kosher.
-
- 2) These can appear in DYN with improper assembly (or silly gcc
- attributes, I think). Again, not kosher.
-
- 3) These are legal in REL for PowerOpen compatible assembler syntax,
- ie. TOC managed by compiler.
-*/
diff --git a/backends/ppc64_retval.c b/backends/ppc64_retval.c
deleted file mode 100644
index 454897c..0000000
--- a/backends/ppc64_retval.c
+++ /dev/null
@@ -1,184 +0,0 @@
-/* Function return value location for Linux/PPC64 ABI.
- Copyright (C) 2005, 2006, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <dwarf.h>
-
-#define BACKEND ppc64_
-#include "libebl_CPU.h"
-
-
-/* r3. */
-static const Dwarf_Op loc_intreg[] =
- {
- { .atom = DW_OP_reg3 }
- };
-#define nloc_intreg 1
-
-/* f1, or f1:f2, or f1:f4. */
-static const Dwarf_Op loc_fpreg[] =
- {
- { .atom = DW_OP_regx, .number = 33 }, { .atom = DW_OP_piece, .number = 8 },
- { .atom = DW_OP_regx, .number = 34 }, { .atom = DW_OP_piece, .number = 8 },
- { .atom = DW_OP_regx, .number = 35 }, { .atom = DW_OP_piece, .number = 8 },
- { .atom = DW_OP_regx, .number = 36 }, { .atom = DW_OP_piece, .number = 8 },
- };
-#define nloc_fpreg 1
-#define nloc_fp2regs 4
-#define nloc_fp4regs 8
-
-/* The return value is a structure and is actually stored in stack space
- passed in a hidden argument by the caller. But, the compiler
- helpfully returns the address of that space in r3. */
-static const Dwarf_Op loc_aggregate[] =
- {
- { .atom = DW_OP_breg3, .number = 0 }
- };
-#define nloc_aggregate 1
-
-int
-ppc64_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp)
-{
- /* Start with the function's type, and get the DW_AT_type attribute,
- which is the type of the return value. */
-
- Dwarf_Attribute attr_mem;
- Dwarf_Attribute *attr = dwarf_attr_integrate (functypedie, DW_AT_type,
- &attr_mem);
- if (attr == NULL)
- /* The function has no return value, like a `void' function in C. */
- return 0;
-
- Dwarf_Die die_mem;
- Dwarf_Die *typedie = dwarf_formref_die (attr, &die_mem);
- int tag = dwarf_tag (typedie);
-
- /* Follow typedefs and qualifiers to get to the actual type. */
- while (tag == DW_TAG_typedef
- || tag == DW_TAG_const_type || tag == DW_TAG_volatile_type
- || tag == DW_TAG_restrict_type || tag == DW_TAG_mutable_type)
- {
- attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem);
- typedie = dwarf_formref_die (attr, &die_mem);
- tag = dwarf_tag (typedie);
- }
-
- Dwarf_Word size;
- switch (tag)
- {
- case -1:
- return -1;
-
- case DW_TAG_subrange_type:
- if (! dwarf_hasattr_integrate (typedie, DW_AT_byte_size))
- {
- attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem);
- typedie = dwarf_formref_die (attr, &die_mem);
- tag = dwarf_tag (typedie);
- }
- /* Fall through. */
-
- case DW_TAG_base_type:
- case DW_TAG_enumeration_type:
- case DW_TAG_pointer_type:
- case DW_TAG_ptr_to_member_type:
- if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_byte_size,
- &attr_mem), &size) != 0)
- {
- if (tag == DW_TAG_pointer_type || tag == DW_TAG_ptr_to_member_type)
- size = 8;
- else
- return -1;
- }
- if (tag == DW_TAG_base_type)
- {
- Dwarf_Word encoding;
- if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_encoding,
- &attr_mem),
- &encoding) != 0)
- return -1;
-
- if (encoding == DW_ATE_float || encoding == DW_ATE_complex_float)
- {
- *locp = loc_fpreg;
- if (size <= 8)
- return nloc_fpreg;
- if (size <= 16)
- return nloc_fp2regs;
- if (size <= 32)
- return nloc_fp4regs;
- }
- }
- if (size <= 8)
- {
- intreg:
- *locp = loc_intreg;
- return nloc_intreg;
- }
-
- /* Else fall through. */
- case DW_TAG_structure_type:
- case DW_TAG_class_type:
- case DW_TAG_union_type:
- aggregate:
- *locp = loc_aggregate;
- return nloc_aggregate;
-
- case DW_TAG_string_type:
- case DW_TAG_array_type:
- if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_byte_size,
- &attr_mem), &size) == 0
- && size <= 8)
- {
- if (tag == DW_TAG_array_type)
- {
- /* Check if it's a character array. */
- attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem);
- typedie = dwarf_formref_die (attr, &die_mem);
- tag = dwarf_tag (typedie);
- if (tag != DW_TAG_base_type)
- goto aggregate;
- if (dwarf_formudata (dwarf_attr_integrate (typedie,
- DW_AT_byte_size,
- &attr_mem),
- &size) != 0)
- return -1;
- if (size != 1)
- goto aggregate;
- }
- goto intreg;
- }
- goto aggregate;
- }
-
- /* XXX We don't have a good way to return specific errors from ebl calls.
- This value means we do not understand the type, but it is well-formed
- DWARF and might be valid. */
- return -2;
-}
diff --git a/backends/ppc64_symbol.c b/backends/ppc64_symbol.c
deleted file mode 100644
index 49fde0c..0000000
--- a/backends/ppc64_symbol.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/* PPC64 specific symbolic name handling.
- Copyright (C) 2004, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <elf.h>
-#include <stddef.h>
-#include <string.h>
-
-#define BACKEND ppc64_
-#include "libebl_CPU.h"
-
-
-/* Check for the simple reloc types. */
-Elf_Type
-ppc64_reloc_simple_type (Ebl *ebl __attribute__ ((unused)), int type)
-{
- switch (type)
- {
- case R_PPC64_ADDR64:
- case R_PPC64_UADDR64:
- return ELF_T_XWORD;
- case R_PPC64_ADDR32:
- case R_PPC64_UADDR32:
- return ELF_T_WORD;
- case R_PPC64_UADDR16:
- return ELF_T_HALF;
- default:
- return ELF_T_NUM;
- }
-}
-
-
-const char *
-ppc64_dynamic_tag_name (int64_t tag, char *buf __attribute__ ((unused)),
- size_t len __attribute__ ((unused)))
-{
- switch (tag)
- {
- case DT_PPC64_GLINK:
- return "PPC64_GLINK";
- case DT_PPC64_OPD:
- return "PPC64_OPD";
- case DT_PPC64_OPDSZ:
- return "PPC64_OPDSZ";
- default:
- break;
- }
- return NULL;
-}
-
-
-bool
-ppc64_dynamic_tag_check (int64_t tag)
-{
- return (tag == DT_PPC64_GLINK
- || tag == DT_PPC64_OPD
- || tag == DT_PPC64_OPDSZ);
-}
-
-
-/* Check whether given symbol's st_value and st_size are OK despite failing
- normal checks. */
-bool
-ppc64_check_special_symbol (Elf *elf, GElf_Ehdr *ehdr,
- const GElf_Sym *sym __attribute__ ((unused)),
- const char *name __attribute__ ((unused)),
- const GElf_Shdr *destshdr)
-{
- const char *sname = elf_strptr (elf, ehdr->e_shstrndx, destshdr->sh_name);
- if (sname == NULL)
- return false;
- return strcmp (sname, ".opd") == 0;
-}
-
-
-/* Check if backend uses a bss PLT in this file. */
-bool
-ppc64_bss_plt_p (Elf *elf __attribute__ ((unused)),
- GElf_Ehdr *ehdr __attribute__ ((unused)))
-{
- return true;
-}
diff --git a/backends/ppc_attrs.c b/backends/ppc_attrs.c
deleted file mode 100644
index 733b874..0000000
--- a/backends/ppc_attrs.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/* Object attribute tags for PowerPC.
- Copyright (C) 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <string.h>
-#include <dwarf.h>
-
-#define BACKEND ppc_
-#include "libebl_CPU.h"
-
-bool
-ppc_check_object_attribute (ebl, vendor, tag, value, tag_name, value_name)
- Ebl *ebl __attribute__ ((unused));
- const char *vendor;
- int tag;
- uint64_t value;
- const char **tag_name;
- const char **value_name;
-{
- if (!strcmp (vendor, "gnu"))
- switch (tag)
- {
- case 4:
- *tag_name = "GNU_Power_ABI_FP";
- static const char *fp_kinds[] =
- {
- "Hard or soft float",
- "Hard float",
- "Soft float",
- };
- if (value < sizeof fp_kinds / sizeof fp_kinds[0])
- *value_name = fp_kinds[value];
- return true;
-
- case 8:
- *tag_name = "GNU_Power_ABI_Vector";
- static const char *vector_kinds[] =
- {
- "Any", "Generic", "AltiVec", "SPE"
- };
- if (value < sizeof vector_kinds / sizeof vector_kinds[0])
- *value_name = vector_kinds[value];
- return true;
- }
-
- return false;
-}
-
-__typeof (ppc_check_object_attribute)
- ppc64_check_object_attribute
- __attribute__ ((alias ("ppc_check_object_attribute")));
diff --git a/backends/ppc_auxv.c b/backends/ppc_auxv.c
deleted file mode 100644
index 1c0a5cf..0000000
--- a/backends/ppc_auxv.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/* i386 specific auxv handling.
- Copyright (C) 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#define BACKEND ppc_
-#include "libebl_CPU.h"
-
-int
-EBLHOOK(auxv_info) (GElf_Xword a_type, const char **name, const char **format)
-{
- if (a_type != AT_HWCAP)
- return 0;
-
- *name = "HWCAP";
- *format = "b"
- "ppcle\0" "truele\0" "3\0" "4\0" "5\0" "6\0" "7\0" "8\0" "9\0"
- "power6x\0" "dfp\0" "pa6t\0" "arch_2_05\0"
- "ic_snoop\0" "smt\0" "booke\0" "cellbe\0"
- "power5+\0" "power5\0" "power4\0" "notb\0"
- "efpdouble\0" "efpsingle\0" "spe\0" "ucache\0"
- "4xxmac\0" "mmu\0" "fpu\0" "altivec\0"
- "ppc601\0" "ppc64\0" "ppc32\0" "\0";
- return 1;
-}
-
-__typeof (ppc_auxv_info) ppc64_auxv_info
- __attribute__ ((alias ("ppc_auxv_info")));
diff --git a/backends/ppc_corenote.c b/backends/ppc_corenote.c
deleted file mode 100644
index af0c46a..0000000
--- a/backends/ppc_corenote.c
+++ /dev/null
@@ -1,131 +0,0 @@
-/* PowerPC specific core note handling.
- Copyright (C) 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <elf.h>
-#include <inttypes.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <sys/time.h>
-
-#ifndef BITS
-# define BITS 32
-# define BACKEND ppc_
-#else
-# define BITS 64
-# define BACKEND ppc64_
-#endif
-#include "libebl_CPU.h"
-
-static const Ebl_Register_Location prstatus_regs[] =
- {
-#define GR(at, n, dwreg) \
- { .offset = at * BITS/8, .regno = dwreg, .count = n, .bits = BITS }
-
- GR (0, 32, 0), /* r0-r31 */
- /* 32, 1, nip */
- GR (33, 1, 66), /* msr */
- /* 34, 1, orig_gpr3 */
- GR (35, 1, 109), /* ctr */
- GR (36, 1, 108), /* lr */
- GR (37, 1, 101), /* xer */
- GR (38, 1, 64), /* cr */
- GR (39, 1, 100), /* mq */
- /* 40, 1, trap */
- GR (41, 1, 119), /* dar */
- GR (42, 1, 118), /* dsisr */
-
-#undef GR
- };
-#define PRSTATUS_REGS_SIZE (BITS / 8 * 48)
-
-static const Ebl_Register_Location fpregset_regs[] =
- {
- { .offset = 0, .regno = 32, .count = 32, .bits = 64 }, /* f0-f31 */
- { .offset = 32 * 8 + 4, .regno = 65, .count = 1, .bits = 32 } /* fpscr */
- };
-#define FPREGSET_SIZE (33 * 8)
-
-static const Ebl_Register_Location altivec_regs[] =
- {
- /* vr0-vr31 */
- { .offset = 0, .regno = 1124, .count = 32, .bits = 128 },
- /* vscr XXX 67 is an unofficial assignment */
- { .offset = 32 * 16, .regno = 67, .count = 1, .bits = 32, .pad = 12 },
- /* vrsave */
- { .offset = 33 * 16, .regno = 356, .count = 1, .bits = 32, .pad = 12 }
- };
-
-static const Ebl_Register_Location spe_regs[] =
- {
- /* evr0-evr31
- { .offset = 0, .regno = ???, .count = 32, .bits = 32 },
- * acc *
- { .offset = 32 * 4, .regno = ???, .count = 1, .bits = 64 }, */
- /* spefscr */
- { .offset = 34 * 4, .regno = 612, .count = 1, .bits = 32 }
- };
-
-#define EXTRA_NOTES \
- EXTRA_REGSET (NT_PPC_VMX, 34 * 16, altivec_regs) \
- EXTRA_REGSET (NT_PPC_SPE, 35 * 4, spe_regs)
-
-#if BITS == 32
-# define ULONG uint32_t
-# define ALIGN_ULONG 4
-# define TYPE_ULONG ELF_T_WORD
-# define TYPE_LONG ELF_T_SWORD
-#else
-# define ULONG uint64_t
-# define ALIGN_ULONG 8
-# define TYPE_ULONG ELF_T_XWORD
-# define TYPE_LONG ELF_T_SXWORD
-#endif
-#define PID_T int32_t
-#define UID_T uint32_t
-#define GID_T uint32_t
-#define ALIGN_PID_T 4
-#define ALIGN_UID_T 4
-#define ALIGN_GID_T 4
-#define TYPE_PID_T ELF_T_SWORD
-#define TYPE_UID_T ELF_T_WORD
-#define TYPE_GID_T ELF_T_WORD
-
-#define PRSTATUS_REGSET_ITEMS \
- { \
- .name = "nip", .type = ELF_T_ADDR, .format = 'x', \
- .offset = offsetof (struct EBLHOOK(prstatus), pr_reg[32]), \
- .group = "register" \
- }, \
- { \
- .name = "orig_gpr3", .type = TYPE_LONG, .format = 'd', \
- .offset = offsetof (struct EBLHOOK(prstatus), pr_reg[34]), \
- .group = "register" \
- }
-
-#include "linux-core-note.c"
diff --git a/backends/ppc_init.c b/backends/ppc_init.c
deleted file mode 100644
index 523c658..0000000
--- a/backends/ppc_init.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Initialization of PPC specific backend library.
- Copyright (C) 2004, 2005, 2006, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#define BACKEND ppc_
-#define RELOC_PREFIX R_PPC_
-#include "libebl_CPU.h"
-
-/* This defines the common reloc hooks based on ppc_reloc.def. */
-#include "common-reloc.c"
-
-
-const char *
-ppc_init (elf, machine, eh, ehlen)
- Elf *elf __attribute__ ((unused));
- GElf_Half machine __attribute__ ((unused));
- Ebl *eh;
- size_t ehlen;
-{
- /* Check whether the Elf_BH object has a sufficent size. */
- if (ehlen < sizeof (Ebl))
- return NULL;
-
- /* We handle it. */
- eh->name = "PowerPC";
- ppc_init_reloc (eh);
- HOOK (eh, reloc_simple_type);
- HOOK (eh, dynamic_tag_name);
- HOOK (eh, dynamic_tag_check);
- HOOK (eh, check_special_symbol);
- HOOK (eh, bss_plt_p);
- HOOK (eh, return_value_location);
- HOOK (eh, register_info);
- HOOK (eh, syscall_abi);
- HOOK (eh, core_note);
- HOOK (eh, auxv_info);
- HOOK (eh, check_object_attribute);
-
- return MODVERSION;
-}
diff --git a/backends/ppc_regs.c b/backends/ppc_regs.c
deleted file mode 100644
index 637c25d..0000000
--- a/backends/ppc_regs.c
+++ /dev/null
@@ -1,197 +0,0 @@
-/* Register names and numbers for PowerPC DWARF.
- Copyright (C) 2005, 2006, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <string.h>
-#include <dwarf.h>
-
-#define BACKEND ppc_
-#include "libebl_CPU.h"
-
-ssize_t
-ppc_register_info (Ebl *ebl __attribute__ ((unused)),
- int regno, char *name, size_t namelen,
- const char **prefix, const char **setname,
- int *bits, int *type)
-{
- if (name == NULL)
- return 1156;
-
- if (regno < 0 || regno > 1155 || namelen < 8)
- return -1;
-
- *prefix = NULL;
- *bits = ebl->machine == EM_PPC64 ? 64 : 32;
- *type = (regno < 32 ? DW_ATE_signed
- : regno < 64 ? DW_ATE_float : DW_ATE_unsigned);
-
- if (regno < 32 || regno == 64 || regno == 66)
- *setname = "integer";
- else if (regno < 64 || regno == 65)
- {
- *setname = "FPU";
- if (ebl->machine != EM_PPC64 && regno < 64)
- *bits = 64;
- }
- else if (regno == 67 || regno == 356 || regno == 612 || regno >= 1124)
- {
- *setname = "vector";
- *bits = regno >= 1124 ? 128 : 32;
- }
- else
- *setname = "privileged";
-
- switch (regno)
- {
- case 0 ... 9:
- name[0] = 'r';
- name[1] = regno + '0';
- namelen = 2;
- break;
-
- case 10 ... 31:
- name[0] = 'r';
- name[1] = regno / 10 + '0';
- name[2] = regno % 10 + '0';
- namelen = 3;
- break;
-
- case 32 + 0 ... 32 + 9:
- name[0] = 'f';
- name[1] = (regno - 32) + '0';
- namelen = 2;
- break;
-
- case 32 + 10 ... 32 + 31:
- name[0] = 'f';
- name[1] = (regno - 32) / 10 + '0';
- name[2] = (regno - 32) % 10 + '0';
- namelen = 3;
- break;
-
- case 64:
- return stpcpy (name, "cr") + 1 - name;
- case 65:
- return stpcpy (name, "fpscr") + 1 - name;
- case 66:
- return stpcpy (name, "msr") + 1 - name;
- case 67: /* XXX unofficial assignment */
- return stpcpy (name, "vscr") + 1 - name;
-
- case 70 + 0 ... 70 + 9:
- name[0] = 's';
- name[1] = 'r';
- name[2] = (regno - 70) + '0';
- namelen = 3;
- break;
-
- case 70 + 10 ... 70 + 15:
- name[0] = 's';
- name[1] = 'r';
- name[2] = (regno - 70) / 10 + '0';
- name[3] = (regno - 70) % 10 + '0';
- namelen = 4;
- break;
-
- case 101:
- return stpcpy (name, "xer") + 1 - name;
- case 108:
- return stpcpy (name, "lr") + 1 - name;
- case 109:
- return stpcpy (name, "ctr") + 1 - name;
- case 118:
- return stpcpy (name, "dsisr") + 1 - name;
- case 119:
- return stpcpy (name, "dar") + 1 - name;
- case 122:
- return stpcpy (name, "dec") + 1 - name;
- case 356:
- return stpcpy (name, "vrsave") + 1 - name;
- case 612:
- return stpcpy (name, "spefscr") + 1 - name;
- case 100:
- if (*bits == 32)
- return stpcpy (name, "mq") + 1 - name;
-
- case 102 ... 107:
- name[0] = 's';
- name[1] = 'p';
- name[2] = 'r';
- name[3] = (regno - 100) + '0';
- namelen = 4;
- break;
-
- case 110 ... 117:
- case 120 ... 121:
- case 123 ... 199:
- name[0] = 's';
- name[1] = 'p';
- name[2] = 'r';
- name[3] = (regno - 100) / 10 + '0';
- name[4] = (regno - 100) % 10 + '0';
- namelen = 5;
- break;
-
- case 200 ... 355:
- case 357 ... 611:
- case 613 ... 999:
- name[0] = 's';
- name[1] = 'p';
- name[2] = 'r';
- name[3] = (regno - 100) / 100 + '0';
- name[4] = ((regno - 100) % 100 / 10) + '0';
- name[5] = (regno - 100) % 10 + '0';
- namelen = 6;
- break;
-
- case 1124 + 0 ... 1124 + 9:
- name[0] = 'v';
- name[1] = 'r';
- name[2] = (regno - 1124) + '0';
- namelen = 3;
- break;
-
- case 1124 + 10 ... 1124 + 31:
- name[0] = 'v';
- name[1] = 'r';
- name[2] = (regno - 1124) / 10 + '0';
- name[3] = (regno - 1124) % 10 + '0';
- namelen = 4;
- break;
-
- default:
- *setname = NULL;
- return 0;
- }
-
- name[namelen++] = '\0';
- return namelen;
-}
-
-__typeof (ppc_register_info)
- ppc64_register_info __attribute__ ((alias ("ppc_register_info")));
diff --git a/backends/ppc_reloc.def b/backends/ppc_reloc.def
deleted file mode 100644
index 974c24f..0000000
--- a/backends/ppc_reloc.def
+++ /dev/null
@@ -1,134 +0,0 @@
-/* List the relocation types for ppc. -*- C -*-
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-/* NAME, REL|EXEC|DYN */
-
-RELOC_TYPE (NONE, 0)
-RELOC_TYPE (ADDR32, REL|EXEC|DYN)
-RELOC_TYPE (ADDR24, REL)
-RELOC_TYPE (ADDR16, REL|EXEC|DYN) /* note 1 */
-RELOC_TYPE (ADDR16_LO, REL|EXEC|DYN) /* note 1 */
-RELOC_TYPE (ADDR16_HI, REL|EXEC|DYN) /* note 1 */
-RELOC_TYPE (ADDR16_HA, REL|EXEC|DYN) /* note 1 */
-RELOC_TYPE (ADDR14, REL|EXEC|DYN) /* note 1 */
-RELOC_TYPE (ADDR14_BRTAKEN, REL|EXEC|DYN) /* note 1 */
-RELOC_TYPE (ADDR14_BRNTAKEN, REL|EXEC|DYN) /* note 1 */
-RELOC_TYPE (REL24, REL|EXEC|DYN) /* note 1 */
-RELOC_TYPE (REL14, REL|EXEC|DYN) /* note 1 */
-RELOC_TYPE (REL14_BRTAKEN, REL|EXEC|DYN) /* note 1 */
-RELOC_TYPE (REL14_BRNTAKEN, REL|EXEC|DYN) /* note 1 */
-RELOC_TYPE (GOT16, REL)
-RELOC_TYPE (GOT16_LO, REL)
-RELOC_TYPE (GOT16_HI, REL)
-RELOC_TYPE (GOT16_HA, REL)
-RELOC_TYPE (PLTREL24, REL)
-RELOC_TYPE (COPY, EXEC)
-RELOC_TYPE (GLOB_DAT, EXEC|DYN)
-RELOC_TYPE (JMP_SLOT, EXEC|DYN)
-RELOC_TYPE (RELATIVE, EXEC|DYN)
-RELOC_TYPE (LOCAL24PC, REL)
-RELOC_TYPE (UADDR32, REL|EXEC|DYN)
-RELOC_TYPE (UADDR16, REL) /* note 2 */
-RELOC_TYPE (REL32, REL|EXEC|DYN)
-RELOC_TYPE (PLT32, REL)
-RELOC_TYPE (PLTREL32, REL)
-RELOC_TYPE (PLT16_LO, REL)
-RELOC_TYPE (PLT16_HI, REL)
-RELOC_TYPE (PLT16_HA, REL)
-RELOC_TYPE (SDAREL16, REL)
-RELOC_TYPE (SECTOFF, REL)
-RELOC_TYPE (SECTOFF_LO, REL)
-RELOC_TYPE (SECTOFF_HI, REL)
-RELOC_TYPE (SECTOFF_HA, REL)
-RELOC_TYPE (TLS, REL)
-RELOC_TYPE (DTPMOD32, EXEC|DYN) /* note 2 */
-RELOC_TYPE (TPREL16, REL) /* note 2 */
-RELOC_TYPE (TPREL16_LO, REL) /* note 2 */
-RELOC_TYPE (TPREL16_HI, REL) /* note 2 */
-RELOC_TYPE (TPREL16_HA, REL) /* note 2 */
-RELOC_TYPE (TPREL32, EXEC|DYN) /* note 2 */
-RELOC_TYPE (DTPREL16, REL)
-RELOC_TYPE (DTPREL16_LO, REL)
-RELOC_TYPE (DTPREL16_HI, REL)
-RELOC_TYPE (DTPREL16_HA, REL)
-RELOC_TYPE (DTPREL32, EXEC|DYN) /* note 2 */
-RELOC_TYPE (GOT_TLSGD16, REL)
-RELOC_TYPE (GOT_TLSGD16_LO, REL)
-RELOC_TYPE (GOT_TLSGD16_HI, REL)
-RELOC_TYPE (GOT_TLSGD16_HA, REL)
-RELOC_TYPE (GOT_TLSLD16, REL)
-RELOC_TYPE (GOT_TLSLD16_LO, REL)
-RELOC_TYPE (GOT_TLSLD16_HI, REL)
-RELOC_TYPE (GOT_TLSLD16_HA, REL)
-RELOC_TYPE (GOT_TPREL16, REL)
-RELOC_TYPE (GOT_TPREL16_LO, REL)
-RELOC_TYPE (GOT_TPREL16_HI, REL)
-RELOC_TYPE (GOT_TPREL16_HA, REL)
-RELOC_TYPE (GOT_DTPREL16, REL)
-RELOC_TYPE (GOT_DTPREL16_LO, REL)
-RELOC_TYPE (GOT_DTPREL16_HI, REL)
-RELOC_TYPE (GOT_DTPREL16_HA, REL)
-RELOC_TYPE (EMB_NADDR32, REL) /* note 3 */
-RELOC_TYPE (EMB_NADDR16, REL) /* note 3 */
-RELOC_TYPE (EMB_NADDR16_LO, REL) /* note 3 */
-RELOC_TYPE (EMB_NADDR16_HI, REL) /* note 3 */
-RELOC_TYPE (EMB_NADDR16_HA, REL) /* note 3 */
-RELOC_TYPE (EMB_SDAI16, REL) /* note 3 */
-RELOC_TYPE (EMB_SDA2I16, REL) /* note 3 */
-RELOC_TYPE (EMB_SDA2REL, REL) /* note 3 */
-RELOC_TYPE (EMB_SDA21, REL) /* note 3 */
-RELOC_TYPE (EMB_MRKREF, REL) /* note 3 */
-RELOC_TYPE (EMB_RELSEC16, REL) /* note 3 */
-RELOC_TYPE (EMB_RELST_LO, REL) /* note 3 */
-RELOC_TYPE (EMB_RELST_HI, REL) /* note 3 */
-RELOC_TYPE (EMB_RELST_HA, REL) /* note 3 */
-RELOC_TYPE (EMB_BIT_FLD, REL) /* note 3 */
-RELOC_TYPE (EMB_RELSDA, REL) /* note 3 */
-RELOC_TYPE (DIAB_SDA21_LO, REL) /* note 3 */
-RELOC_TYPE (DIAB_SDA21_HI, REL) /* note 3 */
-RELOC_TYPE (DIAB_SDA21_HA, REL) /* note 3 */
-RELOC_TYPE (DIAB_RELSDA_LO, REL) /* note 3 */
-RELOC_TYPE (DIAB_RELSDA_HI, REL) /* note 3 */
-RELOC_TYPE (DIAB_RELSDA_HA, REL) /* note 3 */
-RELOC_TYPE (REL16, REL) /* note 2 */
-RELOC_TYPE (REL16_LO, REL) /* note 2 */
-RELOC_TYPE (REL16_HI, REL) /* note 2 */
-RELOC_TYPE (REL16_HA, REL) /* note 2 */
-RELOC_TYPE (TOC16, REL) /* note 2 */
-
-/* Notes from Alan Modra:
-
- 1) These relocs should not really appear in EXEC or DYN, but they do,
- primarily due to improper assembly or non-pic shared objects. They
- will cause TEXTREL to be set. I marked them in the table, because
- numerous people seem to think non-pic shared libs are a good idea.
-
- 2) As for (1), these relocs can appear anywhere with improper
- assembler. I should probably make ld reject anything other than the
- cases allowed in this table. Not seen in the wild, so I haven't
- added the other cases.
-
- 3) Not used in SYSV4
-*/
diff --git a/backends/ppc_retval.c b/backends/ppc_retval.c
deleted file mode 100644
index fa0e303..0000000
--- a/backends/ppc_retval.c
+++ /dev/null
@@ -1,162 +0,0 @@
-/* Function return value location for Linux/PPC ABI.
- Copyright (C) 2005, 2006, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <dwarf.h>
-
-#define BACKEND ppc_
-#include "libebl_CPU.h"
-
-
-/* This is the SVR4 ELF ABI convention, but AIX and Linux do not use it. */
-#define SVR4_STRUCT_RETURN 0
-
-
-/* r3, or pair r3, r4. */
-static const Dwarf_Op loc_intreg[] =
- {
- { .atom = DW_OP_reg3 }, { .atom = DW_OP_piece, .number = 4 },
- { .atom = DW_OP_reg4 }, { .atom = DW_OP_piece, .number = 4 },
- };
-#define nloc_intreg 1
-#define nloc_intregpair 4
-
-/* f1. */
-static const Dwarf_Op loc_fpreg[] =
- {
- { .atom = DW_OP_regx, .number = 33 }
- };
-#define nloc_fpreg 1
-
-/* The return value is a structure and is actually stored in stack space
- passed in a hidden argument by the caller. But, the compiler
- helpfully returns the address of that space in r3. */
-static const Dwarf_Op loc_aggregate[] =
- {
- { .atom = DW_OP_breg3, .number = 0 }
- };
-#define nloc_aggregate 1
-
-
-int
-ppc_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp)
-{
- /* Start with the function's type, and get the DW_AT_type attribute,
- which is the type of the return value. */
-
- Dwarf_Attribute attr_mem;
- Dwarf_Attribute *attr = dwarf_attr_integrate (functypedie, DW_AT_type,
- &attr_mem);
- if (attr == NULL)
- /* The function has no return value, like a `void' function in C. */
- return 0;
-
- Dwarf_Die die_mem;
- Dwarf_Die *typedie = dwarf_formref_die (attr, &die_mem);
- int tag = dwarf_tag (typedie);
-
- /* Follow typedefs and qualifiers to get to the actual type. */
- while (tag == DW_TAG_typedef
- || tag == DW_TAG_const_type || tag == DW_TAG_volatile_type
- || tag == DW_TAG_restrict_type || tag == DW_TAG_mutable_type)
- {
- attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem);
- typedie = dwarf_formref_die (attr, &die_mem);
- tag = dwarf_tag (typedie);
- }
-
- Dwarf_Word size;
- switch (tag)
- {
- case -1:
- return -1;
-
- case DW_TAG_subrange_type:
- if (! dwarf_hasattr_integrate (typedie, DW_AT_byte_size))
- {
- attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem);
- typedie = dwarf_formref_die (attr, &die_mem);
- tag = dwarf_tag (typedie);
- }
- /* Fall through. */
-
- case DW_TAG_base_type:
- case DW_TAG_enumeration_type:
- case DW_TAG_pointer_type:
- case DW_TAG_ptr_to_member_type:
- if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_byte_size,
- &attr_mem), &size) != 0)
- {
- if (tag == DW_TAG_pointer_type || tag == DW_TAG_ptr_to_member_type)
- size = 4;
- else
- return -1;
- }
- if (size <= 8)
- {
- if (tag == DW_TAG_base_type)
- {
- Dwarf_Word encoding;
- if (dwarf_formudata (dwarf_attr_integrate (typedie,
- DW_AT_encoding,
- &attr_mem),
- &encoding) != 0)
- return -1;
- if (encoding == DW_ATE_float)
- {
- *locp = loc_fpreg;
- return nloc_fpreg;
- }
- }
- intreg:
- *locp = loc_intreg;
- return size <= 4 ? nloc_intreg : nloc_intregpair;
- }
-
- aggregate:
- *locp = loc_aggregate;
- return nloc_aggregate;
-
- case DW_TAG_structure_type:
- case DW_TAG_class_type:
- case DW_TAG_union_type:
- case DW_TAG_array_type:
- if (SVR4_STRUCT_RETURN
- && dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_byte_size,
- &attr_mem), &size) == 0
- && size > 0 && size <= 8)
- goto intreg;
- goto aggregate;
- }
-
- /* XXX We don't have a good way to return specific errors from ebl calls.
- This value means we do not understand the type, but it is well-formed
- DWARF and might be valid. */
- return -2;
-}
diff --git a/backends/ppc_symbol.c b/backends/ppc_symbol.c
deleted file mode 100644
index 9540a3e..0000000
--- a/backends/ppc_symbol.c
+++ /dev/null
@@ -1,158 +0,0 @@
-/* PPC specific symbolic name handling.
- Copyright (C) 2004, 2005, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <elf.h>
-#include <stddef.h>
-#include <string.h>
-
-#define BACKEND ppc_
-#include "libebl_CPU.h"
-
-
-/* Check for the simple reloc types. */
-Elf_Type
-ppc_reloc_simple_type (Ebl *ebl __attribute__ ((unused)), int type)
-{
- switch (type)
- {
- case R_PPC_ADDR32:
- case R_PPC_UADDR32:
- return ELF_T_WORD;
- case R_PPC_UADDR16:
- return ELF_T_HALF;
- default:
- return ELF_T_NUM;
- }
-}
-
-
-const char *
-ppc_dynamic_tag_name (int64_t tag, char *buf __attribute__ ((unused)),
- size_t len __attribute__ ((unused)))
-{
- switch (tag)
- {
- case DT_PPC_GOT:
- return "PPC_GOT";
- default:
- break;
- }
- return NULL;
-}
-
-
-bool
-ppc_dynamic_tag_check (int64_t tag)
-{
- return tag == DT_PPC_GOT;
-}
-
-
-/* Look for DT_PPC_GOT. */
-static bool
-find_dyn_got (Elf *elf, GElf_Ehdr *ehdr, GElf_Addr *addr)
-{
- for (int i = 0; i < ehdr->e_phnum; ++i)
- {
- GElf_Phdr phdr_mem;
- GElf_Phdr *phdr = gelf_getphdr (elf, i, &phdr_mem);
- if (phdr == NULL || phdr->p_type != PT_DYNAMIC)
- continue;
-
- Elf_Scn *scn = gelf_offscn (elf, phdr->p_offset);
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
- Elf_Data *data = elf_getdata (scn, NULL);
- if (shdr != NULL && shdr->sh_type == SHT_DYNAMIC && data != NULL)
- for (unsigned int j = 0; j < shdr->sh_size / shdr->sh_entsize; ++j)
- {
- GElf_Dyn dyn_mem;
- GElf_Dyn *dyn = gelf_getdyn (data, j, &dyn_mem);
- if (dyn != NULL && dyn->d_tag == DT_PPC_GOT)
- {
- *addr = dyn->d_un.d_ptr;
- return true;
- }
- }
-
- /* There is only one PT_DYNAMIC entry. */
- break;
- }
-
- return false;
-}
-
-
-/* Check whether given symbol's st_value and st_size are OK despite failing
- normal checks. */
-bool
-ppc_check_special_symbol (Elf *elf, GElf_Ehdr *ehdr, const GElf_Sym *sym,
- const char *name, const GElf_Shdr *destshdr)
-{
- if (name == NULL)
- return false;
-
- if (strcmp (name, "_GLOBAL_OFFSET_TABLE_") == 0)
- {
- /* In -msecure-plt mode, DT_PPC_GOT is present and must match. */
- GElf_Addr gotaddr;
- if (find_dyn_got (elf, ehdr, &gotaddr))
- return sym->st_value == gotaddr;
-
- /* In -mbss-plt mode, any place in the section is valid. */
- return true;
- }
-
- const char *sname = elf_strptr (elf, ehdr->e_shstrndx, destshdr->sh_name);
- if (sname == NULL)
- return false;
-
- if (strcmp (name, "_SDA_BASE_") == 0)
- return (strcmp (sname, ".sdata") == 0
- && sym->st_value == destshdr->sh_addr + 0x8000
- && sym->st_size == 0);
-
- if (strcmp (name, "_SDA2_BASE_") == 0)
- return (strcmp (sname, ".sdata2") == 0
- && sym->st_value == destshdr->sh_addr + 0x8000
- && sym->st_size == 0);
-
- return false;
-}
-
-
-/* Check if backend uses a bss PLT in this file. */
-bool
-ppc_bss_plt_p (Elf *elf, GElf_Ehdr *ehdr)
-{
- GElf_Addr addr;
- return ! find_dyn_got (elf, ehdr, &addr);
-}
diff --git a/backends/ppc_syscall.c b/backends/ppc_syscall.c
deleted file mode 100644
index 23eff81..0000000
--- a/backends/ppc_syscall.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Linux/PPC system call ABI in DWARF register numbers.
- Copyright (C) 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#define BACKEND ppc_
-#include "libebl_CPU.h"
-
-int
-ppc_syscall_abi (Ebl *ebl __attribute__ ((unused)),
- int *sp, int *pc, int *callno, int args[6])
-{
- *sp = 1;
- *pc = -1;
- *callno = 0;
- args[0] = 3;
- args[1] = 4;
- args[2] = 5;
- args[3] = 6;
- args[4] = 7;
- args[5] = 8;
- return 0;
-}
-
-__typeof (ppc_syscall_abi)
-ppc64_syscall_abi __attribute__ ((alias ("ppc_syscall_abi")));
diff --git a/backends/s390_init.c b/backends/s390_init.c
deleted file mode 100644
index 05ffce6..0000000
--- a/backends/s390_init.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Initialization of S/390 specific backend library.
- Copyright (C) 2005, 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#define BACKEND s390_
-#define RELOC_PREFIX R_390_
-#include "libebl_CPU.h"
-
-/* This defines the common reloc hooks based on arm_reloc.def. */
-#include "common-reloc.c"
-
-
-const char *
-s390_init (elf, machine, eh, ehlen)
- Elf *elf __attribute__ ((unused));
- GElf_Half machine __attribute__ ((unused));
- Ebl *eh;
- size_t ehlen;
-{
- /* Check whether the Elf_BH object has a sufficent size. */
- if (ehlen < sizeof (Ebl))
- return NULL;
-
- /* We handle it. */
- eh->name = "IBM S/390";
- s390_init_reloc (eh);
- HOOK (eh, reloc_simple_type);
- HOOK (eh, register_info);
- HOOK (eh, return_value_location);
-
- /* Only the 64-bit format uses the incorrect hash table entry size. */
- if (eh->class == ELFCLASS64)
- eh->sysvhash_entrysize = sizeof (Elf64_Xword);
-
- return MODVERSION;
-}
diff --git a/backends/s390_regs.c b/backends/s390_regs.c
deleted file mode 100644
index 7e8113a..0000000
--- a/backends/s390_regs.c
+++ /dev/null
@@ -1,143 +0,0 @@
-/* Register names and numbers for S/390 DWARF.
- Copyright (C) 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <string.h>
-#include <dwarf.h>
-
-#define BACKEND s390_
-#include "libebl_CPU.h"
-
-
-/*
-zseries (64)
-
-0-15 gpr0-gpr15 x
-16-19 fpr[0246]
-20-24 fpr[13578]
-25-27 fpr1[024]
-28 fpr9
-29-31 fpr1[135]
-32-47 cr0-cr15 x
-48-63 ar0-ar15 x
-64 psw_mask
-65 psw_address
-*/
-
-
-ssize_t
-s390_register_info (Ebl *ebl __attribute__ ((unused)),
- int regno, char *name, size_t namelen,
- const char **prefix, const char **setname,
- int *bits, int *type)
-{
- if (name == NULL)
- return 66;
-
- if (regno < 0 || regno > 65 || namelen < 7)
- return -1;
-
- *prefix = "%";
-
- *bits = ebl->class == ELFCLASS64 ? 64 : 32;
- *type = DW_ATE_unsigned;
- if (regno < 16)
- {
- *setname = "integer";
- *type = DW_ATE_signed;
- }
- else if (regno < 32)
- {
- *setname = "FPU";
- *type = DW_ATE_float;
- *bits = 64;
- }
- else if (regno < 48 || regno > 63)
- *setname = "control";
- else
- {
- *setname = "access";
- *bits = 32;
- }
-
- switch (regno)
- {
- case 0 ... 9:
- name[0] = 'r';
- name[1] = regno + '0';
- namelen = 2;
- break;
-
- case 10 ... 15:
- name[0] = 'r';
- name[1] = '1';
- name[2] = regno - 10 + '0';
- namelen = 3;
- break;
-
- case 16 ... 31:
- name[0] = 'f';
- regno = (regno & 8) | ((regno & 4) >> 2) | ((regno & 3) << 1);
- namelen = 1;
- if (regno >= 10)
- {
- regno -= 10;
- name[namelen++] = '1';
- }
- name[namelen++] = regno + '0';
- break;
-
- case 32 + 0 ... 32 + 9:
- case 48 + 0 ... 48 + 9:
- name[0] = regno < 48 ? 'c' : 'a';
- name[1] = (regno & 15) + '0';
- namelen = 2;
- break;
-
- case 32 + 10 ... 32 + 15:
- case 48 + 10 ... 48 + 15:
- name[0] = regno < 48 ? 'c' : 'a';
- name[1] = '1';
- name[2] = (regno & 15) - 10 + '0';
- namelen = 3;
- break;
-
- case 64:
- return stpcpy (name, "pswm") + 1 - name;
- case 65:
- *type = DW_ATE_address;
- return stpcpy (name, "pswa") + 1 - name;
-
- default:
- *setname = NULL;
- return 0;
- }
-
- name[namelen++] = '\0';
- return namelen;
-}
diff --git a/backends/s390_reloc.def b/backends/s390_reloc.def
deleted file mode 100644
index b2bc922..0000000
--- a/backends/s390_reloc.def
+++ /dev/null
@@ -1,88 +0,0 @@
-/* List the relocation types for s390. -*- C -*-
- Copyright (C) 2005, 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-/* NAME, REL|EXEC|DYN */
-
-RELOC_TYPE (NONE, 0)
-RELOC_TYPE (8, REL|EXEC|DYN)
-RELOC_TYPE (12, REL|EXEC|DYN)
-RELOC_TYPE (16, REL|EXEC|DYN)
-RELOC_TYPE (32, REL|EXEC|DYN)
-RELOC_TYPE (PC32, REL|EXEC|DYN)
-RELOC_TYPE (GOT12, REL)
-RELOC_TYPE (GOT32, REL)
-RELOC_TYPE (PLT32, REL)
-RELOC_TYPE (COPY, EXEC)
-RELOC_TYPE (GLOB_DAT, EXEC|DYN)
-RELOC_TYPE (JMP_SLOT, EXEC|DYN)
-RELOC_TYPE (RELATIVE, EXEC|DYN)
-RELOC_TYPE (GOTOFF32, REL)
-RELOC_TYPE (GOTPC, REL)
-RELOC_TYPE (GOT16, REL)
-RELOC_TYPE (PC16, REL|EXEC|DYN)
-RELOC_TYPE (PC16DBL, REL|EXEC|DYN)
-RELOC_TYPE (PLT16DBL, REL)
-RELOC_TYPE (PC32DBL, REL|EXEC|DYN)
-RELOC_TYPE (PLT32DBL, REL)
-RELOC_TYPE (GOTPCDBL, REL)
-RELOC_TYPE (64, REL|EXEC|DYN)
-RELOC_TYPE (PC64, REL|EXEC|DYN)
-RELOC_TYPE (GOT64, REL)
-RELOC_TYPE (PLT64, REL)
-RELOC_TYPE (GOTENT, REL)
-RELOC_TYPE (GOTOFF16, REL)
-RELOC_TYPE (GOTOFF64, REL)
-RELOC_TYPE (GOTPLT12, REL)
-RELOC_TYPE (GOTPLT16, REL)
-RELOC_TYPE (GOTPLT32, REL)
-RELOC_TYPE (GOTPLT64, REL)
-RELOC_TYPE (GOTPLTENT, REL)
-RELOC_TYPE (PLTOFF16, REL)
-RELOC_TYPE (PLTOFF32, REL)
-RELOC_TYPE (PLTOFF64, REL)
-RELOC_TYPE (TLS_LOAD, REL)
-RELOC_TYPE (TLS_GDCALL, REL)
-RELOC_TYPE (TLS_LDCALL, REL)
-RELOC_TYPE (TLS_GD32, REL)
-RELOC_TYPE (TLS_GD64, REL)
-RELOC_TYPE (TLS_GOTIE12, REL)
-RELOC_TYPE (TLS_GOTIE32, REL)
-RELOC_TYPE (TLS_GOTIE64, REL)
-RELOC_TYPE (TLS_LDM32, REL)
-RELOC_TYPE (TLS_LDM64, REL)
-RELOC_TYPE (TLS_IE32, REL)
-RELOC_TYPE (TLS_IE64, REL)
-RELOC_TYPE (TLS_IEENT, REL)
-RELOC_TYPE (TLS_LE32, REL)
-RELOC_TYPE (TLS_LE64, REL)
-RELOC_TYPE (TLS_LDO32, REL)
-RELOC_TYPE (TLS_LDO64, REL)
-RELOC_TYPE (TLS_DTPMOD, DYN)
-RELOC_TYPE (TLS_DTPOFF, DYN)
-RELOC_TYPE (TLS_TPOFF, DYN)
-RELOC_TYPE (20, REL|EXEC|DYN)
-RELOC_TYPE (GOT20, REL)
-RELOC_TYPE (GOTPLT20, REL)
-RELOC_TYPE (TLS_GOTIE20, REL)
diff --git a/backends/s390_retval.c b/backends/s390_retval.c
deleted file mode 100644
index 15bd97b..0000000
--- a/backends/s390_retval.c
+++ /dev/null
@@ -1,156 +0,0 @@
-/* Function return value location for S/390 ABI.
- Copyright (C) 2006, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <dwarf.h>
-
-#define BACKEND s390_
-#include "libebl_CPU.h"
-
-
-/* %r2, or pair %r2, %r3. */
-static const Dwarf_Op loc_intreg[] =
- {
- { .atom = DW_OP_reg2 }, { .atom = DW_OP_piece, .number = 4 },
- { .atom = DW_OP_reg3 }, { .atom = DW_OP_piece, .number = 4 },
- };
-#define nloc_intreg 1
-#define nloc_intregpair 4
-
-/* %f0. */
-static const Dwarf_Op loc_fpreg[] =
- {
- { .atom = DW_OP_reg16 },
- };
-#define nloc_fpreg 1
-
-/* The return value is a structure and is actually stored in stack space
- passed in a hidden argument by the caller. But, the compiler
- helpfully returns the address of that space in %r2. */
-static const Dwarf_Op loc_aggregate[] =
- {
- { .atom = DW_OP_breg2, .number = 0 }
- };
-#define nloc_aggregate 1
-
-
-int
-s390_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp)
-{
- /* Start with the function's type, and get the DW_AT_type attribute,
- which is the type of the return value. */
-
- Dwarf_Attribute attr_mem;
- Dwarf_Attribute *attr = dwarf_attr_integrate (functypedie, DW_AT_type,
- &attr_mem);
- if (attr == NULL)
- /* The function has no return value, like a `void' function in C. */
- return 0;
-
- Dwarf_Die die_mem;
- Dwarf_Die *typedie = dwarf_formref_die (attr, &die_mem);
- int tag = dwarf_tag (typedie);
-
- /* Follow typedefs and qualifiers to get to the actual type. */
- while (tag == DW_TAG_typedef
- || tag == DW_TAG_const_type || tag == DW_TAG_volatile_type
- || tag == DW_TAG_restrict_type || tag == DW_TAG_mutable_type)
- {
- attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem);
- typedie = dwarf_formref_die (attr, &die_mem);
- tag = dwarf_tag (typedie);
- }
-
- Dwarf_Word size;
- switch (tag)
- {
- case -1:
- return -1;
-
- case DW_TAG_subrange_type:
- if (! dwarf_hasattr_integrate (typedie, DW_AT_byte_size))
- {
- attr = dwarf_attr (typedie, DW_AT_type, &attr_mem);
- typedie = dwarf_formref_die (attr, &die_mem);
- tag = dwarf_tag (typedie);
- }
- /* Fall through. */
-
- case DW_TAG_base_type:
- case DW_TAG_enumeration_type:
- case DW_TAG_pointer_type:
- case DW_TAG_ptr_to_member_type:
- {
- Dwarf_Die cudie;
- uint8_t asize;
- if (dwarf_diecu (typedie, &cudie, &asize, NULL) == NULL)
- return -1;
-
- if (dwarf_formudata (dwarf_attr (typedie, DW_AT_byte_size,
- &attr_mem), &size) != 0)
- {
- if (tag == DW_TAG_pointer_type || tag == DW_TAG_ptr_to_member_type)
- size = asize;
- else
- return -1;
- }
- if (tag == DW_TAG_base_type)
- {
- Dwarf_Word encoding;
- if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_encoding,
- &attr_mem),
- &encoding) != 0)
- return -1;
- if (encoding == DW_ATE_float && size <= 8)
- {
- *locp = loc_fpreg;
- return nloc_fpreg;
- }
- }
- if (size <= 8)
- {
- *locp = loc_intreg;
- return size <= asize ? nloc_intreg : nloc_intregpair;
- }
- }
- /* Fall through. */
-
- case DW_TAG_structure_type:
- case DW_TAG_class_type:
- case DW_TAG_union_type:
- case DW_TAG_array_type:
- *locp = loc_aggregate;
- return nloc_aggregate;
- }
-
- /* XXX We don't have a good way to return specific errors from ebl calls.
- This value means we do not understand the type, but it is well-formed
- DWARF and might be valid. */
- return -2;
-}
diff --git a/backends/s390_symbol.c b/backends/s390_symbol.c
deleted file mode 100644
index 98c7653..0000000
--- a/backends/s390_symbol.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* S/390-specific symbolic name handling.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <elf.h>
-#include <stddef.h>
-
-#define BACKEND s390_
-#include "libebl_CPU.h"
-
-/* Check for the simple reloc types. */
-Elf_Type
-s390_reloc_simple_type (Ebl *ebl __attribute__ ((unused)), int type)
-{
- switch (type)
- {
- case R_390_64:
- return ELF_T_SXWORD;
- case R_390_32:
- return ELF_T_SWORD;
- case R_390_16:
- return ELF_T_HALF;
- case R_390_8:
- return ELF_T_BYTE;
- default:
- return ELF_T_NUM;
- }
-}
diff --git a/backends/sh_init.c b/backends/sh_init.c
deleted file mode 100644
index 02502ab..0000000
--- a/backends/sh_init.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Initialization of SH specific backend library.
- Copyright (C) 2000, 2001, 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#define BACKEND sh_
-#define RELOC_PREFIX R_SH_
-#include "libebl_CPU.h"
-
-/* This defines the common reloc hooks based on sh_reloc.def. */
-#include "common-reloc.c"
-
-
-const char *
-sh_init (elf, machine, eh, ehlen)
- Elf *elf __attribute__ ((unused));
- GElf_Half machine __attribute__ ((unused));
- Ebl *eh;
- size_t ehlen;
-{
- /* Check whether the Elf_BH object has a sufficent size. */
- if (ehlen < sizeof (Ebl))
- return NULL;
-
- /* We handle it. */
- eh->name = "Hitachi SH";
- sh_init_reloc (eh);
- HOOK (eh, reloc_simple_type);
-
- return MODVERSION;
-}
diff --git a/backends/sh_reloc.def b/backends/sh_reloc.def
deleted file mode 100644
index e4f2442..0000000
--- a/backends/sh_reloc.def
+++ /dev/null
@@ -1,64 +0,0 @@
-/* List the relocation types for SH. -*- C -*-
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-/* NAME, REL|EXEC|DYN */
-
-RELOC_TYPE (NONE, 0)
-RELOC_TYPE (DIR32, REL|DYN)
-RELOC_TYPE (REL32, REL|DYN)
-RELOC_TYPE (DIR8WPN, REL)
-RELOC_TYPE (IND12W, REL)
-RELOC_TYPE (DIR8WPL, REL)
-RELOC_TYPE (DIR8WPZ, REL)
-RELOC_TYPE (DIR8BP, REL)
-RELOC_TYPE (DIR8W, REL)
-RELOC_TYPE (DIR8L, REL)
-RELOC_TYPE (SWITCH16, REL)
-RELOC_TYPE (SWITCH32, REL)
-RELOC_TYPE (USES, REL)
-RELOC_TYPE (COUNT, REL)
-RELOC_TYPE (ALIGN, REL)
-RELOC_TYPE (CODE, REL)
-RELOC_TYPE (DATA, REL)
-RELOC_TYPE (LABEL, REL)
-RELOC_TYPE (SWITCH8, REL)
-RELOC_TYPE (GNU_VTINHERIT, REL)
-RELOC_TYPE (GNU_VTENTRY, REL)
-RELOC_TYPE (TLS_GD_32, REL)
-RELOC_TYPE (TLS_LD_32, REL)
-RELOC_TYPE (TLS_LDO_32, REL)
-RELOC_TYPE (TLS_IE_32, REL)
-RELOC_TYPE (TLS_LE_32, REL)
-RELOC_TYPE (TLS_DTPMOD32, DYN)
-RELOC_TYPE (TLS_DTPOFF32, DYN)
-RELOC_TYPE (TLS_TPOFF32, DYN)
-RELOC_TYPE (GOT32, REL)
-RELOC_TYPE (PLT32, REL)
-RELOC_TYPE (COPY, EXEC)
-RELOC_TYPE (GLOB_DAT, EXEC|DYN)
-RELOC_TYPE (JMP_SLOT, EXEC|DYN)
-RELOC_TYPE (RELATIVE, EXEC|DYN)
-RELOC_TYPE (GOTOFF, REL)
-RELOC_TYPE (GOTPC, REL)
diff --git a/backends/sh_symbol.c b/backends/sh_symbol.c
deleted file mode 100644
index 26000cc..0000000
--- a/backends/sh_symbol.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* SH specific relocation handling.
- Copyright (C) 2000, 2001, 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <elf.h>
-#include <stddef.h>
-
-#define BACKEND sh_
-#include "libebl_CPU.h"
-
-
-/* Return true if the symbol type is that referencing the GOT. */
-bool
-sh_gotpc_reloc_check (Elf *elf __attribute__ ((unused)), int type)
-{
- return type == R_SH_GOTPC;
-}
-
-/* Check for the simple reloc types. */
-Elf_Type
-sh_reloc_simple_type (Ebl *ebl __attribute__ ((unused)), int type)
-{
- switch (type)
- {
- case R_SH_DIR32:
- return ELF_T_WORD;
- default:
- return ELF_T_NUM;
- }
-}
diff --git a/backends/sparc64_corenote.c b/backends/sparc64_corenote.c
deleted file mode 100644
index cef6431..0000000
--- a/backends/sparc64_corenote.c
+++ /dev/null
@@ -1,2 +0,0 @@
-#define BITS 64
-#include "sparc_corenote.c"
diff --git a/backends/sparc_auxv.c b/backends/sparc_auxv.c
deleted file mode 100644
index a22b3ce..0000000
--- a/backends/sparc_auxv.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/* SPARC-specific auxv handling.
- Copyright (C) 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#define BACKEND sparc_
-#include "libebl_CPU.h"
-
-int
-EBLHOOK(auxv_info) (GElf_Xword a_type, const char **name, const char **format)
-{
- if (a_type != AT_HWCAP)
- return 0;
-
- *name = "HWCAP";
- *format = "b"
- "flush\0" "stbar\0" "swap\0" "muldiv\0" "v9\0" "ultra3\0" "v9v\0" "\0";
- return 1;
-}
diff --git a/backends/sparc_corenote.c b/backends/sparc_corenote.c
deleted file mode 100644
index 55aed8f..0000000
--- a/backends/sparc_corenote.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/* PowerPC specific core note handling.
- Copyright (C) 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <elf.h>
-#include <inttypes.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <sys/time.h>
-
-#ifndef BITS
-# define BITS 32
-# define BACKEND sparc_
-#else
-# define BITS 64
-# define BACKEND sparc64_
-#endif
-#include "libebl_CPU.h"
-
-#define GR(at, n, dwreg) \
- { .offset = at * BITS/8, .regno = dwreg, .count = n, .bits = BITS }
-
-static const Ebl_Register_Location prstatus_regs[] =
- {
- GR (0, 32, 0), /* %g0-%g7, %o0-%o7, %i0-%i7 */
-#if BITS == 32
- GR (32, 1, 65), /* %psr */
- GR (33, 2, 68), /* %pc, %npc */
- GR (35, 1, 64), /* %y */
- GR (36, 1, 66), /* %wim, %tbr */
-#else
- GR (32, 1, 82), /* %state */
- GR (33, 2, 80), /* %pc, %npc */
- GR (35, 1, 85), /* %y */
-#endif
- };
-#define PRSTATUS_REGS_SIZE (BITS / 8 * (32 + (BITS == 32 ? 6 : 4)))
-
-static const Ebl_Register_Location fpregset_regs[] =
- {
-#if BITS == 32
- GR (0, 32, 32), /* %f0-%f31 */
- /* padding word */
- GR (33, 1, 70), /* %fsr */
- /* qcnt, q_entrysize, en, q, padding */
-# define FPREGSET_SIZE (34 * 4 + 4 + 64 * 4 + 4)
-#else
- GR (0, 32, 32), /* %f0-%f31 */
- GR (32, 1, 83), /* %fsr */
- /* 33, 1, %gsr */
- GR (34, 1, 84), /* %fprs */
-# define FPREGSET_SIZE (35 * 8)
-#endif
- };
-
-#if BITS == 32
-# define ULONG uint32_t
-# define ALIGN_ULONG 4
-# define TYPE_ULONG ELF_T_WORD
-# define TYPE_LONG ELF_T_SWORD
-# define UID_T uint16_t
-# define GID_T uint16_t
-# define ALIGN_UID_T 2
-# define ALIGN_GID_T 2
-# define TYPE_UID_T ELF_T_HALF
-# define TYPE_GID_T ELF_T_HALF
-#else
-# define ULONG uint64_t
-# define ALIGN_ULONG 8
-# define TYPE_ULONG ELF_T_XWORD
-# define TYPE_LONG ELF_T_SXWORD
-# define UID_T uint32_t
-# define GID_T uint32_t
-# define ALIGN_UID_T 4
-# define ALIGN_GID_T 4
-# define TYPE_UID_T ELF_T_WORD
-# define TYPE_GID_T ELF_T_WORD
-# define SUSECONDS_HALF 1
-#endif
-#define PID_T int32_t
-#define ALIGN_PID_T 4
-#define TYPE_PID_T ELF_T_SWORD
-
-#include "linux-core-note.c"
diff --git a/backends/sparc_init.c b/backends/sparc_init.c
deleted file mode 100644
index 856bd48..0000000
--- a/backends/sparc_init.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/* Initialization of SPARC specific backend library.
- Copyright (C) 2002, 2005, 2006, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#define BACKEND sparc_
-#define RELOC_PREFIX R_SPARC_
-#include "libebl_CPU.h"
-
-/* This defines the common reloc hooks based on sparc_reloc.def. */
-#include "common-reloc.c"
-
-extern __typeof (EBLHOOK (core_note)) sparc64_core_note attribute_hidden;
-
-const char *
-sparc_init (elf, machine, eh, ehlen)
- Elf *elf __attribute__ ((unused));
- GElf_Half machine __attribute__ ((unused));
- Ebl *eh;
- size_t ehlen;
-{
- /* Check whether the Elf_BH object has a sufficent size. */
- if (ehlen < sizeof (Ebl))
- return NULL;
-
- /* We handle it. */
- if (machine == EM_SPARCV9)
- eh->name = "SPARC v9";
- else if (machine == EM_SPARC32PLUS)
- eh->name = "SPARC v8+";
- else
- eh->name = "SPARC";
- sparc_init_reloc (eh);
- HOOK (eh, reloc_simple_type);
- HOOK (eh, machine_flag_check);
- HOOK (eh, check_special_section);
- HOOK (eh, symbol_type_name);
- HOOK (eh, dynamic_tag_name);
- HOOK (eh, dynamic_tag_check);
- if (eh->class == ELFCLASS64)
- eh->core_note = sparc64_core_note;
- else
- HOOK (eh, core_note);
- HOOK (eh, auxv_info);
- HOOK (eh, register_info);
- HOOK (eh, return_value_location);
-
- return MODVERSION;
-}
diff --git a/backends/sparc_regs.c b/backends/sparc_regs.c
deleted file mode 100644
index b3e9e20..0000000
--- a/backends/sparc_regs.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/* Register names and numbers for SPARC DWARF.
- Copyright (C) 2005, 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <string.h>
-#include <dwarf.h>
-
-#define BACKEND sparc_
-#include "libebl_CPU.h"
-
-ssize_t
-sparc_register_info (Ebl *ebl,
- int regno, char *name, size_t namelen,
- const char **prefix, const char **setname,
- int *bits, int *type)
-{
- const int nfp = 32 + (ebl->machine == EM_SPARC ? 0 : 16);
- const int nspec = ebl->machine == EM_SPARC ? 8 : 6;
-
- if (name == NULL)
- return 32 + nfp + nspec;
-
- if (regno < 0 || regno >= 32 + nfp + nspec || namelen < 6)
- return -1;
-
- *bits = ebl->machine == EM_SPARC ? 32 : 64;
- *type = DW_ATE_signed;
-
- *prefix = "%";
-
- if (regno >= 32 + nfp)
- {
- regno -= 32 + nfp;
- static const char names[2][8][6] =
- {
- { "y", "psr", "wim", "tbr", "pc", "npc", "fsr", "csr" }, /* v8 */
- { "pc", "npc", "state", "fsr", "fprs", "y" } /* v9 */
- };
- *setname = "control";
- *type = DW_ATE_unsigned;
- if ((ebl->machine != EM_SPARC ? 0 : 4) + 1 - (unsigned int) regno <= 1)
- *type = DW_ATE_address;
- return stpncpy (name, names[ebl->machine != EM_SPARC][regno],
- namelen) + 1 - name;
- }
-
- if (regno < 32)
- {
- *setname = "integer";
- name[0] = "goli"[regno >> 3];
- name[1] = (regno & 7) + '0';
- namelen = 2;
- if ((regno & 8) && (regno & 7) == 6)
- *type = DW_ATE_address;
- }
- else
- {
- *setname = "FPU";
- *type = DW_ATE_float;
-
- regno -= 32;
- if (regno >= 32)
- regno = 32 + 2 * (regno - 32);
- else
- *bits = 32;
-
- name[0] = 'f';
- if (regno < 10)
- {
- name[1] = regno + '0';
- namelen = 2;
- }
- else
- {
- name[1] = regno / 10 + '0';
- name[2] = regno % 10 + '0';
- namelen = 3;
- }
- }
-
- name[namelen++] = '\0';
- return namelen;
-}
diff --git a/backends/sparc_reloc.def b/backends/sparc_reloc.def
deleted file mode 100644
index de65097..0000000
--- a/backends/sparc_reloc.def
+++ /dev/null
@@ -1,106 +0,0 @@
-/* List the relocation types for sparc. -*- C -*-
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-/* NAME, REL|EXEC|DYN */
-
-RELOC_TYPE (NONE, 0)
-RELOC_TYPE (8, 0)
-RELOC_TYPE (16, 0)
-RELOC_TYPE (32, 0)
-RELOC_TYPE (DISP8, 0)
-RELOC_TYPE (DISP16, 0)
-RELOC_TYPE (DISP32, 0)
-RELOC_TYPE (WDISP30, 0)
-RELOC_TYPE (WDISP22, 0)
-RELOC_TYPE (HI22, 0)
-RELOC_TYPE (22, 0)
-RELOC_TYPE (13, 0)
-RELOC_TYPE (LO10, 0)
-RELOC_TYPE (GOT10, 0)
-RELOC_TYPE (GOT13, 0)
-RELOC_TYPE (GOT22, 0)
-RELOC_TYPE (PC10, 0)
-RELOC_TYPE (PC22, 0)
-RELOC_TYPE (WPLT30, 0)
-RELOC_TYPE (COPY, EXEC)
-RELOC_TYPE (GLOB_DAT, EXEC|DYN)
-RELOC_TYPE (JMP_SLOT, EXEC|DYN)
-RELOC_TYPE (RELATIVE, EXEC|DYN)
-RELOC_TYPE (UA32, 0)
-RELOC_TYPE (PLT32, 0)
-RELOC_TYPE (HIPLT22, 0)
-RELOC_TYPE (LOPLT10, 0)
-RELOC_TYPE (PCPLT32, 0)
-RELOC_TYPE (PCPLT22, 0)
-RELOC_TYPE (PCPLT10, 0)
-RELOC_TYPE (10, 0)
-RELOC_TYPE (11, 0)
-RELOC_TYPE (64, 0)
-RELOC_TYPE (OLO10, 0)
-RELOC_TYPE (HH22, 0)
-RELOC_TYPE (HM10, 0)
-RELOC_TYPE (LM22, 0)
-RELOC_TYPE (PC_HH22, 0)
-RELOC_TYPE (PC_HM10, 0)
-RELOC_TYPE (PC_LM22, 0)
-RELOC_TYPE (WDISP16, 0)
-RELOC_TYPE (WDISP19, 0)
-RELOC_TYPE (7, 0)
-RELOC_TYPE (5, 0)
-RELOC_TYPE (6, 0)
-RELOC_TYPE (DISP64, 0)
-RELOC_TYPE (PLT64, 0)
-RELOC_TYPE (HIX22, 0)
-RELOC_TYPE (LOX10, 0)
-RELOC_TYPE (H44, 0)
-RELOC_TYPE (M44, 0)
-RELOC_TYPE (L44, 0)
-RELOC_TYPE (REGISTER, 0)
-RELOC_TYPE (UA64, 0)
-RELOC_TYPE (UA16, 0)
-RELOC_TYPE (TLS_GD_HI22, 0)
-RELOC_TYPE (TLS_GD_LO10, 0)
-RELOC_TYPE (TLS_GD_ADD, 0)
-RELOC_TYPE (TLS_GD_CALL, 0)
-RELOC_TYPE (TLS_LDM_HI22, 0)
-RELOC_TYPE (TLS_LDM_LO10, 0)
-RELOC_TYPE (TLS_LDM_ADD, 0)
-RELOC_TYPE (TLS_LDM_CALL, 0)
-RELOC_TYPE (TLS_LDO_HIX22, 0)
-RELOC_TYPE (TLS_LDO_LOX10, 0)
-RELOC_TYPE (TLS_LDO_ADD, 0)
-RELOC_TYPE (TLS_IE_HI22, 0)
-RELOC_TYPE (TLS_IE_LO10, 0)
-RELOC_TYPE (TLS_IE_LD, 0)
-RELOC_TYPE (TLS_IE_LDX, 0)
-RELOC_TYPE (TLS_IE_ADD, 0)
-RELOC_TYPE (TLS_LE_HIX22, 0)
-RELOC_TYPE (TLS_LE_LOX10, 0)
-RELOC_TYPE (TLS_DTPMOD32, 0)
-RELOC_TYPE (TLS_DTPMOD64, 0)
-RELOC_TYPE (TLS_DTPOFF32, 0)
-RELOC_TYPE (TLS_DTPOFF64, 0)
-RELOC_TYPE (TLS_TPOFF32, 0)
-RELOC_TYPE (TLS_TPOFF64, 0)
diff --git a/backends/sparc_retval.c b/backends/sparc_retval.c
deleted file mode 100644
index 7cd3827..0000000
--- a/backends/sparc_retval.c
+++ /dev/null
@@ -1,156 +0,0 @@
-/* Function return value location for SPARC.
- Copyright (C) 2006, 2007 Red Hat, Inc.
-
- This program is Open Source software; you can redistribute it and/or
- modify it under the terms of the Open Software License version 1.0 as
- published by the Open Source Initiative.
-
- You should have received a copy of the Open Software License along
- with this program; if not, you may obtain a copy of the Open Software
- License version 1.0 from http://www.opensource.org/licenses/osl.php or
- by writing the Open Source Initiative c/o Lawrence Rosen, Esq.,
- 3001 King Ranch Road, Ukiah, CA 95482. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <dwarf.h>
-
-#define BACKEND sparc_
-#include "libebl_CPU.h"
-
-
-/* %o0, or pair %o0, %o1. */
-static const Dwarf_Op loc_intreg[] =
- {
- { .atom = DW_OP_reg8 }, { .atom = DW_OP_piece, .number = 4 },
- { .atom = DW_OP_reg9 }, { .atom = DW_OP_piece, .number = 4 },
- };
-#define nloc_intreg 1
-#define nloc_intregpair 4
-
-/* %f0 or pair %f0, %f1, or quad %f0..%f3. */
-static const Dwarf_Op loc_fpreg[] =
- {
- { .atom = DW_OP_regx, .number = 32 }, { .atom = DW_OP_piece, .number = 4 },
- { .atom = DW_OP_regx, .number = 33 }, { .atom = DW_OP_piece, .number = 4 },
- { .atom = DW_OP_regx, .number = 34 }, { .atom = DW_OP_piece, .number = 4 },
- { .atom = DW_OP_regx, .number = 35 }, { .atom = DW_OP_piece, .number = 4 },
- };
-#define nloc_fpreg 1
-#define nloc_fpregpair 4
-#define nloc_fpregquad 8
-
-/* The return value is a structure and is actually stored in stack space
- passed in a hidden argument by the caller. But, the compiler
- helpfully returns the address of that space in %o0. */
-static const Dwarf_Op loc_aggregate[] =
- {
- { .atom = DW_OP_breg8, .number = 0 }
- };
-#define nloc_aggregate 1
-
-int
-sparc_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp)
-{
- /* Start with the function's type, and get the DW_AT_type attribute,
- which is the type of the return value. */
-
- Dwarf_Attribute attr_mem;
- Dwarf_Attribute *attr = dwarf_attr_integrate (functypedie, DW_AT_type,
- &attr_mem);
- if (attr == NULL)
- /* The function has no return value, like a `void' function in C. */
- return 0;
-
- Dwarf_Die die_mem;
- Dwarf_Die *typedie = dwarf_formref_die (attr, &die_mem);
- int tag = dwarf_tag (typedie);
-
- /* Follow typedefs and qualifiers to get to the actual type. */
- while (tag == DW_TAG_typedef
- || tag == DW_TAG_const_type || tag == DW_TAG_volatile_type
- || tag == DW_TAG_restrict_type || tag == DW_TAG_mutable_type)
- {
- attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem);
- typedie = dwarf_formref_die (attr, &die_mem);
- tag = dwarf_tag (typedie);
- }
-
- Dwarf_Word size;
- switch (tag)
- {
- case -1:
- return -1;
-
- case DW_TAG_subrange_type:
- if (! dwarf_hasattr_integrate (typedie, DW_AT_byte_size))
- {
- attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem);
- typedie = dwarf_formref_die (attr, &die_mem);
- tag = dwarf_tag (typedie);
- }
- /* Fall through. */
-
- case DW_TAG_base_type:
- case DW_TAG_enumeration_type:
- case DW_TAG_pointer_type:
- case DW_TAG_ptr_to_member_type:
- if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_byte_size,
- &attr_mem), &size) != 0)
- {
- uint8_t asize;
- Dwarf_Die cudie;
- if ((tag == DW_TAG_pointer_type || tag == DW_TAG_ptr_to_member_type)
- && dwarf_diecu (typedie, &cudie, &asize, NULL) != NULL)
- size = asize;
- else
- return -1;
- }
- if (tag == DW_TAG_base_type)
- {
- Dwarf_Word encoding;
- if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_encoding,
- &attr_mem),
- &encoding) != 0)
- return -1;
- if (encoding == DW_ATE_float)
- {
- *locp = loc_fpreg;
- if (size <= 4)
- return nloc_fpreg;
- if (size <= 8)
- return nloc_fpregpair;
- if (size <= 16)
- return nloc_fpregquad;
- }
- }
- if (size <= 8)
- {
- intreg:
- *locp = loc_intreg;
- return size <= 4 ? nloc_intreg : nloc_intregpair;
- }
-
- aggregate:
- *locp = loc_aggregate;
- return nloc_aggregate;
-
- case DW_TAG_structure_type:
- case DW_TAG_class_type:
- case DW_TAG_union_type:
- case DW_TAG_array_type:
- if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_byte_size,
- &attr_mem), &size) == 0
- && size > 0 && size <= 8)
- goto intreg;
- goto aggregate;
- }
-
- /* XXX We don't have a good way to return specific errors from ebl calls.
- This value means we do not understand the type, but it is well-formed
- DWARF and might be valid. */
- return -2;
-}
diff --git a/backends/sparc_symbol.c b/backends/sparc_symbol.c
deleted file mode 100644
index 7896e9f..0000000
--- a/backends/sparc_symbol.c
+++ /dev/null
@@ -1,145 +0,0 @@
-/* SPARC specific symbolic name handling.
- Copyright (C) 2002, 2003, 2005, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Jakub Jelinek <jakub@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <elf.h>
-#include <stddef.h>
-
-#define BACKEND sparc_
-#include "libebl_CPU.h"
-
-/* Check for the simple reloc types. */
-Elf_Type
-sparc_reloc_simple_type (Ebl *ebl __attribute__ ((unused)), int type)
-{
- switch (type)
- {
- case R_SPARC_8:
- return ELF_T_BYTE;
- case R_SPARC_16:
- case R_SPARC_UA16:
- return ELF_T_HALF;
- case R_SPARC_32:
- case R_SPARC_UA32:
- return ELF_T_WORD;
- case R_SPARC_64:
- case R_SPARC_UA64:
- return ELF_T_XWORD;
- default:
- return ELF_T_NUM;
- }
-}
-
-/* Check whether machine flags are valid. */
-bool
-sparc_machine_flag_check (GElf_Word flags)
-{
- return ((flags &~ (EF_SPARCV9_MM
- | EF_SPARC_LEDATA
- | EF_SPARC_32PLUS
- | EF_SPARC_SUN_US1
- | EF_SPARC_SUN_US3)) == 0);
-}
-
-bool
-sparc_check_special_section (Ebl *ebl,
- int ndx __attribute__ ((unused)),
- const GElf_Shdr *shdr,
- const char *sname __attribute__ ((unused)))
-{
- if ((shdr->sh_flags & (SHF_WRITE | SHF_EXECINSTR))
- == (SHF_WRITE | SHF_EXECINSTR))
- {
- /* This is ordinarily flagged, but is valid for a PLT on SPARC.
-
- Look for the SHT_DYNAMIC section and the DT_PLTGOT tag in it.
- Its d_ptr should match the .plt section's sh_addr. */
-
- Elf_Scn *scn = NULL;
- while ((scn = elf_nextscn (ebl->elf, scn)) != NULL)
- {
- GElf_Shdr scn_shdr;
- if (likely (gelf_getshdr (scn, &scn_shdr) != NULL)
- && scn_shdr.sh_type == SHT_DYNAMIC
- && scn_shdr.sh_entsize != 0)
- {
- Elf_Data *data = elf_getdata (scn, NULL);
- if (data != NULL)
- for (size_t i = 0; i < data->d_size / scn_shdr.sh_entsize; ++i)
- {
- GElf_Dyn dyn;
- if (unlikely (gelf_getdyn (data, i, &dyn) == NULL))
- break;
- if (dyn.d_tag == DT_PLTGOT)
- return dyn.d_un.d_ptr == shdr->sh_addr;
- }
- break;
- }
- }
- }
-
- return false;
-}
-
-const char *
-sparc_symbol_type_name (int type,
- char *buf __attribute__ ((unused)),
- size_t len __attribute__ ((unused)))
-{
- switch (type)
- {
- case STT_SPARC_REGISTER:
- return "SPARC_REGISTER";
- }
- return NULL;
-}
-
-const char *
-sparc_dynamic_tag_name (int64_t tag,
- char *buf __attribute__ ((unused)),
- size_t len __attribute__ ((unused)))
-{
- switch (tag)
- {
- case DT_SPARC_REGISTER:
- return "SPARC_REGISTER";
- }
- return NULL;
-}
-
-bool
-sparc_dynamic_tag_check (int64_t tag)
-{
- switch (tag)
- {
- case DT_SPARC_REGISTER:
- return true;
- }
- return false;
-}
diff --git a/backends/x86_64_corenote.c b/backends/x86_64_corenote.c
deleted file mode 100644
index 552ac88..0000000
--- a/backends/x86_64_corenote.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/* x86-64 specific core note handling.
- Copyright (C) 2005, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <elf.h>
-#include <inttypes.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <sys/time.h>
-
-#define BACKEND x86_64_
-#include "libebl_CPU.h"
-
-
-static const Ebl_Register_Location prstatus_regs[] =
- {
-#define GR(at, n, dwreg) \
- { .offset = at * 8, .regno = dwreg, .count = n, .bits = 64 }
-#define SR(at, n, dwreg) \
- { .offset = at * 8, .regno = dwreg, .count = n, .bits = 16, .pad = 6 }
-
- GR (0, 1, 15), /* %r15 */
- GR (1, 1, 14), /* %r14 */
- GR (2, 1, 13), /* %r13 */
- GR (3, 1, 12), /* %r12 */
- GR (4, 1, 6), /* %rbp */
- GR (5, 1, 3), /* %rbx */
- GR (6, 1, 11), /* %r11 */
- GR (7, 1, 10), /* %r10 */
- GR (8, 1, 9), /* %r9 */
- GR (9, 1, 8), /* %r8 */
- GR (10,1, 0), /* %rax */
- GR (11,1, 2), /* %rcx */
- GR (12,1, 1), /* %rdx */
- GR (13,2, 4), /* %rsi-%rdi */
- /* 15,1, orig_rax */
- GR (16,1, 16), /* %rip */
- SR (17,1, 51), /* %cs */
- GR (18,1, 49), /* %rFLAGS */
- GR (19,1, 7), /* %rsp */
- SR (20,1, 52), /* %ss */
- GR (21,2, 58), /* %fs.base-%gs.base */
- SR (23,1, 53), /* %ds */
- SR (24,1, 50), /* %es */
- SR (25,2, 54), /* %fs-%gs */
-
-#undef GR
-#undef SR
- };
-#define PRSTATUS_REGS_SIZE (27 * 8)
-
-#define ULONG uint64_t
-#define PID_T int32_t
-#define UID_T uint32_t
-#define GID_T uint32_t
-#define ALIGN_ULONG 8
-#define ALIGN_PID_T 4
-#define ALIGN_UID_T 4
-#define ALIGN_GID_T 4
-#define TYPE_ULONG ELF_T_XWORD
-#define TYPE_PID_T ELF_T_SWORD
-#define TYPE_UID_T ELF_T_SWORD
-#define TYPE_GID_T ELF_T_SWORD
-
-#define PRSTATUS_REGSET_ITEMS \
- { \
- .name = "orig_rax", .type = ELF_T_SXWORD, .format = 'd', \
- .offset = offsetof (struct EBLHOOK(prstatus), pr_reg) + (8 * 15), \
- .group = "register" \
- }
-
-static const Ebl_Register_Location fpregset_regs[] =
- {
- { .offset = 0, .regno = 65, .count = 2, .bits = 16 }, /* fcw-fsw */
- { .offset = 24, .regno = 64, .count = 1, .bits = 32 }, /* mxcsr */
- { .offset = 32, .regno = 33, .count = 8, .bits = 80, .pad = 6 }, /* stN */
- { .offset = 32 + 128, .regno = 17, .count = 16, .bits = 128 }, /* xmm */
- };
-#define FPREGSET_SIZE 512
-
-#define EXTRA_NOTES EXTRA_NOTES_IOPERM
-
-#include "x86_corenote.c"
-#include "linux-core-note.c"
diff --git a/backends/x86_64_init.c b/backends/x86_64_init.c
deleted file mode 100644
index a2eaffa..0000000
--- a/backends/x86_64_init.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Initialization of x86-64 specific backend library.
- Copyright (C) 2002, 2005, 2006, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#define BACKEND x86_64_
-#define RELOC_PREFIX R_X86_64_
-#include "libebl_CPU.h"
-
-/* This defines the common reloc hooks based on x86_64_reloc.def. */
-#include "common-reloc.c"
-
-const char *
-x86_64_init (elf, machine, eh, ehlen)
- Elf *elf __attribute__ ((unused));
- GElf_Half machine __attribute__ ((unused));
- Ebl *eh;
- size_t ehlen;
-{
- /* Check whether the Elf_BH object has a sufficent size. */
- if (ehlen < sizeof (Ebl))
- return NULL;
-
- /* We handle it. */
- eh->name = "AMD x86-64";
- x86_64_init_reloc (eh);
- HOOK (eh, reloc_simple_type);
- HOOK (eh, core_note);
- HOOK (eh, return_value_location);
- HOOK (eh, register_info);
- HOOK (eh, syscall_abi);
- HOOK (eh, auxv_info);
- HOOK (eh, disasm);
-
- return MODVERSION;
-}
diff --git a/backends/x86_64_regs.c b/backends/x86_64_regs.c
deleted file mode 100644
index 8eb0d33..0000000
--- a/backends/x86_64_regs.c
+++ /dev/null
@@ -1,182 +0,0 @@
-/* Register names and numbers for x86-64 DWARF.
- Copyright (C) 2005, 2006, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <dwarf.h>
-#include <string.h>
-
-#define BACKEND x86_64_
-#include "libebl_CPU.h"
-
-ssize_t
-x86_64_register_info (Ebl *ebl __attribute__ ((unused)),
- int regno, char *name, size_t namelen,
- const char **prefix, const char **setname,
- int *bits, int *type)
-{
- if (name == NULL)
- return 67;
-
- if (regno < 0 || regno > 66 || namelen < 7)
- return -1;
-
- *prefix = "%";
- *bits = 64;
- *type = DW_ATE_unsigned;
- if (regno < 17)
- {
- *setname = "integer";
- *type = DW_ATE_signed;
- }
- else if (regno < 33)
- {
- *setname = "SSE";
- *bits = 128;
- }
- else if (regno < 41)
- {
- *setname = "x87";
- *type = DW_ATE_float;
- *bits = 80;
- }
- else if (regno < 49)
- *setname = "MMX";
- else if (regno > 49 && regno < 60)
- {
- *setname = "segment";
- *bits = 16;
- }
- else
- *setname = "control";
-
- switch (regno)
- {
- static const char baseregs[][2] =
- {
- "ax", "dx", "cx", "bx", "si", "di", "bp", "sp"
- };
-
- case 6 ... 7:
- *type = DW_ATE_address;
- case 0 ... 5:
- name[0] = 'r';
- name[1] = baseregs[regno][0];
- name[2] = baseregs[regno][1];
- namelen = 3;
- break;
-
- case 8 ... 9:
- name[0] = 'r';
- name[1] = regno - 8 + '8';
- namelen = 2;
- break;
-
- case 10 ... 15:
- name[0] = 'r';
- name[1] = '1';
- name[2] = regno - 10 + '0';
- namelen = 3;
- break;
-
- case 16:
- *type = DW_ATE_address;
- name[0] = 'r';
- name[1] = 'i';
- name[2] = 'p';
- namelen = 3;
- break;
-
- case 17 ... 26:
- name[0] = 'x';
- name[1] = 'm';
- name[2] = 'm';
- name[3] = regno - 17 + '0';
- namelen = 4;
- break;
-
- case 27 ... 32:
- name[0] = 'x';
- name[1] = 'm';
- name[2] = 'm';
- name[3] = '1';
- name[4] = regno - 27 + '0';
- namelen = 5;
- break;
-
- case 33 ... 40:
- name[0] = 's';
- name[1] = 't';
- name[2] = regno - 33 + '0';
- namelen = 3;
- break;
-
- case 41 ... 48:
- name[0] = 'm';
- name[1] = 'm';
- name[2] = regno - 41 + '0';
- namelen = 3;
- break;
-
- case 50 ... 55:
- name[0] = "ecsdfg"[regno - 50];
- name[1] = 's';
- namelen = 2;
- break;
-
- case 58 ... 59:
- *type = DW_ATE_address;
- *bits = 64;
- name[0] = regno - 58 + 'f';
- return stpcpy (&name[1], "s.base") + 1 - name;
-
- case 49:
- *setname = "integer";
- return stpcpy (name, "rflags") + 1 - name;
- case 62:
- return stpcpy (name, "tr") + 1 - name;
- case 63:
- return stpcpy (name, "ldtr") + 1 - name;
- case 64:
- return stpcpy (name, "mxcsr") + 1 - name;
-
- case 65 ... 66:
- *bits = 16;
- name[0] = 'f';
- name[1] = "cs"[regno - 65];
- name[2] = 'w';
- namelen = 3;
- break;
-
- default:
- return 0;
- }
-
- name[namelen++] = '\0';
- return namelen;
-}
diff --git a/backends/x86_64_reloc.def b/backends/x86_64_reloc.def
deleted file mode 100644
index e6c5a84..0000000
--- a/backends/x86_64_reloc.def
+++ /dev/null
@@ -1,51 +0,0 @@
-/* List the relocation types for x86-64. -*- C -*-
- Copyright (C) 2000, 2001, 2002, 2003, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-/* NAME, REL|EXEC|DYN */
-
-RELOC_TYPE (NONE, 0)
-RELOC_TYPE (64, REL|EXEC|DYN)
-RELOC_TYPE (PC32, REL|EXEC|DYN)
-RELOC_TYPE (GOT32, REL)
-RELOC_TYPE (PLT32, REL)
-RELOC_TYPE (COPY, EXEC)
-RELOC_TYPE (GLOB_DAT, EXEC|DYN)
-RELOC_TYPE (JUMP_SLOT, EXEC|DYN)
-RELOC_TYPE (RELATIVE, EXEC|DYN)
-RELOC_TYPE (GOTPCREL, REL)
-RELOC_TYPE (32, REL|EXEC|DYN)
-RELOC_TYPE (32S, REL)
-RELOC_TYPE (16, REL)
-RELOC_TYPE (PC16, REL)
-RELOC_TYPE (8, REL)
-RELOC_TYPE (PC8, REL)
-RELOC_TYPE (DTPMOD64, EXEC|DYN)
-RELOC_TYPE (DTPOFF64, EXEC|DYN)
-RELOC_TYPE (TPOFF64, EXEC|DYN)
-RELOC_TYPE (TLSGD, REL)
-RELOC_TYPE (TLSLD, REL)
-RELOC_TYPE (DTPOFF32, REL)
-RELOC_TYPE (GOTTPOFF, REL)
-RELOC_TYPE (TPOFF32, REL)
diff --git a/backends/x86_64_retval.c b/backends/x86_64_retval.c
deleted file mode 100644
index 3109431..0000000
--- a/backends/x86_64_retval.c
+++ /dev/null
@@ -1,203 +0,0 @@
-/* Function return value location for Linux/x86-64 ABI.
- Copyright (C) 2005, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <dwarf.h>
-
-#define BACKEND x86_64_
-#include "libebl_CPU.h"
-
-
-/* %rax, or pair %rax, %rdx. */
-static const Dwarf_Op loc_intreg[] =
- {
- { .atom = DW_OP_reg0 }, { .atom = DW_OP_piece, .number = 8 },
- { .atom = DW_OP_reg1 }, { .atom = DW_OP_piece, .number = 8 },
- };
-#define nloc_intreg 1
-#define nloc_intregpair 4
-
-/* %st(0), or pair %st(0), %st(1). */
-static const Dwarf_Op loc_x87reg[] =
- {
- { .atom = DW_OP_regx, .number = 33 },
- { .atom = DW_OP_piece, .number = 10 },
- { .atom = DW_OP_regx, .number = 34 },
- { .atom = DW_OP_piece, .number = 10 },
- };
-#define nloc_x87reg 1
-#define nloc_x87regpair 4
-
-/* %xmm0, or pair %xmm0, %xmm1. */
-static const Dwarf_Op loc_ssereg[] =
- {
- { .atom = DW_OP_reg17 }, { .atom = DW_OP_piece, .number = 16 },
- { .atom = DW_OP_reg18 }, { .atom = DW_OP_piece, .number = 16 },
- };
-#define nloc_ssereg 1
-#define nloc_sseregpair 4
-
-/* The return value is a structure and is actually stored in stack space
- passed in a hidden argument by the caller. But, the compiler
- helpfully returns the address of that space in %rax. */
-static const Dwarf_Op loc_aggregate[] =
- {
- { .atom = DW_OP_breg0, .number = 0 }
- };
-#define nloc_aggregate 1
-
-
-int
-x86_64_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp)
-{
- /* Start with the function's type, and get the DW_AT_type attribute,
- which is the type of the return value. */
-
- Dwarf_Attribute attr_mem;
- Dwarf_Attribute *attr = dwarf_attr_integrate (functypedie, DW_AT_type,
- &attr_mem);
- if (attr == NULL)
- /* The function has no return value, like a `void' function in C. */
- return 0;
-
- Dwarf_Die die_mem;
- Dwarf_Die *typedie = dwarf_formref_die (attr, &die_mem);
- int tag = dwarf_tag (typedie);
-
- /* Follow typedefs and qualifiers to get to the actual type. */
- while (tag == DW_TAG_typedef
- || tag == DW_TAG_const_type || tag == DW_TAG_volatile_type
- || tag == DW_TAG_restrict_type || tag == DW_TAG_mutable_type)
- {
- attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem);
- typedie = dwarf_formref_die (attr, &die_mem);
- tag = dwarf_tag (typedie);
- }
-
- Dwarf_Word size;
- switch (tag)
- {
- case -1:
- return -1;
-
- case DW_TAG_subrange_type:
- if (! dwarf_hasattr_integrate (typedie, DW_AT_byte_size))
- {
- attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem);
- typedie = dwarf_formref_die (attr, &die_mem);
- tag = dwarf_tag (typedie);
- }
- /* Fall through. */
-
- case DW_TAG_base_type:
- case DW_TAG_enumeration_type:
- case DW_TAG_pointer_type:
- case DW_TAG_ptr_to_member_type:
- if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_byte_size,
- &attr_mem), &size) != 0)
- {
- if (tag == DW_TAG_pointer_type || tag == DW_TAG_ptr_to_member_type)
- size = 8;
- else
- return -1;
- }
- if (tag == DW_TAG_base_type)
- {
- Dwarf_Word encoding;
- if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_encoding,
- &attr_mem),
- &encoding) != 0)
- return -1;
-
- switch (encoding)
- {
- case DW_ATE_complex_float:
- switch (size)
- {
- case 4 * 2: /* complex float */
- case 8 * 2: /* complex double */
- *locp = loc_ssereg;
- return nloc_sseregpair;
- case 16 * 2: /* complex long double */
- *locp = loc_x87reg;
- return nloc_x87regpair;
- }
- return -2;
-
- case DW_ATE_float:
- switch (size)
- {
- case 4: /* float */
- case 8: /* double */
- *locp = loc_ssereg;
- return nloc_ssereg;
- case 16: /* long double */
- /* XXX distinguish __float128, which is sseregpair?? */
- *locp = loc_x87reg;
- return nloc_x87reg;
- }
- return -2;
- }
- }
-
- intreg:
- *locp = loc_intreg;
- if (size <= 8)
- return nloc_intreg;
- if (size <= 16)
- return nloc_intregpair;
-
- large:
- *locp = loc_aggregate;
- return nloc_aggregate;
-
- case DW_TAG_structure_type:
- case DW_TAG_class_type:
- case DW_TAG_union_type:
- case DW_TAG_array_type:
- if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_byte_size,
- &attr_mem), &size) != 0)
- return -1;
- if (size > 16)
- goto large;
-
- /* XXX
- Must examine the fields in picayune ways to determine the
- actual answer. This will be right for small C structs
- containing integer types and similarly simple cases.
- */
-
- goto intreg;
- }
-
- /* XXX We don't have a good way to return specific errors from ebl calls.
- This value means we do not understand the type, but it is well-formed
- DWARF and might be valid. */
- return -2;
-}
diff --git a/backends/x86_64_symbol.c b/backends/x86_64_symbol.c
deleted file mode 100644
index 97fd15b..0000000
--- a/backends/x86_64_symbol.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* x86_64 specific symbolic name handling.
- Copyright (C) 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <elf.h>
-#include <stddef.h>
-
-#define BACKEND x86_64_
-#include "libebl_CPU.h"
-
-/* Check for the simple reloc types. */
-Elf_Type
-x86_64_reloc_simple_type (Ebl *ebl __attribute__ ((unused)), int type)
-{
- switch (type)
- {
- case R_X86_64_64:
- return ELF_T_XWORD;
- case R_X86_64_32:
- return ELF_T_WORD;
- case R_X86_64_32S:
- return ELF_T_SWORD;
- case R_X86_64_16:
- return ELF_T_HALF;
- case R_X86_64_8:
- return ELF_T_BYTE;
- default:
- return ELF_T_NUM;
- }
-}
diff --git a/backends/x86_64_syscall.c b/backends/x86_64_syscall.c
deleted file mode 100644
index c3db715..0000000
--- a/backends/x86_64_syscall.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/* Linux/x86-64 system call ABI in DWARF register numbers.
- Copyright (C) 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#define BACKEND x86_64_
-#include "libebl_CPU.h"
-
-int
-x86_64_syscall_abi (Ebl *ebl __attribute__ ((unused)),
- int *sp, int *pc, int *callno, int args[6])
-{
- *sp = 7; /* %rsp */
- *pc = 16; /* %rip */
- *callno = 0; /* %rax */
- args[0] = 5; /* %rdi */
- args[1] = 4; /* %rsi */
- args[2] = 1; /* %rdx */
- args[3] = 10; /* %r10 */
- args[4] = 8; /* %r8 */
- args[5] = 9; /* %r9 */
- return 0;
-}
diff --git a/backends/x86_corenote.c b/backends/x86_corenote.c
deleted file mode 100644
index 7d55067..0000000
--- a/backends/x86_corenote.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/* x86-specific core note handling, pieces common to x86-64 and i386.
- Copyright (C) 2005, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#define EXTRA_NOTES_IOPERM \
- case NT_386_IOPERM: \
- return ioperm_info (descsz, regs_offset, nregloc, reglocs, nitems, items);
-
-static int
-ioperm_info (GElf_Word descsz, GElf_Word *regs_offset,
- size_t *nregloc, const Ebl_Register_Location **reglocs,
- size_t *nitems, const Ebl_Core_Item **items)
-{
- static const Ebl_Core_Item ioperm_item =
- { .type = ELF_T_WORD, .format = 'b', .name = "ioperm" };
-
- if (descsz % 4 != 0)
- return 0;
-
- *regs_offset = 0;
- *nregloc = 0;
- *reglocs = NULL;
- *nitems = 1;
- *items = &ioperm_item;
- return 1;
-}
diff --git a/bionic-fixup/AndroidFixup.h b/bionic-fixup/AndroidFixup.h
deleted file mode 100644
index 037af0f..0000000
--- a/bionic-fixup/AndroidFixup.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright 2012, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef ANDROID_FIXUP_H
-#define ANDROID_FIXUP_H
-
-#include <stdio.h>
-#include <libgen.h> // for basename
-
-//#define _OFF_T_DEFINED_
-
-//#define off_t loff_t
-
-#ifndef MAX
-#define MAX(x,y) ((x) > (y) ? (x) : (y))
-#endif
-
-#ifndef MIN
-#define MIN(x,y) ((x) < (y) ? (x) : (y))
-#endif
-
-#ifndef powerof2
-#define powerof2(x) (((x - 1) & (x)) == 0)
-#endif
-
-/* workaround for canonicalize_file_name */
-#define canonicalize_file_name(path) realpath(path, NULL)
-
-/* workaround for open64 */
-#define open64(path, flags) open(path, ((flags) | O_LARGEFILE))
-
-/* no internalization */
-#define gettext(x) (x)
-
-/* _mempcpy and mempcpy */
-#ifndef __mempcpy
-#define __mempcpy(dest, src, n) mempcpy(dest, src, n)
-#endif
-
-#ifndef mempcpy
-#include <string.h>
-
-static inline void *mempcpy(void *dest, const void *src, size_t n)
-{
- char *ptr = memcpy(dest, src, n);
- return ptr + n;
-}
-#endif
-
-/* rawmemchr */
-static inline void *rawmemchr(const void *s, int c)
-{
- const unsigned char *ptr = s;
- while (1) {
- if (*ptr == c) return (void *) ptr;
- ptr++;
- }
-}
-
-/* workaround for stpcpy */
-static inline char *stpcpy(char *dst, const char *src)
-{
- while (*src) {
- *dst++ = *src++;
- }
- return dst;
-}
-
-/* forward declarations */
-char * dgettext (const char * domainname, const char * msgid);
-
-#endif /* ANDROID_FIXUP_H */
diff --git a/bionic-fixup/error.h b/bionic-fixup/error.h
deleted file mode 100644
index 1204eff..0000000
--- a/bionic-fixup/error.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2012, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef ELFUTILS_ERROR_H
-#define ELFUTILS_ERROR_H
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-
-static inline void __attribute__((noreturn))
-error(int status, int errnum, const char *fmt, ...)
-{
- va_list lst;
- va_start(lst, fmt);
- vfprintf(stderr, fmt, lst);
- fprintf(stderr, "error %d: %s\n", errnum, strerror(errno));
- va_end(lst);
- exit(status);
-}
-
-#endif /* ELFUTILS_ERROR_H */
diff --git a/bionic-fixup/libintl.h b/bionic-fixup/libintl.h
deleted file mode 100644
index da26bfa..0000000
--- a/bionic-fixup/libintl.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright 2012, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef ELFUTILS_LIBINTL_H
-#define ELFUTILS_LIBINTL_H
-
-/* intentionally blank */
-
-#endif /* ELFUTILS_LIBINTL_H */
diff --git a/bionic-fixup/stdio_ext.h b/bionic-fixup/stdio_ext.h
deleted file mode 100644
index 3acd20a..0000000
--- a/bionic-fixup/stdio_ext.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright 2012, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef ELFUTILS_BIONIC_FIXUP_STDIO_EXT_H
-#define ELFUTILS_BIONIC_FIXUP_STDIO_EXT_H
-
-/* intentionally blank */
-
-#endif /* ELFUTILS_BIONIC_FIXUP_STDIO_EXT_H */
diff --git a/config.h b/config.h
deleted file mode 100644
index cd510c9..0000000
--- a/config.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* config.h. Generated from config.h.in by configure. */
-/* config.h.in. Generated from configure.ac by autoheader. */
-
-/* $libdir subdirectory containing libebl modules. */
-#define LIBEBL_SUBDIR "elfutils"
-
-/* Directory to place translation files in. */
-#define LOCALEDIR "${datarootdir}"
-
-/* Identifier for modules in the build. */
-#define MODVERSION "Build on bencheng.mtv.corp.google.com 2012-02-28T15:09:22-0800"
-
-/* Define to 32 or 64 if a specific implementation is wanted. */
-/* #undef NATIVE_ELF */
-
-/* Name of package */
-#define PACKAGE "elfutils"
-
-/* Define to the address where bug reports for this package should be sent. */
-#define PACKAGE_BUGREPORT "http://bugzilla.redhat.com/bugzilla/"
-
-/* Define to the full name of this package. */
-#define PACKAGE_NAME "Red Hat elfutils"
-
-/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "Red Hat elfutils 0.138"
-
-/* Define to the one symbol short name of this package. */
-#define PACKAGE_TARNAME "elfutils"
-
-/* Define to the version of this package. */
-#define PACKAGE_VERSION "0.138"
-
-/* Defined if thread local storage should be used. */
-/* #undef USE_TLS */
-
-/* Version number of package */
-#define VERSION "0.138"
-
-/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a
- `char[]'. */
-#define YYTEXT_POINTER 1
-
-/* Number of bits in a file offset, on hosts where this is settable. */
-/* #undef _FILE_OFFSET_BITS */
-
-/* Define for large files, on AIX-style hosts. */
-/* #undef _LARGE_FILES */
-
-#include <eu-config.h>
diff --git a/config.h.in b/config.h.in
deleted file mode 100644
index d6645d5..0000000
--- a/config.h.in
+++ /dev/null
@@ -1,49 +0,0 @@
-/* config.h.in. Generated from configure.ac by autoheader. */
-
-/* $libdir subdirectory containing libebl modules. */
-#undef LIBEBL_SUBDIR
-
-/* Directory to place translation files in. */
-#undef LOCALEDIR
-
-/* Identifier for modules in the build. */
-#undef MODVERSION
-
-/* Define to 32 or 64 if a specific implementation is wanted. */
-#undef NATIVE_ELF
-
-/* Name of package */
-#undef PACKAGE
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* Defined if thread local storage should be used. */
-#undef USE_TLS
-
-/* Version number of package */
-#undef VERSION
-
-/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a
- `char[]'. */
-#undef YYTEXT_POINTER
-
-/* Number of bits in a file offset, on hosts where this is settable. */
-#undef _FILE_OFFSET_BITS
-
-/* Define for large files, on AIX-style hosts. */
-#undef _LARGE_FILES
-
-#include <eu-config.h>
diff --git a/config/ChangeLog b/config/ChangeLog
deleted file mode 100644
index 0c50373..0000000
--- a/config/ChangeLog
+++ /dev/null
@@ -1,86 +0,0 @@
-2008-12-24 Roland McGrath <roland@redhat.com>
-
- * Makefile.am ($(srcdir)/elfutils.spec.in): Rewrite awk magic.
- Put the target inside [if MAINTAINER_MODE].
-
-2008-12-16 Roland McGrath <roland@redhat.com>
-
- * version.h.in: New file.
-
-2008-01-12 Ulrich Drepper <drepper@redhat.com>
-
- * elfutils.spec.in: Add m4 to build requirements.
-
-2008-01-02 Ulrich Drepper <drepper@redhat.com>
-
- * elfutils.spec.in: Changes for disasm branch merge.
-
-2007-08-08 Roland McGrath <roland@redhat.com>
-
- * elfutils.spec.in (License): Canonicalize.
-
-2007-04-23 Roland McGrath <roland@redhat.com>
-
- * elfutils.spec.in: Distribute eu-unstrip.
-
-2005-08-13 Roland McGrath <roland@redhat.com>
-
- * Makefile.am ($(srcdir)/elfutils.spec.in): Add missing $.
-
-2005-07-28 Roland McGrath <roland@redhat.com>
-
- * elfutils.spec.in: Remove libdwfl.so from package.
-
-2005-07-21 Ulrich Drepper <drepper@redhat.com>
-
- * elfutils.spec.in: Distribute eu-elfcmp.
-
-2005-04-01 Ulrich Drepper <drepper@redhat.com>
-
- * elfutils.spec.in: Distribute eu-addr2line.
-
-2005-03-17 Ulrich Drepper <drepper@redhat.com>
-
- * elfutils.spec.in: Distribute libdw.{a,so,h}.
-
-2005-02-22 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: Ignore result of cvs run.
-
- * elfutils.spec.in: Simplify build process by not using a subdir.
- This means we can use %configure.
-
-2005-02-18 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: Automatically added changelog from NEWS file on dist.
-
-2005-02-15 Ulrich Drepper <drepper@redhat.com>
-
- * elfutils.spec.in: Make sure RPM_OPT_FLAGS is used. During
- %build, really do build the binaries.
- Remove --enable-shared configure parameters.
-
-2005-02-07 Ulrich Drepper <drepper@redhat.com>
-
- * elfutils.spec.in (BuildRequires): Up gcc requirement to 3.4.
-
-2004-11-23 Ulrich Drepper <drepper@redhat.com>
-
- * elfutils.spec.in: Some more changes for the RPM with the fake
- binaries.
-
-2004-01-29 Ulrich Drepper <drepper@redhat.com>
-
- * elfutils.spec.in: Update BuildRequires.
-
-2004-01-17 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: New file.
- * config.guess: Moved to here from toplevel.
- * config.rpath: Likewise.
- * config.sub: Likewise.
- * depcomp: Likewise.
- * install-sh: Likewise.
- * missing: Likewise.
- * mkinstalldirs: Likewise.
- * elfutils.spec.in: New file.
diff --git a/config/Makefile.am b/config/Makefile.am
deleted file mode 100644
index f2db4ef..0000000
--- a/config/Makefile.am
+++ /dev/null
@@ -1,48 +0,0 @@
-## Process this file with automake to produce Makefile.in -*-Makefile-*-
-## Configure input file for elfutils.
-##
-## Copyright (C) 2004, 2005, 2008 Red Hat, Inc.
-## This file is part of Red Hat elfutils.
-##
-## Red Hat elfutils is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by the
-## Free Software Foundation; version 2 of the License.
-##
-## Red Hat elfutils 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
-## General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License along
-## with Red Hat elfutils; if not, write to the Free Software Foundation,
-## Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
-##
-## Red Hat elfutils is an included package of the Open Invention Network.
-## An included package of the Open Invention Network is a package for which
-## Open Invention Network licensees cross-license their patents. No patent
-## license is granted, either expressly or impliedly, by designation as an
-## included package. Should you wish to participate in the Open Invention
-## Network licensing program, please visit www.openinventionnetwork.com
-## <http://www.openinventionnetwork.com>.
-##
-EXTRA_DIST = elfutils.spec.in
-
-if MAINTAINER_MODE
-$(srcdir)/elfutils.spec.in: $(top_srcdir)/NEWS
- @tmpname=$$(mktemp $${TMPDIR:-/tmp}/elfutils.XXXXXX); \
- date +'* %a %b %e %Y' | tr '[\n]' '[ ]' > $$tmpname; \
- getent passwd "$$(whoami)" | \
- awk 'BEGIN {FS=":"} { printf $$5; exit 0}' >> $$tmpname; \
- echo -n " <$$(whoami)@redhat.com> " >> $$tmpname; \
- awk '\
- $$1 == "Version" && started { exit } \
- $$1 == "Version" { started=1; line=""; sub(/:/,"",$$2); \
- print $$2 "-1"; next } \
- NF > 0 { line = (line != "") ? (line " " $$0) : ("- " $$0) } \
- NF == 0 && line != "" { print line; line="" } \
- END { if (line != "") print line; print "" }' $< \
- | fold -s -w 70 | sed '1!s/^[^-]/ &/' >> $$tmpname; \
- sed "/^%changelog/r $$tmpname" $@ > $@.new; \
- rm -f $$tmpname; \
- mv -f $@.new $@
-endif
diff --git a/config/Makefile.in b/config/Makefile.in
deleted file mode 100644
index 8be9645..0000000
--- a/config/Makefile.in
+++ /dev/null
@@ -1,340 +0,0 @@
-# Makefile.in generated by automake 1.10.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = config
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ChangeLog \
- config.guess config.sub depcomp install-sh missing ylwrap
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-SOURCES =
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEBUGPRED = @DEBUGPRED@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EXEEXT = @EXEEXT@
-GMSGFMT = @GMSGFMT@
-GMSGFMT_015 = @GMSGFMT_015@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LDFLAGS = @LDFLAGS@
-LEX = @LEX@
-LEXLIB = @LEXLIB@
-LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
-LIBEBL_SUBDIR = @LIBEBL_SUBDIR@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LOCALEDIR = @LOCALEDIR@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MKDIR_P = @MKDIR_P@
-MODVERSION = @MODVERSION@
-MSGFMT = @MSGFMT@
-MSGFMT_015 = @MSGFMT_015@
-MSGMERGE = @MSGMERGE@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-RANLIB = @RANLIB@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-USE_NLS = @USE_NLS@
-VERSION = @VERSION@
-XGETTEXT = @XGETTEXT@
-XGETTEXT_015 = @XGETTEXT_015@
-YACC = @YACC@
-YFLAGS = @YFLAGS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-base_cpu = @base_cpu@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-eu_version = @eu_version@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-EXTRA_DIST = elfutils.spec.in
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
- && exit 0; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits config/Makefile'; \
- cd $(top_srcdir) && \
- $(AUTOMAKE) --gnits config/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- list='$(DISTFILES)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
- fi; \
- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
- else \
- test -f $(distdir)/$$file \
- || cp -p $$d/$$file $(distdir)/$$file \
- || exit 1; \
- fi; \
- done
-check-am: all-am
-check: check-am
-all-am: Makefile
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic mostlyclean-am
-
-distclean: distclean-am
- -rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-info: install-info-am
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-ps: install-ps-am
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic distclean \
- distclean-generic distdir dvi dvi-am html html-am info info-am \
- install install-am install-data install-data-am install-dvi \
- install-dvi-am install-exec install-exec-am install-html \
- install-html-am install-info install-info-am install-man \
- install-pdf install-pdf-am install-ps install-ps-am \
- install-strip installcheck installcheck-am installdirs \
- maintainer-clean maintainer-clean-generic mostlyclean \
- mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am
-
-
-@MAINTAINER_MODE_TRUE@$(srcdir)/elfutils.spec.in: $(top_srcdir)/NEWS
-@MAINTAINER_MODE_TRUE@ @tmpname=$$(mktemp $${TMPDIR:-/tmp}/elfutils.XXXXXX); \
-@MAINTAINER_MODE_TRUE@ date +'* %a %b %e %Y' | tr '[\n]' '[ ]' > $$tmpname; \
-@MAINTAINER_MODE_TRUE@ getent passwd "$$(whoami)" | \
-@MAINTAINER_MODE_TRUE@ awk 'BEGIN {FS=":"} { printf $$5; exit 0}' >> $$tmpname; \
-@MAINTAINER_MODE_TRUE@ echo -n " <$$(whoami)@redhat.com> " >> $$tmpname; \
-@MAINTAINER_MODE_TRUE@ awk '\
-@MAINTAINER_MODE_TRUE@ $$1 == "Version" && started { exit } \
-@MAINTAINER_MODE_TRUE@ $$1 == "Version" { started=1; line=""; sub(/:/,"",$$2); \
-@MAINTAINER_MODE_TRUE@ print $$2 "-1"; next } \
-@MAINTAINER_MODE_TRUE@ NF > 0 { line = (line != "") ? (line " " $$0) : ("- " $$0) } \
-@MAINTAINER_MODE_TRUE@ NF == 0 && line != "" { print line; line="" } \
-@MAINTAINER_MODE_TRUE@ END { if (line != "") print line; print "" }' $< \
-@MAINTAINER_MODE_TRUE@ | fold -s -w 70 | sed '1!s/^[^-]/ &/' >> $$tmpname; \
-@MAINTAINER_MODE_TRUE@ sed "/^%changelog/r $$tmpname" $@ > $@.new; \
-@MAINTAINER_MODE_TRUE@ rm -f $$tmpname; \
-@MAINTAINER_MODE_TRUE@ mv -f $@.new $@
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/config/config.guess b/config/config.guess
deleted file mode 100644
index ca2a03c..0000000
--- a/config/config.guess
+++ /dev/null
@@ -1,1526 +0,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
-# Free Software Foundation, Inc.
-
-timestamp='2008-01-08'
-
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-
-# Originally written by Per Bothner <per@bothner.com>.
-# Please send patches to <config-patches@gnu.org>. Submit a context
-# diff and a properly formatted ChangeLog entry.
-#
-# This script attempts to guess a canonical system name similar to
-# config.sub. If it succeeds, it prints the system name on stdout, and
-# exits with 0. Otherwise, it exits with 1.
-#
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit build system type.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION]
-
-Output the configuration name of the system \`$me' is run on.
-
-Operation modes:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.guess ($timestamp)
-
-Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit ;;
- --version | -v )
- echo "$version" ; exit ;;
- --help | --h* | -h )
- echo "$usage"; exit ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help" >&2
- exit 1 ;;
- * )
- break ;;
- esac
-done
-
-if test $# != 0; then
- echo "$me: too many arguments$help" >&2
- exit 1
-fi
-
-trap 'exit 1' 1 2 15
-
-# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
-# compiler to aid in system detection is discouraged as it requires
-# temporary files to be created and, as you can see below, it is a
-# headache to deal with in a portable fashion.
-
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
-
-# Portable tmp directory creation inspired by the Autoconf team.
-
-set_cc_for_build='
-trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
-: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
-dummy=$tmp/dummy ;
-tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
-case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,) echo "int x;" > $dummy.c ;
- for c in cc gcc c89 c99 ; do
- if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
- CC_FOR_BUILD="$c"; break ;
- fi ;
- done ;
- if test x"$CC_FOR_BUILD" = x ; then
- CC_FOR_BUILD=no_compiler_found ;
- fi
- ;;
- ,,*) CC_FOR_BUILD=$CC ;;
- ,*,*) CC_FOR_BUILD=$HOST_CC ;;
-esac ; set_cc_for_build= ;'
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
- PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- *:NetBSD:*:*)
- # NetBSD (nbsd) targets should (where applicable) match one or
- # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
- # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
- # switched to ELF, *-*-netbsd* would select the old
- # object file format. This provides both forward
- # compatibility and a consistent mechanism for selecting the
- # object file format.
- #
- # Note: NetBSD doesn't particularly care about the vendor
- # portion of the name. We always set it to "unknown".
- sysctl="sysctl -n hw.machine_arch"
- UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
- /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
- case "${UNAME_MACHINE_ARCH}" in
- armeb) machine=armeb-unknown ;;
- arm*) machine=arm-unknown ;;
- sh3el) machine=shl-unknown ;;
- sh3eb) machine=sh-unknown ;;
- sh5el) machine=sh5le-unknown ;;
- *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
- esac
- # The Operating System including object format, if it has switched
- # to ELF recently, or will in the future.
- case "${UNAME_MACHINE_ARCH}" in
- arm*|i386|m68k|ns32k|sh3*|sparc|vax)
- eval $set_cc_for_build
- if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep __ELF__ >/dev/null
- then
- # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
- # Return netbsd for either. FIX?
- os=netbsd
- else
- os=netbsdelf
- fi
- ;;
- *)
- os=netbsd
- ;;
- esac
- # The OS release
- # Debian GNU/NetBSD machines have a different userland, and
- # thus, need a distinct triplet. However, they do not need
- # kernel version information, so it can be replaced with a
- # suitable tag, in the style of linux-gnu.
- case "${UNAME_VERSION}" in
- Debian*)
- release='-gnu'
- ;;
- *)
- release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
- ;;
- esac
- # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
- # contains redundant information, the shorter form:
- # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "${machine}-${os}${release}"
- exit ;;
- *:OpenBSD:*:*)
- UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
- echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
- exit ;;
- *:ekkoBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
- exit ;;
- *:SolidBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
- exit ;;
- macppc:MirBSD:*:*)
- echo powerpc-unknown-mirbsd${UNAME_RELEASE}
- exit ;;
- *:MirBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
- exit ;;
- alpha:OSF1:*:*)
- case $UNAME_RELEASE in
- *4.0)
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
- ;;
- *5.*)
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
- ;;
- esac
- # According to Compaq, /usr/sbin/psrinfo has been available on
- # OSF/1 and Tru64 systems produced since 1995. I hope that
- # covers most systems running today. This code pipes the CPU
- # types through head -n 1, so we only detect the type of CPU 0.
- ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
- case "$ALPHA_CPU_TYPE" in
- "EV4 (21064)")
- UNAME_MACHINE="alpha" ;;
- "EV4.5 (21064)")
- UNAME_MACHINE="alpha" ;;
- "LCA4 (21066/21068)")
- UNAME_MACHINE="alpha" ;;
- "EV5 (21164)")
- UNAME_MACHINE="alphaev5" ;;
- "EV5.6 (21164A)")
- UNAME_MACHINE="alphaev56" ;;
- "EV5.6 (21164PC)")
- UNAME_MACHINE="alphapca56" ;;
- "EV5.7 (21164PC)")
- UNAME_MACHINE="alphapca57" ;;
- "EV6 (21264)")
- UNAME_MACHINE="alphaev6" ;;
- "EV6.7 (21264A)")
- UNAME_MACHINE="alphaev67" ;;
- "EV6.8CB (21264C)")
- UNAME_MACHINE="alphaev68" ;;
- "EV6.8AL (21264B)")
- UNAME_MACHINE="alphaev68" ;;
- "EV6.8CX (21264D)")
- UNAME_MACHINE="alphaev68" ;;
- "EV6.9A (21264/EV69A)")
- UNAME_MACHINE="alphaev69" ;;
- "EV7 (21364)")
- UNAME_MACHINE="alphaev7" ;;
- "EV7.9 (21364A)")
- UNAME_MACHINE="alphaev79" ;;
- esac
- # A Pn.n version is a patched version.
- # A Vn.n version is a released version.
- # A Tn.n version is a released field test version.
- # A Xn.n version is an unreleased experimental baselevel.
- # 1.2 uses "1.2" for uname -r.
- echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- exit ;;
- Alpha\ *:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # Should we change UNAME_MACHINE based on the output of uname instead
- # of the specific Alpha model?
- echo alpha-pc-interix
- exit ;;
- 21064:Windows_NT:50:3)
- echo alpha-dec-winnt3.5
- exit ;;
- Amiga*:UNIX_System_V:4.0:*)
- echo m68k-unknown-sysv4
- exit ;;
- *:[Aa]miga[Oo][Ss]:*:*)
- echo ${UNAME_MACHINE}-unknown-amigaos
- exit ;;
- *:[Mm]orph[Oo][Ss]:*:*)
- echo ${UNAME_MACHINE}-unknown-morphos
- exit ;;
- *:OS/390:*:*)
- echo i370-ibm-openedition
- exit ;;
- *:z/VM:*:*)
- echo s390-ibm-zvmoe
- exit ;;
- *:OS400:*:*)
- echo powerpc-ibm-os400
- exit ;;
- arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
- echo arm-acorn-riscix${UNAME_RELEASE}
- exit ;;
- arm:riscos:*:*|arm:RISCOS:*:*)
- echo arm-unknown-riscos
- exit ;;
- SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
- echo hppa1.1-hitachi-hiuxmpp
- exit ;;
- Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
- # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
- if test "`(/bin/universe) 2>/dev/null`" = att ; then
- echo pyramid-pyramid-sysv3
- else
- echo pyramid-pyramid-bsd
- fi
- exit ;;
- NILE*:*:*:dcosx)
- echo pyramid-pyramid-svr4
- exit ;;
- DRS?6000:unix:4.0:6*)
- echo sparc-icl-nx6
- exit ;;
- DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
- case `/usr/bin/uname -p` in
- sparc) echo sparc-icl-nx7; exit ;;
- esac ;;
- sun4H:SunOS:5.*:*)
- echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
- echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
- echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- sun4*:SunOS:6*:*)
- # According to config.sub, this is the proper way to canonicalize
- # SunOS6. Hard to guess exactly what SunOS6 will be like, but
- # it's likely to be more like Solaris than SunOS4.
- echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- sun4*:SunOS:*:*)
- case "`/usr/bin/arch -k`" in
- Series*|S4*)
- UNAME_RELEASE=`uname -v`
- ;;
- esac
- # Japanese Language versions have a version number like `4.1.3-JL'.
- echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
- exit ;;
- sun3*:SunOS:*:*)
- echo m68k-sun-sunos${UNAME_RELEASE}
- exit ;;
- sun*:*:4.2BSD:*)
- UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
- test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
- case "`/bin/arch`" in
- sun3)
- echo m68k-sun-sunos${UNAME_RELEASE}
- ;;
- sun4)
- echo sparc-sun-sunos${UNAME_RELEASE}
- ;;
- esac
- exit ;;
- aushp:SunOS:*:*)
- echo sparc-auspex-sunos${UNAME_RELEASE}
- exit ;;
- # The situation for MiNT is a little confusing. The machine name
- # can be virtually everything (everything which is not
- # "atarist" or "atariste" at least should have a processor
- # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
- # to the lowercase version "mint" (or "freemint"). Finally
- # the system name "TOS" denotes a system which is actually not
- # MiNT. But MiNT is downward compatible to TOS, so this should
- # be no problem.
- atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit ;;
- atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit ;;
- *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit ;;
- milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
- echo m68k-milan-mint${UNAME_RELEASE}
- exit ;;
- hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
- echo m68k-hades-mint${UNAME_RELEASE}
- exit ;;
- *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
- echo m68k-unknown-mint${UNAME_RELEASE}
- exit ;;
- m68k:machten:*:*)
- echo m68k-apple-machten${UNAME_RELEASE}
- exit ;;
- powerpc:machten:*:*)
- echo powerpc-apple-machten${UNAME_RELEASE}
- exit ;;
- RISC*:Mach:*:*)
- echo mips-dec-mach_bsd4.3
- exit ;;
- RISC*:ULTRIX:*:*)
- echo mips-dec-ultrix${UNAME_RELEASE}
- exit ;;
- VAX*:ULTRIX*:*:*)
- echo vax-dec-ultrix${UNAME_RELEASE}
- exit ;;
- 2020:CLIX:*:* | 2430:CLIX:*:*)
- echo clipper-intergraph-clix${UNAME_RELEASE}
- exit ;;
- mips:*:*:UMIPS | mips:*:*:RISCos)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
-#ifdef __cplusplus
-#include <stdio.h> /* for printf() prototype */
- int main (int argc, char *argv[]) {
-#else
- int main (argc, argv) int argc; char *argv[]; {
-#endif
- #if defined (host_mips) && defined (MIPSEB)
- #if defined (SYSTYPE_SYSV)
- printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_SVR4)
- printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
- printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
- #endif
- #endif
- exit (-1);
- }
-EOF
- $CC_FOR_BUILD -o $dummy $dummy.c &&
- dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
- SYSTEM_NAME=`$dummy $dummyarg` &&
- { echo "$SYSTEM_NAME"; exit; }
- echo mips-mips-riscos${UNAME_RELEASE}
- exit ;;
- Motorola:PowerMAX_OS:*:*)
- echo powerpc-motorola-powermax
- exit ;;
- Motorola:*:4.3:PL8-*)
- echo powerpc-harris-powermax
- exit ;;
- Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
- echo powerpc-harris-powermax
- exit ;;
- Night_Hawk:Power_UNIX:*:*)
- echo powerpc-harris-powerunix
- exit ;;
- m88k:CX/UX:7*:*)
- echo m88k-harris-cxux7
- exit ;;
- m88k:*:4*:R4*)
- echo m88k-motorola-sysv4
- exit ;;
- m88k:*:3*:R3*)
- echo m88k-motorola-sysv3
- exit ;;
- AViiON:dgux:*:*)
- # DG/UX returns AViiON for all architectures
- UNAME_PROCESSOR=`/usr/bin/uname -p`
- if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
- then
- if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
- [ ${TARGET_BINARY_INTERFACE}x = x ]
- then
- echo m88k-dg-dgux${UNAME_RELEASE}
- else
- echo m88k-dg-dguxbcs${UNAME_RELEASE}
- fi
- else
- echo i586-dg-dgux${UNAME_RELEASE}
- fi
- exit ;;
- M88*:DolphinOS:*:*) # DolphinOS (SVR3)
- echo m88k-dolphin-sysv3
- exit ;;
- M88*:*:R3*:*)
- # Delta 88k system running SVR3
- echo m88k-motorola-sysv3
- exit ;;
- XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
- echo m88k-tektronix-sysv3
- exit ;;
- Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
- echo m68k-tektronix-bsd
- exit ;;
- *:IRIX*:*:*)
- echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
- exit ;;
- ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
- exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
- i*86:AIX:*:*)
- echo i386-ibm-aix
- exit ;;
- ia64:AIX:*:*)
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- fi
- echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
- exit ;;
- *:AIX:2:3)
- if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <sys/systemcfg.h>
-
- main()
- {
- if (!__power_pc())
- exit(1);
- puts("powerpc-ibm-aix3.2.5");
- exit(0);
- }
-EOF
- if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
- then
- echo "$SYSTEM_NAME"
- else
- echo rs6000-ibm-aix3.2.5
- fi
- elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
- echo rs6000-ibm-aix3.2.4
- else
- echo rs6000-ibm-aix3.2
- fi
- exit ;;
- *:AIX:*:[456])
- IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
- if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
- IBM_ARCH=rs6000
- else
- IBM_ARCH=powerpc
- fi
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- fi
- echo ${IBM_ARCH}-ibm-aix${IBM_REV}
- exit ;;
- *:AIX:*:*)
- echo rs6000-ibm-aix
- exit ;;
- ibmrt:4.4BSD:*|romp-ibm:BSD:*)
- echo romp-ibm-bsd4.4
- exit ;;
- ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
- echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
- exit ;; # report: romp-ibm BSD 4.3
- *:BOSX:*:*)
- echo rs6000-bull-bosx
- exit ;;
- DPX/2?00:B.O.S.:*:*)
- echo m68k-bull-sysv3
- exit ;;
- 9000/[34]??:4.3bsd:1.*:*)
- echo m68k-hp-bsd
- exit ;;
- hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
- echo m68k-hp-bsd4.4
- exit ;;
- 9000/[34678]??:HP-UX:*:*)
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- case "${UNAME_MACHINE}" in
- 9000/31? ) HP_ARCH=m68000 ;;
- 9000/[34]?? ) HP_ARCH=m68k ;;
- 9000/[678][0-9][0-9])
- if [ -x /usr/bin/getconf ]; then
- sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
- sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
- case "${sc_cpu_version}" in
- 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
- 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
- 532) # CPU_PA_RISC2_0
- case "${sc_kernel_bits}" in
- 32) HP_ARCH="hppa2.0n" ;;
- 64) HP_ARCH="hppa2.0w" ;;
- '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
- esac ;;
- esac
- fi
- if [ "${HP_ARCH}" = "" ]; then
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
-
- #define _HPUX_SOURCE
- #include <stdlib.h>
- #include <unistd.h>
-
- int main ()
- {
- #if defined(_SC_KERNEL_BITS)
- long bits = sysconf(_SC_KERNEL_BITS);
- #endif
- long cpu = sysconf (_SC_CPU_VERSION);
-
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
- case CPU_PA_RISC2_0:
- #if defined(_SC_KERNEL_BITS)
- switch (bits)
- {
- case 64: puts ("hppa2.0w"); break;
- case 32: puts ("hppa2.0n"); break;
- default: puts ("hppa2.0"); break;
- } break;
- #else /* !defined(_SC_KERNEL_BITS) */
- puts ("hppa2.0"); break;
- #endif
- default: puts ("hppa1.0"); break;
- }
- exit (0);
- }
-EOF
- (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
- test -z "$HP_ARCH" && HP_ARCH=hppa
- fi ;;
- esac
- if [ ${HP_ARCH} = "hppa2.0w" ]
- then
- eval $set_cc_for_build
-
- # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
- # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
- # generating 64-bit code. GNU and HP use different nomenclature:
- #
- # $ CC_FOR_BUILD=cc ./config.guess
- # => hppa2.0w-hp-hpux11.23
- # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
- # => hppa64-hp-hpux11.23
-
- if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
- grep __LP64__ >/dev/null
- then
- HP_ARCH="hppa2.0w"
- else
- HP_ARCH="hppa64"
- fi
- fi
- echo ${HP_ARCH}-hp-hpux${HPUX_REV}
- exit ;;
- ia64:HP-UX:*:*)
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- echo ia64-hp-hpux${HPUX_REV}
- exit ;;
- 3050*:HI-UX:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <unistd.h>
- int
- main ()
- {
- long cpu = sysconf (_SC_CPU_VERSION);
- /* The order matters, because CPU_IS_HP_MC68K erroneously returns
- true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
- results, however. */
- if (CPU_IS_PA_RISC (cpu))
- {
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
- default: puts ("hppa-hitachi-hiuxwe2"); break;
- }
- }
- else if (CPU_IS_HP_MC68K (cpu))
- puts ("m68k-hitachi-hiuxwe2");
- else puts ("unknown-hitachi-hiuxwe2");
- exit (0);
- }
-EOF
- $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
- { echo "$SYSTEM_NAME"; exit; }
- echo unknown-hitachi-hiuxwe2
- exit ;;
- 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
- echo hppa1.1-hp-bsd
- exit ;;
- 9000/8??:4.3bsd:*:*)
- echo hppa1.0-hp-bsd
- exit ;;
- *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
- echo hppa1.0-hp-mpeix
- exit ;;
- hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
- echo hppa1.1-hp-osf
- exit ;;
- hp8??:OSF1:*:*)
- echo hppa1.0-hp-osf
- exit ;;
- i*86:OSF1:*:*)
- if [ -x /usr/sbin/sysversion ] ; then
- echo ${UNAME_MACHINE}-unknown-osf1mk
- else
- echo ${UNAME_MACHINE}-unknown-osf1
- fi
- exit ;;
- parisc*:Lites*:*:*)
- echo hppa1.1-hp-lites
- exit ;;
- C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
- echo c1-convex-bsd
- exit ;;
- C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit ;;
- C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
- echo c34-convex-bsd
- exit ;;
- C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
- echo c38-convex-bsd
- exit ;;
- C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
- echo c4-convex-bsd
- exit ;;
- CRAY*Y-MP:*:*:*)
- echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*[A-Z]90:*:*:*)
- echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
- | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
- -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
- -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*TS:*:*:*)
- echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*T3E:*:*:*)
- echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*SV1:*:*:*)
- echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- *:UNICOS/mp:*:*)
- echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
- FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
- FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
- 5000:UNIX_System_V:4.*:*)
- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
- FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
- echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
- i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
- echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
- exit ;;
- sparc*:BSD/OS:*:*)
- echo sparc-unknown-bsdi${UNAME_RELEASE}
- exit ;;
- *:BSD/OS:*:*)
- echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
- exit ;;
- *:FreeBSD:*:*)
- case ${UNAME_MACHINE} in
- pc98)
- echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
- amd64)
- echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
- *)
- echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
- esac
- exit ;;
- i*:CYGWIN*:*)
- echo ${UNAME_MACHINE}-pc-cygwin
- exit ;;
- *:MINGW*:*)
- echo ${UNAME_MACHINE}-pc-mingw32
- exit ;;
- i*:windows32*:*)
- # uname -m includes "-pc" on this system.
- echo ${UNAME_MACHINE}-mingw32
- exit ;;
- i*:PW*:*)
- echo ${UNAME_MACHINE}-pc-pw32
- exit ;;
- *:Interix*:[3456]*)
- case ${UNAME_MACHINE} in
- x86)
- echo i586-pc-interix${UNAME_RELEASE}
- exit ;;
- EM64T | authenticamd)
- echo x86_64-unknown-interix${UNAME_RELEASE}
- exit ;;
- IA64)
- echo ia64-unknown-interix${UNAME_RELEASE}
- exit ;;
- esac ;;
- [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
- echo i${UNAME_MACHINE}-pc-mks
- exit ;;
- i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
- # UNAME_MACHINE based on the output of uname instead of i386?
- echo i586-pc-interix
- exit ;;
- i*:UWIN*:*)
- echo ${UNAME_MACHINE}-pc-uwin
- exit ;;
- amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
- echo x86_64-unknown-cygwin
- exit ;;
- p*:CYGWIN*:*)
- echo powerpcle-unknown-cygwin
- exit ;;
- prep*:SunOS:5.*:*)
- echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- *:GNU:*:*)
- # the GNU system
- echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
- exit ;;
- *:GNU/*:*:*)
- # other systems with GNU libc and userland
- echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
- exit ;;
- i*86:Minix:*:*)
- echo ${UNAME_MACHINE}-pc-minix
- exit ;;
- arm*:Linux:*:*)
- eval $set_cc_for_build
- if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep -q __ARM_EABI__
- then
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- else
- echo ${UNAME_MACHINE}-unknown-linux-gnueabi
- fi
- exit ;;
- avr32*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- cris:Linux:*:*)
- echo cris-axis-linux-gnu
- exit ;;
- crisv32:Linux:*:*)
- echo crisv32-axis-linux-gnu
- exit ;;
- frv:Linux:*:*)
- echo frv-unknown-linux-gnu
- exit ;;
- ia64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- m32r*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- m68*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- mips:Linux:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #undef CPU
- #undef mips
- #undef mipsel
- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- CPU=mipsel
- #else
- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- CPU=mips
- #else
- CPU=
- #endif
- #endif
-EOF
- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
- /^CPU/{
- s: ::g
- p
- }'`"
- test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
- ;;
- mips64:Linux:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #undef CPU
- #undef mips64
- #undef mips64el
- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- CPU=mips64el
- #else
- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- CPU=mips64
- #else
- CPU=
- #endif
- #endif
-EOF
- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
- /^CPU/{
- s: ::g
- p
- }'`"
- test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
- ;;
- or32:Linux:*:*)
- echo or32-unknown-linux-gnu
- exit ;;
- ppc:Linux:*:*)
- echo powerpc-unknown-linux-gnu
- exit ;;
- ppc64:Linux:*:*)
- echo powerpc64-unknown-linux-gnu
- exit ;;
- alpha:Linux:*:*)
- case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
- EV5) UNAME_MACHINE=alphaev5 ;;
- EV56) UNAME_MACHINE=alphaev56 ;;
- PCA56) UNAME_MACHINE=alphapca56 ;;
- PCA57) UNAME_MACHINE=alphapca56 ;;
- EV6) UNAME_MACHINE=alphaev6 ;;
- EV67) UNAME_MACHINE=alphaev67 ;;
- EV68*) UNAME_MACHINE=alphaev68 ;;
- esac
- objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
- if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
- echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
- exit ;;
- parisc:Linux:*:* | hppa:Linux:*:*)
- # Look for CPU level
- case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
- PA7*) echo hppa1.1-unknown-linux-gnu ;;
- PA8*) echo hppa2.0-unknown-linux-gnu ;;
- *) echo hppa-unknown-linux-gnu ;;
- esac
- exit ;;
- parisc64:Linux:*:* | hppa64:Linux:*:*)
- echo hppa64-unknown-linux-gnu
- exit ;;
- s390:Linux:*:* | s390x:Linux:*:*)
- echo ${UNAME_MACHINE}-ibm-linux
- exit ;;
- sh64*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- sh*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- sparc:Linux:*:* | sparc64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- vax:Linux:*:*)
- echo ${UNAME_MACHINE}-dec-linux-gnu
- exit ;;
- x86_64:Linux:*:*)
- echo x86_64-unknown-linux-gnu
- exit ;;
- xtensa*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- i*86:Linux:*:*)
- # The BFD linker knows what the default object file format is, so
- # first see if it will tell us. cd to the root directory to prevent
- # problems with other programs or directories called `ld' in the path.
- # Set LC_ALL=C to ensure ld outputs messages in English.
- ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
- | sed -ne '/supported targets:/!d
- s/[ ][ ]*/ /g
- s/.*supported targets: *//
- s/ .*//
- p'`
- case "$ld_supported_targets" in
- elf32-i386)
- TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
- ;;
- a.out-i386-linux)
- echo "${UNAME_MACHINE}-pc-linux-gnuaout"
- exit ;;
- coff-i386)
- echo "${UNAME_MACHINE}-pc-linux-gnucoff"
- exit ;;
- "")
- # Either a pre-BFD a.out linker (linux-gnuoldld) or
- # one that does not give us useful --help.
- echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
- exit ;;
- esac
- # Determine whether the default compiler is a.out or elf
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <features.h>
- #ifdef __ELF__
- # ifdef __GLIBC__
- # if __GLIBC__ >= 2
- LIBC=gnu
- # else
- LIBC=gnulibc1
- # endif
- # else
- LIBC=gnulibc1
- # endif
- #else
- #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
- LIBC=gnu
- #else
- LIBC=gnuaout
- #endif
- #endif
- #ifdef __dietlibc__
- LIBC=dietlibc
- #endif
-EOF
- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
- /^LIBC/{
- s: ::g
- p
- }'`"
- test x"${LIBC}" != x && {
- echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
- exit
- }
- test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
- ;;
- i*86:DYNIX/ptx:4*:*)
- # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
- # earlier versions are messed up and put the nodename in both
- # sysname and nodename.
- echo i386-sequent-sysv4
- exit ;;
- i*86:UNIX_SV:4.2MP:2.*)
- # Unixware is an offshoot of SVR4, but it has its own version
- # number series starting with 2...
- # I am not positive that other SVR4 systems won't match this,
- # I just have to hope. -- rms.
- # Use sysv4.2uw... so that sysv4* matches it.
- echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
- exit ;;
- i*86:OS/2:*:*)
- # If we were able to find `uname', then EMX Unix compatibility
- # is probably installed.
- echo ${UNAME_MACHINE}-pc-os2-emx
- exit ;;
- i*86:XTS-300:*:STOP)
- echo ${UNAME_MACHINE}-unknown-stop
- exit ;;
- i*86:atheos:*:*)
- echo ${UNAME_MACHINE}-unknown-atheos
- exit ;;
- i*86:syllable:*:*)
- echo ${UNAME_MACHINE}-pc-syllable
- exit ;;
- i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
- echo i386-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- i*86:*DOS:*:*)
- echo ${UNAME_MACHINE}-pc-msdosdjgpp
- exit ;;
- i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
- UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
- if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
- echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
- else
- echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
- fi
- exit ;;
- i*86:*:5:[678]*)
- # UnixWare 7.x, OpenUNIX and OpenServer 6.
- case `/bin/uname -X | grep "^Machine"` in
- *486*) UNAME_MACHINE=i486 ;;
- *Pentium) UNAME_MACHINE=i586 ;;
- *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
- esac
- echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
- exit ;;
- i*86:*:3.2:*)
- if test -f /usr/options/cb.name; then
- UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
- echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
- elif /bin/uname -X 2>/dev/null >/dev/null ; then
- UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
- (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
- (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
- && UNAME_MACHINE=i586
- (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
- && UNAME_MACHINE=i686
- (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
- && UNAME_MACHINE=i686
- echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
- else
- echo ${UNAME_MACHINE}-pc-sysv32
- fi
- exit ;;
- pc:*:*:*)
- # Left here for compatibility:
- # uname -m prints for DJGPP always 'pc', but it prints nothing about
- # the processor, so we play safe by assuming i386.
- echo i386-pc-msdosdjgpp
- exit ;;
- Intel:Mach:3*:*)
- echo i386-pc-mach3
- exit ;;
- paragon:*:*:*)
- echo i860-intel-osf1
- exit ;;
- i860:*:4.*:*) # i860-SVR4
- if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
- echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
- else # Add other i860-SVR4 vendors below as they are discovered.
- echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
- fi
- exit ;;
- mini*:CTIX:SYS*5:*)
- # "miniframe"
- echo m68010-convergent-sysv
- exit ;;
- mc68k:UNIX:SYSTEM5:3.51m)
- echo m68k-convergent-sysv
- exit ;;
- M680?0:D-NIX:5.3:*)
- echo m68k-diab-dnix
- exit ;;
- M68*:*:R3V[5678]*:*)
- test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
- 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
- OS_REL=''
- test -r /etc/.relid \
- && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
- /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
- 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && { echo i486-ncr-sysv4; exit; } ;;
- m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
- echo m68k-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- mc68030:UNIX_System_V:4.*:*)
- echo m68k-atari-sysv4
- exit ;;
- TSUNAMI:LynxOS:2.*:*)
- echo sparc-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- rs6000:LynxOS:2.*:*)
- echo rs6000-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
- echo powerpc-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- SM[BE]S:UNIX_SV:*:*)
- echo mips-dde-sysv${UNAME_RELEASE}
- exit ;;
- RM*:ReliantUNIX-*:*:*)
- echo mips-sni-sysv4
- exit ;;
- RM*:SINIX-*:*:*)
- echo mips-sni-sysv4
- exit ;;
- *:SINIX-*:*:*)
- if uname -p 2>/dev/null >/dev/null ; then
- UNAME_MACHINE=`(uname -p) 2>/dev/null`
- echo ${UNAME_MACHINE}-sni-sysv4
- else
- echo ns32k-sni-sysv
- fi
- exit ;;
- PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
- # says <Richard.M.Bartel@ccMail.Census.GOV>
- echo i586-unisys-sysv4
- exit ;;
- *:UNIX_System_V:4*:FTX*)
- # From Gerald Hewes <hewes@openmarket.com>.
- # How about differentiating between stratus architectures? -djm
- echo hppa1.1-stratus-sysv4
- exit ;;
- *:*:*:FTX*)
- # From seanf@swdc.stratus.com.
- echo i860-stratus-sysv4
- exit ;;
- i*86:VOS:*:*)
- # From Paul.Green@stratus.com.
- echo ${UNAME_MACHINE}-stratus-vos
- exit ;;
- *:VOS:*:*)
- # From Paul.Green@stratus.com.
- echo hppa1.1-stratus-vos
- exit ;;
- mc68*:A/UX:*:*)
- echo m68k-apple-aux${UNAME_RELEASE}
- exit ;;
- news*:NEWS-OS:6*:*)
- echo mips-sony-newsos6
- exit ;;
- R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
- if [ -d /usr/nec ]; then
- echo mips-nec-sysv${UNAME_RELEASE}
- else
- echo mips-unknown-sysv${UNAME_RELEASE}
- fi
- exit ;;
- BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
- echo powerpc-be-beos
- exit ;;
- BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
- echo powerpc-apple-beos
- exit ;;
- BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
- echo i586-pc-beos
- exit ;;
- SX-4:SUPER-UX:*:*)
- echo sx4-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-5:SUPER-UX:*:*)
- echo sx5-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-6:SUPER-UX:*:*)
- echo sx6-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-7:SUPER-UX:*:*)
- echo sx7-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-8:SUPER-UX:*:*)
- echo sx8-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-8R:SUPER-UX:*:*)
- echo sx8r-nec-superux${UNAME_RELEASE}
- exit ;;
- Power*:Rhapsody:*:*)
- echo powerpc-apple-rhapsody${UNAME_RELEASE}
- exit ;;
- *:Rhapsody:*:*)
- echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
- exit ;;
- *:Darwin:*:*)
- UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
- case $UNAME_PROCESSOR in
- unknown) UNAME_PROCESSOR=powerpc ;;
- esac
- echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
- exit ;;
- *:procnto*:*:* | *:QNX:[0123456789]*:*)
- UNAME_PROCESSOR=`uname -p`
- if test "$UNAME_PROCESSOR" = "x86"; then
- UNAME_PROCESSOR=i386
- UNAME_MACHINE=pc
- fi
- echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
- exit ;;
- *:QNX:*:4*)
- echo i386-pc-qnx
- exit ;;
- NSE-?:NONSTOP_KERNEL:*:*)
- echo nse-tandem-nsk${UNAME_RELEASE}
- exit ;;
- NSR-?:NONSTOP_KERNEL:*:*)
- echo nsr-tandem-nsk${UNAME_RELEASE}
- exit ;;
- *:NonStop-UX:*:*)
- echo mips-compaq-nonstopux
- exit ;;
- BS2000:POSIX*:*:*)
- echo bs2000-siemens-sysv
- exit ;;
- DS/*:UNIX_System_V:*:*)
- echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
- exit ;;
- *:Plan9:*:*)
- # "uname -m" is not consistent, so use $cputype instead. 386
- # is converted to i386 for consistency with other x86
- # operating systems.
- if test "$cputype" = "386"; then
- UNAME_MACHINE=i386
- else
- UNAME_MACHINE="$cputype"
- fi
- echo ${UNAME_MACHINE}-unknown-plan9
- exit ;;
- *:TOPS-10:*:*)
- echo pdp10-unknown-tops10
- exit ;;
- *:TENEX:*:*)
- echo pdp10-unknown-tenex
- exit ;;
- KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
- echo pdp10-dec-tops20
- exit ;;
- XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
- echo pdp10-xkl-tops20
- exit ;;
- *:TOPS-20:*:*)
- echo pdp10-unknown-tops20
- exit ;;
- *:ITS:*:*)
- echo pdp10-unknown-its
- exit ;;
- SEI:*:*:SEIUX)
- echo mips-sei-seiux${UNAME_RELEASE}
- exit ;;
- *:DragonFly:*:*)
- echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
- exit ;;
- *:*VMS:*:*)
- UNAME_MACHINE=`(uname -p) 2>/dev/null`
- case "${UNAME_MACHINE}" in
- A*) echo alpha-dec-vms ; exit ;;
- I*) echo ia64-dec-vms ; exit ;;
- V*) echo vax-dec-vms ; exit ;;
- esac ;;
- *:XENIX:*:SysV)
- echo i386-pc-xenix
- exit ;;
- i*86:skyos:*:*)
- echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
- exit ;;
- i*86:rdos:*:*)
- echo ${UNAME_MACHINE}-pc-rdos
- exit ;;
-esac
-
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
-eval $set_cc_for_build
-cat >$dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
- /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
- I don't know.... */
- printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
- printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
- "4"
-#else
- ""
-#endif
- ); exit (0);
-#endif
-#endif
-
-#if defined (__arm) && defined (__acorn) && defined (__unix)
- printf ("arm-acorn-riscix\n"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
- printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
- int version;
- version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
- if (version < 4)
- printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
- else
- printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
- exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
- printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
- printf ("ns32k-encore-mach\n"); exit (0);
-#else
- printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
- printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
- printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
- printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
- struct utsname un;
-
- uname(&un);
-
- if (strncmp(un.version, "V2", 2) == 0) {
- printf ("i386-sequent-ptx2\n"); exit (0);
- }
- if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
- printf ("i386-sequent-ptx1\n"); exit (0);
- }
- printf ("i386-sequent-ptx\n"); exit (0);
-
-#endif
-
-#if defined (vax)
-# if !defined (ultrix)
-# include <sys/param.h>
-# if defined (BSD)
-# if BSD == 43
- printf ("vax-dec-bsd4.3\n"); exit (0);
-# else
-# if BSD == 199006
- printf ("vax-dec-bsd4.3reno\n"); exit (0);
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# endif
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# else
- printf ("vax-dec-ultrix\n"); exit (0);
-# endif
-#endif
-
-#if defined (alliant) && defined (i860)
- printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
- exit (1);
-}
-EOF
-
-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
- { echo "$SYSTEM_NAME"; exit; }
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
-
-# Convex versions that predate uname can use getsysinfo(1)
-
-if [ -x /usr/convex/getsysinfo ]
-then
- case `getsysinfo -f cpu_type` in
- c1*)
- echo c1-convex-bsd
- exit ;;
- c2*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit ;;
- c34*)
- echo c34-convex-bsd
- exit ;;
- c38*)
- echo c38-convex-bsd
- exit ;;
- c4*)
- echo c4-convex-bsd
- exit ;;
- esac
-fi
-
-cat >&2 <<EOF
-$0: unable to guess system type
-
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
-
- http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
-and
- http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
-
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches@gnu.org> in order to provide the needed
-information to handle your system.
-
-config.guess timestamp = $timestamp
-
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
-
-hostinfo = `(hostinfo) 2>/dev/null`
-/bin/universe = `(/bin/universe) 2>/dev/null`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
-/bin/arch = `(/bin/arch) 2>/dev/null`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
-
-UNAME_MACHINE = ${UNAME_MACHINE}
-UNAME_RELEASE = ${UNAME_RELEASE}
-UNAME_SYSTEM = ${UNAME_SYSTEM}
-UNAME_VERSION = ${UNAME_VERSION}
-EOF
-
-exit 1
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/config/config.sub b/config/config.sub
deleted file mode 100644
index 6759825..0000000
--- a/config/config.sub
+++ /dev/null
@@ -1,1658 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
-# Free Software Foundation, Inc.
-
-timestamp='2008-01-16'
-
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine. It does not imply ALL GNU software can.
-#
-# This file is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program 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 General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-
-# Please send patches to <config-patches@gnu.org>. Submit a context
-# diff and a properly formatted ChangeLog entry.
-#
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support. The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
- $0 [OPTION] ALIAS
-
-Canonicalize a configuration name.
-
-Operation modes:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.sub ($timestamp)
-
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit ;;
- --version | -v )
- echo "$version" ; exit ;;
- --help | --h* | -h )
- echo "$usage"; exit ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help"
- exit 1 ;;
-
- *local*)
- # First pass through any local machine types.
- echo $1
- exit ;;
-
- * )
- break ;;
- esac
-done
-
-case $# in
- 0) echo "$me: missing argument$help" >&2
- exit 1;;
- 1) ;;
- *) echo "$me: too many arguments$help" >&2
- exit 1;;
-esac
-
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
- nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
- uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
- storm-chaos* | os2-emx* | rtmk-nova*)
- os=-$maybe_os
- basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
- ;;
- *)
- basic_machine=`echo $1 | sed 's/-[^-]*$//'`
- if [ $basic_machine != $1 ]
- then os=`echo $1 | sed 's/.*-/-/'`
- else os=; fi
- ;;
-esac
-
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work. We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
- -sun*os*)
- # Prevent following clause from handling this invalid input.
- ;;
- -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
- -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
- -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
- -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
- -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
- -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
- -apple | -axis | -knuth | -cray)
- os=
- basic_machine=$1
- ;;
- -sim | -cisco | -oki | -wec | -winbond)
- os=
- basic_machine=$1
- ;;
- -scout)
- ;;
- -wrs)
- os=-vxworks
- basic_machine=$1
- ;;
- -chorusos*)
- os=-chorusos
- basic_machine=$1
- ;;
- -chorusrdb)
- os=-chorusrdb
- basic_machine=$1
- ;;
- -hiux*)
- os=-hiuxwe2
- ;;
- -sco6)
- os=-sco5v6
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco5)
- os=-sco3.2v5
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco4)
- os=-sco3.2v4
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2.[4-9]*)
- os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2v[4-9]*)
- # Don't forget version if it is 3.2v4 or newer.
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco5v6*)
- # Don't forget version if it is 3.2v4 or newer.
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco*)
- os=-sco3.2v2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -udk*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -isc)
- os=-isc2.2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -clix*)
- basic_machine=clipper-intergraph
- ;;
- -isc*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -lynx*)
- os=-lynxos
- ;;
- -ptx*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
- ;;
- -windowsnt*)
- os=`echo $os | sed -e 's/windowsnt/winnt/'`
- ;;
- -psos*)
- os=-psos
- ;;
- -mint | -mint[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
-esac
-
-# Decode aliases for certain CPU-COMPANY combinations.
-case $basic_machine in
- # Recognize the basic CPU types without company name.
- # Some are omitted here because they have special meanings below.
- 1750a | 580 \
- | a29k \
- | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
- | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
- | am33_2.0 \
- | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
- | bfin \
- | c4x | clipper \
- | d10v | d30v | dlx | dsp16xx \
- | fido | fr30 | frv \
- | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
- | i370 | i860 | i960 | ia64 \
- | ip2k | iq2000 \
- | m32c | m32r | m32rle | m68000 | m68k | m88k \
- | maxq | mb | microblaze | mcore | mep \
- | mips | mipsbe | mipseb | mipsel | mipsle \
- | mips16 \
- | mips64 | mips64el \
- | mips64vr | mips64vrel \
- | mips64orion | mips64orionel \
- | mips64vr4100 | mips64vr4100el \
- | mips64vr4300 | mips64vr4300el \
- | mips64vr5000 | mips64vr5000el \
- | mips64vr5900 | mips64vr5900el \
- | mipsisa32 | mipsisa32el \
- | mipsisa32r2 | mipsisa32r2el \
- | mipsisa64 | mipsisa64el \
- | mipsisa64r2 | mipsisa64r2el \
- | mipsisa64sb1 | mipsisa64sb1el \
- | mipsisa64sr71k | mipsisa64sr71kel \
- | mipstx39 | mipstx39el \
- | mn10200 | mn10300 \
- | mt \
- | msp430 \
- | nios | nios2 \
- | ns16k | ns32k \
- | or32 \
- | pdp10 | pdp11 | pj | pjl \
- | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
- | pyramid \
- | score \
- | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
- | sh64 | sh64le \
- | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
- | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
- | spu | strongarm \
- | tahoe | thumb | tic4x | tic80 | tron \
- | v850 | v850e \
- | we32k \
- | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
- | z8k)
- basic_machine=$basic_machine-unknown
- ;;
- m6811 | m68hc11 | m6812 | m68hc12)
- # Motorola 68HC11/12.
- basic_machine=$basic_machine-unknown
- os=-none
- ;;
- m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
- ;;
- ms1)
- basic_machine=mt-unknown
- ;;
-
- # We use `pc' rather than `unknown'
- # because (1) that's what they normally are, and
- # (2) the word "unknown" tends to confuse beginning users.
- i*86 | x86_64)
- basic_machine=$basic_machine-pc
- ;;
- # Object if more than one company name word.
- *-*-*)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
- # Recognize the basic CPU types with company name.
- 580-* \
- | a29k-* \
- | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
- | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
- | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
- | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
- | avr-* | avr32-* \
- | bfin-* | bs2000-* \
- | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
- | clipper-* | craynv-* | cydra-* \
- | d10v-* | d30v-* | dlx-* \
- | elxsi-* \
- | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
- | h8300-* | h8500-* \
- | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
- | i*86-* | i860-* | i960-* | ia64-* \
- | ip2k-* | iq2000-* \
- | m32c-* | m32r-* | m32rle-* \
- | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
- | m88110-* | m88k-* | maxq-* | mcore-* \
- | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
- | mips16-* \
- | mips64-* | mips64el-* \
- | mips64vr-* | mips64vrel-* \
- | mips64orion-* | mips64orionel-* \
- | mips64vr4100-* | mips64vr4100el-* \
- | mips64vr4300-* | mips64vr4300el-* \
- | mips64vr5000-* | mips64vr5000el-* \
- | mips64vr5900-* | mips64vr5900el-* \
- | mipsisa32-* | mipsisa32el-* \
- | mipsisa32r2-* | mipsisa32r2el-* \
- | mipsisa64-* | mipsisa64el-* \
- | mipsisa64r2-* | mipsisa64r2el-* \
- | mipsisa64sb1-* | mipsisa64sb1el-* \
- | mipsisa64sr71k-* | mipsisa64sr71kel-* \
- | mipstx39-* | mipstx39el-* \
- | mmix-* \
- | mt-* \
- | msp430-* \
- | nios-* | nios2-* \
- | none-* | np1-* | ns16k-* | ns32k-* \
- | orion-* \
- | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
- | pyramid-* \
- | romp-* | rs6000-* \
- | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
- | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
- | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
- | sparclite-* \
- | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
- | tahoe-* | thumb-* \
- | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
- | tron-* \
- | v850-* | v850e-* | vax-* \
- | we32k-* \
- | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
- | xstormy16-* | xtensa*-* \
- | ymp-* \
- | z8k-*)
- ;;
- # Recognize the basic CPU types without company name, with glob match.
- xtensa*)
- basic_machine=$basic_machine-unknown
- ;;
- # Recognize the various machine names and aliases which stand
- # for a CPU type and a company and sometimes even an OS.
- 386bsd)
- basic_machine=i386-unknown
- os=-bsd
- ;;
- 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
- basic_machine=m68000-att
- ;;
- 3b*)
- basic_machine=we32k-att
- ;;
- a29khif)
- basic_machine=a29k-amd
- os=-udi
- ;;
- abacus)
- basic_machine=abacus-unknown
- ;;
- adobe68k)
- basic_machine=m68010-adobe
- os=-scout
- ;;
- alliant | fx80)
- basic_machine=fx80-alliant
- ;;
- altos | altos3068)
- basic_machine=m68k-altos
- ;;
- am29k)
- basic_machine=a29k-none
- os=-bsd
- ;;
- amd64)
- basic_machine=x86_64-pc
- ;;
- amd64-*)
- basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- amdahl)
- basic_machine=580-amdahl
- os=-sysv
- ;;
- amiga | amiga-*)
- basic_machine=m68k-unknown
- ;;
- amigaos | amigados)
- basic_machine=m68k-unknown
- os=-amigaos
- ;;
- amigaunix | amix)
- basic_machine=m68k-unknown
- os=-sysv4
- ;;
- apollo68)
- basic_machine=m68k-apollo
- os=-sysv
- ;;
- apollo68bsd)
- basic_machine=m68k-apollo
- os=-bsd
- ;;
- aux)
- basic_machine=m68k-apple
- os=-aux
- ;;
- balance)
- basic_machine=ns32k-sequent
- os=-dynix
- ;;
- blackfin)
- basic_machine=bfin-unknown
- os=-linux
- ;;
- blackfin-*)
- basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
- os=-linux
- ;;
- c90)
- basic_machine=c90-cray
- os=-unicos
- ;;
- convex-c1)
- basic_machine=c1-convex
- os=-bsd
- ;;
- convex-c2)
- basic_machine=c2-convex
- os=-bsd
- ;;
- convex-c32)
- basic_machine=c32-convex
- os=-bsd
- ;;
- convex-c34)
- basic_machine=c34-convex
- os=-bsd
- ;;
- convex-c38)
- basic_machine=c38-convex
- os=-bsd
- ;;
- cray | j90)
- basic_machine=j90-cray
- os=-unicos
- ;;
- craynv)
- basic_machine=craynv-cray
- os=-unicosmp
- ;;
- cr16)
- basic_machine=cr16-unknown
- os=-elf
- ;;
- crds | unos)
- basic_machine=m68k-crds
- ;;
- crisv32 | crisv32-* | etraxfs*)
- basic_machine=crisv32-axis
- ;;
- cris | cris-* | etrax*)
- basic_machine=cris-axis
- ;;
- crx)
- basic_machine=crx-unknown
- os=-elf
- ;;
- da30 | da30-*)
- basic_machine=m68k-da30
- ;;
- decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
- basic_machine=mips-dec
- ;;
- decsystem10* | dec10*)
- basic_machine=pdp10-dec
- os=-tops10
- ;;
- decsystem20* | dec20*)
- basic_machine=pdp10-dec
- os=-tops20
- ;;
- delta | 3300 | motorola-3300 | motorola-delta \
- | 3300-motorola | delta-motorola)
- basic_machine=m68k-motorola
- ;;
- delta88)
- basic_machine=m88k-motorola
- os=-sysv3
- ;;
- djgpp)
- basic_machine=i586-pc
- os=-msdosdjgpp
- ;;
- dpx20 | dpx20-*)
- basic_machine=rs6000-bull
- os=-bosx
- ;;
- dpx2* | dpx2*-bull)
- basic_machine=m68k-bull
- os=-sysv3
- ;;
- ebmon29k)
- basic_machine=a29k-amd
- os=-ebmon
- ;;
- elxsi)
- basic_machine=elxsi-elxsi
- os=-bsd
- ;;
- encore | umax | mmax)
- basic_machine=ns32k-encore
- ;;
- es1800 | OSE68k | ose68k | ose | OSE)
- basic_machine=m68k-ericsson
- os=-ose
- ;;
- fx2800)
- basic_machine=i860-alliant
- ;;
- genix)
- basic_machine=ns32k-ns
- ;;
- gmicro)
- basic_machine=tron-gmicro
- os=-sysv
- ;;
- go32)
- basic_machine=i386-pc
- os=-go32
- ;;
- h3050r* | hiux*)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- h8300hms)
- basic_machine=h8300-hitachi
- os=-hms
- ;;
- h8300xray)
- basic_machine=h8300-hitachi
- os=-xray
- ;;
- h8500hms)
- basic_machine=h8500-hitachi
- os=-hms
- ;;
- harris)
- basic_machine=m88k-harris
- os=-sysv3
- ;;
- hp300-*)
- basic_machine=m68k-hp
- ;;
- hp300bsd)
- basic_machine=m68k-hp
- os=-bsd
- ;;
- hp300hpux)
- basic_machine=m68k-hp
- os=-hpux
- ;;
- hp3k9[0-9][0-9] | hp9[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hp9k2[0-9][0-9] | hp9k31[0-9])
- basic_machine=m68000-hp
- ;;
- hp9k3[2-9][0-9])
- basic_machine=m68k-hp
- ;;
- hp9k6[0-9][0-9] | hp6[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hp9k7[0-79][0-9] | hp7[0-79][0-9])
- basic_machine=hppa1.1-hp
- ;;
- hp9k78[0-9] | hp78[0-9])
- # FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
- # FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][13679] | hp8[0-9][13679])
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][0-9] | hp8[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hppa-next)
- os=-nextstep3
- ;;
- hppaosf)
- basic_machine=hppa1.1-hp
- os=-osf
- ;;
- hppro)
- basic_machine=hppa1.1-hp
- os=-proelf
- ;;
- i370-ibm* | ibm*)
- basic_machine=i370-ibm
- ;;
-# I'm not sure what "Sysv32" means. Should this be sysv3.2?
- i*86v32)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv32
- ;;
- i*86v4*)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv4
- ;;
- i*86v)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv
- ;;
- i*86sol2)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-solaris2
- ;;
- i386mach)
- basic_machine=i386-mach
- os=-mach
- ;;
- i386-vsta | vsta)
- basic_machine=i386-unknown
- os=-vsta
- ;;
- iris | iris4d)
- basic_machine=mips-sgi
- case $os in
- -irix*)
- ;;
- *)
- os=-irix4
- ;;
- esac
- ;;
- isi68 | isi)
- basic_machine=m68k-isi
- os=-sysv
- ;;
- m68knommu)
- basic_machine=m68k-unknown
- os=-linux
- ;;
- m68knommu-*)
- basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
- os=-linux
- ;;
- m88k-omron*)
- basic_machine=m88k-omron
- ;;
- magnum | m3230)
- basic_machine=mips-mips
- os=-sysv
- ;;
- merlin)
- basic_machine=ns32k-utek
- os=-sysv
- ;;
- mingw32)
- basic_machine=i386-pc
- os=-mingw32
- ;;
- mingw32ce)
- basic_machine=arm-unknown
- os=-mingw32ce
- ;;
- miniframe)
- basic_machine=m68000-convergent
- ;;
- *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
- mips3*-*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
- ;;
- mips3*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
- ;;
- monitor)
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- morphos)
- basic_machine=powerpc-unknown
- os=-morphos
- ;;
- msdos)
- basic_machine=i386-pc
- os=-msdos
- ;;
- ms1-*)
- basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
- ;;
- mvs)
- basic_machine=i370-ibm
- os=-mvs
- ;;
- ncr3000)
- basic_machine=i486-ncr
- os=-sysv4
- ;;
- netbsd386)
- basic_machine=i386-unknown
- os=-netbsd
- ;;
- netwinder)
- basic_machine=armv4l-rebel
- os=-linux
- ;;
- news | news700 | news800 | news900)
- basic_machine=m68k-sony
- os=-newsos
- ;;
- news1000)
- basic_machine=m68030-sony
- os=-newsos
- ;;
- news-3600 | risc-news)
- basic_machine=mips-sony
- os=-newsos
- ;;
- necv70)
- basic_machine=v70-nec
- os=-sysv
- ;;
- next | m*-next )
- basic_machine=m68k-next
- case $os in
- -nextstep* )
- ;;
- -ns2*)
- os=-nextstep2
- ;;
- *)
- os=-nextstep3
- ;;
- esac
- ;;
- nh3000)
- basic_machine=m68k-harris
- os=-cxux
- ;;
- nh[45]000)
- basic_machine=m88k-harris
- os=-cxux
- ;;
- nindy960)
- basic_machine=i960-intel
- os=-nindy
- ;;
- mon960)
- basic_machine=i960-intel
- os=-mon960
- ;;
- nonstopux)
- basic_machine=mips-compaq
- os=-nonstopux
- ;;
- np1)
- basic_machine=np1-gould
- ;;
- nsr-tandem)
- basic_machine=nsr-tandem
- ;;
- op50n-* | op60c-*)
- basic_machine=hppa1.1-oki
- os=-proelf
- ;;
- openrisc | openrisc-*)
- basic_machine=or32-unknown
- ;;
- os400)
- basic_machine=powerpc-ibm
- os=-os400
- ;;
- OSE68000 | ose68000)
- basic_machine=m68000-ericsson
- os=-ose
- ;;
- os68k)
- basic_machine=m68k-none
- os=-os68k
- ;;
- pa-hitachi)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- paragon)
- basic_machine=i860-intel
- os=-osf
- ;;
- parisc)
- basic_machine=hppa-unknown
- os=-linux
- ;;
- parisc-*)
- basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
- os=-linux
- ;;
- pbd)
- basic_machine=sparc-tti
- ;;
- pbb)
- basic_machine=m68k-tti
- ;;
- pc532 | pc532-*)
- basic_machine=ns32k-pc532
- ;;
- pc98)
- basic_machine=i386-pc
- ;;
- pc98-*)
- basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentium | p5 | k5 | k6 | nexgen | viac3)
- basic_machine=i586-pc
- ;;
- pentiumpro | p6 | 6x86 | athlon | athlon_*)
- basic_machine=i686-pc
- ;;
- pentiumii | pentium2 | pentiumiii | pentium3)
- basic_machine=i686-pc
- ;;
- pentium4)
- basic_machine=i786-pc
- ;;
- pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
- basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentiumpro-* | p6-* | 6x86-* | athlon-*)
- basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
- basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentium4-*)
- basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pn)
- basic_machine=pn-gould
- ;;
- power) basic_machine=power-ibm
- ;;
- ppc) basic_machine=powerpc-unknown
- ;;
- ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppcle | powerpclittle | ppc-le | powerpc-little)
- basic_machine=powerpcle-unknown
- ;;
- ppcle-* | powerpclittle-*)
- basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppc64) basic_machine=powerpc64-unknown
- ;;
- ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppc64le | powerpc64little | ppc64-le | powerpc64-little)
- basic_machine=powerpc64le-unknown
- ;;
- ppc64le-* | powerpc64little-*)
- basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ps2)
- basic_machine=i386-ibm
- ;;
- pw32)
- basic_machine=i586-unknown
- os=-pw32
- ;;
- rdos)
- basic_machine=i386-pc
- os=-rdos
- ;;
- rom68k)
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- rm[46]00)
- basic_machine=mips-siemens
- ;;
- rtpc | rtpc-*)
- basic_machine=romp-ibm
- ;;
- s390 | s390-*)
- basic_machine=s390-ibm
- ;;
- s390x | s390x-*)
- basic_machine=s390x-ibm
- ;;
- sa29200)
- basic_machine=a29k-amd
- os=-udi
- ;;
- sb1)
- basic_machine=mipsisa64sb1-unknown
- ;;
- sb1el)
- basic_machine=mipsisa64sb1el-unknown
- ;;
- sde)
- basic_machine=mipsisa32-sde
- os=-elf
- ;;
- sei)
- basic_machine=mips-sei
- os=-seiux
- ;;
- sequent)
- basic_machine=i386-sequent
- ;;
- sh)
- basic_machine=sh-hitachi
- os=-hms
- ;;
- sh5el)
- basic_machine=sh5le-unknown
- ;;
- sh64)
- basic_machine=sh64-unknown
- ;;
- sparclite-wrs | simso-wrs)
- basic_machine=sparclite-wrs
- os=-vxworks
- ;;
- sps7)
- basic_machine=m68k-bull
- os=-sysv2
- ;;
- spur)
- basic_machine=spur-unknown
- ;;
- st2000)
- basic_machine=m68k-tandem
- ;;
- stratus)
- basic_machine=i860-stratus
- os=-sysv4
- ;;
- sun2)
- basic_machine=m68000-sun
- ;;
- sun2os3)
- basic_machine=m68000-sun
- os=-sunos3
- ;;
- sun2os4)
- basic_machine=m68000-sun
- os=-sunos4
- ;;
- sun3os3)
- basic_machine=m68k-sun
- os=-sunos3
- ;;
- sun3os4)
- basic_machine=m68k-sun
- os=-sunos4
- ;;
- sun4os3)
- basic_machine=sparc-sun
- os=-sunos3
- ;;
- sun4os4)
- basic_machine=sparc-sun
- os=-sunos4
- ;;
- sun4sol2)
- basic_machine=sparc-sun
- os=-solaris2
- ;;
- sun3 | sun3-*)
- basic_machine=m68k-sun
- ;;
- sun4)
- basic_machine=sparc-sun
- ;;
- sun386 | sun386i | roadrunner)
- basic_machine=i386-sun
- ;;
- sv1)
- basic_machine=sv1-cray
- os=-unicos
- ;;
- symmetry)
- basic_machine=i386-sequent
- os=-dynix
- ;;
- t3e)
- basic_machine=alphaev5-cray
- os=-unicos
- ;;
- t90)
- basic_machine=t90-cray
- os=-unicos
- ;;
- tic54x | c54x*)
- basic_machine=tic54x-unknown
- os=-coff
- ;;
- tic55x | c55x*)
- basic_machine=tic55x-unknown
- os=-coff
- ;;
- tic6x | c6x*)
- basic_machine=tic6x-unknown
- os=-coff
- ;;
- tile*)
- basic_machine=tile-unknown
- os=-linux-gnu
- ;;
- tx39)
- basic_machine=mipstx39-unknown
- ;;
- tx39el)
- basic_machine=mipstx39el-unknown
- ;;
- toad1)
- basic_machine=pdp10-xkl
- os=-tops20
- ;;
- tower | tower-32)
- basic_machine=m68k-ncr
- ;;
- tpf)
- basic_machine=s390x-ibm
- os=-tpf
- ;;
- udi29k)
- basic_machine=a29k-amd
- os=-udi
- ;;
- ultra3)
- basic_machine=a29k-nyu
- os=-sym1
- ;;
- v810 | necv810)
- basic_machine=v810-nec
- os=-none
- ;;
- vaxv)
- basic_machine=vax-dec
- os=-sysv
- ;;
- vms)
- basic_machine=vax-dec
- os=-vms
- ;;
- vpp*|vx|vx-*)
- basic_machine=f301-fujitsu
- ;;
- vxworks960)
- basic_machine=i960-wrs
- os=-vxworks
- ;;
- vxworks68)
- basic_machine=m68k-wrs
- os=-vxworks
- ;;
- vxworks29k)
- basic_machine=a29k-wrs
- os=-vxworks
- ;;
- w65*)
- basic_machine=w65-wdc
- os=-none
- ;;
- w89k-*)
- basic_machine=hppa1.1-winbond
- os=-proelf
- ;;
- xbox)
- basic_machine=i686-pc
- os=-mingw32
- ;;
- xps | xps100)
- basic_machine=xps100-honeywell
- ;;
- ymp)
- basic_machine=ymp-cray
- os=-unicos
- ;;
- z8k-*-coff)
- basic_machine=z8k-unknown
- os=-sim
- ;;
- none)
- basic_machine=none-none
- os=-none
- ;;
-
-# Here we handle the default manufacturer of certain CPU types. It is in
-# some cases the only manufacturer, in others, it is the most popular.
- w89k)
- basic_machine=hppa1.1-winbond
- ;;
- op50n)
- basic_machine=hppa1.1-oki
- ;;
- op60c)
- basic_machine=hppa1.1-oki
- ;;
- romp)
- basic_machine=romp-ibm
- ;;
- mmix)
- basic_machine=mmix-knuth
- ;;
- rs6000)
- basic_machine=rs6000-ibm
- ;;
- vax)
- basic_machine=vax-dec
- ;;
- pdp10)
- # there are many clones, so DEC is not a safe bet
- basic_machine=pdp10-unknown
- ;;
- pdp11)
- basic_machine=pdp11-dec
- ;;
- we32k)
- basic_machine=we32k-att
- ;;
- sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
- basic_machine=sh-unknown
- ;;
- sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
- basic_machine=sparc-sun
- ;;
- cydra)
- basic_machine=cydra-cydrome
- ;;
- orion)
- basic_machine=orion-highlevel
- ;;
- orion105)
- basic_machine=clipper-highlevel
- ;;
- mac | mpw | mac-mpw)
- basic_machine=m68k-apple
- ;;
- pmac | pmac-mpw)
- basic_machine=powerpc-apple
- ;;
- *-unknown)
- # Make sure to match an already-canonicalized machine name.
- ;;
- *)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
- *-digital*)
- basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
- ;;
- *-commodore*)
- basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
- ;;
- *)
- ;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if [ x"$os" != x"" ]
-then
-case $os in
- # First match some system type aliases
- # that might get confused with valid system types.
- # -solaris* is a basic system type, with this one exception.
- -solaris1 | -solaris1.*)
- os=`echo $os | sed -e 's|solaris1|sunos4|'`
- ;;
- -solaris)
- os=-solaris2
- ;;
- -svr4*)
- os=-sysv4
- ;;
- -unixware*)
- os=-sysv4.2uw
- ;;
- -gnu/linux*)
- os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
- ;;
- # First accept the basic system types.
- # The portable systems comes first.
- # Each alternative MUST END IN A *, to match a version number.
- # -sysv* is not here because it comes later, after sysvr4.
- -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
- | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
- | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
- | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* \
- | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
- | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
- | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
- | -openbsd* | -solidbsd* \
- | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
- | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
- | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
- | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
- | -chorusos* | -chorusrdb* \
- | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
- | -uxpv* | -beos* | -mpeix* | -udk* \
- | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
- | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
- | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
- | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
- | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
- | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
- | -skyos* | -haiku* | -rdos* | -toppers* | -drops*)
- # Remember, each alternative MUST END IN *, to match a version number.
- ;;
- -qnx*)
- case $basic_machine in
- x86-* | i*86-*)
- ;;
- *)
- os=-nto$os
- ;;
- esac
- ;;
- -nto-qnx*)
- ;;
- -nto*)
- os=`echo $os | sed -e 's|nto|nto-qnx|'`
- ;;
- -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
- | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
- | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
- ;;
- -mac*)
- os=`echo $os | sed -e 's|mac|macos|'`
- ;;
- -linux-dietlibc)
- os=-linux-dietlibc
- ;;
- -linux*)
- os=`echo $os | sed -e 's|linux|linux-gnu|'`
- ;;
- -sunos5*)
- os=`echo $os | sed -e 's|sunos5|solaris2|'`
- ;;
- -sunos6*)
- os=`echo $os | sed -e 's|sunos6|solaris3|'`
- ;;
- -opened*)
- os=-openedition
- ;;
- -os400*)
- os=-os400
- ;;
- -wince*)
- os=-wince
- ;;
- -osfrose*)
- os=-osfrose
- ;;
- -osf*)
- os=-osf
- ;;
- -utek*)
- os=-bsd
- ;;
- -dynix*)
- os=-bsd
- ;;
- -acis*)
- os=-aos
- ;;
- -atheos*)
- os=-atheos
- ;;
- -syllable*)
- os=-syllable
- ;;
- -386bsd)
- os=-bsd
- ;;
- -ctix* | -uts*)
- os=-sysv
- ;;
- -nova*)
- os=-rtmk-nova
- ;;
- -ns2 )
- os=-nextstep2
- ;;
- -nsk*)
- os=-nsk
- ;;
- # Preserve the version number of sinix5.
- -sinix5.*)
- os=`echo $os | sed -e 's|sinix|sysv|'`
- ;;
- -sinix*)
- os=-sysv4
- ;;
- -tpf*)
- os=-tpf
- ;;
- -triton*)
- os=-sysv3
- ;;
- -oss*)
- os=-sysv3
- ;;
- -svr4)
- os=-sysv4
- ;;
- -svr3)
- os=-sysv3
- ;;
- -sysvr4)
- os=-sysv4
- ;;
- # This must come after -sysvr4.
- -sysv*)
- ;;
- -ose*)
- os=-ose
- ;;
- -es1800*)
- os=-ose
- ;;
- -xenix)
- os=-xenix
- ;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- os=-mint
- ;;
- -aros*)
- os=-aros
- ;;
- -kaos*)
- os=-kaos
- ;;
- -zvmoe)
- os=-zvmoe
- ;;
- -none)
- ;;
- *)
- # Get rid of the `-' at the beginning of $os.
- os=`echo $os | sed 's/[^-]*-//'`
- echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
- exit 1
- ;;
-esac
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system. Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-case $basic_machine in
- score-*)
- os=-elf
- ;;
- spu-*)
- os=-elf
- ;;
- *-acorn)
- os=-riscix1.2
- ;;
- arm*-rebel)
- os=-linux
- ;;
- arm*-semi)
- os=-aout
- ;;
- c4x-* | tic4x-*)
- os=-coff
- ;;
- # This must come before the *-dec entry.
- pdp10-*)
- os=-tops20
- ;;
- pdp11-*)
- os=-none
- ;;
- *-dec | vax-*)
- os=-ultrix4.2
- ;;
- m68*-apollo)
- os=-domain
- ;;
- i386-sun)
- os=-sunos4.0.2
- ;;
- m68000-sun)
- os=-sunos3
- # This also exists in the configure program, but was not the
- # default.
- # os=-sunos4
- ;;
- m68*-cisco)
- os=-aout
- ;;
- mep-*)
- os=-elf
- ;;
- mips*-cisco)
- os=-elf
- ;;
- mips*-*)
- os=-elf
- ;;
- or32-*)
- os=-coff
- ;;
- *-tti) # must be before sparc entry or we get the wrong os.
- os=-sysv3
- ;;
- sparc-* | *-sun)
- os=-sunos4.1.1
- ;;
- *-be)
- os=-beos
- ;;
- *-haiku)
- os=-haiku
- ;;
- *-ibm)
- os=-aix
- ;;
- *-knuth)
- os=-mmixware
- ;;
- *-wec)
- os=-proelf
- ;;
- *-winbond)
- os=-proelf
- ;;
- *-oki)
- os=-proelf
- ;;
- *-hp)
- os=-hpux
- ;;
- *-hitachi)
- os=-hiux
- ;;
- i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
- os=-sysv
- ;;
- *-cbm)
- os=-amigaos
- ;;
- *-dg)
- os=-dgux
- ;;
- *-dolphin)
- os=-sysv3
- ;;
- m68k-ccur)
- os=-rtu
- ;;
- m88k-omron*)
- os=-luna
- ;;
- *-next )
- os=-nextstep
- ;;
- *-sequent)
- os=-ptx
- ;;
- *-crds)
- os=-unos
- ;;
- *-ns)
- os=-genix
- ;;
- i370-*)
- os=-mvs
- ;;
- *-next)
- os=-nextstep3
- ;;
- *-gould)
- os=-sysv
- ;;
- *-highlevel)
- os=-bsd
- ;;
- *-encore)
- os=-bsd
- ;;
- *-sgi)
- os=-irix
- ;;
- *-siemens)
- os=-sysv4
- ;;
- *-masscomp)
- os=-rtu
- ;;
- f30[01]-fujitsu | f700-fujitsu)
- os=-uxpv
- ;;
- *-rom68k)
- os=-coff
- ;;
- *-*bug)
- os=-coff
- ;;
- *-apple)
- os=-macos
- ;;
- *-atari*)
- os=-mint
- ;;
- *)
- os=-none
- ;;
-esac
-fi
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer. We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
- *-unknown)
- case $os in
- -riscix*)
- vendor=acorn
- ;;
- -sunos*)
- vendor=sun
- ;;
- -aix*)
- vendor=ibm
- ;;
- -beos*)
- vendor=be
- ;;
- -hpux*)
- vendor=hp
- ;;
- -mpeix*)
- vendor=hp
- ;;
- -hiux*)
- vendor=hitachi
- ;;
- -unos*)
- vendor=crds
- ;;
- -dgux*)
- vendor=dg
- ;;
- -luna*)
- vendor=omron
- ;;
- -genix*)
- vendor=ns
- ;;
- -mvs* | -opened*)
- vendor=ibm
- ;;
- -os400*)
- vendor=ibm
- ;;
- -ptx*)
- vendor=sequent
- ;;
- -tpf*)
- vendor=ibm
- ;;
- -vxsim* | -vxworks* | -windiss*)
- vendor=wrs
- ;;
- -aux*)
- vendor=apple
- ;;
- -hms*)
- vendor=hitachi
- ;;
- -mpw* | -macos*)
- vendor=apple
- ;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- vendor=atari
- ;;
- -vos*)
- vendor=stratus
- ;;
- esac
- basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
- ;;
-esac
-
-echo $basic_machine$os
-exit
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/config/depcomp b/config/depcomp
deleted file mode 100644
index e5f9736..0000000
--- a/config/depcomp
+++ /dev/null
@@ -1,589 +0,0 @@
-#! /bin/sh
-# depcomp - compile a program generating dependencies as side-effects
-
-scriptversion=2007-03-29.01
-
-# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software
-# Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program 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 General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
-
-case $1 in
- '')
- echo "$0: No command. Try \`$0 --help' for more information." 1>&2
- exit 1;
- ;;
- -h | --h*)
- cat <<\EOF
-Usage: depcomp [--help] [--version] PROGRAM [ARGS]
-
-Run PROGRAMS ARGS to compile a file, generating dependencies
-as side-effects.
-
-Environment variables:
- depmode Dependency tracking mode.
- source Source file read by `PROGRAMS ARGS'.
- object Object file output by `PROGRAMS ARGS'.
- DEPDIR directory where to store dependencies.
- depfile Dependency file to output.
- tmpdepfile Temporary file to use when outputing dependencies.
- libtool Whether libtool is used (yes/no).
-
-Report bugs to <bug-automake@gnu.org>.
-EOF
- exit $?
- ;;
- -v | --v*)
- echo "depcomp $scriptversion"
- exit $?
- ;;
-esac
-
-if test -z "$depmode" || test -z "$source" || test -z "$object"; then
- echo "depcomp: Variables source, object and depmode must be set" 1>&2
- exit 1
-fi
-
-# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
-depfile=${depfile-`echo "$object" |
- sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
-tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
-
-rm -f "$tmpdepfile"
-
-# Some modes work just like other modes, but use different flags. We
-# parameterize here, but still list the modes in the big case below,
-# to make depend.m4 easier to write. Note that we *cannot* use a case
-# here, because this file can only contain one case statement.
-if test "$depmode" = hp; then
- # HP compiler uses -M and no extra arg.
- gccflag=-M
- depmode=gcc
-fi
-
-if test "$depmode" = dashXmstdout; then
- # This is just like dashmstdout with a different argument.
- dashmflag=-xM
- depmode=dashmstdout
-fi
-
-case "$depmode" in
-gcc3)
-## gcc 3 implements dependency tracking that does exactly what
-## we want. Yay! Note: for some reason libtool 1.4 doesn't like
-## it if -MD -MP comes after the -MF stuff. Hmm.
-## Unfortunately, FreeBSD c89 acceptance of flags depends upon
-## the command line argument order; so add the flags where they
-## appear in depend2.am. Note that the slowdown incurred here
-## affects only configure: in makefiles, %FASTDEP% shortcuts this.
- for arg
- do
- case $arg in
- -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
- *) set fnord "$@" "$arg" ;;
- esac
- shift # fnord
- shift # $arg
- done
- "$@"
- stat=$?
- if test $stat -eq 0; then :
- else
- rm -f "$tmpdepfile"
- exit $stat
- fi
- mv "$tmpdepfile" "$depfile"
- ;;
-
-gcc)
-## There are various ways to get dependency output from gcc. Here's
-## why we pick this rather obscure method:
-## - Don't want to use -MD because we'd like the dependencies to end
-## up in a subdir. Having to rename by hand is ugly.
-## (We might end up doing this anyway to support other compilers.)
-## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
-## -MM, not -M (despite what the docs say).
-## - Using -M directly means running the compiler twice (even worse
-## than renaming).
- if test -z "$gccflag"; then
- gccflag=-MD,
- fi
- "$@" -Wp,"$gccflag$tmpdepfile"
- stat=$?
- if test $stat -eq 0; then :
- else
- rm -f "$tmpdepfile"
- exit $stat
- fi
- rm -f "$depfile"
- echo "$object : \\" > "$depfile"
- alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
-## The second -e expression handles DOS-style file names with drive letters.
- sed -e 's/^[^:]*: / /' \
- -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
-## This next piece of magic avoids the `deleted header file' problem.
-## The problem is that when a header file which appears in a .P file
-## is deleted, the dependency causes make to die (because there is
-## typically no way to rebuild the header). We avoid this by adding
-## dummy dependencies for each header file. Too bad gcc doesn't do
-## this for us directly.
- tr ' ' '
-' < "$tmpdepfile" |
-## Some versions of gcc put a space before the `:'. On the theory
-## that the space means something, we add a space to the output as
-## well.
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly. Breaking it into two sed invocations is a workaround.
- sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
- rm -f "$tmpdepfile"
- ;;
-
-hp)
- # This case exists only to let depend.m4 do its work. It works by
- # looking at the text of this script. This case will never be run,
- # since it is checked for above.
- exit 1
- ;;
-
-sgi)
- if test "$libtool" = yes; then
- "$@" "-Wp,-MDupdate,$tmpdepfile"
- else
- "$@" -MDupdate "$tmpdepfile"
- fi
- stat=$?
- if test $stat -eq 0; then :
- else
- rm -f "$tmpdepfile"
- exit $stat
- fi
- rm -f "$depfile"
-
- if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
- echo "$object : \\" > "$depfile"
-
- # Clip off the initial element (the dependent). Don't try to be
- # clever and replace this with sed code, as IRIX sed won't handle
- # lines with more than a fixed number of characters (4096 in
- # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
- # the IRIX cc adds comments like `#:fec' to the end of the
- # dependency line.
- tr ' ' '
-' < "$tmpdepfile" \
- | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
- tr '
-' ' ' >> $depfile
- echo >> $depfile
-
- # The second pass generates a dummy entry for each header file.
- tr ' ' '
-' < "$tmpdepfile" \
- | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
- >> $depfile
- else
- # The sourcefile does not contain any dependencies, so just
- # store a dummy comment line, to avoid errors with the Makefile
- # "include basename.Plo" scheme.
- echo "#dummy" > "$depfile"
- fi
- rm -f "$tmpdepfile"
- ;;
-
-aix)
- # The C for AIX Compiler uses -M and outputs the dependencies
- # in a .u file. In older versions, this file always lives in the
- # current directory. Also, the AIX compiler puts `$object:' at the
- # start of each line; $object doesn't have directory information.
- # Version 6 uses the directory in both cases.
- dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
- test "x$dir" = "x$object" && dir=
- base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
- if test "$libtool" = yes; then
- tmpdepfile1=$dir$base.u
- tmpdepfile2=$base.u
- tmpdepfile3=$dir.libs/$base.u
- "$@" -Wc,-M
- else
- tmpdepfile1=$dir$base.u
- tmpdepfile2=$dir$base.u
- tmpdepfile3=$dir$base.u
- "$@" -M
- fi
- stat=$?
-
- if test $stat -eq 0; then :
- else
- rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
- exit $stat
- fi
-
- for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
- do
- test -f "$tmpdepfile" && break
- done
- if test -f "$tmpdepfile"; then
- # Each line is of the form `foo.o: dependent.h'.
- # Do two passes, one to just change these to
- # `$object: dependent.h' and one to simply `dependent.h:'.
- sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
- # That's a tab and a space in the [].
- sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
- else
- # The sourcefile does not contain any dependencies, so just
- # store a dummy comment line, to avoid errors with the Makefile
- # "include basename.Plo" scheme.
- echo "#dummy" > "$depfile"
- fi
- rm -f "$tmpdepfile"
- ;;
-
-icc)
- # Intel's C compiler understands `-MD -MF file'. However on
- # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
- # ICC 7.0 will fill foo.d with something like
- # foo.o: sub/foo.c
- # foo.o: sub/foo.h
- # which is wrong. We want:
- # sub/foo.o: sub/foo.c
- # sub/foo.o: sub/foo.h
- # sub/foo.c:
- # sub/foo.h:
- # ICC 7.1 will output
- # foo.o: sub/foo.c sub/foo.h
- # and will wrap long lines using \ :
- # foo.o: sub/foo.c ... \
- # sub/foo.h ... \
- # ...
-
- "$@" -MD -MF "$tmpdepfile"
- stat=$?
- if test $stat -eq 0; then :
- else
- rm -f "$tmpdepfile"
- exit $stat
- fi
- rm -f "$depfile"
- # Each line is of the form `foo.o: dependent.h',
- # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
- # Do two passes, one to just change these to
- # `$object: dependent.h' and one to simply `dependent.h:'.
- sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
- # Some versions of the HPUX 10.20 sed can't process this invocation
- # correctly. Breaking it into two sed invocations is a workaround.
- sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
- sed -e 's/$/ :/' >> "$depfile"
- rm -f "$tmpdepfile"
- ;;
-
-hp2)
- # The "hp" stanza above does not work with aCC (C++) and HP's ia64
- # compilers, which have integrated preprocessors. The correct option
- # to use with these is +Maked; it writes dependencies to a file named
- # 'foo.d', which lands next to the object file, wherever that
- # happens to be.
- # Much of this is similar to the tru64 case; see comments there.
- dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
- test "x$dir" = "x$object" && dir=
- base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
- if test "$libtool" = yes; then
- tmpdepfile1=$dir$base.d
- tmpdepfile2=$dir.libs/$base.d
- "$@" -Wc,+Maked
- else
- tmpdepfile1=$dir$base.d
- tmpdepfile2=$dir$base.d
- "$@" +Maked
- fi
- stat=$?
- if test $stat -eq 0; then :
- else
- rm -f "$tmpdepfile1" "$tmpdepfile2"
- exit $stat
- fi
-
- for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
- do
- test -f "$tmpdepfile" && break
- done
- if test -f "$tmpdepfile"; then
- sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
- # Add `dependent.h:' lines.
- sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
- else
- echo "#dummy" > "$depfile"
- fi
- rm -f "$tmpdepfile" "$tmpdepfile2"
- ;;
-
-tru64)
- # The Tru64 compiler uses -MD to generate dependencies as a side
- # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
- # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
- # dependencies in `foo.d' instead, so we check for that too.
- # Subdirectories are respected.
- dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
- test "x$dir" = "x$object" && dir=
- base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
-
- if test "$libtool" = yes; then
- # With Tru64 cc, shared objects can also be used to make a
- # static library. This mechanism is used in libtool 1.4 series to
- # handle both shared and static libraries in a single compilation.
- # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
- #
- # With libtool 1.5 this exception was removed, and libtool now
- # generates 2 separate objects for the 2 libraries. These two
- # compilations output dependencies in $dir.libs/$base.o.d and
- # in $dir$base.o.d. We have to check for both files, because
- # one of the two compilations can be disabled. We should prefer
- # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
- # automatically cleaned when .libs/ is deleted, while ignoring
- # the former would cause a distcleancheck panic.
- tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
- tmpdepfile2=$dir$base.o.d # libtool 1.5
- tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
- tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
- "$@" -Wc,-MD
- else
- tmpdepfile1=$dir$base.o.d
- tmpdepfile2=$dir$base.d
- tmpdepfile3=$dir$base.d
- tmpdepfile4=$dir$base.d
- "$@" -MD
- fi
-
- stat=$?
- if test $stat -eq 0; then :
- else
- rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
- exit $stat
- fi
-
- for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
- do
- test -f "$tmpdepfile" && break
- done
- if test -f "$tmpdepfile"; then
- sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
- # That's a tab and a space in the [].
- sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
- else
- echo "#dummy" > "$depfile"
- fi
- rm -f "$tmpdepfile"
- ;;
-
-#nosideeffect)
- # This comment above is used by automake to tell side-effect
- # dependency tracking mechanisms from slower ones.
-
-dashmstdout)
- # Important note: in order to support this mode, a compiler *must*
- # always write the preprocessed file to stdout, regardless of -o.
- "$@" || exit $?
-
- # Remove the call to Libtool.
- if test "$libtool" = yes; then
- while test $1 != '--mode=compile'; do
- shift
- done
- shift
- fi
-
- # Remove `-o $object'.
- IFS=" "
- for arg
- do
- case $arg in
- -o)
- shift
- ;;
- $object)
- shift
- ;;
- *)
- set fnord "$@" "$arg"
- shift # fnord
- shift # $arg
- ;;
- esac
- done
-
- test -z "$dashmflag" && dashmflag=-M
- # Require at least two characters before searching for `:'
- # in the target name. This is to cope with DOS-style filenames:
- # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
- "$@" $dashmflag |
- sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
- rm -f "$depfile"
- cat < "$tmpdepfile" > "$depfile"
- tr ' ' '
-' < "$tmpdepfile" | \
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly. Breaking it into two sed invocations is a workaround.
- sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
- rm -f "$tmpdepfile"
- ;;
-
-dashXmstdout)
- # This case only exists to satisfy depend.m4. It is never actually
- # run, as this mode is specially recognized in the preamble.
- exit 1
- ;;
-
-makedepend)
- "$@" || exit $?
- # Remove any Libtool call
- if test "$libtool" = yes; then
- while test $1 != '--mode=compile'; do
- shift
- done
- shift
- fi
- # X makedepend
- shift
- cleared=no
- for arg in "$@"; do
- case $cleared in
- no)
- set ""; shift
- cleared=yes ;;
- esac
- case "$arg" in
- -D*|-I*)
- set fnord "$@" "$arg"; shift ;;
- # Strip any option that makedepend may not understand. Remove
- # the object too, otherwise makedepend will parse it as a source file.
- -*|$object)
- ;;
- *)
- set fnord "$@" "$arg"; shift ;;
- esac
- done
- obj_suffix="`echo $object | sed 's/^.*\././'`"
- touch "$tmpdepfile"
- ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
- rm -f "$depfile"
- cat < "$tmpdepfile" > "$depfile"
- sed '1,2d' "$tmpdepfile" | tr ' ' '
-' | \
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly. Breaking it into two sed invocations is a workaround.
- sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
- rm -f "$tmpdepfile" "$tmpdepfile".bak
- ;;
-
-cpp)
- # Important note: in order to support this mode, a compiler *must*
- # always write the preprocessed file to stdout.
- "$@" || exit $?
-
- # Remove the call to Libtool.
- if test "$libtool" = yes; then
- while test $1 != '--mode=compile'; do
- shift
- done
- shift
- fi
-
- # Remove `-o $object'.
- IFS=" "
- for arg
- do
- case $arg in
- -o)
- shift
- ;;
- $object)
- shift
- ;;
- *)
- set fnord "$@" "$arg"
- shift # fnord
- shift # $arg
- ;;
- esac
- done
-
- "$@" -E |
- sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
- -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
- sed '$ s: \\$::' > "$tmpdepfile"
- rm -f "$depfile"
- echo "$object : \\" > "$depfile"
- cat < "$tmpdepfile" >> "$depfile"
- sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
- rm -f "$tmpdepfile"
- ;;
-
-msvisualcpp)
- # Important note: in order to support this mode, a compiler *must*
- # always write the preprocessed file to stdout, regardless of -o,
- # because we must use -o when running libtool.
- "$@" || exit $?
- IFS=" "
- for arg
- do
- case "$arg" in
- "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
- set fnord "$@"
- shift
- shift
- ;;
- *)
- set fnord "$@" "$arg"
- shift
- shift
- ;;
- esac
- done
- "$@" -E |
- sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
- rm -f "$depfile"
- echo "$object : \\" > "$depfile"
- . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
- echo " " >> "$depfile"
- . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
- rm -f "$tmpdepfile"
- ;;
-
-none)
- exec "$@"
- ;;
-
-*)
- echo "Unknown depmode $depmode" 1>&2
- exit 1
- ;;
-esac
-
-exit 0
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
diff --git a/config/elfutils.spec.in b/config/elfutils.spec.in
deleted file mode 100644
index 55be54c..0000000
--- a/config/elfutils.spec.in
+++ /dev/null
@@ -1,567 +0,0 @@
-# -*- rpm-spec-*-
-Summary: A collection of utilities and DSOs to handle compiled objects
-Name: elfutils
-Version: @PACKAGE_VERSION@
-Release: 1
-License: GPLv2 with exceptions
-Group: Development/Tools
-Source: elfutils-%{version}.tar.bz2
-Obsoletes: libelf libelf-devel
-Requires: elfutils-libelf = %{version}-%{release}
-Requires: glibc >= 2.7
-
-# ExcludeArch: xxx
-
-BuildRoot: %{_tmppath}/%{name}-root
-BuildRequires: gcc >= 4.1.2-33
-BuildRequires: glibc >= 2.7
-BuildRequires: bison >= 1.875
-BuildRequires: flex >= 2.5.4a
-BuildRequires: bzip2
-BuildRequires: m4
-
-%define _gnu %{nil}
-%define _programprefix eu-
-
-%description
-Elfutils is a collection of utilities, including ld (a linker),
-nm (for listing symbols from object files), size (for listing the
-section sizes of an object or archive file), strip (for discarding
-symbols), readelf (to see the raw ELF file structures), and elflint
-(to check for well-formed ELF files). Also included are numerous
-helper libraries which implement DWARF, ELF, and machine-specific ELF
-handling.
-
-%package devel
-Summary: Development libraries to handle compiled objects.
-Group: Development/Tools
-Requires: elfutils = %{version}-%{release}
-Requires: elfutils-libelf-devel = %{version}-%{release}
-
-%description devel
-The elfutils-devel package contains the libraries to create
-applications for handling compiled objects. libebl provides some
-higher-level ELF access functionality. libdw provides access to
-the DWARF debugging information. libasm provides a programmable
-assembler interface.
-
-%package devel-static
-Summary: Static archives to handle compiled objects.
-Group: Development/Tools
-Requires: elfutils-devel = %{version}-%{release}
-
-%description devel-static
-The elfutils-devel-static archive contains the static archives
-with the code the handle compiled objects.
-
-%package libelf
-Summary: Library to read and write ELF files.
-Group: Development/Tools
-
-%description libelf
-The elfutils-libelf package provides a DSO which allows reading and
-writing ELF files on a high level. Third party programs depend on
-this package to read internals of ELF files. The programs of the
-elfutils package use it also to generate new ELF files.
-
-%package libelf-devel
-Summary: Development support for libelf
-Group: Development/Tools
-Requires: elfutils-libelf = %{version}-%{release}
-Conflicts: libelf-devel
-
-%description libelf-devel
-The elfutils-libelf-devel package contains the libraries to create
-applications for handling compiled objects. libelf allows you to
-access the internals of the ELF object file format, so you can see the
-different sections of an ELF file.
-
-%package libelf-devel-static
-Summary: Static archive of libelf
-Group: Development/Tools
-Requires: elfutils-libelf-devel = %{version}-%{release}
-Conflicts: libelf-devel
-
-%description libelf-devel-static
-The elfutils-libelf-static package contains the static archive
-for libelf.
-
-%prep
-%setup -q
-
-%build
-%configure --program-prefix=%{_programprefix}
-make
-
-%install
-rm -rf ${RPM_BUILD_ROOT}
-mkdir -p ${RPM_BUILD_ROOT}%{_prefix}
-
-%makeinstall
-
-chmod +x ${RPM_BUILD_ROOT}%{_prefix}/%{_lib}/lib*.so*
-chmod +x ${RPM_BUILD_ROOT}%{_prefix}/%{_lib}/elfutils/lib*.so*
-
-# XXX Nuke unpackaged files
-{ cd ${RPM_BUILD_ROOT}
- rm -f .%{_bindir}/eu-ld
- rm -f .%{_includedir}/elfutils/libasm.h
- rm -f .%{_libdir}/libasm.so
- rm -f .%{_libdir}/libasm.a
-}
-
-%check
-make check
-
-%clean
-rm -rf ${RPM_BUILD_ROOT}
-
-%post -p /sbin/ldconfig
-
-%postun -p /sbin/ldconfig
-
-%post libelf -p /sbin/ldconfig
-
-%postun libelf -p /sbin/ldconfig
-
-%files
-%defattr(-,root,root)
-%doc README TODO
-%{_bindir}/eu-elflint
-%{_bindir}/eu-nm
-%{_bindir}/eu-readelf
-%{_bindir}/eu-size
-%{_bindir}/eu-strip
-%{_bindir}/eu-findtextrel
-%{_bindir}/eu-addr2line
-%{_bindir}/eu-elfcmp
-%{_bindir}/eu-ranlib
-%{_bindir}/eu-strings
-%{_bindir}/eu-objdump
-%{_bindir}/eu-ar
-%{_bindir}/eu-unstrip
-%{_bindir}/eu-make-debug-archive
-#%{_bindir}/eu-ld
-%{_libdir}/libasm-%{version}.so
-%{_libdir}/libdw-%{version}.so
-%{_libdir}/libasm.so.*
-%{_libdir}/libdw.so.*
-%dir %{_libdir}/elfutils
-%{_libdir}/elfutils/lib*.so
-
-%files devel
-%defattr(-,root,root)
-%{_includedir}/dwarf.h
-%dir %{_includedir}/elfutils
-%{_includedir}/elfutils/elf-knowledge.h
-#%{_includedir}/elfutils/libasm.h
-%{_includedir}/elfutils/libebl.h
-%{_includedir}/elfutils/libdw.h
-%{_includedir}/elfutils/libdwfl.h
-%{_libdir}/libebl.a
-#%{_libdir}/libasm.so
-%{_libdir}/libdw.so
-
-%files devel-static
-%{_libdir}/libdw.a
-#%{_libdir}/libasm.a
-
-%files libelf
-%defattr(-,root,root)
-%{_libdir}/libelf-%{version}.so
-%{_libdir}/libelf.so.*
-
-%files libelf-devel
-%defattr(-,root,root)
-%{_includedir}/libelf.h
-%{_includedir}/gelf.h
-%{_includedir}/nlist.h
-%{_libdir}/libelf.so
-
-%files libelf-devel-static
-%{_libdir}/libelf.a
-
-%changelog
-* Wed Dec 31 2008 Roland McGrath <roland@redhat.com> 0.138-1
-- Install <elfutils/version.h> header file for applications to use in
- source version compatibility checks.
-- libebl: backend fixes for i386 TLS relocs; backend support for
- NT_386_IOPERM
-- libcpu: disassembler fixes
-- libdwfl: bug fixes
-- libelf: bug fixes
-- nm: bug fixes for handling corrupt input files
-
-* Tue Aug 26 2008 Ulrich Drepper <drepper@redhat.com> 0.137-1
-- Minor fixes for unreleased 0.136 release.
-
-* Mon Aug 25 2008 Ulrich Drepper <drepper@redhat.com> 0.136-1
-- libdwfl: bug fixes; new segment interfaces; all the libdwfl-based
- tools now support --core=COREFILE option
-
-* Mon May 12 2008 Ulrich Drepper <drepper@redhat.com> 0.135-1
-- libdwfl: bug fixes
-- strip: changed handling of ET_REL files wrt symbol tables and relocs
-
-* Tue Apr 8 2008 Ulrich Drepper <drepper@redhat.com> 0.134-1
-- elflint: backend improvements for sparc, alpha
-- libdwfl, libelf: bug fixes
-
-* Sat Mar 1 2008 Ulrich Drepper <drepper@redhat.com> 0.133-1
-- readelf, elflint, libebl: SHT_GNU_ATTRIBUTE section handling (readelf -A)
-- readelf: core note handling for NT_386_TLS, NT_PPC_SPE, Alpha NT_AUXV
-- libdwfl: bug fixes and optimization in relocation handling
-- elfcmp: bug fix for non-allocated section handling
-- ld: implement newer features of binutils linker.
-
-* Mon Jan 21 2008 Ulrich Drepper <drepper@redhat.com> 0.132-1
-- libcpu: Implement x86 and x86-64 disassembler.
-- libasm: Add interface for disassembler.
-- all programs: add debugging of branch prediction.
-- libelf: new function elf_scnshndx.
-
-* Sun Nov 11 2007 Ulrich Drepper <drepper@redhat.com> 0.131-1
-- libdw: DW_FORM_ref_addr support; dwarf_formref entry point now depreca
-ted; bug fixes for oddly-formatted DWARF
-- libdwfl: bug fixes in offline archive support, symbol table handling;
- apply partial relocations for dwfl_module_address_section on
-ET_REL
-- libebl: powerpc backend support for Altivec registers
-
-* Mon Oct 15 2007 Ulrich Drepper <drepper@redhat.com> 0.130-1
-- readelf: -p option can take an argument like -x for one section,
- or no argument (as before) for all SHF_STRINGS sections;
- new option --archive-index (or -c); improved -n output fo
-r core files, on many machines
-- libelf: new function elf_getdata_rawchunk, replaces gelf_rawchunk;
- new functions gelf_getnote, gelf_getauxv, gelf_update_auxv
-- readelf, elflint: handle SHT_NOTE sections without requiring phdrs
-- elflint: stricter checks on debug sections
-- libdwfl: new functions dwfl_build_id_find_elf, dwfl_build_id_find_debu
-ginfo, dwfl_module_build_id, dwfl_module_report_build_id; suppo
-rt dynamic symbol tables found via phdrs; dwfl_standard_find_de
-buginfo now uses build IDs when available
-- unstrip: new option --list (or -n)
-- libebl: backend improvements for sparc, alpha, powerpc
-
-* Tue Aug 14 2007 Ulrich Drepper <drepper@redhat.com> 0.129-1
-- readelf: new options --hex-dump (or -x), --strings (or -p)
-- addr2line: new option --symbols (or -S)
-
-* Wed Apr 18 2007 Ulrich Drepper <drepper@redhat.com> 0.127-1
-- libdw: new function dwarf_getsrcdirs
-- libdwfl: new functions dwfl_module_addrsym, dwfl_report_begin_add,
- dwfl_module_address_section
-
-* Mon Feb 5 2007 Ulrich Drepper <drepper@redhat.com> 0.126-1
-- new program: ar
-
-* Mon Dec 18 2006 Ulrich Drepper <drepper@redhat.com> 0.125-1
-- elflint: Compare DT_GNU_HASH tests.
-- move archives into -static RPMs
-- libelf, elflint: better support for core file handling
-
-* Tue Oct 10 2006 Ulrich Drepper <drepper@redhat.com> 0.124-1
-- libebl: sparc backend support for return value location
-- libebl, libdwfl: backend register name support extended with more info
-- libelf, libdw: bug fixes for unaligned accesses on machines that care
-- readelf, elflint: trivial bugs fixed
-
-* Mon Aug 14 2006 Roland McGrath <roland@redhat.com> 0.123-1
-- libebl: Backend build fixes, thanks to Stepan Kasal.
-- libebl: ia64 backend support for register names, return value location
-- libdwfl: Handle truncated linux kernel module section names.
-- libdwfl: Look for linux kernel vmlinux files with .debug suffix.
-- elflint: Fix checks to permit --hash-style=gnu format.
-
-* Wed Jul 12 2006 Ulrich Drepper <drepper@redhat.com> 0.122-1
-- libebl: add function to test for relative relocation
-- elflint: fix and extend DT_RELCOUNT/DT_RELACOUNT checks
-- elflint, readelf: add support for DT_GNU_HASHlibelf: add elf_gnu_hash
-- elflint, readelf: add support for 64-bit SysV-style hash tables
-- libdwfl: new functions dwfl_module_getsymtab, dwfl_module_getsym.
-
-* Wed Jun 14 2006 <drepper@redhat.com> 0.121-1
-- libelf: bug fixes for rewriting existing files when using mmap.
-- make all installed headers usable in C++ code.
-- readelf: better output format.
-- elflint: fix tests of dynamic section content.
-- ld: Implement --as-needed, --execstack, PT_GNU_STACK. Many small patc
-hes.
-- libdw, libdwfl: handle files without aranges info.
-
-* Tue Apr 4 2006 Ulrich Drepper <drepper@redhat.com> 0.120-1
-- Bug fixes.
-- dwarf.h updated for DWARF 3.0 final specification.
-- libdwfl: New function dwfl_version.
-- The license is now GPL for most files. The libelf, libebl, libdw,and
-libdwfl libraries have additional exceptions. Add reference toOIN.
-
-* Thu Jan 12 2006 Roland McGrath <roland@redhat.com> 0.119-1
-- elflint: more tests.
-- libdwfl: New function dwfl_module_register_names.
-- libebl: New backend hook for register names.
-
-* Tue Dec 6 2005 Ulrich Drepper <drepper@redhat.com> 0.118-1
-- elflint: more tests.
-- libdwfl: New function dwfl_module_register_names.
-- libebl: New backend hook for register names.
-
-* Thu Nov 17 2005 Ulrich Drepper <drepper@redhat.com> 0.117-1
-- libdwfl: New function dwfl_module_return_value_location.
-- libebl: Backend improvements for several CPUs.
-
-* Mon Oct 31 2005 Ulrich Drepper <drepper@redhat.com> 0.116-1
-- libdw: New functions dwarf_ranges, dwarf_entrypc, dwarf_diecu, d
-warf_entry_breakpoints. Removed Dwarf_Func type and functions d
-warf_func_name, dwarf_func_lowpc, dwarf_func_highpc, dwarf_func_
-entrypc, dwarf_func_die; dwarf_getfuncs callback now uses Dwarf_
-Die, and dwarf_func_file, dwarf_func_line, dwarf_func_col replac
-ed by dwarf_decl_file, dwarf_decl_line, dwarf_decl_column; dwarf
-_func_inline, dwarf_func_inline_instances now take Dwarf_Die. Ty
-pe Dwarf_Loc renamed to Dwarf_Op; dwarf_getloclist, dwarf_addrlo
-clists renamed dwarf_getlocation, dwarf_getlocation_addr.
-
-* Fri Sep 2 2005 Ulrich Drepper <drepper@redhat.com> 0.115-1
-- libelf: speed-ups of non-mmap reading.
-- strings: New program.
-- Implement --enable-gcov option for configure.
-- libdw: New function dwarf_getscopes_die.
-
-* Wed Aug 24 2005 Ulrich Drepper <drepper@redhat.com> 0.114-1
-- libelf: new function elf_getaroff
-- libdw: Added dwarf_func_die, dwarf_func_inline, dwarf_func_inline_inst
-ances.
-- libdwfl: New functions dwfl_report_offline, dwfl_offline_section_addre
-ss, dwfl_linux_kernel_report_offline.
-- ranlib: new program
-
-* Mon Aug 15 2005 Ulrich Drepper <drepper@redhat.com> 0.114-1
-- libelf: new function elf_getaroff
-- ranlib: new program
-
-* Wed Aug 10 2005 Ulrich Drepper <@redhat.com> 0.113-1
-- elflint: relax a bit. Allow version definitions for defined symbols ag
-ainstDSO versions also for symbols in nobits sections. Allow .rodata
-sectionto have STRINGS and MERGE flag set.
-- strip: add some more compatibility with binutils.
-
-* Sat Aug 6 2005 Ulrich Drepper <@redhat.com> 0.113-1
-- elflint: relax a bit. Allow version definitions for defined symbols ag
-ainstDSO versions also for symbols in nobits sections. Allow .rodata
-sectionto have STRINGS and MERGE flag set.
-
-* Sat Aug 6 2005 Ulrich Drepper <@redhat.com> 0.113-1
-- elflint: relax a bit. Allow version definitions for defined symbols ag
-ainstDSO versions also for symbols in nobits sections.
-
-* Fri Aug 5 2005 Ulrich Drepper <@redhat.com> 0.112-1
-- elfcmp: some more relaxation.
-- elflint: many more tests, especially regarding to symbol versioning.
-- libelf: Add elfXX_offscn and gelf_offscn.
-- libasm: asm_begin interface changes.
-- libebl: Add three new interfaces to directly access machine, class, an
-ddata encoding information.
-- objdump: New program. Just the beginning.
-
-* Thu Jul 28 2005 Ulrich Drepper <@redhat.com> 0.111-1
-- libdw: now contains all of libdwfl. The latter is not installed anymore.
-- elfcmp: little usability tweak, name and index of differing section is
- printed.
-
-* Sun Jul 24 2005 Ulrich Drepper <@redhat.com> 0.110-1
-- libelf: fix a numbe rof problems with elf_update
-- elfcmp: fix a few bugs. Compare gaps.
-- Fix a few PLT problems and mudflap build issues.
-- libebl: Don't expose Ebl structure definition in libebl.h. It's now p
-rivate.
-
-* Thu Jul 21 2005 Ulrich Drepper <@redhat.com> 0.109-1
-- libebl: Check for matching modules.
-- elflint: Check that copy relocations only happen for OBJECT or NOTYPE
-symbols.
-- elfcmp: New program.
-- libdwfl: New library.
-
-* Mon May 9 2005 Ulrich Drepper <@redhat.com> 0.108-1
-- strip: fix bug introduced in last change
-- libdw: records returned by dwarf_getsrclines are now sorted by address
-
-* Sun May 8 2005 Ulrich Drepper <@redhat.com> 0.108-1
-- strip: fix bug introduced in last change
-
-* Sun May 8 2005 Ulrich Drepper <@redhat.com> 0.107-1
-- readelf: improve DWARF output format
-- strip: support Linux kernel modules
-
-* Fri Apr 29 2005 Ulrich Drepper <drepper@redhat.com> 0.107-1
-- readelf: improve DWARF output format
-
-* Mon Apr 4 2005 Ulrich Drepper <drepper@redhat.com> 0.106-1
-- libdw: Updated dwarf.h from DWARF3 speclibdw: add new funtions dwarf_f
-unc_entrypc, dwarf_func_file, dwarf_func_line,dwarf_func_col, dwarf_ge
-tsrc_file
-
-* Fri Apr 1 2005 Ulrich Drepper <drepper@redhat.com> 0.105-1
-- addr2line: New program
-- libdw: add new functions: dwarf_addrdie, dwarf_macro_*, dwarf_getfuncs
-,dwarf_func_*.
-- findtextrel: use dwarf_addrdie
-
-* Mon Mar 28 2005 Ulrich Drepper <drepper@redhat.com> 0.104-1
-- findtextrel: New program.
-
-* Mon Mar 21 2005 Ulrich Drepper <drepper@redhat.com> 0.103-1
-- libdw: Fix using libdw.h with gcc < 4 and C++ code. Compiler bug.
-
-* Tue Feb 22 2005 Ulrich Drepper <drepper@redhat.com> 0.102-1
-- More Makefile and spec file cleanups.
-
-* Fri Jan 16 2004 Jakub Jelinek <jakub@redhat.com> 0.94-1
-- upgrade to 0.94
-
-* Fri Jan 16 2004 Jakub Jelinek <jakub@redhat.com> 0.93-1
-- upgrade to 0.93
-
-* Thu Jan 8 2004 Jakub Jelinek <jakub@redhat.com> 0.92-1
-- full version
-- macroized spec file for GPL or OSL builds
-- include only libelf under GPL plus wrapper scripts
-
-* Wed Jan 7 2004 Jakub Jelinek <jakub@redhat.com> 0.91-2
-- macroized spec file for GPL or OSL builds
-
-* Wed Jan 7 2004 Ulrich Drepper <drepper@redhat.com>
-- split elfutils-devel into two packages.
-
-* Wed Jan 7 2004 Jakub Jelinek <jakub@redhat.com> 0.91-1
-- include only libelf under GPL plus wrapper scripts
-
-* Tue Dec 23 2003 Jeff Johnson <jbj@redhat.com> 0.89-3
-- readelf, not readline, in %%description (#111214).
-
-* Fri Sep 26 2003 Bill Nottingham <notting@redhat.com> 0.89-1
-- update to 0.89 (fix eu-strip)
-
-* Tue Sep 23 2003 Jakub Jelinek <jakub@redhat.com> 0.86-3
-- update to 0.86 (fix eu-strip on s390x/alpha)
-- libebl is an archive now; remove references to DSO
-
-* Mon Jul 14 2003 Jeff Johnson <jbj@redhat.com> 0.84-3
-- upgrade to 0.84 (readelf/elflint improvements, rawhide bugs fixed).
-
-* Fri Jul 11 2003 Jeff Johnson <jbj@redhat.com> 0.83-3
-- upgrade to 0.83 (fix invalid ELf handle on *.so strip, more).
-
-* Wed Jul 9 2003 Jeff Johnson <jbj@redhat.com> 0.82-3
-- upgrade to 0.82 (strip tests fixed on big-endian).
-
-* Tue Jul 8 2003 Jeff Johnson <jbj@redhat.com> 0.81-3
-- upgrade to 0.81 (strip excludes unused symtable entries, test borked).
-
-* Thu Jun 26 2003 Jeff Johnson <jbj@redhat.com> 0.80-3
-- upgrade to 0.80 (debugedit changes for kernel in progress).
-
-* Wed Jun 04 2003 Elliot Lee <sopwith@redhat.com>
-- rebuilt
-
-* Wed May 21 2003 Jeff Johnson <jbj@redhat.com> 0.79-2
-- upgrade to 0.79 (correct formats for size_t, more of libdw "works").
-
-* Mon May 19 2003 Jeff Johnson <jbj@redhat.com> 0.78-2
-- upgrade to 0.78 (libdwarf bugfix, libdw additions).
-
-* Mon Feb 24 2003 Elliot Lee <sopwith@redhat.com>
-- debuginfo rebuild
-
-* Thu Feb 20 2003 Jeff Johnson <jbj@redhat.com> 0.76-2
-- use the correct way of identifying the section via the sh_info link.
-
-* Sat Feb 15 2003 Jakub Jelinek <jakub@redhat.com> 0.75-2
-- update to 0.75 (eu-strip -g fix)
-
-* Tue Feb 11 2003 Jakub Jelinek <jakub@redhat.com> 0.74-2
-- update to 0.74 (fix for writing with some non-dirty sections)
-
-* Thu Feb 6 2003 Jeff Johnson <jbj@redhat.com> 0.73-3
-- another -0.73 update (with sparc fixes).
-- do "make check" in %%check, not %%install, section.
-
-* Mon Jan 27 2003 Jeff Johnson <jbj@redhat.com> 0.73-2
-- update to 0.73 (with s390 fixes).
-
-* Wed Jan 22 2003 Tim Powers <timp@redhat.com>
-- rebuilt
-
-* Wed Jan 22 2003 Jakub Jelinek <jakub@redhat.com> 0.72-4
-- fix arguments to gelf_getsymshndx and elf_getshstrndx
-- fix other warnings
-- reenable checks on s390x
-
-* Sat Jan 11 2003 Karsten Hopp <karsten@redhat.de> 0.72-3
-- temporarily disable checks on s390x, until someone has
- time to look at it
-
-* Thu Dec 12 2002 Jakub Jelinek <jakub@redhat.com> 0.72-2
-- update to 0.72
-
-* Wed Dec 11 2002 Jakub Jelinek <jakub@redhat.com> 0.71-2
-- update to 0.71
-
-* Wed Dec 11 2002 Jeff Johnson <jbj@redhat.com> 0.69-4
-- update to 0.69.
-- add "make check" and segfault avoidance patch.
-- elfutils-libelf needs to run ldconfig.
-
-* Tue Dec 10 2002 Jeff Johnson <jbj@redhat.com> 0.68-2
-- update to 0.68.
-
-* Fri Dec 6 2002 Jeff Johnson <jbj@redhat.com> 0.67-2
-- update to 0.67.
-
-* Tue Dec 3 2002 Jeff Johnson <jbj@redhat.com> 0.65-2
-- update to 0.65.
-
-* Mon Dec 2 2002 Jeff Johnson <jbj@redhat.com> 0.64-2
-- update to 0.64.
-
-* Sun Dec 1 2002 Ulrich Drepper <drepper@redhat.com> 0.64
-- split packages further into elfutils-libelf
-
-* Sat Nov 30 2002 Jeff Johnson <jbj@redhat.com> 0.63-2
-- update to 0.63.
-
-* Fri Nov 29 2002 Ulrich Drepper <drepper@redhat.com> 0.62
-- Adjust for dropping libtool
-
-* Sun Nov 24 2002 Jeff Johnson <jbj@redhat.com> 0.59-2
-- update to 0.59
-
-* Thu Nov 14 2002 Jeff Johnson <jbj@redhat.com> 0.56-2
-- update to 0.56
-
-* Thu Nov 7 2002 Jeff Johnson <jbj@redhat.com> 0.54-2
-- update to 0.54
-
-* Sun Oct 27 2002 Jeff Johnson <jbj@redhat.com> 0.53-2
-- update to 0.53
-- drop x86_64 hack, ICE fixed in gcc-3.2-11.
-
-* Sat Oct 26 2002 Jeff Johnson <jbj@redhat.com> 0.52-3
-- get beehive to punch a rhpkg generated package.
-
-* Wed Oct 23 2002 Jeff Johnson <jbj@redhat.com> 0.52-2
-- build in 8.0.1.
-- x86_64: avoid gcc-3.2 ICE on x86_64 for now.
-
-* Tue Oct 22 2002 Ulrich Drepper <drepper@redhat.com> 0.52
-- Add libelf-devel to conflicts for elfutils-devel
-
-* Mon Oct 21 2002 Ulrich Drepper <drepper@redhat.com> 0.50
-- Split into runtime and devel package
-
-* Fri Oct 18 2002 Ulrich Drepper <drepper@redhat.com> 0.49
-- integrate into official sources
-
-* Wed Oct 16 2002 Jeff Johnson <jbj@redhat.com> 0.46-1
-- Swaddle.
diff --git a/config/install-sh b/config/install-sh
deleted file mode 100644
index a5897de..0000000
--- a/config/install-sh
+++ /dev/null
@@ -1,519 +0,0 @@
-#!/bin/sh
-# install - install a program, script, or datafile
-
-scriptversion=2006-12-25.00
-
-# This originates from X11R5 (mit/util/scripts/install.sh), which was
-# later released in X11R6 (xc/config/util/install.sh) with the
-# following copyright and license.
-#
-# Copyright (C) 1994 X Consortium
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
-# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-# Except as contained in this notice, the name of the X Consortium shall not
-# be used in advertising or otherwise to promote the sale, use or other deal-
-# ings in this Software without prior written authorization from the X Consor-
-# tium.
-#
-#
-# FSF changes to this file are in the public domain.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch.
-
-nl='
-'
-IFS=" "" $nl"
-
-# set DOITPROG to echo to test this script
-
-# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit=${DOITPROG-}
-if test -z "$doit"; then
- doit_exec=exec
-else
- doit_exec=$doit
-fi
-
-# Put in absolute file names if you don't have them in your path;
-# or use environment vars.
-
-chgrpprog=${CHGRPPROG-chgrp}
-chmodprog=${CHMODPROG-chmod}
-chownprog=${CHOWNPROG-chown}
-cmpprog=${CMPPROG-cmp}
-cpprog=${CPPROG-cp}
-mkdirprog=${MKDIRPROG-mkdir}
-mvprog=${MVPROG-mv}
-rmprog=${RMPROG-rm}
-stripprog=${STRIPPROG-strip}
-
-posix_glob='?'
-initialize_posix_glob='
- test "$posix_glob" != "?" || {
- if (set -f) 2>/dev/null; then
- posix_glob=
- else
- posix_glob=:
- fi
- }
-'
-
-posix_mkdir=
-
-# Desired mode of installed file.
-mode=0755
-
-chgrpcmd=
-chmodcmd=$chmodprog
-chowncmd=
-mvcmd=$mvprog
-rmcmd="$rmprog -f"
-stripcmd=
-
-src=
-dst=
-dir_arg=
-dst_arg=
-
-copy_on_change=false
-no_target_directory=
-
-usage="\
-Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
- or: $0 [OPTION]... SRCFILES... DIRECTORY
- or: $0 [OPTION]... -t DIRECTORY SRCFILES...
- or: $0 [OPTION]... -d DIRECTORIES...
-
-In the 1st form, copy SRCFILE to DSTFILE.
-In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
-In the 4th, create DIRECTORIES.
-
-Options:
- --help display this help and exit.
- --version display version info and exit.
-
- -c (ignored)
- -C install only if different (preserve the last data modification time)
- -d create directories instead of installing files.
- -g GROUP $chgrpprog installed files to GROUP.
- -m MODE $chmodprog installed files to MODE.
- -o USER $chownprog installed files to USER.
- -s $stripprog installed files.
- -t DIRECTORY install into DIRECTORY.
- -T report an error if DSTFILE is a directory.
-
-Environment variables override the default commands:
- CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
- RMPROG STRIPPROG
-"
-
-while test $# -ne 0; do
- case $1 in
- -c) ;;
-
- -C) copy_on_change=true;;
-
- -d) dir_arg=true;;
-
- -g) chgrpcmd="$chgrpprog $2"
- shift;;
-
- --help) echo "$usage"; exit $?;;
-
- -m) mode=$2
- case $mode in
- *' '* | *' '* | *'
-'* | *'*'* | *'?'* | *'['*)
- echo "$0: invalid mode: $mode" >&2
- exit 1;;
- esac
- shift;;
-
- -o) chowncmd="$chownprog $2"
- shift;;
-
- -s) stripcmd=$stripprog;;
-
- -t) dst_arg=$2
- shift;;
-
- -T) no_target_directory=true;;
-
- --version) echo "$0 $scriptversion"; exit $?;;
-
- --) shift
- break;;
-
- -*) echo "$0: invalid option: $1" >&2
- exit 1;;
-
- *) break;;
- esac
- shift
-done
-
-if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
- # When -d is used, all remaining arguments are directories to create.
- # When -t is used, the destination is already specified.
- # Otherwise, the last argument is the destination. Remove it from $@.
- for arg
- do
- if test -n "$dst_arg"; then
- # $@ is not empty: it contains at least $arg.
- set fnord "$@" "$dst_arg"
- shift # fnord
- fi
- shift # arg
- dst_arg=$arg
- done
-fi
-
-if test $# -eq 0; then
- if test -z "$dir_arg"; then
- echo "$0: no input file specified." >&2
- exit 1
- fi
- # It's OK to call `install-sh -d' without argument.
- # This can happen when creating conditional directories.
- exit 0
-fi
-
-if test -z "$dir_arg"; then
- trap '(exit $?); exit' 1 2 13 15
-
- # Set umask so as not to create temps with too-generous modes.
- # However, 'strip' requires both read and write access to temps.
- case $mode in
- # Optimize common cases.
- *644) cp_umask=133;;
- *755) cp_umask=22;;
-
- *[0-7])
- if test -z "$stripcmd"; then
- u_plus_rw=
- else
- u_plus_rw='% 200'
- fi
- cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
- *)
- if test -z "$stripcmd"; then
- u_plus_rw=
- else
- u_plus_rw=,u+rw
- fi
- cp_umask=$mode$u_plus_rw;;
- esac
-fi
-
-for src
-do
- # Protect names starting with `-'.
- case $src in
- -*) src=./$src;;
- esac
-
- if test -n "$dir_arg"; then
- dst=$src
- dstdir=$dst
- test -d "$dstdir"
- dstdir_status=$?
- else
-
- # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
- # might cause directories to be created, which would be especially bad
- # if $src (and thus $dsttmp) contains '*'.
- if test ! -f "$src" && test ! -d "$src"; then
- echo "$0: $src does not exist." >&2
- exit 1
- fi
-
- if test -z "$dst_arg"; then
- echo "$0: no destination specified." >&2
- exit 1
- fi
-
- dst=$dst_arg
- # Protect names starting with `-'.
- case $dst in
- -*) dst=./$dst;;
- esac
-
- # If destination is a directory, append the input filename; won't work
- # if double slashes aren't ignored.
- if test -d "$dst"; then
- if test -n "$no_target_directory"; then
- echo "$0: $dst_arg: Is a directory" >&2
- exit 1
- fi
- dstdir=$dst
- dst=$dstdir/`basename "$src"`
- dstdir_status=0
- else
- # Prefer dirname, but fall back on a substitute if dirname fails.
- dstdir=`
- (dirname "$dst") 2>/dev/null ||
- expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$dst" : 'X\(//\)[^/]' \| \
- X"$dst" : 'X\(//\)$' \| \
- X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
- echo X"$dst" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'
- `
-
- test -d "$dstdir"
- dstdir_status=$?
- fi
- fi
-
- obsolete_mkdir_used=false
-
- if test $dstdir_status != 0; then
- case $posix_mkdir in
- '')
- # Create intermediate dirs using mode 755 as modified by the umask.
- # This is like FreeBSD 'install' as of 1997-10-28.
- umask=`umask`
- case $stripcmd.$umask in
- # Optimize common cases.
- *[2367][2367]) mkdir_umask=$umask;;
- .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
-
- *[0-7])
- mkdir_umask=`expr $umask + 22 \
- - $umask % 100 % 40 + $umask % 20 \
- - $umask % 10 % 4 + $umask % 2
- `;;
- *) mkdir_umask=$umask,go-w;;
- esac
-
- # With -d, create the new directory with the user-specified mode.
- # Otherwise, rely on $mkdir_umask.
- if test -n "$dir_arg"; then
- mkdir_mode=-m$mode
- else
- mkdir_mode=
- fi
-
- posix_mkdir=false
- case $umask in
- *[123567][0-7][0-7])
- # POSIX mkdir -p sets u+wx bits regardless of umask, which
- # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
- ;;
- *)
- tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
- trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
-
- if (umask $mkdir_umask &&
- exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
- then
- if test -z "$dir_arg" || {
- # Check for POSIX incompatibilities with -m.
- # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
- # other-writeable bit of parent directory when it shouldn't.
- # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
- ls_ld_tmpdir=`ls -ld "$tmpdir"`
- case $ls_ld_tmpdir in
- d????-?r-*) different_mode=700;;
- d????-?--*) different_mode=755;;
- *) false;;
- esac &&
- $mkdirprog -m$different_mode -p -- "$tmpdir" && {
- ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
- test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
- }
- }
- then posix_mkdir=:
- fi
- rmdir "$tmpdir/d" "$tmpdir"
- else
- # Remove any dirs left behind by ancient mkdir implementations.
- rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
- fi
- trap '' 0;;
- esac;;
- esac
-
- if
- $posix_mkdir && (
- umask $mkdir_umask &&
- $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
- )
- then :
- else
-
- # The umask is ridiculous, or mkdir does not conform to POSIX,
- # or it failed possibly due to a race condition. Create the
- # directory the slow way, step by step, checking for races as we go.
-
- case $dstdir in
- /*) prefix='/';;
- -*) prefix='./';;
- *) prefix='';;
- esac
-
- eval "$initialize_posix_glob"
-
- oIFS=$IFS
- IFS=/
- $posix_glob set -f
- set fnord $dstdir
- shift
- $posix_glob set +f
- IFS=$oIFS
-
- prefixes=
-
- for d
- do
- test -z "$d" && continue
-
- prefix=$prefix$d
- if test -d "$prefix"; then
- prefixes=
- else
- if $posix_mkdir; then
- (umask=$mkdir_umask &&
- $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
- # Don't fail if two instances are running concurrently.
- test -d "$prefix" || exit 1
- else
- case $prefix in
- *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
- *) qprefix=$prefix;;
- esac
- prefixes="$prefixes '$qprefix'"
- fi
- fi
- prefix=$prefix/
- done
-
- if test -n "$prefixes"; then
- # Don't fail if two instances are running concurrently.
- (umask $mkdir_umask &&
- eval "\$doit_exec \$mkdirprog $prefixes") ||
- test -d "$dstdir" || exit 1
- obsolete_mkdir_used=true
- fi
- fi
- fi
-
- if test -n "$dir_arg"; then
- { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
- { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
- { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
- test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
- else
-
- # Make a couple of temp file names in the proper directory.
- dsttmp=$dstdir/_inst.$$_
- rmtmp=$dstdir/_rm.$$_
-
- # Trap to clean up those temp files at exit.
- trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
-
- # Copy the file name to the temp name.
- (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
-
- # and set any options; do chmod last to preserve setuid bits.
- #
- # If any of these fail, we abort the whole thing. If we want to
- # ignore errors from any of these, just make sure not to ignore
- # errors from the above "$doit $cpprog $src $dsttmp" command.
- #
- { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
- { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
- { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
- { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
-
- # If -C, don't bother to copy if it wouldn't change the file.
- if $copy_on_change &&
- old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
- new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
-
- eval "$initialize_posix_glob" &&
- $posix_glob set -f &&
- set X $old && old=:$2:$4:$5:$6 &&
- set X $new && new=:$2:$4:$5:$6 &&
- $posix_glob set +f &&
-
- test "$old" = "$new" &&
- $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
- then
- rm -f "$dsttmp"
- else
- # Rename the file to the real destination.
- $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
-
- # The rename failed, perhaps because mv can't rename something else
- # to itself, or perhaps because mv is so ancient that it does not
- # support -f.
- {
- # Now remove or move aside any old file at destination location.
- # We try this two ways since rm can't unlink itself on some
- # systems and the destination file might be busy for other
- # reasons. In this case, the final cleanup might fail but the new
- # file should still install successfully.
- {
- test ! -f "$dst" ||
- $doit $rmcmd -f "$dst" 2>/dev/null ||
- { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
- { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
- } ||
- { echo "$0: cannot unlink or rename $dst" >&2
- (exit 1); exit 1
- }
- } &&
-
- # Now rename the file to the real destination.
- $doit $mvcmd "$dsttmp" "$dst"
- }
- fi || exit 1
-
- trap '' 0
- fi
-done
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
diff --git a/config/missing b/config/missing
deleted file mode 100644
index 1c8ff70..0000000
--- a/config/missing
+++ /dev/null
@@ -1,367 +0,0 @@
-#! /bin/sh
-# Common stub for a few missing GNU programs while installing.
-
-scriptversion=2006-05-10.23
-
-# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006
-# Free Software Foundation, Inc.
-# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program 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 General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-if test $# -eq 0; then
- echo 1>&2 "Try \`$0 --help' for more information"
- exit 1
-fi
-
-run=:
-sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
-sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
-
-# In the cases where this matters, `missing' is being run in the
-# srcdir already.
-if test -f configure.ac; then
- configure_ac=configure.ac
-else
- configure_ac=configure.in
-fi
-
-msg="missing on your system"
-
-case $1 in
---run)
- # Try to run requested program, and just exit if it succeeds.
- run=
- shift
- "$@" && exit 0
- # Exit code 63 means version mismatch. This often happens
- # when the user try to use an ancient version of a tool on
- # a file that requires a minimum version. In this case we
- # we should proceed has if the program had been absent, or
- # if --run hadn't been passed.
- if test $? = 63; then
- run=:
- msg="probably too old"
- fi
- ;;
-
- -h|--h|--he|--hel|--help)
- echo "\
-$0 [OPTION]... PROGRAM [ARGUMENT]...
-
-Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
-error status if there is no known handling for PROGRAM.
-
-Options:
- -h, --help display this help and exit
- -v, --version output version information and exit
- --run try to run the given command, and emulate it if it fails
-
-Supported PROGRAM values:
- aclocal touch file \`aclocal.m4'
- autoconf touch file \`configure'
- autoheader touch file \`config.h.in'
- autom4te touch the output file, or create a stub one
- automake touch all \`Makefile.in' files
- bison create \`y.tab.[ch]', if possible, from existing .[ch]
- flex create \`lex.yy.c', if possible, from existing .c
- help2man touch the output file
- lex create \`lex.yy.c', if possible, from existing .c
- makeinfo touch the output file
- tar try tar, gnutar, gtar, then tar without non-portable flags
- yacc create \`y.tab.[ch]', if possible, from existing .[ch]
-
-Send bug reports to <bug-automake@gnu.org>."
- exit $?
- ;;
-
- -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
- echo "missing $scriptversion (GNU Automake)"
- exit $?
- ;;
-
- -*)
- echo 1>&2 "$0: Unknown \`$1' option"
- echo 1>&2 "Try \`$0 --help' for more information"
- exit 1
- ;;
-
-esac
-
-# Now exit if we have it, but it failed. Also exit now if we
-# don't have it and --version was passed (most likely to detect
-# the program).
-case $1 in
- lex|yacc)
- # Not GNU programs, they don't have --version.
- ;;
-
- tar)
- if test -n "$run"; then
- echo 1>&2 "ERROR: \`tar' requires --run"
- exit 1
- elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
- exit 1
- fi
- ;;
-
- *)
- if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
- # We have it, but it failed.
- exit 1
- elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
- # Could not run --version or --help. This is probably someone
- # running `$TOOL --version' or `$TOOL --help' to check whether
- # $TOOL exists and not knowing $TOOL uses missing.
- exit 1
- fi
- ;;
-esac
-
-# If it does not exist, or fails to run (possibly an outdated version),
-# try to emulate it.
-case $1 in
- aclocal*)
- echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
- you modified \`acinclude.m4' or \`${configure_ac}'. You might want
- to install the \`Automake' and \`Perl' packages. Grab them from
- any GNU archive site."
- touch aclocal.m4
- ;;
-
- autoconf)
- echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
- you modified \`${configure_ac}'. You might want to install the
- \`Autoconf' and \`GNU m4' packages. Grab them from any GNU
- archive site."
- touch configure
- ;;
-
- autoheader)
- echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
- you modified \`acconfig.h' or \`${configure_ac}'. You might want
- to install the \`Autoconf' and \`GNU m4' packages. Grab them
- from any GNU archive site."
- files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
- test -z "$files" && files="config.h"
- touch_files=
- for f in $files; do
- case $f in
- *:*) touch_files="$touch_files "`echo "$f" |
- sed -e 's/^[^:]*://' -e 's/:.*//'`;;
- *) touch_files="$touch_files $f.in";;
- esac
- done
- touch $touch_files
- ;;
-
- automake*)
- echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
- you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
- You might want to install the \`Automake' and \`Perl' packages.
- Grab them from any GNU archive site."
- find . -type f -name Makefile.am -print |
- sed 's/\.am$/.in/' |
- while read f; do touch "$f"; done
- ;;
-
- autom4te)
- echo 1>&2 "\
-WARNING: \`$1' is needed, but is $msg.
- You might have modified some files without having the
- proper tools for further handling them.
- You can get \`$1' as part of \`Autoconf' from any GNU
- archive site."
-
- file=`echo "$*" | sed -n "$sed_output"`
- test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
- if test -f "$file"; then
- touch $file
- else
- test -z "$file" || exec >$file
- echo "#! /bin/sh"
- echo "# Created by GNU Automake missing as a replacement of"
- echo "# $ $@"
- echo "exit 0"
- chmod +x $file
- exit 1
- fi
- ;;
-
- bison|yacc)
- echo 1>&2 "\
-WARNING: \`$1' $msg. You should only need it if
- you modified a \`.y' file. You may need the \`Bison' package
- in order for those modifications to take effect. You can get
- \`Bison' from any GNU archive site."
- rm -f y.tab.c y.tab.h
- if test $# -ne 1; then
- eval LASTARG="\${$#}"
- case $LASTARG in
- *.y)
- SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
- if test -f "$SRCFILE"; then
- cp "$SRCFILE" y.tab.c
- fi
- SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
- if test -f "$SRCFILE"; then
- cp "$SRCFILE" y.tab.h
- fi
- ;;
- esac
- fi
- if test ! -f y.tab.h; then
- echo >y.tab.h
- fi
- if test ! -f y.tab.c; then
- echo 'main() { return 0; }' >y.tab.c
- fi
- ;;
-
- lex|flex)
- echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
- you modified a \`.l' file. You may need the \`Flex' package
- in order for those modifications to take effect. You can get
- \`Flex' from any GNU archive site."
- rm -f lex.yy.c
- if test $# -ne 1; then
- eval LASTARG="\${$#}"
- case $LASTARG in
- *.l)
- SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
- if test -f "$SRCFILE"; then
- cp "$SRCFILE" lex.yy.c
- fi
- ;;
- esac
- fi
- if test ! -f lex.yy.c; then
- echo 'main() { return 0; }' >lex.yy.c
- fi
- ;;
-
- help2man)
- echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
- you modified a dependency of a manual page. You may need the
- \`Help2man' package in order for those modifications to take
- effect. You can get \`Help2man' from any GNU archive site."
-
- file=`echo "$*" | sed -n "$sed_output"`
- test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
- if test -f "$file"; then
- touch $file
- else
- test -z "$file" || exec >$file
- echo ".ab help2man is required to generate this page"
- exit 1
- fi
- ;;
-
- makeinfo)
- echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
- you modified a \`.texi' or \`.texinfo' file, or any other file
- indirectly affecting the aspect of the manual. The spurious
- call might also be the consequence of using a buggy \`make' (AIX,
- DU, IRIX). You might want to install the \`Texinfo' package or
- the \`GNU make' package. Grab either from any GNU archive site."
- # The file to touch is that specified with -o ...
- file=`echo "$*" | sed -n "$sed_output"`
- test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
- if test -z "$file"; then
- # ... or it is the one specified with @setfilename ...
- infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
- file=`sed -n '
- /^@setfilename/{
- s/.* \([^ ]*\) *$/\1/
- p
- q
- }' $infile`
- # ... or it is derived from the source name (dir/f.texi becomes f.info)
- test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
- fi
- # If the file does not exist, the user really needs makeinfo;
- # let's fail without touching anything.
- test -f $file || exit 1
- touch $file
- ;;
-
- tar)
- shift
-
- # We have already tried tar in the generic part.
- # Look for gnutar/gtar before invocation to avoid ugly error
- # messages.
- if (gnutar --version > /dev/null 2>&1); then
- gnutar "$@" && exit 0
- fi
- if (gtar --version > /dev/null 2>&1); then
- gtar "$@" && exit 0
- fi
- firstarg="$1"
- if shift; then
- case $firstarg in
- *o*)
- firstarg=`echo "$firstarg" | sed s/o//`
- tar "$firstarg" "$@" && exit 0
- ;;
- esac
- case $firstarg in
- *h*)
- firstarg=`echo "$firstarg" | sed s/h//`
- tar "$firstarg" "$@" && exit 0
- ;;
- esac
- fi
-
- echo 1>&2 "\
-WARNING: I can't seem to be able to run \`tar' with the given arguments.
- You may want to install GNU tar or Free paxutils, or check the
- command line arguments."
- exit 1
- ;;
-
- *)
- echo 1>&2 "\
-WARNING: \`$1' is needed, and is $msg.
- You might have modified some files without having the
- proper tools for further handling them. Check the \`README' file,
- it often tells you about the needed prerequisites for installing
- this package. You may also peek at any GNU archive site, in case
- some other package would contain this missing \`$1' program."
- exit 1
- ;;
-esac
-
-exit 0
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
diff --git a/config/version.h.in b/config/version.h.in
deleted file mode 100644
index 82c846e..0000000
--- a/config/version.h.in
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Version information about elfutils development libraries.
- Copyright (C) 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifndef _ELFUTILS_VERSION_H
-#define _ELFUTILS_VERSION_H 1
-
-#define _ELFUTILS_VERSION @eu_version@
-
-#define _ELFUTILS_PREREQ(major, minor) \
- (_ELFUTILS_VERSION >= ((major) * 1000 + (minor)))
-
-#endif /* elfutils/version.h */
diff --git a/config/ylwrap b/config/ylwrap
deleted file mode 100755
index 7278b6a..0000000
--- a/config/ylwrap
+++ /dev/null
@@ -1,223 +0,0 @@
-#! /bin/sh
-# ylwrap - wrapper for lex/yacc invocations.
-
-scriptversion=2007-11-22.22
-
-# Copyright (C) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005,
-# 2007 Free Software Foundation, Inc.
-#
-# Written by Tom Tromey <tromey@cygnus.com>.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program 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 General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# This file is maintained in Automake, please report
-# bugs to <bug-automake@gnu.org> or send patches to
-# <automake-patches@gnu.org>.
-
-case "$1" in
- '')
- echo "$0: No files given. Try \`$0 --help' for more information." 1>&2
- exit 1
- ;;
- --basedir)
- basedir=$2
- shift 2
- ;;
- -h|--h*)
- cat <<\EOF
-Usage: ylwrap [--help|--version] INPUT [OUTPUT DESIRED]... -- PROGRAM [ARGS]...
-
-Wrapper for lex/yacc invocations, renaming files as desired.
-
- INPUT is the input file
- OUTPUT is one file PROG generates
- DESIRED is the file we actually want instead of OUTPUT
- PROGRAM is program to run
- ARGS are passed to PROG
-
-Any number of OUTPUT,DESIRED pairs may be used.
-
-Report bugs to <bug-automake@gnu.org>.
-EOF
- exit $?
- ;;
- -v|--v*)
- echo "ylwrap $scriptversion"
- exit $?
- ;;
-esac
-
-
-# The input.
-input="$1"
-shift
-case "$input" in
- [\\/]* | ?:[\\/]*)
- # Absolute path; do nothing.
- ;;
- *)
- # Relative path. Make it absolute.
- input="`pwd`/$input"
- ;;
-esac
-
-pairlist=
-while test "$#" -ne 0; do
- if test "$1" = "--"; then
- shift
- break
- fi
- pairlist="$pairlist $1"
- shift
-done
-
-# The program to run.
-prog="$1"
-shift
-# Make any relative path in $prog absolute.
-case "$prog" in
- [\\/]* | ?:[\\/]*) ;;
- *[\\/]*) prog="`pwd`/$prog" ;;
-esac
-
-# FIXME: add hostname here for parallel makes that run commands on
-# other machines. But that might take us over the 14-char limit.
-dirname=ylwrap$$
-trap "cd '`pwd`'; rm -rf $dirname > /dev/null 2>&1" 1 2 3 15
-mkdir $dirname || exit 1
-
-cd $dirname
-
-case $# in
- 0) "$prog" "$input" ;;
- *) "$prog" "$@" "$input" ;;
-esac
-ret=$?
-
-if test $ret -eq 0; then
- set X $pairlist
- shift
- first=yes
- # Since DOS filename conventions don't allow two dots,
- # the DOS version of Bison writes out y_tab.c instead of y.tab.c
- # and y_tab.h instead of y.tab.h. Test to see if this is the case.
- y_tab_nodot="no"
- if test -f y_tab.c || test -f y_tab.h; then
- y_tab_nodot="yes"
- fi
-
- # The directory holding the input.
- input_dir=`echo "$input" | sed -e 's,\([\\/]\)[^\\/]*$,\1,'`
- # Quote $INPUT_DIR so we can use it in a regexp.
- # FIXME: really we should care about more than `.' and `\'.
- input_rx=`echo "$input_dir" | sed 's,\\\\,\\\\\\\\,g;s,\\.,\\\\.,g'`
-
- while test "$#" -ne 0; do
- from="$1"
- # Handle y_tab.c and y_tab.h output by DOS
- if test $y_tab_nodot = "yes"; then
- if test $from = "y.tab.c"; then
- from="y_tab.c"
- else
- if test $from = "y.tab.h"; then
- from="y_tab.h"
- fi
- fi
- fi
- if test -f "$from"; then
- # If $2 is an absolute path name, then just use that,
- # otherwise prepend `../'.
- case "$2" in
- [\\/]* | ?:[\\/]*) target="$2";;
- *) target="../$2";;
- esac
-
- # We do not want to overwrite a header file if it hasn't
- # changed. This avoid useless recompilations. However the
- # parser itself (the first file) should always be updated,
- # because it is the destination of the .y.c rule in the
- # Makefile. Divert the output of all other files to a temporary
- # file so we can compare them to existing versions.
- if test $first = no; then
- realtarget="$target"
- target="tmp-`echo $target | sed s/.*[\\/]//g`"
- fi
- # Edit out `#line' or `#' directives.
- #
- # We don't want the resulting debug information to point at
- # an absolute srcdir; it is better for it to just mention the
- # .y file with no path.
- #
- # We want to use the real output file name, not yy.lex.c for
- # instance.
- #
- # We want the include guards to be adjusted too.
- FROM=`echo "$from" | sed \
- -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
- -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`
- TARGET=`echo "$2" | sed \
- -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
- -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`
-
- sed -e "/^#/!b" -e "s,$input_rx,," -e "s,$from,$2," \
- -e "s,$FROM,$TARGET," "$from" >"$target" || ret=$?
-
- # Check whether header files must be updated.
- if test $first = no; then
- if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then
- echo "$2" is unchanged
- rm -f "$target"
- else
- echo updating "$2"
- mv -f "$target" "$realtarget"
- fi
- fi
- else
- # A missing file is only an error for the first file. This
- # is a blatant hack to let us support using "yacc -d". If -d
- # is not specified, we don't want an error when the header
- # file is "missing".
- if test $first = yes; then
- ret=1
- fi
- fi
- shift
- shift
- first=no
- done
-else
- ret=$?
-fi
-
-# Remove the directory.
-cd ..
-rm -rf $dirname
-
-exit $ret
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
diff --git a/configure b/configure
deleted file mode 100755
index 41050e2..0000000
--- a/configure
+++ /dev/null
Binary files differ
diff --git a/configure.ac b/configure.ac
deleted file mode 100644
index 25804a8..0000000
--- a/configure.ac
+++ /dev/null
@@ -1,243 +0,0 @@
-dnl Process this file with autoconf to produce a configure script.
-dnl Configure input file for elfutils. -*-autoconf-*-
-dnl
-dnl Copyright (C) 1996-2002, 2003, 2004, 2005, 2006, 2007, 2008 Red Hat, Inc.
-dnl
-dnl This program is free software; you can redistribute it and/or modify
-dnl it under the terms of the GNU General Public License as published by
-dnl the Free Software Foundation, version 2.
-dnl
-dnl This program is distributed in the hope that it will be useful,
-dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
-dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-dnl GNU General Public License for more details.
-dnl
-dnl You should have received a copy of the GNU General Public License
-dnl along with this program; if not, write to the Free Software Foundation,
-dnl Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
-dnl
-AC_INIT([Red Hat elfutils],[0.138],[http://bugzilla.redhat.com/bugzilla/],
- [elfutils])
-
-AC_CONFIG_AUX_DIR([config])
-AC_CONFIG_FILES([config/Makefile])
-
-AC_COPYRIGHT([Copyright (C) 1996-2007, 2008 Red Hat, Inc.])
-AC_PREREQ(2.59) dnl Minimum Autoconf version required.
-
-dnl We use GNU make extensions; automake 1.10 defaults to -Wportability.
-AM_INIT_AUTOMAKE([gnits 1.8 -Wno-portability dist-bzip2 no-dist-gzip])
-AM_MAINTAINER_MODE
-
-dnl Unique ID for this build.
-MODVERSION="Build on $(hostname) $(date +%FT%R:%S%z)"
-AC_SUBST([MODVERSION])
-AC_DEFINE_UNQUOTED(MODVERSION, "$MODVERSION")
-AH_TEMPLATE([MODVERSION], [Identifier for modules in the build.])
-
-AC_CONFIG_SRCDIR([libelf/libelf.h])
-AC_CONFIG_FILES([Makefile])
-AC_CONFIG_HEADERS([config.h])
-
-AC_CONFIG_MACRO_DIR([m4])
-AC_CONFIG_FILES([m4/Makefile])
-
-dnl The RPM spec file. We substitute a few values in the file.
-AC_CONFIG_FILES([elfutils.spec:config/elfutils.spec.in])
-
-
-AC_CANONICAL_HOST
-
-AC_ARG_ENABLE([tls],
-AS_HELP_STRING([--enable-tls], [enable use of thread local storage]),
-use_tls=yes, use_tls=no)
-AM_CONDITIONAL(USE_TLS, test "$use_tls" = yes)
-AS_IF([test "$use_tls" = yes], [AC_DEFINE(USE_TLS)])
-
-AH_TEMPLATE([USE_TLS], [Defined if thread local storage should be used.])
-
-dnl Add all the languages for which translations are available.
-ALL_LINGUAS=
-
-AC_PROG_CC
-AC_PROG_RANLIB
-AC_PROG_YACC
-AM_PROG_LEX
-
-AC_CACHE_CHECK([for gcc with C99 support], ac_cv_c99, [dnl
-old_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS -std=gnu99"
-AC_COMPILE_IFELSE([dnl
-int foo (int a) { for (int i = 0; i < a; ++i) if (i % 4) break; int s = a; }],
- ac_cv_c99=yes, ac_cv_c99=no)
-CFLAGS="$old_CFLAGS"])
-AS_IF([test "x$ac_cv_c99" != xyes],
- AC_MSG_ERROR([gcc with C99 support required]))
-
-LOCALEDIR=$datadir
-AC_SUBST(LOCALEDIR)
-AC_DEFINE_UNQUOTED(LOCALEDIR, "$LOCALEDIR")
-AH_TEMPLATE([LOCALEDIR], [Directory to place translation files in.])
-
-DATADIRNAME=$datadir
-AC_SUBST(DATADIRNAME)
-
-dnl This test must come as early as possible after the compiler configuration
-dnl tests, because the choice of the file model can (in principle) affect
-dnl whether functions and headers are available, whether they work, etc.
-AC_SYS_LARGEFILE
-
-dnl Enable the linker to be build as a native-only linker. By default it
-dnl can handle all architectures but this comes at a cost. A native
-dnl will be slightly faster, small, and has fewer dependencies.
-native_ld=no
-AC_ARG_ENABLE([generic],
-AS_HELP_STRING([--disable-generic], [do not build generic linker]), [dnl
-if test "$enable_generic" = no; then
- case "$host_cpu" in
- i?86)
- AC_DEFINE(NATIVE_ELF, 32)
- native_ld=yes
- base_cpu=i386
- ;;
- *)
- AC_MSG_ERROR([no machine-specific linker for this configuration available])
- ;;
- esac
-fi])
-AH_TEMPLATE([NATIVE_ELF],
-[Define to 32 or 64 if a specific implementation is wanted.])
-AM_CONDITIONAL(NATIVE_LD, test "$native_ld" = yes)
-dnl The automake generated Makefile cannot deal with macros in the name
-dnl of files if at any time there is no such file, even if the filename
-dnl would not be used.
-AS_IF([test -z "$base_cpu"], [base_cpu=none])
-AC_SUBST(base_cpu)
-dnl Support to work around automake's inflexible dependency generation.
-dnl See src/Makefile.am for more information.
-AM_CONDITIONAL(NEVER, false)
-
-dnl Enable debugging via mudflap. This option will cause most libraries
-dnl to be built as archives which are statically linked into the applications.
-dnl All code, as far as possible, is compiled instrumented to catch all
-dnl the bugs valgrind is able to catch.
-use_mudflap=no
-AC_ARG_ENABLE([mudflap],
-AS_HELP_STRING([--enable-mudflap],
-[build binaries with mudflap instrumentation]), [dnl
-if test "x$enable_mudflap" = xyes; then
- # Check whether the compiler support -fmudflap.
- old_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -fmudflap"
- AC_TRY_COMPILE([], [], use_mudflap=yes, use_mudflap=fail)
- CFLAGS="$old_CFLAGS"
-fi])
-if test "$use_mudflap" = fail; then
- AC_MSG_FAILURE([--enable-mudflap requires a compiler which understands this option])
-fi
-AM_CONDITIONAL(MUDFLAP, test "$use_mudflap" = yes)
-
-dnl enable debugging of branch prediction.
-use_debugpred=0
-AC_ARG_ENABLE([debugpred],
-AC_HELP_STRING([--enable-debugpred],
-[build binaries with support to debug branch prediction]),
-[use_debugpred=1], [use_debugpred=0])
-AC_SUBST([DEBUGPRED], $use_debugpred)
-
-dnl Enable gprof suport.
-AC_ARG_ENABLE([gprof],
-AC_HELP_STRING([--enable-gprof],
-[build binaries with gprof support]), [use_gprof=yes], [use_gprof=no])
-if test "$use_gprof" = yes; then
- CFLAGS="$CFLAGS -pg"
- LDFLAGS="$LDFLAGS -pg"
-fi
-AM_CONDITIONAL(GPROF, test "$use_gprof" = yes)
-
-# Enable gcov suport.
-AC_ARG_ENABLE([gcov],
-AC_HELP_STRING([--enable-gcov],
-[build binaries with gcov support]), [use_gcov=yes], [use_gcov=no])
-if test "$use_gcov" = yes; then
- CFLAGS="$CFLAGS -fprofile-arcs -ftest-coverage"
- LDFLAGS="$LDFLAGS -fprofile-arcs"
-fi
-AM_CONDITIONAL(GCOV, test "$use_gcov" = yes)
-
-AM_CONDITIONAL(BUILD_STATIC, [dnl
-test "$use_mudflap" = yes -o "$use_gprof" = yes -o "$use_gcov" = yes])
-
-AC_ARG_ENABLE([tests-rpath],
-AC_HELP_STRING([--enable-tests-rpath], [build $ORIGIN-using rpath into tests]),
- [tests_use_rpath=yes], [tests_use_rpath=no])
-AM_CONDITIONAL(TESTS_RPATH, test "$tests_use_rpath" = yes)
-
-LIBEBL_SUBDIR="$PACKAGE"
-AC_ARG_ENABLE([libebl-subdir],
-AS_HELP_STRING([--enable-libebl-subdir=DIR],
-[install libebl_CPU modules in $(libdir)/DIR]), [dnl
-LIBEBL_SUBDIR="$enable_libebl_subdir"])
-AC_SUBST([LIBEBL_SUBDIR])
-AC_DEFINE_UNQUOTED(LIBEBL_SUBDIR, "$LIBEBL_SUBDIR")
-AH_TEMPLATE([LIBEBL_SUBDIR], [$libdir subdirectory containing libebl modules.])
-
-dnl The directories with content.
-
-dnl Documentation.
-dnl Commented out for now.
-dnl AC_CONFIG_FILES([doc/Makefile])
-
-dnl Support library.
-AC_CONFIG_FILES([lib/Makefile])
-
-dnl ELF library.
-AC_CONFIG_FILES([libelf/Makefile])
-
-dnl Higher-level ELF support library.
-AC_CONFIG_FILES([libebl/Makefile])
-
-dnl DWARF library.
-AC_CONFIG_FILES([libdw/Makefile])
-
-dnl Higher-level DWARF support library.
-AC_CONFIG_FILES([libdwfl/Makefile])
-
-dnl CPU handling library.
-AC_CONFIG_FILES([libcpu/Makefile])
-
-dnl Assembler library.
-AM_CONDITIONAL(HAVE_LIBASM, true)dnl Used in tests/Makefile.am, which see.
-AC_CONFIG_FILES([libasm/Makefile])
-
-dnl CPU-specific backend libraries.
-AC_CONFIG_FILES([backends/Makefile])
-
-dnl Tools.
-AC_CONFIG_FILES([src/Makefile po/Makefile.in])
-
-dnl Test suite.
-AM_CONDITIONAL(STANDALONE, false)dnl Used in tests/Makefile.am, which see.
-AC_CONFIG_FILES([tests/Makefile])
-
-# Get the definitions necessary to create the Makefiles in the po
-# subdirectories. This is a small subset of the gettext rules.
-AC_SUBST(USE_NLS, yes)
-AM_PO_SUBDIRS
-
-dnl Appended to the config.h file.
-dnl We hide all kinds of configuration magic in lib/eu-config.h.
-AH_BOTTOM([#include <eu-config.h>])
-
-dnl Version compatibility header.
-AC_CONFIG_FILES([version.h:config/version.h.in])
-AC_SUBST([eu_version])
-case $PACKAGE_VERSION in
-0.???) eu_version=${PACKAGE_VERSION#0.} ;;
-?.???) eu_version=${PACKAGE_VERSION/./} ;;
-?.??) eu_version=${PACKAGE_VERSION/./}0 ;;
-?.?) eu_version=${PACKAGE_VERSION/./}00 ;;
-*) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
-esac
-
-AC_OUTPUT
diff --git a/elfutils.spec b/elfutils.spec
deleted file mode 100644
index 4aea24e..0000000
--- a/elfutils.spec
+++ /dev/null
@@ -1,567 +0,0 @@
-# -*- rpm-spec-*-
-Summary: A collection of utilities and DSOs to handle compiled objects
-Name: elfutils
-Version: 0.138
-Release: 1
-License: GPLv2 with exceptions
-Group: Development/Tools
-Source: elfutils-%{version}.tar.bz2
-Obsoletes: libelf libelf-devel
-Requires: elfutils-libelf = %{version}-%{release}
-Requires: glibc >= 2.7
-
-# ExcludeArch: xxx
-
-BuildRoot: %{_tmppath}/%{name}-root
-BuildRequires: gcc >= 4.1.2-33
-BuildRequires: glibc >= 2.7
-BuildRequires: bison >= 1.875
-BuildRequires: flex >= 2.5.4a
-BuildRequires: bzip2
-BuildRequires: m4
-
-%define _gnu %{nil}
-%define _programprefix eu-
-
-%description
-Elfutils is a collection of utilities, including ld (a linker),
-nm (for listing symbols from object files), size (for listing the
-section sizes of an object or archive file), strip (for discarding
-symbols), readelf (to see the raw ELF file structures), and elflint
-(to check for well-formed ELF files). Also included are numerous
-helper libraries which implement DWARF, ELF, and machine-specific ELF
-handling.
-
-%package devel
-Summary: Development libraries to handle compiled objects.
-Group: Development/Tools
-Requires: elfutils = %{version}-%{release}
-Requires: elfutils-libelf-devel = %{version}-%{release}
-
-%description devel
-The elfutils-devel package contains the libraries to create
-applications for handling compiled objects. libebl provides some
-higher-level ELF access functionality. libdw provides access to
-the DWARF debugging information. libasm provides a programmable
-assembler interface.
-
-%package devel-static
-Summary: Static archives to handle compiled objects.
-Group: Development/Tools
-Requires: elfutils-devel = %{version}-%{release}
-
-%description devel-static
-The elfutils-devel-static archive contains the static archives
-with the code the handle compiled objects.
-
-%package libelf
-Summary: Library to read and write ELF files.
-Group: Development/Tools
-
-%description libelf
-The elfutils-libelf package provides a DSO which allows reading and
-writing ELF files on a high level. Third party programs depend on
-this package to read internals of ELF files. The programs of the
-elfutils package use it also to generate new ELF files.
-
-%package libelf-devel
-Summary: Development support for libelf
-Group: Development/Tools
-Requires: elfutils-libelf = %{version}-%{release}
-Conflicts: libelf-devel
-
-%description libelf-devel
-The elfutils-libelf-devel package contains the libraries to create
-applications for handling compiled objects. libelf allows you to
-access the internals of the ELF object file format, so you can see the
-different sections of an ELF file.
-
-%package libelf-devel-static
-Summary: Static archive of libelf
-Group: Development/Tools
-Requires: elfutils-libelf-devel = %{version}-%{release}
-Conflicts: libelf-devel
-
-%description libelf-devel-static
-The elfutils-libelf-static package contains the static archive
-for libelf.
-
-%prep
-%setup -q
-
-%build
-%configure --program-prefix=%{_programprefix}
-make
-
-%install
-rm -rf ${RPM_BUILD_ROOT}
-mkdir -p ${RPM_BUILD_ROOT}%{_prefix}
-
-%makeinstall
-
-chmod +x ${RPM_BUILD_ROOT}%{_prefix}/%{_lib}/lib*.so*
-chmod +x ${RPM_BUILD_ROOT}%{_prefix}/%{_lib}/elfutils/lib*.so*
-
-# XXX Nuke unpackaged files
-{ cd ${RPM_BUILD_ROOT}
- rm -f .%{_bindir}/eu-ld
- rm -f .%{_includedir}/elfutils/libasm.h
- rm -f .%{_libdir}/libasm.so
- rm -f .%{_libdir}/libasm.a
-}
-
-%check
-make check
-
-%clean
-rm -rf ${RPM_BUILD_ROOT}
-
-%post -p /sbin/ldconfig
-
-%postun -p /sbin/ldconfig
-
-%post libelf -p /sbin/ldconfig
-
-%postun libelf -p /sbin/ldconfig
-
-%files
-%defattr(-,root,root)
-%doc README TODO
-%{_bindir}/eu-elflint
-%{_bindir}/eu-nm
-%{_bindir}/eu-readelf
-%{_bindir}/eu-size
-%{_bindir}/eu-strip
-%{_bindir}/eu-findtextrel
-%{_bindir}/eu-addr2line
-%{_bindir}/eu-elfcmp
-%{_bindir}/eu-ranlib
-%{_bindir}/eu-strings
-%{_bindir}/eu-objdump
-%{_bindir}/eu-ar
-%{_bindir}/eu-unstrip
-%{_bindir}/eu-make-debug-archive
-#%{_bindir}/eu-ld
-%{_libdir}/libasm-%{version}.so
-%{_libdir}/libdw-%{version}.so
-%{_libdir}/libasm.so.*
-%{_libdir}/libdw.so.*
-%dir %{_libdir}/elfutils
-%{_libdir}/elfutils/lib*.so
-
-%files devel
-%defattr(-,root,root)
-%{_includedir}/dwarf.h
-%dir %{_includedir}/elfutils
-%{_includedir}/elfutils/elf-knowledge.h
-#%{_includedir}/elfutils/libasm.h
-%{_includedir}/elfutils/libebl.h
-%{_includedir}/elfutils/libdw.h
-%{_includedir}/elfutils/libdwfl.h
-%{_libdir}/libebl.a
-#%{_libdir}/libasm.so
-%{_libdir}/libdw.so
-
-%files devel-static
-%{_libdir}/libdw.a
-#%{_libdir}/libasm.a
-
-%files libelf
-%defattr(-,root,root)
-%{_libdir}/libelf-%{version}.so
-%{_libdir}/libelf.so.*
-
-%files libelf-devel
-%defattr(-,root,root)
-%{_includedir}/libelf.h
-%{_includedir}/gelf.h
-%{_includedir}/nlist.h
-%{_libdir}/libelf.so
-
-%files libelf-devel-static
-%{_libdir}/libelf.a
-
-%changelog
-* Wed Dec 31 2008 Roland McGrath <roland@redhat.com> 0.138-1
-- Install <elfutils/version.h> header file for applications to use in
- source version compatibility checks.
-- libebl: backend fixes for i386 TLS relocs; backend support for
- NT_386_IOPERM
-- libcpu: disassembler fixes
-- libdwfl: bug fixes
-- libelf: bug fixes
-- nm: bug fixes for handling corrupt input files
-
-* Tue Aug 26 2008 Ulrich Drepper <drepper@redhat.com> 0.137-1
-- Minor fixes for unreleased 0.136 release.
-
-* Mon Aug 25 2008 Ulrich Drepper <drepper@redhat.com> 0.136-1
-- libdwfl: bug fixes; new segment interfaces; all the libdwfl-based
- tools now support --core=COREFILE option
-
-* Mon May 12 2008 Ulrich Drepper <drepper@redhat.com> 0.135-1
-- libdwfl: bug fixes
-- strip: changed handling of ET_REL files wrt symbol tables and relocs
-
-* Tue Apr 8 2008 Ulrich Drepper <drepper@redhat.com> 0.134-1
-- elflint: backend improvements for sparc, alpha
-- libdwfl, libelf: bug fixes
-
-* Sat Mar 1 2008 Ulrich Drepper <drepper@redhat.com> 0.133-1
-- readelf, elflint, libebl: SHT_GNU_ATTRIBUTE section handling (readelf -A)
-- readelf: core note handling for NT_386_TLS, NT_PPC_SPE, Alpha NT_AUXV
-- libdwfl: bug fixes and optimization in relocation handling
-- elfcmp: bug fix for non-allocated section handling
-- ld: implement newer features of binutils linker.
-
-* Mon Jan 21 2008 Ulrich Drepper <drepper@redhat.com> 0.132-1
-- libcpu: Implement x86 and x86-64 disassembler.
-- libasm: Add interface for disassembler.
-- all programs: add debugging of branch prediction.
-- libelf: new function elf_scnshndx.
-
-* Sun Nov 11 2007 Ulrich Drepper <drepper@redhat.com> 0.131-1
-- libdw: DW_FORM_ref_addr support; dwarf_formref entry point now depreca
-ted; bug fixes for oddly-formatted DWARF
-- libdwfl: bug fixes in offline archive support, symbol table handling;
- apply partial relocations for dwfl_module_address_section on
-ET_REL
-- libebl: powerpc backend support for Altivec registers
-
-* Mon Oct 15 2007 Ulrich Drepper <drepper@redhat.com> 0.130-1
-- readelf: -p option can take an argument like -x for one section,
- or no argument (as before) for all SHF_STRINGS sections;
- new option --archive-index (or -c); improved -n output fo
-r core files, on many machines
-- libelf: new function elf_getdata_rawchunk, replaces gelf_rawchunk;
- new functions gelf_getnote, gelf_getauxv, gelf_update_auxv
-- readelf, elflint: handle SHT_NOTE sections without requiring phdrs
-- elflint: stricter checks on debug sections
-- libdwfl: new functions dwfl_build_id_find_elf, dwfl_build_id_find_debu
-ginfo, dwfl_module_build_id, dwfl_module_report_build_id; suppo
-rt dynamic symbol tables found via phdrs; dwfl_standard_find_de
-buginfo now uses build IDs when available
-- unstrip: new option --list (or -n)
-- libebl: backend improvements for sparc, alpha, powerpc
-
-* Tue Aug 14 2007 Ulrich Drepper <drepper@redhat.com> 0.129-1
-- readelf: new options --hex-dump (or -x), --strings (or -p)
-- addr2line: new option --symbols (or -S)
-
-* Wed Apr 18 2007 Ulrich Drepper <drepper@redhat.com> 0.127-1
-- libdw: new function dwarf_getsrcdirs
-- libdwfl: new functions dwfl_module_addrsym, dwfl_report_begin_add,
- dwfl_module_address_section
-
-* Mon Feb 5 2007 Ulrich Drepper <drepper@redhat.com> 0.126-1
-- new program: ar
-
-* Mon Dec 18 2006 Ulrich Drepper <drepper@redhat.com> 0.125-1
-- elflint: Compare DT_GNU_HASH tests.
-- move archives into -static RPMs
-- libelf, elflint: better support for core file handling
-
-* Tue Oct 10 2006 Ulrich Drepper <drepper@redhat.com> 0.124-1
-- libebl: sparc backend support for return value location
-- libebl, libdwfl: backend register name support extended with more info
-- libelf, libdw: bug fixes for unaligned accesses on machines that care
-- readelf, elflint: trivial bugs fixed
-
-* Mon Aug 14 2006 Roland McGrath <roland@redhat.com> 0.123-1
-- libebl: Backend build fixes, thanks to Stepan Kasal.
-- libebl: ia64 backend support for register names, return value location
-- libdwfl: Handle truncated linux kernel module section names.
-- libdwfl: Look for linux kernel vmlinux files with .debug suffix.
-- elflint: Fix checks to permit --hash-style=gnu format.
-
-* Wed Jul 12 2006 Ulrich Drepper <drepper@redhat.com> 0.122-1
-- libebl: add function to test for relative relocation
-- elflint: fix and extend DT_RELCOUNT/DT_RELACOUNT checks
-- elflint, readelf: add support for DT_GNU_HASHlibelf: add elf_gnu_hash
-- elflint, readelf: add support for 64-bit SysV-style hash tables
-- libdwfl: new functions dwfl_module_getsymtab, dwfl_module_getsym.
-
-* Wed Jun 14 2006 <drepper@redhat.com> 0.121-1
-- libelf: bug fixes for rewriting existing files when using mmap.
-- make all installed headers usable in C++ code.
-- readelf: better output format.
-- elflint: fix tests of dynamic section content.
-- ld: Implement --as-needed, --execstack, PT_GNU_STACK. Many small patc
-hes.
-- libdw, libdwfl: handle files without aranges info.
-
-* Tue Apr 4 2006 Ulrich Drepper <drepper@redhat.com> 0.120-1
-- Bug fixes.
-- dwarf.h updated for DWARF 3.0 final specification.
-- libdwfl: New function dwfl_version.
-- The license is now GPL for most files. The libelf, libebl, libdw,and
-libdwfl libraries have additional exceptions. Add reference toOIN.
-
-* Thu Jan 12 2006 Roland McGrath <roland@redhat.com> 0.119-1
-- elflint: more tests.
-- libdwfl: New function dwfl_module_register_names.
-- libebl: New backend hook for register names.
-
-* Tue Dec 6 2005 Ulrich Drepper <drepper@redhat.com> 0.118-1
-- elflint: more tests.
-- libdwfl: New function dwfl_module_register_names.
-- libebl: New backend hook for register names.
-
-* Thu Nov 17 2005 Ulrich Drepper <drepper@redhat.com> 0.117-1
-- libdwfl: New function dwfl_module_return_value_location.
-- libebl: Backend improvements for several CPUs.
-
-* Mon Oct 31 2005 Ulrich Drepper <drepper@redhat.com> 0.116-1
-- libdw: New functions dwarf_ranges, dwarf_entrypc, dwarf_diecu, d
-warf_entry_breakpoints. Removed Dwarf_Func type and functions d
-warf_func_name, dwarf_func_lowpc, dwarf_func_highpc, dwarf_func_
-entrypc, dwarf_func_die; dwarf_getfuncs callback now uses Dwarf_
-Die, and dwarf_func_file, dwarf_func_line, dwarf_func_col replac
-ed by dwarf_decl_file, dwarf_decl_line, dwarf_decl_column; dwarf
-_func_inline, dwarf_func_inline_instances now take Dwarf_Die. Ty
-pe Dwarf_Loc renamed to Dwarf_Op; dwarf_getloclist, dwarf_addrlo
-clists renamed dwarf_getlocation, dwarf_getlocation_addr.
-
-* Fri Sep 2 2005 Ulrich Drepper <drepper@redhat.com> 0.115-1
-- libelf: speed-ups of non-mmap reading.
-- strings: New program.
-- Implement --enable-gcov option for configure.
-- libdw: New function dwarf_getscopes_die.
-
-* Wed Aug 24 2005 Ulrich Drepper <drepper@redhat.com> 0.114-1
-- libelf: new function elf_getaroff
-- libdw: Added dwarf_func_die, dwarf_func_inline, dwarf_func_inline_inst
-ances.
-- libdwfl: New functions dwfl_report_offline, dwfl_offline_section_addre
-ss, dwfl_linux_kernel_report_offline.
-- ranlib: new program
-
-* Mon Aug 15 2005 Ulrich Drepper <drepper@redhat.com> 0.114-1
-- libelf: new function elf_getaroff
-- ranlib: new program
-
-* Wed Aug 10 2005 Ulrich Drepper <@redhat.com> 0.113-1
-- elflint: relax a bit. Allow version definitions for defined symbols ag
-ainstDSO versions also for symbols in nobits sections. Allow .rodata
-sectionto have STRINGS and MERGE flag set.
-- strip: add some more compatibility with binutils.
-
-* Sat Aug 6 2005 Ulrich Drepper <@redhat.com> 0.113-1
-- elflint: relax a bit. Allow version definitions for defined symbols ag
-ainstDSO versions also for symbols in nobits sections. Allow .rodata
-sectionto have STRINGS and MERGE flag set.
-
-* Sat Aug 6 2005 Ulrich Drepper <@redhat.com> 0.113-1
-- elflint: relax a bit. Allow version definitions for defined symbols ag
-ainstDSO versions also for symbols in nobits sections.
-
-* Fri Aug 5 2005 Ulrich Drepper <@redhat.com> 0.112-1
-- elfcmp: some more relaxation.
-- elflint: many more tests, especially regarding to symbol versioning.
-- libelf: Add elfXX_offscn and gelf_offscn.
-- libasm: asm_begin interface changes.
-- libebl: Add three new interfaces to directly access machine, class, an
-ddata encoding information.
-- objdump: New program. Just the beginning.
-
-* Thu Jul 28 2005 Ulrich Drepper <@redhat.com> 0.111-1
-- libdw: now contains all of libdwfl. The latter is not installed anymore.
-- elfcmp: little usability tweak, name and index of differing section is
- printed.
-
-* Sun Jul 24 2005 Ulrich Drepper <@redhat.com> 0.110-1
-- libelf: fix a numbe rof problems with elf_update
-- elfcmp: fix a few bugs. Compare gaps.
-- Fix a few PLT problems and mudflap build issues.
-- libebl: Don't expose Ebl structure definition in libebl.h. It's now p
-rivate.
-
-* Thu Jul 21 2005 Ulrich Drepper <@redhat.com> 0.109-1
-- libebl: Check for matching modules.
-- elflint: Check that copy relocations only happen for OBJECT or NOTYPE
-symbols.
-- elfcmp: New program.
-- libdwfl: New library.
-
-* Mon May 9 2005 Ulrich Drepper <@redhat.com> 0.108-1
-- strip: fix bug introduced in last change
-- libdw: records returned by dwarf_getsrclines are now sorted by address
-
-* Sun May 8 2005 Ulrich Drepper <@redhat.com> 0.108-1
-- strip: fix bug introduced in last change
-
-* Sun May 8 2005 Ulrich Drepper <@redhat.com> 0.107-1
-- readelf: improve DWARF output format
-- strip: support Linux kernel modules
-
-* Fri Apr 29 2005 Ulrich Drepper <drepper@redhat.com> 0.107-1
-- readelf: improve DWARF output format
-
-* Mon Apr 4 2005 Ulrich Drepper <drepper@redhat.com> 0.106-1
-- libdw: Updated dwarf.h from DWARF3 speclibdw: add new funtions dwarf_f
-unc_entrypc, dwarf_func_file, dwarf_func_line,dwarf_func_col, dwarf_ge
-tsrc_file
-
-* Fri Apr 1 2005 Ulrich Drepper <drepper@redhat.com> 0.105-1
-- addr2line: New program
-- libdw: add new functions: dwarf_addrdie, dwarf_macro_*, dwarf_getfuncs
-,dwarf_func_*.
-- findtextrel: use dwarf_addrdie
-
-* Mon Mar 28 2005 Ulrich Drepper <drepper@redhat.com> 0.104-1
-- findtextrel: New program.
-
-* Mon Mar 21 2005 Ulrich Drepper <drepper@redhat.com> 0.103-1
-- libdw: Fix using libdw.h with gcc < 4 and C++ code. Compiler bug.
-
-* Tue Feb 22 2005 Ulrich Drepper <drepper@redhat.com> 0.102-1
-- More Makefile and spec file cleanups.
-
-* Fri Jan 16 2004 Jakub Jelinek <jakub@redhat.com> 0.94-1
-- upgrade to 0.94
-
-* Fri Jan 16 2004 Jakub Jelinek <jakub@redhat.com> 0.93-1
-- upgrade to 0.93
-
-* Thu Jan 8 2004 Jakub Jelinek <jakub@redhat.com> 0.92-1
-- full version
-- macroized spec file for GPL or OSL builds
-- include only libelf under GPL plus wrapper scripts
-
-* Wed Jan 7 2004 Jakub Jelinek <jakub@redhat.com> 0.91-2
-- macroized spec file for GPL or OSL builds
-
-* Wed Jan 7 2004 Ulrich Drepper <drepper@redhat.com>
-- split elfutils-devel into two packages.
-
-* Wed Jan 7 2004 Jakub Jelinek <jakub@redhat.com> 0.91-1
-- include only libelf under GPL plus wrapper scripts
-
-* Tue Dec 23 2003 Jeff Johnson <jbj@redhat.com> 0.89-3
-- readelf, not readline, in %%description (#111214).
-
-* Fri Sep 26 2003 Bill Nottingham <notting@redhat.com> 0.89-1
-- update to 0.89 (fix eu-strip)
-
-* Tue Sep 23 2003 Jakub Jelinek <jakub@redhat.com> 0.86-3
-- update to 0.86 (fix eu-strip on s390x/alpha)
-- libebl is an archive now; remove references to DSO
-
-* Mon Jul 14 2003 Jeff Johnson <jbj@redhat.com> 0.84-3
-- upgrade to 0.84 (readelf/elflint improvements, rawhide bugs fixed).
-
-* Fri Jul 11 2003 Jeff Johnson <jbj@redhat.com> 0.83-3
-- upgrade to 0.83 (fix invalid ELf handle on *.so strip, more).
-
-* Wed Jul 9 2003 Jeff Johnson <jbj@redhat.com> 0.82-3
-- upgrade to 0.82 (strip tests fixed on big-endian).
-
-* Tue Jul 8 2003 Jeff Johnson <jbj@redhat.com> 0.81-3
-- upgrade to 0.81 (strip excludes unused symtable entries, test borked).
-
-* Thu Jun 26 2003 Jeff Johnson <jbj@redhat.com> 0.80-3
-- upgrade to 0.80 (debugedit changes for kernel in progress).
-
-* Wed Jun 04 2003 Elliot Lee <sopwith@redhat.com>
-- rebuilt
-
-* Wed May 21 2003 Jeff Johnson <jbj@redhat.com> 0.79-2
-- upgrade to 0.79 (correct formats for size_t, more of libdw "works").
-
-* Mon May 19 2003 Jeff Johnson <jbj@redhat.com> 0.78-2
-- upgrade to 0.78 (libdwarf bugfix, libdw additions).
-
-* Mon Feb 24 2003 Elliot Lee <sopwith@redhat.com>
-- debuginfo rebuild
-
-* Thu Feb 20 2003 Jeff Johnson <jbj@redhat.com> 0.76-2
-- use the correct way of identifying the section via the sh_info link.
-
-* Sat Feb 15 2003 Jakub Jelinek <jakub@redhat.com> 0.75-2
-- update to 0.75 (eu-strip -g fix)
-
-* Tue Feb 11 2003 Jakub Jelinek <jakub@redhat.com> 0.74-2
-- update to 0.74 (fix for writing with some non-dirty sections)
-
-* Thu Feb 6 2003 Jeff Johnson <jbj@redhat.com> 0.73-3
-- another -0.73 update (with sparc fixes).
-- do "make check" in %%check, not %%install, section.
-
-* Mon Jan 27 2003 Jeff Johnson <jbj@redhat.com> 0.73-2
-- update to 0.73 (with s390 fixes).
-
-* Wed Jan 22 2003 Tim Powers <timp@redhat.com>
-- rebuilt
-
-* Wed Jan 22 2003 Jakub Jelinek <jakub@redhat.com> 0.72-4
-- fix arguments to gelf_getsymshndx and elf_getshstrndx
-- fix other warnings
-- reenable checks on s390x
-
-* Sat Jan 11 2003 Karsten Hopp <karsten@redhat.de> 0.72-3
-- temporarily disable checks on s390x, until someone has
- time to look at it
-
-* Thu Dec 12 2002 Jakub Jelinek <jakub@redhat.com> 0.72-2
-- update to 0.72
-
-* Wed Dec 11 2002 Jakub Jelinek <jakub@redhat.com> 0.71-2
-- update to 0.71
-
-* Wed Dec 11 2002 Jeff Johnson <jbj@redhat.com> 0.69-4
-- update to 0.69.
-- add "make check" and segfault avoidance patch.
-- elfutils-libelf needs to run ldconfig.
-
-* Tue Dec 10 2002 Jeff Johnson <jbj@redhat.com> 0.68-2
-- update to 0.68.
-
-* Fri Dec 6 2002 Jeff Johnson <jbj@redhat.com> 0.67-2
-- update to 0.67.
-
-* Tue Dec 3 2002 Jeff Johnson <jbj@redhat.com> 0.65-2
-- update to 0.65.
-
-* Mon Dec 2 2002 Jeff Johnson <jbj@redhat.com> 0.64-2
-- update to 0.64.
-
-* Sun Dec 1 2002 Ulrich Drepper <drepper@redhat.com> 0.64
-- split packages further into elfutils-libelf
-
-* Sat Nov 30 2002 Jeff Johnson <jbj@redhat.com> 0.63-2
-- update to 0.63.
-
-* Fri Nov 29 2002 Ulrich Drepper <drepper@redhat.com> 0.62
-- Adjust for dropping libtool
-
-* Sun Nov 24 2002 Jeff Johnson <jbj@redhat.com> 0.59-2
-- update to 0.59
-
-* Thu Nov 14 2002 Jeff Johnson <jbj@redhat.com> 0.56-2
-- update to 0.56
-
-* Thu Nov 7 2002 Jeff Johnson <jbj@redhat.com> 0.54-2
-- update to 0.54
-
-* Sun Oct 27 2002 Jeff Johnson <jbj@redhat.com> 0.53-2
-- update to 0.53
-- drop x86_64 hack, ICE fixed in gcc-3.2-11.
-
-* Sat Oct 26 2002 Jeff Johnson <jbj@redhat.com> 0.52-3
-- get beehive to punch a rhpkg generated package.
-
-* Wed Oct 23 2002 Jeff Johnson <jbj@redhat.com> 0.52-2
-- build in 8.0.1.
-- x86_64: avoid gcc-3.2 ICE on x86_64 for now.
-
-* Tue Oct 22 2002 Ulrich Drepper <drepper@redhat.com> 0.52
-- Add libelf-devel to conflicts for elfutils-devel
-
-* Mon Oct 21 2002 Ulrich Drepper <drepper@redhat.com> 0.50
-- Split into runtime and devel package
-
-* Fri Oct 18 2002 Ulrich Drepper <drepper@redhat.com> 0.49
-- integrate into official sources
-
-* Wed Oct 16 2002 Jeff Johnson <jbj@redhat.com> 0.46-1
-- Swaddle.
diff --git a/elfutils/libdw.h b/elfutils/libdw.h
index 3f3e5a0..e001b7a 100644
--- a/elfutils/libdw.h
+++ b/elfutils/libdw.h
@@ -1,5 +1,5 @@
/* Interfaces for libdw.
- Copyright (C) 2002, 2004, 2005, 2006, 2007, 2008 Red Hat, Inc.
+ Copyright (C) 2002-2010 Red Hat, Inc.
This file is part of Red Hat elfutils.
Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -190,6 +190,72 @@
} Dwarf_Op;
+/* This describes one Common Information Entry read from a CFI section.
+ Pointers here point into the DATA->d_buf block passed to dwarf_next_cfi. */
+typedef struct
+{
+ Dwarf_Off CIE_id; /* Always DW_CIE_ID_64 in Dwarf_CIE structures. */
+
+ /* Instruction stream describing initial state used by FDEs. If
+ we did not understand the whole augmentation string and it did
+ not use 'z', then there might be more augmentation data here
+ (and in FDEs) before the actual instructions. */
+ const uint8_t *initial_instructions;
+ const uint8_t *initial_instructions_end;
+
+ Dwarf_Word code_alignment_factor;
+ Dwarf_Sword data_alignment_factor;
+ Dwarf_Word return_address_register;
+
+ const char *augmentation; /* Augmentation string. */
+
+ /* Augmentation data, might be NULL. The size is correct only if
+ we understood the augmentation string sufficiently. */
+ const uint8_t *augmentation_data;
+ size_t augmentation_data_size;
+ size_t fde_augmentation_data_size;
+} Dwarf_CIE;
+
+/* This describes one Frame Description Entry read from a CFI section.
+ Pointers here point into the DATA->d_buf block passed to dwarf_next_cfi. */
+typedef struct
+{
+ /* Section offset of CIE this FDE refers to. This will never be
+ DW_CIE_ID_64 in an FDE. If this value is DW_CIE_ID_64, this is
+ actually a Dwarf_CIE structure. */
+ Dwarf_Off CIE_pointer;
+
+ /* We can't really decode anything further without looking up the CIE
+ and checking its augmentation string. Here follows the encoded
+ initial_location and address_range, then any augmentation data,
+ then the instruction stream. This FDE describes PC locations in
+ the byte range [initial_location, initial_location+address_range).
+ When the CIE augmentation string uses 'z', the augmentation data is
+ a DW_FORM_block (self-sized). Otherwise, when we understand the
+ augmentation string completely, fde_augmentation_data_size gives
+ the number of bytes of augmentation data before the instructions. */
+ const uint8_t *start;
+ const uint8_t *end;
+} Dwarf_FDE;
+
+/* Each entry in a CFI section is either a CIE described by Dwarf_CIE or
+ an FDE described by Dward_FDE. Check CIE_id to see which you have. */
+typedef union
+{
+ Dwarf_Off CIE_id; /* Always DW_CIE_ID_64 in Dwarf_CIE structures. */
+ Dwarf_CIE cie;
+ Dwarf_FDE fde;
+} Dwarf_CFI_Entry;
+
+#define dwarf_cfi_cie_p(entry) ((entry)->cie.CIE_id == DW_CIE_ID_64)
+
+/* Opaque type representing a frame state described by CFI. */
+typedef struct Dwarf_Frame_s Dwarf_Frame;
+
+/* Opaque type representing a CFI section found in a DWARF or ELF file. */
+typedef struct Dwarf_CFI_s Dwarf_CFI;
+
+
/* Handle for debug sessions. */
typedef struct Dwarf Dwarf;
@@ -222,17 +288,73 @@
/* Get the data block for the .debug_info section. */
extern Elf_Data *dwarf_getscn_info (Dwarf *dwarf);
-/* Read the header for the DWARF CU header. */
+/* Read the header for the DWARF CU. */
extern int dwarf_nextcu (Dwarf *dwarf, Dwarf_Off off, Dwarf_Off *next_off,
size_t *header_sizep, Dwarf_Off *abbrev_offsetp,
uint8_t *address_sizep, uint8_t *offset_sizep)
__nonnull_attribute__ (3);
+/* Read the header of a DWARF CU or type unit. If TYPE_SIGNATUREP is not
+ null, this reads a type unit from the .debug_types section; otherwise
+ this reads a CU from the .debug_info section. */
+extern int dwarf_next_unit (Dwarf *dwarf, Dwarf_Off off, Dwarf_Off *next_off,
+ size_t *header_sizep, Dwarf_Half *versionp,
+ Dwarf_Off *abbrev_offsetp,
+ uint8_t *address_sizep, uint8_t *offset_sizep,
+ uint64_t *type_signaturep, Dwarf_Off *type_offsetp)
+ __nonnull_attribute__ (3);
-/* Return DIE at given offset. */
+
+/* Decode one DWARF CFI entry (CIE or FDE) from the raw section data.
+ The E_IDENT from the originating ELF file indicates the address
+ size and byte order used in the CFI section contained in DATA;
+ EH_FRAME_P should be true for .eh_frame format and false for
+ .debug_frame format. OFFSET is the byte position in the section
+ to start at; on return *NEXT_OFFSET is filled in with the byte
+ position immediately after this entry.
+
+ On success, returns 0 and fills in *ENTRY; use dwarf_cfi_cie_p to
+ see whether ENTRY->cie or ENTRY->fde is valid.
+
+ On errors, returns -1. Some format errors will permit safely
+ skipping to the next CFI entry though the current one is unusable.
+ In that case, *NEXT_OFF will be updated before a -1 return.
+
+ If there are no more CFI entries left in the section,
+ returns 1 and sets *NEXT_OFFSET to (Dwarf_Off) -1. */
+extern int dwarf_next_cfi (const unsigned char e_ident[],
+ Elf_Data *data, bool eh_frame_p,
+ Dwarf_Off offset, Dwarf_Off *next_offset,
+ Dwarf_CFI_Entry *entry)
+ __nonnull_attribute__ (1, 2, 5, 6);
+
+/* Use the CFI in the DWARF .debug_frame section.
+ Returns NULL if there is no such section (not an error).
+ The pointer returned can be used until dwarf_end is called on DWARF,
+ and must not be passed to dwarf_cfi_end.
+ Calling this more than once returns the same pointer. */
+extern Dwarf_CFI *dwarf_getcfi (Dwarf *dwarf);
+
+/* Use the CFI in the ELF file's exception-handling data.
+ Returns NULL if there is no such data.
+ The pointer returned can be used until elf_end is called on ELF,
+ and must be passed to dwarf_cfi_end before then.
+ Calling this more than once allocates independent data structures. */
+extern Dwarf_CFI *dwarf_getcfi_elf (Elf *elf);
+
+/* Release resources allocated by dwarf_getcfi_elf. */
+extern int dwarf_cfi_end (Dwarf_CFI *cache);
+
+
+/* Return DIE at given offset in .debug_info section. */
extern Dwarf_Die *dwarf_offdie (Dwarf *dbg, Dwarf_Off offset,
Dwarf_Die *result) __nonnull_attribute__ (3);
+/* Return DIE at given offset in .debug_types section. */
+extern Dwarf_Die *dwarf_offdie_types (Dwarf *dbg, Dwarf_Off offset,
+ Dwarf_Die *result)
+ __nonnull_attribute__ (3);
+
/* Return offset of DIE. */
extern Dwarf_Off dwarf_dieoffset (Dwarf_Die *die);
@@ -257,7 +379,7 @@
Returns 1 if no sibling could be found and, if RESULT is not
the same as DIE, it sets RESULT->addr to the address of the
(non-sibling) DIE that follows this one, or NULL if this DIE
- was the last one in the cokmpilation unit. */
+ was the last one in the compilation unit. */
extern int dwarf_siblingof (Dwarf_Die *die, Dwarf_Die *result)
__nonnull_attribute__ (2);
@@ -456,6 +578,9 @@
/* Return line address. */
extern int dwarf_lineaddr (Dwarf_Line *line, Dwarf_Addr *addrp);
+/* Return line VLIW operation index. */
+extern int dwarf_lineop_index (Dwarf_Line *line, unsigned int *op_indexp);
+
/* Return line number. */
extern int dwarf_lineno (Dwarf_Line *line, int *linep)
__nonnull_attribute__ (2);
@@ -484,6 +609,14 @@
extern int dwarf_lineepiloguebegin (Dwarf_Line *line, bool *flagp)
__nonnull_attribute__ (2);
+/* Return instruction-set architecture in this record. */
+extern int dwarf_lineisa (Dwarf_Line *line, unsigned int *isap)
+ __nonnull_attribute__ (2);
+
+/* Return code path discriminator in this record. */
+extern int dwarf_linediscriminator (Dwarf_Line *line, unsigned int *discp)
+ __nonnull_attribute__ (2);
+
/* Find line information for address. */
extern const char *dwarf_linesrc (Dwarf_Line *line,
@@ -518,6 +651,30 @@
Dwarf_Op **exprs, size_t *exprlens,
size_t nlocs);
+/* Return the block associated with a DW_OP_implicit_value operation.
+ The OP pointer must point into an expression that dwarf_getlocation
+ or dwarf_getlocation_addr has returned given the same ATTR. */
+extern int dwarf_getlocation_implicit_value (Dwarf_Attribute *attr,
+ const Dwarf_Op *op,
+ Dwarf_Block *return_block)
+ __nonnull_attribute__ (2, 3);
+
+/* Return the attribute indicated by a DW_OP_GNU_implicit_pointer operation.
+ The OP pointer must point into an expression that dwarf_getlocation
+ or dwarf_getlocation_addr has returned given the same ATTR.
+ The result is the DW_AT_location or DW_AT_const_value attribute
+ of the OP->number DIE. */
+extern int dwarf_getlocation_implicit_pointer (Dwarf_Attribute *attr,
+ const Dwarf_Op *op,
+ Dwarf_Attribute *result)
+ __nonnull_attribute__ (2, 3);
+
+
+/* Compute the byte-size of a type DIE according to DWARF rules.
+ For most types, this is just DW_AT_byte_size.
+ For DW_TAG_array_type it can apply much more complex rules. */
+extern int dwarf_aggregate_size (Dwarf_Die *die, Dwarf_Word *size);
+
/* Return scope DIEs containing PC address.
Sets *SCOPES to a malloc'd array of Dwarf_Die structures,
@@ -626,6 +783,59 @@
const char **strp);
+/* Compute what's known about a call frame when the PC is at ADDRESS.
+ Returns 0 for success or -1 for errors.
+ On success, *FRAME is a malloc'd pointer. */
+extern int dwarf_cfi_addrframe (Dwarf_CFI *cache,
+ Dwarf_Addr address, Dwarf_Frame **frame)
+ __nonnull_attribute__ (3);
+
+/* Return the DWARF register number used in FRAME to denote
+ the return address in FRAME's caller frame. The remaining
+ arguments can be non-null to fill in more information.
+
+ Fill [*START, *END) with the PC range to which FRAME's information applies.
+ Fill in *SIGNALP to indicate whether this is a signal-handling frame.
+ If true, this is the implicit call frame that calls a signal handler.
+ This frame's "caller" is actually the interrupted state, not a call;
+ its return address is an exact PC, not a PC after a call instruction. */
+extern int dwarf_frame_info (Dwarf_Frame *frame,
+ Dwarf_Addr *start, Dwarf_Addr *end, bool *signalp);
+
+/* Return a DWARF expression that yields the Canonical Frame Address at
+ this frame state. Returns -1 for errors, or zero for success, with
+ *NOPS set to the number of operations stored at *OPS. That pointer
+ can be used only as long as FRAME is alive and unchanged. *NOPS is
+ zero if the CFA cannot be determined here. Note that if nonempty,
+ *OPS is a DWARF expression, not a location description--append
+ DW_OP_stack_value to a get a location description for the CFA. */
+extern int dwarf_frame_cfa (Dwarf_Frame *frame, Dwarf_Op **ops, size_t *nops)
+ __nonnull_attribute__ (2);
+
+/* Deliver a DWARF location description that yields the location or
+ value of DWARF register number REGNO in the state described by FRAME.
+
+ Returns -1 for errors or zero for success, setting *NOPS to the
+ number of operations in the array stored at *OPS. Note the last
+ operation is DW_OP_stack_value if there is no mutable location but
+ only a computable value.
+
+ *NOPS zero with *OPS set to OPS_MEM means CFI says the caller's
+ REGNO is "undefined", i.e. it's call-clobbered and cannot be recovered.
+
+ *NOPS zero with *OPS set to a null pointer means CFI says the
+ caller's REGNO is "same_value", i.e. this frame did not change it;
+ ask the caller frame where to find it.
+
+ For common simple expressions *OPS is OPS_MEM. For arbitrary DWARF
+ expressions in the CFI, *OPS is an internal pointer that can be used as
+ long as the Dwarf_CFI used to create FRAME remains alive. */
+extern int dwarf_frame_register (Dwarf_Frame *frame, int regno,
+ Dwarf_Op ops_mem[3],
+ Dwarf_Op **ops, size_t *nops)
+ __nonnull_attribute__ (3, 4, 5);
+
+
/* Return error code of last failing function call. This value is kept
separately for each thread. */
extern int dwarf_errno (void);
diff --git a/elfutils/libdwfl.h b/elfutils/libdwfl.h
index b6ae776..4ea2796 100644
--- a/elfutils/libdwfl.h
+++ b/elfutils/libdwfl.h
@@ -1,5 +1,5 @@
/* Interfaces for libdwfl.
- Copyright (C) 2005, 2006, 2007, 2008 Red Hat, Inc.
+ Copyright (C) 2005-2010 Red Hat, Inc.
This file is part of Red Hat elfutils.
Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -359,6 +359,15 @@
int (*predicate) (const char *,
const char *));
+/* Examine an ET_CORE file and report modules based on its contents.
+ This can follow a dwfl_report_offline call to bootstrap the
+ DT_DEBUG method of following the dynamic linker link_map chain, in
+ case the core file does not contain enough of the executable's text
+ segment to locate its PT_DYNAMIC in the dump. This might call
+ dwfl_report_elf on file names found in the dump if reading some
+ link_map files is the only way to ascertain those modules' addresses.
+ Returns the number of modules reported, or -1 for errors. */
+extern int dwfl_core_file_report (Dwfl *dwfl, Elf *elf);
/* Call dwfl_report_module for each file mapped into the address space of PID.
Returns zero on success, -1 if dwfl_report_module failed,
@@ -423,10 +432,11 @@
/* Fetch one entry from the module's symbol table. On errors, returns
NULL. If successful, fills in *SYM and returns the string for st_name.
- This works like gelf_getsym except that st_value is always adjusted
- to an absolute value based on the module's location. If SHNDXP is
- non-null, it's set with the section index (whether from st_shndx or
- extended index table). */
+ This works like gelf_getsym except that st_value is always adjusted to
+ an absolute value based on the module's location, when the symbol is in
+ an SHF_ALLOC section. If SHNDXP is non-null, it's set with the section
+ index (whether from st_shndx or extended index table); in case of a
+ symbol in a non-allocated section, *SHNDXP is instead set to -1. */
extern const char *dwfl_module_getsym (Dwfl_Module *mod, int ndx,
GElf_Sym *sym, GElf_Word *shndxp)
__nonnull_attribute__ (3);
@@ -517,6 +527,9 @@
int *linep, int *colp,
Dwarf_Word *mtime, Dwarf_Word *length);
+ /* Return the equivalent Dwarf_Line and the bias to apply to its address. */
+extern Dwarf_Line *dwfl_dwarf_line (Dwfl_Line *line, Dwarf_Addr *bias);
+
/* Return the compilation directory (AT_comp_dir) from this line's CU. */
extern const char *dwfl_line_comp_dir (Dwfl_Line *line);
@@ -551,6 +564,20 @@
void *arg);
+/* Find the CFI for this module. Returns NULL if there is no CFI.
+ On success, fills in *BIAS with the difference between addresses
+ within the loaded module and those in the CFI referring to it.
+ The pointer returned can be used until the module is cleaned up.
+ Calling these more than once returns the same pointers.
+
+ dwfl_module_dwarf_cfi gets the '.debug_frame' information found with the
+ rest of the DWARF information. dwfl_module_eh_cfi gets the '.eh_frame'
+ information found linked into the text. A module might have either or
+ both. */
+extern Dwarf_CFI *dwfl_module_dwarf_cfi (Dwfl_Module *mod, Dwarf_Addr *bias);
+extern Dwarf_CFI *dwfl_module_eh_cfi (Dwfl_Module *mod, Dwarf_Addr *bias);
+
+
#ifdef __cplusplus
}
#endif
diff --git a/elfutils/version.h b/elfutils/version.h
index d166419..684c0dd 100644
--- a/elfutils/version.h
+++ b/elfutils/version.h
@@ -50,7 +50,7 @@
#ifndef _ELFUTILS_VERSION_H
#define _ELFUTILS_VERSION_H 1
-#define _ELFUTILS_VERSION 138
+#define _ELFUTILS_VERSION 153
#define _ELFUTILS_PREREQ(major, minor) \
(_ELFUTILS_VERSION >= ((major) * 1000 + (minor)))
diff --git a/host-darwin-fixup/AndroidFixup.h b/host-darwin-fixup/AndroidFixup.h
deleted file mode 100644
index 2235835..0000000
--- a/host-darwin-fixup/AndroidFixup.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright 2012, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef ANDROID_FIXUP_H
-#define ANDROID_FIXUP_H
-
-#define loff_t off_t
-#define off64_t off_t
-
-#include <string.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <locale.h> //LC_MESSAGES
-
-#ifndef TEMP_FAILURE_RETRY
-#define TEMP_FAILURE_RETRY(exp) ({ \
- typeof (exp) _rc; \
- do { \
- _rc = (exp); \
- } while (_rc == -1 && errno == EINTR); \
- _rc; })
-#endif
-
-#if __MAC_OS_X_VERSION_MIN_REQUIRED < 1070
-static inline size_t strnlen (const char *__string, size_t __maxlen)
-{
- int len = 0;
- while (__maxlen-- && *__string++)
- len++;
- return len;
-}
-#endif
-
-static inline void *mempcpy (void * __dest, const void * __src, size_t __n)
-{
- memcpy(__dest, __src, __n);
- return ((char *)__dest) + __n;
-}
-
-#define __mempcpy mempcpy
-
-#define dgettext(domainname, msgid) dcgettext (domainname, msgid, LC_MESSAGES)
-
-static inline void __attribute__((noreturn)) error(int status, int errnum, const char *fmt, ...)
-{
- va_list lst;
- va_start(lst, fmt);
- vfprintf(stderr, fmt, lst);
- fprintf(stderr, "error %d: %s\n", errnum, strerror(errno));
- va_end(lst);
- exit(status);
-}
-
-static inline char *dcgettext (char *__domainname, char *__msgid, int __category)
-{
- error(EXIT_FAILURE, 0, "%s not implemented!", __FUNCTION__);
- return NULL;
-}
-
-/* workaround for canonicalize_file_name */
-#define canonicalize_file_name(path) realpath(path, NULL)
-
-/* workaround for open64 */
-#define open64(path, flags) open(path, flags)
-
-/* rawmemchr */
-static inline void *rawmemchr(const void *s, int c)
-{
- const unsigned char *ptr = s;
- while (1) {
- if (*ptr == c) return (void *) ptr;
- ptr++;
- }
-}
-
-#define strndup(str, size) strdup(str)
-
-static void tdestroy(void *root, void (*free_node)(void *nodep))
-{
-}
-
-#endif /* ANDROID_FIXUP_H */
diff --git a/host-darwin-fixup/byteswap.h b/host-darwin-fixup/byteswap.h
deleted file mode 100644
index 6b3d212..0000000
--- a/host-darwin-fixup/byteswap.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright 2012, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef ELFUTILS_BYTESWAP_H
-#define ELFUTILS_BYTESWAP_H
-
-static inline unsigned short bswap_16(unsigned short val)
-{
- return ((val & 0xff) << 8) | ((val >> 8) & 0xff);
-}
-
-static inline unsigned long bswap_32(unsigned long val)
-{
- return bswap_16((unsigned short)val) << 16 |
- bswap_16((unsigned short)(val >> 16));
-}
-
-static inline unsigned long long bswap_64(unsigned long long val)
-{
- return ((((unsigned long long)bswap_32(val)) << 32) |
- (((unsigned long long)bswap_32(val >> 32)) & 0xffffffffULL));
-}
-
-#endif /* ELFUTILS_BYTESWAP_H */
diff --git a/host-darwin-fixup/endian.h b/host-darwin-fixup/endian.h
deleted file mode 100644
index 285e196..0000000
--- a/host-darwin-fixup/endian.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright 2012, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef ELFUTILS_ENDIAN_H
-#define ELFUTILS_ENDIAN_H
-
-#define __LITTLE_ENDIAN (1234)
-#define __BIG_ENDIAN (4321)
-#define __BYTE_ORDER __LITTLE_ENDIAN
-
-#endif /* ELFUTILS_ENDIAN_H */
diff --git a/host-darwin-fixup/error.h b/host-darwin-fixup/error.h
deleted file mode 100644
index 4b89257..0000000
--- a/host-darwin-fixup/error.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright 2012, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef ELFUTILS_ERROR_H
-#define ELFUTILS_ERROR_H
-
-/* intentionally blank */
-
-#endif /* ELFUTILS_ERROR_H */
diff --git a/host-darwin-fixup/libintl.h b/host-darwin-fixup/libintl.h
deleted file mode 100644
index da26bfa..0000000
--- a/host-darwin-fixup/libintl.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright 2012, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef ELFUTILS_LIBINTL_H
-#define ELFUTILS_LIBINTL_H
-
-/* intentionally blank */
-
-#endif /* ELFUTILS_LIBINTL_H */
diff --git a/host-linux-fixup/AndroidFixup.h b/host-linux-fixup/AndroidFixup.h
deleted file mode 100644
index 909867c..0000000
--- a/host-linux-fixup/AndroidFixup.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright 2012, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef ANDROID_FIXUP_H
-#define ANDROID_FIXUP_H
-
-/* intentionally blank */
-
-#endif /* ANDROID_FIXUP_H */
diff --git a/lib/ChangeLog b/lib/ChangeLog
deleted file mode 100644
index f4c261a..0000000
--- a/lib/ChangeLog
+++ /dev/null
@@ -1,76 +0,0 @@
-2008-08-25 Roland McGrath <roland@redhat.com>
-
- * eu-config.h [USE_TLS] (RWLOCK_CALL): New macro.
- (rwlock_init, rwlock_fini, rwlock_rdlock, rwlock_wrlock, rwlock_unlock):
- Use it.
-
-2008-08-24 Roland McGrath <roland@redhat.com>
-
- * eu-config.h: New file.
- * Makefile.am (noinst_HEADERS): Add it.
-
-2008-02-01 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am (libeu_a_SOURCES): Add sha1.c.
- (noinst_HEADERS): Add sha1.h.
- * sha1.c: New file.
- * sha1.h: New file.
-
-2008-01-31 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am (libeu_a_SOURCES): Add md5.c.
- (noinst_HEADERS): Add md5.h.
- * md5.c: New file.
- * md5.h: New file.
-
-2006-04-04 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am (libeu_a_SOURCES): We don't need xstrdup in the moment.
-
-2005-08-28 Ulrich Drepper <drepper@redhat.com>
-
- * system.h: Define pwrite_retry, write_retry, and pread_retry.
-
-2005-08-06 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am (xmalloc_CFLAGS): Define only if !GPROF.
-
-2005-05-03 Roland McGrath <roland@redhat.com>
-
- * crc32_file.c: New file.
- * Makefile.am (libeu_a_SOURCES): Add it.
- * system.h: Declare crc32_file.
-
-2005-04-30 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: Use -ffunction-sections for xmalloc.c.
-
-2005-02-15 Ulrich Drepper <drepper@redhat.com>
-
- * dynamicsizehash.c (lookup): Mark val parameter as possibly unused.
-
-2005-02-06 Ulrich Drepper <drepper@redhat.com>
-
- * fixedsizehash.h: Mark unused parameters. Correct CLASS and
- const order for fshash_find.
-
- * Makefile.am: Cleanup AM_CFLAGS handling. Add -Wunused -Wextra.
-
-2005-02-05 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am [MUDFLAP] (AM_CFLAGS): Add -fpic and -fmudflap.
-
-2004-01-17 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: Support building with mudflap.
-
-2003-09-22 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am (AM_CFLAGS): Add -fpic.
-
- * Makefile.am (noinst_HEADERS): Add list.h.
- * list.h: New file.
-
-2003-08-11 Ulrich Drepper <drepper@redhat.com>
-
- * Moved to CVS archive.
diff --git a/lib/Makefile.am b/lib/Makefile.am
deleted file mode 100644
index b95d3e3..0000000
--- a/lib/Makefile.am
+++ /dev/null
@@ -1,47 +0,0 @@
-## Process this file with automake to create Makefile.in
-##
-## Copyright (C) 1996-2001, 2002, 2004, 2005, 2008 Red Hat, Inc.
-## This file is part of Red Hat elfutils.
-##
-## Red Hat elfutils is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by the
-## Free Software Foundation; version 2 of the License.
-##
-## Red Hat elfutils 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
-## General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License along
-## with Red Hat elfutils; if not, write to the Free Software Foundation,
-## Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-##
-## Red Hat elfutils is an included package of the Open Invention Network.
-## An included package of the Open Invention Network is a package for which
-## Open Invention Network licensees cross-license their patents. No patent
-## license is granted, either expressly or impliedly, by designation as an
-## included package. Should you wish to participate in the Open Invention
-## Network licensing program, please visit www.openinventionnetwork.com
-## <http://www.openinventionnetwork.com>.
-##
-DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H
-if MUDFLAP
-AM_CFLAGS = -fmudflap
-else
-AM_CFLAGS =
-endif
-AM_CFLAGS += -fpic -Wall -Wshadow -Werror -Wunused -Wextra $($(*F)_CFLAGS)
-INCLUDES = -I$(srcdir)/../libelf -I..
-
-noinst_LIBRARIES = libeu.a
-
-libeu_a_SOURCES = xstrndup.c xmalloc.c next_prime.c \
- crc32.c crc32_file.c md5.c sha1.c
-
-noinst_HEADERS = fixedsizehash.h system.h dynamicsizehash.h list.h md5.h \
- sha1.h eu-config.h
-EXTRA_DIST = dynamicsizehash.c
-
-if !GPROF
-xmalloc_CFLAGS = -ffunction-sections
-endif
diff --git a/lib/Makefile.in b/lib/Makefile.in
deleted file mode 100644
index eac1fe9..0000000
--- a/lib/Makefile.in
+++ /dev/null
@@ -1,439 +0,0 @@
-# Makefile.in generated by automake 1.10.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = lib
-DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
- $(srcdir)/Makefile.in ChangeLog
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-LIBRARIES = $(noinst_LIBRARIES)
-AR = ar
-ARFLAGS = cru
-libeu_a_AR = $(AR) $(ARFLAGS)
-libeu_a_LIBADD =
-am_libeu_a_OBJECTS = xstrndup.$(OBJEXT) xmalloc.$(OBJEXT) \
- next_prime.$(OBJEXT) crc32.$(OBJEXT) crc32_file.$(OBJEXT) \
- md5.$(OBJEXT) sha1.$(OBJEXT)
-libeu_a_OBJECTS = $(am_libeu_a_OBJECTS)
-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-SOURCES = $(libeu_a_SOURCES)
-DIST_SOURCES = $(libeu_a_SOURCES)
-HEADERS = $(noinst_HEADERS)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEBUGPRED = @DEBUGPRED@
-DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H
-DEPDIR = @DEPDIR@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EXEEXT = @EXEEXT@
-GMSGFMT = @GMSGFMT@
-GMSGFMT_015 = @GMSGFMT_015@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LDFLAGS = @LDFLAGS@
-LEX = @LEX@
-LEXLIB = @LEXLIB@
-LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
-LIBEBL_SUBDIR = @LIBEBL_SUBDIR@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LOCALEDIR = @LOCALEDIR@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MKDIR_P = @MKDIR_P@
-MODVERSION = @MODVERSION@
-MSGFMT = @MSGFMT@
-MSGFMT_015 = @MSGFMT_015@
-MSGMERGE = @MSGMERGE@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-RANLIB = @RANLIB@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-USE_NLS = @USE_NLS@
-VERSION = @VERSION@
-XGETTEXT = @XGETTEXT@
-XGETTEXT_015 = @XGETTEXT_015@
-YACC = @YACC@
-YFLAGS = @YFLAGS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-base_cpu = @base_cpu@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-eu_version = @eu_version@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-@MUDFLAP_FALSE@AM_CFLAGS = -fpic -Wall -Wshadow -Werror -Wunused \
-@MUDFLAP_FALSE@ -Wextra $($(*F)_CFLAGS)
-@MUDFLAP_TRUE@AM_CFLAGS = -fmudflap -fpic -Wall -Wshadow -Werror \
-@MUDFLAP_TRUE@ -Wunused -Wextra $($(*F)_CFLAGS)
-INCLUDES = -I$(srcdir)/../libelf -I..
-noinst_LIBRARIES = libeu.a
-libeu_a_SOURCES = xstrndup.c xmalloc.c next_prime.c \
- crc32.c crc32_file.c md5.c sha1.c
-
-noinst_HEADERS = fixedsizehash.h system.h dynamicsizehash.h list.h md5.h \
- sha1.h eu-config.h
-
-EXTRA_DIST = dynamicsizehash.c
-@GPROF_FALSE@xmalloc_CFLAGS = -ffunction-sections
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
- && exit 0; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits lib/Makefile'; \
- cd $(top_srcdir) && \
- $(AUTOMAKE) --gnits lib/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-clean-noinstLIBRARIES:
- -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
-libeu.a: $(libeu_a_OBJECTS) $(libeu_a_DEPENDENCIES)
- -rm -f libeu.a
- $(libeu_a_AR) libeu.a $(libeu_a_OBJECTS) $(libeu_a_LIBADD)
- $(RANLIB) libeu.a
-
-mostlyclean-compile:
- -rm -f *.$(OBJEXT)
-
-distclean-compile:
- -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crc32.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crc32_file.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md5.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/next_prime.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha1.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmalloc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xstrndup.Po@am__quote@
-
-.c.o:
-@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
-
-.c.obj:
-@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- mkid -fID $$unique
-tags: TAGS
-
-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- here=`pwd`; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$tags $$unique; \
- fi
-ctags: CTAGS
-CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- test -z "$(CTAGS_ARGS)$$tags$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$tags $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && cd $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) $$here
-
-distclean-tags:
- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- list='$(DISTFILES)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
- fi; \
- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
- else \
- test -f $(distdir)/$$file \
- || cp -p $$d/$$file $(distdir)/$$file \
- || exit 1; \
- fi; \
- done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LIBRARIES) $(HEADERS)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am
-
-distclean: distclean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
- distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-info: install-info-am
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-ps: install-ps-am
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
- clean-noinstLIBRARIES ctags distclean distclean-compile \
- distclean-generic distclean-tags distdir dvi dvi-am html \
- html-am info info-am install install-am install-data \
- install-data-am install-dvi install-dvi-am install-exec \
- install-exec-am install-html install-html-am install-info \
- install-info-am install-man install-pdf install-pdf-am \
- install-ps install-ps-am install-strip installcheck \
- installcheck-am installdirs maintainer-clean \
- maintainer-clean-generic mostlyclean mostlyclean-compile \
- mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
- uninstall-am
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/lib/crc32.c b/lib/crc32.c
deleted file mode 100644
index e0ef2f6..0000000
--- a/lib/crc32.c
+++ /dev/null
@@ -1,119 +0,0 @@
-/* Copyright (C) 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <stdint.h>
-#include "system.h"
-
-
-/* Table computed with Mark Adler's makecrc.c utility. */
-static const uint32_t crc32_table[256] =
-{
- 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
- 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
- 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
- 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
- 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
- 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
- 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
- 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
- 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
- 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
- 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
- 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
- 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
- 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
- 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
- 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
- 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
- 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
- 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
- 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
- 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
- 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
- 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
- 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
- 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
- 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
- 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
- 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
- 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
- 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
- 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
- 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
- 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
- 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
- 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
- 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
- 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
- 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
- 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
- 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
- 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
- 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
- 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
- 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
- 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
- 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
- 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
- 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
- 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
- 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
- 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
- 0x2d02ef8d
-};
-
-uint32_t
-crc32 (uint32_t crc, unsigned char *buf, size_t len)
-{
- unsigned char *end;
-
- crc = ~crc;
- for (end = buf + len; buf < end; ++buf)
- crc = crc32_table[(crc ^ *buf) & 0xff] ^ (crc >> 8);
- return ~crc;
-}
diff --git a/lib/crc32_file.c b/lib/crc32_file.c
deleted file mode 100644
index 5946df9..0000000
--- a/lib/crc32_file.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/* Compute CRC32 checksum of file contents.
- Copyright (C) 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under an Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) and to distribute linked
- combinations including the two. Non-GPL Code permitted under this
- exception must only link to the code of Red Hat elfutils through those
- well defined interfaces identified in the file named EXCEPTION found in
- the source code files (the "Approved Interfaces"). The files of Non-GPL
- Code may instantiate templates or use macros or inline functions from
- the Approved Interfaces without causing the resulting work to be covered
- by the GNU General Public License. Only Red Hat, Inc. may make changes
- or additions to the list of Approved Interfaces. Red Hat's grant of
- this exception is conditioned upon your not adding any new exceptions.
- If you wish to add a new Approved Interface or exception, please contact
- Red Hat. You must obey the GNU General Public License in all respects
- for all of the Red Hat elfutils code and other code used in conjunction
- with Red Hat elfutils except the Non-GPL Code covered by this exception.
- If you modify this file, you may extend this exception to your version
- of the file, but you are not obligated to do so. If you do not wish to
- provide this exception without modification, you must delete this
- exception statement from your version and license this file solely under
- the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "system.h"
-#include <errno.h>
-#include <unistd.h>
-#include <sys/stat.h>
-#include <sys/mman.h>
-
-int
-crc32_file (int fd, uint32_t *resp)
-{
- unsigned char buffer[1024 * 8];
- uint32_t crc = 0;
- off_t off = 0;
- ssize_t count;
-
- struct stat st;
- if (fstat (fd, &st) == 0)
- {
- /* Try mapping in the file data. */
- size_t mapsize = st.st_size;
- void *mapped = mmap (NULL, mapsize, PROT_READ, MAP_PRIVATE, fd, 0);
- if (mapped == MAP_FAILED && errno == ENOMEM)
- {
- const size_t pagesize = sysconf (_SC_PAGE_SIZE);
- mapsize = ((mapsize / 2) + pagesize - 1) & -pagesize;
- while (mapsize >= pagesize
- && (mapped = mmap (NULL, mapsize, PROT_READ, MAP_PRIVATE,
- fd, 0)) == MAP_FAILED && errno == ENOMEM)
- mapsize /= 2;
- }
- if (mapped != MAP_FAILED)
- {
- do
- {
- if (st.st_size <= (off_t) mapsize)
- {
- *resp = crc32 (crc, mapped, st.st_size);
- munmap (mapped, mapsize);
- return 0;
- }
- crc = crc32 (crc, mapped, mapsize);
- off += mapsize;
- st.st_size -= mapsize;
- } while (mmap (mapped, mapsize, PROT_READ, MAP_FIXED|MAP_PRIVATE,
- fd, off) == mapped);
- munmap (mapped, mapsize);
- }
- }
-
- while ((count = TEMP_FAILURE_RETRY (pread (fd, buffer, sizeof buffer,
- off))) > 0)
- {
- off += count;
- crc = crc32 (crc, buffer, count);
- }
-
- *resp = crc;
-
- return count == 0 ? 0 : -1;
-}
diff --git a/lib/dynamicsizehash.c b/lib/dynamicsizehash.c
deleted file mode 100644
index b645da6..0000000
--- a/lib/dynamicsizehash.c
+++ /dev/null
@@ -1,352 +0,0 @@
-/* Copyright (C) 2000, 2001, 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <assert.h>
-#include <stdlib.h>
-#include <system.h>
-
-/* Before including this file the following macros must be defined:
-
- NAME name of the hash table structure.
- TYPE data type of the hash table entries
- COMPARE comparison function taking two pointers to TYPE objects
-
- The following macros if present select features:
-
- ITERATE iterating over the table entries is possible
- REVERSE iterate in reverse order of insert
- */
-
-
-static size_t
-lookup (htab, hval, val)
- NAME *htab;
- unsigned long int hval;
- TYPE val __attribute__ ((unused));
-{
- /* First hash function: simply take the modul but prevent zero. */
- size_t idx = 1 + hval % htab->size;
-
- if (htab->table[idx].hashval != 0)
- {
- unsigned long int hash;
-
- if (htab->table[idx].hashval == hval
- && COMPARE (htab->table[idx].data, val) == 0)
- return idx;
-
- /* Second hash function as suggested in [Knuth]. */
- hash = 1 + hval % (htab->size - 2);
-
- do
- {
- if (idx <= hash)
- idx = htab->size + idx - hash;
- else
- idx -= hash;
-
- /* If entry is found use it. */
- if (htab->table[idx].hashval == hval
- && COMPARE (htab->table[idx].data, val) == 0)
- return idx;
- }
- while (htab->table[idx].hashval);
- }
- return idx;
-}
-
-
-static void
-insert_entry_2 (NAME *htab, unsigned long int hval, size_t idx, TYPE data)
-{
-#ifdef ITERATE
- if (htab->table[idx].hashval == 0)
- {
-# ifdef REVERSE
- htab->table[idx].next = htab->first;
- htab->first = &htab->table[idx];
-# else
- /* Add the new value to the list. */
- if (htab->first == NULL)
- htab->first = htab->table[idx].next = &htab->table[idx];
- else
- {
- htab->table[idx].next = htab->first->next;
- htab->first = htab->first->next = &htab->table[idx];
- }
-# endif
- }
-#endif
-
- htab->table[idx].hashval = hval;
- htab->table[idx].data = data;
-
- ++htab->filled;
- if (100 * htab->filled > 90 * htab->size)
- {
- /* Table is filled more than 90%. Resize the table. */
-#ifdef ITERATE
- __typeof__ (htab->first) first;
-# ifndef REVERSE
- __typeof__ (htab->first) runp;
-# endif
-#else
- unsigned long int old_size = htab->size;
-#endif
-#define _TABLE(name) \
- name##_ent *table = htab->table
-#define TABLE(name) _TABLE (name)
- TABLE(NAME);
-
- htab->size = next_prime (htab->size * 2);
- htab->filled = 0;
-#ifdef ITERATE
- first = htab->first;
- htab->first = NULL;
-#endif
- htab->table = calloc ((1 + htab->size), sizeof (htab->table[0]));
- if (htab->table == NULL)
- {
- /* We cannot enlarge the table. Live with what we got. This
- might lead to an infinite loop at some point, though. */
- htab->table = table;
- return;
- }
-
- /* Add the old entries to the new table. When iteration is
- supported we maintain the order. */
-#ifdef ITERATE
-# ifdef REVERSE
- while (first != NULL)
- {
- insert_entry_2 (htab, first->hashval,
- lookup (htab, first->hashval, first->data),
- first->data);
-
- first = first->next;
- }
-# else
- assert (first != NULL);
- runp = first = first->next;
- do
- insert_entry_2 (htab, runp->hashval,
- lookup (htab, runp->hashval, runp->data), runp->data);
- while ((runp = runp->next) != first);
-# endif
-#else
- for (idx = 1; idx <= old_size; ++idx)
- if (table[idx].hashval != 0)
- insert_entry_2 (htab, table[idx].hashval,
- lookup (htab, table[idx].hashval, table[idx].data),
- table[idx].data);
-#endif
-
- free (table);
- }
-}
-
-
-int
-#define INIT(name) _INIT (name)
-#define _INIT(name) \
- name##_init
-INIT(NAME) (htab, init_size)
- NAME *htab;
- unsigned long int init_size;
-{
- /* We need the size to be a prime. */
- init_size = next_prime (init_size);
-
- /* Initialize the data structure. */
- htab->size = init_size;
- htab->filled = 0;
-#ifdef ITERATE
- htab->first = NULL;
-#endif
- htab->table = (void *) calloc ((init_size + 1), sizeof (htab->table[0]));
- if (htab->table == NULL)
- return -1;
-
- return 0;
-}
-
-
-int
-#define FREE(name) _FREE (name)
-#define _FREE(name) \
- name##_free
-FREE(NAME) (htab)
- NAME *htab;
-{
- free (htab->table);
- return 0;
-}
-
-
-int
-#define INSERT(name) _INSERT (name)
-#define _INSERT(name) \
- name##_insert
-INSERT(NAME) (htab, hval, data)
- NAME *htab;
- unsigned long int hval;
- TYPE data;
-{
- size_t idx;
-
- /* Make the hash value nonzero. */
- hval = hval ?: 1;
-
- idx = lookup (htab, hval, data);
-
- if (htab->table[idx].hashval != 0)
- /* We don't want to overwrite the old value. */
- return -1;
-
- /* An empty bucket has been found. */
- insert_entry_2 (htab, hval, idx, data);
- return 0;
-}
-
-
-#ifdef OVERWRITE
-int
-#define INSERT(name) _INSERT (name)
-#define _INSERT(name) \
- name##_overwrite
-INSERT(NAME) (htab, hval, data)
- NAME *htab;
- unsigned long int hval;
- TYPE data;
-{
- size_t idx;
-
- /* Make the hash value nonzero. */
- hval = hval ?: 1;
-
- idx = lookup (htab, hval, data);
-
- /* The correct bucket has been found. */
- insert_entry_2 (htab, hval, idx, data);
- return 0;
-}
-#endif
-
-
-TYPE
-#define FIND(name) _FIND (name)
-#define _FIND(name) \
- name##_find
-FIND(NAME) (htab, hval, val)
- NAME *htab;
- unsigned long int hval;
- TYPE val;
-{
- size_t idx;
-
- /* Make the hash value nonzero. */
- hval = hval ?: 1;
-
- idx = lookup (htab, hval, val);
-
- if (htab->table[idx].hashval == 0)
- return NULL;
-
- return htab->table[idx].data;
-}
-
-
-#ifdef ITERATE
-# define ITERATEFCT(name) _ITERATEFCT (name)
-# define _ITERATEFCT(name) \
- name##_iterate
-TYPE
-ITERATEFCT(NAME) (htab, ptr)
- NAME *htab;
- void **ptr;
-{
- void *p = *ptr;
-
-# define TYPENAME(name) _TYPENAME (name)
-# define _TYPENAME(name) name##_ent
-
-# ifdef REVERSE
- if (p == NULL)
- p = htab->first;
- else
- p = ((TYPENAME(NAME) *) p)->next;
-
- if (p == NULL)
- {
- *ptr = NULL;
- return NULL;
- }
-# else
- if (p == NULL)
- {
- if (htab->first == NULL)
- return NULL;
- p = htab->first->next;
- }
- else
- {
- if (p == htab->first)
- return NULL;
-
- p = ((TYPENAME(NAME) *) p)->next;
- }
-# endif
-
- /* Prepare the next element. If possible this will pull the data
- into the cache, for reading. */
- __builtin_prefetch (((TYPENAME(NAME) *) p)->next, 0, 2);
-
- return ((TYPENAME(NAME) *) (*ptr = p))->data;
-}
-#endif
diff --git a/lib/dynamicsizehash.h b/lib/dynamicsizehash.h
deleted file mode 100644
index 7cbb169..0000000
--- a/lib/dynamicsizehash.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/* Copyright (C) 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <stddef.h>
-
-/* Before including this file the following macros must be defined:
-
- NAME name of the hash table structure.
- TYPE data type of the hash table entries
-
- The following macros if present select features:
-
- ITERATE iterating over the table entries is possible
- */
-
-
-/* Optionally include an entry pointing to the first used entry. */
-#ifdef ITERATE
-# define FIRST(name) name##_ent *first;
-# define NEXT(name) struct name##_ent *next;
-#else
-# define FIRST(name)
-# define NEXT(name)
-#endif
-
-
-/* Defined separately. */
-extern size_t next_prime (size_t seed);
-
-
-/* Table entry type. */
-#define _DYNHASHENTTYPE(name) \
- typedef struct name##_ent \
- { \
- unsigned long int hashval; \
- TYPE data; \
- NEXT (name) \
- } name##_ent
-#define DYNHASHENTTYPE(name) _DYNHASHENTTYPE (name)
-DYNHASHENTTYPE (NAME);
-
-
-/* Type of the dynamic hash table data structure. */
-#define _DYNHASHTYPE(name) \
-typedef struct \
-{ \
- unsigned long int size; \
- unsigned long int filled; \
- name##_ent *table; \
- FIRST (name) \
-} name
-#define DYNHASHTYPE(name) _DYNHASHTYPE (name)
-DYNHASHTYPE (NAME);
-
-
-
-#define _FUNCTIONS(name) \
-/* Initialize the hash table. */ \
-extern int name##_init (name *htab, unsigned long int init_size); \
- \
-/* Free resources allocated for hash table. */ \
-extern int name##_free (name *htab); \
- \
-/* Insert new entry. */ \
-extern int name##_insert (name *htab, unsigned long int hval, TYPE data); \
- \
-/* Insert new entry, possibly overwrite old entry. */ \
-extern int name##_overwrite (name *htab, unsigned long int hval, TYPE data); \
- \
-/* Find entry in hash table. */ \
-extern TYPE name##_find (name *htab, unsigned long int hval, TYPE val);
-#define FUNCTIONS(name) _FUNCTIONS (name)
-FUNCTIONS (NAME)
-
-
-#ifdef ITERATE
-# define _XFUNCTIONS(name) \
-/* Get next element in table. */ \
-extern TYPE name##_iterate (name *htab, void **ptr);
-# define XFUNCTIONS(name) _XFUNCTIONS (name)
-XFUNCTIONS (NAME)
-#endif
-
-#ifndef NO_UNDEF
-# undef DYNHASHENTTYPE
-# undef DYNHASHTYPE
-# undef FUNCTIONS
-# undef _FUNCTIONS
-# undef XFUNCTIONS
-# undef _XFUNCTIONS
-# undef NAME
-# undef TYPE
-# undef ITERATE
-# undef COMPARE
-# undef FIRST
-# undef NEXT
-#endif
diff --git a/lib/eu-config.h b/lib/eu-config.h
deleted file mode 100644
index c41cbb0..0000000
--- a/lib/eu-config.h
+++ /dev/null
@@ -1,198 +0,0 @@
-/* Configuration definitions.
- Copyright (C) 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under an Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) and to distribute linked
- combinations including the two. Non-GPL Code permitted under this
- exception must only link to the code of Red Hat elfutils through those
- well defined interfaces identified in the file named EXCEPTION found in
- the source code files (the "Approved Interfaces"). The files of Non-GPL
- Code may instantiate templates or use macros or inline functions from
- the Approved Interfaces without causing the resulting work to be covered
- by the GNU General Public License. Only Red Hat, Inc. may make changes
- or additions to the list of Approved Interfaces. Red Hat's grant of
- this exception is conditioned upon your not adding any new exceptions.
- If you wish to add a new Approved Interface or exception, please contact
- Red Hat. You must obey the GNU General Public License in all respects
- for all of the Red Hat elfutils code and other code used in conjunction
- with Red Hat elfutils except the Non-GPL Code covered by this exception.
- If you modify this file, you may extend this exception to your version
- of the file, but you are not obligated to do so. If you do not wish to
- provide this exception without modification, you must delete this
- exception statement from your version and license this file solely under
- the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef USE_TLS
-# include <pthread.h>
-# include <assert.h>
-# define tls_key_t __thread void *
-# define key_create(keyp, freefct) (1)
-# define getspecific(key) key
-# define setspecific(key,val) key = val
-# define once_define(class,name) class struct { } name
-# define once_execute(name,fct) ((void) &name, (void) (fct))
-# define rwlock_define(class,name) class pthread_rwlock_t name
-# define RWLOCK_CALL(call) \
- ({ int _err = pthread_rwlock_ ## call; assert_perror (_err); })
-# define rwlock_init(lock) RWLOCK_CALL (init (&lock, NULL))
-# define rwlock_fini(lock) RWLOCK_CALL (destroy (&lock))
-# define rwlock_rdlock(lock) RWLOCK_CALL (rdlock (&lock))
-# define rwlock_wrlock(lock) RWLOCK_CALL (wrlock (&lock))
-# define rwlock_unlock(lock) RWLOCK_CALL (unlock (&lock))
-#else
-/* Eventually we will allow multi-threaded applications to use the
- libraries. Therefore we will add the necessary locking although
- the macros used expand to nothing for now. */
-# define lock_lock(lock) ((void) (lock))
-# define rwlock_define(class,name) class int name
-# define rwlock_init(lock) ((void) (lock))
-# define rwlock_fini(lock) ((void) (lock))
-# define rwlock_rdlock(lock) ((void) (lock))
-# define rwlock_wrlock(lock) ((void) (lock))
-# define rwlock_unlock(lock) ((void) (lock))
-# define tls_key_t void *
-# define key_create(keyp, freefct) (1)
-# define getspecific(key) key
-# define setspecific(key,val) key = val
-# define once_define(class,name) class int name
-# define once_execute(name,fct) \
- do { \
- if (name == 0) \
- fct (); \
- name = 1; \
- } while (0)
-#endif /* USE_TLS */
-
-/* gettext helper macro. */
-#define N_(Str) Str
-
-/* Compiler-specific definitions. */
-#define strong_alias(name, aliasname) \
- extern __typeof (name) aliasname __attribute__ ((alias (#name)));
-
-#ifdef __i386__
-# define internal_function __attribute__ ((regparm (3), stdcall))
-#else
-# define internal_function /* nothing */
-#endif
-
-#define internal_strong_alias(name, aliasname) \
- extern __typeof (name) aliasname __attribute__ ((alias (#name))) internal_function;
-
-#define attribute_hidden \
- __attribute__ ((visibility ("hidden")))
-
-/* Define ALLOW_UNALIGNED if the architecture allows operations on
- unaligned memory locations. */
-#if defined __i386__ || defined __x86_64__
-# define ALLOW_UNALIGNED 1
-#else
-# define ALLOW_UNALIGNED 0
-#endif
-
-#if DEBUGPRED
-# ifdef __x86_64__
-asm (".section predict_data, \"aw\"; .previous\n"
- ".section predict_line, \"a\"; .previous\n"
- ".section predict_file, \"a\"; .previous");
-# ifndef PIC
-# define debugpred__(e, E) \
- ({ long int _e = !!(e); \
- asm volatile (".pushsection predict_data; ..predictcnt%=: .quad 0; .quad 0\n" \
- ".section predict_line; .quad %c1\n" \
- ".section predict_file; .quad %c2; .popsection\n" \
- "addq $1,..predictcnt%=(,%0,8)" \
- : : "r" (_e == E), "i" (__LINE__), "i" (__FILE__)); \
- __builtin_expect (_e, E); \
- })
-# endif
-# elif defined __i386__
-asm (".section predict_data, \"aw\"; .previous\n"
- ".section predict_line, \"a\"; .previous\n"
- ".section predict_file, \"a\"; .previous");
-# ifndef PIC
-# define debugpred__(e, E) \
- ({ long int _e = !!(e); \
- asm volatile (".pushsection predict_data; ..predictcnt%=: .long 0; .long 0\n" \
- ".section predict_line; .long %c1\n" \
- ".section predict_file; .long %c2; .popsection\n" \
- "incl ..predictcnt%=(,%0,8)" \
- : : "r" (_e == E), "i" (__LINE__), "i" (__FILE__)); \
- __builtin_expect (_e, E); \
- })
-# endif
-# endif
-# ifdef debugpred__
-# define unlikely(e) debugpred__ (e,0)
-# define likely(e) debugpred__ (e,1)
-# endif
-#endif
-#ifndef likely
-# define unlikely(expr) __builtin_expect (!!(expr), 0)
-# define likely(expr) __builtin_expect (!!(expr), 1)
-#endif
-
-#define obstack_calloc(ob, size) \
- ({ size_t _s = (size); memset (obstack_alloc (ob, _s), '\0', _s); })
-#define obstack_strdup(ob, str) \
- ({ const char *_s = (str); obstack_copy0 (ob, _s, strlen (_s)); })
-#define obstack_strndup(ob, str, n) \
- ({ const char *_s = (str); obstack_copy0 (ob, _s, strnlen (_s, n)); })
-
-#if __STDC_VERSION__ >= 199901L
-# define flexarr_size /* empty */
-#else
-# define flexarr_size 0
-#endif
-
-/* Calling conventions. */
-#ifdef __i386__
-# define CALLING_CONVENTION regparm (3), stdcall
-# define AND_CALLING_CONVENTION , regparm (3), stdcall
-#else
-# define CALLING_CONVENTION
-# define AND_CALLING_CONVENTION
-#endif
-
-/* Avoid PLT entries. */
-#ifdef PIC
-# define INTUSE(name) _INTUSE(name)
-# define _INTUSE(name) __##name##_internal
-# define INTDEF(name) _INTDEF(name)
-# define _INTDEF(name) \
- extern __typeof__ (name) __##name##_internal __attribute__ ((alias (#name)));
-# define INTDECL(name) _INTDECL(name)
-# define _INTDECL(name) \
- extern __typeof__ (name) __##name##_internal attribute_hidden;
-#else
-# define INTUSE(name) name
-# define INTDEF(name) /* empty */
-# define INTDECL(name) /* empty */
-#endif
-
-/* This macro is used by the tests conditionalize for standalone building. */
-#define ELFUTILS_HEADER(name) <lib##name.h>
diff --git a/lib/fixedsizehash.h b/lib/fixedsizehash.h
deleted file mode 100644
index a686051..0000000
--- a/lib/fixedsizehash.h
+++ /dev/null
@@ -1,288 +0,0 @@
-/* Fixed size hash table with internal linking.
- Copyright (C) 2000, 2001, 2002, 2004, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <errno.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/cdefs.h>
-#include <sys/param.h>
-
-#include <system.h>
-
-#define CONCAT(t1,t2) __CONCAT (t1,t2)
-
-/* Before including this file the following macros must be defined:
-
- TYPE data type of the hash table entries
- HASHFCT name of the hashing function to use
- HASHTYPE type used for the hashing value
- COMPARE comparison function taking two pointers to TYPE objects
- CLASS can be defined to `static' to avoid exporting the functions
- PREFIX prefix to be used for function and data type names
- STORE_POINTER if defined the table stores a pointer and not an element
- of type TYPE
- INSERT_HASH if defined alternate insert function which takes a hash
- value is defined
- NO_FINI_FCT if defined the fini function is not defined
-*/
-
-
-/* Defined separately. */
-extern size_t next_prime (size_t seed);
-
-
-/* Set default values. */
-#ifndef HASHTYPE
-# define HASHTYPE size_t
-#endif
-
-#ifndef CLASS
-# define CLASS
-#endif
-
-#ifndef PREFIX
-# define PREFIX
-#endif
-
-
-/* The data structure. */
-struct CONCAT(PREFIX,fshash)
-{
- size_t nslots;
- struct CONCAT(PREFIX,fshashent)
- {
- HASHTYPE hval;
-#ifdef STORE_POINTER
-# define ENTRYP(el) (el).entry
- TYPE *entry;
-#else
-# define ENTRYP(el) &(el).entry
- TYPE entry;
-#endif
- } table[0];
-};
-
-
-/* Constructor for the hashing table. */
-CLASS struct CONCAT(PREFIX,fshash) *
-CONCAT(PREFIX,fshash_init) (size_t nelems)
-{
- struct CONCAT(PREFIX,fshash) *result;
- /* We choose a size for the hashing table 150% over the number of
- entries. This will guarantee short medium search lengths. */
- const size_t max_size_t = ~((size_t) 0);
-
- if (nelems >= (max_size_t / 3) * 2)
- {
- errno = EINVAL;
- return NULL;
- }
-
- /* Adjust the size to be used for the hashing table. */
- nelems = next_prime (MAX ((nelems * 3) / 2, 10));
-
- /* Allocate the data structure for the result. */
- result = (struct CONCAT(PREFIX,fshash) *)
- xcalloc (sizeof (struct CONCAT(PREFIX,fshash))
- + (nelems + 1) * sizeof (struct CONCAT(PREFIX,fshashent)), 1);
- if (result == NULL)
- return NULL;
-
- result->nslots = nelems;
-
- return result;
-}
-
-
-#ifndef NO_FINI_FCT
-CLASS void
-CONCAT(PREFIX,fshash_fini) (struct CONCAT(PREFIX,fshash) *htab)
-{
- free (htab);
-}
-#endif
-
-
-static struct CONCAT(PREFIX,fshashent) *
-CONCAT(PREFIX,fshash_lookup) (struct CONCAT(PREFIX,fshash) *htab,
- HASHTYPE hval, TYPE *data)
-{
- size_t idx = 1 + hval % htab->nslots;
-
- if (htab->table[idx].hval != 0)
- {
- HASHTYPE hash;
-
- /* See whether this is the same entry. */
- if (htab->table[idx].hval == hval
- && COMPARE (data, ENTRYP (htab->table[idx])) == 0)
- return &htab->table[idx];
-
- /* Second hash function as suggested in [Knuth]. */
- hash = 1 + hval % (htab->nslots - 2);
-
- do
- {
- if (idx <= hash)
- idx = htab->nslots + idx - hash;
- else
- idx -= hash;
-
- if (htab->table[idx].hval == hval
- && COMPARE (data, ENTRYP(htab->table[idx])) == 0)
- return &htab->table[idx];
- }
- while (htab->table[idx].hval != 0);
- }
-
- return &htab->table[idx];
-}
-
-
-CLASS int
-__attribute__ ((unused))
-CONCAT(PREFIX,fshash_insert) (struct CONCAT(PREFIX,fshash) *htab,
- const char *str,
- size_t len __attribute__ ((unused)), TYPE *data)
-{
- HASHTYPE hval = HASHFCT (str, len ?: strlen (str));
- struct CONCAT(PREFIX,fshashent) *slot;
-
- slot = CONCAT(PREFIX,fshash_lookup) (htab, hval, data);
- if (slot->hval != 0)
- /* We don't want to overwrite the old value. */
- return -1;
-
- slot->hval = hval;
-#ifdef STORE_POINTER
- slot->entry = data;
-#else
- slot->entry = *data;
-#endif
-
- return 0;
-}
-
-
-#ifdef INSERT_HASH
-CLASS int
-__attribute__ ((unused))
-CONCAT(PREFIX,fshash_insert_hash) (struct CONCAT(PREFIX,fshash) *htab,
- HASHTYPE hval, TYPE *data)
-{
- struct CONCAT(PREFIX,fshashent) *slot;
-
- slot = CONCAT(PREFIX,fshash_lookup) (htab, hval, data);
- if (slot->hval != 0)
- /* We don't want to overwrite the old value. */
- return -1;
-
- slot->hval = hval;
-#ifdef STORE_POINTER
- slot->entry = data;
-#else
- slot->entry = *data;
-#endif
-
- return 0;
-}
-#endif
-
-
-CLASS int
-__attribute__ ((unused))
-CONCAT(PREFIX,fshash_overwrite) (struct CONCAT(PREFIX,fshash) *htab,
- const char *str,
- size_t len __attribute__ ((unused)),
- TYPE *data)
-{
- HASHTYPE hval = HASHFCT (str, len ?: strlen (str));
- struct CONCAT(PREFIX,fshashent) *slot;
-
- slot = CONCAT(PREFIX,fshash_lookup) (htab, hval, data);
- slot->hval = hval;
-#ifdef STORE_POINTER
- slot->entry = data;
-#else
- slot->entry = *data;
-#endif
-
- return 0;
-}
-
-
-CLASS const TYPE *
-CONCAT(PREFIX,fshash_find) (const struct CONCAT(PREFIX,fshash) *htab,
- const char *str,
- size_t len __attribute__ ((unused)), TYPE *data)
-{
- HASHTYPE hval = HASHFCT (str, len ?: strlen (str));
- struct CONCAT(PREFIX,fshashent) *slot;
-
- slot = CONCAT(PREFIX,fshash_lookup) ((struct CONCAT(PREFIX,fshash) *) htab,
- hval, data);
- if (slot->hval == 0)
- /* Not found. */
- return NULL;
-
- return ENTRYP(*slot);
-}
-
-
-/* Unset the macros we expect. */
-#undef TYPE
-#undef HASHFCT
-#undef HASHTYPE
-#undef COMPARE
-#undef CLASS
-#undef PREFIX
-#undef INSERT_HASH
-#undef STORE_POINTER
-#undef NO_FINI_FCT
diff --git a/lib/list.h b/lib/list.h
deleted file mode 100644
index c712c1f..0000000
--- a/lib/list.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/* Copyright (C) 2001, 2002, 2003 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifndef LIST_H
-#define LIST_H 1
-
-/* Add element to the end of a circular, double-linked list. */
-#define CDBL_LIST_ADD_REAR(first, newp) \
- do { \
- __typeof (newp) _newp = (newp); \
- assert (_newp->next == NULL); \
- assert (_newp->previous == NULL); \
- if (unlikely ((first) == NULL)) \
- (first) = _newp->next = _newp->previous = _newp; \
- else \
- { \
- _newp->next = (first); \
- _newp->previous = (first)->previous; \
- _newp->previous->next = _newp->next->previous = _newp; \
- } \
- } while (0)
-
-/* Remove element from circular, double-linked list. */
-#define CDBL_LIST_DEL(first, elem) \
- do { \
- __typeof (elem) _elem = (elem); \
- /* Check whether the element is indeed on the list. */ \
- assert (first != NULL && _elem != NULL \
- && (first != elem \
- || ({ __typeof (elem) _runp = first->next; \
- while (_runp != first) \
- if (_runp == _elem) \
- break; \
- else \
- _runp = _runp->next; \
- _runp == _elem; }))); \
- if (unlikely (_elem->next == _elem)) \
- first = NULL; \
- else \
- { \
- _elem->next->previous = _elem->previous; \
- _elem->previous->next = _elem->next; \
- if (unlikely (first == _elem)) \
- first = _elem->next; \
- } \
- assert ((_elem->next = _elem->previous = NULL, 1)); \
- } while (0)
-
-
-/* Add element to the front of a single-linked list. */
-#define SNGL_LIST_PUSH(first, newp) \
- do { \
- __typeof (newp) _newp = (newp); \
- assert (_newp->next == NULL); \
- _newp->next = first; \
- first = _newp; \
- } while (0)
-
-
-/* Add element to the rear of a circular single-linked list. */
-#define CSNGL_LIST_ADD_REAR(first, newp) \
- do { \
- __typeof (newp) _newp = (newp); \
- assert (_newp->next == NULL); \
- if (unlikely ((first) == NULL)) \
- (first) = _newp->next = _newp; \
- else \
- { \
- _newp->next = (first)->next; \
- (first) = (first)->next = _newp; \
- } \
- } while (0)
-
-
-#endif /* list.h */
diff --git a/lib/md5.c b/lib/md5.c
deleted file mode 100644
index 0770561..0000000
--- a/lib/md5.c
+++ /dev/null
@@ -1,446 +0,0 @@
-/* Functions to compute MD5 message digest of files or memory blocks.
- according to the definition of MD5 in RFC 1321 from April 1992.
- Copyright (C) 1995,1996,1997,1999,2000,2001,2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1995.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <endian.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-
-#include "md5.h"
-
-#if __BYTE_ORDER == __BIG_ENDIAN
-# define SWAP(n) \
- (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24))
-#else
-# define SWAP(n) (n)
-#endif
-
-
-/* This array contains the bytes used to pad the buffer to the next
- 64-byte boundary. (RFC 1321, 3.1: Step 1) */
-static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ... */ };
-
-
-/* Initialize structure containing state of computation.
- (RFC 1321, 3.3: Step 3) */
-void
-md5_init_ctx (ctx)
- struct md5_ctx *ctx;
-{
- ctx->A = 0x67452301;
- ctx->B = 0xefcdab89;
- ctx->C = 0x98badcfe;
- ctx->D = 0x10325476;
-
- ctx->total[0] = ctx->total[1] = 0;
- ctx->buflen = 0;
-}
-
-/* Put result from CTX in first 16 bytes following RESBUF. The result
- must be in little endian byte order.
-
- IMPORTANT: On some systems it is required that RESBUF is correctly
- aligned for a 32 bits value. */
-void *
-md5_read_ctx (ctx, resbuf)
- const struct md5_ctx *ctx;
- void *resbuf;
-{
- ((md5_uint32 *) resbuf)[0] = SWAP (ctx->A);
- ((md5_uint32 *) resbuf)[1] = SWAP (ctx->B);
- ((md5_uint32 *) resbuf)[2] = SWAP (ctx->C);
- ((md5_uint32 *) resbuf)[3] = SWAP (ctx->D);
-
- return resbuf;
-}
-
-/* Process the remaining bytes in the internal buffer and the usual
- prolog according to the standard and write the result to RESBUF.
-
- IMPORTANT: On some systems it is required that RESBUF is correctly
- aligned for a 32 bits value. */
-void *
-md5_finish_ctx (ctx, resbuf)
- struct md5_ctx *ctx;
- void *resbuf;
-{
- /* Take yet unprocessed bytes into account. */
- md5_uint32 bytes = ctx->buflen;
- size_t pad;
-
- /* Now count remaining bytes. */
- ctx->total[0] += bytes;
- if (ctx->total[0] < bytes)
- ++ctx->total[1];
-
- pad = bytes >= 56 ? 64 + 56 - bytes : 56 - bytes;
- memcpy (&ctx->buffer[bytes], fillbuf, pad);
-
- /* Put the 64-bit file length in *bits* at the end of the buffer. */
- *(md5_uint32 *) &ctx->buffer[bytes + pad] = SWAP (ctx->total[0] << 3);
- *(md5_uint32 *) &ctx->buffer[bytes + pad + 4] = SWAP ((ctx->total[1] << 3) |
- (ctx->total[0] >> 29));
-
- /* Process last bytes. */
- md5_process_block (ctx->buffer, bytes + pad + 8, ctx);
-
- return md5_read_ctx (ctx, resbuf);
-}
-
-
-#ifdef NEED_MD5_STREAM
-/* Compute MD5 message digest for bytes read from STREAM. The
- resulting message digest number will be written into the 16 bytes
- beginning at RESBLOCK. */
-int
-md5_stream (stream, resblock)
- FILE *stream;
- void *resblock;
-{
- /* Important: BLOCKSIZE must be a multiple of 64. */
-#define BLOCKSIZE 4096
- struct md5_ctx ctx;
- char buffer[BLOCKSIZE + 72];
- size_t sum;
-
- /* Initialize the computation context. */
- md5_init_ctx (&ctx);
-
- /* Iterate over full file contents. */
- while (1)
- {
- /* We read the file in blocks of BLOCKSIZE bytes. One call of the
- computation function processes the whole buffer so that with the
- next round of the loop another block can be read. */
- size_t n;
- sum = 0;
-
- /* Read block. Take care for partial reads. */
- do
- {
- n = fread (buffer + sum, 1, BLOCKSIZE - sum, stream);
-
- sum += n;
- }
- while (sum < BLOCKSIZE && n != 0);
- if (n == 0 && ferror (stream))
- return 1;
-
- /* If end of file is reached, end the loop. */
- if (n == 0)
- break;
-
- /* Process buffer with BLOCKSIZE bytes. Note that
- BLOCKSIZE % 64 == 0
- */
- md5_process_block (buffer, BLOCKSIZE, &ctx);
- }
-
- /* Add the last bytes if necessary. */
- if (sum > 0)
- md5_process_bytes (buffer, sum, &ctx);
-
- /* Construct result in desired memory. */
- md5_finish_ctx (&ctx, resblock);
- return 0;
-}
-#endif
-
-
-#ifdef NEED_MD5_BUFFER
-/* Compute MD5 message digest for LEN bytes beginning at BUFFER. The
- result is always in little endian byte order, so that a byte-wise
- output yields to the wanted ASCII representation of the message
- digest. */
-void *
-md5_buffer (buffer, len, resblock)
- const char *buffer;
- size_t len;
- void *resblock;
-{
- struct md5_ctx ctx;
-
- /* Initialize the computation context. */
- md5_init_ctx (&ctx);
-
- /* Process whole buffer but last len % 64 bytes. */
- md5_process_bytes (buffer, len, &ctx);
-
- /* Put result in desired memory area. */
- return md5_finish_ctx (&ctx, resblock);
-}
-#endif
-
-
-void
-md5_process_bytes (buffer, len, ctx)
- const void *buffer;
- size_t len;
- struct md5_ctx *ctx;
-{
- /* When we already have some bits in our internal buffer concatenate
- both inputs first. */
- if (ctx->buflen != 0)
- {
- size_t left_over = ctx->buflen;
- size_t add = 128 - left_over > len ? len : 128 - left_over;
-
- memcpy (&ctx->buffer[left_over], buffer, add);
- ctx->buflen += add;
-
- if (ctx->buflen > 64)
- {
- md5_process_block (ctx->buffer, ctx->buflen & ~63, ctx);
-
- ctx->buflen &= 63;
- /* The regions in the following copy operation cannot overlap. */
- memcpy (ctx->buffer, &ctx->buffer[(left_over + add) & ~63],
- ctx->buflen);
- }
-
- buffer = (const char *) buffer + add;
- len -= add;
- }
-
- /* Process available complete blocks. */
- if (len >= 64)
- {
-#if !_STRING_ARCH_unaligned
-/* To check alignment gcc has an appropriate operator. Other
- compilers don't. */
-# if __GNUC__ >= 2
-# define UNALIGNED_P(p) (((md5_uintptr) p) % __alignof__ (md5_uint32) != 0)
-# else
-# define UNALIGNED_P(p) (((md5_uintptr) p) % sizeof (md5_uint32) != 0)
-# endif
- if (UNALIGNED_P (buffer))
- while (len > 64)
- {
- md5_process_block (memcpy (ctx->buffer, buffer, 64), 64, ctx);
- buffer = (const char *) buffer + 64;
- len -= 64;
- }
- else
-#endif
- {
- md5_process_block (buffer, len & ~63, ctx);
- buffer = (const char *) buffer + (len & ~63);
- len &= 63;
- }
- }
-
- /* Move remaining bytes in internal buffer. */
- if (len > 0)
- {
- size_t left_over = ctx->buflen;
-
- memcpy (&ctx->buffer[left_over], buffer, len);
- left_over += len;
- if (left_over >= 64)
- {
- md5_process_block (ctx->buffer, 64, ctx);
- left_over -= 64;
- memcpy (ctx->buffer, &ctx->buffer[64], left_over);
- }
- ctx->buflen = left_over;
- }
-}
-
-
-/* These are the four functions used in the four steps of the MD5 algorithm
- and defined in the RFC 1321. The first function is a little bit optimized
- (as found in Colin Plumbs public domain implementation). */
-/* #define FF(b, c, d) ((b & c) | (~b & d)) */
-#define FF(b, c, d) (d ^ (b & (c ^ d)))
-#define FG(b, c, d) FF (d, b, c)
-#define FH(b, c, d) (b ^ c ^ d)
-#define FI(b, c, d) (c ^ (b | ~d))
-
-/* Process LEN bytes of BUFFER, accumulating context into CTX.
- It is assumed that LEN % 64 == 0. */
-
-void
-md5_process_block (buffer, len, ctx)
- const void *buffer;
- size_t len;
- struct md5_ctx *ctx;
-{
- md5_uint32 correct_words[16];
- const md5_uint32 *words = buffer;
- size_t nwords = len / sizeof (md5_uint32);
- const md5_uint32 *endp = words + nwords;
- md5_uint32 A = ctx->A;
- md5_uint32 B = ctx->B;
- md5_uint32 C = ctx->C;
- md5_uint32 D = ctx->D;
-
- /* First increment the byte count. RFC 1321 specifies the possible
- length of the file up to 2^64 bits. Here we only compute the
- number of bytes. Do a double word increment. */
- ctx->total[0] += len;
- if (ctx->total[0] < len)
- ++ctx->total[1];
-
- /* Process all bytes in the buffer with 64 bytes in each round of
- the loop. */
- while (words < endp)
- {
- md5_uint32 *cwp = correct_words;
- md5_uint32 A_save = A;
- md5_uint32 B_save = B;
- md5_uint32 C_save = C;
- md5_uint32 D_save = D;
-
- /* First round: using the given function, the context and a constant
- the next context is computed. Because the algorithms processing
- unit is a 32-bit word and it is determined to work on words in
- little endian byte order we perhaps have to change the byte order
- before the computation. To reduce the work for the next steps
- we store the swapped words in the array CORRECT_WORDS. */
-
-#define OP(a, b, c, d, s, T) \
- do \
- { \
- a += FF (b, c, d) + (*cwp++ = SWAP (*words)) + T; \
- ++words; \
- CYCLIC (a, s); \
- a += b; \
- } \
- while (0)
-
- /* It is unfortunate that C does not provide an operator for
- cyclic rotation. Hope the C compiler is smart enough. */
-#define CYCLIC(w, s) (w = (w << s) | (w >> (32 - s)))
-
- /* Before we start, one word to the strange constants.
- They are defined in RFC 1321 as
-
- T[i] = (int) (4294967296.0 * fabs (sin (i))), i=1..64
- */
-
- /* Round 1. */
- OP (A, B, C, D, 7, 0xd76aa478);
- OP (D, A, B, C, 12, 0xe8c7b756);
- OP (C, D, A, B, 17, 0x242070db);
- OP (B, C, D, A, 22, 0xc1bdceee);
- OP (A, B, C, D, 7, 0xf57c0faf);
- OP (D, A, B, C, 12, 0x4787c62a);
- OP (C, D, A, B, 17, 0xa8304613);
- OP (B, C, D, A, 22, 0xfd469501);
- OP (A, B, C, D, 7, 0x698098d8);
- OP (D, A, B, C, 12, 0x8b44f7af);
- OP (C, D, A, B, 17, 0xffff5bb1);
- OP (B, C, D, A, 22, 0x895cd7be);
- OP (A, B, C, D, 7, 0x6b901122);
- OP (D, A, B, C, 12, 0xfd987193);
- OP (C, D, A, B, 17, 0xa679438e);
- OP (B, C, D, A, 22, 0x49b40821);
-
- /* For the second to fourth round we have the possibly swapped words
- in CORRECT_WORDS. Redefine the macro to take an additional first
- argument specifying the function to use. */
-#undef OP
-#define OP(f, a, b, c, d, k, s, T) \
- do \
- { \
- a += f (b, c, d) + correct_words[k] + T; \
- CYCLIC (a, s); \
- a += b; \
- } \
- while (0)
-
- /* Round 2. */
- OP (FG, A, B, C, D, 1, 5, 0xf61e2562);
- OP (FG, D, A, B, C, 6, 9, 0xc040b340);
- OP (FG, C, D, A, B, 11, 14, 0x265e5a51);
- OP (FG, B, C, D, A, 0, 20, 0xe9b6c7aa);
- OP (FG, A, B, C, D, 5, 5, 0xd62f105d);
- OP (FG, D, A, B, C, 10, 9, 0x02441453);
- OP (FG, C, D, A, B, 15, 14, 0xd8a1e681);
- OP (FG, B, C, D, A, 4, 20, 0xe7d3fbc8);
- OP (FG, A, B, C, D, 9, 5, 0x21e1cde6);
- OP (FG, D, A, B, C, 14, 9, 0xc33707d6);
- OP (FG, C, D, A, B, 3, 14, 0xf4d50d87);
- OP (FG, B, C, D, A, 8, 20, 0x455a14ed);
- OP (FG, A, B, C, D, 13, 5, 0xa9e3e905);
- OP (FG, D, A, B, C, 2, 9, 0xfcefa3f8);
- OP (FG, C, D, A, B, 7, 14, 0x676f02d9);
- OP (FG, B, C, D, A, 12, 20, 0x8d2a4c8a);
-
- /* Round 3. */
- OP (FH, A, B, C, D, 5, 4, 0xfffa3942);
- OP (FH, D, A, B, C, 8, 11, 0x8771f681);
- OP (FH, C, D, A, B, 11, 16, 0x6d9d6122);
- OP (FH, B, C, D, A, 14, 23, 0xfde5380c);
- OP (FH, A, B, C, D, 1, 4, 0xa4beea44);
- OP (FH, D, A, B, C, 4, 11, 0x4bdecfa9);
- OP (FH, C, D, A, B, 7, 16, 0xf6bb4b60);
- OP (FH, B, C, D, A, 10, 23, 0xbebfbc70);
- OP (FH, A, B, C, D, 13, 4, 0x289b7ec6);
- OP (FH, D, A, B, C, 0, 11, 0xeaa127fa);
- OP (FH, C, D, A, B, 3, 16, 0xd4ef3085);
- OP (FH, B, C, D, A, 6, 23, 0x04881d05);
- OP (FH, A, B, C, D, 9, 4, 0xd9d4d039);
- OP (FH, D, A, B, C, 12, 11, 0xe6db99e5);
- OP (FH, C, D, A, B, 15, 16, 0x1fa27cf8);
- OP (FH, B, C, D, A, 2, 23, 0xc4ac5665);
-
- /* Round 4. */
- OP (FI, A, B, C, D, 0, 6, 0xf4292244);
- OP (FI, D, A, B, C, 7, 10, 0x432aff97);
- OP (FI, C, D, A, B, 14, 15, 0xab9423a7);
- OP (FI, B, C, D, A, 5, 21, 0xfc93a039);
- OP (FI, A, B, C, D, 12, 6, 0x655b59c3);
- OP (FI, D, A, B, C, 3, 10, 0x8f0ccc92);
- OP (FI, C, D, A, B, 10, 15, 0xffeff47d);
- OP (FI, B, C, D, A, 1, 21, 0x85845dd1);
- OP (FI, A, B, C, D, 8, 6, 0x6fa87e4f);
- OP (FI, D, A, B, C, 15, 10, 0xfe2ce6e0);
- OP (FI, C, D, A, B, 6, 15, 0xa3014314);
- OP (FI, B, C, D, A, 13, 21, 0x4e0811a1);
- OP (FI, A, B, C, D, 4, 6, 0xf7537e82);
- OP (FI, D, A, B, C, 11, 10, 0xbd3af235);
- OP (FI, C, D, A, B, 2, 15, 0x2ad7d2bb);
- OP (FI, B, C, D, A, 9, 21, 0xeb86d391);
-
- /* Add the starting values of the context. */
- A += A_save;
- B += B_save;
- C += C_save;
- D += D_save;
- }
-
- /* Put checksum in context given as argument. */
- ctx->A = A;
- ctx->B = B;
- ctx->C = C;
- ctx->D = D;
-}
diff --git a/lib/md5.h b/lib/md5.h
deleted file mode 100644
index 3c8b8f3..0000000
--- a/lib/md5.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/* Declaration of functions and data types used for MD5 sum computing
- library functions.
- Copyright (C) 1995,1996,1997,1999-2001,2004,2005,2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1995.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifndef _MD5_H
-#define _MD5_H 1
-
-#include <limits.h>
-#include <stdint.h>
-#include <stdio.h>
-
-#define MD5_DIGEST_SIZE 16
-#define MD5_BLOCK_SIZE 64
-
-typedef uint32_t md5_uint32;
-typedef uintptr_t md5_uintptr;
-
-/* Structure to save state of computation between the single steps. */
-struct md5_ctx
-{
- md5_uint32 A;
- md5_uint32 B;
- md5_uint32 C;
- md5_uint32 D;
-
- md5_uint32 total[2];
- md5_uint32 buflen;
- char buffer[128] __attribute__ ((__aligned__ (__alignof__ (md5_uint32))));
-};
-
-/*
- * The following three functions are build up the low level used in
- * the functions `md5_stream' and `md5_buffer'.
- */
-
-/* Initialize structure containing state of computation.
- (RFC 1321, 3.3: Step 3) */
-extern void md5_init_ctx (struct md5_ctx *ctx);
-
-/* Starting with the result of former calls of this function (or the
- initialization function update the context for the next LEN bytes
- starting at BUFFER.
- It is necessary that LEN is a multiple of 64!!! */
-extern void md5_process_block (const void *buffer, size_t len,
- struct md5_ctx *ctx);
-
-/* Starting with the result of former calls of this function (or the
- initialization function update the context for the next LEN bytes
- starting at BUFFER.
- It is NOT required that LEN is a multiple of 64. */
-extern void md5_process_bytes (const void *buffer, size_t len,
- struct md5_ctx *ctx);
-
-/* Process the remaining bytes in the buffer and put result from CTX
- in first 16 bytes following RESBUF. The result is always in little
- endian byte order, so that a byte-wise output yields to the wanted
- ASCII representation of the message digest.
-
- IMPORTANT: On some systems it is required that RESBUF is correctly
- aligned for a 32 bits value. */
-extern void *md5_finish_ctx (struct md5_ctx *ctx, void *resbuf);
-
-
-/* Put result from CTX in first 16 bytes following RESBUF. The result is
- always in little endian byte order, so that a byte-wise output yields
- to the wanted ASCII representation of the message digest.
-
- IMPORTANT: On some systems it is required that RESBUF is correctly
- aligned for a 32 bits value. */
-extern void *md5_read_ctx (const struct md5_ctx *ctx, void *resbuf);
-
-
-/* Compute MD5 message digest for bytes read from STREAM. The
- resulting message digest number will be written into the 16 bytes
- beginning at RESBLOCK. */
-extern int md5_stream (FILE *stream, void *resblock);
-
-/* Compute MD5 message digest for LEN bytes beginning at BUFFER. The
- result is always in little endian byte order, so that a byte-wise
- output yields to the wanted ASCII representation of the message
- digest. */
-extern void *md5_buffer (const char *buffer, size_t len, void *resblock);
-
-#endif /* md5.h */
diff --git a/lib/next_prime.c b/lib/next_prime.c
deleted file mode 100644
index 5d4fc3f..0000000
--- a/lib/next_prime.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/* Determine prime number.
- Copyright (C) 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under an Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) and to distribute linked
- combinations including the two. Non-GPL Code permitted under this
- exception must only link to the code of Red Hat elfutils through those
- well defined interfaces identified in the file named EXCEPTION found in
- the source code files (the "Approved Interfaces"). The files of Non-GPL
- Code may instantiate templates or use macros or inline functions from
- the Approved Interfaces without causing the resulting work to be covered
- by the GNU General Public License. Only Red Hat, Inc. may make changes
- or additions to the list of Approved Interfaces. Red Hat's grant of
- this exception is conditioned upon your not adding any new exceptions.
- If you wish to add a new Approved Interface or exception, please contact
- Red Hat. You must obey the GNU General Public License in all respects
- for all of the Red Hat elfutils code and other code used in conjunction
- with Red Hat elfutils except the Non-GPL Code covered by this exception.
- If you modify this file, you may extend this exception to your version
- of the file, but you are not obligated to do so. If you do not wish to
- provide this exception without modification, you must delete this
- exception statement from your version and license this file solely under
- the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <stddef.h>
-
-
-/* Test whether CANDIDATE is a prime. */
-static int
-is_prime (size_t candidate)
-{
- /* No even number and none less than 10 will be passed here. */
- size_t divn = 3;
- size_t sq = divn * divn;
-
- while (sq < candidate && candidate % divn != 0)
- {
- size_t old_sq = sq;
- ++divn;
- sq += 4 * divn;
- if (sq < old_sq)
- return 1;
- ++divn;
- }
-
- return candidate % divn != 0;
-}
-
-
-/* We need primes for the table size. */
-size_t
-next_prime (size_t seed)
-{
- /* Make it definitely odd. */
- seed |= 1;
-
- while (!is_prime (seed))
- seed += 2;
-
- return seed;
-}
diff --git a/lib/sha1.c b/lib/sha1.c
deleted file mode 100644
index 0459cd6..0000000
--- a/lib/sha1.c
+++ /dev/null
@@ -1,386 +0,0 @@
-/* Functions to compute SHA1 message digest of files or memory blocks.
- according to the definition of SHA1 in FIPS 180-1 from April 1997.
- Copyright (C) 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2008.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <endian.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-
-#include "sha1.h"
-
-#if __BYTE_ORDER == __LITTLE_ENDIAN
-# include <byteswap.h>
-# define SWAP(n) bswap_32 (n)
-#else
-# define SWAP(n) (n)
-#endif
-
-
-/* This array contains the bytes used to pad the buffer to the next
- 64-byte boundary. */
-static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ... */ };
-
-
-/* Initialize structure containing state of computation. */
-void
-sha1_init_ctx (ctx)
- struct sha1_ctx *ctx;
-{
- ctx->A = 0x67452301;
- ctx->B = 0xefcdab89;
- ctx->C = 0x98badcfe;
- ctx->D = 0x10325476;
- ctx->E = 0xc3d2e1f0;
-
- ctx->total[0] = ctx->total[1] = 0;
- ctx->buflen = 0;
-}
-
-/* Put result from CTX in first 20 bytes following RESBUF. The result
- must be in little endian byte order.
-
- IMPORTANT: On some systems it is required that RESBUF is correctly
- aligned for a 32 bits value. */
-void *
-sha1_read_ctx (ctx, resbuf)
- const struct sha1_ctx *ctx;
- void *resbuf;
-{
- ((sha1_uint32 *) resbuf)[0] = SWAP (ctx->A);
- ((sha1_uint32 *) resbuf)[1] = SWAP (ctx->B);
- ((sha1_uint32 *) resbuf)[2] = SWAP (ctx->C);
- ((sha1_uint32 *) resbuf)[3] = SWAP (ctx->D);
- ((sha1_uint32 *) resbuf)[4] = SWAP (ctx->E);
-
- return resbuf;
-}
-
-/* Process the remaining bytes in the internal buffer and the usual
- prolog according to the standard and write the result to RESBUF.
-
- IMPORTANT: On some systems it is required that RESBUF is correctly
- aligned for a 32 bits value. */
-void *
-sha1_finish_ctx (ctx, resbuf)
- struct sha1_ctx *ctx;
- void *resbuf;
-{
- /* Take yet unprocessed bytes into account. */
- sha1_uint32 bytes = ctx->buflen;
- size_t pad;
-
- /* Now count remaining bytes. */
- ctx->total[0] += bytes;
- if (ctx->total[0] < bytes)
- ++ctx->total[1];
-
- pad = bytes >= 56 ? 64 + 56 - bytes : 56 - bytes;
- memcpy (&ctx->buffer[bytes], fillbuf, pad);
-
- /* Put the 64-bit file length in *bits* at the end of the buffer. */
- *(sha1_uint32 *) &ctx->buffer[bytes + pad] = SWAP ((ctx->total[1] << 3) |
- (ctx->total[0] >> 29));
- *(sha1_uint32 *) &ctx->buffer[bytes + pad + 4] = SWAP (ctx->total[0] << 3);
-
- /* Process last bytes. */
- sha1_process_block (ctx->buffer, bytes + pad + 8, ctx);
-
- return sha1_read_ctx (ctx, resbuf);
-}
-
-
-void
-sha1_process_bytes (buffer, len, ctx)
- const void *buffer;
- size_t len;
- struct sha1_ctx *ctx;
-{
- /* When we already have some bits in our internal buffer concatenate
- both inputs first. */
- if (ctx->buflen != 0)
- {
- size_t left_over = ctx->buflen;
- size_t add = 128 - left_over > len ? len : 128 - left_over;
-
- memcpy (&ctx->buffer[left_over], buffer, add);
- ctx->buflen += add;
-
- if (ctx->buflen > 64)
- {
- sha1_process_block (ctx->buffer, ctx->buflen & ~63, ctx);
-
- ctx->buflen &= 63;
- /* The regions in the following copy operation cannot overlap. */
- memcpy (ctx->buffer, &ctx->buffer[(left_over + add) & ~63],
- ctx->buflen);
- }
-
- buffer = (const char *) buffer + add;
- len -= add;
- }
-
- /* Process available complete blocks. */
- if (len >= 64)
- {
-#if !_STRING_ARCH_unaligned
-/* To check alignment gcc has an appropriate operator. Other
- compilers don't. */
-# if __GNUC__ >= 2
-# define UNALIGNED_P(p) (((sha1_uintptr) p) % __alignof__ (sha1_uint32) != 0)
-# else
-# define UNALIGNED_P(p) (((sha1_uintptr) p) % sizeof (sha1_uint32) != 0)
-# endif
- if (UNALIGNED_P (buffer))
- while (len > 64)
- {
- sha1_process_block (memcpy (ctx->buffer, buffer, 64), 64, ctx);
- buffer = (const char *) buffer + 64;
- len -= 64;
- }
- else
-#endif
- {
- sha1_process_block (buffer, len & ~63, ctx);
- buffer = (const char *) buffer + (len & ~63);
- len &= 63;
- }
- }
-
- /* Move remaining bytes in internal buffer. */
- if (len > 0)
- {
- size_t left_over = ctx->buflen;
-
- memcpy (&ctx->buffer[left_over], buffer, len);
- left_over += len;
- if (left_over >= 64)
- {
- sha1_process_block (ctx->buffer, 64, ctx);
- left_over -= 64;
- memcpy (ctx->buffer, &ctx->buffer[64], left_over);
- }
- ctx->buflen = left_over;
- }
-}
-
-
-/* These are the four functions used in the four steps of the SHA1 algorithm
- and defined in the FIPS 180-1. */
-/* #define FF(b, c, d) ((b & c) | (~b & d)) */
-#define FF(b, c, d) (d ^ (b & (c ^ d)))
-#define FG(b, c, d) (b ^ c ^ d)
-/* define FH(b, c, d) ((b & c) | (b & d) | (c & d)) */
-#define FH(b, c, d) (((b | c) & d) | (b & c))
-
-/* It is unfortunate that C does not provide an operator for cyclic
- rotation. Hope the C compiler is smart enough. */
-#define CYCLIC(w, s) (((w) << s) | ((w) >> (32 - s)))
-
-/* Magic constants. */
-#define K0 0x5a827999
-#define K1 0x6ed9eba1
-#define K2 0x8f1bbcdc
-#define K3 0xca62c1d6
-
-
-/* Process LEN bytes of BUFFER, accumulating context into CTX.
- It is assumed that LEN % 64 == 0. */
-
-void
-sha1_process_block (buffer, len, ctx)
- const void *buffer;
- size_t len;
- struct sha1_ctx *ctx;
-{
- sha1_uint32 computed_words[16];
-#define W(i) computed_words[(i) % 16]
- const sha1_uint32 *words = buffer;
- size_t nwords = len / sizeof (sha1_uint32);
- const sha1_uint32 *endp = words + nwords;
- sha1_uint32 A = ctx->A;
- sha1_uint32 B = ctx->B;
- sha1_uint32 C = ctx->C;
- sha1_uint32 D = ctx->D;
- sha1_uint32 E = ctx->E;
-
- /* First increment the byte count. FIPS 180-1 specifies the possible
- length of the file up to 2^64 bits. Here we only compute the
- number of bytes. Do a double word increment. */
- ctx->total[0] += len;
- if (ctx->total[0] < len)
- ++ctx->total[1];
-
- /* Process all bytes in the buffer with 64 bytes in each round of
- the loop. */
- while (words < endp)
- {
- sha1_uint32 A_save = A;
- sha1_uint32 B_save = B;
- sha1_uint32 C_save = C;
- sha1_uint32 D_save = D;
- sha1_uint32 E_save = E;
-
- /* First round: using the given function, the context and a constant
- the next context is computed. Because the algorithms processing
- unit is a 32-bit word and it is determined to work on words in
- little endian byte order we perhaps have to change the byte order
- before the computation. */
-
-#define OP(i, a, b, c, d, e) \
- do \
- { \
- W (i) = SWAP (*words); \
- e = CYCLIC (a, 5) + FF (b, c, d) + e + W (i) + K0; \
- ++words; \
- b = CYCLIC (b, 30); \
- } \
- while (0)
-
- /* Steps 0 to 15. */
- OP (0, A, B, C, D, E);
- OP (1, E, A, B, C, D);
- OP (2, D, E, A, B, C);
- OP (3, C, D, E, A, B);
- OP (4, B, C, D, E, A);
- OP (5, A, B, C, D, E);
- OP (6, E, A, B, C, D);
- OP (7, D, E, A, B, C);
- OP (8, C, D, E, A, B);
- OP (9, B, C, D, E, A);
- OP (10, A, B, C, D, E);
- OP (11, E, A, B, C, D);
- OP (12, D, E, A, B, C);
- OP (13, C, D, E, A, B);
- OP (14, B, C, D, E, A);
- OP (15, A, B, C, D, E);
-
- /* For the remaining 64 steps we have a more complicated
- computation of the input data-derived values. Redefine the
- macro to take an additional second argument specifying the
- function to use and a new last parameter for the magic
- constant. */
-#undef OP
-#define OP(i, f, a, b, c, d, e, K) \
- do \
- { \
- W (i) = CYCLIC (W (i - 3) ^ W (i - 8) ^ W (i - 14) ^ W (i - 16), 1);\
- e = CYCLIC (a, 5) + f (b, c, d) + e + W (i) + K; \
- b = CYCLIC (b, 30); \
- } \
- while (0)
-
- /* Steps 16 to 19. */
- OP (16, FF, E, A, B, C, D, K0);
- OP (17, FF, D, E, A, B, C, K0);
- OP (18, FF, C, D, E, A, B, K0);
- OP (19, FF, B, C, D, E, A, K0);
-
- /* Steps 20 to 39. */
- OP (20, FG, A, B, C, D, E, K1);
- OP (21, FG, E, A, B, C, D, K1);
- OP (22, FG, D, E, A, B, C, K1);
- OP (23, FG, C, D, E, A, B, K1);
- OP (24, FG, B, C, D, E, A, K1);
- OP (25, FG, A, B, C, D, E, K1);
- OP (26, FG, E, A, B, C, D, K1);
- OP (27, FG, D, E, A, B, C, K1);
- OP (28, FG, C, D, E, A, B, K1);
- OP (29, FG, B, C, D, E, A, K1);
- OP (30, FG, A, B, C, D, E, K1);
- OP (31, FG, E, A, B, C, D, K1);
- OP (32, FG, D, E, A, B, C, K1);
- OP (33, FG, C, D, E, A, B, K1);
- OP (34, FG, B, C, D, E, A, K1);
- OP (35, FG, A, B, C, D, E, K1);
- OP (36, FG, E, A, B, C, D, K1);
- OP (37, FG, D, E, A, B, C, K1);
- OP (38, FG, C, D, E, A, B, K1);
- OP (39, FG, B, C, D, E, A, K1);
-
- /* Steps 40 to 59. */
- OP (40, FH, A, B, C, D, E, K2);
- OP (41, FH, E, A, B, C, D, K2);
- OP (42, FH, D, E, A, B, C, K2);
- OP (43, FH, C, D, E, A, B, K2);
- OP (44, FH, B, C, D, E, A, K2);
- OP (45, FH, A, B, C, D, E, K2);
- OP (46, FH, E, A, B, C, D, K2);
- OP (47, FH, D, E, A, B, C, K2);
- OP (48, FH, C, D, E, A, B, K2);
- OP (49, FH, B, C, D, E, A, K2);
- OP (50, FH, A, B, C, D, E, K2);
- OP (51, FH, E, A, B, C, D, K2);
- OP (52, FH, D, E, A, B, C, K2);
- OP (53, FH, C, D, E, A, B, K2);
- OP (54, FH, B, C, D, E, A, K2);
- OP (55, FH, A, B, C, D, E, K2);
- OP (56, FH, E, A, B, C, D, K2);
- OP (57, FH, D, E, A, B, C, K2);
- OP (58, FH, C, D, E, A, B, K2);
- OP (59, FH, B, C, D, E, A, K2);
-
- /* Steps 60 to 79. */
- OP (60, FG, A, B, C, D, E, K3);
- OP (61, FG, E, A, B, C, D, K3);
- OP (62, FG, D, E, A, B, C, K3);
- OP (63, FG, C, D, E, A, B, K3);
- OP (64, FG, B, C, D, E, A, K3);
- OP (65, FG, A, B, C, D, E, K3);
- OP (66, FG, E, A, B, C, D, K3);
- OP (67, FG, D, E, A, B, C, K3);
- OP (68, FG, C, D, E, A, B, K3);
- OP (69, FG, B, C, D, E, A, K3);
- OP (70, FG, A, B, C, D, E, K3);
- OP (71, FG, E, A, B, C, D, K3);
- OP (72, FG, D, E, A, B, C, K3);
- OP (73, FG, C, D, E, A, B, K3);
- OP (74, FG, B, C, D, E, A, K3);
- OP (75, FG, A, B, C, D, E, K3);
- OP (76, FG, E, A, B, C, D, K3);
- OP (77, FG, D, E, A, B, C, K3);
- OP (78, FG, C, D, E, A, B, K3);
- OP (79, FG, B, C, D, E, A, K3);
-
- /* Add the starting values of the context. */
- A += A_save;
- B += B_save;
- C += C_save;
- D += D_save;
- E += E_save;
- }
-
- /* Put checksum in context given as argument. */
- ctx->A = A;
- ctx->B = B;
- ctx->C = C;
- ctx->D = D;
- ctx->E = E;
-}
diff --git a/lib/sha1.h b/lib/sha1.h
deleted file mode 100644
index 9761754..0000000
--- a/lib/sha1.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/* Declaration of functions and data types used for SHA1 sum computing
- library functions.
- Copyright (C) 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2008.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifndef _SHA1_H
-#define _SHA1_H 1
-
-#include <limits.h>
-#include <stdint.h>
-#include <stdio.h>
-
-#define SHA1_DIGEST_SIZE 20
-#define SHA1_BLOCK_SIZE 64
-
-typedef uint32_t sha1_uint32;
-typedef uintptr_t sha1_uintptr;
-
-/* Structure to save state of computation between the single steps. */
-struct sha1_ctx
-{
- sha1_uint32 A;
- sha1_uint32 B;
- sha1_uint32 C;
- sha1_uint32 D;
- sha1_uint32 E;
-
- sha1_uint32 total[2];
- sha1_uint32 buflen;
- char buffer[128] __attribute__ ((__aligned__ (__alignof__ (sha1_uint32))));
-};
-
-/* Initialize structure containing state of computation. */
-extern void sha1_init_ctx (struct sha1_ctx *ctx);
-
-/* Starting with the result of former calls of this function (or the
- initialization function update the context for the next LEN bytes
- starting at BUFFER.
- It is necessary that LEN is a multiple of 64!!! */
-extern void sha1_process_block (const void *buffer, size_t len,
- struct sha1_ctx *ctx);
-
-/* Starting with the result of former calls of this function (or the
- initialization function update the context for the next LEN bytes
- starting at BUFFER.
- It is NOT required that LEN is a multiple of 64. */
-extern void sha1_process_bytes (const void *buffer, size_t len,
- struct sha1_ctx *ctx);
-
-/* Process the remaining bytes in the buffer and put result from CTX
- in first 20 bytes following RESBUF. The result is always in little
- endian byte order, so that a byte-wise output yields to the wanted
- ASCII representation of the message digest.
-
- IMPORTANT: On some systems it is required that RESBUF is correctly
- aligned for a 32 bits value. */
-extern void *sha1_finish_ctx (struct sha1_ctx *ctx, void *resbuf);
-
-
-/* Put result from CTX in first 20 bytes following RESBUF. The result is
- always in little endian byte order, so that a byte-wise output yields
- to the wanted ASCII representation of the message digest.
-
- IMPORTANT: On some systems it is required that RESBUF is correctly
- aligned for a 32 bits value. */
-extern void *sha1_read_ctx (const struct sha1_ctx *ctx, void *resbuf);
-
-#endif /* sha1.h */
diff --git a/lib/system.h b/lib/system.h
deleted file mode 100644
index 23c666a..0000000
--- a/lib/system.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/* Declarations for common convenience functions.
- Copyright (C) 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under an Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) and to distribute linked
- combinations including the two. Non-GPL Code permitted under this
- exception must only link to the code of Red Hat elfutils through those
- well defined interfaces identified in the file named EXCEPTION found in
- the source code files (the "Approved Interfaces"). The files of Non-GPL
- Code may instantiate templates or use macros or inline functions from
- the Approved Interfaces without causing the resulting work to be covered
- by the GNU General Public License. Only Red Hat, Inc. may make changes
- or additions to the list of Approved Interfaces. Red Hat's grant of
- this exception is conditioned upon your not adding any new exceptions.
- If you wish to add a new Approved Interface or exception, please contact
- Red Hat. You must obey the GNU General Public License in all respects
- for all of the Red Hat elfutils code and other code used in conjunction
- with Red Hat elfutils except the Non-GPL Code covered by this exception.
- If you modify this file, you may extend this exception to your version
- of the file, but you are not obligated to do so. If you do not wish to
- provide this exception without modification, you must delete this
- exception statement from your version and license this file solely under
- the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifndef LIB_SYSTEM_H
-#define LIB_SYSTEM_H 1
-
-#include <stddef.h>
-#include <stdint.h>
-
-extern void *xmalloc (size_t) __attribute__ ((__malloc__));
-extern void *xcalloc (size_t, size_t) __attribute__ ((__malloc__));
-extern void *xrealloc (void *, size_t) __attribute__ ((__malloc__));
-
-extern char *xstrdup (const char *) __attribute__ ((__malloc__));
-extern char *xstrndup (const char *, size_t) __attribute__ ((__malloc__));
-
-
-extern uint32_t crc32 (uint32_t crc, unsigned char *buf, size_t len);
-extern int crc32_file (int fd, uint32_t *resp);
-
-/* A special gettext function we use if the strings are too short. */
-#define sgettext(Str) \
- ({ const char *__res = strrchr (gettext (Str), '|'); \
- __res ? __res + 1 : Str; })
-
-#define gettext_noop(Str) Str
-
-
-#define pwrite_retry(fd, buf, len, off) \
- TEMP_FAILURE_RETRY (pwrite (fd, buf, len, off))
-#define write_retry(fd, buf, n) \
- TEMP_FAILURE_RETRY (write (fd, buf, n))
-#define pread_retry(fd, buf, len, off) \
- TEMP_FAILURE_RETRY (pread (fd, buf, len, off))
-
-#endif /* system.h */
diff --git a/lib/xmalloc.c b/lib/xmalloc.c
deleted file mode 100644
index b12b059..0000000
--- a/lib/xmalloc.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/* Convenience functions for allocation.
- Copyright (C) 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <error.h>
-#include <libintl.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include "system.h"
-
-#ifndef _
-# define _(str) gettext (str)
-#endif
-
-
-/* Allocate N bytes of memory dynamically, with error checking. */
-void *
-xmalloc (n)
- size_t n;
-{
- void *p;
-
- p = malloc (n);
- if (p == NULL)
- error (EXIT_FAILURE, 0, _("memory exhausted"));
- return p;
-}
-
-
-/* Allocate memory for N elements of S bytes, with error checking. */
-void *
-xcalloc (n, s)
- size_t n, s;
-{
- void *p;
-
- p = calloc (n, s);
- if (p == NULL)
- error (EXIT_FAILURE, 0, _("memory exhausted"));
- return p;
-}
-
-
-/* Change the size of an allocated block of memory P to N bytes,
- with error checking. */
-void *
-xrealloc (p, n)
- void *p;
- size_t n;
-{
- p = realloc (p, n);
- if (p == NULL)
- error (EXIT_FAILURE, 0, _("memory exhausted"));
- return p;
-}
diff --git a/lib/xstrndup.c b/lib/xstrndup.c
deleted file mode 100644
index 2082c17..0000000
--- a/lib/xstrndup.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Convenience function for string allocation.
- Copyright (C) 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <string.h>
-#include "system.h"
-
-
-/* Return a newly allocated copy of STRING. */
-char *
-xstrndup (string, n)
- const char *string;
- size_t n;
-{
- char *res;
- size_t len = strnlen (string, n);
- *((char *) mempcpy ((res = xmalloc (len + 1)), string, len)) = '\0';
- return res;
-}
diff --git a/libasm/ChangeLog b/libasm/ChangeLog
deleted file mode 100644
index c98deb6..0000000
--- a/libasm/ChangeLog
+++ /dev/null
@@ -1,112 +0,0 @@
-2008-12-03 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am [USE_TLS]: Like libasm.so with libpthread.
-
-2008-01-11 Ulrich Drepper <drepper@redhat.com>
-
- * libasm.h (DisasmGetSymCB_t): Change type of fourth and fifth
- parameter.
- * disasm_cb.c: Adjust accordingly.
-
-2008-01-08 Roland McGrath <roland@redhat.com>
-
- * Makefile.am (euinclude): Variable removed.
- (pkginclude_HEADERS): Set this instead of euinclude_HEADERS.
-
-2007-12-20 Ulrich Drepper <drepper@redhat.com>
-
- * disasm_cb.c: Add initial support to resolve addresses to symbols.
-
-2007-02-05 Ulrich Drepper <drepper@redhat.com>
-
- * disasm_begin.c: New file.
- * disasm_cb.c: New file.
- * disasm_end.c: New file.
- * disasm_str.c: New file.
-
-2006-08-29 Roland McGrath <roland@redhat.com>
-
- * Makefile.am (CLEANFILES): Add libasm.so.$(VERSION).
-
-2005-11-13 Roland McGrath <roland@redhat.com>
-
- * Makefile.am (INCLUDES): Search in libdw.
-
-2005-09-02 Ulrich Drepper <drepper@redhat.com>
-
- * asm_error.c (asm_errmsg): Unify error message.
-
-2005-08-28 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: Use $(LINK) not $(CC) when creating DSO.
- (%.os): Use COMPILE.os.
- (COMPILE.os): Filter out gconv options.
-
-2005-08-02 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am (AM_CFLAGS): Add -std=gnu99.
- * asm_abort.c: Don't try to remove output file if there is none.
- * asm_addint8.c: In print mode, print to file not stdout.
- * asm_addsleb128.c: Likewise.
- * asm_adduleb128.c: Likewise.
- * asm_newscn.c: Likewise.
- * asm_align.c: Implement print mode.
- * asm_begin.c (asm_begin): Change interface. Take binary class and
- byte order information from new Ebl parameter.
- * libasm.h: Adjust prototype.
- * asm_end.c (text_end): Close file if necesary.
- * asm_error.c: Add new error ASM_E_IOERROR.
- * libasmP.h: Add ASM_E_IOERROR definition.
-
-2005-02-15 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am (AM_CFLAGS): Add -Wunused -Wextra -Wformat=2.
-
- * asm_end.c (text_end): Mark parameter as possibly unused.
-
-2005-02-06 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: Remove lint handling.
-
-2005-02-05 Ulrich Drepper <drepper@redhat.com>
-
- * asm_end.c (binary_end): Don't terminate with error() in case
- something goes wrong.
-
- * Makefile.am: Check for text relocations in constructed DSO.
-
- * Makefile.am (AM_CFLAGS): More warnings. Add -fmudflap for MUDFLAP.
-
- * asm_end.c (binary_end): Remove shadowing variables.
- Little cleanups.
-
- * asm_newsym.c: Allocate memory for the string parameter.
-
-2005-02-04 Ulrich Drepper <drepper@redhat.com>
-
- * asm_newscn_ingrp.c (asm_newscn_ingrp): Use INTUSE to reference
- asm_newscn.
-
-2004-09-25 Ulrich Drepper <drepper@redhat.com>
-
- * asm_error.c: Make compile with gcc 4.0.
-
-2004-01-20 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: Support building with mudflap.
-
-2004-01-18 Ulrich Drepper <drepper@redhat.com>
-
- * libasmP.h (_): Use elfutils domain.
-
-2004-01-17 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: Support building with mudflap.
-
-2003-08-13 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.in: Depend on libebl.a, not libebl.so.
-
-2003-08-11 Ulrich Drepper <drepper@redhat.com>
-
- * Moved to CVS archive.
diff --git a/libasm/Makefile.am b/libasm/Makefile.am
deleted file mode 100644
index 62b5ee2..0000000
--- a/libasm/Makefile.am
+++ /dev/null
@@ -1,107 +0,0 @@
-## Process this file with automake to create Makefile.in
-##
-## Copyright (C) 2002, 2004, 2005, 2006, 2008 Red Hat, Inc.
-## This file is part of Red Hat elfutils.
-##
-## Red Hat elfutils is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by the
-## Free Software Foundation; version 2 of the License.
-##
-## Red Hat elfutils 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
-## General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License along
-## with Red Hat elfutils; if not, write to the Free Software Foundation,
-## Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-##
-## Red Hat elfutils is an included package of the Open Invention Network.
-## An included package of the Open Invention Network is a package for which
-## Open Invention Network licensees cross-license their patents. No patent
-## license is granted, either expressly or impliedly, by designation as an
-## included package. Should you wish to participate in the Open Invention
-## Network licensing program, please visit www.openinventionnetwork.com
-## <http://www.openinventionnetwork.com>.
-##
-DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H
-if MUDFLAP
-AM_CFLAGS = -fmudflap
-else
-AM_CFLAGS =
-endif
-AM_CFLAGS += -std=gnu99 -Wall -Wshadow -Werror -Wunused -Wextra -Wformat=2
-INCLUDES = -I. -I$(srcdir) -I.. \
- -I$(top_srcdir)/libelf -I$(top_srcdir)/libebl -I$(top_srcdir)/libdw\
- -I$(top_srcdir)/lib
-GCC_INCLUDE = -I$(shell $(CC) -print-file-name=include)
-VERSION = 1
-
-COMPILE.os = $(filter-out -fprofile-arcs, $(filter-out -ftest-coverage, \
- $(COMPILE)))
-
-lib_LIBRARIES = libasm.a
-if !MUDFLAP
-noinst_LIBRARIES = libasm_pic.a
-noinst_PROGRAMS = $(noinst_LIBRARIES:_pic.a=.so)
-endif
-pkginclude_HEADERS = libasm.h
-
-libasm_a_SOURCES = asm_begin.c asm_abort.c asm_end.c asm_error.c \
- asm_getelf.c asm_newscn.c asm_newscn_ingrp.c \
- asm_newsubscn.c asm_newsym.c asm_newcomsym.c \
- asm_newabssym.c \
- asm_newscngrp.c asm_scngrp_newsignature.c \
- asm_fill.c asm_align.c asm_addstrz.c \
- asm_addint8.c asm_adduint8.c \
- asm_addint16.c asm_adduint16.c \
- asm_addint32.c asm_adduint32.c \
- asm_addint64.c asm_adduint64.c \
- asm_adduleb128.c asm_addsleb128.c \
- disasm_begin.c disasm_cb.c disasm_end.c disasm_str.c \
- symbolhash.c
-
-if !MUDFLAP
-libasm_pic_a_SOURCES =
-am_libasm_pic_a_OBJECTS = $(libasm_a_SOURCES:.c=.os)
-
-libasm_so_LDLIBS =
-if USE_TLS
-libasm_so_LDLIBS += -lpthread
-endif
-
-libasm_so_SOURCES =
-libasm.so: libasm_pic.a libasm.map
- $(LINK) -shared -o $@ -Wl,--whole-archive,$<,--no-whole-archive \
- -Wl,--version-script,$(srcdir)/libasm.map,--no-undefined \
- -Wl,--soname,$@.$(VERSION) \
- ../libebl/libebl.a ../libelf/libelf.so $(libasm_so_LDLIBS)
- if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi
- ln -fs $@ $@.$(VERSION)
-
-
-%.os: %.c %.o
- if $(COMPILE.os) -c -o $@ -fpic -DPIC -DSHARED -MT $@ -MD -MP \
- -MF "$(DEPDIR)/$*.Tpo" `test -f '$<' || echo '$(srcdir)/'`$<; \
- then cat "$(DEPDIR)/$*.Tpo" >> "$(DEPDIR)/$*.Po"; \
- rm -f "$(DEPDIR)/$*.Tpo"; \
- else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
- fi
-
-install: install-am libasm.so
- $(mkinstalldirs) $(DESTDIR)$(libdir)
- $(INSTALL_PROGRAM) libasm.so $(DESTDIR)$(libdir)/libasm-$(PACKAGE_VERSION).so
- ln -fs libasm-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir)/libasm.so.$(VERSION)
- ln -fs libasm.so.$(VERSION) $(DESTDIR)$(libdir)/libasm.so
-
-uninstall: uninstall-am
- rm -f $(DESTDIR)$(libdir)/libasm-$(PACKAGE_VERSION).so
- rm -f $(DESTDIR)$(libdir)/libasm.so.$(VERSION)
- rm -f $(DESTDIR)$(libdir)/libasm.so
- rmdir --ignore-fail-on-non-empty $(DESTDIR)$(includedir)/elfutils
-endif
-
-noinst_HEADERS = libasmP.h symbolhash.h
-EXTRA_DIST = libasm.map
-
-CLEANFILES = $(am_libasm_pic_a_OBJECTS) *.gcno *.gcda libasm.so.$(VERSION)
diff --git a/libasm/Makefile.in b/libasm/Makefile.in
deleted file mode 100644
index 6bc2137..0000000
--- a/libasm/Makefile.in
+++ /dev/null
@@ -1,609 +0,0 @@
-# Makefile.in generated by automake 1.10.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-@MUDFLAP_FALSE@noinst_PROGRAMS = $(am__EXEEXT_1)
-@MUDFLAP_TRUE@am_libasm_pic_a_OBJECTS =
-@MUDFLAP_FALSE@@USE_TLS_TRUE@am__append_1 = -lpthread
-subdir = libasm
-DIST_COMMON = $(noinst_HEADERS) $(pkginclude_HEADERS) \
- $(srcdir)/Makefile.am $(srcdir)/Makefile.in ChangeLog
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
- $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
- *) f=$$p;; \
- esac;
-am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgincludedir)"
-libLIBRARIES_INSTALL = $(INSTALL_DATA)
-LIBRARIES = $(lib_LIBRARIES) $(noinst_LIBRARIES)
-AR = ar
-ARFLAGS = cru
-libasm_a_AR = $(AR) $(ARFLAGS)
-libasm_a_LIBADD =
-am_libasm_a_OBJECTS = asm_begin.$(OBJEXT) asm_abort.$(OBJEXT) \
- asm_end.$(OBJEXT) asm_error.$(OBJEXT) asm_getelf.$(OBJEXT) \
- asm_newscn.$(OBJEXT) asm_newscn_ingrp.$(OBJEXT) \
- asm_newsubscn.$(OBJEXT) asm_newsym.$(OBJEXT) \
- asm_newcomsym.$(OBJEXT) asm_newabssym.$(OBJEXT) \
- asm_newscngrp.$(OBJEXT) asm_scngrp_newsignature.$(OBJEXT) \
- asm_fill.$(OBJEXT) asm_align.$(OBJEXT) asm_addstrz.$(OBJEXT) \
- asm_addint8.$(OBJEXT) asm_adduint8.$(OBJEXT) \
- asm_addint16.$(OBJEXT) asm_adduint16.$(OBJEXT) \
- asm_addint32.$(OBJEXT) asm_adduint32.$(OBJEXT) \
- asm_addint64.$(OBJEXT) asm_adduint64.$(OBJEXT) \
- asm_adduleb128.$(OBJEXT) asm_addsleb128.$(OBJEXT) \
- disasm_begin.$(OBJEXT) disasm_cb.$(OBJEXT) \
- disasm_end.$(OBJEXT) disasm_str.$(OBJEXT) symbolhash.$(OBJEXT)
-libasm_a_OBJECTS = $(am_libasm_a_OBJECTS)
-libasm_pic_a_AR = $(AR) $(ARFLAGS)
-libasm_pic_a_LIBADD =
-libasm_pic_a_OBJECTS = $(am_libasm_pic_a_OBJECTS)
-@MUDFLAP_FALSE@am__EXEEXT_1 = libasm.so$(EXEEXT)
-PROGRAMS = $(noinst_PROGRAMS)
-am_libasm_so_OBJECTS =
-libasm_so_OBJECTS = $(am_libasm_so_OBJECTS)
-libasm_so_LDADD = $(LDADD)
-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-SOURCES = $(libasm_a_SOURCES) $(libasm_pic_a_SOURCES) \
- $(libasm_so_SOURCES)
-DIST_SOURCES = $(libasm_a_SOURCES) $(libasm_pic_a_SOURCES) \
- $(libasm_so_SOURCES)
-pkgincludeHEADERS_INSTALL = $(INSTALL_HEADER)
-HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEBUGPRED = @DEBUGPRED@
-DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H
-DEPDIR = @DEPDIR@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EXEEXT = @EXEEXT@
-GMSGFMT = @GMSGFMT@
-GMSGFMT_015 = @GMSGFMT_015@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LDFLAGS = @LDFLAGS@
-LEX = @LEX@
-LEXLIB = @LEXLIB@
-LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
-LIBEBL_SUBDIR = @LIBEBL_SUBDIR@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LOCALEDIR = @LOCALEDIR@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MKDIR_P = @MKDIR_P@
-MODVERSION = @MODVERSION@
-MSGFMT = @MSGFMT@
-MSGFMT_015 = @MSGFMT_015@
-MSGMERGE = @MSGMERGE@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-RANLIB = @RANLIB@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-USE_NLS = @USE_NLS@
-VERSION = 1
-XGETTEXT = @XGETTEXT@
-XGETTEXT_015 = @XGETTEXT_015@
-YACC = @YACC@
-YFLAGS = @YFLAGS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-base_cpu = @base_cpu@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-eu_version = @eu_version@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-@MUDFLAP_FALSE@AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Werror -Wunused \
-@MUDFLAP_FALSE@ -Wextra -Wformat=2
-@MUDFLAP_TRUE@AM_CFLAGS = -fmudflap -std=gnu99 -Wall -Wshadow -Werror \
-@MUDFLAP_TRUE@ -Wunused -Wextra -Wformat=2
-INCLUDES = -I. -I$(srcdir) -I.. \
- -I$(top_srcdir)/libelf -I$(top_srcdir)/libebl -I$(top_srcdir)/libdw\
- -I$(top_srcdir)/lib
-
-GCC_INCLUDE = -I$(shell $(CC) -print-file-name=include)
-COMPILE.os = $(filter-out -fprofile-arcs, $(filter-out -ftest-coverage, \
- $(COMPILE)))
-
-lib_LIBRARIES = libasm.a
-@MUDFLAP_FALSE@noinst_LIBRARIES = libasm_pic.a
-pkginclude_HEADERS = libasm.h
-libasm_a_SOURCES = asm_begin.c asm_abort.c asm_end.c asm_error.c \
- asm_getelf.c asm_newscn.c asm_newscn_ingrp.c \
- asm_newsubscn.c asm_newsym.c asm_newcomsym.c \
- asm_newabssym.c \
- asm_newscngrp.c asm_scngrp_newsignature.c \
- asm_fill.c asm_align.c asm_addstrz.c \
- asm_addint8.c asm_adduint8.c \
- asm_addint16.c asm_adduint16.c \
- asm_addint32.c asm_adduint32.c \
- asm_addint64.c asm_adduint64.c \
- asm_adduleb128.c asm_addsleb128.c \
- disasm_begin.c disasm_cb.c disasm_end.c disasm_str.c \
- symbolhash.c
-
-@MUDFLAP_FALSE@libasm_pic_a_SOURCES =
-@MUDFLAP_FALSE@am_libasm_pic_a_OBJECTS = $(libasm_a_SOURCES:.c=.os)
-@MUDFLAP_FALSE@libasm_so_LDLIBS = $(am__append_1)
-@MUDFLAP_FALSE@libasm_so_SOURCES =
-noinst_HEADERS = libasmP.h symbolhash.h
-EXTRA_DIST = libasm.map
-CLEANFILES = $(am_libasm_pic_a_OBJECTS) *.gcno *.gcda libasm.so.$(VERSION)
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
- && exit 0; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits libasm/Makefile'; \
- cd $(top_srcdir) && \
- $(AUTOMAKE) --gnits libasm/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-install-libLIBRARIES: $(lib_LIBRARIES)
- @$(NORMAL_INSTALL)
- test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
- @list='$(lib_LIBRARIES)'; for p in $$list; do \
- if test -f $$p; then \
- f=$(am__strip_dir) \
- echo " $(libLIBRARIES_INSTALL) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
- $(libLIBRARIES_INSTALL) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
- else :; fi; \
- done
- @$(POST_INSTALL)
- @list='$(lib_LIBRARIES)'; for p in $$list; do \
- if test -f $$p; then \
- p=$(am__strip_dir) \
- echo " $(RANLIB) '$(DESTDIR)$(libdir)/$$p'"; \
- $(RANLIB) "$(DESTDIR)$(libdir)/$$p"; \
- else :; fi; \
- done
-
-uninstall-libLIBRARIES:
- @$(NORMAL_UNINSTALL)
- @list='$(lib_LIBRARIES)'; for p in $$list; do \
- p=$(am__strip_dir) \
- echo " rm -f '$(DESTDIR)$(libdir)/$$p'"; \
- rm -f "$(DESTDIR)$(libdir)/$$p"; \
- done
-
-clean-libLIBRARIES:
- -test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES)
-
-clean-noinstLIBRARIES:
- -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
-libasm.a: $(libasm_a_OBJECTS) $(libasm_a_DEPENDENCIES)
- -rm -f libasm.a
- $(libasm_a_AR) libasm.a $(libasm_a_OBJECTS) $(libasm_a_LIBADD)
- $(RANLIB) libasm.a
-libasm_pic.a: $(libasm_pic_a_OBJECTS) $(libasm_pic_a_DEPENDENCIES)
- -rm -f libasm_pic.a
- $(libasm_pic_a_AR) libasm_pic.a $(libasm_pic_a_OBJECTS) $(libasm_pic_a_LIBADD)
- $(RANLIB) libasm_pic.a
-
-clean-noinstPROGRAMS:
- -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
-@MUDFLAP_TRUE@libasm.so$(EXEEXT): $(libasm_so_OBJECTS) $(libasm_so_DEPENDENCIES)
-@MUDFLAP_TRUE@ @rm -f libasm.so$(EXEEXT)
-@MUDFLAP_TRUE@ $(LINK) $(libasm_so_OBJECTS) $(libasm_so_LDADD) $(LIBS)
-
-mostlyclean-compile:
- -rm -f *.$(OBJEXT)
-
-distclean-compile:
- -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm_abort.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm_addint16.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm_addint32.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm_addint64.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm_addint8.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm_addsleb128.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm_addstrz.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm_adduint16.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm_adduint32.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm_adduint64.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm_adduint8.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm_adduleb128.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm_align.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm_begin.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm_end.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm_error.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm_fill.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm_getelf.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm_newabssym.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm_newcomsym.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm_newscn.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm_newscn_ingrp.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm_newscngrp.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm_newsubscn.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm_newsym.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm_scngrp_newsignature.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/disasm_begin.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/disasm_cb.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/disasm_end.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/disasm_str.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/symbolhash.Po@am__quote@
-
-.c.o:
-@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
-
-.c.obj:
-@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
-install-pkgincludeHEADERS: $(pkginclude_HEADERS)
- @$(NORMAL_INSTALL)
- test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)"
- @list='$(pkginclude_HEADERS)'; for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- f=$(am__strip_dir) \
- echo " $(pkgincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgincludedir)/$$f'"; \
- $(pkgincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgincludedir)/$$f"; \
- done
-
-uninstall-pkgincludeHEADERS:
- @$(NORMAL_UNINSTALL)
- @list='$(pkginclude_HEADERS)'; for p in $$list; do \
- f=$(am__strip_dir) \
- echo " rm -f '$(DESTDIR)$(pkgincludedir)/$$f'"; \
- rm -f "$(DESTDIR)$(pkgincludedir)/$$f"; \
- done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- mkid -fID $$unique
-tags: TAGS
-
-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- here=`pwd`; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$tags $$unique; \
- fi
-ctags: CTAGS
-CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- test -z "$(CTAGS_ARGS)$$tags$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$tags $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && cd $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) $$here
-
-distclean-tags:
- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- list='$(DISTFILES)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
- fi; \
- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
- else \
- test -f $(distdir)/$$file \
- || cp -p $$d/$$file $(distdir)/$$file \
- || exit 1; \
- fi; \
- done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(HEADERS)
-installdirs:
- for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgincludedir)"; do \
- test -z "$$dir" || $(MKDIR_P) "$$dir"; \
- done
-@MUDFLAP_TRUE@install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-@MUDFLAP_TRUE@uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libLIBRARIES clean-noinstLIBRARIES \
- clean-noinstPROGRAMS mostlyclean-am
-
-distclean: distclean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
- distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-info: info-am
-
-info-am:
-
-install-data-am: install-pkgincludeHEADERS
-
-install-dvi: install-dvi-am
-
-install-exec-am: install-libLIBRARIES
-
-install-html: install-html-am
-
-install-info: install-info-am
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-ps: install-ps-am
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-libLIBRARIES uninstall-pkgincludeHEADERS
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
- clean-libLIBRARIES clean-noinstLIBRARIES clean-noinstPROGRAMS \
- ctags distclean distclean-compile distclean-generic \
- distclean-tags distdir dvi dvi-am html html-am info info-am \
- install install-am install-data install-data-am install-dvi \
- install-dvi-am install-exec install-exec-am install-html \
- install-html-am install-info install-info-am \
- install-libLIBRARIES install-man install-pdf install-pdf-am \
- install-pkgincludeHEADERS install-ps install-ps-am \
- install-strip installcheck installcheck-am installdirs \
- maintainer-clean maintainer-clean-generic mostlyclean \
- mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
- tags uninstall uninstall-am uninstall-libLIBRARIES \
- uninstall-pkgincludeHEADERS
-
-@MUDFLAP_FALSE@libasm.so: libasm_pic.a libasm.map
-@MUDFLAP_FALSE@ $(LINK) -shared -o $@ -Wl,--whole-archive,$<,--no-whole-archive \
-@MUDFLAP_FALSE@ -Wl,--version-script,$(srcdir)/libasm.map,--no-undefined \
-@MUDFLAP_FALSE@ -Wl,--soname,$@.$(VERSION) \
-@MUDFLAP_FALSE@ ../libebl/libebl.a ../libelf/libelf.so $(libasm_so_LDLIBS)
-@MUDFLAP_FALSE@ if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi
-@MUDFLAP_FALSE@ ln -fs $@ $@.$(VERSION)
-
-@MUDFLAP_FALSE@%.os: %.c %.o
-@MUDFLAP_FALSE@ if $(COMPILE.os) -c -o $@ -fpic -DPIC -DSHARED -MT $@ -MD -MP \
-@MUDFLAP_FALSE@ -MF "$(DEPDIR)/$*.Tpo" `test -f '$<' || echo '$(srcdir)/'`$<; \
-@MUDFLAP_FALSE@ then cat "$(DEPDIR)/$*.Tpo" >> "$(DEPDIR)/$*.Po"; \
-@MUDFLAP_FALSE@ rm -f "$(DEPDIR)/$*.Tpo"; \
-@MUDFLAP_FALSE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
-@MUDFLAP_FALSE@ fi
-
-@MUDFLAP_FALSE@install: install-am libasm.so
-@MUDFLAP_FALSE@ $(mkinstalldirs) $(DESTDIR)$(libdir)
-@MUDFLAP_FALSE@ $(INSTALL_PROGRAM) libasm.so $(DESTDIR)$(libdir)/libasm-$(PACKAGE_VERSION).so
-@MUDFLAP_FALSE@ ln -fs libasm-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir)/libasm.so.$(VERSION)
-@MUDFLAP_FALSE@ ln -fs libasm.so.$(VERSION) $(DESTDIR)$(libdir)/libasm.so
-
-@MUDFLAP_FALSE@uninstall: uninstall-am
-@MUDFLAP_FALSE@ rm -f $(DESTDIR)$(libdir)/libasm-$(PACKAGE_VERSION).so
-@MUDFLAP_FALSE@ rm -f $(DESTDIR)$(libdir)/libasm.so.$(VERSION)
-@MUDFLAP_FALSE@ rm -f $(DESTDIR)$(libdir)/libasm.so
-@MUDFLAP_FALSE@ rmdir --ignore-fail-on-non-empty $(DESTDIR)$(includedir)/elfutils
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/libasm/asm_abort.c b/libasm/asm_abort.c
deleted file mode 100644
index d12c163..0000000
--- a/libasm/asm_abort.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Abort operations on the assembler context, free all resources.
- Copyright (C) 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <unistd.h>
-
-#include <libasmP.h>
-#include <libelf.h>
-
-
-int
-asm_abort (ctx)
- AsmCtx_t *ctx;
-{
- if (ctx == NULL)
- /* Something went wrong earlier. */
- return -1;
-
- if (likely (! ctx->textp))
- /* First free the ELF file. We don't care about the result. */
- (void) elf_end (ctx->out.elf);
-
- /* Now close the temporary file and remove it. */
- if (ctx->fd != -1)
- (void) unlink (ctx->tmp_fname);
-
- /* Free the resources. */
- __libasm_finictx (ctx);
-
- return 0;
-}
diff --git a/libasm/asm_addint16.c b/libasm/asm_addint16.c
deleted file mode 100644
index 5aa8d60..0000000
--- a/libasm/asm_addint16.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/* Add integer to a section.
- Copyright (C) 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#define SIZE 16
-
-#include "asm_addint8.c"
diff --git a/libasm/asm_addint32.c b/libasm/asm_addint32.c
deleted file mode 100644
index 25c50ce..0000000
--- a/libasm/asm_addint32.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/* Add integer to a section.
- Copyright (C) 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#define SIZE 32
-
-#include "asm_addint8.c"
diff --git a/libasm/asm_addint64.c b/libasm/asm_addint64.c
deleted file mode 100644
index 9116d94..0000000
--- a/libasm/asm_addint64.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/* Add integer to a section.
- Copyright (C) 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#define SIZE 64
-
-#include "asm_addint8.c"
diff --git a/libasm/asm_addint8.c b/libasm/asm_addint8.c
deleted file mode 100644
index ff4376b..0000000
--- a/libasm/asm_addint8.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/* Add integer to a section.
- Copyright (C) 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <byteswap.h>
-#include <endian.h>
-#include <inttypes.h>
-#include <string.h>
-
-#include <libasmP.h>
-
-#ifndef SIZE
-# define SIZE 8
-#endif
-
-#define FCT(size) _FCT(size)
-#define _FCT(size) asm_addint##size
-#define TYPE(size) _TYPE(size)
-#define _TYPE(size) int##size##_t
-#define BSWAP(size) _BSWAP(size)
-#define _BSWAP(size) bswap_##size
-
-
-int
-FCT(SIZE) (asmscn, num)
- AsmScn_t *asmscn;
- TYPE(SIZE) num;
-{
- if (asmscn == NULL)
- return -1;
-
- if (asmscn->type == SHT_NOBITS && unlikely (num != 0))
- {
- __libasm_seterrno (ASM_E_TYPE);
- return -1;
- }
-
- if (unlikely (asmscn->ctx->textp))
- {
- // XXX Needs to use backend specified pseudo-ops
- if (SIZE == 8)
- fprintf (asmscn->ctx->out.file, "\t.byte\t%" PRId8 "\n", (int8_t) num);
- else if (SIZE == 16)
- fprintf (asmscn->ctx->out.file, "\t.value\t%" PRId16 "\n",
- (int16_t) num);
- else if (SIZE == 32)
- fprintf (asmscn->ctx->out.file, "\t.long\t%" PRId32 "\n",
- (int32_t) num);
- else
- {
- // XXX This is not necessary for 64-bit machines
- bool is_leb = (elf_getident (asmscn->ctx->out.elf, NULL)[EI_DATA]
- == ELFDATA2LSB);
-
- fprintf (asmscn->ctx->out.file,
- "\t.long\t%" PRId32 "\n\t.long\t%" PRId32 "\n",
- (int32_t) (is_leb
- ? num % 0x100000000ll : num / 0x100000000ll),
- (int32_t) (is_leb
- ? num / 0x100000000ll : num % 0x100000000ll));
- }
- }
- else
- {
-#if SIZE > 8
- bool is_leb = (elf_getident (asmscn->ctx->out.elf, NULL)[EI_DATA]
- == ELFDATA2LSB);
-#endif
- TYPE(SIZE) var = num;
-
- /* Make sure we have enough room. */
- if (__libasm_ensure_section_space (asmscn, SIZE / 8) != 0)
- return -1;
-
-#if SIZE > 8
- if ((BYTE_ORDER == LITTLE_ENDIAN && !is_leb)
- || (BYTE_ORDER == BIG_ENDIAN && is_leb))
- var = BSWAP(SIZE) (var);
-#endif
-
- /* Copy the variable value. */
- if (likely (asmscn->type == SHT_NOBITS))
- memcpy (&asmscn->content->data[asmscn->content->len], &var, SIZE / 8);
-
- /* Adjust the pointer in the data buffer. */
- asmscn->content->len += SIZE / 8;
-
- /* Increment the offset in the (sub)section. */
- asmscn->offset += SIZE / 8;
- }
-
- return 0;
-}
-INTDEF(FCT(SIZE))
diff --git a/libasm/asm_addsleb128.c b/libasm/asm_addsleb128.c
deleted file mode 100644
index 614ba69..0000000
--- a/libasm/asm_addsleb128.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/* Add signed little endian base 128 integer to a section.
- Copyright (C) 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <inttypes.h>
-#include <string.h>
-
-#include <libasmP.h>
-
-
-int
-asm_addsleb128 (asmscn, num)
- AsmScn_t *asmscn;
- int32_t num;
-{
- if (asmscn == NULL)
- return -1;
-
- if (asmscn->type == SHT_NOBITS && unlikely (num != 0))
- {
- __libasm_seterrno (ASM_E_TYPE);
- return -1;
- }
-
- if (unlikely (asmscn->ctx->textp))
- fprintf (asmscn->ctx->out.file, "\t.sleb128\t%" PRId32 "\n", num);
- else
- {
- char tmpbuf[(sizeof (num) * 8 + 6) / 7];
- char *dest = tmpbuf;
- uint32_t byte;
- int32_t endval = num >> 31;
-
- if (num == 0)
- byte = 0;
- else
- while (1)
- {
- byte = num & 0x7f;
-
- num >>= 7;
- if (num == endval)
- /* This is the last byte. */
- break;
-
- *dest++ = byte | 0x80;
- }
-
- *dest++ = byte;
-
- /* Number of bytes produced. */
- size_t nbytes = dest - tmpbuf;
-
- /* Make sure we have enough room. */
- if (__libasm_ensure_section_space (asmscn, nbytes) != 0)
- return -1;
-
- /* Copy the bytes. */
- if (likely (asmscn->type != SHT_NOBITS))
- memcpy (&asmscn->content->data[asmscn->content->len], tmpbuf, nbytes);
-
- /* Adjust the pointer in the data buffer. */
- asmscn->content->len += nbytes;
-
- /* Increment the offset in the (sub)section. */
- asmscn->offset += nbytes;
- }
-
- return 0;
-}
diff --git a/libasm/asm_addstrz.c b/libasm/asm_addstrz.c
deleted file mode 100644
index ddd0354..0000000
--- a/libasm/asm_addstrz.c
+++ /dev/null
@@ -1,125 +0,0 @@
-/* Add string to a section.
- Copyright (C) 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <ctype.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <libasmP.h>
-
-
-/* Add zero terminated string STR of size LEN to (sub)section ASMSCN. */
-int
-asm_addstrz (asmscn, str, len)
- AsmScn_t *asmscn;
- const char *str;
- size_t len;
-{
- if (asmscn == NULL)
- return -1;
-
- if (unlikely (asmscn->type == SHT_NOBITS))
- {
- if (len == 0)
- {
- if (str[0] != '\0')
- {
- __libasm_seterrno (ASM_E_TYPE);
- return -1;
- }
- }
- else
- {
- size_t cnt;
-
- for (cnt = 0; cnt < len; ++cnt)
- if (str[cnt] != '\0')
- {
- __libasm_seterrno (ASM_E_TYPE);
- return -1;
- }
- }
- }
-
- if (len == 0)
- len = strlen (str) + 1;
-
- if (unlikely (asmscn->ctx->textp))
- {
- bool nextline = true;
-
- do
- {
- if (nextline)
- {
- fputs ("\t.string\t\"", asmscn->ctx->out.file);
- nextline = false;
- }
-
- if (*str == '\0')
- fputs ("\\000", asmscn->ctx->out.file);
- else if (! isascii (*str))
- fprintf (asmscn->ctx->out.file, "\\%03o",
- (unsigned int) *((unsigned char *)str));
- else if (*str == '\\')
- fputs ("\\\\", asmscn->ctx->out.file);
- else if (*str == '\n')
- {
- fputs ("\\n\"", asmscn->ctx->out.file);
- nextline = true;
- }
- else
- fputc (*str, asmscn->ctx->out.file);
-
- ++str;
- }
- while (--len > 0 && (len > 1 || *str != '\0'));
-
- if (! nextline)
- fputs ("\"\n", asmscn->ctx->out.file);
- }
- else
- {
- /* Make sure there is enough room. */
- if (__libasm_ensure_section_space (asmscn, len) != 0)
- return -1;
-
- /* Copy the string. */
- memcpy (&asmscn->content->data[asmscn->content->len], str, len);
-
- /* Adjust the pointer in the data buffer. */
- asmscn->content->len += len;
-
- /* Increment the offset in the (sub)section. */
- asmscn->offset += len;
- }
-
- return 0;
-}
diff --git a/libasm/asm_adduint16.c b/libasm/asm_adduint16.c
deleted file mode 100644
index 063e5d4..0000000
--- a/libasm/asm_adduint16.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/* Add unsigned integer to a section.
- Copyright (C) 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#define SIZE 16
-
-#include "asm_adduint8.c"
diff --git a/libasm/asm_adduint32.c b/libasm/asm_adduint32.c
deleted file mode 100644
index 6dc814f..0000000
--- a/libasm/asm_adduint32.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/* Add unsigned integer to a section.
- Copyright (C) 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#define SIZE 32
-
-#include "asm_adduint8.c"
diff --git a/libasm/asm_adduint64.c b/libasm/asm_adduint64.c
deleted file mode 100644
index 71bb16a..0000000
--- a/libasm/asm_adduint64.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/* Add unsigned integer to a section.
- Copyright (C) 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#define SIZE 64
-
-#include "asm_adduint8.c"
diff --git a/libasm/asm_adduint8.c b/libasm/asm_adduint8.c
deleted file mode 100644
index c880153..0000000
--- a/libasm/asm_adduint8.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Add unsigned integer to a section.
- Copyright (C) 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libasmP.h>
-
-#ifndef SIZE
-# define SIZE 8
-#endif
-
-#define UFCT(size) _UFCT(size)
-#define _UFCT(size) asm_adduint##size
-#define FCT(size) _FCT(size)
-#define _FCT(size) asm_addint##size
-#define UTYPE(size) _UTYPE(size)
-#define _UTYPE(size) uint##size##_t
-#define TYPE(size) _TYPE(size)
-#define _TYPE(size) int##size##_t
-
-
-int
-UFCT(SIZE) (asmscn, num)
- AsmScn_t *asmscn;
- UTYPE(SIZE) num;
-{
- return INTUSE(FCT(SIZE)) (asmscn, (TYPE(SIZE)) num);
-}
diff --git a/libasm/asm_adduleb128.c b/libasm/asm_adduleb128.c
deleted file mode 100644
index 042c76b..0000000
--- a/libasm/asm_adduleb128.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/* Add integer to a section.
- Copyright (C) 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <inttypes.h>
-#include <string.h>
-
-#include "libasmP.h"
-
-
-int
-asm_adduleb128 (asmscn, num)
- AsmScn_t *asmscn;
- uint32_t num;
-{
- if (asmscn == NULL)
- return -1;
-
- if (asmscn->type == SHT_NOBITS && unlikely (num != 0))
- {
- __libasm_seterrno (ASM_E_TYPE);
- return -1;
- }
-
- if (unlikely (asmscn->ctx->textp))
- fprintf (asmscn->ctx->out.file, "\t.uleb128\t%" PRIu32 "\n", num);
- else
- {
- char tmpbuf[(sizeof (num) * 8 + 6) / 7];
- char *dest = tmpbuf;
- uint32_t byte;
-
- while (1)
- {
- byte = num & 0x7f;
-
- num >>= 7;
- if (num == 0)
- /* This is the last byte. */
- break;
-
- *dest++ = byte | 0x80;
- }
-
- *dest++ = byte;
-
- /* Number of bytes produced. */
- size_t nbytes = dest - tmpbuf;
-
- /* Make sure we have enough room. */
- if (__libasm_ensure_section_space (asmscn, nbytes) != 0)
- return -1;
-
- /* Copy the bytes. */
- if (likely (asmscn->type != SHT_NOBITS))
- memcpy (&asmscn->content->data[asmscn->content->len], tmpbuf, nbytes);
-
- /* Adjust the pointer in the data buffer. */
- asmscn->content->len += nbytes;
-
- /* Increment the offset in the (sub)section. */
- asmscn->offset += nbytes;
- }
-
- return 0;
-}
diff --git a/libasm/asm_align.c b/libasm/asm_align.c
deleted file mode 100644
index b5a573b..0000000
--- a/libasm/asm_align.c
+++ /dev/null
@@ -1,176 +0,0 @@
-/* Align section.
- Copyright (C) 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <inttypes.h>
-#include <stdlib.h>
-#include <sys/param.h>
-
-#include <libasmP.h>
-#include <system.h>
-
-
-int
-asm_align (asmscn, value)
- AsmScn_t *asmscn;
- GElf_Word value;
-{
- if (asmscn == NULL)
- /* An earlier error. */
- return -1;
-
- /* The alignment value must be a power of two. */
- if (unlikely (! powerof2 (value)))
- {
- __libasm_seterrno (ASM_E_INVALID);
- return -1;
- }
-
- if (unlikely (asmscn->ctx->textp))
- {
- fprintf (asmscn->ctx->out.file, "\t.align %" PRId32 ", ",
- (int32_t) value);
- if (asmscn->pattern->len == 1)
- fprintf (asmscn->ctx->out.file, "%02hhx\n", asmscn->pattern->bytes[0]);
- else
- {
- fputc_unlocked ('"', asmscn->ctx->out.file);
-
- for (size_t cnt = 0; cnt < asmscn->pattern->len; ++cnt)
- fprintf (asmscn->ctx->out.file, "\\x%02hhx",
- asmscn->pattern->bytes[cnt]);
-
- fputs_unlocked ("\"\n", asmscn->ctx->out.file);
- }
- return 0;
- }
-
- rwlock_wrlock (asmscn->ctx->lock);
-
- int result = 0;
-
- /* Fillbytes necessary? */
- if ((asmscn->offset & (value - 1)) != 0)
- {
- /* Add fillbytes. */
- size_t cnt = value - (asmscn->offset & (value - 1));
-
- /* Ensure there is enough room to add the fill bytes. */
- result = __libasm_ensure_section_space (asmscn, cnt);
- if (result != 0)
- goto out;
-
- /* Fill in the bytes. We align the pattern according to the
- current offset. */
- size_t byteptr = asmscn->offset % asmscn->pattern->len;
-
- /* Update the total size. */
- asmscn->offset += cnt;
-
- do
- {
- asmscn->content->data[asmscn->content->len++]
- = asmscn->pattern->bytes[byteptr++];
-
- if (byteptr == asmscn->pattern->len)
- byteptr = 0;
- }
- while (--cnt > 0);
- }
-
- /* Remember the maximum alignment for this subsection. */
- if (asmscn->max_align < value)
- {
- asmscn->max_align = value;
-
- /* Update the parent as well (if it exists). */
- if (asmscn->subsection_id != 0)
- {
- rwlock_wrlock (asmscn->data.up->ctx->lock);
-
- if (asmscn->data.up->max_align < value)
- asmscn->data.up->max_align = value;
-
- rwlock_unlock (asmscn->data.up->ctx->lock);
- }
- }
-
- out:
- rwlock_unlock (asmscn->ctx->lock);
-
- return result;
-}
-
-
-/* Ensure there are at least LEN bytes available in the output buffer
- for ASMSCN. */
-int
-__libasm_ensure_section_space (asmscn, len)
- AsmScn_t *asmscn;
- size_t len;
-{
- /* The blocks with the section content are kept in a circular
- single-linked list. */
- size_t size;
-
- if (asmscn->content == NULL)
- {
- /* This is the first block. */
- size = MAX (2 * len, 960);
-
- asmscn->content = (struct AsmData *) malloc (sizeof (struct AsmData)
- + size);
- if (asmscn->content == NULL)
- return -1;
-
- asmscn->content->next = asmscn->content;
- }
- else
- {
- struct AsmData *newp;
-
- if (asmscn->content->maxlen - asmscn->content->len >= len)
- /* Nothing to do, there is enough space. */
- return 0;
-
- size = MAX (2 *len, MIN (32768, 2 * asmscn->offset));
-
- newp = (struct AsmData *) malloc (sizeof (struct AsmData) + size);
- if (newp == NULL)
- return -1;
-
- newp->next = asmscn->content->next;
- asmscn->content = asmscn->content->next = newp;
- }
-
- asmscn->content->len = 0;
- asmscn->content->maxlen = size;
-
- return 0;
-}
diff --git a/libasm/asm_begin.c b/libasm/asm_begin.c
deleted file mode 100644
index b8094dc..0000000
--- a/libasm/asm_begin.c
+++ /dev/null
@@ -1,181 +0,0 @@
-/* Create descriptor for assembling.
- Copyright (C) 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdio_ext.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <gelf.h>
-#include "libasmP.h"
-#include <system.h>
-
-
-static AsmCtx_t *
-prepare_text_output (AsmCtx_t *result)
-{
- if (result->fd == -1)
- result->out.file = stdout;
- else
- {
- result->out.file = fdopen (result->fd, "a");
- if (result->out.file == NULL)
- {
- close (result->fd);
- free (result);
- result = NULL;
- }
-
- __fsetlocking (result->out.file, FSETLOCKING_BYCALLER);
- }
-
- return result;
-}
-
-
-static AsmCtx_t *
-prepare_binary_output (AsmCtx_t *result, Ebl *ebl)
-{
- GElf_Ehdr *ehdr;
- GElf_Ehdr ehdr_mem;
-
- /* Create the ELF descriptor for the file. */
- result->out.elf = elf_begin (result->fd, ELF_C_WRITE_MMAP, NULL);
- if (result->out.elf == NULL)
- {
- err_libelf:
- unlink (result->tmp_fname);
- close (result->fd);
- free (result);
- __libasm_seterrno (ASM_E_LIBELF);
- return NULL;
- }
-
- /* Create the ELF header for the output file. */
- int class = ebl_get_elfclass (ebl);
- if (gelf_newehdr (result->out.elf, class) == 0)
- goto err_libelf;
-
- ehdr = gelf_getehdr (result->out.elf, &ehdr_mem);
- /* If this failed we are in trouble. */
- assert (ehdr != NULL);
-
- /* We create an object file. */
- ehdr->e_type = ET_REL;
- /* Set the ELF version. */
- ehdr->e_version = EV_CURRENT;
-
- /* Use the machine, class, and endianess values from the Ebl descriptor. */
- ehdr->e_machine = ebl_get_elfmachine (ebl);
- ehdr->e_ident[EI_CLASS] = class;
- ehdr->e_ident[EI_DATA] = ebl_get_elfdata (ebl);
-
- memcpy (&ehdr->e_ident[EI_MAG0], ELFMAG, SELFMAG);
-
- /* Write the ELF header information back. */
- (void) gelf_update_ehdr (result->out.elf, ehdr);
-
- /* No section so far. */
- result->section_list = NULL;
-
- /* Initialize the hash table. */
- asm_symbol_tab_init (&result->symbol_tab, 67);
- result->nsymbol_tab = 0;
- /* And the string tables. */
- result->section_strtab = ebl_strtabinit (true);
- result->symbol_strtab = ebl_strtabinit (true);
-
- /* We have no section groups so far. */
- result->groups = NULL;
- result->ngroups = 0;
-
- return result;
-}
-
-
-AsmCtx_t *
-asm_begin (fname, ebl, textp)
- const char *fname;
- Ebl *ebl;
- bool textp;
-{
- if (fname == NULL && ! textp)
- return NULL;
-
- size_t fname_len = fname != NULL ? strlen (fname) : 0;
-
- /* Create the file descriptor. We do not generate the output file
- right away. Instead we create a temporary file in the same
- directory which, if everything goes alright, will replace a
- possibly existing file with the given name. */
- AsmCtx_t *result
- = (AsmCtx_t *) malloc (sizeof (AsmCtx_t) + 2 * fname_len + 9);
- if (result == NULL)
- return NULL;
-
- /* Initialize the lock. */
- rwlock_init (result->lock);
-
- if (fname != NULL)
- {
- /* Create the name of the temporary file. */
- result->fname = stpcpy (mempcpy (result->tmp_fname, fname, fname_len),
- ".XXXXXX") + 1;
- memcpy (result->fname, fname, fname_len + 1);
-
- /* Create the temporary file. */
- result->fd = mkstemp (result->tmp_fname);
- if (result->fd == -1)
- {
- int save_errno = errno;
- free (result);
- __libasm_seterrno (ASM_E_CANNOT_CREATE);
- errno = save_errno;
- return NULL;
- }
- }
- else
- result->fd = -1;
-
- /* Initialize the counter for temporary symbols. */
- result->tempsym_count = 0;
-
- /* Now we differentiate between textual and binary output. */
- result->textp = textp;
- if (textp)
- result = prepare_text_output (result);
- else
- result = prepare_binary_output (result, ebl);
-
- return result;
-}
diff --git a/libasm/asm_end.c b/libasm/asm_end.c
deleted file mode 100644
index 1d815fa..0000000
--- a/libasm/asm_end.c
+++ /dev/null
@@ -1,610 +0,0 @@
-/* Finalize operations on the assembler context, free all resources.
- Copyright (C) 2002, 2003, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <error.h>
-#include <libintl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/stat.h>
-
-#include <libasmP.h>
-#include <libelf.h>
-#include <system.h>
-
-
-static int
-text_end (AsmCtx_t *ctx __attribute__ ((unused)))
-{
- if (fclose (ctx->out.file) != 0)
- {
- __libasm_seterrno (ASM_E_IOERROR);
- return -1;
- }
-
- return 0;
-}
-
-
-static int
-binary_end (AsmCtx_t *ctx)
-{
- void *symtab = NULL;
- struct Ebl_Strent *symscn_strent = NULL;
- struct Ebl_Strent *strscn_strent = NULL;
- struct Ebl_Strent *xndxscn_strent = NULL;
- Elf_Scn *shstrscn;
- struct Ebl_Strent *shstrscn_strent;
- size_t shstrscnndx;
- size_t symscnndx = 0;
- size_t strscnndx = 0;
- size_t xndxscnndx = 0;
- Elf_Data *data;
- Elf_Data *shstrtabdata;
- Elf_Data *strtabdata = NULL;
- Elf_Data *xndxdata = NULL;
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr;
- GElf_Ehdr ehdr_mem;
- GElf_Ehdr *ehdr;
- AsmScn_t *asmscn;
- int result = 0;
-
- /* Iterate over the created sections and compute the offsets of the
- various subsections and fill in the content. */
- for (asmscn = ctx->section_list; asmscn != NULL; asmscn = asmscn->allnext)
- {
-#if 0
- Elf_Scn *scn = elf_getscn (ctx->out.elf, asmscn->data.main.scnndx);
-#else
- Elf_Scn *scn = asmscn->data.main.scn;
-#endif
- off_t offset = 0;
- AsmScn_t *asmsubscn = asmscn;
-
- do
- {
- struct AsmData *content = asmsubscn->content;
- bool first = true;
-
- offset = ((offset + asmsubscn->max_align - 1)
- & ~(asmsubscn->max_align - 1));
-
- /* Update the offset for this subsection. This field now
- stores the offset of the first by in this subsection. */
- asmsubscn->offset = offset;
-
- /* Note that the content list is circular. */
- if (content != NULL)
- do
- {
- Elf_Data *newdata = elf_newdata (scn);
-
- if (newdata == NULL)
- {
- __libasm_seterrno (ASM_E_LIBELF);
- return -1;
- }
-
- newdata->d_buf = content->data;
- newdata->d_type = ELF_T_BYTE;
- newdata->d_size = content->len;
- newdata->d_off = offset;
- newdata->d_align = first ? asmsubscn->max_align : 1;
-
- offset += content->len;
- }
- while ((content = content->next) != asmsubscn->content);
- }
- while ((asmsubscn = asmsubscn->subnext) != NULL);
- }
-
-
- /* Create the symbol table if necessary. */
- if (ctx->nsymbol_tab > 0)
- {
- /* Create the symbol table and string table section names. */
- symscn_strent = ebl_strtabadd (ctx->section_strtab, ".symtab", 8);
- strscn_strent = ebl_strtabadd (ctx->section_strtab, ".strtab", 8);
-
- /* Create the symbol string table section. */
- Elf_Scn *strscn = elf_newscn (ctx->out.elf);
- strtabdata = elf_newdata (strscn);
- shdr = gelf_getshdr (strscn, &shdr_mem);
- if (strtabdata == NULL || shdr == NULL)
- {
- __libasm_seterrno (ASM_E_LIBELF);
- return -1;
- }
- strscnndx = elf_ndxscn (strscn);
-
- ebl_strtabfinalize (ctx->symbol_strtab, strtabdata);
-
- shdr->sh_type = SHT_STRTAB;
- assert (shdr->sh_entsize == 0);
-
- (void) gelf_update_shdr (strscn, shdr);
-
- /* Create the symbol table section. */
- Elf_Scn *symscn = elf_newscn (ctx->out.elf);
- data = elf_newdata (symscn);
- shdr = gelf_getshdr (symscn, &shdr_mem);
- if (data == NULL || shdr == NULL)
- {
- __libasm_seterrno (ASM_E_LIBELF);
- return -1;
- }
- symscnndx = elf_ndxscn (symscn);
-
- /* We know how many symbols there will be in the symbol table. */
- data->d_size = gelf_fsize (ctx->out.elf, ELF_T_SYM,
- ctx->nsymbol_tab + 1, EV_CURRENT);
- symtab = malloc (data->d_size);
- if (symtab == NULL)
- return -1;
- data->d_buf = symtab;
- data->d_type = ELF_T_SYM;
- data->d_off = 0;
-
- /* Clear the first entry. */
- GElf_Sym syment;
- memset (&syment, '\0', sizeof (syment));
- (void) gelf_update_sym (data, 0, &syment);
-
- /* Iterate over the symbol table. */
- void *runp = NULL;
- int ptr_local = 1; /* Start with index 1; zero remains unused. */
- int ptr_nonlocal = ctx->nsymbol_tab;
- uint32_t *xshndx = NULL;
- AsmSym_t *sym;
- while ((sym = asm_symbol_tab_iterate (&ctx->symbol_tab, &runp)) != NULL)
- if (asm_emit_symbol_p (ebl_string (sym->strent)))
- {
- assert (ptr_local <= ptr_nonlocal);
-
- syment.st_name = ebl_strtaboffset (sym->strent);
- syment.st_info = GELF_ST_INFO (sym->binding, sym->type);
- syment.st_other = 0;
- syment.st_value = sym->scn->offset + sym->offset;
- syment.st_size = sym->size;
-
- /* Add local symbols at the beginning, the other from
- the end. */
- int ptr = sym->binding == STB_LOCAL ? ptr_local++ : ptr_nonlocal--;
-
- /* Determine the section index. We have to handle the
- overflow correctly. */
- Elf_Scn *scn = (sym->scn->subsection_id == 0
- ? sym->scn->data.main.scn
- : sym->scn->data.up->data.main.scn);
-
- Elf32_Word ndx;
- if (unlikely (scn == ASM_ABS_SCN))
- ndx = SHN_ABS;
- else if (unlikely (scn == ASM_COM_SCN))
- ndx = SHN_COMMON;
- else if (unlikely ((ndx = elf_ndxscn (scn)) >= SHN_LORESERVE))
- {
- if (unlikely (xshndx == NULL))
- {
- /* The extended section index section does not yet
- exist. */
- Elf_Scn *xndxscn;
-
- xndxscn = elf_newscn (ctx->out.elf);
- xndxdata = elf_newdata (xndxscn);
- shdr = gelf_getshdr (xndxscn, &shdr_mem);
- if (xndxdata == NULL || shdr == NULL)
- {
- __libasm_seterrno (ASM_E_LIBELF);
- return -1;
- }
- xndxscnndx = elf_ndxscn (xndxscn);
-
- shdr->sh_type = SHT_SYMTAB_SHNDX;
- shdr->sh_entsize = sizeof (Elf32_Word);
- shdr->sh_addralign = sizeof (Elf32_Word);
- shdr->sh_link = symscnndx;
-
- (void) gelf_update_shdr (xndxscn, shdr);
-
- xndxscn_strent = ebl_strtabadd (ctx->section_strtab,
- ".symtab_shndx", 14);
-
- /* Note that using 'elf32_fsize' instead of
- 'gelf_fsize' here is correct. */
- xndxdata->d_size = elf32_fsize (ELF_T_WORD,
- ctx->nsymbol_tab + 1,
- EV_CURRENT);
- xshndx = xndxdata->d_buf = calloc (1, xndxdata->d_size);
- if (xshndx == NULL)
- return -1;
- /* Using ELF_T_WORD here relies on the fact that the
- 32- and 64-bit types are the same size. */
- xndxdata->d_type = ELF_T_WORD;
- xndxdata->d_off = 0;
- }
-
- /* Store the real section index in the extended setion
- index table. */
- assert ((size_t) ptr < ctx->nsymbol_tab + 1);
- xshndx[ptr] = ndx;
-
- /* And signal that this happened. */
- ndx = SHN_XINDEX;
- }
- syment.st_shndx = ndx;
-
- /* Remember where we put the symbol. */
- sym->symidx = ptr;
-
- (void) gelf_update_sym (data, ptr, &syment);
- }
-
- assert (ptr_local == ptr_nonlocal + 1);
-
- shdr->sh_type = SHT_SYMTAB;
- shdr->sh_link = strscnndx;
- shdr->sh_info = ptr_local;
- shdr->sh_entsize = gelf_fsize (ctx->out.elf, ELF_T_SYM, 1, EV_CURRENT);
- shdr->sh_addralign = gelf_fsize (ctx->out.elf, ELF_T_ADDR, 1,
- EV_CURRENT);
-
- (void) gelf_update_shdr (symscn, shdr);
- }
-
-
- /* Create the section header string table section and fill in the
- references in the section headers. */
- shstrscn = elf_newscn (ctx->out.elf);
- shstrtabdata = elf_newdata (shstrscn);
- shdr = gelf_getshdr (shstrscn, &shdr_mem);
- if (shstrscn == NULL || shstrtabdata == NULL || shdr == NULL)
- {
- __libasm_seterrno (ASM_E_LIBELF);
- return -1;
- }
-
-
- /* Add the name of the section header string table. */
- shstrscn_strent = ebl_strtabadd (ctx->section_strtab, ".shstrtab", 10);
-
- ebl_strtabfinalize (ctx->section_strtab, shstrtabdata);
-
- shdr->sh_type = SHT_STRTAB;
- assert (shdr->sh_entsize == 0);
- shdr->sh_name = ebl_strtaboffset (shstrscn_strent);
-
- (void) gelf_update_shdr (shstrscn, shdr);
-
-
- /* Create the section groups. */
- if (ctx->groups != NULL)
- {
- AsmScnGrp_t *runp = ctx->groups->next;
-
- do
- {
- Elf_Scn *scn;
- Elf32_Word *grpdata;
-
- scn = runp->scn;
- assert (scn != NULL);
- shdr = gelf_getshdr (scn, &shdr_mem);
- assert (shdr != NULL);
-
- data = elf_newdata (scn);
- if (data == NULL)
- {
- __libasm_seterrno (ASM_E_LIBELF);
- return -1;
- }
-
- /* It is correct to use 'elf32_fsize' instead of 'gelf_fsize'
- here. */
- data->d_size = elf32_fsize (ELF_T_WORD, runp->nmembers + 1,
- EV_CURRENT);
- grpdata = data->d_buf = malloc (data->d_size);
- if (grpdata == NULL)
- return -1;
- data->d_type = ELF_T_WORD;
- data->d_off = 0;
- data->d_align = elf32_fsize (ELF_T_WORD, 1, EV_CURRENT);
-
- /* The first word of the section is filled with the flag word. */
- *grpdata++ = runp->flags;
-
- if (runp->members != NULL)
- {
- AsmScn_t *member = runp->members->data.main.next_in_group;
-
- do
- {
- /* Only sections, not subsections, can be registered
- as member of a group. The subsections get
- automatically included. */
- assert (member->subsection_id == 0);
-
- *grpdata++ = elf_ndxscn (member->data.main.scn);
- }
- while ((member = member->data.main.next_in_group)
- != runp->members->data.main.next_in_group);
- }
-
- /* Construct the section header. */
- shdr->sh_name = ebl_strtaboffset (runp->strent);
- shdr->sh_type = SHT_GROUP;
- shdr->sh_flags = 0;
- shdr->sh_link = symscnndx;
- /* If the user did not specify a signature we use the initial
- empty symbol in the symbol table as the signature. */
- shdr->sh_info = (runp->signature != NULL
- ? runp->signature->symidx : 0);
-
- (void) gelf_update_shdr (scn, shdr);
- }
- while ((runp = runp->next) != ctx->groups->next);
- }
-
-
- /* Add the name to the symbol section. */
- if (likely (symscnndx != 0))
- {
- Elf_Scn *scn = elf_getscn (ctx->out.elf, symscnndx);
-
- shdr = gelf_getshdr (scn, &shdr_mem);
-
- shdr->sh_name = ebl_strtaboffset (symscn_strent);
-
- (void) gelf_update_shdr (scn, shdr);
-
-
- /* Add the name to the string section. */
- assert (strscnndx != 0);
- scn = elf_getscn (ctx->out.elf, strscnndx);
-
- shdr = gelf_getshdr (scn, &shdr_mem);
-
- shdr->sh_name = ebl_strtaboffset (strscn_strent);
-
- (void) gelf_update_shdr (scn, shdr);
-
-
- /* Add the name to the extended symbol index section. */
- if (xndxscnndx != 0)
- {
- scn = elf_getscn (ctx->out.elf, xndxscnndx);
-
- shdr = gelf_getshdr (scn, &shdr_mem);
-
- shdr->sh_name = ebl_strtaboffset (xndxscn_strent);
-
- (void) gelf_update_shdr (scn, shdr);
- }
- }
-
-
- /* Iterate over the created sections and fill in the names. */
- for (asmscn = ctx->section_list; asmscn != NULL; asmscn = asmscn->allnext)
- {
- shdr = gelf_getshdr (asmscn->data.main.scn, &shdr_mem);
- /* This better should not fail. */
- assert (shdr != NULL);
-
- shdr->sh_name = ebl_strtaboffset (asmscn->data.main.strent);
-
- /* We now know the maximum alignment. */
- shdr->sh_addralign = asmscn->max_align;
-
- (void) gelf_update_shdr (asmscn->data.main.scn, shdr);
- }
-
- /* Put the reference to the section header string table in the ELF
- header. */
- ehdr = gelf_getehdr (ctx->out.elf, &ehdr_mem);
- assert (ehdr != NULL);
-
- shstrscnndx = elf_ndxscn (shstrscn);
- if (unlikely (shstrscnndx > SHN_HIRESERVE)
- || unlikely (shstrscnndx == SHN_XINDEX))
- {
- /* The index of the section header string sectio is too large. */
- Elf_Scn *scn = elf_getscn (ctx->out.elf, 0);
-
- /* Get the header for the zeroth section. */
- shdr = gelf_getshdr (scn, &shdr_mem);
- /* This better does not fail. */
- assert (shdr != NULL);
-
- /* The sh_link field of the zeroth section header contains the value. */
- shdr->sh_link = shstrscnndx;
-
- (void) gelf_update_shdr (scn, shdr);
-
- /* This is the sign for the overflow. */
- ehdr->e_shstrndx = SHN_XINDEX;
- }
- else
- ehdr->e_shstrndx = elf_ndxscn (shstrscn);
-
- gelf_update_ehdr (ctx->out.elf, ehdr);
-
- /* Write out the ELF file. */
- if (unlikely (elf_update (ctx->out.elf, ELF_C_WRITE_MMAP)) < 0)
- {
- __libasm_seterrno (ASM_E_LIBELF);
- result = -1;
- }
-
- /* We do not need the section header and symbol string tables anymore. */
- free (shstrtabdata->d_buf);
- if (strtabdata != NULL)
- free (strtabdata->d_buf);
- /* We might have allocated the extended symbol table index. */
- if (xndxdata != NULL)
- free (xndxdata->d_buf);
-
- /* Free section groups memory. */
- AsmScnGrp_t *scngrp = ctx->groups;
- if (scngrp != NULL)
- do
- free (elf_getdata (scngrp->scn, NULL)->d_buf);
- while ((scngrp = scngrp->next) != ctx->groups);
-
- /* Finalize the ELF handling. */
- if (unlikely (elf_end (ctx->out.elf)) != 0)
- {
- __libasm_seterrno (ASM_E_LIBELF);
- result = -1;
- }
-
- /* Free the temporary resources. */
- free (symtab);
-
- return result;
-}
-
-
-int
-asm_end (ctx)
- AsmCtx_t *ctx;
-{
- int result;
-
- if (ctx == NULL)
- /* Something went wrong earlier. */
- return -1;
-
- result = unlikely (ctx->textp) ? text_end (ctx) : binary_end (ctx);
- if (result != 0)
- return result;
-
- /* Make the new file globally readable and user/group-writable. */
- if (fchmod (ctx->fd, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH) != 0)
- {
- __libasm_seterrno (ASM_E_CANNOT_CHMOD);
- return -1;
- }
-
- /* Rename output file. */
- if (rename (ctx->tmp_fname, ctx->fname) != 0)
- {
- __libasm_seterrno (ASM_E_CANNOT_RENAME);
- return -1;
- }
-
- /* Free the resources. */
- __libasm_finictx (ctx);
-
- return 0;
-}
-
-
-static void
-free_section (AsmScn_t *scnp)
-{
- void *oldp;
-
- if (scnp->subnext != NULL)
- free_section (scnp->subnext);
-
- struct AsmData *data = scnp->content;
- if (data != NULL)
- do
- {
- oldp = data;
- data = data->next;
- free (oldp);
- }
- while (oldp != scnp->content);
-
- free (scnp);
-}
-
-
-void
-__libasm_finictx (ctx)
- AsmCtx_t *ctx;
-{
- /* Iterate through section table and free individual entries. */
- AsmScn_t *scn = ctx->section_list;
- while (scn != NULL)
- {
- AsmScn_t *oldp = scn;
- scn = scn->allnext;
- free_section (oldp);
- }
-
- /* Free the resources of the symbol table. */
- void *runp = NULL;
- AsmSym_t *sym;
- while ((sym = asm_symbol_tab_iterate (&ctx->symbol_tab, &runp)) != NULL)
- free (sym);
- asm_symbol_tab_free (&ctx->symbol_tab);
-
-
- /* Free section groups. */
- AsmScnGrp_t *scngrp = ctx->groups;
- if (scngrp != NULL)
- do
- {
- AsmScnGrp_t *oldp = scngrp;
-
- scngrp = scngrp->next;
- free (oldp);
- }
- while (scngrp != ctx->groups);
-
-
- if (unlikely (ctx->textp))
- {
- /* Close the stream. */
- fclose (ctx->out.file);
- }
- else
- {
- /* Close the output file. */
- /* XXX We should test for errors here but what would we do if we'd
- find any. */
- (void) close (ctx->fd);
-
- /* And the string tables. */
- ebl_strtabfree (ctx->section_strtab);
- ebl_strtabfree (ctx->symbol_strtab);
- }
-
- /* Initialize the lock. */
- rwlock_fini (ctx->lock);
-
- /* Finally free the data structure. */
- free (ctx);
-}
diff --git a/libasm/asm_error.c b/libasm/asm_error.c
deleted file mode 100644
index 29c54cb..0000000
--- a/libasm/asm_error.c
+++ /dev/null
@@ -1,197 +0,0 @@
-/* Error handling in libasm.
- Copyright (C) 2002, 2004, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libintl.h>
-#include <stdbool.h>
-#include <stdlib.h>
-
-#include "libasmP.h"
-
-
-/* This is the key for the thread specific memory. */
-static tls_key_t key;
-
-/* The error number. Used in non-threaded programs. */
-static int global_error;
-static bool threaded;
-/* We need to initialize the thread-specific data. */
-once_define (static, once);
-
-/* The initialization and destruction functions. */
-static void init (void);
-static void free_key_mem (void *mem);
-
-
-int
-asm_errno (void)
-{
- int result;
-
- /* If we have not yet initialized the buffer do it now. */
- once_execute (once, init);
-
- if (threaded)
- {
- /* We have a key. Use it to get the thread-specific buffer. */
- int *buffer = getspecific (key);
- if (buffer == NULL)
- {
- /* No buffer allocated so far. */
- buffer = (int *) malloc (sizeof (int));
- if (buffer == NULL)
- /* No more memory available. We use the static buffer. */
- buffer = &global_error;
-
- setspecific (key, buffer);
-
- *buffer = 0;
- }
-
- result = *buffer;
- *buffer = ASM_E_NOERROR;
- return result;
- }
-
- result = global_error;
- global_error = ASM_E_NOERROR;
- return result;
-}
-
-
-void
-__libasm_seterrno (value)
- int value;
-{
- /* If we have not yet initialized the buffer do it now. */
- once_execute (once, init);
-
- if (threaded)
- {
- /* We have a key. Use it to get the thread-specific buffer. */
- int *buffer = getspecific (key);
- if (buffer == NULL)
- {
- /* No buffer allocated so far. */
- buffer = malloc (sizeof (int));
- if (buffer == NULL)
- /* No more memory available. We use the static buffer. */
- buffer = &global_error;
-
- setspecific (key, buffer);
- }
-
- *buffer = value;
- }
-
- global_error = value;
-}
-
-
-/* Return the appropriate message for the error. */
-static const char *msgs[ASM_E_NUM] =
-{
- [ASM_E_NOERROR] = N_("no error"),
- [ASM_E_NOMEM] = N_("out of memory"),
- [ASM_E_CANNOT_CREATE] = N_("cannot create output file"),
- [ASM_E_INVALID] = N_("invalid parameter"),
- [ASM_E_CANNOT_CHMOD] = N_("cannot change mode of output file"),
- [ASM_E_CANNOT_RENAME] = N_("cannot rename output file"),
- [ASM_E_DUPLSYM] = N_("duplicate symbol"),
- [ASM_E_TYPE] = N_("invalid section type for operation"),
- [ASM_E_IOERROR] = N_("error during output of data"),
- [ASM_E_ENOSUP] = N_("no backend support available"),
-};
-
-const char *
-asm_errmsg (error)
- int error;
-{
- int last_error;
-
- /* If we have not yet initialized the buffer do it now. */
- once_execute (once, init);
-
- if ((error == 0 || error == -1) && threaded)
- {
- /* We have a key. Use it to get the thread-specific buffer. */
- int *buffer = (int *) getspecific (key);
- if (buffer == NULL)
- {
- /* No buffer allocated so far. */
- buffer = (int *) malloc (sizeof (int));
- if (buffer == NULL)
- /* No more memory available. We use the static buffer. */
- buffer = &global_error;
-
- setspecific (key, buffer);
- *buffer = 0;
- }
-
- last_error = *buffer;
- }
- else
- last_error = global_error;
-
- if (error < -1)
- return _("unknown error");
- if (error == 0 && last_error == 0)
- /* No error. */
- return NULL;
-
- if (error != -1)
- last_error = error;
-
- if (last_error == ASM_E_LIBELF)
- return elf_errmsg (-1);
-
- return _(msgs[last_error]);
-}
-
-
-/* Free the thread specific data, this is done if a thread terminates. */
-static void
-free_key_mem (void *mem)
-{
- free (mem);
- setspecific (key, NULL);
-}
-
-
-/* Initialize the key for the global variable. */
-static void
-init (void)
-{
- // XXX Screw you, gcc4, the unused function attribute does not work.
- __asm ("" :: "r" (free_key_mem));
-
- if (key_create (&key, free_key_mem) == 0)
- /* Creating the key succeeded. */
- threaded = true;
-}
diff --git a/libasm/asm_fill.c b/libasm/asm_fill.c
deleted file mode 100644
index 66f7134..0000000
--- a/libasm/asm_fill.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/* Determine fill pattern for a section.
- Copyright (C) 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-
-#include <libasmP.h>
-#include <system.h>
-
-
-int
-asm_fill (asmscn, bytes, len)
- AsmScn_t *asmscn;
- void *bytes;
- size_t len;
-{
- struct FillPattern *pattern;
- struct FillPattern *old_pattern;
-
- if (asmscn == NULL)
- /* Some earlier error. */
- return -1;
-
- if (bytes == NULL)
- /* Use the default pattern. */
- pattern = (struct FillPattern *) __libasm_default_pattern;
- else
- {
- /* Allocate appropriate memory. */
- pattern = (struct FillPattern *) malloc (sizeof (struct FillPattern)
- + len);
- if (pattern == NULL)
- return -1;
-
- pattern->len = len;
- memcpy (pattern->bytes, bytes, len);
- }
-
- old_pattern = asmscn->pattern;
- asmscn->pattern = pattern;
-
- /* Free the old data structure if we have allocated it. */
- if (old_pattern != __libasm_default_pattern)
- free (old_pattern);
-
- return 0;
-}
diff --git a/libasm/asm_getelf.c b/libasm/asm_getelf.c
deleted file mode 100644
index df5cffd..0000000
--- a/libasm/asm_getelf.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Return ELF descriptor associated with the assembler context.
- Copyright (C) 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stddef.h>
-
-#include <libasmP.h>
-
-
-Elf *
-asm_getelf (ctx)
- AsmCtx_t *ctx;
-{
- return ctx != NULL ? ctx->out.elf : NULL;
-}
diff --git a/libasm/asm_newabssym.c b/libasm/asm_newabssym.c
deleted file mode 100644
index 1dacb01..0000000
--- a/libasm/asm_newabssym.c
+++ /dev/null
@@ -1,133 +0,0 @@
-/* Create new ABS symbol.
- Copyright (C) 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <inttypes.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <libasmP.h>
-#include <system.h>
-
-
-/* Object for special COMMON section. */
-static const AsmScn_t __libasm_abs_scn =
- {
- .data = {
- .main = {
- .scn = ASM_ABS_SCN
- }
- }
- };
-
-
-AsmSym_t *
-asm_newabssym (ctx, name, size, value, type, binding)
- AsmCtx_t *ctx;
- const char *name;
- GElf_Xword size;
- GElf_Addr value;
- int type;
- int binding;
-{
- AsmSym_t *result;
-
- if (ctx == NULL)
- /* Something went wrong before. */
- return NULL;
-
- /* Common symbols are public. Therefore the user must provide a
- name. */
- if (name == NULL)
- {
- __libasm_seterrno (ASM_E_INVALID);
- return NULL;
- }
-
- rwlock_wrlock (ctx->lock);
-
- result = (AsmSym_t *) malloc (sizeof (AsmSym_t));
- if (result == NULL)
- return NULL;
-
- result->scn = (AsmScn_t *) &__libasm_abs_scn;
- result->size = size;
- result->type = type;
- result->binding = binding;
- result->symidx = 0;
- result->strent = ebl_strtabadd (ctx->symbol_strtab, name, 0);
-
- /* The value of an ABS symbol must not be modified. Since there are
- no subsection and the initial offset of the section is 0 we can
- get the alignment recorded by storing it into the offset
- field. */
- result->offset = value;
-
- if (unlikely (ctx->textp))
- {
- /* An absolute symbol can be defined by giving a symbol a
- specific value. */
- if (binding == STB_GLOBAL)
- fprintf (ctx->out.file, "\t.globl %s\n", name);
- else if (binding == STB_WEAK)
- fprintf (ctx->out.file, "\t.weak %s\n", name);
-
- if (type == STT_OBJECT)
- fprintf (ctx->out.file, "\t.type %s,@object\n", name);
- else if (type == STT_FUNC)
- fprintf (ctx->out.file, "\t.type %s,@function\n", name);
-
- fprintf (ctx->out.file, "%s = %llu\n",
- name, (unsigned long long int) value);
-
- if (size != 0)
- fprintf (ctx->out.file, "\t.size %s, %llu\n",
- name, (unsigned long long int) size);
- }
- else
- {
- /* Put the symbol in the hash table so that we can later find it. */
- if (asm_symbol_tab_insert (&ctx->symbol_tab, elf_hash (name), result)
- != 0)
- {
- /* The symbol already exists. */
- __libasm_seterrno (ASM_E_DUPLSYM);
- free (result);
- result = NULL;
- }
- else if (name != NULL && asm_emit_symbol_p (name))
- /* Only count non-private symbols. */
- ++ctx->nsymbol_tab;
- }
-
- rwlock_unlock (ctx->lock);
-
- return result;
-}
diff --git a/libasm/asm_newcomsym.c b/libasm/asm_newcomsym.c
deleted file mode 100644
index 4a7144e..0000000
--- a/libasm/asm_newcomsym.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/* Create new COMMON symbol.
- Copyright (C) 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <inttypes.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <libasmP.h>
-#include <system.h>
-
-
-/* Object for special COMMON section. */
-static const AsmScn_t __libasm_com_scn =
- {
- .data = {
- .main = {
- .scn = ASM_COM_SCN
- }
- }
- };
-
-
-AsmSym_t *
-asm_newcomsym (ctx, name, size, align)
- AsmCtx_t *ctx;
- const char *name;
- GElf_Xword size;
- GElf_Addr align;
-{
- AsmSym_t *result;
-
- if (ctx == NULL)
- /* Something went wrong before. */
- return NULL;
-
- /* Common symbols are public. Therefore the user must provide a
- name. */
- if (name == NULL)
- {
- __libasm_seterrno (ASM_E_INVALID);
- return NULL;
- }
-
- rwlock_wrlock (ctx->lock);
-
- result = (AsmSym_t *) malloc (sizeof (AsmSym_t));
- if (result == NULL)
- return NULL;
-
- result->scn = (AsmScn_t *) &__libasm_com_scn;
- result->size = size;
- /* XXX Do we have to allow a different type? */
- result->type = STT_OBJECT;
- /* XXX Do we have to allow a different binding? */
- result->binding = STB_GLOBAL;
- result->symidx = 0;
- result->strent = ebl_strtabadd (ctx->symbol_strtab, name, 0);
-
- /* The value of a COM symbol is the alignment. Since there are no
- subsection and the initial offset of the section is 0 we can get
- the alignment recorded by storing it into the offset field. */
- result->offset = align;
-
- if (unlikely (ctx->textp))
- fprintf (ctx->out.file, "\t.comm %s, %" PRIuMAX ", %" PRIuMAX "\n",
- name, (uintmax_t) size, (uintmax_t) align);
- else
- {
- /* Put the symbol in the hash table so that we can later find it. */
- if (asm_symbol_tab_insert (&ctx->symbol_tab, elf_hash (name), result)
- != 0)
- {
- /* The symbol already exists. */
- __libasm_seterrno (ASM_E_DUPLSYM);
- free (result);
- result = NULL;
- }
- else if (name != NULL && asm_emit_symbol_p (name))
- /* Only count non-private symbols. */
- ++ctx->nsymbol_tab;
- }
-
- rwlock_unlock (ctx->lock);
-
- return result;
-}
diff --git a/libasm/asm_newscn.c b/libasm/asm_newscn.c
deleted file mode 100644
index 8a5e78b..0000000
--- a/libasm/asm_newscn.c
+++ /dev/null
@@ -1,215 +0,0 @@
-/* Create new section in output file.
- Copyright (C) 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <error.h>
-#include <libintl.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <libasmP.h>
-#include <libelf.h>
-#include <system.h>
-
-
-/* Memory for the default pattern. The type uses a flexible array
- which does work well with a static initializer. So we play some
- dirty tricks here. */
-static const struct
-{
- struct FillPattern pattern;
- char zero;
-} xdefault_pattern =
- {
- .pattern =
- {
- .len = 1
- },
- .zero = '\0'
- };
-const struct FillPattern *__libasm_default_pattern = &xdefault_pattern.pattern;
-
-
-static AsmScn_t *
-text_newscn (AsmScn_t *result, GElf_Word type, GElf_Xword flags)
-{
- /* Buffer where we construct the flag string. */
- char flagstr[sizeof (GElf_Xword) * 8 + 5];
- char *wp = flagstr;
- const char *typestr = "";
-
- /* Only write out the flag string if this is the first time the
- section is selected. Some assemblers cannot cope with the
- .section pseudo-op otherwise. */
- wp = stpcpy (wp, ", \"");
-
- if (flags & SHF_WRITE)
- *wp++ = 'w';
- if (flags & SHF_ALLOC)
- *wp++ = 'a';
- if (flags & SHF_EXECINSTR)
- *wp++ = 'x';
- if (flags & SHF_MERGE)
- *wp++ = 'M';
- if (flags & SHF_STRINGS)
- *wp++ = 'S';
- if (flags & SHF_LINK_ORDER)
- *wp++ = 'L';
-
- *wp++ = '"';
-
- if (type == SHT_PROGBITS)
- typestr = ",@progbits";
- else if (type == SHT_NOBITS)
- typestr = ",@nobits";
-
- /* Terminate the string. */
- *wp = '\0';
-
- fprintf (result->ctx->out.file, "\t.section \"%s\"%s%s\n",
- result->name, flagstr, typestr);
-
- return result;
-}
-
-
-static AsmScn_t *
-binary_newscn (AsmScn_t *result, GElf_Word type, GElf_Xword flags,
- size_t scnname_len)
-{
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr;
- Elf_Scn *scn;
-
- /* The initial subsection has the number zero. */
- result->subsection_id = 0;
-
- /* We start at offset zero. */
- result->offset = 0;
- /* And generic alignment. */
- result->max_align = 1;
-
- /* No output yet. */
- result->content = NULL;
-
- /* Put the default fill pattern in place. */
- result->pattern = (struct FillPattern *) __libasm_default_pattern;
-
- /* There are no subsections so far. */
- result->subnext = NULL;
-
- /* Add the name to the section header string table. */
- result->data.main.strent = ebl_strtabadd (result->ctx->section_strtab,
- result->name, scnname_len);
- assert (result->data.main.strent != NULL);
-
- /* Create the new ELF section. */
- result->data.main.scn = scn = elf_newscn (result->ctx->out.elf);
- if (scn == NULL)
- {
- free (result);
- __libasm_seterrno (ASM_E_LIBELF);
- return NULL;
- }
-
- /* Not part of a section group (yet). */
- result->data.main.next_in_group = NULL;
-
- /* Remember the flags. */
- shdr = gelf_getshdr (scn, &shdr_mem);
-
- shdr->sh_flags = flags;
- result->type = shdr->sh_type = type;
-
- (void) gelf_update_shdr (scn, shdr);
-
- return result;
-}
-
-
-AsmScn_t *
-asm_newscn (ctx, scnname, type, flags)
- AsmCtx_t *ctx;
- const char *scnname;
- GElf_Word type;
- GElf_Xword flags;
-{
- size_t scnname_len = strlen (scnname) + 1;
- unsigned long int hval;
- AsmScn_t *result;
-
- /* If no context is given there might be an earlier error. */
- if (ctx == NULL)
- return NULL;
-
- /* Check whether only flags are set which areselectable by the user. */
- if (unlikely ((flags & ~(SHF_WRITE | SHF_ALLOC | SHF_EXECINSTR | SHF_MERGE
- | SHF_STRINGS | SHF_LINK_ORDER)) != 0)
- /* We allow only two section types: data and data without file
- representation. */
- || (type != SHT_PROGBITS && unlikely (type != SHT_NOBITS)))
- {
- __libasm_seterrno (ASM_E_INVALID);
- return NULL;
- }
-
- hval = elf_hash (scnname);
-
- rwlock_wrlock (ctx->lock);
-
- /* This is a new section. */
- result = (AsmScn_t *) malloc (sizeof (AsmScn_t) + scnname_len);
- if (result != NULL)
- {
- /* Add the name. */
- memcpy (result->name, scnname, scnname_len);
-
- /* Add the reference to the context. */
- result->ctx = ctx;
-
- /* Perform operations according to output mode. */
- result = (unlikely (ctx->textp)
- ? text_newscn (result, type, flags)
- : binary_newscn (result, type, flags, scnname_len));
-
- /* If everything went well finally add the new section to the hash
- table. */
- if (result != NULL)
- {
- result->allnext = ctx->section_list;
- ctx->section_list = result;
- }
- }
-
- rwlock_unlock (ctx->lock);
-
- return result;
-}
-INTDEF(asm_newscn)
diff --git a/libasm/asm_newscn_ingrp.c b/libasm/asm_newscn_ingrp.c
deleted file mode 100644
index c17e22e..0000000
--- a/libasm/asm_newscn_ingrp.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/* Create new section, which is member of a group, in output file.
- Copyright (C) 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-
-#include "libasmP.h"
-
-
-AsmScn_t *
-asm_newscn_ingrp (ctx, scnname, type, flags, grp)
- AsmCtx_t *ctx;
- const char *scnname;
- GElf_Word type;
- GElf_Xword flags;
- AsmScnGrp_t *grp;
-{
- AsmScn_t *result = INTUSE (asm_newscn) (ctx, scnname, type, flags);
-
- if (likely (result != NULL))
- {
- /* We managed to create a section group. Add it to the section
- group. */
- if (grp->nmembers == 0)
- {
- assert (grp->members == NULL);
- grp->members = result->data.main.next_in_group = result;
- }
- else
- {
- result->data.main.next_in_group
- = grp->members->data.main.next_in_group;
- grp->members = grp->members->data.main.next_in_group = result;
- }
-
- ++grp->nmembers;
-
- /* Set the SHF_GROUP flag. */
- if (likely (! ctx->textp))
- {
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (result->data.main.scn, &shdr_mem);
-
- assert (shdr != NULL);
- shdr->sh_flags |= SHF_GROUP;
-
- (void) gelf_update_shdr (result->data.main.scn, shdr);
- }
- }
-
- return result;
-}
diff --git a/libasm/asm_newscngrp.c b/libasm/asm_newscngrp.c
deleted file mode 100644
index 1eed25c..0000000
--- a/libasm/asm_newscngrp.c
+++ /dev/null
@@ -1,102 +0,0 @@
-/* Create new section group.
- Copyright (C) 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "libasmP.h"
-#include <system.h>
-
-
-
-AsmScnGrp_t *
-asm_newscngrp (ctx, grpname, signature, flags)
- AsmCtx_t *ctx;
- const char *grpname;
- AsmSym_t *signature;
- Elf32_Word flags;
-{
- AsmScnGrp_t *result;
- size_t grpname_len = strlen (grpname) + 1;
-
- if (ctx == NULL)
- return NULL;
-
- if ((flags & ~GRP_COMDAT) != 0)
- {
- /* This is not a supported flag. */
- __libasm_seterrno (ASM_E_INVALID);
- return NULL;
- }
-
- result = (AsmScnGrp_t *) malloc (sizeof (AsmScnGrp_t) + grpname_len);
- if (result == NULL)
- return NULL;
-
- result->signature = signature;
- result->members = NULL;
- result->nmembers = 0;
- result->flags = flags;
-
- memcpy (result->name, grpname, grpname_len);
- result->strent = ebl_strtabadd (ctx->section_strtab, result->name,
- grpname_len);
-
- if (unlikely (ctx->textp))
- // XXX TBI. What is the format?
- abort ();
- else
- {
- result->scn = elf_newscn (ctx->out.elf);
- if (result->scn == NULL)
- {
- /* Couldn't allocate a new section. */
- __libasm_seterrno (ASM_E_LIBELF);
- free (result);
- return NULL;
- }
- }
-
- /* Enqueue is the context data structure. */
- if (ctx->ngroups == 0)
- {
- assert (ctx->groups == NULL);
- ctx->groups = result->next = result;
- }
- else
- {
- result->next = ctx->groups->next;
- ctx->groups = ctx->groups->next = result;
- }
- ++ctx->ngroups;
-
- return result;
-}
diff --git a/libasm/asm_newsubscn.c b/libasm/asm_newsubscn.c
deleted file mode 100644
index d1a86dd..0000000
--- a/libasm/asm_newsubscn.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/* Create new subsection section in given section.
- Copyright (C) 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdlib.h>
-
-#include <libasmP.h>
-#include <system.h>
-
-
-AsmScn_t *
-asm_newsubscn (asmscn, nr)
- AsmScn_t *asmscn;
- unsigned int nr;
-{
- AsmScn_t *runp;
- AsmScn_t *newp;
-
- /* Just return if no section is given. The error must have been
- somewhere else. */
- if (asmscn == NULL)
- return NULL;
-
- /* Determine whether there is already a subsection with this number. */
- runp = asmscn->subsection_id == 0 ? asmscn : asmscn->data.up;
- while (1)
- {
- if (runp->subsection_id == nr)
- /* Found it. */
- return runp;
-
- if (runp->subnext == NULL || runp->subnext->subsection_id > nr)
- break;
-
- runp = runp->subnext;
- }
-
- newp = (AsmScn_t *) malloc (sizeof (AsmScn_t));
- if (newp == NULL)
- return NULL;
-
- /* Same assembler context than the original section. */
- newp->ctx = runp->ctx;
-
- /* User provided the subsectio nID. */
- newp->subsection_id = nr;
-
- /* Inherit the parent's type. */
- newp->type = runp->type;
-
- /* Pointer to the zeroth subsection. */
- newp->data.up = runp->subsection_id == 0 ? runp : runp->data.up;
-
- /* We start at offset zero. */
- newp->offset = 0;
- /* And generic alignment. */
- newp->max_align = 1;
-
- /* No output yet. */
- newp->content = NULL;
-
- /* Inherit the fill pattern from the section this one is derived from. */
- newp->pattern = asmscn->pattern;
-
- /* Enqueue at the right position in the list. */
- newp->subnext = runp->subnext;
- runp->subnext = newp;
-
- return newp;
-}
diff --git a/libasm/asm_newsym.c b/libasm/asm_newsym.c
deleted file mode 100644
index e2727b1..0000000
--- a/libasm/asm_newsym.c
+++ /dev/null
@@ -1,135 +0,0 @@
-/* Define new symbol for current position in given section.
- Copyright (C) 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <inttypes.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <libasmP.h>
-#include <system.h>
-
-
-AsmSym_t *
-asm_newsym (asmscn, name, size, type, binding)
- AsmScn_t *asmscn;
- const char *name;
- GElf_Xword size;
- int type;
- int binding;
-{
-#define TEMPSYMLEN 10
- char tempsym[TEMPSYMLEN];
- AsmSym_t *result;
-
- if (asmscn == NULL)
- /* Something went wrong before. */
- return NULL;
-
- /* Generate a temporary symbol if necessary. */
- if (name == NULL)
- {
- /* If a local symbol name is created the symbol better have
- local binding. */
- if (binding != STB_LOCAL)
- {
- __libasm_seterrno (ASM_E_INVALID);
- return NULL;
- }
-
- // XXX This requires getting the format from the machine backend. */
- snprintf (tempsym, TEMPSYMLEN, ".L%07u", asmscn->ctx->tempsym_count++);
-
- name = tempsym;
- }
-
- size_t name_len = strlen (name) + 1;
-
- result = (AsmSym_t *) malloc (sizeof (AsmSym_t) + name_len);
- if (result == NULL)
- return NULL;
-
- rwlock_wrlock (asmscn->ctx->lock);
-
- result->scn = asmscn;
- result->offset = asmscn->offset;
- result->size = size;
- result->type = type;
- result->binding = binding;
- result->symidx = 0;
- result->strent = ebl_strtabadd (asmscn->ctx->symbol_strtab,
- memcpy (result + 1, name, name_len), 0);
-
- if (unlikely (asmscn->ctx->textp))
- {
- /* We are only interested in the name and don't need to know whether
- it is a local name or not. */
- /* First print the binding pseudo-op. */
- if (binding == STB_GLOBAL)
- fprintf (asmscn->ctx->out.file, "\t.globl\t%s\n", name);
- else if (binding == STB_WEAK)
- fprintf (asmscn->ctx->out.file, "\t.weak\t%s\n", name);
-
- /* Next the symbol type. */
- if (type == STT_OBJECT)
- fprintf (asmscn->ctx->out.file, "\t.type\t%s,@object\n", name);
- else if (type == STT_FUNC)
- fprintf (asmscn->ctx->out.file, "\t.type\t%s,@function\n", name);
-
- /* Finally the size and the label. */
- fprintf (asmscn->ctx->out.file, "\t.size\t%s,%" PRIuMAX "\n%s:\n",
- name, (uintmax_t) size, name);
- }
- else
- {
- /* Put the symbol in the hash table so that we can later find it. */
- if (asm_symbol_tab_insert (&asmscn->ctx->symbol_tab, elf_hash (name),
- result) != 0)
- {
- /* The symbol already exists. */
- __libasm_seterrno (ASM_E_DUPLSYM);
- /* Note that we can free the entry since there must be no
- reference in the string table to the string. We can only
- fail to insert the symbol into the symbol table if there
- is already a symbol with this name. In this case the
- ebl_strtabadd function would use the previously provided
- name. */
- free (result);
- result = NULL;
- }
- else if (name != tempsym && asm_emit_symbol_p (name))
- /* Only count non-private symbols. */
- ++asmscn->ctx->nsymbol_tab;
- }
-
- rwlock_unlock (asmscn->ctx->lock);
-
- return result;
-}
diff --git a/libasm/asm_scngrp_newsignature.c b/libasm/asm_scngrp_newsignature.c
deleted file mode 100644
index 9908e40..0000000
--- a/libasm/asm_scngrp_newsignature.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/* Update signature of section group.
- Copyright (C) 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libasmP.h"
-
-
-int
-asm_scngrp_newsignature (grp, signature)
- AsmScnGrp_t *grp;
- AsmSym_t *signature;
-{
- if (grp == NULL || signature == NULL)
- return 1;
-
- grp->signature = signature;
-
- return 0;
-}
diff --git a/libasm/disasm_begin.c b/libasm/disasm_begin.c
deleted file mode 100644
index 5b98b2a..0000000
--- a/libasm/disasm_begin.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Create context descriptor for disassembler.
- Copyright (C) 2005, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdlib.h>
-
-#include "libasmP.h"
-#include "../libebl/libeblP.h"
-
-
-DisasmCtx_t *
-disasm_begin (Ebl *ebl, Elf *elf, DisasmGetSymCB_t symcb)
-{
- if (ebl == NULL)
- return NULL;
-
- if (ebl->disasm == NULL)
- {
- __libasm_seterrno (ASM_E_ENOSUP);
- return NULL;
- }
-
- DisasmCtx_t *ctx = (DisasmCtx_t *) malloc (sizeof (DisasmCtx_t));
- if (ctx == NULL)
- {
- __libasm_seterrno (ASM_E_NOMEM);
- return NULL;
- }
-
- ctx->ebl = ebl;
- ctx->elf = elf;
- ctx->symcb = symcb;
-
- return ctx;
-}
diff --git a/libasm/disasm_cb.c b/libasm/disasm_cb.c
deleted file mode 100644
index 5610125..0000000
--- a/libasm/disasm_cb.c
+++ /dev/null
@@ -1,176 +0,0 @@
-/* Copyright (C) 2005, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <string.h>
-
-#include "libasmP.h"
-#include "../libebl/libeblP.h"
-
-
-struct symtoken
-{
- DisasmCtx_t *ctx;
- void *symcbarg;
-};
-
-
-static int
-default_elf_getsym (GElf_Addr addr, Elf32_Word scnndx, GElf_Addr value,
- char **buf, size_t *buflen, void *arg)
-{
- struct symtoken *symtoken = (struct symtoken *) arg;
-
- /* First try the user provided function. */
- if (symtoken->ctx->symcb != NULL)
- {
- int res = symtoken->ctx->symcb (addr, scnndx, value, buf, buflen,
- symtoken->symcbarg);
- if (res >= 0)
- return res;
- }
-
- // XXX Look up in ELF file.
-
- return -1;
-}
-
-
-struct symaddrpair
-{
- GElf_Addr addr;
- const char *name;
-};
-
-
-static void
-read_symtab_exec (DisasmCtx_t *ctx)
-{
- /* We simply use all we can get our hands on. This will produce
- some duplicate information but this is no problem, we simply
- ignore the latter definitions. */
- Elf_Scn *scn= NULL;
- while ((scn = elf_nextscn (ctx->elf, scn)) != NULL)
- {
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
- Elf_Data *data;
- if (shdr == NULL || shdr->sh_type != SHT_SYMTAB
- || (data = elf_getdata (scn, NULL)) == NULL)
- continue;
-
- int xndxscnidx = elf_scnshndx (scn);
- Elf_Data *xndxdata = NULL;
- if (xndxscnidx > 0)
- xndxdata = elf_getdata (elf_getscn (ctx->elf, xndxscnidx), NULL);
-
- /* Iterate over all symbols. Add all defined symbols. */
- int nsyms = shdr->sh_size / shdr->sh_entsize;
- for (int cnt = 1; cnt < nsyms; ++cnt)
- {
- Elf32_Word xshndx;
- GElf_Sym sym_mem;
- GElf_Sym *sym = gelf_getsymshndx (data, xndxdata, cnt, &sym_mem,
- &xshndx);
- if (sym == NULL)
- continue;
-
- /* Undefined symbols are useless here. */
- if (sym->st_shndx == SHN_UNDEF)
- continue;
-
-
- }
- }
-}
-
-
-static void
-read_symtab (DisasmCtx_t *ctx)
-{
- /* Find the symbol table(s). */
- GElf_Ehdr ehdr_mem;
- GElf_Ehdr *ehdr = gelf_getehdr (ctx->elf, &ehdr_mem);
- if (ehdr == NULL)
- return;
-
- switch (ehdr->e_type)
- {
- case ET_EXEC:
- case ET_DYN:
- read_symtab_exec (ctx);
- break;
-
- case ET_REL:
- // XXX Handle
- break;
-
- default:
- break;
- }
-}
-
-
-static int
-null_elf_getsym (GElf_Addr addr __attribute__ ((unused)),
- Elf32_Word scnndx __attribute__ ((unused)),
- GElf_Addr value __attribute__ ((unused)),
- char **buf __attribute__ ((unused)),
- size_t *buflen __attribute__ ((unused)),
- void *arg __attribute__ ((unused)))
-{
- return -1;
-}
-
-
-int
-disasm_cb (DisasmCtx_t *ctx, const uint8_t **startp, const uint8_t *end,
- GElf_Addr addr, const char *fmt, DisasmOutputCB_t outcb,
- void *outcbarg, void *symcbarg)
-{
- struct symtoken symtoken;
- DisasmGetSymCB_t getsym = ctx->symcb ?: null_elf_getsym;
-
- if (ctx->elf != NULL)
- {
- /* Read all symbols of the ELF file and stuff them into a hash
- table. The key is the address and the section index. */
- read_symtab (ctx);
-
- symtoken.ctx = ctx;
- symtoken.symcbarg = symcbarg;
-
- symcbarg = &symtoken;
-
- getsym = default_elf_getsym;
- }
-
- return ctx->ebl->disasm (startp, end, addr, fmt, outcb, getsym, outcbarg,
- symcbarg);
-}
-INTDEF (disasm_cb)
diff --git a/libasm/disasm_end.c b/libasm/disasm_end.c
deleted file mode 100644
index ee8b2f9..0000000
--- a/libasm/disasm_end.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Release descriptor for disassembler.
- Copyright (C) 2005, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdlib.h>
-
-#include "libasmP.h"
-
-
-int
-disasm_end (DisasmCtx_t *ctx)
-{
- free (ctx);
-
- return 0;
-}
diff --git a/libasm/disasm_str.c b/libasm/disasm_str.c
deleted file mode 100644
index 856fd11..0000000
--- a/libasm/disasm_str.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Copyright (C) 2005, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2007.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <string.h>
-
-#include "libasmP.h"
-
-
-struct buffer
-{
- char *buf;
- size_t len;
-};
-
-
-static int
-buffer_cb (char *str, size_t len, void *arg)
-{
- struct buffer *buffer = (struct buffer *) arg;
-
- if (len > buffer->len)
- /* Return additional needed space. */
- return len - buffer->len;
-
- buffer->buf = mempcpy (buffer->buf, str, len);
- buffer->len = len;
-
- return 0;
-}
-
-
-int
-disasm_str (DisasmCtx_t *ctx, const uint8_t **startp, const uint8_t *end,
- GElf_Addr addr, const char *fmt, char **bufp, size_t len,
- void *symcbarg)
-{
- struct buffer buffer = { .buf = *bufp, .len = len };
-
- int res = INTUSE(disasm_cb) (ctx, startp, end, addr, fmt, buffer_cb, &buffer,
- symcbarg);
- *bufp = buffer.buf;
- return res;
-}
diff --git a/libasm/libasm.h b/libasm/libasm.h
deleted file mode 100644
index 307c734..0000000
--- a/libasm/libasm.h
+++ /dev/null
@@ -1,199 +0,0 @@
-/* Interface for libasm.
- Copyright (C) 2002, 2005, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifndef _LIBASM_H
-#define _LIBASM_H 1
-
-#include <stdbool.h>
-#include <stdint.h>
-
-#include <libebl.h>
-
-
-/* Opaque type for the assembler context descriptor. */
-typedef struct AsmCtx AsmCtx_t;
-
-/* Opaque type for a section. */
-typedef struct AsmScn AsmScn_t;
-
-/* Opaque type for a section group. */
-typedef struct AsmScnGrp AsmScnGrp_t;
-
-/* Opaque type for a symbol. */
-typedef struct AsmSym AsmSym_t;
-
-
-/* Opaque type for the disassembler context descriptor. */
-typedef struct DisasmCtx DisasmCtx_t;
-
-/* Type used for callback functions to retrieve symbol name. The
- symbol reference is in the section designated by the second parameter
- at an offset described by the first parameter. The value is the
- third parameter. */
-typedef int (*DisasmGetSymCB_t) (GElf_Addr, Elf32_Word, GElf_Addr, char **,
- size_t *, void *);
-
-/* Output function callback. */
-typedef int (*DisasmOutputCB_t) (char *, size_t, void *);
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Create output file and return descriptor for assembler context. If
- TEXTP is true the output is an assembler format text file.
- Otherwise an object file is created. The MACHINE parameter
- corresponds to an EM_ constant from <elf.h>, KLASS specifies the
- class (32- or 64-bit), and DATA specifies the byte order (little or
- big endian). */
-extern AsmCtx_t *asm_begin (const char *fname, Ebl *ebl, bool textp);
-
-/* Abort the operation on the assembler context and free all resources. */
-extern int asm_abort (AsmCtx_t *ctx);
-
-/* Finalize output file and free all resources. */
-extern int asm_end (AsmCtx_t *ctx);
-
-
-/* Return handle for the named section. If it was not used before
- create it. */
-extern AsmScn_t *asm_newscn (AsmCtx_t *ctx, const char *scnname,
- GElf_Word type, GElf_Xword flags);
-
-
-/* Similar to 'asm_newscn', but make it part of section group GRP. */
-extern AsmScn_t *asm_newscn_ingrp (AsmCtx_t *ctx, const char *scnname,
- GElf_Word type, GElf_Xword flags,
- AsmScnGrp_t *grp);
-
-/* Create new subsection NR in the given section. */
-extern AsmScn_t *asm_newsubscn (AsmScn_t *asmscn, unsigned int nr);
-
-
-/* Return handle for new section group. The signature symbol can be
- set later. */
-extern AsmScnGrp_t *asm_newscngrp (AsmCtx_t *ctx, const char *grpname,
- AsmSym_t *signature, Elf32_Word flags);
-
-/* Set or overwrite signature symbol for group. */
-extern int asm_scngrp_newsignature (AsmScnGrp_t *grp, AsmSym_t *signature);
-
-
-/* Add zero terminated string STR of size LEN to (sub)section ASMSCN. */
-extern int asm_addstrz (AsmScn_t *asmscn, const char *str, size_t len);
-
-/* Add 8-bit signed integer NUM to (sub)section ASMSCN. */
-extern int asm_addint8 (AsmScn_t *asmscn, int8_t num);
-
-/* Add 8-bit unsigned integer NUM to (sub)section ASMSCN. */
-extern int asm_adduint8 (AsmScn_t *asmscn, uint8_t num);
-
-/* Add 16-bit signed integer NUM to (sub)section ASMSCN. */
-extern int asm_addint16 (AsmScn_t *asmscn, int16_t num);
-
-/* Add 16-bit unsigned integer NUM to (sub)section ASMSCN. */
-extern int asm_adduint16 (AsmScn_t *asmscn, uint16_t num);
-
-/* Add 32-bit signed integer NUM to (sub)section ASMSCN. */
-extern int asm_addint32 (AsmScn_t *asmscn, int32_t num);
-
-/* Add 32-bit unsigned integer NUM to (sub)section ASMSCN. */
-extern int asm_adduint32 (AsmScn_t *asmscn, uint32_t num);
-
-/* Add 64-bit signed integer NUM to (sub)section ASMSCN. */
-extern int asm_addint64 (AsmScn_t *asmscn, int64_t num);
-
-/* Add 64-bit unsigned integer NUM to (sub)section ASMSCN. */
-extern int asm_adduint64 (AsmScn_t *asmscn, uint64_t num);
-
-
-/* Add signed little endian base 128 integer NUM to (sub)section ASMSCN. */
-extern int asm_addsleb128 (AsmScn_t *asmscn, int32_t num);
-
-/* Add unsigned little endian base 128 integer NUM to (sub)section ASMSCN. */
-extern int asm_adduleb128 (AsmScn_t *asmscn, uint32_t num);
-
-
-/* Define new symbol NAME for current position in given section ASMSCN. */
-extern AsmSym_t *asm_newsym (AsmScn_t *asmscn, const char *name,
- GElf_Xword size, int type, int binding);
-
-
-/* Define new common symbol NAME with given SIZE and alignment. */
-extern AsmSym_t *asm_newcomsym (AsmCtx_t *ctx, const char *name,
- GElf_Xword size, GElf_Addr align);
-
-/* Define new common symbol NAME with given SIZE, VALUE, TYPE, and BINDING. */
-extern AsmSym_t *asm_newabssym (AsmCtx_t *ctx, const char *name,
- GElf_Xword size, GElf_Addr value,
- int type, int binding);
-
-
-/* Align (sub)section offset according to VALUE. */
-extern int asm_align (AsmScn_t *asmscn, GElf_Word value);
-
-/* Set the byte pattern used to fill gaps created by alignment. */
-extern int asm_fill (AsmScn_t *asmscn, void *bytes, size_t len);
-
-
-/* Return ELF descriptor created for the output file of the given context. */
-extern Elf *asm_getelf (AsmCtx_t *ctx);
-
-
-/* Return error code of last failing function call. This value is kept
- separately for each thread. */
-extern int asm_errno (void);
-
-/* Return error string for ERROR. If ERROR is zero, return error string
- for most recent error or NULL is none occurred. If ERROR is -1 the
- behaviour is similar to the last case except that not NULL but a legal
- string is returned. */
-extern const char *asm_errmsg (int __error);
-
-
-/* Create context descriptor for disassembler. */
-extern DisasmCtx_t *disasm_begin (Ebl *ebl, Elf *elf, DisasmGetSymCB_t symcb);
-
-/* Release descriptor for disassembler. */
-extern int disasm_end (DisasmCtx_t *ctx);
-
-/* Produce of disassembly output for given memory, store text in
- provided buffer. */
-extern int disasm_str (DisasmCtx_t *ctx, const uint8_t **startp,
- const uint8_t *end, GElf_Addr addr, const char *fmt,
- char **bufp, size_t len, void *symcbarg);
-
-/* Produce disassembly output for given memory and output it using the
- given callback functions. */
-extern int disasm_cb (DisasmCtx_t *ctx, const uint8_t **startp,
- const uint8_t *end, GElf_Addr addr, const char *fmt,
- DisasmOutputCB_t outcb, void *outcbarg, void *symcbarg);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* libasm.h */
diff --git a/libasm/libasm.map b/libasm/libasm.map
deleted file mode 100644
index a36cdbf..0000000
--- a/libasm/libasm.map
+++ /dev/null
@@ -1,38 +0,0 @@
-ELFUTILS_1.0 {
- global:
- asm_abort;
- asm_addint16;
- asm_addint32;
- asm_addint64;
- asm_addint8;
- asm_addsleb128;
- asm_addstrz;
- asm_adduint16;
- asm_adduint32;
- asm_adduint64;
- asm_adduint8;
- asm_adduleb128;
- asm_align;
- asm_begin;
- asm_end;
- asm_errmsg;
- asm_errno;
- asm_fill;
- asm_getelf;
- asm_newabssym;
- asm_newcomsym;
- asm_newscn;
- asm_newscn_ingrp;
- asm_newscngrp;
- asm_newsubscn;
- asm_newsym;
- asm_scngrp_newsignature;
-
- disasm_begin;
- disasm_cb;
- disasm_end;
- disasm_str;
-
- local:
- *;
-};
diff --git a/libasm/libasmP.h b/libasm/libasmP.h
deleted file mode 100644
index ee7005f..0000000
--- a/libasm/libasmP.h
+++ /dev/null
@@ -1,304 +0,0 @@
-/* Internal definitions for libasm.
- Copyright (C) 2002, 2004, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifndef _LIBASMP_H
-#define _LIBASMP_H 1
-
-#include <stdio.h>
-
-#include <libasm.h>
-
-/* gettext helper macros. */
-#define _(Str) dgettext ("elfutils", Str)
-
-
-/* Known error codes. */
-enum
- {
- ASM_E_NOERROR,
- ASM_E_NOMEM, /* No more memory. */
- ASM_E_CANNOT_CREATE, /* Output file cannot be created. */
- ASM_E_INVALID, /* Invalid parameters. */
- ASM_E_CANNOT_CHMOD, /* Cannot change mode of output file. */
- ASM_E_CANNOT_RENAME, /* Cannot rename output file. */
- ASM_E_DUPLSYM, /* Duplicate symbol definition. */
- ASM_E_LIBELF, /* Refer to error in libelf. */
- ASM_E_TYPE, /* Invalid section type for operation. */
- ASM_E_IOERROR, /* Error during output of data. */
- ASM_E_ENOSUP, /* No backend support. */
- ASM_E_NUM /* Keep this entry as the last. */
- };
-
-
-/* Special sections. */
-#define ASM_ABS_SCN ((Elf_Scn *) 1)
-#define ASM_COM_SCN ((Elf_Scn *) 2)
-
-
-/* And the hash table for symbols. */
-#include <symbolhash.h>
-
-
-/* Descriptor for a section. */
-struct AsmScn
-{
- /* The underlying assembler context. */
- AsmCtx_t *ctx;
-
- /* Subsection ID. */
- unsigned int subsection_id;
-
- /* Section type. */
- GElf_Word type;
-
- union
- {
- /* Data only stored in the record for subsection zero. */
- struct
- {
- /* The ELF section. */
- Elf_Scn *scn;
-
- /* Entry in the section header string table. */
- struct Ebl_Strent *strent;
-
- /* Next member of group. */
- struct AsmScn *next_in_group;
- } main;
-
- /* Pointer to the record for subsection zero. */
- AsmScn_t *up;
- } data;
-
- /* Current offset in the (sub)section. */
- GElf_Off offset;
- /* Maximum alignment of the section so far. */
- GElf_Word max_align;
-
- /* Section content. */
- struct AsmData
- {
- /* Currently used number of bytes in the block. */
- size_t len;
-
- /* Number of bytes allocated. */
- size_t maxlen;
-
- /* Pointer to the next block. */
- struct AsmData *next;
-
- /* The actual data. */
- char data[flexarr_size];
- } *content;
-
- /* Fill pattern. */
- struct FillPattern
- {
- size_t len;
- char bytes[flexarr_size];
- } *pattern;
-
- /* Next subsection. */
- AsmScn_t *subnext;
-
- /* List of all allocated sections. */
- AsmScn_t *allnext;
-
- /* Name of the section. */
- char name[flexarr_size];
-};
-
-
-/* Descriptor used for the assembling session. */
-struct AsmCtx
-{
- /* File descriptor of the temporary file. */
- int fd;
-
- /* True if text output is wanted. */
- bool textp;
-
- /* Output file handle. */
- union
- {
- /* ELF descriptor of the temporary file. */
- Elf *elf;
- /* I/O stream for text output. */
- FILE *file;
- } out;
-
-
- /* List with defined sections. */
- AsmScn_t *section_list;
- /* Section header string table. */
- struct Ebl_Strtab *section_strtab;
-
- /* Table with defined symbols. */
- asm_symbol_tab symbol_tab;
- /* Number of symbols in the table. */
- unsigned int nsymbol_tab;
- /* Symbol string table. */
- struct Ebl_Strtab *symbol_strtab;
-
- /* List of section groups. */
- struct AsmScnGrp *groups;
- /* Number of section groups. */
- size_t ngroups;
-
- /* Current required alignment for common symbols. */
- GElf_Word common_align;
-
- /* Lock to handle multithreaded programs. */
- rwlock_define (,lock);
-
- /* Counter for temporary symbols. */
- unsigned int tempsym_count;
-
- /* Name of the output file. */
- char *fname;
- /* The name of the temporary file. */
- char tmp_fname[flexarr_size];
-};
-
-
-/* Descriptor for a symbol. */
-struct AsmSym
-{
- /* Reference to the section which contains the symbol. */
- AsmScn_t *scn;
-
- /* Type of the symbol. */
- int8_t type;
- /* Binding of the symbol. */
- int8_t binding;
-
- /* Size of the symbol. */
- GElf_Xword size;
-
- /* Offset in the section. */
- GElf_Off offset;
-
- /* Symbol table index of the symbol in the symbol table. */
- size_t symidx;
-
- /* Reference to name of the symbol. */
- struct Ebl_Strent *strent;
-};
-
-
-/* Descriptor for section group. */
-struct AsmScnGrp
-{
- /* Entry in the section header string table. */
- struct Ebl_Strent *strent;
-
- /* The ELF section. */
- Elf_Scn *scn;
-
- /* The signature. */
- struct AsmSym *signature;
-
- /* First member. */
- struct AsmScn *members;
- /* Number of members. */
- size_t nmembers;
-
- /* Flags. */
- Elf32_Word flags;
-
- /* Next group. */
- struct AsmScnGrp *next;
-
- /* Name of the section group. */
- char name[flexarr_size];
-};
-
-
-/* Descriptor for disassembler. */
-struct DisasmCtx
-{
- /* Handle for the backend library with the disassembler routine. */
- Ebl *ebl;
-
- /* ELF file containing all the data passed to the function. This
- allows to look up symbols. */
- Elf *elf;
-
- /* Callback function to determine symbol names. */
- DisasmGetSymCB_t symcb;
-};
-
-
-/* The default fill pattern: one zero byte. */
-extern const struct FillPattern *__libasm_default_pattern
- attribute_hidden;
-
-
-/* Ensure there are at least LEN bytes available in the output buffer
- for ASMSCN. */
-extern int __libasm_ensure_section_space (AsmScn_t *asmscn, size_t len)
- internal_function;
-
-/* Free all resources associated with the assembler context. */
-extern void __libasm_finictx (AsmCtx_t *ctx) internal_function;
-
-/* Set error code. */
-extern void __libasm_seterrno (int err) internal_function;
-
-/* Return handle for the named section. If it was not used before
- create it. */
-extern AsmScn_t *__asm_newscn_internal (AsmCtx_t *ctx, const char *scnname,
- GElf_Word type, GElf_Xword flags)
- attribute_hidden;
-
-
-/* Internal aliases of the asm_addintXX functions. */
-extern int __asm_addint8_internal (AsmScn_t *asmscn, int8_t num)
- attribute_hidden;
-extern int __asm_addint16_internal (AsmScn_t *asmscn, int16_t num)
- attribute_hidden;
-extern int __asm_addint32_internal (AsmScn_t *asmscn, int32_t num)
- attribute_hidden;
-extern int __asm_addint64_internal (AsmScn_t *asmscn, int64_t num)
- attribute_hidden;
-
-
-/* Produce disassembly output for given memory and output it using the
- given callback functions. */
-extern int __disasm_cb_internal (DisasmCtx_t *ctx, const uint8_t **startp,
- const uint8_t *end, GElf_Addr addr,
- const char *fmt, DisasmOutputCB_t outcb,
- void *outcbarp, void *symcbarg)
- attribute_hidden;
-
-
-/* Test whether given symbol is an internal symbol and if yes, whether
- we should nevertheless emit it in the symbol table. */
-// XXX The second part should probably be controlled by an option which
-// isn't implemented yet
-// XXX Also, the format will change with the backend.
-#define asm_emit_symbol_p(name) (strncmp (name, ".L", 2) != 0)
-
-#endif /* libasmP.h */
diff --git a/libasm/symbolhash.c b/libasm/symbolhash.c
deleted file mode 100644
index e3aa5dd..0000000
--- a/libasm/symbolhash.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Symbol hash table implementation.
- Copyright (C) 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <string.h>
-
-#include <libasmP.h>
-#include <libebl.h>
-
-/* Definitions for the symbol hash table. */
-#define TYPE AsmSym_t *
-#define NAME asm_symbol_tab
-#define ITERATE 1
-#define REVERSE 1
-#define COMPARE(a, b) \
- strcmp (ebl_string ((a)->strent), ebl_string ((b)->strent))
-
-#define next_prime __libasm_next_prime
-extern size_t next_prime (size_t) attribute_hidden;
-
-#include "../lib/dynamicsizehash.c"
-
-#undef next_prime
-#define next_prime attribute_hidden __libasm_next_prime
-#include "../lib/next_prime.c"
diff --git a/libasm/symbolhash.h b/libasm/symbolhash.h
deleted file mode 100644
index 28768da..0000000
--- a/libasm/symbolhash.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Copyright (C) 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifndef SYMBOLHASH_H
-#define SYMBOLHASH_H 1
-
-/* Definitions for the symbol hash table. */
-#define TYPE AsmSym_t *
-#define NAME asm_symbol_tab
-#define ITERATE 1
-#define COMPARE(a, b) \
- strcmp (ebl_string ((a)->strent), ebl_string ((b)->strent))
-#include <dynamicsizehash.h>
-
-#endif /* symbolhash.h */
diff --git a/libcpu/ChangeLog b/libcpu/ChangeLog
deleted file mode 100644
index 5bc89f9..0000000
--- a/libcpu/ChangeLog
+++ /dev/null
@@ -1,320 +0,0 @@
-2008-12-31 Ulrich Drepper <drepper@redhat.com>
-
- * i386_disasm.c (i386_disasm): Correct resizing of buffer.
-
- * i386_parse.y (struct argstring): Add off element.
- (off_op_str): New global variable.
- (print_op_str): Print strings as concatenated strings. Keep track
- of index and length. Update ->off element.
- (print_op_str_idx): New function.
- (instrtable_out): Mark op%d_fct as const.
- Emit two tables for the strings: the string itself (op%d_str) and the
- index table (op%d_str_idx).
- * i386_disasm.c (i386_disasm): Adjust for new op%d_str definition.
-
- * i386_disasm.c [X86_64] (i386_disasm): Handle rex prefix when
- printing only prefix.
-
- * i386_disasm.c (i386_disasm): Minor optimizations.
-
- * i386_parse.y (instrtable_out): No need to emit index, the reader can
- keep track.
- * i386_disasm.c (i386_disasm): The index is not emitted anymore, no
- need to skip it.
-
- * i386_disasm.c (amd3dnow): Mark as const.
-
- * defs/i386: Add blendvpd and blendvps opcodes.
-
-2008-12-30 Ulrich Drepper <drepper@redhat.com>
-
- * defs/i386: Add blendpd and blendps opcodes.
-
-2008-12-19 Ulrich Drepper <drepper@redhat.com>
-
- * defs/i386: Add entry for AMD 3DNOW.
- * i386_disasm.c: Implement AMD 3DNOW disassembly.
-
-2008-12-17 Ulrich Drepper <drepper@redhat.com>
-
- * i386_disasm.c (i386_disasm): If instruction matches prefix,
- undoing the prefix match finishes the instruction.
-
-2008-01-21 Roland McGrath <roland@redhat.com>
-
- * defs/i386: Fix typo in comment.
- * i386_disasm.c (i386_disasm): Handle cltq, cqto.
-
- * i386_parse.y: Add sanity check for NMNES macro value.
- * Makefile.am (i386_parse.o): Fix target in dependency rule.
- (i386_parse.h): New target with empty commands.
- (i386_lex.o): Depend on it in place of i386_parse.c.
-
-2008-01-21 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am (EXTRA_DIST): Remove defs/x86_64.
-
-2008-01-14 Ulrich Drepper <drepper@redhat.com>
-
- * defs/i386: Add fixes for opcodes with register number in opcode,
- 64-bit immediate forms, nop with rex.B.
- * i386_data.h [X86_64] (FCT_imm64$w): New function.
- (FCT_oreg): New function.
- (FCT_oreg$w): New function.
- * i386_disasm.c (i386_disasm): Reinitialize fmt always before
- starting the loop to process the string. Handle 0x90 special for
- x86-64.
- * i386_parse.y (fillin_arg): Expand synonyms before concatening to
- form the function name.
-
-2008-01-11 Ulrich Drepper <drepper@redhat.com>
-
- * i386_disasm.c (struct output_buffer): Remove symcb and symcbarg.
- (i386_disasm): Remove appropriate initializers.
- Use symcb to lookup symbol strings.
-
- * i386_disasm.c (struct output_buffer): Add labelbuf, labelbufsize,
- symaddr_use, and symaddr fields.
- (i386_disasm): Remove labelbuf and labelbufsize variables.
- Add back %e format. Implement %a and %l formats.
-
- * i386_data.h (general_mod$r_m): Set symaddr_use and symaddr for %rip
- base addressing.
-
- * i386_disasm.c (i386_disasm): Resize output buffer if necessary.
- Optimize output_data initialization. Free buffers before return.
- (struct output_data): Remove op1str field. Adjust code.
- (i386_disasm): Store final NUL btye at end of functions.
-
-2008-01-10 Ulrich Drepper <drepper@redhat.com>
-
- * i386_data.h (FCT_crdb): New function.
- (FCT_ccc): Use FCT_crdb.
- (FCT_ddd): Likewise.
-
- * defs/i386: Fix a few instructions with immediate arguments.
-
- * i386_disasm.c: Rewrite interface to callback functions for operands
- to take a single pointer to a structure.
- * i386_data.h: Adjust all functions.
-
-2008-01-08 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: Enable x86-64 again.
- * defs/i386: Lots of changes for x86-64.
- * i386_data.h: Add support for use in x86-64 disassembler.
- * i386_disasm.c: Likewise.
- * i386_parse.y: Likewise.
- * defs/x86_64: Removed.
-
-2008-01-04 Ulrich Drepper <drepper@redhat.com>
-
- * defs/i386: Cleanups, remove masks which are not needed.
- Add remaining Intel opcodes.
- * i386_data.h (FCT_imm8): Check for input buffer overrun.
- * i386_disasm.c (i386_disasm): Likewise.
- * i386_parse.y: Remove suffixes which are not needed anymore.
-
-2008-01-03 Ulrich Drepper <drepper@redhat.com>
-
- * defs/i386: Add yet more SSE instructions.
-
-2008-01-02 Ulrich Drepper <drepper@redhat.com>
-
- * i386_disasm.c (i386_disasm): Extend matcher to allow tables to
- contain instructions with prefixes.
- * defs/i386: Use for many SSE operations.
- * i386_data.h (FCT_mmxreg2): Removed.
-
-2008-01-01 Ulrich Drepper <drepper@redhat.com>
-
- * defs/i386: More 0f prefix support.
- * i386_data.h (FCT_mmxreg): Implement.
- (FCT_mmxreg2): Implement.
- (FCT_mmreg): Remove.
- * i386_disasm.c (i386_disasm): More special instructions.
- Fix tttn suffix for cmov.
- * i386_parse.y: Simplify test for mod/r_m mode.
-
-2007-12-31 Ulrich Drepper <drepper@redhat.com>
-
- * defs/i386: Fix order or arguments for mov of control/debug registers.
- * i386_data.h (FCT_ccc): Implement
- (FCT_ddd): Implement
-
-2007-12-30 Ulrich Drepper <drepper@redhat.com>
-
- * defs/i386: Fix 0f groups 6 and 7.
- * i386_data.c (FCT_mod$16r_m): Implement.
- * i386_disasm.c (i386_disasm): Third parameter can also have string.
-
-2007-12-29 Ulrich Drepper <drepper@redhat.com>
-
- * defs/i386: Add lots of floating point ops.
- * i386_data.h (FCT_fmod$fr_m): Removed.
- (FCT_freg): Implement.
- * i386_disasm.c (i386_disasm): Implement suffix_D.
- * i386_parse.y: Emit suffix_D.
-
- * defs/i386: Use rel instead of dispA.
- Fix lcall, dec, div, idiv, imul, inc, jmp, ljmp, mul, neg, not, push,
- test.
-
- * i386_data.h (FCT_dispA): Removed.
- (FCT_ds_xx): Add test for end of input buffer.
- * i386_disasm.c (ABORT_ENTRY): Removed.
- (i386_disasm): Fix handling of SIB. Pass correct address value to
- operand callbacks.
-
- * Makefile.am (*.mnemonics): Filter out INVALID entry.
- * defs/i386: Define imms8 and use in appropriate places.
- Add INVALID entries for special opcodes with special mnemonics.
- Fix int3. Fix typo in shl. Correct xlat.
- * i386_data.h (FCT_ds_xx): New function.
- (FCT_ds_si): Use it.
- (FCT_ds_bx): New function.
- (FCT_imms8): New function.
- * i386_disasm.c (MNE_INVALID): Define.
- (i386_disasm): Handle invalid opcodes in mnemonics printing, not
- separately. Fix address value passed to operand handlers.
- * i386_parse.y (bx_reg): Define.
- (instrtable_out): Handle INVALID entries differently, just use
- MNE_INVALID value for .mnemonic.
-
-2007-12-28 Ulrich Drepper <drepper@redhat.com>
-
- * defs/i386: Fix shift and mov immediate instructions.
- * i386_data.h (FCT_imm16): Implement.
-
- * defs/i386: Use absval instead of abs of lcall and ljmp.
- Add parameters for cmps. Fix test and mov immediate.
- * i386_data.h: Implement FCT_absval.
- * i386_disasm.c: Handle data16 for suffix_w and FCT_imm.
-
- * defs/i386: Move entries with 0x9b prefix together.
- * i386_disasm.c (i386_disasm): Fix recognizing insufficient bytes in
- input. Handle data16 with suffix_W.
-
- * i386_data.h (FCT_*): Add end parameter to all functions. Check
- before using more bytes.
- (FCT_sel): Implement.
- * i386_disasm.c (i386_disasm): Better handle end of input buffer.
- Specal opcode 0x99.
-
- * Makefile.am: Use m4 to preprocess defs/* files.
- * defs/i386: Adjust appropriately.
- * i386_data.c (FCT_ax): Implement.
- (FCT_ax$w): Use FCT_ax.
- * i386_disasm.c (ADD_STRING): Use _len instead of len.
- (i386_disasm): If no instruction can be matched because of lack of
- input and prefixes have been matched, print prefixes.
- Recognize abort entries.
- Handle special cases.
- * i386_gendis.c: Recognize - input file name.
- * i386_lex.c: Recognize INVALID token.
- * i386_parse.y: Handle INVALID token input.
-
- * defs/i386: Fix mov, pop.
- * i386_data.h (FCT_sreg3): Implement.
-
-2007-12-27 Ulrich Drepper <drepper@redhat.com>
-
- * defs/i386: Fix adc, add, cmp, or, sbb, sub, xchg, xor.
- * i386_data.h (FCT_imms): New function.
- (FCT_imm$s): Use FCT_imms for handling of signed values.
- (FCT_imm8): Sign extend values.
- * i386_disasm.c (i386_disasm): Implement suffix_w0.
- * i386_parse.y: Emit suffix w0.
-
- * i386_data.h (FCT_disp8): Add 0x prefix.
- (FCT_ds_si): Implement.
- * i386_disasm.c (i386_disasm): Increment addr for invalid prefixes.
- Implement tttn suffix.
- * i386_parse.y: Emit tttn suffix definition.
-
-2007-12-26 Ulrich Drepper <drepper@redhat.com>
-
- * i386_data.h (struct instr_enc): Use suffix field.
- (FCT_dx): Fill in body.
- (FCT_es_di): Likewise.
- (FCT_imm$s): Sign-extended byte values.
- * i386_disasm.c: Protect ADD_CHAR and ADD_STRING macros. Adjust uses.
- (i386_disasm): Handle suffix.
- * i386_parse.y: Emit suffix information.
- * defs/i386: Remove unnecessary suffixes.
-
- * Makefile.am: Disable building x86-64 version for now.
-
- * defs/i386: Fix and, bound, cmp, or, pop, sbb, sub, xor.
- * i386_data.h: Pass pointer to prefix to functions. If not prefixes
- are consumed this means invalid input.
- * i386_disasm.c: Fix prefix printing. Adjust function calls for
- parameter change.
- * i386_parse.y: Recognize moda prefix.
-
-2007-12-21 Ulrich Drepper <drepper@redhat.com>
-
- * i386_data.h: Fix SIB handling.
- * i386_disasm.c: Likewise.
-
-2007-12-19 Ulrich Drepper <drepper@redhat.com>
-
- * defs/i386: Fix up 'and' opcode.
-
-2007-10-31 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: Add dependencies of the generated files on the source
- files.
- (i386_lex_CFLAGS): Add -Wno-sign-compare.
-
- * defs/i386: A lot more data.
- * defs/x86_64: Likewise.
- * i386_data.h (struct instr_enc): Add off1_3, off2_3, and off3_3
- fields.
- (opfct_t): Add parameter for third operand.
- (FCT_*): Likewise.
- (data_prefix): New function.
- (FCT_abs): Implement.
- (FCT_ax): Renamed to FCT_ax$w amd implement.
- (FCT_disp8): Implement.
- (FCT_dispA): Implement.
- (FCT_imm): Implement.
- (FCT_imm$w): Implement.
- (FCT_imm$s): Don't zero-pad numbers.
- (FCT_imm8): Likewise.
- (FCT_rel): Likewise.
- (general_mod$r_m): New function.
- (FCT_mod$r_m): Use it.
- (FCT_mod$r_m$w): New function.
- (FCT_mod$8r_m): New function.
- (FCT_reg): Correctly handle 16-bit registers.
- (FCT_reg$w): New function.
- * i386_disasm.c (i386_disasm): Handle prefixes better.
- Pass third parameter to operand functions.
- * i386_parse.y (struct instruction): Add off3 field.
- Handle third operand throughout.
-
-2007-02-05 Ulrich Drepper <drepper@redhat.com>
-
- * i386_disasm.c: New file.
- * i386_data.h: New file.
- * i386_gendis.c: New file.
- * i386_lex.l: New file.
- * i386_parse.y: New file.
- * memory-access.h: New file.
- * x86_64_disasm.c: New file.
- * defs/i386: New file.
- * defs/i386.doc: New file.
- * defs/x86_64: New file.
-
-2005-02-15 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile (AM_CFLAGS): Add -Wunused -Wextra -Wformat=2.
-
-2005-02-05 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am (AM_CFLAGS): Define, instead of adding things to DEFS.
-
-2003-08-11 Ulrich Drepper <drepper@redhat.com>
-
- * Moved to CVS archive.
diff --git a/libcpu/Makefile.am b/libcpu/Makefile.am
deleted file mode 100644
index 51817c1..0000000
--- a/libcpu/Makefile.am
+++ /dev/null
@@ -1,83 +0,0 @@
-## Process this file with automake to create Makefile.in
-##
-## Copyright (C) 2002, 2004, 2005, 2007, 2008 Red Hat, Inc.
-## This file is part of Red Hat elfutils.
-##
-## Red Hat elfutils is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by the
-## Free Software Foundation; version 2 of the License.
-##
-## Red Hat elfutils 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
-## General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License along
-## with Red Hat elfutils; if not, write to the Free Software Foundation,
-## Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-##
-## Red Hat elfutils is an included package of the Open Invention Network.
-## An included package of the Open Invention Network is a package for which
-## Open Invention Network licensees cross-license their patents. No patent
-## license is granted, either expressly or impliedly, by designation as an
-## included package. Should you wish to participate in the Open Invention
-## Network licensing program, please visit www.openinventionnetwork.com
-## <http://www.openinventionnetwork.com>.
-##
-DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H
-if MUDFLAP
-AM_CFLAGS = -fmudflap
-else
-AM_CFLAGS =
-endif
-AM_CFLAGS += -Wall -Wshadow -Wunused -Wextra -std=gnu99 -fpic \
- $($(*F)_CFLAGS) \
- $(if $($(*F)_no_Werror),,-Werror)
-INCLUDES = -I$(srcdir) -I$(srcdir)/../lib -I$(srcdir)/../libelf \
- -I$(srcdir)/../libebl -I$(srcdir)/../libdw -I$(srcdir)/../libasm
-LEXCOMPILE = $(LEX) $(LFLAGS) $(AM_LFLAGS) -P$(<F:lex.l=)
-LEX_OUTPUT_ROOT = lex.$(<F:lex.l=)
-AM_YFLAGS = -p$(<F:parse.y=)
-
-if MUDFLAP
-libmudflap = -lmudflap
-endif
-
-noinst_LIBRARIES = libcpu_i386.a libcpu_x86_64.a
-noinst_PROGRAMS = i386_gendis
-
-libcpu_i386_a_SOURCES = i386_disasm.c
-libcpu_x86_64_a_SOURCES = x86_64_disasm.c
-
-i386_gendis_SOURCES = i386_gendis.c i386_lex.l i386_parse.y
-
-i386_disasm.o: i386.mnemonics i386_dis.h
-x86_64_disasm.o: x86_64.mnemonics x86_64_dis.h i386_disasm.c
-
-i386_dis.h: i386_gendis $(srcdir)/defs/i386
- m4 -Di386 -DDISASSEMBLER $(srcdir)/defs/i386 | ./i386_gendis - > $@
-x86_64_dis.h: i386_gendis $(srcdir)/defs/i386
- m4 -Dx86_64 -DDISASSEMBLER $(srcdir)/defs/i386 | ./i386_gendis - > $@
-
-i386.mnemonics x86_64.mnemonics: %.mnemonics: $(srcdir)/defs/i386
- m4 -D$(@:.mnemonics=) -DDISASSEMBLER $^ \
- | sed '1,/^%%/d;/^#/d;/^[[:space:]]*$$/d;s/[^:]*:\([^[:space:]]*\).*/MNE(\1)/;s/{[^}]*}//g;/INVALID/d' \
- | sort -u > $@
-
-i386_lex_no_Werror = yes
-
-libeu = ../lib/libeu.a
-
-i386_lex_CFLAGS = -Wno-unused-label -Wno-unused-function -Wno-sign-compare
-i386_parse.o: i386_parse.c i386.mnemonics
-i386_parse_CFLAGS = -DNMNES=$$(wc -l < i386.mnemonics)
-i386_lex.o: i386_parse.h
-i386_gendis_LDADD = $(libeu) -lm $(libmudflap)
-
-i386_parse.h: i386_parse.c ;
-
-noinst_HEADERS = memory-access.h i386_parse.h i386_data.h
-
-EXTRA_DIST = defs/i386
-
-CLEANFILES = i386.mnemonics i386_dis.h x86_64.mnemonics x86_64_dis.h
diff --git a/libcpu/Makefile.in b/libcpu/Makefile.in
deleted file mode 100644
index 09b22a1..0000000
--- a/libcpu/Makefile.in
+++ /dev/null
@@ -1,500 +0,0 @@
-# Makefile.in generated by automake 1.10.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-noinst_PROGRAMS = i386_gendis$(EXEEXT)
-subdir = libcpu
-DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
- $(srcdir)/Makefile.in ChangeLog i386_lex.c i386_parse.c
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-LIBRARIES = $(noinst_LIBRARIES)
-AR = ar
-ARFLAGS = cru
-libcpu_i386_a_AR = $(AR) $(ARFLAGS)
-libcpu_i386_a_LIBADD =
-am_libcpu_i386_a_OBJECTS = i386_disasm.$(OBJEXT)
-libcpu_i386_a_OBJECTS = $(am_libcpu_i386_a_OBJECTS)
-libcpu_x86_64_a_AR = $(AR) $(ARFLAGS)
-libcpu_x86_64_a_LIBADD =
-am_libcpu_x86_64_a_OBJECTS = x86_64_disasm.$(OBJEXT)
-libcpu_x86_64_a_OBJECTS = $(am_libcpu_x86_64_a_OBJECTS)
-PROGRAMS = $(noinst_PROGRAMS)
-am_i386_gendis_OBJECTS = i386_gendis.$(OBJEXT) i386_lex.$(OBJEXT) \
- i386_parse.$(OBJEXT)
-i386_gendis_OBJECTS = $(am_i386_gendis_OBJECTS)
-am__DEPENDENCIES_1 =
-i386_gendis_DEPENDENCIES = $(libeu) $(am__DEPENDENCIES_1)
-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-@MAINTAINER_MODE_FALSE@am__skiplex = test -f $@ ||
-YLWRAP = $(top_srcdir)/config/ylwrap
-@MAINTAINER_MODE_FALSE@am__skipyacc = test -f $@ ||
-YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS)
-SOURCES = $(libcpu_i386_a_SOURCES) $(libcpu_x86_64_a_SOURCES) \
- $(i386_gendis_SOURCES)
-DIST_SOURCES = $(libcpu_i386_a_SOURCES) $(libcpu_x86_64_a_SOURCES) \
- $(i386_gendis_SOURCES)
-HEADERS = $(noinst_HEADERS)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEBUGPRED = @DEBUGPRED@
-DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H
-DEPDIR = @DEPDIR@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EXEEXT = @EXEEXT@
-GMSGFMT = @GMSGFMT@
-GMSGFMT_015 = @GMSGFMT_015@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LDFLAGS = @LDFLAGS@
-LEX = @LEX@
-LEXLIB = @LEXLIB@
-LEX_OUTPUT_ROOT = lex.$(<F:lex.l=)
-LIBEBL_SUBDIR = @LIBEBL_SUBDIR@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LOCALEDIR = @LOCALEDIR@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MKDIR_P = @MKDIR_P@
-MODVERSION = @MODVERSION@
-MSGFMT = @MSGFMT@
-MSGFMT_015 = @MSGFMT_015@
-MSGMERGE = @MSGMERGE@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-RANLIB = @RANLIB@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-USE_NLS = @USE_NLS@
-VERSION = @VERSION@
-XGETTEXT = @XGETTEXT@
-XGETTEXT_015 = @XGETTEXT_015@
-YACC = @YACC@
-YFLAGS = @YFLAGS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-base_cpu = @base_cpu@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-eu_version = @eu_version@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-@MUDFLAP_FALSE@AM_CFLAGS = -Wall -Wshadow -Wunused -Wextra -std=gnu99 \
-@MUDFLAP_FALSE@ -fpic $($(*F)_CFLAGS) $(if \
-@MUDFLAP_FALSE@ $($(*F)_no_Werror),,-Werror)
-@MUDFLAP_TRUE@AM_CFLAGS = -fmudflap -Wall -Wshadow -Wunused -Wextra \
-@MUDFLAP_TRUE@ -std=gnu99 -fpic $($(*F)_CFLAGS) $(if \
-@MUDFLAP_TRUE@ $($(*F)_no_Werror),,-Werror)
-INCLUDES = -I$(srcdir) -I$(srcdir)/../lib -I$(srcdir)/../libelf \
- -I$(srcdir)/../libebl -I$(srcdir)/../libdw -I$(srcdir)/../libasm
-
-LEXCOMPILE = $(LEX) $(LFLAGS) $(AM_LFLAGS) -P$(<F:lex.l=)
-AM_YFLAGS = -p$(<F:parse.y=)
-@MUDFLAP_TRUE@libmudflap = -lmudflap
-noinst_LIBRARIES = libcpu_i386.a libcpu_x86_64.a
-libcpu_i386_a_SOURCES = i386_disasm.c
-libcpu_x86_64_a_SOURCES = x86_64_disasm.c
-i386_gendis_SOURCES = i386_gendis.c i386_lex.l i386_parse.y
-i386_lex_no_Werror = yes
-libeu = ../lib/libeu.a
-i386_lex_CFLAGS = -Wno-unused-label -Wno-unused-function -Wno-sign-compare
-i386_parse_CFLAGS = -DNMNES=$$(wc -l < i386.mnemonics)
-i386_gendis_LDADD = $(libeu) -lm $(libmudflap)
-noinst_HEADERS = memory-access.h i386_parse.h i386_data.h
-EXTRA_DIST = defs/i386
-CLEANFILES = i386.mnemonics i386_dis.h x86_64.mnemonics x86_64_dis.h
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .l .o .obj .y
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
- && exit 0; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits libcpu/Makefile'; \
- cd $(top_srcdir) && \
- $(AUTOMAKE) --gnits libcpu/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-clean-noinstLIBRARIES:
- -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
-libcpu_i386.a: $(libcpu_i386_a_OBJECTS) $(libcpu_i386_a_DEPENDENCIES)
- -rm -f libcpu_i386.a
- $(libcpu_i386_a_AR) libcpu_i386.a $(libcpu_i386_a_OBJECTS) $(libcpu_i386_a_LIBADD)
- $(RANLIB) libcpu_i386.a
-libcpu_x86_64.a: $(libcpu_x86_64_a_OBJECTS) $(libcpu_x86_64_a_DEPENDENCIES)
- -rm -f libcpu_x86_64.a
- $(libcpu_x86_64_a_AR) libcpu_x86_64.a $(libcpu_x86_64_a_OBJECTS) $(libcpu_x86_64_a_LIBADD)
- $(RANLIB) libcpu_x86_64.a
-
-clean-noinstPROGRAMS:
- -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
-i386_gendis$(EXEEXT): $(i386_gendis_OBJECTS) $(i386_gendis_DEPENDENCIES)
- @rm -f i386_gendis$(EXEEXT)
- $(LINK) $(i386_gendis_OBJECTS) $(i386_gendis_LDADD) $(LIBS)
-
-mostlyclean-compile:
- -rm -f *.$(OBJEXT)
-
-distclean-compile:
- -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386_disasm.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386_gendis.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386_lex.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386_parse.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/x86_64_disasm.Po@am__quote@
-
-.c.o:
-@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
-
-.c.obj:
-@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.l.c:
- $(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE)
-
-.y.c:
- $(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h $*.h y.output $*.output -- $(YACCCOMPILE)
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- mkid -fID $$unique
-tags: TAGS
-
-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- here=`pwd`; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$tags $$unique; \
- fi
-ctags: CTAGS
-CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- test -z "$(CTAGS_ARGS)$$tags$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$tags $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && cd $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) $$here
-
-distclean-tags:
- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- list='$(DISTFILES)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
- fi; \
- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
- else \
- test -f $(distdir)/$$file \
- || cp -p $$d/$$file $(distdir)/$$file \
- || exit 1; \
- fi; \
- done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(HEADERS)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
- -rm -f i386_lex.c
- -rm -f i386_parse.c
-clean: clean-am
-
-clean-am: clean-generic clean-noinstLIBRARIES clean-noinstPROGRAMS \
- mostlyclean-am
-
-distclean: distclean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
- distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-info: install-info-am
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-ps: install-ps-am
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
- clean-noinstLIBRARIES clean-noinstPROGRAMS ctags distclean \
- distclean-compile distclean-generic distclean-tags distdir dvi \
- dvi-am html html-am info info-am install install-am \
- install-data install-data-am install-dvi install-dvi-am \
- install-exec install-exec-am install-html install-html-am \
- install-info install-info-am install-man install-pdf \
- install-pdf-am install-ps install-ps-am install-strip \
- installcheck installcheck-am installdirs maintainer-clean \
- maintainer-clean-generic mostlyclean mostlyclean-compile \
- mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
- uninstall-am
-
-
-i386_disasm.o: i386.mnemonics i386_dis.h
-x86_64_disasm.o: x86_64.mnemonics x86_64_dis.h i386_disasm.c
-
-i386_dis.h: i386_gendis $(srcdir)/defs/i386
- m4 -Di386 -DDISASSEMBLER $(srcdir)/defs/i386 | ./i386_gendis - > $@
-x86_64_dis.h: i386_gendis $(srcdir)/defs/i386
- m4 -Dx86_64 -DDISASSEMBLER $(srcdir)/defs/i386 | ./i386_gendis - > $@
-
-i386.mnemonics x86_64.mnemonics: %.mnemonics: $(srcdir)/defs/i386
- m4 -D$(@:.mnemonics=) -DDISASSEMBLER $^ \
- | sed '1,/^%%/d;/^#/d;/^[[:space:]]*$$/d;s/[^:]*:\([^[:space:]]*\).*/MNE(\1)/;s/{[^}]*}//g;/INVALID/d' \
- | sort -u > $@
-i386_parse.o: i386_parse.c i386.mnemonics
-i386_lex.o: i386_parse.h
-
-i386_parse.h: i386_parse.c ;
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/libcpu/defs/i386 b/libcpu/defs/i386
deleted file mode 100644
index d928a4d..0000000
--- a/libcpu/defs/i386
+++ /dev/null
@@ -1,922 +0,0 @@
-%mask {s} 1
-%mask {w} 1
-%mask {w1} 1
-%mask {W1} 1
-%mask {W2} 1
-dnl floating point reg suffix
-%mask {D} 1
-%mask {imm8} 8
-%mask {imms8} 8
-%mask {imm16} 16
-%mask {reg} 3
-%mask {oreg} 3
-%mask {reg16} 3
-%mask {reg64} 3
-%mask {tttn} 4
-%mask {mod} 2
-%mask {moda} 2
-%mask {MOD} 2
-%mask {r_m} 3
-dnl like {r_m} but referencing byte register
-%mask {8r_m} 3
-dnl like {r_m} but referencing 16-bit register
-%mask {16r_m} 3
-dnl like {r_m} but referencing 32- or 64-bit register
-%mask {64r_m} 3
-%mask {disp8} 8
-dnl imm really is 8/16/32 bit depending on the situation.
-%mask {imm} 8
-%mask {imm64} 8
-%mask {imms} 8
-%mask {rel} 32
-%mask {abs} 32
-%mask {absval} 32
-%mask {sel} 16
-%mask {imm32} 32
-%mask {ccc} 3
-%mask {ddd} 3
-%mask {sreg3} 3
-%mask {sreg2} 2
-%mask {mmxreg} 3
-%mask {R_M} 3
-%mask {Mod} 2
-%mask {xmmreg} 3
-%mask {R_m} 3
-%mask {xmmreg1} 3
-%mask {xmmreg2} 3
-%mask {mmxreg1} 3
-%mask {mmxreg2} 3
-%mask {predps} 8
-%mask {freg} 3
-%mask {fmod} 2
-%mask {fr_m} 3
-%prefix {R}
-%prefix {RE}
-%suffix {W}
-%suffix {w0}
-%synonym {xmmreg1} {xmmreg}
-%synonym {xmmreg2} {xmmreg}
-%synonym {mmxreg1} {mmxreg}
-%synonym {mmxreg2} {mmxreg}
-ifdef(`i386',
-`%synonym {oreg} {reg}
-%synonym {imm64} {imm}
-')dnl
-
-%%
-ifdef(`i386',
-`00110111:aaa
-11010101,00001010:aad
-11010100,00001010:aam
-00111111:aas
-')dnl
-0001010{w},{imm}:adc {imm}{w},{ax}{w}
-1000000{w},{mod}010{r_m},{imm}:adc{w} {imm}{w},{mod}{r_m}{w}
-1000001{w},{mod}010{r_m},{imms8}:adc{w} {imms8},{mod}{r_m}
-0001000{w},{mod}{reg}{r_m}:adc {reg}{w},{mod}{r_m}{w}
-0001001{w},{mod}{reg}{r_m}:adc {mod}{r_m}{w},{reg}{w}
-0000010{w},{imm}:add {imm}{w},{ax}{w}
-1000000{w},{mod}000{r_m},{imm}:add{w} {imm}{w},{mod}{r_m}{w}
-10000011,{mod}000{r_m},{imms8}:add{w} {imms8},{mod}{r_m}
-0000000{w},{mod}{reg}{r_m}:add {reg}{w},{mod}{r_m}{w}
-0000001{w},{mod}{reg}{r_m}:add {mod}{r_m}{w},{reg}{w}
-01100110,00001111,11010000,{Mod}{xmmreg}{R_m}:addsubpd {Mod}{R_m},{xmmreg}
-11110010,00001111,11010000,{Mod}{xmmreg}{R_m}:addsubps {Mod}{R_m},{xmmreg}
-0010010{w},{imm}:and {imm}{w},{ax}{w}
-1000000{w},{mod}100{r_m},{imm}:and{w} {imm}{w},{mod}{r_m}{w}
-1000001{w},{mod}100{r_m},{imms8}:and{w} {imms8},{mod}{r_m}
-0010000{w},{mod}{reg}{r_m}:and {reg}{w},{mod}{r_m}{w}
-0010001{w},{mod}{reg}{r_m}:and {mod}{r_m}{w},{reg}{w}
-01100110,00001111,01010100,{Mod}{xmmreg}{R_m}:andpd {Mod}{R_m},{xmmreg}
-00001111,01010100,{Mod}{xmmreg}{R_m}:andps {Mod}{R_m},{xmmreg}
-01100110,00001111,01010101,{Mod}{xmmreg}{R_m}:andnpd {Mod}{R_m},{xmmreg}
-00001111,01010101,{Mod}{xmmreg}{R_m}:andnps {Mod}{R_m},{xmmreg}
-ifdef(`i386',
-`01100011,{mod}{reg16}{r_m}:arpl {reg16},{mod}{r_m}
-01100010,{moda}{reg}{r_m}:bound {reg},{moda}{r_m}
-',
-`01100011,{mod}{reg64}{r_m}:movslq {mod}{r_m},{reg64}
-')dnl
-00001111,10111100,{mod}{reg}{r_m}:bsf {mod}{r_m},{reg}
-00001111,10111101,{mod}{reg}{r_m}:bsr {mod}{r_m},{reg}
-00001111,11001{reg}:bswap {reg}
-00001111,10100011,{mod}{reg}{r_m}:bt {reg},{mod}{r_m}
-00001111,10111010,{mod}100{r_m},{imm8}:bt{w} {imm8},{mod}{r_m}
-00001111,10111011,{mod}{reg}{r_m}:btc {reg},{mod}{r_m}
-00001111,10111010,{mod}111{r_m},{imm8}:btc{w} {imm8},{mod}{r_m}
-00001111,10110011,{mod}{reg}{r_m}:btr {reg},{mod}{r_m}
-00001111,10111010,{mod}110{r_m},{imm8}:btr{w} {imm8},{mod}{r_m}
-00001111,10101011,{mod}{reg}{r_m}:bts {reg},{mod}{r_m}
-00001111,10111010,{mod}101{r_m},{imm8}:bts{w} {imm8},{mod}{r_m}
-11101000,{rel}:call{W} {rel}
-11111111,{mod}010{64r_m}:call{W} *{mod}{64r_m}
-ifdef(`i386',
-`10011010,{absval},{sel}:lcall {sel},{absval}
-')dnl
-11111111,{mod}011{64r_m}:lcall{W} *{mod}{64r_m}
-# SPECIAL 10011000:[{rex.w}?cltq:{dpfx}?cbtw:cwtl]
-10011000:INVALID
-# SPECIAL 10011001:[{rex.w}?cqto:{dpfx}?cltd:cwtd]
-10011001:INVALID
-11111000:clc
-11111100:cld
-11111010:cli
-00001111,00000101:syscall
-00001111,00000110:clts
-00001111,00000111:sysret
-00001111,00110100:sysenter
-00001111,00110101:sysexit
-11110101:cmc
-00001111,0100{tttn},{mod}{reg}{r_m}:cmov{tttn} {mod}{r_m},{reg}
-0011110{w},{imm}:cmp {imm}{w},{ax}{w}
-1000000{w},{mod}111{r_m},{imm}:cmp{w} {imm}{w},{mod}{r_m}{w}
-10000011,{mod}111{r_m},{imms8}:cmp{w} {imms8},{mod}{r_m}
-0011100{w},{mod}{reg}{r_m}:cmp {reg}{w},{mod}{r_m}{w}
-0011101{w},{mod}{reg}{r_m}:cmp {mod}{r_m}{w},{reg}{w}
-ifdef(`ASSEMBLER',
-`11110010,00001111,11000010,{Mod}{xmmreg}{R_m},{imm8}:cmpsd {imm8},{Mod}{R_m},{xmmreg}
-11110011,00001111,11000010,{Mod}{xmmreg}{R_m},{imm8}:cmpss {imm8},{Mod}{R_m},{xmmreg}
-01100110,00001111,11000010,{Mod}{xmmreg}{R_m},{imm8}:cmppd {imm8},{Mod}{R_m},{xmmreg}
-00001111,11000010,{Mod}{xmmreg}{R_m},{imm8}:cmpps {imm8},{Mod}{R_m},{xmmreg}
-',
-`11110010,00001111,11000010,{Mod}{xmmreg}{R_m},{imm8}:INVALID {Mod}{R_m},{xmmreg}
-11110011,00001111,11000010,{Mod}{xmmreg}{R_m},{imm8}:INVALID {Mod}{R_m},{xmmreg}
-01100110,00001111,11000010,{Mod}{xmmreg}{R_m},{imm8}:INVALID {Mod}{R_m},{xmmreg}
-00001111,11000010,{Mod}{xmmreg}{R_m},{imm8}:INVALID {Mod}{R_m},{xmmreg}
-')dnl
-1010011{w}:{RE}cmps{w} {es_di},{ds_si}
-00001111,1011000{w},{mod}{reg}{r_m}:cmpxchg {reg}{w},{mod}{r_m}{w}
-ifdef(`i386',
-`00001111,11000111,{mod}001{r_m}:cmpxchg8b {mod}{r_m}
-',
-`# SPECIAL 00001111,11000111,{mod}001{r_m}:[{rex.w}?cmpxchg16b:cmpxchg8b] {reg},{mod}{r_m}
-00001111,11000111,{mod}001{r_m}:INVALID {mod}{r_m}
-')dnl
-00001111,10100010:cpuid
-11110011,00001111,11100110,{Mod}{xmmreg}{R_m}:cvtdq2pd {Mod}{R_m},{xmmreg}
-11110010,00001111,11100110,{Mod}{xmmreg}{R_m}:cvtpd2dq {Mod}{R_m},{xmmreg}
-01100110,00001111,11100110,{Mod}{xmmreg}{R_m}:cvttpd2dq {Mod}{R_m},{xmmreg}
-ifdef(`i386',
-`00100111:daa
-00101111:das
-')dnl
-1111111{w},{mod}001{r_m}:dec{w} {mod}{r_m}{w}
-ifdef(`i386',
-`01001{reg}:dec {reg}
-')dnl
-1111011{w},{mod}110{r_m}:div{w} {mod}{r_m}{w}
-00001111,01110111:emms
-11001000,{imm16},{imm8}:enter{W} {imm16},{imm8}
-11011001,11010000:fnop
-11011001,11100000:fchs
-11011001,11100001:fabs
-11011001,11100100:ftst
-11011001,11100101:fxam
-11011001,11101000:fld1
-11011001,11101001:fldl2t
-11011001,11101010:fldl2e
-11011001,11101011:fldpi
-11011001,11101100:fldlg2
-11011001,11101101:fldln2
-11011001,11101110:fldz
-11011001,11110000:f2xm1
-11011001,11110001:fyl2x
-11011001,11110010:fptan
-11011001,11110011:fpatan
-11011001,11110100:fxtract
-11011001,11110101:fprem1
-11011001,11110110:fdecstp
-11011001,11110111:fincstp
-11011001,11111000:fprem
-11011001,11111001:fyl2xp1
-11011001,11111010:fsqrt
-11011001,11111011:fsincos
-11011001,11111100:frndint
-11011001,11111101:fscale
-11011001,11111110:fsin
-11011001,11111111:fcos
-# ORDER
-11011000,11000{freg}:fadd {freg},%st
-11011100,11000{freg}:fadd %st,{freg}
-11011{D}00,{mod}000{r_m}:fadd{D} {mod}{r_m}
-# ORDER END
-# ORDER
-11011000,11001{freg}:fmul {freg},%st
-11011100,11001{freg}:fmul %st,{freg}
-11011{D}00,{mod}001{r_m}:fmul{D} {mod}{r_m}
-# ORDER END
-# ORDER
-11011000,11100{freg}:fsub {freg},%st
-11011100,11100{freg}:fsub %st,{freg}
-11011{D}00,{mod}100{r_m}:fsub{D} {mod}{r_m}
-# ORDER END
-# ORDER
-11011000,11101{freg}:fsubr {freg},%st
-11011100,11101{freg}:fsubr %st,{freg}
-11011{D}00,{mod}101{r_m}:fsubr{D} {mod}{r_m}
-# ORDER END
-# ORDER
-11011101,11010{freg}:fst {freg}
-11011{D}01,{mod}010{r_m}:fst{D} {mod}{r_m}
-# ORDER END
-# ORDER
-11011101,11011{freg}:fstp {freg}
-11011{D}01,{mod}011{r_m}:fstp{D} {mod}{r_m}
-# ORDER END
-11011001,{mod}100{r_m}:fldenv {mod}{r_m}
-11011001,{mod}101{r_m}:fldcw {mod}{r_m}
-11011001,{mod}110{r_m}:fnstenv {mod}{r_m}
-11011001,{mod}111{r_m}:fnstcw {mod}{r_m}
-11011001,11001{freg}:fxch {freg}
-# ORDER
-11011110,11000{freg}:faddp %st,{freg}
-ifdef(`ASSEMBLER',
-`11011110,11000001:faddp
-')dnl
-# ORDER
-11011010,11000{freg}:fcmovb {freg},%st
-11011{w1}10,{mod}000{r_m}:fiadd{w1} {mod}{r_m}
-# ORDER END
-# ORDER
-11011010,11001{freg}:fcmove {freg},%st
-11011110,11001{freg}:fmulp %st,{freg}
-11011{w1}10,{mod}001{r_m}:fimul{w1} {mod}{r_m}
-# ORDER END
-# ORDER
-11011110,11100{freg}:fsubp %st,{freg}
-11011{w1}10,{mod}100{r_m}:fisub{w1} {mod}{r_m}
-# ORDER END
-# ORDER
-11011110,11101{freg}:fsubrp %st,{freg}
-11011{w1}10,{mod}101{r_m}:fisubr{w1} {mod}{r_m}
-# ORDER END
-# ORDER
-11011111,11100000:fnstsw %ax
-11011111,{mod}100{r_m}:fbld {mod}{r_m}
-# ORDER END
-# ORDER
-11011111,11110{freg}:fcomip {freg},%st
-11011111,{mod}110{r_m}:fbstp {mod}{r_m}
-# ORDER END
-11011001,11100000:fchs
-# ORDER
-10011011,11011011,11100010:fclex
-10011011,11011011,11100011:finit
-10011011:fwait
-# END ORDER
-11011011,11100010:fnclex
-11011010,11000{freg}:fcmovb {freg},%st
-11011010,11001{freg}:fcmove {freg},%st
-11011010,11010{freg}:fcmovbe {freg},%st
-11011010,11011{freg}:fcmovu {freg},%st
-11011011,11000{freg}:fcmovnb {freg},%st
-11011011,11001{freg}:fcmovne {freg},%st
-11011011,11010{freg}:fcmovnbe {freg},%st
-11011011,11011{freg}:fcmovnu {freg},%st
-# ORDER
-11011000,11010{freg}:fcom {freg}
-ifdef(`ASSEMBLER',
-`11011000,11010001:fcom
-')dnl
-11011{D}00,{mod}010{r_m}:fcom{D} {mod}{r_m}
-# END ORDER
-# ORDER
-11011000,11011{freg}:fcomp {freg}
-ifdef(`ASSEMBLER',
-`11011000,11011001:fcomp
-')dnl
-11011{D}00,{mod}011{r_m}:fcomp{D} {mod}{r_m}
-# END ORDER
-11011110,11011001:fcompp
-11011011,11110{freg}:fcomi {freg},%st
-11011111,11110{freg}:fcomip {freg},%st
-11011011,11101{freg}:fucomi {freg},%st
-11011111,11101{freg}:fucomip {freg},%st
-11011001,11111111:fcos
-11011001,11110110:fdecstp
-# ORDER
-11011000,11110{freg}:fdiv {freg},%st
-11011100,11110{freg}:fdiv %st,{freg}
-11011{D}00,{mod}110{r_m}:fdiv{D} {mod}{r_m}
-# END ORDER
-11011010,{mod}110{r_m}:fidivl {mod}{r_m}
-# ORDER
-11011110,11110{freg}:fdivp %st,{freg}
-11011110,{mod}110{r_m}:fidiv {mod}{r_m}
-# END ORDER
-11011110,11111{freg}:fdivrp %st,{freg}
-ifdef(`ASSEMBLER',
-`11011110,11111001:fdivp
-')dnl
-# ORDER
-11011000,11111{freg}:fdivr {freg},%st
-11011100,11111{freg}:fdivr %st,{freg}
-11011{D}00,{mod}111{r_m}:fdivr{D} {mod}{r_m}
-# END ORDER
-11011010,{mod}111{r_m}:fidivrl {mod}{r_m}
-11011110,{mod}111{r_m}:fidivr {mod}{r_m}
-11011110,11110{freg}:fdivrp %st,{freg}
-ifdef(`ASSEMBLER',
-`11011110,11110001:fdivrp
-')dnl
-11011101,11000{freg}:ffree {freg}
-11011010,11010{freg}:fcmovbe {freg}
-11011{w1}10,{mod}010{r_m}:ficom{w1} {mod}{r_m}
-11011010,11011{freg}:fcmovu {freg}
-11011{w1}10,{mod}011{r_m}:ficomp{w1} {mod}{r_m}
-11011111,{mod}000{r_m}:fild {mod}{r_m}
-11011011,{mod}000{r_m}:fildl {mod}{r_m}
-11011111,{mod}101{r_m}:fildll {mod}{r_m}
-11011001,11110111:fincstp
-11011011,11100011:fninit
-11011{w1}11,{mod}010{r_m}:fist{w1} {mod}{r_m}
-11011{w1}11,{mod}011{r_m}:fistp{w1} {mod}{r_m}
-11011111,{mod}111{r_m}:fistpll {mod}{r_m}
-11011{w1}11,{mod}001{r_m}:fisttp{w1} {mod}{r_m}
-11011101,{mod}001{r_m}:fisttpll {mod}{r_m}
-11011011,{mod}101{r_m}:fldt {mod}{r_m}
-11011011,{mod}111{r_m}:fstpt {mod}{r_m}
-# ORDER
-11011001,11000{freg}:fld {freg}
-11011{D}01,{mod}000{r_m}:fld{D} {mod}{r_m}
-# ORDER END
-# ORDER
-11011101,11100{freg}:fucom {freg}
-11011101,{mod}100{r_m}:frstor {mod}{r_m}
-# ORDER END
-11011101,11101{freg}:fucomp {freg}
-11011101,{mod}110{r_m}:fnsave {mod}{r_m}
-11011101,{mod}111{r_m}:fnstsw {mod}{r_m}
-#
-#
-#
-11110100:hlt
-1111011{w},{mod}111{r_m}:idiv{w} {mod}{r_m}{w}
-1111011{w},{mod}101{r_m}:imul{w} {mod}{r_m}{w}
-00001111,10101111,{mod}{reg}{r_m}:imul {mod}{r_m},{reg}
-011010{s}1,{mod}{reg}{r_m},{imm}:imul {imm}{s},{mod}{r_m},{reg}
-1110010{w},{imm8}:in {imm8},{ax}{w}
-1110110{w}:in {dx},{ax}{w}
-1111111{w},{mod}000{r_m}:inc{w} {mod}{r_m}{w}
-ifdef(`i386',
-`01000{reg}:inc {reg}
-')dnl
-0110110{w}:{R}ins{w} {dx},{es_di}
-11001101,{imm8}:int {imm8}
-11001100:int3
-ifdef(`i386',
-`11001110:into
-')dnl
-00001111,00001000:invd
-# ORDER
-00001111,00000001,11111000:swapgs
-00001111,00000001,{mod}111{r_m}:invlpg {mod}{r_m}
-# ORDER END
-11001111:iret{W1}
-0111{tttn},{disp8}:j{tttn} {disp8}
-00001111,1000{tttn},{rel}:j{tttn} {rel}
-00001111,1001{tttn},{mod}000{8r_m}:set{tttn} {mod}{8r_m}
-# SPECIAL 11100011,{disp8}:[{dpfx}?jcxz:jecxz] {disp8}
-11100011,{disp8}:INVALID {disp8}
-11101011,{disp8}:jmp {disp8}
-11101001,{rel}:jmp{W} {rel}
-11111111,{mod}100{64r_m}:jmp{W} *{mod}{64r_m}
-11101010,{absval},{sel}:ljmp {sel},{absval}
-11111111,{mod}101{64r_m}:ljmp{W} *{mod}{64r_m}
-10011111:lahf
-00001111,00000010,{mod}{reg}{16r_m}:lar {mod}{16r_m},{reg}
-ifdef(`i386',
-`11000101,{mod}{reg}{r_m}:lds {mod}{r_m},{reg}
-')dnl
-10001101,{mod}{reg}{r_m}:lea {mod}{r_m},{reg}
-11001001:leave{W}
-ifdef(`i386',
-`11000100,{mod}{reg}{r_m}:les {mod}{r_m},{reg}
-')dnl
-00001111,10110100,{mod}{reg}{r_m}:lfs {mod}{r_m},{reg}
-00001111,10110101,{mod}{reg}{r_m}:lgs {mod}{r_m},{reg}
-ifdef(`i386',
-`00001111,00000001,{mod}010{r_m}:lgdt{w0} {mod}{r_m}
-00001111,00000001,{mod}011{r_m}:lidt{w0} {mod}{r_m}
-',
-`00001111,00000001,{mod}010{r_m}:lgdt {mod}{r_m}
-00001111,00000001,{mod}011{r_m}:lidt {mod}{r_m}
-')dnl
-00001111,00000000,{mod}010{16r_m}:lldt {mod}{16r_m}
-00001111,00000001,{mod}110{16r_m}:lmsw {mod}{16r_m}
-11110000:lock
-1010110{w}:{R}lods {ds_si},{ax}{w}
-11100010,{disp8}:loop {disp8}
-11100001,{disp8}:loope {disp8}
-11100000,{disp8}:loopne {disp8}
-00001111,00000011,{mod}{reg}{16r_m}:lsl {mod}{16r_m},{reg}
-00001111,10110010,{mod}{reg}{r_m}:lss {mod}{r_m},{reg}
-00001111,00000000,{mod}011{16r_m}:ltr {mod}{16r_m}
-1000100{w},{mod}{reg}{r_m}:mov {reg}{w},{mod}{r_m}{w}
-1000101{w},{mod}{reg}{r_m}:mov {mod}{r_m}{w},{reg}{w}
-1100011{w},{mod}000{r_m},{imm}:mov{w} {imm}{w},{mod}{r_m}{w}
-1011{w}{oreg},{imm64}:mov {imm64}{w},{oreg}{w}
-1010000{w},{abs}:mov {abs},{ax}{w}
-1010001{w},{abs}:mov {ax}{w},{abs}
-00001111,00100000,11{ccc}{reg64}:mov {ccc},{reg64}
-00001111,00100010,11{ccc}{reg64}:mov {reg64},{ccc}
-00001111,00100001,11{ddd}{reg64}:mov {ddd},{reg64}
-00001111,00100011,11{ddd}{reg64}:mov {reg64},{ddd}
-10001100,{mod}{sreg3}{r_m}:mov {sreg3},{mod}{r_m}
-10001110,{mod}{sreg3}{r_m}:mov {mod}{r_m},{sreg3}
-1010010{w}:{R}movs{w} {ds_si},{es_di}
-00001111,10111110,{mod}{reg}{8r_m}:movsbl {mod}{8r_m},{reg}
-00001111,10111111,{mod}{reg}{16r_m}:movswl {mod}{16r_m},{reg}
-00001111,10110110,{mod}{reg}{8r_m}:movzbl {mod}{8r_m},{reg}
-00001111,10110111,{mod}{reg}{16r_m}:movzwl {mod}{16r_m},{reg}
-1111011{w},{mod}100{r_m}:mul{w} {mod}{r_m}{w}
-1111011{w},{mod}011{r_m}:neg{w} {mod}{r_m}{w}
-11110011,10010000:pause
-ifdef(`i386',
-`10010000:nop
-',
-`10010000:INVALID
-')dnl
-1111011{w},{mod}010{r_m}:not{w} {mod}{r_m}{w}
-0000100{w},{mod}{reg}{r_m}:or {reg}{w},{mod}{r_m}{w}
-0000101{w},{mod}{reg}{r_m}:or {mod}{r_m}{w},{reg}{w}
-1000000{w},{mod}001{r_m},{imm}:or{w} {imm}{w},{mod}{r_m}{w}
-1000001{w},{mod}001{r_m},{imms8}:or{w} {imms8},{mod}{r_m}{w}
-0000110{w},{imm}:or {imm}{w},{ax}{w}
-1110011{w},{imm8}:out {ax}{w},{imm8}
-1110111{w}:out {ax}{w},{dx}
-0110111{w}:{R}outs{w} {ds_si},{dx}
-ifdef(`i386',
-`10001111,{mod}000{r_m}:pop{w} {mod}{r_m}
-',
-# XXX This is not the cleanest way...
-`10001111,11000{reg64}:pop {reg64}
-10001111,{mod}000{r_m}:pop{W} {mod}{r_m}
-')dnl
-00001111,10{sreg3}001:pop{W} {sreg3}
-10011101:popf{W}
-# XXX This is not the cleanest way...
-ifdef(`i386',
-`11111111,{mod}110{r_m}:push{w} {mod}{r_m}
-',
-`11111111,11110{reg64}:push {reg64}
-11111111,{mod}110{r_m}:pushq {mod}{r_m}
-')dnl
-ifdef(`i386',
-`01010{reg}:push {reg}
-01011{reg}:pop {reg}
-',
-`01010{reg64}:push {reg64}
-01011{reg64}:pop {reg64}
-')dnl
-011010{s}0,{imm}:push{W} {imm}{s}
-000{sreg2}110:push {sreg2}
-00001111,10{sreg3}000:push{W} {sreg3}
-ifdef(`i386',
-`01100000:pusha{W}
-01100001:popa{W}
-')dnl
-10011100:pushf{W}
-1101000{w},{mod}010{r_m}:rcl{w} {mod}{r_m}{w}
-1101001{w},{mod}010{r_m}:rcl{w} %cl,{mod}{r_m}{w}
-1100000{w},{mod}010{r_m},{imm8}:rcl{w} {imm8},{mod}{r_m}{w}
-1101000{w},{mod}011{r_m}:rcr{w} {mod}{r_m}{w}
-1101001{w},{mod}011{r_m}:rcr{w} %cl,{mod}{r_m}{w}
-1100000{w},{mod}011{r_m},{imm8}:rcr{w} {imm8},{mod}{r_m}{w}
-00001111,00110010:rdmsr
-00001111,00110011:rdpmc
-00001111,00110001:rdtsc
-11000011:ret{W}
-11000010,{imm16}:ret{W} {imm16}
-11001011:lret
-11001010,{imm16}:lret {imm16}
-1101000{w},{mod}000{r_m}:rol{w} {mod}{r_m}{w}
-1101001{w},{mod}000{r_m}:rol{w} %cl,{mod}{r_m}{w}
-1100000{w},{mod}000{r_m},{imm8}:rol{w} {imm8},{mod}{r_m}{w}
-1101000{w},{mod}001{r_m}:ror{w} {mod}{r_m}{w}
-1101001{w},{mod}001{r_m}:ror{w} %cl,{mod}{r_m}{w}
-1100000{w},{mod}001{r_m},{imm8}:ror{w} {imm8},{mod}{r_m}{w}
-00001111,10101010:rsm
-10011110:sahf
-1101000{w},{mod}111{r_m}:sar{w} {mod}{r_m}{w}
-1101001{w},{mod}111{r_m}:sar{w} %cl,{mod}{r_m}{w}
-1100000{w},{mod}111{r_m},{imm8}:sar{w} {imm8},{mod}{r_m}{w}
-0001100{w},{mod}{reg}{r_m}:sbb {reg}{w},{mod}{r_m}{w}
-0001101{w},{mod}{reg}{r_m}:sbb {mod}{r_m}{w},{reg}{w}
-0001110{w},{imm}:sbb {imm}{w},{ax}{w}
-1000000{w},{mod}011{r_m},{imm}:sbb{w} {imm}{w},{mod}{r_m}{w}
-1000001{w},{mod}011{r_m},{imms8}:sbb{w} {imms8},{mod}{r_m}
-1010111{w}:{RE}scas {es_di},{ax}{w}
-00001111,1001{tttn},{mod}000{r_m}:set{tttn} {mod}{r_m}
-1101000{w},{mod}100{r_m}:shl{w} {mod}{r_m}{w}
-1101001{w},{mod}100{r_m}:shl{w} %cl,{mod}{r_m}{w}
-1100000{w},{mod}100{r_m},{imm8}:shl{w} {imm8},{mod}{r_m}{w}
-1101000{w},{mod}101{r_m}:shr{w} {mod}{r_m}{w}
-00001111,10100100,{mod}{reg}{r_m},{imm8}:shld {imm8},{reg},{mod}{r_m}
-00001111,10100101,{mod}{reg}{r_m}:shld %cl,{reg},{mod}{r_m}
-1101001{w},{mod}101{r_m}:shr{w} %cl,{mod}{r_m}{w}
-1100000{w},{mod}101{r_m},{imm8}:shr{w} {imm8},{mod}{r_m}{w}
-00001111,10101100,{mod}{reg}{r_m},{imm8}:shrd {imm8},{reg},{mod}{r_m}
-00001111,10101101,{mod}{reg}{r_m}:shrd %cl,{reg},{mod}{r_m}
-# ORDER
-00001111,00000001,11000001:vmcall
-00001111,00000001,11000010:vmlaunch
-00001111,00000001,11000011:vmresume
-00001111,00000001,11000100:vmxoff
-00001111,01111000,{mod}{reg64}{64r_m}:vmread {reg64},{mod}{64r_m}
-00001111,01111001,{mod}{reg64}{64r_m}:vmwrite {mod}{64r_m},{reg64}
-ifdef(`i386',
-`00001111,00000001,{mod}000{r_m}:sgdtl {mod}{r_m}
-',
-`00001111,00000001,{mod}000{r_m}:sgdt {mod}{r_m}
-')dnl
-# ORDER END
-# ORDER
-ifdef(`i386',
-`00001111,00000001,11001000:monitor %eax,%ecx,%edx
-00001111,00000001,11001001:mwait %eax,%ecx
-',
-`00001111,00000001,11001000:monitor %rax,%rcx,%rdx
-00001111,00000001,11001001:mwait %rax,%rcx
-')dnl
-ifdef(`i386',
-`00001111,00000001,{mod}001{r_m}:sidtl {mod}{r_m}
-',
-`00001111,00000001,{mod}001{r_m}:sidt {mod}{r_m}
-')dnl
-# ORDER END
-00001111,00000000,{mod}000{r_m}:sldt {mod}{r_m}
-00001111,00000001,{mod}100{r_m}:smsw {mod}{r_m}
-11111001:stc
-11111101:std
-11111011:sti
-1010101{w}:{R}stos {ax}{w},{es_di}
-00001111,00000000,{mod}001{r_m}:str {mod}{r_m}
-0010100{w},{mod}{reg}{r_m}:sub {reg}{w},{mod}{r_m}{w}
-0010101{w},{mod}{reg}{r_m}:sub {mod}{r_m}{w},{reg}{w}
-0010110{w},{imm}:sub {imm}{w},{ax}{w}
-1000000{w},{mod}101{r_m},{imm}:sub{w} {imm}{w},{mod}{r_m}{w}
-1000001{w},{mod}101{r_m},{imms8}:sub{w} {imms8},{mod}{r_m}
-1000010{w},{mod}{reg}{r_m}:test {reg}{w},{mod}{r_m}{w}
-1010100{w},{imm}:test {imm}{w},{ax}{w}
-1111011{w},{mod}000{r_m},{imm}:test{w} {imm}{w},{mod}{r_m}{w}
-00001111,00001011:ud2a
-00001111,00000000,{mod}100{16r_m}:verr {mod}{16r_m}
-00001111,00000000,{mod}101{16r_m}:verw {mod}{16r_m}
-00001111,00001001:wbinvd
-00001111,00001101,{mod}000{8r_m}:prefetch {mod}{8r_m}
-00001111,00001101,{mod}001{8r_m}:prefetchw {mod}{8r_m}
-00001111,00011000,{mod}000{r_m}:prefetchnta {mod}{r_m}
-00001111,00011000,{mod}001{r_m}:prefetcht0 {mod}{r_m}
-00001111,00011000,{mod}010{r_m}:prefetcht1 {mod}{r_m}
-00001111,00011000,{mod}011{r_m}:prefetcht2 {mod}{r_m}
-00001111,00011111,{mod}{reg}{r_m}:nop{w} {mod}{r_m}
-00001111,00110000:wrmsr
-00001111,1100000{w},{mod}{reg}{r_m}:xadd {reg}{w},{mod}{r_m}{w}
-1000011{w},{mod}{reg}{r_m}:xchg {reg}{w},{mod}{r_m}{w}
-10010{oreg}:xchg {ax},{oreg}
-11010111:xlat {ds_bx}
-0011000{w},{mod}{reg}{r_m}:xor {reg}{w},{mod}{r_m}{w}
-0011001{w},{mod}{reg}{r_m}:xor {mod}{r_m}{w},{reg}{w}
-0011010{w},{imm}:xor {imm}{w},{ax}{w}
-1000000{w},{mod}110{r_m},{imm}:xor{w} {imm}{w},{mod}{r_m}{w}
-1000001{w},{mod}110{r_m},{imms8}:xor{w} {imms8},{mod}{r_m}
-00001111,01110111:emms
-01100110,00001111,11011011,{Mod}{xmmreg}{R_m}:pand {Mod}{R_m},{xmmreg}
-00001111,11011011,{MOD}{mmxreg}{R_M}:pand {MOD}{R_M},{mmxreg}
-01100110,00001111,11011111,{Mod}{xmmreg}{R_m}:pandn {Mod}{R_m},{xmmreg}
-00001111,11011111,{MOD}{mmxreg}{R_M}:pandn {MOD}{R_M},{mmxreg}
-01100110,00001111,11110101,{Mod}{xmmreg}{R_m}:pmaddwd {Mod}{R_m},{xmmreg}
-00001111,11110101,{MOD}{mmxreg}{R_M}:pmaddwd {MOD}{R_M},{mmxreg}
-01100110,00001111,11101011,{Mod}{xmmreg}{R_m}:por {Mod}{R_m},{xmmreg}
-00001111,11101011,{MOD}{mmxreg}{R_M}:por {MOD}{R_M},{mmxreg}
-01100110,00001111,11101111,{Mod}{xmmreg}{R_m}:pxor {Mod}{R_m},{xmmreg}
-00001111,11101111,{MOD}{mmxreg}{R_M}:pxor {MOD}{R_M},{mmxreg}
-00001111,01010101,{Mod}{xmmreg}{R_m}:andnps {Mod}{R_m},{xmmreg}
-00001111,01010100,{Mod}{xmmreg}{R_m}:andps {Mod}{R_m},{xmmreg}
-00001111,11000010,{Mod}{xmmreg}{R_m},00000000:cmpeqps {Mod}{R_m},{xmmreg}
-00001111,11000010,{Mod}{xmmreg}{R_m},00000001:cmpltps {Mod}{R_m},{xmmreg}
-00001111,11000010,{Mod}{xmmreg}{R_m},00000010:cmpleps {Mod}{R_m},{xmmreg}
-00001111,11000010,{Mod}{xmmreg}{R_m},00000011:cmpunordps {Mod}{R_m},{xmmreg}
-00001111,11000010,{Mod}{xmmreg}{R_m},00000100:cmpneqps {Mod}{R_m},{xmmreg}
-00001111,11000010,{Mod}{xmmreg}{R_m},00000101:cmpnltps {Mod}{R_m},{xmmreg}
-00001111,11000010,{Mod}{xmmreg}{R_m},00000110:cmpnleps {Mod}{R_m},{xmmreg}
-00001111,11000010,{Mod}{xmmreg}{R_m},00000111:cmpordps {Mod}{R_m},{xmmreg}
-11110011,00001111,11000010,{Mod}{xmmreg}{R_m},00000000:cmpeqss {Mod}{R_m},{xmmreg}
-11110011,00001111,11000010,{Mod}{xmmreg}{R_m},00000001:cmpltss {Mod}{R_m},{xmmreg}
-11110011,00001111,11000010,{Mod}{xmmreg}{R_m},00000010:cmpless {Mod}{R_m},{xmmreg}
-11110011,00001111,11000010,{Mod}{xmmreg}{R_m},00000011:cmpunordss {Mod}{R_m},{xmmreg}
-11110011,00001111,11000010,{Mod}{xmmreg}{R_m},00000100:cmpneqss {Mod}{R_m},{xmmreg}
-11110011,00001111,11000010,{Mod}{xmmreg}{R_m},00000101:cmpnltss {Mod}{R_m},{xmmreg}
-11110011,00001111,11000010,{Mod}{xmmreg}{R_m},00000110:cmpnless {Mod}{R_m},{xmmreg}
-11110011,00001111,11000010,{Mod}{xmmreg}{R_m},00000111:cmpordss {Mod}{R_m},{xmmreg}
-00001111,10101110,{mod}001{r_m}:fxrstor {mod}{r_m}
-00001111,10101110,{mod}000{r_m}:fxsave {mod}{r_m}
-00001111,10101110,{mod}010{r_m}:ldmxcsr {mod}{r_m}
-00001111,10101110,{mod}011{r_m}:stmxcsr {mod}{r_m}
-11110010,00001111,00010000,{Mod}{xmmreg}{R_m}:movsd {Mod}{R_m},{xmmreg}
-11110011,00001111,00010000,{Mod}{xmmreg}{R_m}:movss {Mod}{R_m},{xmmreg}
-01100110,00001111,00010000,{Mod}{xmmreg}{R_m}:movupd {Mod}{R_m},{xmmreg}
-00001111,00010000,{Mod}{xmmreg}{R_m}:movups {Mod}{R_m},{xmmreg}
-11110010,00001111,00010001,{Mod}{xmmreg}{R_m}:movsd {xmmreg},{Mod}{R_m}
-11110011,00001111,00010001,{Mod}{xmmreg}{R_m}:movss {xmmreg},{Mod}{R_m}
-01100110,00001111,00010001,{Mod}{xmmreg}{R_m}:movupd {xmmreg},{Mod}{R_m}
-00001111,00010001,{Mod}{xmmreg}{R_m}:movups {xmmreg},{Mod}{R_m}
-11110010,00001111,00010010,{Mod}{xmmreg}{R_m}:movddup {Mod}{R_m},{xmmreg}
-11110011,00001111,00010010,{Mod}{xmmreg}{R_m}:movsldup {Mod}{R_m},{xmmreg}
-01100110,00001111,00010010,{Mod}{xmmreg}{R_m}:movlpd {Mod}{R_m},{xmmreg}
-00001111,00010010,11{xmmreg1}{xmmreg2}:movhlps {xmmreg2},{xmmreg1}
-00001111,00010010,{Mod}{xmmreg}{R_m}:movlps {Mod}{R_m},{xmmreg}
-01100110,00001111,00010011,11{xmmreg1}{xmmreg2}:movhlpd {xmmreg1},{xmmreg2}
-00001111,00010011,11{xmmreg1}{xmmreg2}:movhlps {xmmreg1},{xmmreg2}
-01100110,00001111,00010011,{Mod}{xmmreg}{R_m}:movlpd {xmmreg},{Mod}{R_m}
-00001111,00010011,{Mod}{xmmreg}{R_m}:movlps {xmmreg},{Mod}{R_m}
-01100110,00001111,00010100,{Mod}{xmmreg}{R_m}:unpcklpd {Mod}{R_m},{xmmreg}
-00001111,00010100,{Mod}{xmmreg}{R_m}:unpcklps {Mod}{R_m},{xmmreg}
-01100110,00001111,00010101,{Mod}{xmmreg}{R_m}:unpckhpd {Mod}{R_m},{xmmreg}
-00001111,00010101,{Mod}{xmmreg}{R_m}:unpckhps {Mod}{R_m},{xmmreg}
-11110011,00001111,00010110,{Mod}{xmmreg}{R_m}:movshdup {Mod}{R_m},{xmmreg}
-01100110,00001111,00010110,{Mod}{xmmreg}{R_m}:movhpd {Mod}{R_m},{xmmreg}
-00001111,00010110,11{xmmreg1}{xmmreg2}:movlhps {xmmreg2},{xmmreg1}
-00001111,00010110,{Mod}{xmmreg}{R_m}:movhps {Mod}{R_m},{xmmreg}
-01100110,00001111,00010111,11{xmmreg1}{xmmreg2}:movlhpd {xmmreg1},{xmmreg2}
-00001111,00010111,11{xmmreg1}{xmmreg2}:movlhps {xmmreg1},{xmmreg2}
-01100110,00001111,00010111,{Mod}{xmmreg}{R_m}:movhpd {xmmreg},{Mod}{R_m}
-00001111,00010111,{Mod}{xmmreg}{R_m}:movhps {xmmreg},{Mod}{R_m}
-01100110,00001111,00101000,{Mod}{xmmreg}{R_m}:movapd {Mod}{R_m},{xmmreg}
-00001111,00101000,{Mod}{xmmreg}{R_m}:movaps {Mod}{R_m},{xmmreg}
-01100110,00001111,00101001,{Mod}{xmmreg}{R_m}:movapd {xmmreg},{Mod}{R_m}
-00001111,00101001,{Mod}{xmmreg}{R_m}:movaps {xmmreg},{Mod}{R_m}
-11110010,00001111,00101010,{mod}{xmmreg}{r_m}:cvtsi2sd {mod}{r_m},{xmmreg}
-11110011,00001111,00101010,{mod}{xmmreg}{r_m}:cvtsi2ss {mod}{r_m},{xmmreg}
-01100110,00001111,00101010,{MOD}{xmmreg}{R_M}:cvtpi2pd {MOD}{R_M},{xmmreg}
-00001111,00101010,{MOD}{xmmreg}{R_M}:cvtpi2ps {MOD}{R_M},{xmmreg}
-01100110,00001111,00101011,{mod}{xmmreg}{r_m}:movntpd {xmmreg},{mod}{r_m}
-00001111,00101011,{mod}{xmmreg}{r_m}:movntps {xmmreg},{mod}{r_m}
-11110010,00001111,00101100,{Mod}{reg}{R_m}:cvttsd2si {Mod}{R_m},{reg}
-11110011,00001111,00101100,{Mod}{reg}{R_m}:cvttss2si {Mod}{R_m},{reg}
-01100110,00001111,00101100,{Mod}{mmxreg}{R_m}:cvttpd2pi {Mod}{R_m},{mmxreg}
-00001111,00101100,{Mod}{mmxreg}{R_m}:cvttps2pi {Mod}{R_m},{mmxreg}
-01100110,00001111,00101101,{Mod}{mmxreg}{R_m}:cvtpd2pi {Mod}{R_m},{mmxreg}
-11110010,00001111,00101101,{Mod}{reg}{R_m}:cvtsd2si {Mod}{R_m},{reg}
-11110011,00001111,00101101,{Mod}{reg}{R_m}:cvtss2si {Mod}{R_m},{reg}
-00001111,00101101,{Mod}{mmxreg}{R_m}:cvtps2pi {Mod}{R_m},{mmxreg}
-01100110,00001111,00101110,{Mod}{xmmreg}{R_m}:ucomisd {Mod}{R_m},{xmmreg}
-00001111,00101110,{Mod}{xmmreg}{R_m}:ucomiss {Mod}{R_m},{xmmreg}
-01100110,00001111,00101111,{Mod}{xmmreg}{R_m}:comisd {Mod}{R_m},{xmmreg}
-00001111,00101111,{Mod}{xmmreg}{R_m}:comiss {Mod}{R_m},{xmmreg}
-00001111,00110111:getsec
-01100110,00001111,01010000,11{reg}{xmmreg}:movmskpd {xmmreg},{reg}
-00001111,01010000,11{reg}{xmmreg}:movmskps {xmmreg},{reg}
-01100110,00001111,01010001,{Mod}{xmmreg}{R_m}:sqrtpd {Mod}{R_m},{xmmreg}
-11110010,00001111,01010001,{Mod}{xmmreg}{R_m}:sqrtsd {Mod}{R_m},{xmmreg}
-11110011,00001111,01010001,{Mod}{xmmreg}{R_m}:sqrtss {Mod}{R_m},{xmmreg}
-00001111,01010001,{Mod}{xmmreg}{R_m}:sqrtps {Mod}{R_m},{xmmreg}
-11110011,00001111,01010010,{Mod}{xmmreg}{R_m}:rsqrtss {Mod}{R_m},{xmmreg}
-00001111,01010010,{Mod}{xmmreg}{R_m}:rsqrtps {Mod}{R_m},{xmmreg}
-11110011,00001111,01010011,{Mod}{xmmreg}{R_m}:rcpss {Mod}{R_m},{xmmreg}
-00001111,01010011,{Mod}{xmmreg}{R_m}:rcpps {Mod}{R_m},{xmmreg}
-01100110,00001111,01010100,{Mod}{xmmreg}{R_m}:andpd {Mod}{R_m},{xmmreg}
-00001111,01010100,{Mod}{xmmreg}{R_m}:andps {Mod}{R_m},{xmmreg}
-01100110,00001111,01010101,{Mod}{xmmreg}{R_m}:andnpd {Mod}{R_m},{xmmreg}
-00001111,01010101,{Mod}{xmmreg}{R_m}:andnps {Mod}{R_m},{xmmreg}
-01100110,00001111,01010110,{Mod}{xmmreg}{R_m}:orpd {Mod}{R_m},{xmmreg}
-00001111,01010110,{Mod}{xmmreg}{R_m}:orps {Mod}{R_m},{xmmreg}
-01100110,00001111,01010111,{Mod}{xmmreg}{R_m}:xorpd {Mod}{R_m},{xmmreg}
-00001111,01010111,{Mod}{xmmreg}{R_m}:xorps {Mod}{R_m},{xmmreg}
-11110010,00001111,01011000,{Mod}{xmmreg}{R_m}:addsd {Mod}{R_m},{xmmreg}
-11110011,00001111,01011000,{Mod}{xmmreg}{R_m}:addss {Mod}{R_m},{xmmreg}
-01100110,00001111,01011000,{Mod}{xmmreg}{R_m}:addpd {Mod}{R_m},{xmmreg}
-00001111,01011000,{Mod}{xmmreg}{R_m}:addps {Mod}{R_m},{xmmreg}
-11110010,00001111,01011001,{Mod}{xmmreg}{R_m}:mulsd {Mod}{R_m},{xmmreg}
-11110011,00001111,01011001,{Mod}{xmmreg}{R_m}:mulss {Mod}{R_m},{xmmreg}
-01100110,00001111,01011001,{Mod}{xmmreg}{R_m}:mulpd {Mod}{R_m},{xmmreg}
-00001111,01011001,{Mod}{xmmreg}{R_m}:mulps {Mod}{R_m},{xmmreg}
-11110010,00001111,01011010,{Mod}{xmmreg}{R_m}:cvtsd2ss {Mod}{R_m},{xmmreg}
-11110011,00001111,01011010,{Mod}{xmmreg}{R_m}:cvtss2sd {Mod}{R_m},{xmmreg}
-01100110,00001111,01011010,{Mod}{xmmreg}{R_m}:cvtpd2ps {Mod}{R_m},{xmmreg}
-00001111,01011010,{Mod}{xmmreg}{R_m}:cvtps2pd {Mod}{R_m},{xmmreg}
-01100110,00001111,01011011,{Mod}{xmmreg}{R_m}:cvtps2dq {Mod}{R_m},{xmmreg}
-11110011,00001111,01011011,{Mod}{xmmreg}{R_m}:cvttps2dq {Mod}{R_m},{xmmreg}
-00001111,01011011,{Mod}{xmmreg}{R_m}:cvtdq2ps {Mod}{R_m},{xmmreg}
-11110010,00001111,01011100,{Mod}{xmmreg}{R_m}:subsd {Mod}{R_m},{xmmreg}
-11110011,00001111,01011100,{Mod}{xmmreg}{R_m}:subss {Mod}{R_m},{xmmreg}
-01100110,00001111,01011100,{Mod}{xmmreg}{R_m}:subpd {Mod}{R_m},{xmmreg}
-00001111,01011100,{Mod}{xmmreg}{R_m}:subps {Mod}{R_m},{xmmreg}
-11110010,00001111,01011101,{Mod}{xmmreg}{R_m}:minsd {Mod}{R_m},{xmmreg}
-11110011,00001111,01011101,{Mod}{xmmreg}{R_m}:minss {Mod}{R_m},{xmmreg}
-01100110,00001111,01011101,{Mod}{xmmreg}{R_m}:minpd {Mod}{R_m},{xmmreg}
-00001111,01011101,{Mod}{xmmreg}{R_m}:minps {Mod}{R_m},{xmmreg}
-11110010,00001111,01011110,{Mod}{xmmreg}{R_m}:divsd {Mod}{R_m},{xmmreg}
-11110011,00001111,01011110,{Mod}{xmmreg}{R_m}:divss {Mod}{R_m},{xmmreg}
-01100110,00001111,01011110,{Mod}{xmmreg}{R_m}:divpd {Mod}{R_m},{xmmreg}
-00001111,01011110,{Mod}{xmmreg}{R_m}:divps {Mod}{R_m},{xmmreg}
-11110010,00001111,01011111,{Mod}{xmmreg}{R_m}:maxsd {Mod}{R_m},{xmmreg}
-11110011,00001111,01011111,{Mod}{xmmreg}{R_m}:maxss {Mod}{R_m},{xmmreg}
-01100110,00001111,01011111,{Mod}{xmmreg}{R_m}:maxpd {Mod}{R_m},{xmmreg}
-00001111,01011111,{Mod}{xmmreg}{R_m}:maxps {Mod}{R_m},{xmmreg}
-01100110,00001111,01100000,{Mod}{xmmreg}{R_m}:punpcklbw {Mod}{R_m},{xmmreg}
-00001111,01100000,{MOD}{mmxreg}{R_M}:punpcklbw {MOD}{R_M},{mmxreg}
-01100110,00001111,01100001,{Mod}{xmmreg}{R_m}:punpcklwd {Mod}{R_m},{xmmreg}
-00001111,01100001,{MOD}{mmxreg}{R_M}:punpcklwd {MOD}{R_M},{mmxreg}
-01100110,00001111,01100010,{Mod}{xmmreg}{R_m}:punpckldq {Mod}{R_m},{xmmreg}
-00001111,01100010,{MOD}{mmxreg}{R_M}:punpckldq {MOD}{R_M},{mmxreg}
-01100110,00001111,01100011,{Mod}{xmmreg}{R_m}:packsswb {Mod}{R_m},{xmmreg}
-00001111,01100011,{MOD}{mmxreg}{R_M}:packsswb {MOD}{R_M},{mmxreg}
-01100110,00001111,01100100,{Mod}{xmmreg}{R_m}:pcmpgtb {Mod}{R_m},{xmmreg}
-00001111,01100100,{MOD}{mmxreg}{R_M}:pcmpgtb {MOD}{R_M},{mmxreg}
-01100110,00001111,01100101,{Mod}{xmmreg}{R_m}:pcmpgtw {Mod}{R_m},{xmmreg}
-00001111,01100101,{MOD}{mmxreg}{R_M}:pcmpgtw {MOD}{R_M},{mmxreg}
-01100110,00001111,01100110,{Mod}{xmmreg}{R_m}:pcmpgtd {Mod}{R_m},{xmmreg}
-00001111,01100110,{MOD}{mmxreg}{R_M}:pcmpgtd {MOD}{R_M},{mmxreg}
-01100110,00001111,01100111,{Mod}{xmmreg}{R_m}:packuswb {Mod}{R_m},{xmmreg}
-00001111,01100111,{MOD}{mmxreg}{R_M}:packuswb {MOD}{R_M},{mmxreg}
-01100110,00001111,01101000,{Mod}{xmmreg}{R_m}:punpckhbw {Mod}{R_m},{xmmreg}
-00001111,01101000,{MOD}{mmxreg}{R_M}:punpckhbw {MOD}{R_M},{mmxreg}
-01100110,00001111,01101001,{Mod}{xmmreg}{R_m}:punpckhwd {Mod}{R_m},{xmmreg}
-00001111,01101001,{MOD}{mmxreg}{R_M}:punpckhwd {MOD}{R_M},{mmxreg}
-01100110,00001111,01101010,{Mod}{xmmreg}{R_m}:punpckhdq {Mod}{R_m},{xmmreg}
-00001111,01101010,{MOD}{mmxreg}{R_M}:punpckhdq {MOD}{R_M},{mmxreg}
-01100110,00001111,01101011,{Mod}{xmmreg}{R_m}:packssdw {Mod}{R_m},{xmmreg}
-00001111,01101011,{MOD}{mmxreg}{R_M}:packssdw {MOD}{R_M},{mmxreg}
-01100110,00001111,01101100,{Mod}{xmmreg}{R_m}:punpcklqdq {Mod}{R_m},{xmmreg}
-01100110,00001111,01101101,{Mod}{xmmreg}{R_m}:punpckhqdq {Mod}{R_m},{xmmreg}
-01100110,00001111,01101110,{mod}{xmmreg}{r_m}:movd {mod}{r_m},{xmmreg}
-00001111,01101110,{mod}{mmxreg}{r_m}:movd {mod}{r_m},{mmxreg}
-01100110,00001111,01101111,{Mod}{xmmreg}{R_m}:movdqa {Mod}{R_m},{xmmreg}
-11110011,00001111,01101111,{Mod}{xmmreg}{R_m}:movdqu {Mod}{R_m},{xmmreg}
-00001111,01101111,{MOD}{mmxreg}{R_M}:movq {MOD}{R_M},{mmxreg}
-01100110,00001111,01110000,{Mod}{xmmreg}{R_m},{imm8}:pshufd {imm8},{Mod}{R_m},{xmmreg}
-11110010,00001111,01110000,{Mod}{xmmreg}{R_m},{imm8}:pshuflw {imm8},{Mod}{R_m},{xmmreg}
-11110011,00001111,01110000,{Mod}{xmmreg}{R_m},{imm8}:pshufhw {imm8},{Mod}{R_m},{xmmreg}
-00001111,01110000,{MOD}{mmxreg}{R_M},{imm8}:pshufw {imm8},{MOD}{R_M},{mmxreg}
-01100110,00001111,01110100,{Mod}{xmmreg}{R_m}:pcmpeqb {Mod}{R_m},{xmmreg}
-00001111,01110100,{MOD}{mmxreg}{R_M}:pcmpeqb {MOD}{R_M},{mmxreg}
-01100110,00001111,01110101,{Mod}{xmmreg}{R_m}:pcmpeqw {Mod}{R_m},{xmmreg}
-00001111,01110101,{MOD}{mmxreg}{R_M}:pcmpeqw {MOD}{R_M},{mmxreg}
-01100110,00001111,01110110,{Mod}{xmmreg}{R_m}:pcmpeqd {Mod}{R_m},{xmmreg}
-00001111,01110110,{MOD}{mmxreg}{R_M}:pcmpeqd {MOD}{R_M},{mmxreg}
-01100110,00001111,01111100,{Mod}{xmmreg}{R_m}:haddpd {Mod}{R_m},{xmmreg}
-11110010,00001111,01111100,{Mod}{xmmreg}{R_m}:haddps {Mod}{R_m},{xmmreg}
-01100110,00001111,01111101,{Mod}{xmmreg}{R_m}:hsubpd {Mod}{R_m},{xmmreg}
-11110010,00001111,01111101,{Mod}{xmmreg}{R_m}:hsubps {Mod}{R_m},{xmmreg}
-01100110,00001111,01111110,{mod}{xmmreg}{r_m}:movd {xmmreg},{mod}{r_m}
-11110011,00001111,01111110,{Mod}{xmmreg}{R_m}:movq {Mod}{R_m},{xmmreg}
-00001111,01111110,{mod}{mmxreg}{r_m}:movd {mmxreg},{mod}{r_m}
-01100110,00001111,01111111,{Mod}{xmmreg}{R_m}:movdqa {xmmreg},{Mod}{R_m}
-11110011,00001111,01111111,{Mod}{xmmreg}{R_m}:movdqu {xmmreg},{Mod}{R_m}
-00001111,01111111,{MOD}{mmxreg}{R_M}:movq {mmxreg},{MOD}{R_M}
-00001111,11000011,{mod}{reg}{r_m}:movnti {reg},{mod}{r_m}
-01100110,00001111,11000100,{mod}{xmmreg}{r_m},{imm8}:pinsrw {imm8},{mod}{r_m},{xmmreg}
-00001111,11000100,{mod}{mmxreg}{r_m},{imm8}:pinsrw {imm8},{mod}{r_m},{mmxreg}
-01100110,00001111,11000101,11{reg}{xmmreg},{imm8}:pextrw {imm8},{xmmreg},{reg}
-00001111,11000101,11{reg}{mmxreg},{imm8}:pextrw {imm8},{mmxreg},{reg}
-01100110,00001111,11000110,{Mod}{xmmreg}{R_m},{imm8}:shufpd {imm8},{Mod}{R_m},{xmmreg}
-00001111,11000110,{Mod}{xmmreg}{R_m},{imm8}:shufps {imm8},{Mod}{R_m},{xmmreg}
-01100110,00001111,11010001,{Mod}{xmmreg}{R_m}:psrlw {Mod}{R_m},{xmmreg}
-00001111,11010001,{MOD}{mmxreg}{R_M}:psrlw {MOD}{R_M},{mmxreg}
-01100110,00001111,11010010,{Mod}{xmmreg}{R_m}:psrld {Mod}{R_m},{xmmreg}
-00001111,11010010,{MOD}{mmxreg}{R_M}:psrld {MOD}{R_M},{mmxreg}
-01100110,00001111,11010011,{Mod}{xmmreg}{R_m}:psrlq {Mod}{R_m},{xmmreg}
-00001111,11010011,{MOD}{mmxreg}{R_M}:psrlq {MOD}{R_M},{mmxreg}
-01100110,00001111,11010100,{Mod}{xmmreg}{R_m}:paddq {Mod}{R_m},{xmmreg}
-00001111,11010100,{MOD}{mmxreg}{R_M}:paddq {MOD}{R_M},{mmxreg}
-01100110,00001111,11010101,{Mod}{xmmreg}{R_m}:pmullw {Mod}{R_m},{xmmreg}
-00001111,11010101,{MOD}{mmxreg}{R_M}:pmullw {MOD}{R_M},{mmxreg}
-01100110,00001111,11010110,{Mod}{xmmreg}{R_m}:movq {xmmreg},{Mod}{R_m}
-11110010,00001111,11010110,11{mmxreg}{xmmreg}:movdq2q {xmmreg},{mmxreg}
-11110011,00001111,11010110,11{xmmreg}{mmxreg}:movq2dq {mmxreg},{xmmreg}
-01100110,00001111,11010111,11{reg}{xmmreg}:pmovmskb {xmmreg},{reg}
-00001111,11010111,11{reg}{mmxreg}:pmovmskb {mmxreg},{reg}
-01100110,00001111,11011000,{Mod}{xmmreg}{R_m}:psubusb {Mod}{R_m},{xmmreg}
-00001111,11011000,{MOD}{mmxreg}{R_M}:psubusb {MOD}{R_M},{mmxreg}
-01100110,00001111,11011001,{Mod}{xmmreg}{R_m}:psubusw {Mod}{R_m},{xmmreg}
-00001111,11011001,{MOD}{mmxreg}{R_M}:psubusw {MOD}{R_M},{mmxreg}
-01100110,00001111,11011010,{Mod}{xmmreg}{R_m}:pminub {Mod}{R_m},{xmmreg}
-00001111,11011010,{MOD}{mmxreg}{R_M}:pminub {MOD}{R_M},{mmxreg}
-01100110,00001111,11011100,{Mod}{xmmreg}{R_m}:paddusb {Mod}{R_m},{xmmreg}
-00001111,11011100,{MOD}{mmxreg}{R_M}:paddusb {MOD}{R_M},{mmxreg}
-01100110,00001111,11011101,{Mod}{xmmreg}{R_m}:paddusw {Mod}{R_m},{xmmreg}
-00001111,11011101,{MOD}{mmxreg}{R_M}:paddusw {MOD}{R_M},{mmxreg}
-01100110,00001111,11011110,{Mod}{xmmreg}{R_m}:pmaxub {Mod}{R_m},{xmmreg}
-00001111,11011110,{MOD}{mmxreg}{R_M}:pmaxub {MOD}{R_M},{mmxreg}
-01100110,00001111,11100000,{Mod}{xmmreg}{R_m}:pavgb {Mod}{R_m},{xmmreg}
-00001111,11100000,{MOD}{mmxreg}{R_M}:pavgb {MOD}{R_M},{mmxreg}
-01100110,00001111,11100001,{Mod}{xmmreg}{R_m}:psraw {Mod}{R_m},{xmmreg}
-00001111,11100001,{MOD}{mmxreg}{R_M}:psraw {MOD}{R_M},{mmxreg}
-01100110,00001111,11100010,{Mod}{xmmreg}{R_m}:psrad {Mod}{R_m},{xmmreg}
-00001111,11100010,{MOD}{mmxreg}{R_M}:psrad {MOD}{R_M},{mmxreg}
-01100110,00001111,11100011,{Mod}{xmmreg}{R_m}:pavgw {Mod}{R_m},{xmmreg}
-00001111,11100011,{MOD}{mmxreg}{R_M}:pavgw {MOD}{R_M},{mmxreg}
-01100110,00001111,11100100,{Mod}{xmmreg}{R_m}:pmulhuw {Mod}{R_m},{xmmreg}
-00001111,11100100,{MOD}{mmxreg}{R_M}:pmulhuw {MOD}{R_M},{mmxreg}
-01100110,00001111,11100101,{Mod}{xmmreg}{R_m}:pmulhw {Mod}{R_m},{xmmreg}
-00001111,11100101,{MOD}{mmxreg}{R_M}:pmulhw {MOD}{R_M},{mmxreg}
-01100110,00001111,11100111,{Mod}{xmmreg}{R_m}:movntdq {xmmreg},{Mod}{R_m}
-00001111,11100111,{MOD}{mmxreg}{R_M}:movntq {mmxreg},{MOD}{R_M}
-01100110,00001111,11101000,{Mod}{xmmreg}{R_m}:psubsb {Mod}{R_m},{xmmreg}
-00001111,11101000,{MOD}{mmxreg}{R_M}:psubsb {MOD}{R_M},{mmxreg}
-01100110,00001111,11101001,{Mod}{xmmreg}{R_m}:psubsw {Mod}{R_m},{xmmreg}
-00001111,11101001,{MOD}{mmxreg}{R_M}:psubsw {MOD}{R_M},{mmxreg}
-01100110,00001111,11101010,{Mod}{xmmreg}{R_m}:pminsw {Mod}{R_m},{xmmreg}
-00001111,11101010,{MOD}{mmxreg}{R_M}:pminsw {MOD}{R_M},{mmxreg}
-01100110,00001111,11101100,{Mod}{xmmreg}{R_m}:paddsb {Mod}{R_m},{xmmreg}
-00001111,11101100,{MOD}{mmxreg}{R_M}:paddsb {MOD}{R_M},{mmxreg}
-01100110,00001111,11101101,{Mod}{xmmreg}{R_m}:paddsw {Mod}{R_m},{xmmreg}
-00001111,11101101,{MOD}{mmxreg}{R_M}:paddsw {MOD}{R_M},{mmxreg}
-01100110,00001111,11101110,{Mod}{xmmreg}{R_m}:pmaxsw {Mod}{R_m},{xmmreg}
-00001111,11101110,{MOD}{mmxreg}{R_M}:pmaxsw {MOD}{R_M},{mmxreg}
-11110010,00001111,11110000,{mod}{xmmreg}{r_m}:lddqu {mod}{r_m},{xmmreg}
-01100110,00001111,11110001,{Mod}{xmmreg}{R_m}:psllw {Mod}{R_m},{xmmreg}
-00001111,11110001,{MOD}{mmxreg}{R_M}:psllw {MOD}{R_M},{mmxreg}
-01100110,00001111,11110010,{Mod}{xmmreg}{R_m}:pslld {Mod}{R_m},{xmmreg}
-00001111,11110010,{MOD}{mmxreg}{R_M}:pslld {MOD}{R_M},{mmxreg}
-01100110,00001111,11110011,{Mod}{xmmreg}{R_m}:psllq {Mod}{R_m},{xmmreg}
-00001111,11110011,{MOD}{mmxreg}{R_M}:psllq {MOD}{R_M},{mmxreg}
-01100110,00001111,11110100,{Mod}{xmmreg}{R_m}:pmuludq {Mod}{R_m},{xmmreg}
-00001111,11110100,{MOD}{mmxreg}{R_M}:pmuludq {MOD}{R_M},{mmxreg}
-01100110,00001111,11110110,{Mod}{xmmreg}{R_m}:psadbw {Mod}{R_m},{xmmreg}
-00001111,11110110,{MOD}{mmxreg}{R_M}:psadbw {MOD}{R_M},{mmxreg}
-01100110,00001111,11110111,11{xmmreg1}{xmmreg2}:maskmovdqu {xmmreg2},{xmmreg1}
-00001111,11110111,11{mmxreg1}{mmxreg2}:maskmovq {mmxreg2},{mmxreg1}
-01100110,00001111,11111000,{Mod}{xmmreg}{R_m}:psubb {Mod}{R_m},{xmmreg}
-00001111,11111000,{MOD}{mmxreg}{R_M}:psubb {MOD}{R_M},{mmxreg}
-01100110,00001111,11111001,{Mod}{xmmreg}{R_m}:psubw {Mod}{R_m},{xmmreg}
-00001111,11111001,{MOD}{mmxreg}{R_M}:psubw {MOD}{R_M},{mmxreg}
-01100110,00001111,11111010,{Mod}{xmmreg}{R_m}:psubd {Mod}{R_m},{xmmreg}
-00001111,11111010,{MOD}{mmxreg}{R_M}:psubd {MOD}{R_M},{mmxreg}
-01100110,00001111,11111011,{Mod}{xmmreg}{R_m}:psubq {Mod}{R_m},{xmmreg}
-00001111,11111011,{MOD}{mmxreg}{R_M}:psubq {MOD}{R_M},{mmxreg}
-01100110,00001111,11111100,{Mod}{xmmreg}{R_m}:paddb {Mod}{R_m},{xmmreg}
-00001111,11111100,{MOD}{mmxreg}{R_M}:paddb {MOD}{R_M},{mmxreg}
-01100110,00001111,11111101,{Mod}{xmmreg}{R_m}:paddw {Mod}{R_m},{xmmreg}
-00001111,11111101,{MOD}{mmxreg}{R_M}:paddw {MOD}{R_M},{mmxreg}
-01100110,00001111,11111110,{Mod}{xmmreg}{R_m}:paddd {Mod}{R_m},{xmmreg}
-00001111,11111110,{MOD}{mmxreg}{R_M}:paddd {MOD}{R_M},{mmxreg}
-01100110,00001111,00111000,00000000,{Mod}{xmmreg}{R_m}:pshufb {Mod}{R_m},{xmmreg}
-00001111,00111000,00000000,{MOD}{mmxreg}{R_M}:pshufb {MOD}{R_M},{mmxreg}
-01100110,00001111,00111000,00000001,{Mod}{xmmreg}{R_m}:phaddw {Mod}{R_m},{xmmreg}
-00001111,00111000,00000001,{MOD}{mmxreg}{R_M}:phaddw {MOD}{R_M},{mmxreg}
-01100110,00001111,00111000,00000010,{Mod}{xmmreg}{R_m}:phaddd {Mod}{R_m},{xmmreg}
-00001111,00111000,00000010,{MOD}{mmxreg}{R_M}:phaddd {MOD}{R_M},{mmxreg}
-01100110,00001111,00111000,00000011,{Mod}{xmmreg}{R_m}:phaddsw {Mod}{R_m},{xmmreg}
-00001111,00111000,00000011,{MOD}{mmxreg}{R_M}:phaddsw {MOD}{R_M},{mmxreg}
-01100110,00001111,00111000,00000100,{Mod}{xmmreg}{R_m}:pmaddubsw {Mod}{R_m},{xmmreg}
-00001111,00111000,00000100,{MOD}{mmxreg}{R_M}:pmaddubsw {MOD}{R_M},{mmxreg}
-01100110,00001111,00111000,00000101,{Mod}{xmmreg}{R_m}:phsubw {Mod}{R_m},{xmmreg}
-00001111,00111000,00000101,{MOD}{mmxreg}{R_M}:phsubw {MOD}{R_M},{mmxreg}
-01100110,00001111,00111000,00000110,{Mod}{xmmreg}{R_m}:phsubd {Mod}{R_m},{xmmreg}
-00001111,00111000,00000110,{MOD}{mmxreg}{R_M}:phsubd {MOD}{R_M},{mmxreg}
-01100110,00001111,00111000,00000111,{Mod}{xmmreg}{R_m}:phsubsw {Mod}{R_m},{xmmreg}
-00001111,00111000,00000111,{MOD}{mmxreg}{R_M}:phsubsw {MOD}{R_M},{mmxreg}
-01100110,00001111,00111000,00001000,{Mod}{xmmreg}{R_m}:psignb {Mod}{R_m},{xmmreg}
-00001111,00111000,00001000,{MOD}{mmxreg}{R_M}:psignb {MOD}{R_M},{mmxreg}
-01100110,00001111,00111000,00001001,{Mod}{xmmreg}{R_m}:psignw {Mod}{R_m},{xmmreg}
-00001111,00111000,00001001,{MOD}{mmxreg}{R_M}:psignw {MOD}{R_M},{mmxreg}
-01100110,00001111,00111000,00001010,{Mod}{xmmreg}{R_m}:psignd {Mod}{R_m},{xmmreg}
-00001111,00111000,00001010,{MOD}{mmxreg}{R_M}:psignd {MOD}{R_M},{mmxreg}
-01100110,00001111,00111000,00001011,{Mod}{xmmreg}{R_m}:pmulhrsw {Mod}{R_m},{xmmreg}
-00001111,00111000,00001011,{MOD}{mmxreg}{R_M}:pmulhrsw {MOD}{R_M},{mmxreg}
-01100110,00001111,00111000,00011100,{Mod}{xmmreg}{R_m}:pabsb {Mod}{R_m},{xmmreg}
-00001111,00111000,00011100,{MOD}{mmxreg}{R_M}:pabsb {MOD}{R_M},{mmxreg}
-01100110,00001111,00111000,00011101,{Mod}{xmmreg}{R_m}:pabsw {Mod}{R_m},{xmmreg}
-00001111,00111000,00011101,{MOD}{mmxreg}{R_M}:pabsw {MOD}{R_M},{mmxreg}
-01100110,00001111,00111000,00011110,{Mod}{xmmreg}{R_m}:pabsd {Mod}{R_m},{xmmreg}
-00001111,00111000,00011110,{MOD}{mmxreg}{R_M}:pabsd {MOD}{R_M},{mmxreg}
-01100110,00001111,00111010,00001111,{Mod}{xmmreg}{R_m},{imm8}:palignr {imm8},{Mod}{R_m},{xmmreg}
-00001111,00111010,00001111,{MOD}{mmxreg}{R_M},{imm8}:palignr {imm8},{MOD}{R_M},{mmxreg}
-01100110,00001111,11000111,{mod}110{r_m}:vmclear {mod}{r_m}
-11110011,00001111,11000111,{mod}110{r_m}:vmxon {mod}{r_m}
-00001111,11000111,{mod}110{r_m}:vmptrld {mod}{r_m}
-00001111,11000111,{mod}111{r_m}:vmptrst {mod}{r_m}
-01100110,00001111,01110001,11010{xmmreg},{imm8}:psrlw {imm8},{xmmreg}
-00001111,01110001,11010{mmxreg},{imm8}:psrlw {imm8},{mmxreg}
-01100110,00001111,01110001,11100{xmmreg},{imm8}:psraw {imm8},{xmmreg}
-00001111,01110001,11100{mmxreg},{imm8}:psraw {imm8},{mmxreg}
-01100110,00001111,01110001,11110{xmmreg},{imm8}:psllw {imm8},{xmmreg}
-00001111,01110001,11110{mmxreg},{imm8}:psllw {imm8},{mmxreg}
-01100110,00001111,01110010,11010{xmmreg},{imm8}:psrld {imm8},{xmmreg}
-00001111,01110010,11010{mmxreg},{imm8}:psrld {imm8},{mmxreg}
-01100110,00001111,01110010,11100{xmmreg},{imm8}:psrad {imm8},{xmmreg}
-00001111,01110010,11100{mmxreg},{imm8}:psrad {imm8},{mmxreg}
-01100110,00001111,01110010,11110{xmmreg},{imm8}:pslld {imm8},{xmmreg}
-00001111,01110010,11110{mmxreg},{imm8}:pslld {imm8},{mmxreg}
-01100110,00001111,01110011,11010{xmmreg},{imm8}:psrlq {imm8},{xmmreg}
-00001111,01110011,11010{mmxreg},{imm8}:psrlq {imm8},{mmxreg}
-01100110,00001111,01110011,11011{xmmreg},{imm8}:psrldq {imm8},{xmmreg}
-01100110,00001111,01110011,11110{xmmreg},{imm8}:psllq {imm8},{xmmreg}
-00001111,01110011,11110{mmxreg},{imm8}:psllq {imm8},{mmxreg}
-01100110,00001111,01110011,11111{xmmreg},{imm8}:pslldq {imm8},{xmmreg}
-00001111,10101110,11101000:lfence
-00001111,10101110,11110000:mfence
-00001111,10101110,11111000:sfence
-00001111,10101110,{mod}111{r_m}:clflush {mod}{r_m}
-00001111,00001111,{MOD}{mmxreg}{R_M}:INVALID {MOD}{R_M},{mmxreg}
-01100110,00001111,00111010,00001100,{Mod}{xmmreg}{R_m},{imm8}:blendps {imm8},{Mod}{R_m},{xmmreg}
-01100110,00001111,00111010,00001101,{Mod}{xmmreg}{R_m},{imm8}:blendpd {imm8},{Mod}{R_m},{xmmreg}
-01100110,00001111,00111000,00010100,{Mod}{xmmreg}{R_m}:blendvps %xmm0,{Mod}{R_m},{xmmreg}
-01100110,00001111,00111000,00010101,{Mod}{xmmreg}{R_m}:blendvpd %xmm0,{Mod}{R_m},{xmmreg}
-# ORDER:
-dnl Many previous entries depend on this being last.
-000{sreg2}111:pop {sreg2}
-# ORDER END:
diff --git a/libcpu/i386_data.h b/libcpu/i386_data.h
deleted file mode 100644
index 42e6650..0000000
--- a/libcpu/i386_data.h
+++ /dev/null
@@ -1,1415 +0,0 @@
-/* Helper routines for disassembler for x86/x86-64.
- Copyright (C) 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2007.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <inttypes.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdint.h>
-#include <libasm.h>
-
-struct instr_enc
-{
- /* The mnemonic. Especially encoded for the optimized table. */
- unsigned int mnemonic : MNEMONIC_BITS;
-
- /* The rep/repe prefixes. */
- unsigned int rep : 1;
- unsigned int repe : 1;
-
- /* Mnemonic suffix. */
- unsigned int suffix : SUFFIX_BITS;
-
- /* Nonzero if the instruction uses modr/m. */
- unsigned int modrm : 1;
-
- /* 1st parameter. */
- unsigned int fct1 : FCT1_BITS;
-#ifdef STR1_BITS
- unsigned int str1 : STR1_BITS;
-#endif
- unsigned int off1_1 : OFF1_1_BITS;
- unsigned int off1_2 : OFF1_2_BITS;
- unsigned int off1_3 : OFF1_3_BITS;
-
- /* 2nd parameter. */
- unsigned int fct2 : FCT2_BITS;
-#ifdef STR2_BITS
- unsigned int str2 : STR2_BITS;
-#endif
- unsigned int off2_1 : OFF2_1_BITS;
- unsigned int off2_2 : OFF2_2_BITS;
- unsigned int off2_3 : OFF2_3_BITS;
-
- /* 3rd parameter. */
- unsigned int fct3 : FCT3_BITS;
-#ifdef STR3_BITS
- unsigned int str3 : STR3_BITS;
-#endif
- unsigned int off3_1 : OFF3_1_BITS;
-#ifdef OFF3_2_BITS
- unsigned int off3_2 : OFF3_2_BITS;
-#endif
-#ifdef OFF3_3_BITS
- unsigned int off3_3 : OFF3_3_BITS;
-#endif
-};
-
-
-typedef int (*opfct_t) (struct output_data *);
-
-
-static int
-data_prefix (struct output_data *d)
-{
- char ch = '\0';
- if (*d->prefixes & has_cs)
- {
- ch = 'c';
- *d->prefixes &= ~has_cs;
- }
- else if (*d->prefixes & has_ds)
- {
- ch = 'd';
- *d->prefixes &= ~has_ds;
- }
- else if (*d->prefixes & has_es)
- {
- ch = 'e';
- *d->prefixes &= ~has_es;
- }
- else if (*d->prefixes & has_fs)
- {
- ch = 'f';
- *d->prefixes &= ~has_fs;
- }
- else if (*d->prefixes & has_gs)
- {
- ch = 'g';
- *d->prefixes &= ~has_gs;
- }
- else if (*d->prefixes & has_ss)
- {
- ch = 's';
- *d->prefixes &= ~has_ss;
- }
- else
- return 0;
-
- if (*d->bufcntp + 4 > d->bufsize)
- return *d->bufcntp + 4 - d->bufsize;
-
- d->bufp[(*d->bufcntp)++] = '%';
- d->bufp[(*d->bufcntp)++] = ch;
- d->bufp[(*d->bufcntp)++] = 's';
- d->bufp[(*d->bufcntp)++] = ':';
-
- return 0;
-}
-
-#ifdef X86_64
-static const char hiregs[8][4] =
- {
- "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
- };
-static const char aregs[8][4] =
- {
- "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi"
- };
-static const char dregs[8][4] =
- {
- "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi"
- };
-#else
-static const char aregs[8][4] =
- {
- "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi"
- };
-# define dregs aregs
-#endif
-
-static int
-general_mod$r_m (struct output_data *d)
-{
- int r = data_prefix (d);
- if (r != 0)
- return r;
-
- int prefixes = *d->prefixes;
- const uint8_t *data = &d->data[d->opoff1 / 8];
- char *bufp = d->bufp;
- size_t *bufcntp = d->bufcntp;
- size_t bufsize = d->bufsize;
-
- uint_fast8_t modrm = data[0];
-#ifndef X86_64
- if (unlikely ((prefixes & has_addr16) != 0))
- {
- int16_t disp = 0;
- bool nodisp = false;
-
- if ((modrm & 0xc7) == 6 || (modrm & 0xc0) == 0x80)
- /* 16 bit displacement. */
- disp = read_2sbyte_unaligned (&data[1]);
- else if ((modrm & 0xc0) == 0x40)
- /* 8 bit displacement. */
- disp = *(const int8_t *) &data[1];
- else if ((modrm & 0xc0) == 0)
- nodisp = true;
-
- char tmpbuf[sizeof ("-0x1234(%rr,%rr)")];
- int n;
- if ((modrm & 0xc7) == 6)
- n = snprintf (tmpbuf, sizeof (tmpbuf), "0x%" PRIx16, disp);
- else
- {
- n = 0;
- if (!nodisp)
- n = snprintf (tmpbuf, sizeof (tmpbuf), "%s0x%" PRIx16,
- disp < 0 ? "-" : "", disp < 0 ? -disp : disp);
-
- if ((modrm & 0x4) == 0)
- n += snprintf (tmpbuf + n, sizeof (tmpbuf) - n, "(%%b%c,%%%ci)",
- "xp"[(modrm >> 1) & 1], "sd"[modrm & 1]);
- else
- n += snprintf (tmpbuf + n, sizeof (tmpbuf) - n, "(%%%s)",
- ((const char [4][3]) { "si", "di", "bp", "bx" })[modrm & 3]);
- }
-
- if (*bufcntp + n + 1 > bufsize)
- return *bufcntp + n + 1 - bufsize;
-
- memcpy (&bufp[*bufcntp], tmpbuf, n + 1);
- *bufcntp += n;
- }
- else
-#endif
- {
- if ((modrm & 7) != 4)
- {
- int32_t disp = 0;
- bool nodisp = false;
-
- if ((modrm & 0xc7) == 5 || (modrm & 0xc0) == 0x80)
- /* 32 bit displacement. */
- disp = read_4sbyte_unaligned (&data[1]);
- else if ((modrm & 0xc0) == 0x40)
- /* 8 bit displacement. */
- disp = *(const int8_t *) &data[1];
- else if ((modrm & 0xc0) == 0)
- nodisp = true;
-
- char tmpbuf[sizeof ("-0x12345678(%rrrr)")];
- int n;
- if (nodisp)
- {
- n = snprintf (tmpbuf, sizeof (tmpbuf), "(%%%s)",
-#ifdef X86_64
- (prefixes & has_rex_b) ? hiregs[modrm & 7] :
-#endif
- aregs[modrm & 7]);
-#ifdef X86_64
- if (prefixes & has_addr16)
- {
- if (prefixes & has_rex_b)
- tmpbuf[n++] = 'd';
- else
- tmpbuf[2] = 'e';
- }
-#endif
- }
- else if ((modrm & 0xc7) != 5)
- {
- int p;
- n = snprintf (tmpbuf, sizeof (tmpbuf), "%s0x%" PRIx32 "(%%%n%s)",
- disp < 0 ? "-" : "", disp < 0 ? -disp : disp, &p,
-#ifdef X86_64
- (prefixes & has_rex_b) ? hiregs[modrm & 7] :
-#endif
- aregs[modrm & 7]);
-#ifdef X86_64
- if (prefixes & has_addr16)
- {
- if (prefixes & has_rex_b)
- tmpbuf[n++] = 'd';
- else
- tmpbuf[p] = 'e';
- }
-#endif
- }
- else
- {
-#ifdef X86_64
- n = snprintf (tmpbuf, sizeof (tmpbuf), "%s0x%" PRIx32 "(%%rip)",
- disp < 0 ? "-" : "", disp < 0 ? -disp : disp);
-
- d->symaddr_use = addr_rel_always;
- d->symaddr = disp;
-#else
- n = snprintf (tmpbuf, sizeof (tmpbuf), "0x%" PRIx32, disp);
-#endif
- }
-
- if (*bufcntp + n + 1 > bufsize)
- return *bufcntp + n + 1 - bufsize;
-
- memcpy (&bufp[*bufcntp], tmpbuf, n + 1);
- *bufcntp += n;
- }
- else
- {
- /* SIB */
- uint_fast8_t sib = data[1];
- int32_t disp = 0;
- bool nodisp = false;
-
- if ((modrm & 0xc7) == 5 || (modrm & 0xc0) == 0x80
- || ((modrm & 0xc7) == 0x4 && (sib & 0x7) == 0x5))
- /* 32 bit displacement. */
- disp = read_4sbyte_unaligned (&data[2]);
- else if ((modrm & 0xc0) == 0x40)
- /* 8 bit displacement. */
- disp = *(const int8_t *) &data[2];
- else
- nodisp = true;
-
- char tmpbuf[sizeof ("-0x12345678(%rrrr,%rrrr,N)")];
- char *cp = tmpbuf;
- int n;
- if ((modrm & 0xc0) != 0 || (sib & 0x3f) != 0x25
-#ifdef X86_64
- || (prefixes & has_rex_x) != 0
-#endif
- )
- {
- if (!nodisp)
- {
- n = snprintf (cp, sizeof (tmpbuf), "%s0x%" PRIx32,
- disp < 0 ? "-" : "", disp < 0 ? -disp : disp);
- cp += n;
- }
-
- *cp++ = '(';
-
- if ((modrm & 0xc7) != 0x4 || (sib & 0x7) != 0x5)
- {
- *cp++ = '%';
- cp = stpcpy (cp,
-#ifdef X86_64
- (prefixes & has_rex_b) ? hiregs[sib & 7] :
- (prefixes & has_addr16) ? dregs[sib & 7] :
-#endif
- aregs[sib & 7]);
-#ifdef X86_64
- if ((prefixes & (has_rex_b | has_addr16))
- == (has_rex_b | has_addr16))
- *cp++ = 'd';
-#endif
- }
-
- if ((sib & 0x38) != 0x20
-#ifdef X86_64
- || (prefixes & has_rex_x) != 0
-#endif
- )
- {
- *cp++ = ',';
- *cp++ = '%';
- cp = stpcpy (cp,
-#ifdef X86_64
- (prefixes & has_rex_x)
- ? hiregs[(sib >> 3) & 7] :
- (prefixes & has_addr16)
- ? dregs[(sib >> 3) & 7] :
-#endif
- aregs[(sib >> 3) & 7]);
-#ifdef X86_64
- if ((prefixes & (has_rex_b | has_addr16))
- == (has_rex_b | has_addr16))
- *cp++ = 'd';
-#endif
-
- *cp++ = ',';
- *cp++ = '0' + (1 << (sib >> 6));
- }
-
- *cp++ = ')';
- }
- else
- {
- assert (! nodisp);
-#ifdef X86_64
- if ((prefixes & has_addr16) == 0)
- n = snprintf (cp, sizeof (tmpbuf), "0x%" PRIx64,
- (int64_t) disp);
- else
-#endif
- n = snprintf (cp, sizeof (tmpbuf), "0x%" PRIx32, disp);
- cp += n;
- }
-
- if (*bufcntp + (cp - tmpbuf) > bufsize)
- return *bufcntp + (cp - tmpbuf) - bufsize;
-
- memcpy (&bufp[*bufcntp], tmpbuf, cp - tmpbuf);
- *bufcntp += cp - tmpbuf;
- }
- }
- return 0;
-}
-
-
-static int
-FCT_MOD$R_M (struct output_data *d)
-{
- assert (d->opoff1 % 8 == 0);
- uint_fast8_t modrm = d->data[d->opoff1 / 8];
- if ((modrm & 0xc0) == 0xc0)
- {
- assert (d->opoff1 / 8 == d->opoff2 / 8);
- assert (d->opoff2 % 8 == 5);
- //uint_fast8_t byte = d->data[d->opoff2 / 8] & 7;
- uint_fast8_t byte = modrm & 7;
-
- size_t *bufcntp = d->bufcntp;
- char *buf = d->bufp + *bufcntp;
- size_t avail = d->bufsize - *bufcntp;
- int needed;
- if (*d->prefixes & (has_rep | has_repne))
- needed = snprintf (buf, avail, "%%%s", dregs[byte]);
- else
- needed = snprintf (buf, avail, "%%mm%" PRIxFAST8, byte);
- if ((size_t) needed > avail)
- return needed - avail;
- *bufcntp += needed;
- return 0;
- }
-
- return general_mod$r_m (d);
-}
-
-
-static int
-FCT_Mod$R_m (struct output_data *d)
-{
- assert (d->opoff1 % 8 == 0);
- uint_fast8_t modrm = d->data[d->opoff1 / 8];
- if ((modrm & 0xc0) == 0xc0)
- {
- assert (d->opoff1 / 8 == d->opoff2 / 8);
- assert (d->opoff2 % 8 == 5);
- //uint_fast8_t byte = data[opoff2 / 8] & 7;
- uint_fast8_t byte = modrm & 7;
-
- size_t *bufcntp = d->bufcntp;
- size_t avail = d->bufsize - *bufcntp;
- int needed = snprintf (&d->bufp[*bufcntp], avail, "%%xmm%" PRIxFAST8,
- byte);
- if ((size_t) needed > avail)
- return needed - avail;
- *d->bufcntp += needed;
- return 0;
- }
-
- return general_mod$r_m (d);
-}
-
-static int
-generic_abs (struct output_data *d, const char *absstring
-#ifdef X86_64
- , int abslen
-#else
-# define abslen 4
-#endif
- )
-{
- int r = data_prefix (d);
- if (r != 0)
- return r;
-
- assert (d->opoff1 % 8 == 0);
- assert (d->opoff1 / 8 == 1);
- if (*d->param_start + abslen > d->end)
- return -1;
- *d->param_start += abslen;
-#ifndef X86_64
- uint32_t absval;
-# define ABSPRIFMT PRIx32
-#else
- uint64_t absval;
-# define ABSPRIFMT PRIx64
- if (abslen == 8)
- absval = read_8ubyte_unaligned (&d->data[1]);
- else
-#endif
- absval = read_4ubyte_unaligned (&d->data[1]);
- size_t *bufcntp = d->bufcntp;
- size_t avail = d->bufsize - *bufcntp;
- int needed = snprintf (&d->bufp[*bufcntp], avail, "%s0x%" ABSPRIFMT,
- absstring, absval);
- if ((size_t) needed > avail)
- return needed - avail;
- *bufcntp += needed;
- return 0;
-}
-
-
-static int
-FCT_absval (struct output_data *d)
-{
- return generic_abs (d, "$"
-#ifdef X86_64
- , 4
-#endif
- );
-}
-
-static int
-FCT_abs (struct output_data *d)
-{
- return generic_abs (d, ""
-#ifdef X86_64
- , 8
-#endif
- );
-}
-
-static int
-FCT_ax (struct output_data *d)
-{
- int is_16bit = (*d->prefixes & has_data16) != 0;
-
- size_t *bufcntp = d->bufcntp;
- char *bufp = d->bufp;
- size_t bufsize = d->bufsize;
-
- if (*bufcntp + 4 - is_16bit > bufsize)
- return *bufcntp + 4 - is_16bit - bufsize;
-
- bufp[(*bufcntp)++] = '%';
- if (! is_16bit)
- bufp[(*bufcntp)++] = (
-#ifdef X86_64
- (*d->prefixes & has_rex_w) ? 'r' :
-#endif
- 'e');
- bufp[(*bufcntp)++] = 'a';
- bufp[(*bufcntp)++] = 'x';
-
- return 0;
-}
-
-
-static int
-FCT_ax$w (struct output_data *d)
-{
- if ((d->data[d->opoff2 / 8] & (1 << (7 - (d->opoff2 & 7)))) != 0)
- return FCT_ax (d);
-
- size_t *bufcntp = d->bufcntp;
- char *bufp = d->bufp;
- size_t bufsize = d->bufsize;
-
- if (*bufcntp + 3 > bufsize)
- return *bufcntp + 3 - bufsize;
-
- bufp[(*bufcntp)++] = '%';
- bufp[(*bufcntp)++] = 'a';
- bufp[(*bufcntp)++] = 'l';
-
- return 0;
-}
-
-
-static int
-__attribute__ ((noinline))
-FCT_crdb (struct output_data *d, const char *regstr)
-{
- if (*d->prefixes & has_data16)
- return -1;
-
- size_t *bufcntp = d->bufcntp;
-
- // XXX If this assert is true, use absolute offset below
- assert (d->opoff1 / 8 == 2);
- assert (d->opoff1 % 8 == 2);
- size_t avail = d->bufsize - *bufcntp;
- int needed = snprintf (&d->bufp[*bufcntp], avail, "%%%s%" PRIx32,
- regstr, (uint32_t) (d->data[d->opoff1 / 8] >> 3) & 7);
- if ((size_t) needed > avail)
- return needed - avail;
- *bufcntp += needed;
- return 0;
-}
-
-
-static int
-FCT_ccc (struct output_data *d)
-{
- return FCT_crdb (d, "cr");
-}
-
-
-static int
-FCT_ddd (struct output_data *d)
-{
- return FCT_crdb (d, "db");
-}
-
-
-static int
-FCT_disp8 (struct output_data *d)
-{
- assert (d->opoff1 % 8 == 0);
- if (*d->param_start >= d->end)
- return -1;
- int32_t offset = *(const int8_t *) (*d->param_start)++;
-
- size_t *bufcntp = d->bufcntp;
- size_t avail = d->bufsize - *bufcntp;
- int needed = snprintf (&d->bufp[*bufcntp], avail, "0x%" PRIx32,
- (uint32_t) (d->addr + (*d->param_start - d->data)
- + offset));
- if ((size_t) needed > avail)
- return needed - avail;
- *bufcntp += needed;
- return 0;
-}
-
-
-static int
-__attribute__ ((noinline))
-FCT_ds_xx (struct output_data *d, const char *reg)
-{
- int prefix = *d->prefixes & SEGMENT_PREFIXES;
-
- if (prefix == 0)
- *d->prefixes |= prefix = has_ds;
- /* Make sure only one bit is set. */
- else if ((prefix - 1) & prefix)
- return -1;
-
- int r = data_prefix (d);
-
- assert ((*d->prefixes & prefix) == 0);
-
- if (r != 0)
- return r;
-
- size_t *bufcntp = d->bufcntp;
- size_t avail = d->bufsize - *bufcntp;
- int needed = snprintf (&d->bufp[*bufcntp], avail, "(%%%s%s)",
-#ifdef X86_64
- *d->prefixes & idx_addr16 ? "e" : "r",
-#else
- *d->prefixes & idx_addr16 ? "" : "e",
-#endif
- reg);
- if ((size_t) needed > avail)
- return (size_t) needed - avail;
- *bufcntp += needed;
-
- return 0;
-}
-
-
-static int
-FCT_ds_bx (struct output_data *d)
-{
- return FCT_ds_xx (d, "bx");
-}
-
-
-static int
-FCT_ds_si (struct output_data *d)
-{
- return FCT_ds_xx (d, "si");
-}
-
-
-static int
-FCT_dx (struct output_data *d)
-{
- size_t *bufcntp = d->bufcntp;
-
- if (*bufcntp + 7 > d->bufsize)
- return *bufcntp + 7 - d->bufsize;
-
- memcpy (&d->bufp[*bufcntp], "(%dx)", 5);
- *bufcntp += 5;
-
- return 0;
-}
-
-
-static int
-FCT_es_di (struct output_data *d)
-{
- size_t *bufcntp = d->bufcntp;
- size_t avail = d->bufsize - *bufcntp;
- int needed = snprintf (&d->bufp[*bufcntp], avail, "%%es:(%%%sdi)",
-#ifdef X86_64
- *d->prefixes & idx_addr16 ? "e" : "r"
-#else
- *d->prefixes & idx_addr16 ? "" : "e"
-#endif
- );
- if ((size_t) needed > avail)
- return (size_t) needed - avail;
- *bufcntp += needed;
-
- return 0;
-}
-
-
-static int
-FCT_imm (struct output_data *d)
-{
- size_t *bufcntp = d->bufcntp;
- size_t avail = d->bufsize - *bufcntp;
- int needed;
- if (*d->prefixes & has_data16)
- {
- if (*d->param_start + 2 > d->end)
- return -1;
- uint16_t word = read_2ubyte_unaligned_inc (*d->param_start);
- needed = snprintf (&d->bufp[*bufcntp], avail, "$0x%" PRIx16, word);
- }
- else
- {
- if (*d->param_start + 4 > d->end)
- return -1;
- int32_t word = read_4sbyte_unaligned_inc (*d->param_start);
-#ifdef X86_64
- if (*d->prefixes & has_rex_w)
- needed = snprintf (&d->bufp[*bufcntp], avail, "$0x%" PRIx64,
- (int64_t) word);
- else
-#endif
- needed = snprintf (&d->bufp[*bufcntp], avail, "$0x%" PRIx32, word);
- }
- if ((size_t) needed > avail)
- return (size_t) needed - avail;
- *bufcntp += needed;
- return 0;
-}
-
-
-static int
-FCT_imm$w (struct output_data *d)
-{
- if ((d->data[d->opoff2 / 8] & (1 << (7 - (d->opoff2 & 7)))) != 0)
- return FCT_imm (d);
-
- size_t *bufcntp = d->bufcntp;
- size_t avail = d->bufsize - *bufcntp;
- if (*d->param_start>= d->end)
- return -1;
- uint_fast8_t word = *(*d->param_start)++;
- int needed = snprintf (&d->bufp[*bufcntp], avail, "$0x%" PRIxFAST8, word);
- if ((size_t) needed > avail)
- return (size_t) needed - avail;
- *bufcntp += needed;
- return 0;
-}
-
-
-#ifdef X86_64
-static int
-FCT_imm64$w (struct output_data *d)
-{
- if ((d->data[d->opoff2 / 8] & (1 << (7 - (d->opoff2 & 7)))) == 0
- || (*d->prefixes & has_data16) != 0)
- return FCT_imm$w (d);
-
- size_t *bufcntp = d->bufcntp;
- size_t avail = d->bufsize - *bufcntp;
- int needed;
- if (*d->prefixes & has_rex_w)
- {
- if (*d->param_start + 8 > d->end)
- return -1;
- uint64_t word = read_8ubyte_unaligned_inc (*d->param_start);
- needed = snprintf (&d->bufp[*bufcntp], avail, "$0x%" PRIx64, word);
- }
- else
- {
- if (*d->param_start + 4 > d->end)
- return -1;
- int32_t word = read_4sbyte_unaligned_inc (*d->param_start);
- needed = snprintf (&d->bufp[*bufcntp], avail, "$0x%" PRIx32, word);
- }
- if ((size_t) needed > avail)
- return (size_t) needed - avail;
- *bufcntp += needed;
- return 0;
-}
-#endif
-
-
-static int
-FCT_imms (struct output_data *d)
-{
- size_t *bufcntp = d->bufcntp;
- size_t avail = d->bufsize - *bufcntp;
- if (*d->param_start>= d->end)
- return -1;
- int8_t byte = *(*d->param_start)++;
-#ifdef X86_64
- int needed = snprintf (&d->bufp[*bufcntp], avail, "$0x%" PRIx64,
- (int64_t) byte);
-#else
- int needed = snprintf (&d->bufp[*bufcntp], avail, "$0x%" PRIx32,
- (int32_t) byte);
-#endif
- if ((size_t) needed > avail)
- return (size_t) needed - avail;
- *bufcntp += needed;
- return 0;
-}
-
-
-static int
-FCT_imm$s (struct output_data *d)
-{
- uint_fast8_t opcode = d->data[d->opoff2 / 8];
- size_t *bufcntp = d->bufcntp;
- size_t avail = d->bufsize - *bufcntp;
- if ((opcode & 2) != 0)
- return FCT_imms (d);
-
- if ((*d->prefixes & has_data16) == 0)
- {
- if (*d->param_start + 4 > d->end)
- return -1;
- int32_t word = read_4sbyte_unaligned_inc (*d->param_start);
-#ifdef X86_64
- int needed = snprintf (&d->bufp[*bufcntp], avail, "$0x%" PRIx64,
- (int64_t) word);
-#else
- int needed = snprintf (&d->bufp[*bufcntp], avail, "$0x%" PRIx32, word);
-#endif
- if ((size_t) needed > avail)
- return (size_t) needed - avail;
- *bufcntp += needed;
- }
- else
- {
- if (*d->param_start + 2 > d->end)
- return -1;
- uint16_t word = read_2ubyte_unaligned_inc (*d->param_start);
- int needed = snprintf (&d->bufp[*bufcntp], avail, "$0x%" PRIx16, word);
- if ((size_t) needed > avail)
- return (size_t) needed - avail;
- *bufcntp += needed;
- }
- return 0;
-}
-
-
-static int
-FCT_imm16 (struct output_data *d)
-{
- if (*d->param_start + 2 > d->end)
- return -1;
- uint16_t word = read_2ubyte_unaligned_inc (*d->param_start);
- size_t *bufcntp = d->bufcntp;
- size_t avail = d->bufsize - *bufcntp;
- int needed = snprintf (&d->bufp[*bufcntp], avail, "$0x%" PRIx16, word);
- if ((size_t) needed > avail)
- return (size_t) needed - avail;
- *bufcntp += needed;
- return 0;
-}
-
-
-static int
-FCT_imms8 (struct output_data *d)
-{
- size_t *bufcntp = d->bufcntp;
- size_t avail = d->bufsize - *bufcntp;
- if (*d->param_start >= d->end)
- return -1;
- int_fast8_t byte = *(*d->param_start)++;
- int needed;
-#ifdef X86_64
- if (*d->prefixes & has_rex_w)
- needed = snprintf (&d->bufp[*bufcntp], avail, "$0x%" PRIx64,
- (int64_t) byte);
- else
-#endif
- needed = snprintf (&d->bufp[*bufcntp], avail, "$0x%" PRIx32,
- (int32_t) byte);
- if ((size_t) needed > avail)
- return (size_t) needed - avail;
- *bufcntp += needed;
- return 0;
-}
-
-
-static int
-FCT_imm8 (struct output_data *d)
-{
- size_t *bufcntp = d->bufcntp;
- size_t avail = d->bufsize - *bufcntp;
- if (*d->param_start >= d->end)
- return -1;
- uint_fast8_t byte = *(*d->param_start)++;
- int needed = snprintf (&d->bufp[*bufcntp], avail, "$0x%" PRIx32,
- (uint32_t) byte);
- if ((size_t) needed > avail)
- return (size_t) needed - avail;
- *bufcntp += needed;
- return 0;
-}
-
-
-static int
-FCT_rel (struct output_data *d)
-{
- size_t *bufcntp = d->bufcntp;
- size_t avail = d->bufsize - *bufcntp;
- if (*d->param_start + 4 > d->end)
- return -1;
- int32_t rel = read_4sbyte_unaligned_inc (*d->param_start);
-#ifdef X86_64
- int needed = snprintf (&d->bufp[*bufcntp], avail, "0x%" PRIx64,
- (uint64_t) (d->addr + rel
- + (*d->param_start - d->data)));
-#else
- int needed = snprintf (&d->bufp[*bufcntp], avail, "0x%" PRIx32,
- (uint32_t) (d->addr + rel
- + (*d->param_start - d->data)));
-#endif
- if ((size_t) needed > avail)
- return (size_t) needed - avail;
- *bufcntp += needed;
- return 0;
-}
-
-
-static int
-FCT_mmxreg (struct output_data *d)
-{
- uint_fast8_t byte = d->data[d->opoff1 / 8];
- assert (d->opoff1 % 8 == 2 || d->opoff1 % 8 == 5);
- byte = (byte >> (5 - d->opoff1 % 8)) & 7;
- size_t *bufcntp = d->bufcntp;
- size_t avail = d->bufsize - *bufcntp;
- int needed = snprintf (&d->bufp[*bufcntp], avail, "%%mm%" PRIxFAST8, byte);
- if ((size_t) needed > avail)
- return needed - avail;
- *bufcntp += needed;
- return 0;
-}
-
-
-static int
-FCT_mod$r_m (struct output_data *d)
-{
- assert (d->opoff1 % 8 == 0);
- uint_fast8_t modrm = d->data[d->opoff1 / 8];
- if ((modrm & 0xc0) == 0xc0)
- {
- int prefixes = *d->prefixes;
- if (prefixes & has_addr16)
- return -1;
-
- int is_16bit = (prefixes & has_data16) != 0;
-
- size_t *bufcntp = d->bufcntp;
- char *bufp = d->bufp;
- if (*bufcntp + 5 - is_16bit > d->bufsize)
- return *bufcntp + 5 - is_16bit - d->bufsize;
- bufp[(*bufcntp)++] = '%';
-
- char *cp;
-#ifdef X86_64
- if ((prefixes & has_rex_b) != 0 && !is_16bit)
- {
- cp = stpcpy (&bufp[*bufcntp], hiregs[modrm & 7]);
- if ((prefixes & has_rex_w) == 0)
- *cp++ = 'd';
- }
- else
-#endif
- {
- cp = stpcpy (&bufp[*bufcntp], dregs[modrm & 7] + is_16bit);
-#ifdef X86_64
- if ((prefixes & has_rex_w) != 0)
- bufp[*bufcntp] = 'r';
-#endif
- }
- *bufcntp = cp - bufp;
- return 0;
- }
-
- return general_mod$r_m (d);
-}
-
-
-#ifndef X86_64
-static int
-FCT_moda$r_m (struct output_data *d)
-{
- assert (d->opoff1 % 8 == 0);
- uint_fast8_t modrm = d->data[d->opoff1 / 8];
- if ((modrm & 0xc0) == 0xc0)
- {
- if (*d->prefixes & has_addr16)
- return -1;
-
- size_t *bufcntp = d->bufcntp;
- if (*bufcntp + 3 > d->bufsize)
- return *bufcntp + 3 - d->bufsize;
-
- memcpy (&d->bufp[*bufcntp], "???", 3);
- *bufcntp += 3;
-
- return 0;
- }
-
- return general_mod$r_m (d);
-}
-#endif
-
-
-#ifdef X86_64
-static const char rex_8bit[8][3] =
- {
- [0] = "a", [1] = "c", [2] = "d", [3] = "b",
- [4] = "sp", [5] = "bp", [6] = "si", [7] = "di"
- };
-#endif
-
-
-static int
-FCT_mod$r_m$w (struct output_data *d)
-{
- assert (d->opoff1 % 8 == 0);
- const uint8_t *data = d->data;
- uint_fast8_t modrm = data[d->opoff1 / 8];
- if ((modrm & 0xc0) == 0xc0)
- {
- int prefixes = *d->prefixes;
-
- if (prefixes & has_addr16)
- return -1;
-
- size_t *bufcntp = d->bufcntp;
- char *bufp = d->bufp;
- if (*bufcntp + 5 > d->bufsize)
- return *bufcntp + 5 - d->bufsize;
-
- if ((data[d->opoff3 / 8] & (1 << (7 - (d->opoff3 & 7)))) == 0)
- {
- bufp[(*bufcntp)++] = '%';
-
-#ifdef X86_64
- if (prefixes & has_rex)
- {
- if (prefixes & has_rex_r)
- *bufcntp += snprintf (bufp + *bufcntp, d->bufsize - *bufcntp,
- "r%db", 8 + (modrm & 7));
- else
- {
- char *cp = stpcpy (bufp + *bufcntp, hiregs[modrm & 7]);
- *cp++ = 'l';
- *bufcntp = cp - bufp;
- }
- }
- else
-#endif
- {
- bufp[(*bufcntp)++] = "acdb"[modrm & 3];
- bufp[(*bufcntp)++] = "lh"[(modrm & 4) >> 2];
- }
- }
- else
- {
- int is_16bit = (prefixes & has_data16) != 0;
-
- bufp[(*bufcntp)++] = '%';
-
- char *cp;
-#ifdef X86_64
- if ((prefixes & has_rex_b) != 0 && !is_16bit)
- {
- cp = stpcpy (&bufp[*bufcntp], hiregs[modrm & 7]);
- if ((prefixes & has_rex_w) == 0)
- *cp++ = 'd';
- }
- else
-#endif
- {
- cp = stpcpy (&bufp[*bufcntp], dregs[modrm & 7] + is_16bit);
-#ifdef X86_64
- if ((prefixes & has_rex_w) != 0)
- bufp[*bufcntp] = 'r';
-#endif
- }
- *bufcntp = cp - bufp;
- }
- return 0;
- }
-
- return general_mod$r_m (d);
-}
-
-
-static int
-FCT_mod$8r_m (struct output_data *d)
-{
- assert (d->opoff1 % 8 == 0);
- uint_fast8_t modrm = d->data[d->opoff1 / 8];
- if ((modrm & 0xc0) == 0xc0)
- {
- size_t *bufcntp = d->bufcntp;
- char *bufp = d->bufp;
- if (*bufcntp + 3 > d->bufsize)
- return *bufcntp + 3 - d->bufsize;
- bufp[(*bufcntp)++] = '%';
- bufp[(*bufcntp)++] = "acdb"[modrm & 3];
- bufp[(*bufcntp)++] = "lh"[(modrm & 4) >> 2];
- return 0;
- }
-
- return general_mod$r_m (d);
-}
-
-
-static int
-FCT_mod$16r_m (struct output_data *d)
-{
- assert (d->opoff1 % 8 == 0);
- uint_fast8_t modrm = d->data[d->opoff1 / 8];
- if ((modrm & 0xc0) == 0xc0)
- {
- assert (d->opoff1 / 8 == d->opoff2 / 8);
- //uint_fast8_t byte = data[opoff2 / 8] & 7;
- uint_fast8_t byte = modrm & 7;
-
- size_t *bufcntp = d->bufcntp;
- if (*bufcntp + 3 > d->bufsize)
- return *bufcntp + 3 - d->bufsize;
- d->bufp[(*bufcntp)++] = '%';
- memcpy (&d->bufp[*bufcntp], dregs[byte] + 1, sizeof (dregs[0]) - 1);
- *bufcntp += 2;
- return 0;
- }
-
- return general_mod$r_m (d);
-}
-
-
-#ifdef X86_64
-static int
-FCT_mod$64r_m (struct output_data *d)
-{
- assert (d->opoff1 % 8 == 0);
- uint_fast8_t modrm = d->data[d->opoff1 / 8];
- if ((modrm & 0xc0) == 0xc0)
- {
- assert (d->opoff1 / 8 == d->opoff2 / 8);
- //uint_fast8_t byte = data[opoff2 / 8] & 7;
- uint_fast8_t byte = modrm & 7;
-
- size_t *bufcntp = d->bufcntp;
- if (*bufcntp + 4 > d->bufsize)
- return *bufcntp + 4 - d->bufsize;
- char *cp = &d->bufp[*bufcntp];
- *cp++ = '%';
- cp = stpcpy (cp,
- (*d->prefixes & has_rex_b) ? hiregs[byte] : aregs[byte]);
- *bufcntp = cp - d->bufp;
- return 0;
- }
-
- return general_mod$r_m (d);
-}
-#else
-static typeof (FCT_mod$r_m) FCT_mod$64r_m __attribute__ ((alias ("FCT_mod$r_m")));
-#endif
-
-
-static int
-FCT_reg (struct output_data *d)
-{
- uint_fast8_t byte = d->data[d->opoff1 / 8];
- assert (d->opoff1 % 8 + 3 <= 8);
- byte >>= 8 - (d->opoff1 % 8 + 3);
- byte &= 7;
- int is_16bit = (*d->prefixes & has_data16) != 0;
- size_t *bufcntp = d->bufcntp;
- if (*bufcntp + 5 > d->bufsize)
- return *bufcntp + 5 - d->bufsize;
- d->bufp[(*bufcntp)++] = '%';
-#ifdef X86_64
- if ((*d->prefixes & has_rex_r) != 0 && !is_16bit)
- {
- *bufcntp += snprintf (&d->bufp[*bufcntp], d->bufsize - *bufcntp, "r%d",
- 8 + byte);
- if ((*d->prefixes & has_rex_w) == 0)
- d->bufp[(*bufcntp)++] = 'd';
- }
- else
-#endif
- {
- memcpy (&d->bufp[*bufcntp], dregs[byte] + is_16bit, 3 - is_16bit);
-#ifdef X86_64
- if ((*d->prefixes & has_rex_w) != 0 && !is_16bit)
- d->bufp[*bufcntp] = 'r';
-#endif
- *bufcntp += 3 - is_16bit;
- }
- return 0;
-}
-
-
-#ifdef X86_64
-static int
-FCT_oreg (struct output_data *d)
-{
- /* Special form where register comes from opcode. The rex.B bit is used,
- rex.R and rex.X are ignored. */
- int save_prefixes = *d->prefixes;
-
- *d->prefixes = ((save_prefixes & ~has_rex_r)
- | ((save_prefixes & has_rex_b) << (idx_rex_r - idx_rex_b)));
-
- int r = FCT_reg (d);
-
- *d->prefixes = save_prefixes;
-
- return r;
-}
-#endif
-
-
-static int
-FCT_reg64 (struct output_data *d)
-{
- uint_fast8_t byte = d->data[d->opoff1 / 8];
- assert (d->opoff1 % 8 + 3 <= 8);
- byte >>= 8 - (d->opoff1 % 8 + 3);
- byte &= 7;
- if ((*d->prefixes & has_data16) != 0)
- return -1;
- size_t *bufcntp = d->bufcntp;
- if (*bufcntp + 5 > d->bufsize)
- return *bufcntp + 5 - d->bufsize;
- d->bufp[(*bufcntp)++] = '%';
-#ifdef X86_64
- if ((*d->prefixes & has_rex_r) != 0)
- {
- *bufcntp += snprintf (&d->bufp[*bufcntp], d->bufsize - *bufcntp, "r%d",
- 8 + byte);
- if ((*d->prefixes & has_rex_w) == 0)
- d->bufp[(*bufcntp)++] = 'd';
- }
- else
-#endif
- {
- memcpy (&d->bufp[*bufcntp], aregs[byte], 3);
- *bufcntp += 3;
- }
- return 0;
-}
-
-
-static int
-FCT_reg$w (struct output_data *d)
-{
- if (d->data[d->opoff2 / 8] & (1 << (7 - (d->opoff2 & 7))))
- return FCT_reg (d);
-
- uint_fast8_t byte = d->data[d->opoff1 / 8];
- assert (d->opoff1 % 8 + 3 <= 8);
- byte >>= 8 - (d->opoff1 % 8 + 3);
- byte &= 7;
-
- size_t *bufcntp = d->bufcntp;
- if (*bufcntp + 4 > d->bufsize)
- return *bufcntp + 4 - d->bufsize;
-
- d->bufp[(*bufcntp)++] = '%';
-
-#ifdef X86_64
- if (*d->prefixes & has_rex)
- {
- if (*d->prefixes & has_rex_r)
- *bufcntp += snprintf (d->bufp + *bufcntp, d->bufsize - *bufcntp,
- "r%db", 8 + byte);
- else
- {
- char* cp = stpcpy (d->bufp + *bufcntp, rex_8bit[byte]);
- *cp++ = 'l';
- *bufcntp = cp - d->bufp;
- }
- }
- else
-#endif
- {
- d->bufp[(*bufcntp)++] = "acdb"[byte & 3];
- d->bufp[(*bufcntp)++] = "lh"[byte >> 2];
- }
- return 0;
-}
-
-
-#ifdef X86_64
-static int
-FCT_oreg$w (struct output_data *d)
-{
- /* Special form where register comes from opcode. The rex.B bit is used,
- rex.R and rex.X are ignored. */
- int save_prefixes = *d->prefixes;
-
- *d->prefixes = ((save_prefixes & ~has_rex_r)
- | ((save_prefixes & has_rex_b) << (idx_rex_r - idx_rex_b)));
-
- int r = FCT_reg$w (d);
-
- *d->prefixes = save_prefixes;
-
- return r;
-}
-#endif
-
-
-static int
-FCT_freg (struct output_data *d)
-{
- assert (d->opoff1 / 8 == 1);
- assert (d->opoff1 % 8 == 5);
- size_t *bufcntp = d->bufcntp;
- size_t avail = d->bufsize - *bufcntp;
- int needed = snprintf (&d->bufp[*bufcntp], avail, "%%st(%" PRIx32 ")",
- (uint32_t) (d->data[1] & 7));
- if ((size_t) needed > avail)
- return (size_t) needed - avail;
- *bufcntp += needed;
- return 0;
-}
-
-
-#ifndef X86_64
-static int
-FCT_reg16 (struct output_data *d)
-{
- if (*d->prefixes & has_data16)
- return -1;
-
- *d->prefixes |= has_data16;
- return FCT_reg (d);
-}
-#endif
-
-
-static int
-FCT_sel (struct output_data *d)
-{
- assert (d->opoff1 % 8 == 0);
- assert (d->opoff1 / 8 == 5);
- if (*d->param_start + 2 > d->end)
- return -1;
- *d->param_start += 2;
- uint16_t absval = read_2ubyte_unaligned (&d->data[5]);
-
- size_t *bufcntp = d->bufcntp;
- size_t avail = d->bufsize - *bufcntp;
- int needed = snprintf (&d->bufp[*bufcntp], avail, "$0x%" PRIx16, absval);
- if ((size_t) needed > avail)
- return needed - avail;
- *bufcntp += needed;
- return 0;
-}
-
-
-static int
-FCT_sreg2 (struct output_data *d)
-{
- uint_fast8_t byte = d->data[d->opoff1 / 8];
- assert (d->opoff1 % 8 + 3 <= 8);
- byte >>= 8 - (d->opoff1 % 8 + 2);
-
- size_t *bufcntp = d->bufcntp;
- char *bufp = d->bufp;
- if (*bufcntp + 3 > d->bufsize)
- return *bufcntp + 3 - d->bufsize;
-
- bufp[(*bufcntp)++] = '%';
- bufp[(*bufcntp)++] = "ecsd"[byte & 3];
- bufp[(*bufcntp)++] = 's';
-
- return 0;
-}
-
-
-static int
-FCT_sreg3 (struct output_data *d)
-{
- uint_fast8_t byte = d->data[d->opoff1 / 8];
- assert (d->opoff1 % 8 + 4 <= 8);
- byte >>= 8 - (d->opoff1 % 8 + 3);
-
- if ((byte & 7) >= 6)
- return -1;
-
- size_t *bufcntp = d->bufcntp;
- char *bufp = d->bufp;
- if (*bufcntp + 3 > d->bufsize)
- return *bufcntp + 3 - d->bufsize;
-
- bufp[(*bufcntp)++] = '%';
- bufp[(*bufcntp)++] = "ecsdfg"[byte & 7];
- bufp[(*bufcntp)++] = 's';
-
- return 0;
-}
-
-
-static int
-FCT_string (struct output_data *d __attribute__ ((unused)))
-{
- return 0;
-}
-
-
-static int
-FCT_xmmreg (struct output_data *d)
-{
- uint_fast8_t byte = d->data[d->opoff1 / 8];
- assert (d->opoff1 % 8 == 2 || d->opoff1 % 8 == 5);
- byte = (byte >> (5 - d->opoff1 % 8)) & 7;
-
- size_t *bufcntp = d->bufcntp;
- size_t avail = d->bufsize - *bufcntp;
- int needed = snprintf (&d->bufp[*bufcntp], avail, "%%xmm%" PRIxFAST8, byte);
- if ((size_t) needed > avail)
- return needed - avail;
- *bufcntp += needed;
- return 0;
-}
diff --git a/libcpu/i386_disasm.c b/libcpu/i386_disasm.c
deleted file mode 100644
index 76b5a39..0000000
--- a/libcpu/i386_disasm.c
+++ /dev/null
@@ -1,1042 +0,0 @@
-/* Disassembler for x86.
- Copyright (C) 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2007.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <config.h>
-#include <ctype.h>
-#include <endian.h>
-#include <errno.h>
-#include <gelf.h>
-#include <stddef.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/param.h>
-
-#include "../libebl/libeblP.h"
-
-#define MACHINE_ENCODING __LITTLE_ENDIAN
-#include "memory-access.h"
-
-
-#ifndef MNEFILE
-# define MNEFILE "i386.mnemonics"
-#endif
-
-#define MNESTRFIELD(line) MNESTRFIELD1 (line)
-#define MNESTRFIELD1(line) str##line
-static const union mnestr_t
-{
- struct
- {
-#define MNE(name) char MNESTRFIELD (__LINE__)[sizeof (#name)];
-#include MNEFILE
-#undef MNE
- };
- char str[0];
-} mnestr =
- {
- {
-#define MNE(name) #name,
-#include MNEFILE
-#undef MNE
- }
- };
-
-/* The index can be stored in the instrtab. */
-enum
- {
-#define MNE(name) MNE_##name,
-#include MNEFILE
-#undef MNE
- MNE_INVALID
- };
-
-static const unsigned short int mneidx[] =
- {
-#define MNE(name) \
- [MNE_##name] = offsetof (union mnestr_t, MNESTRFIELD (__LINE__)),
-#include MNEFILE
-#undef MNE
- };
-
-
-enum
- {
- idx_rex_b = 0,
- idx_rex_x,
- idx_rex_r,
- idx_rex_w,
- idx_rex,
- idx_cs,
- idx_ds,
- idx_es,
- idx_fs,
- idx_gs,
- idx_ss,
- idx_data16,
- idx_addr16,
- idx_rep,
- idx_repne,
- idx_lock
- };
-
-enum
- {
-#define prefbit(pref) has_##pref = 1 << idx_##pref
- prefbit (rex_b),
- prefbit (rex_x),
- prefbit (rex_r),
- prefbit (rex_w),
- prefbit (rex),
- prefbit (cs),
- prefbit (ds),
- prefbit (es),
- prefbit (fs),
- prefbit (gs),
- prefbit (ss),
- prefbit (data16),
- prefbit (addr16),
- prefbit (rep),
- prefbit (repne),
- prefbit (lock)
-#undef prefbit
- };
-#define SEGMENT_PREFIXES \
- (has_cs | has_ds | has_es | has_fs | has_gs | has_ss)
-
-#define prefix_cs 0x2e
-#define prefix_ds 0x3e
-#define prefix_es 0x26
-#define prefix_fs 0x64
-#define prefix_gs 0x65
-#define prefix_ss 0x36
-#define prefix_data16 0x66
-#define prefix_addr16 0x67
-#define prefix_rep 0xf3
-#define prefix_repne 0xf2
-#define prefix_lock 0xf0
-
-
-static const uint8_t known_prefixes[] =
- {
-#define newpref(pref) [idx_##pref] = prefix_##pref
- newpref (cs),
- newpref (ds),
- newpref (es),
- newpref (fs),
- newpref (gs),
- newpref (ss),
- newpref (data16),
- newpref (addr16),
- newpref (rep),
- newpref (repne),
- newpref (lock)
-#undef newpref
- };
-#define nknown_prefixes (sizeof (known_prefixes) / sizeof (known_prefixes[0]))
-
-
-#if 0
-static const char *prefix_str[] =
- {
-#define newpref(pref) [idx_##pref] = #pref
- newpref (cs),
- newpref (ds),
- newpref (es),
- newpref (fs),
- newpref (gs),
- newpref (ss),
- newpref (data16),
- newpref (addr16),
- newpref (rep),
- newpref (repne),
- newpref (lock)
-#undef newpref
- };
-#endif
-
-
-static const char amd3dnowstr[] =
-#define MNE_3DNOW_PAVGUSB 1
- "pavgusb\0"
-#define MNE_3DNOW_PFADD (MNE_3DNOW_PAVGUSB + 8)
- "pfadd\0"
-#define MNE_3DNOW_PFSUB (MNE_3DNOW_PFADD + 6)
- "pfsub\0"
-#define MNE_3DNOW_PFSUBR (MNE_3DNOW_PFSUB + 6)
- "pfsubr\0"
-#define MNE_3DNOW_PFACC (MNE_3DNOW_PFSUBR + 7)
- "pfacc\0"
-#define MNE_3DNOW_PFCMPGE (MNE_3DNOW_PFACC + 6)
- "pfcmpge\0"
-#define MNE_3DNOW_PFCMPGT (MNE_3DNOW_PFCMPGE + 8)
- "pfcmpgt\0"
-#define MNE_3DNOW_PFCMPEQ (MNE_3DNOW_PFCMPGT + 8)
- "pfcmpeq\0"
-#define MNE_3DNOW_PFMIN (MNE_3DNOW_PFCMPEQ + 8)
- "pfmin\0"
-#define MNE_3DNOW_PFMAX (MNE_3DNOW_PFMIN + 6)
- "pfmax\0"
-#define MNE_3DNOW_PI2FD (MNE_3DNOW_PFMAX + 6)
- "pi2fd\0"
-#define MNE_3DNOW_PF2ID (MNE_3DNOW_PI2FD + 6)
- "pf2id\0"
-#define MNE_3DNOW_PFRCP (MNE_3DNOW_PF2ID + 6)
- "pfrcp\0"
-#define MNE_3DNOW_PFRSQRT (MNE_3DNOW_PFRCP + 6)
- "pfrsqrt\0"
-#define MNE_3DNOW_PFMUL (MNE_3DNOW_PFRSQRT + 8)
- "pfmul\0"
-#define MNE_3DNOW_PFRCPIT1 (MNE_3DNOW_PFMUL + 6)
- "pfrcpit1\0"
-#define MNE_3DNOW_PFRSQIT1 (MNE_3DNOW_PFRCPIT1 + 9)
- "pfrsqit1\0"
-#define MNE_3DNOW_PFRCPIT2 (MNE_3DNOW_PFRSQIT1 + 9)
- "pfrcpit2\0"
-#define MNE_3DNOW_PMULHRW (MNE_3DNOW_PFRCPIT2 + 9)
- "pmulhrw";
-
-#define AMD3DNOW_LOW_IDX 0x0d
-#define AMD3DNOW_HIGH_IDX (sizeof (amd3dnow) + AMD3DNOW_LOW_IDX - 1)
-#define AMD3DNOW_IDX(val) ((val) - AMD3DNOW_LOW_IDX)
-static const unsigned char amd3dnow[] =
- {
- [AMD3DNOW_IDX (0xbf)] = MNE_3DNOW_PAVGUSB,
- [AMD3DNOW_IDX (0x9e)] = MNE_3DNOW_PFADD,
- [AMD3DNOW_IDX (0x9a)] = MNE_3DNOW_PFSUB,
- [AMD3DNOW_IDX (0xaa)] = MNE_3DNOW_PFSUBR,
- [AMD3DNOW_IDX (0xae)] = MNE_3DNOW_PFACC,
- [AMD3DNOW_IDX (0x90)] = MNE_3DNOW_PFCMPGE,
- [AMD3DNOW_IDX (0xa0)] = MNE_3DNOW_PFCMPGT,
- [AMD3DNOW_IDX (0xb0)] = MNE_3DNOW_PFCMPEQ,
- [AMD3DNOW_IDX (0x94)] = MNE_3DNOW_PFMIN,
- [AMD3DNOW_IDX (0xa4)] = MNE_3DNOW_PFMAX,
- [AMD3DNOW_IDX (0x0d)] = MNE_3DNOW_PI2FD,
- [AMD3DNOW_IDX (0x1d)] = MNE_3DNOW_PF2ID,
- [AMD3DNOW_IDX (0x96)] = MNE_3DNOW_PFRCP,
- [AMD3DNOW_IDX (0x97)] = MNE_3DNOW_PFRSQRT,
- [AMD3DNOW_IDX (0xb4)] = MNE_3DNOW_PFMUL,
- [AMD3DNOW_IDX (0xa6)] = MNE_3DNOW_PFRCPIT1,
- [AMD3DNOW_IDX (0xa7)] = MNE_3DNOW_PFRSQIT1,
- [AMD3DNOW_IDX (0xb6)] = MNE_3DNOW_PFRCPIT2,
- [AMD3DNOW_IDX (0xb7)] = MNE_3DNOW_PMULHRW
- };
-
-
-struct output_data
-{
- GElf_Addr addr;
- int *prefixes;
- size_t opoff1;
- size_t opoff2;
- size_t opoff3;
- char *bufp;
- size_t *bufcntp;
- size_t bufsize;
- const uint8_t *data;
- const uint8_t **param_start;
- const uint8_t *end;
- char *labelbuf;
- size_t labelbufsize;
- enum
- {
- addr_none = 0,
- addr_abs_symbolic,
- addr_abs_always,
- addr_rel_symbolic,
- addr_rel_always
- } symaddr_use;
- GElf_Addr symaddr;
-};
-
-
-#ifndef DISFILE
-# define DISFILE "i386_dis.h"
-#endif
-#include DISFILE
-
-
-#define ADD_CHAR(ch) \
- do { \
- if (unlikely (bufcnt == bufsize)) \
- goto enomem; \
- buf[bufcnt++] = (ch); \
- } while (0)
-
-#define ADD_STRING(str) \
- do { \
- const char *_str = (str); \
- size_t _len = strlen (_str); \
- if (unlikely (bufcnt + _len > bufsize)) \
- goto enomem; \
- memcpy (buf + bufcnt, str, _len); \
- bufcnt += _len; \
- } while (0)
-
-
-int
-i386_disasm (const uint8_t **startp, const uint8_t *end, GElf_Addr addr,
- const char *fmt, DisasmOutputCB_t outcb, DisasmGetSymCB_t symcb,
- void *outcbarg, void *symcbarg)
-{
- const char *save_fmt = fmt;
-
-#define BUFSIZE 512
- char initbuf[BUFSIZE];
- int prefixes;
- size_t bufcnt;
- size_t bufsize = BUFSIZE;
- char *buf = initbuf;
- const uint8_t *param_start;
-
- struct output_data output_data =
- {
- .prefixes = &prefixes,
- .bufp = buf,
- .bufsize = bufsize,
- .bufcntp = &bufcnt,
- .param_start = ¶m_start,
- .end = end
- };
-
- int retval = 0;
- while (1)
- {
- prefixes = 0;
-
- const uint8_t *data = *startp;
- const uint8_t *begin = data;
-
- /* Recognize all prefixes. */
- int last_prefix_bit = 0;
- while (data < end)
- {
- unsigned int i;
- for (i = idx_cs; i < nknown_prefixes; ++i)
- if (known_prefixes[i] == *data)
- break;
- if (i == nknown_prefixes)
- break;
-
- prefixes |= last_prefix_bit = 1 << i;
-
- ++data;
- }
-
-#ifdef X86_64
- if (data < end && (*data & 0xf0) == 0x40)
- prefixes |= ((*data++) & 0xf) | has_rex;
-#endif
-
- bufcnt = 0;
- size_t cnt = 0;
-
- const uint8_t *curr = match_data;
- const uint8_t *const match_end = match_data + sizeof (match_data);
-
- assert (data <= end);
- if (data == end)
- {
- if (prefixes != 0)
- goto print_prefix;
-
- retval = -1;
- goto do_ret;
- }
-
- next_match:
- while (curr < match_end)
- {
- uint_fast8_t len = *curr++;
- const uint8_t *start = curr;
-
- assert (len > 0);
- assert (curr + 2 * len <= match_end);
-
- const uint8_t *codep = data;
- int correct_prefix = 0;
- int opoff = 0;
-
- if (data > begin && codep[-1] == curr[1] && curr[0] == 0xff)
- {
- /* We match a prefix byte. This is exactly one byte and
- is matched exactly, without a mask. */
- --len;
- start += 2;
- opoff = 8;
-
- curr += 2;
-
- assert (last_prefix_bit != 0);
- correct_prefix = last_prefix_bit;
- }
-
- size_t avail = len;
- while (avail > 0)
- {
- uint_fast8_t masked = *codep++ & *curr++;
- if (masked != *curr++)
- {
- not:
- curr = start + 2 * len;
- ++cnt;
- goto next_match;
- }
-
- --avail;
- if (codep == end && avail > 0)
- goto do_ret;
- }
-
- if (len > end - data)
- /* There is not enough data for the entire instruction. The
- caller can figure this out by looking at the pointer into
- the input data. */
- goto do_ret;
-
- assert (correct_prefix == 0
- || (prefixes & correct_prefix) != 0);
- prefixes ^= correct_prefix;
-
- if (0)
- {
- /* Resize the buffer. */
- char *oldbuf;
- enomem:
- oldbuf = buf;
- if (buf == initbuf)
- buf = malloc (2 * bufsize);
- else
- buf = realloc (buf, 2 * bufsize);
- if (buf == NULL)
- {
- buf = oldbuf;
- retval = ENOMEM;
- goto do_ret;
- }
- bufsize *= 2;
-
- output_data.bufp = buf;
- output_data.bufsize = bufsize;
- bufcnt = 0;
-
- if (data == end)
- {
- assert (prefixes != 0);
- goto print_prefix;
- }
-
- /* gcc is not clever enough to see the following variables
- are not used uninitialized. */
- asm (""
- : "=mr" (opoff), "=mr" (correct_prefix), "=mr" (codep),
- "=mr" (start), "=mr" (len));
- }
-
- size_t prefix_size = 0;
-
- // XXXonly print as prefix if valid?
- if ((prefixes & has_lock) != 0)
- {
- ADD_STRING ("lock ");
- prefix_size += 5;
- }
-
- if (instrtab[cnt].rep)
- {
- if ((prefixes & has_rep) != 0)
- {
- ADD_STRING ("rep ");
- prefix_size += 4;
- }
- }
- else if (instrtab[cnt].repe
- && (prefixes & (has_rep | has_repne)) != 0)
- {
- if ((prefixes & has_repne) != 0)
- {
- ADD_STRING ("repne ");
- prefix_size += 6;
- }
- else if ((prefixes & has_rep) != 0)
- {
- ADD_STRING ("repe ");
- prefix_size += 5;
- }
- }
- else if ((prefixes & (has_rep | has_repne)) != 0)
- {
- uint_fast8_t byte;
- print_prefix:
- bufcnt = 0;
- byte = *begin;
- /* This is a prefix byte. Print it. */
- switch (byte)
- {
- case prefix_rep:
- ADD_STRING ("rep");
- break;
- case prefix_repne:
- ADD_STRING ("repne");
- break;
- case prefix_cs:
- ADD_STRING ("cs");
- break;
- case prefix_ds:
- ADD_STRING ("ds");
- break;
- case prefix_es:
- ADD_STRING ("es");
- break;
- case prefix_fs:
- ADD_STRING ("fs");
- break;
- case prefix_gs:
- ADD_STRING ("gs");
- break;
- case prefix_ss:
- ADD_STRING ("ss");
- break;
- case prefix_data16:
- ADD_STRING ("data16");
- break;
- case prefix_addr16:
- ADD_STRING ("addr16");
- break;
- case prefix_lock:
- ADD_STRING ("lock");
- break;
-#ifdef X86_64
- case 0x40 ... 0x4f:
- ADD_STRING ("rex");
- if (byte != 0x40)
- {
- ADD_CHAR ('.');
- if (byte & 0x8)
- ADD_CHAR ('w');
- if (byte & 0x4)
- ADD_CHAR ('r');
- if (byte & 0x3)
- ADD_CHAR ('x');
- if (byte & 0x1)
- ADD_CHAR ('b');
- }
- break;
-#endif
- default:
- /* Cannot happen. */
- puts ("unknown prefix");
- abort ();
- }
- data = begin + 1;
- ++addr;
-
- goto out;
- }
-
- /* We have a match. First determine how many bytes are
- needed for the adressing mode. */
- param_start = codep;
- if (instrtab[cnt].modrm)
- {
- uint_fast8_t modrm = codep[-1];
-
-#ifndef X86_64
- if (likely ((prefixes & has_addr16) != 0))
- {
- /* Account for displacement. */
- if ((modrm & 0xc7) == 6 || (modrm & 0xc0) == 0x80)
- param_start += 2;
- else if ((modrm & 0xc0) == 0x40)
- param_start += 1;
- }
- else
-#endif
- {
- /* Account for SIB. */
- if ((modrm & 0xc0) != 0xc0 && (modrm & 0x7) == 0x4)
- param_start += 1;
-
- /* Account for displacement. */
- if ((modrm & 0xc7) == 5 || (modrm & 0xc0) == 0x80
- || ((modrm & 0xc7) == 0x4 && (codep[0] & 0x7) == 0x5))
- param_start += 4;
- else if ((modrm & 0xc0) == 0x40)
- param_start += 1;
- }
-
- if (unlikely (param_start > end))
- goto not;
- }
-
- output_data.addr = addr + (data - begin);
- output_data.data = data;
-
- unsigned long string_end_idx = 0;
- fmt = save_fmt;
- while (*fmt != '\0')
- {
- if (*fmt != '%')
- {
- char ch = *fmt++;
- if (ch == '\\')
- {
- switch ((ch = *fmt++))
- {
- case '0' ... '7':
- {
- int val = ch - '0';
- ch = *fmt;
- if (ch >= '0' && ch <= '7')
- {
- val *= 8;
- val += ch - '0';
- ch = *++fmt;
- if (ch >= '0' && ch <= '7' && val < 32)
- {
- val *= 8;
- val += ch - '0';
- ++fmt;
- }
- }
- ch = val;
- }
- break;
-
- case 'n':
- ch = '\n';
- break;
-
- case 't':
- ch = '\t';
- break;
-
- default:
- retval = EINVAL;
- goto do_ret;
- }
- }
- ADD_CHAR (ch);
- continue;
- }
- ++fmt;
-
- int width = 0;
- while (isdigit (*fmt))
- width = width * 10 + (*fmt++ - '0');
-
- int prec = 0;
- if (*fmt == '.')
- while (isdigit (*++fmt))
- prec = prec * 10 + (*fmt - '0');
-
- size_t start_idx = bufcnt;
- switch (*fmt++)
- {
- char mnebuf[16];
- const char *str;
-
- case 'm':
- /* Mnemonic. */
-
- if (unlikely (instrtab[cnt].mnemonic == MNE_INVALID))
- {
- switch (*data)
- {
-#ifdef X86_64
- case 0x90:
- if (prefixes & has_rex_b)
- goto not;
- str = "nop";
- break;
-#endif
-
- case 0x98:
-#ifdef X86_64
- if (prefixes == (has_rex_w | has_rex))
- {
- str = "cltq";
- break;
- }
-#endif
- if (prefixes & ~has_data16)
- goto print_prefix;
- str = prefixes & has_data16 ? "cbtw" : "cwtl";
- break;
-
- case 0x99:
-#ifdef X86_64
- if (prefixes == (has_rex_w | has_rex))
- {
- str = "cqto";
- break;
- }
-#endif
- if (prefixes & ~has_data16)
- goto print_prefix;
- str = prefixes & has_data16 ? "cwtd" : "cltd";
- break;
-
- case 0xe3:
- if (prefixes & ~has_addr16)
- goto print_prefix;
-#ifdef X86_64
- str = prefixes & has_addr16 ? "jecxz" : "jrcxz";
-#else
- str = prefixes & has_addr16 ? "jcxz" : "jecxz";
-#endif
- break;
-
- case 0x0f:
- if (data[1] == 0x0f)
- {
- /* AMD 3DNOW. We need one more byte. */
- if (param_start >= end)
- goto not;
- if (*param_start < AMD3DNOW_LOW_IDX
- || *param_start > AMD3DNOW_HIGH_IDX)
- goto not;
- unsigned int idx
- = amd3dnow[AMD3DNOW_IDX (*param_start)];
- if (idx == 0)
- goto not;
- str = amd3dnowstr + idx - 1;
- /* Eat the immediate byte indicating the
- operation. */
- ++param_start;
- break;
- }
-#ifdef X86_64
- if (data[1] == 0xc7)
- {
- str = ((prefixes & has_rex_w)
- ? "cmpxchg16b" : "cmpxchg8b");
- break;
- }
-#endif
- if (data[1] == 0xc2)
- {
- if (param_start >= end)
- goto not;
- if (*param_start > 7)
- goto not;
- static const char cmpops[][9] =
- {
- [0] = "cmpeq",
- [1] = "cmplt",
- [2] = "cmple",
- [3] = "cmpunord",
- [4] = "cmpneq",
- [5] = "cmpnlt",
- [6] = "cmpnle",
- [7] = "cmpord"
- };
- char *cp = stpcpy (mnebuf, cmpops[*param_start]);
- if (correct_prefix & (has_rep | has_repne))
- *cp++ = 's';
- else
- *cp++ = 'p';
- if (correct_prefix & (has_data16 | has_repne))
- *cp++ = 'd';
- else
- *cp++ = 's';
- *cp = '\0';
- str = mnebuf;
- /* Eat the immediate byte indicating the
- operation. */
- ++param_start;
- break;
- }
-
- default:
- assert (! "INVALID not handled");
- }
- }
- else
- str = mnestr.str + mneidx[instrtab[cnt].mnemonic];
-
- ADD_STRING (str);
-
- switch (instrtab[cnt].suffix)
- {
- case suffix_none:
- break;
-
- case suffix_w:
- if ((codep[-1] & 0xc0) != 0xc0)
- {
- char ch;
-
- if (data[0] & 1)
- {
- if (prefixes & has_data16)
- ch = 'w';
-#ifdef X86_64
- else if (prefixes & has_rex_w)
- ch = 'q';
-#endif
- else
- ch = 'l';
- }
- else
- ch = 'b';
-
- ADD_CHAR (ch);
- }
- break;
-
- case suffix_w0:
- if ((codep[-1] & 0xc0) != 0xc0)
- ADD_CHAR ('l');
- break;
-
- case suffix_w1:
- if ((data[0] & 0x4) == 0)
- ADD_CHAR ('l');
- break;
-
- case suffix_W:
- if (prefixes & has_data16)
- {
- ADD_CHAR ('w');
- prefixes &= ~has_data16;
- }
-#ifdef X86_64
- else
- ADD_CHAR ('q');
-#endif
- break;
-
- case suffix_W1:
- if (prefixes & has_data16)
- {
- ADD_CHAR ('w');
- prefixes &= ~has_data16;
- }
-#ifdef X86_64
- else if (prefixes & has_rex_w)
- ADD_CHAR ('q');
-#endif
- break;
-
- case suffix_tttn:;
- static const char tttn[16][3] =
- {
- "o", "no", "b", "ae", "e", "ne", "be", "a",
- "s", "ns", "p", "np", "l", "ge", "le", "g"
- };
- ADD_STRING (tttn[codep[-1 - instrtab[cnt].modrm] & 0x0f]);
- break;
-
- case suffix_D:
- if ((codep[-1] & 0xc0) != 0xc0)
- ADD_CHAR ((data[0] & 0x04) == 0 ? 's' : 'l');
- break;
-
- default:
- printf("unknown suffix %d\n", instrtab[cnt].suffix);
- abort ();
- }
-
- string_end_idx = bufcnt;
- break;
-
- case 'o':
- if (prec == 1 && instrtab[cnt].fct1 != 0)
- {
- /* First parameter. */
- if (instrtab[cnt].str1 != 0)
- ADD_STRING (op1_str
- + op1_str_idx[instrtab[cnt].str1 - 1]);
-
- output_data.opoff1 = (instrtab[cnt].off1_1
- + OFF1_1_BIAS - opoff);
- output_data.opoff2 = (instrtab[cnt].off1_2
- + OFF1_2_BIAS - opoff);
- output_data.opoff3 = (instrtab[cnt].off1_3
- + OFF1_3_BIAS - opoff);
- int r = op1_fct[instrtab[cnt].fct1] (&output_data);
- if (r < 0)
- goto not;
- if (r > 0)
- goto enomem;
-
- string_end_idx = bufcnt;
- }
- else if (prec == 2 && instrtab[cnt].fct2 != 0)
- {
- /* Second parameter. */
- if (instrtab[cnt].str2 != 0)
- ADD_STRING (op2_str
- + op2_str_idx[instrtab[cnt].str2 - 1]);
-
- output_data.opoff1 = (instrtab[cnt].off2_1
- + OFF2_1_BIAS - opoff);
- output_data.opoff2 = (instrtab[cnt].off2_2
- + OFF2_2_BIAS - opoff);
- output_data.opoff3 = (instrtab[cnt].off2_3
- + OFF2_3_BIAS - opoff);
- int r = op2_fct[instrtab[cnt].fct2] (&output_data);
- if (r < 0)
- goto not;
- if (r > 0)
- goto enomem;
-
- string_end_idx = bufcnt;
- }
- else if (prec == 3 && instrtab[cnt].fct3 != 0)
- {
- /* Third parameter. */
- if (instrtab[cnt].str3 != 0)
- ADD_STRING (op3_str
- + op3_str_idx[instrtab[cnt].str3 - 1]);
-
- output_data.opoff1 = (instrtab[cnt].off3_1
- + OFF3_1_BIAS - opoff);
- output_data.opoff2 = (instrtab[cnt].off3_2
- + OFF3_2_BIAS - opoff);
-#ifdef OFF3_3_BITS
- output_data.opoff3 = (instrtab[cnt].off3_3
- + OFF3_3_BIAS - opoff);
-#else
- output_data.opoff3 = 0;
-#endif
- int r = op3_fct[instrtab[cnt].fct3] (&output_data);
- if (r < 0)
- goto not;
- if (r > 0)
- goto enomem;
-
- string_end_idx = bufcnt;
- }
- else
- bufcnt = string_end_idx;
- break;
-
- case 'e':
- string_end_idx = bufcnt;
- break;
-
- case 'a':
- /* Pad to requested column. */
- while (bufcnt < (size_t) width)
- ADD_CHAR (' ');
- width = 0;
- break;
-
- case 'l':
- if (output_data.labelbuf != NULL
- && output_data.labelbuf[0] != '\0')
- {
- ADD_STRING (output_data.labelbuf);
- output_data.labelbuf[0] = '\0';
- string_end_idx = bufcnt;
- }
- else if (output_data.symaddr_use != addr_none)
- {
- GElf_Addr symaddr = output_data.symaddr;
- if (output_data.symaddr_use >= addr_rel_symbolic)
- symaddr += addr + param_start - begin;
-
- // XXX Lookup symbol based on symaddr
- const char *symstr = NULL;
- if (symcb != NULL
- && symcb (0 /* XXX */, 0 /* XXX */, symaddr,
- &output_data.labelbuf,
- &output_data.labelbufsize, symcbarg) == 0)
- symstr = output_data.labelbuf;
-
- size_t bufavail = bufsize - bufcnt;
- int r = 0;
- if (symstr != NULL)
- r = snprintf (&buf[bufcnt], bufavail, "# <%s>",
- symstr);
- else if (output_data.symaddr_use == addr_abs_always
- || output_data.symaddr_use == addr_rel_always)
- r = snprintf (&buf[bufcnt], bufavail, "# %#" PRIx64,
- (uint64_t) symaddr);
-
- if (r < 0)
- goto not;
- if ((size_t) r >= bufavail)
- goto enomem;
- bufcnt += r;
- string_end_idx = bufcnt;
-
- output_data.symaddr_use = addr_none;
- }
- break;
- }
-
- /* Pad according to the specified width. */
- while (bufcnt + prefix_size < start_idx + width)
- ADD_CHAR (' ');
- prefix_size = 0;
- }
-
- if ((prefixes & SEGMENT_PREFIXES) != 0)
- goto print_prefix;
-
- assert (string_end_idx != ~0ul);
- bufcnt = string_end_idx;
-
- addr += param_start - begin;
- data = param_start;
-
- goto out;
- }
-
- /* Invalid (or at least unhandled) opcode. */
- if (prefixes != 0)
- goto print_prefix;
- assert (*startp == data);
- ++data;
- ADD_STRING ("(bad)");
- addr += data - begin;
-
- out:
- if (bufcnt == bufsize)
- goto enomem;
- buf[bufcnt] = '\0';
-
- *startp = data;
- retval = outcb (buf, bufcnt, outcbarg);
- if (retval != 0)
- goto do_ret;
- }
-
- do_ret:
- free (output_data.labelbuf);
- if (buf != initbuf)
- free (buf);
-
- return retval;
-}
diff --git a/libcpu/i386_gendis.c b/libcpu/i386_gendis.c
deleted file mode 100644
index a8570f1..0000000
--- a/libcpu/i386_gendis.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Generate tables for x86 disassembler.
- Copyright (C) 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2007.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <error.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-
-extern int i386_parse (void);
-
-
-extern FILE *i386_in;
-extern int i386_debug;
-char *infname;
-
-FILE *outfile;
-
-int
-main (int argc, char *argv[argc])
-{
- outfile = stdout;
-
- if (argc == 1)
- error (EXIT_FAILURE, 0, "usage: %s <MNEDEFFILE>", argv[0]);
-
- //i386_debug = 1;
- infname = argv[1];
- if (strcmp (infname, "-") == 0)
- i386_in = stdin;
- else
- {
- i386_in = fopen (infname, "r");
- if (i386_in == NULL)
- error (EXIT_FAILURE, errno, "cannot open %s", argv[1]);
- }
-
- i386_parse ();
-
- return error_message_count != 0;
-}
diff --git a/libcpu/i386_lex.c b/libcpu/i386_lex.c
deleted file mode 100644
index 6bd4a0d..0000000
--- a/libcpu/i386_lex.c
+++ /dev/null
@@ -1,2011 +0,0 @@
-
-#line 3 "i386_lex.c"
-
-#define YY_INT_ALIGNED short int
-
-/* A lexical scanner generated by flex */
-
-#define yy_create_buffer i386__create_buffer
-#define yy_delete_buffer i386__delete_buffer
-#define yy_flex_debug i386__flex_debug
-#define yy_init_buffer i386__init_buffer
-#define yy_flush_buffer i386__flush_buffer
-#define yy_load_buffer_state i386__load_buffer_state
-#define yy_switch_to_buffer i386__switch_to_buffer
-#define yyin i386_in
-#define yyleng i386_leng
-#define yylex i386_lex
-#define yylineno i386_lineno
-#define yyout i386_out
-#define yyrestart i386_restart
-#define yytext i386_text
-#define yywrap i386_wrap
-#define yyalloc i386_alloc
-#define yyrealloc i386_realloc
-#define yyfree i386_free
-
-#define FLEX_SCANNER
-#define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 35
-#if YY_FLEX_SUBMINOR_VERSION > 0
-#define FLEX_BETA
-#endif
-
-/* First, we deal with platform-specific or compiler-specific issues. */
-
-/* begin standard C headers. */
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <stdlib.h>
-
-/* end standard C headers. */
-
-/* flex integer type definitions */
-
-#ifndef FLEXINT_H
-#define FLEXINT_H
-
-/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
-
-#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-
-/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
- * if you want the limit (max/min) macros for int types.
- */
-#ifndef __STDC_LIMIT_MACROS
-#define __STDC_LIMIT_MACROS 1
-#endif
-
-#include <inttypes.h>
-typedef int8_t flex_int8_t;
-typedef uint8_t flex_uint8_t;
-typedef int16_t flex_int16_t;
-typedef uint16_t flex_uint16_t;
-typedef int32_t flex_int32_t;
-typedef uint32_t flex_uint32_t;
-#else
-typedef signed char flex_int8_t;
-typedef short int flex_int16_t;
-typedef int flex_int32_t;
-typedef unsigned char flex_uint8_t;
-typedef unsigned short int flex_uint16_t;
-typedef unsigned int flex_uint32_t;
-#endif /* ! C99 */
-
-/* Limits of integral types. */
-#ifndef INT8_MIN
-#define INT8_MIN (-128)
-#endif
-#ifndef INT16_MIN
-#define INT16_MIN (-32767-1)
-#endif
-#ifndef INT32_MIN
-#define INT32_MIN (-2147483647-1)
-#endif
-#ifndef INT8_MAX
-#define INT8_MAX (127)
-#endif
-#ifndef INT16_MAX
-#define INT16_MAX (32767)
-#endif
-#ifndef INT32_MAX
-#define INT32_MAX (2147483647)
-#endif
-#ifndef UINT8_MAX
-#define UINT8_MAX (255U)
-#endif
-#ifndef UINT16_MAX
-#define UINT16_MAX (65535U)
-#endif
-#ifndef UINT32_MAX
-#define UINT32_MAX (4294967295U)
-#endif
-
-#endif /* ! FLEXINT_H */
-
-#ifdef __cplusplus
-
-/* The "const" storage-class-modifier is valid. */
-#define YY_USE_CONST
-
-#else /* ! __cplusplus */
-
-/* C99 requires __STDC__ to be defined as 1. */
-#if defined (__STDC__)
-
-#define YY_USE_CONST
-
-#endif /* defined (__STDC__) */
-#endif /* ! __cplusplus */
-
-#ifdef YY_USE_CONST
-#define yyconst const
-#else
-#define yyconst
-#endif
-
-/* Returned upon end-of-file. */
-#define YY_NULL 0
-
-/* Promotes a possibly negative, possibly signed char to an unsigned
- * integer for use as an array index. If the signed char is negative,
- * we want to instead treat it as an 8-bit unsigned char, hence the
- * double cast.
- */
-#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
-
-/* Enter a start condition. This macro really ought to take a parameter,
- * but we do it the disgusting crufty way forced on us by the ()-less
- * definition of BEGIN.
- */
-#define BEGIN (yy_start) = 1 + 2 *
-
-/* Translate the current start state into a value that can be later handed
- * to BEGIN to return to the state. The YYSTATE alias is for lex
- * compatibility.
- */
-#define YY_START (((yy_start) - 1) / 2)
-#define YYSTATE YY_START
-
-/* Action number for EOF rule of a given start state. */
-#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
-
-/* Special action meaning "start processing a new file". */
-#define YY_NEW_FILE i386_restart(i386_in )
-
-#define YY_END_OF_BUFFER_CHAR 0
-
-/* Size of default input buffer. */
-#ifndef YY_BUF_SIZE
-#define YY_BUF_SIZE 16384
-#endif
-
-/* The state buf must be large enough to hold one state per character in the main buffer.
- */
-#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
-
-#ifndef YY_TYPEDEF_YY_BUFFER_STATE
-#define YY_TYPEDEF_YY_BUFFER_STATE
-typedef struct yy_buffer_state *YY_BUFFER_STATE;
-#endif
-
-extern int i386_leng;
-
-extern FILE *i386_in, *i386_out;
-
-#define EOB_ACT_CONTINUE_SCAN 0
-#define EOB_ACT_END_OF_FILE 1
-#define EOB_ACT_LAST_MATCH 2
-
- /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
- * access to the local variable yy_act. Since yyless() is a macro, it would break
- * existing scanners that call yyless() from OUTSIDE i386_lex.
- * One obvious solution it to make yy_act a global. I tried that, and saw
- * a 5% performance hit in a non-i386_lineno scanner, because yy_act is
- * normally declared as a register variable-- so it is not worth it.
- */
- #define YY_LESS_LINENO(n) \
- do { \
- int yyl;\
- for ( yyl = n; yyl < i386_leng; ++yyl )\
- if ( i386_text[yyl] == '\n' )\
- --i386_lineno;\
- }while(0)
-
-/* Return all but the first "n" matched characters back to the input stream. */
-#define yyless(n) \
- do \
- { \
- /* Undo effects of setting up i386_text. */ \
- int yyless_macro_arg = (n); \
- YY_LESS_LINENO(yyless_macro_arg);\
- *yy_cp = (yy_hold_char); \
- YY_RESTORE_YY_MORE_OFFSET \
- (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
- YY_DO_BEFORE_ACTION; /* set up i386_text again */ \
- } \
- while ( 0 )
-
-#define unput(c) yyunput( c, (yytext_ptr) )
-
-#ifndef YY_TYPEDEF_YY_SIZE_T
-#define YY_TYPEDEF_YY_SIZE_T
-typedef size_t yy_size_t;
-#endif
-
-#ifndef YY_STRUCT_YY_BUFFER_STATE
-#define YY_STRUCT_YY_BUFFER_STATE
-struct yy_buffer_state
- {
- FILE *yy_input_file;
-
- char *yy_ch_buf; /* input buffer */
- char *yy_buf_pos; /* current position in input buffer */
-
- /* Size of input buffer in bytes, not including room for EOB
- * characters.
- */
- yy_size_t yy_buf_size;
-
- /* Number of characters read into yy_ch_buf, not including EOB
- * characters.
- */
- int yy_n_chars;
-
- /* Whether we "own" the buffer - i.e., we know we created it,
- * and can realloc() it to grow it, and should free() it to
- * delete it.
- */
- int yy_is_our_buffer;
-
- /* Whether this is an "interactive" input source; if so, and
- * if we're using stdio for input, then we want to use getc()
- * instead of fread(), to make sure we stop fetching input after
- * each newline.
- */
- int yy_is_interactive;
-
- /* Whether we're considered to be at the beginning of a line.
- * If so, '^' rules will be active on the next match, otherwise
- * not.
- */
- int yy_at_bol;
-
- int yy_bs_lineno; /**< The line count. */
- int yy_bs_column; /**< The column count. */
-
- /* Whether to try to fill the input buffer when we reach the
- * end of it.
- */
- int yy_fill_buffer;
-
- int yy_buffer_status;
-
-#define YY_BUFFER_NEW 0
-#define YY_BUFFER_NORMAL 1
- /* When an EOF's been seen but there's still some text to process
- * then we mark the buffer as YY_EOF_PENDING, to indicate that we
- * shouldn't try reading from the input source any more. We might
- * still have a bunch of tokens to match, though, because of
- * possible backing-up.
- *
- * When we actually see the EOF, we change the status to "new"
- * (via i386_restart()), so that the user can continue scanning by
- * just pointing i386_in at a new input file.
- */
-#define YY_BUFFER_EOF_PENDING 2
-
- };
-#endif /* !YY_STRUCT_YY_BUFFER_STATE */
-
-/* Stack of input buffers. */
-static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
-static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
-static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
-
-/* We provide macros for accessing buffer states in case in the
- * future we want to put the buffer states in a more general
- * "scanner state".
- *
- * Returns the top of the stack, or NULL.
- */
-#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
- ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
- : NULL)
-
-/* Same as previous macro, but useful when we know that the buffer stack is not
- * NULL or when we need an lvalue. For internal use only.
- */
-#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
-
-/* yy_hold_char holds the character lost when i386_text is formed. */
-static char yy_hold_char;
-static int yy_n_chars; /* number of characters read into yy_ch_buf */
-int i386_leng;
-
-/* Points to current character in buffer. */
-static char *yy_c_buf_p = (char *) 0;
-static int yy_init = 0; /* whether we need to initialize */
-static int yy_start = 0; /* start state number */
-
-/* Flag which is used to allow i386_wrap()'s to do buffer switches
- * instead of setting up a fresh i386_in. A bit of a hack ...
- */
-static int yy_did_buffer_switch_on_eof;
-
-void i386_restart (FILE *input_file );
-void i386__switch_to_buffer (YY_BUFFER_STATE new_buffer );
-YY_BUFFER_STATE i386__create_buffer (FILE *file,int size );
-void i386__delete_buffer (YY_BUFFER_STATE b );
-void i386__flush_buffer (YY_BUFFER_STATE b );
-void i386_push_buffer_state (YY_BUFFER_STATE new_buffer );
-void i386_pop_buffer_state (void );
-
-static void i386_ensure_buffer_stack (void );
-static void i386__load_buffer_state (void );
-static void i386__init_buffer (YY_BUFFER_STATE b,FILE *file );
-
-#define YY_FLUSH_BUFFER i386__flush_buffer(YY_CURRENT_BUFFER )
-
-YY_BUFFER_STATE i386__scan_buffer (char *base,yy_size_t size );
-YY_BUFFER_STATE i386__scan_string (yyconst char *yy_str );
-YY_BUFFER_STATE i386__scan_bytes (yyconst char *bytes,int len );
-
-void *i386_alloc (yy_size_t );
-void *i386_realloc (void *,yy_size_t );
-void i386_free (void * );
-
-#define yy_new_buffer i386__create_buffer
-
-#define yy_set_interactive(is_interactive) \
- { \
- if ( ! YY_CURRENT_BUFFER ){ \
- i386_ensure_buffer_stack (); \
- YY_CURRENT_BUFFER_LVALUE = \
- i386__create_buffer(i386_in,YY_BUF_SIZE ); \
- } \
- YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
- }
-
-#define yy_set_bol(at_bol) \
- { \
- if ( ! YY_CURRENT_BUFFER ){\
- i386_ensure_buffer_stack (); \
- YY_CURRENT_BUFFER_LVALUE = \
- i386__create_buffer(i386_in,YY_BUF_SIZE ); \
- } \
- YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
- }
-
-#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
-
-/* Begin user sect3 */
-
-#define i386_wrap(n) 1
-#define YY_SKIP_YYWRAP
-
-typedef unsigned char YY_CHAR;
-
-FILE *i386_in = (FILE *) 0, *i386_out = (FILE *) 0;
-
-typedef int yy_state_type;
-
-extern int i386_lineno;
-
-int i386_lineno = 1;
-
-extern char *i386_text;
-#define yytext_ptr i386_text
-
-static yy_state_type yy_get_previous_state (void );
-static yy_state_type yy_try_NUL_trans (yy_state_type current_state );
-static int yy_get_next_buffer (void );
-static void yy_fatal_error (yyconst char msg[] );
-
-/* Done after the current pattern has been matched and before the
- * corresponding action - sets up i386_text.
- */
-#define YY_DO_BEFORE_ACTION \
- (yytext_ptr) = yy_bp; \
- i386_leng = (size_t) (yy_cp - yy_bp); \
- (yy_hold_char) = *yy_cp; \
- *yy_cp = '\0'; \
- (yy_c_buf_p) = yy_cp;
-
-#define YY_NUM_RULES 21
-#define YY_END_OF_BUFFER 22
-/* This struct is not used in this scanner,
- but its presence is necessary. */
-struct yy_trans_info
- {
- flex_int32_t yy_verify;
- flex_int32_t yy_nxt;
- };
-static yyconst flex_int16_t yy_accept[62] =
- { 0,
- 0, 0, 0, 0, 22, 20, 17, 15, 20, 5,
- 20, 14, 16, 19, 18, 15, 12, 7, 8, 13,
- 11, 11, 19, 14, 16, 17, 6, 0, 0, 0,
- 5, 0, 9, 18, 11, 11, 0, 0, 0, 0,
- 11, 0, 0, 0, 0, 11, 1, 0, 0, 0,
- 11, 0, 0, 0, 11, 2, 3, 0, 10, 4,
- 0
- } ;
-
-static yyconst flex_int32_t yy_ec[256] =
- { 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
- 2, 2, 2, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 2, 1, 1, 4, 1, 5, 1, 1, 1,
- 1, 1, 1, 6, 1, 1, 7, 8, 9, 10,
- 10, 10, 10, 10, 10, 10, 10, 11, 1, 1,
- 1, 1, 1, 1, 12, 13, 13, 14, 13, 13,
- 13, 13, 15, 13, 13, 16, 13, 17, 13, 13,
- 13, 13, 13, 13, 13, 18, 13, 13, 13, 13,
- 1, 1, 1, 1, 13, 1, 19, 13, 13, 13,
-
- 20, 21, 13, 13, 22, 13, 23, 13, 24, 25,
- 26, 27, 13, 28, 29, 13, 30, 13, 13, 31,
- 32, 13, 33, 1, 34, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1
- } ;
-
-static yyconst flex_int32_t yy_meta[35] =
- { 0,
- 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,
- 3, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 1, 3
- } ;
-
-static yyconst flex_int16_t yy_base[65] =
- { 0,
- 0, 32, 65, 3, 113, 114, 9, 11, 19, 7,
- 78, 16, 114, 114, 18, 20, 114, 114, 114, 114,
- 0, 94, 76, 23, 114, 25, 114, 90, 80, 0,
- 41, 73, 114, 36, 0, 88, 76, 44, 42, 37,
- 49, 37, 38, 37, 31, 40, 114, 33, 32, 28,
- 37, 16, 14, 12, 17, 114, 114, 5, 0, 114,
- 114, 99, 101, 2
- } ;
-
-static yyconst flex_int16_t yy_def[65] =
- { 0,
- 62, 62, 61, 3, 61, 61, 61, 61, 61, 61,
- 63, 61, 61, 61, 61, 61, 61, 61, 61, 61,
- 64, 64, 63, 61, 61, 61, 61, 61, 61, 61,
- 61, 63, 61, 61, 64, 64, 61, 61, 61, 61,
- 64, 61, 61, 61, 61, 64, 61, 61, 61, 61,
- 64, 61, 61, 61, 64, 61, 61, 61, 64, 61,
- 0, 61, 61, 61
- } ;
-
-static yyconst flex_int16_t yy_nxt[149] =
- { 0,
- 61, 7, 8, 35, 9, 24, 25, 10, 10, 10,
- 26, 26, 26, 26, 31, 31, 31, 26, 26, 34,
- 34, 34, 34, 27, 34, 34, 26, 26, 60, 39,
- 59, 40, 11, 7, 12, 13, 9, 34, 34, 10,
- 10, 10, 28, 58, 57, 29, 56, 30, 31, 31,
- 31, 55, 54, 53, 52, 51, 50, 49, 48, 47,
- 46, 45, 44, 43, 11, 14, 15, 16, 14, 14,
- 17, 14, 18, 19, 14, 20, 21, 21, 21, 22,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 23, 14, 6,
-
- 6, 6, 32, 32, 42, 41, 33, 38, 37, 33,
- 36, 33, 61, 5, 61, 61, 61, 61, 61, 61,
- 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
- 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
- 61, 61, 61, 61, 61, 61, 61, 61
- } ;
-
-static yyconst flex_int16_t yy_chk[149] =
- { 0,
- 0, 1, 1, 64, 1, 4, 4, 1, 1, 1,
- 7, 7, 8, 8, 10, 10, 10, 12, 12, 15,
- 15, 16, 16, 9, 24, 24, 26, 26, 58, 30,
- 55, 30, 1, 2, 2, 2, 2, 34, 34, 2,
- 2, 2, 9, 54, 53, 9, 52, 9, 31, 31,
- 31, 51, 50, 49, 48, 46, 45, 44, 43, 42,
- 41, 40, 39, 38, 2, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 62,
-
- 62, 62, 63, 63, 37, 36, 32, 29, 28, 23,
- 22, 11, 5, 61, 61, 61, 61, 61, 61, 61,
- 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
- 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
- 61, 61, 61, 61, 61, 61, 61, 61
- } ;
-
-/* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[22] =
- { 0,
-0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0,
- 0, 0, };
-
-static yy_state_type yy_last_accepting_state;
-static char *yy_last_accepting_cpos;
-
-extern int i386__flex_debug;
-int i386__flex_debug = 0;
-
-/* The intent behind this definition is that it'll catch
- * any uses of REJECT which flex missed.
- */
-#define REJECT reject_used_but_not_detected
-#define yymore() yymore_used_but_not_detected
-#define YY_MORE_ADJ 0
-#define YY_RESTORE_YY_MORE_OFFSET
-char *i386_text;
-#line 1 "i386_lex.l"
-#line 2 "i386_lex.l"
-/* Copyright (C) 2004, 2005, 2007, 2008 Red Hat, Inc.
- Written by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <ctype.h>
-#include <error.h>
-#include <libintl.h>
-
-#include <system.h>
-#include "i386_parse.h"
-
-
-static void eat_to_eol (void);
-static void invalid_char (int ch);
-
-#line 581 "i386_lex.c"
-
-#define INITIAL 0
-#define MAIN 1
-
-#ifndef YY_NO_UNISTD_H
-/* Special case for "unistd.h", since it is non-ANSI. We include it way
- * down here because we want the user's section 1 to have been scanned first.
- * The user has a chance to override it with an option.
- */
-#include <unistd.h>
-#endif
-
-#ifndef YY_EXTRA_TYPE
-#define YY_EXTRA_TYPE void *
-#endif
-
-static int yy_init_globals (void );
-
-/* Accessor methods to globals.
- These are made visible to non-reentrant scanners for convenience. */
-
-int i386_lex_destroy (void );
-
-int i386_get_debug (void );
-
-void i386_set_debug (int debug_flag );
-
-YY_EXTRA_TYPE i386_get_extra (void );
-
-void i386_set_extra (YY_EXTRA_TYPE user_defined );
-
-FILE *i386_get_in (void );
-
-void i386_set_in (FILE * in_str );
-
-FILE *i386_get_out (void );
-
-void i386_set_out (FILE * out_str );
-
-int i386_get_leng (void );
-
-char *i386_get_text (void );
-
-int i386_get_lineno (void );
-
-void i386_set_lineno (int line_number );
-
-/* Macros after this point can all be overridden by user definitions in
- * section 1.
- */
-
-#ifndef YY_SKIP_YYWRAP
-#ifdef __cplusplus
-extern "C" int i386_wrap (void );
-#else
-extern int i386_wrap (void );
-#endif
-#endif
-
- static void yyunput (int c,char *buf_ptr );
-
-#ifndef yytext_ptr
-static void yy_flex_strncpy (char *,yyconst char *,int );
-#endif
-
-#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * );
-#endif
-
-#ifndef YY_NO_INPUT
-
-#ifdef __cplusplus
-static int yyinput (void );
-#else
-static int input (void );
-#endif
-
-#endif
-
-/* Amount of stuff to slurp up with each read. */
-#ifndef YY_READ_BUF_SIZE
-#define YY_READ_BUF_SIZE 8192
-#endif
-
-/* Copy whatever the last rule matched to the standard output. */
-#ifndef ECHO
-/* This used to be an fputs(), but since the string might contain NUL's,
- * we now use fwrite().
- */
-#define ECHO fwrite( i386_text, i386_leng, 1, i386_out )
-#endif
-
-/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
- * is returned in "result".
- */
-#ifndef YY_INPUT
-#define YY_INPUT(buf,result,max_size) \
- if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
- { \
- int c = '*'; \
- unsigned n; \
- for ( n = 0; n < max_size && \
- (c = getc( i386_in )) != EOF && c != '\n'; ++n ) \
- buf[n] = (char) c; \
- if ( c == '\n' ) \
- buf[n++] = (char) c; \
- if ( c == EOF && ferror( i386_in ) ) \
- YY_FATAL_ERROR( "input in flex scanner failed" ); \
- result = n; \
- } \
- else \
- { \
- errno=0; \
- while ( (result = fread(buf, 1, max_size, i386_in))==0 && ferror(i386_in)) \
- { \
- if( errno != EINTR) \
- { \
- YY_FATAL_ERROR( "input in flex scanner failed" ); \
- break; \
- } \
- errno=0; \
- clearerr(i386_in); \
- } \
- }\
-\
-
-#endif
-
-/* No semi-colon after return; correct usage is to write "yyterminate();" -
- * we don't want an extra ';' after the "return" because that will cause
- * some compilers to complain about unreachable statements.
- */
-#ifndef yyterminate
-#define yyterminate() return YY_NULL
-#endif
-
-/* Number of entries by which start-condition stack grows. */
-#ifndef YY_START_STACK_INCR
-#define YY_START_STACK_INCR 25
-#endif
-
-/* Report a fatal error. */
-#ifndef YY_FATAL_ERROR
-#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
-#endif
-
-/* end tables serialization structures and prototypes */
-
-/* Default declaration of generated scanner - a define so the user can
- * easily add parameters.
- */
-#ifndef YY_DECL
-#define YY_DECL_IS_OURS 1
-
-extern int i386_lex (void);
-
-#define YY_DECL int i386_lex (void)
-#endif /* !YY_DECL */
-
-/* Code executed at the beginning of each rule, after i386_text and i386_leng
- * have been set up.
- */
-#ifndef YY_USER_ACTION
-#define YY_USER_ACTION
-#endif
-
-/* Code executed at the end of each rule. */
-#ifndef YY_BREAK
-#define YY_BREAK break;
-#endif
-
-#define YY_RULE_SETUP \
- if ( i386_leng > 0 ) \
- YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \
- (i386_text[i386_leng - 1] == '\n'); \
- YY_USER_ACTION
-
-/** The main scanner function which does all the work.
- */
-YY_DECL
-{
- register yy_state_type yy_current_state;
- register char *yy_cp, *yy_bp;
- register int yy_act;
-
-#line 54 "i386_lex.l"
-
-
-#line 770 "i386_lex.c"
-
- if ( !(yy_init) )
- {
- (yy_init) = 1;
-
-#ifdef YY_USER_INIT
- YY_USER_INIT;
-#endif
-
- if ( ! (yy_start) )
- (yy_start) = 1; /* first start state */
-
- if ( ! i386_in )
- i386_in = stdin;
-
- if ( ! i386_out )
- i386_out = stdout;
-
- if ( ! YY_CURRENT_BUFFER ) {
- i386_ensure_buffer_stack ();
- YY_CURRENT_BUFFER_LVALUE =
- i386__create_buffer(i386_in,YY_BUF_SIZE );
- }
-
- i386__load_buffer_state( );
- }
-
- while ( 1 ) /* loops until end-of-file is reached */
- {
- yy_cp = (yy_c_buf_p);
-
- /* Support of i386_text. */
- *yy_cp = (yy_hold_char);
-
- /* yy_bp points to the position in yy_ch_buf of the start of
- * the current run.
- */
- yy_bp = yy_cp;
-
- yy_current_state = (yy_start);
- yy_current_state += YY_AT_BOL();
-yy_match:
- do
- {
- register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
- if ( yy_accept[yy_current_state] )
- {
- (yy_last_accepting_state) = yy_current_state;
- (yy_last_accepting_cpos) = yy_cp;
- }
- while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
- {
- yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 62 )
- yy_c = yy_meta[(unsigned int) yy_c];
- }
- yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
- ++yy_cp;
- }
- while ( yy_current_state != 61 );
- yy_cp = (yy_last_accepting_cpos);
- yy_current_state = (yy_last_accepting_state);
-
-yy_find_action:
- yy_act = yy_accept[yy_current_state];
-
- YY_DO_BEFORE_ACTION;
-
- if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
- {
- int yyl;
- for ( yyl = 0; yyl < i386_leng; ++yyl )
- if ( i386_text[yyl] == '\n' )
-
- i386_lineno++;
-;
- }
-
-do_action: /* This label is used only to access EOF actions. */
-
- switch ( yy_act )
- { /* beginning of action switch */
- case 0: /* must back up */
- /* undo the effects of YY_DO_BEFORE_ACTION */
- *yy_cp = (yy_hold_char);
- yy_cp = (yy_last_accepting_cpos);
- yy_current_state = (yy_last_accepting_state);
- goto yy_find_action;
-
-case 1:
-YY_RULE_SETUP
-#line 56 "i386_lex.l"
-{ return kMASK; }
- YY_BREAK
-case 2:
-YY_RULE_SETUP
-#line 58 "i386_lex.l"
-{ return kPREFIX; }
- YY_BREAK
-case 3:
-YY_RULE_SETUP
-#line 59 "i386_lex.l"
-{ return kSUFFIX; }
- YY_BREAK
-case 4:
-YY_RULE_SETUP
-#line 61 "i386_lex.l"
-{ return kSYNONYM; }
- YY_BREAK
-case 5:
-YY_RULE_SETUP
-#line 63 "i386_lex.l"
-{ i386_lval.num = strtoul (i386_text, NULL, 10);
- return kNUMBER; }
- YY_BREAK
-case 6:
-YY_RULE_SETUP
-#line 66 "i386_lex.l"
-{ BEGIN (MAIN); return kPERCPERC; }
- YY_BREAK
-case 7:
-YY_RULE_SETUP
-#line 69 "i386_lex.l"
-{ return '0'; }
- YY_BREAK
-case 8:
-YY_RULE_SETUP
-#line 70 "i386_lex.l"
-{ return '1'; }
- YY_BREAK
-case 9:
-YY_RULE_SETUP
-#line 72 "i386_lex.l"
-{ i386_lval.str = xstrndup (i386_text + 1,
- i386_leng - 2);
- return kBITFIELD; }
- YY_BREAK
-case 10:
-YY_RULE_SETUP
-#line 76 "i386_lex.l"
-{ i386_lval.str = (void *) -1l;
- return kID; }
- YY_BREAK
-case 11:
-YY_RULE_SETUP
-#line 79 "i386_lex.l"
-{ i386_lval.str = xstrndup (i386_text, i386_leng);
- return kID; }
- YY_BREAK
-case 12:
-YY_RULE_SETUP
-#line 82 "i386_lex.l"
-{ return ','; }
- YY_BREAK
-case 13:
-YY_RULE_SETUP
-#line 84 "i386_lex.l"
-{ return ':'; }
- YY_BREAK
-case 14:
-/* rule 14 can match eol */
-YY_RULE_SETUP
-#line 86 "i386_lex.l"
-{ /* IGNORE */ }
- YY_BREAK
-case 15:
-/* rule 15 can match eol */
-YY_RULE_SETUP
-#line 88 "i386_lex.l"
-{ return '\n'; }
- YY_BREAK
-case 16:
-YY_RULE_SETUP
-#line 90 "i386_lex.l"
-{ eat_to_eol (); }
- YY_BREAK
-case 17:
-/* rule 17 can match eol */
-YY_RULE_SETUP
-#line 92 "i386_lex.l"
-{ /* IGNORE */ }
- YY_BREAK
-case 18:
-/* rule 18 can match eol */
-YY_RULE_SETUP
-#line 94 "i386_lex.l"
-{ return kSPACE; }
- YY_BREAK
-case 19:
-YY_RULE_SETUP
-#line 96 "i386_lex.l"
-{ i386_lval.ch = *i386_text; return kCHAR; }
- YY_BREAK
-case 20:
-YY_RULE_SETUP
-#line 98 "i386_lex.l"
-{ invalid_char (*i386_text); }
- YY_BREAK
-case 21:
-YY_RULE_SETUP
-#line 101 "i386_lex.l"
-ECHO;
- YY_BREAK
-#line 974 "i386_lex.c"
-case YY_STATE_EOF(INITIAL):
-case YY_STATE_EOF(MAIN):
- yyterminate();
-
- case YY_END_OF_BUFFER:
- {
- /* Amount of text matched not including the EOB char. */
- int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
-
- /* Undo the effects of YY_DO_BEFORE_ACTION. */
- *yy_cp = (yy_hold_char);
- YY_RESTORE_YY_MORE_OFFSET
-
- if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
- {
- /* We're scanning a new file or input source. It's
- * possible that this happened because the user
- * just pointed i386_in at a new source and called
- * i386_lex(). If so, then we have to assure
- * consistency between YY_CURRENT_BUFFER and our
- * globals. Here is the right place to do so, because
- * this is the first action (other than possibly a
- * back-up) that will match for the new input source.
- */
- (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
- YY_CURRENT_BUFFER_LVALUE->yy_input_file = i386_in;
- YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
- }
-
- /* Note that here we test for yy_c_buf_p "<=" to the position
- * of the first EOB in the buffer, since yy_c_buf_p will
- * already have been incremented past the NUL character
- * (since all states make transitions on EOB to the
- * end-of-buffer state). Contrast this with the test
- * in input().
- */
- if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
- { /* This was really a NUL. */
- yy_state_type yy_next_state;
-
- (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
-
- yy_current_state = yy_get_previous_state( );
-
- /* Okay, we're now positioned to make the NUL
- * transition. We couldn't have
- * yy_get_previous_state() go ahead and do it
- * for us because it doesn't know how to deal
- * with the possibility of jamming (and we don't
- * want to build jamming into it because then it
- * will run more slowly).
- */
-
- yy_next_state = yy_try_NUL_trans( yy_current_state );
-
- yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-
- if ( yy_next_state )
- {
- /* Consume the NUL. */
- yy_cp = ++(yy_c_buf_p);
- yy_current_state = yy_next_state;
- goto yy_match;
- }
-
- else
- {
- yy_cp = (yy_last_accepting_cpos);
- yy_current_state = (yy_last_accepting_state);
- goto yy_find_action;
- }
- }
-
- else switch ( yy_get_next_buffer( ) )
- {
- case EOB_ACT_END_OF_FILE:
- {
- (yy_did_buffer_switch_on_eof) = 0;
-
- if ( i386_wrap( ) )
- {
- /* Note: because we've taken care in
- * yy_get_next_buffer() to have set up
- * i386_text, we can now set up
- * yy_c_buf_p so that if some total
- * hoser (like flex itself) wants to
- * call the scanner after we return the
- * YY_NULL, it'll still work - another
- * YY_NULL will get returned.
- */
- (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
-
- yy_act = YY_STATE_EOF(YY_START);
- goto do_action;
- }
-
- else
- {
- if ( ! (yy_did_buffer_switch_on_eof) )
- YY_NEW_FILE;
- }
- break;
- }
-
- case EOB_ACT_CONTINUE_SCAN:
- (yy_c_buf_p) =
- (yytext_ptr) + yy_amount_of_matched_text;
-
- yy_current_state = yy_get_previous_state( );
-
- yy_cp = (yy_c_buf_p);
- yy_bp = (yytext_ptr) + YY_MORE_ADJ;
- goto yy_match;
-
- case EOB_ACT_LAST_MATCH:
- (yy_c_buf_p) =
- &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
-
- yy_current_state = yy_get_previous_state( );
-
- yy_cp = (yy_c_buf_p);
- yy_bp = (yytext_ptr) + YY_MORE_ADJ;
- goto yy_find_action;
- }
- break;
- }
-
- default:
- YY_FATAL_ERROR(
- "fatal flex scanner internal error--no action found" );
- } /* end of action switch */
- } /* end of scanning one token */
-} /* end of i386_lex */
-
-/* yy_get_next_buffer - try to read in a new buffer
- *
- * Returns a code representing an action:
- * EOB_ACT_LAST_MATCH -
- * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
- * EOB_ACT_END_OF_FILE - end of file
- */
-static int yy_get_next_buffer (void)
-{
- register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
- register char *source = (yytext_ptr);
- register int number_to_move, i;
- int ret_val;
-
- if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
- YY_FATAL_ERROR(
- "fatal flex scanner internal error--end of buffer missed" );
-
- if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
- { /* Don't try to fill the buffer, so this is an EOF. */
- if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
- {
- /* We matched a single character, the EOB, so
- * treat this as a final EOF.
- */
- return EOB_ACT_END_OF_FILE;
- }
-
- else
- {
- /* We matched some text prior to the EOB, first
- * process it.
- */
- return EOB_ACT_LAST_MATCH;
- }
- }
-
- /* Try to read more data. */
-
- /* First move last chars to start of buffer. */
- number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
-
- for ( i = 0; i < number_to_move; ++i )
- *(dest++) = *(source++);
-
- if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
- /* don't do the read, it's not guaranteed to return an EOF,
- * just force an EOF
- */
- YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
-
- else
- {
- int num_to_read =
- YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
-
- while ( num_to_read <= 0 )
- { /* Not enough room in the buffer - grow it. */
-
- /* just a shorter name for the current buffer */
- YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
-
- int yy_c_buf_p_offset =
- (int) ((yy_c_buf_p) - b->yy_ch_buf);
-
- if ( b->yy_is_our_buffer )
- {
- int new_size = b->yy_buf_size * 2;
-
- if ( new_size <= 0 )
- b->yy_buf_size += b->yy_buf_size / 8;
- else
- b->yy_buf_size *= 2;
-
- b->yy_ch_buf = (char *)
- /* Include room in for 2 EOB chars. */
- i386_realloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 );
- }
- else
- /* Can't grow it, we don't own it. */
- b->yy_ch_buf = 0;
-
- if ( ! b->yy_ch_buf )
- YY_FATAL_ERROR(
- "fatal error - scanner input buffer overflow" );
-
- (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
-
- num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
- number_to_move - 1;
-
- }
-
- if ( num_to_read > YY_READ_BUF_SIZE )
- num_to_read = YY_READ_BUF_SIZE;
-
- /* Read in more data. */
- YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
- (yy_n_chars), (size_t) num_to_read );
-
- YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
- }
-
- if ( (yy_n_chars) == 0 )
- {
- if ( number_to_move == YY_MORE_ADJ )
- {
- ret_val = EOB_ACT_END_OF_FILE;
- i386_restart(i386_in );
- }
-
- else
- {
- ret_val = EOB_ACT_LAST_MATCH;
- YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
- YY_BUFFER_EOF_PENDING;
- }
- }
-
- else
- ret_val = EOB_ACT_CONTINUE_SCAN;
-
- if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
- /* Extend the array by 50%, plus the number we really need. */
- yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
- YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) i386_realloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size );
- if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
- YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
- }
-
- (yy_n_chars) += number_to_move;
- YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
- YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
-
- (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
-
- return ret_val;
-}
-
-/* yy_get_previous_state - get the state just before the EOB char was reached */
-
- static yy_state_type yy_get_previous_state (void)
-{
- register yy_state_type yy_current_state;
- register char *yy_cp;
-
- yy_current_state = (yy_start);
- yy_current_state += YY_AT_BOL();
-
- for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
- {
- register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
- if ( yy_accept[yy_current_state] )
- {
- (yy_last_accepting_state) = yy_current_state;
- (yy_last_accepting_cpos) = yy_cp;
- }
- while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
- {
- yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 62 )
- yy_c = yy_meta[(unsigned int) yy_c];
- }
- yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
- }
-
- return yy_current_state;
-}
-
-/* yy_try_NUL_trans - try to make a transition on the NUL character
- *
- * synopsis
- * next_state = yy_try_NUL_trans( current_state );
- */
- static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
-{
- register int yy_is_jam;
- register char *yy_cp = (yy_c_buf_p);
-
- register YY_CHAR yy_c = 1;
- if ( yy_accept[yy_current_state] )
- {
- (yy_last_accepting_state) = yy_current_state;
- (yy_last_accepting_cpos) = yy_cp;
- }
- while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
- {
- yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 62 )
- yy_c = yy_meta[(unsigned int) yy_c];
- }
- yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
- yy_is_jam = (yy_current_state == 61);
-
- return yy_is_jam ? 0 : yy_current_state;
-}
-
- static void yyunput (int c, register char * yy_bp )
-{
- register char *yy_cp;
-
- yy_cp = (yy_c_buf_p);
-
- /* undo effects of setting up i386_text */
- *yy_cp = (yy_hold_char);
-
- if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
- { /* need to shift things up to make room */
- /* +2 for EOB chars. */
- register int number_to_move = (yy_n_chars) + 2;
- register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
- YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
- register char *source =
- &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
-
- while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
- *--dest = *--source;
-
- yy_cp += (int) (dest - source);
- yy_bp += (int) (dest - source);
- YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
- (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
-
- if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
- YY_FATAL_ERROR( "flex scanner push-back overflow" );
- }
-
- *--yy_cp = (char) c;
-
- if ( c == '\n' ){
- --i386_lineno;
- }
-
- (yytext_ptr) = yy_bp;
- (yy_hold_char) = *yy_cp;
- (yy_c_buf_p) = yy_cp;
-}
-
-#ifndef YY_NO_INPUT
-#ifdef __cplusplus
- static int yyinput (void)
-#else
- static int input (void)
-#endif
-
-{
- int c;
-
- *(yy_c_buf_p) = (yy_hold_char);
-
- if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
- {
- /* yy_c_buf_p now points to the character we want to return.
- * If this occurs *before* the EOB characters, then it's a
- * valid NUL; if not, then we've hit the end of the buffer.
- */
- if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
- /* This was really a NUL. */
- *(yy_c_buf_p) = '\0';
-
- else
- { /* need more input */
- int offset = (yy_c_buf_p) - (yytext_ptr);
- ++(yy_c_buf_p);
-
- switch ( yy_get_next_buffer( ) )
- {
- case EOB_ACT_LAST_MATCH:
- /* This happens because yy_g_n_b()
- * sees that we've accumulated a
- * token and flags that we need to
- * try matching the token before
- * proceeding. But for input(),
- * there's no matching to consider.
- * So convert the EOB_ACT_LAST_MATCH
- * to EOB_ACT_END_OF_FILE.
- */
-
- /* Reset buffer status. */
- i386_restart(i386_in );
-
- /*FALLTHROUGH*/
-
- case EOB_ACT_END_OF_FILE:
- {
- if ( i386_wrap( ) )
- return EOF;
-
- if ( ! (yy_did_buffer_switch_on_eof) )
- YY_NEW_FILE;
-#ifdef __cplusplus
- return yyinput();
-#else
- return input();
-#endif
- }
-
- case EOB_ACT_CONTINUE_SCAN:
- (yy_c_buf_p) = (yytext_ptr) + offset;
- break;
- }
- }
- }
-
- c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */
- *(yy_c_buf_p) = '\0'; /* preserve i386_text */
- (yy_hold_char) = *++(yy_c_buf_p);
-
- YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');
- if ( YY_CURRENT_BUFFER_LVALUE->yy_at_bol )
-
- i386_lineno++;
-;
-
- return c;
-}
-#endif /* ifndef YY_NO_INPUT */
-
-/** Immediately switch to a different input stream.
- * @param input_file A readable stream.
- *
- * @note This function does not reset the start condition to @c INITIAL .
- */
- void i386_restart (FILE * input_file )
-{
-
- if ( ! YY_CURRENT_BUFFER ){
- i386_ensure_buffer_stack ();
- YY_CURRENT_BUFFER_LVALUE =
- i386__create_buffer(i386_in,YY_BUF_SIZE );
- }
-
- i386__init_buffer(YY_CURRENT_BUFFER,input_file );
- i386__load_buffer_state( );
-}
-
-/** Switch to a different input buffer.
- * @param new_buffer The new input buffer.
- *
- */
- void i386__switch_to_buffer (YY_BUFFER_STATE new_buffer )
-{
-
- /* TODO. We should be able to replace this entire function body
- * with
- * i386_pop_buffer_state();
- * i386_push_buffer_state(new_buffer);
- */
- i386_ensure_buffer_stack ();
- if ( YY_CURRENT_BUFFER == new_buffer )
- return;
-
- if ( YY_CURRENT_BUFFER )
- {
- /* Flush out information for old buffer. */
- *(yy_c_buf_p) = (yy_hold_char);
- YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
- YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
- }
-
- YY_CURRENT_BUFFER_LVALUE = new_buffer;
- i386__load_buffer_state( );
-
- /* We don't actually know whether we did this switch during
- * EOF (i386_wrap()) processing, but the only time this flag
- * is looked at is after i386_wrap() is called, so it's safe
- * to go ahead and always set it.
- */
- (yy_did_buffer_switch_on_eof) = 1;
-}
-
-static void i386__load_buffer_state (void)
-{
- (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
- (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
- i386_in = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
- (yy_hold_char) = *(yy_c_buf_p);
-}
-
-/** Allocate and initialize an input buffer state.
- * @param file A readable stream.
- * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
- *
- * @return the allocated buffer state.
- */
- YY_BUFFER_STATE i386__create_buffer (FILE * file, int size )
-{
- YY_BUFFER_STATE b;
-
- b = (YY_BUFFER_STATE) i386_alloc(sizeof( struct yy_buffer_state ) );
- if ( ! b )
- YY_FATAL_ERROR( "out of dynamic memory in i386__create_buffer()" );
-
- b->yy_buf_size = size;
-
- /* yy_ch_buf has to be 2 characters longer than the size given because
- * we need to put in 2 end-of-buffer characters.
- */
- b->yy_ch_buf = (char *) i386_alloc(b->yy_buf_size + 2 );
- if ( ! b->yy_ch_buf )
- YY_FATAL_ERROR( "out of dynamic memory in i386__create_buffer()" );
-
- b->yy_is_our_buffer = 1;
-
- i386__init_buffer(b,file );
-
- return b;
-}
-
-/** Destroy the buffer.
- * @param b a buffer created with i386__create_buffer()
- *
- */
- void i386__delete_buffer (YY_BUFFER_STATE b )
-{
-
- if ( ! b )
- return;
-
- if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
- YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
-
- if ( b->yy_is_our_buffer )
- i386_free((void *) b->yy_ch_buf );
-
- i386_free((void *) b );
-}
-
-/* Initializes or reinitializes a buffer.
- * This function is sometimes called more than once on the same buffer,
- * such as during a i386_restart() or at EOF.
- */
- static void i386__init_buffer (YY_BUFFER_STATE b, FILE * file )
-
-{
- int oerrno = errno;
-
- i386__flush_buffer(b );
-
- b->yy_input_file = file;
- b->yy_fill_buffer = 1;
-
- /* If b is the current buffer, then i386__init_buffer was _probably_
- * called from i386_restart() or through yy_get_next_buffer.
- * In that case, we don't want to reset the lineno or column.
- */
- if (b != YY_CURRENT_BUFFER){
- b->yy_bs_lineno = 1;
- b->yy_bs_column = 0;
- }
-
- b->yy_is_interactive = 0;
-
- errno = oerrno;
-}
-
-/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
- * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
- *
- */
- void i386__flush_buffer (YY_BUFFER_STATE b )
-{
- if ( ! b )
- return;
-
- b->yy_n_chars = 0;
-
- /* We always need two end-of-buffer characters. The first causes
- * a transition to the end-of-buffer state. The second causes
- * a jam in that state.
- */
- b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
- b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
-
- b->yy_buf_pos = &b->yy_ch_buf[0];
-
- b->yy_at_bol = 1;
- b->yy_buffer_status = YY_BUFFER_NEW;
-
- if ( b == YY_CURRENT_BUFFER )
- i386__load_buffer_state( );
-}
-
-/** Pushes the new state onto the stack. The new state becomes
- * the current state. This function will allocate the stack
- * if necessary.
- * @param new_buffer The new state.
- *
- */
-void i386_push_buffer_state (YY_BUFFER_STATE new_buffer )
-{
- if (new_buffer == NULL)
- return;
-
- i386_ensure_buffer_stack();
-
- /* This block is copied from i386__switch_to_buffer. */
- if ( YY_CURRENT_BUFFER )
- {
- /* Flush out information for old buffer. */
- *(yy_c_buf_p) = (yy_hold_char);
- YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
- YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
- }
-
- /* Only push if top exists. Otherwise, replace top. */
- if (YY_CURRENT_BUFFER)
- (yy_buffer_stack_top)++;
- YY_CURRENT_BUFFER_LVALUE = new_buffer;
-
- /* copied from i386__switch_to_buffer. */
- i386__load_buffer_state( );
- (yy_did_buffer_switch_on_eof) = 1;
-}
-
-/** Removes and deletes the top of the stack, if present.
- * The next element becomes the new top.
- *
- */
-void i386_pop_buffer_state (void)
-{
- if (!YY_CURRENT_BUFFER)
- return;
-
- i386__delete_buffer(YY_CURRENT_BUFFER );
- YY_CURRENT_BUFFER_LVALUE = NULL;
- if ((yy_buffer_stack_top) > 0)
- --(yy_buffer_stack_top);
-
- if (YY_CURRENT_BUFFER) {
- i386__load_buffer_state( );
- (yy_did_buffer_switch_on_eof) = 1;
- }
-}
-
-/* Allocates the stack if it does not exist.
- * Guarantees space for at least one push.
- */
-static void i386_ensure_buffer_stack (void)
-{
- int num_to_alloc;
-
- if (!(yy_buffer_stack)) {
-
- /* First allocation is just for 2 elements, since we don't know if this
- * scanner will even need a stack. We use 2 instead of 1 to avoid an
- * immediate realloc on the next call.
- */
- num_to_alloc = 1;
- (yy_buffer_stack) = (struct yy_buffer_state**)i386_alloc
- (num_to_alloc * sizeof(struct yy_buffer_state*)
- );
- if ( ! (yy_buffer_stack) )
- YY_FATAL_ERROR( "out of dynamic memory in i386_ensure_buffer_stack()" );
-
- memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
-
- (yy_buffer_stack_max) = num_to_alloc;
- (yy_buffer_stack_top) = 0;
- return;
- }
-
- if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
-
- /* Increase the buffer to prepare for a possible push. */
- int grow_size = 8 /* arbitrary grow size */;
-
- num_to_alloc = (yy_buffer_stack_max) + grow_size;
- (yy_buffer_stack) = (struct yy_buffer_state**)i386_realloc
- ((yy_buffer_stack),
- num_to_alloc * sizeof(struct yy_buffer_state*)
- );
- if ( ! (yy_buffer_stack) )
- YY_FATAL_ERROR( "out of dynamic memory in i386_ensure_buffer_stack()" );
-
- /* zero only the new slots.*/
- memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
- (yy_buffer_stack_max) = num_to_alloc;
- }
-}
-
-/** Setup the input buffer state to scan directly from a user-specified character buffer.
- * @param base the character buffer
- * @param size the size in bytes of the character buffer
- *
- * @return the newly allocated buffer state object.
- */
-YY_BUFFER_STATE i386__scan_buffer (char * base, yy_size_t size )
-{
- YY_BUFFER_STATE b;
-
- if ( size < 2 ||
- base[size-2] != YY_END_OF_BUFFER_CHAR ||
- base[size-1] != YY_END_OF_BUFFER_CHAR )
- /* They forgot to leave room for the EOB's. */
- return 0;
-
- b = (YY_BUFFER_STATE) i386_alloc(sizeof( struct yy_buffer_state ) );
- if ( ! b )
- YY_FATAL_ERROR( "out of dynamic memory in i386__scan_buffer()" );
-
- b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
- b->yy_buf_pos = b->yy_ch_buf = base;
- b->yy_is_our_buffer = 0;
- b->yy_input_file = 0;
- b->yy_n_chars = b->yy_buf_size;
- b->yy_is_interactive = 0;
- b->yy_at_bol = 1;
- b->yy_fill_buffer = 0;
- b->yy_buffer_status = YY_BUFFER_NEW;
-
- i386__switch_to_buffer(b );
-
- return b;
-}
-
-/** Setup the input buffer state to scan a string. The next call to i386_lex() will
- * scan from a @e copy of @a str.
- * @param yystr a NUL-terminated string to scan
- *
- * @return the newly allocated buffer state object.
- * @note If you want to scan bytes that may contain NUL values, then use
- * i386__scan_bytes() instead.
- */
-YY_BUFFER_STATE i386__scan_string (yyconst char * yystr )
-{
-
- return i386__scan_bytes(yystr,strlen(yystr) );
-}
-
-/** Setup the input buffer state to scan the given bytes. The next call to i386_lex() will
- * scan from a @e copy of @a bytes.
- * @param bytes the byte buffer to scan
- * @param len the number of bytes in the buffer pointed to by @a bytes.
- *
- * @return the newly allocated buffer state object.
- */
-YY_BUFFER_STATE i386__scan_bytes (yyconst char * yybytes, int _yybytes_len )
-{
- YY_BUFFER_STATE b;
- char *buf;
- yy_size_t n;
- int i;
-
- /* Get memory for full buffer, including space for trailing EOB's. */
- n = _yybytes_len + 2;
- buf = (char *) i386_alloc(n );
- if ( ! buf )
- YY_FATAL_ERROR( "out of dynamic memory in i386__scan_bytes()" );
-
- for ( i = 0; i < _yybytes_len; ++i )
- buf[i] = yybytes[i];
-
- buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
-
- b = i386__scan_buffer(buf,n );
- if ( ! b )
- YY_FATAL_ERROR( "bad buffer in i386__scan_bytes()" );
-
- /* It's okay to grow etc. this buffer, and we should throw it
- * away when we're done.
- */
- b->yy_is_our_buffer = 1;
-
- return b;
-}
-
-#ifndef YY_EXIT_FAILURE
-#define YY_EXIT_FAILURE 2
-#endif
-
-static void yy_fatal_error (yyconst char* msg )
-{
- (void) fprintf( stderr, "%s\n", msg );
- exit( YY_EXIT_FAILURE );
-}
-
-/* Redefine yyless() so it works in section 3 code. */
-
-#undef yyless
-#define yyless(n) \
- do \
- { \
- /* Undo effects of setting up i386_text. */ \
- int yyless_macro_arg = (n); \
- YY_LESS_LINENO(yyless_macro_arg);\
- i386_text[i386_leng] = (yy_hold_char); \
- (yy_c_buf_p) = i386_text + yyless_macro_arg; \
- (yy_hold_char) = *(yy_c_buf_p); \
- *(yy_c_buf_p) = '\0'; \
- i386_leng = yyless_macro_arg; \
- } \
- while ( 0 )
-
-/* Accessor methods (get/set functions) to struct members. */
-
-/** Get the current line number.
- *
- */
-int i386_get_lineno (void)
-{
-
- return i386_lineno;
-}
-
-/** Get the input stream.
- *
- */
-FILE *i386_get_in (void)
-{
- return i386_in;
-}
-
-/** Get the output stream.
- *
- */
-FILE *i386_get_out (void)
-{
- return i386_out;
-}
-
-/** Get the length of the current token.
- *
- */
-int i386_get_leng (void)
-{
- return i386_leng;
-}
-
-/** Get the current token.
- *
- */
-
-char *i386_get_text (void)
-{
- return i386_text;
-}
-
-/** Set the current line number.
- * @param line_number
- *
- */
-void i386_set_lineno (int line_number )
-{
-
- i386_lineno = line_number;
-}
-
-/** Set the input stream. This does not discard the current
- * input buffer.
- * @param in_str A readable stream.
- *
- * @see i386__switch_to_buffer
- */
-void i386_set_in (FILE * in_str )
-{
- i386_in = in_str ;
-}
-
-void i386_set_out (FILE * out_str )
-{
- i386_out = out_str ;
-}
-
-int i386_get_debug (void)
-{
- return i386__flex_debug;
-}
-
-void i386_set_debug (int bdebug )
-{
- i386__flex_debug = bdebug ;
-}
-
-static int yy_init_globals (void)
-{
- /* Initialization is the same as for the non-reentrant scanner.
- * This function is called from i386_lex_destroy(), so don't allocate here.
- */
-
- /* We do not touch i386_lineno unless the option is enabled. */
- i386_lineno = 1;
-
- (yy_buffer_stack) = 0;
- (yy_buffer_stack_top) = 0;
- (yy_buffer_stack_max) = 0;
- (yy_c_buf_p) = (char *) 0;
- (yy_init) = 0;
- (yy_start) = 0;
-
-/* Defined in main.c */
-#ifdef YY_STDINIT
- i386_in = stdin;
- i386_out = stdout;
-#else
- i386_in = (FILE *) 0;
- i386_out = (FILE *) 0;
-#endif
-
- /* For future reference: Set errno on error, since we are called by
- * i386_lex_init()
- */
- return 0;
-}
-
-/* i386_lex_destroy is for both reentrant and non-reentrant scanners. */
-int i386_lex_destroy (void)
-{
-
- /* Pop the buffer stack, destroying each element. */
- while(YY_CURRENT_BUFFER){
- i386__delete_buffer(YY_CURRENT_BUFFER );
- YY_CURRENT_BUFFER_LVALUE = NULL;
- i386_pop_buffer_state();
- }
-
- /* Destroy the stack itself. */
- i386_free((yy_buffer_stack) );
- (yy_buffer_stack) = NULL;
-
- /* Reset the globals. This is important in a non-reentrant scanner so the next time
- * i386_lex() is called, initialization will occur. */
- yy_init_globals( );
-
- return 0;
-}
-
-/*
- * Internal utility routines.
- */
-
-#ifndef yytext_ptr
-static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
-{
- register int i;
- for ( i = 0; i < n; ++i )
- s1[i] = s2[i];
-}
-#endif
-
-#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * s )
-{
- register int n;
- for ( n = 0; s[n]; ++n )
- ;
-
- return n;
-}
-#endif
-
-void *i386_alloc (yy_size_t size )
-{
- return (void *) malloc( size );
-}
-
-void *i386_realloc (void * ptr, yy_size_t size )
-{
- /* The cast to (char *) in the following accommodates both
- * implementations that use char* generic pointers, and those
- * that use void* generic pointers. It works with the latter
- * because both ANSI C and C++ allow castless assignment from
- * any pointer type to void*, and deal with argument conversions
- * as though doing an assignment.
- */
- return (void *) realloc( (char *) ptr, size );
-}
-
-void i386_free (void * ptr )
-{
- free( (char *) ptr ); /* see i386_realloc() for (char *) cast */
-}
-
-#define YYTABLES_NAME "yytables"
-
-#line 101 "i386_lex.l"
-
-
-
-static void
-eat_to_eol (void)
-{
- while (1)
- {
- int c = input ();
-
- if (c == EOF || c == '\n')
- break;
- }
-}
-
-static void
-invalid_char (int ch)
-{
- error (0, 0, (isascii (ch)
- ? gettext ("invalid character '%c' at line %d; ignored")
- : gettext ("invalid character '\\%o' at line %d; ignored")),
- ch, i386_lineno);
-}
-
-// Local Variables:
-// mode: C
-// End:
-
diff --git a/libcpu/i386_lex.l b/libcpu/i386_lex.l
deleted file mode 100644
index 828c558..0000000
--- a/libcpu/i386_lex.l
+++ /dev/null
@@ -1,126 +0,0 @@
-%{
-/* Copyright (C) 2004, 2005, 2007, 2008 Red Hat, Inc.
- Written by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <ctype.h>
-#include <error.h>
-#include <libintl.h>
-
-#include <system.h>
-#include "i386_parse.h"
-
-
-static void eat_to_eol (void);
-static void invalid_char (int ch);
-%}
-
-ID [a-zA-Z_][a-zA-Z0-9_/]*
-ID2 [a-zA-Z0-9_:/]*
-NUMBER [0-9]+
-WHITE [[:space:]]+
-
-%option yylineno
-%option never-interactive
-%option noyywrap
-
-
-%x MAIN
-
-%%
-
-"%mask" { return kMASK; }
-
-"%prefix" { return kPREFIX; }
-"%suffix" { return kSUFFIX; }
-
-"%synonym" { return kSYNONYM; }
-
-{NUMBER} { i386_lval.num = strtoul (yytext, NULL, 10);
- return kNUMBER; }
-
-"%%" { BEGIN (MAIN); return kPERCPERC; }
-
-
-<MAIN>"0" { return '0'; }
-<MAIN>"1" { return '1'; }
-
-<INITIAL,MAIN>"{"{ID2}"}" { i386_lval.str = xstrndup (yytext + 1,
- yyleng - 2);
- return kBITFIELD; }
-
-<MAIN>"INVALID" { i386_lval.str = (void *) -1l;
- return kID; }
-
-<MAIN>{ID} { i386_lval.str = xstrndup (yytext, yyleng);
- return kID; }
-
-<MAIN>"," { return ','; }
-
-<MAIN>":" { return ':'; }
-
-<INITIAL,MAIN>^"\n" { /* IGNORE */ }
-
-<INITIAL,MAIN>"\n" { return '\n'; }
-
-<INITIAL,MAIN>^"#" { eat_to_eol (); }
-
-{WHITE} { /* IGNORE */ }
-
-<MAIN>{WHITE} { return kSPACE; }
-
-<MAIN>. { i386_lval.ch = *yytext; return kCHAR; }
-
-. { invalid_char (*yytext); }
-
-
-%%
-
-static void
-eat_to_eol (void)
-{
- while (1)
- {
- int c = input ();
-
- if (c == EOF || c == '\n')
- break;
- }
-}
-
-static void
-invalid_char (int ch)
-{
- error (0, 0, (isascii (ch)
- ? gettext ("invalid character '%c' at line %d; ignored")
- : gettext ("invalid character '\\%o' at line %d; ignored")),
- ch, yylineno);
-}
-
-// Local Variables:
-// mode: C
-// End:
diff --git a/libcpu/i386_parse.c b/libcpu/i386_parse.c
deleted file mode 100644
index 01df9ba..0000000
--- a/libcpu/i386_parse.c
+++ /dev/null
@@ -1,3270 +0,0 @@
-/* A Bison parser, made by GNU Bison 2.3. */
-
-/* Skeleton implementation for Bison's Yacc-like parsers in C
-
- Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
- Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program 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 General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
-/* As a special exception, you may create a larger work that contains
- part or all of the Bison parser skeleton and distribute that work
- under terms of your choice, so long as that work isn't itself a
- parser generator using the skeleton or a modified version thereof
- as a parser skeleton. Alternatively, if you modify or redistribute
- the parser skeleton itself, you may (at your option) remove this
- special exception, which will cause the skeleton and the resulting
- Bison output files to be licensed under the GNU General Public
- License without this special exception.
-
- This special exception was added by the Free Software Foundation in
- version 2.2 of Bison. */
-
-/* C LALR(1) parser skeleton written by Richard Stallman, by
- simplifying the original so-called "semantic" parser. */
-
-/* All symbols defined below should begin with yy or YY, to avoid
- infringing on user name space. This should be done even for local
- variables, as they might otherwise be expanded by user macros.
- There are some unavoidable exceptions within include files to
- define necessary library symbols; they are noted "INFRINGES ON
- USER NAME SPACE" below. */
-
-/* Identify Bison output. */
-#define YYBISON 1
-
-/* Bison version. */
-#define YYBISON_VERSION "2.3"
-
-/* Skeleton name. */
-#define YYSKELETON_NAME "yacc.c"
-
-/* Pure parsers. */
-#define YYPURE 0
-
-/* Using locations. */
-#define YYLSP_NEEDED 0
-
-/* Substitute the variable and function names. */
-#define yyparse i386_parse
-#define yylex i386_lex
-#define yyerror i386_error
-#define yylval i386_lval
-#define yychar i386_char
-#define yydebug i386_debug
-#define yynerrs i386_nerrs
-
-
-/* Tokens. */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
- /* Put the tokens into the symbol table, so that GDB and other debuggers
- know about them. */
- enum yytokentype {
- kMASK = 258,
- kPREFIX = 259,
- kSUFFIX = 260,
- kSYNONYM = 261,
- kID = 262,
- kNUMBER = 263,
- kPERCPERC = 264,
- kBITFIELD = 265,
- kCHAR = 266,
- kSPACE = 267
- };
-#endif
-/* Tokens. */
-#define kMASK 258
-#define kPREFIX 259
-#define kSUFFIX 260
-#define kSYNONYM 261
-#define kID 262
-#define kNUMBER 263
-#define kPERCPERC 264
-#define kBITFIELD 265
-#define kCHAR 266
-#define kSPACE 267
-
-
-
-
-/* Copy the first part of user declarations. */
-#line 1 "i386_parse.y"
-
-/* Parser for i386 CPU description.
- Copyright (C) 2004, 2005, 2007, 2008 Red Hat, Inc.
- Written by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <ctype.h>
-#include <errno.h>
-#include <error.h>
-#include <inttypes.h>
-#include <libintl.h>
-#include <math.h>
-#include <obstack.h>
-#include <search.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/param.h>
-
-#include <system.h>
-
-#define obstack_chunk_alloc xmalloc
-#define obstack_chunk_free free
-
-/* The error handler. */
-static void yyerror (const char *s);
-
-extern int yylex (void);
-extern int i386_lineno;
-extern char *infname;
-
-
-struct known_bitfield
-{
- char *name;
- unsigned long int bits;
- int tmp;
-};
-
-
-struct bitvalue
-{
- enum bittype { zeroone, field, failure } type;
- union
- {
- unsigned int value;
- struct known_bitfield *field;
- };
- struct bitvalue *next;
-};
-
-
-struct argname
-{
- enum nametype { string, nfield } type;
- union
- {
- char *str;
- struct known_bitfield *field;
- };
- struct argname *next;
-};
-
-
-struct argument
-{
- struct argname *name;
- struct argument *next;
-};
-
-
-struct instruction
-{
- /* The byte encoding. */
- struct bitvalue *bytes;
-
- /* Prefix possible. */
- int repe;
- int rep;
-
- /* Mnemonic. */
- char *mnemonic;
-
- /* Suffix. */
- enum { suffix_none = 0, suffix_w, suffix_w0, suffix_W, suffix_tttn,
- suffix_w1, suffix_W1, suffix_D } suffix;
-
- /* Flag set if modr/m is used. */
- int modrm;
-
- /* Operands. */
- struct operand
- {
- char *fct;
- char *str;
- int off1;
- int off2;
- int off3;
- } operands[3];
-
- struct instruction *next;
-};
-
-
-struct synonym
-{
- char *from;
- char *to;
-};
-
-
-struct suffix
-{
- char *name;
- int idx;
-};
-
-
-struct argstring
-{
- char *str;
- int idx;
- int off;
-};
-
-
-static struct known_bitfield ax_reg =
- {
- .name = "ax", .bits = 0, .tmp = 0
- };
-
-static struct known_bitfield dx_reg =
- {
- .name = "dx", .bits = 0, .tmp = 0
- };
-
-static struct known_bitfield di_reg =
- {
- .name = "es_di", .bits = 0, .tmp = 0
- };
-
-static struct known_bitfield si_reg =
- {
- .name = "ds_si", .bits = 0, .tmp = 0
- };
-
-static struct known_bitfield bx_reg =
- {
- .name = "ds_bx", .bits = 0, .tmp = 0
- };
-
-
-static int bitfield_compare (const void *p1, const void *p2);
-static void new_bitfield (char *name, unsigned long int num);
-static void check_bits (struct bitvalue *value);
-static int check_duplicates (struct bitvalue *val);
-static int check_argsdef (struct bitvalue *bitval, struct argument *args);
-static int check_bitsused (struct bitvalue *bitval,
- struct known_bitfield *suffix,
- struct argument *args);
-static struct argname *combine (struct argname *name);
-static void fillin_arg (struct bitvalue *bytes, struct argname *name,
- struct instruction *instr, int n);
-static void find_numbers (void);
-static int compare_syn (const void *p1, const void *p2);
-static int compare_suf (const void *p1, const void *p2);
-static void instrtable_out (void);
-#if 0
-static void create_mnemonic_table (void);
-#endif
-
-static void *bitfields;
-static struct instruction *instructions;
-static size_t ninstructions;
-static void *synonyms;
-static void *suffixes;
-static int nsuffixes;
-static void *mnemonics;
-size_t nmnemonics;
-extern FILE *outfile;
-
-/* Number of bits used mnemonics. */
-#if 0
-static size_t best_mnemonic_bits;
-#endif
-
-
-/* Enabling traces. */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-
-/* Enabling verbose error messages. */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 0
-#endif
-
-/* Enabling the token table. */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE 0
-#endif
-
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
-#line 213 "i386_parse.y"
-{
- unsigned long int num;
- char *str;
- char ch;
- struct known_bitfield *field;
- struct bitvalue *bit;
- struct argname *name;
- struct argument *arg;
-}
-/* Line 187 of yacc.c. */
-#line 350 "i386_parse.c"
- YYSTYPE;
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
-# define YYSTYPE_IS_TRIVIAL 1
-#endif
-
-
-
-/* Copy the second part of user declarations. */
-
-
-/* Line 216 of yacc.c. */
-#line 363 "i386_parse.c"
-
-#ifdef short
-# undef short
-#endif
-
-#ifdef YYTYPE_UINT8
-typedef YYTYPE_UINT8 yytype_uint8;
-#else
-typedef unsigned char yytype_uint8;
-#endif
-
-#ifdef YYTYPE_INT8
-typedef YYTYPE_INT8 yytype_int8;
-#elif (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-typedef signed char yytype_int8;
-#else
-typedef short int yytype_int8;
-#endif
-
-#ifdef YYTYPE_UINT16
-typedef YYTYPE_UINT16 yytype_uint16;
-#else
-typedef unsigned short int yytype_uint16;
-#endif
-
-#ifdef YYTYPE_INT16
-typedef YYTYPE_INT16 yytype_int16;
-#else
-typedef short int yytype_int16;
-#endif
-
-#ifndef YYSIZE_T
-# ifdef __SIZE_TYPE__
-# define YYSIZE_T __SIZE_TYPE__
-# elif defined size_t
-# define YYSIZE_T size_t
-# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
-# define YYSIZE_T size_t
-# else
-# define YYSIZE_T unsigned int
-# endif
-#endif
-
-#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
-
-#ifndef YY_
-# if YYENABLE_NLS
-# if ENABLE_NLS
-# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
-# define YY_(msgid) dgettext ("bison-runtime", msgid)
-# endif
-# endif
-# ifndef YY_
-# define YY_(msgid) msgid
-# endif
-#endif
-
-/* Suppress unused-variable warnings by "using" E. */
-#if ! defined lint || defined __GNUC__
-# define YYUSE(e) ((void) (e))
-#else
-# define YYUSE(e) /* empty */
-#endif
-
-/* Identity function, used to suppress warnings about constant conditions. */
-#ifndef lint
-# define YYID(n) (n)
-#else
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static int
-YYID (int i)
-#else
-static int
-YYID (i)
- int i;
-#endif
-{
- return i;
-}
-#endif
-
-#if ! defined yyoverflow || YYERROR_VERBOSE
-
-/* The parser invokes alloca or malloc; define the necessary symbols. */
-
-# ifdef YYSTACK_USE_ALLOCA
-# if YYSTACK_USE_ALLOCA
-# ifdef __GNUC__
-# define YYSTACK_ALLOC __builtin_alloca
-# elif defined __BUILTIN_VA_ARG_INCR
-# include <alloca.h> /* INFRINGES ON USER NAME SPACE */
-# elif defined _AIX
-# define YYSTACK_ALLOC __alloca
-# elif defined _MSC_VER
-# include <malloc.h> /* INFRINGES ON USER NAME SPACE */
-# define alloca _alloca
-# else
-# define YYSTACK_ALLOC alloca
-# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-# ifndef _STDLIB_H
-# define _STDLIB_H 1
-# endif
-# endif
-# endif
-# endif
-# endif
-
-# ifdef YYSTACK_ALLOC
- /* Pacify GCC's `empty if-body' warning. */
-# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
-# ifndef YYSTACK_ALLOC_MAXIMUM
- /* The OS might guarantee only one guard page at the bottom of the stack,
- and a page size can be as small as 4096 bytes. So we cannot safely
- invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
- to allow for a few compiler-allocated temporary stack slots. */
-# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
-# endif
-# else
-# define YYSTACK_ALLOC YYMALLOC
-# define YYSTACK_FREE YYFREE
-# ifndef YYSTACK_ALLOC_MAXIMUM
-# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
-# endif
-# if (defined __cplusplus && ! defined _STDLIB_H \
- && ! ((defined YYMALLOC || defined malloc) \
- && (defined YYFREE || defined free)))
-# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-# ifndef _STDLIB_H
-# define _STDLIB_H 1
-# endif
-# endif
-# ifndef YYMALLOC
-# define YYMALLOC malloc
-# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
-# endif
-# endif
-# ifndef YYFREE
-# define YYFREE free
-# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-void free (void *); /* INFRINGES ON USER NAME SPACE */
-# endif
-# endif
-# endif
-#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
-
-
-#if (! defined yyoverflow \
- && (! defined __cplusplus \
- || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
-
-/* A type that is properly aligned for any stack member. */
-union yyalloc
-{
- yytype_int16 yyss;
- YYSTYPE yyvs;
- };
-
-/* The size of the maximum gap between one aligned stack and the next. */
-# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
-
-/* The size of an array large to enough to hold all stacks, each with
- N elements. */
-# define YYSTACK_BYTES(N) \
- ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
- + YYSTACK_GAP_MAXIMUM)
-
-/* Copy COUNT objects from FROM to TO. The source and destination do
- not overlap. */
-# ifndef YYCOPY
-# if defined __GNUC__ && 1 < __GNUC__
-# define YYCOPY(To, From, Count) \
- __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
-# else
-# define YYCOPY(To, From, Count) \
- do \
- { \
- YYSIZE_T yyi; \
- for (yyi = 0; yyi < (Count); yyi++) \
- (To)[yyi] = (From)[yyi]; \
- } \
- while (YYID (0))
-# endif
-# endif
-
-/* Relocate STACK from its old location to the new one. The
- local variables YYSIZE and YYSTACKSIZE give the old and new number of
- elements in the stack, and YYPTR gives the new location of the
- stack. Advance YYPTR to a properly aligned location for the next
- stack. */
-# define YYSTACK_RELOCATE(Stack) \
- do \
- { \
- YYSIZE_T yynewbytes; \
- YYCOPY (&yyptr->Stack, Stack, yysize); \
- Stack = &yyptr->Stack; \
- yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
- yyptr += yynewbytes / sizeof (*yyptr); \
- } \
- while (YYID (0))
-
-#endif
-
-/* YYFINAL -- State number of the termination state. */
-#define YYFINAL 12
-/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 37
-
-/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 18
-/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 14
-/* YYNRULES -- Number of rules. */
-#define YYNRULES 32
-/* YYNRULES -- Number of states. */
-#define YYNSTATES 49
-
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
-#define YYUNDEFTOK 2
-#define YYMAXUTOK 267
-
-#define YYTRANSLATE(YYX) \
- ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
-
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
-static const yytype_uint8 yytranslate[] =
-{
- 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 13, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 15, 2, 2, 2, 16, 17,
- 2, 2, 2, 2, 2, 2, 2, 2, 14, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
- 5, 6, 7, 8, 9, 10, 11, 12
-};
-
-#if YYDEBUG
-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
- YYRHS. */
-static const yytype_uint8 yyprhs[] =
-{
- 0, 0, 3, 8, 12, 14, 18, 21, 24, 28,
- 29, 33, 35, 42, 43, 45, 46, 50, 52, 55,
- 57, 59, 61, 63, 66, 67, 71, 73, 76, 78,
- 80, 82, 84
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
-static const yytype_int8 yyrhs[] =
-{
- 19, 0, -1, 20, 9, 13, 22, -1, 20, 13,
- 21, -1, 21, -1, 3, 10, 8, -1, 4, 10,
- -1, 5, 10, -1, 6, 10, 10, -1, -1, 22,
- 13, 23, -1, 23, -1, 25, 14, 24, 7, 24,
- 28, -1, -1, 10, -1, -1, 25, 15, 26, -1,
- 26, -1, 26, 27, -1, 27, -1, 16, -1, 17,
- -1, 10, -1, 12, 29, -1, -1, 29, 15, 30,
- -1, 30, -1, 30, 31, -1, 31, -1, 10, -1,
- 11, -1, 7, -1, 14, -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
-static const yytype_uint16 yyrline[] =
-{
- 0, 243, 243, 253, 254, 257, 259, 261, 263, 275,
- 278, 279, 282, 365, 368, 384, 387, 397, 404, 412,
- 416, 423, 430, 452, 455, 458, 468, 476, 484, 487,
- 519, 528, 535
-};
-#endif
-
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
-/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
- First, the terminals, then, starting at YYNTOKENS, nonterminals. */
-static const char *const yytname[] =
-{
- "$end", "error", "$undefined", "kMASK", "kPREFIX", "kSUFFIX",
- "kSYNONYM", "kID", "kNUMBER", "kPERCPERC", "kBITFIELD", "kCHAR",
- "kSPACE", "'\\n'", "':'", "','", "'0'", "'1'", "$accept", "spec",
- "masks", "mask", "instrs", "instr", "bitfieldopt", "bytes", "byte",
- "bit", "optargs", "args", "arg", "argcomp", 0
-};
-#endif
-
-# ifdef YYPRINT
-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
- token YYLEX-NUM. */
-static const yytype_uint16 yytoknum[] =
-{
- 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
- 265, 266, 267, 10, 58, 44, 48, 49
-};
-# endif
-
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
-static const yytype_uint8 yyr1[] =
-{
- 0, 18, 19, 20, 20, 21, 21, 21, 21, 21,
- 22, 22, 23, 23, 24, 24, 25, 25, 26, 26,
- 27, 27, 27, 28, 28, 29, 29, 30, 30, 31,
- 31, 31, 31
-};
-
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
-static const yytype_uint8 yyr2[] =
-{
- 0, 2, 4, 3, 1, 3, 2, 2, 3, 0,
- 3, 1, 6, 0, 1, 0, 3, 1, 2, 1,
- 1, 1, 1, 2, 0, 3, 1, 2, 1, 1,
- 1, 1, 1
-};
-
-/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
- STATE-NUM when YYTABLE doesn't specify something else to do. Zero
- means the default is an error. */
-static const yytype_uint8 yydefact[] =
-{
- 9, 0, 0, 0, 0, 0, 0, 4, 0, 6,
- 7, 0, 1, 0, 9, 5, 8, 13, 3, 22,
- 20, 21, 2, 11, 0, 17, 19, 13, 15, 0,
- 18, 10, 14, 0, 16, 15, 24, 0, 12, 31,
- 29, 30, 32, 23, 26, 28, 0, 27, 25
-};
-
-/* YYDEFGOTO[NTERM-NUM]. */
-static const yytype_int8 yydefgoto[] =
-{
- -1, 5, 6, 7, 22, 23, 33, 24, 25, 26,
- 38, 43, 44, 45
-};
-
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
- STATE-NUM. */
-#define YYPACT_NINF -35
-static const yytype_int8 yypact[] =
-{
- 12, 9, 10, 11, 13, 22, -2, -35, 16, -35,
- -35, 15, -35, 14, 12, -35, -35, -4, -35, -35,
- -35, -35, 17, -35, -12, -4, -35, -4, 18, -4,
- -35, -35, -35, 19, -4, 18, 20, -6, -35, -35,
- -35, -35, -35, 21, -6, -35, -6, -35, -6
-};
-
-/* YYPGOTO[NTERM-NUM]. */
-static const yytype_int8 yypgoto[] =
-{
- -35, -35, -35, 23, -35, 2, -1, -35, 4, -25,
- -35, -35, -15, -34
-};
-
-/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
- positive, shift that token. If negative, reduce the rule which
- number is the opposite. If zero, do what YYDEFACT says.
- If YYTABLE_NINF, syntax error. */
-#define YYTABLE_NINF -1
-static const yytype_uint8 yytable[] =
-{
- 30, 39, 28, 29, 40, 41, 19, 13, 42, 30,
- 47, 14, 20, 21, 47, 1, 2, 3, 4, 8,
- 9, 10, 12, 11, 15, 16, 35, 17, 32, 31,
- 27, 48, 37, 34, 36, 0, 46, 18
-};
-
-static const yytype_int8 yycheck[] =
-{
- 25, 7, 14, 15, 10, 11, 10, 9, 14, 34,
- 44, 13, 16, 17, 48, 3, 4, 5, 6, 10,
- 10, 10, 0, 10, 8, 10, 7, 13, 10, 27,
- 13, 46, 12, 29, 35, -1, 15, 14
-};
-
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
- symbol of state STATE-NUM. */
-static const yytype_uint8 yystos[] =
-{
- 0, 3, 4, 5, 6, 19, 20, 21, 10, 10,
- 10, 10, 0, 9, 13, 8, 10, 13, 21, 10,
- 16, 17, 22, 23, 25, 26, 27, 13, 14, 15,
- 27, 23, 10, 24, 26, 7, 24, 12, 28, 7,
- 10, 11, 14, 29, 30, 31, 15, 31, 30
-};
-
-#define yyerrok (yyerrstatus = 0)
-#define yyclearin (yychar = YYEMPTY)
-#define YYEMPTY (-2)
-#define YYEOF 0
-
-#define YYACCEPT goto yyacceptlab
-#define YYABORT goto yyabortlab
-#define YYERROR goto yyerrorlab
-
-
-/* Like YYERROR except do call yyerror. This remains here temporarily
- to ease the transition to the new meaning of YYERROR, for GCC.
- Once GCC version 2 has supplanted version 1, this can go. */
-
-#define YYFAIL goto yyerrlab
-
-#define YYRECOVERING() (!!yyerrstatus)
-
-#define YYBACKUP(Token, Value) \
-do \
- if (yychar == YYEMPTY && yylen == 1) \
- { \
- yychar = (Token); \
- yylval = (Value); \
- yytoken = YYTRANSLATE (yychar); \
- YYPOPSTACK (1); \
- goto yybackup; \
- } \
- else \
- { \
- yyerror (YY_("syntax error: cannot back up")); \
- YYERROR; \
- } \
-while (YYID (0))
-
-
-#define YYTERROR 1
-#define YYERRCODE 256
-
-
-/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
- If N is 0, then set CURRENT to the empty location which ends
- the previous symbol: RHS[0] (always defined). */
-
-#define YYRHSLOC(Rhs, K) ((Rhs)[K])
-#ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N) \
- do \
- if (YYID (N)) \
- { \
- (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
- (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
- (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
- (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
- } \
- else \
- { \
- (Current).first_line = (Current).last_line = \
- YYRHSLOC (Rhs, 0).last_line; \
- (Current).first_column = (Current).last_column = \
- YYRHSLOC (Rhs, 0).last_column; \
- } \
- while (YYID (0))
-#endif
-
-
-/* YY_LOCATION_PRINT -- Print the location on the stream.
- This macro was not mandated originally: define only if we know
- we won't break user code: when these are the locations we know. */
-
-#ifndef YY_LOCATION_PRINT
-# if YYLTYPE_IS_TRIVIAL
-# define YY_LOCATION_PRINT(File, Loc) \
- fprintf (File, "%d.%d-%d.%d", \
- (Loc).first_line, (Loc).first_column, \
- (Loc).last_line, (Loc).last_column)
-# else
-# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-# endif
-#endif
-
-
-/* YYLEX -- calling `yylex' with the right arguments. */
-
-#ifdef YYLEX_PARAM
-# define YYLEX yylex (YYLEX_PARAM)
-#else
-# define YYLEX yylex ()
-#endif
-
-/* Enable debugging if requested. */
-#if YYDEBUG
-
-# ifndef YYFPRINTF
-# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
-# define YYFPRINTF fprintf
-# endif
-
-# define YYDPRINTF(Args) \
-do { \
- if (yydebug) \
- YYFPRINTF Args; \
-} while (YYID (0))
-
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
-do { \
- if (yydebug) \
- { \
- YYFPRINTF (stderr, "%s ", Title); \
- yy_symbol_print (stderr, \
- Type, Value); \
- YYFPRINTF (stderr, "\n"); \
- } \
-} while (YYID (0))
-
-
-/*--------------------------------.
-| Print this symbol on YYOUTPUT. |
-`--------------------------------*/
-
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static void
-yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-#else
-static void
-yy_symbol_value_print (yyoutput, yytype, yyvaluep)
- FILE *yyoutput;
- int yytype;
- YYSTYPE const * const yyvaluep;
-#endif
-{
- if (!yyvaluep)
- return;
-# ifdef YYPRINT
- if (yytype < YYNTOKENS)
- YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# else
- YYUSE (yyoutput);
-# endif
- switch (yytype)
- {
- default:
- break;
- }
-}
-
-
-/*--------------------------------.
-| Print this symbol on YYOUTPUT. |
-`--------------------------------*/
-
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static void
-yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-#else
-static void
-yy_symbol_print (yyoutput, yytype, yyvaluep)
- FILE *yyoutput;
- int yytype;
- YYSTYPE const * const yyvaluep;
-#endif
-{
- if (yytype < YYNTOKENS)
- YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
- else
- YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
-
- yy_symbol_value_print (yyoutput, yytype, yyvaluep);
- YYFPRINTF (yyoutput, ")");
-}
-
-/*------------------------------------------------------------------.
-| yy_stack_print -- Print the state stack from its BOTTOM up to its |
-| TOP (included). |
-`------------------------------------------------------------------*/
-
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static void
-yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
-#else
-static void
-yy_stack_print (bottom, top)
- yytype_int16 *bottom;
- yytype_int16 *top;
-#endif
-{
- YYFPRINTF (stderr, "Stack now");
- for (; bottom <= top; ++bottom)
- YYFPRINTF (stderr, " %d", *bottom);
- YYFPRINTF (stderr, "\n");
-}
-
-# define YY_STACK_PRINT(Bottom, Top) \
-do { \
- if (yydebug) \
- yy_stack_print ((Bottom), (Top)); \
-} while (YYID (0))
-
-
-/*------------------------------------------------.
-| Report that the YYRULE is going to be reduced. |
-`------------------------------------------------*/
-
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static void
-yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
-#else
-static void
-yy_reduce_print (yyvsp, yyrule)
- YYSTYPE *yyvsp;
- int yyrule;
-#endif
-{
- int yynrhs = yyr2[yyrule];
- int yyi;
- unsigned long int yylno = yyrline[yyrule];
- YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
- yyrule - 1, yylno);
- /* The symbols being reduced. */
- for (yyi = 0; yyi < yynrhs; yyi++)
- {
- fprintf (stderr, " $%d = ", yyi + 1);
- yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
- &(yyvsp[(yyi + 1) - (yynrhs)])
- );
- fprintf (stderr, "\n");
- }
-}
-
-# define YY_REDUCE_PRINT(Rule) \
-do { \
- if (yydebug) \
- yy_reduce_print (yyvsp, Rule); \
-} while (YYID (0))
-
-/* Nonzero means print parse trace. It is left uninitialized so that
- multiple parsers can coexist. */
-int yydebug;
-#else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
-# define YY_STACK_PRINT(Bottom, Top)
-# define YY_REDUCE_PRINT(Rule)
-#endif /* !YYDEBUG */
-
-
-/* YYINITDEPTH -- initial size of the parser's stacks. */
-#ifndef YYINITDEPTH
-# define YYINITDEPTH 200
-#endif
-
-/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
- if the built-in stack extension method is used).
-
- Do not make this value too large; the results are undefined if
- YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
- evaluated with infinite-precision integer arithmetic. */
-
-#ifndef YYMAXDEPTH
-# define YYMAXDEPTH 10000
-#endif
-
-
-
-#if YYERROR_VERBOSE
-
-# ifndef yystrlen
-# if defined __GLIBC__ && defined _STRING_H
-# define yystrlen strlen
-# else
-/* Return the length of YYSTR. */
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static YYSIZE_T
-yystrlen (const char *yystr)
-#else
-static YYSIZE_T
-yystrlen (yystr)
- const char *yystr;
-#endif
-{
- YYSIZE_T yylen;
- for (yylen = 0; yystr[yylen]; yylen++)
- continue;
- return yylen;
-}
-# endif
-# endif
-
-# ifndef yystpcpy
-# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
-# define yystpcpy stpcpy
-# else
-/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
- YYDEST. */
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static char *
-yystpcpy (char *yydest, const char *yysrc)
-#else
-static char *
-yystpcpy (yydest, yysrc)
- char *yydest;
- const char *yysrc;
-#endif
-{
- char *yyd = yydest;
- const char *yys = yysrc;
-
- while ((*yyd++ = *yys++) != '\0')
- continue;
-
- return yyd - 1;
-}
-# endif
-# endif
-
-# ifndef yytnamerr
-/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
- quotes and backslashes, so that it's suitable for yyerror. The
- heuristic is that double-quoting is unnecessary unless the string
- contains an apostrophe, a comma, or backslash (other than
- backslash-backslash). YYSTR is taken from yytname. If YYRES is
- null, do not copy; instead, return the length of what the result
- would have been. */
-static YYSIZE_T
-yytnamerr (char *yyres, const char *yystr)
-{
- if (*yystr == '"')
- {
- YYSIZE_T yyn = 0;
- char const *yyp = yystr;
-
- for (;;)
- switch (*++yyp)
- {
- case '\'':
- case ',':
- goto do_not_strip_quotes;
-
- case '\\':
- if (*++yyp != '\\')
- goto do_not_strip_quotes;
- /* Fall through. */
- default:
- if (yyres)
- yyres[yyn] = *yyp;
- yyn++;
- break;
-
- case '"':
- if (yyres)
- yyres[yyn] = '\0';
- return yyn;
- }
- do_not_strip_quotes: ;
- }
-
- if (! yyres)
- return yystrlen (yystr);
-
- return yystpcpy (yyres, yystr) - yyres;
-}
-# endif
-
-/* Copy into YYRESULT an error message about the unexpected token
- YYCHAR while in state YYSTATE. Return the number of bytes copied,
- including the terminating null byte. If YYRESULT is null, do not
- copy anything; just return the number of bytes that would be
- copied. As a special case, return 0 if an ordinary "syntax error"
- message will do. Return YYSIZE_MAXIMUM if overflow occurs during
- size calculation. */
-static YYSIZE_T
-yysyntax_error (char *yyresult, int yystate, int yychar)
-{
- int yyn = yypact[yystate];
-
- if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
- return 0;
- else
- {
- int yytype = YYTRANSLATE (yychar);
- YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
- YYSIZE_T yysize = yysize0;
- YYSIZE_T yysize1;
- int yysize_overflow = 0;
- enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
- char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
- int yyx;
-
-# if 0
- /* This is so xgettext sees the translatable formats that are
- constructed on the fly. */
- YY_("syntax error, unexpected %s");
- YY_("syntax error, unexpected %s, expecting %s");
- YY_("syntax error, unexpected %s, expecting %s or %s");
- YY_("syntax error, unexpected %s, expecting %s or %s or %s");
- YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
-# endif
- char *yyfmt;
- char const *yyf;
- static char const yyunexpected[] = "syntax error, unexpected %s";
- static char const yyexpecting[] = ", expecting %s";
- static char const yyor[] = " or %s";
- char yyformat[sizeof yyunexpected
- + sizeof yyexpecting - 1
- + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
- * (sizeof yyor - 1))];
- char const *yyprefix = yyexpecting;
-
- /* Start YYX at -YYN if negative to avoid negative indexes in
- YYCHECK. */
- int yyxbegin = yyn < 0 ? -yyn : 0;
-
- /* Stay within bounds of both yycheck and yytname. */
- int yychecklim = YYLAST - yyn + 1;
- int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
- int yycount = 1;
-
- yyarg[0] = yytname[yytype];
- yyfmt = yystpcpy (yyformat, yyunexpected);
-
- for (yyx = yyxbegin; yyx < yyxend; ++yyx)
- if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
- {
- if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
- {
- yycount = 1;
- yysize = yysize0;
- yyformat[sizeof yyunexpected - 1] = '\0';
- break;
- }
- yyarg[yycount++] = yytname[yyx];
- yysize1 = yysize + yytnamerr (0, yytname[yyx]);
- yysize_overflow |= (yysize1 < yysize);
- yysize = yysize1;
- yyfmt = yystpcpy (yyfmt, yyprefix);
- yyprefix = yyor;
- }
-
- yyf = YY_(yyformat);
- yysize1 = yysize + yystrlen (yyf);
- yysize_overflow |= (yysize1 < yysize);
- yysize = yysize1;
-
- if (yysize_overflow)
- return YYSIZE_MAXIMUM;
-
- if (yyresult)
- {
- /* Avoid sprintf, as that infringes on the user's name space.
- Don't have undefined behavior even if the translation
- produced a string with the wrong number of "%s"s. */
- char *yyp = yyresult;
- int yyi = 0;
- while ((*yyp = *yyf) != '\0')
- {
- if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
- {
- yyp += yytnamerr (yyp, yyarg[yyi++]);
- yyf += 2;
- }
- else
- {
- yyp++;
- yyf++;
- }
- }
- }
- return yysize;
- }
-}
-#endif /* YYERROR_VERBOSE */
-
-
-/*-----------------------------------------------.
-| Release the memory associated to this symbol. |
-`-----------------------------------------------*/
-
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static void
-yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
-#else
-static void
-yydestruct (yymsg, yytype, yyvaluep)
- const char *yymsg;
- int yytype;
- YYSTYPE *yyvaluep;
-#endif
-{
- YYUSE (yyvaluep);
-
- if (!yymsg)
- yymsg = "Deleting";
- YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
-
- switch (yytype)
- {
-
- default:
- break;
- }
-}
-
-
-/* Prevent warnings from -Wmissing-prototypes. */
-
-#ifdef YYPARSE_PARAM
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void *YYPARSE_PARAM);
-#else
-int yyparse ();
-#endif
-#else /* ! YYPARSE_PARAM */
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void);
-#else
-int yyparse ();
-#endif
-#endif /* ! YYPARSE_PARAM */
-
-
-
-/* The look-ahead symbol. */
-int yychar;
-
-/* The semantic value of the look-ahead symbol. */
-YYSTYPE yylval;
-
-/* Number of syntax errors so far. */
-int yynerrs;
-
-
-
-/*----------.
-| yyparse. |
-`----------*/
-
-#ifdef YYPARSE_PARAM
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-int
-yyparse (void *YYPARSE_PARAM)
-#else
-int
-yyparse (YYPARSE_PARAM)
- void *YYPARSE_PARAM;
-#endif
-#else /* ! YYPARSE_PARAM */
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-int
-yyparse (void)
-#else
-int
-yyparse ()
-
-#endif
-#endif
-{
-
- int yystate;
- int yyn;
- int yyresult;
- /* Number of tokens to shift before error messages enabled. */
- int yyerrstatus;
- /* Look-ahead token as an internal (translated) token number. */
- int yytoken = 0;
-#if YYERROR_VERBOSE
- /* Buffer for error messages, and its allocated size. */
- char yymsgbuf[128];
- char *yymsg = yymsgbuf;
- YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
-#endif
-
- /* Three stacks and their tools:
- `yyss': related to states,
- `yyvs': related to semantic values,
- `yyls': related to locations.
-
- Refer to the stacks thru separate pointers, to allow yyoverflow
- to reallocate them elsewhere. */
-
- /* The state stack. */
- yytype_int16 yyssa[YYINITDEPTH];
- yytype_int16 *yyss = yyssa;
- yytype_int16 *yyssp;
-
- /* The semantic value stack. */
- YYSTYPE yyvsa[YYINITDEPTH];
- YYSTYPE *yyvs = yyvsa;
- YYSTYPE *yyvsp;
-
-
-
-#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
-
- YYSIZE_T yystacksize = YYINITDEPTH;
-
- /* The variables used to return semantic value and location from the
- action routines. */
- YYSTYPE yyval;
-
-
- /* The number of symbols on the RHS of the reduced rule.
- Keep to zero when no symbol should be popped. */
- int yylen = 0;
-
- YYDPRINTF ((stderr, "Starting parse\n"));
-
- yystate = 0;
- yyerrstatus = 0;
- yynerrs = 0;
- yychar = YYEMPTY; /* Cause a token to be read. */
-
- /* Initialize stack pointers.
- Waste one element of value and location stack
- so that they stay on the same level as the state stack.
- The wasted elements are never initialized. */
-
- yyssp = yyss;
- yyvsp = yyvs;
-
- goto yysetstate;
-
-/*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate. |
-`------------------------------------------------------------*/
- yynewstate:
- /* In all cases, when you get here, the value and location stacks
- have just been pushed. So pushing a state here evens the stacks. */
- yyssp++;
-
- yysetstate:
- *yyssp = yystate;
-
- if (yyss + yystacksize - 1 <= yyssp)
- {
- /* Get the current used size of the three stacks, in elements. */
- YYSIZE_T yysize = yyssp - yyss + 1;
-
-#ifdef yyoverflow
- {
- /* Give user a chance to reallocate the stack. Use copies of
- these so that the &'s don't force the real ones into
- memory. */
- YYSTYPE *yyvs1 = yyvs;
- yytype_int16 *yyss1 = yyss;
-
-
- /* Each stack pointer address is followed by the size of the
- data in use in that stack, in bytes. This used to be a
- conditional around just the two extra args, but that might
- be undefined if yyoverflow is a macro. */
- yyoverflow (YY_("memory exhausted"),
- &yyss1, yysize * sizeof (*yyssp),
- &yyvs1, yysize * sizeof (*yyvsp),
-
- &yystacksize);
-
- yyss = yyss1;
- yyvs = yyvs1;
- }
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
- goto yyexhaustedlab;
-# else
- /* Extend the stack our own way. */
- if (YYMAXDEPTH <= yystacksize)
- goto yyexhaustedlab;
- yystacksize *= 2;
- if (YYMAXDEPTH < yystacksize)
- yystacksize = YYMAXDEPTH;
-
- {
- yytype_int16 *yyss1 = yyss;
- union yyalloc *yyptr =
- (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
- if (! yyptr)
- goto yyexhaustedlab;
- YYSTACK_RELOCATE (yyss);
- YYSTACK_RELOCATE (yyvs);
-
-# undef YYSTACK_RELOCATE
- if (yyss1 != yyssa)
- YYSTACK_FREE (yyss1);
- }
-# endif
-#endif /* no yyoverflow */
-
- yyssp = yyss + yysize - 1;
- yyvsp = yyvs + yysize - 1;
-
-
- YYDPRINTF ((stderr, "Stack size increased to %lu\n",
- (unsigned long int) yystacksize));
-
- if (yyss + yystacksize - 1 <= yyssp)
- YYABORT;
- }
-
- YYDPRINTF ((stderr, "Entering state %d\n", yystate));
-
- goto yybackup;
-
-/*-----------.
-| yybackup. |
-`-----------*/
-yybackup:
-
- /* Do appropriate processing given the current state. Read a
- look-ahead token if we need one and don't already have one. */
-
- /* First try to decide what to do without reference to look-ahead token. */
- yyn = yypact[yystate];
- if (yyn == YYPACT_NINF)
- goto yydefault;
-
- /* Not known => get a look-ahead token if don't already have one. */
-
- /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
- if (yychar == YYEMPTY)
- {
- YYDPRINTF ((stderr, "Reading a token: "));
- yychar = YYLEX;
- }
-
- if (yychar <= YYEOF)
- {
- yychar = yytoken = YYEOF;
- YYDPRINTF ((stderr, "Now at end of input.\n"));
- }
- else
- {
- yytoken = YYTRANSLATE (yychar);
- YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
- }
-
- /* If the proper action on seeing token YYTOKEN is to reduce or to
- detect an error, take that action. */
- yyn += yytoken;
- if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
- goto yydefault;
- yyn = yytable[yyn];
- if (yyn <= 0)
- {
- if (yyn == 0 || yyn == YYTABLE_NINF)
- goto yyerrlab;
- yyn = -yyn;
- goto yyreduce;
- }
-
- if (yyn == YYFINAL)
- YYACCEPT;
-
- /* Count tokens shifted since error; after three, turn off error
- status. */
- if (yyerrstatus)
- yyerrstatus--;
-
- /* Shift the look-ahead token. */
- YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
-
- /* Discard the shifted token unless it is eof. */
- if (yychar != YYEOF)
- yychar = YYEMPTY;
-
- yystate = yyn;
- *++yyvsp = yylval;
-
- goto yynewstate;
-
-
-/*-----------------------------------------------------------.
-| yydefault -- do the default action for the current state. |
-`-----------------------------------------------------------*/
-yydefault:
- yyn = yydefact[yystate];
- if (yyn == 0)
- goto yyerrlab;
- goto yyreduce;
-
-
-/*-----------------------------.
-| yyreduce -- Do a reduction. |
-`-----------------------------*/
-yyreduce:
- /* yyn is the number of a rule to reduce with. */
- yylen = yyr2[yyn];
-
- /* If YYLEN is nonzero, implement the default value of the action:
- `$$ = $1'.
-
- Otherwise, the following line sets YYVAL to garbage.
- This behavior is undocumented and Bison
- users should not rely upon it. Assigning to YYVAL
- unconditionally makes the parser a bit smaller, and it avoids a
- GCC warning that YYVAL may be used uninitialized. */
- yyval = yyvsp[1-yylen];
-
-
- YY_REDUCE_PRINT (yyn);
- switch (yyn)
- {
- case 2:
-#line 244 "i386_parse.y"
- {
- if (error_message_count != 0)
- error (EXIT_FAILURE, 0,
- "terminated due to previous error");
-
- instrtable_out ();
- }
- break;
-
- case 5:
-#line 258 "i386_parse.y"
- { new_bitfield ((yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].num)); }
- break;
-
- case 6:
-#line 260 "i386_parse.y"
- { new_bitfield ((yyvsp[(2) - (2)].str), -1); }
- break;
-
- case 7:
-#line 262 "i386_parse.y"
- { new_bitfield ((yyvsp[(2) - (2)].str), -2); }
- break;
-
- case 8:
-#line 264 "i386_parse.y"
- {
- struct synonym *newp = xmalloc (sizeof (*newp));
- newp->from = (yyvsp[(2) - (3)].str);
- newp->to = (yyvsp[(3) - (3)].str);
- if (tfind (newp, &synonyms, compare_syn) != NULL)
- error (0, 0,
- "%d: duplicate definition for synonym '%s'",
- i386_lineno, (yyvsp[(2) - (3)].str));
- else if (tsearch ( newp, &synonyms, compare_syn) == NULL)
- error (EXIT_FAILURE, 0, "tsearch");
- }
- break;
-
- case 12:
-#line 283 "i386_parse.y"
- {
- if ((yyvsp[(3) - (6)].field) != NULL && strcmp ((yyvsp[(3) - (6)].field)->name, "RE") != 0
- && strcmp ((yyvsp[(3) - (6)].field)->name, "R") != 0)
- {
- error (0, 0, "%d: only 'R' and 'RE' prefix allowed",
- i386_lineno - 1);
- }
- if (check_duplicates ((yyvsp[(1) - (6)].bit)) == 0
- && check_argsdef ((yyvsp[(1) - (6)].bit), (yyvsp[(6) - (6)].arg)) == 0
- && check_bitsused ((yyvsp[(1) - (6)].bit), (yyvsp[(5) - (6)].field), (yyvsp[(6) - (6)].arg)) == 0)
- {
- struct instruction *newp = xcalloc (sizeof (*newp),
- 1);
- if ((yyvsp[(3) - (6)].field) != NULL)
- {
- if (strcmp ((yyvsp[(3) - (6)].field)->name, "RE") == 0)
- newp->repe = 1;
- else if (strcmp ((yyvsp[(3) - (6)].field)->name, "R") == 0)
- newp->rep = 1;
- }
-
- newp->bytes = (yyvsp[(1) - (6)].bit);
- newp->mnemonic = (yyvsp[(4) - (6)].str);
- if (newp->mnemonic != (void *) -1l
- && tfind ((yyvsp[(4) - (6)].str), &mnemonics,
- (comparison_fn_t) strcmp) == NULL)
- {
- if (tsearch ((yyvsp[(4) - (6)].str), &mnemonics,
- (comparison_fn_t) strcmp) == NULL)
- error (EXIT_FAILURE, errno, "tsearch");
- ++nmnemonics;
- }
-
- if ((yyvsp[(5) - (6)].field) != NULL)
- {
- if (strcmp ((yyvsp[(5) - (6)].field)->name, "w") == 0)
- newp->suffix = suffix_w;
- else if (strcmp ((yyvsp[(5) - (6)].field)->name, "w0") == 0)
- newp->suffix = suffix_w0;
- else if (strcmp ((yyvsp[(5) - (6)].field)->name, "tttn") == 0)
- newp->suffix = suffix_tttn;
- else if (strcmp ((yyvsp[(5) - (6)].field)->name, "w1") == 0)
- newp->suffix = suffix_w1;
- else if (strcmp ((yyvsp[(5) - (6)].field)->name, "W") == 0)
- newp->suffix = suffix_W;
- else if (strcmp ((yyvsp[(5) - (6)].field)->name, "W1") == 0)
- newp->suffix = suffix_W1;
- else if (strcmp ((yyvsp[(5) - (6)].field)->name, "D") == 0)
- newp->suffix = suffix_D;
- else
- error (EXIT_FAILURE, 0,
- "%s: %d: unknown suffix '%s'",
- infname, i386_lineno - 1, (yyvsp[(5) - (6)].field)->name);
-
- struct suffix search = { .name = (yyvsp[(5) - (6)].field)->name };
- if (tfind (&search, &suffixes, compare_suf)
- == NULL)
- {
- struct suffix *ns = xmalloc (sizeof (*ns));
- ns->name = (yyvsp[(5) - (6)].field)->name;
- ns->idx = ++nsuffixes;
- if (tsearch (ns, &suffixes, compare_suf)
- == NULL)
- error (EXIT_FAILURE, errno, "tsearch");
- }
- }
-
- struct argument *args = (yyvsp[(6) - (6)].arg);
- int n = 0;
- while (args != NULL)
- {
- fillin_arg ((yyvsp[(1) - (6)].bit), args->name, newp, n);
-
- args = args->next;
- ++n;
- }
-
- newp->next = instructions;
- instructions = newp;
- ++ninstructions;
- }
- }
- break;
-
- case 14:
-#line 369 "i386_parse.y"
- {
- struct known_bitfield search;
- search.name = (yyvsp[(1) - (1)].str);
- struct known_bitfield **res;
- res = tfind (&search, &bitfields, bitfield_compare);
- if (res == NULL)
- {
- error (0, 0, "%d: unknown bitfield '%s'",
- i386_lineno, search.name);
- (yyval.field) = NULL;
- }
- else
- (yyval.field) = *res;
- }
- break;
-
- case 15:
-#line 384 "i386_parse.y"
- { (yyval.field) = NULL; }
- break;
-
- case 16:
-#line 388 "i386_parse.y"
- {
- check_bits ((yyvsp[(3) - (3)].bit));
-
- struct bitvalue *runp = (yyvsp[(1) - (3)].bit);
- while (runp->next != NULL)
- runp = runp->next;
- runp->next = (yyvsp[(3) - (3)].bit);
- (yyval.bit) = (yyvsp[(1) - (3)].bit);
- }
- break;
-
- case 17:
-#line 398 "i386_parse.y"
- {
- check_bits ((yyvsp[(1) - (1)].bit));
- (yyval.bit) = (yyvsp[(1) - (1)].bit);
- }
- break;
-
- case 18:
-#line 405 "i386_parse.y"
- {
- struct bitvalue *runp = (yyvsp[(1) - (2)].bit);
- while (runp->next != NULL)
- runp = runp->next;
- runp->next = (yyvsp[(2) - (2)].bit);
- (yyval.bit) = (yyvsp[(1) - (2)].bit);
- }
- break;
-
- case 19:
-#line 413 "i386_parse.y"
- { (yyval.bit) = (yyvsp[(1) - (1)].bit); }
- break;
-
- case 20:
-#line 417 "i386_parse.y"
- {
- (yyval.bit) = xmalloc (sizeof (struct bitvalue));
- (yyval.bit)->type = zeroone;
- (yyval.bit)->value = 0;
- (yyval.bit)->next = NULL;
- }
- break;
-
- case 21:
-#line 424 "i386_parse.y"
- {
- (yyval.bit) = xmalloc (sizeof (struct bitvalue));
- (yyval.bit)->type = zeroone;
- (yyval.bit)->value = 1;
- (yyval.bit)->next = NULL;
- }
- break;
-
- case 22:
-#line 431 "i386_parse.y"
- {
- (yyval.bit) = xmalloc (sizeof (struct bitvalue));
- struct known_bitfield search;
- search.name = (yyvsp[(1) - (1)].str);
- struct known_bitfield **res;
- res = tfind (&search, &bitfields, bitfield_compare);
- if (res == NULL)
- {
- error (0, 0, "%d: unknown bitfield '%s'",
- i386_lineno, search.name);
- (yyval.bit)->type = failure;
- }
- else
- {
- (yyval.bit)->type = field;
- (yyval.bit)->field = *res;
- }
- (yyval.bit)->next = NULL;
- }
- break;
-
- case 23:
-#line 453 "i386_parse.y"
- { (yyval.arg) = (yyvsp[(2) - (2)].arg); }
- break;
-
- case 24:
-#line 455 "i386_parse.y"
- { (yyval.arg) = NULL; }
- break;
-
- case 25:
-#line 459 "i386_parse.y"
- {
- struct argument *runp = (yyvsp[(1) - (3)].arg);
- while (runp->next != NULL)
- runp = runp->next;
- runp->next = xmalloc (sizeof (struct argument));
- runp->next->name = combine ((yyvsp[(3) - (3)].name));
- runp->next->next = NULL;
- (yyval.arg) = (yyvsp[(1) - (3)].arg);
- }
- break;
-
- case 26:
-#line 469 "i386_parse.y"
- {
- (yyval.arg) = xmalloc (sizeof (struct argument));
- (yyval.arg)->name = combine ((yyvsp[(1) - (1)].name));
- (yyval.arg)->next = NULL;
- }
- break;
-
- case 27:
-#line 477 "i386_parse.y"
- {
- struct argname *runp = (yyvsp[(1) - (2)].name);
- while (runp->next != NULL)
- runp = runp->next;
- runp->next = (yyvsp[(2) - (2)].name);
- (yyval.name) = (yyvsp[(1) - (2)].name);
- }
- break;
-
- case 28:
-#line 485 "i386_parse.y"
- { (yyval.name) = (yyvsp[(1) - (1)].name); }
- break;
-
- case 29:
-#line 488 "i386_parse.y"
- {
- (yyval.name) = xmalloc (sizeof (struct argname));
- (yyval.name)->type = nfield;
- (yyval.name)->next = NULL;
-
- struct known_bitfield search;
- search.name = (yyvsp[(1) - (1)].str);
- struct known_bitfield **res;
- res = tfind (&search, &bitfields, bitfield_compare);
- if (res == NULL)
- {
- if (strcmp ((yyvsp[(1) - (1)].str), "ax") == 0)
- (yyval.name)->field = &ax_reg;
- else if (strcmp ((yyvsp[(1) - (1)].str), "dx") == 0)
- (yyval.name)->field = &dx_reg;
- else if (strcmp ((yyvsp[(1) - (1)].str), "es_di") == 0)
- (yyval.name)->field = &di_reg;
- else if (strcmp ((yyvsp[(1) - (1)].str), "ds_si") == 0)
- (yyval.name)->field = &si_reg;
- else if (strcmp ((yyvsp[(1) - (1)].str), "ds_bx") == 0)
- (yyval.name)->field = &bx_reg;
- else
- {
- error (0, 0, "%d: unknown bitfield '%s'",
- i386_lineno, search.name);
- (yyval.name)->field = NULL;
- }
- }
- else
- (yyval.name)->field = *res;
- }
- break;
-
- case 30:
-#line 520 "i386_parse.y"
- {
- (yyval.name) = xmalloc (sizeof (struct argname));
- (yyval.name)->type = string;
- (yyval.name)->next = NULL;
- (yyval.name)->str = xmalloc (2);
- (yyval.name)->str[0] = (yyvsp[(1) - (1)].ch);
- (yyval.name)->str[1] = '\0';
- }
- break;
-
- case 31:
-#line 529 "i386_parse.y"
- {
- (yyval.name) = xmalloc (sizeof (struct argname));
- (yyval.name)->type = string;
- (yyval.name)->next = NULL;
- (yyval.name)->str = (yyvsp[(1) - (1)].str);
- }
- break;
-
- case 32:
-#line 536 "i386_parse.y"
- {
- (yyval.name) = xmalloc (sizeof (struct argname));
- (yyval.name)->type = string;
- (yyval.name)->next = NULL;
- (yyval.name)->str = xmalloc (2);
- (yyval.name)->str[0] = ':';
- (yyval.name)->str[1] = '\0';
- }
- break;
-
-
-/* Line 1267 of yacc.c. */
-#line 1934 "i386_parse.c"
- default: break;
- }
- YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
-
- YYPOPSTACK (yylen);
- yylen = 0;
- YY_STACK_PRINT (yyss, yyssp);
-
- *++yyvsp = yyval;
-
-
- /* Now `shift' the result of the reduction. Determine what state
- that goes to, based on the state we popped back to and the rule
- number reduced by. */
-
- yyn = yyr1[yyn];
-
- yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
- if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
- yystate = yytable[yystate];
- else
- yystate = yydefgoto[yyn - YYNTOKENS];
-
- goto yynewstate;
-
-
-/*------------------------------------.
-| yyerrlab -- here on detecting error |
-`------------------------------------*/
-yyerrlab:
- /* If not already recovering from an error, report this error. */
- if (!yyerrstatus)
- {
- ++yynerrs;
-#if ! YYERROR_VERBOSE
- yyerror (YY_("syntax error"));
-#else
- {
- YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
- if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
- {
- YYSIZE_T yyalloc = 2 * yysize;
- if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
- yyalloc = YYSTACK_ALLOC_MAXIMUM;
- if (yymsg != yymsgbuf)
- YYSTACK_FREE (yymsg);
- yymsg = (char *) YYSTACK_ALLOC (yyalloc);
- if (yymsg)
- yymsg_alloc = yyalloc;
- else
- {
- yymsg = yymsgbuf;
- yymsg_alloc = sizeof yymsgbuf;
- }
- }
-
- if (0 < yysize && yysize <= yymsg_alloc)
- {
- (void) yysyntax_error (yymsg, yystate, yychar);
- yyerror (yymsg);
- }
- else
- {
- yyerror (YY_("syntax error"));
- if (yysize != 0)
- goto yyexhaustedlab;
- }
- }
-#endif
- }
-
-
-
- if (yyerrstatus == 3)
- {
- /* If just tried and failed to reuse look-ahead token after an
- error, discard it. */
-
- if (yychar <= YYEOF)
- {
- /* Return failure if at end of input. */
- if (yychar == YYEOF)
- YYABORT;
- }
- else
- {
- yydestruct ("Error: discarding",
- yytoken, &yylval);
- yychar = YYEMPTY;
- }
- }
-
- /* Else will try to reuse look-ahead token after shifting the error
- token. */
- goto yyerrlab1;
-
-
-/*---------------------------------------------------.
-| yyerrorlab -- error raised explicitly by YYERROR. |
-`---------------------------------------------------*/
-yyerrorlab:
-
- /* Pacify compilers like GCC when the user code never invokes
- YYERROR and the label yyerrorlab therefore never appears in user
- code. */
- if (/*CONSTCOND*/ 0)
- goto yyerrorlab;
-
- /* Do not reclaim the symbols of the rule which action triggered
- this YYERROR. */
- YYPOPSTACK (yylen);
- yylen = 0;
- YY_STACK_PRINT (yyss, yyssp);
- yystate = *yyssp;
- goto yyerrlab1;
-
-
-/*-------------------------------------------------------------.
-| yyerrlab1 -- common code for both syntax error and YYERROR. |
-`-------------------------------------------------------------*/
-yyerrlab1:
- yyerrstatus = 3; /* Each real token shifted decrements this. */
-
- for (;;)
- {
- yyn = yypact[yystate];
- if (yyn != YYPACT_NINF)
- {
- yyn += YYTERROR;
- if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
- {
- yyn = yytable[yyn];
- if (0 < yyn)
- break;
- }
- }
-
- /* Pop the current state because it cannot handle the error token. */
- if (yyssp == yyss)
- YYABORT;
-
-
- yydestruct ("Error: popping",
- yystos[yystate], yyvsp);
- YYPOPSTACK (1);
- yystate = *yyssp;
- YY_STACK_PRINT (yyss, yyssp);
- }
-
- if (yyn == YYFINAL)
- YYACCEPT;
-
- *++yyvsp = yylval;
-
-
- /* Shift the error token. */
- YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
-
- yystate = yyn;
- goto yynewstate;
-
-
-/*-------------------------------------.
-| yyacceptlab -- YYACCEPT comes here. |
-`-------------------------------------*/
-yyacceptlab:
- yyresult = 0;
- goto yyreturn;
-
-/*-----------------------------------.
-| yyabortlab -- YYABORT comes here. |
-`-----------------------------------*/
-yyabortlab:
- yyresult = 1;
- goto yyreturn;
-
-#ifndef yyoverflow
-/*-------------------------------------------------.
-| yyexhaustedlab -- memory exhaustion comes here. |
-`-------------------------------------------------*/
-yyexhaustedlab:
- yyerror (YY_("memory exhausted"));
- yyresult = 2;
- /* Fall through. */
-#endif
-
-yyreturn:
- if (yychar != YYEOF && yychar != YYEMPTY)
- yydestruct ("Cleanup: discarding lookahead",
- yytoken, &yylval);
- /* Do not reclaim the symbols of the rule which action triggered
- this YYABORT or YYACCEPT. */
- YYPOPSTACK (yylen);
- YY_STACK_PRINT (yyss, yyssp);
- while (yyssp != yyss)
- {
- yydestruct ("Cleanup: popping",
- yystos[*yyssp], yyvsp);
- YYPOPSTACK (1);
- }
-#ifndef yyoverflow
- if (yyss != yyssa)
- YYSTACK_FREE (yyss);
-#endif
-#if YYERROR_VERBOSE
- if (yymsg != yymsgbuf)
- YYSTACK_FREE (yymsg);
-#endif
- /* Make sure YYID is used. */
- return YYID (yyresult);
-}
-
-
-#line 546 "i386_parse.y"
-
-
-static void
-yyerror (const char *s)
-{
- error (0, 0, gettext ("while reading i386 CPU description: %s at line %d"),
- gettext (s), i386_lineno);
-}
-
-
-static int
-bitfield_compare (const void *p1, const void *p2)
-{
- struct known_bitfield *f1 = (struct known_bitfield *) p1;
- struct known_bitfield *f2 = (struct known_bitfield *) p2;
-
- return strcmp (f1->name, f2->name);
-}
-
-
-static void
-new_bitfield (char *name, unsigned long int num)
-{
- struct known_bitfield *newp = xmalloc (sizeof (struct known_bitfield));
- newp->name = name;
- newp->bits = num;
- newp->tmp = 0;
-
- if (tfind (newp, &bitfields, bitfield_compare) != NULL)
- {
- error (0, 0, "%d: duplicated definition of bitfield '%s'",
- i386_lineno, name);
- free (name);
- return;
- }
-
- if (tsearch (newp, &bitfields, bitfield_compare) == NULL)
- error (EXIT_FAILURE, errno, "%d: cannot insert new bitfield '%s'",
- i386_lineno, name);
-}
-
-
-/* Check that the number of bits is a multiple of 8. */
-static void
-check_bits (struct bitvalue *val)
-{
- struct bitvalue *runp = val;
- unsigned int total = 0;
-
- while (runp != NULL)
- {
- if (runp->type == zeroone)
- ++total;
- else if (runp->field == NULL)
- /* No sense doing anything, the field is not known. */
- return;
- else
- total += runp->field->bits;
-
- runp = runp->next;
- }
-
- if (total % 8 != 0)
- {
- struct obstack os;
- obstack_init (&os);
-
- while (val != NULL)
- {
- if (val->type == zeroone)
- obstack_printf (&os, "%u", val->value);
- else
- obstack_printf (&os, "{%s}", val->field->name);
- val = val->next;
- }
- obstack_1grow (&os, '\0');
-
- error (0, 0, "%d: field '%s' not a multiple of 8 bits in size",
- i386_lineno, (char *) obstack_finish (&os));
-
- obstack_free (&os, NULL);
- }
-}
-
-
-static int
-check_duplicates (struct bitvalue *val)
-{
- static int testcnt;
- ++testcnt;
-
- int result = 0;
- while (val != NULL)
- {
- if (val->type == field && val->field != NULL)
- {
- if (val->field->tmp == testcnt)
- {
- error (0, 0, "%d: bitfield '%s' used more than once",
- i386_lineno - 1, val->field->name);
- result = 1;
- }
- val->field->tmp = testcnt;
- }
-
- val = val->next;
- }
-
- return result;
-}
-
-
-static int
-check_argsdef (struct bitvalue *bitval, struct argument *args)
-{
- int result = 0;
-
- while (args != NULL)
- {
- for (struct argname *name = args->name; name != NULL; name = name->next)
- if (name->type == nfield && name->field != NULL
- && name->field != &ax_reg && name->field != &dx_reg
- && name->field != &di_reg && name->field != &si_reg
- && name->field != &bx_reg)
- {
- struct bitvalue *runp = bitval;
-
- while (runp != NULL)
- if (runp->type == field && runp->field == name->field)
- break;
- else
- runp = runp->next;
-
- if (runp == NULL)
- {
- error (0, 0, "%d: unknown bitfield '%s' used in output format",
- i386_lineno - 1, name->field->name);
- result = 1;
- }
- }
-
- args = args->next;
- }
-
- return result;
-}
-
-
-static int
-check_bitsused (struct bitvalue *bitval, struct known_bitfield *suffix,
- struct argument *args)
-{
- int result = 0;
-
- while (bitval != NULL)
- {
- if (bitval->type == field && bitval->field != NULL
- && bitval->field != suffix
- /* {w} is handled special. */
- && strcmp (bitval->field->name, "w") != 0)
- {
- struct argument *runp;
- for (runp = args; runp != NULL; runp = runp->next)
- {
- struct argname *name = runp->name;
-
- while (name != NULL)
- if (name->type == nfield && name->field == bitval->field)
- break;
- else
- name = name->next;
-
- if (name != NULL)
- break;
- }
-
-#if 0
- if (runp == NULL)
- {
- error (0, 0, "%d: bitfield '%s' not used",
- i386_lineno - 1, bitval->field->name);
- result = 1;
- }
-#endif
- }
-
- bitval = bitval->next;
- }
-
- return result;
-}
-
-
-static struct argname *
-combine (struct argname *name)
-{
- struct argname *last_str = NULL;
- for (struct argname *runp = name; runp != NULL; runp = runp->next)
- {
- if (runp->type == string)
- {
- if (last_str == NULL)
- last_str = runp;
- else
- {
- last_str->str = xrealloc (last_str->str,
- strlen (last_str->str)
- + strlen (runp->str) + 1);
- strcat (last_str->str, runp->str);
- last_str->next = runp->next;
- }
- }
- else
- last_str = NULL;
- }
- return name;
-}
-
-
-#define obstack_grow_str(ob, str) obstack_grow (ob, str, strlen (str))
-
-
-static void
-fillin_arg (struct bitvalue *bytes, struct argname *name,
- struct instruction *instr, int n)
-{
- static struct obstack ob;
- static int initialized;
- if (! initialized)
- {
- initialized = 1;
- obstack_init (&ob);
- }
-
- struct argname *runp = name;
- int cnt = 0;
- while (runp != NULL)
- {
- /* We ignore strings in the function name. */
- if (runp->type == string)
- {
- if (instr->operands[n].str != NULL)
- error (EXIT_FAILURE, 0,
- "%d: cannot have more than one string parameter",
- i386_lineno - 1);
-
- instr->operands[n].str = runp->str;
- }
- else
- {
- assert (runp->type == nfield);
-
- /* Construct the function name. */
- if (cnt++ > 0)
- obstack_1grow (&ob, '$');
-
- if (runp->field == NULL)
- /* Add some string which contains invalid characters. */
- obstack_grow_str (&ob, "!!!INVALID!!!");
- else
- {
- char *fieldname = runp->field->name;
-
- struct synonym search = { .from = fieldname };
-
- struct synonym **res = tfind (&search, &synonyms, compare_syn);
- if (res != NULL)
- fieldname = (*res)->to;
-
- obstack_grow_str (&ob, fieldname);
- }
-
- /* Now compute the bit offset of the field. */
- struct bitvalue *b = bytes;
- int bitoff = 0;
- if (runp->field != NULL)
- while (b != NULL)
- {
- if (b->type == field && b->field != NULL)
- {
- if (strcmp (b->field->name, runp->field->name) == 0)
- break;
- bitoff += b->field->bits;
- }
- else
- ++bitoff;
-
- b = b->next;
- }
- if (instr->operands[n].off1 == 0)
- instr->operands[n].off1 = bitoff;
- else if (instr->operands[n].off2 == 0)
- instr->operands[n].off2 = bitoff;
- else if (instr->operands[n].off3 == 0)
- instr->operands[n].off3 = bitoff;
- else
- error (EXIT_FAILURE, 0,
- "%d: cannot have more than three fields in parameter",
- i386_lineno - 1);
-
- if (runp->field != NULL
- && strncasecmp (runp->field->name, "mod", 3) == 0)
- instr->modrm = 1;
- }
-
- runp = runp->next;
- }
- if (obstack_object_size (&ob) == 0)
- obstack_grow_str (&ob, "string");
- obstack_1grow (&ob, '\0');
- char *fct = obstack_finish (&ob);
-
- instr->operands[n].fct = fct;
-}
-
-
-#if 0
-static void
-nameout (const void *nodep, VISIT value, int level)
-{
- if (value == leaf || value == postorder)
- printf (" %s\n", *(const char **) nodep);
-}
-#endif
-
-
-static int
-compare_argstring (const void *p1, const void *p2)
-{
- const struct argstring *a1 = (const struct argstring *) p1;
- const struct argstring *a2 = (const struct argstring *) p2;
-
- return strcmp (a1->str, a2->str);
-}
-
-
-static int maxoff[3][3];
-static int minoff[3][3] = { { 1000, 1000, 1000 },
- { 1000, 1000, 1000 },
- { 1000, 1000, 1000 } };
-static int nbitoff[3][3];
-static void *fct_names[3];
-static int nbitfct[3];
-static int nbitsuf;
-static void *strs[3];
-static int nbitstr[3];
-static int total_bits = 2; // Already counted the rep/repe bits.
-
-static void
-find_numbers (void)
-{
- int nfct_names[3] = { 0, 0, 0 };
- int nstrs[3] = { 0, 0, 0 };
-
- /* We reverse the order of the instruction list while processing it.
- Later phases need it in the order in which the input file has
- them. */
- struct instruction *reversed = NULL;
-
- struct instruction *runp = instructions;
- while (runp != NULL)
- {
- for (int i = 0; i < 3; ++i)
- if (runp->operands[i].fct != NULL)
- {
- struct argstring search = { .str = runp->operands[i].fct };
- if (tfind (&search, &fct_names[i], compare_argstring) == NULL)
- {
- struct argstring *newp = xmalloc (sizeof (*newp));
- newp->str = runp->operands[i].fct;
- newp->idx = 0;
- if (tsearch (newp, &fct_names[i], compare_argstring) == NULL)
- error (EXIT_FAILURE, errno, "tsearch");
- ++nfct_names[i];
- }
-
- if (runp->operands[i].str != NULL)
- {
- search.str = runp->operands[i].str;
- if (tfind (&search, &strs[i], compare_argstring) == NULL)
- {
- struct argstring *newp = xmalloc (sizeof (*newp));
- newp->str = runp->operands[i].str;
- newp->idx = 0;
- if (tsearch (newp, &strs[i], compare_argstring) == NULL)
- error (EXIT_FAILURE, errno, "tsearch");
- ++nstrs[i];
- }
- }
-
- maxoff[i][0] = MAX (maxoff[i][0], runp->operands[i].off1);
- maxoff[i][1] = MAX (maxoff[i][1], runp->operands[i].off2);
- maxoff[i][2] = MAX (maxoff[i][2], runp->operands[i].off3);
-
- if (runp->operands[i].off1 > 0)
- minoff[i][0] = MIN (minoff[i][0], runp->operands[i].off1);
- if (runp->operands[i].off2 > 0)
- minoff[i][1] = MIN (minoff[i][1], runp->operands[i].off2);
- if (runp->operands[i].off3 > 0)
- minoff[i][2] = MIN (minoff[i][2], runp->operands[i].off3);
- }
-
- struct instruction *old = runp;
- runp = runp->next;
-
- old->next = reversed;
- reversed = old;
- }
- instructions = reversed;
-
- int d;
- int c;
- for (int i = 0; i < 3; ++i)
- {
- // printf ("min1 = %d, min2 = %d, min3 = %d\n", minoff[i][0], minoff[i][1], minoff[i][2]);
- // printf ("max1 = %d, max2 = %d, max3 = %d\n", maxoff[i][0], maxoff[i][1], maxoff[i][2]);
-
- if (minoff[i][0] == 1000)
- nbitoff[i][0] = 0;
- else
- {
- nbitoff[i][0] = 1;
- d = maxoff[i][0] - minoff[i][0];
- c = 1;
- while (c < d)
- {
- ++nbitoff[i][0];
- c *= 2;
- }
- total_bits += nbitoff[i][0];
- }
-
- if (minoff[i][1] == 1000)
- nbitoff[i][1] = 0;
- else
- {
- nbitoff[i][1] = 1;
- d = maxoff[i][1] - minoff[i][1];
- c = 1;
- while (c < d)
- {
- ++nbitoff[i][1];
- c *= 2;
- }
- total_bits += nbitoff[i][1];
- }
-
- if (minoff[i][2] == 1000)
- nbitoff[i][2] = 0;
- else
- {
- nbitoff[i][2] = 1;
- d = maxoff[i][2] - minoff[i][2];
- c = 1;
- while (c < d)
- {
- ++nbitoff[i][2];
- c *= 2;
- }
- total_bits += nbitoff[i][2];
- }
- // printf ("off1 = %d, off2 = %d, off3 = %d\n", nbitoff[i][0], nbitoff[i][1], nbitoff[i][2]);
-
- nbitfct[i] = 1;
- d = nfct_names[i];
- c = 1;
- while (c < d)
- {
- ++nbitfct[i];
- c *= 2;
- }
- total_bits += nbitfct[i];
- // printf ("%d fct[%d], %d bits\n", nfct_names[i], i, nbitfct[i]);
-
- if (nstrs[i] != 0)
- {
- nbitstr[i] = 1;
- d = nstrs[i];
- c = 1;
- while (c < d)
- {
- ++nbitstr[i];
- c *= 2;
- }
- total_bits += nbitstr[i];
- }
-
- // twalk (fct_names[i], nameout);
- }
-
- nbitsuf = 0;
- d = nsuffixes;
- c = 1;
- while (c < d)
- {
- ++nbitsuf;
- c *= 2;
- }
- total_bits += nbitsuf;
- // printf ("%d suffixes, %d bits\n", nsuffixes, nbitsuf);
-}
-
-
-static int
-compare_syn (const void *p1, const void *p2)
-{
- const struct synonym *s1 = (const struct synonym *) p1;
- const struct synonym *s2 = (const struct synonym *) p2;
-
- return strcmp (s1->from, s2->from);
-}
-
-
-static int
-compare_suf (const void *p1, const void *p2)
-{
- const struct suffix *s1 = (const struct suffix *) p1;
- const struct suffix *s2 = (const struct suffix *) p2;
-
- return strcmp (s1->name, s2->name);
-}
-
-
-static int count_op_str;
-static int off_op_str;
-static void
-print_op_str (const void *nodep, VISIT value,
- int level __attribute__ ((unused)))
-{
- if (value == leaf || value == postorder)
- {
- const char *str = (*(struct argstring **) nodep)->str;
- fprintf (outfile, "%s\n \"%s",
- count_op_str == 0 ? "" : "\\0\"", str);
- (*(struct argstring **) nodep)->idx = ++count_op_str;
- (*(struct argstring **) nodep)->off = off_op_str;
- off_op_str += strlen (str) + 1;
- }
-}
-
-
-static void
-print_op_str_idx (const void *nodep, VISIT value,
- int level __attribute__ ((unused)))
-{
- if (value == leaf || value == postorder)
- printf (" %d,\n", (*(struct argstring **) nodep)->off);
-}
-
-
-static void
-print_op_fct (const void *nodep, VISIT value,
- int level __attribute__ ((unused)))
-{
- if (value == leaf || value == postorder)
- {
- fprintf (outfile, " FCT_%s,\n", (*(struct argstring **) nodep)->str);
- (*(struct argstring **) nodep)->idx = ++count_op_str;
- }
-}
-
-
-#if NMNES < 2
-# error "bogus NMNES value"
-#endif
-
-static void
-instrtable_out (void)
-{
- find_numbers ();
-
-#if 0
- create_mnemonic_table ();
-
- fprintf (outfile, "#define MNEMONIC_BITS %zu\n", best_mnemonic_bits);
-#else
- fprintf (outfile, "#define MNEMONIC_BITS %ld\n",
- lrint (ceil (log2 (NMNES))));
-#endif
- fprintf (outfile, "#define SUFFIX_BITS %d\n", nbitsuf);
- for (int i = 0; i < 3; ++i)
- {
- fprintf (outfile, "#define FCT%d_BITS %d\n", i + 1, nbitfct[i]);
- if (nbitstr[i] != 0)
- fprintf (outfile, "#define STR%d_BITS %d\n", i + 1, nbitstr[i]);
- fprintf (outfile, "#define OFF%d_1_BITS %d\n", i + 1, nbitoff[i][0]);
- fprintf (outfile, "#define OFF%d_1_BIAS %d\n", i + 1, minoff[i][0]);
- if (nbitoff[i][1] != 0)
- {
- fprintf (outfile, "#define OFF%d_2_BITS %d\n", i + 1, nbitoff[i][1]);
- fprintf (outfile, "#define OFF%d_2_BIAS %d\n", i + 1, minoff[i][1]);
- }
- if (nbitoff[i][2] != 0)
- {
- fprintf (outfile, "#define OFF%d_3_BITS %d\n", i + 1, nbitoff[i][2]);
- fprintf (outfile, "#define OFF%d_3_BIAS %d\n", i + 1, minoff[i][2]);
- }
- }
-
- fputs ("\n#include <i386_data.h>\n\n", outfile);
-
-
-#define APPEND(a, b) APPEND_ (a, b)
-#define APPEND_(a, b) a##b
-#define EMIT_SUFFIX(suf) \
- fprintf (outfile, "#define suffix_%s %d\n", #suf, APPEND (suffix_, suf))
- EMIT_SUFFIX (none);
- EMIT_SUFFIX (w);
- EMIT_SUFFIX (w0);
- EMIT_SUFFIX (W);
- EMIT_SUFFIX (tttn);
- EMIT_SUFFIX (D);
- EMIT_SUFFIX (w1);
- EMIT_SUFFIX (W1);
-
- fputc_unlocked ('\n', outfile);
-
- for (int i = 0; i < 3; ++i)
- {
- /* Functions. */
- count_op_str = 0;
- fprintf (outfile, "static const opfct_t op%d_fct[] =\n{\n NULL,\n",
- i + 1);
- twalk (fct_names[i], print_op_fct);
- fputs ("};\n", outfile);
-
- /* The operand strings. */
- if (nbitstr[i] != 0)
- {
- count_op_str = 0;
- off_op_str = 0;
- fprintf (outfile, "static const char op%d_str[] =", i + 1);
- twalk (strs[i], print_op_str);
- fputs ("\";\n", outfile);
-
- fprintf (outfile, "static const uint8_t op%d_str_idx[] = {\n",
- i + 1);
- twalk (strs[i], print_op_str_idx);
- fputs ("};\n", outfile);
- }
- }
-
-
- fputs ("static const struct instr_enc instrtab[] =\n{\n", outfile);
- struct instruction *instr;
- for (instr = instructions; instr != NULL; instr = instr->next)
- {
- fputs (" {", outfile);
- if (instr->mnemonic == (void *) -1l)
- fputs (" .mnemonic = MNE_INVALID,", outfile);
- else
- fprintf (outfile, " .mnemonic = MNE_%s,", instr->mnemonic);
- fprintf (outfile, " .rep = %d,", instr->rep);
- fprintf (outfile, " .repe = %d,", instr->repe);
- fprintf (outfile, " .suffix = %d,", instr->suffix);
- fprintf (outfile, " .modrm = %d,", instr->modrm);
-
- for (int i = 0; i < 3; ++i)
- {
- int idx = 0;
- if (instr->operands[i].fct != NULL)
- {
- struct argstring search = { .str = instr->operands[i].fct };
- struct argstring **res = tfind (&search, &fct_names[i],
- compare_argstring);
- assert (res != NULL);
- idx = (*res)->idx;
- }
- fprintf (outfile, " .fct%d = %d,", i + 1, idx);
-
- idx = 0;
- if (instr->operands[i].str != NULL)
- {
- struct argstring search = { .str = instr->operands[i].str };
- struct argstring **res = tfind (&search, &strs[i],
- compare_argstring);
- assert (res != NULL);
- idx = (*res)->idx;
- }
- if (nbitstr[i] != 0)
- fprintf (outfile, " .str%d = %d,", i + 1, idx);
-
- fprintf (outfile, " .off%d_1 = %d,", i + 1,
- MAX (0, instr->operands[i].off1 - minoff[i][0]));
-
- if (nbitoff[i][1] != 0)
- fprintf (outfile, " .off%d_2 = %d,", i + 1,
- MAX (0, instr->operands[i].off2 - minoff[i][1]));
-
- if (nbitoff[i][2] != 0)
- fprintf (outfile, " .off%d_3 = %d,", i + 1,
- MAX (0, instr->operands[i].off3 - minoff[i][2]));
- }
-
- fputs (" },\n", outfile);
- }
- fputs ("};\n", outfile);
-
- fputs ("static const uint8_t match_data[] =\n{\n", outfile);
- size_t cnt = 0;
- for (instr = instructions; instr != NULL; instr = instr->next, ++cnt)
- {
- /* First count the number of bytes. */
- size_t totalbits = 0;
- size_t zerobits = 0;
- struct bitvalue *b = instr->bytes;
- while (b != NULL)
- {
- if (b->type == zeroone)
- {
- ++totalbits;
- zerobits = 0;
- }
- else
- {
- totalbits += b->field->bits;
- /* We must always count the mod/rm byte. */
- if (strncasecmp (b->field->name, "mod", 3) == 0)
- zerobits = 0;
- else
- zerobits += b->field->bits;
- }
- b = b->next;
- }
- size_t nbytes = (totalbits - zerobits + 7) / 8;
- assert (nbytes > 0);
-
- fprintf (outfile, " %#zx,", nbytes);
-
- /* Now create the mask and byte values. */
- uint8_t byte = 0;
- uint8_t mask = 0;
- int nbits = 0;
- b = instr->bytes;
- while (b != NULL)
- {
- if (b->type == zeroone)
- {
- byte = (byte << 1) | b->value;
- mask = (mask << 1) | 1;
- if (++nbits == 8)
- {
- fprintf (outfile, " %#" PRIx8 ", %#" PRIx8 ",", mask, byte);
- byte = mask = nbits = 0;
- if (--nbytes == 0)
- break;
- }
- }
- else
- {
- unsigned long int remaining = b->field->bits;
- while (nbits + remaining > 8)
- {
- fprintf (outfile, " %#" PRIx8 ", %#" PRIx8 ",",
- mask << (8 - nbits), byte << (8 - nbits));
- remaining = nbits + remaining - 8;
- byte = mask = nbits = 0;
- if (--nbytes == 0)
- break;
- }
- byte <<= remaining;
- mask <<= remaining;
- nbits += remaining;
- if (nbits == 8)
- {
- fprintf (outfile, " %#" PRIx8 ", %#" PRIx8 ",", mask, byte);
- byte = mask = nbits = 0;
- if (--nbytes == 0)
- break;
- }
- }
- b = b->next;
- }
-
- fputc_unlocked ('\n', outfile);
- }
- fputs ("};\n", outfile);
-}
-
-
-#if 0
-static size_t mnemonic_maxlen;
-static size_t mnemonic_minlen;
-static size_t
-which_chars (const char *str[], size_t nstr)
-{
- char used_char[256];
- memset (used_char, '\0', sizeof (used_char));
- mnemonic_maxlen = 0;
- mnemonic_minlen = 10000;
- for (size_t cnt = 0; cnt < nstr; ++cnt)
- {
- const unsigned char *cp = (const unsigned char *) str[cnt];
- mnemonic_maxlen = MAX (mnemonic_maxlen, strlen ((char *) cp));
- mnemonic_minlen = MIN (mnemonic_minlen, strlen ((char *) cp));
- do
- used_char[*cp++] = 1;
- while (*cp != '\0');
- }
- size_t nused_char = 0;
- for (size_t cnt = 0; cnt < 256; ++cnt)
- if (used_char[cnt] != 0)
- ++nused_char;
- return nused_char;
-}
-
-
-static const char **mnemonic_strs;
-static size_t nmnemonic_strs;
-static void
-add_mnemonics (const void *nodep, VISIT value,
- int level __attribute__ ((unused)))
-{
- if (value == leaf || value == postorder)
- mnemonic_strs[nmnemonic_strs++] = *(const char **) nodep;
-}
-
-
-struct charfreq
-{
- char ch;
- int freq;
-};
-static struct charfreq pfxfreq[256];
-static struct charfreq sfxfreq[256];
-
-
-static int
-compare_freq (const void *p1, const void *p2)
-{
- const struct charfreq *c1 = (const struct charfreq *) p1;
- const struct charfreq *c2 = (const struct charfreq *) p2;
-
- if (c1->freq > c2->freq)
- return -1;
- if (c1->freq < c2->freq)
- return 1;
- return 0;
-}
-
-
-static size_t
-compute_pfxfreq (const char *str[], size_t nstr)
-{
- memset (pfxfreq, '\0', sizeof (pfxfreq));
-
- for (size_t i = 0; i < nstr; ++i)
- pfxfreq[i].ch = i;
-
- for (size_t i = 0; i < nstr; ++i)
- ++pfxfreq[*((const unsigned char *) str[i])].freq;
-
- qsort (pfxfreq, 256, sizeof (struct charfreq), compare_freq);
-
- size_t n = 0;
- while (n < 256 && pfxfreq[n].freq != 0)
- ++n;
- return n;
-}
-
-
-struct strsnlen
-{
- const char *str;
- size_t len;
-};
-
-static size_t
-compute_sfxfreq (size_t nstr, struct strsnlen *strsnlen)
-{
- memset (sfxfreq, '\0', sizeof (sfxfreq));
-
- for (size_t i = 0; i < nstr; ++i)
- sfxfreq[i].ch = i;
-
- for (size_t i = 0; i < nstr; ++i)
- ++sfxfreq[((const unsigned char *) strchrnul (strsnlen[i].str, '\0'))[-1]].freq;
-
- qsort (sfxfreq, 256, sizeof (struct charfreq), compare_freq);
-
- size_t n = 0;
- while (n < 256 && sfxfreq[n].freq != 0)
- ++n;
- return n;
-}
-
-
-static void
-create_mnemonic_table (void)
-{
- mnemonic_strs = xmalloc (nmnemonics * sizeof (char *));
-
- twalk (mnemonics, add_mnemonics);
-
- (void) which_chars (mnemonic_strs, nmnemonic_strs);
-
- size_t best_so_far = 100000000;
- char *best_prefix = NULL;
- char *best_suffix = NULL;
- char *best_table = NULL;
- size_t best_table_size = 0;
- size_t best_table_bits = 0;
- size_t best_prefix_bits = 0;
-
- /* We can precompute the prefix characters. */
- size_t npfx_char = compute_pfxfreq (mnemonic_strs, nmnemonic_strs);
-
- /* Compute best size for string representation including explicit NUL. */
- for (size_t pfxbits = 0; (1u << pfxbits) < 2 * npfx_char; ++pfxbits)
- {
- char prefix[1 << pfxbits];
- size_t i;
- for (i = 0; i < (1u << pfxbits) - 1; ++i)
- prefix[i] = pfxfreq[i].ch;
- prefix[i] = '\0';
-
- struct strsnlen strsnlen[nmnemonic_strs];
-
- for (i = 0; i < nmnemonic_strs; ++i)
- {
- if (strchr (prefix, *mnemonic_strs[i]) != NULL)
- strsnlen[i].str = mnemonic_strs[i] + 1;
- else
- strsnlen[i].str = mnemonic_strs[i];
- strsnlen[i].len = strlen (strsnlen[i].str);
- }
-
- /* With the prefixes gone, try to combine strings. */
- size_t nstrsnlen = 1;
- for (i = 1; i < nmnemonic_strs; ++i)
- {
- size_t j;
- for (j = 0; j < nstrsnlen; ++j)
- if (strsnlen[i].len > strsnlen[j].len
- && strcmp (strsnlen[j].str,
- strsnlen[i].str + (strsnlen[i].len
- - strsnlen[j].len)) == 0)
- {
- strsnlen[j] = strsnlen[i];
- break;
- }
- else if (strsnlen[i].len < strsnlen[j].len
- && strcmp (strsnlen[i].str,
- strsnlen[j].str + (strsnlen[j].len
- - strsnlen[i].len)) == 0)
- break;
-;
- if (j == nstrsnlen)
- strsnlen[nstrsnlen++] = strsnlen[i];
- }
-
- size_t nsfx_char = compute_sfxfreq (nstrsnlen, strsnlen);
-
- for (size_t sfxbits = 0; (1u << sfxbits) < 2 * nsfx_char; ++sfxbits)
- {
- char suffix[1 << sfxbits];
-
- for (i = 0; i < (1u << sfxbits) - 1; ++i)
- suffix[i] = sfxfreq[i].ch;
- suffix[i] = '\0';
-
- size_t newlen[nstrsnlen];
-
- for (i = 0; i < nstrsnlen; ++i)
- if (strchr (suffix, strsnlen[i].str[strsnlen[i].len - 1]) != NULL)
- newlen[i] = strsnlen[i].len - 1;
- else
- newlen[i] = strsnlen[i].len;
-
- char charused[256];
- memset (charused, '\0', sizeof (charused));
- size_t ncharused = 0;
-
- const char *tablestr[nstrsnlen];
- size_t ntablestr = 1;
- tablestr[0] = strsnlen[0].str;
- size_t table = newlen[0] + 1;
- for (i = 1; i < nstrsnlen; ++i)
- {
- size_t j;
- for (j = 0; j < ntablestr; ++j)
- if (newlen[i] > newlen[j]
- && memcmp (tablestr[j],
- strsnlen[i].str + (newlen[i] - newlen[j]),
- newlen[j]) == 0)
- {
- table += newlen[i] - newlen[j];
- tablestr[j] = strsnlen[i].str;
- newlen[j] = newlen[i];
- break;
- }
- else if (newlen[i] < newlen[j]
- && memcmp (strsnlen[i].str,
- tablestr[j] + (newlen[j] - newlen[i]),
- newlen[i]) == 0)
- break;
-
- if (j == ntablestr)
- {
- table += newlen[i] + 1;
- tablestr[ntablestr] = strsnlen[i].str;
- newlen[ntablestr] = newlen[i];
-
- ++ntablestr;
- }
-
- for (size_t x = 0; x < newlen[j]; ++x)
- if (charused[((const unsigned char *) tablestr[j])[x]]++ == 0)
- ++ncharused;
- }
-
- size_t ncharused_bits = 0;
- i = 1;
- while (i < ncharused)
- {
- i *= 2;
- ++ncharused_bits;
- }
-
- size_t table_bits = 0;
- i = 1;
- while (i < table)
- {
- i *= 2;
- ++table_bits;
- }
-
- size_t mnemonic_bits = table_bits + pfxbits + sfxbits;
- size_t new_total = (((table + 7) / 8) * ncharused_bits + ncharused
- + (pfxbits == 0 ? 0 : (1 << pfxbits) - 1)
- + (sfxbits == 0 ? 0 : (1 << sfxbits) - 1)
- + (((total_bits + mnemonic_bits + 7) / 8)
- * ninstructions));
-
- if (new_total < best_so_far)
- {
- best_so_far = new_total;
- best_mnemonic_bits = mnemonic_bits;
-
- free (best_suffix);
- best_suffix = xstrdup (suffix);
-
- free (best_prefix);
- best_prefix = xstrdup (prefix);
- best_prefix_bits = pfxbits;
-
- best_table_size = table;
- best_table_bits = table_bits;
- char *cp = best_table = xrealloc (best_table, table);
- for (i = 0; i < ntablestr; ++i)
- {
- assert (cp + newlen[i] + 1 <= best_table + table);
- cp = mempcpy (cp, tablestr[i], newlen[i]);
- *cp++ = '\0';
- }
- assert (cp == best_table + table);
- }
- }
- }
-
- fputs ("static const char mnemonic_table[] =\n\"", outfile);
- for (size_t i = 0; i < best_table_size; ++i)
- {
- if (((i + 1) % 60) == 0)
- fputs ("\"\n\"", outfile);
- if (!isascii (best_table[i]) || !isprint (best_table[i]))
- fprintf (outfile, "\\%03o", best_table[i]);
- else
- fputc (best_table[i], outfile);
- }
- fputs ("\";\n", outfile);
-
- if (best_prefix[0] != '\0')
- fprintf (outfile,
- "static const char prefix[%zu] = \"%s\";\n"
- "#define PREFIXCHAR_BITS %zu\n",
- strlen (best_prefix), best_prefix, best_prefix_bits);
- else
- fputs ("#define NO_PREFIX\n", outfile);
-
- if (best_suffix[0] != '\0')
- fprintf (outfile, "static const char suffix[%zu] = \"%s\";\n",
- strlen (best_suffix), best_suffix);
- else
- fputs ("#define NO_SUFFIX\n", outfile);
-
- for (size_t i = 0; i < nmnemonic_strs; ++i)
- {
- const char *mne = mnemonic_strs[i];
-
- size_t pfxval = 0;
- char *cp = strchr (best_prefix, *mne);
- if (cp != NULL)
- {
- pfxval = 1 + (cp - best_prefix);
- ++mne;
- }
-
- size_t l = strlen (mne);
-
- size_t sfxval = 0;
- cp = strchr (best_suffix, mne[l - 1]);
- if (cp != NULL)
- {
- sfxval = 1 + (cp - best_suffix);
- --l;
- }
-
- char *off = memmem (best_table, best_table_size, mne, l);
- while (off[l] != '\0')
- {
- off = memmem (off + 1, best_table_size, mne, l);
- assert (off != NULL);
- }
-
- fprintf (outfile, "#define MNE_%s %#zx\n",
- mnemonic_strs[i],
- (off - best_table)
- + ((pfxval + (sfxval << best_prefix_bits)) << best_table_bits));
- }
-}
-#endif
-
diff --git a/libcpu/i386_parse.h b/libcpu/i386_parse.h
deleted file mode 100644
index 3a9219f..0000000
--- a/libcpu/i386_parse.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/* A Bison parser, made by GNU Bison 2.3. */
-
-/* Skeleton interface for Bison's Yacc-like parsers in C
-
- Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
- Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program 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 General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
-/* As a special exception, you may create a larger work that contains
- part or all of the Bison parser skeleton and distribute that work
- under terms of your choice, so long as that work isn't itself a
- parser generator using the skeleton or a modified version thereof
- as a parser skeleton. Alternatively, if you modify or redistribute
- the parser skeleton itself, you may (at your option) remove this
- special exception, which will cause the skeleton and the resulting
- Bison output files to be licensed under the GNU General Public
- License without this special exception.
-
- This special exception was added by the Free Software Foundation in
- version 2.2 of Bison. */
-
-/* Tokens. */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
- /* Put the tokens into the symbol table, so that GDB and other debuggers
- know about them. */
- enum yytokentype {
- kMASK = 258,
- kPREFIX = 259,
- kSUFFIX = 260,
- kSYNONYM = 261,
- kID = 262,
- kNUMBER = 263,
- kPERCPERC = 264,
- kBITFIELD = 265,
- kCHAR = 266,
- kSPACE = 267
- };
-#endif
-/* Tokens. */
-#define kMASK 258
-#define kPREFIX 259
-#define kSUFFIX 260
-#define kSYNONYM 261
-#define kID 262
-#define kNUMBER 263
-#define kPERCPERC 264
-#define kBITFIELD 265
-#define kCHAR 266
-#define kSPACE 267
-
-
-
-
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
-#line 213 "i386_parse.y"
-{
- unsigned long int num;
- char *str;
- char ch;
- struct known_bitfield *field;
- struct bitvalue *bit;
- struct argname *name;
- struct argument *arg;
-}
-/* Line 1489 of yacc.c. */
-#line 83 "i386_parse.h"
- YYSTYPE;
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
-# define YYSTYPE_IS_TRIVIAL 1
-#endif
-
-extern YYSTYPE i386_lval;
-
diff --git a/libcpu/i386_parse.y b/libcpu/i386_parse.y
deleted file mode 100644
index b3a684d..0000000
--- a/libcpu/i386_parse.y
+++ /dev/null
@@ -1,1667 +0,0 @@
-%{
-/* Parser for i386 CPU description.
- Copyright (C) 2004, 2005, 2007, 2008 Red Hat, Inc.
- Written by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <ctype.h>
-#include <errno.h>
-#include <error.h>
-#include <inttypes.h>
-#include <libintl.h>
-#include <math.h>
-#include <obstack.h>
-#include <search.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/param.h>
-
-#include <system.h>
-
-#define obstack_chunk_alloc xmalloc
-#define obstack_chunk_free free
-
-/* The error handler. */
-static void yyerror (const char *s);
-
-extern int yylex (void);
-extern int i386_lineno;
-extern char *infname;
-
-
-struct known_bitfield
-{
- char *name;
- unsigned long int bits;
- int tmp;
-};
-
-
-struct bitvalue
-{
- enum bittype { zeroone, field, failure } type;
- union
- {
- unsigned int value;
- struct known_bitfield *field;
- };
- struct bitvalue *next;
-};
-
-
-struct argname
-{
- enum nametype { string, nfield } type;
- union
- {
- char *str;
- struct known_bitfield *field;
- };
- struct argname *next;
-};
-
-
-struct argument
-{
- struct argname *name;
- struct argument *next;
-};
-
-
-struct instruction
-{
- /* The byte encoding. */
- struct bitvalue *bytes;
-
- /* Prefix possible. */
- int repe;
- int rep;
-
- /* Mnemonic. */
- char *mnemonic;
-
- /* Suffix. */
- enum { suffix_none = 0, suffix_w, suffix_w0, suffix_W, suffix_tttn,
- suffix_w1, suffix_W1, suffix_D } suffix;
-
- /* Flag set if modr/m is used. */
- int modrm;
-
- /* Operands. */
- struct operand
- {
- char *fct;
- char *str;
- int off1;
- int off2;
- int off3;
- } operands[3];
-
- struct instruction *next;
-};
-
-
-struct synonym
-{
- char *from;
- char *to;
-};
-
-
-struct suffix
-{
- char *name;
- int idx;
-};
-
-
-struct argstring
-{
- char *str;
- int idx;
- int off;
-};
-
-
-static struct known_bitfield ax_reg =
- {
- .name = "ax", .bits = 0, .tmp = 0
- };
-
-static struct known_bitfield dx_reg =
- {
- .name = "dx", .bits = 0, .tmp = 0
- };
-
-static struct known_bitfield di_reg =
- {
- .name = "es_di", .bits = 0, .tmp = 0
- };
-
-static struct known_bitfield si_reg =
- {
- .name = "ds_si", .bits = 0, .tmp = 0
- };
-
-static struct known_bitfield bx_reg =
- {
- .name = "ds_bx", .bits = 0, .tmp = 0
- };
-
-
-static int bitfield_compare (const void *p1, const void *p2);
-static void new_bitfield (char *name, unsigned long int num);
-static void check_bits (struct bitvalue *value);
-static int check_duplicates (struct bitvalue *val);
-static int check_argsdef (struct bitvalue *bitval, struct argument *args);
-static int check_bitsused (struct bitvalue *bitval,
- struct known_bitfield *suffix,
- struct argument *args);
-static struct argname *combine (struct argname *name);
-static void fillin_arg (struct bitvalue *bytes, struct argname *name,
- struct instruction *instr, int n);
-static void find_numbers (void);
-static int compare_syn (const void *p1, const void *p2);
-static int compare_suf (const void *p1, const void *p2);
-static void instrtable_out (void);
-#if 0
-static void create_mnemonic_table (void);
-#endif
-
-static void *bitfields;
-static struct instruction *instructions;
-static size_t ninstructions;
-static void *synonyms;
-static void *suffixes;
-static int nsuffixes;
-static void *mnemonics;
-size_t nmnemonics;
-extern FILE *outfile;
-
-/* Number of bits used mnemonics. */
-#if 0
-static size_t best_mnemonic_bits;
-#endif
-%}
-
-%union {
- unsigned long int num;
- char *str;
- char ch;
- struct known_bitfield *field;
- struct bitvalue *bit;
- struct argname *name;
- struct argument *arg;
-}
-
-%token kMASK
-%token kPREFIX
-%token kSUFFIX
-%token kSYNONYM
-%token <str> kID
-%token <num> kNUMBER
-%token kPERCPERC
-%token <str> kBITFIELD
-%token <ch> kCHAR
-%token kSPACE
-
-%type <bit> bit byte bytes
-%type <field> bitfieldopt
-%type <name> argcomp arg
-%type <arg> args optargs
-
-%defines
-
-%%
-
-spec: masks kPERCPERC '\n' instrs
- {
- if (error_message_count != 0)
- error (EXIT_FAILURE, 0,
- "terminated due to previous error");
-
- instrtable_out ();
- }
- ;
-
-masks: masks '\n' mask
- | mask
- ;
-
-mask: kMASK kBITFIELD kNUMBER
- { new_bitfield ($2, $3); }
- | kPREFIX kBITFIELD
- { new_bitfield ($2, -1); }
- | kSUFFIX kBITFIELD
- { new_bitfield ($2, -2); }
- | kSYNONYM kBITFIELD kBITFIELD
- {
- struct synonym *newp = xmalloc (sizeof (*newp));
- newp->from = $2;
- newp->to = $3;
- if (tfind (newp, &synonyms, compare_syn) != NULL)
- error (0, 0,
- "%d: duplicate definition for synonym '%s'",
- i386_lineno, $2);
- else if (tsearch ( newp, &synonyms, compare_syn) == NULL)
- error (EXIT_FAILURE, 0, "tsearch");
- }
- |
- ;
-
-instrs: instrs '\n' instr
- | instr
- ;
-
-instr: bytes ':' bitfieldopt kID bitfieldopt optargs
- {
- if ($3 != NULL && strcmp ($3->name, "RE") != 0
- && strcmp ($3->name, "R") != 0)
- {
- error (0, 0, "%d: only 'R' and 'RE' prefix allowed",
- i386_lineno - 1);
- }
- if (check_duplicates ($1) == 0
- && check_argsdef ($1, $6) == 0
- && check_bitsused ($1, $5, $6) == 0)
- {
- struct instruction *newp = xcalloc (sizeof (*newp),
- 1);
- if ($3 != NULL)
- {
- if (strcmp ($3->name, "RE") == 0)
- newp->repe = 1;
- else if (strcmp ($3->name, "R") == 0)
- newp->rep = 1;
- }
-
- newp->bytes = $1;
- newp->mnemonic = $4;
- if (newp->mnemonic != (void *) -1l
- && tfind ($4, &mnemonics,
- (comparison_fn_t) strcmp) == NULL)
- {
- if (tsearch ($4, &mnemonics,
- (comparison_fn_t) strcmp) == NULL)
- error (EXIT_FAILURE, errno, "tsearch");
- ++nmnemonics;
- }
-
- if ($5 != NULL)
- {
- if (strcmp ($5->name, "w") == 0)
- newp->suffix = suffix_w;
- else if (strcmp ($5->name, "w0") == 0)
- newp->suffix = suffix_w0;
- else if (strcmp ($5->name, "tttn") == 0)
- newp->suffix = suffix_tttn;
- else if (strcmp ($5->name, "w1") == 0)
- newp->suffix = suffix_w1;
- else if (strcmp ($5->name, "W") == 0)
- newp->suffix = suffix_W;
- else if (strcmp ($5->name, "W1") == 0)
- newp->suffix = suffix_W1;
- else if (strcmp ($5->name, "D") == 0)
- newp->suffix = suffix_D;
- else
- error (EXIT_FAILURE, 0,
- "%s: %d: unknown suffix '%s'",
- infname, i386_lineno - 1, $5->name);
-
- struct suffix search = { .name = $5->name };
- if (tfind (&search, &suffixes, compare_suf)
- == NULL)
- {
- struct suffix *ns = xmalloc (sizeof (*ns));
- ns->name = $5->name;
- ns->idx = ++nsuffixes;
- if (tsearch (ns, &suffixes, compare_suf)
- == NULL)
- error (EXIT_FAILURE, errno, "tsearch");
- }
- }
-
- struct argument *args = $6;
- int n = 0;
- while (args != NULL)
- {
- fillin_arg ($1, args->name, newp, n);
-
- args = args->next;
- ++n;
- }
-
- newp->next = instructions;
- instructions = newp;
- ++ninstructions;
- }
- }
- |
- ;
-
-bitfieldopt: kBITFIELD
- {
- struct known_bitfield search;
- search.name = $1;
- struct known_bitfield **res;
- res = tfind (&search, &bitfields, bitfield_compare);
- if (res == NULL)
- {
- error (0, 0, "%d: unknown bitfield '%s'",
- i386_lineno, search.name);
- $$ = NULL;
- }
- else
- $$ = *res;
- }
- |
- { $$ = NULL; }
- ;
-
-bytes: bytes ',' byte
- {
- check_bits ($3);
-
- struct bitvalue *runp = $1;
- while (runp->next != NULL)
- runp = runp->next;
- runp->next = $3;
- $$ = $1;
- }
- | byte
- {
- check_bits ($1);
- $$ = $1;
- }
- ;
-
-byte: byte bit
- {
- struct bitvalue *runp = $1;
- while (runp->next != NULL)
- runp = runp->next;
- runp->next = $2;
- $$ = $1;
- }
- | bit
- { $$ = $1; }
- ;
-
-bit: '0'
- {
- $$ = xmalloc (sizeof (struct bitvalue));
- $$->type = zeroone;
- $$->value = 0;
- $$->next = NULL;
- }
- | '1'
- {
- $$ = xmalloc (sizeof (struct bitvalue));
- $$->type = zeroone;
- $$->value = 1;
- $$->next = NULL;
- }
- | kBITFIELD
- {
- $$ = xmalloc (sizeof (struct bitvalue));
- struct known_bitfield search;
- search.name = $1;
- struct known_bitfield **res;
- res = tfind (&search, &bitfields, bitfield_compare);
- if (res == NULL)
- {
- error (0, 0, "%d: unknown bitfield '%s'",
- i386_lineno, search.name);
- $$->type = failure;
- }
- else
- {
- $$->type = field;
- $$->field = *res;
- }
- $$->next = NULL;
- }
- ;
-
-optargs: kSPACE args
- { $$ = $2; }
- |
- { $$ = NULL; }
- ;
-
-args: args ',' arg
- {
- struct argument *runp = $1;
- while (runp->next != NULL)
- runp = runp->next;
- runp->next = xmalloc (sizeof (struct argument));
- runp->next->name = combine ($3);
- runp->next->next = NULL;
- $$ = $1;
- }
- | arg
- {
- $$ = xmalloc (sizeof (struct argument));
- $$->name = combine ($1);
- $$->next = NULL;
- }
- ;
-
-arg: arg argcomp
- {
- struct argname *runp = $1;
- while (runp->next != NULL)
- runp = runp->next;
- runp->next = $2;
- $$ = $1;
- }
- | argcomp
- { $$ = $1; }
- ;
-argcomp: kBITFIELD
- {
- $$ = xmalloc (sizeof (struct argname));
- $$->type = nfield;
- $$->next = NULL;
-
- struct known_bitfield search;
- search.name = $1;
- struct known_bitfield **res;
- res = tfind (&search, &bitfields, bitfield_compare);
- if (res == NULL)
- {
- if (strcmp ($1, "ax") == 0)
- $$->field = &ax_reg;
- else if (strcmp ($1, "dx") == 0)
- $$->field = &dx_reg;
- else if (strcmp ($1, "es_di") == 0)
- $$->field = &di_reg;
- else if (strcmp ($1, "ds_si") == 0)
- $$->field = &si_reg;
- else if (strcmp ($1, "ds_bx") == 0)
- $$->field = &bx_reg;
- else
- {
- error (0, 0, "%d: unknown bitfield '%s'",
- i386_lineno, search.name);
- $$->field = NULL;
- }
- }
- else
- $$->field = *res;
- }
- | kCHAR
- {
- $$ = xmalloc (sizeof (struct argname));
- $$->type = string;
- $$->next = NULL;
- $$->str = xmalloc (2);
- $$->str[0] = $1;
- $$->str[1] = '\0';
- }
- | kID
- {
- $$ = xmalloc (sizeof (struct argname));
- $$->type = string;
- $$->next = NULL;
- $$->str = $1;
- }
- | ':'
- {
- $$ = xmalloc (sizeof (struct argname));
- $$->type = string;
- $$->next = NULL;
- $$->str = xmalloc (2);
- $$->str[0] = ':';
- $$->str[1] = '\0';
- }
- ;
-
-%%
-
-static void
-yyerror (const char *s)
-{
- error (0, 0, gettext ("while reading i386 CPU description: %s at line %d"),
- gettext (s), i386_lineno);
-}
-
-
-static int
-bitfield_compare (const void *p1, const void *p2)
-{
- struct known_bitfield *f1 = (struct known_bitfield *) p1;
- struct known_bitfield *f2 = (struct known_bitfield *) p2;
-
- return strcmp (f1->name, f2->name);
-}
-
-
-static void
-new_bitfield (char *name, unsigned long int num)
-{
- struct known_bitfield *newp = xmalloc (sizeof (struct known_bitfield));
- newp->name = name;
- newp->bits = num;
- newp->tmp = 0;
-
- if (tfind (newp, &bitfields, bitfield_compare) != NULL)
- {
- error (0, 0, "%d: duplicated definition of bitfield '%s'",
- i386_lineno, name);
- free (name);
- return;
- }
-
- if (tsearch (newp, &bitfields, bitfield_compare) == NULL)
- error (EXIT_FAILURE, errno, "%d: cannot insert new bitfield '%s'",
- i386_lineno, name);
-}
-
-
-/* Check that the number of bits is a multiple of 8. */
-static void
-check_bits (struct bitvalue *val)
-{
- struct bitvalue *runp = val;
- unsigned int total = 0;
-
- while (runp != NULL)
- {
- if (runp->type == zeroone)
- ++total;
- else if (runp->field == NULL)
- /* No sense doing anything, the field is not known. */
- return;
- else
- total += runp->field->bits;
-
- runp = runp->next;
- }
-
- if (total % 8 != 0)
- {
- struct obstack os;
- obstack_init (&os);
-
- while (val != NULL)
- {
- if (val->type == zeroone)
- obstack_printf (&os, "%u", val->value);
- else
- obstack_printf (&os, "{%s}", val->field->name);
- val = val->next;
- }
- obstack_1grow (&os, '\0');
-
- error (0, 0, "%d: field '%s' not a multiple of 8 bits in size",
- i386_lineno, (char *) obstack_finish (&os));
-
- obstack_free (&os, NULL);
- }
-}
-
-
-static int
-check_duplicates (struct bitvalue *val)
-{
- static int testcnt;
- ++testcnt;
-
- int result = 0;
- while (val != NULL)
- {
- if (val->type == field && val->field != NULL)
- {
- if (val->field->tmp == testcnt)
- {
- error (0, 0, "%d: bitfield '%s' used more than once",
- i386_lineno - 1, val->field->name);
- result = 1;
- }
- val->field->tmp = testcnt;
- }
-
- val = val->next;
- }
-
- return result;
-}
-
-
-static int
-check_argsdef (struct bitvalue *bitval, struct argument *args)
-{
- int result = 0;
-
- while (args != NULL)
- {
- for (struct argname *name = args->name; name != NULL; name = name->next)
- if (name->type == nfield && name->field != NULL
- && name->field != &ax_reg && name->field != &dx_reg
- && name->field != &di_reg && name->field != &si_reg
- && name->field != &bx_reg)
- {
- struct bitvalue *runp = bitval;
-
- while (runp != NULL)
- if (runp->type == field && runp->field == name->field)
- break;
- else
- runp = runp->next;
-
- if (runp == NULL)
- {
- error (0, 0, "%d: unknown bitfield '%s' used in output format",
- i386_lineno - 1, name->field->name);
- result = 1;
- }
- }
-
- args = args->next;
- }
-
- return result;
-}
-
-
-static int
-check_bitsused (struct bitvalue *bitval, struct known_bitfield *suffix,
- struct argument *args)
-{
- int result = 0;
-
- while (bitval != NULL)
- {
- if (bitval->type == field && bitval->field != NULL
- && bitval->field != suffix
- /* {w} is handled special. */
- && strcmp (bitval->field->name, "w") != 0)
- {
- struct argument *runp;
- for (runp = args; runp != NULL; runp = runp->next)
- {
- struct argname *name = runp->name;
-
- while (name != NULL)
- if (name->type == nfield && name->field == bitval->field)
- break;
- else
- name = name->next;
-
- if (name != NULL)
- break;
- }
-
-#if 0
- if (runp == NULL)
- {
- error (0, 0, "%d: bitfield '%s' not used",
- i386_lineno - 1, bitval->field->name);
- result = 1;
- }
-#endif
- }
-
- bitval = bitval->next;
- }
-
- return result;
-}
-
-
-static struct argname *
-combine (struct argname *name)
-{
- struct argname *last_str = NULL;
- for (struct argname *runp = name; runp != NULL; runp = runp->next)
- {
- if (runp->type == string)
- {
- if (last_str == NULL)
- last_str = runp;
- else
- {
- last_str->str = xrealloc (last_str->str,
- strlen (last_str->str)
- + strlen (runp->str) + 1);
- strcat (last_str->str, runp->str);
- last_str->next = runp->next;
- }
- }
- else
- last_str = NULL;
- }
- return name;
-}
-
-
-#define obstack_grow_str(ob, str) obstack_grow (ob, str, strlen (str))
-
-
-static void
-fillin_arg (struct bitvalue *bytes, struct argname *name,
- struct instruction *instr, int n)
-{
- static struct obstack ob;
- static int initialized;
- if (! initialized)
- {
- initialized = 1;
- obstack_init (&ob);
- }
-
- struct argname *runp = name;
- int cnt = 0;
- while (runp != NULL)
- {
- /* We ignore strings in the function name. */
- if (runp->type == string)
- {
- if (instr->operands[n].str != NULL)
- error (EXIT_FAILURE, 0,
- "%d: cannot have more than one string parameter",
- i386_lineno - 1);
-
- instr->operands[n].str = runp->str;
- }
- else
- {
- assert (runp->type == nfield);
-
- /* Construct the function name. */
- if (cnt++ > 0)
- obstack_1grow (&ob, '$');
-
- if (runp->field == NULL)
- /* Add some string which contains invalid characters. */
- obstack_grow_str (&ob, "!!!INVALID!!!");
- else
- {
- char *fieldname = runp->field->name;
-
- struct synonym search = { .from = fieldname };
-
- struct synonym **res = tfind (&search, &synonyms, compare_syn);
- if (res != NULL)
- fieldname = (*res)->to;
-
- obstack_grow_str (&ob, fieldname);
- }
-
- /* Now compute the bit offset of the field. */
- struct bitvalue *b = bytes;
- int bitoff = 0;
- if (runp->field != NULL)
- while (b != NULL)
- {
- if (b->type == field && b->field != NULL)
- {
- if (strcmp (b->field->name, runp->field->name) == 0)
- break;
- bitoff += b->field->bits;
- }
- else
- ++bitoff;
-
- b = b->next;
- }
- if (instr->operands[n].off1 == 0)
- instr->operands[n].off1 = bitoff;
- else if (instr->operands[n].off2 == 0)
- instr->operands[n].off2 = bitoff;
- else if (instr->operands[n].off3 == 0)
- instr->operands[n].off3 = bitoff;
- else
- error (EXIT_FAILURE, 0,
- "%d: cannot have more than three fields in parameter",
- i386_lineno - 1);
-
- if (runp->field != NULL
- && strncasecmp (runp->field->name, "mod", 3) == 0)
- instr->modrm = 1;
- }
-
- runp = runp->next;
- }
- if (obstack_object_size (&ob) == 0)
- obstack_grow_str (&ob, "string");
- obstack_1grow (&ob, '\0');
- char *fct = obstack_finish (&ob);
-
- instr->operands[n].fct = fct;
-}
-
-
-#if 0
-static void
-nameout (const void *nodep, VISIT value, int level)
-{
- if (value == leaf || value == postorder)
- printf (" %s\n", *(const char **) nodep);
-}
-#endif
-
-
-static int
-compare_argstring (const void *p1, const void *p2)
-{
- const struct argstring *a1 = (const struct argstring *) p1;
- const struct argstring *a2 = (const struct argstring *) p2;
-
- return strcmp (a1->str, a2->str);
-}
-
-
-static int maxoff[3][3];
-static int minoff[3][3] = { { 1000, 1000, 1000 },
- { 1000, 1000, 1000 },
- { 1000, 1000, 1000 } };
-static int nbitoff[3][3];
-static void *fct_names[3];
-static int nbitfct[3];
-static int nbitsuf;
-static void *strs[3];
-static int nbitstr[3];
-static int total_bits = 2; // Already counted the rep/repe bits.
-
-static void
-find_numbers (void)
-{
- int nfct_names[3] = { 0, 0, 0 };
- int nstrs[3] = { 0, 0, 0 };
-
- /* We reverse the order of the instruction list while processing it.
- Later phases need it in the order in which the input file has
- them. */
- struct instruction *reversed = NULL;
-
- struct instruction *runp = instructions;
- while (runp != NULL)
- {
- for (int i = 0; i < 3; ++i)
- if (runp->operands[i].fct != NULL)
- {
- struct argstring search = { .str = runp->operands[i].fct };
- if (tfind (&search, &fct_names[i], compare_argstring) == NULL)
- {
- struct argstring *newp = xmalloc (sizeof (*newp));
- newp->str = runp->operands[i].fct;
- newp->idx = 0;
- if (tsearch (newp, &fct_names[i], compare_argstring) == NULL)
- error (EXIT_FAILURE, errno, "tsearch");
- ++nfct_names[i];
- }
-
- if (runp->operands[i].str != NULL)
- {
- search.str = runp->operands[i].str;
- if (tfind (&search, &strs[i], compare_argstring) == NULL)
- {
- struct argstring *newp = xmalloc (sizeof (*newp));
- newp->str = runp->operands[i].str;
- newp->idx = 0;
- if (tsearch (newp, &strs[i], compare_argstring) == NULL)
- error (EXIT_FAILURE, errno, "tsearch");
- ++nstrs[i];
- }
- }
-
- maxoff[i][0] = MAX (maxoff[i][0], runp->operands[i].off1);
- maxoff[i][1] = MAX (maxoff[i][1], runp->operands[i].off2);
- maxoff[i][2] = MAX (maxoff[i][2], runp->operands[i].off3);
-
- if (runp->operands[i].off1 > 0)
- minoff[i][0] = MIN (minoff[i][0], runp->operands[i].off1);
- if (runp->operands[i].off2 > 0)
- minoff[i][1] = MIN (minoff[i][1], runp->operands[i].off2);
- if (runp->operands[i].off3 > 0)
- minoff[i][2] = MIN (minoff[i][2], runp->operands[i].off3);
- }
-
- struct instruction *old = runp;
- runp = runp->next;
-
- old->next = reversed;
- reversed = old;
- }
- instructions = reversed;
-
- int d;
- int c;
- for (int i = 0; i < 3; ++i)
- {
- // printf ("min1 = %d, min2 = %d, min3 = %d\n", minoff[i][0], minoff[i][1], minoff[i][2]);
- // printf ("max1 = %d, max2 = %d, max3 = %d\n", maxoff[i][0], maxoff[i][1], maxoff[i][2]);
-
- if (minoff[i][0] == 1000)
- nbitoff[i][0] = 0;
- else
- {
- nbitoff[i][0] = 1;
- d = maxoff[i][0] - minoff[i][0];
- c = 1;
- while (c < d)
- {
- ++nbitoff[i][0];
- c *= 2;
- }
- total_bits += nbitoff[i][0];
- }
-
- if (minoff[i][1] == 1000)
- nbitoff[i][1] = 0;
- else
- {
- nbitoff[i][1] = 1;
- d = maxoff[i][1] - minoff[i][1];
- c = 1;
- while (c < d)
- {
- ++nbitoff[i][1];
- c *= 2;
- }
- total_bits += nbitoff[i][1];
- }
-
- if (minoff[i][2] == 1000)
- nbitoff[i][2] = 0;
- else
- {
- nbitoff[i][2] = 1;
- d = maxoff[i][2] - minoff[i][2];
- c = 1;
- while (c < d)
- {
- ++nbitoff[i][2];
- c *= 2;
- }
- total_bits += nbitoff[i][2];
- }
- // printf ("off1 = %d, off2 = %d, off3 = %d\n", nbitoff[i][0], nbitoff[i][1], nbitoff[i][2]);
-
- nbitfct[i] = 1;
- d = nfct_names[i];
- c = 1;
- while (c < d)
- {
- ++nbitfct[i];
- c *= 2;
- }
- total_bits += nbitfct[i];
- // printf ("%d fct[%d], %d bits\n", nfct_names[i], i, nbitfct[i]);
-
- if (nstrs[i] != 0)
- {
- nbitstr[i] = 1;
- d = nstrs[i];
- c = 1;
- while (c < d)
- {
- ++nbitstr[i];
- c *= 2;
- }
- total_bits += nbitstr[i];
- }
-
- // twalk (fct_names[i], nameout);
- }
-
- nbitsuf = 0;
- d = nsuffixes;
- c = 1;
- while (c < d)
- {
- ++nbitsuf;
- c *= 2;
- }
- total_bits += nbitsuf;
- // printf ("%d suffixes, %d bits\n", nsuffixes, nbitsuf);
-}
-
-
-static int
-compare_syn (const void *p1, const void *p2)
-{
- const struct synonym *s1 = (const struct synonym *) p1;
- const struct synonym *s2 = (const struct synonym *) p2;
-
- return strcmp (s1->from, s2->from);
-}
-
-
-static int
-compare_suf (const void *p1, const void *p2)
-{
- const struct suffix *s1 = (const struct suffix *) p1;
- const struct suffix *s2 = (const struct suffix *) p2;
-
- return strcmp (s1->name, s2->name);
-}
-
-
-static int count_op_str;
-static int off_op_str;
-static void
-print_op_str (const void *nodep, VISIT value,
- int level __attribute__ ((unused)))
-{
- if (value == leaf || value == postorder)
- {
- const char *str = (*(struct argstring **) nodep)->str;
- fprintf (outfile, "%s\n \"%s",
- count_op_str == 0 ? "" : "\\0\"", str);
- (*(struct argstring **) nodep)->idx = ++count_op_str;
- (*(struct argstring **) nodep)->off = off_op_str;
- off_op_str += strlen (str) + 1;
- }
-}
-
-
-static void
-print_op_str_idx (const void *nodep, VISIT value,
- int level __attribute__ ((unused)))
-{
- if (value == leaf || value == postorder)
- printf (" %d,\n", (*(struct argstring **) nodep)->off);
-}
-
-
-static void
-print_op_fct (const void *nodep, VISIT value,
- int level __attribute__ ((unused)))
-{
- if (value == leaf || value == postorder)
- {
- fprintf (outfile, " FCT_%s,\n", (*(struct argstring **) nodep)->str);
- (*(struct argstring **) nodep)->idx = ++count_op_str;
- }
-}
-
-
-#if NMNES < 2
-# error "bogus NMNES value"
-#endif
-
-static void
-instrtable_out (void)
-{
- find_numbers ();
-
-#if 0
- create_mnemonic_table ();
-
- fprintf (outfile, "#define MNEMONIC_BITS %zu\n", best_mnemonic_bits);
-#else
- fprintf (outfile, "#define MNEMONIC_BITS %ld\n",
- lrint (ceil (log2 (NMNES))));
-#endif
- fprintf (outfile, "#define SUFFIX_BITS %d\n", nbitsuf);
- for (int i = 0; i < 3; ++i)
- {
- fprintf (outfile, "#define FCT%d_BITS %d\n", i + 1, nbitfct[i]);
- if (nbitstr[i] != 0)
- fprintf (outfile, "#define STR%d_BITS %d\n", i + 1, nbitstr[i]);
- fprintf (outfile, "#define OFF%d_1_BITS %d\n", i + 1, nbitoff[i][0]);
- fprintf (outfile, "#define OFF%d_1_BIAS %d\n", i + 1, minoff[i][0]);
- if (nbitoff[i][1] != 0)
- {
- fprintf (outfile, "#define OFF%d_2_BITS %d\n", i + 1, nbitoff[i][1]);
- fprintf (outfile, "#define OFF%d_2_BIAS %d\n", i + 1, minoff[i][1]);
- }
- if (nbitoff[i][2] != 0)
- {
- fprintf (outfile, "#define OFF%d_3_BITS %d\n", i + 1, nbitoff[i][2]);
- fprintf (outfile, "#define OFF%d_3_BIAS %d\n", i + 1, minoff[i][2]);
- }
- }
-
- fputs ("\n#include <i386_data.h>\n\n", outfile);
-
-
-#define APPEND(a, b) APPEND_ (a, b)
-#define APPEND_(a, b) a##b
-#define EMIT_SUFFIX(suf) \
- fprintf (outfile, "#define suffix_%s %d\n", #suf, APPEND (suffix_, suf))
- EMIT_SUFFIX (none);
- EMIT_SUFFIX (w);
- EMIT_SUFFIX (w0);
- EMIT_SUFFIX (W);
- EMIT_SUFFIX (tttn);
- EMIT_SUFFIX (D);
- EMIT_SUFFIX (w1);
- EMIT_SUFFIX (W1);
-
- fputc_unlocked ('\n', outfile);
-
- for (int i = 0; i < 3; ++i)
- {
- /* Functions. */
- count_op_str = 0;
- fprintf (outfile, "static const opfct_t op%d_fct[] =\n{\n NULL,\n",
- i + 1);
- twalk (fct_names[i], print_op_fct);
- fputs ("};\n", outfile);
-
- /* The operand strings. */
- if (nbitstr[i] != 0)
- {
- count_op_str = 0;
- off_op_str = 0;
- fprintf (outfile, "static const char op%d_str[] =", i + 1);
- twalk (strs[i], print_op_str);
- fputs ("\";\n", outfile);
-
- fprintf (outfile, "static const uint8_t op%d_str_idx[] = {\n",
- i + 1);
- twalk (strs[i], print_op_str_idx);
- fputs ("};\n", outfile);
- }
- }
-
-
- fputs ("static const struct instr_enc instrtab[] =\n{\n", outfile);
- struct instruction *instr;
- for (instr = instructions; instr != NULL; instr = instr->next)
- {
- fputs (" {", outfile);
- if (instr->mnemonic == (void *) -1l)
- fputs (" .mnemonic = MNE_INVALID,", outfile);
- else
- fprintf (outfile, " .mnemonic = MNE_%s,", instr->mnemonic);
- fprintf (outfile, " .rep = %d,", instr->rep);
- fprintf (outfile, " .repe = %d,", instr->repe);
- fprintf (outfile, " .suffix = %d,", instr->suffix);
- fprintf (outfile, " .modrm = %d,", instr->modrm);
-
- for (int i = 0; i < 3; ++i)
- {
- int idx = 0;
- if (instr->operands[i].fct != NULL)
- {
- struct argstring search = { .str = instr->operands[i].fct };
- struct argstring **res = tfind (&search, &fct_names[i],
- compare_argstring);
- assert (res != NULL);
- idx = (*res)->idx;
- }
- fprintf (outfile, " .fct%d = %d,", i + 1, idx);
-
- idx = 0;
- if (instr->operands[i].str != NULL)
- {
- struct argstring search = { .str = instr->operands[i].str };
- struct argstring **res = tfind (&search, &strs[i],
- compare_argstring);
- assert (res != NULL);
- idx = (*res)->idx;
- }
- if (nbitstr[i] != 0)
- fprintf (outfile, " .str%d = %d,", i + 1, idx);
-
- fprintf (outfile, " .off%d_1 = %d,", i + 1,
- MAX (0, instr->operands[i].off1 - minoff[i][0]));
-
- if (nbitoff[i][1] != 0)
- fprintf (outfile, " .off%d_2 = %d,", i + 1,
- MAX (0, instr->operands[i].off2 - minoff[i][1]));
-
- if (nbitoff[i][2] != 0)
- fprintf (outfile, " .off%d_3 = %d,", i + 1,
- MAX (0, instr->operands[i].off3 - minoff[i][2]));
- }
-
- fputs (" },\n", outfile);
- }
- fputs ("};\n", outfile);
-
- fputs ("static const uint8_t match_data[] =\n{\n", outfile);
- size_t cnt = 0;
- for (instr = instructions; instr != NULL; instr = instr->next, ++cnt)
- {
- /* First count the number of bytes. */
- size_t totalbits = 0;
- size_t zerobits = 0;
- struct bitvalue *b = instr->bytes;
- while (b != NULL)
- {
- if (b->type == zeroone)
- {
- ++totalbits;
- zerobits = 0;
- }
- else
- {
- totalbits += b->field->bits;
- /* We must always count the mod/rm byte. */
- if (strncasecmp (b->field->name, "mod", 3) == 0)
- zerobits = 0;
- else
- zerobits += b->field->bits;
- }
- b = b->next;
- }
- size_t nbytes = (totalbits - zerobits + 7) / 8;
- assert (nbytes > 0);
-
- fprintf (outfile, " %#zx,", nbytes);
-
- /* Now create the mask and byte values. */
- uint8_t byte = 0;
- uint8_t mask = 0;
- int nbits = 0;
- b = instr->bytes;
- while (b != NULL)
- {
- if (b->type == zeroone)
- {
- byte = (byte << 1) | b->value;
- mask = (mask << 1) | 1;
- if (++nbits == 8)
- {
- fprintf (outfile, " %#" PRIx8 ", %#" PRIx8 ",", mask, byte);
- byte = mask = nbits = 0;
- if (--nbytes == 0)
- break;
- }
- }
- else
- {
- unsigned long int remaining = b->field->bits;
- while (nbits + remaining > 8)
- {
- fprintf (outfile, " %#" PRIx8 ", %#" PRIx8 ",",
- mask << (8 - nbits), byte << (8 - nbits));
- remaining = nbits + remaining - 8;
- byte = mask = nbits = 0;
- if (--nbytes == 0)
- break;
- }
- byte <<= remaining;
- mask <<= remaining;
- nbits += remaining;
- if (nbits == 8)
- {
- fprintf (outfile, " %#" PRIx8 ", %#" PRIx8 ",", mask, byte);
- byte = mask = nbits = 0;
- if (--nbytes == 0)
- break;
- }
- }
- b = b->next;
- }
-
- fputc_unlocked ('\n', outfile);
- }
- fputs ("};\n", outfile);
-}
-
-
-#if 0
-static size_t mnemonic_maxlen;
-static size_t mnemonic_minlen;
-static size_t
-which_chars (const char *str[], size_t nstr)
-{
- char used_char[256];
- memset (used_char, '\0', sizeof (used_char));
- mnemonic_maxlen = 0;
- mnemonic_minlen = 10000;
- for (size_t cnt = 0; cnt < nstr; ++cnt)
- {
- const unsigned char *cp = (const unsigned char *) str[cnt];
- mnemonic_maxlen = MAX (mnemonic_maxlen, strlen ((char *) cp));
- mnemonic_minlen = MIN (mnemonic_minlen, strlen ((char *) cp));
- do
- used_char[*cp++] = 1;
- while (*cp != '\0');
- }
- size_t nused_char = 0;
- for (size_t cnt = 0; cnt < 256; ++cnt)
- if (used_char[cnt] != 0)
- ++nused_char;
- return nused_char;
-}
-
-
-static const char **mnemonic_strs;
-static size_t nmnemonic_strs;
-static void
-add_mnemonics (const void *nodep, VISIT value,
- int level __attribute__ ((unused)))
-{
- if (value == leaf || value == postorder)
- mnemonic_strs[nmnemonic_strs++] = *(const char **) nodep;
-}
-
-
-struct charfreq
-{
- char ch;
- int freq;
-};
-static struct charfreq pfxfreq[256];
-static struct charfreq sfxfreq[256];
-
-
-static int
-compare_freq (const void *p1, const void *p2)
-{
- const struct charfreq *c1 = (const struct charfreq *) p1;
- const struct charfreq *c2 = (const struct charfreq *) p2;
-
- if (c1->freq > c2->freq)
- return -1;
- if (c1->freq < c2->freq)
- return 1;
- return 0;
-}
-
-
-static size_t
-compute_pfxfreq (const char *str[], size_t nstr)
-{
- memset (pfxfreq, '\0', sizeof (pfxfreq));
-
- for (size_t i = 0; i < nstr; ++i)
- pfxfreq[i].ch = i;
-
- for (size_t i = 0; i < nstr; ++i)
- ++pfxfreq[*((const unsigned char *) str[i])].freq;
-
- qsort (pfxfreq, 256, sizeof (struct charfreq), compare_freq);
-
- size_t n = 0;
- while (n < 256 && pfxfreq[n].freq != 0)
- ++n;
- return n;
-}
-
-
-struct strsnlen
-{
- const char *str;
- size_t len;
-};
-
-static size_t
-compute_sfxfreq (size_t nstr, struct strsnlen *strsnlen)
-{
- memset (sfxfreq, '\0', sizeof (sfxfreq));
-
- for (size_t i = 0; i < nstr; ++i)
- sfxfreq[i].ch = i;
-
- for (size_t i = 0; i < nstr; ++i)
- ++sfxfreq[((const unsigned char *) strchrnul (strsnlen[i].str, '\0'))[-1]].freq;
-
- qsort (sfxfreq, 256, sizeof (struct charfreq), compare_freq);
-
- size_t n = 0;
- while (n < 256 && sfxfreq[n].freq != 0)
- ++n;
- return n;
-}
-
-
-static void
-create_mnemonic_table (void)
-{
- mnemonic_strs = xmalloc (nmnemonics * sizeof (char *));
-
- twalk (mnemonics, add_mnemonics);
-
- (void) which_chars (mnemonic_strs, nmnemonic_strs);
-
- size_t best_so_far = 100000000;
- char *best_prefix = NULL;
- char *best_suffix = NULL;
- char *best_table = NULL;
- size_t best_table_size = 0;
- size_t best_table_bits = 0;
- size_t best_prefix_bits = 0;
-
- /* We can precompute the prefix characters. */
- size_t npfx_char = compute_pfxfreq (mnemonic_strs, nmnemonic_strs);
-
- /* Compute best size for string representation including explicit NUL. */
- for (size_t pfxbits = 0; (1u << pfxbits) < 2 * npfx_char; ++pfxbits)
- {
- char prefix[1 << pfxbits];
- size_t i;
- for (i = 0; i < (1u << pfxbits) - 1; ++i)
- prefix[i] = pfxfreq[i].ch;
- prefix[i] = '\0';
-
- struct strsnlen strsnlen[nmnemonic_strs];
-
- for (i = 0; i < nmnemonic_strs; ++i)
- {
- if (strchr (prefix, *mnemonic_strs[i]) != NULL)
- strsnlen[i].str = mnemonic_strs[i] + 1;
- else
- strsnlen[i].str = mnemonic_strs[i];
- strsnlen[i].len = strlen (strsnlen[i].str);
- }
-
- /* With the prefixes gone, try to combine strings. */
- size_t nstrsnlen = 1;
- for (i = 1; i < nmnemonic_strs; ++i)
- {
- size_t j;
- for (j = 0; j < nstrsnlen; ++j)
- if (strsnlen[i].len > strsnlen[j].len
- && strcmp (strsnlen[j].str,
- strsnlen[i].str + (strsnlen[i].len
- - strsnlen[j].len)) == 0)
- {
- strsnlen[j] = strsnlen[i];
- break;
- }
- else if (strsnlen[i].len < strsnlen[j].len
- && strcmp (strsnlen[i].str,
- strsnlen[j].str + (strsnlen[j].len
- - strsnlen[i].len)) == 0)
- break;
-;
- if (j == nstrsnlen)
- strsnlen[nstrsnlen++] = strsnlen[i];
- }
-
- size_t nsfx_char = compute_sfxfreq (nstrsnlen, strsnlen);
-
- for (size_t sfxbits = 0; (1u << sfxbits) < 2 * nsfx_char; ++sfxbits)
- {
- char suffix[1 << sfxbits];
-
- for (i = 0; i < (1u << sfxbits) - 1; ++i)
- suffix[i] = sfxfreq[i].ch;
- suffix[i] = '\0';
-
- size_t newlen[nstrsnlen];
-
- for (i = 0; i < nstrsnlen; ++i)
- if (strchr (suffix, strsnlen[i].str[strsnlen[i].len - 1]) != NULL)
- newlen[i] = strsnlen[i].len - 1;
- else
- newlen[i] = strsnlen[i].len;
-
- char charused[256];
- memset (charused, '\0', sizeof (charused));
- size_t ncharused = 0;
-
- const char *tablestr[nstrsnlen];
- size_t ntablestr = 1;
- tablestr[0] = strsnlen[0].str;
- size_t table = newlen[0] + 1;
- for (i = 1; i < nstrsnlen; ++i)
- {
- size_t j;
- for (j = 0; j < ntablestr; ++j)
- if (newlen[i] > newlen[j]
- && memcmp (tablestr[j],
- strsnlen[i].str + (newlen[i] - newlen[j]),
- newlen[j]) == 0)
- {
- table += newlen[i] - newlen[j];
- tablestr[j] = strsnlen[i].str;
- newlen[j] = newlen[i];
- break;
- }
- else if (newlen[i] < newlen[j]
- && memcmp (strsnlen[i].str,
- tablestr[j] + (newlen[j] - newlen[i]),
- newlen[i]) == 0)
- break;
-
- if (j == ntablestr)
- {
- table += newlen[i] + 1;
- tablestr[ntablestr] = strsnlen[i].str;
- newlen[ntablestr] = newlen[i];
-
- ++ntablestr;
- }
-
- for (size_t x = 0; x < newlen[j]; ++x)
- if (charused[((const unsigned char *) tablestr[j])[x]]++ == 0)
- ++ncharused;
- }
-
- size_t ncharused_bits = 0;
- i = 1;
- while (i < ncharused)
- {
- i *= 2;
- ++ncharused_bits;
- }
-
- size_t table_bits = 0;
- i = 1;
- while (i < table)
- {
- i *= 2;
- ++table_bits;
- }
-
- size_t mnemonic_bits = table_bits + pfxbits + sfxbits;
- size_t new_total = (((table + 7) / 8) * ncharused_bits + ncharused
- + (pfxbits == 0 ? 0 : (1 << pfxbits) - 1)
- + (sfxbits == 0 ? 0 : (1 << sfxbits) - 1)
- + (((total_bits + mnemonic_bits + 7) / 8)
- * ninstructions));
-
- if (new_total < best_so_far)
- {
- best_so_far = new_total;
- best_mnemonic_bits = mnemonic_bits;
-
- free (best_suffix);
- best_suffix = xstrdup (suffix);
-
- free (best_prefix);
- best_prefix = xstrdup (prefix);
- best_prefix_bits = pfxbits;
-
- best_table_size = table;
- best_table_bits = table_bits;
- char *cp = best_table = xrealloc (best_table, table);
- for (i = 0; i < ntablestr; ++i)
- {
- assert (cp + newlen[i] + 1 <= best_table + table);
- cp = mempcpy (cp, tablestr[i], newlen[i]);
- *cp++ = '\0';
- }
- assert (cp == best_table + table);
- }
- }
- }
-
- fputs ("static const char mnemonic_table[] =\n\"", outfile);
- for (size_t i = 0; i < best_table_size; ++i)
- {
- if (((i + 1) % 60) == 0)
- fputs ("\"\n\"", outfile);
- if (!isascii (best_table[i]) || !isprint (best_table[i]))
- fprintf (outfile, "\\%03o", best_table[i]);
- else
- fputc (best_table[i], outfile);
- }
- fputs ("\";\n", outfile);
-
- if (best_prefix[0] != '\0')
- fprintf (outfile,
- "static const char prefix[%zu] = \"%s\";\n"
- "#define PREFIXCHAR_BITS %zu\n",
- strlen (best_prefix), best_prefix, best_prefix_bits);
- else
- fputs ("#define NO_PREFIX\n", outfile);
-
- if (best_suffix[0] != '\0')
- fprintf (outfile, "static const char suffix[%zu] = \"%s\";\n",
- strlen (best_suffix), best_suffix);
- else
- fputs ("#define NO_SUFFIX\n", outfile);
-
- for (size_t i = 0; i < nmnemonic_strs; ++i)
- {
- const char *mne = mnemonic_strs[i];
-
- size_t pfxval = 0;
- char *cp = strchr (best_prefix, *mne);
- if (cp != NULL)
- {
- pfxval = 1 + (cp - best_prefix);
- ++mne;
- }
-
- size_t l = strlen (mne);
-
- size_t sfxval = 0;
- cp = strchr (best_suffix, mne[l - 1]);
- if (cp != NULL)
- {
- sfxval = 1 + (cp - best_suffix);
- --l;
- }
-
- char *off = memmem (best_table, best_table_size, mne, l);
- while (off[l] != '\0')
- {
- off = memmem (off + 1, best_table_size, mne, l);
- assert (off != NULL);
- }
-
- fprintf (outfile, "#define MNE_%s %#zx\n",
- mnemonic_strs[i],
- (off - best_table)
- + ((pfxval + (sfxval << best_prefix_bits)) << best_table_bits));
- }
-}
-#endif
diff --git a/libcpu/memory-access.h b/libcpu/memory-access.h
deleted file mode 100644
index c68eb4a..0000000
--- a/libcpu/memory-access.h
+++ /dev/null
@@ -1,179 +0,0 @@
-/* Unaligned memory access functionality.
- Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2008 Red Hat, Inc.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifndef _MEMORY_ACCESS_H
-#define _MEMORY_ACCESS_H 1
-
-#include <byteswap.h>
-#include <endian.h>
-#include <limits.h>
-#include <stdint.h>
-
-
-/* When loading this file we require the macro MACHINE_ENCODING to be
- defined to signal the endianness of the architecture which is
- defined. */
-#ifndef MACHINE_ENCODING
-# error "MACHINE_ENCODING needs to be defined"
-#endif
-#if MACHINE_ENCODING != __BIG_ENDIAN && MACHINE_ENCODING != __LITTLE_ENDIAN
-# error "MACHINE_ENCODING must signal either big or little endian"
-#endif
-
-
-/* We use simple memory access functions in case the hardware allows it.
- The caller has to make sure we don't have alias problems. */
-#if ALLOW_UNALIGNED
-
-# define read_2ubyte_unaligned(Addr) \
- (unlikely (MACHINE_ENCODING != __BYTE_ORDER) \
- ? bswap_16 (*((const uint16_t *) (Addr))) \
- : *((const uint16_t *) (Addr)))
-# define read_2sbyte_unaligned(Addr) \
- (unlikely (MACHINE_ENCODING != __BYTE_ORDER) \
- ? (int16_t) bswap_16 (*((const int16_t *) (Addr))) \
- : *((const int16_t *) (Addr)))
-
-# define read_4ubyte_unaligned_noncvt(Addr) \
- *((const uint32_t *) (Addr))
-# define read_4ubyte_unaligned(Addr) \
- (unlikely (MACHINE_ENCODING != __BYTE_ORDER) \
- ? bswap_32 (*((const uint32_t *) (Addr))) \
- : *((const uint32_t *) (Addr)))
-# define read_4sbyte_unaligned(Addr) \
- (unlikely (MACHINE_ENCODING != __BYTE_ORDER) \
- ? (int32_t) bswap_32 (*((const int32_t *) (Addr))) \
- : *((const int32_t *) (Addr)))
-
-# define read_8ubyte_unaligned(Addr) \
- (unlikely (MACHINE_ENCODING != __BYTE_ORDER) \
- ? bswap_64 (*((const uint64_t *) (Addr))) \
- : *((const uint64_t *) (Addr)))
-# define read_8sbyte_unaligned(Addr) \
- (unlikely (MACHINE_ENCODING != __BYTE_ORDER) \
- ? (int64_t) bswap_64 (*((const int64_t *) (Addr))) \
- : *((const int64_t *) (Addr)))
-
-#else
-
-union unaligned
- {
- void *p;
- uint16_t u2;
- uint32_t u4;
- uint64_t u8;
- int16_t s2;
- int32_t s4;
- int64_t s8;
- } __attribute__ ((packed));
-
-static inline uint16_t
-read_2ubyte_unaligned (const void *p)
-{
- const union unaligned *up = p;
- if (MACHINE_ENCODING != __BYTE_ORDER)
- return bswap_16 (up->u2);
- return up->u2;
-}
-static inline int16_t
-read_2sbyte_unaligned (const void *p)
-{
- const union unaligned *up = p;
- if (MACHINE_ENCODING != __BYTE_ORDER)
- return (int16_t) bswap_16 (up->u2);
- return up->s2;
-}
-
-static inline uint32_t
-read_4ubyte_unaligned_noncvt (const void *p)
-{
- const union unaligned *up = p;
- return up->u4;
-}
-static inline uint32_t
-read_4ubyte_unaligned (const void *p)
-{
- const union unaligned *up = p;
- if (MACHINE_ENCODING != __BYTE_ORDER)
- return bswap_32 (up->u4);
- return up->u4;
-}
-static inline int32_t
-read_4sbyte_unaligned (const void *p)
-{
- const union unaligned *up = p;
- if (MACHINE_ENCODING != __BYTE_ORDER)
- return (int32_t) bswap_32 (up->u4);
- return up->s4;
-}
-
-static inline uint64_t
-read_8ubyte_unaligned (const void *p)
-{
- const union unaligned *up = p;
- if (MACHINE_ENCODING != __BYTE_ORDER)
- return bswap_64 (up->u8);
- return up->u8;
-}
-static inline int64_t
-read_8sbyte_unaligned (const void *p)
-{
- const union unaligned *up = p;
- if (MACHINE_ENCODING != __BYTE_ORDER)
- return (int64_t) bswap_64 (up->u8);
- return up->s8;
-}
-
-#endif /* allow unaligned */
-
-
-#define read_2ubyte_unaligned_inc(Addr) \
- ({ uint16_t t_ = read_2ubyte_unaligned (Addr); \
- Addr = (__typeof (Addr)) (((uintptr_t) (Addr)) + 2); \
- t_; })
-#define read_2sbyte_unaligned_inc(Addr) \
- ({ int16_t t_ = read_2sbyte_unaligned (Addr); \
- Addr = (__typeof (Addr)) (((uintptr_t) (Addr)) + 2); \
- t_; })
-
-#define read_4ubyte_unaligned_inc(Addr) \
- ({ uint32_t t_ = read_4ubyte_unaligned (Addr); \
- Addr = (__typeof (Addr)) (((uintptr_t) (Addr)) + 4); \
- t_; })
-#define read_4sbyte_unaligned_inc(Addr) \
- ({ int32_t t_ = read_4sbyte_unaligned (Addr); \
- Addr = (__typeof (Addr)) (((uintptr_t) (Addr)) + 4); \
- t_; })
-
-#define read_8ubyte_unaligned_inc(Addr) \
- ({ uint64_t t_ = read_8ubyte_unaligned (Addr); \
- Addr = (__typeof (Addr)) (((uintptr_t) (Addr)) + 8); \
- t_; })
-#define read_8sbyte_unaligned_inc(Addr) \
- ({ int64_t t_ = read_8sbyte_unaligned (Addr); \
- Addr = (__typeof (Addr)) (((uintptr_t) (Addr)) + 8); \
- t_; })
-
-#endif /* memory-access.h */
diff --git a/libcpu/x86_64_disasm.c b/libcpu/x86_64_disasm.c
deleted file mode 100644
index b793b78..0000000
--- a/libcpu/x86_64_disasm.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Disassembler for x86-64.
- Copyright (C) 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2007.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#define i386_disasm x86_64_disasm
-#define DISFILE "x86_64_dis.h"
-#define MNEFILE "x86_64.mnemonics"
-#define X86_64
-#include "i386_disasm.c"
diff --git a/libdw/Android.mk b/libdw/Android.mk
deleted file mode 100755
index 589f46a..0000000
--- a/libdw/Android.mk
+++ /dev/null
@@ -1,173 +0,0 @@
-# Copyright (C) 2012 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-LOCAL_PATH := $(call my-dir)
-
-supported_platforms := linux-x86 darwin-x86
-cur_platform := $(filter $(HOST_OS)-$(HOST_ARCH),$(supported_platforms))
-
-ifdef cur_platform
-
-#
-# host libdw
-#
-
-include $(CLEAR_VARS)
-
-LIBDW_SRC_FILES := \
- dwarf_abbrevhaschildren.c \
- dwarf_abbrev_hash.c \
- dwarf_addrdie.c \
- dwarf_arrayorder.c \
- dwarf_attr.c \
- dwarf_attr_integrate.c \
- dwarf_begin.c \
- dwarf_begin_elf.c \
- dwarf_bitoffset.c \
- dwarf_bitsize.c \
- dwarf_bytesize.c \
- dwarf_child.c \
- dwarf_cuoffset.c \
- dwarf_decl_column.c \
- dwarf_decl_file.c \
- dwarf_decl_line.c \
- dwarf_diecu.c \
- dwarf_diename.c \
- dwarf_dieoffset.c \
- dwarf_end.c \
- dwarf_entry_breakpoints.c \
- dwarf_entrypc.c \
- dwarf_error.c \
- dwarf_filesrc.c \
- dwarf_formaddr.c \
- dwarf_formblock.c \
- dwarf_formflag.c \
- dwarf_formref.c \
- dwarf_formref_die.c \
- dwarf_formsdata.c \
- dwarf_formstring.c \
- dwarf_formudata.c \
- dwarf_func_inline.c \
- dwarf_getabbrevattr.c \
- dwarf_getabbrev.c \
- dwarf_getabbrevcode.c \
- dwarf_getabbrevtag.c \
- dwarf_getarange_addr.c \
- dwarf_getarangeinfo.c \
- dwarf_getaranges.c \
- dwarf_getattrcnt.c \
- dwarf_getattrs.c \
- dwarf_getelf.c \
- dwarf_getfuncs.c \
- dwarf_getlocation.c \
- dwarf_getmacros.c \
- dwarf_getpubnames.c \
- dwarf_getscopes.c \
- dwarf_getscopes_die.c \
- dwarf_getscopevar.c \
- dwarf_getsrc_die.c \
- dwarf_getsrcdirs.c \
- dwarf_getsrc_file.c \
- dwarf_getsrcfiles.c \
- dwarf_getsrclines.c \
- dwarf_getstring.c \
- dwarf_hasattr.c \
- dwarf_hasattr_integrate.c \
- dwarf_haschildren.c \
- dwarf_hasform.c \
- dwarf_haspc.c \
- dwarf_highpc.c \
- dwarf_lineaddr.c \
- dwarf_linebeginstatement.c \
- dwarf_lineblock.c \
- dwarf_linecol.c \
- dwarf_lineendsequence.c \
- dwarf_lineepiloguebegin.c \
- dwarf_lineno.c \
- dwarf_lineprologueend.c \
- dwarf_linesrc.c \
- dwarf_lowpc.c \
- dwarf_macro_opcode.c \
- dwarf_macro_param1.c \
- dwarf_macro_param2.c \
- dwarf_nextcu.c \
- dwarf_offabbrev.c \
- dwarf_offdie.c \
- dwarf_onearange.c \
- dwarf_onesrcline.c \
- dwarf_ranges.c \
- dwarf_siblingof.c \
- dwarf_srclang.c \
- dwarf_tag.c \
- dwarf_whatattr.c \
- dwarf_whatform.c \
- libdw_alloc.c \
- libdw_findcu.c \
- libdw_form.c \
- libdw_visit_scopes.c \
- memory-access.c
-
-LOCAL_SRC_FILES := $(LIBDW_SRC_FILES)
-
-LOCAL_C_INCLUDES := \
- $(LOCAL_PATH)/.. \
- $(LOCAL_PATH)/../lib \
- $(LOCAL_PATH)/../libdw \
- $(LOCAL_PATH)/../libelf
-
-ifeq ($(HOST_OS),darwin)
- LOCAL_CFLAGS += -fnested-functions
-endif
-
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/../host-$(HOST_OS)-fixup
-
-LOCAL_CFLAGS += -DHAVE_CONFIG_H -std=gnu99 -D_GNU_SOURCE -DIS_LIBDW
-
-# to fix machine-dependent issues
-LOCAL_CFLAGS += -include $(LOCAL_PATH)/../host-$(HOST_OS)-fixup/AndroidFixup.h
-
-LOCAL_MODULE:= libdw
-
-include $(BUILD_HOST_STATIC_LIBRARY)
-
-#
-# target libdw
-#
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(LIBDW_SRC_FILES)
-
-LOCAL_C_INCLUDES := \
- $(LOCAL_PATH)/.. \
- $(LOCAL_PATH)/../lib \
- $(LOCAL_PATH)/../libdw \
- $(LOCAL_PATH)/../libelf
-
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/../bionic-fixup
-
-LOCAL_CFLAGS += -include $(LOCAL_PATH)/../bionic-fixup/AndroidFixup.h
-
-LOCAL_CFLAGS += -DHAVE_CONFIG_H -std=gnu99 -DIS_LIBDW -Werror
-
-# to suppress the "pointer of type ‘void *’ used in arithmetic" warning
-LOCAL_CFLAGS += -Wno-pointer-arith
-
-LOCAL_MODULE_TAGS := eng
-
-LOCAL_MODULE:= libdw
-
-include $(BUILD_STATIC_LIBRARY)
-
-endif #cur_platform
diff --git a/libdw/ChangeLog b/libdw/ChangeLog
deleted file mode 100644
index 235fac0..0000000
--- a/libdw/ChangeLog
+++ /dev/null
@@ -1,963 +0,0 @@
-2008-08-15 Roland McGrath <roland@redhat.com>
-
- * libdw.map (ELFUTILS_0.136): New version set, inherits from
- ELFUTILS_0.130. Add dwfl_addrsegment, dwfl_report_segment.
-
-2008-01-21 Ulrich Drepper <drepper@redhat.com>
-
- * dwarf_child.c: Minor optimizations.
- * dwarf_getattrs.c: Likewise.
- * dwarf_getpubnames.c: Likewise.
- * dwarf_siblingof.c: Likewise.
- * dwarf_tag.c: Likewise.
-
-2008-01-18 Ulrich Drepper <drepper@redhat.com>
-
- * dwarf_getsrclines.c (dwarf_getsrclines): Don't require exact match
- of DWARF_VERSION comparison, just fail if the file's version is newer.
-
-2008-01-17 Nick Clifton <nickc@redhat.com>
-
- * dwarf.h (DWARF3_LENGTH_MIN_ESCAPE_CODE): New define.
- (DWARF3_LENGTH_MAX_ESCAPE_CODE): New define.
- (DWARF3_LENGTH_64_BIT): New define.
- * dwarf_getaranges (dwarf_getaranges): Use the new definitions.
- * dwarf_getpubnames: Include dwarf.h.
- (get_offsets): Use the new definitions.
- * dwarf_getsrclines.c (dwarf_getsrclines): Use the new defintions.
- * dwarf_nextcu.c: Include dwarf.h. Correct comment.
- (dwarf_nextcu): Use the new definitions.
-
- * libdwP.h (DIE_OFFSET_FROM_CU_OFFSET): New macro.
- * dwarf_diecu.c (dwarf_diecu): Use the new macro.
- * dwarf_getaranges (dwarf_getaranges): Use the new macro.
- * dwarf_nextcu.c (dwarf_nextcu): Use the new macro.
-
- * dwarf_getpubnames (get_offsets): Replace assertion with test and
- error return.
-
- * dwarf_entry_breakpoints.c (dwarf_entry_breakpoints): Use CUDIE.
-
- * dwarf_siblingof (dwarf_siblingof): Detect a NULL return pointer.
- Set the address in the return structure to the address of the next
- non-sibling die, if there is no sibling and the return pointer is
- not the same as the die pointer.
- * libdw.h: Expand the description of the dwarf_siblingof prototype.
-
- * dwarf_child.c: Fix typo in comment.
-
- * libdwP.h (DWARF_VERSION): Change to 3.
-
- * dwarf_formref.c (__libdw_formref.c): Handle attributes which do
- not have a initialised valp pointer.
-
- * dwarf_getattrs.c (dwarf_getattrs): Return 1 rather than 0 when
- the end of the attributes is reached. When the callback fails,
- return the address of the failing attribute, not the address of
- its successor.
- * libdw.h: Expand the description of the dwarf_getattrs prototype.
-
- * dwarf_child.c (__libdw_find_attr): Use the new definition.
- (dwarf_child): Likewise.
- * dwarf_tag.c (__libdw_findabbrev): Likewise.
- (dwarf_tag): Likewise.
-
-2008-01-08 Roland McGrath <roland@redhat.com>
-
- * Makefile.am (euinclude): Variable removed.
- (pkginclude_HEADERS): Set this instead of euinclude_HEADERS.
- (libdw.so): Pass -Wl,--enable-new-dtags,-rpath,$(pkglibdir).
-
-2007-10-17 Roland McGrath <roland@redhat.com>
-
- * libdw.h (__deprecated_attribute__): New macro.
- (dwarf_formref): Mark it deprecated.
- * dwarf_formref.c (__libdw_formref): New function, broken out of ...
- (dwarf_formref): ... here. Call it. Remove INTDEF.
- * libdwP.h: Remove INTDECL.
- Declare __libdw_formref.
- * dwarf_siblingof.c (dwarf_siblingof): Call __libdw_formref instead.
- * dwarf_formref_die.c: Likewise. Handle DW_FORM_ref_addr here.
-
- * libdw_form.c (__libdw_form_val_len): Fix DW_FORM_ref_addr result,
- needs to check CU->version.
-
- * libdwP.h (struct Dwarf_CU): New member `version'.
- * libdw_findcu.c (__libdw_findcu): Initialize it.
-
- * dwarf_child.c: Return 1 for null entry as first child.
-
-2007-10-05 Roland McGrath <roland@redhat.com>
-
- * dwarf_begin_elf.c (check_section): Punt on SHT_NOBITS sections.
-
- * libdw.h (__extern_inline): Rename to __libdw_extern_inline.
- [__OPTIMIZE__] (dwarf_whatattr, dwarf_whatform): Update uses.
-
-2007-10-03 Roland McGrath <roland@redhat.com>
-
- * libdw.map (ELFUTILS_0.130: Add dwfl_build_id_find_elf
- and dwfl_build_id_find_debuginfo.
-
- * libdw.map (ELFUTILS_0.130): New version set, inherits from
- ELFUTILS_0.127. Add dwfl_module_build_id, dwfl_module_report_build_id.
-
-2007-10-02 Roland McGrath <roland@redhat.com>
-
- * libdw_visit_scopes.c (classify_die): Return walk for class_type and
- structure_type.
-
-2007-08-07 Roland McGrath <roland@redhat.com>
-
- * dwarf_getscopes.c (pc_match): Swallow dwarf_haspc error return when
- error code is DWARF_E_NOERROR (0).
-
- * dwarf_getscopes.c (pc_record): Always bail early if DIE->prune.
- Fix typo in __libdw_visit_scopes argument.
-
- * dwarf_getscopes.c (pc_match): Check dwarf_haspc error return,
- swallow DWARF_E_NO_DEBUG_RANGES but not other errors.
-
-2007-07-03 Roland McGrath <roland@redhat.com>
-
- * libdw.h (__extern_inline): New macro.
- [__OPTIMIZE__] (dwarf_whatattr, dwarf_whatform): Use it.
-
-2007-04-16 Roland McGrath <roland@redhat.com>
-
- * libdw.map (ELFUTILS_0.127): Add dwfl_module_address_section.
-
-2007-04-05 Roland McGrath <roland@redhat.com>
-
- * dwarf_getsrcdirs.c: New file.
- * Makefile.am (libdw_a_SOURCES): Add it.
- * libdw.h: Declare dwarf_getsrcdirs.
- * libdw.map (ELFUTILS_0.127): Add it.
-
- * libdwP.h (struct Dwarf_Files_s): New member ndirs.
- * dwarf_getsrclines.c (dwarf_getsrclines): Don't clobber NDIRLIST to
- zero before we use it to check for DWARF_E_INVALID_DIR_IDX.
- Save DIRARRAY in the Dwarf_Files.
-
- * dwarf_ranges.c (dwarf_ranges): Don't sign-extend 32-bit BEGIN
- address to check for all-ones base address entry. Check directly.
- Reported by Sébastien Dugué <sebastien.dugue@bull.net>.
-
-2007-03-25 Roland McGrath <roland@redhat.com>
-
- * dwarf_begin_elf.c (check_section): Return Dwarf * instead of void.
- Return NULL when freeing RESULT on error.
- (global_read, scngrp_read): Check return value from check_section,
- break out of loop after it has freed RESULT.
- (valid_p): Handle null argument.
-
-2007-03-12 Roland McGrath <roland@redhat.com>
-
- * libdw.map (ELFUTILS_0.127): Add dwfl_report_begin_add.
-
-2007-03-04 Roland McGrath <roland@redhat.com>
-
- * libdw.map (ELFUTILS_0.127): New version set, inherits from
- ELFUTILS_0.126. Add dwfl_module_addrsym.
-
-2007-02-10 Roland McGrath <roland@redhat.com>
-
- * dwarf.h (DW_OP_fbreg): Comment fix.
-
-2007-02-03 Roland McGrath <roland@redhat.com>
-
- * dwarf_getelf.c (dwarf_getelf): Renamed from dwarf_get_elf.
- * libdw.map (ELFUTILS_0.126): New version set, inherits from
- ELFUTILS_0.122. Move dwarf_getelf there; it was never truly
- exported in the past.
-
-2006-12-17 Roland McGrath <roland@redhat.com>
-
- * dwarf_getlocation.c (dwarf_getlocation_addr): Use zero as base
- address when the CU is missing attributes due to buggy GCC.
-
-2006-08-29 Roland McGrath <roland@redhat.com>
-
- * Makefile.am (CLEANFILES): Add libdw.so.$(VERSION).
-
- * libdw.h (dwarf_diecu): Add __nonnull_attribute__.
- (dwarf_child): Don't list arg 1 in __nonnull_attribute__.
-
- * libdw_alloc.c (__libdw_allocate): Take new ALIGN argument, make sure
- result is aligned. Adjust NEWP->remaining here for this allocation.
- * libdwP.h: Update decl.
- (libdw_alloc): Update caller.
-
-2006-07-12 Ulrich Drepper <drepper@redhat.com>
-
- * dwarf_child.c: Adjust for internal_function_def removal.
- * dwarf_getabbrev.c: Likewise.
- * dwarf_tag.c: Likewise.
- * libdw_form.c: Likewise.
- * memory-access.c: Likewise.
-
-2006-06-28 Roland McGrath <roland@redhat.com>
-
- * libdw.map: Export dwfl_linecu, dwfl_line_comp_dir.
-
- * libdw.map: Bump to 0.122; export dwfl_module_getsymtab and
- dwfl_module_getsym.
-
-2006-05-27 Ulrich Drepper <drepper@redhat.com>
-
- * libdw.h: Add extern "C".
-
-2006-05-22 Ulrich Drepper <drepper@redhat.com>
-
- * dwarf_getaranges.c (dwarf_getaranges): Handle files without
- aranges information.
-
-2006-05-21 Ulrich Drepper <drepper@redhat.com>
-
- * libdw.h: Add nonnull attributes to dwarf_tag, dwarf_getattrs,
- dwarf_haschildren.
-
-2006-02-28 Roland McGrath <roland@redhat.com>
-
- * dwarf.h: Add missing DW_ATE_*, DW_TAG_*, DW_LANG_*, DW_CFA_*,
- DW_OP_* values, to match DWARF 3.0. Add new DW_DS_*, DW_END_*
- values from DWARF 3.0.
-
-2006-02-22 Roland McGrath <roland@redhat.com>
-
- * libdw.map: Bump to 0.120; export dwfl_version.
-
-2005-12-22 Roland McGrath <roland@redhat.com>
-
- * libdw.map: Bump to 0.119; export dwfl_linux_proc_maps_report.
-
-2005-12-12 Roland McGrath <roland@redhat.com>
-
- * dwarf_ranges.c: Copy CU base address-finding code from
- dwarf_getlocation.
-
-2005-12-09 Roland McGrath <roland@redhat.com>
-
- * dwarf_getlocation.c (dwarf_getlocation_addr): Add some unlikelys.
- Delay CU base lookup until it's needed.
- If CU base lookup fails with no error, flag invalid DWARF.
-
-2005-11-25 Roland McGrath <roland@redhat.com>
-
- * libdw.map: Bump to 0.118; export dwfl_module_register_names.
-
-2005-11-15 Roland McGrath <roland@redhat.com>
-
- * Makefile.am [BUILD_STATIC] (AM_CFLAGS): Add -fpic.
-
-2005-11-13 Roland McGrath <roland@redhat.com>
-
- * libdw.map: Bump to 0.117; export dwfl_module_return_value_location.
-
-2005-10-27 Roland McGrath <roland@redhat.com>
-
- * dwarf_entry_breakpoints.c (search_range): Fix binary search code;
- don't match end_sequence markers.
-
- * dwarf_getsrclines.c (compare_lines): Sort end_sequence markers
- before normal records at the same address.
- * dwarf_getsrc_die.c (dwarf_getsrc_die): Don't match an end_sequence
- marker.
-
-2005-10-26 Roland McGrath <roland@redhat.com>
-
- * dwarf_getfuncs.c (dwarf_getfuncs): Use Dwarf_Die, not Dwarf_Func.
- * dwarf_func_file.c: Renamed to ...
- * dwarf_decl_file.c: ... here.
- * dwarf_func_col.c: Renamed to ...
- * dwarf_decl_column.c: ... here.
- * dwarf_func_line.c: Renamed to ...
- * dwarf_decl_line.c: ... here.
- (dwarf_func_line): Renamed to ...
- (dwarf_decl_line): ... this. Take a Dwarf_Die * argument.
- (__libdw_func_intval): Renamed __libdw_attr_intval.
- * dwarf_func_name.c: File removed.
- * dwarf_func_lowpc.c: File removed.
- * dwarf_func_highpc.c: File removed.
- * dwarf_func_entrypc.c: File removed.
- * dwarf_func_die.c: File removed.
- * Makefile.am (libdw_a_SOURCES): Updated.
- * libdw.h: Update decls.
- (Dwarf_Func): Type removed.
- * libdwP.h: Update decls.
- (struct Dwarf_Func_s): Type removed.
- * libdw.map: Updated.
-
- * libdwP.h (CUDIE): New macro.
- * dwarf_getlocation.c (dwarf_getlocation_addr): Use it.
- * dwarf_getscopes_die.c (dwarf_getscopes_die): Likewise.
- * dwarf_ranges.c (dwarf_ranges): Likewise.
-
- * dwarf_getloclist.c: Renamed to ...
- * dwarf_getlocation.c: ... here.
- (getloclist): Renamed to getlocation.
- (dwarf_getloclist): Renamed to dwarf_getlocation.
- (dwarf_addrloclists): Renamed to dwarf_getlocation_addr.
- * Makefile.am (libdw_a_SOURCES): Updated.
- * libdw.h (dwarf_getloclist): Renamed to dwarf_getlocation.
- (dwarf_addrloclists): Renamed dwarf_getlocation_addr.
- (Dwarf_Loc): Renamed Dwarf_Op.
- * libdwP.h (struct loc_s): Update use.
- * libdw.map: Update map.
-
- * dwarf_entry_breakpoints.c: Use the second line record within the
- function, regardless of its source location data.
-
-2005-10-25 Roland McGrath <roland@redhat.com>
-
- * dwarf_entry_breakpoints.c: Fall back to entrypc for contiguous too.
-
- * libdw.map: Add dwarf_entrypc, dwarf_entry_breakpoints.
-
-2005-10-14 Roland McGrath <roland@redhat.com>
-
- * dwarf_diecu.c (dwarf_diecu): New file.
- * Makefile.am (libdw_a_SOURCES): Add it.
- * libdw.h: Declare dwarf_diecu.
- * libdw.map: Export it.
-
- * libdw.map: Bump to 0.116; export dwarf_ranges.
-
-2005-09-20 Roland McGrath <roland@redhat.com>
-
- * dwarf_haspc.c: Use dwarf_ranges.
- * dwarf_entry_breakpoints.c: Likewise.
-
- * dwarf_ranges.c: New file.
- * Makefile.am (libdw_a_SOURCES): Add it.
- * libdw.h: Declare dwarf_ranges.
- * libdwP.h: Add INTDECL.
-
-2005-09-14 Roland McGrath <roland@redhat.com>
-
- * dwarf_entry_breakpoints.c (dwarf_entry_breakpoints): Fix braino in
- prologue_end marker scanning loop.
-
-2005-09-11 Roland McGrath <roland@redhat.com>
-
- * dwarf.h: Comment typo fix.
-
-2005-09-07 Roland McGrath <roland@redhat.com>
-
- * dwarf_entry_breakpoints.c: New file.
- * Makefile.am (libdw_a_SOURCES): Add it.
- * libdw.h: Declare dwarf_entry_breakpoints.
-
- * dwarf_entrypc.c: New file.
- * Makefile.am (libdw_a_SOURCES): Add it.
- * libdw.h: Declare dwarf_entrypc.
- * libdwP.h: Add INTDECL.
-
-2005-08-28 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: Use $(LINK) not $(CC) when creating DSO.
- (%.os): Use COMPILE.os.
- (COMPILE.os): Filter out gconv options.
-
-2005-08-27 Roland McGrath <roland@redhat.com>
-
- * dwarf_getscopes.c (dwarf_getscopes): Rewritten using
- __libdw_visit_scopes.
-
- * dwarf_getscopes_die.c: New file.
- * Makefile.am (libdw_a_SOURCES): Add it.
- * libdw.h: Declare dwarf_getscopes_die.
- * libdw.map: Bump to 0.115 and add it.
-
- * libdw_visit_scopes.c (__libdw_visit_scopes): Pass a struct
- containing a DIE and its parent pointer, instead of just Dwarf_Die.
- Take two functions for both preorder and postorder visitors.
- * libdwP.h: Update decl.
- (struct Dwarf_Die_Chain): New type.
- * dwarf_func_inline.c: Update uses.
-
- * dwarf_diename.c (dwarf_diename): Use dwarf_attr_integrate.
- Add INTDEF.
- * libdwP.h: Add INTDECL.
- * dwarf_func_name.c (dwarf_func_name): Use dwarf_diename.
-
-2005-08-23 Roland McGrath <roland@redhat.com>
-
- * dwarf_attr_integrate.c (dwarf_attr_integrate): Treat
- DW_AT_specification the same as DW_AT_abstract_origin.
-
-2005-08-20 Roland McGrath <roland@redhat.com>
-
- * libdw.map: Add dwfl_cumodule, remove dwfl_linecu.
- Add dwfl_linux_kernel_report_offline, dwfl_offline_section_address,
- and dwfl_report_offline.
-
-2005-08-19 Roland McGrath <roland@redhat.com>
-
- * libdw.map: Bump version to ELFUTILS_0.114 for libdwfl changes.
- Add dwfl_module_relocate_address, dwfl_module_relocations,
- dwfl_module_relocation_info.
-
-2005-08-18 Roland McGrath <roland@redhat.com>
-
- * dwarf_getscopes.c (dwarf_getscopes): Include the CU itself as
- outermost scope in the results.
-
-2005-08-15 Roland McGrath <roland@redhat.com>
-
- * dwarf_func_inline.c: New file.
- * Makefile.am (libdw_a_SOURCES): Add it.
- * libdw.h: Declare dwarf_func_inline, dwarf_func_inline_instances.
- * libdw.map: Add them.
-
- * dwarf_func_die.c: New file.
- * Makefile.am (libdw_a_SOURCES): Add it.
- * libdw.h: Declare dwarf_func_die.
- * libdw.map: Add it. Bump version to ELFUTILS_0.114.
-
-2005-08-10 Ulrich Drepper <drepper@redhat.com>
-
- * dwarf_getsrclines.c (dwarf_getsrclines): Correct fallout of renaming
- of DW_LNS_set_epilog_begin.
-
-2005-08-09 Roland McGrath <roland@redhat.com>
-
- * dwarf.h (DW_LNS_set_epilog_begin): Renamed DW_LNS_set_epilogue_begin.
-
- * dwarf_end.c: Add INTDEF.
- * dwarf_error.c (dwarf_errmsg): Likewise.
- * libdwP.h (dwarf_end, dwarf_errmsg): Add INTDECLs.
-
-2005-08-01 Roland McGrath <roland@redhat.com>
-
- * dwarf_getaranges.c (dwarf_getaranges): Check for bogus offset.
- * dwarf_getabbrev.c (__libdw_getabbrev): Likewise.
-
-2005-07-28 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am (libdw.so): No need to link with libeu.a anymore.
- (libdw_a_LIBADD): Add all files from libdwfl.a.
-
-2005-07-27 Roland McGrath <roland@redhat.com>
-
- * Makefile.am (libdw.so): Link ../libdwfl/libdwfl_pic.a in,
- along with ../libebl/libebl.a and ../lib/libeu.a;
- depend on ../libelf/libelf.so.
- (libdw_so_LDADD): New variable.
- * libdw.map: Add dwfl_* symbols formerly in ../libdwfl/libdwfl.map.
-
- * libdw.map: Define an empty base version and move all symbols to
- version ELFUTILS_0.111; don't define ELFUTILS_1.0 at all yet.
-
-2005-07-23 Ulrich Drepper <drepper@redhat.com>
-
- * dwarf_error.c: Add internal alias for dwarf_errno.
- * libdwP.h: Declare __dwarf_errno_internal.
- * dwarf_getloclist.c: Use INTDEF for dwarf_errno.
-
- * dwarf_error.c [USE_TLS]: Actually use __thread in definition of
- global_error.
-
-2005-06-01 Roland McGrath <roland@redhat.com>
-
- * dwarf_getaranges.c (dwarf_getaranges): Sort result array.
- * dwarf_getarange_addr.c (dwarf_getarange_addr): Use binary search.
-
-2005-06-08 Roland McGrath <roland@redhat.com>
-
- * memory-access.h (get_uleb128_step, get_uleb128): Remove casts.
- (get_sleb128_step, get_sleb128): Likewise.
- * dwarf_getattrs.c (dwarf_getattrs): Add consts.
- * dwarf_getloclist.c (getloclist): Likewise.
- * dwarf_formblock.c (dwarf_formblock): Likewise.
- * dwarf_getsrclines.c (dwarf_getsrclines): Likewise.
- * dwarf_getabbrevattr.c (dwarf_getabbrevattr): Likewise.
- * dwarf_formref.c (dwarf_formref): Likewise.
- * dwarf_formsdata.c (dwarf_formsdata): Likewise.
- * dwarf_formudata.c (dwarf_formudata): Likewise.
- * dwarf_haschildren.c (dwarf_haschildren): Likewise.
- * dwarf_child.c (__libdw_find_attr, __libdw_find_attr): Likewise.
- * dwarf_tag.c (dwarf_tag): Likewise.
- * dwarf_getabbrev.c (__libdw_getabbrev): Likewise.
- * memory-access.c (__libdw_get_uleb128, __libdw_get_sleb128): Likewise.
- * libdw_form.c (__libdw_form_val_len): Likewise.
- * libdwP.h: Update decl.
-
-2005-06-04 Roland McGrath <roland@redhat.com>
-
- * memory-access.h (get_uleb128_rest_return): New macro.
- [! IS_LIBDW] (__libdw_get_uleb128): New static, defined using it.
- (get_sleb128_rest_return): New macro.
- [! IS_LIBDW] (__libdw_get_sleb128): New static, defined using it.
- * memory-access.c: New file.
- * Makefile.am (libdw_a_SOURCES): Add it.
- (DEFS): Add -DIS_LIBDW.
-
-2005-05-31 Roland McGrath <roland@redhat.com>
-
- * dwarf_formref_die.c (dwarf_formref_die): Add CU header offset to
- formref offset.
-
-2005-05-30 Roland McGrath <roland@redhat.com>
-
- * dwarf_getloclist.c (dwarf_addrloclists): Use DW_AT_entry_pc for base
- address if DW_AT_low_pc is missing. Not to spec, but GCC generates it.
-
- * dwarf_getloclist.c (dwarf_addrloclists): Don't sign-extend 4-byte
- BEGIN value. Instead, match base address entries separately for
- 32/64 size cases.
-
-2005-05-28 Roland McGrath <roland@redhat.com>
-
- * dwarf_getloclist.c (dwarf_addrloclists): Fix decoding to advance
- past location expression contents.
-
-2005-05-23 Roland McGrath <roland@redhat.com>
-
- * dwarf_getsrclines.c: Comment typo fix.
-
- * dwarf_haspc.c (dwarf_haspc): Fix CU DIE address calculation.
- * dwarf_getloclist.c (dwarf_addrloclists): Likewise.
-
-2005-05-22 Ulrich Drepper <drepper@redhat.com>
-
- * libdwP.h: Only use INTDECL for alias prototypes.
-
-2005-05-19 Roland McGrath <roland@redhat.com>
-
- * dwarf_getloclist.c (attr_ok): Permit DW_AT_static_link too.
-
- * dwarf_getscopevar.c: New file.
- * Makefile.am (libdw_a_SOURCES): Add it.
- * libdw.h: Declare dwarf_getscopevar.
-
- * dwarf_getsrcfiles.c: Add INTDEF.
- * dwarf_haschildren.c: Likewise.
- * libdwP.h (dwarf_getsrcfiles, dwarf_haschildren): Add INTDECL.
-
- * dwarf_getscopes.c: New file.
- * Makefile.am (libdw_a_SOURCES): Add it.
- * libdw.h: Declare dwarf_getscopes.
- * libdw.map: Add it.
-
-2005-05-18 Roland McGrath <roland@redhat.com>
-
- * libdwP.h (IDX_debug_ranges): New enum constant.
- * dwarf_begin_elf.c (dwarf_scnnames): Add it for ".debug_ranges".
- * libdwP.h (DWARF_E_NO_DEBUG_RANGES): New enum constant.
- * dwarf_error.c (errmsgs): Add it.
- * dwarf_haspc.c: New file.
- * libdw.h: Declare dwarf_haspc.
- * libdw.map: Add it.
- * libdwP.h: Add INTDECL.
-
- * dwarf_attr_integrate.c: New file.
- * dwarf_hasattr_integrate.c: New file.
- * Makefile.am (libdw_a_SOURCES): Add them.
- * libdw.h: Declare dwarf_attr_integrate, dwarf_hasattr_integrate.
- * libdw.map: Add them.
-
- * dwarf_hasattr.c: Add INTDEF.
- * libdwP.h: Add INTDECL for it.
-
- * dwarf_formref_die.c: New file.
- * Makefile.am (libdw_a_SOURCES): Add it.
- * libdw.h (dwarf_formref_die): Declare it.
- * libdwP.h (dwarf_formref_die): Add INTDECL.
- * libdw.map: Add it.
-
- * dwarf_getloclist.c (attr_ok, getloclist): New functions, broken out
- of ...
- (dwarf_getloclist): ... here. Call them.
- (dwarf_addrloclists): New function.
- * libdw.h: Declare it.
- * libdw.map: Add it.
-
- * dwarf_getmacros.c (dwarf_getmacros): Don't bail at
- DW_MACINFO_end_file. Recognize type 0 as terminator.
-
-2005-05-05 Roland McGrath <roland@redhat.com>
-
- * dwarf_getsrc_die.c (dwarf_getsrc_die): Use binary search.
-
- * dwarf_getsrclines.c (dwarf_getsrclines): Sort result array, since
- the line program does not produce all entries in ascending order.
-
-2005-04-25 Ulrich Drepper <drepper@redhat.com>
-
- * dwarf_getsrc_file.c (dwarf_getsrc_file): Handle multiple
- occurences (e.g., inlines) better.
-
-2005-04-24 Ulrich Drepper <drepper@redhat.com>
-
- * libdw.h (DWARF_END_ABBREV): Define.
- * dwarf_getabbrev.c (__libdw_getabbrev): Return DWARF_END_ABBREV if
- end is reached.
- * dwarf_offabbrev.c (dwarf_offabbrev): Return -1 on error, 1 if end
- of records reached.
- * dwarf_tag.c (__libdw_findabbrev): Also recognize DWARF_END_ABBREV
- as error of __libdw_getabbrev.
-
-2005-04-04 Ulrich Drepper <drepper@redhat.com>
-
- * dwarf_getsrc_file.c (dwarf_getsrc_file): Minor optimization.
-
- * dwarf_getsrc_file.c (dwarf_getsrc_file): Always pass number of
- results back to caller.
-
-2005-04-04 Roland McGrath <roland@redhat.com>
-
- * dwarf_getsrc_file.c (dwarf_getsrc_file): Use size_t for CUHL.
-
- * dwarf_func_line.c (__libdw_func_intval): Use internal_function in
- defn.
-
-2005-04-04 Ulrich Drepper <drepper@redhat.com>
-
- * dwarf_getsrc_file.c (dwarf_getsrc_file): Use INTUSE.
-
- * dwarf_getsrc_file.c: New file.
- * Makefile.am (libdw_a_SOURCES): Add dwarf_getsrc_file.c.
- * libdw.h: Declare dwarf_getsrc_file.
- * libdw.map: Add dwarf_getsrc_file.
-
-2005-04-02 Ulrich Drepper <drepper@redhat.com>
-
- * dwarf_func_entrypc.c: New file.
- * dwarf_func_col.c: New file.
- * dwarf_func_line.c: New file.
- * dwarf_func_file.c: New file.
- * libdw.h: Add prototypes for new functions.
- * libdw.map: Add dwarf_func_entrypc, dwarf_func_col, dwarf_func_line,
- dwarf_func_file.
- * Makefile.am (libdw_a_SOURCES): Add dwarf_func_entrypc.c,
- dwarf_func_col.c, dwarf_func_line.c, dwarf_func_file.c.
- * libdwP.h (struct Dwarf_Func_s): Add cudie element.
- Declare __libdw_func_intval and __dwarf_formsdata_internal.
- * dwarf_getfuncs.c: Also fill in cudie in Dwarf_Func object.
- * dwarf_formsdata.c: Use INTUSE and INTDEF to avoid PLTs.
-
- * dwarf.h: Add some DWARF3 definitions.
-
-2005-04-01 Ulrich Drepper <drepper@redhat.com>
-
- * dwarf_getfuncs.c: New file.
- * dwarf_func_highpc.c: New file.
- * dwarf_func_lowpc.c: New file.
- * dwarf_func_name.c: New file.
- * Makefile.am (libdw_a_SOURCES): Add dwarf_getfuncs.c,
- dwarf_func_highpc.c, dwarf_func_lowpc.c, and dwarf_func_name.c.
- * libdw.map: Add dwarf_getfuncs, dwarf_func_highpc, dwarf_func_lowpc,
- and dwarf_func_name.
- * libdw.h: Add prototypes for new functions.
- * dwarf_child.c: Use INTUSE and INTDEF to avoid PLTs.
- * dwarf_siblingof.c: Likewise.
- * dwarf_dieoffset.c: Likewise.
- * dwarf_highpc.c: Likewise.
- * dwarf_lowpc.c: Likewise.
- * libdwP.h: Add prototypes for internal functions.
- Define Dwarf_Func_s structure.
-
-2005-03-29 Ulrich Drepper <drepper@redhat.com>
-
- * libdw.h: Add padding in Dwarf_die.
-
- * dwarf_arrayorder.c: Use INTUSE and INTDEF to avoid PLTs.
- * dwarf_attr.c: Likewise.
- * dwarf_begin.c: Likewise.
- * dwarf_begin_elf.c: Likewise.
- * dwarf_bitoffset.c: Likewise.
- * dwarf_bitsize.c: Likewise.
- * dwarf_bytesize.c: Likewise.
- * dwarf_diename.c: Likewise.
- * dwarf_formaddr.c: Likewise.
- * dwarf_formblock.c: Likewise.
- * dwarf_formref.c: Likewise.
- * dwarf_formstring.c: Likewise.
- * dwarf_formudata.c: Likewise.
- * dwarf_getarange_addr.c: Likewise.
- * dwarf_getarangeinfo.c: Likewise.
- * dwarf_getaranges.c: Likewise.
- * dwarf_getloclist.c: Likewise.
- * dwarf_getmacros.c: Likewise.
- * dwarf_getsrc_die.c: Likewise.
- * dwarf_getsrcfiles.c: Likewise.
- * dwarf_getsrclines.c: Likewise.
- * dwarf_highpc.c: Likewise.
- * dwarf_lowpc.c: Likewise.
- * dwarf_nextcu.c: Likewise.
- * dwarf_offdie.c: Likewise.
- * dwarf_siblingof.c: Likewise.
- * dwarf_srclang.c: Likewise.
- * dwarf_tag.c: Likewise.
- * libdw_findcu.c: Likewise.
- * libdwP.h: Add prototypes for internal functions.
-
- * dwarf_addrdie.c: New file.
- * dwarf_macro_opcode.c: New file.
- * dwarf_macro_param1.c: New file.
- * dwarf_macro_param2.c: New file.
- * libdw.h: Add declarations. Move Dwarf_Macro definition to libdwP.h.
- * libdwP.h: Remove Dwarf_Macro definition.
- * Makefile.am (libdw_a_SOURCES): Add dwarf_addrdie.c,
- dwarf_macro_opcode.c, dwarf_macro_param1.c, and dwarf_macro_param2.c.
- * libdw.map: Add entries for new functions.
-
-2005-03-21 Ulrich Drepper <drepper@redhat.com>
-
- * libdw.h: Handle broken gcc < 4.
-
-2005-02-15 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile (AM_CFLAGS): Add -Wunused -Wextra -Wformat=2.
-
- * dwarf_begin_elf.c: Fix warnings.
- * dwarf_dieoffset.c: Likewise.
- * dwarf_end.c: Likewise.
- * dwarf_error.c: Likewise.
- * dwarf_getpubnames.c: Likewise.
-
- * libdwP.h: Add new error values.
- * dwarf_error.c: Support new error values.
- * dwarf_getpubnames.c: Check parameter value.
-
-2005-02-05 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: Check for text relocations in constructed DSO.
-
- * Makefile.am [MUDFLAP] (AM_CFLAGS): Add -fmudflap.
-
-2005-02-04 Ulrich Drepper <drepper@redhat.com>
-
- * dwarf_siblingof.c (dwarf_siblingof): Add some buffer boundary
- checks to not read over buffer boundaries for ill-formed DWARF data.
-
-2004-09-25 Ulrich Drepper <drepper@redhat.com>
-
- * dwarf_child.c: Make compile with gcc 4.0.
- * dwarf_error.c: Likewise.
- * dwarf_formblock.c: Likewise.
- * dwarf_getabbrev.c: Likewise.
- * dwarf_getattrs.c: Likewise.
- * dwarf_getsrclines.c: Likewise.
- * dwarf_tag.c: Likewise.
- * libdw_form.c: Likewise.
-
-2004-01-20 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: Support building with mudflap.
-
- * dwarf_getloclist.c: Fix warnings gcc 3.4 spits out.
- * dwarf_getsrclines.c: Likewise.
- * dwarf_memory-access.h: Likewise.
-
-2004-01-19 Ulrich Drepper <drepper@redhat.com>
-
- * dwarf_getsrcfiles.c: Third parameter can be NULL.
-
- * libdw.h: Define Dwarf_macro. Declare dwarf_getmacros.
- Third parameter of dwarf_getsrcfiles can be NULL.
-
- * libdw.map: Add dwarf_getmacros.
- * Makefile.am (libdw_a_SOURCES): Add dwarf_getmacros.
- * dwarf_getmacros.c: New file.
-
-2004-01-18 Ulrich Drepper <drepper@redhat.com>
-
- * libdw.h: Second parameter of dwarf_getaranges can be NULL.
-
- * dwarf_nextcu.c: Return -1 if dwarf parameter is NULL.
-
- * dwarf_getsrclines.c:
- Use read_2ubyte_unaligned_inc instead of _inc-less variant.
-
- * dwarf_getaranges.c: Allow naranges parameter to be NULL.
-
- * libdwP.h (_): Use elfutils domain.
-
- * dwarf_getsrclines.c (dwarf_getsrclines): Add more branch prediction.
-
- * dwarf_getsrclines.c: Fix typo in comment.
-
-2004-01-17 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: Support building with mudflap.
-
-2004-01-16 Ulrich Drepper <drepper@redhat.com>
-
- * memory-access.h: Add lots of const in case a pointer passed is const.
-
- * dwarf_formflag.c: New file.
- * dwarf_getattrs.c: New file.
- * dwarf_error.c: Add new error value.
- * libdw.h: Add prototypes for new functions. Adjust prototype for
- dwarf_getpubnames.
- * libdw.map: Add new functions.
- * dwarf_getpubnames.c: Change type of return value and fourth parameter
- to ptrdiff_t.
- * libdwP.h: Add new error value.
- * Makefile.am (libdw_a_SOURCES): Add dwarf_getattrs.c and
- dwarf_formflag.c.
-
- * dwarf_getpubnames.c (dwarf_getpubnames): Just fail if dbg is NULL.
-
-2004-01-12 Ulrich Drepper <drepper@redhat.com>
-
- * dwarf_getarange_addr.c: New file
- * dwarf_getarangeinfo.c: New file.
- * dwarf_getaranges.c: New file.
- * dwarf_onerange.c: New file.
- * libdw.h: Declare new functions. Define Dwarf_Arange and
- Dwarf_Aranges.
- * libdw.map: Add new functions.
- * libdwP.h: Add new errors. Add aranges member to struct Dwarf.
- Define Dwarf_Aranges_s and Dwarf_Arange_s.
- * Makefile.am (libdw_a_SOURCES): Add dwarf_getaranges.c,
- dwarf_onearange.c, dwarf_getarangeinfo.c, dwarf_getarange_addr.c.
- * dwarf_error.c: Add new message.
-
-2004-01-11 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am (libdw_a_SOURCES): Add dwarf_lineaddr.c, dwarf_linecol.c,
- dwarf_linebeginstatement.c, dwarf_lineendsequence.c, dwarf_lineblock.c,
- dwarf_lineprologueend.c, dwarf_lineepiloguebegin.c, dwarf_onesrcline.c.
- * dwarf_error.c: Add another message.
- * dwarf_getsrc_die.c: Adjust for Dwarf_Files and Dwarf_Lines
- introduction.
- * dwarf_filesrc.c: Likewise.
- * dwarf_getsrcfiles.c: Likewise.
- * dwarf_getsrclines.c: Likewise.
- * dwarf_lineaddr.c: New file.
- * dwarf_linebeginstatement.c: New file.
- * dwarf_lineblock.c: New file.
- * dwarf_linecol.c: New file.
- * dwarf_lineendsequence.c: New file.
- * dwarf_lineepiloguebegin.c: New file.
- * dwarf_lineno.c: New file.
- * dwarf_lineprologueend.c: New file.
- * dwarf_onesrcline.c: New file.
- * dwarf_lineno.c: Change interface to store result in object pointed
- to by second parameter.
- * libdw.h: Add prototypes for new functions. Change dwarf_lineno
- prototype. Define Dwarf_Files and Dwarf_Lines.
- * libdw.map: Add new functions.
- * libdwP.h: Define Dwarf_Files_s and Dwarf_Lines_s.
- * libdw_findcu.c: Don't initialize nlines field.
-
- * dwarf_siblingof: Little optimization.
-
- * dwarf_begin.c: Remember that the ELF descriptor must be closed.
- * dwarf_end.c: Close ELF descriptor if free_elf is set.
- * libdwP.h (struct Dwarf): Add free_elf field.
-
- * Makefile.am (libdw_a_SOURCES): Add dwarf_getstring.c and
- dwarf_offabbrev.c.
- * dwarf_getstring.c: New file.
- * dwarf_offabbrev.c: New file.
- * libdw.map: Add dwarf_getstring and dwarf_offabbrev.
- * dwarf_getabbrev.c (__libdw_getabbrev): Add new dbg and result
- parameters. Don't allocate memory if not necessary and don't lookup
- previous results if no CU given.
- (dwarf_getabbrev): Adjust call to __libdw_getabbrev.
- * dwarf_tag.c: Adjust call to __libdw_getabbrev.
- * libdw.h: Declare dwarf_offabbrev and dwarf_getstring.
- * libdwP.h: Change prototype for __libdw_getabbrev.
-
- * dwarf_getabbrevattr.c: Add offsetp parameter. Fill in before
- returning if this is wanted.
-
-2004-01-09 Ulrich Drepper <drepper@redhat.com>
-
- * dwarf_nextcu.c: Add new parameter offset_sizep. Initialize it
- with offset_size value.
- * libdw.h: Adjust dwarf_nextcu prototype.
- * libdwP.h (struct Dwarf_CU): Add offset_size member.
- * libdw_findcu.c: Adjust dwarf_nextcu call. Initialize offset_size
- member of new CU struct.
- * dwarf_formstring.c: Depend on offset_size not address_size for
- DW_FORM_strp handling.
- * dwarf_form.c: Likewise for DW_FORM_strp and DW_FORM_ref_addr.
-
- * dwarf_tag.c (__libdw_findabbrev): Return correct value for
- failing lookup.
- (dwarf_tag): Correctly recognize failed lookup.
-
- * dwarf_end.c (cu_free): Call tdestroy for locs member. Use new
- function noop_free.
- * dwarf_error.c: Add message for DWARF_E_NO_BLOCK.
- * dwarf_formblock.c: New file.
- * dwarf_getloclist.c: Rewrite to handle a single block.
- * libdw.h: Define Dwarf_Block. Rename Dwarf_Loc members. Remove
- Dwarf_Locdesc definition. Declare dwarf_formblock. Remove
- dwarf_getloclistent declaration.
- * libdw.map: Add dwarf_formblock, remove dwarf_getloclistent.
- * libdwP.h: Define struct loc_s and DWARF_E_NO_BLOCK.
- Add locs member to struct Dwarf_CU.
- * libdw_fundcu.c: Initialize locs member of new CU.
- * Makefile.am (libdw_a_SOURCES): Add dwarf_formblock.c.
- Remove dwarf_getloclistent.c.
-
-2004-01-07 Ulrich Drepper <drepper@redhat.com>
-
- * libdw.h: Use __nonnull__ attribute only for gcc >= 3.3.
- * libdwP.h: Likewise.
-
- * dwarf_getloclist.c: New file.
- * dwarf_getloclistent.c: New file.
- * libdw.h: Define Dwarf_Loc and Dwarf_Locdesc.
- Declare dwarf_getloclistent and dwarf_getloclist.
- * libdw.map: Add dwarf_getloclistent and dwarf_getloclist.
- * libdwP.h: Define DWARF_E_NO_LOCLIST.
- * Makefile.am (libdw_a_SOURCES): Add dwarf_getloclistent.c and
- dwarf_getloclist.c.
-
- * dwarf_error.c: More error messages.
-
-2004-01-06 Ulrich Drepper <drepper@redhat.com>
-
- * dwarf_getsrclines.c: Remove debugging support.
-
- * dwarf_getsrcfiles.c: New file.
- * dwarf_filesrc.c: New file.
- * libdw.h: Declare these functions. Define Dwarf_File.
- * libdwP.c: Adjust Dwarf_File_s definition.
- * libdw.map: Add these functions.
- * Makefile.am (libdw_a_SOURCES): Add dwarf_getsrcfiles.c and
- dwarf_filesrc.c.
- * dwarf_getsrclines.c: Initialize cu->files.
-
-2004-01-05 Ulrich Drepper <drepper@redhat.com>
-
- * libdw.h: Add more nonnull function attributes.
-
- * dwarf_begin_elf.c (dwarf_begin_elf): Don't initialize mem_tail->next.
- * dwarf_end.c (cu_free): New function.
- (dwarf_end): Also free CU tree. Correct freeing of memory blocks.
- * dwarf_error.c (errmsgs): Add new messages.
- * dwarf_getsrc_die.c: New file.
- * dwarf_getsrclines.c: New file.
- * dwarf_lineno.c: New file.
- * dwarf_linesrc.c: New file.
- * dwarf_nextcu.c (dwarf_nextcu): Use read_*byte_unaligned_inc
- instead of the *_inc-less variants.
- * libdw.h: Define Dwarf_Line. Add some function attributes. Declare
- dwarf_getsrclines, dwarf_getsrc_die, dwarf_lineno, and dwarf_linesrc.
- * libdw.map: Add dwarf_getsrclines, dwarf_getsrc_die, dwarf_lineno,
- and dwarf_linesrc.
- * libdwP.h: Add more error codes.
- (struct Dwarf): Remove mem_tail.next member.
- (Dwarf_File): Define type.
- (struct Dwarf_Line_s): Define type.
- (struct Dwarf_CU): Add lines and nlines members.
- (libdw_alloc): Define local variable _tail and use it.
- Add some function attributes.
- * libdw_alloc.c (__libdw_allocate): Don't initialize next member.
- * libdw_findcu.c (__libdw_findcu): Initialize lines and nlines members.
- * memory-access.h: Add unlikely for the endian conversion paths.
- * Makefile.am (AM_CFLAGS): Add -std parameter.
- (libdw_a_SOURCES): Add dwarf_getsrclines, dwarf_getsrc_die,
- dwarf_lineno, and dwarf_linesrc.
-
-2003-08-11 Ulrich Drepper <drepper@redhat.com>
-
- * Moved to CVS archive.
diff --git a/libdw/Makefile.am b/libdw/Makefile.am
deleted file mode 100644
index 69ce526..0000000
--- a/libdw/Makefile.am
+++ /dev/null
@@ -1,133 +0,0 @@
-## Process this file with automake to create Makefile.in
-##
-## Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Red Hat, Inc.
-## This file is part of Red Hat elfutils.
-##
-## Red Hat elfutils is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by the
-## Free Software Foundation; version 2 of the License.
-##
-## Red Hat elfutils 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
-## General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License along
-## with Red Hat elfutils; if not, write to the Free Software Foundation,
-## Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-##
-## Red Hat elfutils is an included package of the Open Invention Network.
-## An included package of the Open Invention Network is a package for which
-## Open Invention Network licensees cross-license their patents. No patent
-## license is granted, either expressly or impliedly, by designation as an
-## included package. Should you wish to participate in the Open Invention
-## Network licensing program, please visit www.openinventionnetwork.com
-## <http://www.openinventionnetwork.com>.
-##
-DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H -DIS_LIBDW
-if MUDFLAP
-AM_CFLAGS = -fmudflap
-else
-AM_CFLAGS =
-endif
-if BUILD_STATIC
-AM_CFLAGS += -fpic
-endif
-AM_CFLAGS += -Wall -Werror -Wshadow -Wunused -Wformat=2 -Wextra -std=gnu99
-INCLUDES = -I. -I$(srcdir) -I$(srcdir)/../libelf -I.. -I$(srcdir)/../lib
-VERSION = 1
-
-COMPILE.os = $(filter-out -fprofile-arcs, $(filter-out -ftest-coverage, \
- $(COMPILE)))
-
-lib_LIBRARIES = libdw.a
-if !MUDFLAP
-noinst_LIBRARIES = libdw_pic.a
-noinst_PROGRAMS = $(noinst_LIBRARIES:_pic.a=.so)
-endif
-
-include_HEADERS = dwarf.h
-pkginclude_HEADERS = libdw.h
-
-libdw_a_SOURCES = dwarf_begin.c dwarf_begin_elf.c dwarf_end.c dwarf_getelf.c \
- dwarf_getpubnames.c dwarf_getabbrev.c dwarf_tag.c \
- dwarf_error.c dwarf_nextcu.c dwarf_diename.c dwarf_offdie.c \
- dwarf_attr.c dwarf_formstring.c dwarf_abbrev_hash.c \
- dwarf_attr_integrate.c dwarf_hasattr_integrate.c \
- dwarf_child.c dwarf_haschildren.c dwarf_formaddr.c \
- dwarf_formudata.c dwarf_formsdata.c dwarf_lowpc.c \
- dwarf_entrypc.c dwarf_haspc.c dwarf_highpc.c dwarf_ranges.c \
- dwarf_formref.c dwarf_formref_die.c dwarf_siblingof.c \
- dwarf_dieoffset.c dwarf_cuoffset.c dwarf_diecu.c \
- dwarf_hasattr.c dwarf_hasform.c \
- dwarf_whatform.c dwarf_whatattr.c \
- dwarf_bytesize.c dwarf_arrayorder.c dwarf_bitsize.c \
- dwarf_bitoffset.c dwarf_srclang.c dwarf_getabbrevtag.c \
- dwarf_getabbrevcode.c dwarf_abbrevhaschildren.c \
- dwarf_getattrcnt.c dwarf_getabbrevattr.c \
- dwarf_getsrclines.c dwarf_getsrc_die.c \
- dwarf_getscopes.c dwarf_getscopes_die.c dwarf_getscopevar.c \
- dwarf_linesrc.c dwarf_lineno.c dwarf_lineaddr.c \
- dwarf_linecol.c dwarf_linebeginstatement.c \
- dwarf_lineendsequence.c dwarf_lineblock.c \
- dwarf_lineprologueend.c dwarf_lineepiloguebegin.c \
- dwarf_onesrcline.c dwarf_formblock.c \
- dwarf_getsrcfiles.c dwarf_filesrc.c dwarf_getsrcdirs.c \
- dwarf_getlocation.c dwarf_getstring.c dwarf_offabbrev.c \
- dwarf_getaranges.c dwarf_onearange.c dwarf_getarangeinfo.c \
- dwarf_getarange_addr.c dwarf_getattrs.c dwarf_formflag.c \
- dwarf_getmacros.c dwarf_macro_opcode.c dwarf_macro_param1.c \
- dwarf_macro_param2.c dwarf_addrdie.c \
- dwarf_getfuncs.c \
- dwarf_decl_file.c dwarf_decl_line.c dwarf_decl_column.c \
- dwarf_func_inline.c dwarf_getsrc_file.c \
- libdw_findcu.c libdw_form.c libdw_alloc.c memory-access.c \
- libdw_visit_scopes.c \
- dwarf_entry_breakpoints.c
-
-if !MUDFLAP
-libdw_pic_a_SOURCES =
-am_libdw_pic_a_OBJECTS = $(libdw_a_SOURCES:.c=.os)
-
-libdw_so_SOURCES =
-libdw.so: $(srcdir)/libdw.map libdw_pic.a \
- ../libdwfl/libdwfl_pic.a ../libebl/libebl.a \
- ../libelf/libelf.so
-# The rpath is necessary for libebl because its $ORIGIN use will
-# not fly in a setuid executable that links in libdw.
- $(LINK) -shared -o $@ -Wl,--soname,$@.$(VERSION),-z,defs \
- -Wl,--enable-new-dtags,-rpath,$(pkglibdir) \
- -Wl,--version-script,$<,--no-undefined \
- -Wl,--whole-archive $(filter-out $<,$^) -Wl,--no-whole-archive\
- -ldl
- if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi
- ln -fs $@ $@.$(VERSION)
-
-%.os: %.c %.o
- if $(COMPILE.os) -c -o $@ -fpic -DPIC -DSHARED -MT $@ -MD -MP \
- -MF "$(DEPDIR)/$*.Tpo" `test -f '$<' || echo '$(srcdir)/'`$<; \
- then cat "$(DEPDIR)/$*.Tpo" >> "$(DEPDIR)/$*.Po"; \
- rm -f "$(DEPDIR)/$*.Tpo"; \
- else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
- fi
-
-install: install-am libdw.so
- $(mkinstalldirs) $(DESTDIR)$(libdir)
- $(INSTALL_PROGRAM) libdw.so $(DESTDIR)$(libdir)/libdw-$(PACKAGE_VERSION).so
- ln -fs libdw-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir)/libdw.so.$(VERSION)
- ln -fs libdw.so.$(VERSION) $(DESTDIR)$(libdir)/libdw.so
-
-uninstall: uninstall-am
- rm -f $(DESTDIR)$(libdir)/libdw-$(PACKAGE_VERSION).so
- rm -f $(DESTDIR)$(libdir)/libdw.so.$(VERSION)
- rm -f $(DESTDIR)$(libdir)/libdw.so
- rmdir --ignore-fail-on-non-empty $(DESTDIR)$(includedir)/elfutils
-endif
-
-libdw_a_LIBADD = $(addprefix ../libdwfl/,$(shell $(AR) t ../libdwfl/libdwfl.a))
-
-noinst_HEADERS = libdwP.h memory-access.h dwarf_abbrev_hash.h
-
-EXTRA_DIST = libdw.map
-
-CLEANFILES = $(am_libdw_pic_a_OBJECTS) *.gcno *.gcda libdw.so.$(VERSION)
diff --git a/libdw/Makefile.in b/libdw/Makefile.in
deleted file mode 100644
index abf9f7c..0000000
--- a/libdw/Makefile.in
+++ /dev/null
@@ -1,748 +0,0 @@
-# Makefile.in generated by automake 1.10.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-@BUILD_STATIC_TRUE@am__append_1 = -fpic
-@MUDFLAP_FALSE@noinst_PROGRAMS = $(am__EXEEXT_1)
-@MUDFLAP_TRUE@am_libdw_pic_a_OBJECTS =
-subdir = libdw
-DIST_COMMON = $(include_HEADERS) $(noinst_HEADERS) \
- $(pkginclude_HEADERS) $(srcdir)/Makefile.am \
- $(srcdir)/Makefile.in ChangeLog
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
- $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
- *) f=$$p;; \
- esac;
-am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)" \
- "$(DESTDIR)$(pkgincludedir)"
-libLIBRARIES_INSTALL = $(INSTALL_DATA)
-LIBRARIES = $(lib_LIBRARIES) $(noinst_LIBRARIES)
-AR = ar
-ARFLAGS = cru
-libdw_a_AR = $(AR) $(ARFLAGS)
-libdw_a_DEPENDENCIES = $(addprefix ../libdwfl/,$(shell $(AR) t \
- ../libdwfl/libdwfl.a))
-am_libdw_a_OBJECTS = dwarf_begin.$(OBJEXT) dwarf_begin_elf.$(OBJEXT) \
- dwarf_end.$(OBJEXT) dwarf_getelf.$(OBJEXT) \
- dwarf_getpubnames.$(OBJEXT) dwarf_getabbrev.$(OBJEXT) \
- dwarf_tag.$(OBJEXT) dwarf_error.$(OBJEXT) \
- dwarf_nextcu.$(OBJEXT) dwarf_diename.$(OBJEXT) \
- dwarf_offdie.$(OBJEXT) dwarf_attr.$(OBJEXT) \
- dwarf_formstring.$(OBJEXT) dwarf_abbrev_hash.$(OBJEXT) \
- dwarf_attr_integrate.$(OBJEXT) \
- dwarf_hasattr_integrate.$(OBJEXT) dwarf_child.$(OBJEXT) \
- dwarf_haschildren.$(OBJEXT) dwarf_formaddr.$(OBJEXT) \
- dwarf_formudata.$(OBJEXT) dwarf_formsdata.$(OBJEXT) \
- dwarf_lowpc.$(OBJEXT) dwarf_entrypc.$(OBJEXT) \
- dwarf_haspc.$(OBJEXT) dwarf_highpc.$(OBJEXT) \
- dwarf_ranges.$(OBJEXT) dwarf_formref.$(OBJEXT) \
- dwarf_formref_die.$(OBJEXT) dwarf_siblingof.$(OBJEXT) \
- dwarf_dieoffset.$(OBJEXT) dwarf_cuoffset.$(OBJEXT) \
- dwarf_diecu.$(OBJEXT) dwarf_hasattr.$(OBJEXT) \
- dwarf_hasform.$(OBJEXT) dwarf_whatform.$(OBJEXT) \
- dwarf_whatattr.$(OBJEXT) dwarf_bytesize.$(OBJEXT) \
- dwarf_arrayorder.$(OBJEXT) dwarf_bitsize.$(OBJEXT) \
- dwarf_bitoffset.$(OBJEXT) dwarf_srclang.$(OBJEXT) \
- dwarf_getabbrevtag.$(OBJEXT) dwarf_getabbrevcode.$(OBJEXT) \
- dwarf_abbrevhaschildren.$(OBJEXT) dwarf_getattrcnt.$(OBJEXT) \
- dwarf_getabbrevattr.$(OBJEXT) dwarf_getsrclines.$(OBJEXT) \
- dwarf_getsrc_die.$(OBJEXT) dwarf_getscopes.$(OBJEXT) \
- dwarf_getscopes_die.$(OBJEXT) dwarf_getscopevar.$(OBJEXT) \
- dwarf_linesrc.$(OBJEXT) dwarf_lineno.$(OBJEXT) \
- dwarf_lineaddr.$(OBJEXT) dwarf_linecol.$(OBJEXT) \
- dwarf_linebeginstatement.$(OBJEXT) \
- dwarf_lineendsequence.$(OBJEXT) dwarf_lineblock.$(OBJEXT) \
- dwarf_lineprologueend.$(OBJEXT) \
- dwarf_lineepiloguebegin.$(OBJEXT) dwarf_onesrcline.$(OBJEXT) \
- dwarf_formblock.$(OBJEXT) dwarf_getsrcfiles.$(OBJEXT) \
- dwarf_filesrc.$(OBJEXT) dwarf_getsrcdirs.$(OBJEXT) \
- dwarf_getlocation.$(OBJEXT) dwarf_getstring.$(OBJEXT) \
- dwarf_offabbrev.$(OBJEXT) dwarf_getaranges.$(OBJEXT) \
- dwarf_onearange.$(OBJEXT) dwarf_getarangeinfo.$(OBJEXT) \
- dwarf_getarange_addr.$(OBJEXT) dwarf_getattrs.$(OBJEXT) \
- dwarf_formflag.$(OBJEXT) dwarf_getmacros.$(OBJEXT) \
- dwarf_macro_opcode.$(OBJEXT) dwarf_macro_param1.$(OBJEXT) \
- dwarf_macro_param2.$(OBJEXT) dwarf_addrdie.$(OBJEXT) \
- dwarf_getfuncs.$(OBJEXT) dwarf_decl_file.$(OBJEXT) \
- dwarf_decl_line.$(OBJEXT) dwarf_decl_column.$(OBJEXT) \
- dwarf_func_inline.$(OBJEXT) dwarf_getsrc_file.$(OBJEXT) \
- libdw_findcu.$(OBJEXT) libdw_form.$(OBJEXT) \
- libdw_alloc.$(OBJEXT) memory-access.$(OBJEXT) \
- libdw_visit_scopes.$(OBJEXT) dwarf_entry_breakpoints.$(OBJEXT)
-libdw_a_OBJECTS = $(am_libdw_a_OBJECTS)
-libdw_pic_a_AR = $(AR) $(ARFLAGS)
-libdw_pic_a_LIBADD =
-libdw_pic_a_OBJECTS = $(am_libdw_pic_a_OBJECTS)
-@MUDFLAP_FALSE@am__EXEEXT_1 = libdw.so$(EXEEXT)
-PROGRAMS = $(noinst_PROGRAMS)
-am_libdw_so_OBJECTS =
-libdw_so_OBJECTS = $(am_libdw_so_OBJECTS)
-libdw_so_LDADD = $(LDADD)
-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-SOURCES = $(libdw_a_SOURCES) $(libdw_pic_a_SOURCES) \
- $(libdw_so_SOURCES)
-DIST_SOURCES = $(libdw_a_SOURCES) $(libdw_pic_a_SOURCES) \
- $(libdw_so_SOURCES)
-includeHEADERS_INSTALL = $(INSTALL_HEADER)
-pkgincludeHEADERS_INSTALL = $(INSTALL_HEADER)
-HEADERS = $(include_HEADERS) $(noinst_HEADERS) $(pkginclude_HEADERS)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEBUGPRED = @DEBUGPRED@
-DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H -DIS_LIBDW
-DEPDIR = @DEPDIR@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EXEEXT = @EXEEXT@
-GMSGFMT = @GMSGFMT@
-GMSGFMT_015 = @GMSGFMT_015@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LDFLAGS = @LDFLAGS@
-LEX = @LEX@
-LEXLIB = @LEXLIB@
-LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
-LIBEBL_SUBDIR = @LIBEBL_SUBDIR@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LOCALEDIR = @LOCALEDIR@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MKDIR_P = @MKDIR_P@
-MODVERSION = @MODVERSION@
-MSGFMT = @MSGFMT@
-MSGFMT_015 = @MSGFMT_015@
-MSGMERGE = @MSGMERGE@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-RANLIB = @RANLIB@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-USE_NLS = @USE_NLS@
-VERSION = 1
-XGETTEXT = @XGETTEXT@
-XGETTEXT_015 = @XGETTEXT_015@
-YACC = @YACC@
-YFLAGS = @YFLAGS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-base_cpu = @base_cpu@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-eu_version = @eu_version@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-@MUDFLAP_FALSE@AM_CFLAGS = $(am__append_1) -Wall -Werror -Wshadow \
-@MUDFLAP_FALSE@ -Wunused -Wformat=2 -Wextra -std=gnu99
-@MUDFLAP_TRUE@AM_CFLAGS = -fmudflap $(am__append_1) -Wall -Werror \
-@MUDFLAP_TRUE@ -Wshadow -Wunused -Wformat=2 -Wextra -std=gnu99
-INCLUDES = -I. -I$(srcdir) -I$(srcdir)/../libelf -I.. -I$(srcdir)/../lib
-COMPILE.os = $(filter-out -fprofile-arcs, $(filter-out -ftest-coverage, \
- $(COMPILE)))
-
-lib_LIBRARIES = libdw.a
-@MUDFLAP_FALSE@noinst_LIBRARIES = libdw_pic.a
-include_HEADERS = dwarf.h
-pkginclude_HEADERS = libdw.h
-libdw_a_SOURCES = dwarf_begin.c dwarf_begin_elf.c dwarf_end.c dwarf_getelf.c \
- dwarf_getpubnames.c dwarf_getabbrev.c dwarf_tag.c \
- dwarf_error.c dwarf_nextcu.c dwarf_diename.c dwarf_offdie.c \
- dwarf_attr.c dwarf_formstring.c dwarf_abbrev_hash.c \
- dwarf_attr_integrate.c dwarf_hasattr_integrate.c \
- dwarf_child.c dwarf_haschildren.c dwarf_formaddr.c \
- dwarf_formudata.c dwarf_formsdata.c dwarf_lowpc.c \
- dwarf_entrypc.c dwarf_haspc.c dwarf_highpc.c dwarf_ranges.c \
- dwarf_formref.c dwarf_formref_die.c dwarf_siblingof.c \
- dwarf_dieoffset.c dwarf_cuoffset.c dwarf_diecu.c \
- dwarf_hasattr.c dwarf_hasform.c \
- dwarf_whatform.c dwarf_whatattr.c \
- dwarf_bytesize.c dwarf_arrayorder.c dwarf_bitsize.c \
- dwarf_bitoffset.c dwarf_srclang.c dwarf_getabbrevtag.c \
- dwarf_getabbrevcode.c dwarf_abbrevhaschildren.c \
- dwarf_getattrcnt.c dwarf_getabbrevattr.c \
- dwarf_getsrclines.c dwarf_getsrc_die.c \
- dwarf_getscopes.c dwarf_getscopes_die.c dwarf_getscopevar.c \
- dwarf_linesrc.c dwarf_lineno.c dwarf_lineaddr.c \
- dwarf_linecol.c dwarf_linebeginstatement.c \
- dwarf_lineendsequence.c dwarf_lineblock.c \
- dwarf_lineprologueend.c dwarf_lineepiloguebegin.c \
- dwarf_onesrcline.c dwarf_formblock.c \
- dwarf_getsrcfiles.c dwarf_filesrc.c dwarf_getsrcdirs.c \
- dwarf_getlocation.c dwarf_getstring.c dwarf_offabbrev.c \
- dwarf_getaranges.c dwarf_onearange.c dwarf_getarangeinfo.c \
- dwarf_getarange_addr.c dwarf_getattrs.c dwarf_formflag.c \
- dwarf_getmacros.c dwarf_macro_opcode.c dwarf_macro_param1.c \
- dwarf_macro_param2.c dwarf_addrdie.c \
- dwarf_getfuncs.c \
- dwarf_decl_file.c dwarf_decl_line.c dwarf_decl_column.c \
- dwarf_func_inline.c dwarf_getsrc_file.c \
- libdw_findcu.c libdw_form.c libdw_alloc.c memory-access.c \
- libdw_visit_scopes.c \
- dwarf_entry_breakpoints.c
-
-@MUDFLAP_FALSE@libdw_pic_a_SOURCES =
-@MUDFLAP_FALSE@am_libdw_pic_a_OBJECTS = $(libdw_a_SOURCES:.c=.os)
-@MUDFLAP_FALSE@libdw_so_SOURCES =
-libdw_a_LIBADD = $(addprefix ../libdwfl/,$(shell $(AR) t ../libdwfl/libdwfl.a))
-noinst_HEADERS = libdwP.h memory-access.h dwarf_abbrev_hash.h
-EXTRA_DIST = libdw.map
-CLEANFILES = $(am_libdw_pic_a_OBJECTS) *.gcno *.gcda libdw.so.$(VERSION)
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
- && exit 0; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits libdw/Makefile'; \
- cd $(top_srcdir) && \
- $(AUTOMAKE) --gnits libdw/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-install-libLIBRARIES: $(lib_LIBRARIES)
- @$(NORMAL_INSTALL)
- test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
- @list='$(lib_LIBRARIES)'; for p in $$list; do \
- if test -f $$p; then \
- f=$(am__strip_dir) \
- echo " $(libLIBRARIES_INSTALL) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
- $(libLIBRARIES_INSTALL) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
- else :; fi; \
- done
- @$(POST_INSTALL)
- @list='$(lib_LIBRARIES)'; for p in $$list; do \
- if test -f $$p; then \
- p=$(am__strip_dir) \
- echo " $(RANLIB) '$(DESTDIR)$(libdir)/$$p'"; \
- $(RANLIB) "$(DESTDIR)$(libdir)/$$p"; \
- else :; fi; \
- done
-
-uninstall-libLIBRARIES:
- @$(NORMAL_UNINSTALL)
- @list='$(lib_LIBRARIES)'; for p in $$list; do \
- p=$(am__strip_dir) \
- echo " rm -f '$(DESTDIR)$(libdir)/$$p'"; \
- rm -f "$(DESTDIR)$(libdir)/$$p"; \
- done
-
-clean-libLIBRARIES:
- -test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES)
-
-clean-noinstLIBRARIES:
- -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
-libdw.a: $(libdw_a_OBJECTS) $(libdw_a_DEPENDENCIES)
- -rm -f libdw.a
- $(libdw_a_AR) libdw.a $(libdw_a_OBJECTS) $(libdw_a_LIBADD)
- $(RANLIB) libdw.a
-libdw_pic.a: $(libdw_pic_a_OBJECTS) $(libdw_pic_a_DEPENDENCIES)
- -rm -f libdw_pic.a
- $(libdw_pic_a_AR) libdw_pic.a $(libdw_pic_a_OBJECTS) $(libdw_pic_a_LIBADD)
- $(RANLIB) libdw_pic.a
-
-clean-noinstPROGRAMS:
- -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
-@MUDFLAP_TRUE@libdw.so$(EXEEXT): $(libdw_so_OBJECTS) $(libdw_so_DEPENDENCIES)
-@MUDFLAP_TRUE@ @rm -f libdw.so$(EXEEXT)
-@MUDFLAP_TRUE@ $(LINK) $(libdw_so_OBJECTS) $(libdw_so_LDADD) $(LIBS)
-
-mostlyclean-compile:
- -rm -f *.$(OBJEXT)
-
-distclean-compile:
- -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_abbrev_hash.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_abbrevhaschildren.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_addrdie.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_arrayorder.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_attr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_attr_integrate.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_begin.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_begin_elf.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_bitoffset.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_bitsize.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_bytesize.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_child.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_cuoffset.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_decl_column.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_decl_file.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_decl_line.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_diecu.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_diename.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_dieoffset.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_end.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_entry_breakpoints.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_entrypc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_error.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_filesrc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_formaddr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_formblock.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_formflag.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_formref.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_formref_die.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_formsdata.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_formstring.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_formudata.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_func_inline.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getabbrev.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getabbrevattr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getabbrevcode.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getabbrevtag.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getarange_addr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getarangeinfo.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getaranges.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getattrcnt.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getattrs.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getelf.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getfuncs.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getlocation.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getmacros.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getpubnames.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getscopes.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getscopes_die.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getscopevar.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getsrc_die.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getsrc_file.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getsrcdirs.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getsrcfiles.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getsrclines.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getstring.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_hasattr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_hasattr_integrate.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_haschildren.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_hasform.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_haspc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_highpc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_lineaddr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_linebeginstatement.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_lineblock.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_linecol.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_lineendsequence.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_lineepiloguebegin.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_lineno.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_lineprologueend.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_linesrc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_lowpc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_macro_opcode.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_macro_param1.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_macro_param2.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_nextcu.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_offabbrev.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_offdie.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_onearange.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_onesrcline.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_ranges.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_siblingof.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_srclang.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_tag.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_whatattr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_whatform.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdw_alloc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdw_findcu.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdw_form.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdw_visit_scopes.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memory-access.Po@am__quote@
-
-.c.o:
-@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
-
-.c.obj:
-@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
-install-includeHEADERS: $(include_HEADERS)
- @$(NORMAL_INSTALL)
- test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)"
- @list='$(include_HEADERS)'; for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- f=$(am__strip_dir) \
- echo " $(includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \
- $(includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \
- done
-
-uninstall-includeHEADERS:
- @$(NORMAL_UNINSTALL)
- @list='$(include_HEADERS)'; for p in $$list; do \
- f=$(am__strip_dir) \
- echo " rm -f '$(DESTDIR)$(includedir)/$$f'"; \
- rm -f "$(DESTDIR)$(includedir)/$$f"; \
- done
-install-pkgincludeHEADERS: $(pkginclude_HEADERS)
- @$(NORMAL_INSTALL)
- test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)"
- @list='$(pkginclude_HEADERS)'; for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- f=$(am__strip_dir) \
- echo " $(pkgincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgincludedir)/$$f'"; \
- $(pkgincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgincludedir)/$$f"; \
- done
-
-uninstall-pkgincludeHEADERS:
- @$(NORMAL_UNINSTALL)
- @list='$(pkginclude_HEADERS)'; for p in $$list; do \
- f=$(am__strip_dir) \
- echo " rm -f '$(DESTDIR)$(pkgincludedir)/$$f'"; \
- rm -f "$(DESTDIR)$(pkgincludedir)/$$f"; \
- done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- mkid -fID $$unique
-tags: TAGS
-
-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- here=`pwd`; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$tags $$unique; \
- fi
-ctags: CTAGS
-CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- test -z "$(CTAGS_ARGS)$$tags$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$tags $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && cd $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) $$here
-
-distclean-tags:
- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- list='$(DISTFILES)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
- fi; \
- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
- else \
- test -f $(distdir)/$$file \
- || cp -p $$d/$$file $(distdir)/$$file \
- || exit 1; \
- fi; \
- done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(HEADERS)
-installdirs:
- for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)" "$(DESTDIR)$(pkgincludedir)"; do \
- test -z "$$dir" || $(MKDIR_P) "$$dir"; \
- done
-@MUDFLAP_TRUE@install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-@MUDFLAP_TRUE@uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libLIBRARIES clean-noinstLIBRARIES \
- clean-noinstPROGRAMS mostlyclean-am
-
-distclean: distclean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
- distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-info: info-am
-
-info-am:
-
-install-data-am: install-includeHEADERS install-pkgincludeHEADERS
-
-install-dvi: install-dvi-am
-
-install-exec-am: install-libLIBRARIES
-
-install-html: install-html-am
-
-install-info: install-info-am
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-ps: install-ps-am
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-includeHEADERS uninstall-libLIBRARIES \
- uninstall-pkgincludeHEADERS
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
- clean-libLIBRARIES clean-noinstLIBRARIES clean-noinstPROGRAMS \
- ctags distclean distclean-compile distclean-generic \
- distclean-tags distdir dvi dvi-am html html-am info info-am \
- install install-am install-data install-data-am install-dvi \
- install-dvi-am install-exec install-exec-am install-html \
- install-html-am install-includeHEADERS install-info \
- install-info-am install-libLIBRARIES install-man install-pdf \
- install-pdf-am install-pkgincludeHEADERS install-ps \
- install-ps-am install-strip installcheck installcheck-am \
- installdirs maintainer-clean maintainer-clean-generic \
- mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \
- ps ps-am tags uninstall uninstall-am uninstall-includeHEADERS \
- uninstall-libLIBRARIES uninstall-pkgincludeHEADERS
-
-@MUDFLAP_FALSE@libdw.so: $(srcdir)/libdw.map libdw_pic.a \
-@MUDFLAP_FALSE@ ../libdwfl/libdwfl_pic.a ../libebl/libebl.a \
-@MUDFLAP_FALSE@ ../libelf/libelf.so
-# The rpath is necessary for libebl because its $ORIGIN use will
-# not fly in a setuid executable that links in libdw.
-@MUDFLAP_FALSE@ $(LINK) -shared -o $@ -Wl,--soname,$@.$(VERSION),-z,defs \
-@MUDFLAP_FALSE@ -Wl,--enable-new-dtags,-rpath,$(pkglibdir) \
-@MUDFLAP_FALSE@ -Wl,--version-script,$<,--no-undefined \
-@MUDFLAP_FALSE@ -Wl,--whole-archive $(filter-out $<,$^) -Wl,--no-whole-archive\
-@MUDFLAP_FALSE@ -ldl
-@MUDFLAP_FALSE@ if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi
-@MUDFLAP_FALSE@ ln -fs $@ $@.$(VERSION)
-
-@MUDFLAP_FALSE@%.os: %.c %.o
-@MUDFLAP_FALSE@ if $(COMPILE.os) -c -o $@ -fpic -DPIC -DSHARED -MT $@ -MD -MP \
-@MUDFLAP_FALSE@ -MF "$(DEPDIR)/$*.Tpo" `test -f '$<' || echo '$(srcdir)/'`$<; \
-@MUDFLAP_FALSE@ then cat "$(DEPDIR)/$*.Tpo" >> "$(DEPDIR)/$*.Po"; \
-@MUDFLAP_FALSE@ rm -f "$(DEPDIR)/$*.Tpo"; \
-@MUDFLAP_FALSE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
-@MUDFLAP_FALSE@ fi
-
-@MUDFLAP_FALSE@install: install-am libdw.so
-@MUDFLAP_FALSE@ $(mkinstalldirs) $(DESTDIR)$(libdir)
-@MUDFLAP_FALSE@ $(INSTALL_PROGRAM) libdw.so $(DESTDIR)$(libdir)/libdw-$(PACKAGE_VERSION).so
-@MUDFLAP_FALSE@ ln -fs libdw-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir)/libdw.so.$(VERSION)
-@MUDFLAP_FALSE@ ln -fs libdw.so.$(VERSION) $(DESTDIR)$(libdir)/libdw.so
-
-@MUDFLAP_FALSE@uninstall: uninstall-am
-@MUDFLAP_FALSE@ rm -f $(DESTDIR)$(libdir)/libdw-$(PACKAGE_VERSION).so
-@MUDFLAP_FALSE@ rm -f $(DESTDIR)$(libdir)/libdw.so.$(VERSION)
-@MUDFLAP_FALSE@ rm -f $(DESTDIR)$(libdir)/libdw.so
-@MUDFLAP_FALSE@ rmdir --ignore-fail-on-non-empty $(DESTDIR)$(includedir)/elfutils
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/libdw/dwarf.h b/libdw/dwarf.h
deleted file mode 100644
index f1261c3..0000000
--- a/libdw/dwarf.h
+++ /dev/null
@@ -1,690 +0,0 @@
-/* This file defines standard DWARF types, structures, and macros.
- Copyright (C) 2000, 2002, 2005, 2006, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifndef _DWARF_H
-#define _DWARF_H 1
-
-/* DWARF tags. */
-enum
- {
- DW_TAG_array_type = 0x01,
- DW_TAG_class_type = 0x02,
- DW_TAG_entry_point = 0x03,
- DW_TAG_enumeration_type = 0x04,
- DW_TAG_formal_parameter = 0x05,
- DW_TAG_imported_declaration = 0x08,
- DW_TAG_label = 0x0a,
- DW_TAG_lexical_block = 0x0b,
- DW_TAG_member = 0x0d,
- DW_TAG_pointer_type = 0x0f,
- DW_TAG_reference_type = 0x10,
- DW_TAG_compile_unit = 0x11,
- DW_TAG_string_type = 0x12,
- DW_TAG_structure_type = 0x13,
- DW_TAG_subroutine_type = 0x15,
- DW_TAG_typedef = 0x16,
- DW_TAG_union_type = 0x17,
- DW_TAG_unspecified_parameters = 0x18,
- DW_TAG_variant = 0x19,
- DW_TAG_common_block = 0x1a,
- DW_TAG_common_inclusion = 0x1b,
- DW_TAG_inheritance = 0x1c,
- DW_TAG_inlined_subroutine = 0x1d,
- DW_TAG_module = 0x1e,
- DW_TAG_ptr_to_member_type = 0x1f,
- DW_TAG_set_type = 0x20,
- DW_TAG_subrange_type = 0x21,
- DW_TAG_with_stmt = 0x22,
- DW_TAG_access_declaration = 0x23,
- DW_TAG_base_type = 0x24,
- DW_TAG_catch_block = 0x25,
- DW_TAG_const_type = 0x26,
- DW_TAG_constant = 0x27,
- DW_TAG_enumerator = 0x28,
- DW_TAG_file_type = 0x29,
- DW_TAG_friend = 0x2a,
- DW_TAG_namelist = 0x2b,
- DW_TAG_namelist_item = 0x2c,
- DW_TAG_packed_type = 0x2d,
- DW_TAG_subprogram = 0x2e,
- DW_TAG_template_type_parameter = 0x2f,
- DW_TAG_template_value_parameter = 0x30,
- DW_TAG_thrown_type = 0x31,
- DW_TAG_try_block = 0x32,
- DW_TAG_variant_part = 0x33,
- DW_TAG_variable = 0x34,
- DW_TAG_volatile_type = 0x35,
- DW_TAG_dwarf_procedure = 0x36,
- DW_TAG_restrict_type = 0x37,
- DW_TAG_interface_type = 0x38,
- DW_TAG_namespace = 0x39,
- DW_TAG_imported_module = 0x3a,
- DW_TAG_unspecified_type = 0x3b,
- DW_TAG_partial_unit = 0x3c,
- DW_TAG_imported_unit = 0x3d,
- DW_TAG_mutable_type = 0x3e,
- DW_TAG_condition = 0x3f,
- DW_TAG_shared_type = 0x40,
- DW_TAG_lo_user = 0x4080,
- DW_TAG_MIPS_loop = 0x4081,
- DW_TAG_format_label = 0x4101,
- DW_TAG_function_template = 0x4102,
- DW_TAG_class_template = 0x4103,
- DW_TAG_hi_user = 0xffff
- };
-
-
-/* Children determination encodings. */
-enum
- {
- DW_CHILDREN_no = 0,
- DW_CHILDREN_yes = 1
- };
-
-
-/* DWARF attributes encodings. */
-enum
- {
- DW_AT_sibling = 0x01,
- DW_AT_location = 0x02,
- DW_AT_name = 0x03,
- DW_AT_ordering = 0x09,
- DW_AT_subscr_data = 0x0a,
- DW_AT_byte_size = 0x0b,
- DW_AT_bit_offset = 0x0c,
- DW_AT_bit_size = 0x0d,
- DW_AT_element_list = 0x0f,
- DW_AT_stmt_list = 0x10,
- DW_AT_low_pc = 0x11,
- DW_AT_high_pc = 0x12,
- DW_AT_language = 0x13,
- DW_AT_member = 0x14,
- DW_AT_discr = 0x15,
- DW_AT_discr_value = 0x16,
- DW_AT_visibility = 0x17,
- DW_AT_import = 0x18,
- DW_AT_string_length = 0x19,
- DW_AT_common_reference = 0x1a,
- DW_AT_comp_dir = 0x1b,
- DW_AT_const_value = 0x1c,
- DW_AT_containing_type = 0x1d,
- DW_AT_default_value = 0x1e,
- DW_AT_inline = 0x20,
- DW_AT_is_optional = 0x21,
- DW_AT_lower_bound = 0x22,
- DW_AT_producer = 0x25,
- DW_AT_prototyped = 0x27,
- DW_AT_return_addr = 0x2a,
- DW_AT_start_scope = 0x2c,
- DW_AT_bit_stride = 0x2e,
- DW_AT_upper_bound = 0x2f,
- DW_AT_abstract_origin = 0x31,
- DW_AT_accessibility = 0x32,
- DW_AT_address_class = 0x33,
- DW_AT_artificial = 0x34,
- DW_AT_base_types = 0x35,
- DW_AT_calling_convention = 0x36,
- DW_AT_count = 0x37,
- DW_AT_data_member_location = 0x38,
- DW_AT_decl_column = 0x39,
- DW_AT_decl_file = 0x3a,
- DW_AT_decl_line = 0x3b,
- DW_AT_declaration = 0x3c,
- DW_AT_discr_list = 0x3d,
- DW_AT_encoding = 0x3e,
- DW_AT_external = 0x3f,
- DW_AT_frame_base = 0x40,
- DW_AT_friend = 0x41,
- DW_AT_identifier_case = 0x42,
- DW_AT_macro_info = 0x43,
- DW_AT_namelist_item = 0x44,
- DW_AT_priority = 0x45,
- DW_AT_segment = 0x46,
- DW_AT_specification = 0x47,
- DW_AT_static_link = 0x48,
- DW_AT_type = 0x49,
- DW_AT_use_location = 0x4a,
- DW_AT_variable_parameter = 0x4b,
- DW_AT_virtuality = 0x4c,
- DW_AT_vtable_elem_location = 0x4d,
- DW_AT_allocated = 0x4e,
- DW_AT_associated = 0x4f,
- DW_AT_data_location = 0x50,
- DW_AT_byte_stride = 0x51,
- DW_AT_entry_pc = 0x52,
- DW_AT_use_UTF8 = 0x53,
- DW_AT_extension = 0x54,
- DW_AT_ranges = 0x55,
- DW_AT_trampoline = 0x56,
- DW_AT_call_column = 0x57,
- DW_AT_call_file = 0x58,
- DW_AT_call_line = 0x59,
- DW_AT_description = 0x5a,
- DW_AT_binary_scale = 0x5b,
- DW_AT_decimal_scale = 0x5c,
- DW_AT_small = 0x5d,
- DW_AT_decimal_sign = 0x5e,
- DW_AT_digit_count = 0x5f,
- DW_AT_picture_string = 0x60,
- DW_AT_mutable = 0x61,
- DW_AT_threads_scaled = 0x62,
- DW_AT_explicit = 0x63,
- DW_AT_object_pointer = 0x64,
- DW_AT_endianity = 0x65,
- DW_AT_elemental = 0x66,
- DW_AT_pure = 0x67,
- DW_AT_recursive = 0x68,
-
- DW_AT_lo_user = 0x2000,
- DW_AT_MIPS_fde = 0x2001,
- DW_AT_MIPS_loop_begin = 0x2002,
- DW_AT_MIPS_tail_loop_begin = 0x2003,
- DW_AT_MIPS_epilog_begin = 0x2004,
- DW_AT_MIPS_loop_unroll_factor = 0x2005,
- DW_AT_MIPS_software_pipeline_depth = 0x2006,
- DW_AT_MIPS_linkage_name = 0x2007,
- DW_AT_MIPS_stride = 0x2008,
- DW_AT_MIPS_abstract_name = 0x2009,
- DW_AT_MIPS_clone_origin = 0x200a,
- DW_AT_MIPS_has_inlines = 0x200b,
- DW_AT_MIPS_stride_byte = 0x200c,
- DW_AT_MIPS_stride_elem = 0x200d,
- DW_AT_MIPS_ptr_dopetype = 0x200e,
- DW_AT_MIPS_allocatable_dopetype = 0x200f,
- DW_AT_MIPS_assumed_shape_dopetype = 0x2010,
- DW_AT_MIPS_assumed_size = 0x2011,
- DW_AT_sf_names = 0x2101,
- DW_AT_src_info = 0x2102,
- DW_AT_mac_info = 0x2103,
- DW_AT_src_coords = 0x2104,
- DW_AT_body_begin = 0x2105,
- DW_AT_body_end = 0x2106,
- DW_AT_hi_user = 0x3fff
- };
-
-
-/* DWARF form encodings. */
-enum
- {
- DW_FORM_addr = 0x01,
- DW_FORM_block2 = 0x03,
- DW_FORM_block4 = 0x04,
- DW_FORM_data2 = 0x05,
- DW_FORM_data4 = 0x06,
- DW_FORM_data8 = 0x07,
- DW_FORM_string = 0x08,
- DW_FORM_block = 0x09,
- DW_FORM_block1 = 0x0a,
- DW_FORM_data1 = 0x0b,
- DW_FORM_flag = 0x0c,
- DW_FORM_sdata = 0x0d,
- DW_FORM_strp = 0x0e,
- DW_FORM_udata = 0x0f,
- DW_FORM_ref_addr = 0x10,
- DW_FORM_ref1 = 0x11,
- DW_FORM_ref2 = 0x12,
- DW_FORM_ref4 = 0x13,
- DW_FORM_ref8 = 0x14,
- DW_FORM_ref_udata = 0x15,
- DW_FORM_indirect = 0x16
- };
-
-
-/* DWARF location operation encodings. */
-enum
- {
- DW_OP_addr = 0x03, /* Constant address. */
- DW_OP_deref = 0x06,
- DW_OP_const1u = 0x08, /* Unsigned 1-byte constant. */
- DW_OP_const1s = 0x09, /* Signed 1-byte constant. */
- DW_OP_const2u = 0x0a, /* Unsigned 2-byte constant. */
- DW_OP_const2s = 0x0b, /* Signed 2-byte constant. */
- DW_OP_const4u = 0x0c, /* Unsigned 4-byte constant. */
- DW_OP_const4s = 0x0d, /* Signed 4-byte constant. */
- DW_OP_const8u = 0x0e, /* Unsigned 8-byte constant. */
- DW_OP_const8s = 0x0f, /* Signed 8-byte constant. */
- DW_OP_constu = 0x10, /* Unsigned LEB128 constant. */
- DW_OP_consts = 0x11, /* Signed LEB128 constant. */
- DW_OP_dup = 0x12,
- DW_OP_drop = 0x13,
- DW_OP_over = 0x14,
- DW_OP_pick = 0x15, /* 1-byte stack index. */
- DW_OP_swap = 0x16,
- DW_OP_rot = 0x17,
- DW_OP_xderef = 0x18,
- DW_OP_abs = 0x19,
- DW_OP_and = 0x1a,
- DW_OP_div = 0x1b,
- DW_OP_minus = 0x1c,
- DW_OP_mod = 0x1d,
- DW_OP_mul = 0x1e,
- DW_OP_neg = 0x1f,
- DW_OP_not = 0x20,
- DW_OP_or = 0x21,
- DW_OP_plus = 0x22,
- DW_OP_plus_uconst = 0x23, /* Unsigned LEB128 addend. */
- DW_OP_shl = 0x24,
- DW_OP_shr = 0x25,
- DW_OP_shra = 0x26,
- DW_OP_xor = 0x27,
- DW_OP_bra = 0x28, /* Signed 2-byte constant. */
- DW_OP_eq = 0x29,
- DW_OP_ge = 0x2a,
- DW_OP_gt = 0x2b,
- DW_OP_le = 0x2c,
- DW_OP_lt = 0x2d,
- DW_OP_ne = 0x2e,
- DW_OP_skip = 0x2f, /* Signed 2-byte constant. */
- DW_OP_lit0 = 0x30, /* Literal 0. */
- DW_OP_lit1 = 0x31, /* Literal 1. */
- DW_OP_lit2 = 0x32, /* Literal 2. */
- DW_OP_lit3 = 0x33, /* Literal 3. */
- DW_OP_lit4 = 0x34, /* Literal 4. */
- DW_OP_lit5 = 0x35, /* Literal 5. */
- DW_OP_lit6 = 0x36, /* Literal 6. */
- DW_OP_lit7 = 0x37, /* Literal 7. */
- DW_OP_lit8 = 0x38, /* Literal 8. */
- DW_OP_lit9 = 0x39, /* Literal 9. */
- DW_OP_lit10 = 0x3a, /* Literal 10. */
- DW_OP_lit11 = 0x3b, /* Literal 11. */
- DW_OP_lit12 = 0x3c, /* Literal 12. */
- DW_OP_lit13 = 0x3d, /* Literal 13. */
- DW_OP_lit14 = 0x3e, /* Literal 14. */
- DW_OP_lit15 = 0x3f, /* Literal 15. */
- DW_OP_lit16 = 0x40, /* Literal 16. */
- DW_OP_lit17 = 0x41, /* Literal 17. */
- DW_OP_lit18 = 0x42, /* Literal 18. */
- DW_OP_lit19 = 0x43, /* Literal 19. */
- DW_OP_lit20 = 0x44, /* Literal 20. */
- DW_OP_lit21 = 0x45, /* Literal 21. */
- DW_OP_lit22 = 0x46, /* Literal 22. */
- DW_OP_lit23 = 0x47, /* Literal 23. */
- DW_OP_lit24 = 0x48, /* Literal 24. */
- DW_OP_lit25 = 0x49, /* Literal 25. */
- DW_OP_lit26 = 0x4a, /* Literal 26. */
- DW_OP_lit27 = 0x4b, /* Literal 27. */
- DW_OP_lit28 = 0x4c, /* Literal 28. */
- DW_OP_lit29 = 0x4d, /* Literal 29. */
- DW_OP_lit30 = 0x4e, /* Literal 30. */
- DW_OP_lit31 = 0x4f, /* Literal 31. */
- DW_OP_reg0 = 0x50, /* Register 0. */
- DW_OP_reg1 = 0x51, /* Register 1. */
- DW_OP_reg2 = 0x52, /* Register 2. */
- DW_OP_reg3 = 0x53, /* Register 3. */
- DW_OP_reg4 = 0x54, /* Register 4. */
- DW_OP_reg5 = 0x55, /* Register 5. */
- DW_OP_reg6 = 0x56, /* Register 6. */
- DW_OP_reg7 = 0x57, /* Register 7. */
- DW_OP_reg8 = 0x58, /* Register 8. */
- DW_OP_reg9 = 0x59, /* Register 9. */
- DW_OP_reg10 = 0x5a, /* Register 10. */
- DW_OP_reg11 = 0x5b, /* Register 11. */
- DW_OP_reg12 = 0x5c, /* Register 12. */
- DW_OP_reg13 = 0x5d, /* Register 13. */
- DW_OP_reg14 = 0x5e, /* Register 14. */
- DW_OP_reg15 = 0x5f, /* Register 15. */
- DW_OP_reg16 = 0x60, /* Register 16. */
- DW_OP_reg17 = 0x61, /* Register 17. */
- DW_OP_reg18 = 0x62, /* Register 18. */
- DW_OP_reg19 = 0x63, /* Register 19. */
- DW_OP_reg20 = 0x64, /* Register 20. */
- DW_OP_reg21 = 0x65, /* Register 21. */
- DW_OP_reg22 = 0x66, /* Register 22. */
- DW_OP_reg23 = 0x67, /* Register 24. */
- DW_OP_reg24 = 0x68, /* Register 24. */
- DW_OP_reg25 = 0x69, /* Register 25. */
- DW_OP_reg26 = 0x6a, /* Register 26. */
- DW_OP_reg27 = 0x6b, /* Register 27. */
- DW_OP_reg28 = 0x6c, /* Register 28. */
- DW_OP_reg29 = 0x6d, /* Register 29. */
- DW_OP_reg30 = 0x6e, /* Register 30. */
- DW_OP_reg31 = 0x6f, /* Register 31. */
- DW_OP_breg0 = 0x70, /* Base register 0. */
- DW_OP_breg1 = 0x71, /* Base register 1. */
- DW_OP_breg2 = 0x72, /* Base register 2. */
- DW_OP_breg3 = 0x73, /* Base register 3. */
- DW_OP_breg4 = 0x74, /* Base register 4. */
- DW_OP_breg5 = 0x75, /* Base register 5. */
- DW_OP_breg6 = 0x76, /* Base register 6. */
- DW_OP_breg7 = 0x77, /* Base register 7. */
- DW_OP_breg8 = 0x78, /* Base register 8. */
- DW_OP_breg9 = 0x79, /* Base register 9. */
- DW_OP_breg10 = 0x7a, /* Base register 10. */
- DW_OP_breg11 = 0x7b, /* Base register 11. */
- DW_OP_breg12 = 0x7c, /* Base register 12. */
- DW_OP_breg13 = 0x7d, /* Base register 13. */
- DW_OP_breg14 = 0x7e, /* Base register 14. */
- DW_OP_breg15 = 0x7f, /* Base register 15. */
- DW_OP_breg16 = 0x80, /* Base register 16. */
- DW_OP_breg17 = 0x81, /* Base register 17. */
- DW_OP_breg18 = 0x82, /* Base register 18. */
- DW_OP_breg19 = 0x83, /* Base register 19. */
- DW_OP_breg20 = 0x84, /* Base register 20. */
- DW_OP_breg21 = 0x85, /* Base register 21. */
- DW_OP_breg22 = 0x86, /* Base register 22. */
- DW_OP_breg23 = 0x87, /* Base register 23. */
- DW_OP_breg24 = 0x88, /* Base register 24. */
- DW_OP_breg25 = 0x89, /* Base register 25. */
- DW_OP_breg26 = 0x8a, /* Base register 26. */
- DW_OP_breg27 = 0x8b, /* Base register 27. */
- DW_OP_breg28 = 0x8c, /* Base register 28. */
- DW_OP_breg29 = 0x8d, /* Base register 29. */
- DW_OP_breg30 = 0x8e, /* Base register 30. */
- DW_OP_breg31 = 0x8f, /* Base register 31. */
- DW_OP_regx = 0x90, /* Unsigned LEB128 register. */
- DW_OP_fbreg = 0x91, /* Signed LEB128 offset. */
- DW_OP_bregx = 0x92, /* ULEB128 register followed by SLEB128 off. */
- DW_OP_piece = 0x93, /* ULEB128 size of piece addressed. */
- DW_OP_deref_size = 0x94, /* 1-byte size of data retrieved. */
- DW_OP_xderef_size = 0x95, /* 1-byte size of data retrieved. */
- DW_OP_nop = 0x96,
- DW_OP_push_object_address = 0x97,
- DW_OP_call2 = 0x98,
- DW_OP_call4 = 0x99,
- DW_OP_call_ref = 0x9a,
- DW_OP_form_tls_address = 0x9b,/* TLS offset to address in current thread */
- DW_OP_call_frame_cfa = 0x9c,/* CFA as determined by CFI. */
- DW_OP_bit_piece = 0x9d, /* ULEB128 size and ULEB128 offset in bits. */
-
- DW_OP_lo_user = 0xe0, /* Implementation-defined range start. */
- DW_OP_hi_user = 0xff /* Implementation-defined range end. */
- };
-
-
-/* DWARF base type encodings. */
-enum
- {
- DW_ATE_void = 0x0,
- DW_ATE_address = 0x1,
- DW_ATE_boolean = 0x2,
- DW_ATE_complex_float = 0x3,
- DW_ATE_float = 0x4,
- DW_ATE_signed = 0x5,
- DW_ATE_signed_char = 0x6,
- DW_ATE_unsigned = 0x7,
- DW_ATE_unsigned_char = 0x8,
- DW_ATE_imaginary_float = 0x9,
- DW_ATE_packed_decimal = 0xa,
- DW_ATE_numeric_string = 0xb,
- DW_ATE_edited = 0xc,
- DW_ATE_signed_fixed = 0xd,
- DW_ATE_unsigned_fixed = 0xe,
- DW_ATE_decimal_float = 0xf,
-
- DW_ATE_lo_user = 0x80,
- DW_ATE_hi_user = 0xff
- };
-
-
-/* DWARF decimal sign encodings. */
-enum
- {
- DW_DS_unsigned = 1,
- DW_DS_leading_overpunch = 2,
- DW_DS_trailing_overpunch = 3,
- DW_DS_leading_separate = 4,
- DW_DS_trailing_separate = 5,
- };
-
-
-/* DWARF endianity encodings. */
-enum
- {
- DW_END_default = 0,
- DW_END_big = 1,
- DW_END_little = 2,
-
- DW_END_lo_user = 0x40,
- DW_END_hi_user = 0xff
- };
-
-
-/* DWARF accessibility encodings. */
-enum
- {
- DW_ACCESS_public = 1,
- DW_ACCESS_protected = 2,
- DW_ACCESS_private = 3
- };
-
-
-/* DWARF visibility encodings. */
-enum
- {
- DW_VIS_local = 1,
- DW_VIS_exported = 2,
- DW_VIS_qualified = 3
- };
-
-
-/* DWARF virtuality encodings. */
-enum
- {
- DW_VIRTUALITY_none = 0,
- DW_VIRTUALITY_virtual = 1,
- DW_VIRTUALITY_pure_virtual = 2
- };
-
-
-/* DWARF language encodings. */
-enum
- {
- DW_LANG_C89 = 0x0001,
- DW_LANG_C = 0x0002,
- DW_LANG_Ada83 = 0x0003,
- DW_LANG_C_plus_plus = 0x0004,
- DW_LANG_Cobol74 = 0x0005,
- DW_LANG_Cobol85 = 0x0006,
- DW_LANG_Fortran77 = 0x0007,
- DW_LANG_Fortran90 = 0x0008,
- DW_LANG_Pascal83 = 0x0009,
- DW_LANG_Modula2 = 0x000a,
- DW_LANG_Java = 0x000b,
- DW_LANG_C99 = 0x000c,
- DW_LANG_Ada95 = 0x000d,
- DW_LANG_Fortran95 = 0x000e,
- DW_LANG_PL1 = 0x000f,
- DW_LANG_Objc = 0x0010,
- DW_LANG_ObjC_plus_plus = 0x0011,
- DW_LANG_UPC = 0x0012,
- DW_LANG_D = 0x0013,
-
- DW_LANG_lo_user = 0x8000,
- DW_LANG_Mips_Assembler = 0x8001,
- DW_LANG_hi_user = 0xffff
- };
-
-
-/* DWARF identifier case encodings. */
-enum
- {
- DW_ID_case_sensitive = 0,
- DW_ID_up_case = 1,
- DW_ID_down_case = 2,
- DW_ID_case_insensitive = 3
- };
-
-
-/* DWARF calling conventions encodings. */
-enum
- {
- DW_CC_normal = 0x1,
- DW_CC_program = 0x2,
- DW_CC_nocall = 0x3,
- DW_CC_lo_user = 0x40,
- DW_CC_hi_user = 0xff
- };
-
-
-/* DWARF inline encodings. */
-enum
- {
- DW_INL_not_inlined = 0,
- DW_INL_inlined = 1,
- DW_INL_declared_not_inlined = 2,
- DW_INL_declared_inlined = 3
- };
-
-
-/* DWARF ordering encodings. */
-enum
- {
- DW_ORD_row_major = 0,
- DW_ORD_col_major = 1
- };
-
-
-/* DWARF discriminant descriptor encodings. */
-enum
- {
- DW_DSC_label = 0,
- DW_DSC_range = 1
- };
-
-
-/* DWARF standard opcode encodings. */
-enum
- {
- DW_LNS_copy = 1,
- DW_LNS_advance_pc = 2,
- DW_LNS_advance_line = 3,
- DW_LNS_set_file = 4,
- DW_LNS_set_column = 5,
- DW_LNS_negate_stmt = 6,
- DW_LNS_set_basic_block = 7,
- DW_LNS_const_add_pc = 8,
- DW_LNS_fixed_advance_pc = 9,
- DW_LNS_set_prologue_end = 10,
- DW_LNS_set_epilogue_begin = 11,
- DW_LNS_set_isa = 12
- };
-
-
-/* DWARF extended opcode encodings. */
-enum
- {
- DW_LNE_end_sequence = 1,
- DW_LNE_set_address = 2,
- DW_LNE_define_file = 3,
-
- DW_LNE_lo_user = 128,
- DW_LNE_hi_user = 255
- };
-
-
-/* DWARF macinfo type encodings. */
-enum
- {
- DW_MACINFO_define = 1,
- DW_MACINFO_undef = 2,
- DW_MACINFO_start_file = 3,
- DW_MACINFO_end_file = 4,
- DW_MACINFO_vendor_ext = 255
- };
-
-
-/* DWARF call frame instruction encodings. */
-enum
- {
- DW_CFA_advance_loc = 0x40,
- DW_CFA_offset = 0x80,
- DW_CFA_restore = 0xc0,
- DW_CFA_extended = 0,
-
- DW_CFA_nop = 0x00,
- DW_CFA_set_loc = 0x01,
- DW_CFA_advance_loc1 = 0x02,
- DW_CFA_advance_loc2 = 0x03,
- DW_CFA_advance_loc4 = 0x04,
- DW_CFA_offset_extended = 0x05,
- DW_CFA_restore_extended = 0x06,
- DW_CFA_undefined = 0x07,
- DW_CFA_same_value = 0x08,
- DW_CFA_register = 0x09,
- DW_CFA_remember_state = 0x0a,
- DW_CFA_restore_state = 0x0b,
- DW_CFA_def_cfa = 0x0c,
- DW_CFA_def_cfa_register = 0x0d,
- DW_CFA_def_cfa_offset = 0x0e,
- DW_CFA_def_cfa_expression = 0x0f,
- DW_CFA_expression = 0x10,
- DW_CFA_offset_extended_sf = 0x11,
- DW_CFA_def_cfa_sf = 0x12,
- DW_CFA_def_cfa_offset_sf = 0x13,
- DW_CFA_val_offset = 0x14,
- DW_CFA_val_offset_sf = 0x15,
- DW_CFA_val_expression = 0x16,
-
- DW_CFA_low_user = 0x1c,
- DW_CFA_MIPS_advance_loc8 = 0x1d,
- DW_CFA_GNU_window_save = 0x2d,
- DW_CFA_GNU_args_size = 0x2e,
- DW_CFA_high_user = 0x3f
- };
-
-
-/* DWARF XXX. */
-#define DW_ADDR_none 0
-
-/* Section 7.2.2 of the DWARF3 specification defines a range of escape
- codes that can appear in the length field of certain DWARF structures.
-
- These defines enumerate the minium and maximum values of this range.
- Currently only the maximum value is used (to indicate that 64-bit
- values are going to be used in the dwarf data that accompanies the
- structure). The other values are reserved.
-
- Note: There is a typo in DWARF3 spec (published Dec 20, 2005). In
- sections 7.4, 7.5.1, 7.19, 7.20 the minimum escape code is referred to
- as 0xffffff00 whereas in fact it should be 0xfffffff0. */
-#define DWARF3_LENGTH_MIN_ESCAPE_CODE 0xfffffff0u
-#define DWARF3_LENGTH_MAX_ESCAPE_CODE 0xffffffffu
-#define DWARF3_LENGTH_64_BIT DWARF3_LENGTH_MAX_ESCAPE_CODE
-
-#endif /* dwarf.h */
diff --git a/libdw/dwarf_abbrev_hash.c b/libdw/dwarf_abbrev_hash.c
deleted file mode 100644
index 5c5d6cb..0000000
--- a/libdw/dwarf_abbrev_hash.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Implementation of hash table for DWARF .debug_abbrev section content.
- Copyright (C) 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#define NO_UNDEF
-#include "libdwP.h"
-
-#define next_prime __libdwarf_next_prime
-extern size_t next_prime (size_t) attribute_hidden;
-
-#include <dynamicsizehash.c>
-
-#undef next_prime
-#define next_prime attribute_hidden __libdwarf_next_prime
-#include "../lib/next_prime.c"
diff --git a/libdw/dwarf_abbrev_hash.h b/libdw/dwarf_abbrev_hash.h
deleted file mode 100644
index f124d16..0000000
--- a/libdw/dwarf_abbrev_hash.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Hash table for DWARF .debug_abbrev section content.
- Copyright (C) 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifndef _DWARF_ABBREV_HASH_H
-#define _DWARF_ABBREV_HASH_H 1
-
-#define NAME Dwarf_Abbrev_Hash
-#define TYPE Dwarf_Abbrev *
-#define COMPARE(a, b) (0)
-
-#include <dynamicsizehash.h>
-
-#endif /* dwarf_abbrev_hash.h */
diff --git a/libdw/dwarf_abbrevhaschildren.c b/libdw/dwarf_abbrevhaschildren.c
deleted file mode 100644
index 4e42a32..0000000
--- a/libdw/dwarf_abbrevhaschildren.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Return true if abbreviation is children flag set.
- Copyright (C) 2003 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <dwarf.h>
-#include "libdwP.h"
-
-
-int
-dwarf_abbrevhaschildren (abbrev)
- Dwarf_Abbrev *abbrev;
-{
- return abbrev == NULL ? -1 : abbrev->has_children;
-}
diff --git a/libdw/dwarf_addrdie.c b/libdw/dwarf_addrdie.c
deleted file mode 100644
index 8461872..0000000
--- a/libdw/dwarf_addrdie.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Return CU DIE containing given address.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libdwP.h"
-
-
-Dwarf_Die *
-dwarf_addrdie (dbg, addr, result)
- Dwarf *dbg;
- Dwarf_Addr addr;
- Dwarf_Die *result;
-{
- Dwarf_Aranges *aranges;
- size_t naranges;
- Dwarf_Off off;
-
- if (INTUSE(dwarf_getaranges) (dbg, &aranges, &naranges) != 0
- || INTUSE(dwarf_getarangeinfo) (INTUSE(dwarf_getarange_addr) (aranges,
- addr),
- NULL, NULL, &off) != 0)
- return NULL;
-
- return INTUSE(dwarf_offdie) (dbg, off, result);
-}
diff --git a/libdw/dwarf_arrayorder.c b/libdw/dwarf_arrayorder.c
deleted file mode 100644
index 6d5a42d..0000000
--- a/libdw/dwarf_arrayorder.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Return array order attribute of DIE.
- Copyright (C) 2003, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <dwarf.h>
-#include "libdwP.h"
-
-
-int
-dwarf_arrayorder (die)
- Dwarf_Die *die;
-{
- Dwarf_Attribute attr_mem;
- Dwarf_Word value;
-
- return INTUSE(dwarf_formudata) (INTUSE(dwarf_attr) (die, DW_AT_ordering,
- &attr_mem),
- &value) == 0 ? (int) value : -1;
-}
diff --git a/libdw/dwarf_attr.c b/libdw/dwarf_attr.c
deleted file mode 100644
index d3b0324..0000000
--- a/libdw/dwarf_attr.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/* Return specific DWARF attribute of a DIE.
- Copyright (C) 2003, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <dwarf.h>
-#include "libdwP.h"
-
-
-Dwarf_Attribute *
-dwarf_attr (die, search_name, result)
- Dwarf_Die *die;
- unsigned int search_name;
- Dwarf_Attribute *result;
-{
- if (die == NULL)
- return NULL;
-
- /* Search for the attribute with the given name. */
- result->valp = __libdw_find_attr (die, search_name, &result->code,
- &result->form);
- /* Always fill in the CU information. */
- result->cu = die->cu;
-
- return result->code == search_name ? result : NULL;
-}
-INTDEF(dwarf_attr)
diff --git a/libdw/dwarf_attr_integrate.c b/libdw/dwarf_attr_integrate.c
deleted file mode 100644
index ce062f5..0000000
--- a/libdw/dwarf_attr_integrate.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/* Return specific DWARF attribute of a DIE, integrating indirections.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <dwarf.h>
-#include "libdwP.h"
-
-Dwarf_Attribute *
-dwarf_attr_integrate (Dwarf_Die *die, unsigned int search_name,
- Dwarf_Attribute *result)
-{
- Dwarf_Die die_mem;
-
- do
- {
- Dwarf_Attribute *attr = INTUSE(dwarf_attr) (die, search_name, result);
- if (attr != NULL)
- return attr;
-
- attr = INTUSE(dwarf_attr) (die, DW_AT_abstract_origin, result);
- if (attr == NULL)
- attr = INTUSE(dwarf_attr) (die, DW_AT_specification, result);
- if (attr == NULL)
- break;
-
- die = INTUSE(dwarf_formref_die) (attr, &die_mem);
- }
- while (die != NULL);
-
- return NULL;
-}
-INTDEF (dwarf_attr_integrate)
diff --git a/libdw/dwarf_begin.c b/libdw/dwarf_begin.c
deleted file mode 100644
index 77bdd77..0000000
--- a/libdw/dwarf_begin.c
+++ /dev/null
@@ -1,127 +0,0 @@
-/* Create descriptor from file descriptor for processing file.
- Copyright (C) 2002, 2003, 2004, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <errno.h>
-#include <stddef.h>
-#include <sys/stat.h>
-
-#include <libdwP.h>
-
-
-Dwarf *
-dwarf_begin (fd, cmd)
- int fd;
- Dwarf_Cmd cmd;
-{
- Elf *elf;
- Elf_Cmd elfcmd;
- Dwarf *result = NULL;
-
- switch (cmd)
- {
- case DWARF_C_READ:
- elfcmd = ELF_C_READ_MMAP;
- break;
- case DWARF_C_WRITE:
- elfcmd = ELF_C_WRITE;
- break;
- case DWARF_C_RDWR:
- elfcmd = ELF_C_RDWR;
- break;
- default:
- /* No valid mode. */
- __libdw_seterrno (DWARF_E_INVALID_CMD);
- return NULL;
- }
-
- /* We have to call `elf_version' here since the user might have not
- done it or initialized libelf with a different version. This
- would break libdwarf since we are using the ELF data structures
- in a certain way. */
- elf_version (EV_CURRENT);
-
- /* Get an ELF descriptor. */
- elf = elf_begin (fd, elfcmd, NULL);
- if (elf == NULL)
- /* ANDROID_CHANGE_BEGIN */
- {
-#if 0
- /* Test why the `elf_begin" call failed. */
- struct stat64 st;
-
- if (fstat64 (fd, &st) == 0 && ! S_ISREG (st.st_mode))
- __libdw_seterrno (DWARF_E_NO_REGFILE);
- else if (errno == EBADF)
- __libdw_seterrno (DWARF_E_INVALID_FILE);
- else
- __libdw_seterrno (DWARF_E_IO_ERROR);
-#else
- __libdw_seterrno (DWARF_E_IO_ERROR);
-#endif
- /* ANDROID_CHANGE_END */
- }
- else
- {
- /* Do the real work now that we have an ELF descriptor. */
- result = INTUSE(dwarf_begin_elf) (elf, cmd, NULL);
-
- /* If this failed, free the resources. */
- if (result == NULL)
- elf_end (elf);
- else
- result->free_elf = true;
- }
-
- return result;
-}
diff --git a/libdw/dwarf_begin_elf.c b/libdw/dwarf_begin_elf.c
deleted file mode 100644
index aaac399..0000000
--- a/libdw/dwarf_begin_elf.c
+++ /dev/null
@@ -1,299 +0,0 @@
-/* Create descriptor from ELF descriptor for processing file.
- Copyright (C) 2002, 2003, 2004, 2005, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdbool.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/stat.h>
-
-#include "libdwP.h"
-
-
-/* Section names. */
-static const char dwarf_scnnames[IDX_last][17] =
-{
- [IDX_debug_info] = ".debug_info",
- [IDX_debug_abbrev] = ".debug_abbrev",
- [IDX_debug_aranges] = ".debug_aranges",
- [IDX_debug_line] = ".debug_line",
- [IDX_debug_frame] = ".debug_frame",
- [IDX_eh_frame] = ".eh_frame",
- [IDX_debug_loc] = ".debug_loc",
- [IDX_debug_pubnames] = ".debug_pubnames",
- [IDX_debug_str] = ".debug_str",
- [IDX_debug_funcnames] = ".debug_funcnames",
- [IDX_debug_typenames] = ".debug_typenames",
- [IDX_debug_varnames] = ".debug_varnames",
- [IDX_debug_weaknames] = ".debug_weaknames",
- [IDX_debug_macinfo] = ".debug_macinfo",
- [IDX_debug_ranges] = ".debug_ranges"
-};
-#define ndwarf_scnnames (sizeof (dwarf_scnnames) / sizeof (dwarf_scnnames[0]))
-
-
-static Dwarf *
-check_section (Dwarf *result, GElf_Ehdr *ehdr, Elf_Scn *scn, bool inscngrp)
-{
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr;
-
- /* Get the section header data. */
- shdr = gelf_getshdr (scn, &shdr_mem);
- if (shdr == NULL)
- /* This should never happen. If it does something is
- wrong in the libelf library. */
- abort ();
-
- /* Ignore any SHT_NOBITS sections. Debugging sections should not
- have been stripped, but in case of a corrupt file we won't try
- to look at the missing data. */
- if (unlikely (shdr->sh_type == SHT_NOBITS))
- return result;
-
- /* Make sure the section is part of a section group only iff we
- really need it. If we are looking for the global (= non-section
- group debug info) we have to ignore all the info in section
- groups. If we are looking into a section group we cannot look at
- a section which isn't part of the section group. */
- if (! inscngrp && (shdr->sh_flags & SHF_GROUP) != 0)
- /* Ignore the section. */
- return result;
-
-
- /* We recognize the DWARF section by their names. This is not very
- safe and stable but the best we can do. */
- const char *scnname = elf_strptr (result->elf, ehdr->e_shstrndx,
- shdr->sh_name);
- if (scnname == NULL)
- {
- /* The section name must be valid. Otherwise is the ELF file
- invalid. */
- __libdw_seterrno (DWARF_E_INVALID_ELF);
- free (result);
- return NULL;
- }
-
-
- /* Recognize the various sections. Most names start with .debug_. */
- size_t cnt;
- for (cnt = 0; cnt < ndwarf_scnnames; ++cnt)
- if (strcmp (scnname, dwarf_scnnames[cnt]) == 0)
- {
- /* Found it. Remember where the data is. */
- if (unlikely (result->sectiondata[cnt] != NULL))
- /* A section appears twice. That's bad. We ignore the section. */
- break;
-
- /* Get the section data. */
- Elf_Data *data = elf_getdata (scn, NULL);
- if (data != NULL && data->d_size != 0)
- /* Yep, there is actually data available. */
- result->sectiondata[cnt] = data;
-
- break;
- }
-
- return result;
-}
-
-
-/* Check whether all the necessary DWARF information is available. */
-static Dwarf *
-valid_p (Dwarf *result)
-{
- /* We looked at all the sections. Now determine whether all the
- sections with debugging information we need are there.
-
- XXX Which sections are absolutely necessary? Add tests if
- necessary. For now we require only .debug_info. Hopefully this
- is correct. */
- if (likely (result != NULL)
- && unlikely (result->sectiondata[IDX_debug_info] == NULL))
- {
- __libdw_seterrno (DWARF_E_NO_DWARF);
- free (result);
- result = NULL;
- }
-
- return result;
-}
-
-
-static Dwarf *
-global_read (Dwarf *result, Elf *elf, GElf_Ehdr *ehdr)
-{
- Elf_Scn *scn = NULL;
-
- while (result != NULL && (scn = elf_nextscn (elf, scn)) != NULL)
- result = check_section (result, ehdr, scn, false);
-
- return valid_p (result);
-}
-
-
-static Dwarf *
-scngrp_read (Dwarf *result, Elf *elf, GElf_Ehdr *ehdr, Elf_Scn *scngrp)
-{
- /* SCNGRP is the section descriptor for a section group which might
- contain debug sections. */
- Elf_Data *data = elf_getdata (scngrp, NULL);
- if (data == NULL)
- {
- /* We cannot read the section content. Fail! */
- free (result);
- return NULL;
- }
-
- /* The content of the section is a number of 32-bit words which
- represent section indices. The first word is a flag word. */
- Elf32_Word *scnidx = (Elf32_Word *) data->d_buf;
- size_t cnt;
- for (cnt = 1; cnt * sizeof (Elf32_Word) <= data->d_size; ++cnt)
- {
- Elf_Scn *scn = elf_getscn (elf, scnidx[cnt]);
- if (scn == NULL)
- {
- /* A section group refers to a non-existing section. Should
- never happen. */
- __libdw_seterrno (DWARF_E_INVALID_ELF);
- free (result);
- return NULL;
- }
-
- result = check_section (result, ehdr, scn, true);
- if (result == NULL)
- break;
- }
-
- return valid_p (result);
-}
-
-
-Dwarf *
-dwarf_begin_elf (elf, cmd, scngrp)
- Elf *elf;
- Dwarf_Cmd cmd;
- Elf_Scn *scngrp;
-{
- GElf_Ehdr *ehdr;
- GElf_Ehdr ehdr_mem;
-
- /* Get the ELF header of the file. We need various pieces of
- information from it. */
- ehdr = gelf_getehdr (elf, &ehdr_mem);
- if (ehdr == NULL)
- {
- if (elf_kind (elf) != ELF_K_ELF)
- __libdw_seterrno (DWARF_E_NOELF);
- else
- __libdw_seterrno (DWARF_E_GETEHDR_ERROR);
-
- return NULL;
- }
-
-
- /* Default memory allocation size. */
- size_t mem_default_size = sysconf (_SC_PAGESIZE) - 4 * sizeof (void *);
-
- /* Allocate the data structure. */
- Dwarf *result = (Dwarf *) calloc (1, sizeof (Dwarf) + mem_default_size);
- if (result == NULL)
- {
- __libdw_seterrno (DWARF_E_NOMEM);
- return NULL;
- }
-
- /* Fill in some values. */
- if ((BYTE_ORDER == LITTLE_ENDIAN && ehdr->e_ident[EI_DATA] == ELFDATA2MSB)
- || (BYTE_ORDER == BIG_ENDIAN && ehdr->e_ident[EI_DATA] == ELFDATA2LSB))
- result->other_byte_order = true;
-
- result->elf = elf;
-
- /* Initialize the memory handling. */
- result->mem_default_size = mem_default_size;
- result->oom_handler = __libdw_oom;
- result->mem_tail = (struct libdw_memblock *) (result + 1);
- result->mem_tail->size = (result->mem_default_size
- - offsetof (struct libdw_memblock, mem));
- result->mem_tail->remaining = result->mem_tail->size;
- result->mem_tail->prev = NULL;
-
-
- if (cmd == DWARF_C_READ || cmd == DWARF_C_RDWR)
- {
- /* If the caller provides a section group we get the DWARF
- sections only from this setion group. Otherwise we search
- for the first section with the required name. Further
- sections with the name are ignored. The DWARF specification
- does not really say this is allowed. */
- if (scngrp == NULL)
- return global_read (result, elf, ehdr);
- else
- return scngrp_read (result, elf, ehdr, scngrp);
- }
- else if (cmd == DWARF_C_WRITE)
- {
- __libdw_seterrno (DWARF_E_UNIMPL);
- free (result);
- return NULL;
- }
-
- __libdw_seterrno (DWARF_E_INVALID_CMD);
- free (result);
- return NULL;
-}
-INTDEF(dwarf_begin_elf)
diff --git a/libdw/dwarf_bitoffset.c b/libdw/dwarf_bitoffset.c
deleted file mode 100644
index 235b7ee..0000000
--- a/libdw/dwarf_bitoffset.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Return bit offset attribute of DIE.
- Copyright (C) 2003, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <dwarf.h>
-#include "libdwP.h"
-
-
-int
-dwarf_bitoffset (die)
- Dwarf_Die *die;
-{
- Dwarf_Attribute attr_mem;
- Dwarf_Word value;
-
- return INTUSE(dwarf_formudata) (INTUSE(dwarf_attr) (die, DW_AT_bit_offset,
- &attr_mem),
- &value) == 0 ? (int) value : -1;
-}
diff --git a/libdw/dwarf_bitsize.c b/libdw/dwarf_bitsize.c
deleted file mode 100644
index 57d7fba..0000000
--- a/libdw/dwarf_bitsize.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Return bit size attribute of DIE.
- Copyright (C) 2003, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <dwarf.h>
-#include "libdwP.h"
-
-
-int
-dwarf_bitsize (die)
- Dwarf_Die *die;
-{
- Dwarf_Attribute attr_mem;
- Dwarf_Word value;
-
- return INTUSE(dwarf_formudata) (INTUSE(dwarf_attr) (die, DW_AT_bit_size,
- &attr_mem),
- &value) == 0 ? (int) value : -1;
-}
diff --git a/libdw/dwarf_bytesize.c b/libdw/dwarf_bytesize.c
deleted file mode 100644
index 635a3c1..0000000
--- a/libdw/dwarf_bytesize.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Return byte size attribute of DIE.
- Copyright (C) 2003, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <dwarf.h>
-#include "libdwP.h"
-
-
-int
-dwarf_bytesize (die)
- Dwarf_Die *die;
-{
- Dwarf_Attribute attr_mem;
- Dwarf_Word value;
-
- return INTUSE(dwarf_formudata) (INTUSE(dwarf_attr) (die, DW_AT_byte_size,
- &attr_mem),
- &value) == 0 ? (int) value : -1;
-}
diff --git a/libdw/dwarf_child.c b/libdw/dwarf_child.c
deleted file mode 100644
index 0080cf9..0000000
--- a/libdw/dwarf_child.c
+++ /dev/null
@@ -1,202 +0,0 @@
-/* Return child of current DIE.
- Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libdwP.h"
-#include <string.h>
-
-/* Some arbitrary value not conflicting with any existing code. */
-#define INVALID 0xffffe444
-
-
-unsigned char *
-internal_function
-__libdw_find_attr (Dwarf_Die *die, unsigned int search_name,
- unsigned int *codep, unsigned int *formp)
-{
- Dwarf *dbg = die->cu->dbg;
- const unsigned char *readp = (unsigned char *) die->addr;
-
- /* First we have to get the abbreviation code so that we can decode
- the data in the DIE. */
- unsigned int abbrev_code;
- get_uleb128 (abbrev_code, readp);
-
- /* Find the abbreviation entry. */
- Dwarf_Abbrev *abbrevp = die->abbrev;
- if (abbrevp == NULL)
- {
- abbrevp = __libdw_findabbrev (die->cu, abbrev_code);
- die->abbrev = abbrevp ?: DWARF_END_ABBREV;
- }
- if (unlikely (die->abbrev == DWARF_END_ABBREV))
- {
- invalid_dwarf:
- __libdw_seterrno (DWARF_E_INVALID_DWARF);
- return NULL;
- }
-
- /* Search the name attribute. */
- unsigned char *const endp
- = ((unsigned char *) dbg->sectiondata[IDX_debug_abbrev]->d_buf
- + dbg->sectiondata[IDX_debug_abbrev]->d_size);
-
- const unsigned char *attrp = die->abbrev->attrp;
- while (1)
- {
- /* Are we still in bounds? This test needs to be refined. */
- if (unlikely (attrp + 1 >= endp))
- goto invalid_dwarf;
-
- /* Get attribute name and form.
-
- XXX We don't check whether this reads beyond the end of the
- section. */
- unsigned int attr_name;
- get_uleb128 (attr_name, attrp);
- unsigned int attr_form;
- get_uleb128 (attr_form, attrp);
-
- /* We can stop if we found the attribute with value zero. */
- if (attr_name == 0 && attr_form == 0)
- break;
-
- /* Is this the name attribute? */
- if (attr_name == search_name && search_name != INVALID)
- {
- if (codep != NULL)
- *codep = attr_name;
- if (formp != NULL)
- *formp = attr_form;
-
- return (unsigned char *) readp;
- }
-
- /* Skip over the rest of this attribute (if there is any). */
- if (attr_form != 0)
- {
- size_t len = __libdw_form_val_len (dbg, die->cu, attr_form, readp);
-
- if (unlikely (len == (size_t) -1l))
- {
- readp = NULL;
- break;
- }
-
- // XXX We need better boundary checks.
- readp += len;
- }
- }
-
- // XXX Do we need other values?
- if (codep != NULL)
- *codep = INVALID;
- if (formp != NULL)
- *formp = INVALID;
-
- return (unsigned char *) readp;
-}
-
-
-int
-dwarf_child (die, result)
- Dwarf_Die *die;
- Dwarf_Die *result;
-{
- /* Ignore previous errors. */
- if (die == NULL)
- return -1;
-
- /* Skip past the last attribute. */
- void *addr = NULL;
-
- /* If we already know there are no children do not search. */
- if (die->abbrev != DWARF_END_ABBREV
- && (die->abbrev == NULL || die->abbrev->has_children))
- addr = __libdw_find_attr (die, INVALID, NULL, NULL);
- if (unlikely (die->abbrev == (Dwarf_Abbrev *) -1l))
- return -1;
-
- /* Make sure the DIE really has children. */
- if (! die->abbrev->has_children)
- /* There cannot be any children. */
- return 1;
-
- if (addr == NULL)
- return -1;
-
- /* It's kosher (just suboptimal) to have a null entry first thing (7.5.3).
- So if this starts with ULEB128 of 0 (even with silly encoding of 0),
- it is a kosher null entry and we do not really have any children. */
- const unsigned char *code = addr;
- while (unlikely (*code == 0x80))
- ++code;
- if (unlikely (*code == '\0'))
- return 1;
-
- /* RESULT can be the same as DIE. So preserve what we need. */
- struct Dwarf_CU *cu = die->cu;
-
- /* Clear the entire DIE structure. This signals we have not yet
- determined any of the information. */
- memset (result, '\0', sizeof (Dwarf_Die));
-
- /* We have the address. */
- result->addr = addr;
-
- /* Same CU as the parent. */
- result->cu = cu;
-
- return 0;
-}
-INTDEF(dwarf_child)
diff --git a/libdw/dwarf_cuoffset.c b/libdw/dwarf_cuoffset.c
deleted file mode 100644
index 10238b4..0000000
--- a/libdw/dwarf_cuoffset.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* Return offset of DIE in CU.
- Copyright (C) 2003 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <dwarf.h>
-#include "libdwP.h"
-
-
-Dwarf_Off
-dwarf_cuoffset (die)
- Dwarf_Die *die;
-{
- return (die == NULL
- ? (Dwarf_Off) -1l
- : (die->addr
- - die->cu->dbg->sectiondata[IDX_debug_info]->d_buf
- - die->cu->start));
-}
diff --git a/libdw/dwarf_decl_column.c b/libdw/dwarf_decl_column.c
deleted file mode 100644
index 5e0f3e0..0000000
--- a/libdw/dwarf_decl_column.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Get column number of beginning of given declaration.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <dwarf.h>
-#include "libdwP.h"
-
-
-int
-dwarf_decl_column (Dwarf_Die *decl, int *colp)
-{
- return __libdw_attr_intval (decl, colp, DW_AT_decl_column);
-}
diff --git a/libdw/dwarf_decl_file.c b/libdw/dwarf_decl_file.c
deleted file mode 100644
index b1d62df..0000000
--- a/libdw/dwarf_decl_file.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/* Return file name containing definition of the given function.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <dwarf.h>
-#include "libdwP.h"
-
-
-const char *
-dwarf_decl_file (Dwarf_Die *die)
-{
- Dwarf_Attribute attr_mem;
- Dwarf_Sword idx = 0;
-
- if (INTUSE(dwarf_formsdata) (INTUSE(dwarf_attr) (die, DW_AT_decl_file,
- &attr_mem), &idx) != 0)
- return NULL;
-
- /* Zero means no source file information available. */
- if (idx == 0)
- {
- __libdw_seterrno (DWARF_E_NO_ENTRY);
- return NULL;
- }
-
- /* Get the array of source files for the CU. */
- struct Dwarf_CU *cu = die->cu;
- if (cu->lines == NULL)
- {
- Dwarf_Lines *lines;
- size_t nlines;
-
- /* Let the more generic function do the work. It'll create more
- data but that will be needed in an real program anyway. */
- (void) INTUSE(dwarf_getsrclines) (&CUDIE (cu), &lines, &nlines);
- assert (cu->lines != NULL);
- }
-
- if (cu->lines == (void *) -1l)
- {
- /* If the file index is not zero, there must be file information
- available. */
- __libdw_seterrno (DWARF_E_INVALID_DWARF);
- return NULL;
- }
-
- assert (cu->files != NULL && cu->files != (void *) -1l);
-
- if (idx >= cu->files->nfiles)
- {
- __libdw_seterrno (DWARF_E_INVALID_DWARF);
- return NULL;
- }
-
- return cu->files->info[idx].name;
-}
diff --git a/libdw/dwarf_decl_line.c b/libdw/dwarf_decl_line.c
deleted file mode 100644
index b4e3c42..0000000
--- a/libdw/dwarf_decl_line.c
+++ /dev/null
@@ -1,83 +0,0 @@
-/* Get line number of beginning of given function.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <dwarf.h>
-#include <limits.h>
-#include "libdwP.h"
-
-
-int
-dwarf_decl_line (Dwarf_Die *func, int *linep)
-{
- return __libdw_attr_intval (func, linep, DW_AT_decl_line);
-}
-
-
-int internal_function
-__libdw_attr_intval (Dwarf_Die *die, int *linep, int attval)
-{
- Dwarf_Attribute attr_mem;
- Dwarf_Sword line;
-
- int res = INTUSE(dwarf_formsdata) (INTUSE(dwarf_attr) (die, attval,
- &attr_mem), &line);
- if (res == 0)
- {
- assert (line >= 0 && line <= INT_MAX);
- *linep = line;
- }
-
- return res;
-}
diff --git a/libdw/dwarf_diecu.c b/libdw/dwarf_diecu.c
deleted file mode 100644
index a62b822..0000000
--- a/libdw/dwarf_diecu.c
+++ /dev/null
@@ -1,83 +0,0 @@
-/* Return CU DIE containing given DIE.
- Copyright (C) 2005, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <string.h>
-#include "libdwP.h"
-
-
-Dwarf_Die *
-dwarf_diecu (die, result, address_sizep, offset_sizep)
- Dwarf_Die *die;
- Dwarf_Die *result;
- uint8_t *address_sizep;
- uint8_t *offset_sizep;
-{
- if (die == NULL)
- return NULL;
-
- /* Clear the entire DIE structure. This signals we have not yet
- determined any of the information. */
- memset (result, '\0', sizeof (Dwarf_Die));
-
- result->addr = ((char *) die->cu->dbg->sectiondata[IDX_debug_info]->d_buf
- + DIE_OFFSET_FROM_CU_OFFSET (die->cu->start,
- die->cu->offset_size));
- result->cu = die->cu;
-
- if (address_sizep != NULL)
- *address_sizep = die->cu->address_size;
- if (offset_sizep != NULL)
- *offset_sizep = die->cu->offset_size;
-
- return result;
-}
diff --git a/libdw/dwarf_diename.c b/libdw/dwarf_diename.c
deleted file mode 100644
index 3b66d12..0000000
--- a/libdw/dwarf_diename.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Return string in name attribute of DIE.
- Copyright (C) 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <dwarf.h>
-#include "libdwP.h"
-
-
-const char *
-dwarf_diename (die)
- Dwarf_Die *die;
-{
- Dwarf_Attribute attr_mem;
-
- return INTUSE(dwarf_formstring) (INTUSE(dwarf_attr_integrate) (die,
- DW_AT_name,
- &attr_mem));
-}
-INTDEF (dwarf_diename)
diff --git a/libdw/dwarf_dieoffset.c b/libdw/dwarf_dieoffset.c
deleted file mode 100644
index 4d712f7..0000000
--- a/libdw/dwarf_dieoffset.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* Return offset of DIE.
- Copyright (C) 2003, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <dwarf.h>
-#include "libdwP.h"
-
-
-Dwarf_Off
-dwarf_dieoffset (die)
- Dwarf_Die *die;
-{
- return (die == NULL
- ? ~0ul
- : (Dwarf_Off) (die->addr
- - die->cu->dbg->sectiondata[IDX_debug_info]->d_buf));
-}
-INTDEF(dwarf_dieoffset)
diff --git a/libdw/dwarf_end.c b/libdw/dwarf_end.c
deleted file mode 100644
index 60c9716..0000000
--- a/libdw/dwarf_end.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/* Release debugging handling context.
- Copyright (C) 2002, 2003, 2004, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <search.h>
-#include <stdlib.h>
-
-#include "libdwP.h"
-
-
-
-static void
-noop_free (void *arg __attribute__ ((unused)))
-{
-}
-
-
-static void
-cu_free (void *arg)
-{
- struct Dwarf_CU *p = (struct Dwarf_CU *) arg;
-
- Dwarf_Abbrev_Hash_free (&p->abbrev_hash);
-
- tdestroy (p->locs, noop_free);
-}
-
-
-int
-dwarf_end (dwarf)
- Dwarf *dwarf;
-{
- if (dwarf != NULL)
- {
- /* The search tree for the CUs. NB: the CU data itself is
- allocated separately, but the abbreviation hash tables need
- to be handled. */
- tdestroy (dwarf->cu_tree, cu_free);
-
- struct libdw_memblock *memp = dwarf->mem_tail;
- /* The first block is allocated together with the Dwarf object. */
- while (memp->prev != NULL)
- {
- struct libdw_memblock *prevp = memp->prev;
- free (memp);
- memp = prevp;
- }
-
- /* Free the pubnames helper structure. */
- free (dwarf->pubnames_sets);
-
- /* Free the ELF descriptor if necessary. */
- if (dwarf->free_elf)
- elf_end (dwarf->elf);
-
- /* Free the context descriptor. */
- free (dwarf);
- }
-
- return 0;
-}
-INTDEF(dwarf_end)
diff --git a/libdw/dwarf_entry_breakpoints.c b/libdw/dwarf_entry_breakpoints.c
deleted file mode 100644
index 578464f..0000000
--- a/libdw/dwarf_entry_breakpoints.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/* Find entry breakpoint locations for a function.
- Copyright (C) 2005, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-#include "libdwP.h"
-#include <dwarf.h>
-#include <stdlib.h>
-
-
-int
-dwarf_entry_breakpoints (die, bkpts)
- Dwarf_Die *die;
- Dwarf_Addr **bkpts;
-{
- int nbkpts = 0;
- *bkpts = NULL;
-
- /* Add one breakpoint location to the result vector. */
- inline int add_bkpt (Dwarf_Addr pc)
- {
- Dwarf_Addr *newlist = realloc (*bkpts, ++nbkpts * sizeof newlist[0]);
- if (newlist == NULL)
- {
- free (*bkpts);
- *bkpts = NULL;
- __libdw_seterrno (DWARF_E_NOMEM);
- return -1;
- }
- newlist[nbkpts - 1] = pc;
- *bkpts = newlist;
- return nbkpts;
- }
-
- /* Fallback result, break at the entrypc/lowpc value. */
- inline int entrypc_bkpt (void)
- {
- Dwarf_Addr pc;
- return INTUSE(dwarf_entrypc) (die, &pc) < 0 ? -1 : add_bkpt (pc);
- }
-
- /* Fetch the CU's line records to look for this DIE's addresses. */
- Dwarf_Die cudie = CUDIE (die->cu);
- Dwarf_Lines *lines;
- size_t nlines;
- if (INTUSE(dwarf_getsrclines) (&cudie, &lines, &nlines) < 0)
- {
- int error = INTUSE (dwarf_errno) ();
- if (error == DWARF_E_NO_DEBUG_LINE)
- return entrypc_bkpt ();
- __libdw_seterrno (error);
- return -1;
- }
-
- /* Search a contiguous PC range for prologue-end markers.
- If DWARF, look for proper markers.
- Failing that, if ADHOC, look for the ad hoc convention. */
- inline int search_range (Dwarf_Addr low, Dwarf_Addr high,
- bool dwarf, bool adhoc)
- {
- size_t l = 0, u = nlines;
- while (l < u)
- {
- size_t idx = (l + u) / 2;
- if (lines->info[idx].addr < low)
- l = idx + 1;
- else if (lines->info[idx].addr > low)
- u = idx;
- else if (lines->info[idx].end_sequence)
- l = idx + 1;
- else
- {
- l = idx;
- break;
- }
- }
- if (l < u)
- {
- if (dwarf)
- for (size_t i = l; i < u && lines->info[i].addr < high; ++i)
- if (lines->info[i].prologue_end
- && add_bkpt (lines->info[i].addr) < 0)
- return -1;
- if (adhoc && nbkpts == 0)
- while (++l < nlines && lines->info[l].addr < high)
- if (!lines->info[l].end_sequence)
- return add_bkpt (lines->info[l].addr);
- return nbkpts;
- }
- __libdw_seterrno (DWARF_E_INVALID_DWARF);
- return -1;
- }
-
- /* Search each contiguous address range for DWARF prologue_end markers. */
-
- Dwarf_Addr base;
- Dwarf_Addr begin;
- Dwarf_Addr end;
- ptrdiff_t offset = INTUSE(dwarf_ranges) (die, 0, &base, &begin, &end);
- if (offset < 0)
- return -1;
-
- /* Most often there is a single contiguous PC range for the DIE. */
- if (offset == 1)
- return search_range (begin, end, true, true) ?: entrypc_bkpt ();
-
- Dwarf_Addr lowpc = (Dwarf_Addr) -1l;
- Dwarf_Addr highpc = (Dwarf_Addr) -1l;
- while (offset > 0)
- {
- /* We have an address range entry. */
- if (search_range (begin, end, true, false) < 0)
- return -1;
-
- if (begin < lowpc)
- {
- lowpc = begin;
- highpc = end;
- }
-
- offset = INTUSE(dwarf_ranges) (die, offset, &base, &begin, &end);
- }
-
- /* If we didn't find any proper DWARF markers, then look in the
- lowest-addressed range for an ad hoc marker. Failing that,
- fall back to just using the entrypc value. */
- return (nbkpts
- ?: (lowpc == (Dwarf_Addr) -1l ? 0
- : search_range (lowpc, highpc, false, true))
- ?: entrypc_bkpt ());
-}
diff --git a/libdw/dwarf_entrypc.c b/libdw/dwarf_entrypc.c
deleted file mode 100644
index 1719be2..0000000
--- a/libdw/dwarf_entrypc.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/* Return entry PC attribute of DIE.
- Copyright (C) 2003, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <dwarf.h>
-#include "libdwP.h"
-
-
-int
-dwarf_entrypc (die, return_addr)
- Dwarf_Die *die;
- Dwarf_Addr *return_addr;
-{
- Dwarf_Attribute attr_mem;
-
- return INTUSE(dwarf_formaddr) (INTUSE(dwarf_attr) (die, DW_AT_entry_pc,
- &attr_mem)
- ?: INTUSE(dwarf_attr) (die, DW_AT_low_pc,
- &attr_mem),
- return_addr);
-}
-INTDEF(dwarf_entrypc)
diff --git a/libdw/dwarf_error.c b/libdw/dwarf_error.c
deleted file mode 100644
index fe91664..0000000
--- a/libdw/dwarf_error.c
+++ /dev/null
@@ -1,217 +0,0 @@
-/* Retrieve ELF descriptor used for DWARF access.
- Copyright (C) 2002, 2003, 2004, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <stddef.h>
-
-#include "libdwP.h"
-
-
-#ifdef USE_TLS
-/* The error number. */
-static __thread int global_error;
-#else
-/* This is the key for the thread specific memory. */
-static tls_key_t key;
-
-/* The error number. Used in non-threaded programs. */
-static int global_error;
-static bool threaded;
-/* We need to initialize the thread-specific data. */
-once_define (static, once);
-
-/* The initialization and destruction functions. */
-static void init (void);
-static void free_key_mem (void *mem);
-#endif /* TLS */
-
-
-int
-dwarf_errno (void)
-{
- int result;
-
-#ifndef USE_TLS
- /* If we have not yet initialized the buffer do it now. */
- once_execute (once, init);
-
- if (threaded)
- {
- /* We do not allocate memory for the data. It is only a word.
- We can store it in place of the pointer. */
- result = (intptr_t) getspecific (key);
-
- setspecific (key, (void *) (intptr_t) DWARF_E_NOERROR);
- return result;
- }
-#endif /* TLS */
-
- result = global_error;
- global_error = DWARF_E_NOERROR;
- return result;
-}
-INTDEF(dwarf_errno)
-
-
-/* XXX For now we use string pointers. Once the table stablelizes
- make it more DSO-friendly. */
-static const char *errmsgs[] =
- {
- [DWARF_E_NOERROR] = N_("no error"),
- [DWARF_E_UNKNOWN_ERROR] = N_("unknown error"),
- [DWARF_E_INVALID_ACCESS] = N_("invalid access"),
- [DWARF_E_NO_REGFILE] = N_("no regular file"),
- [DWARF_E_IO_ERROR] = N_("I/O error"),
- [DWARF_E_INVALID_ELF] = N_("invalid ELF file"),
- [DWARF_E_NO_DWARF] = N_("no DWARF information"),
- [DWARF_E_NOELF] = N_("no ELF file"),
- [DWARF_E_GETEHDR_ERROR] = N_("cannot get ELF header"),
- [DWARF_E_NOMEM] = N_("out of memory"),
- [DWARF_E_UNIMPL] = N_("not implemented"),
- [DWARF_E_INVALID_CMD] = N_("invalid command"),
- [DWARF_E_INVALID_VERSION] = N_("invalid version"),
- [DWARF_E_INVALID_FILE] = N_("invalid file"),
- [DWARF_E_NO_ENTRY] = N_("no entries found"),
- [DWARF_E_INVALID_DWARF] = N_("invalid DWARF"),
- [DWARF_E_NO_STRING] = N_("no string data"),
- [DWARF_E_NO_ADDR] = N_("no address value"),
- [DWARF_E_NO_CONSTANT] = N_("no constant value"),
- [DWARF_E_NO_REFERENCE] = N_("no reference value"),
- [DWARF_E_INVALID_REFERENCE] = N_("invalid reference value"),
- [DWARF_E_NO_DEBUG_LINE] = N_(".debug_line section missing"),
- [DWARF_E_INVALID_DEBUG_LINE] = N_("invalid .debug_line section"),
- [DWARF_E_TOO_BIG] = N_("debug information too big"),
- [DWARF_E_VERSION] = N_("invalid DWARF version"),
- [DWARF_E_INVALID_DIR_IDX] = N_("invalid directory index"),
- [DWARF_E_ADDR_OUTOFRANGE] = N_("address out of range"),
- [DWARF_E_NO_LOCLIST] = N_("no location list value"),
- [DWARF_E_NO_BLOCK] = N_("no block data"),
- [DWARF_E_INVALID_LINE_IDX] = N_("invalid line index"),
- [DWARF_E_INVALID_ARANGE_IDX] = N_("invalid address range index"),
- [DWARF_E_NO_MATCH] = N_("no matching address range"),
- [DWARF_E_NO_FLAG] = N_("no flag value"),
- [DWARF_E_INVALID_OFFSET] = N_("invalid offset"),
- [DWARF_E_NO_DEBUG_RANGES] = N_(".debug_ranges section missing"),
- };
-#define nerrmsgs (sizeof (errmsgs) / sizeof (errmsgs[0]))
-
-
-void
-__libdw_seterrno (value)
- int value;
-{
-#ifndef USE_TLS
- /* If we have not yet initialized the buffer do it now. */
- once_execute (once, init);
-
- if (threaded)
- /* We do not allocate memory for the data. It is only a word.
- We can store it in place of the pointer. */
- setspecific (key, (void *) (intptr_t) value);
-#endif /* TLS */
-
- global_error = (value >= 0 && value < (int) nerrmsgs
- ? value : DWARF_E_UNKNOWN_ERROR);
-}
-
-
-const char *
-dwarf_errmsg (error)
- int error;
-{
- int last_error;
-
-#ifndef USE_TLS
- /* If we have not yet initialized the buffer do it now. */
- once_execute (once, init);
-
- if ((error == 0 || error == -1) && threaded)
- /* We do not allocate memory for the data. It is only a word.
- We can store it in place of the pointer. */
- last_error = (intptr_t) getspecific (key);
- else
-#endif /* TLS */
- last_error = global_error;
-
- if (error == 0)
- return last_error != 0 ? _(errmsgs[last_error]) : NULL;
- else if (error < -1 || error >= (int) nerrmsgs)
- return _(errmsgs[DWARF_E_UNKNOWN_ERROR]);
-
- return _(errmsgs[error == -1 ? last_error : error]);
-}
-INTDEF(dwarf_errmsg)
-
-
-#ifndef USE_TLS
-/* Free the thread specific data, this is done if a thread terminates. */
-static void
-free_key_mem (void *mem __attribute__ ((unused)))
-{
- setspecific (key, NULL);
-}
-
-
-/* Initialize the key for the global variable. */
-static void
-init (void)
-{
- // XXX Screw you, gcc4, the unused function attribute does not work.
- __asm ("" :: "r" (free_key_mem));
-
- if (key_create (&key, free_key_mem) == 0)
- /* Creating the key succeeded. */
- threaded = true;
-}
-#endif /* TLS */
diff --git a/libdw/dwarf_filesrc.c b/libdw/dwarf_filesrc.c
deleted file mode 100644
index b48340d..0000000
--- a/libdw/dwarf_filesrc.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/* Find source file information.
- Copyright (C) 2004 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libdwP.h"
-
-
-const char *
-dwarf_filesrc (Dwarf_Files *file, size_t idx, Dwarf_Word *mtime,
- Dwarf_Word *length)
-{
- if (file == NULL || idx >= file->nfiles)
- return NULL;
-
- if (mtime != NULL)
- *mtime = file->info[idx].mtime;
-
- if (length != NULL)
- *length = file->info[idx].length;
-
- return file->info[idx].name;
-}
diff --git a/libdw/dwarf_formaddr.c b/libdw/dwarf_formaddr.c
deleted file mode 100644
index dcb58d4..0000000
--- a/libdw/dwarf_formaddr.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/* Return address represented by attribute.
- Copyright (C) 2003, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <dwarf.h>
-#include "libdwP.h"
-
-
-int
-dwarf_formaddr (attr, return_addr)
- Dwarf_Attribute *attr;
- Dwarf_Addr *return_addr;
-{
- if (attr == NULL)
- return -1;
-
- if (unlikely (attr->form != DW_FORM_addr))
- {
- __libdw_seterrno (DWARF_E_NO_ADDR);
- return -1;
- }
-
- if (attr->cu->address_size == 8)
- *return_addr = read_8ubyte_unaligned (attr->cu->dbg, attr->valp);
- else
- *return_addr = read_4ubyte_unaligned (attr->cu->dbg, attr->valp);
-
- return 0;
-}
-INTDEF(dwarf_formaddr)
diff --git a/libdw/dwarf_formblock.c b/libdw/dwarf_formblock.c
deleted file mode 100644
index 51396d4..0000000
--- a/libdw/dwarf_formblock.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/* Return block represented by attribute.
- Copyright (C) 2004, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <dwarf.h>
-#include "libdwP.h"
-
-
-int
-dwarf_formblock (attr, return_block)
- Dwarf_Attribute *attr;
- Dwarf_Block *return_block;
-{
- if (attr == NULL)
- return -1;
-
- const unsigned char *datap;
-
- switch (attr->form)
- {
- case DW_FORM_block1:
- return_block->length = *(uint8_t *) attr->valp;
- return_block->data = attr->valp + 1;
- break;
-
- case DW_FORM_block2:
- return_block->length = read_2ubyte_unaligned (attr->cu->dbg, attr->valp);
- return_block->data = attr->valp + 2;
- break;
-
- case DW_FORM_block4:
- return_block->length = read_4ubyte_unaligned (attr->cu->dbg, attr->valp);
- return_block->data = attr->valp + 4;
- break;
-
- case DW_FORM_block:
- datap = attr->valp;
- get_uleb128 (return_block->length, datap);
- return_block->data = (unsigned char *) datap;
- break;
-
- default:
- __libdw_seterrno (DWARF_E_NO_BLOCK);
- return -1;
- }
-
- if (return_block->data + return_block->length
- > ((unsigned char *) attr->cu->dbg->sectiondata[IDX_debug_info]->d_buf
- + attr->cu->dbg->sectiondata[IDX_debug_info]->d_size))
- {
- /* Block does not fit. */
- __libdw_seterrno (DWARF_E_INVALID_DWARF);
- return -1;
- }
-
- return 0;
-}
-INTDEF(dwarf_formblock)
diff --git a/libdw/dwarf_formflag.c b/libdw/dwarf_formflag.c
deleted file mode 100644
index 4e57c3a..0000000
--- a/libdw/dwarf_formflag.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/* Return flag represented by attribute.
- Copyright (C) 2004 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <dwarf.h>
-#include "libdwP.h"
-
-
-int
-dwarf_formflag (attr, return_bool)
- Dwarf_Attribute *attr;
- bool *return_bool;
-{
- if (attr == NULL)
- return -1;
-
- if (unlikely (attr->form != DW_FORM_flag))
- {
- __libdw_seterrno (DWARF_E_NO_FLAG);
- return -1;
- }
-
- *return_bool = *attr->valp != 0;
-
- return 0;
-}
diff --git a/libdw/dwarf_formref.c b/libdw/dwarf_formref.c
deleted file mode 100644
index b8463b7..0000000
--- a/libdw/dwarf_formref.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/* Return reference offset represented by attribute.
- Copyright (C) 2003, 2005, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <dwarf.h>
-#include "libdwP.h"
-
-int
-__libdw_formref (attr, return_offset)
- Dwarf_Attribute *attr;
- Dwarf_Off *return_offset;
-{
- const unsigned char *datap;
-
- if (attr->valp == NULL)
- {
- __libdw_seterrno (DWARF_E_INVALID_REFERENCE);
- return -1;
- }
-
- switch (attr->form)
- {
- case DW_FORM_ref1:
- *return_offset = *attr->valp;
- break;
-
- case DW_FORM_ref2:
- *return_offset = read_2ubyte_unaligned (attr->cu->dbg, attr->valp);
- break;
-
- case DW_FORM_ref4:
- *return_offset = read_4ubyte_unaligned (attr->cu->dbg, attr->valp);
- break;
-
- case DW_FORM_ref8:
- *return_offset = read_8ubyte_unaligned (attr->cu->dbg, attr->valp);
- break;
-
- case DW_FORM_ref_udata:
- datap = attr->valp;
- get_uleb128 (*return_offset, datap);
- break;
-
- case DW_FORM_ref_addr:
- __libdw_seterrno (DWARF_E_INVALID_REFERENCE);
- return -1;
-
- default:
- __libdw_seterrno (DWARF_E_NO_REFERENCE);
- return -1;
- }
-
- return 0;
-}
-
-/* This is the old public entry point.
- It is now deprecated in favor of dwarf_formref_die. */
-int
-dwarf_formref (attr, return_offset)
- Dwarf_Attribute *attr;
- Dwarf_Off *return_offset;
-{
- if (attr == NULL)
- return -1;
-
- return __libdw_formref (attr, return_offset);
-}
diff --git a/libdw/dwarf_formref_die.c b/libdw/dwarf_formref_die.c
deleted file mode 100644
index 90a4b2d..0000000
--- a/libdw/dwarf_formref_die.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/* Look up the DIE in a reference-form attribute.
- Copyright (C) 2005, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libdwP.h"
-#include <dwarf.h>
-
-
-Dwarf_Die *
-dwarf_formref_die (attr, die_mem)
- Dwarf_Attribute *attr;
- Dwarf_Die *die_mem;
-{
- if (attr == NULL)
- return NULL;
-
- Dwarf_Off offset;
- if (attr->form == DW_FORM_ref_addr)
- {
- /* This has an absolute offset. */
-
- uint8_t ref_size = (attr->cu->version == 2
- ? attr->cu->address_size
- : attr->cu->offset_size);
-
- if (ref_size == 8)
- offset = read_8ubyte_unaligned (attr->cu->dbg, attr->valp);
- else
- offset = read_4ubyte_unaligned (attr->cu->dbg, attr->valp);
- }
- else
- {
- /* Other forms produce an offset from the CU. */
- if (unlikely (__libdw_formref (attr, &offset) != 0))
- return NULL;
- offset += attr->cu->start;
- }
-
- return INTUSE(dwarf_offdie) (attr->cu->dbg, offset, die_mem);
-}
-INTDEF (dwarf_formref_die)
diff --git a/libdw/dwarf_formsdata.c b/libdw/dwarf_formsdata.c
deleted file mode 100644
index ab7249d..0000000
--- a/libdw/dwarf_formsdata.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/* Return signed constant represented by attribute.
- Copyright (C) 2003, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <dwarf.h>
-#include "libdwP.h"
-
-
-int
-dwarf_formsdata (attr, return_sval)
- Dwarf_Attribute *attr;
- Dwarf_Sword *return_sval;
-{
- if (attr == NULL)
- return -1;
-
- const unsigned char *datap;
-
- switch (attr->form)
- {
- case DW_FORM_data1:
- *return_sval = *attr->valp;
- break;
-
- case DW_FORM_data2:
- *return_sval = read_2ubyte_unaligned (attr->cu->dbg, attr->valp);
- break;
-
- case DW_FORM_data4:
- *return_sval = read_4ubyte_unaligned (attr->cu->dbg, attr->valp);
- break;
-
- case DW_FORM_data8:
- *return_sval = read_8ubyte_unaligned (attr->cu->dbg, attr->valp);
- break;
-
- case DW_FORM_sdata:
- datap = attr->valp;
- get_sleb128 (*return_sval, datap);
- break;
-
- case DW_FORM_udata:
- datap = attr->valp;
- get_uleb128 (*return_sval, datap);
- break;
-
- default:
- __libdw_seterrno (DWARF_E_NO_CONSTANT);
- return -1;
- }
-
- return 0;
-}
-INTDEF(dwarf_formsdata)
diff --git a/libdw/dwarf_formstring.c b/libdw/dwarf_formstring.c
deleted file mode 100644
index 790831e..0000000
--- a/libdw/dwarf_formstring.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/* Return string associated with given attribute.
- Copyright (C) 2003, 2004, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <dwarf.h>
-#include "libdwP.h"
-
-
-const char *
-dwarf_formstring (attrp)
- Dwarf_Attribute *attrp;
-{
- /* Ignore earlier errors. */
- if (attrp == NULL)
- return NULL;
-
- /* We found it. Now determine where the string is stored. */
- if (attrp->form == DW_FORM_string)
- /* A simple inlined string. */
- return (const char *) attrp->valp;
-
- Dwarf *dbg = attrp->cu->dbg;
-
- if (unlikely (attrp->form != DW_FORM_strp)
- || dbg->sectiondata[IDX_debug_str] == NULL)
- {
- invalid_error:
- __libdw_seterrno (DWARF_E_NO_STRING);
- return NULL;
- }
-
- uint64_t off;
- // XXX We need better boundary checks.
- if (attrp->cu->offset_size == 8)
- off = read_8ubyte_unaligned (dbg, attrp->valp);
- else
- off = read_4ubyte_unaligned (dbg, attrp->valp);
-
- if (off >= dbg->sectiondata[IDX_debug_str]->d_size)
- goto invalid_error;
-
- return (const char *) dbg->sectiondata[IDX_debug_str]->d_buf + off;
-}
-INTDEF(dwarf_formstring)
diff --git a/libdw/dwarf_formudata.c b/libdw/dwarf_formudata.c
deleted file mode 100644
index b5c40bb..0000000
--- a/libdw/dwarf_formudata.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/* Return unsigned constant represented by attribute.
- Copyright (C) 2003, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <dwarf.h>
-#include "libdwP.h"
-
-
-int
-dwarf_formudata (attr, return_uval)
- Dwarf_Attribute *attr;
- Dwarf_Word *return_uval;
-{
- if (attr == NULL)
- return -1;
-
- const unsigned char *datap;
-
- switch (attr->form)
- {
- case DW_FORM_data1:
- *return_uval = *attr->valp;
- break;
-
- case DW_FORM_data2:
- *return_uval = read_2ubyte_unaligned (attr->cu->dbg, attr->valp);
- break;
-
- case DW_FORM_data4:
- *return_uval = read_4ubyte_unaligned (attr->cu->dbg, attr->valp);
- break;
-
- case DW_FORM_data8:
- *return_uval = read_8ubyte_unaligned (attr->cu->dbg, attr->valp);
- break;
-
- case DW_FORM_sdata:
- datap = attr->valp;
- get_sleb128 (*return_uval, datap);
- break;
-
- case DW_FORM_udata:
- datap = attr->valp;
- get_uleb128 (*return_uval, datap);
- break;
-
- default:
- __libdw_seterrno (DWARF_E_NO_CONSTANT);
- return -1;
- }
-
- return 0;
-}
-INTDEF(dwarf_formudata)
diff --git a/libdw/dwarf_func_inline.c b/libdw/dwarf_func_inline.c
deleted file mode 100644
index 6018691..0000000
--- a/libdw/dwarf_func_inline.c
+++ /dev/null
@@ -1,121 +0,0 @@
-/* Convenience functions for handling DWARF descriptions of inline functions.
- Copyright (C) 2005,2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under an Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) and to distribute linked
- combinations including the two. Non-GPL Code permitted under this
- exception must only link to the code of Red Hat elfutils through those
- well defined interfaces identified in the file named EXCEPTION found in
- the source code files (the "Approved Interfaces"). The files of Non-GPL
- Code may instantiate templates or use macros or inline functions from
- the Approved Interfaces without causing the resulting work to be covered
- by the GNU General Public License. Only Red Hat, Inc. may make changes
- or additions to the list of Approved Interfaces. Red Hat's grant of
- this exception is conditioned upon your not adding any new exceptions.
- If you wish to add a new Approved Interface or exception, please contact
- Red Hat. You must obey the GNU General Public License in all respects
- for all of the Red Hat elfutils code and other code used in conjunction
- with Red Hat elfutils except the Non-GPL Code covered by this exception.
- If you modify this file, you may extend this exception to your version
- of the file, but you are not obligated to do so. If you do not wish to
- provide this exception without modification, you must delete this
- exception statement from your version and license this file solely under
- the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libdwP.h"
-#include <dwarf.h>
-
-struct visitor_info
-{
- void *die_addr;
- int (*callback) (Dwarf_Die *, void *);
- void *arg;
-};
-
-static int
-scope_visitor (unsigned int depth __attribute__ ((unused)),
- struct Dwarf_Die_Chain *die, void *arg)
-{
- struct visitor_info *const v = arg;
-
- if (INTUSE(dwarf_tag) (&die->die) != DW_TAG_inlined_subroutine)
- return DWARF_CB_OK;
-
- Dwarf_Attribute attr_mem;
- Dwarf_Attribute *attr = INTUSE(dwarf_attr) (&die->die, DW_AT_abstract_origin,
- &attr_mem);
- if (attr == NULL)
- return DWARF_CB_OK;
-
- Dwarf_Die origin_mem;
- Dwarf_Die *origin = INTUSE(dwarf_formref_die) (attr, &origin_mem);
- if (origin == NULL)
- return DWARF_CB_ABORT;
-
- if (origin->addr != v->die_addr)
- return DWARF_CB_OK;
-
- return (*v->callback) (&die->die, v->arg);
-}
-
-int
-dwarf_func_inline (Dwarf_Die *func)
-{
- Dwarf_Attribute attr_mem;
- Dwarf_Word val;
- if (INTUSE(dwarf_formudata) (INTUSE(dwarf_attr) (func, DW_AT_inline,
- &attr_mem),
- &val) == 0)
- switch (val)
- {
- case DW_INL_not_inlined:
- return 0;
-
- case DW_INL_declared_not_inlined:
- return -1;
-
- case DW_INL_inlined:
- case DW_INL_declared_inlined:
- return 1;
- }
-
- return 0;
-}
-
-int
-dwarf_func_inline_instances (Dwarf_Die *func,
- int (*callback) (Dwarf_Die *, void *),
- void *arg)
-{
- struct visitor_info v = { func->addr, callback, arg };
- struct Dwarf_Die_Chain cu = { .die = CUDIE (func->cu), .parent = NULL };
- return __libdw_visit_scopes (0, &cu, &scope_visitor, NULL, &v);
-}
diff --git a/libdw/dwarf_getabbrev.c b/libdw/dwarf_getabbrev.c
deleted file mode 100644
index 07bf6df..0000000
--- a/libdw/dwarf_getabbrev.c
+++ /dev/null
@@ -1,170 +0,0 @@
-/* Get abbreviation at given offset.
- Copyright (C) 2003, 2004, 2005, 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <dwarf.h>
-#include "libdwP.h"
-
-
-Dwarf_Abbrev *
-internal_function
-__libdw_getabbrev (dbg, cu, offset, lengthp, result)
- Dwarf *dbg;
- struct Dwarf_CU *cu;
- Dwarf_Off offset;
- size_t *lengthp;
- Dwarf_Abbrev *result;
-{
- /* Don't fail if there is not .debug_abbrev section. */
- if (dbg->sectiondata[IDX_debug_abbrev] == NULL)
- return NULL;
-
- if (offset >= dbg->sectiondata[IDX_debug_abbrev]->d_size)
- {
- __libdw_seterrno (DWARF_E_INVALID_OFFSET);
- return NULL;
- }
-
- const unsigned char *abbrevp
- = (unsigned char *) dbg->sectiondata[IDX_debug_abbrev]->d_buf + offset;
-
- if (*abbrevp == '\0')
- /* We are past the last entry. */
- return DWARF_END_ABBREV;
-
- /* 7.5.3 Abbreviations Tables
-
- [...] Each declaration begins with an unsigned LEB128 number
- representing the abbreviation code itself. [...] The
- abbreviation code is followed by another unsigned LEB128
- number that encodes the entry's tag. [...]
-
- [...] Following the tag encoding is a 1-byte value that
- determines whether a debugging information entry using this
- abbreviation has child entries or not. [...]
-
- [...] Finally, the child encoding is followed by a series of
- attribute specifications. Each attribute specification
- consists of two parts. The first part is an unsigned LEB128
- number representing the attribute's name. The second part is
- an unsigned LEB128 number representing the attribute's form. */
- const unsigned char *start_abbrevp = abbrevp;
- unsigned int code;
- get_uleb128 (code, abbrevp);
-
- /* Check whether this code is already in the hash table. */
- bool foundit = false;
- Dwarf_Abbrev *abb = NULL;
- if (cu == NULL
- || (abb = Dwarf_Abbrev_Hash_find (&cu->abbrev_hash, code, NULL)) == NULL)
- {
- if (result == NULL)
- abb = libdw_typed_alloc (dbg, Dwarf_Abbrev);
- else
- abb = result;
- }
- else
- {
- foundit = true;
-
- assert (abb->offset == offset);
-
- /* If the caller doesn't need the length we are done. */
- if (lengthp == NULL)
- goto out;
- }
-
- /* If there is already a value in the hash table we are going to
- overwrite its content. This must not be a problem, since the
- content better be the same. */
- abb->code = code;
- get_uleb128 (abb->tag, abbrevp);
- abb->has_children = *abbrevp++ == DW_CHILDREN_yes;
- abb->attrp = (unsigned char *) abbrevp;
- abb->offset = offset;
-
- /* Skip over all the attributes and count them while doing so. */
- abb->attrcnt = 0;
- unsigned int attrname;
- unsigned int attrform;
- do
- {
- get_uleb128 (attrname, abbrevp);
- get_uleb128 (attrform, abbrevp);
- }
- while (attrname != 0 && attrform != 0 && ++abb->attrcnt);
-
- /* Return the length to the caller if she asked for it. */
- if (lengthp != NULL)
- *lengthp = abbrevp - start_abbrevp;
-
- /* Add the entry to the hash table. */
- if (cu != NULL && ! foundit)
- (void) Dwarf_Abbrev_Hash_insert (&cu->abbrev_hash, abb->code, abb);
-
- out:
- return abb;
-}
-
-
-Dwarf_Abbrev *
-dwarf_getabbrev (die, offset, lengthp)
- Dwarf_Die *die;
- Dwarf_Off offset;
- size_t *lengthp;
-{
- return __libdw_getabbrev (die->cu->dbg, die->cu,
- die->cu->orig_abbrev_offset + offset, lengthp,
- NULL);
-}
diff --git a/libdw/dwarf_getabbrevattr.c b/libdw/dwarf_getabbrevattr.c
deleted file mode 100644
index 05da17c..0000000
--- a/libdw/dwarf_getabbrevattr.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/* Get specific attribute of abbreviation.
- Copyright (C) 2003, 2004, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <dwarf.h>
-#include "libdwP.h"
-
-
-int
-dwarf_getabbrevattr (abbrev, idx, namep, formp, offsetp)
- Dwarf_Abbrev *abbrev;
- size_t idx;
- unsigned int *namep;
- unsigned int *formp;
- Dwarf_Off *offsetp;
-{
- if (abbrev == NULL)
- return -1;
-
- size_t cnt = 0;
- const unsigned char *attrp = abbrev->attrp;
- const unsigned char *start_attrp;
- unsigned int name;
- unsigned int form;
-
- do
- {
- start_attrp = attrp;
-
- /* Attribute code and form are encoded as ULEB128 values. */
- get_uleb128 (name, attrp);
- get_uleb128 (form, attrp);
-
- /* If both values are zero the index is out of range. */
- if (name == 0 && form == 0)
- return -1;
- }
- while (cnt++ < idx);
-
- /* Store the result if requested. */
- if (namep != NULL)
- *namep = name;
- if (formp != NULL)
- *formp = form;
- if (offsetp != NULL)
- *offsetp = (start_attrp - abbrev->attrp) + abbrev->offset;
-
- return 0;
-}
diff --git a/libdw/dwarf_getabbrevcode.c b/libdw/dwarf_getabbrevcode.c
deleted file mode 100644
index edf492d..0000000
--- a/libdw/dwarf_getabbrevcode.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Get abbreviation code.
- Copyright (C) 2003 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <dwarf.h>
-#include "libdwP.h"
-
-
-unsigned int
-dwarf_getabbrevcode (abbrev)
- Dwarf_Abbrev *abbrev;
-{
- return abbrev == NULL ? 0 : abbrev->code;
-}
diff --git a/libdw/dwarf_getabbrevtag.c b/libdw/dwarf_getabbrevtag.c
deleted file mode 100644
index 4f1f72c..0000000
--- a/libdw/dwarf_getabbrevtag.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Get abbreviation tag.
- Copyright (C) 2003 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <dwarf.h>
-#include "libdwP.h"
-
-
-unsigned int
-dwarf_getabbrevtag (abbrev)
- Dwarf_Abbrev *abbrev;
-{
- return abbrev == NULL ? 0 : abbrev->tag;
-}
diff --git a/libdw/dwarf_getarange_addr.c b/libdw/dwarf_getarange_addr.c
deleted file mode 100644
index 855c855..0000000
--- a/libdw/dwarf_getarange_addr.c
+++ /dev/null
@@ -1,83 +0,0 @@
-/* Get address range which includes given address.
- Copyright (C) 2004, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libdwP.h>
-
-
-Dwarf_Arange *
-dwarf_getarange_addr (aranges, addr)
- Dwarf_Aranges *aranges;
- Dwarf_Addr addr;
-{
- if (aranges == NULL)
- return NULL;
-
- /* The ranges are sorted by address, so we can use binary search. */
- size_t l = 0, u = aranges->naranges;
- while (l < u)
- {
- size_t idx = (l + u) / 2;
- if (addr < aranges->info[idx].addr)
- u = idx;
- else if (addr > aranges->info[idx].addr
- && addr - aranges->info[idx].addr >= aranges->info[idx].length)
- l = idx + 1;
- else
- return &aranges->info[idx];
- }
-
- __libdw_seterrno (DWARF_E_NO_MATCH);
- return NULL;
-}
-INTDEF(dwarf_getarange_addr)
diff --git a/libdw/dwarf_getarangeinfo.c b/libdw/dwarf_getarangeinfo.c
deleted file mode 100644
index 7cefbf7..0000000
--- a/libdw/dwarf_getarangeinfo.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/* Return list address ranges.
- Copyright (C) 2000, 2001, 2002, 2004, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libdwP.h>
-
-
-int
-dwarf_getarangeinfo (Dwarf_Arange *arange, Dwarf_Addr *addrp,
- Dwarf_Word *lengthp, Dwarf_Off *offsetp)
-{
- if (arange == NULL)
- return -1;
-
- if (addrp != NULL)
- *addrp = arange->addr;
- if (lengthp != NULL)
- *lengthp = arange->length;
- if (offsetp != NULL)
- *offsetp = arange->offset;
-
- return 0;
-}
-INTDEF(dwarf_getarangeinfo)
diff --git a/libdw/dwarf_getaranges.c b/libdw/dwarf_getaranges.c
deleted file mode 100644
index 96e9962..0000000
--- a/libdw/dwarf_getaranges.c
+++ /dev/null
@@ -1,270 +0,0 @@
-/* Return list address ranges.
- Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <assert.h>
-#include "libdwP.h"
-#include <dwarf.h>
-
-struct arangelist
-{
- Dwarf_Arange arange;
- struct arangelist *next;
-};
-
-/* Compare by Dwarf_Arange.addr, given pointers into an array of pointeers. */
-static int
-compare_aranges (const void *a, const void *b)
-{
- Dwarf_Arange *const *p1 = a, *const *p2 = b;
- Dwarf_Arange *l1 = *p1, *l2 = *p2;
- return l1->addr - l2->addr;
-}
-
-int
-dwarf_getaranges (dbg, aranges, naranges)
- Dwarf *dbg;
- Dwarf_Aranges **aranges;
- size_t *naranges;
-{
- if (dbg == NULL)
- return -1;
-
- if (dbg->aranges != NULL)
- {
- *aranges = dbg->aranges;
- if (naranges != NULL)
- *naranges = dbg->aranges->naranges;
- return 0;
- }
-
- if (dbg->sectiondata[IDX_debug_aranges] == NULL)
- {
- /* No such section. */
- *aranges = NULL;
- if (naranges != NULL)
- *naranges = 0;
- return 0;
- }
-
- if (dbg->sectiondata[IDX_debug_aranges]->d_buf == NULL)
- return -1;
-
- struct arangelist *arangelist = NULL;
- unsigned int narangelist = 0;
-
- const char *readp
- = (const char *) dbg->sectiondata[IDX_debug_aranges]->d_buf;
- const char *readendp = readp + dbg->sectiondata[IDX_debug_aranges]->d_size;
-
- while (readp < readendp)
- {
- const char *hdrstart = readp;
-
- /* Each entry starts with a header:
-
- 1. A 4-byte or 12-byte length containing the length of the
- set of entries for this compilation unit, not including the
- length field itself. [...]
-
- 2. A 2-byte version identifier containing the value 2 for
- DWARF Version 2.1.
-
- 3. A 4-byte or 8-byte offset into the .debug_info section. [...]
-
- 4. A 1-byte unsigned integer containing the size in bytes of
- an address (or the offset portion of an address for segmented
- addressing) on the target system.
-
- 5. A 1-byte unsigned integer containing the size in bytes of
- a segment descriptor on the target system. */
- Dwarf_Word length = read_4ubyte_unaligned_inc (dbg, readp);
- unsigned int length_bytes = 4;
- if (length == DWARF3_LENGTH_64_BIT)
- {
- length = read_8ubyte_unaligned_inc (dbg, readp);
- length_bytes = 8;
- }
- else if (unlikely (length >= DWARF3_LENGTH_MIN_ESCAPE_CODE
- && length <= DWARF3_LENGTH_MAX_ESCAPE_CODE))
- goto invalid;
-
- unsigned int version = read_2ubyte_unaligned_inc (dbg, readp);
- if (version != 2)
- {
- invalid:
- __libdw_seterrno (DWARF_E_INVALID_DWARF);
- return -1;
- }
-
- Dwarf_Word offset;
- if (length_bytes == 4)
- offset = read_4ubyte_unaligned_inc (dbg, readp);
- else
- offset = read_8ubyte_unaligned_inc (dbg, readp);
-
- /* Sanity-check the offset. */
- if (offset + 4 > dbg->sectiondata[IDX_debug_info]->d_size)
- goto invalid;
-
- unsigned int address_size = *readp++;
- if (address_size != 4 && address_size != 8)
- goto invalid;
-
- /* Ignore the segment size value. */
- // XXX Really?
- (void) *readp++;
-
- /* Round the address to the next multiple of 2*address_size. */
- readp += ((2 * address_size - ((readp - hdrstart) % (2 * address_size)))
- % (2 * address_size));
-
- while (1)
- {
- Dwarf_Word range_address;
- Dwarf_Word range_length;
-
- if (address_size == 4)
- {
- range_address = read_4ubyte_unaligned_inc (dbg, readp);
- range_length = read_4ubyte_unaligned_inc (dbg, readp);
- }
- else
- {
- range_address = read_8ubyte_unaligned_inc (dbg, readp);
- range_length = read_8ubyte_unaligned_inc (dbg, readp);
- }
-
- /* Two zero values mark the end. */
- if (range_address == 0 && range_length == 0)
- break;
-
- struct arangelist *new_arange =
- (struct arangelist *) alloca (sizeof (struct arangelist));
-
- new_arange->arange.addr = range_address;
- new_arange->arange.length = range_length;
-
- /* We store the actual CU DIE offset, not the CU header offset. */
- const char *cu_header = (dbg->sectiondata[IDX_debug_info]->d_buf
- + offset);
- unsigned int offset_size;
- if (read_4ubyte_unaligned_noncvt (cu_header) == DWARF3_LENGTH_64_BIT)
- offset_size = 8;
- else
- offset_size = 4;
- new_arange->arange.offset = DIE_OFFSET_FROM_CU_OFFSET (offset,
- offset_size);
-
- /* Sanity-check the data. */
- if (new_arange->arange.offset
- >= dbg->sectiondata[IDX_debug_info]->d_size)
- goto invalid;
-
- new_arange->next = arangelist;
- arangelist = new_arange;
- ++narangelist;
- }
- }
-
- if (narangelist == 0)
- {
- if (naranges != NULL)
- *naranges = 0;
- *aranges = NULL;
- return 0;
- }
-
- /* Allocate the array for the result. */
- void *buf = libdw_alloc (dbg, Dwarf_Aranges,
- sizeof (Dwarf_Aranges)
- + narangelist * sizeof (Dwarf_Arange), 1);
-
- /* First use the buffer for the pointers, and sort the entries.
- We'll write the pointers in the end of the buffer, and then
- copy into the buffer from the beginning so the overlap works. */
- assert (sizeof (Dwarf_Arange) >= sizeof (Dwarf_Arange *));
- Dwarf_Arange **sortaranges = (buf + sizeof (Dwarf_Aranges)
- + ((sizeof (Dwarf_Arange)
- - sizeof (Dwarf_Arange *)) * narangelist));
-
- /* The list is in LIFO order and usually they come in clumps with
- ascending addresses. So fill from the back to probably start with
- runs already in order before we sort. */
- unsigned int i = narangelist;
- while (i-- > 0)
- {
- sortaranges[i] = &arangelist->arange;
- arangelist = arangelist->next;
- }
- assert (arangelist == NULL);
-
- /* Sort by ascending address. */
- qsort (sortaranges, narangelist, sizeof sortaranges[0], &compare_aranges);
-
- /* Now that they are sorted, put them in the final array.
- The buffers overlap, so we've clobbered the early elements
- of SORTARANGES by the time we're reading the later ones. */
- *aranges = buf;
- (*aranges)->dbg = dbg;
- (*aranges)->naranges = narangelist;
- dbg->aranges = *aranges;
- if (naranges != NULL)
- *naranges = narangelist;
- for (i = 0; i < narangelist; ++i)
- (*aranges)->info[i] = *sortaranges[i];
-
- return 0;
-}
-INTDEF(dwarf_getaranges)
diff --git a/libdw/dwarf_getattrcnt.c b/libdw/dwarf_getattrcnt.c
deleted file mode 100644
index f85adf0..0000000
--- a/libdw/dwarf_getattrcnt.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Get number of attributes of abbreviation.
- Copyright (C) 2003, 2004 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libdwP.h"
-
-
-int
-dwarf_getattrcnt (abbrev, attrcntp)
- Dwarf_Abbrev *abbrev;
- size_t *attrcntp;
-{
- if (abbrev == NULL)
- return -1;
-
- *attrcntp = abbrev->attrcnt;
-
- return 0;
-}
diff --git a/libdw/dwarf_getattrs.c b/libdw/dwarf_getattrs.c
deleted file mode 100644
index 42f25ca..0000000
--- a/libdw/dwarf_getattrs.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/* Get attributes of the DIE.
- Copyright (C) 2004, 2005, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libdwP.h"
-
-
-ptrdiff_t
-dwarf_getattrs (Dwarf_Die *die, int (*callback) (Dwarf_Attribute *, void *),
- void *arg, ptrdiff_t offset)
-{
- if (die == NULL)
- return -1l;
-
- const unsigned char *die_addr = die->addr;
-
- /* Get the abbreviation code. */
- unsigned int u128;
- get_uleb128 (u128, die_addr);
-
- if (die->abbrev == NULL)
- /* Find the abbreviation. */
- die->abbrev = __libdw_findabbrev (die->cu, u128);
-
- if (unlikely (die->abbrev == DWARF_END_ABBREV))
- {
- invalid_dwarf:
- __libdw_seterrno (DWARF_E_INVALID_DWARF);
- return -1l;
- }
-
- /* This is where the attributes start. */
- const unsigned char *attrp = die->abbrev->attrp + offset;
-
- /* Go over the list of attributes. */
- Dwarf *dbg = die->cu->dbg;
- while (1)
- {
- /* Are we still in bounds? */
- if (unlikely (attrp
- >= ((unsigned char *) dbg->sectiondata[IDX_debug_abbrev]->d_buf
- + dbg->sectiondata[IDX_debug_abbrev]->d_size)))
- goto invalid_dwarf;
-
- /* Get attribute name and form. */
- Dwarf_Attribute attr;
- const unsigned char *remembered_attrp = attrp;
-
- // XXX Fix bound checks
- get_uleb128 (attr.code, attrp);
- get_uleb128 (attr.form, attrp);
-
- /* We can stop if we found the attribute with value zero. */
- if (attr.code == 0 && attr.form == 0)
- /* Do not return 0 here - there would be no way to
- distinguish this value from the attribute at offset 0.
- Instead we return +1 which would never be a valid
- offset of an attribute. */
- return 1l;
-
- /* Fill in the rest. */
- attr.valp = (unsigned char *) die_addr;
- attr.cu = die->cu;
-
- /* Now call the callback function. */
- if (callback (&attr, arg) != DWARF_CB_OK)
- /* Return the offset of the start of the attribute, so that
- dwarf_getattrs() can be restarted from this point if the
- caller so desires. */
- return remembered_attrp - die->abbrev->attrp;
-
- /* Skip over the rest of this attribute (if there is any). */
- if (attr.form != 0)
- {
- size_t len = __libdw_form_val_len (dbg, die->cu, attr.form,
- die_addr);
-
- if (unlikely (len == (size_t) -1l))
- /* Something wrong with the file. */
- return -1l;
-
- // XXX We need better boundary checks.
- die_addr += len;
- }
- }
- /* NOTREACHED */
-}
diff --git a/libdw/dwarf_getelf.c b/libdw/dwarf_getelf.c
deleted file mode 100644
index daf3b9a..0000000
--- a/libdw/dwarf_getelf.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Retrieve ELF descriptor used for DWARF access.
- Copyright (C) 2002, 2004, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stddef.h>
-
-#include "libdwP.h"
-
-
-Elf *
-dwarf_getelf (dwarf)
- Dwarf *dwarf;
-{
- if (dwarf == NULL)
- /* Some error occurred before. */
- return NULL;
-
- return dwarf->elf;
-}
diff --git a/libdw/dwarf_getfuncs.c b/libdw/dwarf_getfuncs.c
deleted file mode 100644
index c0352fb..0000000
--- a/libdw/dwarf_getfuncs.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/* Get function information.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <dwarf.h>
-#include "libdwP.h"
-
-
-ptrdiff_t
-dwarf_getfuncs (Dwarf_Die *cudie, int (*callback) (Dwarf_Die *, void *),
- void *arg, ptrdiff_t offset)
-{
- if (unlikely (cudie == NULL
- || INTUSE(dwarf_tag) (cudie) != DW_TAG_compile_unit))
- return -1;
-
- Dwarf_Die die_mem;
- Dwarf_Die *die;
-
- int res;
- if (offset == 0)
- res = INTUSE(dwarf_child) (cudie, &die_mem);
- else
- {
- die = INTUSE(dwarf_offdie) (cudie->cu->dbg, offset, &die_mem);
- res = INTUSE(dwarf_siblingof) (die, &die_mem);
- }
- die = res != 0 ? NULL : &die_mem;
-
- while (die != NULL)
- {
- if (INTUSE(dwarf_tag) (die) == DW_TAG_subprogram)
- {
- if (callback (die, arg) != DWARF_CB_OK)
- return INTUSE(dwarf_dieoffset) (die);
- }
-
- if (INTUSE(dwarf_siblingof) (die, &die_mem) != 0)
- break;
- }
-
- /* That's all. */
- return 0;
-}
diff --git a/libdw/dwarf_getlocation.c b/libdw/dwarf_getlocation.c
deleted file mode 100644
index f680aa9..0000000
--- a/libdw/dwarf_getlocation.c
+++ /dev/null
@@ -1,496 +0,0 @@
-/* Return location expression list.
- Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <dwarf.h>
-#include <search.h>
-#include <stdlib.h>
-
-#include <libdwP.h>
-
-
-static bool
-attr_ok (Dwarf_Attribute *attr)
-{
- if (attr == NULL)
- return false;
-
- /* Must be one of the attributes listed below. */
- switch (attr->code)
- {
- case DW_AT_location:
- case DW_AT_data_member_location:
- case DW_AT_vtable_elem_location:
- case DW_AT_string_length:
- case DW_AT_use_location:
- case DW_AT_frame_base:
- case DW_AT_return_addr:
- case DW_AT_static_link:
- break;
-
- default:
- __libdw_seterrno (DWARF_E_NO_LOCLIST);
- return false;
- }
-
- return true;
-}
-
-
-struct loclist
-{
- uint8_t atom;
- Dwarf_Word number;
- Dwarf_Word number2;
- Dwarf_Word offset;
- struct loclist *next;
-};
-
-
-static int
-loc_compare (const void *p1, const void *p2)
-{
- const struct loc_s *l1 = (const struct loc_s *) p1;
- const struct loc_s *l2 = (const struct loc_s *) p2;
-
- if ((uintptr_t) l1->addr < (uintptr_t) l2->addr)
- return -1;
- if ((uintptr_t) l1->addr > (uintptr_t) l2->addr)
- return 1;
-
- return 0;
-}
-
-static int
-getlocation (struct Dwarf_CU *cu, const Dwarf_Block *block,
- Dwarf_Op **llbuf, size_t *listlen)
-{
- Dwarf *dbg = cu->dbg;
-
- /* Check whether we already looked at this list. */
- struct loc_s fake = { .addr = block->data };
- struct loc_s **found = tfind (&fake, &cu->locs, loc_compare);
- if (found != NULL)
- {
- /* We already saw it. */
- *llbuf = (*found)->loc;
- *listlen = (*found)->nloc;
-
- return 0;
- }
-
- const unsigned char *data = block->data;
- const unsigned char *const end_data = data + block->length;
-
- struct loclist *loclist = NULL;
- unsigned int n = 0;
- /* Decode the opcodes. It is possible in some situations to have a
- block of size zero. */
- while (data < end_data)
- {
- struct loclist *newloc;
- newloc = (struct loclist *) alloca (sizeof (struct loclist));
- newloc->number = 0;
- newloc->number2 = 0;
- newloc->offset = data - block->data;
- newloc->next = loclist;
- loclist = newloc;
- ++n;
-
- switch ((newloc->atom = *data++))
- {
- case DW_OP_addr:
- /* Address, depends on address size of CU. */
- if (cu->address_size == 4)
- {
- if (unlikely (data + 4 > end_data))
- {
- invalid:
- __libdw_seterrno (DWARF_E_INVALID_DWARF);
- return -1;
- }
-
- newloc->number = read_4ubyte_unaligned_inc (dbg, data);
- }
- else
- {
- if (unlikely (data + 8 > end_data))
- goto invalid;
-
- newloc->number = read_8ubyte_unaligned_inc (dbg, data);
- }
- break;
-
- case DW_OP_deref:
- case DW_OP_dup:
- case DW_OP_drop:
- case DW_OP_over:
- case DW_OP_swap:
- case DW_OP_rot:
- case DW_OP_xderef:
- case DW_OP_abs:
- case DW_OP_and:
- case DW_OP_div:
- case DW_OP_minus:
- case DW_OP_mod:
- case DW_OP_mul:
- case DW_OP_neg:
- case DW_OP_not:
- case DW_OP_or:
- case DW_OP_plus:
- case DW_OP_shl:
- case DW_OP_shr:
- case DW_OP_shra:
- case DW_OP_xor:
- case DW_OP_eq:
- case DW_OP_ge:
- case DW_OP_gt:
- case DW_OP_le:
- case DW_OP_lt:
- case DW_OP_ne:
- case DW_OP_lit0 ... DW_OP_lit31:
- case DW_OP_reg0 ... DW_OP_reg31:
- case DW_OP_nop:
- case DW_OP_push_object_address:
- case DW_OP_call_ref:
- /* No operand. */
- break;
-
- case DW_OP_const1u:
- case DW_OP_pick:
- case DW_OP_deref_size:
- case DW_OP_xderef_size:
- if (unlikely (data >= end_data))
- goto invalid;
-
- newloc->number = *data++;
- break;
-
- case DW_OP_const1s:
- if (unlikely (data >= end_data))
- goto invalid;
-
- newloc->number = *((int8_t *) data);
- ++data;
- break;
-
- case DW_OP_const2u:
- if (unlikely (data + 2 > end_data))
- goto invalid;
-
- newloc->number = read_2ubyte_unaligned_inc (dbg, data);
- break;
-
- case DW_OP_const2s:
- case DW_OP_skip:
- case DW_OP_bra:
- case DW_OP_call2:
- if (unlikely (data + 2 > end_data))
- goto invalid;
-
- newloc->number = read_2sbyte_unaligned_inc (dbg, data);
- break;
-
- case DW_OP_const4u:
- if (unlikely (data + 4 > end_data))
- goto invalid;
-
- newloc->number = read_4ubyte_unaligned_inc (dbg, data);
- break;
-
- case DW_OP_const4s:
- case DW_OP_call4:
- if (unlikely (data + 4 > end_data))
- goto invalid;
-
- newloc->number = read_4sbyte_unaligned_inc (dbg, data);
- break;
-
- case DW_OP_const8u:
- if (unlikely (data + 8 > end_data))
- goto invalid;
-
- newloc->number = read_8ubyte_unaligned_inc (dbg, data);
- break;
-
- case DW_OP_const8s:
- if (unlikely (data + 8 > end_data))
- goto invalid;
-
- newloc->number = read_8sbyte_unaligned_inc (dbg, data);
- break;
-
- case DW_OP_constu:
- case DW_OP_plus_uconst:
- case DW_OP_regx:
- case DW_OP_piece:
- /* XXX Check size. */
- get_uleb128 (newloc->number, data);
- break;
-
- case DW_OP_consts:
- case DW_OP_breg0 ... DW_OP_breg31:
- case DW_OP_fbreg:
- /* XXX Check size. */
- get_sleb128 (newloc->number, data);
- break;
-
- case DW_OP_bregx:
- /* XXX Check size. */
- get_uleb128 (newloc->number, data);
- get_sleb128 (newloc->number2, data);
- break;
-
- default:
- goto invalid;
- }
- }
-
- if (unlikely (n == 0))
- {
- /* This is not allowed.
-
- XXX Is it? */
- goto invalid;
- }
-
- /* Allocate the array. */
- Dwarf_Op *result = libdw_alloc (dbg, Dwarf_Op, sizeof (Dwarf_Op), n);
-
- /* Store the result. */
- *llbuf = result;
- *listlen = n;
-
- do
- {
- /* We populate the array from the back since the list is
- backwards. */
- --n;
- result[n].atom = loclist->atom;
- result[n].number = loclist->number;
- result[n].number2 = loclist->number2;
- result[n].offset = loclist->offset;
-
- loclist = loclist->next;
- }
- while (n > 0);
-
- /* Insert a record in the search tree so that we can find it again
- later. */
- struct loc_s *newp = libdw_alloc (dbg, struct loc_s, sizeof (struct loc_s),
- 1);
- newp->addr = block->data;
- newp->loc = result;
- newp->nloc = *listlen;
- (void) tsearch (newp, &cu->locs, loc_compare);
-
- /* We did it. */
- return 0;
-}
-
-int
-dwarf_getlocation (attr, llbuf, listlen)
- Dwarf_Attribute *attr;
- Dwarf_Op **llbuf;
- size_t *listlen;
-{
- if (! attr_ok (attr))
- return -1;
-
- /* If it has a block form, it's a single location expression. */
- Dwarf_Block block;
- if (INTUSE(dwarf_formblock) (attr, &block) != 0)
- return -1;
-
- return getlocation (attr->cu, &block, llbuf, listlen);
-}
-
-int
-dwarf_getlocation_addr (attr, address, llbufs, listlens, maxlocs)
- Dwarf_Attribute *attr;
- Dwarf_Addr address;
- Dwarf_Op **llbufs;
- size_t *listlens;
- size_t maxlocs;
-{
- if (! attr_ok (attr))
- return -1;
-
- if (llbufs == NULL)
- maxlocs = SIZE_MAX;
-
- /* If it has a block form, it's a single location expression. */
- Dwarf_Block block;
- if (INTUSE(dwarf_formblock) (attr, &block) == 0)
- {
- if (maxlocs == 0)
- return 0;
- if (llbufs != NULL &&
- getlocation (attr->cu, &block, &llbufs[0], &listlens[0]) != 0)
- return -1;
- return listlens[0] == 0 ? 0 : 1;
- }
-
- int error = INTUSE(dwarf_errno) ();
- if (unlikely (error != DWARF_E_NO_BLOCK))
- {
- __libdw_seterrno (error);
- return -1;
- }
-
- /* Must have the form data4 or data8 which act as an offset. */
- Dwarf_Word offset;
- if (unlikely (INTUSE(dwarf_formudata) (attr, &offset) != 0))
- return -1;
-
- const Elf_Data *d = attr->cu->dbg->sectiondata[IDX_debug_loc];
- if (unlikely (d == NULL))
- {
- __libdw_seterrno (DWARF_E_NO_LOCLIST);
- return -1;
- }
-
- Dwarf_Addr base = (Dwarf_Addr) -1;
- unsigned char *readp = d->d_buf + offset;
- size_t got = 0;
- while (got < maxlocs)
- {
- if ((unsigned char *) d->d_buf + d->d_size - readp
- < attr->cu->address_size * 2)
- {
- invalid:
- __libdw_seterrno (DWARF_E_INVALID_DWARF);
- return -1;
- }
-
- Dwarf_Addr begin;
- Dwarf_Addr end;
- if (attr->cu->address_size == 8)
- {
- begin = read_8ubyte_unaligned_inc (attr->cu->dbg, readp);
- end = read_8ubyte_unaligned_inc (attr->cu->dbg, readp);
-
- if (begin == (Elf64_Addr) -1l) /* Base address entry. */
- {
- base = end;
- if (unlikely (base == (Dwarf_Addr) -1))
- goto invalid;
- continue;
- }
- }
- else
- {
- begin = read_4ubyte_unaligned_inc (attr->cu->dbg, readp);
- end = read_4ubyte_unaligned_inc (attr->cu->dbg, readp);
-
- if (begin == (Elf32_Addr) -1) /* Base address entry. */
- {
- base = end;
- continue;
- }
- }
-
- if (begin == 0 && end == 0) /* End of list entry. */
- break;
-
- if ((unsigned char *) d->d_buf + d->d_size - readp < 2)
- goto invalid;
-
- /* We have a location expression. */
- block.length = read_2ubyte_unaligned_inc (attr->cu->dbg, readp);
- block.data = readp;
- if ((unsigned char *) d->d_buf + d->d_size - readp
- < (ptrdiff_t) block.length)
- goto invalid;
- readp += block.length;
-
- if (base == (Dwarf_Addr) -1)
- {
- /* Fetch the CU's base address. */
- Dwarf_Die cudie = CUDIE (attr->cu);
-
- /* Find the base address of the compilation unit. It will
- normally be specified by DW_AT_low_pc. In DWARF-3 draft 4,
- the base address could be overridden by DW_AT_entry_pc. It's
- been removed, but GCC emits DW_AT_entry_pc and not DW_AT_lowpc
- for compilation units with discontinuous ranges. */
- Dwarf_Attribute attr_mem;
- if (unlikely (INTUSE(dwarf_lowpc) (&cudie, &base) != 0)
- && INTUSE(dwarf_formaddr) (INTUSE(dwarf_attr) (&cudie,
- DW_AT_entry_pc,
- &attr_mem),
- &base) != 0)
- {
- if (INTUSE(dwarf_errno) () != 0)
- return -1;
-
- /* The compiler provided no base address when it should
- have. Buggy GCC does this when it used absolute
- addresses in the location list and no DW_AT_ranges. */
- base = 0;
- }
- }
-
- if (address >= base + begin && address < base + end)
- {
- /* This one matches the address. */
- if (llbufs != NULL
- && unlikely (getlocation (attr->cu, &block,
- &llbufs[got], &listlens[got]) != 0))
- return -1;
- ++got;
- }
- }
-
- return got;
-}
diff --git a/libdw/dwarf_getmacros.c b/libdw/dwarf_getmacros.c
deleted file mode 100644
index 743ade3..0000000
--- a/libdw/dwarf_getmacros.c
+++ /dev/null
@@ -1,155 +0,0 @@
-/* Get macro information.
- Copyright (C) 2002, 2003, 2004, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <dwarf.h>
-#include <string.h>
-
-#include <libdwP.h>
-
-
-ptrdiff_t
-dwarf_getmacros (die, callback, arg, offset)
- Dwarf_Die *die;
- int (*callback) (Dwarf_Macro *, void *);
- void *arg;
- ptrdiff_t offset;
-{
- /* Get the appropriate attribute. */
- Dwarf_Attribute attr;
- if (INTUSE(dwarf_attr) (die, DW_AT_macro_info, &attr) == NULL)
- return -1;
-
- /* Offset into the .debug_macinfo section. */
- Dwarf_Word macoff;
- if (INTUSE(dwarf_formudata) (&attr, &macoff) != 0)
- return -1;
-
- const unsigned char *readp
- = die->cu->dbg->sectiondata[IDX_debug_macinfo]->d_buf + offset;
- const unsigned char *readendp
- = readp + die->cu->dbg->sectiondata[IDX_debug_macinfo]->d_size;
-
- if (readp == readendp)
- return 0;
-
- if (*readp != DW_MACINFO_start_file)
- goto invalid;
-
- while (readp < readendp)
- {
- unsigned int opcode = *readp++;
- unsigned int u128;
- unsigned int u128_2 = 0;
- const char *str = NULL;
- const unsigned char *endp;
-
- switch (opcode)
- {
- case DW_MACINFO_define:
- case DW_MACINFO_undef:
- case DW_MACINFO_vendor_ext:
- /* For the first two opcodes the parameters are
- line, string
- For the latter
- number, string.
- We can treat these cases together. */
- get_uleb128 (u128, readp);
-
- endp = memchr (readp, '\0', readendp - readp);
- if (endp == NULL)
- goto invalid;
-
- str = (char *) readp;
- readp = endp + 1;
- break;
-
- case DW_MACINFO_start_file:
- /* The two parameters are line and file index. */
- get_uleb128 (u128, readp);
- get_uleb128 (u128_2, readp);
- break;
-
- case DW_MACINFO_end_file:
- /* No parameters for this one. */
- u128 = 0;
- break;
-
- case 0:
- /* Nothing more to do. */
- return 0;
-
- default:
- goto invalid;
- }
-
- Dwarf_Macro mac;
- mac.opcode = opcode;
- mac.param1 = u128;
- if (str == NULL)
- mac.param2.u = u128_2;
- else
- mac.param2.s = str;
-
- if (callback (&mac, arg) != DWARF_CB_OK)
- return (readp
- - ((unsigned char *) die->cu->dbg->sectiondata[IDX_debug_macinfo]->d_buf
- + offset));
- }
-
- /* If we come here the termination of the data for the CU is not
- present. */
- invalid:
- __libdw_seterrno (DWARF_E_INVALID_DWARF);
- return -1;
-}
diff --git a/libdw/dwarf_getpubnames.c b/libdw/dwarf_getpubnames.c
deleted file mode 100644
index e787295..0000000
--- a/libdw/dwarf_getpubnames.c
+++ /dev/null
@@ -1,262 +0,0 @@
-/* Get public symbol information.
- Copyright (C) 2002, 2003, 2004, 2005, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/param.h>
-
-#include <libdwP.h>
-#include <dwarf.h>
-
-/* ANDROID_CHANGE_BEGIN */
-#include <AndroidFixup.h>
-/* ANDROID_CHANGE_END */
-
-static int
-get_offsets (Dwarf *dbg)
-{
- size_t allocated = 0;
- size_t cnt = 0;
- struct pubnames_s *mem = NULL;
- const size_t entsize = sizeof (struct pubnames_s);
- unsigned char *const startp = dbg->sectiondata[IDX_debug_pubnames]->d_buf;
- unsigned char *readp = startp;
- unsigned char *endp = readp + dbg->sectiondata[IDX_debug_pubnames]->d_size;
-
- while (readp + 14 < endp)
- {
- /* If necessary, allocate more entries. */
- if (cnt >= allocated)
- {
- allocated = MAX (10, 2 * allocated);
- struct pubnames_s *newmem
- = (struct pubnames_s *) realloc (mem, allocated * entsize);
- if (newmem == NULL)
- {
- __libdw_seterrno (DWARF_E_NOMEM);
- err_return:
- free (mem);
- return -1;
- }
-
- mem = newmem;
- }
-
- /* Read the set header. */
- int len_bytes = 4;
- Dwarf_Off len = read_4ubyte_unaligned_inc (dbg, readp);
- if (len == DWARF3_LENGTH_64_BIT)
- {
- len = read_8ubyte_unaligned_inc (dbg, readp);
- len_bytes = 8;
- }
- else if (unlikely (len >= DWARF3_LENGTH_MIN_ESCAPE_CODE
- && len <= DWARF3_LENGTH_MAX_ESCAPE_CODE))
- {
- invalid_dwarf:
- __libdw_seterrno (DWARF_E_INVALID_DWARF);
- goto err_return;
- }
-
- /* Now we know the offset of the first offset/name pair. */
- mem[cnt].set_start = readp + 2 + 2 * len_bytes - startp;
- mem[cnt].address_len = len_bytes;
- if (mem[cnt].set_start >= dbg->sectiondata[IDX_debug_pubnames]->d_size)
- /* Something wrong, the first entry is beyond the end of
- the section. */
- break;
-
- /* Read the version. It better be two for now. */
- uint16_t version = read_2ubyte_unaligned (dbg, readp);
- if (unlikely (version != 2))
- {
- __libdw_seterrno (DWARF_E_INVALID_VERSION);
- goto err_return;
- }
-
- /* Get the CU offset. */
- if (len_bytes == 4)
- mem[cnt].cu_offset = read_4ubyte_unaligned (dbg, readp + 2);
- else
- mem[cnt].cu_offset = read_8ubyte_unaligned (dbg, readp + 2);
-
- /* Determine the size of the CU header. */
- if (unlikely (dbg->sectiondata[IDX_debug_info] == NULL
- || dbg->sectiondata[IDX_debug_info]->d_buf == NULL
- || (mem[cnt].cu_offset + 3
- >= dbg->sectiondata[IDX_debug_info]->d_size)))
- goto invalid_dwarf;
-
- unsigned char *infop
- = ((unsigned char *) dbg->sectiondata[IDX_debug_info]->d_buf
- + mem[cnt].cu_offset);
- if (read_4ubyte_unaligned_noncvt (infop) == DWARF3_LENGTH_64_BIT)
- mem[cnt].cu_header_size = 23;
- else
- mem[cnt].cu_header_size = 11;
-
- ++cnt;
-
- /* Advance to the next set. */
- readp += len;
- }
-
- if (mem == NULL)
- {
- __libdw_seterrno (DWARF_E_NO_ENTRY);
- return -1;
- }
-
- dbg->pubnames_sets = (struct pubnames_s *) realloc (mem, cnt * entsize);
- dbg->pubnames_nsets = cnt;
-
- return 0;
-}
-
-
-ptrdiff_t
-dwarf_getpubnames (dbg, callback, arg, offset)
- Dwarf *dbg;
- int (*callback) (Dwarf *, Dwarf_Global *, void *);
- void *arg;
- ptrdiff_t offset;
-{
- if (dbg == NULL)
- return -1l;
-
- if (unlikely (offset < 0))
- {
- __libdw_seterrno (DWARF_E_INVALID_OFFSET);
- return -1l;
- }
-
- /* Make sure it is a valid offset. */
- if (unlikely (dbg->sectiondata[IDX_debug_pubnames] == NULL
- || ((size_t) offset
- >= dbg->sectiondata[IDX_debug_pubnames]->d_size)))
- /* No (more) entry. */
- return 0;
-
- /* If necessary read the set information. */
- if (dbg->pubnames_nsets == 0 && unlikely (get_offsets (dbg) != 0))
- return -1l;
-
- /* Find the place where to start. */
- size_t cnt;
- if (offset == 0)
- {
- cnt = 0;
- offset = dbg->pubnames_sets[0].set_start;
- }
- else
- {
- for (cnt = 0; cnt + 1 < dbg->pubnames_nsets; ++cnt)
- if ((Dwarf_Off) offset >= dbg->pubnames_sets[cnt].set_start)
- {
- assert ((Dwarf_Off) offset
- < dbg->pubnames_sets[cnt + 1].set_start);
- break;
- }
- assert (cnt + 1 < dbg->pubnames_nsets);
- }
-
- unsigned char *startp
- = (unsigned char *) dbg->sectiondata[IDX_debug_pubnames]->d_buf;
- unsigned char *readp = startp + offset;
- while (1)
- {
- Dwarf_Global gl;
-
- gl.cu_offset = (dbg->pubnames_sets[cnt].cu_offset
- + dbg->pubnames_sets[cnt].cu_header_size);
-
- while (1)
- {
- /* READP points to the next offset/name pair. */
- if (dbg->pubnames_sets[cnt].address_len == 4)
- gl.die_offset = read_4ubyte_unaligned_inc (dbg, readp);
- else
- gl.die_offset = read_8ubyte_unaligned_inc (dbg, readp);
-
- /* If the offset is zero we reached the end of the set. */
- if (gl.die_offset == 0)
- break;
-
- /* Add the CU offset. */
- gl.die_offset += dbg->pubnames_sets[cnt].cu_offset;
-
- gl.name = (char *) readp;
- readp = (unsigned char *) rawmemchr (gl.name, '\0') + 1;
-
- /* We found name and DIE offset. Report it. */
- if (callback (dbg, &gl, arg) != DWARF_CB_OK)
- {
- /* The user wants us to stop. Return the offset of the
- next entry. */
- return readp - startp;
- }
- }
-
- if (++cnt == dbg->pubnames_nsets)
- /* This was the last set. */
- break;
-
- startp = (unsigned char *) dbg->sectiondata[IDX_debug_pubnames]->d_buf;
- readp = startp + dbg->pubnames_sets[cnt].set_start;
- }
-
- /* We are done. No more entries. */
- return 0;
-}
diff --git a/libdw/dwarf_getscopes.c b/libdw/dwarf_getscopes.c
deleted file mode 100644
index 73431ba..0000000
--- a/libdw/dwarf_getscopes.c
+++ /dev/null
@@ -1,222 +0,0 @@
-/* Return scope DIEs containing PC address.
- Copyright (C) 2005, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <stdlib.h>
-#include "libdwP.h"
-#include <dwarf.h>
-
-
-struct args
-{
- Dwarf_Addr pc;
- Dwarf_Die *scopes;
- unsigned int inlined, nscopes;
- Dwarf_Die inlined_origin;
-};
-
-/* Preorder visitor: prune the traversal if this DIE does not contain PC. */
-static int
-pc_match (unsigned int depth, struct Dwarf_Die_Chain *die, void *arg)
-{
- struct args *a = arg;
-
- if (a->scopes != NULL)
- die->prune = true;
- else
- {
- /* dwarf_haspc returns an error if there are no appropriate attributes.
- But we use it indiscriminantly instead of presuming which tags can
- have PC attributes. So when it fails for that reason, treat it just
- as a nonmatching return. */
- int result = INTUSE(dwarf_haspc) (&die->die, a->pc);
- if (result < 0)
- {
- int error = INTUSE(dwarf_errno) ();
- if (error != DWARF_E_NOERROR && error != DWARF_E_NO_DEBUG_RANGES)
- {
- __libdw_seterrno (error);
- return -1;
- }
- result = 0;
- }
- if (result == 0)
- die->prune = true;
-
- if (!die->prune
- && INTUSE (dwarf_tag) (&die->die) == DW_TAG_inlined_subroutine)
- a->inlined = depth;
- }
-
- return 0;
-}
-
-/* Preorder visitor for second partial traversal after finding a
- concrete inlined instance. */
-static int
-origin_match (unsigned int depth, struct Dwarf_Die_Chain *die, void *arg)
-{
- struct args *a = arg;
-
- if (die->die.addr != a->inlined_origin.addr)
- return 0;
-
- /* We have a winner! This is the abstract definition of the inline
- function of which A->scopes[A->nscopes - 1] is a concrete instance.
- */
-
- unsigned int nscopes = a->nscopes + depth;
- Dwarf_Die *scopes = realloc (a->scopes, nscopes * sizeof scopes[0]);
- if (scopes == NULL)
- {
- free (a->scopes);
- __libdw_seterrno (DWARF_E_NOMEM);
- return -1;
- }
-
- a->scopes = scopes;
- do
- {
- die = die->parent;
- scopes[a->nscopes++] = die->die;
- }
- while (a->nscopes < nscopes);
- assert (die->parent == NULL);
- return a->nscopes;
-}
-
-/* Postorder visitor: first (innermost) call wins. */
-static int
-pc_record (unsigned int depth, struct Dwarf_Die_Chain *die, void *arg)
-{
- struct args *a = arg;
-
- if (die->prune)
- return 0;
-
- if (a->scopes == NULL)
- {
- /* We have hit the innermost DIE that contains the target PC. */
-
- a->nscopes = depth + 1 - a->inlined;
- a->scopes = malloc (a->nscopes * sizeof a->scopes[0]);
- if (a->scopes == NULL)
- {
- __libdw_seterrno (DWARF_E_NOMEM);
- return -1;
- }
-
- for (unsigned int i = 0; i < a->nscopes; ++i)
- {
- a->scopes[i] = die->die;
- die = die->parent;
- }
-
- if (a->inlined == 0)
- {
- assert (die == NULL);
- return a->nscopes;
- }
-
- /* This is the concrete inlined instance itself.
- Record its abstract_origin pointer. */
- Dwarf_Die *const inlinedie = &a->scopes[depth - a->inlined];
-
- assert (INTUSE (dwarf_tag) (inlinedie) == DW_TAG_inlined_subroutine);
- Dwarf_Attribute attr_mem;
- Dwarf_Attribute *attr = INTUSE (dwarf_attr) (inlinedie,
- DW_AT_abstract_origin,
- &attr_mem);
- if (INTUSE (dwarf_formref_die) (attr, &a->inlined_origin) == NULL)
- return -1;
- return 0;
- }
-
-
- /* We've recorded the scopes back to one that is a concrete inlined
- instance. Now return out of the traversal back to the scope
- containing that instance. */
-
- assert (a->inlined);
- if (depth >= a->inlined)
- /* Not there yet. */
- return 0;
-
- /* Now we are in a scope that contains the concrete inlined instance.
- Search it for the inline function's abstract definition.
- If we don't find it, return to search the containing scope.
- If we do find it, the nonzero return value will bail us out
- of the postorder traversal. */
- return __libdw_visit_scopes (depth, die, &origin_match, NULL, a);
-}
-
-
-int
-dwarf_getscopes (Dwarf_Die *cudie, Dwarf_Addr pc, Dwarf_Die **scopes)
-{
- if (cudie == NULL)
- return -1;
-
- struct Dwarf_Die_Chain cu = { .parent = NULL, .die = *cudie };
- struct args a = { .pc = pc };
-
- int result = __libdw_visit_scopes (0, &cu, &pc_match, &pc_record, &a);
-
- if (result == 0 && a.scopes != NULL)
- result = __libdw_visit_scopes (0, &cu, &origin_match, NULL, &a);
-
- if (result > 0)
- *scopes = a.scopes;
-
- return result;
-}
diff --git a/libdw/dwarf_getscopes_die.c b/libdw/dwarf_getscopes_die.c
deleted file mode 100644
index 07fb9b0..0000000
--- a/libdw/dwarf_getscopes_die.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/* Return scope DIEs containing given DIE.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-#include "libdwP.h"
-#include <assert.h>
-#include <stdlib.h>
-
-static int
-scope_visitor (unsigned int depth, struct Dwarf_Die_Chain *die, void *arg)
-{
- if (die->die.addr != *(void **) arg)
- return 0;
-
- Dwarf_Die *scopes = malloc (depth * sizeof scopes[0]);
- if (scopes == NULL)
- {
- __libdw_seterrno (DWARF_E_NOMEM);
- return -1;
- }
-
- unsigned int i = 0;
- do
- {
- scopes[i++] = die->die;
- die = die->parent;
- }
- while (die != NULL);
- assert (i == depth);
-
- *(void **) arg = scopes;
- return depth;
-}
-
-int
-dwarf_getscopes_die (Dwarf_Die *die, Dwarf_Die **scopes)
-{
- if (die == NULL)
- return -1;
-
- struct Dwarf_Die_Chain cu = { .die = CUDIE (die->cu), .parent = NULL };
- void *info = die->addr;
- int result = __libdw_visit_scopes (1, &cu, &scope_visitor, NULL, &info);
- if (result > 0)
- *scopes = info;
- return result;
-}
diff --git a/libdw/dwarf_getscopevar.c b/libdw/dwarf_getscopevar.c
deleted file mode 100644
index 4e5b429..0000000
--- a/libdw/dwarf_getscopevar.c
+++ /dev/null
@@ -1,177 +0,0 @@
-/* Find a named variable or parameter within given scopes.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdbool.h>
-#include <string.h>
-#include "libdwP.h"
-#include <dwarf.h>
-
-
-/* Find the containing CU's files. */
-static int
-getfiles (Dwarf_Die *die, Dwarf_Files **files)
-{
- return INTUSE(dwarf_getsrcfiles) (&CUDIE (die->cu), files, NULL);
-}
-
-/* Fetch an attribute that should have a constant integer form. */
-static int
-getattr (Dwarf_Die *die, int search_name, Dwarf_Word *value)
-{
- Dwarf_Attribute attr_mem;
- return INTUSE(dwarf_formudata) (INTUSE(dwarf_attr) (die, search_name,
- &attr_mem), value);
-}
-
-/* Search SCOPES[0..NSCOPES-1] for a variable called NAME.
- Ignore the first SKIP_SHADOWS scopes that match the name.
- If MATCH_FILE is not null, accept only declaration in that source file;
- if MATCH_LINENO or MATCH_LINECOL are also nonzero, accept only declaration
- at that line and column.
-
- If successful, fill in *RESULT with the DIE of the variable found,
- and return N where SCOPES[N] is the scope defining the variable.
- Return -1 for errors or -2 for no matching variable found. */
-
-int
-dwarf_getscopevar (Dwarf_Die *scopes, int nscopes,
- const char *name, int skip_shadows,
- const char *match_file, int match_lineno, int match_linecol,
- Dwarf_Die *result)
-{
- /* Match against the given file name. */
- size_t match_file_len = match_file == NULL ? 0 : strlen (match_file);
- bool lastfile_matches = false;
- const char *lastfile = NULL;
- inline bool file_matches (Dwarf_Files *files, size_t idx)
- {
- if (idx >= files->nfiles)
- return false;
-
- const char *file = files->info[idx].name;
- if (file != lastfile)
- {
- size_t len = strlen (file);
- lastfile_matches = (len >= match_file_len
- && !memcmp (match_file, file, match_file_len)
- && (len == match_file_len
- || file[len - match_file_len - 1] == '/'));
- }
- return lastfile_matches;
- }
-
- /* Start with the innermost scope and move out. */
- for (int out = 0; out < nscopes; ++out)
- if (INTUSE(dwarf_haschildren) (&scopes[out]))
- {
- if (INTUSE(dwarf_child) (&scopes[out], result) != 0)
- return -1;
- do
- {
- switch (INTUSE(dwarf_tag) (result))
- {
- case DW_TAG_variable:
- case DW_TAG_formal_parameter:
- break;
-
- default:
- continue;
- }
-
- /* Only get here for a variable or parameter. Check the name. */
- Dwarf_Attribute attr_mem;
- const char *diename = INTUSE(dwarf_formstring)
- (INTUSE(dwarf_attr_integrate) (result, DW_AT_name, &attr_mem));
- if (diename != NULL && !strcmp (name, diename))
- {
- /* We have a matching name. */
-
- if (skip_shadows > 0)
- {
- /* Punt this scope for the one it shadows. */
- --skip_shadows;
- break;
- }
-
- if (match_file != NULL)
- {
- /* Check its decl_file. */
-
- Dwarf_Word i;
- Dwarf_Files *files;
- if (getattr (result, DW_AT_decl_file, &i) != 0
- || getfiles (&scopes[out], &files) != 0)
- break;
-
- if (!file_matches (files, i))
- break;
-
- if (match_lineno > 0
- && (getattr (result, DW_AT_decl_line, &i) != 0
- || (int) i != match_lineno))
- break;
- if (match_linecol > 0
- && (getattr (result, DW_AT_decl_column, &i) != 0
- || (int) i != match_linecol))
- break;
- }
-
- /* We have a winner! */
- return out;
- }
- }
- while (INTUSE(dwarf_siblingof) (result, result) == 0);
- }
-
- return -2;
-}
diff --git a/libdw/dwarf_getsrc_die.c b/libdw/dwarf_getsrc_die.c
deleted file mode 100644
index 96aa41f..0000000
--- a/libdw/dwarf_getsrc_die.c
+++ /dev/null
@@ -1,99 +0,0 @@
-/* Find line information for address.
- Copyright (C) 2004, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libdwP.h"
-#include <assert.h>
-
-
-Dwarf_Line *
-dwarf_getsrc_die (Dwarf_Die *cudie, Dwarf_Addr addr)
-{
- Dwarf_Lines *lines;
- size_t nlines;
-
- if (INTUSE(dwarf_getsrclines) (cudie, &lines, &nlines) != 0)
- return NULL;
-
- /* The lines are sorted by address, so we can use binary search. */
- size_t l = 0, u = nlines;
- while (l < u)
- {
- size_t idx = (l + u) / 2;
- if (addr < lines->info[idx].addr)
- u = idx;
- else if (addr > lines->info[idx].addr || lines->info[idx].end_sequence)
- l = idx + 1;
- else
- return &lines->info[idx];
- }
-
- if (nlines > 0)
- assert (lines->info[nlines - 1].end_sequence);
-
- /* If none were equal, the closest one below is what we want. We
- never want the last one, because it's the end-sequence marker
- with an address at the high bound of the CU's code. If the debug
- information is faulty and no end-sequence marker is present, we
- still ignore it. */
- if (u > 0 && u < nlines && addr > lines->info[u - 1].addr)
- {
- while (lines->info[u - 1].end_sequence && u > 0)
- --u;
- if (u > 0)
- return &lines->info[u - 1];
- }
-
- __libdw_seterrno (DWARF_E_ADDR_OUTOFRANGE);
- return NULL;
-}
diff --git a/libdw/dwarf_getsrc_file.c b/libdw/dwarf_getsrc_file.c
deleted file mode 100644
index 2c4fc76..0000000
--- a/libdw/dwarf_getsrc_file.c
+++ /dev/null
@@ -1,193 +0,0 @@
-/* Find line information for given file/line/column triple.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "libdwP.h"
-
-int
-dwarf_getsrc_file (Dwarf *dbg, const char *fname, int lineno, int column,
- Dwarf_Line ***srcsp, size_t *nsrcs)
-{
- if (dbg == NULL)
- return -1;
-
- bool is_basename = strchr (fname, '/') == NULL;
-
- size_t max_match = *nsrcs ?: ~0u;
- size_t act_match = *nsrcs;
- size_t cur_match = 0;
- Dwarf_Line **match = *nsrcs == 0 ? NULL : *srcsp;
-
- Dwarf_Off off = 0;
- size_t cuhl;
- Dwarf_Off noff;
-
- while (INTUSE(dwarf_nextcu) (dbg, off, &noff, &cuhl, NULL, NULL, NULL) == 0)
- {
- Dwarf_Die cudie_mem;
- Dwarf_Die *cudie = INTUSE(dwarf_offdie) (dbg, off + cuhl, &cudie_mem);
- if (cudie == NULL)
- continue;
-
- /* Get the line number information for this file. */
- Dwarf_Lines *lines;
- size_t nlines;
- if (INTUSE(dwarf_getsrclines) (cudie, &lines, &nlines) != 0)
- return -1;
-
- /* Search through all the line number records for a matching
- file and line/column number. If any of the numbers is zero,
- no match is performed. */
- unsigned int lastfile = UINT_MAX;
- bool lastmatch = false;
- for (size_t cnt = 0; cnt < nlines; ++cnt)
- {
- Dwarf_Line *line = &lines->info[cnt];
-
- if (lastfile != line->file)
- {
- lastfile = line->file;
- if (lastfile >= line->files->nfiles)
- {
- __libdw_seterrno (DWARF_E_INVALID_DWARF);
- return -1;
- }
-
- /* Match the name with the name the user provided. */
- const char *fname2 = line->files->info[lastfile].name;
- if (is_basename)
- lastmatch = strcmp (basename (fname2), fname) == 0;
- else
- lastmatch = strcmp (fname2, fname) == 0;
- }
- if (!lastmatch)
- continue;
-
- /* See whether line and possibly column match. */
- if (lineno != 0
- && (lineno > line->line
- || (column != 0 && column > line->column)))
- /* Cannot match. */
- continue;
-
- /* Determine whether this is the best match so far. */
- size_t inner;
- for (inner = 0; inner < cur_match; ++inner)
- if (match[inner]->files == line->files
- && match[inner]->file == line->file)
- break;
- if (inner < cur_match
- && (match[inner]->line != line->line
- || match[inner]->line != lineno
- || (column != 0
- && (match[inner]->column != line->column
- || match[inner]->column != column))))
- {
- /* We know about this file already. If this is a better
- match for the line number, use it. */
- if (match[inner]->line >= line->line
- && (match[inner]->line != line->line
- || match[inner]->column >= line->column))
- /* Use the new line. Otherwise the old one. */
- match[inner] = line;
- continue;
- }
-
- if (cur_match < max_match)
- {
- if (cur_match == act_match)
- {
- /* Enlarge the array for the results. */
- act_match += 10;
- Dwarf_Line **newp = realloc (match,
- act_match
- * sizeof (Dwarf_Line *));
- if (newp == NULL)
- {
- free (match);
- __libdw_seterrno (DWARF_E_NOMEM);
- return -1;
- }
- match = newp;
- }
-
- match[cur_match++] = line;
- }
- }
-
- /* If we managed to find as many matches as the user requested
- already, there is no need to go on to the next CU. */
- if (cur_match == max_match)
- break;
-
- off = noff;
- }
-
- if (cur_match > 0)
- {
- assert (*nsrcs == 0 || *srcsp == match);
-
- *nsrcs = cur_match;
- *srcsp = match;
-
- return 0;
- }
-
- __libdw_seterrno (DWARF_E_NO_MATCH);
- return -1;
-}
diff --git a/libdw/dwarf_getsrcdirs.c b/libdw/dwarf_getsrcdirs.c
deleted file mode 100644
index 74786dd..0000000
--- a/libdw/dwarf_getsrcdirs.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Find include directories in source file information.
- Copyright (C) 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libdwP.h"
-
-
-int
-dwarf_getsrcdirs (files, result, ndirs)
- Dwarf_Files *files;
- const char *const **result;
- size_t *ndirs;
-{
- if (files == NULL)
- return -1;
-
- *result = (void *) &files->info[files->nfiles];
- *ndirs = files->ndirs;
- return 0;
-}
diff --git a/libdw/dwarf_getsrcfiles.c b/libdw/dwarf_getsrcfiles.c
deleted file mode 100644
index ee4de52..0000000
--- a/libdw/dwarf_getsrcfiles.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/* Return source file information of CU.
- Copyright (C) 2004, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <dwarf.h>
-#include "libdwP.h"
-
-
-int
-dwarf_getsrcfiles (Dwarf_Die *cudie, Dwarf_Files **files, size_t *nfiles)
-{
- if (unlikely (cudie == NULL
- || INTUSE(dwarf_tag) (cudie) != DW_TAG_compile_unit))
- return -1;
-
- int res = -1;
-
- /* Get the information if it is not already known. */
- struct Dwarf_CU *const cu = cudie->cu;
- if (cu->lines == NULL)
- {
- Dwarf_Lines *lines;
- size_t nlines;
-
- /* Let the more generic function do the work. It'll create more
- data but that will be needed in an real program anyway. */
- res = INTUSE(dwarf_getsrclines) (cudie, &lines, &nlines);
- }
- else if (cu->files != (void *) -1l)
- /* We already have the information. */
- res = 0;
-
- if (likely (res == 0))
- {
- assert (cu->files != NULL && cu->files != (void *) -1l);
- *files = cu->files;
- if (nfiles != NULL)
- *nfiles = cu->files->nfiles;
- }
-
- // XXX Eventually: unlocking here.
-
- return res;
-}
-INTDEF (dwarf_getsrcfiles)
diff --git a/libdw/dwarf_getsrclines.c b/libdw/dwarf_getsrclines.c
deleted file mode 100644
index 9b3c97a..0000000
--- a/libdw/dwarf_getsrclines.c
+++ /dev/null
@@ -1,698 +0,0 @@
-/* Return line number information of CU.
- Copyright (C) 2004, 2005, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-#include "dwarf.h"
-#include "libdwP.h"
-
-
-struct filelist
-{
- Dwarf_Fileinfo info;
- struct filelist *next;
-};
-
-struct linelist
-{
- Dwarf_Line line;
- struct linelist *next;
-};
-
-
-/* Compare by Dwarf_Line.addr, given pointers into an array of pointers. */
-static int
-compare_lines (const void *a, const void *b)
-{
- Dwarf_Line *const *p1 = a;
- Dwarf_Line *const *p2 = b;
-
- if ((*p1)->addr == (*p2)->addr)
- /* An end_sequence marker precedes a normal record at the same address. */
- return (*p2)->end_sequence - (*p1)->end_sequence;
-
- return (*p1)->addr - (*p2)->addr;
-}
-
-
-/* Adds a new line to the matrix. We cannot define a function because
- we want to use alloca. */
-#define NEW_LINE(end_seq) \
- do { \
- /* Add the new line. */ \
- new_line = (struct linelist *) alloca (sizeof (struct linelist)); \
- \
- /* Set the line information. */ \
- new_line->line.addr = address; \
- new_line->line.file = file; \
- new_line->line.line = line; \
- new_line->line.column = column; \
- new_line->line.is_stmt = is_stmt; \
- new_line->line.basic_block = basic_block; \
- new_line->line.end_sequence = end_seq; \
- new_line->line.prologue_end = prologue_end; \
- new_line->line.epilogue_begin = epilogue_begin; \
- \
- new_line->next = linelist; \
- linelist = new_line; \
- ++nlinelist; \
- } while (0)
-
-
-int
-dwarf_getsrclines (Dwarf_Die *cudie, Dwarf_Lines **lines, size_t *nlines)
-{
- if (unlikely (cudie == NULL
- || INTUSE(dwarf_tag) (cudie) != DW_TAG_compile_unit))
- return -1;
-
- int res = -1;
-
- /* Get the information if it is not already known. */
- struct Dwarf_CU *const cu = cudie->cu;
- if (cu->lines == NULL)
- {
- /* Failsafe mode: no data found. */
- cu->lines = (void *) -1l;
- cu->files = (void *) -1l;
-
- /* The die must have a statement list associated. */
- Dwarf_Attribute stmt_list_mem;
- Dwarf_Attribute *stmt_list = INTUSE(dwarf_attr) (cudie, DW_AT_stmt_list,
- &stmt_list_mem);
-
- /* Get the offset into the .debug_line section. NB: this call
- also checks whether the previous dwarf_attr call failed. */
- Dwarf_Word offset;
- if (INTUSE(dwarf_formudata) (stmt_list, &offset) != 0)
- goto out;
-
- Dwarf *dbg = cu->dbg;
- if (dbg->sectiondata[IDX_debug_line] == NULL)
- {
- __libdw_seterrno (DWARF_E_NO_DEBUG_LINE);
- goto out;
- }
- const uint8_t *linep = dbg->sectiondata[IDX_debug_line]->d_buf + offset;
- const uint8_t *lineendp = (dbg->sectiondata[IDX_debug_line]->d_buf
- + dbg->sectiondata[IDX_debug_line]->d_size);
-
- /* Get the compilation directory. */
- Dwarf_Attribute compdir_attr_mem;
- Dwarf_Attribute *compdir_attr = INTUSE(dwarf_attr) (cudie,
- DW_AT_comp_dir,
- &compdir_attr_mem);
- const char *comp_dir = INTUSE(dwarf_formstring) (compdir_attr);
-
- if (unlikely (linep + 4 > lineendp))
- {
- invalid_data:
- __libdw_seterrno (DWARF_E_INVALID_DEBUG_LINE);
- goto out;
- }
- Dwarf_Word unit_length = read_4ubyte_unaligned_inc (dbg, linep);
- unsigned int length = 4;
- if (unlikely (unit_length == DWARF3_LENGTH_64_BIT))
- {
- if (unlikely (linep + 8 > lineendp))
- goto invalid_data;
- unit_length = read_8ubyte_unaligned_inc (dbg, linep);
- length = 8;
- }
-
- /* Check whether we have enough room in the section. */
- if (unit_length < 2 + length + 5 * 1
- || unlikely (linep + unit_length > lineendp))
- goto invalid_data;
- lineendp = linep + unit_length;
-
- /* The next element of the header is the version identifier. */
- uint_fast16_t version = read_2ubyte_unaligned_inc (dbg, linep);
- if (unlikely (version > DWARF_VERSION))
- {
- __libdw_seterrno (DWARF_E_VERSION);
- goto out;
- }
-
- /* Next comes the header length. */
- Dwarf_Word header_length;
- if (length == 4)
- header_length = read_4ubyte_unaligned_inc (dbg, linep);
- else
- header_length = read_8ubyte_unaligned_inc (dbg, linep);
- const unsigned char *header_start = linep;
-
- /* Next the minimum instruction length. */
- uint_fast8_t minimum_instr_len = *linep++;
-
- /* Then the flag determining the default value of the is_stmt
- register. */
- uint_fast8_t default_is_stmt = *linep++;
-
- /* Now the line base. */
- int_fast8_t line_base = *((int_fast8_t *) linep);
- ++linep;
-
- /* And the line range. */
- uint_fast8_t line_range = *linep++;
-
- /* The opcode base. */
- uint_fast8_t opcode_base = *linep++;
-
- /* Remember array with the standard opcode length (-1 to account for
- the opcode with value zero not being mentioned). */
- const uint8_t *standard_opcode_lengths = linep - 1;
- linep += opcode_base - 1;
- if (unlikely (linep >= lineendp))
- goto invalid_data;
-
- /* First comes the list of directories. Add the compilation
- directory first since the index zero is used for it. */
- struct dirlist
- {
- const char *dir;
- size_t len;
- struct dirlist *next;
- } comp_dir_elem =
- {
- .dir = comp_dir,
- .len = comp_dir ? strlen (comp_dir) : 0,
- .next = NULL
- };
- struct dirlist *dirlist = &comp_dir_elem;
- unsigned int ndirlist = 1;
-
- // XXX Directly construct array to conserve memory?
- while (*linep != 0)
- {
- struct dirlist *new_dir =
- (struct dirlist *) alloca (sizeof (*new_dir));
-
- new_dir->dir = (char *) linep;
- uint8_t *endp = memchr (linep, '\0', lineendp - linep);
- if (endp == NULL)
- goto invalid_data;
- new_dir->len = endp - linep;
- new_dir->next = dirlist;
- dirlist = new_dir;
- ++ndirlist;
- linep = endp + 1;
- }
- /* Skip the final NUL byte. */
- ++linep;
-
- /* Rearrange the list in array form. */
- struct dirlist **dirarray
- = (struct dirlist **) alloca (ndirlist * sizeof (*dirarray));
- for (unsigned int n = ndirlist; n-- > 0; dirlist = dirlist->next)
- dirarray[n] = dirlist;
-
- /* Now read the files. */
- struct filelist null_file =
- {
- .info =
- {
- .name = "???",
- .mtime = 0,
- .length = 0
- },
- .next = NULL
- };
- struct filelist *filelist = &null_file;
- unsigned int nfilelist = 1;
-
- if (unlikely (linep >= lineendp))
- goto invalid_data;
- while (*linep != 0)
- {
- struct filelist *new_file =
- (struct filelist *) alloca (sizeof (*new_file));
-
- /* First comes the file name. */
- char *fname = (char *) linep;
- uint8_t *endp = memchr (fname, '\0', lineendp - linep);
- if (endp == NULL)
- goto invalid_data;
- size_t fnamelen = endp - (uint8_t *) fname;
- linep = endp + 1;
-
- /* Then the index. */
- Dwarf_Word diridx;
- get_uleb128 (diridx, linep);
- if (unlikely (diridx >= ndirlist))
- {
- __libdw_seterrno (DWARF_E_INVALID_DIR_IDX);
- goto out;
- }
-
- if (*fname == '/')
- /* It's an absolute path. */
- new_file->info.name = fname;
- else
- {
- new_file->info.name = libdw_alloc (dbg, char, 1,
- dirarray[diridx]->len + 1
- + fnamelen + 1);
- char *cp = new_file->info.name;
-
- if (dirarray[diridx]->dir != NULL)
- {
- /* This value could be NULL in case the DW_AT_comp_dir
- was not present. We cannot do much in this case.
- The easiest thing is to convert the path in an
- absolute path. */
- cp = stpcpy (cp, dirarray[diridx]->dir);
- }
- *cp++ = '/';
- strcpy (cp, fname);
- assert (strlen (new_file->info.name)
- < dirarray[diridx]->len + 1 + fnamelen + 1);
- }
-
- /* Next comes the modification time. */
- get_uleb128 (new_file->info.mtime, linep);
-
- /* Finally the length of the file. */
- get_uleb128 (new_file->info.length, linep);
-
- new_file->next = filelist;
- filelist = new_file;
- ++nfilelist;
- }
- /* Skip the final NUL byte. */
- ++linep;
-
- /* Consistency check. */
- if (unlikely (linep != header_start + header_length))
- {
- __libdw_seterrno (DWARF_E_INVALID_DWARF);
- goto out;
- }
-
- /* We are about to process the statement program. Initialize the
- state machine registers (see 6.2.2 in the v2.1 specification). */
- Dwarf_Word address = 0;
- size_t file = 1;
- size_t line = 1;
- size_t column = 0;
- uint_fast8_t is_stmt = default_is_stmt;
- int basic_block = 0;
- int prologue_end = 0;
- int epilogue_begin = 0;
-
- /* Process the instructions. */
- struct linelist *linelist = NULL;
- unsigned int nlinelist = 0;
- while (linep < lineendp)
- {
- struct linelist *new_line;
- unsigned int opcode;
- unsigned int u128;
- int s128;
-
- /* Read the opcode. */
- opcode = *linep++;
-
- /* Is this a special opcode? */
- if (likely (opcode >= opcode_base))
- {
- /* Yes. Handling this is quite easy since the opcode value
- is computed with
-
- opcode = (desired line increment - line_base)
- + (line_range * address advance) + opcode_base
- */
- int line_increment = (line_base
- + (opcode - opcode_base) % line_range);
- unsigned int address_increment = (minimum_instr_len
- * ((opcode - opcode_base)
- / line_range));
-
- /* Perform the increments. */
- line += line_increment;
- address += address_increment;
-
- /* Add a new line with the current state machine values. */
- NEW_LINE (0);
-
- /* Reset the flags. */
- basic_block = 0;
- prologue_end = 0;
- epilogue_begin = 0;
- }
- else if (opcode == 0)
- {
- /* This an extended opcode. */
- if (unlikely (linep + 2 > lineendp))
- goto invalid_data;
-
- /* The length. */
- unsigned int len = *linep++;
-
- if (unlikely (linep + len > lineendp))
- goto invalid_data;
-
- /* The sub-opcode. */
- opcode = *linep++;
-
- switch (opcode)
- {
- case DW_LNE_end_sequence:
- /* Add a new line with the current state machine values.
- The is the end of the sequence. */
- NEW_LINE (1);
-
- /* Reset the registers. */
- address = 0;
- file = 1;
- line = 1;
- column = 0;
- is_stmt = default_is_stmt;
- basic_block = 0;
- prologue_end = 0;
- epilogue_begin = 0;
- break;
-
- case DW_LNE_set_address:
- /* The value is an address. The size is defined as
- apporiate for the target machine. We use the
- address size field from the CU header. */
- if (cu->address_size == 4)
- address = read_4ubyte_unaligned_inc (dbg, linep);
- else
- address = read_8ubyte_unaligned_inc (dbg, linep);
- break;
-
- case DW_LNE_define_file:
- {
- char *fname = (char *) linep;
- uint8_t *endp = memchr (linep, '\0', lineendp - linep);
- if (endp == NULL)
- goto invalid_data;
- size_t fnamelen = endp - linep;
- linep = endp + 1;
-
- unsigned int diridx;
- get_uleb128 (diridx, linep);
- Dwarf_Word mtime;
- get_uleb128 (mtime, linep);
- Dwarf_Word filelength;
- get_uleb128 (filelength, linep);
-
- struct filelist *new_file =
- (struct filelist *) alloca (sizeof (*new_file));
- if (fname[0] == '/')
- new_file->info.name = fname;
- else
- {
- new_file->info.name =
- libdw_alloc (dbg, char, 1, (dirarray[diridx]->len + 1
- + fnamelen + 1));
- char *cp = new_file->info.name;
-
- if (dirarray[diridx]->dir != NULL)
- /* This value could be NULL in case the
- DW_AT_comp_dir was not present. We
- cannot do much in this case. The easiest
- thing is to convert the path in an
- absolute path. */
- cp = stpcpy (cp, dirarray[diridx]->dir);
- *cp++ = '/';
- strcpy (cp, fname);
- }
-
- new_file->info.mtime = mtime;
- new_file->info.length = filelength;
- new_file->next = filelist;
- filelist = new_file;
- ++nfilelist;
- }
- break;
-
- default:
- /* Unknown, ignore it. */
- linep += len - 1;
- break;
- }
- }
- else if (opcode <= DW_LNS_set_epilogue_begin)
- {
- /* This is a known standard opcode. */
- switch (opcode)
- {
- case DW_LNS_copy:
- /* Takes no argument. */
- if (unlikely (standard_opcode_lengths[opcode] != 0))
- goto invalid_data;
-
- /* Add a new line with the current state machine values. */
- NEW_LINE (0);
-
- /* Reset the flags. */
- basic_block = 0;
- /* XXX Whether the following two lines are necessary is
- unclear. I guess the current v2.1 specification has
- a bug in that it says clearing these two registers is
- not necessary. */
- prologue_end = 0;
- epilogue_begin = 0;
- break;
-
- case DW_LNS_advance_pc:
- /* Takes one uleb128 parameter which is added to the
- address. */
- if (unlikely (standard_opcode_lengths[opcode] != 1))
- goto invalid_data;
-
- get_uleb128 (u128, linep);
- address += minimum_instr_len * u128;
- break;
-
- case DW_LNS_advance_line:
- /* Takes one sleb128 parameter which is added to the
- line. */
- if (unlikely (standard_opcode_lengths[opcode] != 1))
- goto invalid_data;
-
- get_sleb128 (s128, linep);
- line += s128;
- break;
-
- case DW_LNS_set_file:
- /* Takes one uleb128 parameter which is stored in file. */
- if (unlikely (standard_opcode_lengths[opcode] != 1))
- goto invalid_data;
-
- get_uleb128 (u128, linep);
- file = u128;
- break;
-
- case DW_LNS_set_column:
- /* Takes one uleb128 parameter which is stored in column. */
- if (unlikely (standard_opcode_lengths[opcode] != 1))
- goto invalid_data;
-
- get_uleb128 (u128, linep);
- column = u128;
- break;
-
- case DW_LNS_negate_stmt:
- /* Takes no argument. */
- if (unlikely (standard_opcode_lengths[opcode] != 0))
- goto invalid_data;
-
- is_stmt = 1 - is_stmt;
- break;
-
- case DW_LNS_set_basic_block:
- /* Takes no argument. */
- if (unlikely (standard_opcode_lengths[opcode] != 0))
- goto invalid_data;
-
- basic_block = 1;
- break;
-
- case DW_LNS_const_add_pc:
- /* Takes no argument. */
- if (unlikely (standard_opcode_lengths[opcode] != 0))
- goto invalid_data;
-
- address += (minimum_instr_len
- * ((255 - opcode_base) / line_range));
- break;
-
- case DW_LNS_fixed_advance_pc:
- /* Takes one 16 bit parameter which is added to the
- address. */
- if (unlikely (standard_opcode_lengths[opcode] != 1))
- goto invalid_data;
-
- address += read_2ubyte_unaligned_inc (dbg, linep);
- break;
-
- case DW_LNS_set_prologue_end:
- /* Takes no argument. */
- if (unlikely (standard_opcode_lengths[opcode] != 0))
- goto invalid_data;
-
- prologue_end = 1;
- break;
-
- case DW_LNS_set_epilogue_begin:
- /* Takes no argument. */
- if (unlikely (standard_opcode_lengths[opcode] != 0))
- goto invalid_data;
-
- epilogue_begin = 1;
- break;
- }
- }
- else
- {
- /* This is a new opcode the generator but not we know about.
- Read the parameters associated with it but then discard
- everything. Read all the parameters for this opcode. */
- for (int n = standard_opcode_lengths[opcode]; n > 0; --n)
- get_uleb128 (u128, linep);
-
- /* Next round, ignore this opcode. */
- continue;
- }
- }
-
- /* Put all the files in an array. */
- Dwarf_Files *files = libdw_alloc (dbg, Dwarf_Files,
- sizeof (Dwarf_Files)
- + nfilelist * sizeof (Dwarf_Fileinfo)
- + (ndirlist + 1) * sizeof (char *),
- 1);
- const char **dirs = (void *) &files->info[nfilelist];
-
- files->nfiles = nfilelist;
- while (nfilelist-- > 0)
- {
- files->info[nfilelist] = filelist->info;
- filelist = filelist->next;
- }
- assert (filelist == NULL);
-
- /* Put all the directory strings in an array. */
- files->ndirs = ndirlist;
- for (unsigned int i = 0; i < ndirlist; ++i)
- dirs[i] = dirarray[i]->dir;
- dirs[ndirlist] = NULL;
-
- /* Remember the debugging descriptor. */
- files->dbg = dbg;
-
- /* Make the file data structure available through the CU. */
- cu->files = files;
-
- void *buf = libdw_alloc (dbg, Dwarf_Lines, (sizeof (Dwarf_Lines)
- + (sizeof (Dwarf_Line)
- * nlinelist)), 1);
-
- /* First use the buffer for the pointers, and sort the entries.
- We'll write the pointers in the end of the buffer, and then
- copy into the buffer from the beginning so the overlap works. */
- assert (sizeof (Dwarf_Line) >= sizeof (Dwarf_Line *));
- Dwarf_Line **sortlines = (buf + sizeof (Dwarf_Lines)
- + ((sizeof (Dwarf_Line)
- - sizeof (Dwarf_Line *)) * nlinelist));
-
- /* The list is in LIFO order and usually they come in clumps with
- ascending addresses. So fill from the back to probably start with
- runs already in order before we sort. */
- unsigned int i = nlinelist;
- while (i-- > 0)
- {
- sortlines[i] = &linelist->line;
- linelist = linelist->next;
- }
- assert (linelist == NULL);
-
- /* Sort by ascending address. */
- qsort (sortlines, nlinelist, sizeof sortlines[0], &compare_lines);
-
- /* Now that they are sorted, put them in the final array.
- The buffers overlap, so we've clobbered the early elements
- of SORTLINES by the time we're reading the later ones. */
- cu->lines = buf;
- cu->lines->nlines = nlinelist;
- for (i = 0; i < nlinelist; ++i)
- {
- cu->lines->info[i] = *sortlines[i];
- cu->lines->info[i].files = files;
- }
-
- /* Success. */
- res = 0;
- }
- else if (cu->lines != (void *) -1l)
- /* We already have the information. */
- res = 0;
-
- if (likely (res == 0))
- {
- *lines = cu->lines;
- *nlines = cu->lines->nlines;
- }
- out:
-
- // XXX Eventually: unlocking here.
-
- return res;
-}
-INTDEF(dwarf_getsrclines)
diff --git a/libdw/dwarf_getstring.c b/libdw/dwarf_getstring.c
deleted file mode 100644
index d5e7abf..0000000
--- a/libdw/dwarf_getstring.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/* Get string.
- Copyright (C) 2004 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <string.h>
-#include "libdwP.h"
-
-
-const char *
-dwarf_getstring (dbg, offset, lenp)
- Dwarf *dbg;
- Dwarf_Off offset;
- size_t *lenp;
-{
- if (dbg == NULL)
- return NULL;
-
- if (dbg->sectiondata[IDX_debug_str] == NULL
- || offset >= dbg->sectiondata[IDX_debug_str]->d_size)
- {
- no_string:
- __libdw_seterrno (DWARF_E_NO_STRING);
- return NULL;
- }
-
- const char *result = ((const char *) dbg->sectiondata[IDX_debug_str]->d_buf
- + offset);
- const char *endp = memchr (result, '\0',
- dbg->sectiondata[IDX_debug_str]->d_size - offset);
- if (endp == NULL)
- goto no_string;
-
- if (lenp != NULL)
- *lenp = endp - result;
-
- return result;
-}
diff --git a/libdw/dwarf_hasattr.c b/libdw/dwarf_hasattr.c
deleted file mode 100644
index b1c4292..0000000
--- a/libdw/dwarf_hasattr.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/* Check whether given DIE has specific attribute.
- Copyright (C) 2003, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <dwarf.h>
-#include "libdwP.h"
-
-
-int
-dwarf_hasattr (die, search_name)
- Dwarf_Die *die;
- unsigned int search_name;
-{
- if (die == NULL)
- return 0;
-
- /* Search for the attribute with the given name. */
- unsigned int code;
- (void) __libdw_find_attr (die, search_name, &code, NULL);
-
- return code == search_name;
-}
-INTDEF (dwarf_hasattr)
diff --git a/libdw/dwarf_hasattr_integrate.c b/libdw/dwarf_hasattr_integrate.c
deleted file mode 100644
index 12b4863..0000000
--- a/libdw/dwarf_hasattr_integrate.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/* Check whether DIE has specific attribute, integrating DW_AT_abstract_origin.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <dwarf.h>
-#include "libdwP.h"
-
-int
-dwarf_hasattr_integrate (Dwarf_Die *die, unsigned int search_name)
-{
- Dwarf_Die die_mem;
-
- do
- {
- if (INTUSE(dwarf_hasattr) (die, search_name))
- return 1;
-
- Dwarf_Attribute attr_mem;
- Dwarf_Attribute *attr = INTUSE(dwarf_attr) (die, DW_AT_abstract_origin,
- &attr_mem);
- if (attr == NULL)
- break;
-
- die = INTUSE(dwarf_formref_die) (attr, &die_mem);
- }
- while (die != NULL);
-
- return 0;
-}
diff --git a/libdw/dwarf_haschildren.c b/libdw/dwarf_haschildren.c
deleted file mode 100644
index fe43195..0000000
--- a/libdw/dwarf_haschildren.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/* Return string associated with given attribute.
- Copyright (C) 2003, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libdwP.h"
-#include <string.h>
-
-
-int
-dwarf_haschildren (die)
- Dwarf_Die *die;
-{
- /* Find the abbreviation entry. */
- Dwarf_Abbrev *abbrevp = die->abbrev;
- if (abbrevp != DWARF_END_ABBREV)
- {
- const unsigned char *readp = (unsigned char *) die->addr;
-
- /* First we have to get the abbreviation code so that we can decode
- the data in the DIE. */
- unsigned int abbrev_code;
- get_uleb128 (abbrev_code, readp);
-
- abbrevp = __libdw_findabbrev (die->cu, abbrev_code);
- die->abbrev = abbrevp ?: DWARF_END_ABBREV;
- }
- if (unlikely (die->abbrev == DWARF_END_ABBREV))
- {
- __libdw_seterrno (DWARF_E_INVALID_DWARF);
- return 0;
- }
-
- return die->abbrev->has_children;
-}
-INTDEF (dwarf_haschildren)
diff --git a/libdw/dwarf_hasform.c b/libdw/dwarf_hasform.c
deleted file mode 100644
index 66e0e74..0000000
--- a/libdw/dwarf_hasform.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* Check whether given attribute has specific form.
- Copyright (C) 2003 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <dwarf.h>
-#include "libdwP.h"
-
-
-int
-dwarf_hasform (attr, search_form)
- Dwarf_Attribute *attr;
- unsigned int search_form;
-{
- if (attr == NULL)
- return 0;
-
- return attr->form == search_form;
-}
diff --git a/libdw/dwarf_haspc.c b/libdw/dwarf_haspc.c
deleted file mode 100644
index 58b87b6..0000000
--- a/libdw/dwarf_haspc.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Determine whether a DIE covers a PC address.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libdwP.h"
-#include <dwarf.h>
-
-
-int
-dwarf_haspc (Dwarf_Die *die, Dwarf_Addr pc)
-{
- if (die == NULL)
- return -1;
-
- Dwarf_Addr base;
- Dwarf_Addr begin;
- Dwarf_Addr end;
- ptrdiff_t offset = 0;
- while ((offset = INTUSE(dwarf_ranges) (die, offset, &base,
- &begin, &end)) > 0)
- if (pc >= begin && pc < end)
- return 1;
-
- return offset;
-}
-INTDEF (dwarf_haspc)
diff --git a/libdw/dwarf_highpc.c b/libdw/dwarf_highpc.c
deleted file mode 100644
index c88e072..0000000
--- a/libdw/dwarf_highpc.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Return high PC attribute of DIE.
- Copyright (C) 2003, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <dwarf.h>
-#include "libdwP.h"
-
-
-int
-dwarf_highpc (die, return_addr)
- Dwarf_Die *die;
- Dwarf_Addr *return_addr;
-{
- Dwarf_Attribute attr_mem;
-
- return INTUSE(dwarf_formaddr) (INTUSE(dwarf_attr) (die, DW_AT_high_pc,
- &attr_mem),
- return_addr);
-}
-INTDEF(dwarf_highpc)
diff --git a/libdw/dwarf_lineaddr.c b/libdw/dwarf_lineaddr.c
deleted file mode 100644
index c59dd5d..0000000
--- a/libdw/dwarf_lineaddr.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/* Return line address.
- Copyright (C) 2004 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libdwP.h"
-
-
-int
-dwarf_lineaddr (Dwarf_Line *line, Dwarf_Addr *addrp)
-{
- if (line == NULL)
- return -1;
-
- *addrp = line->addr;
-
- return 0;
-}
diff --git a/libdw/dwarf_linebeginstatement.c b/libdw/dwarf_linebeginstatement.c
deleted file mode 100644
index 2a99e67..0000000
--- a/libdw/dwarf_linebeginstatement.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/* Return true if record is for beginning of a statement.
- Copyright (C) 2004 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libdwP.h"
-
-
-int
-dwarf_linebeginstatement (Dwarf_Line *line, bool *flagp)
-{
- if (line == NULL)
- return -1;
-
- *flagp = line->is_stmt;
-
- return 0;
-}
diff --git a/libdw/dwarf_lineblock.c b/libdw/dwarf_lineblock.c
deleted file mode 100644
index 5ad2bb5..0000000
--- a/libdw/dwarf_lineblock.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/* Return true if record is for beginning of a basic block.
- Copyright (C) 2004 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libdwP.h"
-
-
-int
-dwarf_lineblock (Dwarf_Line *line, bool *flagp)
-{
- if (line == NULL)
- return -1;
-
- *flagp = line->basic_block;
-
- return 0;
-}
diff --git a/libdw/dwarf_linecol.c b/libdw/dwarf_linecol.c
deleted file mode 100644
index 8a1228c..0000000
--- a/libdw/dwarf_linecol.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/* Return column in line.
- Copyright (C) 2004 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libdwP.h"
-
-
-int
-dwarf_linecol (Dwarf_Line *line, int *colp)
-{
- if (line == NULL)
- return -1;
-
- *colp = line->column;
-
- return 0;
-}
diff --git a/libdw/dwarf_lineendsequence.c b/libdw/dwarf_lineendsequence.c
deleted file mode 100644
index cea86aa..0000000
--- a/libdw/dwarf_lineendsequence.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/* Return true if record is for end of sequence.
- Copyright (C) 2004 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libdwP.h"
-
-
-int
-dwarf_lineendsequence (Dwarf_Line *line, bool *flagp)
-{
- if (line == NULL)
- return -1;
-
- *flagp = line->end_sequence;
-
- return 0;
-}
diff --git a/libdw/dwarf_lineepiloguebegin.c b/libdw/dwarf_lineepiloguebegin.c
deleted file mode 100644
index 9d80611..0000000
--- a/libdw/dwarf_lineepiloguebegin.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/* Return true if record is for beginning of epilogue.
- Copyright (C) 2004 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libdwP.h"
-
-
-int
-dwarf_lineepiloguebegin (Dwarf_Line *line, bool *flagp)
-{
- if (line == NULL)
- return -1;
-
- *flagp = line->epilogue_begin;
-
- return 0;
-}
diff --git a/libdw/dwarf_lineno.c b/libdw/dwarf_lineno.c
deleted file mode 100644
index 98840b1..0000000
--- a/libdw/dwarf_lineno.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/* Return line number.
- Copyright (C) 2004 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libdwP.h"
-
-
-int
-dwarf_lineno (Dwarf_Line *line, int *linep)
-{
- if (line == NULL)
- return -1;
-
- *linep = line->line;
-
- return 0;
-}
diff --git a/libdw/dwarf_lineprologueend.c b/libdw/dwarf_lineprologueend.c
deleted file mode 100644
index c7a0557..0000000
--- a/libdw/dwarf_lineprologueend.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/* Return true if record is for end of prologue.
- Copyright (C) 2004 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libdwP.h"
-
-
-int
-dwarf_lineprologueend (Dwarf_Line *line, bool *flagp)
-{
- if (line == NULL)
- return -1;
-
- *flagp = line->prologue_end;
-
- return 0;
-}
diff --git a/libdw/dwarf_linesrc.c b/libdw/dwarf_linesrc.c
deleted file mode 100644
index 6ecce93..0000000
--- a/libdw/dwarf_linesrc.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/* Find line information for address.
- Copyright (C) 2004 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libdwP.h"
-
-
-const char *
-dwarf_linesrc (Dwarf_Line *line, Dwarf_Word *mtime, Dwarf_Word *length)
-{
- if (line == NULL)
- return NULL;
-
- if (line->file >= line->files->nfiles)
- {
- __libdw_seterrno (DWARF_E_INVALID_DWARF);
- return NULL;
- }
-
- if (mtime != NULL)
- *mtime = line->files->info[line->file].mtime;
-
- if (length != NULL)
- *length = line->files->info[line->file].length;
-
- return line->files->info[line->file].name;
-}
diff --git a/libdw/dwarf_lowpc.c b/libdw/dwarf_lowpc.c
deleted file mode 100644
index 97ece03..0000000
--- a/libdw/dwarf_lowpc.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Return low PC attribute of DIE.
- Copyright (C) 2003, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <dwarf.h>
-#include "libdwP.h"
-
-
-int
-dwarf_lowpc (die, return_addr)
- Dwarf_Die *die;
- Dwarf_Addr *return_addr;
-{
- Dwarf_Attribute attr_mem;
-
- return INTUSE(dwarf_formaddr) (INTUSE(dwarf_attr) (die, DW_AT_low_pc,
- &attr_mem),
- return_addr);
-}
-INTDEF(dwarf_lowpc)
diff --git a/libdw/dwarf_macro_opcode.c b/libdw/dwarf_macro_opcode.c
deleted file mode 100644
index c40ebc7..0000000
--- a/libdw/dwarf_macro_opcode.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/* Return macro opcode.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libdwP.h"
-
-
-int
-dwarf_macro_opcode (Dwarf_Macro *macro, unsigned int *opcodep)
-{
- if (macro == NULL)
- return -1;
-
- *opcodep = macro->opcode;
-
- return 0;
-}
diff --git a/libdw/dwarf_macro_param1.c b/libdw/dwarf_macro_param1.c
deleted file mode 100644
index 409865f..0000000
--- a/libdw/dwarf_macro_param1.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/* Return first macro parameter.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libdwP.h"
-
-
-int
-dwarf_macro_param1 (Dwarf_Macro *macro, Dwarf_Word *paramp)
-{
- if (macro == NULL)
- return -1;
-
- *paramp = macro->param1;
-
- return 0;
-}
diff --git a/libdw/dwarf_macro_param2.c b/libdw/dwarf_macro_param2.c
deleted file mode 100644
index c1eff93..0000000
--- a/libdw/dwarf_macro_param2.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Return second macro parameter.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libdwP.h"
-
-
-int
-dwarf_macro_param2 (Dwarf_Macro *macro, Dwarf_Word *paramp, const char **strp)
-{
- if (macro == NULL)
- return -1;
-
- if (paramp != NULL)
- *paramp = macro->param2.u;
- if (strp != NULL)
- *strp = macro->param2.s;
-
- return 0;
-}
diff --git a/libdw/dwarf_nextcu.c b/libdw/dwarf_nextcu.c
deleted file mode 100644
index 9e5a96b..0000000
--- a/libdw/dwarf_nextcu.c
+++ /dev/null
@@ -1,175 +0,0 @@
-/* Advance to next CU header.
- Copyright (C) 2002, 2003, 2004, 2005, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libdwP.h>
-#include <dwarf.h>
-
-
-int
-dwarf_nextcu (dwarf, off, next_off, header_sizep, abbrev_offsetp,
- address_sizep, offset_sizep)
- Dwarf *dwarf;
- Dwarf_Off off;
- Dwarf_Off *next_off;
- size_t *header_sizep;
- Dwarf_Off *abbrev_offsetp;
- uint8_t *address_sizep;
- uint8_t *offset_sizep;
-{
- /* Maybe there has been an error before. */
- if (dwarf == NULL)
- return -1;
-
- /* If we reached the end before don't do anything. */
- if (off == (Dwarf_Off) -1l
- /* Make sure there is enough space in the .debug_info section
- for at least the initial word. We cannot test the rest since
- we don't know yet whether this is a 64-bit object or not. */
- || unlikely (off + 4 >= dwarf->sectiondata[IDX_debug_info]->d_size))
- {
- *next_off = (Dwarf_Off) -1l;
- return 1;
- }
-
- /* This points into the .debug_info section to the beginning of the
- CU entry. */
- char *bytes = (char *) dwarf->sectiondata[IDX_debug_info]->d_buf + off;
-
- /* The format of the CU header is described in dwarf2p1 7.5.1:
-
- 1. A 4-byte or 12-byte unsigned integer representing the length
- of the .debug_info contribution for that compilation unit, not
- including the length field itself. In the 32-bit DWARF format,
- this is a 4-byte unsigned integer (which must be less than
- 0xfffffff0); in the 64-bit DWARF format, this consists of the
- 4-byte value 0xffffffff followed by an 8-byte unsigned integer
- that gives the actual length (see Section 7.2.2).
-
- 2. A 2-byte unsigned integer representing the version of the
- DWARF information for that compilation unit. For DWARF Version
- 2.1, the value in this field is 2.
-
- 3. A 4-byte or 8-byte unsigned offset into the .debug_abbrev
- section. This offset associates the compilation unit with a
- particular set of debugging information entry abbreviations. In
- the 32-bit DWARF format, this is a 4-byte unsigned length; in
- the 64-bit DWARF format, this is an 8-byte unsigned length (see
- Section 7.4).
-
- 4. A 1-byte unsigned integer representing the size in bytes of
- an address on the target architecture. If the system uses
- segmented addressing, this value represents the size of the
- offset portion of an address. */
- uint64_t length = read_4ubyte_unaligned_inc (dwarf, bytes);
- size_t offset_size = 4;
- /* Lengths of 0xfffffff0 - 0xffffffff are escape codes. Oxffffffff is
- used to indicate that 64-bit dwarf information is being used, the
- other values are currently reserved. */
- if (length == DWARF3_LENGTH_64_BIT)
- offset_size = 8;
- else if (unlikely (length >= DWARF3_LENGTH_MIN_ESCAPE_CODE
- && length <= DWARF3_LENGTH_MAX_ESCAPE_CODE))
- {
- __libdw_seterrno (DWARF_E_INVALID_DWARF);
- return -1;
- }
-
- /* Now we know how large the header is. */
- if (unlikely (DIE_OFFSET_FROM_CU_OFFSET (off, offset_size)
- >= dwarf->sectiondata[IDX_debug_info]->d_size))
- {
- *next_off = -1;
- return 1;
- }
-
- if (length == DWARF3_LENGTH_64_BIT)
- /* This is a 64-bit DWARF format. */
- length = read_8ubyte_unaligned_inc (dwarf, bytes);
-
- /* Read the version stamp. Always a 16-bit value.
- XXX Do we need the value? */
- read_2ubyte_unaligned_inc (dwarf, bytes);
-
- /* Get offset in .debug_abbrev. Note that the size of the entry
- depends on whether this is a 32-bit or 64-bit DWARF definition. */
- uint64_t abbrev_offset;
- if (offset_size == 4)
- abbrev_offset = read_4ubyte_unaligned_inc (dwarf, bytes);
- else
- abbrev_offset = read_8ubyte_unaligned_inc (dwarf, bytes);
- if (abbrev_offsetp != NULL)
- *abbrev_offsetp = abbrev_offset;
-
- /* The address size. Always an 8-bit value. */
- uint8_t address_size = *bytes++;
- if (address_sizep != NULL)
- *address_sizep = address_size;
-
- /* Store the offset size. */
- if (offset_sizep != NULL)
- *offset_sizep = offset_size;
-
- /* Store the header length. */
- if (header_sizep != NULL)
- *header_sizep = (bytes
- - ((char *) dwarf->sectiondata[IDX_debug_info]->d_buf
- + off));
-
- /* See definition of DIE_OFFSET_FROM_CU_OFFSET macro
- for an explanation of the trick in this expression. */
- *next_off = off + 2 * offset_size - 4 + length;
-
- return 0;
-}
-INTDEF(dwarf_nextcu)
diff --git a/libdw/dwarf_offabbrev.c b/libdw/dwarf_offabbrev.c
deleted file mode 100644
index 2cac279..0000000
--- a/libdw/dwarf_offabbrev.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/* Get abbreviation at given offset.
- Copyright (C) 2004, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libdwP.h"
-
-
-int
-dwarf_offabbrev (Dwarf *dbg, Dwarf_Off offset, size_t *lengthp,
- Dwarf_Abbrev *abbrevp)
-{
- if (dbg == NULL)
- return -1;
-
- Dwarf_Abbrev *abbrev = __libdw_getabbrev (dbg, NULL, offset, lengthp,
- abbrevp);
-
- if (abbrev == NULL)
- return -1;
-
- return abbrev == DWARF_END_ABBREV ? 1 : 0;
-}
diff --git a/libdw/dwarf_offdie.c b/libdw/dwarf_offdie.c
deleted file mode 100644
index a9886f2..0000000
--- a/libdw/dwarf_offdie.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/* Return DIE at given offset.
- Copyright (C) 2002, 2003, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <string.h>
-#include "libdwP.h"
-
-
-Dwarf_Die *
-dwarf_offdie (dbg, offset, result)
- Dwarf *dbg;
- Dwarf_Off offset;
- Dwarf_Die *result;
-{
- if (dbg == NULL)
- return NULL;
-
- if (offset >= dbg->sectiondata[IDX_debug_info]->d_size)
- {
- __libdw_seterrno (DWARF_E_INVALID_DWARF);
- return NULL;
- }
-
- /* Clear the entire DIE structure. This signals we have not yet
- determined any of the information. */
- memset (result, '\0', sizeof (Dwarf_Die));
-
- result->addr = (char *) dbg->sectiondata[IDX_debug_info]->d_buf + offset;
-
- /* Get the CU. */
- result->cu = __libdw_findcu (dbg, offset);
- if (result->cu == NULL)
- {
- /* This should never happen. The input file is malformed. */
- __libdw_seterrno (DWARF_E_INVALID_DWARF);
- result = NULL;
- }
-
- return result;
-}
-INTDEF(dwarf_offdie)
diff --git a/libdw/dwarf_onearange.c b/libdw/dwarf_onearange.c
deleted file mode 100644
index 5a9b9f3..0000000
--- a/libdw/dwarf_onearange.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/* Return one of the address range entries.
- Copyright (C) 2004 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libdwP.h"
-
-
-Dwarf_Arange *
-dwarf_onearange (Dwarf_Aranges *aranges, size_t idx)
-{
- if (aranges == NULL)
- return NULL;
-
- if (idx >= aranges->naranges)
- {
- __libdw_seterrno (DWARF_E_INVALID_ARANGE_IDX);
- return NULL;
- }
-
- return &aranges->info[idx];
-}
diff --git a/libdw/dwarf_onesrcline.c b/libdw/dwarf_onesrcline.c
deleted file mode 100644
index 3e71630..0000000
--- a/libdw/dwarf_onesrcline.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/* Return one of the sources lines of a CU.
- Copyright (C) 2004 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libdwP.h"
-
-
-Dwarf_Line *
-dwarf_onesrcline (Dwarf_Lines *lines, size_t idx)
-{
- if (lines == NULL)
- return NULL;
-
- if (idx >= lines->nlines)
- {
- __libdw_seterrno (DWARF_E_INVALID_LINE_IDX);
- return NULL;
- }
-
- return &lines->info[idx];
-}
diff --git a/libdw/dwarf_ranges.c b/libdw/dwarf_ranges.c
deleted file mode 100644
index 89da0af..0000000
--- a/libdw/dwarf_ranges.c
+++ /dev/null
@@ -1,169 +0,0 @@
-/* Enumerate the PC ranges covered by a DIE.
- Copyright (C) 2005, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libdwP.h"
-#include <dwarf.h>
-#include <assert.h>
-
-
-ptrdiff_t
-dwarf_ranges (Dwarf_Die *die, ptrdiff_t offset, Dwarf_Addr *basep,
- Dwarf_Addr *startp, Dwarf_Addr *endp)
-{
- if (die == NULL)
- return -1;
-
- if (offset == 0
- /* Usually there is a single contiguous range. */
- && INTUSE(dwarf_highpc) (die, endp) == 0
- && INTUSE(dwarf_lowpc) (die, startp) == 0)
- /* A offset into .debug_ranges will never be 1, it must be at least a
- multiple of 4. So we can return 1 as a special case value to mark
- there are no ranges to look for on the next call. */
- return 1;
-
- if (offset == 1)
- return 0;
-
- /* We have to look for a noncontiguous range. */
-
- const Elf_Data *d = die->cu->dbg->sectiondata[IDX_debug_ranges];
- if (d == NULL)
- {
- __libdw_seterrno (DWARF_E_NO_DEBUG_RANGES);
- return -1;
- }
-
- if (offset == 0)
- {
- Dwarf_Attribute attr_mem;
- Dwarf_Attribute *attr = INTUSE(dwarf_attr) (die, DW_AT_ranges,
- &attr_mem);
- if (attr == NULL)
- return -1;
-
- /* Must have the form data4 or data8 which act as an offset. */
- Dwarf_Word start_offset;
- if (INTUSE(dwarf_formudata) (attr, &start_offset) != 0)
- return -1;
-
- offset = start_offset;
- assert ((Dwarf_Word) offset == start_offset);
-
- /* Fetch the CU's base address. */
- Dwarf_Die cudie = CUDIE (attr->cu);
-
- /* Find the base address of the compilation unit. It will
- normally be specified by DW_AT_low_pc. In DWARF-3 draft 4,
- the base address could be overridden by DW_AT_entry_pc. It's
- been removed, but GCC emits DW_AT_entry_pc and not DW_AT_lowpc
- for compilation units with discontinuous ranges. */
- if (unlikely (INTUSE(dwarf_lowpc) (&cudie, basep) != 0)
- && INTUSE(dwarf_formaddr) (INTUSE(dwarf_attr) (&cudie,
- DW_AT_entry_pc,
- &attr_mem),
- basep) != 0)
- {
- if (INTUSE(dwarf_errno) () == 0)
- {
- invalid:
- __libdw_seterrno (DWARF_E_INVALID_DWARF);
- }
- return -1;
- }
- }
- else if (offset < 0 || (size_t) offset >= d->d_size)
- {
- __libdw_seterrno (DWARF_E_INVALID_OFFSET);
- return -1l;
- }
-
- unsigned char *readp = d->d_buf + offset;
-
- next:
- if ((unsigned char *) d->d_buf + d->d_size - readp
- < die->cu->address_size * 2)
- goto invalid;
-
- Dwarf_Addr begin;
- Dwarf_Addr end;
- if (die->cu->address_size == 8)
- {
- begin = read_8ubyte_unaligned_inc (die->cu->dbg, readp);
- end = read_8ubyte_unaligned_inc (die->cu->dbg, readp);
- if (begin == (uint64_t) -1l) /* Base address entry. */
- {
- *basep = end;
- goto next;
- }
- }
- else
- {
- begin = read_4ubyte_unaligned_inc (die->cu->dbg, readp);
- end = read_4ubyte_unaligned_inc (die->cu->dbg, readp);
- if (begin == (uint32_t) -1) /* Base address entry. */
- {
- *basep = end;
- goto next;
- }
- }
-
- if (begin == 0 && end == 0) /* End of list entry. */
- return 0;
-
- /* We have an address range entry. */
- *startp = *basep + begin;
- *endp = *basep + end;
- return readp - (unsigned char *) d->d_buf;
-}
-INTDEF (dwarf_ranges)
diff --git a/libdw/dwarf_siblingof.c b/libdw/dwarf_siblingof.c
deleted file mode 100644
index 0d42717..0000000
--- a/libdw/dwarf_siblingof.c
+++ /dev/null
@@ -1,161 +0,0 @@
-/* Return sibling of given DIE.
- Copyright (C) 2003, 2004, 2005, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libdwP.h"
-#include <dwarf.h>
-#include <string.h>
-
-
-int
-dwarf_siblingof (die, result)
- Dwarf_Die *die;
- Dwarf_Die *result;
-{
- /* Ignore previous errors. */
- if (die == NULL)
- return -1;
-
- if (result == NULL)
- return -1;
-
- if (result != die)
- result->addr = NULL;
-
- unsigned int level = 0;
-
- /* Copy of the current DIE. */
- Dwarf_Die this_die = *die;
- /* Temporary attributes we create. */
- Dwarf_Attribute sibattr;
- /* Copy of the CU in the request. */
- sibattr.cu = this_die.cu;
- /* That's the address we start looking. */
- unsigned char *addr = this_die.addr;
- /* End of the buffer. */
- unsigned char *endp
- = ((unsigned char *) sibattr.cu->dbg->sectiondata[IDX_debug_info]->d_buf
- + sibattr.cu->end);
-
- /* Search for the beginning of the next die on this level. We
- must not return the dies for children of the given die. */
- do
- {
- /* Find the end of the DIE or the sibling attribute. */
- addr = __libdw_find_attr (&this_die, DW_AT_sibling, &sibattr.code,
- &sibattr.form);
- if (sibattr.code == DW_AT_sibling)
- {
- Dwarf_Off offset;
- sibattr.valp = addr;
- if (unlikely (__libdw_formref (&sibattr, &offset) != 0))
- /* Something went wrong. */
- return -1;
-
- /* Compute the next address. */
- addr = ((unsigned char *)
- sibattr.cu->dbg->sectiondata[IDX_debug_info]->d_buf
- + sibattr.cu->start + offset);
- }
- else if (unlikely (addr == NULL)
- || unlikely (this_die.abbrev == DWARF_END_ABBREV))
- return -1;
- else if (this_die.abbrev->has_children)
- /* This abbreviation has children. */
- ++level;
-
-
- while (1)
- {
- /* Make sure we are still in range. Some producers might skip
- the trailing NUL bytes. */
- if (addr >= endp)
- return 1;
-
- if (*addr != '\0')
- break;
-
- if (level-- == 0)
- {
- if (result != die)
- result->addr = addr;
- /* No more sibling at all. */
- return 1;
- }
-
- ++addr;
- }
-
- /* Initialize the 'current DIE'. */
- this_die.addr = addr;
- this_die.abbrev = NULL;
- }
- while (level > 0);
-
- /* Maybe we reached the end of the CU. */
- if (addr >= endp)
- return 1;
-
- /* Clear the entire DIE structure. This signals we have not yet
- determined any of the information. */
- memset (result, '\0', sizeof (Dwarf_Die));
-
- /* We have the address. */
- result->addr = addr;
-
- /* Same CU as the parent. */
- result->cu = sibattr.cu;
-
- return 0;
-}
-INTDEF(dwarf_siblingof)
diff --git a/libdw/dwarf_srclang.c b/libdw/dwarf_srclang.c
deleted file mode 100644
index 2efa095..0000000
--- a/libdw/dwarf_srclang.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Return source language attribute of DIE.
- Copyright (C) 2003, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <dwarf.h>
-#include "libdwP.h"
-
-
-int
-dwarf_srclang (die)
- Dwarf_Die *die;
-{
- Dwarf_Attribute attr_mem;
- Dwarf_Word value;
-
- return INTUSE(dwarf_formudata) (INTUSE(dwarf_attr) (die, DW_AT_language,
- &attr_mem),
- &value) == 0 ? (int) value : -1;
-}
diff --git a/libdw/dwarf_tag.c b/libdw/dwarf_tag.c
deleted file mode 100644
index 15183d2..0000000
--- a/libdw/dwarf_tag.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/* Return tag of given DIE.
- Copyright (C) 2003, 2004, 2005, 2006, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libdwP.h"
-
-
-Dwarf_Abbrev *
-internal_function
-__libdw_findabbrev (struct Dwarf_CU *cu, unsigned int code)
-{
- Dwarf_Abbrev *abb;
-
- /* See whether the entry is already in the hash table. */
- abb = Dwarf_Abbrev_Hash_find (&cu->abbrev_hash, code, NULL);
- if (abb == NULL)
- while (cu->last_abbrev_offset != (size_t) -1l)
- {
- size_t length;
-
- /* Find the next entry. It gets automatically added to the
- hash table. */
- abb = __libdw_getabbrev (cu->dbg, cu, cu->last_abbrev_offset, &length,
- NULL);
- if (abb == NULL || abb == DWARF_END_ABBREV)
- {
- /* Make sure we do not try to search for it again. */
- cu->last_abbrev_offset = (size_t) -1l;
- return DWARF_END_ABBREV;
- }
-
- cu->last_abbrev_offset += length;
-
- /* Is this the code we are looking for? */
- if (abb->code == code)
- break;
- }
-
- return abb;
-}
-
-
-int
-dwarf_tag (die)
- Dwarf_Die *die;
-{
- /* Do we already know the abbreviation? */
- if (die->abbrev == NULL)
- {
- /* Get the abbreviation code. */
- unsigned int u128;
- const unsigned char *addr = die->addr;
- get_uleb128 (u128, addr);
-
- /* Find the abbreviation. */
- die->abbrev = __libdw_findabbrev (die->cu, u128);
- }
-
- if (unlikely (die->abbrev == DWARF_END_ABBREV))
- {
- __libdw_seterrno (DWARF_E_INVALID_DWARF);
- return DW_TAG_invalid;
- }
-
- return die->abbrev->tag;
-}
-INTDEF(dwarf_tag)
diff --git a/libdw/dwarf_whatattr.c b/libdw/dwarf_whatattr.c
deleted file mode 100644
index 9b8bddf..0000000
--- a/libdw/dwarf_whatattr.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Return attribute code of given attribute.
- Copyright (C) 2003 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <dwarf.h>
-#include "libdwP.h"
-
-
-unsigned int
-dwarf_whatattr (attr)
- Dwarf_Attribute *attr;
-{
- return attr == NULL ? 0 : attr->code;
-}
diff --git a/libdw/dwarf_whatform.c b/libdw/dwarf_whatform.c
deleted file mode 100644
index 8a9076b..0000000
--- a/libdw/dwarf_whatform.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Return form code of given attribute.
- Copyright (C) 2003 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <dwarf.h>
-#include "libdwP.h"
-
-
-unsigned int
-dwarf_whatform (attr)
- Dwarf_Attribute *attr;
-{
- return attr == NULL ? 0 : attr->form;
-}
diff --git a/libdw/libdw.h b/libdw/libdw.h
deleted file mode 100644
index 3f3e5a0..0000000
--- a/libdw/libdw.h
+++ /dev/null
@@ -1,665 +0,0 @@
-/* Interfaces for libdw.
- Copyright (C) 2002, 2004, 2005, 2006, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifndef _LIBDW_H
-#define _LIBDW_H 1
-
-#include <gelf.h>
-#include <stdbool.h>
-#include <stddef.h>
-
-
-#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)
-# define __nonnull_attribute__(...) __attribute__ ((__nonnull__ (__VA_ARGS__)))
-# define __deprecated_attribute__ __attribute__ ((__deprecated__))
-#else
-# define __nonnull_attribute__(args...)
-# define __deprecated_attribute__
-#endif
-
-
-#ifdef __GNUC_STDC_INLINE__
-# define __libdw_extern_inline extern __inline __attribute__ ((__gnu_inline__))
-#else
-# define __libdw_extern_inline extern __inline
-#endif
-
-
-/* Mode for the session. */
-typedef enum
- {
- DWARF_C_READ, /* Read .. */
- DWARF_C_RDWR, /* Read and write .. */
- DWARF_C_WRITE, /* Write .. */
- }
-Dwarf_Cmd;
-
-
-/* Callback results. */
-enum
-{
- DWARF_CB_OK = 0,
- DWARF_CB_ABORT
-};
-
-
-/* Error values. */
-enum
- {
- DW_TAG_invalid = 0
-#define DW_TAG_invalid DW_TAG_invalid
- };
-
-
-/* Type for offset in DWARF file. */
-typedef GElf_Off Dwarf_Off;
-
-/* Type for address in DWARF file. */
-typedef GElf_Addr Dwarf_Addr;
-
-/* Integer types. Big enough to hold any numeric value. */
-typedef GElf_Xword Dwarf_Word;
-typedef GElf_Sxword Dwarf_Sword;
-/* For the times we know we do not need that much. */
-typedef GElf_Half Dwarf_Half;
-
-
-/* DWARF abbreviation record. */
-typedef struct Dwarf_Abbrev Dwarf_Abbrev;
-
-/* Returned to show the last DIE has be returned. */
-#define DWARF_END_ABBREV ((Dwarf_Abbrev *) -1l)
-
-/* Source code line information for CU. */
-typedef struct Dwarf_Lines_s Dwarf_Lines;
-
-/* One source code line information. */
-typedef struct Dwarf_Line_s Dwarf_Line;
-
-/* Source file information. */
-typedef struct Dwarf_Files_s Dwarf_Files;
-
-/* One address range record. */
-typedef struct Dwarf_Arange_s Dwarf_Arange;
-
-/* Address ranges of a file. */
-typedef struct Dwarf_Aranges_s Dwarf_Aranges;
-
-/* CU representation. */
-struct Dwarf_CU;
-
-/* Macro information. */
-typedef struct Dwarf_Macro_s Dwarf_Macro;
-
-/* Attribute representation. */
-typedef struct
-{
- unsigned int code;
- unsigned int form;
- unsigned char *valp;
- struct Dwarf_CU *cu;
-} Dwarf_Attribute;
-
-
-/* Data block representation. */
-typedef struct
-{
- Dwarf_Word length;
- unsigned char *data;
-} Dwarf_Block;
-
-
-/* DIE information. */
-typedef struct
-{
- /* The offset can be computed from the address. */
- void *addr;
- struct Dwarf_CU *cu;
- Dwarf_Abbrev *abbrev;
- // XXX We'll see what other information will be needed.
- long int padding__;
-} Dwarf_Die;
-
-/* Returned to show the last DIE has be returned. */
-#define DWARF_END_DIE ((Dwarf_Die *) -1l)
-
-
-/* Global symbol information. */
-typedef struct
-{
- Dwarf_Off cu_offset;
- Dwarf_Off die_offset;
- const char *name;
-} Dwarf_Global;
-
-
-/* One operation in a DWARF location expression.
- A location expression is an array of these. */
-typedef struct
-{
- uint8_t atom; /* Operation */
- Dwarf_Word number; /* Operand */
- Dwarf_Word number2; /* Possible second operand */
- Dwarf_Word offset; /* Offset in location expression */
-} Dwarf_Op;
-
-
-/* Handle for debug sessions. */
-typedef struct Dwarf Dwarf;
-
-
-/* Out-Of-Memory handler. */
-#if __GNUC__ < 4
-typedef void (*Dwarf_OOM) (void);
-#else
-typedef void (*__attribute__ ((noreturn)) Dwarf_OOM) (void);
-#endif
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Create a handle for a new debug session. */
-extern Dwarf *dwarf_begin (int fildes, Dwarf_Cmd cmd);
-
-/* Create a handle for a new debug session for an ELF file. */
-extern Dwarf *dwarf_begin_elf (Elf *elf, Dwarf_Cmd cmd, Elf_Scn *scngrp);
-
-/* Retrieve ELF descriptor used for DWARF access. */
-extern Elf *dwarf_getelf (Dwarf *dwarf);
-
-/* Release debugging handling context. */
-extern int dwarf_end (Dwarf *dwarf);
-
-
-/* Get the data block for the .debug_info section. */
-extern Elf_Data *dwarf_getscn_info (Dwarf *dwarf);
-
-/* Read the header for the DWARF CU header. */
-extern int dwarf_nextcu (Dwarf *dwarf, Dwarf_Off off, Dwarf_Off *next_off,
- size_t *header_sizep, Dwarf_Off *abbrev_offsetp,
- uint8_t *address_sizep, uint8_t *offset_sizep)
- __nonnull_attribute__ (3);
-
-
-/* Return DIE at given offset. */
-extern Dwarf_Die *dwarf_offdie (Dwarf *dbg, Dwarf_Off offset,
- Dwarf_Die *result) __nonnull_attribute__ (3);
-
-/* Return offset of DIE. */
-extern Dwarf_Off dwarf_dieoffset (Dwarf_Die *die);
-
-/* Return offset of DIE in CU. */
-extern Dwarf_Off dwarf_cuoffset (Dwarf_Die *die);
-
-/* Return CU DIE containing given DIE. */
-extern Dwarf_Die *dwarf_diecu (Dwarf_Die *die, Dwarf_Die *result,
- uint8_t *address_sizep, uint8_t *offset_sizep)
- __nonnull_attribute__ (2);
-
-/* Return CU DIE containing given address. */
-extern Dwarf_Die *dwarf_addrdie (Dwarf *dbg, Dwarf_Addr addr,
- Dwarf_Die *result) __nonnull_attribute__ (3);
-
-/* Return child of current DIE. */
-extern int dwarf_child (Dwarf_Die *die, Dwarf_Die *result)
- __nonnull_attribute__ (2);
-
-/* Locates the first sibling of DIE and places it in RESULT.
- Returns 0 if a sibling was found, -1 if something went wrong.
- Returns 1 if no sibling could be found and, if RESULT is not
- the same as DIE, it sets RESULT->addr to the address of the
- (non-sibling) DIE that follows this one, or NULL if this DIE
- was the last one in the cokmpilation unit. */
-extern int dwarf_siblingof (Dwarf_Die *die, Dwarf_Die *result)
- __nonnull_attribute__ (2);
-
-/* Check whether the DIE has children. */
-extern int dwarf_haschildren (Dwarf_Die *die) __nonnull_attribute__ (1);
-
-/* Walks the attributes of DIE, starting at the one OFFSET bytes in,
- calling the CALLBACK function for each one. Stops if the callback
- function ever returns a value other than DWARF_CB_OK and returns the
- offset of the offending attribute. If the end of the attributes
- is reached 1 is returned. If something goes wrong -1 is returned and
- the dwarf error number is set. */
-extern ptrdiff_t dwarf_getattrs (Dwarf_Die *die,
- int (*callback) (Dwarf_Attribute *, void *),
- void *arg, ptrdiff_t offset)
- __nonnull_attribute__ (2);
-
-/* Return tag of given DIE. */
-extern int dwarf_tag (Dwarf_Die *die) __nonnull_attribute__ (1);
-
-
-/* Return specific attribute of DIE. */
-extern Dwarf_Attribute *dwarf_attr (Dwarf_Die *die, unsigned int search_name,
- Dwarf_Attribute *result)
- __nonnull_attribute__ (3);
-
-/* Check whether given DIE has specific attribute. */
-extern int dwarf_hasattr (Dwarf_Die *die, unsigned int search_name);
-
-/* These are the same as dwarf_attr and dwarf_hasattr, respectively,
- but they resolve an indirect attribute through DW_AT_abstract_origin. */
-extern Dwarf_Attribute *dwarf_attr_integrate (Dwarf_Die *die,
- unsigned int search_name,
- Dwarf_Attribute *result)
- __nonnull_attribute__ (3);
-extern int dwarf_hasattr_integrate (Dwarf_Die *die, unsigned int search_name);
-
-
-
-
-/* Check whether given attribute has specific form. */
-extern int dwarf_hasform (Dwarf_Attribute *attr, unsigned int search_form);
-
-/* Return attribute code of given attribute. */
-extern unsigned int dwarf_whatattr (Dwarf_Attribute *attr);
-
-/* Return form code of given attribute. */
-extern unsigned int dwarf_whatform (Dwarf_Attribute *attr);
-
-
-/* Return string associated with given attribute. */
-extern const char *dwarf_formstring (Dwarf_Attribute *attrp);
-
-/* Return unsigned constant represented by attribute. */
-extern int dwarf_formudata (Dwarf_Attribute *attr, Dwarf_Word *return_uval)
- __nonnull_attribute__ (2);
-
-/* Return signed constant represented by attribute. */
-extern int dwarf_formsdata (Dwarf_Attribute *attr, Dwarf_Sword *return_uval)
- __nonnull_attribute__ (2);
-
-/* Return address represented by attribute. */
-extern int dwarf_formaddr (Dwarf_Attribute *attr, Dwarf_Addr *return_addr)
- __nonnull_attribute__ (2);
-
-/* This function is deprecated. Always use dwarf_formref_die instead.
- Return reference offset represented by attribute. */
-extern int dwarf_formref (Dwarf_Attribute *attr, Dwarf_Off *return_offset)
- __nonnull_attribute__ (2) __deprecated_attribute__;
-
-/* Look up the DIE in a reference-form attribute. */
-extern Dwarf_Die *dwarf_formref_die (Dwarf_Attribute *attr, Dwarf_Die *die_mem)
- __nonnull_attribute__ (2);
-
-/* Return block represented by attribute. */
-extern int dwarf_formblock (Dwarf_Attribute *attr, Dwarf_Block *return_block)
- __nonnull_attribute__ (2);
-
-/* Return flag represented by attribute. */
-extern int dwarf_formflag (Dwarf_Attribute *attr, bool *return_bool)
- __nonnull_attribute__ (2);
-
-
-/* Simplified attribute value access functions. */
-
-/* Return string in name attribute of DIE. */
-extern const char *dwarf_diename (Dwarf_Die *die);
-
-/* Return high PC attribute of DIE. */
-extern int dwarf_highpc (Dwarf_Die *die, Dwarf_Addr *return_addr)
- __nonnull_attribute__ (2);
-
-/* Return low PC attribute of DIE. */
-extern int dwarf_lowpc (Dwarf_Die *die, Dwarf_Addr *return_addr)
- __nonnull_attribute__ (2);
-
-/* Return entry_pc or low_pc attribute of DIE. */
-extern int dwarf_entrypc (Dwarf_Die *die, Dwarf_Addr *return_addr)
- __nonnull_attribute__ (2);
-
-/* Return 1 if DIE's lowpc/highpc or ranges attributes match the PC address,
- 0 if not, or -1 for errors. */
-extern int dwarf_haspc (Dwarf_Die *die, Dwarf_Addr pc);
-
-/* Enumerate the PC address ranges covered by this DIE, covering all
- addresses where dwarf_haspc returns true. In the first call OFFSET
- should be zero and *BASEP need not be initialized. Returns -1 for
- errors, zero when there are no more address ranges to report, or a
- nonzero OFFSET value to pass to the next call. Each subsequent call
- must preserve *BASEP from the prior call. Successful calls fill in
- *STARTP and *ENDP with a contiguous address range. */
-extern ptrdiff_t dwarf_ranges (Dwarf_Die *die,
- ptrdiff_t offset, Dwarf_Addr *basep,
- Dwarf_Addr *startp, Dwarf_Addr *endp);
-
-
-/* Return byte size attribute of DIE. */
-extern int dwarf_bytesize (Dwarf_Die *die);
-
-/* Return bit size attribute of DIE. */
-extern int dwarf_bitsize (Dwarf_Die *die);
-
-/* Return bit offset attribute of DIE. */
-extern int dwarf_bitoffset (Dwarf_Die *die);
-
-/* Return array order attribute of DIE. */
-extern int dwarf_arrayorder (Dwarf_Die *die);
-
-/* Return source language attribute of DIE. */
-extern int dwarf_srclang (Dwarf_Die *die);
-
-
-/* Get abbreviation at given offset for given DIE. */
-extern Dwarf_Abbrev *dwarf_getabbrev (Dwarf_Die *die, Dwarf_Off offset,
- size_t *lengthp);
-
-/* Get abbreviation at given offset in .debug_abbrev section. */
-extern int dwarf_offabbrev (Dwarf *dbg, Dwarf_Off offset, size_t *lengthp,
- Dwarf_Abbrev *abbrevp)
- __nonnull_attribute__ (4);
-
-/* Get abbreviation code. */
-extern unsigned int dwarf_getabbrevcode (Dwarf_Abbrev *abbrev);
-
-/* Get abbreviation tag. */
-extern unsigned int dwarf_getabbrevtag (Dwarf_Abbrev *abbrev);
-
-/* Return true if abbreviation is children flag set. */
-extern int dwarf_abbrevhaschildren (Dwarf_Abbrev *abbrev);
-
-/* Get number of attributes of abbreviation. */
-extern int dwarf_getattrcnt (Dwarf_Abbrev *abbrev, size_t *attrcntp)
- __nonnull_attribute__ (2);
-
-/* Get specific attribute of abbreviation. */
-extern int dwarf_getabbrevattr (Dwarf_Abbrev *abbrev, size_t idx,
- unsigned int *namep, unsigned int *formp,
- Dwarf_Off *offset);
-
-
-/* Get string from-debug_str section. */
-extern const char *dwarf_getstring (Dwarf *dbg, Dwarf_Off offset,
- size_t *lenp);
-
-
-/* Get public symbol information. */
-extern ptrdiff_t dwarf_getpubnames (Dwarf *dbg,
- int (*callback) (Dwarf *, Dwarf_Global *,
- void *),
- void *arg, ptrdiff_t offset)
- __nonnull_attribute__ (2);
-
-
-/* Get source file information for CU. */
-extern int dwarf_getsrclines (Dwarf_Die *cudie, Dwarf_Lines **lines,
- size_t *nlines) __nonnull_attribute__ (2, 3);
-
-/* Return one of the source lines of the CU. */
-extern Dwarf_Line *dwarf_onesrcline (Dwarf_Lines *lines, size_t idx);
-
-/* Get the file source files used in the CU. */
-extern int dwarf_getsrcfiles (Dwarf_Die *cudie, Dwarf_Files **files,
- size_t *nfiles)
- __nonnull_attribute__ (2);
-
-
-/* Get source for address in CU. */
-extern Dwarf_Line *dwarf_getsrc_die (Dwarf_Die *cudie, Dwarf_Addr addr);
-
-/* Get source for file and line number. */
-extern int dwarf_getsrc_file (Dwarf *dbg, const char *fname, int line, int col,
- Dwarf_Line ***srcsp, size_t *nsrcs)
- __nonnull_attribute__ (2, 5, 6);
-
-
-/* Return line address. */
-extern int dwarf_lineaddr (Dwarf_Line *line, Dwarf_Addr *addrp);
-
-/* Return line number. */
-extern int dwarf_lineno (Dwarf_Line *line, int *linep)
- __nonnull_attribute__ (2);
-
-/* Return column in line. */
-extern int dwarf_linecol (Dwarf_Line *line, int *colp)
- __nonnull_attribute__ (2);
-
-/* Return true if record is for beginning of a statement. */
-extern int dwarf_linebeginstatement (Dwarf_Line *line, bool *flagp)
- __nonnull_attribute__ (2);
-
-/* Return true if record is for end of sequence. */
-extern int dwarf_lineendsequence (Dwarf_Line *line, bool *flagp)
- __nonnull_attribute__ (2);
-
-/* Return true if record is for beginning of a basic block. */
-extern int dwarf_lineblock (Dwarf_Line *line, bool *flagp)
- __nonnull_attribute__ (2);
-
-/* Return true if record is for end of prologue. */
-extern int dwarf_lineprologueend (Dwarf_Line *line, bool *flagp)
- __nonnull_attribute__ (2);
-
-/* Return true if record is for beginning of epilogue. */
-extern int dwarf_lineepiloguebegin (Dwarf_Line *line, bool *flagp)
- __nonnull_attribute__ (2);
-
-
-/* Find line information for address. */
-extern const char *dwarf_linesrc (Dwarf_Line *line,
- Dwarf_Word *mtime, Dwarf_Word *length);
-
-/* Return file information. */
-extern const char *dwarf_filesrc (Dwarf_Files *file, size_t idx,
- Dwarf_Word *mtime, Dwarf_Word *length);
-
-/* Return the directory list used in the file information extracted.
- (*RESULT)[0] is the CU's DW_AT_comp_dir value, and may be null.
- (*RESULT)[0..*NDIRS-1] are the compile-time include directory path
- encoded by the compiler. */
-extern int dwarf_getsrcdirs (Dwarf_Files *files,
- const char *const **result, size_t *ndirs)
- __nonnull_attribute__ (2, 3);
-
-
-/* Return location expression, decoded as a list of operations. */
-extern int dwarf_getlocation (Dwarf_Attribute *attr, Dwarf_Op **expr,
- size_t *exprlen) __nonnull_attribute__ (2, 3);
-
-/* Return location expressions. If the attribute uses a location list,
- ADDRESS selects the relevant location expressions from the list.
- There can be multiple matches, resulting in multiple expressions to
- return. EXPRS and EXPRLENS are parallel arrays of NLOCS slots to
- fill in. Returns the number of locations filled in, or -1 for
- errors. If EXPRS is a null pointer, stores nothing and returns the
- total number of locations. A return value of zero means that the
- location list indicated no value is accessible. */
-extern int dwarf_getlocation_addr (Dwarf_Attribute *attr, Dwarf_Addr address,
- Dwarf_Op **exprs, size_t *exprlens,
- size_t nlocs);
-
-
-/* Return scope DIEs containing PC address.
- Sets *SCOPES to a malloc'd array of Dwarf_Die structures,
- and returns the number of elements in the array.
- (*SCOPES)[0] is the DIE for the innermost scope containing PC,
- (*SCOPES)[1] is the DIE for the scope containing that scope, and so on.
- Returns -1 for errors or 0 if no scopes match PC. */
-extern int dwarf_getscopes (Dwarf_Die *cudie, Dwarf_Addr pc,
- Dwarf_Die **scopes);
-
-/* Return scope DIEs containing the given DIE.
- Sets *SCOPES to a malloc'd array of Dwarf_Die structures,
- and returns the number of elements in the array.
- (*SCOPES)[0] is a copy of DIE.
- (*SCOPES)[1] is the DIE for the scope containing that scope, and so on.
- Returns -1 for errors or 0 if DIE is not found in any scope entry. */
-extern int dwarf_getscopes_die (Dwarf_Die *die, Dwarf_Die **scopes);
-
-
-/* Search SCOPES[0..NSCOPES-1] for a variable called NAME.
- Ignore the first SKIP_SHADOWS scopes that match the name.
- If MATCH_FILE is not null, accept only declaration in that source file;
- if MATCH_LINENO or MATCH_LINECOL are also nonzero, accept only declaration
- at that line and column.
-
- If successful, fill in *RESULT with the DIE of the variable found,
- and return N where SCOPES[N] is the scope defining the variable.
- Return -1 for errors or -2 for no matching variable found. */
-extern int dwarf_getscopevar (Dwarf_Die *scopes, int nscopes,
- const char *name, int skip_shadows,
- const char *match_file,
- int match_lineno, int match_linecol,
- Dwarf_Die *result);
-
-
-
-/* Return list address ranges. */
-extern int dwarf_getaranges (Dwarf *dbg, Dwarf_Aranges **aranges,
- size_t *naranges)
- __nonnull_attribute__ (2);
-
-/* Return one of the address range entries. */
-extern Dwarf_Arange *dwarf_onearange (Dwarf_Aranges *aranges, size_t idx);
-
-/* Return information in address range record. */
-extern int dwarf_getarangeinfo (Dwarf_Arange *arange, Dwarf_Addr *addrp,
- Dwarf_Word *lengthp, Dwarf_Off *offsetp);
-
-/* Get address range which includes given address. */
-extern Dwarf_Arange *dwarf_getarange_addr (Dwarf_Aranges *aranges,
- Dwarf_Addr addr);
-
-
-
-/* Get functions in CUDIE. */
-extern ptrdiff_t dwarf_getfuncs (Dwarf_Die *cudie,
- int (*callback) (Dwarf_Die *, void *),
- void *arg, ptrdiff_t offset);
-
-
-/* Return file name containing definition of the given declaration. */
-extern const char *dwarf_decl_file (Dwarf_Die *decl);
-
-/* Get line number of beginning of given declaration. */
-extern int dwarf_decl_line (Dwarf_Die *decl, int *linep)
- __nonnull_attribute__ (2);
-
-/* Get column number of beginning of given declaration. */
-extern int dwarf_decl_column (Dwarf_Die *decl, int *colp)
- __nonnull_attribute__ (2);
-
-
-/* Return nonzero if given function is an abstract inline definition. */
-extern int dwarf_func_inline (Dwarf_Die *func);
-
-/* Find each concrete inlined instance of the abstract inline definition. */
-extern int dwarf_func_inline_instances (Dwarf_Die *func,
- int (*callback) (Dwarf_Die *, void *),
- void *arg);
-
-
-/* Find the appropriate PC location or locations for function entry
- breakpoints for the given DW_TAG_subprogram DIE. Returns -1 for errors.
- On success, returns the number of breakpoint locations (never zero)
- and sets *BKPTS to a malloc'd vector of addresses. */
-extern int dwarf_entry_breakpoints (Dwarf_Die *die, Dwarf_Addr **bkpts);
-
-
-/* Call callback function for each of the macro information entry for
- the CU. */
-extern ptrdiff_t dwarf_getmacros (Dwarf_Die *cudie,
- int (*callback) (Dwarf_Macro *, void *),
- void *arg, ptrdiff_t offset)
- __nonnull_attribute__ (2);
-
-/* Return macro opcode. */
-extern int dwarf_macro_opcode (Dwarf_Macro *macro, unsigned int *opcodep)
- __nonnull_attribute__ (2);
-
-/* Return first macro parameter. */
-extern int dwarf_macro_param1 (Dwarf_Macro *macro, Dwarf_Word *paramp)
- __nonnull_attribute__ (2);
-
-/* Return second macro parameter. */
-extern int dwarf_macro_param2 (Dwarf_Macro *macro, Dwarf_Word *paramp,
- const char **strp);
-
-
-/* Return error code of last failing function call. This value is kept
- separately for each thread. */
-extern int dwarf_errno (void);
-
-/* Return error string for ERROR. If ERROR is zero, return error string
- for most recent error or NULL is none occurred. If ERROR is -1 the
- behaviour is similar to the last case except that not NULL but a legal
- string is returned. */
-extern const char *dwarf_errmsg (int err);
-
-
-/* Register new Out-Of-Memory handler. The old handler is returned. */
-extern Dwarf_OOM dwarf_new_oom_handler (Dwarf *dbg, Dwarf_OOM handler);
-
-
-/* Inline optimizations. */
-#ifdef __OPTIMIZE__
-/* Return attribute code of given attribute. */
-__libdw_extern_inline unsigned int
-dwarf_whatattr (Dwarf_Attribute *attr)
-{
- return attr == NULL ? 0 : attr->code;
-}
-
-/* Return attribute code of given attribute. */
-__libdw_extern_inline unsigned int
-dwarf_whatform (Dwarf_Attribute *attr)
-{
- return attr == NULL ? 0 : attr->form;
-}
-#endif /* Optimize. */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* libdw.h */
diff --git a/libdw/libdw.map b/libdw/libdw.map
deleted file mode 100644
index eb3abc2..0000000
--- a/libdw/libdw.map
+++ /dev/null
@@ -1,196 +0,0 @@
-ELFUTILS_0 { };
-ELFUTILS_0.122 {
- global:
- dwarf_abbrevhaschildren;
- dwarf_addrdie;
- dwarf_arrayorder;
- dwarf_attr;
- dwarf_attr_integrate;
- dwarf_begin;
- dwarf_begin_elf;
- dwarf_bitoffset;
- dwarf_bitsize;
- dwarf_bytesize;
- dwarf_child;
- dwarf_cuoffset;
- dwarf_decl_column;
- dwarf_decl_file;
- dwarf_decl_line;
- dwarf_diecu;
- dwarf_diename;
- dwarf_dieoffset;
- dwarf_end;
- dwarf_entry_breakpoints;
- dwarf_entrypc;
- dwarf_errmsg;
- dwarf_errno;
- dwarf_filesrc;
- dwarf_formaddr;
- dwarf_formblock;
- dwarf_formflag;
- dwarf_formref;
- dwarf_formref_die;
- dwarf_formsdata;
- dwarf_formstring;
- dwarf_formudata;
- dwarf_func_inline;
- dwarf_func_inline_instances;
- dwarf_getabbrev;
- dwarf_getabbrevattr;
- dwarf_getabbrevcode;
- dwarf_getabbrevtag;
- dwarf_getarange_addr;
- dwarf_getarangeinfo;
- dwarf_getaranges;
- dwarf_getattrcnt;
- dwarf_getattrs;
- dwarf_getfuncs;
- dwarf_getlocation;
- dwarf_getlocation_addr;
- dwarf_getmacros;
- dwarf_getpubnames;
- dwarf_getscn_info;
- dwarf_getscopes;
- dwarf_getscopes_die;
- dwarf_getscopevar;
- dwarf_getsrc_die;
- dwarf_getsrc_file;
- dwarf_getsrcfiles;
- dwarf_getsrclines;
- dwarf_getstring;
- dwarf_hasattr;
- dwarf_hasattr_integrate;
- dwarf_haschildren;
- dwarf_hasform;
- dwarf_haspc;
- dwarf_highpc;
- dwarf_lineaddr;
- dwarf_linebeginstatement;
- dwarf_lineblock;
- dwarf_linecol;
- dwarf_lineendsequence;
- dwarf_lineepiloguebegin;
- dwarf_lineno;
- dwarf_lineprologueend;
- dwarf_linesrc;
- dwarf_lowpc;
- dwarf_macro_opcode;
- dwarf_macro_param1;
- dwarf_macro_param2;
- dwarf_new_oom_handler;
- dwarf_nextcu;
- dwarf_offabbrev;
- dwarf_offdie;
- dwarf_onearange;
- dwarf_onesrcline;
- dwarf_ranges;
- dwarf_siblingof;
- dwarf_srclang;
- dwarf_tag;
- dwarf_whatattr;
- dwarf_whatform;
-
- # libdwfl_pic.a contributes these symbols.
- dwfl_addrdie;
- dwfl_addrdwarf;
- dwfl_addrmodule;
- dwfl_begin;
- dwfl_cumodule;
- dwfl_end;
- dwfl_errmsg;
- dwfl_errno;
- dwfl_getdwarf;
- dwfl_getmodules;
- dwfl_getsrc;
- dwfl_getsrclines;
- dwfl_line_comp_dir;
- dwfl_linecu;
- dwfl_lineinfo;
- dwfl_linemodule;
- dwfl_linux_kernel_find_elf;
- dwfl_linux_kernel_module_section_address;
- dwfl_linux_kernel_report_kernel;
- dwfl_linux_kernel_report_modules;
- dwfl_linux_kernel_report_offline;
- dwfl_linux_proc_find_elf;
- dwfl_linux_proc_maps_report;
- dwfl_linux_proc_report;
- dwfl_module_addrdie;
- dwfl_module_addrname;
- dwfl_module_getdwarf;
- dwfl_module_getelf;
- dwfl_module_getsrc;
- dwfl_module_getsrc_file;
- dwfl_module_getsym;
- dwfl_module_getsymtab;
- dwfl_module_info;
- dwfl_module_nextcu;
- dwfl_module_register_names;
- dwfl_module_relocate_address;
- dwfl_module_relocation_info;
- dwfl_module_relocations;
- dwfl_module_return_value_location;
- dwfl_nextcu;
- dwfl_offline_section_address;
- dwfl_onesrcline;
- dwfl_report_begin;
- dwfl_report_elf;
- dwfl_report_end;
- dwfl_report_module;
- dwfl_report_offline;
- dwfl_standard_argp;
- dwfl_standard_find_debuginfo;
- dwfl_version;
-
- local:
- *;
-} ELFUTILS_0;
-
-ELFUTILS_0.126 {
- global:
- dwarf_getelf;
-
- local:
- *;
-} ELFUTILS_0.122;
-
-ELFUTILS_0.127 {
- global:
- dwarf_getsrcdirs;
-
- dwfl_module_addrsym;
- dwfl_report_begin_add;
- dwfl_module_address_section;
-
- local:
- *;
-} ELFUTILS_0.126;
-
-ELFUTILS_0.130 {
- global:
- dwfl_build_id_find_elf;
- dwfl_build_id_find_debuginfo;
- dwfl_module_build_id;
- dwfl_module_report_build_id;
-
- local:
- *;
-} ELFUTILS_0.127;
-
-ELFUTILS_0.136 {
- global:
- dwfl_addrsegment;
- dwfl_report_segment;
-
- local:
- *;
-} ELFUTILS_0.130;
-
-ELFUTILS_0.138 {
- global:
- # Replaced ELFUTILS_0.130 version, which has bug-compatibility wrapper.
- dwfl_module_build_id;
-
- local:
- *;
-} ELFUTILS_0.136;
diff --git a/libdw/libdwP.h b/libdw/libdwP.h
deleted file mode 100644
index f805295..0000000
--- a/libdw/libdwP.h
+++ /dev/null
@@ -1,453 +0,0 @@
-/* Internal definitions for libdwarf.
- Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifndef _LIBDWP_H
-#define _LIBDWP_H 1
-
-#include <libintl.h>
-#include <stdbool.h>
-
-#include <libdw.h>
-
-
-/* gettext helper macros. */
-#define _(Str) dgettext ("elfutils", Str)
-
-
-/* Version of the DWARF specification we support. */
-#define DWARF_VERSION 3
-
-/* Version of the CIE format. */
-#define CIE_VERSION 1
-
-
-/* Known location expressions already decoded. */
-struct loc_s
-{
- void *addr;
- Dwarf_Op *loc;
- size_t nloc;
-};
-
-/* Valid indeces for the section data. */
-enum
- {
- IDX_debug_info = 0,
- IDX_debug_abbrev,
- IDX_debug_aranges,
- IDX_debug_line,
- IDX_debug_frame,
- IDX_eh_frame,
- IDX_debug_loc,
- IDX_debug_pubnames,
- IDX_debug_str,
- IDX_debug_funcnames,
- IDX_debug_typenames,
- IDX_debug_varnames,
- IDX_debug_weaknames,
- IDX_debug_macinfo,
- IDX_debug_ranges,
- IDX_last
- };
-
-
-/* Error values. */
-enum
-{
- DWARF_E_NOERROR = 0,
- DWARF_E_UNKNOWN_ERROR,
- DWARF_E_INVALID_ACCESS,
- DWARF_E_NO_REGFILE,
- DWARF_E_IO_ERROR,
- DWARF_E_INVALID_ELF,
- DWARF_E_NO_DWARF,
- DWARF_E_NOELF,
- DWARF_E_GETEHDR_ERROR,
- DWARF_E_NOMEM,
- DWARF_E_UNIMPL,
- DWARF_E_INVALID_CMD,
- DWARF_E_INVALID_VERSION,
- DWARF_E_INVALID_FILE,
- DWARF_E_NO_ENTRY,
- DWARF_E_INVALID_DWARF,
- DWARF_E_NO_STRING,
- DWARF_E_NO_ADDR,
- DWARF_E_NO_CONSTANT,
- DWARF_E_NO_REFERENCE,
- DWARF_E_INVALID_REFERENCE,
- DWARF_E_NO_DEBUG_LINE,
- DWARF_E_INVALID_DEBUG_LINE,
- DWARF_E_TOO_BIG,
- DWARF_E_VERSION,
- DWARF_E_INVALID_DIR_IDX,
- DWARF_E_ADDR_OUTOFRANGE,
- DWARF_E_NO_LOCLIST,
- DWARF_E_NO_BLOCK,
- DWARF_E_INVALID_LINE_IDX,
- DWARF_E_INVALID_ARANGE_IDX,
- DWARF_E_NO_MATCH,
- DWARF_E_NO_FLAG,
- DWARF_E_INVALID_OFFSET,
- DWARF_E_NO_DEBUG_RANGES,
-};
-
-
-/* This is the structure representing the debugging state. */
-struct Dwarf
-{
- /* The underlying ELF file. */
- Elf *elf;
-
- /* The section data. */
- Elf_Data *sectiondata[IDX_last];
-
- /* True if the file has a byte order different from the host. */
- bool other_byte_order;
-
- /* If true, we allocated the ELF descriptor ourselves. */
- bool free_elf;
-
- /* Information for traversing the .debug_pubnames section. This is
- an array and separately allocated with malloc. */
- struct pubnames_s
- {
- Dwarf_Off cu_offset;
- Dwarf_Off set_start;
- unsigned int cu_header_size;
- int address_len;
- } *pubnames_sets;
- size_t pubnames_nsets;
-
- /* Search tree for the CUs. */
- void *cu_tree;
- Dwarf_Off next_cu_offset;
-
- /* Address ranges. */
- Dwarf_Aranges *aranges;
-
- /* Internal memory handling. This is basically a simplified
- reimplementation of obstacks. Unfortunately the standard obstack
- implementation is not usable in libraries. */
- struct libdw_memblock
- {
- size_t size;
- size_t remaining;
- struct libdw_memblock *prev;
- char mem[0];
- } *mem_tail;
-
- /* Default size of allocated memory blocks. */
- size_t mem_default_size;
-
- /* Registered OOM handler. */
- Dwarf_OOM oom_handler;
-};
-
-
-/* Abbreviation representation. */
-struct Dwarf_Abbrev
-{
- unsigned int code;
- unsigned int tag;
- int has_children;
- unsigned int attrcnt;
- unsigned char *attrp;
- Dwarf_Off offset;
-};
-
-#include "dwarf_abbrev_hash.h"
-
-
-/* Files in line information records. */
-struct Dwarf_Files_s
- {
- Dwarf *dbg;
- unsigned int ndirs;
- unsigned int nfiles;
- struct Dwarf_Fileinfo_s
- {
- char *name;
- Dwarf_Word mtime;
- Dwarf_Word length;
- } info[0];
- /* nfiles of those, followed by char *[ndirs]. */
- };
-typedef struct Dwarf_Fileinfo_s Dwarf_Fileinfo;
-
-
-/* Representation of a row in the line table. */
-struct Dwarf_Lines_s
- {
- size_t nlines;
-
- struct Dwarf_Line_s
- {
- Dwarf_Addr addr;
- unsigned int file;
- int line;
- unsigned short int column;
- unsigned int is_stmt:1;
- unsigned int basic_block:1;
- unsigned int end_sequence:1;
- unsigned int prologue_end:1;
- unsigned int epilogue_begin:1;
-
- Dwarf_Files *files;
- } info[0];
- };
-
-
-/* Representation of address ranges. */
-struct Dwarf_Aranges_s
-{
- Dwarf *dbg;
- size_t naranges;
-
- struct Dwarf_Arange_s
- {
- Dwarf_Addr addr;
- Dwarf_Word length;
- Dwarf_Off offset;
- } info[0];
-};
-
-
-/* CU representation. */
-struct Dwarf_CU
-{
- Dwarf *dbg;
- Dwarf_Off start;
- Dwarf_Off end;
- uint8_t address_size;
- uint8_t offset_size;
- uint16_t version;
-
- /* Hash table for the abbreviations. */
- Dwarf_Abbrev_Hash abbrev_hash;
- /* Offset of the first abbreviation. */
- size_t orig_abbrev_offset;
- /* Offset past last read abbreviation. */
- size_t last_abbrev_offset;
-
- /* The srcline information. */
- Dwarf_Lines *lines;
-
- /* The source file information. */
- Dwarf_Files *files;
-
- /* Known location lists. */
- void *locs;
-};
-
-/* Compute the offset of a CU's first DIE from its offset. This
- is either:
- LEN VER OFFSET ADDR
- 4-bytes + 2-bytes + 4-bytes + 1-byte for 32-bit dwarf
- 12-bytes + 2-bytes + 8-bytes + 1-byte for 64-bit dwarf
-
- Note the trick in the computation. If the offset_size is 4
- the '- 4' term changes the '3 *' into a '2 *'. If the
- offset_size is 8 it accounts for the 4-byte escape value
- used at the start of the length. */
-#define DIE_OFFSET_FROM_CU_OFFSET(cu_offset, offset_size) \
- ((cu_offset) + 3 * (offset_size) - 4 + 3)
-
-#define CUDIE(fromcu) \
- ((Dwarf_Die) \
- { \
- .cu = (fromcu), \
- .addr = ((char *) (fromcu)->dbg->sectiondata[IDX_debug_info]->d_buf \
- + (fromcu)->start + 3 * (fromcu)->offset_size - 4 + 3), \
- })
-
-
-/* Macro information. */
-struct Dwarf_Macro_s
-{
- unsigned int opcode;
- Dwarf_Word param1;
- union
- {
- Dwarf_Word u;
- const char *s;
- } param2;
-};
-
-
-/* We have to include the file at this point because the inline
- functions access internals of the Dwarf structure. */
-#include "memory-access.h"
-
-
-/* Set error value. */
-extern void __libdw_seterrno (int value) internal_function;
-
-
-/* Memory handling, the easy parts. This macro does not do any locking. */
-#define libdw_alloc(dbg, type, tsize, cnt) \
- ({ struct libdw_memblock *_tail = (dbg)->mem_tail; \
- size_t _required = (tsize) * (cnt); \
- type *_result = (type *) (_tail->mem + (_tail->size - _tail->remaining));\
- size_t _padding = ((__alignof (type) \
- - ((uintptr_t) _result & (__alignof (type) - 1))) \
- & (__alignof (type) - 1)); \
- if (unlikely (_tail->remaining < _required + _padding)) \
- _result = (type *) __libdw_allocate (dbg, _required, __alignof (type));\
- else \
- { \
- _required += _padding; \
- _result = (type *) ((char *) _result + _padding); \
- _tail->remaining -= _required; \
- } \
- _result; })
-
-#define libdw_typed_alloc(dbg, type) \
- libdw_alloc (dbg, type, sizeof (type), 1)
-
-/* Callback to allocate more. */
-extern void *__libdw_allocate (Dwarf *dbg, size_t minsize, size_t align)
- __attribute__ ((__malloc__)) __nonnull_attribute__ (1);
-
-/* Default OOM handler. */
-extern void __libdw_oom (void) __attribute ((noreturn, visibility ("hidden")));
-
-/* Find CU for given offset. */
-extern struct Dwarf_CU *__libdw_findcu (Dwarf *dbg, Dwarf_Off offset)
- __nonnull_attribute__ (1) internal_function;
-
-/* Return tag of given DIE. */
-extern Dwarf_Abbrev *__libdw_findabbrev (struct Dwarf_CU *cu,
- unsigned int code)
- __nonnull_attribute__ (1) internal_function;
-
-/* Get abbreviation at given offset. */
-extern Dwarf_Abbrev *__libdw_getabbrev (Dwarf *dbg, struct Dwarf_CU *cu,
- Dwarf_Off offset, size_t *lengthp,
- Dwarf_Abbrev *result)
- __nonnull_attribute__ (1) internal_function;
-
-/* Helper functions for form handling. */
-extern size_t __libdw_form_val_len (Dwarf *dbg, struct Dwarf_CU *cu,
- unsigned int form,
- const unsigned char *valp)
- __nonnull_attribute__ (1, 2, 4) internal_function;
-
-/* Helper function for DW_FORM_ref* handling. */
-extern int __libdw_formref (Dwarf_Attribute *attr, Dwarf_Off *return_offset)
- __nonnull_attribute__ (1, 2) internal_function;
-
-
-/* Helper function to locate attribute. */
-extern unsigned char *__libdw_find_attr (Dwarf_Die *die,
- unsigned int search_name,
- unsigned int *codep,
- unsigned int *formp)
- __nonnull_attribute__ (1) internal_function;
-
-/* Helper function to access integer attribute. */
-extern int __libdw_attr_intval (Dwarf_Die *die, int *valp, int attval)
- __nonnull_attribute__ (1, 2) internal_function;
-
-/* Helper function to walk scopes. */
-struct Dwarf_Die_Chain
-{
- Dwarf_Die die;
- struct Dwarf_Die_Chain *parent;
- bool prune; /* The PREVISIT function can set this. */
-};
-extern int __libdw_visit_scopes (unsigned int depth,
- struct Dwarf_Die_Chain *root,
- int (*previsit) (unsigned int depth,
- struct Dwarf_Die_Chain *,
- void *arg),
- int (*postvisit) (unsigned int depth,
- struct Dwarf_Die_Chain *,
- void *arg),
- void *arg)
- __nonnull_attribute__ (2, 3) internal_function;
-
-/* Return error code of last failing function call. This value is kept
- separately for each thread. */
-extern int __dwarf_errno_internal (void);
-
-
-/* Aliases to avoid PLTs. */
-INTDECL (dwarf_attr)
-INTDECL (dwarf_attr_integrate)
-INTDECL (dwarf_begin_elf)
-INTDECL (dwarf_child)
-INTDECL (dwarf_dieoffset)
-INTDECL (dwarf_diename)
-INTDECL (dwarf_end)
-INTDECL (dwarf_entrypc)
-INTDECL (dwarf_errmsg)
-INTDECL (dwarf_formaddr)
-INTDECL (dwarf_formblock)
-INTDECL (dwarf_formref_die)
-INTDECL (dwarf_formsdata)
-INTDECL (dwarf_formstring)
-INTDECL (dwarf_formudata)
-INTDECL (dwarf_getarange_addr)
-INTDECL (dwarf_getarangeinfo)
-INTDECL (dwarf_getaranges)
-INTDECL (dwarf_getsrcfiles)
-INTDECL (dwarf_getsrclines)
-INTDECL (dwarf_hasattr)
-INTDECL (dwarf_haschildren)
-INTDECL (dwarf_haspc)
-INTDECL (dwarf_highpc)
-INTDECL (dwarf_lowpc)
-INTDECL (dwarf_nextcu)
-INTDECL (dwarf_offdie)
-INTDECL (dwarf_ranges)
-INTDECL (dwarf_siblingof)
-INTDECL (dwarf_tag)
-
-#endif /* libdwP.h */
diff --git a/libdw/libdw_alloc.c b/libdw/libdw_alloc.c
deleted file mode 100644
index 9ca6aa7..0000000
--- a/libdw/libdw_alloc.c
+++ /dev/null
@@ -1,102 +0,0 @@
-/* Memory handling for libdw.
- Copyright (C) 2003, 2004, 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <error.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <sys/param.h>
-#include "libdwP.h"
-
-/* ANDROID_CHANGE_BEGIN */
-#include <AndroidFixup.h>
-/* ANDROID_CHANGE_END */
-
-void *
-__libdw_allocate (Dwarf *dbg, size_t minsize, size_t align)
-{
- size_t size = MAX (dbg->mem_default_size,
- (align - 1 +
- 2 * minsize + offsetof (struct libdw_memblock, mem)));
- struct libdw_memblock *newp = malloc (size);
- if (newp == NULL)
- dbg->oom_handler ();
-
- uintptr_t result = ((uintptr_t) newp->mem + align - 1) & ~(align - 1);
-
- newp->size = size - offsetof (struct libdw_memblock, mem);
- newp->remaining = (uintptr_t) newp + size - (result + minsize);
-
- newp->prev = dbg->mem_tail;
- dbg->mem_tail = newp;
-
- return (void *) result;
-}
-
-
-Dwarf_OOM
-dwarf_new_oom_handler (Dwarf *dbg, Dwarf_OOM handler)
-{
- Dwarf_OOM old = dbg->oom_handler;
- dbg->oom_handler = handler;
- return old;
-}
-
-
-void
-__attribute ((noreturn, visibility ("hidden")))
-__libdw_oom (void)
-{
- while (1)
- error (EXIT_FAILURE, ENOMEM, "libdw");
-}
diff --git a/libdw/libdw_findcu.c b/libdw/libdw_findcu.c
deleted file mode 100644
index afff6d3..0000000
--- a/libdw/libdw_findcu.c
+++ /dev/null
@@ -1,157 +0,0 @@
-/* Find CU for given offset.
- Copyright (C) 2003, 2004, 2005, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <search.h>
-#include "libdwP.h"
-
-
-static int
-findcu_cb (const void *arg1, const void *arg2)
-{
- struct Dwarf_CU *cu1 = (struct Dwarf_CU *) arg1;
- struct Dwarf_CU *cu2 = (struct Dwarf_CU *) arg2;
-
- /* Find out which of the two arguments is the search value. It has
- end offset 0. */
- if (cu1->end == 0)
- {
- if (cu1->start < cu2->start)
- return -1;
- if (cu1->start >= cu2->end)
- return 1;
- }
- else
- {
- if (cu2->start < cu1->start)
- return 1;
- if (cu2->start >= cu1->end)
- return -1;
- }
-
- return 0;
-}
-
-
-struct Dwarf_CU *
-__libdw_findcu (dbg, start)
- Dwarf *dbg;
- Dwarf_Off start;
-{
- /* Maybe we already know that CU. */
- struct Dwarf_CU fake = { .start = start, .end = 0 };
- struct Dwarf_CU **found = tfind (&fake, &dbg->cu_tree, findcu_cb);
- if (found != NULL)
- return *found;
-
- if (start < dbg->next_cu_offset)
- {
- invalid:
- __libdw_seterrno (DWARF_E_INVALID_DWARF);
- return NULL;
- }
-
- /* No. Then read more CUs. */
- while (1)
- {
- Dwarf_Off oldoff = dbg->next_cu_offset;
- uint8_t address_size;
- uint8_t offset_size;
- Dwarf_Off abbrev_offset;
-
- if (INTUSE(dwarf_nextcu) (dbg, oldoff, &dbg->next_cu_offset, NULL,
- &abbrev_offset, &address_size, &offset_size)
- != 0)
- /* No more entries. */
- return NULL;
-
- /* XXX We need the version number but dwarf_nextcu swallows it. */
- const char *bytes = (dbg->sectiondata[IDX_debug_info]->d_buf + oldoff
- + (2 * offset_size - 4));
- uint16_t version = read_2ubyte_unaligned (dbg, bytes);
-
- /* We only know how to handle the DWARF version 2 and 3 formats. */
- if (unlikely (version != 2) && unlikely (version != 3))
- goto invalid;
-
- /* Create an entry for this CU. */
- struct Dwarf_CU *newp = libdw_typed_alloc (dbg, struct Dwarf_CU);
-
- newp->dbg = dbg;
- newp->start = oldoff;
- newp->end = dbg->next_cu_offset;
- newp->address_size = address_size;
- newp->offset_size = offset_size;
- newp->version = version;
- Dwarf_Abbrev_Hash_init (&newp->abbrev_hash, 41);
- newp->orig_abbrev_offset = newp->last_abbrev_offset = abbrev_offset;
- newp->lines = NULL;
- newp->locs = NULL;
-
- /* Add the new entry to the search tree. */
- if (tsearch (newp, &dbg->cu_tree, findcu_cb) == NULL)
- {
- /* Something went wrong. Unfo the operation. */
- dbg->next_cu_offset = oldoff;
- __libdw_seterrno (DWARF_E_NOMEM);
- return NULL;
- }
-
- /* Is this the one we are looking for? */
- if (start < dbg->next_cu_offset)
- // XXX Match exact offset.
- return newp;
- }
- /* NOTREACHED */
-}
diff --git a/libdw/libdw_form.c b/libdw/libdw_form.c
deleted file mode 100644
index ad78f4b..0000000
--- a/libdw/libdw_form.c
+++ /dev/null
@@ -1,151 +0,0 @@
-/* Helper functions for form handling.
- Copyright (C) 2003, 2004, 2006, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <dwarf.h>
-#include <string.h>
-
-#include "libdwP.h"
-
-
-size_t
-internal_function
-__libdw_form_val_len (Dwarf *dbg, struct Dwarf_CU *cu, unsigned int form,
- const unsigned char *valp)
-{
- const unsigned char *saved;
- Dwarf_Word u128;
- size_t result;
-
- switch (form)
- {
- case DW_FORM_addr:
- result = cu->address_size;
- break;
-
- case DW_FORM_ref_addr:
- result = cu->version == 2 ? cu->address_size : cu->offset_size;
- break;
-
- case DW_FORM_strp:
- result = cu->offset_size;
- break;
-
- case DW_FORM_block1:
- result = *valp + 1;
- break;
-
- case DW_FORM_block2:
- result = read_2ubyte_unaligned (dbg, valp) + 2;
- break;
-
- case DW_FORM_block4:
- result = read_4ubyte_unaligned (dbg, valp) + 4;
- break;
-
- case DW_FORM_block:
- saved = valp;
- get_uleb128 (u128, valp);
- result = u128 + (valp - saved);
- break;
-
- case DW_FORM_ref1:
- case DW_FORM_data1:
- case DW_FORM_flag:
- result = 1;
- break;
-
- case DW_FORM_data2:
- case DW_FORM_ref2:
- result = 2;
- break;
-
- case DW_FORM_data4:
- case DW_FORM_ref4:
- result = 4;
- break;
-
- case DW_FORM_data8:
- case DW_FORM_ref8:
- result = 8;
- break;
-
- case DW_FORM_string:
- result = strlen ((char *) valp) + 1;
- break;
-
- case DW_FORM_sdata:
- case DW_FORM_udata:
- case DW_FORM_ref_udata:
- saved = valp;
- get_uleb128 (u128, valp);
- result = valp - saved;
- break;
-
- case DW_FORM_indirect:
- saved = valp;
- get_uleb128 (u128, valp);
- // XXX Is this really correct?
- result = __libdw_form_val_len (dbg, cu, u128, valp);
- if (result != (size_t) -1)
- result += valp - saved;
- break;
-
- default:
- __libdw_seterrno (DWARF_E_INVALID_DWARF);
- result = (size_t) -1l;
- break;
- }
-
- return result;
-}
diff --git a/libdw/libdw_visit_scopes.c b/libdw/libdw_visit_scopes.c
deleted file mode 100644
index 9c7c378..0000000
--- a/libdw/libdw_visit_scopes.c
+++ /dev/null
@@ -1,177 +0,0 @@
-/* Helper functions to descend DWARF scope trees.
- Copyright (C) 2005,2006,2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under an Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) and to distribute linked
- combinations including the two. Non-GPL Code permitted under this
- exception must only link to the code of Red Hat elfutils through those
- well defined interfaces identified in the file named EXCEPTION found in
- the source code files (the "Approved Interfaces"). The files of Non-GPL
- Code may instantiate templates or use macros or inline functions from
- the Approved Interfaces without causing the resulting work to be covered
- by the GNU General Public License. Only Red Hat, Inc. may make changes
- or additions to the list of Approved Interfaces. Red Hat's grant of
- this exception is conditioned upon your not adding any new exceptions.
- If you wish to add a new Approved Interface or exception, please contact
- Red Hat. You must obey the GNU General Public License in all respects
- for all of the Red Hat elfutils code and other code used in conjunction
- with Red Hat elfutils except the Non-GPL Code covered by this exception.
- If you modify this file, you may extend this exception to your version
- of the file, but you are not obligated to do so. If you do not wish to
- provide this exception without modification, you must delete this
- exception statement from your version and license this file solely under
- the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libdwP.h"
-#include <dwarf.h>
-
-enum die_class { ignore, match, match_inline, walk, imported };
-
-static enum die_class
-classify_die (Dwarf_Die *die)
-{
- switch (INTUSE(dwarf_tag) (die))
- {
- /* DIEs with addresses we can try to match. */
- case DW_TAG_compile_unit:
- case DW_TAG_module:
- case DW_TAG_lexical_block:
- case DW_TAG_with_stmt:
- case DW_TAG_catch_block:
- case DW_TAG_try_block:
- case DW_TAG_entry_point:
- return match;
- case DW_TAG_inlined_subroutine:
- return match_inline;
- case DW_TAG_subprogram:
- /* This might be a concrete out-of-line instance of an inline, in
- which case it is not guaranteed to be owned by the right scope and
- we will search for its origin as for DW_TAG_inlined_subroutine. */
- return (INTUSE(dwarf_hasattr) (die, DW_AT_abstract_origin)
- ? match_inline : match);
-
- /* DIEs without addresses that can own DIEs with addresses. */
- case DW_TAG_namespace:
- case DW_TAG_class_type:
- case DW_TAG_structure_type:
- return walk;
-
- /* Special indirection required. */
- case DW_TAG_imported_unit:
- return imported;
-
- /* Other DIEs we have no reason to descend. */
- default:
- break;
- }
- return ignore;
-}
-
-int
-__libdw_visit_scopes (depth, root, previsit, postvisit, arg)
- unsigned int depth;
- struct Dwarf_Die_Chain *root;
- int (*previsit) (unsigned int depth, struct Dwarf_Die_Chain *, void *);
- int (*postvisit) (unsigned int depth, struct Dwarf_Die_Chain *, void *);
- void *arg;
-{
- struct Dwarf_Die_Chain child;
-
- child.parent = root;
- if (INTUSE(dwarf_child) (&root->die, &child.die) != 0)
- return -1;
-
- inline int recurse (void)
- {
- return __libdw_visit_scopes (depth + 1, &child,
- previsit, postvisit, arg);
- }
-
- do
- {
- child.prune = false;
-
- if (previsit != NULL)
- {
- int result = (*previsit) (depth + 1, &child, arg);
- if (result != DWARF_CB_OK)
- return result;
- }
-
- if (!child.prune)
- switch (classify_die (&child.die))
- {
- case match:
- case match_inline:
- case walk:
- if (INTUSE(dwarf_haschildren) (&child.die))
- {
- int result = recurse ();
- if (result != DWARF_CB_OK)
- return result;
- }
- break;
-
- case imported:
- {
- /* This imports another compilation unit to appear
- as part of this one, inside the current scope.
- Recurse to search the referenced unit, but without
- recording it as an inner scoping level. */
-
- Dwarf_Attribute attr_mem;
- Dwarf_Attribute *attr = INTUSE(dwarf_attr) (&child.die,
- DW_AT_import,
- &attr_mem);
- if (INTUSE(dwarf_formref_die) (attr, &child.die) != NULL)
- {
- int result = recurse ();
- if (result != DWARF_CB_OK)
- return result;
- }
- }
- break;
-
- default:
- break;
- }
-
- if (postvisit != NULL)
- {
- int result = (*postvisit) (depth + 1, &child, arg);
- if (result != DWARF_CB_OK)
- return result;
- }
- }
- while (INTUSE(dwarf_siblingof) (&child.die, &child.die) == 0);
-
- return 0;
-}
diff --git a/libdw/memory-access.c b/libdw/memory-access.c
deleted file mode 100644
index c9a0ca7..0000000
--- a/libdw/memory-access.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/* Out of line functions for memory-access.h macros.
- Copyright (C) 2005, 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-#include "libdwP.h"
-#include "memory-access.h"
-
-uint64_t
-internal_function
-__libdw_get_uleb128 (uint64_t acc, unsigned int i, const unsigned char **addrp)
-{
- unsigned char __b;
- get_uleb128_rest_return (acc, i, addrp);
-}
-
-int64_t
-internal_function
-__libdw_get_sleb128 (int64_t acc, unsigned int i, const unsigned char **addrp)
-{
- unsigned char __b;
- int64_t _v = acc;
- get_sleb128_rest_return (acc, i, addrp);
-}
diff --git a/libdw/memory-access.h b/libdw/memory-access.h
deleted file mode 100644
index 52b41b5..0000000
--- a/libdw/memory-access.h
+++ /dev/null
@@ -1,276 +0,0 @@
-/* Unaligned memory access functionality.
- Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifndef _MEMORY_ACCESS_H
-#define _MEMORY_ACCESS_H 1
-
-#include <byteswap.h>
-#include <limits.h>
-#include <stdint.h>
-
-
-/* Number decoding macros. See 7.6 Variable Length Data. */
-
-#define get_uleb128_step(var, addr, nth, break) \
- __b = *(addr)++; \
- var |= (uintmax_t) (__b & 0x7f) << (nth * 7); \
- if (likely ((__b & 0x80) == 0)) \
- break
-
-#define get_uleb128(var, addr) \
- do { \
- unsigned char __b; \
- var = 0; \
- get_uleb128_step (var, addr, 0, break); \
- var = __libdw_get_uleb128 (var, 1, &(addr)); \
- } while (0)
-
-#define get_uleb128_rest_return(var, i, addrp) \
- do { \
- for (; i < 10; ++i) \
- { \
- get_uleb128_step (var, *addrp, i, return var); \
- } \
- /* Other implementations set VALUE to UINT_MAX in this \
- case. So we better do this as well. */ \
- return UINT64_MAX; \
- } while (0)
-
-/* The signed case is similar, but we sign-extend the result. */
-
-#define get_sleb128_step(var, addr, nth, break) \
- __b = *(addr)++; \
- _v |= (uint64_t) (__b & 0x7f) << (nth * 7); \
- if (likely ((__b & 0x80) == 0)) \
- { \
- var = (_v << (64 - (nth * 7) - 7) >> (64 - (nth * 7) - 7)); \
- break; \
- } \
- else do {} while (0)
-
-#define get_sleb128(var, addr) \
- do { \
- unsigned char __b; \
- int64_t _v = 0; \
- get_sleb128_step (var, addr, 0, break); \
- var = __libdw_get_sleb128 (_v, 1, &(addr)); \
- } while (0)
-
-#define get_sleb128_rest_return(var, i, addrp) \
- do { \
- for (; i < 9; ++i) \
- { \
- get_sleb128_step (var, *addrp, i, return var); \
- } \
- /* Other implementations set VALUE to INT_MAX in this \
- case. So we better do this as well. */ \
- return INT64_MAX; \
- } while (0)
-
-#ifdef IS_LIBDW
-extern uint64_t __libdw_get_uleb128 (uint64_t acc, unsigned int i,
- const unsigned char **addrp)
- internal_function attribute_hidden;
-extern int64_t __libdw_get_sleb128 (int64_t acc, unsigned int i,
- const unsigned char **addrp)
- internal_function attribute_hidden;
-#else
-static uint64_t
-__attribute__ ((unused))
-__libdw_get_uleb128 (uint64_t acc, unsigned int i, const unsigned char **addrp)
-{
- unsigned char __b;
- get_uleb128_rest_return (acc, i, addrp);
-}
-static int64_t
-__attribute__ ((unused))
-__libdw_get_sleb128 (int64_t acc, unsigned int i, const unsigned char **addrp)
-{
- unsigned char __b;
- int64_t _v = acc;
- get_sleb128_rest_return (acc, i, addrp);
-}
-#endif
-
-
-/* We use simple memory access functions in case the hardware allows it.
- The caller has to make sure we don't have alias problems. */
-#if ALLOW_UNALIGNED
-
-# define read_2ubyte_unaligned(Dbg, Addr) \
- (unlikely ((Dbg)->other_byte_order) \
- ? bswap_16 (*((const uint16_t *) (Addr))) \
- : *((const uint16_t *) (Addr)))
-# define read_2sbyte_unaligned(Dbg, Addr) \
- (unlikely ((Dbg)->other_byte_order) \
- ? (int16_t) bswap_16 (*((const int16_t *) (Addr))) \
- : *((const int16_t *) (Addr)))
-
-# define read_4ubyte_unaligned_noncvt(Addr) \
- *((const uint32_t *) (Addr))
-# define read_4ubyte_unaligned(Dbg, Addr) \
- (unlikely ((Dbg)->other_byte_order) \
- ? bswap_32 (*((const uint32_t *) (Addr))) \
- : *((const uint32_t *) (Addr)))
-# define read_4sbyte_unaligned(Dbg, Addr) \
- (unlikely ((Dbg)->other_byte_order) \
- ? (int32_t) bswap_32 (*((const int32_t *) (Addr))) \
- : *((const int32_t *) (Addr)))
-
-# define read_8ubyte_unaligned(Dbg, Addr) \
- (unlikely ((Dbg)->other_byte_order) \
- ? bswap_64 (*((const uint64_t *) (Addr))) \
- : *((const uint64_t *) (Addr)))
-# define read_8sbyte_unaligned(Dbg, Addr) \
- (unlikely ((Dbg)->other_byte_order) \
- ? (int64_t) bswap_64 (*((const int64_t *) (Addr))) \
- : *((const int64_t *) (Addr)))
-
-#else
-
-union unaligned
- {
- void *p;
- uint16_t u2;
- uint32_t u4;
- uint64_t u8;
- int16_t s2;
- int32_t s4;
- int64_t s8;
- } __attribute__ ((packed));
-
-static inline uint16_t
-read_2ubyte_unaligned (Dwarf *dbg, const void *p)
-{
- const union unaligned *up = p;
- if (dbg->other_byte_order)
- return bswap_16 (up->u2);
- return up->u2;
-}
-static inline int16_t
-read_2sbyte_unaligned (Dwarf *dbg, const void *p)
-{
- const union unaligned *up = p;
- if (dbg->other_byte_order)
- return (int16_t) bswap_16 (up->u2);
- return up->s2;
-}
-
-static inline uint32_t
-read_4ubyte_unaligned_noncvt (const void *p)
-{
- const union unaligned *up = p;
- return up->u4;
-}
-static inline uint32_t
-read_4ubyte_unaligned (Dwarf *dbg, const void *p)
-{
- const union unaligned *up = p;
- if (dbg->other_byte_order)
- return bswap_32 (up->u4);
- return up->u4;
-}
-static inline int32_t
-read_4sbyte_unaligned (Dwarf *dbg, const void *p)
-{
- const union unaligned *up = p;
- if (dbg->other_byte_order)
- return (int32_t) bswap_32 (up->u4);
- return up->s4;
-}
-
-static inline uint64_t
-read_8ubyte_unaligned (Dwarf *dbg, const void *p)
-{
- const union unaligned *up = p;
- if (dbg->other_byte_order)
- return bswap_64 (up->u8);
- return up->u8;
-}
-static inline int64_t
-read_8sbyte_unaligned (Dwarf *dbg, const void *p)
-{
- const union unaligned *up = p;
- if (dbg->other_byte_order)
- return (int64_t) bswap_64 (up->u8);
- return up->s8;
-}
-
-#endif /* allow unaligned */
-
-
-#define read_2ubyte_unaligned_inc(Dbg, Addr) \
- ({ uint16_t t_ = read_2ubyte_unaligned (Dbg, Addr); \
- Addr = (__typeof (Addr)) (((uintptr_t) (Addr)) + 2); \
- t_; })
-#define read_2sbyte_unaligned_inc(Dbg, Addr) \
- ({ int16_t t_ = read_2sbyte_unaligned (Dbg, Addr); \
- Addr = (__typeof (Addr)) (((uintptr_t) (Addr)) + 2); \
- t_; })
-
-#define read_4ubyte_unaligned_inc(Dbg, Addr) \
- ({ uint32_t t_ = read_4ubyte_unaligned (Dbg, Addr); \
- Addr = (__typeof (Addr)) (((uintptr_t) (Addr)) + 4); \
- t_; })
-#define read_4sbyte_unaligned_inc(Dbg, Addr) \
- ({ int32_t t_ = read_4sbyte_unaligned (Dbg, Addr); \
- Addr = (__typeof (Addr)) (((uintptr_t) (Addr)) + 4); \
- t_; })
-
-#define read_8ubyte_unaligned_inc(Dbg, Addr) \
- ({ uint64_t t_ = read_8ubyte_unaligned (Dbg, Addr); \
- Addr = (__typeof (Addr)) (((uintptr_t) (Addr)) + 8); \
- t_; })
-#define read_8sbyte_unaligned_inc(Dbg, Addr) \
- ({ int64_t t_ = read_8sbyte_unaligned (Dbg, Addr); \
- Addr = (__typeof (Addr)) (((uintptr_t) (Addr)) + 8); \
- t_; })
-
-#endif /* memory-access.h */
diff --git a/libdwfl/Android.mk b/libdwfl/Android.mk
deleted file mode 100755
index 4fa544b..0000000
--- a/libdwfl/Android.mk
+++ /dev/null
@@ -1,105 +0,0 @@
-# Copyright (C) 2012 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-LOCAL_PATH := $(call my-dir)
-
-supported_platforms := linux-x86 darwin-x86
-cur_platform := $(filter $(HOST_OS)-$(HOST_ARCH),$(supported_platforms))
-
-ifdef cur_platform
-
-#
-# host libdwfl
-#
-
-include $(CLEAR_VARS)
-
-LIBDWFL_SRC_FILES := \
- dwfl_begin.c \
- dwfl_build_id_find_elf.c \
- dwfl_build_id_find_debuginfo.c \
- libdwfl_crc32.c \
- libdwfl_crc32_file.c \
- dwfl_end.c \
- dwfl_error.c \
- dwfl_module.c \
- dwfl_module_addrdie.c \
- dwfl_module_addrsym.c \
- dwfl_module_build_id.c \
- dwfl_module_getdwarf.c \
- dwfl_module_getsym.c \
- dwfl_report_elf.c \
- find-debuginfo.c \
- offline.c \
- relocate.c
-
-LOCAL_SRC_FILES := $(LIBDWFL_SRC_FILES)
-
-LOCAL_C_INCLUDES := \
- $(LOCAL_PATH)/.. \
- $(LOCAL_PATH)/../lib \
- $(LOCAL_PATH)/../libdwfl \
- $(LOCAL_PATH)/../libebl \
- $(LOCAL_PATH)/../libdw \
- $(LOCAL_PATH)/../libelf
-
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/../host-$(HOST_OS)-fixup
-
-LOCAL_CFLAGS += -DHAVE_CONFIG_H -std=gnu99 -D_GNU_SOURCE
-
-# to suppress the "pointer of type ‘void *’ used in arithmetic" warning
-LOCAL_CFLAGS += -Wno-pointer-arith
-
-ifeq ($(HOST_OS),darwin)
- LOCAL_CFLAGS += -fnested-functions
-endif
-
-# to fix machine-dependent issues
-LOCAL_CFLAGS += -include $(LOCAL_PATH)/../host-$(HOST_OS)-fixup/AndroidFixup.h
-
-LOCAL_MODULE:= libdwfl
-
-include $(BUILD_HOST_STATIC_LIBRARY)
-
-#
-# target libdwfl
-#
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(LIBDWFL_SRC_FILES)
-
-LOCAL_C_INCLUDES := \
- $(LOCAL_PATH)/.. \
- $(LOCAL_PATH)/../lib \
- $(LOCAL_PATH)/../libdwfl \
- $(LOCAL_PATH)/../libebl \
- $(LOCAL_PATH)/../libdw \
- $(LOCAL_PATH)/../libelf
-
-
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/../bionic-fixup
-
-LOCAL_CFLAGS += -include $(LOCAL_PATH)/../bionic-fixup/AndroidFixup.h
-
-LOCAL_CFLAGS += -DHAVE_CONFIG_H -std=gnu99 -Werror
-
-# to suppress the "pointer of type ‘void *’ used in arithmetic" warning
-LOCAL_CFLAGS += -Wno-pointer-arith
-
-LOCAL_MODULE:= libdwfl
-
-include $(BUILD_STATIC_LIBRARY)
-
-endif #cur_platform
diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog
deleted file mode 100644
index 11aeafd..0000000
--- a/libdwfl/ChangeLog
+++ /dev/null
@@ -1,945 +0,0 @@
-2008-12-16 Roland McGrath <roland@redhat.com>
-
- * dwfl_module_build_id.c (dwfl_module_build_id): Define with alias and
- symver magic to bind to ELFUTILS_0.138.
- (_BUG_COMPAT_dwfl_module_build_id): New function, bug compatible
- wrapper for ELFUTILS_0.130 version set.
-
-2008-12-18 Roland McGrath <roland@redhat.com>
-
- * derelocate.c (dwfl_module_relocate_address): Fix last fix: ET_DYN
- addresses are taken as relative to MOD->low_addr.
-
-2008-12-15 Roland McGrath <roland@redhat.com>
-
- * derelocate.c (dwfl_module_relocate_address): Apply main.bias, not
- debug.bias.
-
-2008-12-11 Roland McGrath <roland@redhat.com>
-
- * offline.c (process_archive): Don't call elf_end and close if
- returning NULL. Check first elf_begin call and set error code
- specially for empty archive.
- Fixes RHBZ#465878.
-
-2008-12-02 Roland McGrath <roland@redhat.com>
-
- * dwfl_getmodules.c (dwfl_getmodules): Typo fix in last change.
-
-2008-11-26 Roland McGrath <roland@redhat.com>
-
- * dwfl_getmodules.c (dwfl_getmodules): Encode iteration style in
- return value, and interpret encoded OFFSET argument.
-
-2008-10-07 Roland McGrath <roland@redhat.com>
-
- * dwfl_module_build_id.c (check_notes): Fix typo in vaddr calculation.
-
-2008-09-29 Roland McGrath <roland@redhat.com>
-
- * segment.c (insert): Must realloc DWFL->lookup_module here too.
- (dwfl_report_segment): Clear DWFL->lookup_module before insert calls.
-
-2008-08-28 Roland McGrath <roland@redhat.com>
-
- * segment.c (reify_segments): Fix last change.
-
-2008-08-27 Roland McGrath <roland@redhat.com>
-
- * linux-proc-maps.c (read_proc_memory): Return 0 for EINVAL or EPERM
- failure from pread64.
-
-2008-08-26 Roland McGrath <roland@redhat.com>
-
- * segment.c (reify_segments): Insert a trailing segment for a module
- end that is above the highest current segment.
-
-2008-08-25 Roland McGrath <roland@redhat.com>
-
- * dwfl_module_getdwarf.c (open_elf): Extract elf_errno () for
- coded return value, not plain DWFL_E_LIBELF. Return DWFL_E_BADELF
- if FILE->elf is not ELF_K_ELF.
-
- * dwfl_segment_report_module.c: Add a cast.
-
-2008-08-21 Denys Vlasenko <dvlasenk@redhat.com>
-
- * dwfl_module_addrsym.c (dwfl_module_addrsym): Improve logic
- which decides which symbol is "closest" to a given address.
-
-2008-08-15 Roland McGrath <roland@redhat.com>
-
- * argp-std.c (offline_callbacks): Use dwfl_build_id_find_elf.
- (options, parse_opt): Handle --core.
-
- * core-file.c: New file.
- * Makefile.am (libdwfl_a_SOURCES): Add it.
- * libdwflP.h (dwfl_core_file_report): Declare it.
-
- * link_map.c: New file.
- * Makefile.am (libdwfl_a_SOURCES): Add it.
- * libdwflP.h (dwfl_link_map_report): Declare it.
-
- * libdwflP.h (MIN, MAX): New macros.
- (Dwfl_Memory_Callback): New typedef.
- (Dwfl_Module_Callback): New typedef.
- (dwfl_segment_report_module): Declare it.
- * dwfl_segment_report_module.c: New file.
- * Makefile.am (libdwfl_a_SOURCES): Add it.
-
- * derelocate.c (dwfl_module_address_section): Add INTDEF.
- * libdwflP.h: Add INTDECL.
-
- * segment.c: New file.
- * Makefile.am (libdwfl_a_SOURCES): Add it.
- * libdwfl.h: Declare dwfl_addrsegment, dwfl_report_segment.
- * libdwflP.h (struct Dwfl): New members lookup_elts, lookup_alloc,
- lookup_addr, lookup_module, lookup_segndx, replace removed members
- modules, nmodules.
- (struct Dwfl_Module): New member segment.
- * dwfl_end.c (dwfl_end): Free the new ones. Iterate via modulelist
- to each free module.
- * dwfl_module.c (dwfl_report_begin_add): Do nothing.
- (dwfl_report_begin): Don't call it. Truncate the segment table instead.
- (dwfl_report_module): Don't touch DWFL->nmodules.
- (dwfl_report_end): Don't touch DWFL->modules and DWFL->nmodules.
- (compare_modules): Function removed.
- * dwfl_getmodules.c: Rewritten.
- Add INTDEF.
- * libdwflP.h: Add INTDECLs.
- * dwfl_getdwarf.c: Rewritten to call dwfl_getmodules.
- * dwfl_addrmodule.c: Rewritten to just call dwfl_addrsegment.
-
-2008-08-03 Roland McGrath <roland@redhat.com>
-
- * linux-kernel-modules.c: Include <fts.h> before <config.h>.
-
-2008-07-17 Roland McGrath <roland@redhat.com>
-
- * dwfl_build_id_find_elf.c (__libdwfl_open_by_build_id): Set errno to
- zero if the failure was only ENOENT.
-
-2008-06-03 Roland McGrath <roland@redhat.com>
-
- * dwfl_module_addrsym.c (dwfl_module_addrsym): Exclude undefined
- symbols.
-
-2008-05-22 Petr Machata <pmachata@redhat.com>
-
- * dwfl_module_getdwarf.c (open_elf): Bias of ET_EXEC files is always 0.
-
-2008-05-06 Roland McGrath <roland@frob.com>
-
- * linux-kernel-modules.c (dwfl_linux_kernel_report_offline): Use
- FTS_LOGICAL here too.
- (dwfl_linux_kernel_find_elf): Likewise.
-
-2008-04-29 Roland McGrath <roland@redhat.com>
-
- * find-debuginfo.c (dwfl_standard_find_debuginfo): Try path search
- based on canonicalize_file_name if it differs from the supplied name.
-
- * linux-kernel-modules.c (check_module_notes): Use FTS_LOGICAL so
- we accept symlinks.
-
-2008-04-27 Roland McGrath <roland@redhat.com>
-
- * linux-kernel-modules.c (report_kernel): Fix crash when
- dwfl_report_elf fails.
-
-2008-04-05 Roland McGrath <roland@redhat.com>
-
- * linux-proc-maps.c (proc_maps_report): Don't leak LAST_FILE.
-
- * dwfl_module_getdwarf.c (find_file): Always free build_id_bits.
- Clear it after freeing.
- * dwfl_module_report_build_id.c (dwfl_module_report_build_id): Likewise.
-
-2008-03-26 Roland McGrath <roland@redhat.com>
-
- * dwfl_module_getdwarf.c (load_symtab): Don't return success for
- SHT_DYNSYM, just set *SYMSCN like the comment says.
-
- * dwfl_end.c (dwfl_end): Iterate on modulelist chain, not modules array.
-
- * argp-std.c (parse_opt): On failure, call dwfl_end before argp_failure.
-
-2008-03-19 Roland McGrath <roland@redhat.com>
-
- * dwfl_module_getsrc.c: Adjust address for module bias before search.
-
-2008-03-01 Roland McGrath <roland@redhat.com>
-
- * libdwflP.h (__libdwfl_seterrno): Remove parameter name from
- prototype to avoid older compiler's complaint about reuse of the name.
- (__libdwfl_canon_error): Likewise.
-
-2008-02-19 Roland McGrath <roland@redhat.com>
-
- * relocate.c (relocate_section): Check for an unhandled relocation
- type before resolving a reloc's symbol. Lift DWFL_E_BADRELTYPE ->
- DWFL_E_UNKNOWN_MACHINE check out of loops.
-
- * dwfl_module_getdwarf.c (load_dw): Skip relocation if
- DEBUGFILE->relocated is already set.
-
-2008-01-26 Roland McGrath <roland@redhat.com>
-
- * dwfl_module_getdwarf.c (open_elf): Open FILE->name if it's non-null.
-
- * dwfl_build_id_find_elf.c (__libdwfl_open_by_build_id): Don't clear
- incoming *FILE_NAME at the start.
-
-2008-01-08 Roland McGrath <roland@redhat.com>
-
- * Makefile.am (euinclude): Variable removed.
- (pkginclude_HEADERS): Set this instead of euinclude_HEADERS.
-
-2007-10-23 Roland McGrath <roland@redhat.com>
-
- * linux-kernel-modules.c (report_kernel_archive): Reorder the kernel
- module to appear first.
-
-2007-10-20 Roland McGrath <roland@redhat.com>
-
- * offline.c (process_archive_member): Take FD argument, pass it down
- to process_file. Return Elf_Cmd, not bool.
- Call elf_next here, always before elf_end.
- (process_archive): Update caller. Don't close FD here unless there
- are no member refs.
-
- * dwfl_module.c (free_file): Close fd only when elf_end returns zero.
-
- * libdwflP.h (struct dwfl_file): New bool member `relocated'.
- * dwfl_module_getdwarf.c (dwfl_module_getelf): For ET_REL, apply
- partial relocation to one or both files.
- (dwfl_module_getdwarf): For ET_REL, make sure extra sections'
- relocations have been applied to the debug file if dwfl_module_getelf
- has been used before.
-
- * relocate.c (resolve_symbol): New function.
- (relocate_section): Call it.
-
- * relocate.c (relocate_getsym): Handle null MOD->symfile.
- (relocate_section): Take new bool arg, PARTIAL. If true,
- no error for BADRELTYPE/RELUNDEF, instead just skip them
- and leave only those skipped relocs behind the reloc section.
- (__libdwfl_relocate_section): Take new arg, pass it down.
- (__libdwfl_relocate): Take new bool arg, DEBUG. If false,
- do partial relocation on all sections.
- * dwfl_module_getdwarf.c (load_dw): Update caller.
- * libdwflP.h: Update decls.
- * derelocate.c (dwfl_module_address_section): Pass new argument
- to __libdwfl_relocate_section, true.
-
- * derelocate.c (cache_sections): Don't cache reloc sections when
- section_address callback is null.
-
-2007-10-19 Roland McGrath <roland@redhat.com>
-
- * relocate.c (relocate_section): Fix fencepost error in r_offset check.
-
- * derelocate.c (struct dwfl_relocation): Add member `relocs'.
- (struct secref): Likewise.
- (cache_sections): Cache the relocation section referring to each
- section we cache, if any.
- (dwfl_module_address_section): Use __libdwfl_relocate_section as
- necessary.
-
- * relocate.c (struct reloc_symtab_cache): New type.
- (relocate_getsym): Use it instead of four arguments.
- (__libdwfl_relocate): Update caller.
- (relocate_section): New function, broken out of ...
- (__libdwfl_relocate): ... here.
- (__libdwfl_relocate_section): New function.
- * libdwflP.h: Declare it.
-
-2007-10-17 Roland McGrath <roland@redhat.com>
-
- * dwfl_module_getsym.c (dwfl_module_getsym): Apply MOD->symfile->bias
- to relocated st_value.
-
- * dwfl_report_elf.c (__libdwfl_report_elf): Align initial BASE for
- ET_REL to 0x100.
-
-2007-10-16 Roland McGrath <roland@redhat.com>
-
- * dwfl_report_elf.c (__libdwfl_report_elf): Readjust BASE when a later
- section has larger alignment requirements not met by the original BASE,
- rather than padding more between sections.
-
- * dwfl_report_elf.c (__libdwfl_report_elf): Fix bias calculation.
-
- * dwfl_module_build_id.c (__libdwfl_find_build_id): Apply module bias
- to sh_addr value.
-
- * dwfl_report_elf.c (__libdwfl_report_elf): Don't be confused by BASE
- at zero in ET_REL case. Adjust BASE to necessary alignment.
-
- * dwfl_module_build_id.c (check_notes): Take -1, not 0, as stub value
- for DATA_VADDR.
- (__libdwfl_find_build_id): Update caller.
-
- * relocate.c (__libdwfl_relocate_value): Don't use sh_offset.
- * dwfl_report_elf.c (__libdwfl_report_elf): Likewise.
- * offline.c (dwfl_offline_section_address): Bail early if there is
- separate debug file.
-
- * relocate.c (__libdwfl_relocate): Don't return DWFL_E_NO_DWARF.
-
-2007-10-09 Roland McGrath <roland@redhat.com>
-
- * dwfl_report_elf.c (__libdwfl_report_elf): Clear SHDR->sh_offset when
- caching SHDR->sh_addr = 0.
- * offline.c (dwfl_offline_section_address): Never called for sh_addr
- really at 0, don't check for it. Use MOD->debug directly, not symfile.
-
- * dwfl_module_getdwarf.c (load_symtab): Return success properly when
- we've found SHT_SYMTAB.
-
- * relocate.c (relocate_getsym): New function.
- (__libdwfl_relocate): Use it.
- (__libdwfl_relocate_value): Take new Elf * argument. Make SYMSHSTRNDX
- be a pointer instead of value; cache getshstrndx result there.
- * libdwflP.h: Update decl.
- * derelocate.c (cache_sections): Update caller.
- Always work on the main file, not the symfile.
- (dwfl_module_address_section): Likewise.
- * dwfl_module_getsym.c (dwfl_module_getsym): Update caller.
-
-2007-10-07 Roland McGrath <roland@redhat.com>
-
- * offline.c (process_archive): Initialize MOD.
-
- * linux-kernel-modules.c (get_release): New function, broken out of ...
- (report_kernel): ... here. Call it.
- (try_kernel_name): Take new arg TRY_DEBUG, only try ".debug" if set.
- (find_kernel_elf): Update caller.
- (report_kernel_archive): New function.
- (dwfl_linux_kernel_report_offline): Call it.
-
- * offline.c (process_file): Take new arg PREDICATE, pass it down.
- (process_archive): Likewise.
- (process_archive_member): Likewise. When nonnull, let the predicate
- decide whether to use this member.
- (__libdwfl_report_offline): New function, broken out of ...
- (dwfl_report_offline): ... here. Call it.
- * libdwflP.h: Declare it.
-
- * offline.c (process_archive, process_archive_member): New functions.
- (process_elf, process_file): New functions, broken out of ...
- (dwfl_report_offline): ... here. Call process_file, which recurses on
- ELF_K_AR files.
-
- * dwfl_report_elf.c (__libdwfl_report_elf): New, broken out of ...
- (dwfl_report_elf): ... here. Call it.
- * libdwflP.h: Declare it.
-
-2007-10-06 Roland McGrath <roland@redhat.com>
-
- * derelocate.c (dwfl_module_relocations): Don't call
- dwfl_module_getdwarf.
-
- * derelocate.c (find_section): Use __libdwfl_seterrno, not
- __libdw_seterrno.
-
- * relocate.c (__libdwfl_relocate_value): Abuse sh_offset, not
- SHF_ALLOC, to cache sh_addr resolved to 0.
-
- * dwfl_report_elf.c (dwfl_report_elf): When an ET_REL file has sh_addr
- values nonzero already, just use its existing layout.
-
- * relocate.c (__libdwfl_relocate): Clear size of reloc section in its
- in-core shdr after applying it.
-
-2007-10-04 Ulrich Drepper <drepper@redhat.com>
-
- * linux-kernel-modules.c (dwfl_linux_kernel_report_kernel): Fake
- initialization of notes variable.
-
-2007-10-04 Roland McGrath <roland@redhat.com>
-
- * linux-kernel-modules.c (intuit_kernel_bounds): Take new arg NOTES,
- fill in with vaddr of "__start_notes" symbol if found.
- (check_notes): New function.
- (check_kernel_notes): New function.
- (dwfl_linux_kernel_report_kernel): Call it.
- (check_module_notes): New function.
- (dwfl_linux_kernel_report_modules): Call it.
-
- * linux-kernel-modules.c (dwfl_linux_kernel_find_elf):
- Try dwfl_build_id_find_elf first.
-
- * linux-kernel-modules.c (report_kernel): Don't leak FD if !REPORT.
- Set kernel module e_type to ET_DYN.
-
-2007-10-03 Roland McGrath <roland@redhat.com>
-
- * find-debuginfo.c (validate): New function, broken out of ...
- (find_debuginfo_in_path): ... here. New function, broken out of ...
- (dwfl_standard_find_debuginfo): ... here. Call it, after trying
- dwfl_build_id_find_debuginfo first.
-
- * dwfl_build_id_find_elf.c: New file.
- * dwfl_build_id_find_debuginfo.c: New file.
- * Makefile.am (libdwfl_a_SOURCES): Add them.
- * libdwfl.h: Declare them.
- * libdwflP.h: Add INTDECLs.
-
- * dwfl_module_build_id.c: New file.
- * dwfl_module_report_build_id.c: New file.
- * Makefile.am (libdwfl_a_SOURCES): Add them.
- * libdwfl.h: Declare them.
- * libdwflP.h (struct Dwfl_Module): New members build_id_bits,
- build_id_len, build_id_vaddr. Declare __libdwfl_find_build_id.
- * dwfl_module.c (__libdwfl_module_free): Free MOD->build_id_bits.
-
- * dwfl_module_getdwarf.c (find_offsets): New function.
- (find_dynsym): New function, calls that.
- (find_symtab): Call it.
-
-2007-09-11 Roland McGrath <roland@redhat.com>
-
- * dwfl_module_addrsym.c: Prefer a later global symbol at the same
- address if its st_size is smaller.
-
-2007-08-13 Roland McGrath <roland@redhat.com>
-
- * dwfl_module_addrsym.c: Add dead initializer for stupid compiler.
-
-2007-08-12 Roland McGrath <roland@redhat.com>
-
- * linux-kernel-modules.c (dwfl_linux_kernel_report_offline): Don't use
- FTS_LOGICAL.
-
- * elf-from-memory.c (elf_from_remote_memory): Don't reset LOADBASE on
- a second phdr if it happens to match EHDR_VMA exactly.
-
-2007-08-08 Roland McGrath <roland@redhat.com>
-
- * dwfl_module_addrsym.c: Don't use STT_SECTION, STT_FILE symbols and
- those with no names. Rewrite best symbol algorithm not to assume a
- sorted table and to be smarter handling sizeless symbols.
-
-2007-07-16 Roland McGrath <roland@redhat.com>
-
- * dwfl_module.c (dwfl_report_module): Increment DWFL->nmodules when
- reviving an existing module.
-
-2007-06-08 Roland McGrath <roland@redhat.com>
-
- * libdwflP.h: Fix #ifndef for config.h to use PACKAGE_NAME.
-
-2007-05-17 Roland McGrath <roland@redhat.com>
-
- * linux-kernel-modules.c (dwfl_linux_kernel_report_offline): Look at
- whole /lib/modules/VERSION tree, not just /lib/modules/VERSION/kernel.
- (dwfl_linux_kernel_find_elf): Likewise.
-
- * linux-kernel-modules.c (dwfl_linux_kernel_report_modules): Use
- getline and sscanf instead of fscanf.
-
-2007-05-08 Roland McGrath <roland@redhat.com>
-
- * offline.c (dwfl_offline_section_address): Don't assume section
- numbers match between stripped and debuginfo files. Instead, assume
- only that the ordering among SHF_ALLOC sections matches.
-
- * linux-kernel-modules.c (report_kernel): Change RELEASE argument to
- pointer to string.
- (dwfl_linux_kernel_report_offline): Update caller.
- (dwfl_linux_kernel_report_kernel): Likewise.
-
-2007-04-23 Roland McGrath <roland@redhat.com>
-
- * argp-std.c (options): Fix group title string.
-
- * argp-std.c (parse_opt): Handle ARGP_KEY_ERROR, free the Dwfl.
- Update via STATE->input every time we set STATE->hook, not only at
- ARGP_KEY_SUCCESS.
-
- * dwfl_module.c (free_file): Free FILE->name.
-
-2007-04-16 Roland McGrath <roland@redhat.com>
-
- * derelocate.c (cache_sections): Apply bias to sh_addr.
- (compare_secrefs): Fix address comparison to avoid signed overflow.
- (find_section): New function, broken out of ...
- (dwfl_module_relocate_address): ... here, call it.
- (check_module): New function, broken out of ...
- (dwfl_module_relocate_address): ... here, call it.
- (dwfl_module_address_section): New function.
- * libdwfl.h: Declare it.
-
-2007-03-26 Roland McGrath <roland@redhat.com>
-
- * dwfl_module.c (__libdwfl_module_free): Free MOD itself.
-
-2007-03-18 Roland McGrath <roland@redhat.com>
-
- * dwfl_module_getdwarf.c (find_debuglink): New function, broken out of
- (find_debuginfo): ... here. Call it.
- Don't return error for libelf errors finding .gnu_debuglink section.
-
-2007-03-12 Roland McGrath <roland@redhat.com>
-
- * dwfl_module.c (dwfl_report_begin_add): New function broken out of ...
- (dwfl_report_begin): ... here. Call it.
- * libdwfl.h: Declare it.
- * libdwflP.h: Add INTDECL.
-
- * elf-from-memory.c (elf_from_remote_memory): Fix 32/64 typo.
-
- * offline.c: Comment typo fix.
-
-2007-03-04 Roland McGrath <roland@redhat.com>
-
- * linux-kernel-modules.c (KERNEL_MODNAME): New macro for "kernel".
- (find_kernel_elf): New function, broken out of ...
- (report_kernel): ... here. Call it.
- (dwfl_linux_kernel_find_elf): Use it for module named KERNEL_MODNAME.
- (intuit_kernel_bounds): New function, grovel /proc/kallsyms to guess
- virtual address bounds of kernel from symbols rounded to page size.
- (dwfl_linux_kernel_report_kernel): Use that if it works, before
- resorting to report_kernel.
-
- * dwfl_module_getdwarf.c (open_elf): Set MOD->e_type to ET_DYN for an
- ET_EXEC file with nonzero bias.
-
- * dwfl_module_addrname.c (dwfl_module_addrname): Just call
- dwfl_module_addrsym. Guts moved to ...
- * dwfl_module_addrsym.c: ... here; new file.
- * Makefile.am (libdwfl_a_SOURCES): Add it.
- * libdwfl.h: Declare dwfl_module_addrsym.
- * libdwflP.h: Add INTDECL.
-
-2007-03-03 Roland McGrath <roland@redhat.com>
-
- * dwfl_module.c (free_file): New function, broken out of ...
- (__libdwfl_module_free): ... here. In it, close fd after elf_end.
-
- * dwfl_module_getdwarf.c (open_elf): Close fd and reset to -1
- on libelf failure.
-
-2007-03-02 Roland McGrath <roland@redhat.com>
-
- * linux-kernel-modules.c: Fix bogus error test for asprintf call.
-
-2007-02-02 Roland McGrath <roland@redhat.com>
-
- * dwfl_addrmodule.c (dwfl_addrmodule): Match a module's high boundary
- address exactly if it's no other module's low boundary.
-
- * dwfl_module_addrname.c (dwfl_module_addrname): If no symbol's value
- and size cover the address, select the closest symbol with st_size==0
- that lies in the same section.
-
-2007-01-29 Roland McGrath <roland@redhat.com>
-
- * dwfl_version.c (dwfl_version): Return PACKAGE_VERSION,
- not PACKAGE_STRING.
-
-2007-01-20 Roland McGrath <roland@redhat.com>
-
- * relocate.c (__libdwfl_relocate_value): Treat section_address of -1
- as omitted, not 0.
- * libdwfl.h (Dwfl_Callbacks): Update comment.
- * derelocate.c (cache_sections): Don't ignore sh_addr == 0 sections.
- * linux-kernel-modules.c (dwfl_linux_kernel_module_section_address):
- For ignored missing section, use -1 instead of 0.
- * offline.c (dwfl_offline_section_address): Expect a call for 0.
-
-2007-01-19 Roland McGrath <roland@redhat.com>
-
- * argp-std.c (parse_opt): For -e, reset DWFL->offline_next_address to
- zero so a lone -e foo.so is shown without address bias.
-
-2007-01-10 Roland McGrath <roland@redhat.com>
-
- * linux-kernel-modules.c (report_kernel): Check asprintf return value
- directly instead of via side effect, to silence warn_unused_result.
- (dwfl_linux_kernel_report_offline): Likewise.
- (dwfl_linux_kernel_find_elf): Likewise.
- (dwfl_linux_kernel_module_section_address): Likewise.
- * find-debuginfo.c (try_open): Likewise.
- * linux-proc-maps.c (find_sysinfo_ehdr): Likewise.
- (dwfl_linux_proc_report): Likewise.
-
- * libdwfl.h (dwfl_begin): Require nonnull argument.
-
-2006-12-27 Roland McGrath <roland@redhat.com>
-
- * dwfl_module.c (compare_modules): Fix address comparison to avoid
- signed overflow. Patch by Frank Ch. Eigler <fche@redhat.com>.
-
-2006-10-30 Roland McGrath <roland@redhat.com>
-
- * dwfl_module.c (dwfl_report_module): Comment typo fix.
-
-2006-09-05 Roland McGrath <roland@redhat.com>
-
- * derelocate.c (cache_sections): Use alloca instead of variable-sized
- auto array, in function already alloca.
-
-2006-08-14 Roland McGrath <roland@redhat.com>
-
- * linux-kernel-modules.c (try_kernel_name): If the call to
- dwfl_standard_find_debuginfo produces no results, try it again
- with NULL as DEBUGLINK_FILE to try *FNAME with .debug suffix.
-
- * find-debuginfo.c (DEFAULT_DEBUGINFO_PATH): Macro moved ...
- * libdwflP.h: ... to here.
- * linux-kernel-modules.c (try_kernel_name): Skip manual open if it
- repeats the first thing dwfl_standard_find_debuginfo will try.
-
- * linux-kernel-modules.c (MODULE_SECT_NAME_LEN): New macro.
- (dwfl_linux_kernel_module_section_address): If a /sys file is missing
- and the section name is >= MODULE_SECT_NAME_LEN, try truncating the
- section name.
-
-2006-07-12 Ulrich Drepper <drepper@redhat.com>
-
- * cu.c: Adjust for internal_function_def removal.
- * dwfl_error.c: Likewise.
- * dwfl_module.c: Likewise.
- * dwfl_module_getdwarf.c: Likewise.
- * lines.c: Likewise.
- * relocate.c: Likewise.
-
-2006-07-11 Ulrich Drepper <drepper@redhat.com>
-
- * dwfl_module.c (compare_modules): Don't return GElf_Sxword value,
- it can overflow the return value type.
- Patch by Tim Moore <timoore@redhat.com>.
-
-2006-06-28 Roland McGrath <roland@redhat.com>
-
- * libdwfl.h: Cosmetic changes.
-
- * dwfl_line_comp_dir.c: New file.
- * Makefile.am (libdwfl_a_SOURCES): Add it.
- * libdwfl.h: Declare dwfl_line_comp_dir.
-
- * dwfl_lineinfo.c (dwfl_lineinfo): Remove stray extern in defn.
-
- * dwfl_linecu.c: New file.
- * Makefile.am (libdwfl_a_SOURCES): Add it.
- * libdwfl.h: Declare dwfl_linecu.
-
- * libdwflP.h (dwfl_linecu_inline): Function renamed from dwfl_linecu.
- (dwfl_linecu): Define as macro.
-
- * relocate.c (__libdwfl_relocate): Use dwfl_module_getsym.
-
- * dwfl_module_getdwarf.c (dwfl_module_getsymtab): New function.
- (dwfl_module_addrname): Function moved ...
- * dwfl_module_addrname.c: ... here, new file.
- * dwfl_module_getsym.c: New file.
- * Makefile.am (libdwfl_a_SOURCES): Add them.
- * libdwfl.h: Declare dwfl_module_getsymtab, dwfl_module_getsym.
- * libdwflP.h: Add INTDECLs.
-
-2006-06-27 Roland McGrath <roland@redhat.com>
-
- * dwfl_module.c (dwfl_report_end): Whitespace fix.
-
-2006-06-13 Roland McGrath <roland@redhat.com>
-
- * elf-from-memory.c (elf_from_remote_memory): Fix 32/64 typo.
- Use __libdwfl_seterrno for elf_memory failure.
-
-2006-05-22 Roland McGrath <roland@redhat.com>
-
- * dwfl_module_return_value_location.c
- (dwfl_module_return_value_location): Use __libdwfl_module_getebl.
-
-2006-05-27 Ulrich Drepper <drepper@redhat.com>
-
- * libdwfl.h: Add extern "C".
-
-2006-05-22 Ulrich Drepper <drepper@redhat.com>
-
- * cu.c (addrarange): Handle files without aranges information.
-
-2006-05-16 Ulrich Drepper <drepper@redhat.com>
-
- * dwfl_addrmodule.c (dwfl_addrmodule): Also return NULL of
- ->modules is NULL.
-
-2006-02-26 Roland McGrath <roland@redhat.com>
-
- * dwfl_version.c: New file.
- * Makefile.am (libdwfl_a_SOURCES): Add it.
- * libdwfl.h: Declare dwfl_version.
-
- * offline.c (dwfl_report_offline): Account for dwfl_report_elf having
- aligned up from DWFL->offline_next_address when checking for overlap.
-
-2005-12-22 Roland McGrath <roland@redhat.com>
-
- * argp-std.c (parse_opt): Call dwfl_end in failure cases.
-
- * linux-proc-maps.c (proc_maps_report): New function, broken out of ...
- (dwfl_linux_proc_report): ... here. Call it.
- (dwfl_linux_proc_maps_report): New function.
- * libdwfl.h: Declare it.
- * libdwflP.h: Add INTDECL.
- * argp-std.c (options, parse_opt): Grok -M/--linux-process-map.
-
- * dwfl_nextcu.c (dwfl_nextcu): Don't fail when dwfl_module_getdwarf
- failed with DWFL_E_NO_DWARF.
-
-2005-11-26 Roland McGrath <roland@redhat.com>
-
- * dwfl_end.c (dwfl_end): Free the DWFL itself.
-
-2005-11-25 Roland McGrath <roland@redhat.com>
-
- * dwfl_module_getdwarf.c (__libdwfl_module_getebl): New function.
- (load_dw): Use it.
- * dwfl_module_register_names.c (dwfl_module_register_names): Likewise.
- * libdwflP.h: Declare it.
-
- * dwfl_module_register_names.c: New file.
- * Makefile.am (libdwfl_a_SOURCES): Add it.
- * libdwfl.h: Declare dwfl_module_register_names.
-
-2005-11-21 Roland McGrath <roland@redhat.com>
-
- * linux-kernel-modules.c (dwfl_linux_kernel_module_section_address):
- Don't leak malloc'd file name.
- If a /sys/.../sections file is missing and starts with ".init",
- try the variant with "_init" too; catches PPC64 kernel braindamage.
-
-2005-11-15 Roland McGrath <roland@redhat.com>
-
- * libdwfl.h: Comment fixes.
-
- * dwfl_module_return_value_location.c: Add unlikely for error case.
-
-2005-11-13 Roland McGrath <roland@redhat.com>
-
- * dwfl_return_value_location.c: New file.
- * Makefile.am (libdwfl_a_SOURCES): Add it.
- * libdwfl.h: Declare dwfl_module_return_value_location.
- * libdwflP.h (DWFL_ERRORS): Add DWFL_E_WEIRD_TYPE.
-
-2005-10-20 Roland McGrath <roland@redhat.com>
-
- * libdwflP.h (DWFL_ERRORS): New error UNKNOWN_MACHINE.
- * relocate.c (__libdwfl_relocate): Return DWFL_E_UNKNOWN_MACHINE
- instead of DWFL_E_BADRELTYPE if ebl_get_elfmachine yields EM_NONE.
-
-2005-10-01 Roland McGrath <roland@redhat.com>
-
- * linux-kernel-modules.c (report_kernel): Return ENOENT if we fail
- with errno 0.
-
-2005-09-19 Roland McGrath <roland@redhat.com>
-
- * linux-kernel-modules.c (dwfl_linux_kernel_report_modules): Use
- PRIx64 instead of PRIi64, lest addresses with high bits set overflow
- the signed integer reading; they will just have to be in hexadecimal.
- (dwfl_linux_kernel_module_section_address): Likewise.
-
-2005-08-28 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am (%.os): Use COMPILE.os.
- (COMPILE.os): Filter out gconv options.
-
-2005-08-25 Roland McGrath <roland@redhat.com>
-
- * cu.c (__libdwfl_nextcu): Return success when dwarf_nextcu hits end.
- * dwfl_nextcu.c (dwfl_nextcu): Skip modules with no dwarf info.
-
-2005-08-24 Roland McGrath <roland@redhat.com>
-
- * dwfl_lineinfo.c (dwfl_lineinfo): Add bias, don't subtract it.
-
- * argp-std.c [_MUDFLAP] (__libdwfl_argp_mudflap_options): New function,
- magic initializer to set -heur-stack-bound option.
-
-2005-08-22 Roland McGrath <roland@redhat.com>
-
- * dwfl_validate_address.c: New file.
- * Makefile.am (libdwfl_a_SOURCES): Add it.
- * libdwfl.h: Declare dwfl_validate_address.
-
- * derelocate.c (dwfl_module_relocate_address): Add INTDEF.
- * libdwflP.h: Add INTDECL.
-
- * dwfl_module_getdwarf.c (find_symtab): Use elf_getdata instead of
- elf_rawdata for symbol-related sections.
-
- * offline.c (dwfl_report_offline): Move offline_next_address outside
- module's range, in case it's an ET_EXEC using fixed segment locations.
- * libdwfl.h: Update comment.
-
- * dwfl_report_elf.c (dwfl_report_elf): Align BASE to first segment's
- required alignment.
-
-2005-08-20 Roland McGrath <roland@redhat.com>
-
- * linux-kernel-modules.c (report_kernel): Take new argument PREDICATE,
- function to choose whether to report.
- (dwfl_linux_kernel_report_offline): Likewise.
- * libdwfl.h: Update decl.
- * argp-std.c (parse_opt): Update caller.
-
- * dwfl_getsrclines.c: New file.
- * dwfl_onesrcline.c: New file.
- * Makefile.am (libdwfl_a_SOURCES): Add them.
- * libdwfl.h: Declare dwfl_getsrclines, dwfl_onesrcline.
-
- * linux-kernel-modules.c (dwfl_linux_kernel_find_elf): Don't leak
- MODULESDIR[0]. Call fts_close on failure.
-
- * dwfl_module_getdwarf.c (load_dw): Take dwfl_file * instead of Elf *.
- Close ET_REL file descriptors after relocation.
- (find_dw): Update caller.
- * offline.c (dwfl_report_offline): Get the file into memory and close
- the file descriptor.
-
- * dwfl_module_getdwarf.c (find_debuginfo): Do nothing when
- MOD->debug.elf is already set.
-
- * find-debuginfo.c (try_open): Use TEMP_FAILURE_RETRY.
- (dwfl_standard_find_debuginfo): Fail on errors not ENOENT or ENOTDIR.
-
- * argp-std.c (options, parse_opt): Grok -K/--offline-kernel, use
- dwfl_linux_kernel_report_offline with offline_callbacks.
-
- * linux-kernel-modules.c (report_kernel): New function, broken out of
- ...
- (dwfl_linux_kernel_report_kernel): ... here. Use it.
- (dwfl_linux_kernel_report_offline): New function.
- * libdwfl.h: Declare it.
- * libdwflP.h: Add INTDECL.
-
-2005-08-19 Roland McGrath <roland@redhat.com>
-
- Use standard debuginfo search path to look for vmlinux.
- * find-debuginfo.c (dwfl_standard_find_debuginfo): Don't check CRC if
- passed zero.
- * linux-kernel-modules.c (try_kernel_name): New function, broken out
- of ...
- (dwfl_linux_kernel_report_kernel): ... here. Use it.
-
- * argp-std.c (offline_callbacks): New variable.
- (parse_opt): Use it for -e. Allow multiple -e options.
-
- * offline.c: New file.
- * Makefile.am (libdwfl_a_SOURCES): Add it.
- * libdwfl.h: Declare dwfl_offline_section_address, dwfl_report_offline.
- * libdwflP.h: Add INTDECLs.
- (OFFLINE_REDZONE): New macro.
- (struct Dwfl): New member `offline_next_address'.
- * dwfl_begin.c (dwfl_begin): Initialize it.
- * dwfl_module.c (dwfl_report_begin): Likewise.
-
- * dwfl_report_elf.c (dwfl_report_elf): Accept all types. When ET_REL,
- do a nominal absolute section layout starting at BASE.
- * libdwfl.h: Update comment.
-
-2005-08-18 Roland McGrath <roland@redhat.com>
-
- * dwfl_module_getsrc_file.c (dwfl_module_getsrc_file): Do
- dwfl_module_getdwarf if necessary.
-
- * dwfl_report_elf.c (dwfl_report_elf): Permit ET_REL with BASE==0.
- * libdwfl.h: Update comment.
-
- * derelocate.c: New file.
- * Makefile.am (libdwfl_a_SOURCES): Add it.
-
- * libdwflP.h (struct Dwfl_Module): isrel -> e_type.
- * dwfl_report_elf.c (dwfl_report_elf): Initialize it.
- * dwfl_module_getdwarf.c (open_elf): Update initialization.
- (load_dw, dwfl_module_addrname): Update uses.
- * relocate.c (__libdwfl_relocate): Likewise.
-
-2005-08-04 Roland McGrath <roland@redhat.com>
-
- * libdwfl.h (Dwfl_Callbacks.section_address): Take additional
- arguments SHNDX, SHDR.
- (dwfl_linux_kernel_module_section_address): Update prototype.
- * relocate.c (__libdwfl_relocate_value): Update caller.
- * linux-kernel-modules.c (dwfl_linux_kernel_module_section_address):
- Take the new arguments.
-
-2005-08-10 Roland McGrath <roland@redhat.com>
-
- * relocate.c (__libdwfl_relocate): Take argument DEBUGFILE,
- use it instead of MOD->debug.file.
- * libdwflP.h: Update decl.
- * dwfl_module_getdwarf.c (load_dw): Update caller.
- Fixes bug #165598.
-
-2005-08-09 Roland McGrath <roland@redhat.com>
-
- * libdwflP.h: Include ../libdw/libdwP.h for its INTDECLs.
- * cu.c: Use INTUSE on dwarf_* calls.
- * dwfl_error.c: Likewise.
- * dwfl_module.c: Likewise.
- * dwfl_module_getdwarf.c: Likewise.
- * dwfl_module_getsrc_file.c: Likewise.
- * lines.c: Likewise.
-
-2005-08-07 Roland McGrath <roland@redhat.com>
-
- * linux-kernel-modules.c (dwfl_linux_kernel_find_elf): When module
- names contain '_' or '-', look for files named either "foo-bar.ko"
- or "foo_bar.ko".
-
-2005-07-29 Roland McGrath <roland@redhat.com>
-
- * loc2c.c: File removed.
- * loc2c.h: File removed.
- * loc2c-runtime.h: File removed.
- * test2.c: File removed.
- * Makefile.am (EXTRA_DIST): Variable removed.
- (noinst_HEADERS): Remove loc2c.h from here.
-
-2005-07-28 Ulrich Drepper <drepper@redhat.com>
-
- * libdwfl.h: Add a few missing extern for function prototypes.
-
- * libdwfl_crc32.c: New file.
- * libdwfl_crc32_file.c: New file.
- * libdwflP.h: Declare the new functions.
- * Makefile.am (libdwfl_a_SOURCES): Add libdwfl_crc32.c and
- libdwfl_crc32_file.c.
- * libdwfl/find-debuginfo.c (check_crc): Use __libdwfl_crc32_file
- instead of crc32_file.
-
-2005-07-28 Roland McGrath <roland@redhat.com>
-
- * ptest.c: Moved to ../tests/dwflmodtest.c.
-
- * Makefile.am (noinst_PROGRAMS): Variable removed.
- (libdwfl_so_SOURCES, libdwfl_LIBS, libdwfl_so_LDADD): Likewise.
- (EXTRA_DIST, ptest_LDADD, test2_LDADD): Likewise.
- (libdwfl): Don't use libdwfl.so any more.
- (libdwfl.so, install, uninstall): Targets removed.
- (test2_SOURCES): Define EXTRA_DIST instead of this.
- * libdwfl.map: File removed.
-
- * libdwfl.h: Use "" for libdw.h #include.
-
-2005-07-27 Roland McGrath <roland@redhat.com>
-
- * libdwfl.map: Add dwfl_getmodules.
-
-2005-07-23 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: Fix rules to allow building with mudflap.
-
-2005-07-21 Roland McGrath <roland@redhat.com>
-
- * Makefile.am (noinst_HEADERS): Add loc2c.c.
-
- * test2.c (main): Check sscanf result to quiet warning.
-
-2005-07-20 Roland McGrath <roland@redhat.com>
-
- * libdwfl-branch merged, creating this direcotry.
diff --git a/libdwfl/Makefile.am b/libdwfl/Makefile.am
deleted file mode 100644
index db14db2..0000000
--- a/libdwfl/Makefile.am
+++ /dev/null
@@ -1,108 +0,0 @@
-## Makefile.am for libdwfl library subdirectory in elfutils.
-##
-## Process this file with automake to create Makefile.in
-##
-## Copyright (C) 2005, 2006, 2007, 2008 Red Hat, Inc.
-## This file is part of Red Hat elfutils.
-##
-## Red Hat elfutils is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by the
-## Free Software Foundation; version 2 of the License.
-##
-## Red Hat elfutils 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
-## General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License along
-## with Red Hat elfutils; if not, write to the Free Software Foundation,
-## Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-##
-## Red Hat elfutils is an included package of the Open Invention Network.
-## An included package of the Open Invention Network is a package for which
-## Open Invention Network licensees cross-license their patents. No patent
-## license is granted, either expressly or impliedly, by designation as an
-## included package. Should you wish to participate in the Open Invention
-## Network licensing program, please visit www.openinventionnetwork.com
-## <http://www.openinventionnetwork.com>.
-##
-DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H
-if MUDFLAP
-AM_CFLAGS = -fmudflap
-else
-AM_CFLAGS =
-endif
-AM_CFLAGS += -Wall -Werror -Wshadow -Wunused -Wformat=2 -Wextra -std=gnu99
-INCLUDES = -I. -I$(srcdir) -I$(srcdir)/../libelf -I$(srcdir)/../libebl \
- -I$(srcdir)/../libdw -I.. -I$(srcdir)/../lib
-VERSION = 1
-
-COMPILE.os = $(filter-out -fprofile-arcs, $(filter-out -ftest-coverage, \
- $(COMPILE)))
-
-noinst_LIBRARIES = libdwfl.a
-if !MUDFLAP
-noinst_LIBRARIES += libdwfl_pic.a
-endif
-
-pkginclude_HEADERS = libdwfl.h
-
-libdwfl_a_SOURCES = dwfl_begin.c dwfl_end.c dwfl_error.c dwfl_version.c \
- dwfl_module.c dwfl_report_elf.c relocate.c \
- dwfl_module_build_id.c dwfl_module_report_build_id.c \
- derelocate.c offline.c segment.c \
- dwfl_module_info.c dwfl_getmodules.c \
- dwfl_module_getdwarf.c dwfl_getdwarf.c \
- dwfl_validate_address.c \
- argp-std.c find-debuginfo.c \
- dwfl_build_id_find_elf.c \
- dwfl_build_id_find_debuginfo.c \
- linux-kernel-modules.c linux-proc-maps.c \
- dwfl_addrmodule.c dwfl_addrdwarf.c \
- cu.c dwfl_module_nextcu.c dwfl_nextcu.c dwfl_cumodule.c \
- dwfl_module_addrdie.c dwfl_addrdie.c \
- lines.c dwfl_lineinfo.c dwfl_line_comp_dir.c \
- dwfl_linemodule.c dwfl_linecu.c \
- dwfl_getsrclines.c dwfl_onesrcline.c \
- dwfl_module_getsrc.c dwfl_getsrc.c \
- dwfl_module_getsrc_file.c \
- libdwfl_crc32.c libdwfl_crc32_file.c \
- elf-from-memory.c \
- dwfl_module_getsym.c \
- dwfl_module_addrname.c dwfl_module_addrsym.c \
- dwfl_module_return_value_location.c \
- dwfl_module_register_names.c \
- dwfl_segment_report_module.c \
- link_map.c core-file.c
-
-
-if MUDFLAP
-libdwfl = libdwfl.a $(libdw) $(libebl) $(libelf) $(libeu)
-libdw = ../libdw/libdw.a
-libelf = ../libelf/libelf.a
-libmudflap = -lmudflap
-else
-libdwfl = $(libdw)
-libdw = ../libdw/libdw.so
-libelf = ../libelf/libelf.so
-endif
-libebl = ../libebl/libebl.a
-libeu = ../lib/libeu.a
-
-
-if !MUDFLAP
-libdwfl_pic_a_SOURCES =
-am_libdwfl_pic_a_OBJECTS = $(libdwfl_a_SOURCES:.c=.os)
-
-%.os: %.c %.o
- if $(COMPILE.os) -c -o $@ -fpic -DPIC -DSHARED -MT $@ -MD -MP \
- -MF "$(DEPDIR)/$*.Tpo" `test -f '$<' || echo '$(srcdir)/'`$<; \
- then cat "$(DEPDIR)/$*.Tpo" >> "$(DEPDIR)/$*.Po"; \
- rm -f "$(DEPDIR)/$*.Tpo"; \
- else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
- fi
-endif
-
-noinst_HEADERS = libdwflP.h
-
-CLEANFILES = $(am_libdwfl_pic_a_OBJECTS)
diff --git a/libdwfl/Makefile.in b/libdwfl/Makefile.in
deleted file mode 100644
index dd61566..0000000
--- a/libdwfl/Makefile.in
+++ /dev/null
@@ -1,594 +0,0 @@
-# Makefile.in generated by automake 1.10.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-@MUDFLAP_FALSE@am__append_1 = libdwfl_pic.a
-@MUDFLAP_TRUE@am_libdwfl_pic_a_OBJECTS =
-subdir = libdwfl
-DIST_COMMON = $(noinst_HEADERS) $(pkginclude_HEADERS) \
- $(srcdir)/Makefile.am $(srcdir)/Makefile.in ChangeLog
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-LIBRARIES = $(noinst_LIBRARIES)
-AR = ar
-ARFLAGS = cru
-libdwfl_a_AR = $(AR) $(ARFLAGS)
-libdwfl_a_LIBADD =
-am_libdwfl_a_OBJECTS = dwfl_begin.$(OBJEXT) dwfl_end.$(OBJEXT) \
- dwfl_error.$(OBJEXT) dwfl_version.$(OBJEXT) \
- dwfl_module.$(OBJEXT) dwfl_report_elf.$(OBJEXT) \
- relocate.$(OBJEXT) dwfl_module_build_id.$(OBJEXT) \
- dwfl_module_report_build_id.$(OBJEXT) derelocate.$(OBJEXT) \
- offline.$(OBJEXT) segment.$(OBJEXT) dwfl_module_info.$(OBJEXT) \
- dwfl_getmodules.$(OBJEXT) dwfl_module_getdwarf.$(OBJEXT) \
- dwfl_getdwarf.$(OBJEXT) dwfl_validate_address.$(OBJEXT) \
- argp-std.$(OBJEXT) find-debuginfo.$(OBJEXT) \
- dwfl_build_id_find_elf.$(OBJEXT) \
- dwfl_build_id_find_debuginfo.$(OBJEXT) \
- linux-kernel-modules.$(OBJEXT) linux-proc-maps.$(OBJEXT) \
- dwfl_addrmodule.$(OBJEXT) dwfl_addrdwarf.$(OBJEXT) \
- cu.$(OBJEXT) dwfl_module_nextcu.$(OBJEXT) \
- dwfl_nextcu.$(OBJEXT) dwfl_cumodule.$(OBJEXT) \
- dwfl_module_addrdie.$(OBJEXT) dwfl_addrdie.$(OBJEXT) \
- lines.$(OBJEXT) dwfl_lineinfo.$(OBJEXT) \
- dwfl_line_comp_dir.$(OBJEXT) dwfl_linemodule.$(OBJEXT) \
- dwfl_linecu.$(OBJEXT) dwfl_getsrclines.$(OBJEXT) \
- dwfl_onesrcline.$(OBJEXT) dwfl_module_getsrc.$(OBJEXT) \
- dwfl_getsrc.$(OBJEXT) dwfl_module_getsrc_file.$(OBJEXT) \
- libdwfl_crc32.$(OBJEXT) libdwfl_crc32_file.$(OBJEXT) \
- elf-from-memory.$(OBJEXT) dwfl_module_getsym.$(OBJEXT) \
- dwfl_module_addrname.$(OBJEXT) dwfl_module_addrsym.$(OBJEXT) \
- dwfl_module_return_value_location.$(OBJEXT) \
- dwfl_module_register_names.$(OBJEXT) \
- dwfl_segment_report_module.$(OBJEXT) link_map.$(OBJEXT) \
- core-file.$(OBJEXT)
-libdwfl_a_OBJECTS = $(am_libdwfl_a_OBJECTS)
-libdwfl_pic_a_AR = $(AR) $(ARFLAGS)
-libdwfl_pic_a_LIBADD =
-libdwfl_pic_a_OBJECTS = $(am_libdwfl_pic_a_OBJECTS)
-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-SOURCES = $(libdwfl_a_SOURCES) $(libdwfl_pic_a_SOURCES)
-DIST_SOURCES = $(libdwfl_a_SOURCES) $(libdwfl_pic_a_SOURCES)
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
- $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
- *) f=$$p;; \
- esac;
-am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-am__installdirs = "$(DESTDIR)$(pkgincludedir)"
-pkgincludeHEADERS_INSTALL = $(INSTALL_HEADER)
-HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEBUGPRED = @DEBUGPRED@
-DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H
-DEPDIR = @DEPDIR@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EXEEXT = @EXEEXT@
-GMSGFMT = @GMSGFMT@
-GMSGFMT_015 = @GMSGFMT_015@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LDFLAGS = @LDFLAGS@
-LEX = @LEX@
-LEXLIB = @LEXLIB@
-LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
-LIBEBL_SUBDIR = @LIBEBL_SUBDIR@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LOCALEDIR = @LOCALEDIR@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MKDIR_P = @MKDIR_P@
-MODVERSION = @MODVERSION@
-MSGFMT = @MSGFMT@
-MSGFMT_015 = @MSGFMT_015@
-MSGMERGE = @MSGMERGE@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-RANLIB = @RANLIB@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-USE_NLS = @USE_NLS@
-VERSION = 1
-XGETTEXT = @XGETTEXT@
-XGETTEXT_015 = @XGETTEXT_015@
-YACC = @YACC@
-YFLAGS = @YFLAGS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-base_cpu = @base_cpu@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-eu_version = @eu_version@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-@MUDFLAP_FALSE@AM_CFLAGS = -Wall -Werror -Wshadow -Wunused -Wformat=2 \
-@MUDFLAP_FALSE@ -Wextra -std=gnu99
-@MUDFLAP_TRUE@AM_CFLAGS = -fmudflap -Wall -Werror -Wshadow -Wunused \
-@MUDFLAP_TRUE@ -Wformat=2 -Wextra -std=gnu99
-INCLUDES = -I. -I$(srcdir) -I$(srcdir)/../libelf -I$(srcdir)/../libebl \
- -I$(srcdir)/../libdw -I.. -I$(srcdir)/../lib
-
-COMPILE.os = $(filter-out -fprofile-arcs, $(filter-out -ftest-coverage, \
- $(COMPILE)))
-
-noinst_LIBRARIES = libdwfl.a $(am__append_1)
-pkginclude_HEADERS = libdwfl.h
-libdwfl_a_SOURCES = dwfl_begin.c dwfl_end.c dwfl_error.c dwfl_version.c \
- dwfl_module.c dwfl_report_elf.c relocate.c \
- dwfl_module_build_id.c dwfl_module_report_build_id.c \
- derelocate.c offline.c segment.c \
- dwfl_module_info.c dwfl_getmodules.c \
- dwfl_module_getdwarf.c dwfl_getdwarf.c \
- dwfl_validate_address.c \
- argp-std.c find-debuginfo.c \
- dwfl_build_id_find_elf.c \
- dwfl_build_id_find_debuginfo.c \
- linux-kernel-modules.c linux-proc-maps.c \
- dwfl_addrmodule.c dwfl_addrdwarf.c \
- cu.c dwfl_module_nextcu.c dwfl_nextcu.c dwfl_cumodule.c \
- dwfl_module_addrdie.c dwfl_addrdie.c \
- lines.c dwfl_lineinfo.c dwfl_line_comp_dir.c \
- dwfl_linemodule.c dwfl_linecu.c \
- dwfl_getsrclines.c dwfl_onesrcline.c \
- dwfl_module_getsrc.c dwfl_getsrc.c \
- dwfl_module_getsrc_file.c \
- libdwfl_crc32.c libdwfl_crc32_file.c \
- elf-from-memory.c \
- dwfl_module_getsym.c \
- dwfl_module_addrname.c dwfl_module_addrsym.c \
- dwfl_module_return_value_location.c \
- dwfl_module_register_names.c \
- dwfl_segment_report_module.c \
- link_map.c core-file.c
-
-@MUDFLAP_FALSE@libdwfl = $(libdw)
-@MUDFLAP_TRUE@libdwfl = libdwfl.a $(libdw) $(libebl) $(libelf) $(libeu)
-@MUDFLAP_FALSE@libdw = ../libdw/libdw.so
-@MUDFLAP_TRUE@libdw = ../libdw/libdw.a
-@MUDFLAP_FALSE@libelf = ../libelf/libelf.so
-@MUDFLAP_TRUE@libelf = ../libelf/libelf.a
-@MUDFLAP_TRUE@libmudflap = -lmudflap
-libebl = ../libebl/libebl.a
-libeu = ../lib/libeu.a
-@MUDFLAP_FALSE@libdwfl_pic_a_SOURCES =
-@MUDFLAP_FALSE@am_libdwfl_pic_a_OBJECTS = $(libdwfl_a_SOURCES:.c=.os)
-noinst_HEADERS = libdwflP.h
-CLEANFILES = $(am_libdwfl_pic_a_OBJECTS)
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
- && exit 0; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits libdwfl/Makefile'; \
- cd $(top_srcdir) && \
- $(AUTOMAKE) --gnits libdwfl/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-clean-noinstLIBRARIES:
- -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
-libdwfl.a: $(libdwfl_a_OBJECTS) $(libdwfl_a_DEPENDENCIES)
- -rm -f libdwfl.a
- $(libdwfl_a_AR) libdwfl.a $(libdwfl_a_OBJECTS) $(libdwfl_a_LIBADD)
- $(RANLIB) libdwfl.a
-libdwfl_pic.a: $(libdwfl_pic_a_OBJECTS) $(libdwfl_pic_a_DEPENDENCIES)
- -rm -f libdwfl_pic.a
- $(libdwfl_pic_a_AR) libdwfl_pic.a $(libdwfl_pic_a_OBJECTS) $(libdwfl_pic_a_LIBADD)
- $(RANLIB) libdwfl_pic.a
-
-mostlyclean-compile:
- -rm -f *.$(OBJEXT)
-
-distclean-compile:
- -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-std.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/core-file.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cu.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/derelocate.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_addrdie.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_addrdwarf.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_addrmodule.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_begin.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_build_id_find_debuginfo.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_build_id_find_elf.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_cumodule.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_end.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_error.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_getdwarf.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_getmodules.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_getsrc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_getsrclines.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_line_comp_dir.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_linecu.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_lineinfo.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_linemodule.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_module.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_module_addrdie.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_module_addrname.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_module_addrsym.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_module_build_id.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_module_getdwarf.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_module_getsrc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_module_getsrc_file.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_module_getsym.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_module_info.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_module_nextcu.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_module_register_names.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_module_report_build_id.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_module_return_value_location.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_nextcu.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_onesrcline.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_report_elf.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_segment_report_module.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_validate_address.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_version.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf-from-memory.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/find-debuginfo.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdwfl_crc32.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdwfl_crc32_file.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lines.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/link_map.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/linux-kernel-modules.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/linux-proc-maps.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/offline.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/relocate.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/segment.Po@am__quote@
-
-.c.o:
-@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
-
-.c.obj:
-@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
-install-pkgincludeHEADERS: $(pkginclude_HEADERS)
- @$(NORMAL_INSTALL)
- test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)"
- @list='$(pkginclude_HEADERS)'; for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- f=$(am__strip_dir) \
- echo " $(pkgincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgincludedir)/$$f'"; \
- $(pkgincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgincludedir)/$$f"; \
- done
-
-uninstall-pkgincludeHEADERS:
- @$(NORMAL_UNINSTALL)
- @list='$(pkginclude_HEADERS)'; for p in $$list; do \
- f=$(am__strip_dir) \
- echo " rm -f '$(DESTDIR)$(pkgincludedir)/$$f'"; \
- rm -f "$(DESTDIR)$(pkgincludedir)/$$f"; \
- done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- mkid -fID $$unique
-tags: TAGS
-
-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- here=`pwd`; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$tags $$unique; \
- fi
-ctags: CTAGS
-CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- test -z "$(CTAGS_ARGS)$$tags$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$tags $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && cd $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) $$here
-
-distclean-tags:
- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- list='$(DISTFILES)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
- fi; \
- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
- else \
- test -f $(distdir)/$$file \
- || cp -p $$d/$$file $(distdir)/$$file \
- || exit 1; \
- fi; \
- done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LIBRARIES) $(HEADERS)
-installdirs:
- for dir in "$(DESTDIR)$(pkgincludedir)"; do \
- test -z "$$dir" || $(MKDIR_P) "$$dir"; \
- done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am
-
-distclean: distclean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
- distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-info: info-am
-
-info-am:
-
-install-data-am: install-pkgincludeHEADERS
-
-install-dvi: install-dvi-am
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-info: install-info-am
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-ps: install-ps-am
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-pkgincludeHEADERS
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
- clean-noinstLIBRARIES ctags distclean distclean-compile \
- distclean-generic distclean-tags distdir dvi dvi-am html \
- html-am info info-am install install-am install-data \
- install-data-am install-dvi install-dvi-am install-exec \
- install-exec-am install-html install-html-am install-info \
- install-info-am install-man install-pdf install-pdf-am \
- install-pkgincludeHEADERS install-ps install-ps-am \
- install-strip installcheck installcheck-am installdirs \
- maintainer-clean maintainer-clean-generic mostlyclean \
- mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
- tags uninstall uninstall-am uninstall-pkgincludeHEADERS
-
-
-@MUDFLAP_FALSE@%.os: %.c %.o
-@MUDFLAP_FALSE@ if $(COMPILE.os) -c -o $@ -fpic -DPIC -DSHARED -MT $@ -MD -MP \
-@MUDFLAP_FALSE@ -MF "$(DEPDIR)/$*.Tpo" `test -f '$<' || echo '$(srcdir)/'`$<; \
-@MUDFLAP_FALSE@ then cat "$(DEPDIR)/$*.Tpo" >> "$(DEPDIR)/$*.Po"; \
-@MUDFLAP_FALSE@ rm -f "$(DEPDIR)/$*.Tpo"; \
-@MUDFLAP_FALSE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
-@MUDFLAP_FALSE@ fi
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/libdwfl/argp-std.c b/libdwfl/argp-std.c
deleted file mode 100644
index 0a0f7eb..0000000
--- a/libdwfl/argp-std.c
+++ /dev/null
@@ -1,336 +0,0 @@
-/* Standard argp argument parsers for tools using libdwfl.
- Copyright (C) 2005, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-#include <argp.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <libintl.h>
-#include <fcntl.h>
-#include <unistd.h>
-
-/* gettext helper macros. */
-#define _(Str) dgettext ("elfutils", Str)
-
-
-#define OPT_DEBUGINFO 0x100
-#define OPT_COREFILE 0x101
-
-static const struct argp_option options[] =
-{
- { NULL, 0, NULL, 0, N_("Input selection options:"), 0 },
- { "executable", 'e', "FILE", 0, N_("Find addresses in FILE"), 0 },
- { "core", OPT_COREFILE, "COREFILE", 0,
- N_("Find addresses from signatures found in COREFILE"), 0 },
- { "pid", 'p', "PID", 0,
- N_("Find addresses in files mapped into process PID"), 0 },
- { "linux-process-map", 'M', "FILE", 0,
- N_("Find addresses in files mapped as read from FILE"
- " in Linux /proc/PID/maps format"), 0 },
- { "kernel", 'k', NULL, 0, N_("Find addresses in the running kernel"), 0 },
- { "offline-kernel", 'K', "RELEASE", OPTION_ARG_OPTIONAL,
- N_("Kernel with all modules"), 0 },
- { "debuginfo-path", OPT_DEBUGINFO, "PATH", 0,
- N_("Search path for separate debuginfo files"), 0 },
- { NULL, 0, NULL, 0, NULL, 0 }
-};
-
-static char *debuginfo_path;
-
-static const Dwfl_Callbacks offline_callbacks =
- {
- .find_debuginfo = INTUSE(dwfl_standard_find_debuginfo),
- .debuginfo_path = &debuginfo_path,
-
- .section_address = INTUSE(dwfl_offline_section_address),
-
- /* We use this table for core files too. */
- .find_elf = INTUSE(dwfl_build_id_find_elf),
- };
-
-static const Dwfl_Callbacks proc_callbacks =
- {
- .find_debuginfo = INTUSE(dwfl_standard_find_debuginfo),
- .debuginfo_path = &debuginfo_path,
-
- .find_elf = INTUSE(dwfl_linux_proc_find_elf),
- };
-
-static const Dwfl_Callbacks kernel_callbacks =
- {
- .find_debuginfo = INTUSE(dwfl_standard_find_debuginfo),
- .debuginfo_path = &debuginfo_path,
-
- .find_elf = INTUSE(dwfl_linux_kernel_find_elf),
- .section_address = INTUSE(dwfl_linux_kernel_module_section_address),
- };
-
-static error_t
-parse_opt (int key, char *arg, struct argp_state *state)
-{
- inline void failure (Dwfl *dwfl, int errnum, const char *msg)
- {
- if (dwfl != NULL)
- dwfl_end (dwfl);
- if (errnum == -1)
- argp_failure (state, EXIT_FAILURE, 0, "%s: %s",
- msg, INTUSE(dwfl_errmsg) (-1));
- else
- argp_failure (state, EXIT_FAILURE, errnum, "%s", msg);
- }
- inline error_t fail (Dwfl *dwfl, int errnum, const char *msg)
- {
- failure (dwfl, errnum, msg);
- return errnum == -1 ? EIO : errnum;
- }
-
- switch (key)
- {
- case OPT_DEBUGINFO:
- debuginfo_path = arg;
- break;
-
- case 'e':
- {
- Dwfl *dwfl = state->hook;
- if (dwfl == NULL)
- {
- dwfl = INTUSE(dwfl_begin) (&offline_callbacks);
- if (dwfl == NULL)
- return fail (dwfl, -1, arg);
- state->hook = dwfl;
-
- /* Start at zero so if there is just one -e foo.so,
- the DSO is shown without address bias. */
- dwfl->offline_next_address = 0;
- }
- if (dwfl->callbacks == &offline_callbacks)
- {
- if (INTUSE(dwfl_report_offline) (dwfl, "", arg, -1) == NULL)
- return fail (dwfl, -1, arg);
- state->hook = dwfl;
- }
- else
- {
- toomany:
- argp_error (state, "%s",
- _("only one of -e, -p, -k, -K, or --core allowed"));
- return EINVAL;
- }
- }
- break;
-
- case 'p':
- if (state->hook == NULL)
- {
- Dwfl *dwfl = INTUSE(dwfl_begin) (&proc_callbacks);
- int result = INTUSE(dwfl_linux_proc_report) (dwfl, atoi (arg));
- if (result != 0)
- return fail (dwfl, result, arg);
- state->hook = dwfl;
- }
- else
- goto toomany;
- break;
-
- case 'M':
- if (state->hook == NULL)
- {
- FILE *f = fopen (arg, "r");
- if (f == NULL)
- nofile:
- {
- int code = errno;
- argp_failure (state, EXIT_FAILURE, code,
- "cannot open '%s'", arg);
- return code;
- }
- Dwfl *dwfl = INTUSE(dwfl_begin) (&proc_callbacks);
- int result = INTUSE(dwfl_linux_proc_maps_report) (dwfl, f);
- fclose (f);
- if (result != 0)
- return fail (dwfl, result, arg);
- state->hook = dwfl;
- }
- else
- goto toomany;
- break;
-
- case OPT_COREFILE:
- {
- Dwfl *dwfl = state->hook;
- if (dwfl == NULL)
- state->hook = dwfl = INTUSE(dwfl_begin) (&offline_callbacks);
- /* Permit -e and --core together. */
- else if (dwfl->callbacks != &offline_callbacks)
- goto toomany;
-
- int fd = open64 (arg, O_RDONLY);
- if (fd < 0)
- goto nofile;
-
- Elf *core = elf_begin (fd, ELF_C_READ_MMAP_PRIVATE, NULL);
- if (core == NULL)
- {
- close (fd);
- argp_failure (state, EXIT_FAILURE, 0,
- _("cannot read ELF core file: %s"),
- elf_errmsg (-1));
- return EIO;
- }
-
- GElf_Ehdr ehdr;
- int result = INTUSE(dwfl_core_file_report) (dwfl, core,
- gelf_getehdr (core, &ehdr));
- if (result < 0)
- {
- elf_end (core);
- close (fd);
- return fail (dwfl, result, arg);
- }
-
- /* From now we leak FD and CORE. */
-
- if (result == 0)
- {
- argp_failure (state, EXIT_FAILURE, 0,
- _("No modules recognized in core file"));
- return ENOENT;
- }
- }
- break;
-
- case 'k':
- if (state->hook == NULL)
- {
- Dwfl *dwfl = INTUSE(dwfl_begin) (&kernel_callbacks);
- int result = INTUSE(dwfl_linux_kernel_report_kernel) (dwfl);
- if (result != 0)
- return fail (dwfl, result, _("cannot load kernel symbols"));
- result = INTUSE(dwfl_linux_kernel_report_modules) (dwfl);
- if (result != 0)
- /* Non-fatal to have no modules since we do have the kernel. */
- failure (dwfl, result, _("cannot find kernel modules"));
- state->hook = dwfl;
- }
- else
- goto toomany;
- break;
-
- case 'K':
- if (state->hook == NULL)
- {
- Dwfl *dwfl = INTUSE(dwfl_begin) (&offline_callbacks);
- int result = INTUSE(dwfl_linux_kernel_report_offline) (dwfl, arg,
- NULL);
- if (result != 0)
- return fail (dwfl, result, _("cannot find kernel or modules"));
- state->hook = dwfl;
- }
- else
- goto toomany;
- break;
-
- case ARGP_KEY_SUCCESS:
- {
- Dwfl *dwfl = state->hook;
-
- if (dwfl == NULL)
- {
- /* Default if no -e, -p, or -k, is "-e a.out". */
- arg = "a.out";
- dwfl = INTUSE(dwfl_begin) (&offline_callbacks);
- if (INTUSE(dwfl_report_offline) (dwfl, "", arg, -1) == NULL)
- return fail (dwfl, -1, arg);
- state->hook = dwfl;
- }
-
- /* One of the three flavors has done dwfl_begin and some reporting
- if we got here. Tie up the Dwfl and return it to the caller of
- argp_parse. */
-
- int result = INTUSE(dwfl_report_end) (dwfl, NULL, NULL);
- assert (result == 0);
- }
- break;
-
- case ARGP_KEY_ERROR:
- dwfl_end (state->hook);
- state->hook = NULL;
- break;
-
- default:
- return ARGP_ERR_UNKNOWN;
- }
-
- /* Update the input all along, so a parent parser can see it. */
- *(Dwfl **) state->input = state->hook;
- return 0;
-}
-
-static const struct argp libdwfl_argp =
- { .options = options, .parser = parse_opt };
-
-const struct argp *
-dwfl_standard_argp (void)
-{
- return &libdwfl_argp;
-}
-
-#ifdef _MUDFLAP
-/* In the absence of a mudflap wrapper for argp_parse, or a libc compiled
- with -fmudflap, we'll see spurious errors for using the struct argp_state
- on argp_parse's stack. */
-
-void __attribute__ ((constructor))
-__libdwfl_argp_mudflap_options (void)
-{
- __mf_set_options ("-heur-stack-bound");
-}
-#endif
diff --git a/libdwfl/core-file.c b/libdwfl/core-file.c
deleted file mode 100644
index bc881eb..0000000
--- a/libdwfl/core-file.c
+++ /dev/null
@@ -1,456 +0,0 @@
-/* Core file handling.
- Copyright (C) 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <config.h>
-#include "../libelf/libelfP.h" /* For NOTE_ALIGN. */
-#undef _
-#include "libdwflP.h"
-#include <gelf.h>
-
-#include <sys/param.h>
-#include <unistd.h>
-#include <endian.h>
-#include <byteswap.h>
-#include "system.h"
-
-
-/* This is a prototype of what a new libelf interface might be.
- This implementation is pessimal for non-mmap cases and should
- be replaced by more diddling inside libelf internals. */
-static Elf *
-elf_begin_rand (Elf *parent, loff_t offset, loff_t size, loff_t *next)
-{
- if (parent == NULL)
- return NULL;
-
- /* On failure return, we update *NEXT to point back at OFFSET. */
- inline Elf *fail (int error)
- {
- if (next != NULL)
- *next = offset;
- //__libelf_seterrno (error);
- __libdwfl_seterrno (DWFL_E (LIBELF, error));
- return NULL;
- }
-
- loff_t min = (parent->kind == ELF_K_ELF ?
- (parent->class == ELFCLASS32
- ? sizeof (Elf32_Ehdr) : sizeof (Elf64_Ehdr))
- : parent->kind == ELF_K_AR ? SARMAG
- : 0);
-
- if (unlikely (offset < min)
- || unlikely (offset >= (loff_t) parent->maximum_size))
- return fail (ELF_E_RANGE);
-
- /* For an archive, fetch just the size field
- from the archive header to override SIZE. */
- if (parent->kind == ELF_K_AR)
- {
- struct ar_hdr h = { .ar_size = "" };
-
- if (unlikely (parent->maximum_size - offset < sizeof h))
- return fail (ELF_E_RANGE);
-
- if (parent->map_address != NULL)
- memcpy (h.ar_size, parent->map_address + parent->start_offset + offset,
- sizeof h.ar_size);
- else if (unlikely (pread_retry (parent->fildes,
- h.ar_size, sizeof (h.ar_size),
- parent->start_offset + offset
- + offsetof (struct ar_hdr, ar_size))
- != sizeof (h.ar_size)))
- return fail (ELF_E_READ_ERROR);
-
- offset += sizeof h;
-
- char *endp;
- size = strtoll (h.ar_size, &endp, 10);
- if (unlikely (endp == h.ar_size)
- || unlikely ((loff_t) parent->maximum_size - offset < size))
- return fail (ELF_E_INVALID_ARCHIVE);
- }
-
- if (unlikely ((loff_t) parent->maximum_size - offset < size))
- return fail (ELF_E_RANGE);
-
- /* Even if we fail at this point, update *NEXT to point past the file. */
- if (next != NULL)
- *next = offset + size;
-
- if (unlikely (offset == 0)
- && unlikely (size == (loff_t) parent->maximum_size))
- return elf_clone (parent, parent->cmd);
-
- /* Note the image is guaranteed live only as long as PARENT
- lives. Using elf_memory is quite suboptimal if the whole
- file is not mmap'd. We really should have something like
- a generalization of the archive support. */
- Elf_Data *data = elf_getdata_rawchunk (parent, offset, size, ELF_T_BYTE);
- if (data == NULL)
- return NULL;
- assert ((loff_t) data->d_size == size);
- return elf_memory (data->d_buf, size);
-}
-
-
-int
-dwfl_report_core_segments (Dwfl *dwfl, Elf *elf, const GElf_Ehdr *ehdr,
- GElf_Phdr *notes)
-{
- if (unlikely (dwfl == NULL))
- return -1;
-
- if (unlikely (elf == NULL) || unlikely (ehdr == NULL))
- {
- __libdw_seterrno (DWFL_E_LIBELF);
- return -1;
- }
-
- int result = 0;
-
- if (notes != NULL)
- notes->p_type = PT_NULL;
-
- for (int ndx = 0; result >= 0 && ndx < ehdr->e_phnum; ++ndx)
- {
- GElf_Phdr phdr_mem;
- GElf_Phdr *phdr = gelf_getphdr (elf, ndx, &phdr_mem);
- if (unlikely (phdr == NULL))
- {
- __libdwfl_seterrno (DWFL_E_LIBELF);
- return -1;
- }
- switch (phdr->p_type)
- {
- case PT_LOAD:
- result = dwfl_report_segment (dwfl, ndx, phdr, 0, NULL);
- break;
-
- case PT_NOTE:
- if (notes != NULL)
- {
- *notes = *phdr;
- notes = NULL;
- }
- break;
- }
- }
-
- return result;
-}
-
-/* Never read more than this much without mmap. */
-#define MAX_EAGER_COST 8192
-
-static bool
-core_file_read_eagerly (Dwfl_Module *mod,
- void **userdata __attribute__ ((unused)),
- const char *name __attribute__ ((unused)),
- Dwarf_Addr start __attribute__ ((unused)),
- void **buffer, size_t *buffer_available,
- GElf_Off cost, GElf_Off worthwhile,
- GElf_Off whole,
- GElf_Off contiguous __attribute__ ((unused)),
- void *arg, Elf **elfp)
-{
- Elf *core = arg;
-
- if (whole <= *buffer_available)
- {
- /* All there ever was, we already have on hand. */
-
- if (core->map_address == NULL)
- {
- /* We already malloc'd the buffer. */
- *elfp = elf_memory (*buffer, whole);
- if (unlikely (*elfp == NULL))
- return false;
-
- (*elfp)->flags |= ELF_F_MALLOCED;
- *buffer = NULL;
- *buffer_available = 0;
- return true;
- }
-
- /* We can use the image inside the core file directly. */
- *elfp = elf_begin_rand (core, *buffer - core->map_address, whole, NULL);
- *buffer = NULL;
- *buffer_available = 0;
- return *elfp != NULL;
- }
-
- /* We don't have the whole file.
- Figure out if this is better than nothing. */
-
- if (worthwhile == 0)
- /* Caller doesn't think so. */
- return false;
-
- /*
- XXX would like to fall back to partial file via memory
- when build id find_elf fails
- also, link_map name may give file name from disk better than partial here
- requires find_elf hook re-doing the magic to fall back if no file found
- */
-
- if (mod->build_id_len > 0)
- /* There is a build ID that could help us find the whole file,
- which might be more useful than what we have.
- We'll just rely on that. */
- return false;
-
- if (core->map_address != NULL)
- /* It's cheap to get, so get it. */
- return true;
-
- /* Only use it if there isn't too much to be read. */
- return cost <= MAX_EAGER_COST;
-}
-
-bool
-dwfl_elf_phdr_memory_callback (Dwfl *dwfl, int ndx,
- void **buffer, size_t *buffer_available,
- GElf_Addr vaddr,
- size_t minread,
- void *arg)
-{
- Elf *elf = arg;
-
- if (ndx == -1)
- {
- /* Called for cleanup. */
- if (elf->map_address == NULL)
- free (*buffer);
- *buffer = NULL;
- *buffer_available = 0;
- return false;
- }
-
- const GElf_Off align = dwfl->segment_align ?: 1;
- GElf_Phdr phdr;
-
- do
- if (unlikely (gelf_getphdr (elf, ndx++, &phdr) == NULL))
- return true;
- while (phdr.p_type != PT_LOAD
- || ((phdr.p_vaddr + phdr.p_memsz + align - 1) & -align) <= vaddr);
-
- GElf_Off start = vaddr - phdr.p_vaddr + phdr.p_offset;
- GElf_Off end = (phdr.p_offset + phdr.p_filesz + align - 1) & -align;
-
- /* Use following contiguous segments to get towards SIZE. */
- inline bool more (size_t size)
- {
- while (end <= start || end - start < size)
- {
- if (phdr.p_filesz < phdr.p_memsz)
- /* This segment is truncated, so no following one helps us. */
- return false;
-
- if (unlikely (gelf_getphdr (elf, ndx++, &phdr) == NULL))
- return false;
-
- if (phdr.p_type == PT_LOAD)
- {
- if (phdr.p_offset > end)
- /* It's discontiguous! */
- return false;
-
- end = (phdr.p_offset + phdr.p_filesz + align - 1) & -align;
- }
- }
- return true;
- }
-
- /* We need at least this much. */
- if (! more (minread))
- return false;
-
- /* See how much more we can get of what the caller wants. */
- (void) more (*buffer_available);
-
- /* If it's already on hand anyway, use as much as there is. */
- if (elf->map_address != NULL)
- (void) more (elf->maximum_size - start);
-
- if (unlikely (end - start > elf->maximum_size))
- end = start + elf->maximum_size;
-
- if (elf->map_address != NULL)
- {
- void *contents = elf->map_address + elf->start_offset + start;
- size_t size = end - start;
-
- if (minread == 0) /* String mode. */
- {
- const void *eos = memchr (contents, '\0', size);
- if (unlikely (eos == NULL) || unlikely (eos == contents))
- return false;
- size = eos + 1 - contents;
- }
-
- if (*buffer == NULL)
- {
- *buffer = contents;
- *buffer_available = size;
- }
- else
- {
- *buffer_available = MIN (size, *buffer_available);
- memcpy (*buffer, contents, *buffer_available);
- }
- }
- else
- {
- void *into = *buffer;
- if (*buffer == NULL)
- {
- *buffer_available = MIN (minread ?: 512,
- MAX (4096, MIN (end - start,
- *buffer_available)));
- into = malloc (*buffer_available);
- if (unlikely (into == NULL))
- {
- __libdwfl_seterrno (DWFL_E_NOMEM);
- return false;
- }
- }
-
- ssize_t nread = pread_retry (elf->fildes, into, *buffer_available, start);
- if (nread < (ssize_t) minread)
- {
- if (into != *buffer)
- free (into);
- if (nread < 0)
- __libdwfl_seterrno (DWFL_E_ERRNO);
- return false;
- }
-
- if (minread == 0) /* String mode. */
- {
- const void *eos = memchr (into, '\0', nread);
- if (unlikely (eos == NULL) || unlikely (eos == into))
- {
- if (*buffer == NULL)
- free (into);
- return false;
- }
- nread = eos + 1 - into;
- }
-
- if (*buffer == NULL)
- *buffer = into;
- *buffer_available = nread;
- }
-
- return true;
-}
-
-int
-dwfl_core_file_report (Dwfl *dwfl, Elf *elf, const GElf_Ehdr *ehdr)
-{
- GElf_Phdr notes_phdr;
-
- /* First report each PT_LOAD segment. */
- int ndx = dwfl_report_core_segments (dwfl, elf, ehdr, ¬es_phdr);
- if (unlikely (ndx <= 0))
- return ndx;
-
- /* Now sniff segment contents for modules. */
- ndx = 0;
- do
- {
- int seg = dwfl_segment_report_module (dwfl, ndx, NULL,
- &dwfl_elf_phdr_memory_callback, elf,
- core_file_read_eagerly, elf);
- if (unlikely (seg < 0))
- return seg;
- ndx = seg > ndx ? seg : ndx + 1;
- }
- while (ndx < ehdr->e_phnum);
-
- /* Next, we should follow the chain from DT_DEBUG. */
-
- const void *auxv = NULL;
- size_t auxv_size = 0;
- if (likely (notes_phdr.p_type == PT_NOTE))
- {
- /* PT_NOTE -> NT_AUXV -> AT_PHDR -> PT_DYNAMIC -> DT_DEBUG */
-
- Elf_Data *notes = elf_getdata_rawchunk (elf,
- notes_phdr.p_offset,
- notes_phdr.p_filesz,
- ELF_T_NHDR);
- if (likely (notes != NULL))
- {
- size_t pos = 0;
- GElf_Nhdr nhdr;
- size_t name_pos;
- size_t desc_pos;
- while ((pos = gelf_getnote (notes, pos, &nhdr,
- &name_pos, &desc_pos)) > 0)
- if (nhdr.n_type == NT_AUXV
- && nhdr.n_namesz == sizeof "CORE"
- && !memcmp (notes->d_buf + name_pos, "CORE", sizeof "CORE"))
- {
- auxv = notes->d_buf + desc_pos;
- auxv_size = nhdr.n_descsz;
- break;
- }
- }
- }
-
- /* Now we have NT_AUXV contents. From here on this processing could be
- used for a live process with auxv read from /proc. */
-
- return dwfl_link_map_report (dwfl, auxv, auxv_size,
- dwfl_elf_phdr_memory_callback, elf);
-}
-INTDEF (dwfl_core_file_report)
diff --git a/libdwfl/cu.c b/libdwfl/cu.c
deleted file mode 100644
index 8f01ea6..0000000
--- a/libdwfl/cu.c
+++ /dev/null
@@ -1,323 +0,0 @@
-/* Keeping track of DWARF compilation units in libdwfl.
- Copyright (C) 2005, 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-#include "../libdw/libdwP.h"
-#include "../libdw/memory-access.h"
-#include <search.h>
-
-
-static inline Dwarf_Arange *
-dwar (Dwfl_Module *mod, unsigned int idx)
-{
- return &mod->dw->aranges->info[mod->aranges[idx].arange];
-}
-
-
-static Dwfl_Error
-addrarange (Dwfl_Module *mod, Dwarf_Addr addr, struct dwfl_arange **arange)
-{
- if (mod->aranges == NULL)
- {
- struct dwfl_arange *aranges = NULL;
- Dwarf_Aranges *dwaranges = NULL;
- size_t naranges;
- if (INTUSE(dwarf_getaranges) (mod->dw, &dwaranges, &naranges) != 0)
- return DWFL_E_LIBDW;
-
- /* If the module has no aranges (when no code is included) we
- allocate nothing. */
- if (naranges != 0)
- {
- aranges = malloc (naranges * sizeof *aranges);
- if (unlikely (aranges == NULL))
- return DWFL_E_NOMEM;
-
- /* libdw has sorted its list by address, which is how we want it.
- But the sorted list is full of not-quite-contiguous runs pointing
- to the same CU. We don't care about the little gaps inside the
- module, we'll consider them part of the surrounding CU anyway.
- Collect our own array with just one record for each run of ranges
- pointing to one CU. */
-
- naranges = 0;
- Dwarf_Off lastcu = 0;
- for (size_t i = 0; i < dwaranges->naranges; ++i)
- if (i == 0 || dwaranges->info[i].offset != lastcu)
- {
- aranges[naranges].arange = i;
- aranges[naranges].cu = NULL;
- ++naranges;
- lastcu = dwaranges->info[i].offset;
- }
- }
-
- /* Store the final array, which is probably much smaller than before. */
- mod->naranges = naranges;
- mod->aranges = (realloc (aranges, naranges * sizeof aranges[0])
- ?: aranges);
- mod->lazycu += naranges;
- }
-
- /* The address must be inside the module to begin with. */
- addr -= mod->debug.bias;
-
- /* The ranges are sorted by address, so we can use binary search. */
- size_t l = 0, u = mod->naranges;
- while (l < u)
- {
- size_t idx = (l + u) / 2;
- Dwarf_Addr start = dwar (mod, idx)->addr;
- if (addr < start)
- {
- u = idx;
- continue;
- }
- else if (addr > start)
- {
- if (idx + 1 < mod->naranges)
- {
- if (addr >= dwar (mod, idx + 1)->addr)
- {
- l = idx + 1;
- continue;
- }
- }
- else
- {
- /* It might be in the last range. */
- const Dwarf_Arange *last
- = &mod->dw->aranges->info[mod->dw->aranges->naranges - 1];
- if (addr > last->addr + last->length)
- break;
- }
- }
-
- *arange = &mod->aranges[idx];
- return DWFL_E_NOERROR;
- }
-
- return DWFL_E_ADDR_OUTOFRANGE;
-}
-
-
-static void
-nofree (void *arg)
-{
- struct dwfl_cu *cu = arg;
- if (cu == (void *) -1l)
- return;
-
- assert (cu->mod->lazycu == 0);
-}
-
-/* One reason fewer to keep the lazy lookup table for CUs. */
-static inline void
-less_lazy (Dwfl_Module *mod)
-{
- if (--mod->lazycu > 0)
- return;
-
- /* We know about all the CUs now, we don't need this table. */
- tdestroy (mod->lazy_cu_root, nofree);
- mod->lazy_cu_root = NULL;
-}
-
-static inline Dwarf_Off
-cudie_offset (const struct dwfl_cu *cu)
-{
- return cu->die.cu->start + 3 * cu->die.cu->offset_size - 4 + 3;
-}
-
-static int
-compare_cukey (const void *a, const void *b)
-{
- return cudie_offset (a) - cudie_offset (b);
-}
-
-/* Intern the CU if necessary. */
-static Dwfl_Error
-intern_cu (Dwfl_Module *mod, Dwarf_Off cuoff, struct dwfl_cu **result)
-{
- struct Dwarf_CU dwkey;
- struct dwfl_cu key;
- key.die.cu = &dwkey;
- dwkey.offset_size = 0;
- dwkey.start = cuoff - (3 * 0 - 4 + 3);
- struct dwfl_cu **found = tsearch (&key, &mod->lazy_cu_root, &compare_cukey);
- if (unlikely (found == NULL))
- return DWFL_E_NOMEM;
-
- if (*found == &key || *found == NULL)
- {
- if (unlikely (cuoff + 4 >= mod->dw->sectiondata[IDX_debug_info]->d_size))
- {
- /* This is the EOF marker. Now we have interned all the CUs.
- One increment in MOD->lazycu counts not having hit EOF yet. */
- *found = (void *) -1l;
- less_lazy (mod);
- }
- else
- {
- /* This is a new entry, meaning we haven't looked at this CU. */
-
- *found = NULL;
-
- struct dwfl_cu *cu = malloc (sizeof *cu);
- if (unlikely (cu == NULL))
- return DWFL_E_NOMEM;
-
- cu->mod = mod;
- cu->next = NULL;
- cu->lines = NULL;
-
- /* XXX use non-searching lookup */
- Dwarf_Die *die = INTUSE(dwarf_offdie) (mod->dw, cuoff, &cu->die);
- if (die == NULL)
- return DWFL_E_LIBDW;
- assert (die == &cu->die);
-
- struct dwfl_cu **newvec = realloc (mod->cu, ((mod->ncu + 1)
- * sizeof (mod->cu[0])));
- if (newvec == NULL)
- {
- free (cu);
- return DWFL_E_NOMEM;
- }
- mod->cu = newvec;
-
- mod->cu[mod->ncu++] = cu;
- if (cu->die.cu->start == 0)
- mod->first_cu = cu;
-
- *found = cu;
- }
- }
-
- *result = *found;
- return DWFL_E_NOERROR;
-}
-
-
-/* Traverse all the CUs in the module. */
-
-Dwfl_Error
-internal_function
-__libdwfl_nextcu (Dwfl_Module *mod, struct dwfl_cu *lastcu,
- struct dwfl_cu **cu)
-{
- Dwarf_Off cuoff;
- struct dwfl_cu **nextp;
-
- if (lastcu == NULL)
- {
- /* Start the traversal. */
- cuoff = 0;
- nextp = &mod->first_cu;
- }
- else
- {
- /* Continue following LASTCU. */
- cuoff = lastcu->die.cu->end;
- nextp = &lastcu->next;
- }
-
- if (*nextp == NULL)
- {
- size_t cuhdrsz;
- Dwarf_Off nextoff;
- int end = INTUSE(dwarf_nextcu) (mod->dw, cuoff, &nextoff, &cuhdrsz,
- NULL, NULL, NULL);
- if (end < 0)
- return DWFL_E_LIBDW;
- if (end > 0)
- {
- *cu = NULL;
- return DWFL_E_NOERROR;
- }
-
- Dwfl_Error result = intern_cu (mod, cuoff + cuhdrsz, nextp);
- if (result != DWFL_E_NOERROR)
- return result;
-
- if ((*nextp)->next == NULL && nextoff == (Dwarf_Off) -1l)
- (*nextp)->next = (void *) -1l;
- }
-
- *cu = *nextp == (void *) -1l ? NULL : *nextp;
- return DWFL_E_NOERROR;
-}
-
-
-/* Intern the CU arange points to, if necessary. */
-
-static Dwfl_Error
-arangecu (Dwfl_Module *mod, struct dwfl_arange *arange, struct dwfl_cu **cu)
-{
- if (arange->cu == NULL)
- {
- const Dwarf_Arange *dwarange = &mod->dw->aranges->info[arange->arange];
- Dwfl_Error result = intern_cu (mod, dwarange->offset, &arange->cu);
- if (result != DWFL_E_NOERROR)
- return result;
- assert (arange->cu != NULL && arange->cu != (void *) -1l);
- less_lazy (mod); /* Each arange with null ->cu counts once. */
- }
-
- *cu = arange->cu;
- return DWFL_E_NOERROR;
-}
-
-Dwfl_Error
-internal_function
-__libdwfl_addrcu (Dwfl_Module *mod, Dwarf_Addr addr, struct dwfl_cu **cu)
-{
- struct dwfl_arange *arange;
- return addrarange (mod, addr, &arange) ?: arangecu (mod, arange, cu);
-}
diff --git a/libdwfl/derelocate.c b/libdwfl/derelocate.c
deleted file mode 100644
index f2a6467..0000000
--- a/libdwfl/derelocate.c
+++ /dev/null
@@ -1,411 +0,0 @@
-/* Recover relocatibility for addresses computed from debug information.
- Copyright (C) 2005, 2006, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-
-struct dwfl_relocation
-{
- size_t count;
- struct
- {
- Elf_Scn *scn;
- Elf_Scn *relocs;
- const char *name;
- GElf_Addr start, end;
- } refs[0];
-};
-
-
-struct secref
-{
- struct secref *next;
- Elf_Scn *scn;
- Elf_Scn *relocs;
- const char *name;
- GElf_Addr start, end;
-};
-
-static int
-compare_secrefs (const void *a, const void *b)
-{
- struct secref *const *p1 = a;
- struct secref *const *p2 = b;
-
- /* No signed difference calculation is correct here, since the
- terms are unsigned and could be more than INT64_MAX apart. */
- if ((*p1)->start < (*p2)->start)
- return -1;
- if ((*p1)->start > (*p2)->start)
- return 1;
-
- return 0;
-}
-
-static int
-cache_sections (Dwfl_Module *mod)
-{
- struct secref *refs = NULL;
- size_t nrefs = 0;
-
- size_t shstrndx;
- if (unlikely (elf_getshstrndx (mod->main.elf, &shstrndx) < 0))
- {
- elf_error:
- __libdwfl_seterrno (DWFL_E_LIBELF);
- return -1;
- }
-
- bool check_reloc_sections = false;
- Elf_Scn *scn = NULL;
- while ((scn = elf_nextscn (mod->main.elf, scn)) != NULL)
- {
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
- if (shdr == NULL)
- goto elf_error;
-
- if ((shdr->sh_flags & SHF_ALLOC) && shdr->sh_addr == 0)
- {
- /* This section might not yet have been looked at. */
- if (__libdwfl_relocate_value (mod, mod->main.elf, &shstrndx,
- elf_ndxscn (scn),
- &shdr->sh_addr) != DWFL_E_NOERROR)
- continue;
- shdr = gelf_getshdr (scn, &shdr_mem);
- if (unlikely (shdr == NULL))
- goto elf_error;
- }
-
- if (shdr->sh_flags & SHF_ALLOC)
- {
- const char *name = elf_strptr (mod->main.elf, shstrndx,
- shdr->sh_name);
- if (unlikely (name == NULL))
- goto elf_error;
-
- struct secref *newref = alloca (sizeof *newref);
- newref->scn = scn;
- newref->relocs = NULL;
- newref->name = name;
- newref->start = shdr->sh_addr + mod->main.bias;
- newref->end = newref->start + shdr->sh_size;
- newref->next = refs;
- refs = newref;
- ++nrefs;
- }
-
- if (mod->e_type == ET_REL
- && shdr->sh_size != 0
- && (shdr->sh_type == SHT_REL || shdr->sh_type == SHT_RELA)
- && mod->dwfl->callbacks->section_address != NULL)
- {
- if (shdr->sh_info < elf_ndxscn (scn))
- {
- /* We've already looked at the section these relocs apply to. */
- Elf_Scn *tscn = elf_getscn (mod->main.elf, shdr->sh_info);
- if (likely (tscn != NULL))
- for (struct secref *sec = refs; sec != NULL; sec = sec->next)
- if (sec->scn == tscn)
- {
- sec->relocs = scn;
- break;
- }
- }
- else
- /* We'll have to do a second pass. */
- check_reloc_sections = true;
- }
- }
-
- mod->reloc_info = malloc (offsetof (struct dwfl_relocation, refs[nrefs]));
- if (mod->reloc_info == NULL)
- {
- __libdwfl_seterrno (DWFL_E_NOMEM);
- return -1;
- }
-
- struct secref **sortrefs = alloca (nrefs * sizeof sortrefs[0]);
- for (size_t i = nrefs; i-- > 0; refs = refs->next)
- sortrefs[i] = refs;
- assert (refs == NULL);
-
- qsort (sortrefs, nrefs, sizeof sortrefs[0], &compare_secrefs);
-
- mod->reloc_info->count = nrefs;
- for (size_t i = 0; i < nrefs; ++i)
- {
- mod->reloc_info->refs[i].name = sortrefs[i]->name;
- mod->reloc_info->refs[i].scn = sortrefs[i]->scn;
- mod->reloc_info->refs[i].relocs = sortrefs[i]->relocs;
- mod->reloc_info->refs[i].start = sortrefs[i]->start;
- mod->reloc_info->refs[i].end = sortrefs[i]->end;
- }
-
- if (unlikely (check_reloc_sections))
- {
- /* There was a reloc section that preceded its target section.
- So we have to scan again now that we have cached all the
- possible target sections we care about. */
-
- scn = NULL;
- while ((scn = elf_nextscn (mod->main.elf, scn)) != NULL)
- {
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
- if (shdr == NULL)
- goto elf_error;
-
- if (shdr->sh_size != 0
- && (shdr->sh_type == SHT_REL || shdr->sh_type == SHT_RELA))
- {
- Elf_Scn *tscn = elf_getscn (mod->main.elf, shdr->sh_info);
- if (likely (tscn != NULL))
- for (size_t i = 0; i < nrefs; ++i)
- if (mod->reloc_info->refs[i].scn == tscn)
- {
- mod->reloc_info->refs[i].relocs = scn;
- break;
- }
- }
- }
- }
-
- return nrefs;
-}
-
-
-int
-dwfl_module_relocations (Dwfl_Module *mod)
-{
- if (mod == NULL)
- return -1;
-
- if (mod->reloc_info != NULL)
- return mod->reloc_info->count;
-
- switch (mod->e_type)
- {
- case ET_REL:
- return cache_sections (mod);
-
- case ET_DYN:
- return 1;
-
- case ET_EXEC:
- assert (mod->main.bias == 0);
- assert (mod->debug.bias == 0);
- break;
- }
-
- return 0;
-}
-
-const char *
-dwfl_module_relocation_info (Dwfl_Module *mod, unsigned int idx,
- Elf32_Word *shndxp)
-{
- if (mod == NULL)
- return NULL;
-
- switch (mod->e_type)
- {
- case ET_REL:
- break;
-
- case ET_DYN:
- if (idx != 0)
- return NULL;
- if (shndxp)
- *shndxp = SHN_ABS;
- return "";
-
- default:
- return NULL;
- }
-
- if (unlikely (mod->reloc_info == NULL) && cache_sections (mod) < 0)
- return NULL;
-
- struct dwfl_relocation *sections = mod->reloc_info;
-
- if (idx >= sections->count)
- return NULL;
-
- if (shndxp)
- *shndxp = elf_ndxscn (sections->refs[idx].scn);
-
- return sections->refs[idx].name;
-}
-
-/* Check that MOD is valid and make sure its relocation has been done. */
-static bool
-check_module (Dwfl_Module *mod)
-{
- if (INTUSE(dwfl_module_getsymtab) (mod) < 0)
- {
- Dwfl_Error error = dwfl_errno ();
- if (error != DWFL_E_NO_SYMTAB)
- {
- __libdwfl_seterrno (error);
- return true;
- }
- }
-
- if (mod->dw == NULL)
- {
- Dwarf_Addr bias;
- if (INTUSE(dwfl_module_getdwarf) (mod, &bias) == NULL)
- {
- Dwfl_Error error = dwfl_errno ();
- if (error != DWFL_E_NO_DWARF)
- {
- __libdwfl_seterrno (error);
- return true;
- }
- }
- }
-
- return false;
-}
-
-/* Find the index in MOD->reloc_info.refs containing *ADDR. */
-static int
-find_section (Dwfl_Module *mod, Dwarf_Addr *addr)
-{
- if (unlikely (mod->reloc_info == NULL) && cache_sections (mod) < 0)
- return -1;
-
- struct dwfl_relocation *sections = mod->reloc_info;
-
- /* The sections are sorted by address, so we can use binary search. */
- size_t l = 0, u = sections->count;
- while (l < u)
- {
- size_t idx = (l + u) / 2;
- if (*addr < sections->refs[idx].start)
- u = idx;
- else if (*addr > sections->refs[idx].end)
- l = idx + 1;
- else
- {
- /* Consider the limit of a section to be inside it, unless it's
- inside the next one. A section limit address can appear in
- line records. */
- if (*addr == sections->refs[idx].end
- && idx < sections->count
- && *addr == sections->refs[idx + 1].start)
- ++idx;
-
- *addr -= sections->refs[idx].start;
- return idx;
- }
- }
-
- __libdwfl_seterrno (DWFL_E (LIBDW, DWARF_E_NO_MATCH));
- return -1;
-}
-
-int
-dwfl_module_relocate_address (Dwfl_Module *mod, Dwarf_Addr *addr)
-{
- if (unlikely (check_module (mod)))
- return -1;
-
- switch (mod->e_type)
- {
- case ET_REL:
- return find_section (mod, addr);
-
- case ET_DYN:
- /* All relative to first and only relocation base: module start. */
- *addr -= mod->low_addr;
- break;
-
- default:
- /* Already absolute, dwfl_module_relocations returned zero. We
- shouldn't really have been called, but it's a harmless no-op. */
- break;
- }
-
- return 0;
-}
-INTDEF (dwfl_module_relocate_address)
-
-Elf_Scn *
-dwfl_module_address_section (Dwfl_Module *mod, Dwarf_Addr *address,
- Dwarf_Addr *bias)
-{
- if (check_module (mod))
- return NULL;
-
- int idx = find_section (mod, address);
- if (idx < 0)
- return NULL;
-
- if (mod->reloc_info->refs[idx].relocs != NULL)
- {
- assert (mod->e_type == ET_REL);
-
- Elf_Scn *tscn = mod->reloc_info->refs[idx].scn;
- Elf_Scn *relocscn = mod->reloc_info->refs[idx].relocs;
- Dwfl_Error result = __libdwfl_relocate_section (mod, mod->main.elf,
- relocscn, tscn, true);
- if (likely (result == DWFL_E_NOERROR))
- mod->reloc_info->refs[idx].relocs = NULL;
- else
- {
- __libdwfl_seterrno (result);
- return NULL;
- }
- }
-
- *bias = mod->main.bias;
- return mod->reloc_info->refs[idx].scn;
-}
-INTDEF (dwfl_module_address_section)
diff --git a/libdwfl/dwfl_addrdie.c b/libdwfl/dwfl_addrdie.c
deleted file mode 100644
index 20c1578..0000000
--- a/libdwfl/dwfl_addrdie.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Fetch CU DIE from address.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-
-Dwarf_Die *
-dwfl_addrdie (Dwfl *dwfl, Dwarf_Addr addr, Dwarf_Addr *bias)
-{
- return INTUSE(dwfl_module_addrdie) (INTUSE(dwfl_addrmodule) (dwfl, addr),
- addr, bias);
-}
diff --git a/libdwfl/dwfl_addrdwarf.c b/libdwfl/dwfl_addrdwarf.c
deleted file mode 100644
index 365c69c..0000000
--- a/libdwfl/dwfl_addrdwarf.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Fetch libdw handle from address.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-
-Dwarf *
-dwfl_addrdwarf (Dwfl *dwfl, Dwarf_Addr address, Dwarf_Addr *bias)
-{
- return INTUSE(dwfl_module_getdwarf) (INTUSE(dwfl_addrmodule) (dwfl, address),
- bias);
-}
-INTDEF (dwfl_addrdwarf)
diff --git a/libdwfl/dwfl_addrmodule.c b/libdwfl/dwfl_addrmodule.c
deleted file mode 100644
index 6455943..0000000
--- a/libdwfl/dwfl_addrmodule.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Find module containing address.
- Copyright (C) 2005, 2006, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-
-Dwfl_Module *
-dwfl_addrmodule (Dwfl *dwfl, Dwarf_Addr address)
-{
- Dwfl_Module *mod;
- (void) INTUSE(dwfl_addrsegment) (dwfl, address, &mod);
- return mod;
-}
-INTDEF (dwfl_addrmodule)
diff --git a/libdwfl/dwfl_begin.c b/libdwfl/dwfl_begin.c
deleted file mode 100644
index d388ee0..0000000
--- a/libdwfl/dwfl_begin.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/* Set up a session using libdwfl.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-
-Dwfl *
-dwfl_begin (const Dwfl_Callbacks *callbacks)
-{
- if (elf_version (EV_CURRENT) == EV_NONE)
- {
- __libdwfl_seterrno (DWFL_E_LIBELF);
- return NULL;
- }
-
- Dwfl *dwfl = calloc (1, sizeof *dwfl);
- if (dwfl == NULL)
- __libdwfl_seterrno (DWFL_E_NOMEM);
- else
- {
- dwfl->callbacks = callbacks;
- dwfl->offline_next_address = OFFLINE_REDZONE;
- }
-
- return dwfl;
-}
-INTDEF (dwfl_begin)
diff --git a/libdwfl/dwfl_build_id_find_debuginfo.c b/libdwfl/dwfl_build_id_find_debuginfo.c
deleted file mode 100644
index 97def07..0000000
--- a/libdwfl/dwfl_build_id_find_debuginfo.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/* Find the debuginfo file for a module from its build ID.
- Copyright (C) 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-#include <unistd.h>
-
-
-int
-dwfl_build_id_find_debuginfo (Dwfl_Module *mod,
- void **userdata __attribute__ ((unused)),
- const char *modname __attribute__ ((unused)),
- Dwarf_Addr base __attribute__ ((unused)),
- const char *file __attribute__ ((unused)),
- const char *debuglink __attribute__ ((unused)),
- GElf_Word crc __attribute__ ((unused)),
- char **debuginfo_file_name)
-{
- int fd = -1;
- const unsigned char *bits;
- GElf_Addr vaddr;
- if (INTUSE(dwfl_module_build_id) (mod, &bits, &vaddr) > 0)
- fd = __libdwfl_open_by_build_id (mod, true, debuginfo_file_name);
- if (fd >= 0)
- {
- /* We need to open an Elf handle on the file so we can check its
- build ID note for validation. Backdoor the handle into the
- module data structure since we had to open it early anyway. */
- mod->debug.elf = elf_begin (fd, ELF_C_READ_MMAP_PRIVATE, NULL);
- if (likely (__libdwfl_find_build_id (mod, false, mod->debug.elf) == 2))
- /* Also backdoor the gratuitous flag. */
- mod->debug.valid = true;
- else
- {
- /* A mismatch! */
- elf_end (mod->debug.elf);
- mod->debug.elf = NULL;
- close (fd);
- fd = -1;
- free (*debuginfo_file_name);
- *debuginfo_file_name = NULL;
- errno = 0;
- }
- }
- return fd;
-}
-INTDEF (dwfl_build_id_find_debuginfo)
diff --git a/libdwfl/dwfl_build_id_find_elf.c b/libdwfl/dwfl_build_id_find_elf.c
deleted file mode 100644
index 28bf5fd..0000000
--- a/libdwfl/dwfl_build_id_find_elf.c
+++ /dev/null
@@ -1,172 +0,0 @@
-/* Find an ELF file for a module from its build ID.
- Copyright (C) 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-#include <inttypes.h>
-#include <fcntl.h>
-#include <unistd.h>
-
-int
-internal_function
-__libdwfl_open_by_build_id (Dwfl_Module *mod, bool debug, char **file_name)
-{
- /* If *FILE_NAME was primed into the module, leave it there
- as the fallback when we have nothing to offer. */
- errno = 0;
- if (mod->build_id_len <= 0)
- return -1;
-
- const size_t id_len = mod->build_id_len;
- const uint8_t *id = mod->build_id_bits;
-
- /* Search debuginfo_path directories' .build-id/ subdirectories. */
-
- char id_name[sizeof "/.build-id/" + 1 + id_len * 2 + sizeof ".debug" - 1];
- strcpy (id_name, "/.build-id/");
- int n = snprintf (&id_name[sizeof "/.build-id/" - 1],
- 4, "%02" PRIx8 "/", (uint8_t) id[0]);
- assert (n == 3);
- for (size_t i = 1; i < id_len; ++i)
- {
- n = snprintf (&id_name[sizeof "/.build-id/" - 1 + 3 + (i - 1) * 2],
- 3, "%02" PRIx8, (uint8_t) id[i]);
- assert (n == 2);
- }
- if (debug)
- strcpy (&id_name[sizeof "/.build-id/" - 1 + 3 + (id_len - 1) * 2],
- ".debug");
-
- const Dwfl_Callbacks *const cb = mod->dwfl->callbacks;
-
-/* ANDROID_CHANGE_BEGIN */
-#if defined(__BIONIC__) || defined(__APPLE__)
- char *path = strdup ((cb->debuginfo_path ? *cb->debuginfo_path : NULL)
- ?: DEFAULT_DEBUGINFO_PATH);
-#else
- char *path = strdupa ((cb->debuginfo_path ? *cb->debuginfo_path : NULL)
- ?: DEFAULT_DEBUGINFO_PATH);
-#endif
-/* ANDROID_CHANGE_END */
-
- int fd = -1;
- char *dir;
- while (fd < 0 && (dir = strsep (&path, ":")) != NULL)
- {
- if (dir[0] == '+' || dir[0] == '-')
- ++dir;
-
- /* Only absolute directory names are useful to us. */
- if (dir[0] != '/')
- continue;
-
- size_t dirlen = strlen (dir);
- char *name = malloc (dirlen + sizeof id_name);
- if (unlikely (name == NULL))
- break;
- memcpy (mempcpy (name, dir, dirlen), id_name, sizeof id_name);
- fd = TEMP_FAILURE_RETRY (open64 (name, O_RDONLY));
- if (fd >= 0)
- {
- if (*file_name != NULL)
- free (*file_name);
- *file_name = canonicalize_file_name (name);
- if (*file_name == NULL)
- {
- *file_name = name;
- name = NULL;
- }
- }
- free (name);
- }
-
-/* ANDROID_CHANGE_BEGIN */
-#ifdef __BIONIC__
- free(path);
-#endif
-/* ANDROID_CHANGE_END */
-
- /* If we simply found nothing, clear errno. If we had some other error
- with the file, report that. Possibly this should treat other errors
- like ENOENT too. But ignoring all errors could mask some that should
- be reported. */
- if (fd < 0 && errno == ENOENT)
- errno = 0;
-
- return fd;
-}
-
-int
-dwfl_build_id_find_elf (Dwfl_Module *mod,
- void **userdata __attribute__ ((unused)),
- const char *modname __attribute__ ((unused)),
- Dwarf_Addr base __attribute__ ((unused)),
- char **file_name, Elf **elfp)
-{
- *elfp = NULL;
- int fd = __libdwfl_open_by_build_id (mod, false, file_name);
- if (fd >= 0)
- {
- *elfp = elf_begin (fd, ELF_C_READ_MMAP_PRIVATE, NULL);
- if (__libdwfl_find_build_id (mod, false, *elfp) == 2)
- /* This is a backdoor signal to short-circuit the ID refresh. */
- mod->main.valid = true;
- else
- {
- /* This file does not contain the ID it should! */
- elf_end (*elfp);
- *elfp = NULL;
- close (fd);
- fd = -1;
- free (*file_name);
- *file_name = NULL;
- }
- }
- return fd;
-}
-INTDEF (dwfl_build_id_find_elf)
diff --git a/libdwfl/dwfl_cumodule.c b/libdwfl/dwfl_cumodule.c
deleted file mode 100644
index 787c098..0000000
--- a/libdwfl/dwfl_cumodule.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Find the module for a CU DIE previously returned by libdwfl.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-
-Dwfl_Module *
-dwfl_cumodule (Dwarf_Die *cudie)
-{
- struct dwfl_cu *cu = (struct dwfl_cu *) cudie;
- return cu->mod;
-}
diff --git a/libdwfl/dwfl_end.c b/libdwfl/dwfl_end.c
deleted file mode 100644
index 429abb1..0000000
--- a/libdwfl/dwfl_end.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/* Finish a session using libdwfl.
- Copyright (C) 2005, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-
-void
-dwfl_end (Dwfl *dwfl)
-{
- if (dwfl == NULL)
- return;
-
- free (dwfl->lookup_addr);
- free (dwfl->lookup_module);
- free (dwfl->lookup_segndx);
-
- Dwfl_Module *next = dwfl->modulelist;
- while (next != NULL)
- {
- Dwfl_Module *dead = next;
- next = dead->next;
- __libdwfl_module_free (dead);
- }
-
- free (dwfl);
-}
diff --git a/libdwfl/dwfl_error.c b/libdwfl/dwfl_error.c
deleted file mode 100644
index f011be1..0000000
--- a/libdwfl/dwfl_error.c
+++ /dev/null
@@ -1,265 +0,0 @@
-/* Error handling in libdwfl.
- Copyright (C) 2005, 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <libintl.h>
-#include <stdbool.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <errno.h>
-
-#include "libdwflP.h"
-
-
-#ifdef USE_TLS
-/* The error number. */
-static __thread int global_error;
-#else
-/* This is the key for the thread specific memory. */
-static tls_key_t key;
-
-/* The error number. Used in non-threaded programs. */
-static int global_error;
-static bool threaded;
-/* We need to initialize the thread-specific data. */
-once_define (static, once);
-
-/* The initialization and destruction functions. */
-static void init (void);
-static void free_key_mem (void *mem);
-#endif /* TLS */
-
-
-int
-dwfl_errno (void)
-{
- int result;
-
-#ifndef USE_TLS
- /* If we have not yet initialized the buffer do it now. */
- once_execute (once, init);
-
- if (threaded)
- {
- /* We do not allocate memory for the data. It is only a word.
- We can store it in place of the pointer. */
- result = (intptr_t) getspecific (key);
-
- setspecific (key, (void *) (intptr_t) DWFL_E_NOERROR);
- return result;
- }
-#endif /* TLS */
-
- result = global_error;
- global_error = DWFL_E_NOERROR;
- return result;
-}
-
-
-static const struct msgtable
-{
-#define DWFL_ERROR(name, text) char msg_##name[sizeof text];
- DWFL_ERRORS
-#undef DWFL_ERROR
-} msgtable =
- {
-#define DWFL_ERROR(name, text) text,
- DWFL_ERRORS
-#undef DWFL_ERROR
- };
-#define msgstr (&msgtable.msg_NOERROR[0])
-
-static const uint_fast16_t msgidx[] =
-{
-#define DWFL_ERROR(name, text) \
- [DWFL_E_##name] = offsetof (struct msgtable, msg_##name),
- DWFL_ERRORS
-#undef DWFL_ERROR
-};
-#define nmsgidx (sizeof msgidx / sizeof msgidx[0])
-
-
-static inline int
-canonicalize (Dwfl_Error error)
-{
- unsigned int value;
-
- switch (error)
- {
- default:
- value = error;
- if ((value &~ 0xffff) != 0)
- break;
- assert (value < nmsgidx);
- break;
- case DWFL_E_ERRNO:
- value = DWFL_E (ERRNO, errno);
- break;
- case DWFL_E_LIBELF:
- value = DWFL_E (LIBELF, elf_errno ());
- break;
- case DWFL_E_LIBDW:
- value = DWFL_E (LIBDW, INTUSE(dwarf_errno) ());
- break;
-#if 0
- DWFL_E_LIBEBL:
- value = DWFL_E (LIBEBL, ebl_errno ());
- break;
-#endif
- }
-
- return value;
-}
-
-int
-internal_function
-__libdwfl_canon_error (Dwfl_Error error)
-{
- return canonicalize (error);
-}
-
-void
-internal_function
-__libdwfl_seterrno (Dwfl_Error error)
-{
- int value = canonicalize (error);
-
-#ifndef USE_TLS
- /* If we have not yet initialized the buffer do it now. */
- once_execute (once, init);
-
- if (threaded)
- /* We do not allocate memory for the data. It is only a word.
- We can store it in place of the pointer. */
- setspecific (key, (void *) (intptr_t) value);
-#endif /* TLS */
-
- global_error = value;
-}
-
-
-const char *
-dwfl_errmsg (error)
- int error;
-{
- if (error == 0 || error == -1)
- {
- int last_error;
-
-#ifndef USE_TLS
- /* If we have not yet initialized the buffer do it now. */
- once_execute (once, init);
-
- if (threaded)
- /* We do not allocate memory for the data. It is only a word.
- We can store it in place of the pointer. */
- last_error = (intptr_t) getspecific (key);
- else
-#endif /* TLS */
- last_error = global_error;
-
- if (error == 0 && last_error == 0)
- return NULL;
-
- error = last_error;
- global_error = DWFL_E_NOERROR;
- }
-
- switch (error &~ 0xffff)
- {
- case OTHER_ERROR (ERRNO):
- /* ANDROID_CHANGE_BEGIN */
-#ifdef __BIONIC__
- strerror_r (error & 0xffff, "bad", 0);
- return NULL;
-#else
- return strerror_r (error & 0xffff, "bad", 0);
-#endif
- /* ANDROID_CHANGE_END */
- case OTHER_ERROR (LIBELF):
- return elf_errmsg (error & 0xffff);
- case OTHER_ERROR (LIBDW):
- return INTUSE(dwarf_errmsg) (error & 0xffff);
-#if 0
- case OTHER_ERROR (LIBEBL):
- return ebl_errmsg (error & 0xffff);
-#endif
- }
-
- return _(&msgstr[msgidx[(unsigned int) error < nmsgidx
- ? error : DWFL_E_UNKNOWN_ERROR]]);
-}
-INTDEF (dwfl_errmsg)
-
-
-#ifndef USE_TLS
-/* Free the thread specific data, this is done if a thread terminates. */
-static void
-free_key_mem (void *mem __attribute__ ((unused)))
-{
- setspecific (key, NULL);
-}
-
-
-/* Initialize the key for the global variable. */
-static void
-init (void)
-{
- // XXX Screw you, gcc4, the unused function attribute does not work.
- __asm ("" :: "r" (free_key_mem));
-
- if (key_create (&key, free_key_mem) == 0)
- /* Creating the key succeeded. */
- threaded = true;
-}
-#endif /* TLS */
diff --git a/libdwfl/dwfl_getdwarf.c b/libdwfl/dwfl_getdwarf.c
deleted file mode 100644
index 0a0656f..0000000
--- a/libdwfl/dwfl_getdwarf.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/* Iterate through modules to fetch Dwarf information.
- Copyright (C) 2005, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-
-struct module_callback_info
-{
- int (*callback) (Dwfl_Module *, void **,
- const char *, Dwarf_Addr,
- Dwarf *, Dwarf_Addr, void *);
- void *arg;
-};
-
-static int
-module_callback (Dwfl_Module *mod, void **userdata,
- const char *name, Dwarf_Addr start, void *arg)
-{
- const struct module_callback_info *info = arg;
- Dwarf_Addr bias = 0;
- Dwarf *dw = INTUSE(dwfl_module_getdwarf) (mod, &bias);
- return (*info->callback) (mod, userdata, name, start, dw, bias, info->arg);
-}
-
-ptrdiff_t
-dwfl_getdwarf (Dwfl *dwfl,
- int (*callback) (Dwfl_Module *, void **,
- const char *, Dwarf_Addr,
- Dwarf *, Dwarf_Addr, void *),
- void *arg,
- ptrdiff_t offset)
-{
- struct module_callback_info info = { callback, arg };
- return INTUSE(dwfl_getmodules) (dwfl, &module_callback, &info, offset);
-}
diff --git a/libdwfl/dwfl_getmodules.c b/libdwfl/dwfl_getmodules.c
deleted file mode 100644
index 7c6ab97..0000000
--- a/libdwfl/dwfl_getmodules.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/* Iterate through modules.
- Copyright (C) 2005, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-
-ptrdiff_t
-dwfl_getmodules (Dwfl *dwfl,
- int (*callback) (Dwfl_Module *, void **,
- const char *, Dwarf_Addr, void *),
- void *arg,
- ptrdiff_t offset)
-{
- if (dwfl == NULL)
- return -1;
-
- /* We iterate through the linked list when it's all we have.
- But continuing from an offset is slow that way. So when
- DWFL->lookup_module is populated, we can instead keep our
- place by jumping directly into the array. Since the actions
- of a callback could cause it to get populated, we must
- choose the style of place-holder when we return an offset,
- and we encode the choice in the low bits of that value. */
-
- Dwfl_Module *m = dwfl->modulelist;
-
- if ((offset & 3) == 1)
- {
- offset >>= 2;
- for (ptrdiff_t pos = 0; pos < offset; ++pos)
- if (m == NULL)
- return -1;
- else
- m = m->next;
- }
- else if (((offset & 3) == 2) && likely (dwfl->lookup_module != NULL))
- {
- offset >>= 2;
-
- if ((size_t) offset - 1 == dwfl->lookup_elts)
- return 0;
-
- if (unlikely ((size_t) offset - 1 > dwfl->lookup_elts))
- return -1;
-
- m = dwfl->lookup_module[offset - 1];
- if (unlikely (m == NULL))
- return -1;
- }
- else if (offset != 0)
- {
- __libdwfl_seterrno (DWFL_E_BADSTROFF);
- return -1;
- }
-
- while (m != NULL)
- {
- int ok = (*callback) (MODCB_ARGS (m), arg);
- ++offset;
- m = m->next;
- if (ok != DWARF_CB_OK)
- return ((dwfl->lookup_module == NULL) ? ((offset << 2) | 1)
- : (((m == NULL ? (ptrdiff_t) dwfl->lookup_elts + 1
- : m->segment + 1) << 2) | 2));
- }
- return 0;
-}
-INTDEF (dwfl_getmodules)
diff --git a/libdwfl/dwfl_getsrc.c b/libdwfl/dwfl_getsrc.c
deleted file mode 100644
index 1cc1695..0000000
--- a/libdwfl/dwfl_getsrc.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Find source location for PC address.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-
-Dwfl_Line *
-dwfl_getsrc (Dwfl *dwfl, Dwarf_Addr addr)
-{
- return INTUSE(dwfl_module_getsrc) (INTUSE(dwfl_addrmodule) (dwfl, addr),
- addr);
-}
diff --git a/libdwfl/dwfl_getsrclines.c b/libdwfl/dwfl_getsrclines.c
deleted file mode 100644
index 790481f..0000000
--- a/libdwfl/dwfl_getsrclines.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Fetch source line information for CU.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-
-int
-dwfl_getsrclines (Dwarf_Die *cudie, size_t *nlines)
-{
- struct dwfl_cu *cu = (struct dwfl_cu *) cudie;
-
- if (cu->lines == NULL)
- {
- Dwfl_Error error = __libdwfl_cu_getsrclines (cu);
- if (error != DWFL_E_NOERROR)
- {
- __libdwfl_seterrno (error);
- return -1;
- }
- }
-
- *nlines = cu->die.cu->lines->nlines;
- return -1;
-}
diff --git a/libdwfl/dwfl_line_comp_dir.c b/libdwfl/dwfl_line_comp_dir.c
deleted file mode 100644
index a755524..0000000
--- a/libdwfl/dwfl_line_comp_dir.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Get information from a source line record returned by libdwfl.
- Copyright (C) 2005, 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-#include <dwarf.h>
-
-const char *
-dwfl_line_comp_dir (Dwfl_Line *line)
-{
- if (line == NULL)
- return NULL;
-
- struct dwfl_cu *cu = dwfl_linecu (line);
- Dwarf_Attribute attr_mem;
- return INTUSE(dwarf_formstring) (INTUSE(dwarf_attr) (&cu->die,
- DW_AT_comp_dir,
- &attr_mem));
-}
diff --git a/libdwfl/dwfl_linecu.c b/libdwfl/dwfl_linecu.c
deleted file mode 100644
index 34f5bb1..0000000
--- a/libdwfl/dwfl_linecu.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/* Fetch the module containing a source line record returned by libdwfl.
- Copyright (C) 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-
-#undef dwfl_linecu
-
-Dwarf_Die *
-dwfl_linecu (Dwfl_Line *line)
-{
- if (line == NULL)
- return NULL;
-
- struct dwfl_cu *cu = dwfl_linecu_inline (line);
- return &cu->die;
-}
diff --git a/libdwfl/dwfl_lineinfo.c b/libdwfl/dwfl_lineinfo.c
deleted file mode 100644
index 0d8a688..0000000
--- a/libdwfl/dwfl_lineinfo.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/* Get information from a source line record returned by libdwfl.
- Copyright (C) 2005, 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-#include "../libdw/libdwP.h"
-
-const char *
-dwfl_lineinfo (Dwfl_Line *line, Dwarf_Addr *addr, int *linep, int *colp,
- Dwarf_Word *mtime, Dwarf_Word *length)
-{
- if (line == NULL)
- return NULL;
-
- struct dwfl_cu *cu = dwfl_linecu (line);
- const Dwarf_Line *info = &cu->die.cu->lines->info[line->idx];
-
- if (addr != NULL)
- *addr = info->addr + cu->mod->debug.bias;
- if (linep != NULL)
- *linep = info->line;
- if (colp != NULL)
- *colp = info->column;
-
- struct Dwarf_Fileinfo_s *file = &info->files->info[info->file];
- if (mtime != NULL)
- *mtime = file->mtime;
- if (length != NULL)
- *length = file->length;
- return file->name;
-}
diff --git a/libdwfl/dwfl_linemodule.c b/libdwfl/dwfl_linemodule.c
deleted file mode 100644
index fb98f83..0000000
--- a/libdwfl/dwfl_linemodule.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Fetch the module containing a source line record returned by libdwfl.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-
-Dwfl_Module *
-dwfl_linemodule (Dwfl_Line *line)
-{
- if (line == NULL)
- return NULL;
-
- return dwfl_linecu (line)->mod;
-}
diff --git a/libdwfl/dwfl_module.c b/libdwfl/dwfl_module.c
deleted file mode 100644
index d7e5413..0000000
--- a/libdwfl/dwfl_module.c
+++ /dev/null
@@ -1,226 +0,0 @@
-/* Maintenance of module list in libdwfl.
- Copyright (C) 2005, 2006, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-#include <search.h>
-#include <unistd.h>
-
-static void
-free_cu (struct dwfl_cu *cu)
-{
- if (cu->lines != NULL)
- free (cu->lines);
- free (cu);
-}
-
-static void
-nofree (void *arg __attribute__ ((unused)))
-{
-}
-
-static void
-free_file (struct dwfl_file *file)
-{
- free (file->name);
-
- /* Close the fd only on the last reference. */
- if (file->elf != NULL && elf_end (file->elf) == 0 && file->fd != -1)
- close (file->fd);
-}
-
-void
-internal_function
-__libdwfl_module_free (Dwfl_Module *mod)
-{
- if (mod->lazy_cu_root != NULL)
- tdestroy (mod->lazy_cu_root, nofree);
-
- if (mod->aranges != NULL)
- free (mod->aranges);
-
- if (mod->cu != NULL)
- {
- for (size_t i = 0; i < mod->ncu; ++i)
- free_cu (mod->cu[i]);
- free (mod->cu);
- }
-
- if (mod->dw != NULL)
- INTUSE(dwarf_end) (mod->dw);
-
- if (mod->ebl != NULL)
- ebl_closebackend (mod->ebl);
-
- if (mod->debug.elf != mod->main.elf)
- free_file (&mod->debug);
- free_file (&mod->main);
-
- if (mod->build_id_bits != NULL)
- free (mod->build_id_bits);
-
- free (mod->name);
- free (mod);
-}
-
-void
-dwfl_report_begin_add (Dwfl *dwfl __attribute__ ((unused)))
-{
- /* The lookup table will be cleared on demand, there is nothing we need
- to do here. */
-}
-INTDEF (dwfl_report_begin_add)
-
-void
-dwfl_report_begin (Dwfl *dwfl)
-{
- /* Clear the segment lookup table. */
- dwfl->lookup_elts = 0;
-
- for (Dwfl_Module *m = dwfl->modulelist; m != NULL; m = m->next)
- m->gc = true;
-
- dwfl->offline_next_address = OFFLINE_REDZONE;
-}
-INTDEF (dwfl_report_begin)
-
-/* Report that a module called NAME spans addresses [START, END).
- Returns the module handle, either existing or newly allocated,
- or returns a null pointer for an allocation error. */
-Dwfl_Module *
-dwfl_report_module (Dwfl *dwfl, const char *name,
- GElf_Addr start, GElf_Addr end)
-{
- Dwfl_Module **tailp = &dwfl->modulelist, **prevp = tailp;
-
- inline Dwfl_Module *use (Dwfl_Module *mod)
- {
- mod->next = *tailp;
- *tailp = mod;
-
- if (unlikely (dwfl->lookup_module != NULL))
- {
- free (dwfl->lookup_module);
- dwfl->lookup_module = NULL;
- }
-
- return mod;
- }
-
- for (Dwfl_Module *m = *prevp; m != NULL; m = *(prevp = &m->next))
- {
- if (m->low_addr == start && m->high_addr == end
- && !strcmp (m->name, name))
- {
- /* This module is still here. Move it to the place in the list
- after the last module already reported. */
- *prevp = m->next;
- m->gc = false;
- return use (m);
- }
-
- if (! m->gc)
- tailp = &m->next;
- }
-
- Dwfl_Module *mod = calloc (1, sizeof *mod);
- if (mod == NULL)
- goto nomem;
-
- mod->name = strdup (name);
- if (mod->name == NULL)
- {
- free (mod);
- nomem:
- __libdwfl_seterrno (DWFL_E_NOMEM);
- return NULL;
- }
-
- mod->low_addr = start;
- mod->high_addr = end;
- mod->dwfl = dwfl;
-
- return use (mod);
-}
-INTDEF (dwfl_report_module)
-
-
-/* Finish reporting the current set of modules to the library.
- If REMOVED is not null, it's called for each module that
- existed before but was not included in the current report.
- Returns a nonzero return value from the callback.
- DWFL cannot be used until this function has returned zero. */
-int
-dwfl_report_end (Dwfl *dwfl,
- int (*removed) (Dwfl_Module *, void *,
- const char *, Dwarf_Addr,
- void *arg),
- void *arg)
-{
- Dwfl_Module **tailp = &dwfl->modulelist;
- while (*tailp != NULL)
- {
- Dwfl_Module *m = *tailp;
- if (m->gc && removed != NULL)
- {
- int result = (*removed) (MODCB_ARGS (m), arg);
- if (result != 0)
- return result;
- }
- if (m->gc)
- {
- *tailp = m->next;
- __libdwfl_module_free (m);
- }
- else
- tailp = &m->next;
- }
-
- return 0;
-}
-INTDEF (dwfl_report_end)
diff --git a/libdwfl/dwfl_module_addrdie.c b/libdwfl/dwfl_module_addrdie.c
deleted file mode 100644
index 2733196..0000000
--- a/libdwfl/dwfl_module_addrdie.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Fetch the CU DIE for a PC address in a given module.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-
-Dwarf_Die *
-dwfl_module_addrdie (Dwfl_Module *mod, Dwarf_Addr addr, Dwarf_Addr *bias)
-{
- if (INTUSE(dwfl_module_getdwarf) (mod, bias) == NULL)
- return NULL;
-
- struct dwfl_cu *cu;
- Dwfl_Error error = __libdwfl_addrcu (mod, addr, &cu);
- if (likely (error == DWFL_E_NOERROR))
- return &cu->die;
-
- __libdwfl_seterrno (error);
- return NULL;
-}
-INTDEF (dwfl_module_addrdie)
diff --git a/libdwfl/dwfl_module_addrname.c b/libdwfl/dwfl_module_addrname.c
deleted file mode 100644
index 7d365fe..0000000
--- a/libdwfl/dwfl_module_addrname.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Find debugging and symbol information for a module in libdwfl.
- Copyright (C) 2005, 2006, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-
-const char *
-dwfl_module_addrname (Dwfl_Module *mod, GElf_Addr addr)
-{
- GElf_Sym sym;
- return INTUSE(dwfl_module_addrsym) (mod, addr, &sym, NULL);
-}
diff --git a/libdwfl/dwfl_module_addrsym.c b/libdwfl/dwfl_module_addrsym.c
deleted file mode 100644
index 72280d1..0000000
--- a/libdwfl/dwfl_module_addrsym.c
+++ /dev/null
@@ -1,183 +0,0 @@
-/* Find debugging and symbol information for a module in libdwfl.
- Copyright (C) 2005, 2006, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-
-/* Returns the name of the symbol "closest" to ADDR.
- Never returns symbols at addresses above ADDR. */
-
-const char *
-dwfl_module_addrsym (Dwfl_Module *mod, GElf_Addr addr,
- GElf_Sym *closest_sym, GElf_Word *shndxp)
-{
- int syments = INTUSE(dwfl_module_getsymtab) (mod);
- if (syments < 0)
- return NULL;
-
- /* Return true iff we consider ADDR to lie in the same section as SYM. */
- GElf_Word addr_shndx = SHN_UNDEF;
- inline bool same_section (const GElf_Sym *sym, GElf_Word shndx)
- {
- /* For absolute symbols and the like, only match exactly. */
- if (shndx >= SHN_LORESERVE)
- return sym->st_value == addr;
-
- /* Figure out what section ADDR lies in. */
- if (addr_shndx == SHN_UNDEF)
- {
- GElf_Addr mod_addr = addr - mod->symfile->bias;
- Elf_Scn *scn = NULL;
- addr_shndx = SHN_ABS;
- while ((scn = elf_nextscn (mod->symfile->elf, scn)) != NULL)
- {
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
- if (likely (shdr != NULL)
- && mod_addr >= shdr->sh_addr
- && mod_addr < shdr->sh_addr + shdr->sh_size)
- {
- addr_shndx = elf_ndxscn (scn);
- break;
- }
- }
- }
-
- return shndx == addr_shndx;
- }
-
- /* Keep track of the closest symbol we have seen so far.
- Here we store only symbols with nonzero st_size. */
- const char *closest_name = NULL;
- GElf_Word closest_shndx = SHN_UNDEF;
-
- /* Keep track of an eligible symbol with st_size == 0 as a fallback. */
- const char *sizeless_name = NULL;
- GElf_Sym sizeless_sym = { 0, 0, 0, 0, 0, SHN_UNDEF };
- GElf_Word sizeless_shndx = SHN_UNDEF;
-
- /* Keep track of the lowest address a relevant sizeless symbol could have. */
- GElf_Addr min_label = 0;
-
- /* Look through the symbol table for a matching symbol. */
- for (int i = 1; i < syments; ++i)
- {
- GElf_Sym sym;
- GElf_Word shndx;
- const char *name = INTUSE(dwfl_module_getsym) (mod, i, &sym, &shndx);
- if (name != NULL && name[0] != '\0'
- && sym.st_shndx != SHN_UNDEF
- && sym.st_value <= addr
- && GELF_ST_TYPE (sym.st_info) != STT_SECTION
- && GELF_ST_TYPE (sym.st_info) != STT_FILE
- && GELF_ST_TYPE (sym.st_info) != STT_TLS)
- {
- /* Even if we don't choose this symbol, its existence excludes
- any sizeless symbol (assembly label) that is below its upper
- bound. */
- if (sym.st_value + sym.st_size > min_label)
- min_label = sym.st_value + sym.st_size;
-
- if (sym.st_size == 0 || addr - sym.st_value < sym.st_size)
- {
- /* This symbol is a better candidate than the current one
- if it's closer to ADDR or is global when it was local. */
- if (closest_name == NULL
- || closest_sym->st_value < sym.st_value
- || (GELF_ST_BIND (closest_sym->st_info)
- < GELF_ST_BIND (sym.st_info)))
- {
- if (sym.st_size != 0)
- {
- *closest_sym = sym;
- closest_shndx = shndx;
- closest_name = name;
- }
- else if (same_section (&sym, shndx))
- {
- /* Handwritten assembly symbols sometimes have no
- st_size. If no symbol with proper size includes
- the address, we'll use the closest one that is in
- the same section as ADDR. */
- sizeless_sym = sym;
- sizeless_shndx = shndx;
- sizeless_name = name;
- }
- }
- /* When the beginning of its range is no closer,
- the end of its range might be. But do not
- replace a global symbol with a local! */
- else if (sym.st_size != 0
- && closest_sym->st_value == sym.st_value
- && closest_sym->st_size > sym.st_size
- && (GELF_ST_BIND (closest_sym->st_info)
- <= GELF_ST_BIND (sym.st_info)))
- {
- *closest_sym = sym;
- closest_shndx = shndx;
- closest_name = name;
- }
- }
- }
- }
-
- /* If we found no proper sized symbol to use, fall back to the best
- candidate sizeless symbol we found, if any. */
- if (closest_name == NULL
- && sizeless_name != NULL && sizeless_sym.st_value >= min_label)
- {
- *closest_sym = sizeless_sym;
- closest_shndx = sizeless_shndx;
- closest_name = sizeless_name;
- }
-
- if (shndxp != NULL)
- *shndxp = closest_shndx;
- return closest_name;
-}
-INTDEF (dwfl_module_addrsym)
diff --git a/libdwfl/dwfl_module_build_id.c b/libdwfl/dwfl_module_build_id.c
deleted file mode 100644
index 3470678..0000000
--- a/libdwfl/dwfl_module_build_id.c
+++ /dev/null
@@ -1,195 +0,0 @@
-/* Return build ID information for a module.
- Copyright (C) 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-
-static int
-found_build_id (Dwfl_Module *mod, bool set,
- const void *bits, int len, GElf_Addr vaddr)
-{
- if (!set)
- /* When checking bits, we do not compare VADDR because the
- address found in a debuginfo file may not match the main
- file as modified by prelink. */
- return 1 + (mod->build_id_len == len
- && !memcmp (bits, mod->build_id_bits, len));
-
- void *copy = malloc (len);
- if (unlikely (copy == NULL))
- {
- __libdwfl_seterrno (DWFL_E_NOMEM);
- return -1;
- }
-
- mod->build_id_bits = memcpy (copy, bits, len);
- mod->build_id_vaddr = vaddr;
- mod->build_id_len = len;
- return len;
-}
-
-#define NO_VADDR ((GElf_Addr) -1l)
-
-static int
-check_notes (Dwfl_Module *mod, bool set, Elf_Data *data, GElf_Addr data_vaddr)
-{
- size_t pos = 0;
- GElf_Nhdr nhdr;
- size_t name_pos;
- size_t desc_pos;
- while ((pos = gelf_getnote (data, pos, &nhdr, &name_pos, &desc_pos)) > 0)
- if (nhdr.n_type == NT_GNU_BUILD_ID
- && nhdr.n_namesz == sizeof "GNU" && !memcmp (data->d_buf + name_pos,
- "GNU", sizeof "GNU"))
- return found_build_id (mod, set,
- data->d_buf + desc_pos, nhdr.n_descsz,
- data_vaddr == NO_VADDR ? 0
- : data_vaddr + desc_pos);
- return 0;
-}
-
-int
-internal_function
-__libdwfl_find_build_id (Dwfl_Module *mod, bool set, Elf *elf)
-{
- int result = 0;
-
- Elf_Scn *scn = elf_nextscn (elf, NULL);
-
- if (scn == NULL)
- {
- /* No sections, have to look for phdrs. */
- GElf_Ehdr ehdr_mem;
- GElf_Ehdr *ehdr = gelf_getehdr (elf, &ehdr_mem);
- if (unlikely (ehdr == NULL))
- {
- __libdwfl_seterrno (DWFL_E_LIBELF);
- return -1;
- }
- for (uint_fast16_t i = 0; result == 0 && i < ehdr_mem.e_phnum; ++i)
- {
- GElf_Phdr phdr_mem;
- GElf_Phdr *phdr = gelf_getphdr (elf, i, &phdr_mem);
- if (likely (phdr != NULL) && phdr->p_type == PT_NOTE)
- result = check_notes (mod, set,
- elf_getdata_rawchunk (elf,
- phdr->p_offset,
- phdr->p_filesz,
- ELF_T_NHDR),
- phdr->p_vaddr + mod->main.bias);
- }
- }
- else
- do
- {
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
- if (likely (shdr != NULL) && shdr->sh_type == SHT_NOTE)
- result = check_notes (mod, set, elf_getdata (scn, NULL),
- (shdr->sh_flags & SHF_ALLOC)
- ? shdr->sh_addr + mod->main.bias : NO_VADDR);
- }
- while (result == 0 && (scn = elf_nextscn (elf, scn)) != NULL);
-
- return result;
-}
-
-/* ANDROID_CHANGE_BEGIN */
-#if 0
-int
-__dwfl_module_build_id (Dwfl_Module *mod,
- const unsigned char **bits, GElf_Addr *vaddr)
-#else
-int
-dwfl_module_build_id (Dwfl_Module *mod,
- const unsigned char **bits, GElf_Addr *vaddr)
-#endif
-/* ANDROID_CHANGE_END */
-{
- if (mod == NULL)
- return -1;
-
- if (mod->build_id_len == 0 && mod->main.elf != NULL)
- {
- /* We have the file, but have not examined it yet. */
- int result = __libdwfl_find_build_id (mod, true, mod->main.elf);
- if (result <= 0)
- {
- mod->build_id_len = -1; /* Cache negative result. */
- return result;
- }
- }
-
- if (mod->build_id_len <= 0)
- return 0;
-
- *bits = mod->build_id_bits;
- *vaddr = mod->build_id_vaddr;
- return mod->build_id_len;
-}
-
-/* ANDROID_CHANGE_BEGIN */
-#if 0
-extern __typeof__ (dwfl_module_build_id) INTUSE(dwfl_module_build_id)
- __attribute__ ((alias ("__dwfl_module_build_id")));
-asm (".symver "
- "__dwfl_module_build_id, dwfl_module_build_id@@ELFUTILS_0.138");
-
-int
-_BUG_COMPAT_dwfl_module_build_id (Dwfl_Module *mod,
- const unsigned char **bits, GElf_Addr *vaddr)
-{
- int result = INTUSE(dwfl_module_build_id) (mod, bits, vaddr);
- if (result > 0)
- *vaddr += (result + 3) & -4;
- return result;
-}
-asm (".symver "
- "_BUG_COMPAT_dwfl_module_build_id, dwfl_module_build_id@ELFUTILS_0.130");
-#endif
-/* ANDROID_CHANGE_END */
diff --git a/libdwfl/dwfl_module_getdwarf.c b/libdwfl/dwfl_module_getdwarf.c
deleted file mode 100644
index b0e1ddf..0000000
--- a/libdwfl/dwfl_module_getdwarf.c
+++ /dev/null
@@ -1,783 +0,0 @@
-/* Find debugging and symbol information for a module in libdwfl.
- Copyright (C) 2005, 2006, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-#include <fcntl.h>
-#include <string.h>
-#include <unistd.h>
-#include "../libdw/libdwP.h" /* DWARF_E_* values are here. */
-
-/* Open libelf FILE->fd and compute the load base of ELF as loaded in MOD.
- When we return success, FILE->elf and FILE->bias are set up. */
-static inline Dwfl_Error
-open_elf (Dwfl_Module *mod, struct dwfl_file *file)
-{
- if (file->elf == NULL)
- {
- /* If there was a pre-primed file name left that the callback left
- behind, try to open that file name. */
- if (file->fd < 0 && file->name != NULL)
- file->fd = TEMP_FAILURE_RETRY (open64 (file->name, O_RDONLY));
-
- if (file->fd < 0)
- return CBFAIL;
-
- file->elf = elf_begin (file->fd, ELF_C_READ_MMAP_PRIVATE, NULL);
- }
-
- if (unlikely (elf_kind (file->elf) != ELF_K_ELF))
- {
- close (file->fd);
- file->fd = -1;
- return DWFL_E_BADELF;
- }
-
- GElf_Ehdr ehdr_mem, *ehdr = gelf_getehdr (file->elf, &ehdr_mem);
- if (ehdr == NULL)
- {
- elf_error:
- close (file->fd);
- file->fd = -1;
- return DWFL_E (LIBELF, elf_errno ());
- }
-
- /* The addresses in an ET_EXEC file are absolute. The lowest p_vaddr of
- the main file can differ from that of the debug file due to prelink.
- But that doesn't not change addresses that symbols, debuginfo, or
- sh_addr of any program sections refer to. */
- file->bias = 0;
- if (mod->e_type != ET_EXEC)
- for (uint_fast16_t i = 0; i < ehdr->e_phnum; ++i)
- {
- GElf_Phdr ph_mem;
- GElf_Phdr *ph = gelf_getphdr (file->elf, i, &ph_mem);
- if (ph == NULL)
- goto elf_error;
- if (ph->p_type == PT_LOAD)
- {
- file->bias = ((mod->low_addr & -ph->p_align)
- - (ph->p_vaddr & -ph->p_align));
- break;
- }
- }
-
- mod->e_type = ehdr->e_type;
-
- /* Relocatable Linux kernels are ET_EXEC but act like ET_DYN. */
- if (mod->e_type == ET_EXEC && file->bias != 0)
- mod->e_type = ET_DYN;
-
- return DWFL_E_NOERROR;
-}
-
-/* Find the main ELF file for this module and open libelf on it.
- When we return success, MOD->main.elf and MOD->main.bias are set up. */
-static void
-find_file (Dwfl_Module *mod)
-{
- if (mod->main.elf != NULL /* Already done. */
- || mod->elferr != DWFL_E_NOERROR) /* Cached failure. */
- return;
-
- mod->main.fd = (*mod->dwfl->callbacks->find_elf) (MODCB_ARGS (mod),
- &mod->main.name,
- &mod->main.elf);
- mod->elferr = open_elf (mod, &mod->main);
-
- if (mod->elferr == DWFL_E_NOERROR && !mod->main.valid)
- {
- /* Clear any explicitly reported build ID, just in case it was wrong.
- We'll fetch it from the file when asked. */
- free (mod->build_id_bits);
- mod->build_id_bits = NULL;
- mod->build_id_len = 0;
- }
-}
-
-/* Search an ELF file for a ".gnu_debuglink" section. */
-static const char *
-find_debuglink (Elf *elf, GElf_Word *crc)
-{
- size_t shstrndx;
- if (elf_getshstrndx (elf, &shstrndx) < 0)
- return NULL;
-
- Elf_Scn *scn = NULL;
- while ((scn = elf_nextscn (elf, scn)) != NULL)
- {
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
- if (shdr == NULL)
- return NULL;
-
- const char *name = elf_strptr (elf, shstrndx, shdr->sh_name);
- if (name == NULL)
- return NULL;
-
- if (!strcmp (name, ".gnu_debuglink"))
- break;
- }
-
- if (scn == NULL)
- return NULL;
-
- /* Found the .gnu_debuglink section. Extract its contents. */
- Elf_Data *rawdata = elf_rawdata (scn, NULL);
- if (rawdata == NULL)
- return NULL;
-
- Elf_Data crcdata =
- {
- .d_type = ELF_T_WORD,
- .d_buf = crc,
- .d_size = sizeof *crc,
- .d_version = EV_CURRENT,
- };
- Elf_Data conv =
- {
- .d_type = ELF_T_WORD,
- .d_buf = rawdata->d_buf + rawdata->d_size - sizeof *crc,
- .d_size = sizeof *crc,
- .d_version = EV_CURRENT,
- };
-
- GElf_Ehdr ehdr_mem;
- GElf_Ehdr *ehdr = gelf_getehdr (elf, &ehdr_mem);
- if (ehdr == NULL)
- return NULL;
-
- Elf_Data *d = gelf_xlatetom (elf, &crcdata, &conv, ehdr->e_ident[EI_DATA]);
- if (d == NULL)
- return NULL;
- assert (d == &crcdata);
-
- return rawdata->d_buf;
-}
-
-
-/* Find the separate debuginfo file for this module and open libelf on it.
- When we return success, MOD->debug is set up. */
-static Dwfl_Error
-find_debuginfo (Dwfl_Module *mod)
-{
- if (mod->debug.elf != NULL)
- return DWFL_E_NOERROR;
-
- GElf_Word debuglink_crc = 0;
- const char *debuglink_file = find_debuglink (mod->main.elf, &debuglink_crc);
-
- mod->debug.fd = (*mod->dwfl->callbacks->find_debuginfo) (MODCB_ARGS (mod),
- mod->main.name,
- debuglink_file,
- debuglink_crc,
- &mod->debug.name);
- return open_elf (mod, &mod->debug);
-}
-
-
-/* Try to find a symbol table in FILE.
- Returns DWFL_E_NOERROR if a proper one is found.
- Returns DWFL_E_NO_SYMTAB if not, but still sets results for SHT_DYNSYM. */
-static Dwfl_Error
-load_symtab (struct dwfl_file *file, struct dwfl_file **symfile,
- Elf_Scn **symscn, Elf_Scn **xndxscn,
- size_t *syments, GElf_Word *strshndx)
-{
- bool symtab = false;
- Elf_Scn *scn = NULL;
- while ((scn = elf_nextscn (file->elf, scn)) != NULL)
- {
- GElf_Shdr shdr_mem, *shdr = gelf_getshdr (scn, &shdr_mem);
- if (shdr != NULL)
- switch (shdr->sh_type)
- {
- case SHT_SYMTAB:
- symtab = true;
- *symscn = scn;
- *symfile = file;
- *strshndx = shdr->sh_link;
- *syments = shdr->sh_size / shdr->sh_entsize;
- if (*xndxscn != NULL)
- return DWFL_E_NOERROR;
- break;
-
- case SHT_DYNSYM:
- if (symtab)
- break;
- /* Use this if need be, but keep looking for SHT_SYMTAB. */
- *symscn = scn;
- *symfile = file;
- *strshndx = shdr->sh_link;
- *syments = shdr->sh_size / shdr->sh_entsize;
- break;
-
- case SHT_SYMTAB_SHNDX:
- *xndxscn = scn;
- if (symtab)
- return DWFL_E_NOERROR;
- break;
-
- default:
- break;
- }
- }
-
- if (symtab)
- /* We found one, though no SHT_SYMTAB_SHNDX to go with it. */
- return DWFL_E_NOERROR;
-
- /* We found no SHT_SYMTAB, so any SHT_SYMTAB_SHNDX was bogus.
- We might have found an SHT_DYNSYM and set *SYMSCN et al though. */
- *xndxscn = NULL;
- return DWFL_E_NO_SYMTAB;
-}
-
-
-/* Translate addresses into file offsets.
- OFFS[*] start out zero and remain zero if unresolved. */
-static void
-find_offsets (Elf *elf, const GElf_Ehdr *ehdr, size_t n,
- GElf_Addr addrs[n], GElf_Off offs[n])
-{
- size_t unsolved = n;
- for (uint_fast16_t i = 0; i < ehdr->e_phnum; ++i)
- {
- GElf_Phdr phdr_mem;
- GElf_Phdr *phdr = gelf_getphdr (elf, i, &phdr_mem);
- if (phdr != NULL && phdr->p_type == PT_LOAD && phdr->p_memsz > 0)
- for (size_t j = 0; j < n; ++j)
- if (offs[j] == 0
- && addrs[j] >= phdr->p_vaddr
- && addrs[j] - phdr->p_vaddr < phdr->p_filesz)
- {
- offs[j] = addrs[j] - phdr->p_vaddr + phdr->p_offset;
- if (--unsolved == 0)
- break;
- }
- }
-}
-
-/* Try to find a dynamic symbol table via phdrs. */
-static void
-find_dynsym (Dwfl_Module *mod)
-{
- GElf_Ehdr ehdr_mem;
- GElf_Ehdr *ehdr = gelf_getehdr (mod->main.elf, &ehdr_mem);
-
- for (uint_fast16_t i = 0; i < ehdr->e_phnum; ++i)
- {
- GElf_Phdr phdr_mem;
- GElf_Phdr *phdr = gelf_getphdr (mod->main.elf, i, &phdr_mem);
- if (phdr == NULL)
- break;
-
- if (phdr->p_type == PT_DYNAMIC)
- {
- /* Examine the dynamic section for the pointers we need. */
-
- Elf_Data *data = elf_getdata_rawchunk (mod->main.elf,
- phdr->p_offset, phdr->p_filesz,
- ELF_T_DYN);
- if (data == NULL)
- continue;
-
- enum
- {
- i_symtab,
- i_strtab,
- i_hash,
- i_gnu_hash,
- i_max
- };
- GElf_Addr addrs[i_max] = { 0, };
- GElf_Xword strsz = 0;
- size_t n = data->d_size / gelf_fsize (mod->main.elf,
- ELF_T_DYN, 1, EV_CURRENT);
- for (size_t j = 0; j < n; ++j)
- {
- GElf_Dyn dyn_mem;
- GElf_Dyn *dyn = gelf_getdyn (data, j, &dyn_mem);
- if (dyn != NULL)
- switch (dyn->d_tag)
- {
- case DT_SYMTAB:
- addrs[i_symtab] = dyn->d_un.d_ptr;
- continue;
-
- case DT_HASH:
- addrs[i_hash] = dyn->d_un.d_ptr;
- continue;
-
- case DT_GNU_HASH:
- addrs[i_gnu_hash] = dyn->d_un.d_ptr;
- continue;
-
- case DT_STRTAB:
- addrs[i_strtab] = dyn->d_un.d_ptr;
- continue;
-
- case DT_STRSZ:
- strsz = dyn->d_un.d_val;
- continue;
-
- default:
- continue;
-
- case DT_NULL:
- break;
- }
- break;
- }
-
- /* Translate pointers into file offsets. */
- GElf_Off offs[i_max] = { 0, };
- find_offsets (mod->main.elf, ehdr, i_max, addrs, offs);
-
- /* Figure out the size of the symbol table. */
- if (offs[i_hash] != 0)
- {
- /* In the original format, .hash says the size of .dynsym. */
-
- size_t entsz = SH_ENTSIZE_HASH (ehdr);
- data = elf_getdata_rawchunk (mod->main.elf,
- offs[i_hash] + entsz, entsz,
- entsz == 4 ? ELF_T_WORD
- : ELF_T_XWORD);
- if (data != NULL)
- mod->syments = (entsz == 4
- ? *(const GElf_Word *) data->d_buf
- : *(const GElf_Xword *) data->d_buf);
- }
- if (offs[i_gnu_hash] != 0 && mod->syments == 0)
- {
- /* In the new format, we can derive it with some work. */
-
- const struct
- {
- Elf32_Word nbuckets;
- Elf32_Word symndx;
- Elf32_Word maskwords;
- Elf32_Word shift2;
- } *header;
-
- data = elf_getdata_rawchunk (mod->main.elf, offs[i_gnu_hash],
- sizeof *header, ELF_T_WORD);
- if (data != NULL)
- {
- header = data->d_buf;
- Elf32_Word nbuckets = header->nbuckets;
- Elf32_Word symndx = header->symndx;
- GElf_Off buckets_at = (offs[i_gnu_hash] + sizeof *header
- + (gelf_getclass (mod->main.elf)
- * sizeof (Elf32_Word)
- * header->maskwords));
-
- data = elf_getdata_rawchunk (mod->main.elf, buckets_at,
- nbuckets * sizeof (Elf32_Word),
- ELF_T_WORD);
- if (data != NULL && symndx < nbuckets)
- {
- const Elf32_Word *const buckets = data->d_buf;
- Elf32_Word maxndx = symndx;
- for (Elf32_Word bucket = 0; bucket < nbuckets; ++bucket)
- if (buckets[bucket] > maxndx)
- maxndx = buckets[bucket];
-
- GElf_Off hasharr_at = (buckets_at
- + nbuckets * sizeof (Elf32_Word));
- hasharr_at += (maxndx - symndx) * sizeof (Elf32_Word);
- do
- {
- data = elf_getdata_rawchunk (mod->main.elf,
- hasharr_at,
- sizeof (Elf32_Word),
- ELF_T_WORD);
- if (data != NULL
- && (*(const Elf32_Word *) data->d_buf & 1u))
- {
- mod->syments = maxndx + 1;
- break;
- }
- ++maxndx;
- hasharr_at += sizeof (Elf32_Word);
- } while (data != NULL);
- }
- }
- }
- if (offs[i_strtab] > offs[i_symtab] && mod->syments == 0)
- mod->syments = ((offs[i_strtab] - offs[i_symtab])
- / gelf_fsize (mod->main.elf,
- ELF_T_SYM, 1, EV_CURRENT));
-
- if (mod->syments > 0)
- {
- mod->symdata = elf_getdata_rawchunk (mod->main.elf,
- offs[i_symtab],
- gelf_fsize (mod->main.elf,
- ELF_T_SYM,
- mod->syments,
- EV_CURRENT),
- ELF_T_SYM);
- if (mod->symdata != NULL)
- {
- mod->symstrdata = elf_getdata_rawchunk (mod->main.elf,
- offs[i_strtab],
- strsz,
- ELF_T_BYTE);
- if (mod->symstrdata == NULL)
- mod->symdata = NULL;
- }
- if (mod->symdata == NULL)
- mod->symerr = DWFL_E (LIBELF, elf_errno ());
- else
- {
- mod->symfile = &mod->main;
- mod->symerr = DWFL_E_NOERROR;
- }
- return;
- }
- }
- }
-}
-
-/* Try to find a symbol table in either MOD->main.elf or MOD->debug.elf. */
-static void
-find_symtab (Dwfl_Module *mod)
-{
- if (mod->symdata != NULL /* Already done. */
- || mod->symerr != DWFL_E_NOERROR) /* Cached previous failure. */
- return;
-
- find_file (mod);
- mod->symerr = mod->elferr;
- if (mod->symerr != DWFL_E_NOERROR)
- return;
-
- /* First see if the main ELF file has the debugging information. */
- Elf_Scn *symscn = NULL, *xndxscn = NULL;
- GElf_Word strshndx = 0;
- mod->symerr = load_symtab (&mod->main, &mod->symfile, &symscn,
- &xndxscn, &mod->syments, &strshndx);
- switch (mod->symerr)
- {
- default:
- return;
-
- case DWFL_E_NOERROR:
- break;
-
- case DWFL_E_NO_SYMTAB:
- /* Now we have to look for a separate debuginfo file. */
- mod->symerr = find_debuginfo (mod);
- switch (mod->symerr)
- {
- default:
- return;
-
- case DWFL_E_NOERROR:
- mod->symerr = load_symtab (&mod->debug, &mod->symfile, &symscn,
- &xndxscn, &mod->syments, &strshndx);
- break;
-
- case DWFL_E_CB: /* The find_debuginfo hook failed. */
- mod->symerr = DWFL_E_NO_SYMTAB;
- break;
- }
-
- switch (mod->symerr)
- {
- default:
- return;
-
- case DWFL_E_NOERROR:
- break;
-
- case DWFL_E_NO_SYMTAB:
- if (symscn != NULL)
- {
- /* We still have the dynamic symbol table. */
- mod->symerr = DWFL_E_NOERROR;
- break;
- }
-
- /* Last ditch, look for dynamic symbols without section headers. */
- find_dynsym (mod);
- return;
- }
- break;
- }
-
- /* This does some sanity checks on the string table section. */
- if (elf_strptr (mod->symfile->elf, strshndx, 0) == NULL)
- {
- elferr:
- mod->symerr = DWFL_E (LIBELF, elf_errno ());
- return;
- }
-
- /* Cache the data; MOD->syments was set above. */
-
- mod->symstrdata = elf_getdata (elf_getscn (mod->symfile->elf, strshndx),
- NULL);
- if (mod->symstrdata == NULL)
- goto elferr;
-
- if (xndxscn == NULL)
- mod->symxndxdata = NULL;
- else
- {
- mod->symxndxdata = elf_getdata (xndxscn, NULL);
- if (mod->symxndxdata == NULL)
- goto elferr;
- }
-
- mod->symdata = elf_getdata (symscn, NULL);
- if (mod->symdata == NULL)
- goto elferr;
-}
-
-
-/* Try to open a libebl backend for MOD. */
-Dwfl_Error
-internal_function
-__libdwfl_module_getebl (Dwfl_Module *mod)
-{
- if (mod->ebl == NULL)
- {
- find_file (mod);
- if (mod->elferr != DWFL_E_NOERROR)
- return mod->elferr;
-
- mod->ebl = ebl_openbackend (mod->main.elf);
- if (mod->ebl == NULL)
- return DWFL_E_LIBEBL;
- }
- return DWFL_E_NOERROR;
-}
-
-/* Try to start up libdw on DEBUGFILE. */
-static Dwfl_Error
-load_dw (Dwfl_Module *mod, struct dwfl_file *debugfile)
-{
- if (mod->e_type == ET_REL && !debugfile->relocated)
- {
- const Dwfl_Callbacks *const cb = mod->dwfl->callbacks;
-
- /* The debugging sections have to be relocated. */
- if (cb->section_address == NULL)
- return DWFL_E_NOREL;
-
- Dwfl_Error error = __libdwfl_module_getebl (mod);
- if (error != DWFL_E_NOERROR)
- return error;
-
- find_symtab (mod);
- Dwfl_Error result = mod->symerr;
- if (result == DWFL_E_NOERROR)
- result = __libdwfl_relocate (mod, debugfile->elf, true);
- if (result != DWFL_E_NOERROR)
- return result;
-
- /* Don't keep the file descriptors around. */
- if (mod->main.fd != -1 && elf_cntl (mod->main.elf, ELF_C_FDREAD) == 0)
- {
- close (mod->main.fd);
- mod->main.fd = -1;
- }
- if (debugfile->fd != -1 && elf_cntl (debugfile->elf, ELF_C_FDREAD) == 0)
- {
- close (debugfile->fd);
- debugfile->fd = -1;
- }
- }
-
- mod->dw = INTUSE(dwarf_begin_elf) (debugfile->elf, DWARF_C_READ, NULL);
- if (mod->dw == NULL)
- {
- int err = INTUSE(dwarf_errno) ();
- return err == DWARF_E_NO_DWARF ? DWFL_E_NO_DWARF : DWFL_E (LIBDW, err);
- }
-
- /* Until we have iterated through all CU's, we might do lazy lookups. */
- mod->lazycu = 1;
-
- return DWFL_E_NOERROR;
-}
-
-/* Try to start up libdw on either the main file or the debuginfo file. */
-static void
-find_dw (Dwfl_Module *mod)
-{
- if (mod->dw != NULL /* Already done. */
- || mod->dwerr != DWFL_E_NOERROR) /* Cached previous failure. */
- return;
-
- find_file (mod);
- mod->dwerr = mod->elferr;
- if (mod->dwerr != DWFL_E_NOERROR)
- return;
-
- /* First see if the main ELF file has the debugging information. */
- mod->dwerr = load_dw (mod, &mod->main);
- switch (mod->dwerr)
- {
- case DWFL_E_NOERROR:
- mod->debug.elf = mod->main.elf;
- mod->debug.bias = mod->main.bias;
- return;
-
- case DWFL_E_NO_DWARF:
- break;
-
- default:
- goto canonicalize;
- }
-
- /* Now we have to look for a separate debuginfo file. */
- mod->dwerr = find_debuginfo (mod);
- switch (mod->dwerr)
- {
- case DWFL_E_NOERROR:
- mod->dwerr = load_dw (mod, &mod->debug);
- break;
-
- case DWFL_E_CB: /* The find_debuginfo hook failed. */
- mod->dwerr = DWFL_E_NO_DWARF;
- return;
-
- default:
- break;
- }
-
- canonicalize:
- mod->dwerr = __libdwfl_canon_error (mod->dwerr);
-}
-
-
-Elf *
-dwfl_module_getelf (Dwfl_Module *mod, GElf_Addr *loadbase)
-{
- if (mod == NULL)
- return NULL;
-
- find_file (mod);
- if (mod->elferr == DWFL_E_NOERROR)
- {
- if (mod->e_type == ET_REL && ! mod->main.relocated)
- {
- /* Before letting them get at the Elf handle,
- apply all the relocations we know how to. */
-
- mod->main.relocated = true;
- if (likely (__libdwfl_module_getebl (mod) == DWFL_E_NOERROR))
- {
- (void) __libdwfl_relocate (mod, mod->main.elf, false);
-
- if (mod->debug.elf == mod->main.elf)
- mod->debug.relocated = true;
- else if (mod->debug.elf != NULL && ! mod->debug.relocated)
- {
- mod->debug.relocated = true;
- (void) __libdwfl_relocate (mod, mod->debug.elf, false);
- }
- }
- }
-
- *loadbase = mod->main.bias;
- return mod->main.elf;
- }
-
- __libdwfl_seterrno (mod->elferr);
- return NULL;
-}
-INTDEF (dwfl_module_getelf)
-
-
-Dwarf *
-dwfl_module_getdwarf (Dwfl_Module *mod, Dwarf_Addr *bias)
-{
- if (mod == NULL)
- return NULL;
-
- find_dw (mod);
- if (mod->dwerr == DWFL_E_NOERROR)
- {
- /* If dwfl_module_getelf was used previously, then partial apply
- relocation to miscellaneous sections in the debug file too. */
- if (mod->e_type == ET_REL
- && mod->main.relocated && ! mod->debug.relocated)
- {
- mod->debug.relocated = true;
- if (mod->debug.elf != mod->main.elf)
- (void) __libdwfl_relocate (mod, mod->debug.elf, false);
- }
-
- *bias = mod->debug.bias;
- return mod->dw;
- }
-
- __libdwfl_seterrno (mod->dwerr);
- return NULL;
-}
-INTDEF (dwfl_module_getdwarf)
-
-int
-dwfl_module_getsymtab (Dwfl_Module *mod)
-{
- if (mod == NULL)
- return -1;
-
- find_symtab (mod);
- if (mod->symerr == DWFL_E_NOERROR)
- return mod->syments;
-
- __libdwfl_seterrno (mod->symerr);
- return -1;
-}
-INTDEF (dwfl_module_getsymtab)
diff --git a/libdwfl/dwfl_module_getsrc.c b/libdwfl/dwfl_module_getsrc.c
deleted file mode 100644
index be03055..0000000
--- a/libdwfl/dwfl_module_getsrc.c
+++ /dev/null
@@ -1,99 +0,0 @@
-/* Find source location for PC address in module.
- Copyright (C) 2005, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-#include "../libdw/libdwP.h"
-
-Dwfl_Line *
-dwfl_module_getsrc (Dwfl_Module *mod, Dwarf_Addr addr)
-{
- Dwarf_Addr bias;
- if (INTUSE(dwfl_module_getdwarf) (mod, &bias) == NULL)
- return NULL;
-
- struct dwfl_cu *cu;
- Dwfl_Error error = __libdwfl_addrcu (mod, addr, &cu);
- if (likely (error == DWFL_E_NOERROR))
- error = __libdwfl_cu_getsrclines (cu);
- if (likely (error == DWFL_E_NOERROR))
- {
- /* Now we look at the module-relative address. */
- addr -= bias;
-
- /* The lines are sorted by address, so we can use binary search. */
- size_t l = 0, u = cu->die.cu->lines->nlines;
- while (l < u)
- {
- size_t idx = (l + u) / 2;
- if (addr < cu->die.cu->lines->info[idx].addr)
- u = idx;
- else if (addr > cu->die.cu->lines->info[idx].addr)
- l = idx + 1;
- else
- return &cu->lines->idx[idx];
- }
-
- if (cu->die.cu->lines->nlines > 0)
- assert (cu->die.cu->lines->info
- [cu->die.cu->lines->nlines - 1].end_sequence);
-
- /* If none were equal, the closest one below is what we want.
- We never want the last one, because it's the end-sequence
- marker with an address at the high bound of the CU's code. */
- if (u > 0 && u < cu->die.cu->lines->nlines
- && addr > cu->die.cu->lines->info[u - 1].addr)
- return &cu->lines->idx[u - 1];
-
- error = DWFL_E_ADDR_OUTOFRANGE;
- }
-
- __libdwfl_seterrno (error);
- return NULL;
-}
-INTDEF (dwfl_module_getsrc)
diff --git a/libdwfl/dwfl_module_getsrc_file.c b/libdwfl/dwfl_module_getsrc_file.c
deleted file mode 100644
index 0171c1d..0000000
--- a/libdwfl/dwfl_module_getsrc_file.c
+++ /dev/null
@@ -1,187 +0,0 @@
-/* Find matching source locations in a module.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-#include "../libdw/libdwP.h"
-
-int
-dwfl_module_getsrc_file (Dwfl_Module *mod,
- const char *fname, int lineno, int column,
- Dwfl_Line ***srcsp, size_t *nsrcs)
-{
- if (mod == NULL)
- return -1;
-
- if (mod->dw == NULL)
- {
- Dwarf_Addr bias;
- if (INTUSE(dwfl_module_getdwarf) (mod, &bias) == NULL)
- return -1;
- }
-
- bool is_basename = strchr (fname, '/') == NULL;
-
- size_t max_match = *nsrcs ?: ~0u;
- size_t act_match = *nsrcs;
- size_t cur_match = 0;
- Dwfl_Line **match = *nsrcs == 0 ? NULL : *srcsp;
-
- struct dwfl_cu *cu = NULL;
- Dwfl_Error error;
- while ((error = __libdwfl_nextcu (mod, cu, &cu)) == DWFL_E_NOERROR
- && cu != NULL
- && (error = __libdwfl_cu_getsrclines (cu)) == DWFL_E_NOERROR)
- {
- inline const char *INTUSE(dwarf_line_file) (const Dwarf_Line *line)
- {
- return line->files->info[line->file].name;
- }
- inline Dwarf_Line *dwfl_line (const Dwfl_Line *line)
- {
- return &dwfl_linecu (line)->die.cu->lines->info[line->idx];
- }
- inline const char *dwfl_line_file (const Dwfl_Line *line)
- {
- return INTUSE(dwarf_line_file) (dwfl_line (line));
- }
-
- /* Search through all the line number records for a matching
- file and line/column number. If any of the numbers is zero,
- no match is performed. */
- const char *lastfile = NULL;
- bool lastmatch = false;
- for (size_t cnt = 0; cnt < cu->die.cu->lines->nlines; ++cnt)
- {
- Dwarf_Line *line = &cu->die.cu->lines->info[cnt];
-
- if (unlikely (line->file >= line->files->nfiles))
- {
- __libdwfl_seterrno (DWFL_E (LIBDW, DWARF_E_INVALID_DWARF));
- return -1;
- }
- else
- {
- const char *file = INTUSE(dwarf_line_file) (line);
- if (file != lastfile)
- {
- /* Match the name with the name the user provided. */
- lastfile = file;
- lastmatch = !strcmp (is_basename ? basename (file) : file,
- fname);
- }
- }
- if (!lastmatch)
- continue;
-
- /* See whether line and possibly column match. */
- if (lineno != 0
- && (lineno > line->line
- || (column != 0 && column > line->column)))
- /* Cannot match. */
- continue;
-
- /* Determine whether this is the best match so far. */
- size_t inner;
- for (inner = 0; inner < cur_match; ++inner)
- if (dwfl_line_file (match[inner])
- == INTUSE(dwarf_line_file) (line))
- break;
- if (inner < cur_match
- && (dwfl_line (match[inner])->line != line->line
- || dwfl_line (match[inner])->line != lineno
- || (column != 0
- && (dwfl_line (match[inner])->column != line->column
- || dwfl_line (match[inner])->column != column))))
- {
- /* We know about this file already. If this is a better
- match for the line number, use it. */
- if (dwfl_line (match[inner])->line >= line->line
- && (dwfl_line (match[inner])->line != line->line
- || dwfl_line (match[inner])->column >= line->column))
- /* Use the new line. Otherwise the old one. */
- match[inner] = &cu->lines->idx[cnt];
- continue;
- }
-
- if (cur_match < max_match)
- {
- if (cur_match == act_match)
- {
- /* Enlarge the array for the results. */
- act_match += 10;
- Dwfl_Line **newp = realloc (match,
- act_match
- * sizeof (Dwfl_Line *));
- if (newp == NULL)
- {
- free (match);
- __libdwfl_seterrno (DWFL_E_NOMEM);
- return -1;
- }
- match = newp;
- }
-
- match[cur_match++] = &cu->lines->idx[cnt];
- }
- }
- }
-
- if (cur_match > 0)
- {
- assert (*nsrcs == 0 || *srcsp == match);
-
- *nsrcs = cur_match;
- *srcsp = match;
-
- return 0;
- }
-
- __libdwfl_seterrno (DWFL_E_NO_MATCH);
- return -1;
-}
diff --git a/libdwfl/dwfl_module_getsym.c b/libdwfl/dwfl_module_getsym.c
deleted file mode 100644
index 5f289cc..0000000
--- a/libdwfl/dwfl_module_getsym.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/* Find debugging and symbol information for a module in libdwfl.
- Copyright (C) 2006,2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-
-const char *
-dwfl_module_getsym (Dwfl_Module *mod, int ndx,
- GElf_Sym *sym, GElf_Word *shndxp)
-{
- if (unlikely (mod == NULL))
- return NULL;
-
- if (unlikely (mod->symdata == NULL))
- {
- int result = INTUSE(dwfl_module_getsymtab) (mod);
- if (result < 0)
- return NULL;
- }
-
- GElf_Word shndx;
- sym = gelf_getsymshndx (mod->symdata, mod->symxndxdata, ndx, sym, &shndx);
- if (unlikely (sym == NULL))
- {
- __libdwfl_seterrno (DWFL_E_LIBELF);
- return NULL;
- }
-
- if (sym->st_shndx != SHN_XINDEX)
- shndx = sym->st_shndx;
-
- if (shndxp != NULL)
- *shndxp = shndx;
-
- switch (shndx)
- {
- case SHN_ABS:
- case SHN_UNDEF:
- case SHN_COMMON:
- break;
-
- default:
- if (mod->e_type == ET_REL)
- {
- /* In an ET_REL file, the symbol table values are relative
- to the section, not to the module's load base. */
- size_t symshstrndx = SHN_UNDEF;
- Dwfl_Error result = __libdwfl_relocate_value (mod, mod->symfile->elf,
- &symshstrndx,
- shndx, &sym->st_value);
- if (unlikely (result != DWFL_E_NOERROR))
- {
- __libdwfl_seterrno (result);
- return NULL;
- }
- }
- /* Apply the bias to the symbol value. */
- sym->st_value += mod->symfile->bias;
- break;
- }
-
- if (unlikely (sym->st_name >= mod->symstrdata->d_size))
- {
- __libdwfl_seterrno (DWFL_E_BADSTROFF);
- return NULL;
- }
- return (const char *) mod->symstrdata->d_buf + sym->st_name;
-}
-INTDEF (dwfl_module_getsym)
diff --git a/libdwfl/dwfl_module_info.c b/libdwfl/dwfl_module_info.c
deleted file mode 100644
index 759cb62..0000000
--- a/libdwfl/dwfl_module_info.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/* Return information about a module.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-
-const char *
-dwfl_module_info (Dwfl_Module *mod, void ***userdata,
- Dwarf_Addr *start, Dwarf_Addr *end,
- Dwarf_Addr *dwbias, Dwarf_Addr *symbias,
- const char **mainfile, const char **debugfile)
-{
- if (mod == NULL)
- return NULL;
-
- if (userdata)
- *userdata = &mod->userdata;
- if (start)
- *start = mod->low_addr;
- if (end)
- *end = mod->high_addr;
-
- if (dwbias)
- *dwbias = mod->debug.elf == NULL ? (Dwarf_Addr) -1 : mod->debug.bias;
- if (symbias)
- *symbias = mod->symfile == NULL ? (Dwarf_Addr) -1 : mod->symfile->bias;
-
- if (mainfile)
- *mainfile = mod->main.name;
-
- if (debugfile)
- *debugfile = mod->debug.name;
-
- return mod->name;
-}
diff --git a/libdwfl/dwfl_module_nextcu.c b/libdwfl/dwfl_module_nextcu.c
deleted file mode 100644
index 1b37d29..0000000
--- a/libdwfl/dwfl_module_nextcu.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Iterate through DWARF compilation units in a module.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-
-Dwarf_Die *
-dwfl_module_nextcu (Dwfl_Module *mod, Dwarf_Die *lastcu, Dwarf_Addr *bias)
-{
- if (INTUSE(dwfl_module_getdwarf) (mod, bias) == NULL)
- return NULL;
-
- struct dwfl_cu *cu;
- Dwfl_Error error = __libdwfl_nextcu (mod, (struct dwfl_cu *) lastcu, &cu);
- if (likely (error == DWFL_E_NOERROR))
- return &cu->die; /* Same as a cast, so ok for null too. */
-
- __libdwfl_seterrno (error);
- return NULL;
-}
diff --git a/libdwfl/dwfl_module_register_names.c b/libdwfl/dwfl_module_register_names.c
deleted file mode 100644
index 79a874a..0000000
--- a/libdwfl/dwfl_module_register_names.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/* Enumerate DWARF register numbers and their names.
- Copyright (C) 2005, 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-
-
-int
-dwfl_module_register_names (mod, func, arg)
- Dwfl_Module *mod;
- int (*func) (void *, int regno, const char *setname,
- const char *prefix, const char *regname,
- int bits, int type);
- void *arg;
-{
- if (unlikely (mod == NULL))
- return -1;
-
- if (unlikely (mod->ebl == NULL))
- {
- Dwfl_Error error = __libdwfl_module_getebl (mod);
- if (error != DWFL_E_NOERROR)
- {
- __libdwfl_seterrno (error);
- return -1;
- }
- }
-
- int nregs = ebl_register_info (mod->ebl, -1, NULL, 0,
- NULL, NULL, NULL, NULL);
- int result = 0;
- for (int regno = 0; regno < nregs && likely (result == 0); ++regno)
- {
- char name[32];
- const char *setname = NULL;
- const char *prefix = NULL;
- int bits = -1;
- int type = -1;
- ssize_t len = ebl_register_info (mod->ebl, regno, name, sizeof name,
- &prefix, &setname, &bits, &type);
- if (unlikely (len < 0))
- {
- __libdwfl_seterrno (DWFL_E_LIBEBL);
- result = -1;
- break;
- }
- if (likely (len > 0))
- {
- assert (len > 1); /* Backend should never yield "". */
- result = (*func) (arg, regno, setname, prefix, name, bits, type);
- }
- }
-
- return result;
-}
diff --git a/libdwfl/dwfl_module_report_build_id.c b/libdwfl/dwfl_module_report_build_id.c
deleted file mode 100644
index 9a1b14f..0000000
--- a/libdwfl/dwfl_module_report_build_id.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/* Report build ID information for a module.
- Copyright (C) 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-
-// XXX vs report changed module: punting old file
-int
-dwfl_module_report_build_id (Dwfl_Module *mod,
- const unsigned char *bits, size_t len,
- GElf_Addr vaddr)
-{
- if (mod == NULL)
- return -1;
-
- if (mod->main.elf != NULL)
- {
- /* Once we know about a file, we won't take any lies about
- its contents. The only permissible call is a no-op. */
-
- if ((size_t) mod->build_id_len == len
- && (mod->build_id_vaddr == vaddr || vaddr == 0)
- && !memcmp (bits, mod->build_id_bits, len))
- return 0;
-
- __libdwfl_seterrno (DWFL_E_ALREADY_ELF);
- return -1;
- }
-
- if (vaddr != 0 && (vaddr < mod->low_addr || vaddr + len > mod->high_addr))
- {
- __libdwfl_seterrno (DWFL_E_ADDR_OUTOFRANGE);
- return -1;
- }
-
- void *copy = NULL;
- if (len > 0)
- {
- copy = malloc (len);
- if (unlikely (copy == NULL))
- {
- __libdwfl_seterrno (DWFL_E_NOMEM);
- return -1;
- }
- memcpy (copy, bits, len);
- }
-
- free (mod->build_id_bits);
-
- mod->build_id_bits = copy;
- mod->build_id_len = len;
- mod->build_id_vaddr = vaddr;
-
- return 0;
-}
-INTDEF (dwfl_module_report_build_id)
diff --git a/libdwfl/dwfl_module_return_value_location.c b/libdwfl/dwfl_module_return_value_location.c
deleted file mode 100644
index 3d5154e..0000000
--- a/libdwfl/dwfl_module_return_value_location.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/* Return location expression to find return value given a function type DIE.
- Copyright (C) 2005, 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-
-
-int
-dwfl_module_return_value_location (mod, functypedie, locops)
- Dwfl_Module *mod;
- Dwarf_Die *functypedie;
- const Dwarf_Op **locops;
-{
- if (mod == NULL)
- return -1;
-
- if (mod->ebl == NULL)
- {
- Dwfl_Error error = __libdwfl_module_getebl (mod);
- if (error != DWFL_E_NOERROR)
- {
- __libdwfl_seterrno (error);
- return -1;
- }
- }
-
- int nops = ebl_return_value_location (mod->ebl, functypedie, locops);
- if (unlikely (nops < 0))
- {
- if (nops == -1)
- __libdwfl_seterrno (DWFL_E_LIBDW);
- else if (nops == -2)
- __libdwfl_seterrno (DWFL_E_WEIRD_TYPE);
- else
- __libdwfl_seterrno (DWFL_E_LIBEBL);
- nops = -1;
- }
-
- return nops;
-}
diff --git a/libdwfl/dwfl_nextcu.c b/libdwfl/dwfl_nextcu.c
deleted file mode 100644
index 6db3e0f..0000000
--- a/libdwfl/dwfl_nextcu.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/* Iterate through DWARF compilation units across all modules.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-
-Dwarf_Die *
-dwfl_nextcu (Dwfl *dwfl, Dwarf_Die *lastcu, Dwarf_Addr *bias)
-{
- if (dwfl == NULL)
- return NULL;
-
- struct dwfl_cu *cu = (struct dwfl_cu *) lastcu;
- Dwfl_Module *mod;
-
- if (cu == NULL)
- {
- mod = dwfl->modulelist;
- goto nextmod;
- }
- else
- mod = cu->mod;
-
- Dwfl_Error error;
- do
- {
- error = __libdwfl_nextcu (mod, cu, &cu);
- if (error != DWFL_E_NOERROR)
- break;
-
- if (cu != NULL)
- {
- *bias = mod->debug.bias;
- return &cu->die;
- }
-
- do
- {
- mod = mod->next;
-
- nextmod:
- if (mod == NULL)
- return NULL;
-
- if (mod->dwerr == DWFL_E_NOERROR
- && (mod->dw != NULL
- || INTUSE(dwfl_module_getdwarf) (mod, bias) != NULL))
- break;
- }
- while (mod->dwerr == DWFL_E_NO_DWARF);
- error = mod->dwerr;
- }
- while (error == DWFL_E_NOERROR);
-
- __libdwfl_seterrno (error);
- return NULL;
-}
-INTDEF (dwfl_nextcu)
diff --git a/libdwfl/dwfl_onesrcline.c b/libdwfl/dwfl_onesrcline.c
deleted file mode 100644
index 558d240..0000000
--- a/libdwfl/dwfl_onesrcline.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/* Return one of the sources lines of a CU.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-
-Dwfl_Line *
-dwfl_onesrcline (Dwarf_Die *cudie, size_t idx)
-{
- struct dwfl_cu *cu = (struct dwfl_cu *) cudie;
-
- if (cudie == NULL)
- return NULL;
-
- if (cu->lines == NULL)
- {
- Dwfl_Error error = __libdwfl_cu_getsrclines (cu);
- if (error != DWFL_E_NOERROR)
- {
- __libdwfl_seterrno (error);
- return NULL;
- }
- }
-
- if (idx >= cu->die.cu->lines->nlines)
- {
- __libdwfl_seterrno (DWFL_E (LIBDW, DWARF_E_INVALID_LINE_IDX));
- return NULL;
- }
-
- return &cu->lines->idx[idx];
-}
diff --git a/libdwfl/dwfl_report_elf.c b/libdwfl/dwfl_report_elf.c
deleted file mode 100644
index 0e5d09b..0000000
--- a/libdwfl/dwfl_report_elf.c
+++ /dev/null
@@ -1,289 +0,0 @@
-/* Report a module to libdwfl based on ELF program headers.
- Copyright (C) 2005, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-#include <fcntl.h>
-#include <unistd.h>
-
-
-/* We start every ET_REL module at a moderately aligned boundary.
- This keeps the low addresses easy to read compared to a layout
- starting at 0 (as when using -e). It also makes it unlikely
- that a middle section will have a larger alignment and require
- rejiggering (see below). */
-#define REL_MIN_ALIGN ((GElf_Xword) 0x100)
-
-Dwfl_Module *
-internal_function
-__libdwfl_report_elf (Dwfl *dwfl, const char *name, const char *file_name,
- int fd, Elf *elf, GElf_Addr base)
-{
- GElf_Ehdr ehdr_mem, *ehdr = gelf_getehdr (elf, &ehdr_mem);
- if (ehdr == NULL)
- {
- elf_error:
- __libdwfl_seterrno (DWFL_E_LIBELF);
- return NULL;
- }
-
- GElf_Addr start = 0, end = 0, bias = 0;
- switch (ehdr->e_type)
- {
- case ET_REL:
- /* For a relocatable object, we do an arbitrary section layout.
- By updating the section header in place, we leave the layout
- information to be found by relocation. */
-
- start = end = base = (base + REL_MIN_ALIGN - 1) & -REL_MIN_ALIGN;
-
- bool first = true;
- Elf_Scn *scn = NULL;
- while ((scn = elf_nextscn (elf, scn)) != NULL)
- {
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
- if (unlikely (shdr == NULL))
- goto elf_error;
-
- if (shdr->sh_flags & SHF_ALLOC)
- {
- const GElf_Xword align = shdr->sh_addralign ?: 1;
- const GElf_Addr next = (end + align - 1) & -align;
- if (shdr->sh_addr == 0
- /* Once we've started doing layout we have to do it all,
- unless we just layed out the first section at 0 when
- it already was at 0. */
- || (bias == 0 && end > start && end != next))
- {
- shdr->sh_addr = next;
- if (end == base)
- /* This is the first section assigned a location.
- Use its aligned address as the module's base. */
- start = base = shdr->sh_addr;
- else if (unlikely (base & (align - 1)))
- {
- /* If BASE has less than the maximum alignment of
- any section, we eat more than the optimal amount
- of padding and so make the module's apparent
- size come out larger than it would when placed
- at zero. So reset the layout with a better base. */
-
- start = end = base = (base + align - 1) & -align;
- Elf_Scn *prev_scn = NULL;
- do
- {
- prev_scn = elf_nextscn (elf, prev_scn);
- GElf_Shdr prev_shdr_mem;
- GElf_Shdr *prev_shdr = gelf_getshdr (prev_scn,
- &prev_shdr_mem);
- if (unlikely (prev_shdr == NULL))
- goto elf_error;
- if (prev_shdr->sh_flags & SHF_ALLOC)
- {
- const GElf_Xword prev_align
- = prev_shdr->sh_addralign ?: 1;
-
- prev_shdr->sh_addr
- = (end + prev_align - 1) & -prev_align;
- end = prev_shdr->sh_addr + prev_shdr->sh_size;
-
- if (unlikely (! gelf_update_shdr (prev_scn,
- prev_shdr)))
- goto elf_error;
- }
- }
- while (prev_scn != scn);
- continue;
- }
-
- end = shdr->sh_addr + shdr->sh_size;
- if (likely (shdr->sh_addr != 0)
- && unlikely (! gelf_update_shdr (scn, shdr)))
- goto elf_error;
- }
- else
- {
- /* The address is already assigned. Just track it. */
- if (first || end < shdr->sh_addr + shdr->sh_size)
- end = shdr->sh_addr + shdr->sh_size;
- if (first || bias > shdr->sh_addr)
- /* This is the lowest address in the module. */
- bias = shdr->sh_addr;
-
- if ((shdr->sh_addr - bias + base) & (align - 1))
- /* This section winds up misaligned using BASE.
- Adjust BASE upwards to make it congruent to
- the lowest section address in the file modulo ALIGN. */
- base = (((base + align - 1) & -align)
- + (bias & (align - 1)));
- }
-
- first = false;
- }
- }
-
- if (bias != 0)
- {
- /* The section headers had nonzero sh_addr values. The layout
- was already done. We've just collected the total span.
- Now just compute the bias from the requested base. */
- start = base;
- end = end - bias + start;
- bias = start - bias;
- }
- break;
-
- /* Everything else has to have program headers. */
-
- case ET_EXEC:
- case ET_CORE:
- /* An assigned base address is meaningless for these. */
- base = 0;
-
- case ET_DYN:
- default:
- for (uint_fast16_t i = 0; i < ehdr->e_phnum; ++i)
- {
- GElf_Phdr phdr_mem, *ph = gelf_getphdr (elf, i, &phdr_mem);
- if (unlikely (ph == NULL))
- goto elf_error;
- if (ph->p_type == PT_LOAD)
- {
- if ((base & (ph->p_align - 1)) != 0)
- base = (base + ph->p_align - 1) & -ph->p_align;
- start = base + (ph->p_vaddr & -ph->p_align);
- break;
- }
- }
- bias = base;
-
- for (uint_fast16_t i = ehdr->e_phnum; i-- > 0;)
- {
- GElf_Phdr phdr_mem, *ph = gelf_getphdr (elf, i, &phdr_mem);
- if (unlikely (ph == NULL))
- goto elf_error;
- if (ph->p_type == PT_LOAD)
- {
- end = base + (ph->p_vaddr + ph->p_memsz);
- break;
- }
- }
-
- if (end == 0)
- {
- __libdwfl_seterrno (DWFL_E_NO_PHDR);
- return NULL;
- }
- break;
- }
-
- Dwfl_Module *m = INTUSE(dwfl_report_module) (dwfl, name, start, end);
- if (m != NULL)
- {
- if (m->main.name == NULL)
- {
- m->main.name = strdup (file_name);
- m->main.fd = fd;
- }
- else if ((fd >= 0 && m->main.fd != fd)
- || strcmp (m->main.name, file_name))
- {
- elf_end (elf);
- overlap:
- m->gc = true;
- __libdwfl_seterrno (DWFL_E_OVERLAP);
- m = NULL;
- }
-
- /* Preinstall the open ELF handle for the module. */
- if (m->main.elf == NULL)
- {
- m->main.elf = elf;
- m->main.bias = bias;
- m->e_type = ehdr->e_type;
- }
- else
- {
- elf_end (elf);
- if (m->main.bias != base)
- goto overlap;
- }
- }
- return m;
-}
-
-Dwfl_Module *
-dwfl_report_elf (Dwfl *dwfl, const char *name,
- const char *file_name, int fd, GElf_Addr base)
-{
- bool closefd = false;
- if (fd < 0)
- {
- closefd = true;
- fd = open64 (file_name, O_RDONLY);
- if (fd < 0)
- {
- __libdwfl_seterrno (DWFL_E_ERRNO);
- return NULL;
- }
- }
-
- Elf *elf = elf_begin (fd, ELF_C_READ_MMAP_PRIVATE, NULL);
- Dwfl_Module *mod = __libdwfl_report_elf (dwfl, name, file_name,
- fd, elf, base);
- if (mod == NULL)
- {
- elf_end (elf);
- if (closefd)
- close (fd);
- }
-
- return mod;
-}
-INTDEF (dwfl_report_elf)
diff --git a/libdwfl/dwfl_segment_report_module.c b/libdwfl/dwfl_segment_report_module.c
deleted file mode 100644
index 50ed140..0000000
--- a/libdwfl/dwfl_segment_report_module.c
+++ /dev/null
@@ -1,646 +0,0 @@
-/* Sniff out modules from ELF headers visible in memory segments.
- Copyright (C) 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <config.h>
-#include "../libelf/libelfP.h" /* For NOTE_ALIGN. */
-#undef _
-#include "libdwflP.h"
-
-#include <elf.h>
-#include <gelf.h>
-#include <inttypes.h>
-#include <sys/param.h>
-#include <alloca.h>
-#include <endian.h>
-
-
-/* A good size for the initial read from memory, if it's not too costly.
- This more than covers the phdrs and note segment in the average 64-bit
- binary. */
-
-#define INITIAL_READ 1024
-
-#if __BYTE_ORDER == __LITTLE_ENDIAN
-# define MY_ELFDATA ELFDATA2LSB
-#else
-# define MY_ELFDATA ELFDATA2MSB
-#endif
-
-
-/* Return user segment index closest to ADDR but not above it. */
-static int
-addr_segndx (Dwfl *dwfl, size_t segment, GElf_Addr addr)
-{
- int ndx = dwfl->lookup_segndx[segment];
- do
- {
- if (dwfl->lookup_segndx[segment] >= 0)
- ndx = dwfl->lookup_segndx[segment];
- ++segment;
- }
- while (segment < dwfl->lookup_elts - 1
- && dwfl->lookup_addr[segment] < addr);
-
- while (dwfl->lookup_segndx[segment] < 0
- && segment < dwfl->lookup_elts - 1)
- ++segment;
-
- if (dwfl->lookup_segndx[segment] >= 0)
- ndx = dwfl->lookup_segndx[segment];
-
- return ndx;
-}
-
-int
-dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name,
- Dwfl_Memory_Callback *memory_callback,
- void *memory_callback_arg,
- Dwfl_Module_Callback *read_eagerly,
- void *read_eagerly_arg)
-{
- size_t segment = ndx;
-
- if (segment >= dwfl->lookup_elts)
- segment = dwfl->lookup_elts - 1;
-
- while (segment > 0 && dwfl->lookup_segndx[segment] > ndx)
- --segment;
-
- while (dwfl->lookup_segndx[segment] < ndx)
- if (++segment == dwfl->lookup_elts)
- return 0;
-
- GElf_Addr start = dwfl->lookup_addr[segment];
-
- inline bool segment_read (int segndx,
- void **buffer, size_t *buffer_available,
- GElf_Addr addr, size_t minread)
- {
- return ! (*memory_callback) (dwfl, segndx, buffer, buffer_available,
- addr, minread, memory_callback_arg);
- }
-
- inline void release_buffer (void **buffer, size_t *buffer_available)
- {
- if (*buffer != NULL)
- (void) segment_read (-1, buffer, buffer_available, 0, 0);
- }
-
- /* First read in the file header and check its sanity. */
-
- void *buffer = NULL;
- size_t buffer_available = INITIAL_READ;
-
- inline int finish (void)
- {
- release_buffer (&buffer, &buffer_available);
- return ndx;
- }
-
- if (segment_read (ndx, &buffer, &buffer_available,
- start, sizeof (Elf64_Ehdr))
- || memcmp (buffer, ELFMAG, SELFMAG) != 0)
- return finish ();
-
- inline bool read_portion (void **data, size_t *data_size,
- GElf_Addr vaddr, size_t filesz)
- {
- if (vaddr - start + filesz > buffer_available)
- {
- *data = NULL;
- *data_size = filesz;
- return segment_read (addr_segndx (dwfl, segment, vaddr),
- data, data_size, vaddr, filesz);
- }
-
- /* We already have this whole note segment from our initial read. */
- *data = vaddr - start + buffer;
- *data_size = 0;
- return false;
- }
-
- inline void finish_portion (void **data, size_t *data_size)
- {
- if (*data_size != 0)
- release_buffer (data, data_size);
- }
-
- /* Extract the information we need from the file header. */
- union
- {
- Elf32_Ehdr e32;
- Elf64_Ehdr e64;
- } ehdr;
- GElf_Off phoff;
- uint_fast16_t phnum;
- uint_fast16_t phentsize;
- GElf_Off shdrs_end;
- Elf_Data xlatefrom =
- {
- .d_type = ELF_T_EHDR,
- .d_buf = (void *) buffer,
- .d_version = EV_CURRENT,
- };
- Elf_Data xlateto =
- {
- .d_type = ELF_T_EHDR,
- .d_buf = &ehdr,
- .d_size = sizeof ehdr,
- .d_version = EV_CURRENT,
- };
- switch (((const unsigned char *) buffer)[EI_CLASS])
- {
- case ELFCLASS32:
- xlatefrom.d_size = sizeof (Elf32_Ehdr);
- if (elf32_xlatetom (&xlateto, &xlatefrom,
- ((const unsigned char *) buffer)[EI_DATA]) == NULL)
- return finish ();
- phoff = ehdr.e32.e_phoff;
- phnum = ehdr.e32.e_phnum;
- phentsize = ehdr.e32.e_phentsize;
- if (phentsize != sizeof (Elf32_Phdr))
- return finish ();
- shdrs_end = ehdr.e32.e_shoff + ehdr.e32.e_shnum * ehdr.e32.e_shentsize;
- break;
-
- case ELFCLASS64:
- xlatefrom.d_size = sizeof (Elf64_Ehdr);
- if (elf64_xlatetom (&xlateto, &xlatefrom,
- ((const unsigned char *) buffer)[EI_DATA]) == NULL)
- return finish ();
- phoff = ehdr.e64.e_phoff;
- phnum = ehdr.e64.e_phnum;
- phentsize = ehdr.e64.e_phentsize;
- if (phentsize != sizeof (Elf64_Phdr))
- return finish ();
- shdrs_end = ehdr.e64.e_shoff + ehdr.e64.e_shnum * ehdr.e64.e_shentsize;
- break;
-
- default:
- return finish ();
- }
-
- /* The file header tells where to find the program headers.
- These are what we need to find the boundaries of the module.
- Without them, we don't have a module to report. */
-
- if (phnum == 0)
- return finish ();
-
- xlatefrom.d_type = xlateto.d_type = ELF_T_PHDR;
- xlatefrom.d_size = phnum * phentsize;
-
- void *ph_buffer = NULL;
- size_t ph_buffer_size = 0;
- if (read_portion (&ph_buffer, &ph_buffer_size,
- start + phoff, xlatefrom.d_size))
- return finish ();
-
- xlatefrom.d_buf = ph_buffer;
-
- union
- {
- Elf32_Phdr p32[phnum];
- Elf64_Phdr p64[phnum];
- } phdrs;
-
- xlateto.d_buf = &phdrs;
- xlateto.d_size = sizeof phdrs;
-
- /* Track the bounds of the file visible in memory. */
- GElf_Off file_trimmed_end = 0; /* Proper p_vaddr + p_filesz end. */
- GElf_Off file_end = 0; /* Rounded up to effective page size. */
- GElf_Off contiguous = 0; /* Visible as contiguous file from START. */
- GElf_Off total_filesz = 0; /* Total size of data to read. */
-
- /* Collect the bias between START and the containing PT_LOAD's p_vaddr. */
- GElf_Addr bias = 0;
- bool found_bias = false;
-
- /* Collect the unbiased bounds of the module here. */
- GElf_Addr module_start = -1l;
- GElf_Addr module_end = 0;
-
- /* If we see PT_DYNAMIC, record it here. */
- GElf_Addr dyn_vaddr = 0;
- GElf_Xword dyn_filesz = 0;
-
- /* Collect the build ID bits here. */
- void *build_id = NULL;
- size_t build_id_len = 0;
- GElf_Addr build_id_vaddr = 0;
-
- /* Consider a PT_NOTE we've found in the image. */
- inline void consider_notes (GElf_Addr vaddr, GElf_Xword filesz)
- {
- /* If we have already seen a build ID, we don't care any more. */
- if (build_id != NULL || filesz == 0)
- return;
-
- void *data;
- size_t data_size;
- if (read_portion (&data, &data_size, vaddr, filesz))
- return;
-
- assert (sizeof (Elf32_Nhdr) == sizeof (Elf64_Nhdr));
-
- void *notes;
- if (ehdr.e32.e_ident[EI_DATA] == MY_ELFDATA)
- notes = data;
- else
- {
- notes = malloc (filesz);
- if (unlikely (notes == NULL))
- return;
- xlatefrom.d_type = xlateto.d_type = ELF_T_NHDR;
- xlatefrom.d_buf = (void *) data;
- xlatefrom.d_size = filesz;
- xlateto.d_buf = notes;
- xlateto.d_size = filesz;
- if (elf32_xlatetom (&xlateto, &xlatefrom,
- ehdr.e32.e_ident[EI_DATA]) == NULL)
- goto done;
- }
-
- const GElf_Nhdr *nh = notes;
- while ((const void *) nh < (const void *) notes + filesz)
- {
- const void *note_name = nh + 1;
- const void *note_desc = note_name + NOTE_ALIGN (nh->n_namesz);
- if (unlikely ((size_t) ((const void *) notes + filesz
- - note_desc) < nh->n_descsz))
- break;
-
- if (nh->n_type == NT_GNU_BUILD_ID
- && nh->n_descsz > 0
- && nh->n_namesz == sizeof "GNU"
- && !memcmp (note_name, "GNU", sizeof "GNU"))
- {
- build_id_vaddr = note_desc - (const void *) notes + vaddr;
- build_id_len = nh->n_descsz;
- build_id = malloc (nh->n_descsz);
- if (likely (build_id != NULL))
- memcpy (build_id, note_desc, build_id_len);
- break;
- }
-
- nh = note_desc + NOTE_ALIGN (nh->n_descsz);
- }
-
- done:
- if (notes != data)
- free (notes);
- finish_portion (&data, &data_size);
- }
-
- /* Consider each of the program headers we've read from the image. */
- inline void consider_phdr (GElf_Word type,
- GElf_Addr vaddr, GElf_Xword memsz,
- GElf_Off offset, GElf_Xword filesz,
- GElf_Xword align)
- {
- switch (type)
- {
- case PT_DYNAMIC:
- dyn_vaddr = vaddr;
- dyn_filesz = filesz;
- break;
-
- case PT_NOTE:
- /* We calculate from the p_offset of the note segment,
- because we don't yet know the bias for its p_vaddr. */
- consider_notes (start + offset, filesz);
- break;
-
- case PT_LOAD:
- align = dwfl->segment_align > 1 ? dwfl->segment_align : align ?: 1;
-
- GElf_Addr vaddr_end = (vaddr + memsz + align - 1) & -align;
- GElf_Addr filesz_vaddr = filesz < memsz ? vaddr + filesz : vaddr_end;
- GElf_Off filesz_offset = filesz_vaddr - vaddr + offset;
-
- if (file_trimmed_end < offset + filesz)
- {
- file_trimmed_end = offset + filesz;
-
- /* Trim the last segment so we don't bother with zeros
- in the last page that are off the end of the file.
- However, if the extra bit in that page includes the
- section headers, keep them. */
- if (shdrs_end <= filesz_offset && shdrs_end > file_trimmed_end)
- {
- filesz += shdrs_end - file_trimmed_end;
- file_trimmed_end = shdrs_end;
- }
- }
-
- total_filesz += filesz;
-
- if (file_end < filesz_offset)
- {
- file_end = filesz_offset;
- if (filesz_vaddr - start == filesz_offset)
- contiguous = file_end;
- }
-
- if (!found_bias && (offset & -align) == 0
- && likely (filesz_offset >= phoff + phnum * phentsize))
- {
- bias = start - vaddr;
- found_bias = true;
- }
-
- vaddr &= -align;
- if (vaddr < module_start)
- module_start = vaddr;
-
- if (module_end < vaddr_end)
- module_end = vaddr_end;
- break;
- }
- }
- if (ehdr.e32.e_ident[EI_CLASS] == ELFCLASS32)
- {
- if (elf32_xlatetom (&xlateto, &xlatefrom,
- ehdr.e32.e_ident[EI_DATA]) == NULL)
- found_bias = false; /* Trigger error check. */
- else
- for (uint_fast16_t i = 0; i < phnum; ++i)
- consider_phdr (phdrs.p32[i].p_type,
- phdrs.p32[i].p_vaddr, phdrs.p32[i].p_memsz,
- phdrs.p32[i].p_offset, phdrs.p32[i].p_filesz,
- phdrs.p32[i].p_align);
- }
- else
- {
- if (elf64_xlatetom (&xlateto, &xlatefrom,
- ehdr.e32.e_ident[EI_DATA]) == NULL)
- found_bias = false; /* Trigger error check. */
- else
- for (uint_fast16_t i = 0; i < phnum; ++i)
- consider_phdr (phdrs.p64[i].p_type,
- phdrs.p64[i].p_vaddr, phdrs.p64[i].p_memsz,
- phdrs.p64[i].p_offset, phdrs.p64[i].p_filesz,
- phdrs.p64[i].p_align);
- }
-
- finish_portion (&ph_buffer, &ph_buffer_size);
-
- /* We must have seen the segment covering offset 0, or else the ELF
- header we read at START was not produced by these program headers. */
- if (unlikely (!found_bias))
- return finish ();
-
- /* Now we know enough to report a module for sure: its bounds. */
- module_start += bias;
- module_end += bias;
-
- dyn_vaddr += bias;
-
- /* Our return value now says to skip the segments contained
- within the module.
- XXX handle gaps
- */
- ndx = addr_segndx (dwfl, segment, module_end);
-
- /* Examine its .dynamic section to get more interesting details.
- If it has DT_SONAME, we'll use that as the module name.
- We need its DT_STRTAB and DT_STRSZ to decipher DT_SONAME,
- and they also tell us the essential portion of the file
- for fetching symbols. */
- GElf_Addr soname_stroff = 0;
- GElf_Addr dynstr_vaddr = 0;
- GElf_Xword dynstrsz = 0;
- inline bool consider_dyn (GElf_Sxword tag, GElf_Xword val)
- {
- switch (tag)
- {
- default:
- return false;
-
- case DT_SONAME:
- soname_stroff = val;
- break;
-
- case DT_STRTAB:
- dynstr_vaddr = val;
- break;
-
- case DT_STRSZ:
- dynstrsz = val;
- break;
- }
-
- return soname_stroff != 0 && dynstr_vaddr != 0 && dynstrsz != 0;
- }
-
- const size_t dyn_entsize = (ehdr.e32.e_ident[EI_CLASS] == ELFCLASS32
- ? sizeof (Elf32_Dyn) : sizeof (Elf64_Dyn));
- void *dyn_data = NULL;
- size_t dyn_data_size = 0;
- if (dyn_filesz != 0 && dyn_filesz % dyn_entsize == 0
- && ! read_portion (&dyn_data, &dyn_data_size, dyn_vaddr, dyn_filesz))
- {
- union
- {
- Elf32_Dyn d32[dyn_filesz / sizeof (Elf32_Dyn)];
- Elf64_Dyn d64[dyn_filesz / sizeof (Elf64_Dyn)];
- } dyn;
-
- xlatefrom.d_type = xlateto.d_type = ELF_T_DYN;
- xlatefrom.d_buf = (void *) dyn_data;
- xlatefrom.d_size = dyn_filesz;
- xlateto.d_buf = &dyn;
- xlateto.d_size = sizeof dyn;
-
- if (ehdr.e32.e_ident[EI_CLASS] == ELFCLASS32)
- {
- if (elf32_xlatetom (&xlateto, &xlatefrom,
- ehdr.e32.e_ident[EI_DATA]) != NULL)
- for (size_t i = 0; i < dyn_filesz / sizeof dyn.d32[0]; ++i)
- if (consider_dyn (dyn.d32[i].d_tag, dyn.d32[i].d_un.d_val))
- break;
- }
- else
- {
- if (elf64_xlatetom (&xlateto, &xlatefrom,
- ehdr.e32.e_ident[EI_DATA]) != NULL)
- for (size_t i = 0; i < dyn_filesz / sizeof dyn.d64[0]; ++i)
- if (consider_dyn (dyn.d64[i].d_tag, dyn.d64[i].d_un.d_val))
- break;
- }
- }
- finish_portion (&dyn_data, &dyn_data_size);
-
- /* We'll use the name passed in or a stupid default if not DT_SONAME. */
- if (name == NULL)
- name = ehdr.e32.e_type == ET_EXEC ? "[exe]" : "[dso]";
-
- void *soname = NULL;
- size_t soname_size = 0;
- if (dynstrsz != 0 && dynstr_vaddr != 0)
- {
- /* We know the bounds of the .dynstr section. */
- dynstr_vaddr += bias;
- if (unlikely (dynstr_vaddr + dynstrsz > module_end))
- dynstrsz = 0;
-
- /* Try to get the DT_SONAME string. */
- if (soname_stroff != 0 && soname_stroff < dynstrsz - 1
- && ! read_portion (&soname, &soname_size,
- dynstr_vaddr + soname_stroff, 0))
- name = soname;
- }
-
- /* Now that we have chosen the module's name and bounds, report it.
- If we found a build ID, report that too. */
-
- Dwfl_Module *mod = INTUSE(dwfl_report_module) (dwfl, name,
- module_start, module_end);
- if (likely (mod != NULL) && build_id != NULL
- && unlikely (INTUSE(dwfl_module_report_build_id) (mod,
- build_id,
- build_id_len,
- build_id_vaddr)))
- {
- mod->gc = true;
- mod = NULL;
- }
-
- /* At this point we do not need BUILD_ID or NAME any more.
- They have been copied. */
- free (build_id);
- finish_portion (&soname, &soname_size);
-
- if (unlikely (mod == NULL))
- {
- ndx = -1;
- return finish ();
- }
-
- /* We have reported the module. Now let the caller decide whether we
- should read the whole thing in right now. */
-
- const GElf_Off cost = (contiguous < file_trimmed_end ? total_filesz
- : buffer_available >= contiguous ? 0
- : contiguous - buffer_available);
- const GElf_Off worthwhile = ((dynstr_vaddr == 0 || dynstrsz == 0) ? 0
- : dynstr_vaddr + dynstrsz - start);
- const GElf_Off whole = MAX (file_trimmed_end, shdrs_end);
-
- Elf *elf = NULL;
- if ((*read_eagerly) (MODCB_ARGS (mod), &buffer, &buffer_available,
- cost, worthwhile, whole, contiguous,
- read_eagerly_arg, &elf)
- && elf == NULL)
- {
- /* The caller wants to read the whole file in right now, but hasn't
- done it for us. Fill in a local image of the virtual file. */
-
- void *contents = calloc (1, file_trimmed_end);
- if (unlikely (contents == NULL))
- return finish ();
-
- inline void final_read (size_t offset, GElf_Addr vaddr, size_t size)
- {
- void *into = contents + offset;
- size_t read_size = size;
- (void) segment_read (addr_segndx (dwfl, segment, vaddr),
- &into, &read_size, vaddr, size);
- }
-
- if (contiguous < file_trimmed_end)
- {
- /* We can't use the memory image verbatim as the file image.
- So we'll be reading into a local image of the virtual file. */
-
- inline void read_phdr (GElf_Word type, GElf_Addr vaddr,
- GElf_Off offset, GElf_Xword filesz)
- {
- if (type == PT_LOAD)
- final_read (offset, vaddr + bias, filesz);
- }
-
- if (ehdr.e32.e_ident[EI_CLASS] == ELFCLASS32)
- for (uint_fast16_t i = 0; i < phnum; ++i)
- read_phdr (phdrs.p32[i].p_type, phdrs.p32[i].p_vaddr,
- phdrs.p32[i].p_offset, phdrs.p32[i].p_filesz);
- else
- for (uint_fast16_t i = 0; i < phnum; ++i)
- read_phdr (phdrs.p64[i].p_type, phdrs.p64[i].p_vaddr,
- phdrs.p64[i].p_offset, phdrs.p64[i].p_filesz);
- }
- else
- {
- /* The whole file sits contiguous in memory,
- but the caller didn't want to just do it. */
-
- const size_t have = MIN (buffer_available, file_trimmed_end);
- memcpy (contents, buffer, have);
-
- if (have < file_trimmed_end)
- final_read (have, start + have, file_trimmed_end - have);
- }
-
- elf = elf_memory (contents, file_trimmed_end);
- if (unlikely (elf == NULL))
- free (contents);
- else
- elf->flags |= ELF_F_MALLOCED;
- }
-
- if (elf != NULL)
- {
- /* Install the file in the module. */
- mod->main.elf = elf;
- mod->main.bias = bias;
- }
-
- return finish ();
-}
diff --git a/libdwfl/dwfl_validate_address.c b/libdwfl/dwfl_validate_address.c
deleted file mode 100644
index 8107376..0000000
--- a/libdwfl/dwfl_validate_address.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/* Validate an address and the relocatability of an offset from it.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-
-int
-dwfl_validate_address (Dwfl *dwfl, Dwarf_Addr address, Dwarf_Sword offset)
-{
- Dwfl_Module *mod = INTUSE(dwfl_addrmodule) (dwfl, address);
- if (mod == NULL)
- return -1;
-
- Dwarf_Addr relative = address;
- int idx = INTUSE(dwfl_module_relocate_address) (mod, &relative);
- if (idx < 0)
- return -1;
-
- if (offset != 0)
- {
- int offset_idx = -1;
- relative = address + offset;
- if (relative >= mod->low_addr && relative <= mod->high_addr)
- {
- offset_idx = INTUSE(dwfl_module_relocate_address) (mod, &relative);
- if (offset_idx < 0)
- return -1;
- }
- if (offset_idx != idx)
- {
- __libdwfl_seterrno (DWFL_E_ADDR_OUTOFRANGE);
- return -1;
- }
- }
-
- return 0;
-}
diff --git a/libdwfl/dwfl_version.c b/libdwfl/dwfl_version.c
deleted file mode 100644
index 9c7074c..0000000
--- a/libdwfl/dwfl_version.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Return implementation's version string suitable for printing.
- Copyright (C) 2006, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-
-const char *
-dwfl_version (dwfl)
- Dwfl *dwfl __attribute__ ((unused));
-{
- return PACKAGE_VERSION;
-}
diff --git a/libdwfl/elf-from-memory.c b/libdwfl/elf-from-memory.c
deleted file mode 100644
index c0e7c46..0000000
--- a/libdwfl/elf-from-memory.c
+++ /dev/null
@@ -1,368 +0,0 @@
-/* Reconstruct an ELF file by reading the segments out of remote memory.
- Copyright (C) 2005, 2006, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <config.h>
-#include "../libelf/libelfP.h"
-#undef _
-
-#include "libdwflP.h"
-
-#include <gelf.h>
-#include <sys/types.h>
-#include <stdbool.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* Reconstruct an ELF file by reading the segments out of remote memory
- based on the ELF file header at EHDR_VMA and the ELF program headers it
- points to. If not null, *LOADBASEP is filled in with the difference
- between the addresses from which the segments were read, and the
- addresses the file headers put them at.
-
- The function READ_MEMORY is called to copy at least MINREAD and at most
- MAXREAD bytes from the remote memory at target address ADDRESS into the
- local buffer at DATA; it should return -1 for errors (with code in
- `errno'), 0 if it failed to read at least MINREAD bytes due to EOF, or
- the number of bytes read if >= MINREAD. ARG is passed through. */
-
-Elf *
-elf_from_remote_memory (GElf_Addr ehdr_vma,
- GElf_Addr *loadbasep,
- ssize_t (*read_memory) (void *arg, void *data,
- GElf_Addr address,
- size_t minread,
- size_t maxread),
- void *arg)
-{
- /* First read in the file header and check its sanity. */
-
- const size_t initial_bufsize = 256;
- unsigned char *buffer = malloc (initial_bufsize);
- if (buffer == NULL)
- {
- no_memory:
- __libdwfl_seterrno (DWFL_E_NOMEM);
- return NULL;
- }
-
- ssize_t nread = (*read_memory) (arg, buffer, ehdr_vma,
- sizeof (Elf32_Ehdr), initial_bufsize);
- if (nread <= 0)
- {
- read_error:
- free (buffer);
- __libdwfl_seterrno (nread < 0 ? DWFL_E_ERRNO : DWFL_E_TRUNCATED);
- return NULL;
- }
-
- if (memcmp (buffer, ELFMAG, SELFMAG) != 0)
- {
- bad_elf:
- __libdwfl_seterrno (DWFL_E_BADELF);
- return NULL;
- }
-
- /* Extract the information we need from the file header. */
-
- union
- {
- Elf32_Ehdr e32;
- Elf64_Ehdr e64;
- } ehdr;
- Elf_Data xlatefrom =
- {
- .d_type = ELF_T_EHDR,
- .d_buf = buffer,
- .d_version = EV_CURRENT,
- };
- Elf_Data xlateto =
- {
- .d_type = ELF_T_EHDR,
- .d_buf = &ehdr,
- .d_size = sizeof ehdr,
- .d_version = EV_CURRENT,
- };
-
- GElf_Off phoff;
- uint_fast16_t phnum;
- uint_fast16_t phentsize;
- GElf_Off shdrs_end;
-
- switch (buffer[EI_CLASS])
- {
- case ELFCLASS32:
- xlatefrom.d_size = sizeof (Elf32_Ehdr);
- if (elf32_xlatetom (&xlateto, &xlatefrom, buffer[EI_DATA]) == NULL)
- {
- libelf_error:
- __libdwfl_seterrno (DWFL_E_LIBELF);
- return NULL;
- }
- phoff = ehdr.e32.e_phoff;
- phnum = ehdr.e32.e_phnum;
- phentsize = ehdr.e32.e_phentsize;
- if (phentsize != sizeof (Elf32_Phdr) || phnum == 0)
- goto bad_elf;
- shdrs_end = ehdr.e32.e_shoff + ehdr.e32.e_shnum * ehdr.e32.e_shentsize;
- break;
-
- case ELFCLASS64:
- xlatefrom.d_size = sizeof (Elf64_Ehdr);
- if (elf64_xlatetom (&xlateto, &xlatefrom, buffer[EI_DATA]) == NULL)
- goto libelf_error;
- phoff = ehdr.e64.e_phoff;
- phnum = ehdr.e64.e_phnum;
- phentsize = ehdr.e64.e_phentsize;
- if (phentsize != sizeof (Elf64_Phdr) || phnum == 0)
- goto bad_elf;
- shdrs_end = ehdr.e64.e_shoff + ehdr.e64.e_shnum * ehdr.e64.e_shentsize;
- break;
-
- default:
- goto bad_elf;
- }
-
-
- /* The file header tells where to find the program headers.
- These are what we use to actually choose what to read. */
-
- xlatefrom.d_type = xlateto.d_type = ELF_T_PHDR;
- xlatefrom.d_size = phnum * phentsize;
-
- if ((size_t) nread >= phoff + phnum * phentsize)
- /* We already have all the phdrs from the initial read. */
- xlatefrom.d_buf = buffer + phoff;
- else
- {
- /* Read in the program headers. */
-
- if (initial_bufsize < phnum * phentsize)
- {
- unsigned char *newbuf = realloc (buffer, phnum * phentsize);
- if (newbuf == NULL)
- {
- free (buffer);
- goto no_memory;
- }
- buffer = newbuf;
- }
- nread = (*read_memory) (arg, buffer, ehdr_vma + phoff,
- phnum * phentsize, phnum * phentsize);
- if (nread <= 0)
- goto read_error;
-
- xlatefrom.d_buf = buffer;
- }
-
- union
- {
- Elf32_Phdr p32[phnum];
- Elf64_Phdr p64[phnum];
- } phdrs;
-
- xlateto.d_buf = &phdrs;
- xlateto.d_size = sizeof phdrs;
-
- /* Scan for PT_LOAD segments to find the total size of the file image. */
- size_t contents_size = 0;
- GElf_Off segments_end = 0;
- GElf_Addr loadbase = ehdr_vma;
- bool found_base = false;
- switch (ehdr.e32.e_ident[EI_CLASS])
- {
- inline void handle_segment (GElf_Addr vaddr, GElf_Off offset,
- GElf_Xword filesz, GElf_Xword align)
- {
- GElf_Off segment_end = ((offset + filesz + align - 1) & -align);
-
- if (segment_end > (GElf_Off) contents_size)
- contents_size = segment_end;
-
- if (!found_base && (offset & -align) == 0)
- {
- loadbase = ehdr_vma - (vaddr & -align);
- found_base = true;
- }
-
- segments_end = offset + filesz;
- }
-
- case ELFCLASS32:
- if (elf32_xlatetom (&xlateto, &xlatefrom,
- ehdr.e32.e_ident[EI_DATA]) == NULL)
- goto libelf_error;
- for (uint_fast16_t i = 0; i < phnum; ++i)
- if (phdrs.p32[i].p_type == PT_LOAD)
- handle_segment (phdrs.p32[i].p_vaddr, phdrs.p32[i].p_offset,
- phdrs.p32[i].p_filesz, phdrs.p32[i].p_align);
- break;
-
- case ELFCLASS64:
- if (elf32_xlatetom (&xlateto, &xlatefrom,
- ehdr.e32.e_ident[EI_DATA]) == NULL)
- goto libelf_error;
- for (uint_fast16_t i = 0; i < phnum; ++i)
- if (phdrs.p32[i].p_type == PT_LOAD)
- handle_segment (phdrs.p64[i].p_vaddr, phdrs.p64[i].p_offset,
- phdrs.p64[i].p_filesz, phdrs.p64[i].p_align);
- break;
-
- default:
- abort ();
- break;
- }
-
- /* Trim the last segment so we don't bother with zeros in the last page
- that are off the end of the file. However, if the extra bit in that
- page includes the section headers, keep them. */
- if ((GElf_Off) contents_size > segments_end
- && (GElf_Off) contents_size >= shdrs_end)
- {
- contents_size = segments_end;
- if ((GElf_Off) contents_size < shdrs_end)
- contents_size = shdrs_end;
- }
- else
- contents_size = segments_end;
-
- free (buffer);
-
- /* Now we know the size of the whole image we want read in. */
- buffer = calloc (1, contents_size);
- if (buffer == NULL)
- goto no_memory;
-
- switch (ehdr.e32.e_ident[EI_CLASS])
- {
- inline bool handle_segment (GElf_Addr vaddr, GElf_Off offset,
- GElf_Xword filesz, GElf_Xword align)
- {
- GElf_Off start = offset & -align;
- GElf_Off end = (offset + filesz + align - 1) & -align;
- if (end > (GElf_Off) contents_size)
- end = contents_size;
- nread = (*read_memory) (arg, buffer + start,
- (loadbase + vaddr) & -align,
- end - start, end - start);
- return nread <= 0;
- }
-
- case ELFCLASS32:
- for (uint_fast16_t i = 0; i < phnum; ++i)
- if (phdrs.p32[i].p_type == PT_LOAD)
- if (handle_segment (phdrs.p32[i].p_vaddr, phdrs.p32[i].p_offset,
- phdrs.p32[i].p_filesz, phdrs.p32[i].p_align))
- goto read_error;
-
- /* If the segments visible in memory didn't include the section
- headers, then clear them from the file header. */
- if (contents_size < shdrs_end)
- {
- ehdr.e32.e_shoff = 0;
- ehdr.e32.e_shnum = 0;
- ehdr.e32.e_shstrndx = 0;
- }
-
- /* This will normally have been in the first PT_LOAD segment. But it
- conceivably could be missing, and we might have just changed it. */
- xlatefrom.d_type = xlateto.d_type = ELF_T_EHDR;
- xlatefrom.d_size = xlateto.d_size = sizeof ehdr.e32;
- xlatefrom.d_buf = &ehdr.e32;
- xlateto.d_buf = buffer;
- if (elf32_xlatetof (&xlateto, &xlatefrom,
- ehdr.e32.e_ident[EI_DATA]) == NULL)
- goto libelf_error;
- break;
-
- case ELFCLASS64:
- for (uint_fast16_t i = 0; i < phnum; ++i)
- if (phdrs.p32[i].p_type == PT_LOAD)
- if (handle_segment (phdrs.p64[i].p_vaddr, phdrs.p64[i].p_offset,
- phdrs.p64[i].p_filesz, phdrs.p64[i].p_align))
- goto read_error;
-
- /* If the segments visible in memory didn't include the section
- headers, then clear them from the file header. */
- if (contents_size < shdrs_end)
- {
- ehdr.e64.e_shoff = 0;
- ehdr.e64.e_shnum = 0;
- ehdr.e64.e_shstrndx = 0;
- }
-
- /* This will normally have been in the first PT_LOAD segment. But it
- conceivably could be missing, and we might have just changed it. */
- xlatefrom.d_type = xlateto.d_type = ELF_T_EHDR;
- xlatefrom.d_size = xlateto.d_size = sizeof ehdr.e64;
- xlatefrom.d_buf = &ehdr.e64;
- xlateto.d_buf = buffer;
- if (elf64_xlatetof (&xlateto, &xlatefrom,
- ehdr.e64.e_ident[EI_DATA]) == NULL)
- goto libelf_error;
- break;
-
- default:
- abort ();
- break;
- }
-
- /* Now we have the image. Open libelf on it. */
-
- Elf *elf = elf_memory ((char *) buffer, contents_size);
- if (elf == NULL)
- {
- free (buffer);
- goto libelf_error;
- }
-
- elf->flags |= ELF_F_MALLOCED;
- if (loadbasep != NULL)
- *loadbasep = loadbase;
- return elf;
-}
diff --git a/libdwfl/find-debuginfo.c b/libdwfl/find-debuginfo.c
deleted file mode 100644
index ccf16aa..0000000
--- a/libdwfl/find-debuginfo.c
+++ /dev/null
@@ -1,298 +0,0 @@
-/* Standard find_debuginfo callback for libdwfl.
- Copyright (C) 2005, 2006, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-#include <stdio.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include "system.h"
-
-/* Try to open64 [DIR/][SUBDIR/]DEBUGLINK, return file descriptor or -1.
- On success, *DEBUGINFO_FILE_NAME has the malloc'd name of the open file. */
-static int
-try_open (const char *dir, const char *subdir, const char *debuglink,
- char **debuginfo_file_name)
-{
- char *fname;
- if (dir == NULL && subdir == NULL)
- {
- fname = strdup (debuglink);
- if (fname == NULL)
- return -1;
- }
- else if ((subdir == NULL ? asprintf (&fname, "%s/%s", dir, debuglink)
- : dir == NULL ? asprintf (&fname, "%s/%s", subdir, debuglink)
- : asprintf (&fname, "%s/%s/%s", dir, subdir, debuglink)) < 0)
- return -1;
-
- int fd = TEMP_FAILURE_RETRY (open64 (fname, O_RDONLY));
- if (fd < 0)
- free (fname);
- else
- *debuginfo_file_name = fname;
-
- return fd;
-}
-
-/* Return true iff the FD's contents CRC matches DEBUGLINK_CRC. */
-static inline bool
-check_crc (int fd, GElf_Word debuglink_crc)
-{
- uint32_t file_crc;
- return (__libdwfl_crc32_file (fd, &file_crc) == 0
- && file_crc == debuglink_crc);
-}
-
-static bool
-validate (Dwfl_Module *mod, int fd, bool check, GElf_Word debuglink_crc)
-{
- /* If we have a build ID, check only that. */
- if (mod->build_id_len > 0)
- {
- /* We need to open an Elf handle on the file so we can check its
- build ID note for validation. Backdoor the handle into the
- module data structure since we had to open it early anyway. */
- mod->debug.elf = elf_begin (fd, ELF_C_READ_MMAP_PRIVATE, NULL);
- if (likely (__libdwfl_find_build_id (mod, false, mod->debug.elf) == 2))
- /* Also backdoor the gratuitous flag. */
- mod->debug.valid = true;
- else
- {
- /* A mismatch! */
- elf_end (mod->debug.elf);
- mod->debug.elf = NULL;
- mod->debug.valid = false;
- }
-
- return mod->debug.valid;
- }
-
- return !check || check_crc (fd, debuglink_crc);
-}
-
-static int
-find_debuginfo_in_path (Dwfl_Module *mod, const char *file_name,
- const char *debuglink_file, GElf_Word debuglink_crc,
- char **debuginfo_file_name)
-{
- bool cancheck = debuglink_crc != (GElf_Word) 0;
-
- const char *file_basename = file_name == NULL ? NULL : basename (file_name);
- if (debuglink_file == NULL)
- {
- if (file_basename == NULL)
- {
- errno = 0;
- return -1;
- }
-
- size_t len = strlen (file_basename);
- char *localname = alloca (len + sizeof ".debug");
- memcpy (localname, file_basename, len);
- memcpy (&localname[len], ".debug", sizeof ".debug");
- debuglink_file = localname;
- cancheck = false;
- }
-
- /* Look for a file named DEBUGLINK_FILE in the directories
- indicated by the debug directory path setting. */
-
- const Dwfl_Callbacks *const cb = mod->dwfl->callbacks;
-/* ANDROID_CHANGE_BEGIN */
-#if defined(__BIONIC__) || defined(__APPLE__)
- char *path = strdup ((cb->debuginfo_path ? *cb->debuginfo_path : NULL)
- ?: DEFAULT_DEBUGINFO_PATH);
-#else
- char *path = strdupa ((cb->debuginfo_path ? *cb->debuginfo_path : NULL)
- ?: DEFAULT_DEBUGINFO_PATH);
-#endif
-/* ANDROID_CHANGE_END */
-
- /* A leading - or + in the whole path sets whether to check file CRCs. */
- bool defcheck = true;
- if (path[0] == '-' || path[0] == '+')
- {
- defcheck = path[0] == '+';
- ++path;
- }
-
- /* ANDROID_CHANGE_BEGIN */
-#if defined(__BIONIC__) || defined(__APPLE__)
- char *file_dirname = (file_basename == file_name ? NULL
- : strndup (file_name, file_basename - 1 - file_name));
-#else
- char *file_dirname = (file_basename == file_name ? NULL
- : strndupa (file_name, file_basename - 1 - file_name));
-#endif
- /* ANDROID_CHANGE_END */
- char *p;
- while ((p = strsep (&path, ":")) != NULL)
- {
- /* A leading - or + says whether to check file CRCs for this element. */
- bool check = defcheck;
- if (*p == '+' || *p == '-')
- check = *p++ == '+';
- check = check && cancheck;
-
- const char *dir, *subdir;
- switch (p[0])
- {
- case '\0':
- /* An empty entry says to try the main file's directory. */
- dir = file_dirname;
- subdir = NULL;
- break;
- case '/':
- /* An absolute path says to look there for a subdirectory
- named by the main file's absolute directory.
- This cannot be applied to a relative file name. */
- if (file_dirname == NULL || file_dirname[0] != '/')
- continue;
- dir = p;
- subdir = file_dirname + 1;
- break;
- default:
- /* A relative path says to try a subdirectory of that name
- in the main file's directory. */
- dir = file_dirname;
- subdir = p;
- break;
- }
-
-/* ANDROID_CHANGE_BEGIN */
- char *fname = NULL;
-/* ANDROID_CHANGE_END */
- int fd = try_open (dir, subdir, debuglink_file, &fname);
- if (fd < 0)
- switch (errno)
- {
- case ENOENT:
- case ENOTDIR:
- continue;
- default:
-/* ANDROID_CHANGE_BEGIN */
-#ifdef __BIONIC__
- free(path);
- free(file_dirname);
-#endif
-/* ANDROID_CHANGE_END */
- return -1;
- }
- if (validate (mod, fd, check, debuglink_crc))
- {
- *debuginfo_file_name = fname;
-/* ANDROID_CHANGE_BEGIN */
-#ifdef __BIONIC__
- free(path);
- free(file_dirname);
-#endif
-/* ANDROID_CHANGE_END */
- return fd;
- }
- free (fname);
- close (fd);
- }
-
-/* ANDROID_CHANGE_BEGIN */
-#ifdef __BIONIC__
- free(path);
- free(file_dirname);
-#endif
-/* ANDROID_CHANGE_END */
-
- /* No dice. */
- errno = 0;
- return -1;
-}
-
-int
-dwfl_standard_find_debuginfo (Dwfl_Module *mod,
- void **userdata __attribute__ ((unused)),
- const char *modname __attribute__ ((unused)),
- GElf_Addr base __attribute__ ((unused)),
- const char *file_name,
- const char *debuglink_file,
- GElf_Word debuglink_crc,
- char **debuginfo_file_name)
-{
- /* First try by build ID if we have one. If that succeeds or fails
- other than just by finding nothing, that's all we do. */
- const unsigned char *bits;
- GElf_Addr vaddr;
- if (INTUSE(dwfl_module_build_id) (mod, &bits, &vaddr) > 0)
- {
- int fd = INTUSE(dwfl_build_id_find_debuginfo) (mod,
- NULL, NULL, 0,
- NULL, NULL, 0,
- debuginfo_file_name);
- if (fd >= 0 || errno != 0)
- return fd;
- }
-
- /* Failing that, search the path by name. */
- int fd = find_debuginfo_in_path (mod, file_name,
- debuglink_file, debuglink_crc,
- debuginfo_file_name);
-
- if (fd < 0 && errno == 0)
- {
- /* If FILE_NAME is a symlink, the debug file might be associated
- with the symlink target name instead. */
-
- char *canon = canonicalize_file_name (file_name);
- if (canon != NULL && strcmp (file_name, canon))
- fd = find_debuginfo_in_path (mod, canon,
- debuglink_file, debuglink_crc,
- debuginfo_file_name);
- free (canon);
- }
-
- return fd;
-}
-INTDEF (dwfl_standard_find_debuginfo)
diff --git a/libdwfl/libdwfl.h b/libdwfl/libdwfl.h
deleted file mode 100644
index b6ae776..0000000
--- a/libdwfl/libdwfl.h
+++ /dev/null
@@ -1,558 +0,0 @@
-/* Interfaces for libdwfl.
- Copyright (C) 2005, 2006, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifndef _LIBDWFL_H
-#define _LIBDWFL_H 1
-
-#include "libdw.h"
-#include <stdio.h>
-
-/* Handle for a session using the library. */
-typedef struct Dwfl Dwfl;
-
-/* Handle for a module. */
-typedef struct Dwfl_Module Dwfl_Module;
-
-/* Handle describing a line record. */
-typedef struct Dwfl_Line Dwfl_Line;
-
-/* Callbacks. */
-typedef struct
-{
- int (*find_elf) (Dwfl_Module *mod, void **userdata,
- const char *modname, Dwarf_Addr base,
- char **file_name, Elf **elfp);
-
- int (*find_debuginfo) (Dwfl_Module *mod, void **userdata,
- const char *modname, Dwarf_Addr base,
- const char *file_name,
- const char *debuglink_file, GElf_Word debuglink_crc,
- char **debuginfo_file_name);
-
- /* Fill *ADDR with the loaded address of the section called SECNAME in
- the given module. Use (Dwarf_Addr) -1 if this section is omitted from
- accessible memory. This is called exactly once for each SHF_ALLOC
- section that relocations affecting DWARF data refer to, so it can
- easily be used to collect state about the sections referenced. */
- int (*section_address) (Dwfl_Module *mod, void **userdata,
- const char *modname, Dwarf_Addr base,
- const char *secname,
- GElf_Word shndx, const GElf_Shdr *shdr,
- Dwarf_Addr *addr);
-
- char **debuginfo_path; /* See dwfl_standard_find_debuginfo. */
-} Dwfl_Callbacks;
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Start a new session with the library. */
-extern Dwfl *dwfl_begin (const Dwfl_Callbacks *callbacks)
- __nonnull_attribute__ (1);
-
-
-/* End a session. */
-extern void dwfl_end (Dwfl *);
-
-/* Return implementation's version string suitable for printing. */
-extern const char *dwfl_version (Dwfl *);
-
-/* Return error code of last failing function call. This value is kept
- separately for each thread. */
-extern int dwfl_errno (void);
-
-/* Return error string for ERROR. If ERROR is zero, return error string
- for most recent error or NULL if none occurred. If ERROR is -1 the
- behaviour is similar to the last case except that not NULL but a legal
- string is returned. */
-extern const char *dwfl_errmsg (int err);
-
-
-/* Start reporting the current set of segments and modules to the library.
- All existing segments are wiped. Existing modules are marked to be
- deleted, and will not be found via dwfl_addrmodule et al if they are not
- re-reported before dwfl_report_end is called. */
-extern void dwfl_report_begin (Dwfl *dwfl);
-
-/* Report that segment NDX begins at PHDR->p_vaddr + BIAS.
- If NDX is < 0, the value succeeding the last call's NDX
- is used instead (zero on the first call).
-
- If nonzero, the smallest PHDR->p_align value seen sets the
- effective page size for the address space DWFL describes.
- This is the granularity at which reported module boundary
- addresses will be considered to fall in or out of a segment.
-
- Returns -1 for errors, or NDX (or its assigned replacement) on success.
-
- When NDX is the value succeeding the last call's NDX (or is implicitly
- so as above), IDENT is nonnull and matches the value in the last call,
- and the PHDR and BIAS values reflect a segment that would be contiguous,
- in both memory and file, with the last segment reported, then this
- segment may be coalesced internally with preceding segments. When given
- an address inside this segment, dwfl_addrsegment may return the NDX of a
- preceding contiguous segment. To prevent coalesced segments, always
- pass a null pointer for IDENT.
-
- The values passed are not stored (except to track coalescence).
- The only information that can be extracted from DWFL later is the
- mapping of an address to a segment index that starts at or below
- it. Reporting segments at all is optional. Its only benefit to
- the caller is to offer this quick lookup via dwfl_addrsegment,
- or use other segment-based calls. */
-extern int dwfl_report_segment (Dwfl *dwfl, int ndx,
- const GElf_Phdr *phdr, GElf_Addr bias,
- const void *ident);
-
-/* Report that a module called NAME spans addresses [START, END).
- Returns the module handle, either existing or newly allocated,
- or returns a null pointer for an allocation error. */
-extern Dwfl_Module *dwfl_report_module (Dwfl *dwfl, const char *name,
- Dwarf_Addr start, Dwarf_Addr end);
-
-/* Report a module with start and end addresses computed from the ELF
- program headers in the given file, plus BASE. For an ET_REL file,
- does a simple absolute section layout starting at BASE.
- FD may be -1 to open FILE_NAME. On success, FD is consumed by the
- library, and the `find_elf' callback will not be used for this module. */
-extern Dwfl_Module *dwfl_report_elf (Dwfl *dwfl, const char *name,
- const char *file_name, int fd,
- GElf_Addr base);
-
-/* Similar, but report the module for offline use. All ET_EXEC files
- being reported must be reported before any relocatable objects.
- If this is used, dwfl_report_module and dwfl_report_elf may not be
- used in the same reporting session. */
-extern Dwfl_Module *dwfl_report_offline (Dwfl *dwfl, const char *name,
- const char *file_name, int fd);
-
-
-/* Finish reporting the current set of modules to the library.
- If REMOVED is not null, it's called for each module that
- existed before but was not included in the current report.
- Returns a nonzero return value from the callback.
- The callback may call dwfl_report_module; doing so with the
- details of the module being removed prevents its removal.
- DWFL cannot be used until this function has returned zero. */
-extern int dwfl_report_end (Dwfl *dwfl,
- int (*removed) (Dwfl_Module *, void *,
- const char *, Dwarf_Addr,
- void *arg),
- void *arg);
-
-/* Start reporting additional modules to the library. No calls but
- dwfl_report_* can be made on DWFL until dwfl_report_end is called.
- This is like dwfl_report_begin, but all the old modules are kept on.
- More dwfl_report_* calls can follow to add more modules.
- When dwfl_report_end is called, no old modules will be removed. */
-extern void dwfl_report_begin_add (Dwfl *dwfl);
-
-
-/* Return the name of the module, and for each non-null argument store
- interesting details: *USERDATA is a location for storing your own
- pointer, **USERDATA is initially null; *START and *END give the address
- range covered by the module; *DWBIAS is the address bias for debugging
- information, and *SYMBIAS for symbol table entries (either is -1 if not
- yet accessed); *MAINFILE is the name of the ELF file, and *DEBUGFILE the
- name of the debuginfo file (might be equal to *MAINFILE; either is null
- if not yet accessed). */
-extern const char *dwfl_module_info (Dwfl_Module *mod, void ***userdata,
- Dwarf_Addr *start, Dwarf_Addr *end,
- Dwarf_Addr *dwbias, Dwarf_Addr *symbias,
- const char **mainfile,
- const char **debugfile);
-
-/* Iterate through the modules, starting the walk with OFFSET == 0.
- Calls *CALLBACK for each module as long as it returns DWARF_CB_OK.
- When *CALLBACK returns another value, the walk stops and the
- return value can be passed as OFFSET to resume it. Returns 0 when
- there are no more modules, or -1 for errors. */
-extern ptrdiff_t dwfl_getmodules (Dwfl *dwfl,
- int (*callback) (Dwfl_Module *, void **,
- const char *, Dwarf_Addr,
- void *arg),
- void *arg,
- ptrdiff_t offset);
-
-/* Find the module containing the given address. */
-extern Dwfl_Module *dwfl_addrmodule (Dwfl *dwfl, Dwarf_Addr address);
-
-/* Find the segment, if any, and module, if any, containing ADDRESS.
- Returns a segment index returned by dwfl_report_segment, or -1
- if no segment matches the address. Regardless of the return value,
- *MOD is always set to the module containing ADDRESS, or to null. */
-extern int dwfl_addrsegment (Dwfl *dwfl, Dwarf_Addr address, Dwfl_Module **mod);
-
-
-
-/* Report the known build ID bits associated with a module.
- If VADDR is nonzero, it gives the absolute address where those
- bits are found within the module. This can be called at any
- time, but is usually used immediately after dwfl_report_module.
- Once the module's main ELF file is opened, the ID note found
- there takes precedence and cannot be changed. */
-extern int dwfl_module_report_build_id (Dwfl_Module *mod,
- const unsigned char *bits, size_t len,
- GElf_Addr vaddr)
- __nonnull_attribute__ (2);
-
-/* Extract the build ID bits associated with a module.
- Returns -1 for errors, 0 if no ID is known, or the number of ID bytes.
- When an ID is found, *BITS points to it; *VADDR is the absolute address
- at which the ID bits are found within the module, or 0 if unknown.
-
- This returns 0 when the module's main ELF file has not yet been loaded
- and its build ID bits were not reported. To ensure the ID is always
- returned when determinable, call dwfl_module_getelf first. */
-extern int dwfl_module_build_id (Dwfl_Module *mod,
- const unsigned char **bits, GElf_Addr *vaddr)
- __nonnull_attribute__ (2, 3);
-
-
-/*** Standard callbacks ***/
-
-/* These standard find_elf and find_debuginfo callbacks are
- controlled by a string specifying directories to look in.
- If `debuginfo_path' is set in the Dwfl_Callbacks structure
- and the char * it points to is not null, that supplies the
- string. Otherwise a default path is used.
-
- If the first character of the string is + or - that enables or
- disables CRC32 checksum validation when it's necessary. The
- remainder of the string is composed of elements separated by
- colons. Each element can start with + or - to override the
- global checksum behavior. This flag is never relevant when
- working with build IDs, but it's always parsed in the path
- string. The remainder of the element indicates a directory.
-
- Searches by build ID consult only the elements naming absolute
- directory paths. They look under those directories for a link
- named ".build-id/xx/yy" or ".build-id/xx/yy.debug", where "xxyy"
- is the lower-case hexadecimal representation of the ID bytes.
-
- In searches for debuginfo by name, if the remainder of the
- element is empty, the directory containing the main file is
- tried; if it's an absolute path name, the absolute directory path
- containing the main file is taken as a subdirectory of this path;
- a relative path name is taken as a subdirectory of the directory
- containing the main file. Hence for /bin/ls, the default string
- ":.debug:/usr/lib/debug" says to look in /bin, then /bin/.debug,
- then /usr/lib/debug/bin, for the file name in the .gnu_debuglink
- section (or "ls.debug" if none was found). */
-
-/* Standard find_elf callback function working solely on build ID.
- This can be tried first by any find_elf callback, to use the
- bits passed to dwfl_module_report_build_id, if any. */
-extern int dwfl_build_id_find_elf (Dwfl_Module *, void **,
- const char *, Dwarf_Addr,
- char **, Elf **);
-
-/* Standard find_debuginfo callback function working solely on build ID.
- This can be tried first by any find_debuginfo callback,
- to use the build ID bits from the main file when present. */
-extern int dwfl_build_id_find_debuginfo (Dwfl_Module *, void **,
- const char *, Dwarf_Addr,
- const char *, const char *,
- GElf_Word, char **);
-
-/* Standard find_debuginfo callback function.
- If a build ID is available, this tries first to use that.
- If there is no build ID or no valid debuginfo found by ID,
- it searches the debuginfo path by name, as described above.
- Any file found in the path is validated by build ID if possible,
- or else by CRC32 checksum if enabled, and skipped if it does not match. */
-extern int dwfl_standard_find_debuginfo (Dwfl_Module *, void **,
- const char *, Dwarf_Addr,
- const char *, const char *,
- GElf_Word, char **);
-
-
-/* This callback must be used when using dwfl_offline_* to report modules,
- if ET_REL is to be supported. */
-extern int dwfl_offline_section_address (Dwfl_Module *, void **,
- const char *, Dwarf_Addr,
- const char *, GElf_Word,
- const GElf_Shdr *,
- Dwarf_Addr *addr);
-
-
-/* Callbacks for working with kernel modules in the running Linux kernel. */
-extern int dwfl_linux_kernel_find_elf (Dwfl_Module *, void **,
- const char *, Dwarf_Addr,
- char **, Elf **);
-extern int dwfl_linux_kernel_module_section_address (Dwfl_Module *, void **,
- const char *, Dwarf_Addr,
- const char *, GElf_Word,
- const GElf_Shdr *,
- Dwarf_Addr *addr);
-
-/* Call dwfl_report_elf for the running Linux kernel.
- Returns zero on success, -1 if dwfl_report_module failed,
- or an errno code if opening the kernel binary failed. */
-extern int dwfl_linux_kernel_report_kernel (Dwfl *dwfl);
-
-/* Call dwfl_report_module for each kernel module in the running Linux kernel.
- Returns zero on success, -1 if dwfl_report_module failed,
- or an errno code if reading the list of modules failed. */
-extern int dwfl_linux_kernel_report_modules (Dwfl *dwfl);
-
-/* Report a kernel and its modules found on disk, for offline use.
- If RELEASE starts with '/', it names a directory to look in;
- if not, it names a directory to find under /lib/modules/;
- if null, /lib/modules/`uname -r` is used.
- Returns zero on success, -1 if dwfl_report_module failed,
- or an errno code if finding the files on disk failed.
-
- If PREDICATE is not null, it is called with each module to be reported;
- its arguments are the module name, and the ELF file name or null if unknown,
- and its return value should be zero to skip the module, one to report it,
- or -1 to cause the call to fail and return errno. */
-extern int dwfl_linux_kernel_report_offline (Dwfl *dwfl, const char *release,
- int (*predicate) (const char *,
- const char *));
-
-
-/* Call dwfl_report_module for each file mapped into the address space of PID.
- Returns zero on success, -1 if dwfl_report_module failed,
- or an errno code if opening the kernel binary failed. */
-extern int dwfl_linux_proc_report (Dwfl *dwfl, pid_t pid);
-
-/* Similar, but reads an input stream in the format of Linux /proc/PID/maps
- files giving module layout, not the file for a live process. */
-extern int dwfl_linux_proc_maps_report (Dwfl *dwfl, FILE *);
-
-/* Trivial find_elf callback for use with dwfl_linux_proc_report.
- This uses the module name as a file name directly and tries to open it
- if it begin with a slash, or handles the magic string "[vdso]". */
-extern int dwfl_linux_proc_find_elf (Dwfl_Module *mod, void **userdata,
- const char *module_name, Dwarf_Addr base,
- char **file_name, Elf **);
-
-/* Standard argument parsing for using a standard callback set. */
-struct argp;
-extern const struct argp *dwfl_standard_argp (void) __attribute__ ((const));
-
-
-/*** Relocation of addresses from Dwfl ***/
-
-/* Return the number of relocatable bases associated with the module,
- which is zero for ET_EXEC and one for ET_DYN. Returns -1 for errors. */
-extern int dwfl_module_relocations (Dwfl_Module *mod);
-
-/* Return the relocation base index associated with the *ADDRESS location,
- and adjust *ADDRESS to be an offset relative to that base.
- Returns -1 for errors. */
-extern int dwfl_module_relocate_address (Dwfl_Module *mod,
- Dwarf_Addr *address);
-
-/* Return the ELF section name for the given relocation base index;
- if SHNDXP is not null, set *SHNDXP to the ELF section index.
- For ET_DYN, returns "" and sets *SHNDXP to SHN_ABS; the relocation
- base is the runtime start address reported for the module.
- Returns null for errors. */
-extern const char *dwfl_module_relocation_info (Dwfl_Module *mod,
- unsigned int idx,
- GElf_Word *shndxp);
-
-/* Validate that ADDRESS and ADDRESS+OFFSET lie in a known module
- and both within the same contiguous region for relocation purposes.
- Returns zero for success and -1 for errors. */
-extern int dwfl_validate_address (Dwfl *dwfl,
- Dwarf_Addr address, Dwarf_Sword offset);
-
-
-/*** ELF access functions ***/
-
-/* Fetch the module main ELF file (where the allocated sections
- are found) for use with libelf. If successful, fills in *BIAS
- with the difference between addresses within the loaded module
- and those in symbol tables or Dwarf information referring to it. */
-extern Elf *dwfl_module_getelf (Dwfl_Module *, GElf_Addr *bias);
-
-/* Return the number of symbols in the module's symbol table,
- or -1 for errors. */
-extern int dwfl_module_getsymtab (Dwfl_Module *mod);
-
-/* Fetch one entry from the module's symbol table. On errors, returns
- NULL. If successful, fills in *SYM and returns the string for st_name.
- This works like gelf_getsym except that st_value is always adjusted
- to an absolute value based on the module's location. If SHNDXP is
- non-null, it's set with the section index (whether from st_shndx or
- extended index table). */
-extern const char *dwfl_module_getsym (Dwfl_Module *mod, int ndx,
- GElf_Sym *sym, GElf_Word *shndxp)
- __nonnull_attribute__ (3);
-
-/* Find the symbol that ADDRESS lies inside, and return its name. */
-extern const char *dwfl_module_addrname (Dwfl_Module *mod, GElf_Addr address);
-
-/* Find the symbol that ADDRESS lies inside, and return detailed
- information as for dwfl_module_getsym (above). */
-extern const char *dwfl_module_addrsym (Dwfl_Module *mod, GElf_Addr address,
- GElf_Sym *sym, GElf_Word *shndxp)
- __nonnull_attribute__ (3);
-
-/* Find the ELF section that *ADDRESS lies inside and return it.
- On success, adjusts *ADDRESS to be relative to the section,
- and sets *BIAS to the difference between addresses used in
- the returned section's headers and run-time addresses. */
-extern Elf_Scn *dwfl_module_address_section (Dwfl_Module *mod,
- Dwarf_Addr *address,
- Dwarf_Addr *bias)
- __nonnull_attribute__ (2, 3);
-
-
-/*** Dwarf access functions ***/
-
-/* Fetch the module's debug information for use with libdw.
- If successful, fills in *BIAS with the difference between
- addresses within the loaded module and those to use with libdw. */
-extern Dwarf *dwfl_module_getdwarf (Dwfl_Module *, Dwarf_Addr *bias)
- __nonnull_attribute__ (2);
-
-/* Get the libdw handle for each module. */
-extern ptrdiff_t dwfl_getdwarf (Dwfl *,
- int (*callback) (Dwfl_Module *, void **,
- const char *, Dwarf_Addr,
- Dwarf *, Dwarf_Addr, void *),
- void *arg, ptrdiff_t offset);
-
-/* Look up the module containing ADDR and return its debugging information,
- loading it if necessary. */
-extern Dwarf *dwfl_addrdwarf (Dwfl *dwfl, Dwarf_Addr addr, Dwarf_Addr *bias)
- __nonnull_attribute__ (3);
-
-
-/* Find the CU containing ADDR and return its DIE. */
-extern Dwarf_Die *dwfl_addrdie (Dwfl *dwfl, Dwarf_Addr addr, Dwarf_Addr *bias)
- __nonnull_attribute__ (3);
-extern Dwarf_Die *dwfl_module_addrdie (Dwfl_Module *mod,
- Dwarf_Addr addr, Dwarf_Addr *bias)
- __nonnull_attribute__ (3);
-
-/* Iterate through the CUs, start with null for LASTCU. */
-extern Dwarf_Die *dwfl_nextcu (Dwfl *dwfl, Dwarf_Die *lastcu, Dwarf_Addr *bias)
- __nonnull_attribute__ (3);
-extern Dwarf_Die *dwfl_module_nextcu (Dwfl_Module *mod,
- Dwarf_Die *lastcu, Dwarf_Addr *bias)
- __nonnull_attribute__ (3);
-
-/* Return the module containing the CU DIE. */
-extern Dwfl_Module *dwfl_cumodule (Dwarf_Die *cudie);
-
-
-/* Cache the source line information fo the CU and return the
- number of Dwfl_Line entries it has. */
-extern int dwfl_getsrclines (Dwarf_Die *cudie, size_t *nlines);
-
-/* Access one line number entry within the CU. */
-extern Dwfl_Line *dwfl_onesrcline (Dwarf_Die *cudie, size_t idx);
-
-/* Get source for address. */
-extern Dwfl_Line *dwfl_module_getsrc (Dwfl_Module *mod, Dwarf_Addr addr);
-extern Dwfl_Line *dwfl_getsrc (Dwfl *dwfl, Dwarf_Addr addr);
-
-/* Get address for source. */
-extern int dwfl_module_getsrc_file (Dwfl_Module *mod,
- const char *fname, int lineno, int column,
- Dwfl_Line ***srcsp, size_t *nsrcs);
-
-/* Return the module containing this line record. */
-extern Dwfl_Module *dwfl_linemodule (Dwfl_Line *line);
-
-/* Return the CU containing this line record. */
-extern Dwarf_Die *dwfl_linecu (Dwfl_Line *line);
-
-/* Return the source file name and fill in other information.
- Arguments may be null for unneeded fields. */
-extern const char *dwfl_lineinfo (Dwfl_Line *line, Dwarf_Addr *addr,
- int *linep, int *colp,
- Dwarf_Word *mtime, Dwarf_Word *length);
-
-/* Return the compilation directory (AT_comp_dir) from this line's CU. */
-extern const char *dwfl_line_comp_dir (Dwfl_Line *line);
-
-
-/*** Machine backend access functions ***/
-
-/* Return location expression to find return value given a
- DW_TAG_subprogram, DW_TAG_subroutine_type, or similar DIE describing
- function itself (whose DW_AT_type attribute describes its return type).
- The given DIE must come from the given module. Returns -1 for errors.
- Returns zero if the function has no return value (e.g. "void" in C).
- Otherwise, *LOCOPS gets a location expression to find the return value,
- and returns the number of operations in the expression. The pointer is
- permanently allocated at least as long as the module is live. */
-extern int dwfl_module_return_value_location (Dwfl_Module *mod,
- Dwarf_Die *functypedie,
- const Dwarf_Op **locops);
-
-/* Enumerate the DWARF register numbers and their names.
- For each register, CALLBACK gets its DWARF number, a string describing
- the register set (such as "integer" or "FPU"), a prefix used in
- assembler syntax (such as "%" or "$", may be ""), and the name for the
- register (contains identifier characters only, possibly all digits).
- The REGNAME string is valid only during the callback. */
-extern int dwfl_module_register_names (Dwfl_Module *mod,
- int (*callback) (void *arg,
- int regno,
- const char *setname,
- const char *prefix,
- const char *regname,
- int bits, int type),
- void *arg);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* libdwfl.h */
diff --git a/libdwfl/libdwflP.h b/libdwfl/libdwflP.h
deleted file mode 100644
index 6ba5c96..0000000
--- a/libdwfl/libdwflP.h
+++ /dev/null
@@ -1,416 +0,0 @@
-/* Internal definitions for libdwfl.
- Copyright (C) 2005, 2006, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifndef _LIBDWFLP_H
-#define _LIBDWFLP_H 1
-
-#ifndef PACKAGE_NAME
-# include <config.h>
-#endif
-#include <libdwfl.h>
-#include <libebl.h>
-#include <assert.h>
-#include <errno.h>
-#include <stdbool.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "../libdw/libdwP.h" /* We need its INTDECLs. */
-
-/* gettext helper macros. */
-#define _(Str) dgettext ("elfutils", Str)
-
-#define DWFL_ERRORS \
- DWFL_ERROR (NOERROR, N_("no error")) \
- DWFL_ERROR (UNKNOWN_ERROR, N_("unknown error")) \
- DWFL_ERROR (NOMEM, N_("out of memory")) \
- DWFL_ERROR (ERRNO, N_("See errno")) \
- DWFL_ERROR (LIBELF, N_("See elf_errno")) \
- DWFL_ERROR (LIBDW, N_("See dwarf_errno")) \
- DWFL_ERROR (LIBEBL, N_("See ebl_errno (XXX missing)")) \
- DWFL_ERROR (UNKNOWN_MACHINE, N_("no support library found for machine")) \
- DWFL_ERROR (NOREL, N_("Callbacks missing for ET_REL file")) \
- DWFL_ERROR (BADRELTYPE, N_("Unsupported relocation type")) \
- DWFL_ERROR (BADRELOFF, N_("r_offset is bogus")) \
- DWFL_ERROR (BADSTROFF, N_("offset out of range")) \
- DWFL_ERROR (RELUNDEF, N_("relocation refers to undefined symbol")) \
- DWFL_ERROR (CB, N_("Callback returned failure")) \
- DWFL_ERROR (NO_DWARF, N_("No DWARF information found")) \
- DWFL_ERROR (NO_SYMTAB, N_("No symbol table found")) \
- DWFL_ERROR (NO_PHDR, N_("No ELF program headers")) \
- DWFL_ERROR (OVERLAP, N_("address range overlaps an existing module")) \
- DWFL_ERROR (ADDR_OUTOFRANGE, N_("address out of range")) \
- DWFL_ERROR (NO_MATCH, N_("no matching address range")) \
- DWFL_ERROR (TRUNCATED, N_("image truncated")) \
- DWFL_ERROR (ALREADY_ELF, N_("ELF file opened")) \
- DWFL_ERROR (BADELF, N_("not a valid ELF file")) \
- DWFL_ERROR (WEIRD_TYPE, N_("cannot handle DWARF type description"))
-
-#define DWFL_ERROR(name, text) DWFL_E_##name,
-typedef enum { DWFL_ERRORS DWFL_E_NUM } Dwfl_Error;
-#undef DWFL_ERROR
-
-#define OTHER_ERROR(name) ((unsigned int) DWFL_E_##name << 16)
-#define DWFL_E(name, errno) (OTHER_ERROR (name) | (errno))
-
-extern int __libdwfl_canon_error (Dwfl_Error) internal_function;
-extern void __libdwfl_seterrno (Dwfl_Error) internal_function;
-
-struct Dwfl
-{
- const Dwfl_Callbacks *callbacks;
-
- Dwfl_Module *modulelist; /* List in order used by full traversals. */
-
- GElf_Addr offline_next_address;
-
- GElf_Addr segment_align; /* Smallest granularity of segments. */
-
- /* Binary search table in three parallel malloc'd arrays. */
- size_t lookup_elts; /* Elements in use. */
- size_t lookup_alloc; /* Elements allococated. */
- GElf_Addr *lookup_addr; /* Start address of segment. */
- Dwfl_Module **lookup_module; /* Module associated with segment, or null. */
- int *lookup_segndx; /* User segment index, or -1. */
-
- /* Cache from last dwfl_report_segment call. */
- const void *lookup_tail_ident;
- GElf_Off lookup_tail_vaddr;
- GElf_Off lookup_tail_offset;
- int lookup_tail_ndx;
-};
-
-#define OFFLINE_REDZONE 0x10000
-
-struct dwfl_file
-{
- char *name;
- int fd;
- bool valid; /* The build ID note has been matched. */
- bool relocated; /* Partial relocation of all sections done. */
-
- Elf *elf;
- GElf_Addr bias; /* Actual load address - p_vaddr. */
-};
-
-struct Dwfl_Module
-{
- Dwfl *dwfl;
- struct Dwfl_Module *next; /* Link on Dwfl.modulelist. */
-
- void *userdata;
-
- char *name; /* Iterator name for this module. */
- GElf_Addr low_addr, high_addr;
-
- void *build_id_bits; /* malloc'd copy of build ID bits. */
- GElf_Addr build_id_vaddr; /* Address where they reside, 0 if unknown. */
- int build_id_len; /* -1 for prior failure, 0 if unset. */
-
- struct dwfl_file main, debug;
- Ebl *ebl;
- GElf_Half e_type; /* GElf_Ehdr.e_type cache. */
- Dwfl_Error elferr; /* Previous failure to open main file. */
-
- struct dwfl_relocation *reloc_info; /* Relocatable sections. */
-
- struct dwfl_file *symfile; /* Either main or debug. */
- Elf_Data *symdata; /* Data in the ELF symbol table section. */
- size_t syments; /* sh_size / sh_entsize of that section. */
- Elf_Data *symstrdata; /* Data for its string table. */
- Elf_Data *symxndxdata; /* Data in the extended section index table. */
- Dwfl_Error symerr; /* Previous failure to load symbols. */
-
- Dwarf *dw; /* libdw handle for its debugging info. */
- Dwfl_Error dwerr; /* Previous failure to load info. */
-
- /* Known CU's in this module. */
- struct dwfl_cu *first_cu, **cu;
- unsigned int ncu;
-
- void *lazy_cu_root; /* Table indexed by Dwarf_Off of CU. */
- unsigned int lazycu; /* Possible users, deleted when none left. */
-
- struct dwfl_arange *aranges; /* Mapping of addresses in module to CUs. */
- unsigned int naranges;
-
- int segment; /* Index of first segment table entry. */
- bool gc; /* Mark/sweep flag. */
-};
-
-
-
-/* Information cached about each CU in Dwfl_Module.dw. */
-struct dwfl_cu
-{
- /* This caches libdw information about the CU. It's also the
- address passed back to users, so we take advantage of the
- fact that it's placed first to cast back. */
- Dwarf_Die die;
-
- Dwfl_Module *mod; /* Pointer back to containing module. */
-
- struct dwfl_cu *next; /* CU immediately following in the file. */
-
- struct Dwfl_Lines *lines;
-};
-
-struct Dwfl_Lines
-{
- struct dwfl_cu *cu;
-
- /* This is what the opaque Dwfl_Line * pointers we pass to users are.
- We need to recover pointers to our struct dwfl_cu and a record in
- libdw's Dwarf_Line table. To minimize the memory used in addition
- to libdw's Dwarf_Lines buffer, we just point to our own index in
- this table, and have one pointer back to the CU. The indices here
- match those in libdw's Dwarf_CU.lines->info table. */
- struct Dwfl_Line
- {
- unsigned int idx; /* My index in the dwfl_cu.lines table. */
- } idx[0];
-};
-
-static inline struct dwfl_cu *
-dwfl_linecu_inline (const Dwfl_Line *line)
-{
- const struct Dwfl_Lines *lines = ((const void *) line
- - offsetof (struct Dwfl_Lines,
- idx[line->idx]));
- return lines->cu;
-}
-#define dwfl_linecu dwfl_linecu_inline
-
-/* This describes a contiguous address range that lies in a single CU.
- We condense runs of Dwarf_Arange entries for the same CU into this. */
-struct dwfl_arange
-{
- struct dwfl_cu *cu;
- size_t arange; /* Index in Dwarf_Aranges. */
-};
-
-
-
-extern void __libdwfl_module_free (Dwfl_Module *mod) internal_function;
-
-
-/* Process relocations in debugging sections in an ET_REL file.
- FILE must be opened with ELF_C_READ_MMAP_PRIVATE or ELF_C_READ,
- to make it possible to relocate the data in place (or ELF_C_RDWR or
- ELF_C_RDWR_MMAP if you intend to modify the Elf file on disk). After
- this, dwarf_begin_elf on FILE will read the relocated data.
-
- When DEBUG is false, apply partial relocation to all sections. */
-extern Dwfl_Error __libdwfl_relocate (Dwfl_Module *mod, Elf *file, bool debug)
- internal_function;
-
-/* Process (simple) relocations in arbitrary section TSCN of an ET_REL file.
- RELOCSCN is SHT_REL or SHT_RELA and TSCN is its sh_info target section. */
-extern Dwfl_Error __libdwfl_relocate_section (Dwfl_Module *mod, Elf *relocated,
- Elf_Scn *relocscn, Elf_Scn *tscn,
- bool partial)
- internal_function;
-
-/* Adjust *VALUE from section-relative to absolute.
- MOD->dwfl->callbacks->section_address is called to determine the actual
- address of a loaded section. */
-extern Dwfl_Error __libdwfl_relocate_value (Dwfl_Module *mod, Elf *elf,
- size_t *shstrndx_cache,
- Elf32_Word shndx,
- GElf_Addr *value)
- internal_function;
-
-
-/* Ensure that MOD->ebl is set up. */
-extern Dwfl_Error __libdwfl_module_getebl (Dwfl_Module *mod) internal_function;
-
-/* Iterate through all the CU's in the module. Start by passing a null
- LASTCU, and then pass the last *CU returned. Success return with null
- *CU no more CUs. */
-extern Dwfl_Error __libdwfl_nextcu (Dwfl_Module *mod, struct dwfl_cu *lastcu,
- struct dwfl_cu **cu) internal_function;
-
-/* Find the CU by address. */
-extern Dwfl_Error __libdwfl_addrcu (Dwfl_Module *mod, Dwarf_Addr addr,
- struct dwfl_cu **cu) internal_function;
-
-/* Ensure that CU->lines (and CU->cu->lines) is set up. */
-extern Dwfl_Error __libdwfl_cu_getsrclines (struct dwfl_cu *cu)
- internal_function;
-
-/* Look in ELF for an NT_GNU_BUILD_ID note. If SET is true, store it
- in MOD and return its length. If SET is false, instead compare it
- to that stored in MOD and return 2 if they match, 1 if they do not.
- Returns -1 for errors, 0 if no note is found. */
-extern int __libdwfl_find_build_id (Dwfl_Module *mod, bool set, Elf *elf)
- internal_function;
-
-/* Open a main or debuginfo file by its build ID, returns the fd. */
-extern int __libdwfl_open_by_build_id (Dwfl_Module *mod, bool debug,
- char **file_name) internal_function;
-
-extern uint32_t __libdwfl_crc32 (uint32_t crc, unsigned char *buf, size_t len)
- attribute_hidden;
-extern int __libdwfl_crc32_file (int fd, uint32_t *resp) attribute_hidden;
-
-
-/* Meat of dwfl_report_elf, given elf_begin just called.
- Consumes ELF on success, not on failure. */
-extern Dwfl_Module *__libdwfl_report_elf (Dwfl *dwfl, const char *name,
- const char *file_name, int fd,
- Elf *elf, GElf_Addr base)
- internal_function;
-
-/* Meat of dwfl_report_offline. */
-extern Dwfl_Module *__libdwfl_report_offline (Dwfl *dwfl, const char *name,
- const char *file_name,
- int fd, bool closefd,
- int (*predicate) (const char *,
- const char *))
- internal_function;
-
-
-/* These are working nicely for --core, but are not ready to be
- exported interfaces quite yet. */
-
-/* Type of callback function ...
- */
-typedef bool Dwfl_Memory_Callback (Dwfl *dwfl, int segndx,
- void **buffer, size_t *buffer_available,
- GElf_Addr vaddr, size_t minread, void *arg);
-
-/* Type of callback function ...
- */
-typedef bool Dwfl_Module_Callback (Dwfl_Module *mod, void **userdata,
- const char *name, Dwarf_Addr base,
- void **buffer, size_t *buffer_available,
- GElf_Off cost, GElf_Off worthwhile,
- GElf_Off whole, GElf_Off contiguous,
- void *arg, Elf **elfp);
-
-/* ...
- */
-extern int dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name,
- Dwfl_Memory_Callback *memory_callback,
- void *memory_callback_arg,
- Dwfl_Module_Callback *read_eagerly,
- void *read_eagerly_arg);
-
-/* Report a module for entry in the dynamic linker's struct link_map list.
- For each link_map entry, if an existing module resides at its address,
- this just modifies that module's name and suggested file name. If
- no such module exists, this calls dwfl_report_elf on the l_name string.
-
- If AUXV is not null, it points to AUXV_SIZE bytes of auxiliary vector
- data as contained in an NT_AUXV note or read from a /proc/pid/auxv
- file. When this is available, it guides the search. If AUXV is null
- or the memory it points to is not accessible, then this search can
- only find where to begin if the correct executable file was
- previously reported and preloaded as with dwfl_report_elf.
-
- Returns the number of modules found, or -1 for errors. */
-extern int dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size,
- Dwfl_Memory_Callback *memory_callback,
- void *memory_callback_arg);
-
-/* Examine an ET_CORE file and report modules based on its contents. */
-extern int dwfl_core_file_report (Dwfl *dwfl, Elf *elf, const GElf_Ehdr *ehdr);
-
-
-/* Avoid PLT entries. */
-INTDECL (dwfl_begin)
-INTDECL (dwfl_errmsg)
-INTDECL (dwfl_addrmodule)
-INTDECL (dwfl_addrsegment)
-INTDECL (dwfl_addrdwarf)
-INTDECL (dwfl_addrdie)
-INTDECL (dwfl_core_file_report)
-INTDECL (dwfl_getmodules)
-INTDECL (dwfl_module_addrdie)
-INTDECL (dwfl_module_address_section)
-INTDECL (dwfl_module_addrsym)
-INTDECL (dwfl_module_build_id)
-INTDECL (dwfl_module_getdwarf)
-INTDECL (dwfl_module_getelf)
-INTDECL (dwfl_module_getsym)
-INTDECL (dwfl_module_getsymtab)
-INTDECL (dwfl_module_getsrc)
-INTDECL (dwfl_module_report_build_id)
-INTDECL (dwfl_report_elf)
-INTDECL (dwfl_report_begin)
-INTDECL (dwfl_report_begin_add)
-INTDECL (dwfl_report_module)
-INTDECL (dwfl_report_segment)
-INTDECL (dwfl_report_offline)
-INTDECL (dwfl_report_end)
-INTDECL (dwfl_build_id_find_elf)
-INTDECL (dwfl_build_id_find_debuginfo)
-INTDECL (dwfl_standard_find_debuginfo)
-INTDECL (dwfl_link_map_report)
-INTDECL (dwfl_linux_kernel_find_elf)
-INTDECL (dwfl_linux_kernel_module_section_address)
-INTDECL (dwfl_linux_proc_report)
-INTDECL (dwfl_linux_proc_maps_report)
-INTDECL (dwfl_linux_proc_find_elf)
-INTDECL (dwfl_linux_kernel_report_kernel)
-INTDECL (dwfl_linux_kernel_report_modules)
-INTDECL (dwfl_linux_kernel_report_offline)
-INTDECL (dwfl_offline_section_address)
-INTDECL (dwfl_module_relocate_address)
-
-/* Leading arguments standard to callbacks passed a Dwfl_Module. */
-#define MODCB_ARGS(mod) (mod), &(mod)->userdata, (mod)->name, (mod)->low_addr
-#define CBFAIL (errno ? DWFL_E (ERRNO, errno) : DWFL_E_CB);
-
-
-/* The default used by dwfl_standard_find_debuginfo. */
-#define DEFAULT_DEBUGINFO_PATH ":.debug:/usr/lib/debug"
-
-
-#endif /* libdwflP.h */
diff --git a/libdwfl/libdwfl_crc32.c b/libdwfl/libdwfl_crc32.c
deleted file mode 100644
index 0fa2378..0000000
--- a/libdwfl/libdwfl_crc32.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Copyright (C) 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#define crc32 attribute_hidden __libdwfl_crc32
-#define LIB_SYSTEM_H 1
-#include <libdwflP.h>
-#include "../lib/crc32.c"
diff --git a/libdwfl/libdwfl_crc32_file.c b/libdwfl/libdwfl_crc32_file.c
deleted file mode 100644
index ca154be..0000000
--- a/libdwfl/libdwfl_crc32_file.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Copyright (C) 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#define crc32_file attribute_hidden __libdwfl_crc32_file
-#define crc32 __libdwfl_crc32
-#define LIB_SYSTEM_H 1
-#include <libdwflP.h>
-#include "../lib/crc32_file.c"
diff --git a/libdwfl/lines.c b/libdwfl/lines.c
deleted file mode 100644
index ed4267f..0000000
--- a/libdwfl/lines.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/* Fetch source line info for CU.
- Copyright (C) 2005, 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-#include "../libdw/libdwP.h"
-
-Dwfl_Error
-internal_function
-__libdwfl_cu_getsrclines (struct dwfl_cu *cu)
-{
- if (cu->lines == NULL)
- {
- Dwarf_Lines *lines;
- size_t nlines;
- if (INTUSE(dwarf_getsrclines) (&cu->die, &lines, &nlines) != 0)
- return DWFL_E_LIBDW;
-
- cu->lines = malloc (offsetof (struct Dwfl_Lines, idx[nlines]));
- if (cu->lines == NULL)
- return DWFL_E_NOMEM;
- cu->lines->cu = cu;
- for (unsigned int i = 0; i < nlines; ++i)
- cu->lines->idx[i].idx = i;
- }
-
- return DWFL_E_NOERROR;
-}
diff --git a/libdwfl/link_map.c b/libdwfl/link_map.c
deleted file mode 100644
index e989038..0000000
--- a/libdwfl/link_map.c
+++ /dev/null
@@ -1,867 +0,0 @@
-/* Report modules by examining dynamic linker data structures.
- Copyright (C) 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <config.h>
-#include "libdwflP.h"
-
-#include <byteswap.h>
-#include <endian.h>
-
-/* This element is always provided and always has a constant value.
- This makes it an easy thing to scan for to discern the format. */
-#define PROBE_TYPE AT_PHENT
-#define PROBE_VAL32 sizeof (Elf32_Phdr)
-#define PROBE_VAL64 sizeof (Elf64_Phdr)
-
-#if BYTE_ORDER == BIG_ENDIAN
-# define BE32(x) (x)
-# define BE64(x) (x)
-# define LE32(x) bswap_32 (x)
-# define LE64(x) bswap_64 (x)
-#else
-# define LE32(x) (x)
-# define LE64(x) (x)
-# define BE32(x) bswap_32 (x)
-# define BE64(x) bswap_64 (x)
-#endif
-
-
-/* Examine an auxv data block and determine its format.
- Return true iff we figured it out. */
-static bool
-auxv_format_probe (const void *auxv, size_t size,
- uint_fast8_t *elfclass, uint_fast8_t *elfdata)
-{
- const union
- {
- char buf[size];
- Elf32_auxv_t a32[size / sizeof (Elf32_auxv_t)];
- Elf64_auxv_t a64[size / sizeof (Elf64_auxv_t)];
- } *u = auxv;
-
- inline bool check64 (size_t i)
- {
- if (u->a64[i].a_type == BE64 (PROBE_TYPE)
- && u->a64[i].a_un.a_val == BE64 (PROBE_VAL64))
- {
- *elfdata = ELFDATA2MSB;
- return true;
- }
-
- if (u->a64[i].a_type == LE64 (PROBE_TYPE)
- && u->a64[i].a_un.a_val == LE64 (PROBE_VAL64))
- {
- *elfdata = ELFDATA2LSB;
- return true;
- }
-
- return false;
- }
-
- inline bool check32 (size_t i)
- {
- if (u->a32[i].a_type == BE32 (PROBE_TYPE)
- && u->a32[i].a_un.a_val == BE32 (PROBE_VAL32))
- {
- *elfdata = ELFDATA2MSB;
- return true;
- }
-
- if (u->a32[i].a_type == LE32 (PROBE_TYPE)
- && u->a32[i].a_un.a_val == LE32 (PROBE_VAL32))
- {
- *elfdata = ELFDATA2LSB;
- return true;
- }
-
- return false;
- }
-
- size_t i;
- for (i = 0; i < size / sizeof (Elf64_auxv_t); ++i)
- {
- if (check64 (i))
- {
- *elfclass = ELFCLASS64;
- return true;
- }
-
- if (check32 (i))
- {
- *elfclass = ELFCLASS32;
- return true;
- }
- }
- for (; i < size / sizeof (Elf64_auxv_t); ++i)
- if (check32 (i))
- {
- *elfclass = ELFCLASS32;
- return true;
- }
-
- return false;
-}
-
-/* This is a Dwfl_Memory_Callback that wraps another memory callback.
- If the underlying callback cannot fill the data, then this will
- fall back to fetching data from module files. */
-
-struct integrated_memory_callback
-{
- Dwfl_Memory_Callback *memory_callback;
- void *memory_callback_arg;
- void *buffer;
-};
-
-static bool
-integrated_memory_callback (Dwfl *dwfl, int ndx,
- void **buffer, size_t *buffer_available,
- GElf_Addr vaddr,
- size_t minread,
- void *arg)
-{
- struct integrated_memory_callback *info = arg;
-
- if (ndx == -1)
- {
- /* Called for cleanup. */
- if (info->buffer != NULL)
- {
- /* The last probe buffer came from the underlying callback.
- Let it do its cleanup. */
- assert (*buffer == info->buffer); /* XXX */
- *buffer = info->buffer;
- info->buffer = NULL;
- return (*info->memory_callback) (dwfl, ndx, buffer, buffer_available,
- vaddr, minread,
- info->memory_callback_arg);
- }
- *buffer = NULL;
- *buffer_available = 0;
- return false;
- }
-
- if (*buffer != NULL)
- /* For a final-read request, we only use the underlying callback. */
- return (*info->memory_callback) (dwfl, ndx, buffer, buffer_available,
- vaddr, minread, info->memory_callback_arg);
-
- /* Let the underlying callback try to fill this request. */
- if ((*info->memory_callback) (dwfl, ndx, &info->buffer, buffer_available,
- vaddr, minread, info->memory_callback_arg))
- {
- *buffer = info->buffer;
- return true;
- }
-
- /* Now look for module text covering this address. */
-
- Dwfl_Module *mod;
- (void) INTUSE(dwfl_addrsegment) (dwfl, vaddr, &mod);
- if (mod == NULL)
- return false;
-
- Dwarf_Addr bias;
- Elf_Scn *scn = INTUSE(dwfl_module_address_section) (mod, &vaddr, &bias);
- if (unlikely (scn == NULL))
- {
-#if 0 // XXX would have to handle ndx=-1 cleanup calls passed down.
- /* If we have no sections we can try to fill it from the module file
- based on its phdr mappings. */
- if (likely (mod->e_type != ET_REL) && mod->main.elf != NULL)
- return INTUSE(dwfl_elf_phdr_memory_callback)
- (dwfl, 0, buffer, buffer_available,
- vaddr - mod->main.bias, minread, mod->main.elf);
-#endif
- return false;
- }
-
- Elf_Data *data = elf_rawdata (scn, NULL);
- if (unlikely (data == NULL))
- // XXX throw error?
- return false;
-
- if (unlikely (data->d_size < vaddr))
- return false;
-
- /* Provide as much data as we have. */
- void *contents = data->d_buf + vaddr;
- size_t avail = data->d_size - vaddr;
- if (unlikely (avail < minread))
- return false;
-
- /* If probing for a string, make sure it's terminated. */
- if (minread == 0 && unlikely (memchr (contents, '\0', avail) == NULL))
- return false;
-
- /* We have it! */
- *buffer = contents;
- *buffer_available = avail;
- return true;
-}
-
-static size_t
-addrsize (uint_fast8_t elfclass)
-{
- return elfclass * 4;
-}
-
-/* Report a module for each struct link_map in the linked list at r_map
- in the struct r_debug at R_DEBUG_VADDR.
-
- For each link_map entry, if an existing module resides at its address,
- this just modifies that module's name and suggested file name. If
- no such module exists, this calls dwfl_report_elf on the l_name string.
-
- Returns the number of modules found, or -1 for errors. */
-
-static int
-report_r_debug (uint_fast8_t elfclass, uint_fast8_t elfdata,
- Dwfl *dwfl, GElf_Addr r_debug_vaddr,
- Dwfl_Memory_Callback *memory_callback,
- void *memory_callback_arg)
-{
- /* Skip r_version, to aligned r_map field. */
- GElf_Addr read_vaddr = r_debug_vaddr + addrsize (elfclass);
-
- void *buffer = NULL;
- size_t buffer_available = 0;
- inline int release_buffer (int result)
- {
- if (buffer != NULL)
- (void) (*memory_callback) (dwfl, -1, &buffer, &buffer_available, 0, 0,
- memory_callback_arg);
- return result;
- }
-
- GElf_Addr addrs[4];
- inline bool read_addrs (GElf_Addr vaddr, size_t n)
- {
- size_t nb = n * addrsize (elfclass); /* Address words -> bytes to read. */
-
- /* Read a new buffer if the old one doesn't cover these words. */
- if (buffer == NULL
- || vaddr < read_vaddr
- || vaddr - read_vaddr + nb > buffer_available)
- {
- release_buffer (0);
-
- read_vaddr = vaddr;
- int segndx = INTUSE(dwfl_addrsegment) (dwfl, vaddr, NULL);
- if (unlikely (segndx < 0)
- || unlikely (! (*memory_callback) (dwfl, segndx,
- &buffer, &buffer_available,
- vaddr, nb, memory_callback_arg)))
- return true;
- }
-
- const union
- {
- Elf32_Addr a32[n];
- Elf64_Addr a64[n];
- } *in = vaddr - read_vaddr + buffer;
-
- if (elfclass == ELFCLASS32)
- {
- if (elfdata == ELFDATA2MSB)
- for (size_t i = 0; i < n; ++i)
- addrs[i] = BE32 (in->a32[i]);
- else
- for (size_t i = 0; i < n; ++i)
- addrs[i] = LE32 (in->a32[i]);
- }
- else
- {
- if (elfdata == ELFDATA2MSB)
- for (size_t i = 0; i < n; ++i)
- addrs[i] = BE64 (in->a64[i]);
- else
- for (size_t i = 0; i < n; ++i)
- addrs[i] = LE64 (in->a64[i]);
- }
-
- return false;
- }
-
- if (unlikely (read_addrs (read_vaddr, 1)))
- return release_buffer (-1);
-
- GElf_Addr next = addrs[0];
-
- Dwfl_Module **lastmodp = &dwfl->modulelist;
- int result = 0;
- while (next != 0)
- {
- if (read_addrs (next, 4))
- return release_buffer (-1);
-
- GElf_Addr l_addr = addrs[0];
- GElf_Addr l_name = addrs[1];
- GElf_Addr l_ld = addrs[2];
- next = addrs[3];
-
- /* Fetch the string at the l_name address. */
- const char *name = NULL;
- if (buffer != NULL
- && read_vaddr <= l_name
- && l_name + 1 - read_vaddr < buffer_available
- && memchr (l_name - read_vaddr + buffer, '\0',
- buffer_available - (l_name - read_vaddr)) != NULL)
- name = l_name - read_vaddr + buffer;
- else
- {
- release_buffer (0);
- read_vaddr = l_name;
- int segndx = INTUSE(dwfl_addrsegment) (dwfl, l_name, NULL);
- if (likely (segndx >= 0)
- && (*memory_callback) (dwfl, segndx,
- &buffer, &buffer_available,
- l_name, 0, memory_callback_arg))
- name = buffer;
- }
-
- if (name != NULL && name[0] == '\0')
- name = NULL;
-
- /* If content-sniffing already reported a module covering
- the same area, find that existing module to adjust.
- The l_ld address is the only one we know for sure
- to be within the module's own segments (its .dynamic). */
- Dwfl_Module *mod;
- int segndx = INTUSE(dwfl_addrsegment) (dwfl, l_ld, &mod);
- if (unlikely (segndx < 0))
- return release_buffer (-1);
-
- if (mod != NULL)
- {
- /* We have a module. We can give it a better name from l_name. */
- if (name != NULL && mod->name[0] == '[')
- {
- char *newname = strdup (basename (name));
- if (newname != NULL)
- {
- free (mod->name);
- mod->name = newname;
- }
- }
-
- if (name == NULL && mod->name[0] == '/')
- name = mod->name;
-
- /* If we don't have a file for it already, we can pre-install
- the full file name from l_name. Opening the file by this
- name will be the fallback when no build ID match is found.
- XXX hook for sysroot */
- if (name != NULL
- && mod->main.elf == NULL
- && mod->main.name == NULL)
- mod->main.name = strdup (name);
- }
- else if (name != NULL)
- {
- /* We have to find the file's phdrs to compute along with l_addr
- what its runtime address boundaries are. */
-
- // XXX hook for sysroot
- mod = INTUSE(dwfl_report_elf) (dwfl, basename (name),
- name, -1, l_addr);
- }
-
- if (mod != NULL)
- {
- ++result;
-
- /* Move this module to the end of the list, so that we end
- up with a list in the same order as the link_map chain. */
- if (mod->next != NULL)
- {
- if (*lastmodp != mod)
- {
- lastmodp = &dwfl->modulelist;
- while (*lastmodp != mod)
- lastmodp = &(*lastmodp)->next;
- }
- *lastmodp = mod->next;
- mod->next = NULL;
- while (*lastmodp != NULL)
- lastmodp = &(*lastmodp)->next;
- *lastmodp = mod;
- }
-
- lastmodp = &mod->next;
- }
- }
-
- return release_buffer (result);
-}
-
-static GElf_Addr
-consider_executable (Dwfl_Module *mod, GElf_Addr at_phdr, GElf_Addr at_entry,
- uint_fast8_t *elfclass, uint_fast8_t *elfdata,
- Dwfl_Memory_Callback *memory_callback,
- void *memory_callback_arg)
-{
- GElf_Ehdr ehdr;
- if (unlikely (gelf_getehdr (mod->main.elf, &ehdr) == NULL))
- return 0;
-
- if (at_entry != 0)
- {
- /* If we have an AT_ENTRY value, reject this executable if
- its entry point address could not have supplied that. */
-
- if (ehdr.e_entry == 0)
- return 0;
-
- if (mod->e_type == ET_EXEC)
- {
- if (ehdr.e_entry != at_entry)
- return 0;
- }
- else
- {
- /* It could be a PIE. */
- }
- }
-
- // XXX this could be saved in the file cache: phdr vaddr, DT_DEBUG d_val vaddr
- /* Find the vaddr of the DT_DEBUG's d_ptr. This is the memory
- address where &r_debug was written at runtime. */
- GElf_Xword align = mod->dwfl->segment_align;
- GElf_Addr d_val_vaddr = 0;
- for (uint_fast16_t i = 0; i < ehdr.e_phnum; ++i)
- {
- GElf_Phdr phdr_mem;
- GElf_Phdr *phdr = gelf_getphdr (mod->main.elf, i, &phdr_mem);
- if (phdr == NULL)
- break;
-
- if (phdr->p_align > 1 && (align == 0 || phdr->p_align < align))
- align = phdr->p_align;
-
- if (at_phdr != 0
- && phdr->p_type == PT_LOAD
- && (phdr->p_offset & -align) == (ehdr.e_phoff & -align))
- {
- /* This is the segment that would map the phdrs.
- If we have an AT_PHDR value, reject this executable
- if its phdr mapping could not have supplied that. */
- if (mod->e_type == ET_EXEC)
- {
- if (ehdr.e_phoff - phdr->p_offset + phdr->p_vaddr != at_phdr)
- return 0;
- }
- else
- {
- /* It could be a PIE. If the AT_PHDR value and our
- phdr address don't match modulo ALIGN, then this
- could not have been the right PIE. */
- if (((ehdr.e_phoff - phdr->p_offset + phdr->p_vaddr) & -align)
- != (at_phdr & -align))
- return 0;
-
- /* Calculate the bias applied to the PIE's p_vaddr values. */
- GElf_Addr bias = (at_phdr - (ehdr.e_phoff - phdr->p_offset
- + phdr->p_vaddr));
-
- /* Final sanity check: if we have an AT_ENTRY value,
- reject this PIE unless its biased e_entry matches. */
- if (at_entry != 0 && at_entry != ehdr.e_entry + bias)
- return 0;
-
- /* If we're changing the module's address range,
- we've just invalidated the module lookup table. */
- if (bias != mod->main.bias)
- {
- mod->low_addr -= mod->main.bias;
- mod->high_addr -= mod->main.bias;
- mod->main.bias = bias;
- mod->low_addr += bias;
- mod->high_addr += bias;
-
- free (mod->dwfl->lookup_module);
- mod->dwfl->lookup_module = NULL;
- }
- }
- }
-
- if (phdr->p_type == PT_DYNAMIC)
- {
- Elf_Data *data = elf_getdata_rawchunk (mod->main.elf, phdr->p_offset,
- phdr->p_filesz, ELF_T_DYN);
- if (data == NULL)
- continue;
- const size_t entsize = gelf_fsize (mod->main.elf,
- ELF_T_DYN, 1, EV_CURRENT);
- const size_t n = data->d_size / entsize;
- for (size_t j = 0; j < n; ++j)
- {
- GElf_Dyn dyn_mem;
- GElf_Dyn *dyn = gelf_getdyn (data, j, &dyn_mem);
- if (dyn != NULL && dyn->d_tag == DT_DEBUG)
- {
- d_val_vaddr = phdr->p_vaddr + entsize * j + entsize / 2;
- break;
- }
- }
- }
- }
-
- if (d_val_vaddr != 0)
- {
- /* Now we have the final address from which to read &r_debug. */
- d_val_vaddr += mod->main.bias;
-
- void *buffer = NULL;
- size_t buffer_available = addrsize (ehdr.e_ident[EI_CLASS]);
-
- Dwfl_Module *m;
- int segndx = INTUSE(dwfl_addrsegment) (mod->dwfl, d_val_vaddr, &m);
- assert (m == mod);
-
- if ((*memory_callback) (mod->dwfl, segndx,
- &buffer, &buffer_available,
- d_val_vaddr, buffer_available,
- memory_callback_arg))
- {
- const union
- {
- Elf32_Addr a32;
- Elf64_Addr a64;
- } *u = buffer;
-
- GElf_Addr vaddr;
- if (ehdr.e_ident[EI_CLASS] == ELFCLASS32)
- vaddr = (ehdr.e_ident[EI_DATA] == ELFDATA2MSB
- ? BE32 (u->a32) : LE32 (u->a32));
- else
- vaddr = (ehdr.e_ident[EI_DATA] == ELFDATA2MSB
- ? BE64 (u->a64) : LE64 (u->a64));
-
- (*memory_callback) (mod->dwfl, -1, &buffer, &buffer_available, 0, 0,
- memory_callback_arg);
-
-
- if (*elfclass == ELFCLASSNONE)
- *elfclass = ehdr.e_ident[EI_CLASS];
- else if (*elfclass != ehdr.e_ident[EI_CLASS])
- return 0;
-
- if (*elfdata == ELFDATANONE)
- *elfdata = ehdr.e_ident[EI_DATA];
- else if (*elfdata != ehdr.e_ident[EI_DATA])
- return 0;
-
- return vaddr;
- }
- }
-
- return 0;
-}
-
-/* Try to find an existing executable module with a DT_DEBUG. */
-static GElf_Addr
-find_executable (Dwfl *dwfl, GElf_Addr at_phdr, GElf_Addr at_entry,
- uint_fast8_t *elfclass, uint_fast8_t *elfdata,
- Dwfl_Memory_Callback *memory_callback,
- void *memory_callback_arg)
-{
- for (Dwfl_Module *mod = dwfl->modulelist; mod != NULL; mod = mod->next)
- if (mod->main.elf != NULL)
- {
- GElf_Addr r_debug_vaddr = consider_executable (mod, at_phdr, at_entry,
- elfclass, elfdata,
- memory_callback,
- memory_callback_arg);
- if (r_debug_vaddr != 0)
- return r_debug_vaddr;
- }
-
- return 0;
-}
-
-
-int
-dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size,
- Dwfl_Memory_Callback *memory_callback,
- void *memory_callback_arg)
-{
- GElf_Addr r_debug_vaddr = 0;
-
- uint_fast8_t elfclass = ELFCLASSNONE;
- uint_fast8_t elfdata = ELFDATANONE;
- if (likely (auxv != NULL)
- && likely (auxv_format_probe (auxv, auxv_size, &elfclass, &elfdata)))
- {
- GElf_Addr entry = 0;
- GElf_Addr phdr = 0;
- GElf_Xword phent = 0;
- GElf_Xword phnum = 0;
-
-#define AUXV_SCAN(NN, BL) do \
- { \
- const Elf##NN##_auxv_t *av = auxv; \
- for (size_t i = 0; i < auxv_size / sizeof av[0]; ++i) \
- { \
- Elf##NN##_Addr val = BL##NN (av[i].a_un.a_val); \
- if (av[i].a_type == BL##NN (AT_ENTRY)) \
- entry = val; \
- else if (av[i].a_type == BL##NN (AT_PHDR)) \
- phdr = val; \
- else if (av[i].a_type == BL##NN (AT_PHNUM)) \
- phnum = val; \
- else if (av[i].a_type == BL##NN (AT_PHENT)) \
- phent = val; \
- else if (av[i].a_type == BL##NN (AT_PAGESZ)) \
- { \
- if (val > 1 \
- && (dwfl->segment_align == 0 \
- || val < dwfl->segment_align)) \
- dwfl->segment_align = val; \
- } \
- } \
- } \
- while (0)
-
- if (elfclass == ELFCLASS32)
- {
- if (elfdata == ELFDATA2MSB)
- AUXV_SCAN (32, BE);
- else
- AUXV_SCAN (32, LE);
- }
- else
- {
- if (elfdata == ELFDATA2MSB)
- AUXV_SCAN (64, BE);
- else
- AUXV_SCAN (64, LE);
- }
-
- /* If we found the phdr dimensions, search phdrs for PT_DYNAMIC. */
- GElf_Addr dyn_vaddr = 0;
- GElf_Xword dyn_filesz = 0;
- if (phdr != 0 && phnum != 0)
- {
- Dwfl_Module *phdr_mod;
- int phdr_segndx = INTUSE(dwfl_addrsegment) (dwfl, phdr, &phdr_mod);
- Elf_Data in =
- {
- .d_type = ELF_T_PHDR,
- .d_version = EV_CURRENT,
- .d_size = phnum * phent,
- .d_buf = NULL
- };
- if ((*memory_callback) (dwfl, phdr_segndx, &in.d_buf, &in.d_size,
- phdr, phnum * phent, memory_callback_arg))
- {
- union
- {
- Elf32_Phdr p32;
- Elf64_Phdr p64;
- char data[phnum * phent];
- } buf;
- Elf_Data out =
- {
- .d_type = ELF_T_PHDR,
- .d_version = EV_CURRENT,
- .d_size = phnum * phent,
- .d_buf = &buf
- };
- in.d_size = out.d_size;
- if (likely ((elfclass == ELFCLASS32
- ? elf32_xlatetom : elf64_xlatetom)
- (&out, &in, elfdata) != NULL))
- {
- /* We are looking for PT_DYNAMIC. */
- const union
- {
- Elf32_Phdr p32[phnum];
- Elf64_Phdr p64[phnum];
- } *u = (void *) &buf;
- if (elfclass == ELFCLASS32)
- {
- for (size_t i = 0; i < phnum; ++i)
- if (u->p32[i].p_type == PT_DYNAMIC)
- {
- dyn_vaddr = u->p32[i].p_vaddr;
- dyn_filesz = u->p32[i].p_filesz;
- break;
- }
- }
- else
- {
- for (size_t i = 0; i < phnum; ++i)
- if (u->p64[i].p_type == PT_DYNAMIC)
- {
- dyn_vaddr = u->p64[i].p_vaddr;
- dyn_filesz = u->p64[i].p_filesz;
- break;
- }
- }
- }
-
- (*memory_callback) (dwfl, -1, &in.d_buf, &in.d_size, 0, 0,
- memory_callback_arg);
- }
- else
- /* We could not read the executable's phdrs from the
- memory image. If we have a presupplied executable,
- we can still use the AT_PHDR and AT_ENTRY values to
- verify it, and to adjust its bias if it's a PIE.
-
- If there was an ET_EXEC module presupplied that contains
- the AT_PHDR address, then we only consider that one.
- We'll either accept it if its phdr location and e_entry
- make sense or reject it if they don't. If there is no
- presupplied ET_EXEC, then look for a presupplied module,
- which might be a PIE (ET_DYN) that needs its bias adjusted. */
- r_debug_vaddr = ((phdr_mod == NULL
- || phdr_mod->main.elf == NULL
- || phdr_mod->e_type != ET_EXEC)
- ? find_executable (dwfl, phdr, entry,
- &elfclass, &elfdata,
- memory_callback,
- memory_callback_arg)
- : consider_executable (phdr_mod, phdr, entry,
- &elfclass, &elfdata,
- memory_callback,
- memory_callback_arg));
- }
-
- /* If we found PT_DYNAMIC, search it for DT_DEBUG. */
- if (dyn_filesz != 0)
- {
- Elf_Data in =
- {
- .d_type = ELF_T_DYN,
- .d_version = EV_CURRENT,
- .d_size = dyn_filesz,
- .d_buf = NULL
- };
- int dyn_segndx = dwfl_addrsegment (dwfl, dyn_vaddr, NULL);
- if ((*memory_callback) (dwfl, dyn_segndx, &in.d_buf, &in.d_size,
- dyn_vaddr, dyn_filesz, memory_callback_arg))
- {
- union
- {
- Elf32_Dyn d32;
- Elf64_Dyn d64;
- char data[dyn_filesz];
- } buf;
- Elf_Data out =
- {
- .d_type = ELF_T_DYN,
- .d_version = EV_CURRENT,
- .d_size = dyn_filesz,
- .d_buf = &buf
- };
- in.d_size = out.d_size;
- if (likely ((elfclass == ELFCLASS32
- ? elf32_xlatetom : elf64_xlatetom)
- (&out, &in, elfdata) != NULL))
- {
- /* We are looking for PT_DYNAMIC. */
- const union
- {
- Elf32_Dyn d32[dyn_filesz / sizeof (Elf32_Dyn)];
- Elf64_Dyn d64[dyn_filesz / sizeof (Elf64_Dyn)];
- } *u = (void *) &buf;
- if (elfclass == ELFCLASS32)
- {
- size_t n = dyn_filesz / sizeof (Elf32_Dyn);
- for (size_t i = 0; i < n; ++i)
- if (u->d32[i].d_tag == DT_DEBUG)
- {
- r_debug_vaddr = u->d32[i].d_un.d_val;
- break;
- }
- }
- else
- {
- size_t n = dyn_filesz / sizeof (Elf64_Dyn);
- for (size_t i = 0; i < n; ++i)
- if (u->d64[i].d_tag == DT_DEBUG)
- {
- r_debug_vaddr = u->d64[i].d_un.d_val;
- break;
- }
- }
- }
-
- (*memory_callback) (dwfl, -1, &in.d_buf, &in.d_size, 0, 0,
- memory_callback_arg);
- }
- }
- }
- else
- /* We have to look for a presupplied executable file to determine
- the vaddr of its dynamic section and DT_DEBUG therein. */
- r_debug_vaddr = find_executable (dwfl, 0, 0, &elfclass, &elfdata,
- memory_callback, memory_callback_arg);
-
- if (r_debug_vaddr == 0)
- return 0;
-
- /* For following pointers from struct link_map, we will use an
- integrated memory access callback that can consult module text
- elided from the core file. This is necessary when the l_name
- pointer for the dynamic linker's own entry is a pointer into the
- executable's .interp section. */
- struct integrated_memory_callback mcb =
- {
- .memory_callback = memory_callback,
- .memory_callback_arg = memory_callback_arg
- };
-
- /* Now we can follow the dynamic linker's library list. */
- return report_r_debug (elfclass, elfdata, dwfl, r_debug_vaddr,
- &integrated_memory_callback, &mcb);
-}
-INTDEF (dwfl_link_map_report)
diff --git a/libdwfl/linux-kernel-modules.c b/libdwfl/linux-kernel-modules.c
deleted file mode 100644
index 5bbb384..0000000
--- a/libdwfl/linux-kernel-modules.c
+++ /dev/null
@@ -1,856 +0,0 @@
-/* Standard libdwfl callbacks for debugging the running Linux kernel.
- Copyright (C) 2005, 2006, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-/* We include this before config.h because it can't handle _FILE_OFFSET_BITS.
- Everything we need here is fine if its declarations just come first. */
-
-#include <fts.h>
-
-#include <config.h>
-
-#include "libdwflP.h"
-#include <inttypes.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdio_ext.h>
-#include <string.h>
-#include <stdlib.h>
-#include <sys/utsname.h>
-#include <fcntl.h>
-#include <unistd.h>
-
-
-#define KERNEL_MODNAME "kernel"
-
-#define MODULEDIRFMT "/lib/modules/%s"
-
-#define KNOTESFILE "/sys/kernel/notes"
-#define MODNOTESFMT "/sys/module/%s/notes"
-#define KSYMSFILE "/proc/kallsyms"
-#define MODULELIST "/proc/modules"
-#define SECADDRDIRFMT "/sys/module/%s/sections/"
-#define MODULE_SECT_NAME_LEN 32 /* Minimum any linux/module.h has had. */
-
-
-/* Try to open the given file as it is or under the debuginfo directory. */
-static int
-try_kernel_name (Dwfl *dwfl, char **fname, bool try_debug)
-{
- if (*fname == NULL)
- return -1;
-
- /* Don't bother trying *FNAME itself here if the path will cause it to be
- tried because we give its own basename as DEBUGLINK_FILE. */
- int fd = ((((dwfl->callbacks->debuginfo_path
- ? *dwfl->callbacks->debuginfo_path : NULL)
- ?: DEFAULT_DEBUGINFO_PATH)[0] == ':') ? -1
- : TEMP_FAILURE_RETRY (open64 (*fname, O_RDONLY)));
- if (fd < 0)
- {
- char *debugfname = NULL;
- Dwfl_Module fakemod = { .dwfl = dwfl };
- /* First try the file's unadorned basename as DEBUGLINK_FILE,
- to look for "vmlinux" files. */
- fd = INTUSE(dwfl_standard_find_debuginfo) (&fakemod, NULL, NULL, 0,
- *fname, basename (*fname), 0,
- &debugfname);
- if (fd < 0 && try_debug)
- /* Next, let the call use the default of basename + ".debug",
- to look for "vmlinux.debug" files. */
- fd = INTUSE(dwfl_standard_find_debuginfo) (&fakemod, NULL, NULL, 0,
- *fname, NULL, 0,
- &debugfname);
- free (*fname);
- *fname = debugfname;
- }
-
- return fd;
-}
-
-static inline const char *
-kernel_release (void)
-{
- /* Cache the `uname -r` string we'll use. */
- static struct utsname utsname;
- if (utsname.release[0] == '\0' && uname (&utsname) != 0)
- return NULL;
- return utsname.release;
-}
-
-static int
-find_kernel_elf (Dwfl *dwfl, const char *release, char **fname)
-{
- if ((release[0] == '/'
- ? asprintf (fname, "%s/vmlinux", release)
- : asprintf (fname, "/boot/vmlinux-%s", release)) < 0)
- return -1;
-
- int fd = try_kernel_name (dwfl, fname, true);
- if (fd < 0 && release[0] != '/')
- {
- free (*fname);
- if (asprintf (fname, MODULEDIRFMT "/vmlinux", release) < 0)
- return -1;
- fd = try_kernel_name (dwfl, fname, true);
- }
-
- return fd;
-}
-
-static int
-get_release (Dwfl *dwfl, const char **release)
-{
- if (dwfl == NULL)
- return -1;
-
- const char *release_string = release == NULL ? NULL : *release;
- if (release_string == NULL)
- {
- release_string = kernel_release ();
- if (release_string == NULL)
- return errno;
- if (release != NULL)
- *release = release_string;
- }
-
- return 0;
-}
-
-static int
-report_kernel (Dwfl *dwfl, const char **release,
- int (*predicate) (const char *module, const char *file))
-{
- int result = get_release (dwfl, release);
- if (unlikely (result != 0))
- return result;
-
- char *fname;
- int fd = find_kernel_elf (dwfl, *release, &fname);
-
- if (fd < 0)
- result = ((predicate != NULL && !(*predicate) (KERNEL_MODNAME, NULL))
- ? 0 : errno ?: ENOENT);
- else
- {
- bool report = true;
-
- if (predicate != NULL)
- {
- /* Let the predicate decide whether to use this one. */
- int want = (*predicate) (KERNEL_MODNAME, fname);
- if (want < 0)
- result = errno;
- report = want > 0;
- }
-
- if (report)
- {
- Dwfl_Module *mod = INTUSE(dwfl_report_elf) (dwfl, KERNEL_MODNAME,
- fname, fd, 0);
- if (mod == NULL)
- result = -1;
- else
- /* The kernel is ET_EXEC, but always treat it as relocatable. */
- mod->e_type = ET_DYN;
- }
-
- if (!report || result < 0)
- close (fd);
- }
-
- free (fname);
-
- return result;
-}
-
-/* Look for a kernel debug archive. If we find one, report all its modules.
- If not, return ENOENT. */
-static int
-report_kernel_archive (Dwfl *dwfl, const char **release,
- int (*predicate) (const char *module, const char *file))
-{
- int result = get_release (dwfl, release);
- if (unlikely (result != 0))
- return result;
-
- char *archive;
- if (unlikely ((*release)[0] == '/'
- ? asprintf (&archive, "%s/debug.a", *release)
- : asprintf (&archive, MODULEDIRFMT "/debug.a", *release)) < 0)
- return ENOMEM;
-
- int fd = try_kernel_name (dwfl, &archive, false);
- if (fd < 0)
- result = errno ?: ENOENT;
- else
- {
- /* We have the archive file open! */
- Dwfl_Module *last = __libdwfl_report_offline (dwfl, NULL, archive, fd,
- true, predicate);
- if (unlikely (last == NULL))
- result = -1;
- else
- {
- /* Find the kernel and move it to the head of the list. */
- Dwfl_Module **tailp = &dwfl->modulelist, **prevp = tailp;
- for (Dwfl_Module *m = *prevp; m != NULL; m = *(prevp = &m->next))
- if (!m->gc && m->e_type != ET_REL && !strcmp (m->name, "kernel"))
- {
- *prevp = m->next;
- m->next = *tailp;
- *tailp = m;
- break;
- }
- }
- }
-
- free (archive);
- return result;
-}
-
-/* Report a kernel and all its modules found on disk, for offline use.
- If RELEASE starts with '/', it names a directory to look in;
- if not, it names a directory to find under /lib/modules/;
- if null, /lib/modules/`uname -r` is used.
- Returns zero on success, -1 if dwfl_report_module failed,
- or an errno code if finding the files on disk failed. */
-int
-dwfl_linux_kernel_report_offline (Dwfl *dwfl, const char *release,
- int (*predicate) (const char *module,
- const char *file))
-{
- int result = report_kernel_archive (dwfl, &release, predicate);
- if (result != ENOENT)
- return result;
-
- /* First report the kernel. */
- result = report_kernel (dwfl, &release, predicate);
- if (result == 0)
- {
- /* Do "find /lib/modules/RELEASE -name *.ko". */
-
- char *modulesdir[] = { NULL, NULL };
- if (release[0] == '/')
- modulesdir[0] = (char *) release;
- else
- {
- if (asprintf (&modulesdir[0], MODULEDIRFMT, release) < 0)
- return errno;
- }
-
- FTS *fts = fts_open (modulesdir, FTS_NOSTAT | FTS_LOGICAL, NULL);
- if (modulesdir[0] == (char *) release)
- modulesdir[0] = NULL;
- if (fts == NULL)
- {
- free (modulesdir[0]);
- return errno;
- }
-
- FTSENT *f;
- while ((f = fts_read (fts)) != NULL)
- {
- switch (f->fts_info)
- {
- case FTS_F:
- case FTS_SL:
- case FTS_NSOK:
- /* See if this file name matches "*.ko". */
- if (f->fts_namelen > 3
- && !memcmp (f->fts_name + f->fts_namelen - 3, ".ko", 4))
- {
- /* We have a .ko file to report. Following the algorithm
- by which the kernel makefiles set KBUILD_MODNAME, we
- replace all ',' or '-' with '_' in the file name and
- call that the module name. Modules could well be
- built using different embedded names than their file
- names. To handle that, we would have to look at the
- __this_module.name contents in the module's text. */
-
- char name[f->fts_namelen - 3 + 1];
- for (size_t i = 0; i < f->fts_namelen - 3U; ++i)
- if (f->fts_name[i] == '-' || f->fts_name[i] == ',')
- name[i] = '_';
- else
- name[i] = f->fts_name[i];
- name[f->fts_namelen - 3] = '\0';
-
- if (predicate != NULL)
- {
- /* Let the predicate decide whether to use this one. */
- int want = (*predicate) (name, f->fts_path);
- if (want < 0)
- {
- result = -1;
- break;
- }
- if (!want)
- continue;
- }
-
- if (dwfl_report_offline (dwfl, name,
- f->fts_path, -1) == NULL)
- {
- result = -1;
- break;
- }
- }
- continue;
-
- case FTS_ERR:
- case FTS_DNR:
- case FTS_NS:
- result = f->fts_errno;
- break;
-
- case FTS_SLNONE:
- default:
- continue;
- }
-
- /* We only get here in error cases. */
- break;
- }
- fts_close (fts);
- free (modulesdir[0]);
- }
-
- return result;
-}
-INTDEF (dwfl_linux_kernel_report_offline)
-
-
-/* Grovel around to guess the bounds of the runtime kernel image. */
-static int
-intuit_kernel_bounds (Dwarf_Addr *start, Dwarf_Addr *end, Dwarf_Addr *notes)
-{
- FILE *f = fopen (KSYMSFILE, "r");
- if (f == NULL)
- return errno;
-
- (void) __fsetlocking (f, FSETLOCKING_BYCALLER);
-
- *notes = 0;
-
- char *line = NULL;
- size_t linesz = 0;
- size_t n = getline (&line, &linesz, f);
- Dwarf_Addr first;
- char *p = NULL;
- int result = 0;
- if (n > 0 && (first = strtoull (line, &p, 16)) > 0 && p > line)
- {
- Dwarf_Addr last = 0;
- while ((n = getline (&line, &linesz, f)) > 1 && line[n - 2] != ']')
- {
- p = NULL;
- last = strtoull (line, &p, 16);
- if (p == NULL || p == line || last == 0)
- {
- result = -1;
- break;
- }
-
- if (*notes == 0)
- {
- const char *sym = (strsep (&p, " \t\n")
- ? strsep (&p, " \t\n") : NULL);
- if (sym != NULL && !strcmp (sym, "__start_notes"))
- *notes = last;
- }
- }
- if ((n == 0 && feof_unlocked (f)) || (n > 1 && line[n - 2] == ']'))
- {
- Dwarf_Addr round_kernel = sysconf (_SC_PAGE_SIZE);
- first &= -(Dwarf_Addr) round_kernel;
- last += round_kernel - 1;
- last &= -(Dwarf_Addr) round_kernel;
- *start = first;
- *end = last;
- result = 0;
- }
- }
- free (line);
-
- if (result == -1)
- result = ferror_unlocked (f) ? errno : ENOEXEC;
-
- fclose (f);
-
- return result;
-}
-
-
-/* Look for a build ID note in NOTESFILE and associate the ID with MOD. */
-static int
-check_notes (Dwfl_Module *mod, const char *notesfile,
- Dwarf_Addr vaddr, const char *secname)
-{
- int fd = open64 (notesfile, O_RDONLY);
- if (fd < 0)
- return 1;
-
- assert (sizeof (Elf32_Nhdr) == sizeof (GElf_Nhdr));
- assert (sizeof (Elf64_Nhdr) == sizeof (GElf_Nhdr));
- union
- {
- GElf_Nhdr nhdr;
- unsigned char data[8192];
- } buf;
-
- ssize_t n = read (fd, buf.data, sizeof buf);
- close (fd);
-
- if (n <= 0)
- return 1;
-
- unsigned char *p = buf.data;
- while (p < &buf.data[n])
- {
- /* No translation required since we are reading the native kernel. */
- GElf_Nhdr *nhdr = (void *) p;
- p += sizeof *nhdr;
- unsigned char *name = p;
- p += (nhdr->n_namesz + 3) & -4U;
- unsigned char *bits = p;
- p += (nhdr->n_descsz + 3) & -4U;
-
- if (p <= &buf.data[n]
- && nhdr->n_type == NT_GNU_BUILD_ID
- && nhdr->n_namesz == sizeof "GNU"
- && !memcmp (name, "GNU", sizeof "GNU"))
- {
- /* Found it. For a module we must figure out its VADDR now. */
-
- if (secname != NULL
- && (INTUSE(dwfl_linux_kernel_module_section_address)
- (mod, NULL, mod->name, 0, secname, 0, NULL, &vaddr) != 0
- || vaddr == (GElf_Addr) -1l))
- vaddr = 0;
-
- if (vaddr != 0)
- vaddr += bits - buf.data;
- return INTUSE(dwfl_module_report_build_id) (mod, bits,
- nhdr->n_descsz, vaddr);
- }
- }
-
- return 0;
-}
-
-/* Look for a build ID for the kernel. */
-static int
-check_kernel_notes (Dwfl_Module *kernelmod, GElf_Addr vaddr)
-{
- return check_notes (kernelmod, KNOTESFILE, vaddr, NULL) < 0 ? -1 : 0;
-}
-
-/* Look for a build ID for a loaded kernel module. */
-static int
-check_module_notes (Dwfl_Module *mod)
-{
- char *dirs[2] = { NULL, NULL };
- if (asprintf (&dirs[0], MODNOTESFMT, mod->name) < 0)
- return ENOMEM;
-
- FTS *fts = fts_open (dirs, FTS_NOSTAT | FTS_LOGICAL, NULL);
- if (fts == NULL)
- {
- free (dirs[0]);
- return 0;
- }
-
- int result = 0;
- FTSENT *f;
- while ((f = fts_read (fts)) != NULL)
- {
- switch (f->fts_info)
- {
- case FTS_F:
- case FTS_SL:
- case FTS_NSOK:
- result = check_notes (mod, f->fts_accpath, 0, f->fts_name);
- if (result > 0) /* Nothing found. */
- {
- result = 0;
- continue;
- }
- break;
-
- case FTS_ERR:
- case FTS_DNR:
- result = f->fts_errno;
- break;
-
- case FTS_NS:
- case FTS_SLNONE:
- default:
- continue;
- }
-
- /* We only get here when finished or in error cases. */
- break;
- }
- fts_close (fts);
- free (dirs[0]);
-
- return result;
-}
-
-int
-dwfl_linux_kernel_report_kernel (Dwfl *dwfl)
-{
- Dwarf_Addr start;
- Dwarf_Addr end;
- inline Dwfl_Module *report (void)
- {
- return INTUSE(dwfl_report_module) (dwfl, KERNEL_MODNAME, start, end);
- }
-
- /* This is a bit of a kludge. If we already reported the kernel,
- don't bother figuring it out again--it never changes. */
- for (Dwfl_Module *m = dwfl->modulelist; m != NULL; m = m->next)
- if (!strcmp (m->name, KERNEL_MODNAME))
- {
- start = m->low_addr;
- end = m->high_addr;
- return report () == NULL ? -1 : 0;
- }
-
- /* Try to figure out the bounds of the kernel image without
- looking for any vmlinux file. */
- Dwarf_Addr notes;
- /* The compiler cannot deduce that if intuit_kernel_bounds returns
- zero NOTES will be initialized. Fake the initialization. */
- asm ("" : "=m" (notes));
- int result = intuit_kernel_bounds (&start, &end, ¬es);
- if (result == 0)
- {
- Dwfl_Module *mod = report ();
- return unlikely (mod == NULL) ? -1 : check_kernel_notes (mod, notes);
- }
- if (result != ENOENT)
- return result;
-
- /* Find the ELF file for the running kernel and dwfl_report_elf it. */
- return report_kernel (dwfl, NULL, NULL);
-}
-INTDEF (dwfl_linux_kernel_report_kernel)
-
-
-/* Dwfl_Callbacks.find_elf for the running Linux kernel and its modules. */
-
-int
-dwfl_linux_kernel_find_elf (Dwfl_Module *mod,
- void **userdata __attribute__ ((unused)),
- const char *module_name,
- Dwarf_Addr base __attribute__ ((unused)),
- char **file_name, Elf **elfp)
-{
- if (mod->build_id_len > 0)
- {
- int fd = INTUSE(dwfl_build_id_find_elf) (mod, NULL, NULL, 0,
- file_name, elfp);
- if (fd >= 0 || errno != 0)
- return fd;
- }
-
- const char *release = kernel_release ();
- if (release == NULL)
- return errno;
-
- if (!strcmp (module_name, KERNEL_MODNAME))
- return find_kernel_elf (mod->dwfl, release, file_name);
-
- /* Do "find /lib/modules/`uname -r` -name MODULE_NAME.ko". */
-
- char *modulesdir[] = { NULL, NULL };
- if (asprintf (&modulesdir[0], MODULEDIRFMT, release) < 0)
- return -1;
-
- FTS *fts = fts_open (modulesdir, FTS_NOSTAT | FTS_LOGICAL, NULL);
- if (fts == NULL)
- {
- free (modulesdir[0]);
- return -1;
- }
-
- size_t namelen = strlen (module_name);
-
- /* This is a kludge. There is no actual necessary relationship between
- the name of the .ko file installed and the module name the kernel
- knows it by when it's loaded. The kernel's only idea of the module
- name comes from the name embedded in the object's magic
- .gnu.linkonce.this_module section.
-
- In practice, these module names match the .ko file names except for
- some using '_' and some using '-'. So our cheap kludge is to look for
- two files when either a '_' or '-' appears in a module name, one using
- only '_' and one only using '-'. */
-
- char alternate_name[namelen + 1];
- inline bool subst_name (char from, char to)
- {
- const char *n = memchr (module_name, from, namelen);
- if (n == NULL)
- return false;
- char *a = mempcpy (alternate_name, module_name, n - module_name);
- *a++ = to;
- ++n;
- const char *p;
- while ((p = memchr (n, from, namelen - (n - module_name))) != NULL)
- {
- a = mempcpy (a, n, p - n);
- *a++ = to;
- n = p + 1;
- }
- memcpy (a, n, namelen - (n - module_name) + 1);
- return true;
- }
- if (!subst_name ('-', '_') && !subst_name ('_', '-'))
- alternate_name[0] = '\0';
-
- FTSENT *f;
- int error = ENOENT;
- while ((f = fts_read (fts)) != NULL)
- {
- error = ENOENT;
- switch (f->fts_info)
- {
- case FTS_F:
- case FTS_SL:
- case FTS_NSOK:
- /* See if this file name is "MODULE_NAME.ko". */
- if (f->fts_namelen == namelen + 3
- && !memcmp (f->fts_name + namelen, ".ko", 4)
- && (!memcmp (f->fts_name, module_name, namelen)
- || !memcmp (f->fts_name, alternate_name, namelen)))
- {
- int fd = open64 (f->fts_accpath, O_RDONLY);
- *file_name = strdup (f->fts_path);
- fts_close (fts);
- free (modulesdir[0]);
- if (fd < 0)
- free (*file_name);
- else if (*file_name == NULL)
- {
- close (fd);
- fd = -1;
- }
- return fd;
- }
- break;
-
- case FTS_ERR:
- case FTS_DNR:
- case FTS_NS:
- error = f->fts_errno;
- break;
-
- case FTS_SLNONE:
- default:
- break;
- }
- }
-
- fts_close (fts);
- free (modulesdir[0]);
- errno = error;
- return -1;
-}
-INTDEF (dwfl_linux_kernel_find_elf)
-
-
-/* Dwfl_Callbacks.section_address for kernel modules in the running Linux.
- We read the information from /sys/module directly. */
-
-int
-dwfl_linux_kernel_module_section_address
-(Dwfl_Module *mod __attribute__ ((unused)),
- void **userdata __attribute__ ((unused)),
- const char *modname, Dwarf_Addr base __attribute__ ((unused)),
- const char *secname, Elf32_Word shndx __attribute__ ((unused)),
- const GElf_Shdr *shdr __attribute__ ((unused)),
- Dwarf_Addr *addr)
-{
- char *sysfile;
- if (asprintf (&sysfile, SECADDRDIRFMT "%s", modname, secname) < 0)
- return DWARF_CB_ABORT;
-
- FILE *f = fopen (sysfile, "r");
- free (sysfile);
-
- if (f == NULL)
- {
- if (errno == ENOENT)
- {
- /* The .modinfo and .data.percpu sections are never kept
- loaded in the kernel. If the kernel was compiled without
- CONFIG_MODULE_UNLOAD, the .exit.* sections are not
- actually loaded at all.
-
- Setting *ADDR to -1 tells the caller this section is
- actually absent from memory. */
-
- if (!strcmp (secname, ".modinfo")
- || !strcmp (secname, ".data.percpu")
- || !strncmp (secname, ".exit", 5))
- {
- *addr = (Dwarf_Addr) -1l;
- return DWARF_CB_OK;
- }
-
- /* The goofy PPC64 module_frob_arch_sections function tweaks
- the section names as a way to control other kernel code's
- behavior, and this cruft leaks out into the /sys information.
- The file name for ".init*" may actually look like "_init*". */
-
- const bool is_init = !strncmp (secname, ".init", 5);
- if (is_init)
- {
- if (asprintf (&sysfile, SECADDRDIRFMT "_%s",
- modname, &secname[1]) < 0)
- return ENOMEM;
- f = fopen (sysfile, "r");
- free (sysfile);
- if (f != NULL)
- goto ok;
- }
-
- /* The kernel truncates section names to MODULE_SECT_NAME_LEN - 1.
- In case that size increases in the future, look for longer
- truncated names first. */
- size_t namelen = strlen (secname);
- if (namelen >= MODULE_SECT_NAME_LEN)
- {
- int len = asprintf (&sysfile, SECADDRDIRFMT "%s",
- modname, secname);
- if (len < 0)
- return DWARF_CB_ABORT;
- char *end = sysfile + len;
- do
- {
- *--end = '\0';
- f = fopen (sysfile, "r");
- if (is_init && f == NULL && errno == ENOENT)
- {
- sysfile[len - namelen] = '_';
- f = fopen (sysfile, "r");
- sysfile[len - namelen] = '.';
- }
- }
- while (f == NULL && errno == ENOENT
- && end - &sysfile[len - namelen] >= MODULE_SECT_NAME_LEN);
- free (sysfile);
-
- if (f != NULL)
- goto ok;
- }
- }
-
- return DWARF_CB_ABORT;
- }
-
- ok:
- (void) __fsetlocking (f, FSETLOCKING_BYCALLER);
-
- int result = (fscanf (f, "%" PRIx64 "\n", addr) == 1 ? 0
- : ferror_unlocked (f) ? errno : ENOEXEC);
- fclose (f);
-
- if (result == 0)
- return DWARF_CB_OK;
-
- errno = result;
- return DWARF_CB_ABORT;
-}
-INTDEF (dwfl_linux_kernel_module_section_address)
-
-int
-dwfl_linux_kernel_report_modules (Dwfl *dwfl)
-{
- FILE *f = fopen (MODULELIST, "r");
- if (f == NULL)
- return errno;
-
- (void) __fsetlocking (f, FSETLOCKING_BYCALLER);
-
- int result = 0;
- Dwarf_Addr modaddr;
- unsigned long int modsz;
- char modname[128];
- char *line = NULL;
- size_t linesz = 0;
- /* We can't just use fscanf here because it's not easy to distinguish \n
- from other whitespace so as to take the optional word following the
- address but always stop at the end of the line. */
- while (getline (&line, &linesz, f) > 0
- && sscanf (line, "%128s %lu %*s %*s %*s %" PRIx64 " %*s\n",
- modname, &modsz, &modaddr) == 3)
- {
- Dwfl_Module *mod = INTUSE(dwfl_report_module) (dwfl, modname,
- modaddr, modaddr + modsz);
- if (mod == NULL)
- {
- result = -1;
- break;
- }
-
- result = check_module_notes (mod);
- }
- free (line);
-
- if (result == 0)
- result = ferror_unlocked (f) ? errno : feof_unlocked (f) ? 0 : ENOEXEC;
-
- fclose (f);
-
- return result;
-}
-INTDEF (dwfl_linux_kernel_report_modules)
diff --git a/libdwfl/linux-proc-maps.c b/libdwfl/linux-proc-maps.c
deleted file mode 100644
index 2206f63..0000000
--- a/libdwfl/linux-proc-maps.c
+++ /dev/null
@@ -1,336 +0,0 @@
-/* Standard libdwfl callbacks for debugging a live Linux process.
- Copyright (C) 2005, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-#include <inttypes.h>
-#include <sys/types.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdio_ext.h>
-#include <stdbool.h>
-#include <string.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <assert.h>
-#include <endian.h>
-
-
-#define PROCMAPSFMT "/proc/%d/maps"
-#define PROCMEMFMT "/proc/%d/mem"
-#define PROCAUXVFMT "/proc/%d/auxv"
-
-
-/* Search /proc/PID/auxv for the AT_SYSINFO_EHDR tag. */
-
-static int
-find_sysinfo_ehdr (pid_t pid, GElf_Addr *sysinfo_ehdr)
-{
- char *fname;
- if (asprintf (&fname, PROCAUXVFMT, pid) < 0)
- return ENOMEM;
-
- int fd = open64 (fname, O_RDONLY);
- free (fname);
- if (fd < 0)
- return errno == ENOENT ? 0 : errno;
-
- ssize_t nread;
- do
- {
- union
- {
- char buffer[sizeof (long int) * 2 * 64];
- Elf64_auxv_t a64[sizeof (long int) * 2 * 64 / sizeof (Elf64_auxv_t)];
- Elf32_auxv_t a32[sizeof (long int) * 2 * 32 / sizeof (Elf32_auxv_t)];
- } d;
- nread = read (fd, &d, sizeof d);
- if (nread > 0)
- {
- switch (sizeof (long int))
- {
- case 4:
- for (size_t i = 0; (char *) &d.a32[i] < &d.buffer[nread]; ++i)
- if (d.a32[i].a_type == AT_SYSINFO_EHDR)
- {
- *sysinfo_ehdr = d.a32[i].a_un.a_val;
- nread = 0;
- break;
- }
- break;
- case 8:
- for (size_t i = 0; (char *) &d.a64[i] < &d.buffer[nread]; ++i)
- if (d.a64[i].a_type == AT_SYSINFO_EHDR)
- {
- *sysinfo_ehdr = d.a64[i].a_un.a_val;
- nread = 0;
- break;
- }
- break;
- default:
- abort ();
- break;
- }
- }
- }
- while (nread > 0);
-
- close (fd);
-
- return nread < 0 ? errno : 0;
-}
-
-static int
-proc_maps_report (Dwfl *dwfl, FILE *f, GElf_Addr sysinfo_ehdr, pid_t pid)
-{
- unsigned int last_dmajor = -1, last_dminor = -1;
- uint64_t last_ino = -1;
- char *last_file = NULL;
- Dwarf_Addr low = 0, high = 0;
-
- inline bool report (void)
- {
- if (last_file != NULL)
- {
- Dwfl_Module *mod = INTUSE(dwfl_report_module) (dwfl, last_file,
- low, high);
- free (last_file);
- last_file = NULL;
- if (unlikely (mod == NULL))
- return true;
- }
- return false;
- }
-
- char *line = NULL;
- size_t linesz;
- ssize_t len;
- while ((len = getline (&line, &linesz, f)) > 0)
- {
- if (line[len - 1] == '\n')
- line[len - 1] = '\0';
-
- Dwarf_Addr start, end, offset;
- unsigned int dmajor, dminor;
- uint64_t ino;
- int nread = -1;
- if (sscanf (line, "%" PRIx64 "-%" PRIx64 " %*s %" PRIx64
- " %x:%x %" PRIi64 " %n",
- &start, &end, &offset, &dmajor, &dminor, &ino, &nread) < 6
- || nread <= 0)
- {
- free (line);
- return ENOEXEC;
- }
-
- /* If this is the special mapping AT_SYSINFO_EHDR pointed us at,
- report the last one and then this special one. */
- if (start == sysinfo_ehdr && start != 0)
- {
- if (report ())
- {
- bad_report:
- free (line);
- fclose (f);
- return -1;
- }
-
- low = start;
- high = end;
- if (asprintf (&last_file, "[vdso: %d]", (int) pid) < 0
- || report ())
- goto bad_report;
- }
-
- char *file = line + nread + strspn (line + nread, " \t");
- if (file[0] == '\0' || (ino == 0 && dmajor == 0 && dminor == 0))
- /* This line doesn't indicate a file mapping. */
- continue;
-
- if (last_file != NULL
- && ino == last_ino && dmajor == last_dmajor && dminor == last_dminor)
- {
- /* This is another portion of the same file's mapping. */
- assert (!strcmp (last_file, file));
- high = end;
- }
- else
- {
- /* This is a different file mapping. Report the last one. */
- if (report ())
- goto bad_report;
- low = start;
- high = end;
- last_file = strdup (file);
- last_ino = ino;
- last_dmajor = dmajor;
- last_dminor = dminor;
- }
- }
- free (line);
-
- int result = ferror_unlocked (f) ? errno : feof_unlocked (f) ? 0 : ENOEXEC;
-
- /* Report the final one. */
- bool lose = report ();
-
- return result != 0 ? result : lose ? -1 : 0;
-}
-
-int
-dwfl_linux_proc_maps_report (Dwfl *dwfl, FILE *f)
-{
- return proc_maps_report (dwfl, f, 0, 0);
-}
-INTDEF (dwfl_linux_proc_maps_report)
-
-int
-dwfl_linux_proc_report (Dwfl *dwfl, pid_t pid)
-{
- if (dwfl == NULL)
- return -1;
-
- /* We'll notice the AT_SYSINFO_EHDR address specially when we hit it. */
- GElf_Addr sysinfo_ehdr = 0;
- int result = find_sysinfo_ehdr (pid, &sysinfo_ehdr);
- if (result != 0)
- return result;
-
- char *fname;
- if (asprintf (&fname, PROCMAPSFMT, pid) < 0)
- return ENOMEM;
-
- FILE *f = fopen (fname, "r");
- free (fname);
- if (f == NULL)
- return errno;
-
- (void) __fsetlocking (f, FSETLOCKING_BYCALLER);
-
- result = proc_maps_report (dwfl, f, sysinfo_ehdr, pid);
-
- fclose (f);
-
- return result;
-}
-INTDEF (dwfl_linux_proc_report)
-
-static ssize_t
-read_proc_memory (void *arg, void *data, GElf_Addr address,
- size_t minread, size_t maxread)
-{
- const int fd = *(const int *) arg;
- ssize_t nread = pread64 (fd, data, maxread, (off64_t) address);
- /* Some kernels don't actually let us do this read, ignore those errors. */
- if (nread < 0 && (errno == EINVAL || errno == EPERM))
- return 0;
- if (nread > 0 && (size_t) nread < minread)
- nread = 0;
- return nread;
-}
-
-extern Elf *elf_from_remote_memory (GElf_Addr ehdr_vma,
- GElf_Addr *loadbasep,
- ssize_t (*read_memory) (void *arg,
- void *data,
- GElf_Addr address,
- size_t minread,
- size_t maxread),
- void *arg);
-
-
-/* Dwfl_Callbacks.find_elf */
-
-int
-dwfl_linux_proc_find_elf (Dwfl_Module *mod __attribute__ ((unused)),
- void **userdata __attribute__ ((unused)),
- const char *module_name, Dwarf_Addr base,
- char **file_name, Elf **elfp)
-{
- if (module_name[0] == '/')
- {
- int fd = open64 (module_name, O_RDONLY);
- if (fd >= 0)
- {
- *file_name = strdup (module_name);
- if (*file_name == NULL)
- {
- close (fd);
- return ENOMEM;
- }
- }
- return fd;
- }
-
- int pid;
- if (sscanf (module_name, "[vdso: %d]", &pid) == 1)
- {
- /* Special case for in-memory ELF image. */
-
- char *fname;
- if (asprintf (&fname, PROCMEMFMT, pid) < 0)
- return -1;
-
- int fd = open64 (fname, O_RDONLY);
- free (fname);
- if (fd < 0)
- return -1;
-
- *elfp = elf_from_remote_memory (base, NULL, &read_proc_memory, &fd);
-
- close (fd);
-
- *file_name = NULL;
- return -1;
- }
-
- abort ();
- return -1;
-}
-INTDEF (dwfl_linux_proc_find_elf)
diff --git a/libdwfl/offline.c b/libdwfl/offline.c
deleted file mode 100644
index b3a95dd..0000000
--- a/libdwfl/offline.c
+++ /dev/null
@@ -1,323 +0,0 @@
-/* Recover relocatibility for addresses computed from debug information.
- Copyright (C) 2005, 2006, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-#include <fcntl.h>
-#include <unistd.h>
-
-/* Since dwfl_report_elf lays out the sections already, this will only be
- called when the section headers of the debuginfo file are being
- consulted instead, or for the section placed at 0. With binutils
- strip-to-debug, the symbol table is in the debuginfo file and relocation
- looks there. */
-int
-dwfl_offline_section_address (Dwfl_Module *mod,
- void **userdata __attribute__ ((unused)),
- const char *modname __attribute__ ((unused)),
- Dwarf_Addr base __attribute__ ((unused)),
- const char *secname __attribute__ ((unused)),
- Elf32_Word shndx,
- const GElf_Shdr *shdr __attribute__ ((unused)),
- Dwarf_Addr *addr)
-{
- assert (mod->e_type == ET_REL);
- assert (shdr->sh_addr == 0);
- assert (shdr->sh_flags & SHF_ALLOC);
-
- if (mod->debug.elf == NULL)
- /* We are only here because sh_addr is zero even though layout is complete.
- The first section in the first file under -e is placed at 0. */
- return 0;
-
- /* The section numbers might not match between the two files.
- The best we can rely on is the order of SHF_ALLOC sections. */
-
- Elf_Scn *ourscn = elf_getscn (mod->debug.elf, shndx);
- Elf_Scn *scn = NULL;
- uint_fast32_t skip_alloc = 0;
- while ((scn = elf_nextscn (mod->debug.elf, scn)) != ourscn)
- {
- assert (scn != NULL);
- GElf_Shdr shdr_mem;
- GElf_Shdr *sh = gelf_getshdr (scn, &shdr_mem);
- if (unlikely (sh == NULL))
- return -1;
- if (sh->sh_flags & SHF_ALLOC)
- ++skip_alloc;
- }
-
- scn = NULL;
- while ((scn = elf_nextscn (mod->main.elf, scn)) != NULL)
- {
- GElf_Shdr shdr_mem;
- GElf_Shdr *main_shdr = gelf_getshdr (scn, &shdr_mem);
- if (unlikely (main_shdr == NULL))
- return -1;
- if ((main_shdr->sh_flags & SHF_ALLOC) && skip_alloc-- == 0)
- {
- assert (main_shdr->sh_flags == shdr->sh_flags);
- *addr = main_shdr->sh_addr;
- return 0;
- }
- }
-
- /* This should never happen. */
- return -1;
-}
-INTDEF (dwfl_offline_section_address)
-
-/* Forward declarations. */
-static Dwfl_Module *process_elf (Dwfl *dwfl, const char *name,
- const char *file_name, int fd, Elf *elf);
-static Dwfl_Module *process_archive (Dwfl *dwfl, const char *name,
- const char *file_name, int fd, Elf *elf,
- int (*predicate) (const char *module,
- const char *file));
-
-/* Report one module for an ELF file, or many for an archive.
- Always consumes ELF and FD. */
-static Dwfl_Module *
-process_file (Dwfl *dwfl, const char *name, const char *file_name, int fd,
- Elf *elf, int (*predicate) (const char *module,
- const char *file))
-{
- switch (elf_kind (elf))
- {
- default:
- case ELF_K_NONE:
- __libdwfl_seterrno (elf == NULL ? DWFL_E_LIBELF : DWFL_E_BADELF);
- return NULL;
-
- case ELF_K_ELF:
- return process_elf (dwfl, name, file_name, fd, elf);
-
- case ELF_K_AR:
- return process_archive (dwfl, name, file_name, fd, elf, predicate);
- }
-}
-
-/* Report the open ELF file as a module. Always consumes ELF and FD. */
-static Dwfl_Module *
-process_elf (Dwfl *dwfl, const char *name, const char *file_name, int fd,
- Elf *elf)
-{
- Dwfl_Module *mod = __libdwfl_report_elf (dwfl, name, file_name, fd, elf,
- dwfl->offline_next_address);
- if (mod != NULL)
- {
- /* If this is an ET_EXEC file with fixed addresses, the address range
- it consumed may or may not intersect with the arbitrary range we
- will use for relocatable modules. Make sure we always use a free
- range for the offline allocations. If this module did use
- offline_next_address, it may have rounded it up for the module's
- alignment requirements. */
- if ((dwfl->offline_next_address >= mod->low_addr
- || mod->low_addr - dwfl->offline_next_address < OFFLINE_REDZONE)
- && dwfl->offline_next_address < mod->high_addr + OFFLINE_REDZONE)
- dwfl->offline_next_address = mod->high_addr + OFFLINE_REDZONE;
-
- /* Don't keep the file descriptor around. */
- if (mod->main.fd != -1 && elf_cntl (mod->main.elf, ELF_C_FDREAD) == 0)
- {
- close (mod->main.fd);
- mod->main.fd = -1;
- }
- }
-
- return mod;
-}
-
-/* Always consumes MEMBER. Returns elf_next result on success.
- For errors returns ELF_C_NULL with *MOD set to null. */
-static Elf_Cmd
-process_archive_member (Dwfl *dwfl, const char *name, const char *file_name,
- int (*predicate) (const char *module, const char *file),
- int fd, Elf *member, Dwfl_Module **mod)
-{
- const Elf_Arhdr *h = elf_getarhdr (member);
- if (unlikely (h == NULL))
- {
- __libdwfl_seterrno (DWFL_E_LIBELF);
- fail:
- elf_end (member);
- *mod = NULL;
- return ELF_C_NULL;
- }
-
- if (!strcmp (h->ar_name, "/") || !strcmp (h->ar_name, "//"))
- {
- skip:;
- /* Skip this and go to the next. */
- Elf_Cmd result = elf_next (member);
- elf_end (member);
- return result;
- }
-
- char *member_name;
- if (unlikely (asprintf (&member_name, "%s(%s)", file_name, h->ar_name) < 0))
- {
- nomem:
- __libdwfl_seterrno (DWFL_E_NOMEM);
- elf_end (member);
- *mod = NULL;
- return ELF_C_NULL;
- }
-
- char *module_name = NULL;
- if (name == NULL || name[0] == '\0')
- name = h->ar_name;
- else if (unlikely (asprintf (&module_name, "%s:%s", name, h->ar_name) < 0))
- {
- free (member_name);
- goto nomem;
- }
- else
- name = module_name;
-
- if (predicate != NULL)
- {
- /* Let the predicate decide whether to use this one. */
- int want = (*predicate) (name, member_name);
- if (want <= 0)
- {
- free (member_name);
- free (module_name);
- if (unlikely (want < 0))
- {
- __libdwfl_seterrno (DWFL_E_CB);
- goto fail;
- }
- goto skip;
- }
- }
-
- /* We let __libdwfl_report_elf cache the fd in mod->main.fd,
- though it's the same fd for all the members.
- On module teardown we will close it only on the last Elf reference. */
- *mod = process_file (dwfl, name, member_name, fd, member, predicate);
- free (member_name);
- free (module_name);
-
- if (*mod == NULL) /* process_file called elf_end. */
- return ELF_C_NULL;
-
- /* Advance the archive-reading offset for the next iteration. */
- return elf_next (member);
-}
-
-/* Report each member of the archive as its own module. */
-static Dwfl_Module *
-process_archive (Dwfl *dwfl, const char *name, const char *file_name, int fd,
- Elf *archive,
- int (*predicate) (const char *module, const char *file))
-
-{
- Dwfl_Module *mod = NULL;
- Elf *member = elf_begin (fd, ELF_C_READ_MMAP_PRIVATE, archive);
- if (unlikely (member == NULL)) /* Empty archive. */
- {
- __libdwfl_seterrno (DWFL_E_BADELF);
- return NULL;
- }
-
- while (process_archive_member (dwfl, name, file_name, predicate,
- fd, member, &mod) != ELF_C_NULL)
- member = elf_begin (fd, ELF_C_READ_MMAP_PRIVATE, archive);
-
- /* We can drop the archive Elf handle even if we're still using members
- in live modules. When the last module's elf_end on a member returns
- zero, that module will close FD. If no modules survived the predicate,
- we are all done with the file right here. */
- if (mod != NULL /* If no modules, caller will clean up. */
- && elf_end (archive) == 0)
- close (fd);
-
- return mod;
-}
-
-Dwfl_Module *
-internal_function
-__libdwfl_report_offline (Dwfl *dwfl, const char *name,
- const char *file_name, int fd, bool closefd,
- int (*predicate) (const char *module,
- const char *file))
-{
- Elf *elf = elf_begin (fd, ELF_C_READ_MMAP_PRIVATE, NULL);
- Dwfl_Module *mod = process_file (dwfl, name, file_name, fd, elf, predicate);
- if (mod == NULL)
- {
- elf_end (elf);
- if (closefd)
- close (fd);
- }
- return mod;
-}
-
-Dwfl_Module *
-dwfl_report_offline (Dwfl *dwfl, const char *name,
- const char *file_name, int fd)
-{
- if (dwfl == NULL)
- return NULL;
-
- bool closefd = false;
- if (fd < 0)
- {
- closefd = true;
- fd = open64 (file_name, O_RDONLY);
- if (fd < 0)
- {
- __libdwfl_seterrno (DWFL_E_ERRNO);
- return NULL;
- }
- }
-
- return __libdwfl_report_offline (dwfl, name, file_name, fd, closefd, NULL);
-}
-INTDEF (dwfl_report_offline)
diff --git a/libdwfl/relocate.c b/libdwfl/relocate.c
deleted file mode 100644
index abacc04..0000000
--- a/libdwfl/relocate.c
+++ /dev/null
@@ -1,628 +0,0 @@
-/* Relocate debug information.
- Copyright (C) 2005, 2006, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-
-typedef uint8_t GElf_Byte;
-
-/* Adjust *VALUE to add the load address of the SHNDX section.
- We update the section header in place to cache the result. */
-
-Dwfl_Error
-internal_function
-__libdwfl_relocate_value (Dwfl_Module *mod, Elf *elf, size_t *shstrndx,
- Elf32_Word shndx, GElf_Addr *value)
-{
- Elf_Scn *refscn = elf_getscn (elf, shndx);
- GElf_Shdr refshdr_mem, *refshdr = gelf_getshdr (refscn, &refshdr_mem);
- if (refshdr == NULL)
- return DWFL_E_LIBELF;
-
- if (refshdr->sh_addr == 0 && (refshdr->sh_flags & SHF_ALLOC))
- {
- /* This is a loaded section. Find its actual
- address and update the section header. */
-
- if (*shstrndx == SHN_UNDEF
- && unlikely (elf_getshstrndx (elf, shstrndx) < 0))
- return DWFL_E_LIBELF;
-
- const char *name = elf_strptr (elf, *shstrndx, refshdr->sh_name);
- if (unlikely (name == NULL))
- return DWFL_E_LIBELF;
-
- if ((*mod->dwfl->callbacks->section_address) (MODCB_ARGS (mod),
- name, shndx, refshdr,
- &refshdr->sh_addr))
- return CBFAIL;
-
- if (refshdr->sh_addr == (Dwarf_Addr) -1l)
- /* The callback indicated this section wasn't really loaded but we
- don't really care. */
- refshdr->sh_addr = 0; /* Make no adjustment below. */
-
- /* Update the in-core file's section header to show the final
- load address (or unloadedness). This serves as a cache,
- so we won't get here again for the same section. */
- if (likely (refshdr->sh_addr != 0)
- && unlikely (! gelf_update_shdr (refscn, refshdr)))
- return DWFL_E_LIBELF;
- }
-
- /* Apply the adjustment. */
- *value += refshdr->sh_addr;
- return DWFL_E_NOERROR;
-}
-
-
-/* Cache used by relocate_getsym. */
-struct reloc_symtab_cache
-{
- Elf *symelf;
- Elf_Data *symdata;
- Elf_Data *symxndxdata;
- Elf_Data *symstrdata;
- size_t symshstrndx;
- size_t strtabndx;
-};
-#define RELOC_SYMTAB_CACHE(cache) \
- struct reloc_symtab_cache cache = \
- { NULL, NULL, NULL, NULL, SHN_UNDEF, SHN_UNDEF }
-
-/* This is just doing dwfl_module_getsym, except that we must always use
- the symbol table in RELOCATED itself when it has one, not MOD->symfile. */
-static Dwfl_Error
-relocate_getsym (Dwfl_Module *mod,
- Elf *relocated, struct reloc_symtab_cache *cache,
- int symndx, GElf_Sym *sym, GElf_Word *shndx)
-{
- if (cache->symdata == NULL)
- {
- if (mod->symfile == NULL || mod->symfile->elf != relocated)
- {
- /* We have to look up the symbol table in the file we are
- relocating, if it has its own. These reloc sections refer to
- the symbol table in this file, and a symbol table in the main
- file might not match. However, some tools did produce ET_REL
- .debug files with relocs but no symtab of their own. */
- Elf_Scn *scn = NULL;
- while ((scn = elf_nextscn (relocated, scn)) != NULL)
- {
- GElf_Shdr shdr_mem, *shdr = gelf_getshdr (scn, &shdr_mem);
- if (shdr != NULL)
- switch (shdr->sh_type)
- {
- default:
- continue;
- case SHT_SYMTAB:
- cache->symelf = relocated;
- cache->symdata = elf_getdata (scn, NULL);
- cache->strtabndx = shdr->sh_link;
- if (unlikely (cache->symdata == NULL))
- return DWFL_E_LIBELF;
- break;
- case SHT_SYMTAB_SHNDX:
- cache->symxndxdata = elf_getdata (scn, NULL);
- if (unlikely (cache->symxndxdata == NULL))
- return DWFL_E_LIBELF;
- break;
- }
- if (cache->symdata != NULL && cache->symxndxdata != NULL)
- break;
- }
- }
- if (cache->symdata == NULL)
- {
- /* We might not have looked for a symbol table file yet,
- when coming from __libdwfl_relocate_section. */
- if (unlikely (mod->symfile == NULL)
- && unlikely (INTUSE(dwfl_module_getsymtab) (mod) < 0))
- return dwfl_errno ();
-
- /* The symbol table we have already cached is the one from
- the file being relocated, so it's what we need. Or else
- this is an ET_REL .debug file with no .symtab of its own;
- the symbols refer to the section indices in the main file. */
- cache->symelf = mod->symfile->elf;
- cache->symdata = mod->symdata;
- cache->symxndxdata = mod->symxndxdata;
- cache->symstrdata = mod->symstrdata;
- }
- }
-
- if (unlikely (gelf_getsymshndx (cache->symdata, cache->symxndxdata,
- symndx, sym, shndx) == NULL))
- return DWFL_E_LIBELF;
-
- if (sym->st_shndx != SHN_XINDEX)
- *shndx = sym->st_shndx;
-
- switch (*shndx)
- {
- case SHN_ABS:
- case SHN_UNDEF:
- case SHN_COMMON:
- return DWFL_E_NOERROR;
- }
-
- return __libdwfl_relocate_value (mod, cache->symelf, &cache->symshstrndx,
- *shndx, &sym->st_value);
-}
-
-/* Handle an undefined symbol. We really only support ET_REL for Linux
- kernel modules, and offline archives. The behavior of the Linux module
- loader is very simple and easy to mimic. It only matches magically
- exported symbols, and we match any defined symbols. But we get the same
- answer except when the module's symbols are undefined and would prevent
- it from being loaded. */
-static Dwfl_Error
-resolve_symbol (Dwfl_Module *referer, struct reloc_symtab_cache *symtab,
- GElf_Sym *sym, GElf_Word shndx)
-{
- /* First we need its name. */
- if (sym->st_name != 0)
- {
- if (symtab->symstrdata == NULL)
- {
- /* Cache the strtab for this symtab. */
- assert (referer->symfile == NULL
- || referer->symfile->elf != symtab->symelf);
- symtab->symstrdata = elf_getdata (elf_getscn (symtab->symelf,
- symtab->strtabndx),
- NULL);
- if (unlikely (symtab->symstrdata == NULL))
- return DWFL_E_LIBELF;
- }
- if (unlikely (sym->st_name >= symtab->symstrdata->d_size))
- return DWFL_E_BADSTROFF;
-
- const char *name = symtab->symstrdata->d_buf;
- name += sym->st_name;
-
- for (Dwfl_Module *m = referer->dwfl->modulelist; m != NULL; m = m->next)
- if (m != referer)
- {
- /* Get this module's symtab.
- If we got a fresh error reading the table, report it.
- If we just have no symbols in this module, no harm done. */
- if (m->symdata == NULL
- && m->symerr == DWFL_E_NOERROR
- && INTUSE(dwfl_module_getsymtab) (m) < 0
- && m->symerr != DWFL_E_NO_SYMTAB)
- return m->symerr;
-
- for (size_t ndx = 1; ndx < m->syments; ++ndx)
- {
- sym = gelf_getsymshndx (m->symdata, m->symxndxdata,
- ndx, sym, &shndx);
- if (unlikely (sym == NULL))
- return DWFL_E_LIBELF;
- if (sym->st_shndx != SHN_XINDEX)
- shndx = sym->st_shndx;
-
- /* We are looking for a defined global symbol with a name. */
- if (shndx == SHN_UNDEF || shndx == SHN_COMMON
- || GELF_ST_BIND (sym->st_info) == STB_LOCAL
- || sym->st_name == 0)
- continue;
-
- /* Get this candidate symbol's name. */
- if (unlikely (sym->st_name >= m->symstrdata->d_size))
- return DWFL_E_BADSTROFF;
- const char *n = m->symstrdata->d_buf;
- n += sym->st_name;
-
- /* Does the name match? */
- if (strcmp (name, n))
- continue;
-
- /* We found it! */
- if (shndx == SHN_ABS)
- return DWFL_E_NOERROR;
-
- /* In an ET_REL file, the symbol table values are relative
- to the section, not to the module's load base. */
- size_t symshstrndx = SHN_UNDEF;
- return __libdwfl_relocate_value (m, m->symfile->elf,
- &symshstrndx,
- shndx, &sym->st_value);
- }
- }
- }
-
- return DWFL_E_RELUNDEF;
-}
-
-static Dwfl_Error
-relocate_section (Dwfl_Module *mod, Elf *relocated, const GElf_Ehdr *ehdr,
- size_t shstrndx, struct reloc_symtab_cache *reloc_symtab,
- Elf_Scn *scn, GElf_Shdr *shdr,
- Elf_Scn *tscn, bool debugscn, bool partial)
-{
- /* First, fetch the name of the section these relocations apply to. */
- GElf_Shdr tshdr_mem;
- GElf_Shdr *tshdr = gelf_getshdr (tscn, &tshdr_mem);
- const char *tname = elf_strptr (relocated, shstrndx, tshdr->sh_name);
- if (tname == NULL)
- return DWFL_E_LIBELF;
-
- if (debugscn && ! ebl_debugscn_p (mod->ebl, tname))
- /* This relocation section is not for a debugging section.
- Nothing to do here. */
- return DWFL_E_NOERROR;
-
- /* Fetch the section data that needs the relocations applied. */
- Elf_Data *tdata = elf_rawdata (tscn, NULL);
- if (tdata == NULL)
- return DWFL_E_LIBELF;
-
- /* Apply one relocation. Returns true for any invalid data. */
- Dwfl_Error relocate (GElf_Addr offset, const GElf_Sxword *addend,
- int rtype, int symndx)
- {
- /* First see if this is a reloc we can handle.
- If we are skipping it, don't bother resolving the symbol. */
- Elf_Type type = ebl_reloc_simple_type (mod->ebl, rtype);
- if (unlikely (type == ELF_T_NUM))
- return DWFL_E_BADRELTYPE;
-
- /* First, resolve the symbol to an absolute value. */
- GElf_Addr value;
-
- if (symndx == STN_UNDEF)
- /* When strip removes a section symbol referring to a
- section moved into the debuginfo file, it replaces
- that symbol index in relocs with STN_UNDEF. We
- don't actually need the symbol, because those relocs
- are always references relative to the nonallocated
- debugging sections, which start at zero. */
- value = 0;
- else
- {
- GElf_Sym sym;
- GElf_Word shndx;
- Dwfl_Error error = relocate_getsym (mod, relocated, reloc_symtab,
- symndx, &sym, &shndx);
- if (unlikely (error != DWFL_E_NOERROR))
- return error;
-
- if (shndx == SHN_UNDEF || shndx == SHN_COMMON)
- {
- /* Maybe we can figure it out anyway. */
- error = resolve_symbol (mod, reloc_symtab, &sym, shndx);
- if (error != DWFL_E_NOERROR)
- return error;
- }
-
- value = sym.st_value;
- }
-
- /* These are the types we can relocate. */
-#define TYPES DO_TYPE (BYTE, Byte); DO_TYPE (HALF, Half); \
- DO_TYPE (WORD, Word); DO_TYPE (SWORD, Sword); \
- DO_TYPE (XWORD, Xword); DO_TYPE (SXWORD, Sxword)
- size_t size;
- switch (type)
- {
-#define DO_TYPE(NAME, Name) \
- case ELF_T_##NAME: \
- size = sizeof (GElf_##Name); \
- break
- TYPES;
-#undef DO_TYPE
- default:
- return DWFL_E_BADRELTYPE;
- }
-
- if (offset + size > tdata->d_size)
- return DWFL_E_BADRELOFF;
-
-#define DO_TYPE(NAME, Name) GElf_##Name Name;
- union { TYPES; } tmpbuf;
-#undef DO_TYPE
- Elf_Data tmpdata =
- {
- .d_type = type,
- .d_buf = &tmpbuf,
- .d_size = size,
- .d_version = EV_CURRENT,
- };
- Elf_Data rdata =
- {
- .d_type = type,
- .d_buf = tdata->d_buf + offset,
- .d_size = size,
- .d_version = EV_CURRENT,
- };
-
- /* XXX check for overflow? */
- if (addend)
- {
- /* For the addend form, we have the value already. */
- value += *addend;
- switch (type)
- {
-#define DO_TYPE(NAME, Name) \
- case ELF_T_##NAME: \
- tmpbuf.Name = value; \
- break
- TYPES;
-#undef DO_TYPE
- default:
- abort ();
- }
- }
- else
- {
- /* Extract the original value and apply the reloc. */
- Elf_Data *d = gelf_xlatetom (relocated, &tmpdata, &rdata,
- ehdr->e_ident[EI_DATA]);
- if (d == NULL)
- return DWFL_E_LIBELF;
- assert (d == &tmpdata);
- switch (type)
- {
-#define DO_TYPE(NAME, Name) \
- case ELF_T_##NAME: \
- tmpbuf.Name += (GElf_##Name) value; \
- break
- TYPES;
-#undef DO_TYPE
- default:
- abort ();
- }
- }
-
- /* Now convert the relocated datum back to the target
- format. This will write into rdata.d_buf, which
- points into the raw section data being relocated. */
- Elf_Data *s = gelf_xlatetof (relocated, &rdata, &tmpdata,
- ehdr->e_ident[EI_DATA]);
- if (s == NULL)
- return DWFL_E_LIBELF;
- assert (s == &rdata);
-
- /* We have applied this relocation! */
- return DWFL_E_NOERROR;
- }
-
- /* Fetch the relocation section and apply each reloc in it. */
- Elf_Data *reldata = elf_getdata (scn, NULL);
- if (reldata == NULL)
- return DWFL_E_LIBELF;
-
- Dwfl_Error result = DWFL_E_NOERROR;
- bool first_badreltype = true;
- inline void check_badreltype (void)
- {
- if (first_badreltype)
- {
- first_badreltype = false;
- if (ebl_get_elfmachine (mod->ebl) == EM_NONE)
- /* This might be because ebl_openbackend failed to find
- any libebl_CPU.so library. Diagnose that clearly. */
- result = DWFL_E_UNKNOWN_MACHINE;
- }
- }
-
- size_t nrels = shdr->sh_size / shdr->sh_entsize;
- size_t complete = 0;
- if (shdr->sh_type == SHT_REL)
- for (size_t relidx = 0; !result && relidx < nrels; ++relidx)
- {
- GElf_Rel rel_mem, *r = gelf_getrel (reldata, relidx, &rel_mem);
- if (r == NULL)
- return DWFL_E_LIBELF;
- result = relocate (r->r_offset, NULL,
- GELF_R_TYPE (r->r_info),
- GELF_R_SYM (r->r_info));
- check_badreltype ();
- if (partial)
- switch (result)
- {
- case DWFL_E_NOERROR:
- /* We applied the relocation. Elide it. */
- memset (&rel_mem, 0, sizeof rel_mem);
- gelf_update_rel (reldata, relidx, &rel_mem);
- ++complete;
- break;
- case DWFL_E_BADRELTYPE:
- case DWFL_E_RELUNDEF:
- /* We couldn't handle this relocation. Skip it. */
- result = DWFL_E_NOERROR;
- break;
- default:
- break;
- }
- }
- else
- for (size_t relidx = 0; !result && relidx < nrels; ++relidx)
- {
- GElf_Rela rela_mem, *r = gelf_getrela (reldata, relidx,
- &rela_mem);
- if (r == NULL)
- return DWFL_E_LIBELF;
- result = relocate (r->r_offset, &r->r_addend,
- GELF_R_TYPE (r->r_info),
- GELF_R_SYM (r->r_info));
- check_badreltype ();
- if (partial)
- switch (result)
- {
- case DWFL_E_NOERROR:
- /* We applied the relocation. Elide it. */
- memset (&rela_mem, 0, sizeof rela_mem);
- gelf_update_rela (reldata, relidx, &rela_mem);
- ++complete;
- break;
- case DWFL_E_BADRELTYPE:
- case DWFL_E_RELUNDEF:
- /* We couldn't handle this relocation. Skip it. */
- result = DWFL_E_NOERROR;
- break;
- default:
- break;
- }
- }
-
- if (likely (result == DWFL_E_NOERROR))
- {
- if (!partial || complete == nrels)
- /* Mark this relocation section as being empty now that we have
- done its work. This affects unstrip -R, so e.g. it emits an
- empty .rela.debug_info along with a .debug_info that has
- already been fully relocated. */
- nrels = 0;
- else if (complete != 0)
- {
- /* We handled some of the relocations but not all.
- We've zeroed out the ones we processed.
- Now remove them from the section. */
-
- size_t next = 0;
- if (shdr->sh_type == SHT_REL)
- for (size_t relidx = 0; relidx < nrels; ++relidx)
- {
- GElf_Rel rel_mem;
- GElf_Rel *r = gelf_getrel (reldata, relidx, &rel_mem);
- if (r->r_info != 0 || r->r_offset != 0)
- {
- if (next != relidx)
- gelf_update_rel (reldata, next, r);
- ++next;
- }
- }
- else
- for (size_t relidx = 0; relidx < nrels; ++relidx)
- {
- GElf_Rela rela_mem;
- GElf_Rela *r = gelf_getrela (reldata, relidx, &rela_mem);
- if (r->r_info != 0 || r->r_offset != 0 || r->r_addend != 0)
- {
- if (next != relidx)
- gelf_update_rela (reldata, next, r);
- ++next;
- }
- }
- nrels = next;
- }
-
- shdr->sh_size = reldata->d_size = nrels * shdr->sh_entsize;
- gelf_update_shdr (scn, shdr);
- }
-
- return result;
-}
-
-Dwfl_Error
-internal_function
-__libdwfl_relocate (Dwfl_Module *mod, Elf *debugfile, bool debug)
-{
- assert (mod->e_type == ET_REL);
-
- GElf_Ehdr ehdr_mem;
- const GElf_Ehdr *ehdr = gelf_getehdr (debugfile, &ehdr_mem);
- if (ehdr == NULL)
- return DWFL_E_LIBELF;
-
- size_t d_shstrndx;
- if (elf_getshstrndx (debugfile, &d_shstrndx) < 0)
- return DWFL_E_LIBELF;
-
- RELOC_SYMTAB_CACHE (reloc_symtab);
-
- /* Look at each section in the debuginfo file, and process the
- relocation sections for debugging sections. */
- Dwfl_Error result = DWFL_E_NOERROR;
- Elf_Scn *scn = NULL;
- while (result == DWFL_E_NOERROR
- && (scn = elf_nextscn (debugfile, scn)) != NULL)
- {
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
-
- if ((shdr->sh_type == SHT_REL || shdr->sh_type == SHT_RELA)
- && shdr->sh_size != 0)
- {
- /* It's a relocation section. */
-
- Elf_Scn *tscn = elf_getscn (debugfile, shdr->sh_info);
- if (unlikely (tscn == NULL))
- result = DWFL_E_LIBELF;
- else
- result = relocate_section (mod, debugfile, ehdr, d_shstrndx,
- &reloc_symtab, scn, shdr, tscn,
- debug, !debug);
- }
- }
-
- return result;
-}
-
-Dwfl_Error
-internal_function
-__libdwfl_relocate_section (Dwfl_Module *mod, Elf *relocated,
- Elf_Scn *relocscn, Elf_Scn *tscn, bool partial)
-{
- GElf_Ehdr ehdr_mem;
- GElf_Shdr shdr_mem;
-
- RELOC_SYMTAB_CACHE (reloc_symtab);
-
- size_t shstrndx;
- if (elf_getshstrndx (relocated, &shstrndx) < 0)
- return DWFL_E_LIBELF;
-
- return (__libdwfl_module_getebl (mod)
- ?: relocate_section (mod, relocated,
- gelf_getehdr (relocated, &ehdr_mem), shstrndx,
- &reloc_symtab,
- relocscn, gelf_getshdr (relocscn, &shdr_mem),
- tscn, false, partial));
-}
diff --git a/libdwfl/segment.c b/libdwfl/segment.c
deleted file mode 100644
index cb520e6..0000000
--- a/libdwfl/segment.c
+++ /dev/null
@@ -1,322 +0,0 @@
-/* Manage address space lookup table for libdwfl.
- Copyright (C) 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include "libdwflP.h"
-
-static GElf_Addr
-segment_start (Dwfl *dwfl, GElf_Addr start)
-{
- if (dwfl->segment_align > 1)
- start &= -dwfl->segment_align;
- return start;
-}
-
-static GElf_Addr
-segment_end (Dwfl *dwfl, GElf_Addr end)
-{
- if (dwfl->segment_align > 1)
- end = (end + dwfl->segment_align - 1) & -dwfl->segment_align;
- return end;
-}
-
-static bool
-insert (Dwfl *dwfl, size_t i, GElf_Addr start, GElf_Addr end, int segndx)
-{
- bool need_start = (i == 0 || dwfl->lookup_addr[i - 1] != start);
- bool need_end = (i >= dwfl->lookup_elts || dwfl->lookup_addr[i + 1] != end);
- size_t need = need_start + need_end;
- if (need == 0)
- return false;
-
- if (dwfl->lookup_alloc - dwfl->lookup_elts < need)
- {
- size_t n = dwfl->lookup_alloc == 0 ? 16 : dwfl->lookup_alloc * 2;
- GElf_Addr *naddr = realloc (dwfl->lookup_addr, sizeof naddr[0] * n);
- if (unlikely (naddr == NULL))
- return true;
- int *nsegndx = realloc (dwfl->lookup_segndx, sizeof nsegndx[0] * n);
- if (unlikely (nsegndx == NULL))
- {
- if (naddr != dwfl->lookup_addr)
- free (naddr);
- return true;
- }
- dwfl->lookup_alloc = n;
- dwfl->lookup_addr = naddr;
- dwfl->lookup_segndx = nsegndx;
-
- if (dwfl->lookup_module != NULL)
- {
- /* Make sure this array is big enough too. */
- Dwfl_Module **old = dwfl->lookup_module;
- dwfl->lookup_module = realloc (dwfl->lookup_module,
- sizeof dwfl->lookup_module[0] * n);
- if (unlikely (dwfl->lookup_module == NULL))
- {
- free (old);
- return true;
- }
- }
- }
-
- if (unlikely (i < dwfl->lookup_elts))
- {
- memcpy (&dwfl->lookup_addr[i + need], &dwfl->lookup_addr[i],
- need * sizeof dwfl->lookup_addr[0]);
- memcpy (&dwfl->lookup_segndx[i + need], &dwfl->lookup_segndx[i],
- need * sizeof dwfl->lookup_segndx[0]);
- if (dwfl->lookup_module != NULL)
- memcpy (&dwfl->lookup_module[i + need], &dwfl->lookup_module[i],
- need * sizeof dwfl->lookup_module[0]);
- }
-
- if (need_start)
- {
- dwfl->lookup_addr[i] = start;
- dwfl->lookup_segndx[i] = segndx;
- ++i;
- }
- else
- dwfl->lookup_segndx[i - 1] = segndx;
-
- if (need_end)
- {
- dwfl->lookup_addr[i] = end;
- dwfl->lookup_segndx[i] = -1;
- }
-
- dwfl->lookup_elts += need;
-
- return false;
-}
-
-static int
-lookup (Dwfl *dwfl, GElf_Addr address, int hint)
-{
- if (hint >= 0
- && address >= dwfl->lookup_addr[hint]
- && ((size_t) hint + 1 == dwfl->lookup_elts
- || address <= dwfl->lookup_addr[hint + 1]))
- return hint;
-
- /* Do binary search on the array indexed by module load address. */
- size_t l = 0, u = dwfl->lookup_elts;
- while (l < u)
- {
- size_t idx = (l + u) / 2;
- if (address < dwfl->lookup_addr[idx])
- u = idx;
- else
- {
- l = idx + 1;
- if (l == dwfl->lookup_elts || address < dwfl->lookup_addr[l])
- return idx;
- }
- }
-
- return -1;
-}
-
-static bool
-reify_segments (Dwfl *dwfl)
-{
- int hint = -1;
- for (Dwfl_Module *mod = dwfl->modulelist; mod != NULL; mod = mod->next)
- if (! mod->gc)
- {
- const GElf_Addr start = segment_start (dwfl, mod->low_addr);
- const GElf_Addr end = segment_end (dwfl, mod->high_addr);
-
- int idx = lookup (dwfl, start, hint);
- if (unlikely (idx < 0))
- {
- /* Module starts below any segment. Insert a low one. */
- if (unlikely (insert (dwfl, 0, start, end, -1)))
- return true;
- idx = 0;
- }
- else if (dwfl->lookup_addr[idx] > start)
- {
- /* The module starts in the middle of this segment. Split it. */
- if (unlikely (insert (dwfl, idx + 1, start, end,
- dwfl->lookup_segndx[idx])))
- return true;
- ++idx;
- }
- else if (dwfl->lookup_addr[idx] < start)
- {
- /* The module starts past the end of this segment.
- Add a new one. */
- if (unlikely (insert (dwfl, idx + 1, start, end, -1)))
- return true;
- ++idx;
- }
-
- if ((size_t) idx + 1 < dwfl->lookup_elts
- && end < dwfl->lookup_addr[idx + 1]
- /* The module ends in the middle of this segment. Split it. */
- && unlikely (insert (dwfl, idx + 1,
- end, dwfl->lookup_addr[idx + 1], -1)))
- return true;
-
- if (dwfl->lookup_module == NULL)
- {
- dwfl->lookup_module = calloc (dwfl->lookup_alloc,
- sizeof dwfl->lookup_module[0]);
- if (unlikely (dwfl->lookup_module == NULL))
- return true;
- }
-
- /* Cache a backpointer in the module. */
- mod->segment = idx;
-
- /* Put MOD in the table for each segment that's inside it. */
- do
- dwfl->lookup_module[idx++] = mod;
- while ((size_t) idx < dwfl->lookup_elts
- && dwfl->lookup_addr[idx] < end);
- hint = (size_t) idx < dwfl->lookup_elts ? idx : -1;
- }
-
- return false;
-}
-
-int
-dwfl_addrsegment (Dwfl *dwfl, Dwarf_Addr address, Dwfl_Module **mod)
-{
- if (unlikely (dwfl == NULL))
- return -1;
-
- if (unlikely (dwfl->lookup_module == NULL)
- && mod != NULL
- && unlikely (reify_segments (dwfl)))
- {
- __libdwfl_seterrno (DWFL_E_NOMEM);
- return -1;
- }
-
- int idx = lookup (dwfl, address, -1);
- if (likely (mod != NULL))
- {
- if (unlikely (idx < 0) || unlikely (dwfl->lookup_module == NULL))
- *mod = NULL;
- else
- {
- *mod = dwfl->lookup_module[idx];
-
- /* If this segment does not have a module, but the address is
- the upper boundary of the previous segment's module, use that. */
- if (*mod == NULL && idx > 0 && dwfl->lookup_addr[idx] == address)
- {
- *mod = dwfl->lookup_module[idx - 1];
- if (*mod != NULL && (*mod)->high_addr != address)
- *mod = NULL;
- }
- }
- }
-
- if (likely (idx >= 0))
- /* Translate internal segment table index to user segment index. */
- idx = dwfl->lookup_segndx[idx];
-
- return idx;
-}
-INTDEF (dwfl_addrsegment)
-
-int
-dwfl_report_segment (Dwfl *dwfl, int ndx, const GElf_Phdr *phdr, GElf_Addr bias,
- const void *ident)
-{
- if (dwfl == NULL)
- return -1;
-
- if (ndx < 0)
- ndx = dwfl->lookup_tail_ndx;
-
- if (phdr->p_align > 1 && (dwfl->segment_align <= 1 ||
- phdr->p_align < dwfl->segment_align))
- dwfl->segment_align = phdr->p_align;
-
- if (unlikely (dwfl->lookup_module != NULL))
- {
- free (dwfl->lookup_module);
- dwfl->lookup_module = NULL;
- }
-
- GElf_Addr start = segment_start (dwfl, bias + phdr->p_vaddr);
- GElf_Addr end = segment_end (dwfl, bias + phdr->p_vaddr + phdr->p_memsz);
-
- /* Coalesce into the last one if contiguous and matching. */
- if (ndx != dwfl->lookup_tail_ndx
- || ident == NULL
- || ident != dwfl->lookup_tail_ident
- || start != dwfl->lookup_tail_vaddr
- || phdr->p_offset != dwfl->lookup_tail_offset)
- {
- /* Normally just appending keeps us sorted. */
-
- size_t i = dwfl->lookup_elts;
- while (i > 0 && unlikely (start < dwfl->lookup_addr[i - 1]))
- --i;
-
- if (unlikely (insert (dwfl, i, start, end, ndx)))
- {
- __libdwfl_seterrno (DWFL_E_NOMEM);
- return -1;
- }
- }
-
- dwfl->lookup_tail_ident = ident;
- dwfl->lookup_tail_vaddr = end;
- dwfl->lookup_tail_offset = end - bias - phdr->p_vaddr + phdr->p_offset;
- dwfl->lookup_tail_ndx = ndx + 1;
-
- return ndx;
-}
-INTDEF (dwfl_report_segment)
diff --git a/libebl/Android.mk b/libebl/Android.mk
deleted file mode 100755
index 3147ce8..0000000
--- a/libebl/Android.mk
+++ /dev/null
@@ -1,119 +0,0 @@
-# Copyright (C) 2012 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-LOCAL_PATH := $(call my-dir)
-
-supported_platforms := linux-x86 darwin-x86
-cur_platform := $(filter $(HOST_OS)-$(HOST_ARCH),$(supported_platforms))
-
-ifdef cur_platform
-
-#
-# host libebl
-#
-#
-include $(CLEAR_VARS)
-
-LIBEBL_SRC_FILES := \
- eblauxvinfo.c \
- eblbackendname.c \
- eblbsspltp.c \
- eblcheckobjattr.c \
- ebl_check_special_section.c \
- ebl_check_special_symbol.c \
- eblclosebackend.c \
- eblcopyrelocp.c \
- eblcorenote.c \
- eblcorenotetypename.c \
- ebldebugscnp.c \
- ebldynamictagcheck.c \
- ebldynamictagname.c \
- eblelfclass.c \
- eblelfdata.c \
- eblelfmachine.c \
- eblgotpcreloccheck.c \
- eblgstrtab.c \
- eblmachineflagcheck.c \
- eblmachineflagname.c \
- eblmachinesectionflagcheck.c \
- eblnonerelocp.c \
- eblobjecttypename.c \
- eblobjnote.c \
- eblobjnotetypename.c \
- eblopenbackend.c \
- eblosabiname.c \
- eblreginfo.c \
- eblrelativerelocp.c \
- eblrelocsimpletype.c \
- eblreloctypecheck.c \
- eblreloctypename.c \
- eblrelocvaliduse.c \
- eblretval.c \
- eblsectionname.c \
- eblsectionstripp.c \
- eblsectiontypename.c \
- eblshflagscombine.c \
- eblstrtab.c \
- eblsymbolbindingname.c \
- eblsymboltypename.c \
- ebl_syscall_abi.c \
- eblsysvhashentrysize.c
-
-LOCAL_SRC_FILES := $(LIBEBL_SRC_FILES)
-
-LOCAL_C_INCLUDES := \
- $(LOCAL_PATH)/.. \
- $(LOCAL_PATH)/../lib \
- $(LOCAL_PATH)/../libebl \
- $(LOCAL_PATH)/../libasm \
- $(LOCAL_PATH)/../libelf \
- $(LOCAL_PATH)/../libdw
-
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/../host-$(HOST_OS)-fixup
-
-LOCAL_CFLAGS += -DHAVE_CONFIG_H -std=gnu99 -D_GNU_SOURCE
-
-LOCAL_CFLAGS += -include $(LOCAL_PATH)/../host-$(HOST_OS)-fixup/AndroidFixup.h
-
-LOCAL_MODULE:= libebl
-
-include $(BUILD_HOST_STATIC_LIBRARY)
-
-#
-# target libebl
-#
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(LIBEBL_SRC_FILES)
-
-LOCAL_C_INCLUDES := \
- $(LOCAL_PATH)/.. \
- $(LOCAL_PATH)/../lib \
- $(LOCAL_PATH)/../libebl \
- $(LOCAL_PATH)/../libasm \
- $(LOCAL_PATH)/../libelf \
- $(LOCAL_PATH)/../libdw
-
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/../bionic-fixup
-
-LOCAL_CFLAGS += -include $(LOCAL_PATH)/../bionic-fixup/AndroidFixup.h
-
-LOCAL_CFLAGS += -DHAVE_CONFIG_H -std=gnu99 -Werror
-
-LOCAL_MODULE:= libebl
-
-include $(BUILD_STATIC_LIBRARY)
-
-endif #cur_platform
diff --git a/libebl/ChangeLog b/libebl/ChangeLog
deleted file mode 100644
index 51b3b70..0000000
--- a/libebl/ChangeLog
+++ /dev/null
@@ -1,781 +0,0 @@
-2008-08-01 Roland McGrath <roland@redhat.com>
-
- * eblcorenotetypename.c: Handle NT_386_IOPERM.
-
-2008-07-28 Roland McGrath <roland@redhat.com>
-
- * eblauxvinfo.c (AUXV_TYPES): Add EXECFN.
-
- * eblauxvinfo.c (ebl_auxv_info): Handle missing elements of standard
- table.
-
-2008-07-04 Roland McGrath <roland@redhat.com>
-
- * libebl.h: Declare ebl_syscall_abi.
- * ebl_syscall_abi.c: New file.
- * Makefile.am (gen_SOURCES): Add it.
- * ebl-hooks.h: New hook syscall_abi.
- * eblopenbackend.c (default_syscall_abi): New function.
- (fill_defaults): Use it.
-
-2008-03-31 Roland McGrath <roland@redhat.com>
-
- * ebldynamictagname.c (ebl_dynamic_tag_name): Use hex for unknown tag.
-
- * ebl-hooks.h: Add check_special_section hook.
- * eblopenbackend.c (fill_defaults): Set new hook to ...
- (default_check_special_section): ... this, new function.
- * ebl_check_special_section.c: New file.
- * Makefile.am (gen_SOURCES): Add it.
- * libebl.h: Declare it.
-
-2008-02-20 Roland McGrath <roland@redhat.com>
-
- * libebl.h: Declare ebl_check_object_attribute.
- * eblcheckobjattr.c: New file.
- * Makefile.am (gen_SOURCES): Add it.
- * ebl-hooks.h: Add check_object_attribute hook.
- * eblopenbackend.c (default_check_object_attribute): New function.
- (fill_defaults): Initialize pointer to it.
-
-2008-02-19 Roland McGrath <roland@redhat.com>
-
- * eblsectiontypename.c (ebl_section_type_name):
- Handle SHT_GNU_ATTRIBUTES.
-
-2008-02-08 Roland McGrath <roland@redhat.com>
-
- * eblcorenotetypename.c (ebl_core_note_type_name): Handle NT_PPC_SPE.
-
-2008-01-30 Roland McGrath <roland@redhat.com>
-
- * eblcorenotetypename.c (ebl_core_note_type_name): Handle NT_386_TLS.
-
-2007-10-18 Roland McGrath <roland@redhat.com>
-
- * eblcorenotetypename.c (ebl_core_note_type_name): Handle NT_PPC_VMX.
-
-2007-10-11 Roland McGrath <roland@redhat.com>
-
- * eblobjnote.c (ebl_object_note): Translate target format (byte-swap)
- for NT_GNU_ABI_TAG contents.
-
-2007-08-22 Roland McGrath <roland@redhat.com>
-
- * libebl.h (Ebl_Core_Item): New member `group'.
-
-2007-08-19 Roland McGrath <roland@redhat.com>
-
- * ebl-hooks.h: Add new hook auxv_info.
- * eblopenbackend.c (default_auxv_info): New function.
- (fill_defaults): Initialize auxv_info hook.
- * eblauxvinfo.c : New file.
- * Makefile.am (gen_SOURCES): Add it.
- * libebl.h: Declare ebl_auxv_info.
-
- * eblcorenote.c: Rewritten with new signature.
- * Makefile.am (gen_SOURCES): Add it.
- * libebl.h (Ebl_Register_Location, Ebl_Core_Item): New types.
- (ebl_core_note_info): Completely revamp signature.
- * ebl-hooks.h: Update decl.
- * eblopenbackend.c (default_core_note): Update signature.
-
-2007-07-09 Roland McGrath <roland@redhat.com>
-
- * eblobjnotetypename.c (ebl_object_note_type_name): Handle
- NT_GNU_HWCAP, NT_GNU_BUILD_ID.
-
- * eblobjnote.c (ebl_object_note): Handle NT_GNU_BUILD_ID.
-
-2007-04-22 Roland McGrath <roland@redhat.com>
-
- * eblcorenotetypename.c (ebl_core_note_type_name): Handle NT_PRXFPREG.
-
-2007-03-10 Roland McGrath <roland@redhat.com>
-
- * eblcorenote.c (ebl_core_note): For normally-zero types,
- print in hex if not zero.
-
-2007-01-11 Roland McGrath <roland@redhat.com>
-
- * ebl-hooks.h (machine_section_flag_check): New hook.
- * libebl.h: Declare ebl_machine_section_flag_check.
- * eblmachinesectionflagcheck.c: New file.
- * Makefile.am (gen_SOURCES): Add it.
- * eblopenbackend.c (default_machine_section_flag_check): New function.
- (fill_defaults): Use it.
-
-2006-09-04 Roland McGrath <roland@redhat.com>
-
- * ebl-hooks.h: Replace register_name hook with register_info.
- Also yield natural bit width and base type encoding.
- * eblopenbackend.c (default_register_name): Renamed
- default_register_info, new args added.
- (fill_defaults): Update initialization.
- * eblregname.c: File renamed ...
- * eblreginfo.c: ... to this.
- (ebl_register_name): Renamed to ebl_register_info, new args added.
- * libebl.h: Update decl.
-
- * Makefile.am (gen_SOURCES): Update list.
-
-2006-07-06 Ulrich Drepper <drepper@redhat.com>
-
- * ebldynamictagname.c: Add support for DT_GNU_HASH.
- * ebldynamictagcheck.c: Likewise.
- * eblsectiontypename.c: Add support for SHT_GNU_HASH.
-
-2006-07-05 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am (gen_SOURCES): Add eblsysvhashentrysize.c.
- * libeblP.h (struct ebl): Add sysvhash_entrysize element.
- * eblopenbackend.c (fill_defaults): Initialize sysvhash_entrysize.
-
- * eblopenbackend.c (openbackend): If possible, fill machine, class,
- and data values in from the ELF file.
-
-2006-07-04 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am (gen_SOURCES): Add eblrelativerelocp.c.
- * eblrelativerelocp.c: New file.
- * ebl-hooks.c: Add relative_reloc_p.
- * eblopenbackend.c (default_relative_reloc_p): New function.
- (fill_defaults): Hook it up.
- * libebl.h: Declare ebl_relative_reloc_p.
-
-2006-06-12 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am (gen_SOURCES): Add eblnonerelocp.c.
- * eblnonerelocp.c: New file.
- * ebl-hooks.c: Add none_reloc_p.
- * eblopenbackend.c (default_none_reloc_p): New function.
- (fill_defaults): Hook it up.
- * libebl.h: Declare ebl_none_reloc_p.
-
-2006-05-27 Ulrich Drepper <drepper@redhat.com>
-
- * libebl.h: Add extern "C".
-
-2005-11-25 Roland McGrath <roland@redhat.com>
-
- * eblregname.c: New file.
- * Makefile.am (gen_SOURCES): Add it.
- * ebl-hooks.h: Declare register_name hook.
- * libebl.h: Declare ebl_register_name.
- * eblopenbackend.c (default_register_name): New function.
- (fill_defaults): Use it.
-
-2005-11-16 Roland McGrath <roland@redhat.com>
-
- * libebl.h: Use "" for elf-knowledge.h, not <>.
-
-2005-11-15 Roland McGrath <roland@redhat.com>
-
- * Makefile.am: Removed everything for building libebl_*.so modules,
- now in ../backends/Makefile.am instead.
- * alpha_init.c: Moved to ../backends.
- * alpha_reloc.def: Likewise.
- * alpha_retval.c: Likewise.
- * alpha_symbol.c: Likewise.
- * arm_init.c: Likewise.
- * arm_reloc.def: Likewise.
- * arm_symbol.c: Likewise.
- * common-reloc.c: Likewise.
- * i386_corenote.c: Likewise.
- * i386_init.c: Likewise.
- * i386_reloc.def: Likewise.
- * i386_retval.c: Likewise.
- * i386_symbol.c: Likewise.
- * ia64_init.c: Likewise.
- * ia64_reloc.def: Likewise.
- * ia64_symbol.c: Likewise.
- * libebl_CPU.h: Likewise.
- * ppc64_init.c: Likewise.
- * ppc64_reloc.def: Likewise.
- * ppc64_retval.c: Likewise.
- * ppc64_symbol.c: Likewise.
- * ppc_init.c: Likewise.
- * ppc_reloc.def: Likewise.
- * ppc_retval.c: Likewise.
- * ppc_symbol.c: Likewise.
- * s390_init.c: Likewise.
- * s390_reloc.def: Likewise.
- * s390_symbol.c: Likewise.
- * sh_init.c: Likewise.
- * sh_reloc.def: Likewise.
- * sh_symbol.c: Likewise.
- * sparc_init.c: Likewise.
- * sparc_reloc.def: Likewise.
- * sparc_symbol.c: Likewise.
- * x86_64_corenote.c: Likewise.
- * x86_64_init.c: Likewise.
- * x86_64_reloc.def: Likewise.
- * x86_64_retval.c: Likewise.
- * x86_64_symbol.c: Likewise.
-
- * libebl.h: Comment fixes.
-
- * alpha_retval.c: New file.
- * Makefile.am (alpha_SRCS): Add it.
- * alpha_init.c (alpha_init): Initialize return_value_location hook.
-
- * ppc64_retval.c: New file.
- * Makefile.am (ppc64_SRCS): Add it.
- * ppc64_init.c (ppc64_init): Initialize return_value_location hook.
-
- * ppc_retval.c: New file.
- * Makefile.am (ppc_SRCS): Add it.
- * ppc_init.c (ppc_init): Initialize return_value_location hook.
-
-2005-11-14 Roland McGrath <roland@redhat.com>
-
- * ia64_init.c (ia64_init): Initialize EH->reloc_simple_type.
- * sh_init.c (sh_init): Likewise.
- * x86_64_init.c (x86_64_init): Likewise.
-
- * sparc_symbol.c (sparc_reloc_simple_type): New function.
- * sparc_init.c (sparc_init): Use it.
-
- * arm_symbol.c (arm_reloc_simple_type): New function.
- * arm_init.c (arm_init): Use it.
-
- * alpha_symbol.c (alpha_reloc_simple_type): New function.
- * alpha_init.c (alpha_init): Use it.
-
- * ia64_reloc.def: Update bits per H. J. Lu <hjl@lucon.org>.
-
- * arm_reloc.def: Update bits per Daniel Jacobowitz <drow@false.org>.
-
- * alpha_reloc.def: Update bits per Richard Henderson <rth@redhat.com>.
-
-2005-11-13 Roland McGrath <roland@redhat.com>
-
- * x86_64_retval.c: New file.
- * Makefile.am (x86_64_SRCS): Add it.
- * x86_64_init.c (x86_64_init): Use x86_64_return_value_location.
-
- * i386_retval.c: New file.
- * Makefile.am (i386_SRCS): Add it.
- (libdw): New variable.
- (libebl_%.so): Use $(libdw) in link; use --as-needed.
- * i386_init.c (i386_init): Use i386_return_value_location.
-
- * eblretval.c: New file.
- * Makefile.am (gen_SOURCES): Add it.
- (INCLUDES): Search in libdw.
- * libebl.h: Include <libdw.h>. Declare ebl_return_value_location.
- * ebl-hooks.h: Declare return_value_location hook.
- * eblopenbackend.c (default_return_value_location): New function.
- (fill_defaults): Use it.
-
-2005-11-10 Roland McGrath <roland@redhat.com>
-
- * s390_init.c: New file.
- * s390_reloc.def: New file.
- * s390_symbol.c: New file.
- * Makefile.am (modules, libebl_pic): Add s390.
- (s390_SRCS, libebl_s390_pic_a_SOURCES): New variables.
- (am_libebl_s390_pic_a_OBJECTS): New variable.
-
- * ppc64_init.c: Use common-reloc.c.
- * ppc64_symbol.c (ppc64_backend_name): Removed.
- (ppc64_reloc_type_check, ppc64_reloc_type_name): Likewise.
- (ppc64_copy_reloc_p, ppc64_reloc_valid_use): Likewise.
-
- * ppc_init.c: Use common-reloc.c.
- * ppc_symbol.c (ppc_backend_name): Removed.
- (ppc_reloc_type_name, ppc_reloc_type_check): Likewise.
- (ppc_reloc_valid_use, ppc_copy_reloc_p): Likewise.
-
- * sparc_init.c: Use common-reloc.c.
- * sparc_symbol.c (sparc_backend_name): Removed.
- (sparc_reloc_type_name, sparc_reloc_type_check): Likewise.
- (sparc_copy_reloc_p): Likewise.
-
- * arm_init.c: Use common-reloc.c.
- * arm_symbol.c (arm_backend_name): Removed.
- (arm_reloc_type_name, arm_reloc_type_check, arm_copy_reloc_p): Removed.
-
- * alpha_init.c: Use common-reloc.c.
- * alpha_symbol.c (alpha_backend_name): Removed.
- (alpha_reloc_type_name, alpha_reloc_type_check): Likewise.
- (alpha_copy_reloc_p): Likewise.
-
- * ia64_symbol.c (ia64_backend_name): Removed.
- (ia64_reloc_type_name, ia64_reloc_type_check): Likewise.
- (ia64_copy_reloc_p): Likewise.
-
- * x86_64_init.c: Use common-reloc.c.
- * x86_64_symbol.c (x86_64_backend_name): Removed.
- (x86_64_copy_reloc_p, x86_64_reloc_valid_use): Likewise.
- (x86_64_reloc_type_check, x86_64_reloc_type_name): Likewise.
-
- * sh_init.c: Use common-reloc.c.
- * sh_symbol.c: All functions removed.
- (sh_reloc_simple_type): New function.
- (sh_gotpc_reloc_check): New function.
-
- * common-reloc.c: New file.
- * Makefile.am (noinst_HEADERS): Add it.
- * i386_init.c: Include it.
-
- * sh_reloc.def: New file.
- * i386_reloc.def: New file.
- * alpha_reloc.def: New file.
- * arm_reloc.def: New file.
- * i386_reloc.def: New file.
- * ia64_reloc.def: New file.
- * ppc64_reloc.def: New file.
- * ppc_reloc.def: New file.
- * sh_reloc.def: New file.
- * sparc_reloc.def: New file.
- * x86_64_reloc.def: New file.
- * Makefile.am (EXTRA_DIST): Add $(modules:=_reloc.def).
-
- * libebl_alpha.map: Removed.
- * libebl_ia64.map: Removed.
- * libebl_ppc.map: Removed.
- * libebl_sparc.map: Removed.
- * libebl_arm.map: Removed.
- * libebl_i386.map: Removed.
- * libebl_ppc64.map: Removed.
- * libebl_sh.map: Removed.
- * libebl_x86_64.map: Removed.
- * Makefile.am (EXTRA_DIST): Remove them.
- (libebl_%.map, libebl_%.so): New pattern rules.
-
- * libebl_alpha.h: Removed.
- * libebl_ia64.h: Removed.
- * libebl_ppc.h: Removed.
- * libebl_sparc.h: Removed.
- * libebl_arm.h: Removed.
- * libebl_i386.h: Removed.
- * libebl_ppc64.h: Removed.
- * libebl_sh.h: Removed.
- * libebl_x86_64.h: Removed.
- * Makefile.am (noinst_HEADERS): Remove them.
-
- * x86_64_corenote.c: Use libebl_CPU.h instead.
- * x86_64_symbol.c: Likewise.
- * i386_corenote.c: Likewise.
-
-2005-11-09 Roland McGrath <roland@redhat.com>
-
- * ia64_symbol.c (ia64_reloc_simple_type): New function.
-
- * ebl-hooks.h (reloc_simple_type): Take the Ebl handle, not Elf handle.
- * eblrelocsimpletype.c (ebl_reloc_simple_type): Update caller.
- * eblopenbackend.c (default_reloc_simple_type): Update signature.
- * i386_symbol.c (i386_reloc_simple_type): Likewise.
- * ppc64_symbol.c (ppc64_reloc_simple_type): Likewise.
- * ppc_symbol.c (ppc_reloc_simple_type): Likewise.
- * x86_64_symbol.c (x86_64_reloc_simple_type): Likewise.
-
- * i386_symbol.c (i386_backend_name): Removed.
- (i386_reloc_type_name, i386_reloc_type_check): Likewise.
- (i386_reloc_valid_use): Removed.
- (i386_copy_reloc_p): Removed.
-
- * alpha_destr.c: Removed.
- * arm_destr.c: Removed.
- * i386_destr.c: Removed.
- * ia64_destr.c: Removed.
- * ppc64_destr.c: Removed.
- * ppc_destr.c: Removed.
- * sh_destr.c: Removed.
- * sparc_destr.c: Removed.
- * x86_64_destr.c: Removed.
-
- * ebl-hooks.h: New file, broken out of ...
- * libeblP.h (struct ebl): ... here. #include that for hook
- declarations, after defining EBLHOOK macro.
- * libebl_CPU.h: New file.
- * Makefile.am (noinst_HEADERS): Add them.
-
- * libeblP.h (struct ebl): Use uint_fast16_t for machine,
- and uint_fast8_t for class and data.
-
-2005-08-14 Roland McGrath <roland@redhat.com>
-
- * ia64_symbol.c (ia64_section_type_name): New function.
- (ia64_dynamic_tag_check): New function.
- (ia64_reloc_valid_use): New function.
- * libebl_ia64.h: Declare them.
- * ia64_init.c (ia64_init): Use them.
- * Makefile.am (libebl_ia64.so): Link with libelf.
-
-2005-08-28 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: Use $(LINK) not $(CC) when creating DSOs.
-
-2005-08-13 Roland McGrath <roland@redhat.com>
-
- * ia64_symbol.c (ia64_machine_flag_check): New function.
- * libebl_ia64.h: Declare it.
- * ia64_init.c (ia64_init): Use it.
-
-2005-08-13 Ulrich Drepper <drepper@redhat.com>
-
- * libebl.h: Add ehdr parameter to ebl_bss_plt_p and
- ebl_check_special_symbol.
- * libeblP.h (struct ebl): Adjust callback functions.
- * eblopenbackend.c: Adjust dummy functions.
- * ebl_check_special_symbol.c: Add parameter and pass it on.
- * eblbsspltp.c: Likewise.
- * ppc_symbol.c (find_dyn_got): With ehdr passed, simplify search for
- the dynamic section entry.
- (ppc_check_special_symbol): Add ehdr parameter.
- (ppc_bss_plt_p): Likewise.
- * libebl_ppc.h: Adjust prototypes.
- * ppc64_symbol.c (ppc_check_special_symbol): Add ehdr parameter.
- (ppc_bss_plt_p): Likewise.
- * libebl_ppc64.h: Adjust prototypes.
-
-2005-08-12 Roland McGrath <roland@redhat.com>
-
- * ppc_symbol.c (find_dyn_got): New function, broken out of ...
- (ppc_bss_plt_p): ... here. Call that.
- (ppc_check_special_symbol): Use find_dyn_got to fetch value to check
- against _GLOBAL_OFFSET_TABLE_.
-
- * libeblP.h (struct ebl): Add bss_plt_p hook.
- * eblopenbackend.c (default_bss_plt_p): New function.
- (fill_defaults): Use it.
- * eblbsspltp.c: New file.
- * Makefile.am (gen_SOURCES): Add it.
- * libebl.h: Declare ebl_bss_plt_p.
- * ppc_symbol.c (ppc_bss_plt_p): New function.
- * libebl_ppc.h: Declare it.
- * ppc_init.c (ppc_init): Use it.
- * ppc64_symbol.c (ppc64_bss_plt_p): New function.
- * libebl_ppc64.h: Declare it.
- * ppc64_init.c (ppc64_init): Use it.
-
- * ebl_check_special_symbol.c: New file.
- * Makefile.am (gen_SOURCES): Add it.
- * libebl.h: Declare ebl_check_special_symbol.
- * libeblP.h (struct ebl): Add check_special_symbol hook.
- * eblopenbackend.c (default_check_special_symbol): New function.
- (fill_defaults): Use it.
- * ppc_symbol.c (ppc_check_special_symbol): New function.
- * libebl_ppc.h: Add prototype.
- * ppc_init.c (ppc_init): Use it.
- * ppc64_symbol.c (ppc64_check_special_symbol): New function.
- * libebl_ppc64.h: Add prototype.
- * ppc64_init.c (ppc64_init): Use it.
-
-2005-08-07 Ulrich Drepper <drepper@redhat.com>
-
- * ppc_init.c: Add support for new DT_PPC_* and R_PPC_* values.
- * ppc_symbol.c: Likewise.
- * libebl_ppc.h: Likewise.
- * ppc64_init.c: There is now also a dynamic_tag_check functions
- * ppc64_symbol.c: Add dynamic_tag_check.
- * libebl_ppc64.h: Add prototype.
- * alpha_init.c: Add support for new DT_ALPHA_* value.
- * alpha_symbol.c: Likewise.
- * libebl_alpha.h: Likewise.
-
-2005-08-03 Ulrich Drepper <drepper@redhat.com>
-
- * libebl_alpha.map: Remove unnecessary exports.
- * libebl_arm.map: Likewise.
- * libebl_i386.map: Likewise.
- * libebl_ia64.map: Likewise.
- * libebl_ppc.map: Likewise.
- * libebl_ppc64.map: Likewise.
- * libebl_sh.map: Likewise.
- * libebl_sparc.map: Likewise.
- * libebl_x86_64.map: Likewise.
-
-2005-08-02 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am (libebl_a_SOURCES): Add eblelfclass.c, eblelfdata.c,
- and eblelfmachine.c.
- * elbopenbackend.c (machines): Add class and data fields. Initialize
- them.
- (ebl_openbackend): Initialize machine, class, data fields in result.
- * libebl.h: Declare Add eblelfclass, eblelfdata, and eblelfmachine.
- * libeblP.h (Ebl): Add machine, class, data fields.
-
-2005-07-23 Ulrich Drepper <drepper@redhat.com>
-
- * eblsectionstripp.c: New file.
- * Makefile.am (gen_SOURCES): Add eblsectionstripp.c.
- * i386_init.c (i386_init): Install specific debugscn_p callback.
- * i386_symbol.c (i386_debugscn_p): New function.
- * libebl.h: Declare ebl_section_strip_p.
- * libebl_i386.h: Declare i386_debugscn_p.
-
- * libebl.h: Move Ebl definition to...
- * libeblP.h: ...here.
-
-2005-07-21 Roland McGrath <roland@redhat.com>
-
- * Makefile.am (install-ebl-modules): New target, commands from ...
- (install): ... here. Make this depend on it.
- (LIBEBL_SUBDIR): New variable, substituted by configure.
- (install-ebl-modules): Install in $(libdir)/$(LIBEBL_SUBDIR).
- * eblopenbackend.c (openbackend): Use LIBEBL_SUBDIR in module name.
-
-2005-07-21 Ulrich Drepper <drepper@redhat.com>
-
- * eblcopyrelocp.c: New file.
- * Makefile.am (gen_SOURCES): Add eblcopyrelocp.c.
- * libebl.h: Declare ebl_copy_reloc_p.
- * eblopenbackend.c (fill_defaults): Fill in copy_reloc_p.
- (default_copy_reloc_p): New function.
- * alpha_init.c: Define and use arch-specific copy_reloc_p function.
- * alpha_symbol.c: Likewise.
- * arm_init.c: Likewise.
- * arm_symbol.c: Likewise.
- * i386_init.c: Likewise.
- * i386_symbol.c: Likewise.
- * ia64_init.c: Likewise.
- * ia64_symbol.c: Likewise.
- * ppc64_init.c: Likewise.
- * ppc64_symbol.c: Likewise.
- * ppc_init.c: Likewise.
- * ppc_symbol.c: Likewise.
- * sh_init.c: Likewise.
- * sh_symbol.c: Likewise.
- * sparc_init.c: Likewise.
- * sparc_symbol.c: Likewise.
- * x86_64_init.c: Likewise.
- * x86_64_symbol.c: Likewise.
- * libebl_alpha.h: Declare the copy_reloc_p function.
- * libebl_arm.h: Likewise.
- * libebl_i386.h: Likewise.
- * libebl_ia64.h: Likewise.
- * libebl_ppc.h: Likewise.
- * libebl_ppc64.h: Likewise.
- * libebl_sh.h: Likewise.
- * libebl_sparc.h: Likewise.
- * libebl_x86_64.h: Likewise.
-
-2005-05-31 Roland McGrath <roland@redhat.com>
-
- * Makefile.am (libebl_*_so_SOURCES): Set to $(*_SRCS) so dependency
- tracking works right.
-
-2005-05-21 Ulrich Drepper <drepper@redhat.com>
-
- * libebl_x86_64.map: Add x86_64_core_note.
-
-2005-05-19 Roland McGrath <roland@redhat.com>
-
- * libebl_i386.map: Add i386_reloc_valid_use, i386_reloc_simple_type.
- * libebl_ppc.map: Add ppc_reloc_simple_type.
- * libebl_ppc64.map: Add ppc64_reloc_simple_type.
- * libebl_x86_64.map: Add x86_64_reloc_simple_type.
-
-2005-05-11 Ulrich Drepper <drepper@redhat.com>
-
- * eblcorenote.c: Handle new AT_* values and files with different
- endianess.
- * Makefile.am (x86_64_SRCS): Add x86_64_corenote.c.
- * x86-64_corenote.c: New file.
- * x86_64_init.c: Hook in x86_64_corenote.
- * i386_corenote.c: Make file usable on 64-bit platforms.
-
- * eblopenbackend.c: If modules version comparison fails, reinitialize
- hooks.
-
-2005-05-10 Ulrich Drepper <drepper@redhat.com>
-
- * eblopenbackend.c: Require the init function to return a string.
- Compare it with MODVERSION from config.h.
- * alpha_init.c: Change return type. Return MODVERSION or NULL.
- * arm_init.c: Likewise.
- * eblopenbackend.c: Likewise.
- * i386_init.c: Likewise.
- * ia64_init.c: Likewise.
- * ppc64_init.c: Likewise.
- * ppc_init.c: Likewise.
- * sh_init.c: Likewise.
- * sparc_init.c: Likewise.
- * x86_64_init.c: Likewise.
- * libeblP.h: Adjust ebl_bhinit_t.
- * libebl_alpha.h: Adjust init function prototype.
- * libebl_arm.h: Likewise.
- * libebl_i386.h: Likewise.
- * libebl_ia64.h: Likewise.
- * libebl_ppc.h: Likewise.
- * libebl_ppc64.h: Likewise.
- * libebl_sh.h: Likewise.
- * libebl_sparc.h: Likewise.
- * libebl_x86_64.h: Likewise.
-
- * mips_destr.c: Removed.
- * mips_init.c: Removed.
- * mips_symbol.c: Removed.
- * libebl_mips.h: Removed.
- * libebl_mips.map: Removed.
-
-2005-05-03 Roland McGrath <roland@redhat.com>
-
- * libebl.h (Ebl): Add `reloc_simple_type' member.
- * eblopenbackend.c (default_reloc_simple_type): New function.
- (openbackend): Use that as default reloc_simple_type callback.
- * eblrelocsimpletype.c: New file.
- * Makefile.am (gen_SOURCES): Add it.
- * i386_symbol.c (i386_reloc_simple_type): New function.
- * libebl_i386.h: Declare it.
- * i386_init.c (i386_init): Use it.
- * x86_64_symbol.c (x86_64_reloc_simple_type): New function.
- * libebl_x86_64.h: Declare it.
- * x86_64_init.c (x86_64_init): Use it.
- * ppc_symbol.c (ppc_reloc_simple_type): New function.
- * libebl_ppc.h: Declare it.
- * ppc_init.c (ppc_init): Use it.
- * ppc64_symbol.c (ppc64_reloc_simple_type): New function.
- * libebl_ppc64.h: Declare it.
- * ppc64_init.c (ppc64_init): Use it.
-
-2005-03-17 Ulrich Drepper <drepper@redhat.com>
-
- * eblcorenote.c (ebl_core_note): Add support for AT_SECURE.
-
-2005-02-15 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am (AM_CFLAGS): Add -Wformat=2.
-
-2005-02-14 Ulrich Drepper <drepper@redhat.com>
-
- * alpha_destr.c: Add __attribute__((unused)) where needed.
- * alpha_init.c: Likewise.
- * alpha_symbol.c: Likewise.
- * arm_destr.c: Likewise.
- * arm_init.c: Likewise.
- * arm_symbol.c: Likewise.
- * i386_corenote.c: Likewise.
- * i386_destr.c: Likewise.
- * i386_init.c: Likewise.
- * i386_symbol.c: Likewise.
- * ia64_destr.c: Likewise.
- * ia64_init.c: Likewise.
- * ia64_symbol.c: Likewise.
- * mips_destr.c: Likewise.
- * mips_init.c: Likewise.
- * mips_symbol.c: Likewise.
- * ppc64_destr.c: Likewise.
- * ppc64_init.c: Likewise.
- * ppc64_symbol.c: Likewise.
- * ppc_destr.c: Likewise.
- * ppc_init.c: Likewise.
- * ppc_symbol.c: Likewise.
- * sh_destr.c: Likewise.
- * sh_init.c: Likewise.
- * sh_symbol.c: Likewise.
- * sparc_destr.c: Likewise.
- * sparc_init.c: Likewise.
- * sparc_symbol.c: Likewise.
- * x86_64_destr.c: Likewise.
- * x86_64_init.c: Likewise.
- * x86_64_symbol.c: Likewise.
-
- * x86_64_symbol.c (reloc_map_table): Fix entries for R_X86_64_64
- and R_X86_64_32..
-
-2005-02-06 Ulrich Drepper <drepper@redhat.com>
-
- * eblstrtab.c: A few cleanups.
-
- * eblopenbackend.c: Mark unused parameters.
-
- * eblgstrtab.c: Cleanups a few printf format strings.
-
- * Makefile.am: Cleanup AM_CFLAGS handling. Add -Wunused -Wextra.
-
-2005-02-05 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: Check for text relocations in constructed DSOs.
-
- * eblstrtab.c: Minor cleanups.
-
- * Makefile.am (AM_CFLAGS): Add -std=gnu99 and -fmudflap for MUDFLAP.
-
-2004-08-16 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am (AM_CFLAGS): Add LIBSTR definition with base name of
- the lib directory.
- * eblopenbackend.c (openbackend): Use LIBSTR instead of hardcoded
- lib in path to ebl modules.
-
-2004-04-01 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: Add rules for ppc and ppc64 ebl module.
- * ppc_init..c: New file.
- * ppc_destr.c: New file.
- * ppc_symbol.c: New file.
- * libebl_ppc.h: New file.
- * libebl_ppc.map: New file.
- * ppc64_init..c: New file.
- * ppc64_destr.c: New file.
- * ppc64_symbol.c: New file.
- * libebl_ppc64.h: New file.
- * libebl_ppc64.map: New file.
-
-2004-01-20 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: Support building with mudflap.
-
-2004-01-18 Ulrich Drepper <drepper@redhat.com>
-
- * libeblP.h (_): Use elfutils domain.
-
-2004-01-16 Ulrich Drepper <drepper@redhat.com>
-
- * eblsectionname.c: Add support for SHN_BEFORE and SHN_AFTER.
-
-2004-01-13 Ulrich Drepper <drepper@redhat.com>
-
- * eblsegmenttypename.c ((ebl_segment_type_name): Add support for
- PT_GNU_RELRO.
-
-2004-01-08 Ulrich Drepper <drepper@redhat.com>
-
- * libebl.h: Remove last traces of libtool.
-
-2004-01-05 Ulrich Drepper <drepper@redhat.com>
-
- * elf-knowledge.h: Move to libelf subdir.
-
- * Makefile.am (EXTRA_DIST): Remove libebl.map.
- * libebl.map: Removed.
-
-2003-12-08 Ulrich Drepper <drepper@redhat.com>
-
- * eblsectiontypename.c (ebl_section_type_name): Add support for
- SHT_SUNW_move, SHT_CHECKSUM, and SHT_GNU_LIBLIST.
-
-2003-11-19 Ulrich Drepper <drepper@redhat.com>
-
- * ia64_symbol.c (ia64_dynamic_tag_name): New function.
- * libebl_ia64.h (ia64_dynamic_tag_name): Declare.
- * ia64_init.c (ia64_init): Register i164_dynamic_tag_name.
-
-2003-09-24 Ulrich Drepper <drepper@redhat.com>
-
- * ia64_init.c (ia64_init): Initialize segment_type_name callback.
- * ia64_symbol.c (ia64_segment_type_name): Define.
- * libebl_ia64.h (ia64_segment_type_name): Declare.
-
-2003-09-22 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am (AM_CFLAGS): Add -fpic.
-
-2003-08-14 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am (install): Remove dependency on libebl.so.
-
-2003-08-13 Ulrich Drepper <drepper@redhat.com>
-
- * eblopenbackend.c: Adjust relative path to arch-specific DSOs
- assuming the code ends up in the application. Add second dlopen()
- try without any path, just the filename.
- * Makefile.in: Remove rules to build and install libebl.so.
-
-2003-08-11 Ulrich Drepper <drepper@redhat.com>
-
- * Moved to CVS archive.
diff --git a/libebl/Makefile.am b/libebl/Makefile.am
deleted file mode 100644
index c4e4a07..0000000
--- a/libebl/Makefile.am
+++ /dev/null
@@ -1,77 +0,0 @@
-## Process this file with automake to create Makefile.in
-##
-## Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007,2008 Red Hat, Inc.
-## This file is part of Red Hat elfutils.
-##
-## Red Hat elfutils is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by the
-## Free Software Foundation; version 2 of the License.
-##
-## Red Hat elfutils 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
-## General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License along
-## with Red Hat elfutils; if not, write to the Free Software Foundation,
-## Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-##
-## Red Hat elfutils is an included package of the Open Invention Network.
-## An included package of the Open Invention Network is a package for which
-## Open Invention Network licensees cross-license their patents. No patent
-## license is granted, either expressly or impliedly, by designation as an
-## included package. Should you wish to participate in the Open Invention
-## Network licensing program, please visit www.openinventionnetwork.com
-## <http://www.openinventionnetwork.com>.
-##
-DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H -DOBJDIR=\"$(shell pwd)\"
-if MUDFLAP
-AM_CFLAGS = -fmudflap
-else
-AM_CFLAGS =
-endif
-AM_CFLAGS += -fpic -Wall -Wshadow -Werror -Wunused -Wextra -Wformat=2 \
- -std=gnu99
-
-INCLUDES = -I$(srcdir) -I$(top_srcdir)/libelf -I$(top_srcdir)/libdw \
- -I$(top_srcdir)/lib -I.. -I$(srcdir)/../libasm
-VERSION = 1
-PACKAGE_VERSION = @PACKAGE_VERSION@
-LIBEBL_SUBDIR = @LIBEBL_SUBDIR@
-
-lib_LIBRARIES = libebl.a
-
-pkginclude_HEADERS = libebl.h
-
-gen_SOURCES = eblopenbackend.c eblclosebackend.c eblstrtab.c \
- eblreloctypename.c eblsegmenttypename.c \
- eblsectiontypename.c eblmachineflagname.c \
- eblsymboltypename.c ebldynamictagname.c eblsectionname.c \
- eblobjecttypename.c eblsymbolbindingname.c \
- eblbackendname.c eblshflagscombine.c eblwstrtab.c \
- eblgstrtab.c eblosabiname.c \
- eblmachineflagcheck.c eblmachinesectionflagcheck.c \
- eblreloctypecheck.c eblrelocvaliduse.c eblrelocsimpletype.c \
- ebldynamictagcheck.c eblcorenotetypename.c eblobjnotetypename.c \
- eblcorenote.c eblobjnote.c ebldebugscnp.c \
- eblgotpcreloccheck.c eblcopyrelocp.c eblsectionstripp.c \
- eblelfclass.c eblelfdata.c eblelfmachine.c \
- ebl_check_special_symbol.c eblbsspltp.c eblretval.c \
- eblreginfo.c eblnonerelocp.c eblrelativerelocp.c \
- eblsysvhashentrysize.c eblauxvinfo.c eblcheckobjattr.c \
- ebl_check_special_section.c ebl_syscall_abi.c
-
-libebl_a_SOURCES = $(gen_SOURCES)
-
-
-%.os: %.c %.o
- if $(COMPILE) -c -o $@ -fpic -DPIC -DSHARED -MT $@ -MD -MP \
- -MF "$(DEPDIR)/$*.Tpo" `test -f '$<' || echo '$(srcdir)/'`$<; \
- then cat "$(DEPDIR)/$*.Tpo" >> "$(DEPDIR)/$*.Po"; \
- rm -f "$(DEPDIR)/$*.Tpo"; \
- else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
- fi
-
-noinst_HEADERS = libeblP.h ebl-hooks.h
-
-CLEANFILES = $(am_libebl_pic_a_OBJECTS) *.gcno *.gcda
diff --git a/libebl/Makefile.in b/libebl/Makefile.in
deleted file mode 100644
index 5f1228b..0000000
--- a/libebl/Makefile.in
+++ /dev/null
@@ -1,579 +0,0 @@
-# Makefile.in generated by automake 1.10.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = libebl
-DIST_COMMON = $(noinst_HEADERS) $(pkginclude_HEADERS) \
- $(srcdir)/Makefile.am $(srcdir)/Makefile.in ChangeLog
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
- $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
- *) f=$$p;; \
- esac;
-am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgincludedir)"
-libLIBRARIES_INSTALL = $(INSTALL_DATA)
-LIBRARIES = $(lib_LIBRARIES)
-AR = ar
-ARFLAGS = cru
-libebl_a_AR = $(AR) $(ARFLAGS)
-libebl_a_LIBADD =
-am__objects_1 = eblopenbackend.$(OBJEXT) eblclosebackend.$(OBJEXT) \
- eblstrtab.$(OBJEXT) eblreloctypename.$(OBJEXT) \
- eblsegmenttypename.$(OBJEXT) eblsectiontypename.$(OBJEXT) \
- eblmachineflagname.$(OBJEXT) eblsymboltypename.$(OBJEXT) \
- ebldynamictagname.$(OBJEXT) eblsectionname.$(OBJEXT) \
- eblobjecttypename.$(OBJEXT) eblsymbolbindingname.$(OBJEXT) \
- eblbackendname.$(OBJEXT) eblshflagscombine.$(OBJEXT) \
- eblwstrtab.$(OBJEXT) eblgstrtab.$(OBJEXT) \
- eblosabiname.$(OBJEXT) eblmachineflagcheck.$(OBJEXT) \
- eblmachinesectionflagcheck.$(OBJEXT) \
- eblreloctypecheck.$(OBJEXT) eblrelocvaliduse.$(OBJEXT) \
- eblrelocsimpletype.$(OBJEXT) ebldynamictagcheck.$(OBJEXT) \
- eblcorenotetypename.$(OBJEXT) eblobjnotetypename.$(OBJEXT) \
- eblcorenote.$(OBJEXT) eblobjnote.$(OBJEXT) \
- ebldebugscnp.$(OBJEXT) eblgotpcreloccheck.$(OBJEXT) \
- eblcopyrelocp.$(OBJEXT) eblsectionstripp.$(OBJEXT) \
- eblelfclass.$(OBJEXT) eblelfdata.$(OBJEXT) \
- eblelfmachine.$(OBJEXT) ebl_check_special_symbol.$(OBJEXT) \
- eblbsspltp.$(OBJEXT) eblretval.$(OBJEXT) eblreginfo.$(OBJEXT) \
- eblnonerelocp.$(OBJEXT) eblrelativerelocp.$(OBJEXT) \
- eblsysvhashentrysize.$(OBJEXT) eblauxvinfo.$(OBJEXT) \
- eblcheckobjattr.$(OBJEXT) ebl_check_special_section.$(OBJEXT) \
- ebl_syscall_abi.$(OBJEXT)
-am_libebl_a_OBJECTS = $(am__objects_1)
-libebl_a_OBJECTS = $(am_libebl_a_OBJECTS)
-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-SOURCES = $(libebl_a_SOURCES)
-DIST_SOURCES = $(libebl_a_SOURCES)
-pkgincludeHEADERS_INSTALL = $(INSTALL_HEADER)
-HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEBUGPRED = @DEBUGPRED@
-DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H -DOBJDIR=\"$(shell pwd)\"
-DEPDIR = @DEPDIR@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EXEEXT = @EXEEXT@
-GMSGFMT = @GMSGFMT@
-GMSGFMT_015 = @GMSGFMT_015@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LDFLAGS = @LDFLAGS@
-LEX = @LEX@
-LEXLIB = @LEXLIB@
-LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
-LIBEBL_SUBDIR = @LIBEBL_SUBDIR@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LOCALEDIR = @LOCALEDIR@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MKDIR_P = @MKDIR_P@
-MODVERSION = @MODVERSION@
-MSGFMT = @MSGFMT@
-MSGFMT_015 = @MSGFMT_015@
-MSGMERGE = @MSGMERGE@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-RANLIB = @RANLIB@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-USE_NLS = @USE_NLS@
-VERSION = 1
-XGETTEXT = @XGETTEXT@
-XGETTEXT_015 = @XGETTEXT_015@
-YACC = @YACC@
-YFLAGS = @YFLAGS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-base_cpu = @base_cpu@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-eu_version = @eu_version@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-@MUDFLAP_FALSE@AM_CFLAGS = -fpic -Wall -Wshadow -Werror -Wunused \
-@MUDFLAP_FALSE@ -Wextra -Wformat=2 -std=gnu99
-@MUDFLAP_TRUE@AM_CFLAGS = -fmudflap -fpic -Wall -Wshadow -Werror \
-@MUDFLAP_TRUE@ -Wunused -Wextra -Wformat=2 -std=gnu99
-INCLUDES = -I$(srcdir) -I$(top_srcdir)/libelf -I$(top_srcdir)/libdw \
- -I$(top_srcdir)/lib -I.. -I$(srcdir)/../libasm
-
-lib_LIBRARIES = libebl.a
-pkginclude_HEADERS = libebl.h
-gen_SOURCES = eblopenbackend.c eblclosebackend.c eblstrtab.c \
- eblreloctypename.c eblsegmenttypename.c \
- eblsectiontypename.c eblmachineflagname.c \
- eblsymboltypename.c ebldynamictagname.c eblsectionname.c \
- eblobjecttypename.c eblsymbolbindingname.c \
- eblbackendname.c eblshflagscombine.c eblwstrtab.c \
- eblgstrtab.c eblosabiname.c \
- eblmachineflagcheck.c eblmachinesectionflagcheck.c \
- eblreloctypecheck.c eblrelocvaliduse.c eblrelocsimpletype.c \
- ebldynamictagcheck.c eblcorenotetypename.c eblobjnotetypename.c \
- eblcorenote.c eblobjnote.c ebldebugscnp.c \
- eblgotpcreloccheck.c eblcopyrelocp.c eblsectionstripp.c \
- eblelfclass.c eblelfdata.c eblelfmachine.c \
- ebl_check_special_symbol.c eblbsspltp.c eblretval.c \
- eblreginfo.c eblnonerelocp.c eblrelativerelocp.c \
- eblsysvhashentrysize.c eblauxvinfo.c eblcheckobjattr.c \
- ebl_check_special_section.c ebl_syscall_abi.c
-
-libebl_a_SOURCES = $(gen_SOURCES)
-noinst_HEADERS = libeblP.h ebl-hooks.h
-CLEANFILES = $(am_libebl_pic_a_OBJECTS) *.gcno *.gcda
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
- && exit 0; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits libebl/Makefile'; \
- cd $(top_srcdir) && \
- $(AUTOMAKE) --gnits libebl/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-install-libLIBRARIES: $(lib_LIBRARIES)
- @$(NORMAL_INSTALL)
- test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
- @list='$(lib_LIBRARIES)'; for p in $$list; do \
- if test -f $$p; then \
- f=$(am__strip_dir) \
- echo " $(libLIBRARIES_INSTALL) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
- $(libLIBRARIES_INSTALL) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
- else :; fi; \
- done
- @$(POST_INSTALL)
- @list='$(lib_LIBRARIES)'; for p in $$list; do \
- if test -f $$p; then \
- p=$(am__strip_dir) \
- echo " $(RANLIB) '$(DESTDIR)$(libdir)/$$p'"; \
- $(RANLIB) "$(DESTDIR)$(libdir)/$$p"; \
- else :; fi; \
- done
-
-uninstall-libLIBRARIES:
- @$(NORMAL_UNINSTALL)
- @list='$(lib_LIBRARIES)'; for p in $$list; do \
- p=$(am__strip_dir) \
- echo " rm -f '$(DESTDIR)$(libdir)/$$p'"; \
- rm -f "$(DESTDIR)$(libdir)/$$p"; \
- done
-
-clean-libLIBRARIES:
- -test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES)
-libebl.a: $(libebl_a_OBJECTS) $(libebl_a_DEPENDENCIES)
- -rm -f libebl.a
- $(libebl_a_AR) libebl.a $(libebl_a_OBJECTS) $(libebl_a_LIBADD)
- $(RANLIB) libebl.a
-
-mostlyclean-compile:
- -rm -f *.$(OBJEXT)
-
-distclean-compile:
- -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ebl_check_special_section.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ebl_check_special_symbol.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ebl_syscall_abi.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblauxvinfo.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblbackendname.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblbsspltp.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblcheckobjattr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblclosebackend.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblcopyrelocp.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblcorenote.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblcorenotetypename.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ebldebugscnp.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ebldynamictagcheck.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ebldynamictagname.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblelfclass.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblelfdata.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblelfmachine.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblgotpcreloccheck.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblgstrtab.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblmachineflagcheck.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblmachineflagname.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblmachinesectionflagcheck.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblnonerelocp.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblobjecttypename.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblobjnote.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblobjnotetypename.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblopenbackend.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblosabiname.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblreginfo.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblrelativerelocp.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblrelocsimpletype.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblreloctypecheck.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblreloctypename.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblrelocvaliduse.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblretval.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblsectionname.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblsectionstripp.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblsectiontypename.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblsegmenttypename.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblshflagscombine.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblstrtab.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblsymbolbindingname.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblsymboltypename.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblsysvhashentrysize.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblwstrtab.Po@am__quote@
-
-.c.o:
-@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
-
-.c.obj:
-@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
-install-pkgincludeHEADERS: $(pkginclude_HEADERS)
- @$(NORMAL_INSTALL)
- test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)"
- @list='$(pkginclude_HEADERS)'; for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- f=$(am__strip_dir) \
- echo " $(pkgincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgincludedir)/$$f'"; \
- $(pkgincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgincludedir)/$$f"; \
- done
-
-uninstall-pkgincludeHEADERS:
- @$(NORMAL_UNINSTALL)
- @list='$(pkginclude_HEADERS)'; for p in $$list; do \
- f=$(am__strip_dir) \
- echo " rm -f '$(DESTDIR)$(pkgincludedir)/$$f'"; \
- rm -f "$(DESTDIR)$(pkgincludedir)/$$f"; \
- done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- mkid -fID $$unique
-tags: TAGS
-
-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- here=`pwd`; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$tags $$unique; \
- fi
-ctags: CTAGS
-CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- test -z "$(CTAGS_ARGS)$$tags$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$tags $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && cd $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) $$here
-
-distclean-tags:
- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- list='$(DISTFILES)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
- fi; \
- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
- else \
- test -f $(distdir)/$$file \
- || cp -p $$d/$$file $(distdir)/$$file \
- || exit 1; \
- fi; \
- done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LIBRARIES) $(HEADERS)
-installdirs:
- for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgincludedir)"; do \
- test -z "$$dir" || $(MKDIR_P) "$$dir"; \
- done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libLIBRARIES mostlyclean-am
-
-distclean: distclean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
- distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-info: info-am
-
-info-am:
-
-install-data-am: install-pkgincludeHEADERS
-
-install-dvi: install-dvi-am
-
-install-exec-am: install-libLIBRARIES
-
-install-html: install-html-am
-
-install-info: install-info-am
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-ps: install-ps-am
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-libLIBRARIES uninstall-pkgincludeHEADERS
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
- clean-libLIBRARIES ctags distclean distclean-compile \
- distclean-generic distclean-tags distdir dvi dvi-am html \
- html-am info info-am install install-am install-data \
- install-data-am install-dvi install-dvi-am install-exec \
- install-exec-am install-html install-html-am install-info \
- install-info-am install-libLIBRARIES install-man install-pdf \
- install-pdf-am install-pkgincludeHEADERS install-ps \
- install-ps-am install-strip installcheck installcheck-am \
- installdirs maintainer-clean maintainer-clean-generic \
- mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \
- ps ps-am tags uninstall uninstall-am uninstall-libLIBRARIES \
- uninstall-pkgincludeHEADERS
-
-
-%.os: %.c %.o
- if $(COMPILE) -c -o $@ -fpic -DPIC -DSHARED -MT $@ -MD -MP \
- -MF "$(DEPDIR)/$*.Tpo" `test -f '$<' || echo '$(srcdir)/'`$<; \
- then cat "$(DEPDIR)/$*.Tpo" >> "$(DEPDIR)/$*.Po"; \
- rm -f "$(DEPDIR)/$*.Tpo"; \
- else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
- fi
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/libebl/ebl-hooks.h b/libebl/ebl-hooks.h
deleted file mode 100644
index 2db1e20..0000000
--- a/libebl/ebl-hooks.h
+++ /dev/null
@@ -1,172 +0,0 @@
-/* Backend hook signatures internal interface for libebl.
- Copyright (C) 2000,2001,2002,2004,2005,2006,2007,2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-/* Return symbol representaton of object file type. */
-const char *EBLHOOK(object_type_name) (int, char *, size_t);
-
-/* Return symbolic representation of relocation type. */
-const char *EBLHOOK(reloc_type_name) (int, char *, size_t);
-
-/* Check relocation type. */
-bool EBLHOOK(reloc_type_check) (int);
-
-/* Check if relocation type is for simple absolute relocations. */
-Elf_Type EBLHOOK(reloc_simple_type) (Ebl *, int);
-
-/* Check relocation type use. */
-bool EBLHOOK(reloc_valid_use) (Elf *, int);
-
-/* Return true if the symbol type is that referencing the GOT. */
-bool EBLHOOK(gotpc_reloc_check) (Elf *, int);
-
-/* Return symbolic representation of segment type. */
-const char *EBLHOOK(segment_type_name) (int, char *, size_t);
-
-/* Return symbolic representation of section type. */
-const char *EBLHOOK(section_type_name) (int, char *, size_t);
-
-/* Return section name. */
-const char *EBLHOOK(section_name) (int, int, char *, size_t);
-
-/* Return next machine flag name. */
-const char *EBLHOOK(machine_flag_name) (GElf_Word *);
-
-/* Check whether machine flags are valid. */
-bool EBLHOOK(machine_flag_check) (GElf_Word);
-
-/* Check whether SHF_MASKPROC flag bits are valid. */
-bool EBLHOOK(machine_section_flag_check) (GElf_Xword);
-
-/* Check whether the section with the given index, header, and name
- is a special machine section that is valid despite a combination
- of flags or other details that are not generically valid. */
-bool EBLHOOK(check_special_section) (Ebl *, int,
- const GElf_Shdr *, const char *);
-
-/* Return symbolic representation of symbol type. */
-const char *EBLHOOK(symbol_type_name) (int, char *, size_t);
-
-/* Return symbolic representation of symbol binding. */
-const char *EBLHOOK(symbol_binding_name) (int, char *, size_t);
-
-/* Return symbolic representation of dynamic tag. */
-const char *EBLHOOK(dynamic_tag_name) (int64_t, char *, size_t);
-
-/* Check dynamic tag. */
-bool EBLHOOK(dynamic_tag_check) (int64_t);
-
-/* Combine section header flags values. */
-GElf_Word EBLHOOK(sh_flags_combine) (GElf_Word, GElf_Word);
-
-/* Return symbolic representation of OS ABI. */
-const char *EBLHOOK(osabi_name) (int, char *, size_t);
-
-/* Name of a note entry type for core files. */
-const char *EBLHOOK(core_note_type_name) (uint32_t, char *, size_t);
-
-/* Name of a note entry type for object files. */
-const char *EBLHOOK(object_note_type_name) (uint32_t, char *, size_t);
-
-/* Describe core note format. */
-int EBLHOOK(core_note) (GElf_Word, GElf_Word, GElf_Word *, size_t *,
- const Ebl_Register_Location **,
- size_t *, const Ebl_Core_Item **);
-
-/* Handle object file note. */
-bool EBLHOOK(object_note) (const char *, uint32_t, uint32_t, const char *);
-
-/* Check object attribute. */
-bool EBLHOOK(check_object_attribute) (Ebl *, const char *, int, uint64_t,
- const char **, const char **);
-
-/* Describe auxv element type. */
-int EBLHOOK(auxv_info) (GElf_Xword, const char **, const char **);
-
-/* Check section name for being that of a debug informatino section. */
-bool EBLHOOK(debugscn_p) (const char *);
-
-/* Check whether given relocation is a copy relocation. */
-bool EBLHOOK(copy_reloc_p) (int);
-
-/* Check whether given relocation is a no-op relocation. */
-bool EBLHOOK(none_reloc_p) (int);
-
-/* Check whether given relocation is a relative relocation. */
-bool EBLHOOK(relative_reloc_p) (int);
-
-/* Check whether given symbol's value is ok despite normal checks. */
-bool EBLHOOK(check_special_symbol) (Elf *, GElf_Ehdr *, const GElf_Sym *,
- const char *, const GElf_Shdr *);
-
-/* Check if backend uses a bss PLT in this file. */
-bool EBLHOOK(bss_plt_p) (Elf *, GElf_Ehdr *);
-
-/* Return location expression to find return value given the
- DW_AT_type DIE of a DW_TAG_subprogram DIE. */
-int EBLHOOK(return_value_location) (Dwarf_Die *functypedie,
- const Dwarf_Op **locp);
-
-/* Return register name information. */
-ssize_t EBLHOOK(register_info) (Ebl *ebl,
- int regno, char *name, size_t namelen,
- const char **prefix, const char **setname,
- int *bits, int *type);
-
-/* Return system call ABI registers. */
-int EBLHOOK(syscall_abi) (Ebl *ebl, int *sp, int *pc,
- int *callno, int args[6]);
-
-/* Disassembler function. */
-int EBLHOOK(disasm) (const uint8_t **startp, const uint8_t *end,
- GElf_Addr addr, const char *fmt, DisasmOutputCB_t outcb,
- DisasmGetSymCB_t symcb, void *outcbarg, void *symcbarg);
-
-
-/* Destructor for ELF backend handle. */
-void EBLHOOK(destr) (struct ebl *);
diff --git a/libebl/ebl_check_special_section.c b/libebl/ebl_check_special_section.c
deleted file mode 100644
index d1f3c6e..0000000
--- a/libebl/ebl_check_special_section.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Check for a special section allowed to violate generic constraints.
- Copyright (C) 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libeblP.h>
-
-
-bool
-ebl_check_special_section (ebl, ndx, shdr, sname)
- Ebl *ebl;
- int ndx;
- const GElf_Shdr *shdr;
- const char *sname;
-{
- return ebl != NULL && ebl->check_special_section (ebl, ndx, shdr, sname);
-}
diff --git a/libebl/ebl_check_special_symbol.c b/libebl/ebl_check_special_symbol.c
deleted file mode 100644
index 875ed1c..0000000
--- a/libebl/ebl_check_special_symbol.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Check special symbol's st_value.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <inttypes.h>
-#include <libeblP.h>
-
-
-bool
-ebl_check_special_symbol (ebl, ehdr, sym, name, destshdr)
- Ebl *ebl;
- GElf_Ehdr *ehdr;
- const GElf_Sym *sym;
- const char *name;
- const GElf_Shdr *destshdr;
-{
- if (ebl == NULL)
- return false;
-
- return ebl->check_special_symbol (ebl->elf, ehdr, sym, name, destshdr);
-}
diff --git a/libebl/ebl_syscall_abi.c b/libebl/ebl_syscall_abi.c
deleted file mode 100644
index 2d9a26b..0000000
--- a/libebl/ebl_syscall_abi.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Return system call ABI mapped to DWARF register numbers.
- Copyright (C) 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libeblP.h>
-
-
-int
-ebl_syscall_abi (ebl, sp, pc, callno, args)
- Ebl *ebl;
- int *sp;
- int *pc;
- int *callno;
- int args[6];
-{
- return ebl != NULL ? ebl->syscall_abi (ebl, sp, pc, callno, args) : -1;
-}
diff --git a/libebl/eblauxvinfo.c b/libebl/eblauxvinfo.c
deleted file mode 100644
index af65c47..0000000
--- a/libebl/eblauxvinfo.c
+++ /dev/null
@@ -1,122 +0,0 @@
-/* Describe known auxv types.
- Copyright (C) 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <byteswap.h>
-#include <endian.h>
-#include <inttypes.h>
-#include <stdio.h>
-#include <stddef.h>
-#include <libeblP.h>
-
-#define AUXV_TYPES \
- TYPE (NULL, "") \
- TYPE (IGNORE, "") \
- TYPE (EXECFD, "d") \
- TYPE (EXECFN, "s") \
- TYPE (PHDR, "p") \
- TYPE (PHENT, "u") \
- TYPE (PHNUM, "u") \
- TYPE (PAGESZ, "u") \
- TYPE (BASE, "p") \
- TYPE (FLAGS, "x") \
- TYPE (ENTRY, "p") \
- TYPE (NOTELF, "") \
- TYPE (UID, "u") \
- TYPE (EUID, "u") \
- TYPE (GID, "u") \
- TYPE (EGID, "u") \
- TYPE (CLKTCK, "u") \
- TYPE (PLATFORM, "s") \
- TYPE (HWCAP, "x") \
- TYPE (FPUCW, "x") \
- TYPE (DCACHEBSIZE, "d") \
- TYPE (ICACHEBSIZE, "d") \
- TYPE (UCACHEBSIZE, "d") \
- TYPE (IGNOREPPC, "") \
- TYPE (SECURE, "u") \
- TYPE (SYSINFO, "p") \
- TYPE (SYSINFO_EHDR, "p") \
- TYPE (L1I_CACHESHAPE, "d") \
- TYPE (L1D_CACHESHAPE, "d") \
- TYPE (L2_CACHESHAPE, "d") \
- TYPE (L3_CACHESHAPE, "d")
-
-static const struct
-{
- const char *name, *format;
-} auxv_types[] =
- {
-#define TYPE(name, fmt) [AT_##name] = { #name, fmt },
- AUXV_TYPES
-#undef TYPE
- };
-#define nauxv_types (sizeof auxv_types / sizeof auxv_types[0])
-
-int
-ebl_auxv_info (ebl, a_type, name, format)
- Ebl *ebl;
- GElf_Xword a_type;
- const char **name;
- const char **format;
-{
- int result = ebl->auxv_info (a_type, name, format);
- if (result == 0 && a_type < nauxv_types && auxv_types[a_type].name != NULL)
- {
- /* The machine specific function did not know this type. */
- *name = auxv_types[a_type].name;
- *format = auxv_types[a_type].format;
- result = 1;
- }
- return result;
-}
diff --git a/libebl/eblbackendname.c b/libebl/eblbackendname.c
deleted file mode 100644
index daec880..0000000
--- a/libebl/eblbackendname.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Return backend name.
- Copyright (C) 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdio.h>
-#include <libeblP.h>
-
-
-const char *
-ebl_backend_name (ebl)
- Ebl *ebl;
-{
- return ebl != NULL ? ebl->emulation : gettext ("No backend");
-}
diff --git a/libebl/eblbsspltp.c b/libebl/eblbsspltp.c
deleted file mode 100644
index 14b6f09..0000000
--- a/libebl/eblbsspltp.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Check if backend uses a bss PLT.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <inttypes.h>
-#include <libeblP.h>
-
-
-bool
-ebl_bss_plt_p (ebl, ehdr)
- Ebl *ebl;
- GElf_Ehdr *ehdr;
-{
- return ebl == NULL ? false : ebl->bss_plt_p (ebl->elf, ehdr);
-}
diff --git a/libebl/eblcheckobjattr.c b/libebl/eblcheckobjattr.c
deleted file mode 100644
index fe75de7..0000000
--- a/libebl/eblcheckobjattr.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/* Check object attributes.
- Copyright (C) 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <string.h>
-#include <libeblP.h>
-
-
-bool
-ebl_check_object_attribute (ebl, vendor, tag, value, tag_name, value_name)
- Ebl *ebl;
- const char *vendor;
- int tag;
- uint64_t value;
- const char **tag_name;
- const char **value_name;
-{
- if (ebl->check_object_attribute (ebl, vendor, tag, value,
- tag_name, value_name))
- return true;
-
- if (strcmp (vendor, "gnu"))
- return false;
-
- if (tag == 32)
- {
- *tag_name = "compatibility";
- return true;
- }
-
- return false;
-}
diff --git a/libebl/eblclosebackend.c b/libebl/eblclosebackend.c
deleted file mode 100644
index a0fb344..0000000
--- a/libebl/eblclosebackend.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Free ELF backend handle.
- Copyright (C) 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <dlfcn.h>
-#include <stdlib.h>
-
-#include <libeblP.h>
-
-
-void
-ebl_closebackend (Ebl *ebl)
-{
- if (ebl != NULL)
- {
- /* Run the destructor. */
- ebl->destr (ebl);
-
- /* Close the dynamically loaded object. */
- if (ebl->dlhandle != NULL)
- (void) dlclose (ebl->dlhandle);
-
- /* Free the resources. */
- free (ebl);
- }
-}
diff --git a/libebl/eblcopyrelocp.c b/libebl/eblcopyrelocp.c
deleted file mode 100644
index a7aea88..0000000
--- a/libebl/eblcopyrelocp.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Check whether given relocation is a copy relocation.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libeblP.h>
-
-
-bool
-ebl_copy_reloc_p (ebl, reloc)
- Ebl *ebl;
- int reloc;
-{
- return ebl->copy_reloc_p (reloc);
-}
diff --git a/libebl/eblcorenote.c b/libebl/eblcorenote.c
deleted file mode 100644
index 553d5ba..0000000
--- a/libebl/eblcorenote.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/* Describe known core note formats.
- Copyright (C) 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <byteswap.h>
-#include <endian.h>
-#include <inttypes.h>
-#include <stdio.h>
-#include <stddef.h>
-#include <libeblP.h>
-
-
-int
-ebl_core_note (ebl, n_type, descsz,
- regs_offset, nregloc, reglocs, nitems, items)
- Ebl *ebl;
- GElf_Word n_type;
- GElf_Word descsz;
- GElf_Word *regs_offset;
- size_t *nregloc;
- const Ebl_Register_Location **reglocs;
- size_t *nitems;
- const Ebl_Core_Item **items;
-{
- int result = ebl->core_note (n_type, descsz, regs_offset, nregloc, reglocs,
- nitems, items);
- if (result == 0)
- {
- /* The machine specific function did not know this type. */
-
- *regs_offset = 0;
- *nregloc = 0;
- *reglocs = NULL;
- switch (n_type)
- {
-#define ITEMS(type, table) \
- case type: \
- *items = table; \
- *nitems = sizeof table / sizeof table[0]; \
- result = 1; \
- break
-
- static const Ebl_Core_Item platform[] =
- {
- {
- .name = "Platform",
- .type = ELF_T_BYTE, .count = 0, .format = 's'
- }
- };
- ITEMS (NT_PLATFORM, platform);
-
-#undef ITEMS
- }
- }
-
- return result;
-}
diff --git a/libebl/eblcorenotetypename.c b/libebl/eblcorenotetypename.c
deleted file mode 100644
index 9376cf5..0000000
--- a/libebl/eblcorenotetypename.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/* Return note type name.
- Copyright (C) 2002, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <inttypes.h>
-#include <stdio.h>
-#include <libeblP.h>
-
-const char *
-ebl_core_note_type_name (ebl, type, buf, len)
- Ebl *ebl;
- uint32_t type;
- char *buf;
- size_t len;
-{
- const char *res = ebl->core_note_type_name (type, buf, len);
-
- if (res == NULL)
- {
- static const char *knowntypes[] =
- {
-#define KNOWNSTYPE(name) [NT_##name] = #name
- KNOWNSTYPE (PRSTATUS),
- KNOWNSTYPE (FPREGSET),
- KNOWNSTYPE (PRPSINFO),
- KNOWNSTYPE (TASKSTRUCT),
- KNOWNSTYPE (PLATFORM),
- KNOWNSTYPE (AUXV),
- KNOWNSTYPE (GWINDOWS),
- KNOWNSTYPE (ASRS),
- KNOWNSTYPE (PSTATUS),
- KNOWNSTYPE (PSINFO),
- KNOWNSTYPE (PRCRED),
- KNOWNSTYPE (UTSNAME),
- KNOWNSTYPE (LWPSTATUS),
- KNOWNSTYPE (LWPSINFO),
- KNOWNSTYPE (PRFPXREG)
-#undef KNOWNSTYPE
- };
-
- /* Handle standard names. */
- if (type < sizeof (knowntypes) / sizeof (knowntypes[0])
- && knowntypes[type] != NULL)
- res = knowntypes[type];
- else
- switch (type)
- {
-#define KNOWNSTYPE(name) case NT_##name: res = #name; break
- KNOWNSTYPE (PRXFPREG);
- KNOWNSTYPE (PPC_VMX);
- KNOWNSTYPE (PPC_SPE);
- KNOWNSTYPE (386_TLS);
- KNOWNSTYPE (386_IOPERM);
-#undef KNOWNSTYPE
-
- default:
- snprintf (buf, len, "%s: %" PRIu32, gettext ("<unknown>"), type);
-
- res = buf;
- }
- }
-
- return res;
-}
diff --git a/libebl/ebldebugscnp.c b/libebl/ebldebugscnp.c
deleted file mode 100644
index c96622c..0000000
--- a/libebl/ebldebugscnp.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Check section name for being that of a debug informatino section.
- Copyright (C) 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdint.h>
-#include <libeblP.h>
-
-
-bool
-ebl_debugscn_p (ebl, name)
- Ebl *ebl;
- const char *name;
-{
- return ebl->debugscn_p (name);
-}
diff --git a/libebl/ebldynamictagcheck.c b/libebl/ebldynamictagcheck.c
deleted file mode 100644
index 1953a9c..0000000
--- a/libebl/ebldynamictagcheck.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/* Check dynamic tag.
- Copyright (C) 2001, 2002, 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <inttypes.h>
-#include <libeblP.h>
-
-
-bool
-ebl_dynamic_tag_check (ebl, tag)
- Ebl *ebl;
- int64_t tag;
-{
- bool res = ebl != NULL ? ebl->dynamic_tag_check (tag) : false;
-
- if (!res
- && ((tag >= 0 && tag < DT_NUM)
- || (tag >= DT_GNU_PRELINKED && tag <= DT_SYMINENT)
- || (tag >= DT_GNU_HASH && tag <= DT_SYMINFO)
- || tag == DT_VERSYM
- || (tag >= DT_RELACOUNT && tag <= DT_VERNEEDNUM)
- || tag == DT_AUXILIARY
- || tag == DT_FILTER))
- res = true;
-
- return res;
-}
diff --git a/libebl/ebldynamictagname.c b/libebl/ebldynamictagname.c
deleted file mode 100644
index e0972ed..0000000
--- a/libebl/ebldynamictagname.c
+++ /dev/null
@@ -1,134 +0,0 @@
-/* Return dynamic tag name.
- Copyright (C) 2001, 2002, 2006, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <inttypes.h>
-#include <stdio.h>
-#include <libeblP.h>
-
-
-const char *
-ebl_dynamic_tag_name (ebl, tag, buf, len)
- Ebl *ebl;
- int64_t tag;
- char *buf;
- size_t len;
-{
- const char *res = ebl != NULL ? ebl->dynamic_tag_name (tag, buf, len) : NULL;
-
- if (res == NULL)
- {
- if (tag >= 0 && tag < DT_NUM)
- {
- static const char *stdtags[] =
- {
- "NULL", "NEEDED", "PLTRELSZ", "PLTGOT", "HASH", "STRTAB",
- "SYMTAB", "RELA", "RELASZ", "RELAENT", "STRSZ", "SYMENT",
- "INIT", "FINI", "SONAME", "RPATH", "SYMBOLIC", "REL", "RELSZ",
- "RELENT", "PLTREL", "DEBUG", "TEXTREL", "JMPREL", "BIND_NOW",
- "INIT_ARRAY", "FINI_ARRAY", "INIT_ARRAYSZ", "FINI_ARRAYSZ",
- "RUNPATH", "FLAGS", "ENCODING", "PREINIT_ARRAY",
- "PREINIT_ARRAYSZ"
- };
-
- res = stdtags[tag];
- }
- else if (tag == DT_VERSYM)
- res = "VERSYM";
- else if (tag >= DT_GNU_PRELINKED && tag <= DT_SYMINENT)
- {
- static const char *valrntags[] =
- {
- "GNU_PRELINKED", "GNU_CONFLICTSZ", "GNU_LIBLISTSZ",
- "CHECKSUM", "PLTPADSZ", "MOVEENT", "MOVESZ", "FEATURE_1",
- "POSFLAG_1", "SYMINSZ", "SYMINENT"
- };
-
- res = valrntags[tag - DT_GNU_PRELINKED];
- }
- else if (tag >= DT_GNU_HASH && tag <= DT_SYMINFO)
- {
- static const char *addrrntags[] =
- {
- "GNU_HASH", "TLSDESC_PLT", "TLSDESC_DOT",
- "GNU_CONFLICT", "GNU_LIBLIST", "CONFIG", "DEPAUDIT", "AUDIT",
- "PLTPAD", "MOVETAB", "SYMINFO"
- };
-
- res = addrrntags[tag - DT_GNU_HASH];
- }
- else if (tag >= DT_RELACOUNT && tag <= DT_VERNEEDNUM)
- {
- static const char *suntags[] =
- {
- "RELACOUNT", "RELCOUNT", "FLAGS_1", "VERDEF", "VERDEFNUM",
- "VERNEED", "VERNEEDNUM"
- };
-
- res = suntags[tag - DT_RELACOUNT];
- }
- else if (tag == DT_AUXILIARY)
- res = "AUXILIARY";
- else if (tag == DT_FILTER)
- res = "FILTER";
- else
- {
- snprintf (buf, len, gettext ("<unknown>: %#" PRIx64), tag);
-
- res = buf;
-
- }
- }
-
- return res;
-}
diff --git a/libebl/eblelfclass.c b/libebl/eblelfclass.c
deleted file mode 100644
index 222307e..0000000
--- a/libebl/eblelfclass.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Return ELF class.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libeblP.h>
-
-
-int
-ebl_get_elfclass (ebl)
- Ebl *ebl;
-{
- return ebl->class;
-}
diff --git a/libebl/eblelfdata.c b/libebl/eblelfdata.c
deleted file mode 100644
index f84ae16..0000000
--- a/libebl/eblelfdata.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Return ELF data encoding.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libeblP.h>
-
-
-int
-ebl_get_elfdata (ebl)
- Ebl *ebl;
-{
- return ebl->data;
-}
diff --git a/libebl/eblelfmachine.c b/libebl/eblelfmachine.c
deleted file mode 100644
index 9839fef..0000000
--- a/libebl/eblelfmachine.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Return ELF machine.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libeblP.h>
-
-
-int
-ebl_get_elfmachine (ebl)
- Ebl *ebl;
-{
- return ebl->machine;
-}
diff --git a/libebl/eblgotpcreloccheck.c b/libebl/eblgotpcreloccheck.c
deleted file mode 100644
index e70fcb1..0000000
--- a/libebl/eblgotpcreloccheck.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Return true if the symbol type is that referencing the GOT. E.g.,
- R_386_GOTPC.
- Copyright (C) 2003 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libeblP.h>
-
-
-bool
-ebl_gotpc_reloc_check (ebl, reloc)
- Ebl *ebl;
- int reloc;
-{
- return ebl != NULL ? ebl->gotpc_reloc_check (ebl->elf, reloc) : false;
-}
diff --git a/libebl/eblgstrtab.c b/libebl/eblgstrtab.c
deleted file mode 100644
index 73f0d27..0000000
--- a/libebl/eblgstrtab.c
+++ /dev/null
@@ -1,386 +0,0 @@
-/* Generic string table handling.
- Copyright (C) 2000, 2001, 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <inttypes.h>
-#include <libelf.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/param.h>
-
-#include "libebl.h"
-
-#ifndef MIN
-# define MIN(a, b) ((a) < (b) ? (a) : (b))
-#endif
-
-
-struct Ebl_GStrent
-{
- const char *string;
- size_t len;
- struct Ebl_GStrent *next;
- struct Ebl_GStrent *left;
- struct Ebl_GStrent *right;
- size_t offset;
- unsigned int width;
- char reverse[0];
-};
-
-
-struct memoryblock
-{
- struct memoryblock *next;
- char memory[0];
-};
-
-
-struct Ebl_GStrtab
-{
- struct Ebl_GStrent *root;
- struct memoryblock *memory;
- char *backp;
- size_t left;
- size_t total;
- unsigned int width;
- bool nullstr;
-
- struct Ebl_GStrent null;
-};
-
-
-/* Cache for the pagesize. We correct this value a bit so that `malloc'
- is not allocating more than a page. */
-static size_t ps;
-
-
-struct Ebl_GStrtab *
-ebl_gstrtabinit (unsigned int width, bool nullstr)
-{
- struct Ebl_GStrtab *ret;
-
- if (ps == 0)
- {
- ps = sysconf (_SC_PAGESIZE) - 2 * sizeof (void *);
- assert (sizeof (struct memoryblock) < ps);
- }
-
- ret = (struct Ebl_GStrtab *) calloc (1, sizeof (struct Ebl_GStrtab));
- if (ret != NULL)
- {
- ret->width = width;
- ret->nullstr = nullstr;
-
- if (nullstr)
- {
- ret->null.len = 1;
- ret->null.string = (char *) calloc (1, width);
- }
- }
-
- return ret;
-}
-
-
-static void
-morememory (struct Ebl_GStrtab *st, size_t len)
-{
- struct memoryblock *newmem;
-
- if (len < ps)
- len = ps;
- newmem = (struct memoryblock *) malloc (len);
- if (newmem == NULL)
- abort ();
-
- newmem->next = st->memory;
- st->memory = newmem;
- st->backp = newmem->memory;
- st->left = len - offsetof (struct memoryblock, memory);
-}
-
-
-void
-ebl_gstrtabfree (struct Ebl_GStrtab *st)
-{
- struct memoryblock *mb = st->memory;
-
- while (mb != NULL)
- {
- void *old = mb;
- mb = mb->next;
- free (old);
- }
-
- if (st->null.string != NULL)
- free ((char *) st->null.string);
-
- free (st);
-}
-
-
-static struct Ebl_GStrent *
-newstring (struct Ebl_GStrtab *st, const char *str, size_t len)
-{
- /* Compute the amount of padding needed to make the structure aligned. */
- size_t align = ((__alignof__ (struct Ebl_GStrent)
- - (((uintptr_t) st->backp)
- & (__alignof__ (struct Ebl_GStrent) - 1)))
- & (__alignof__ (struct Ebl_GStrent) - 1));
-
- /* Make sure there is enough room in the memory block. */
- if (st->left < align + sizeof (struct Ebl_GStrent) + len * st->width)
- {
- morememory (st, sizeof (struct Ebl_GStrent) + len * st->width);
- align = 0;
- }
-
- /* Create the reserved string. */
- struct Ebl_GStrent *newstr = (struct Ebl_GStrent *) (st->backp + align);
- newstr->string = str;
- newstr->len = len;
- newstr->width = st->width;
- newstr->next = NULL;
- newstr->left = NULL;
- newstr->right = NULL;
- newstr->offset = 0;
- for (int i = len - 2; i >= 0; --i)
- for (int j = st->width - 1; j >= 0; --j)
- newstr->reverse[i * st->width + j] = str[(len - 2 - i) * st->width + j];
- for (size_t j = 0; j < st->width; ++j)
- newstr->reverse[(len - 1) * st->width + j] = '\0';
- st->backp += align + sizeof (struct Ebl_GStrent) + len * st->width;
- st->left -= align + sizeof (struct Ebl_GStrent) + len * st->width;
-
- return newstr;
-}
-
-
-/* XXX This function should definitely be rewritten to use a balancing
- tree algorith (AVL, red-black trees). For now a simple, correct
- implementation is enough. */
-static struct Ebl_GStrent **
-searchstring (struct Ebl_GStrent **sep, struct Ebl_GStrent *newstr)
-{
- int cmpres;
-
- /* More strings? */
- if (*sep == NULL)
- {
- *sep = newstr;
- return sep;
- }
-
- /* Compare the strings. */
- cmpres = memcmp ((*sep)->reverse, newstr->reverse,
- (MIN ((*sep)->len, newstr->len) - 1) * (*sep)->width);
- if (cmpres == 0)
- /* We found a matching string. */
- return sep;
- else if (cmpres > 0)
- return searchstring (&(*sep)->left, newstr);
- else
- return searchstring (&(*sep)->right, newstr);
-}
-
-
-/* Add new string. The actual string is assumed to be permanent. */
-struct Ebl_GStrent *
-ebl_gstrtabadd (struct Ebl_GStrtab *st, const char *str, size_t len)
-{
- struct Ebl_GStrent *newstr;
- struct Ebl_GStrent **sep;
-
- /* Compute the string length if the caller doesn't know it. */
- if (len == 0)
- {
- size_t j;
-
- do
- for (j = 0; j < st->width; ++j)
- if (str[len * st->width + j] != '\0')
- break;
- while (j == st->width && ++len);
- }
-
- /* Make sure all "" strings get offset 0 but only if the table was
- created with a special null entry in mind. */
- if (len == 1 && st->null.string != NULL)
- return &st->null;
-
- /* Allocate memory for the new string and its associated information. */
- newstr = newstring (st, str, len);
-
- /* Search in the array for the place to insert the string. If there
- is no string with matching prefix and no string with matching
- leading substring, create a new entry. */
- sep = searchstring (&st->root, newstr);
- if (*sep != newstr)
- {
- /* This is not the same entry. This means we have a prefix match. */
- if ((*sep)->len > newstr->len)
- {
- struct Ebl_GStrent *subs;
-
- /* Check whether we already know this string. */
- for (subs = (*sep)->next; subs != NULL; subs = subs->next)
- if (subs->len == newstr->len)
- {
- /* We have an exact match with a substring. Free the memory
- we allocated. */
- st->left += (st->backp - (char *) newstr) * st->width;
- st->backp = (char *) newstr;
-
- return subs;
- }
-
- /* We have a new substring. This means we don't need the reverse
- string of this entry anymore. */
- st->backp -= newstr->len;
- st->left += newstr->len;
-
- newstr->next = (*sep)->next;
- (*sep)->next = newstr;
- }
- else if ((*sep)->len != newstr->len)
- {
- /* When we get here it means that the string we are about to
- add has a common prefix with a string we already have but
- it is longer. In this case we have to put it first. */
- st->total += newstr->len - (*sep)->len;
- newstr->next = *sep;
- newstr->left = (*sep)->left;
- newstr->right = (*sep)->right;
- *sep = newstr;
- }
- else
- {
- /* We have an exact match. Free the memory we allocated. */
- st->left += (st->backp - (char *) newstr) * st->width;
- st->backp = (char *) newstr;
-
- newstr = *sep;
- }
- }
- else
- st->total += newstr->len;
-
- return newstr;
-}
-
-
-static void
-copystrings (struct Ebl_GStrent *nodep, char **freep, size_t *offsetp)
-{
- struct Ebl_GStrent *subs;
-
- if (nodep->left != NULL)
- copystrings (nodep->left, freep, offsetp);
-
- /* Process the current node. */
- nodep->offset = *offsetp;
- *freep = (char *) mempcpy (*freep, nodep->string, nodep->len * nodep->width);
- *offsetp += nodep->len * nodep->width;
-
- for (subs = nodep->next; subs != NULL; subs = subs->next)
- {
- assert (subs->len < nodep->len);
- subs->offset = nodep->offset + (nodep->len - subs->len) * nodep->width;
- assert (subs->offset != 0 || subs->string[0] == '\0');
- }
-
- if (nodep->right != NULL)
- copystrings (nodep->right, freep, offsetp);
-}
-
-
-void
-ebl_gstrtabfinalize (struct Ebl_GStrtab *st, Elf_Data *data)
-{
- size_t copylen;
- char *endp;
- size_t nulllen = st->nullstr ? st->width : 0;
-
- /* Fill in the information. */
- data->d_buf = malloc (st->total + nulllen);
- if (data->d_buf == NULL)
- abort ();
-
- /* The first byte must always be zero if we created the table with a
- null string. */
- if (st->nullstr)
- memset (data->d_buf, '\0', st->width);
-
- data->d_type = ELF_T_BYTE;
- data->d_size = st->total + nulllen;
- data->d_off = 0;
- data->d_align = 1;
- data->d_version = EV_CURRENT;
-
- /* Now run through the tree and add all the string while also updating
- the offset members of the elfstrent records. */
- endp = (char *) data->d_buf + nulllen;
- copylen = nulllen;
- copystrings (st->root, &endp, ©len);
- assert (copylen == st->total * st->width + nulllen);
-}
-
-
-size_t
-ebl_gstrtaboffset (struct Ebl_GStrent *se)
-{
- return se->offset;
-}
diff --git a/libebl/eblmachineflagcheck.c b/libebl/eblmachineflagcheck.c
deleted file mode 100644
index ac383f6..0000000
--- a/libebl/eblmachineflagcheck.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Check machine flag.
- Copyright (C) 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libeblP.h>
-
-
-bool
-ebl_machine_flag_check (ebl, flags)
- Ebl *ebl;
- Elf64_Word flags;
-{
- return ebl != NULL ? ebl->machine_flag_check (flags) : (flags == 0);
-}
diff --git a/libebl/eblmachineflagname.c b/libebl/eblmachineflagname.c
deleted file mode 100644
index 88a8da8..0000000
--- a/libebl/eblmachineflagname.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/* Return machine flag names.
- Copyright (C) 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdio.h>
-#include <string.h>
-#include <libeblP.h>
-
-
-const char *
-ebl_machine_flag_name (ebl, flags, buf, len)
- Ebl *ebl;
- Elf64_Word flags;
- char *buf;
- size_t len;
-{
- const char *res;
-
- if (flags == 0)
- res = "";
- else
- {
- char *cp = buf;
- int first = 1;
- const char *machstr;
- size_t machstrlen;
-
- do
- {
- if (! first)
- {
- if (cp + 1 >= buf + len)
- break;
- *cp++ = ',';
- }
-
- machstr = ebl != NULL ? ebl->machine_flag_name (&flags) : NULL;
- if (machstr == NULL)
- {
- /* No more known flag. */
- snprintf (cp, buf + len - cp, "%#x", flags);
- break;
- }
-
- machstrlen = strlen (machstr) + 1;
- if ((size_t) (buf + len - cp) < machstrlen)
- {
- *((char *) mempcpy (cp, machstr, buf + len - cp - 1)) = '\0';
- break;
- }
-
- cp = mempcpy (cp, machstr, machstrlen);
-
- first = 0;
- }
- while (flags != 0);
-
- res = buf;
- }
-
- return res;
-}
diff --git a/libebl/eblmachinesectionflagcheck.c b/libebl/eblmachinesectionflagcheck.c
deleted file mode 100644
index 9eb6d38..0000000
--- a/libebl/eblmachinesectionflagcheck.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Check SHF_MASKPROC flags.
- Copyright (C) 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libeblP.h>
-
-
-bool
-ebl_machine_section_flag_check (ebl, flags)
- Ebl *ebl;
- GElf_Xword flags;
-{
- return ebl != NULL ? ebl->machine_section_flag_check (flags) : (flags == 0);
-}
diff --git a/libebl/eblnonerelocp.c b/libebl/eblnonerelocp.c
deleted file mode 100644
index 3bca98b..0000000
--- a/libebl/eblnonerelocp.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Check whether given relocation is a no-op relocation.
- Copyright (C) 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2006.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libeblP.h>
-
-
-bool
-ebl_none_reloc_p (ebl, reloc)
- Ebl *ebl;
- int reloc;
-{
- return ebl->none_reloc_p (reloc);
-}
diff --git a/libebl/eblobjecttypename.c b/libebl/eblobjecttypename.c
deleted file mode 100644
index ce100e7..0000000
--- a/libebl/eblobjecttypename.c
+++ /dev/null
@@ -1,84 +0,0 @@
-/* Return object file type name.
- Copyright (C) 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdio.h>
-#include <libeblP.h>
-
-
-const char *
-ebl_object_type_name (ebl, object, buf, len)
- Ebl *ebl;
- int object;
- char *buf;
- size_t len;
-{
- const char *res;
-
- res = ebl != NULL ? ebl->object_type_name (object, buf, len) : NULL;
- if (res == NULL)
- {
- /* Handle OS-specific section names. */
- if (object >= ET_LOOS && object <= ET_HIOS)
- snprintf (buf, len, "LOOS+%x", object - ET_LOOS);
- /* Handle processor-specific section names. */
- else if (object >= ET_LOPROC && object <= ET_HIPROC)
- snprintf (buf, len, "LOPROC+%x", object - ET_LOPROC);
- else
- snprintf (buf, len, "%s: %d", gettext ("<unknown>"), object);
-
- res = buf;
- }
-
- return res;
-}
diff --git a/libebl/eblobjnote.c b/libebl/eblobjnote.c
deleted file mode 100644
index 836ac8d..0000000
--- a/libebl/eblobjnote.c
+++ /dev/null
@@ -1,146 +0,0 @@
-/* Print contents of object file note.
- Copyright (C) 2002, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <inttypes.h>
-#include <stdio.h>
-#include <string.h>
-#include <libeblP.h>
-
-
-void
-ebl_object_note (ebl, name, type, descsz, desc)
- Ebl *ebl;
- const char *name;
- uint32_t type;
- uint32_t descsz;
- const char *desc;
-{
- if (! ebl->object_note (name, type, descsz, desc))
- /* The machine specific function did not know this type. */
- switch (type)
- {
- case NT_GNU_BUILD_ID:
- if (strcmp (name, "GNU") == 0 && descsz > 0)
- {
- printf (gettext (" Build ID: "));
- uint_fast32_t i;
- for (i = 0; i < descsz - 1; ++i)
- printf ("%02" PRIx8, (uint8_t) desc[i]);
- printf ("%02" PRIx8 "\n", (uint8_t) desc[i]);
- }
- break;
-
- case NT_GNU_ABI_TAG:
- if (strcmp (name, "GNU") == 0 && descsz >= 8 && descsz % 4 == 0)
- {
- Elf_Data in =
- {
- .d_version = EV_CURRENT,
- .d_type = ELF_T_WORD,
- .d_size = descsz,
- .d_buf = (void *) desc
- };
- uint32_t buf[descsz / 4];
- Elf_Data out =
- {
- .d_version = EV_CURRENT,
- .d_type = ELF_T_WORD,
- .d_size = descsz,
- .d_buf = buf
- };
-
- if (elf32_xlatetom (&out, &in, ebl->data) != NULL)
- {
- const char *os;
- switch (buf[0])
- {
- case ELF_NOTE_OS_LINUX:
- os = "Linux";
- break;
-
- case ELF_NOTE_OS_GNU:
- os = "GNU";
- break;
-
- case ELF_NOTE_OS_SOLARIS2:
- os = "Solaris";
- break;
-
- case ELF_NOTE_OS_FREEBSD:
- os = "FreeBSD";
- break;
-
- default:
- os = "???";
- break;
- }
-
- printf (gettext (" OS: %s, ABI: "), os);
- for (size_t cnt = 1; cnt < descsz / 4; ++cnt)
- {
- if (cnt > 1)
- putchar_unlocked ('.');
- printf ("%" PRIu32, buf[cnt]);
- }
- putchar_unlocked ('\n');
- }
- break;
- }
- /* FALLTHROUGH */
-
- default:
- /* Unknown type. */
- break;
- }
-}
diff --git a/libebl/eblobjnotetypename.c b/libebl/eblobjnotetypename.c
deleted file mode 100644
index ff9330f..0000000
--- a/libebl/eblobjnotetypename.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/* Return note type name.
- Copyright (C) 2002, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <inttypes.h>
-#include <stdio.h>
-#include <libeblP.h>
-
-
-const char *
-ebl_object_note_type_name (ebl, type, buf, len)
- Ebl *ebl;
- uint32_t type;
- char *buf;
- size_t len;
-{
- const char *res = ebl->object_note_type_name (type, buf, len);
-
- if (res == NULL)
- {
- static const char *knowntypes[] =
- {
-#define KNOWNSTYPE(name) [NT_##name] = #name
- KNOWNSTYPE (VERSION),
- KNOWNSTYPE (GNU_HWCAP),
- KNOWNSTYPE (GNU_BUILD_ID),
- };
-
- /* Handle standard names. */
- if (type < sizeof (knowntypes) / sizeof (knowntypes[0])
- && knowntypes[type] != NULL)
- res = knowntypes[type];
- else
- {
- snprintf (buf, len, "%s: %" PRIu32, gettext ("<unknown>"), type);
-
- res = buf;
- }
- }
-
- return res;
-}
diff --git a/libebl/eblopenbackend.c b/libebl/eblopenbackend.c
deleted file mode 100644
index fda6b1e..0000000
--- a/libebl/eblopenbackend.c
+++ /dev/null
@@ -1,759 +0,0 @@
-/* Generate ELF backend handle.
- Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007,2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <dlfcn.h>
-#include <error.h>
-#include <libelfP.h>
-#include <dwarf.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-
-#include <libeblP.h>
-
-
-/* This table should contain the complete list of architectures as far
- as the ELF specification is concerned. */
-/* XXX When things are stable replace the string pointers with char
- arrays to avoid relocations. */
-static const struct
-{
- const char *dsoname;
- const char *emulation;
- const char *prefix;
- int prefix_len;
- int em;
- int class;
- int data;
-} machines[] =
-{
- { "i386", "elf_i386", "i386", 4, EM_386, ELFCLASS32, ELFDATA2LSB },
- { "ia64", "elf_ia64", "ia64", 4, EM_IA_64, ELFCLASS64, ELFDATA2LSB },
- { "alpha", "elf_alpha", "alpha", 5, EM_ALPHA, ELFCLASS64, ELFDATA2LSB },
- { "x86_64", "elf_x86_64", "x86_64", 6, EM_X86_64, ELFCLASS64, ELFDATA2LSB },
- { "ppc", "elf_ppc", "ppc", 3, EM_PPC, ELFCLASS32, ELFDATA2MSB },
- { "ppc64", "elf_ppc64", "ppc64", 5, EM_PPC64, ELFCLASS64, ELFDATA2MSB },
- // XXX class and machine fields need to be filled in for all archs.
- { "sh", "elf_sh", "sh", 2, EM_SH, 0, 0 },
- { "arm", "ebl_arm", "arm", 3, EM_ARM, 0, 0 },
- { "sparc", "elf_sparcv9", "sparc", 5, EM_SPARCV9, 0, 0 },
- { "sparc", "elf_sparc", "sparc", 5, EM_SPARC, 0, 0 },
- { "sparc", "elf_sparcv8plus", "sparc", 5, EM_SPARC32PLUS, 0, 0 },
- { "s390", "ebl_s390", "s390", 4, EM_S390, 0, 0 },
-
- { "m32", "elf_m32", "m32", 3, EM_M32, 0, 0 },
- { "m68k", "elf_m68k", "m68k", 4, EM_68K, 0, 0 },
- { "m88k", "elf_m88k", "m88k", 4, EM_88K, 0, 0 },
- { "i860", "elf_i860", "i860", 4, EM_860, 0, 0 },
- { "s370", "ebl_s370", "s370", 4, EM_S370, 0, 0 },
- { "parisc", "elf_parisc", "parisc", 6, EM_PARISC, 0, 0 },
- { "vpp500", "elf_vpp500", "vpp500", 5, EM_VPP500, 0, 0 },
- { "sparc", "elf_v8plus", "v8plus", 6, EM_SPARC32PLUS, 0, 0 },
- { "i960", "elf_i960", "i960", 4, EM_960, 0, 0 },
- { "v800", "ebl_v800", "v800", 4, EM_V800, 0, 0 },
- { "fr20", "ebl_fr20", "fr20", 4, EM_FR20, 0, 0 },
- { "rh32", "ebl_rh32", "rh32", 4, EM_RH32, 0, 0 },
- { "rce", "ebl_rce", "rce", 3, EM_RCE, 0, 0 },
- { "tricore", "elf_tricore", "tricore", 7, EM_TRICORE, 0, 0 },
- { "arc", "elf_arc", "arc", 3, EM_ARC, 0, 0 },
- { "h8", "elf_h8_300", "h8_300", 6, EM_H8_300, 0, 0 },
- { "h8", "elf_h8_300h", "h8_300h", 6, EM_H8_300H, 0, 0 },
- { "h8", "elf_h8s", "h8s", 6, EM_H8S, 0, 0 },
- { "h8", "elf_h8_500", "h8_500", 6, EM_H8_500, 0, 0 },
- { "coldfire", "elf_coldfire", "coldfire", 8, EM_COLDFIRE, 0, 0 },
- { "m68k", "elf_68hc12", "68hc12", 6, EM_68HC12, 0, 0 },
- { "mma", "elf_mma", "mma", 3, EM_MMA, 0, 0 },
- { "pcp", "elf_pcp", "pcp", 3, EM_PCP, 0, 0 },
- { "ncpu", "elf_ncpu", "ncpu", 4, EM_NCPU, 0, 0 },
- { "ndr1", "elf_ndr1", "ndr1", 4, EM_NDR1, 0, 0 },
- { "starcore", "elf_starcore", "starcore", 8, EM_STARCORE, 0, 0 },
- { "me16", "elf_me16", "em16", 4, EM_ME16, 0, 0 },
- { "st100", "elf_st100", "st100", 5, EM_ST100, 0, 0 },
- { "tinyj", "elf_tinyj", "tinyj", 5, EM_TINYJ, 0, 0 },
- { "pdsp", "elf_pdsp", "pdsp", 4, EM_PDSP, 0, 0 },
- { "fx66", "elf_fx66", "fx66", 4, EM_FX66, 0, 0 },
- { "st9plus", "elf_st9plus", "st9plus", 7, EM_ST9PLUS, 0, 0 },
- { "st7", "elf_st7", "st7", 3, EM_ST7, 0, 0 },
- { "m68k", "elf_68hc16", "68hc16", 6, EM_68HC16, 0, 0 },
- { "m68k", "elf_68hc11", "68hc11", 6, EM_68HC11, 0, 0 },
- { "m68k", "elf_68hc08", "68hc08", 6, EM_68HC08, 0, 0 },
- { "m68k", "elf_68hc05", "68hc05", 6, EM_68HC05, 0, 0 },
- { "svx", "elf_svx", "svx", 3, EM_SVX, 0, 0 },
- { "st19", "elf_st19", "st19", 4, EM_ST19, 0, 0 },
- { "vax", "elf_vax", "vax", 3, EM_VAX, 0, 0 },
- { "cris", "elf_cris", "cris", 4, EM_CRIS, 0, 0 },
- { "javelin", "elf_javelin", "javelin", 7, EM_JAVELIN, 0, 0 },
- { "firepath", "elf_firepath", "firepath", 8, EM_FIREPATH, 0, 0 },
- { "zsp", "elf_zsp", "zsp", 3, EM_ZSP, 0, 0 },
- { "mmix", "elf_mmix", "mmix", 4, EM_MMIX, 0, 0 },
- { "hunay", "elf_huany", "huany", 5, EM_HUANY, 0, 0 },
- { "prism", "elf_prism", "prism", 5, EM_PRISM, 0, 0 },
- { "avr", "elf_avr", "avr", 3, EM_AVR, 0, 0 },
- { "fr30", "elf_fr30", "fr30", 4, EM_FR30, 0, 0 },
- { "dv10", "elf_dv10", "dv10", 4, EM_D10V, 0, 0 },
- { "dv30", "elf_dv30", "dv30", 4, EM_D30V, 0, 0 },
- { "v850", "elf_v850", "v850", 4, EM_V850, 0, 0 },
- { "m32r", "elf_m32r", "m32r", 4, EM_M32R, 0, 0 },
- { "mn10300", "elf_mn10300", "mn10300", 7, EM_MN10300, 0, 0 },
- { "mn10200", "elf_mn10200", "mn10200", 7, EM_MN10200, 0, 0 },
- { "pj", "elf_pj", "pj", 2, EM_PJ, 0, 0 },
- { "openrisc", "elf_openrisc", "openrisc", 8, EM_OPENRISC, 0, 0 },
- { "arc", "elf_arc_a5", "arc_a5", 6, EM_ARC_A5, 0, 0 },
- { "xtensa", "elf_xtensa", "xtensa", 6, EM_XTENSA, 0, 0 },
-};
-#define nmachines (sizeof (machines) / sizeof (machines[0]))
-
-
-/* Default callbacks. Mostly they just return the error value. */
-static const char *default_object_type_name (int ignore, char *buf,
- size_t len);
-static const char *default_reloc_type_name (int ignore, char *buf, size_t len);
-static bool default_reloc_type_check (int ignore);
-static bool default_reloc_valid_use (Elf *elf, int ignore);
-static Elf_Type default_reloc_simple_type (Ebl *ebl, int ignore);
-static bool default_gotpc_reloc_check (Elf *elf, int ignore);
-static const char *default_segment_type_name (int ignore, char *buf,
- size_t len);
-static const char *default_section_type_name (int ignore, char *buf,
- size_t len);
-static const char *default_section_name (int ignore, int ignore2, char *buf,
- size_t len);
-static const char *default_machine_flag_name (Elf64_Word *ignore);
-static bool default_machine_flag_check (Elf64_Word flags);
-static bool default_machine_section_flag_check (GElf_Xword flags);
-static const char *default_symbol_type_name (int ignore, char *buf,
- size_t len);
-static const char *default_symbol_binding_name (int ignore, char *buf,
- size_t len);
-static const char *default_dynamic_tag_name (int64_t ignore, char *buf,
- size_t len);
-static bool default_dynamic_tag_check (int64_t ignore);
-static GElf_Word default_sh_flags_combine (GElf_Word flags1, GElf_Word flags2);
-static const char *default_osabi_name (int ignore, char *buf, size_t len);
-static void default_destr (struct ebl *ignore);
-static const char *default_core_note_type_name (uint32_t, char *buf,
- size_t len);
-static const char *default_object_note_type_name (uint32_t, char *buf,
- size_t len);
-static int default_core_note (GElf_Word n_type, GElf_Word descsz,
- GElf_Word *regs_offset, size_t *nregloc,
- const Ebl_Register_Location **reglocs,
- size_t *nitems, const Ebl_Core_Item **);
-static int default_auxv_info (GElf_Xword a_type,
- const char **name, const char **format);
-static bool default_object_note (const char *name, uint32_t type,
- uint32_t descsz, const char *desc);
-static bool default_debugscn_p (const char *name);
-static bool default_copy_reloc_p (int reloc);
-/* ANDROID_CHANGE_BEGIN */
-#ifndef __APPLE__
-static bool default_none_reloc_p (int reloc);
-static bool default_relative_reloc_p (int reloc);
-#else
-#define default_none_reloc_p default_copy_reloc_p
-#define default_relative_reloc_p default_copy_reloc_p
-#endif
-/* ANDROID_CHANGE_END */
-static bool default_check_special_symbol (Elf *elf, GElf_Ehdr *ehdr,
- const GElf_Sym *sym,
- const char *name,
- const GElf_Shdr *destshdr);
-static bool default_check_special_section (Ebl *, int,
- const GElf_Shdr *, const char *);
-static bool default_bss_plt_p (Elf *elf, GElf_Ehdr *ehdr);
-static int default_return_value_location (Dwarf_Die *functypedie,
- const Dwarf_Op **locops);
-static ssize_t default_register_info (Ebl *ebl,
- int regno, char *name, size_t namelen,
- const char **prefix,
- const char **setname,
- int *bits, int *type);
-static int default_syscall_abi (Ebl *ebl, int *sp, int *pc,
- int *callno, int args[6]);
-static bool default_check_object_attribute (Ebl *ebl, const char *vendor,
- int tag, uint64_t value,
- const char **tag_name,
- const char **value_name);
-
-
-static void
-fill_defaults (Ebl *result)
-{
- result->object_type_name = default_object_type_name;
- result->reloc_type_name = default_reloc_type_name;
- result->reloc_type_check = default_reloc_type_check;
- result->reloc_valid_use = default_reloc_valid_use;
- result->reloc_simple_type = default_reloc_simple_type;
- result->gotpc_reloc_check = default_gotpc_reloc_check;
- result->segment_type_name = default_segment_type_name;
- result->section_type_name = default_section_type_name;
- result->section_name = default_section_name;
- result->machine_flag_name = default_machine_flag_name;
- result->machine_flag_check = default_machine_flag_check;
- result->machine_section_flag_check = default_machine_section_flag_check;
- result->check_special_section = default_check_special_section;
- result->symbol_type_name = default_symbol_type_name;
- result->symbol_binding_name = default_symbol_binding_name;
- result->dynamic_tag_name = default_dynamic_tag_name;
- result->dynamic_tag_check = default_dynamic_tag_check;
- result->sh_flags_combine = default_sh_flags_combine;
- result->osabi_name = default_osabi_name;
- result->core_note_type_name = default_core_note_type_name;
- result->object_note_type_name = default_object_note_type_name;
- result->core_note = default_core_note;
- result->auxv_info = default_auxv_info;
- result->object_note = default_object_note;
- result->debugscn_p = default_debugscn_p;
- result->copy_reloc_p = default_copy_reloc_p;
- result->none_reloc_p = default_none_reloc_p;
- result->relative_reloc_p = default_relative_reloc_p;
- result->check_special_symbol = default_check_special_symbol;
- result->bss_plt_p = default_bss_plt_p;
- result->return_value_location = default_return_value_location;
- result->register_info = default_register_info;
- result->syscall_abi = default_syscall_abi;
- result->check_object_attribute = default_check_object_attribute;
- result->disasm = NULL;
- result->destr = default_destr;
- result->sysvhash_entrysize = sizeof (Elf32_Word);
-}
-
-
-/* Find an appropriate backend for the file associated with ELF. */
-static Ebl *
-openbackend (elf, emulation, machine)
- Elf *elf;
- const char *emulation;
- GElf_Half machine;
-{
- Ebl *result;
- size_t cnt;
-
- /* First allocate the data structure for the result. We do this
- here since this assures that the structure is always large
- enough. */
- result = (Ebl *) calloc (1, sizeof (Ebl));
- if (result == NULL)
- {
- // XXX uncomment
- // __libebl_seterror (ELF_E_NOMEM);
- return NULL;
- }
-
- /* Fill in the default callbacks. The initializer for the machine
- specific module can overwrite the values. */
- fill_defaults (result);
-
- /* XXX Currently all we do is to look at 'e_machine' value in the
- ELF header. With an internal mapping table from EM_* value to
- DSO name we try to load the appropriate module to handle this
- binary type.
-
- Multiple modules for the same machine type are possible and they
- will be tried in sequence. The lookup process will only stop
- when a module which can handle the machine type is found or all
- available matching modules are tried. */
- for (cnt = 0; cnt < nmachines; ++cnt)
- if ((emulation != NULL && strcmp (emulation, machines[cnt].emulation) == 0)
- || (emulation == NULL && machines[cnt].em == machine))
- {
- /* Well, we know the emulation name now. */
- result->emulation = machines[cnt].emulation;
-
- /* We access some data structures directly. Make sure the 32 and
- 64 bit variants are laid out the same. */
- assert (offsetof (Elf32_Ehdr, e_machine)
- == offsetof (Elf64_Ehdr, e_machine));
- assert (sizeof (((Elf32_Ehdr *) 0)->e_machine)
- == sizeof (((Elf64_Ehdr *) 0)->e_machine));
- assert (offsetof (Elf, state.elf32.ehdr)
- == offsetof (Elf, state.elf64.ehdr));
-
- /* Prefer taking the information from the ELF file. */
- if (elf == NULL)
- {
- result->machine = machines[cnt].em;
- result->class = machines[cnt].class;
- result->data = machines[cnt].data;
- }
- else
- {
- result->machine = elf->state.elf32.ehdr->e_machine;
- result->class = elf->state.elf32.ehdr->e_ident[EI_CLASS];
- result->data = elf->state.elf32.ehdr->e_ident[EI_DATA];
- }
-
-#ifndef LIBEBL_SUBDIR
-# define LIBEBL_SUBDIR PACKAGE
-#endif
-#define ORIGINDIR "$ORIGIN/../$LIB/" LIBEBL_SUBDIR "/"
-
- /* Give it a try. At least the machine type matches. First
- try to load the module. */
- char dsoname[100];
- strcpy (stpcpy (stpcpy (dsoname, ORIGINDIR "libebl_"),
- machines[cnt].dsoname),
- ".so");
-
- void *h = dlopen (dsoname, RTLD_LAZY);
- if (h == NULL)
- {
- strcpy (stpcpy (stpcpy (dsoname, "libebl_"),
- machines[cnt].dsoname),
- ".so");
- h = dlopen (dsoname, RTLD_LAZY);
- }
-
- /* Try without an explicit path. */
- if (h != NULL)
- {
- /* We managed to load the object. Now see whether the
- initialization function likes our file. */
- static const char version[] = MODVERSION;
- const char *modversion;
- ebl_bhinit_t initp;
- char symname[machines[cnt].prefix_len + sizeof "_init"];
-
- strcpy (mempcpy (symname, machines[cnt].prefix,
- machines[cnt].prefix_len), "_init");
-
- initp = (ebl_bhinit_t) dlsym (h, symname);
- if (initp != NULL
- && (modversion = initp (elf, machine, result, sizeof (Ebl)))
- && strcmp (version, modversion) == 0)
- {
- /* We found a module to handle our file. */
- result->dlhandle = h;
- result->elf = elf;
-
- /* A few entries are mandatory. */
- assert (result->name != NULL);
- assert (result->destr != NULL);
-
- return result;
- }
-
- /* Not the module we need. */
- (void) dlclose (h);
- }
-
- /* We cannot find a DSO but the emulation/machine ID matches.
- Return that information. */
- result->dlhandle = NULL;
- result->elf = elf;
- result->name = machines[cnt].prefix;
- fill_defaults (result);
-
- return result;
- }
-
- /* Nothing matched. We use only the default callbacks. */
- result->dlhandle = NULL;
- result->elf = elf;
- result->emulation = "<unknown>";
- result->name = "<unknown>";
- fill_defaults (result);
-
- return result;
-}
-
-
-/* Find an appropriate backend for the file associated with ELF. */
-Ebl *
-ebl_openbackend (elf)
- Elf *elf;
-{
- GElf_Ehdr ehdr_mem;
- GElf_Ehdr *ehdr;
-
- /* Get the ELF header of the object. */
- ehdr = gelf_getehdr (elf, &ehdr_mem);
- if (ehdr == NULL)
- {
- // XXX uncomment
- // __libebl_seterror (elf_errno ());
- return NULL;
- }
-
- return openbackend (elf, NULL, ehdr->e_machine);
-}
-
-
-/* Find backend without underlying ELF file. */
-Ebl *
-ebl_openbackend_machine (machine)
- GElf_Half machine;
-{
- return openbackend (NULL, NULL, machine);
-}
-
-
-/* Find backend with given emulation name. */
-Ebl *
-ebl_openbackend_emulation (const char *emulation)
-{
- return openbackend (NULL, emulation, EM_NONE);
-}
-
-
-/* Default callbacks. Mostly they just return the error value. */
-static const char *
-default_object_type_name (int ignore __attribute__ ((unused)),
- char *buf __attribute__ ((unused)),
- size_t len __attribute__ ((unused)))
-{
- return NULL;
-}
-
-static const char *
-default_reloc_type_name (int ignore __attribute__ ((unused)),
- char *buf __attribute__ ((unused)),
- size_t len __attribute__ ((unused)))
-{
- return NULL;
-}
-
-static bool
-default_reloc_type_check (int ignore __attribute__ ((unused)))
-{
- return false;
-}
-
-static bool
-default_reloc_valid_use (Elf *elf __attribute__ ((unused)),
- int ignore __attribute__ ((unused)))
-{
- return false;
-}
-
-static Elf_Type
-default_reloc_simple_type (Ebl *eh __attribute__ ((unused)),
- int ignore __attribute__ ((unused)))
-{
- return ELF_T_NUM;
-}
-
-static bool
-default_gotpc_reloc_check (Elf *elf __attribute__ ((unused)),
- int ignore __attribute__ ((unused)))
-{
- return false;
-}
-
-static const char *
-default_segment_type_name (int ignore __attribute__ ((unused)),
- char *buf __attribute__ ((unused)),
- size_t len __attribute__ ((unused)))
-{
- return NULL;
-}
-
-static const char *
-default_section_type_name (int ignore __attribute__ ((unused)),
- char *buf __attribute__ ((unused)),
- size_t len __attribute__ ((unused)))
-{
- return NULL;
-}
-
-static const char *
-default_section_name (int ignore __attribute__ ((unused)),
- int ignore2 __attribute__ ((unused)),
- char *buf __attribute__ ((unused)),
- size_t len __attribute__ ((unused)))
-{
- return NULL;
-}
-
-static const char *
-default_machine_flag_name (Elf64_Word *ignore __attribute__ ((unused)))
-{
- return NULL;
-}
-
-static bool
-default_machine_flag_check (Elf64_Word flags __attribute__ ((unused)))
-{
- return flags == 0;
-}
-
-static bool
-default_machine_section_flag_check (GElf_Xword flags)
-{
- return flags == 0;
-}
-
-static bool
-default_check_special_section (Ebl *ebl __attribute__ ((unused)),
- int ndx __attribute__ ((unused)),
- const GElf_Shdr *shdr __attribute__ ((unused)),
- const char *sname __attribute__ ((unused)))
-{
- return false;
-}
-
-static const char *
-default_symbol_type_name (int ignore __attribute__ ((unused)),
- char *buf __attribute__ ((unused)),
- size_t len __attribute__ ((unused)))
-{
- return NULL;
-}
-
-static const char *
-default_symbol_binding_name (int ignore __attribute__ ((unused)),
- char *buf __attribute__ ((unused)),
- size_t len __attribute__ ((unused)))
-{
- return NULL;
-}
-
-static const char *
-default_dynamic_tag_name (int64_t ignore __attribute__ ((unused)),
- char *buf __attribute__ ((unused)),
- size_t len __attribute__ ((unused)))
-{
- return NULL;
-}
-
-static bool
-default_dynamic_tag_check (int64_t ignore __attribute__ ((unused)))
-{
- return false;
-}
-
-static GElf_Word
-default_sh_flags_combine (GElf_Word flags1, GElf_Word flags2)
-{
- return SH_FLAGS_COMBINE (flags1, flags2);
-}
-
-static void
-default_destr (struct ebl *ignore __attribute__ ((unused)))
-{
-}
-
-static const char *
-default_osabi_name (int ignore __attribute__ ((unused)),
- char *buf __attribute__ ((unused)),
- size_t len __attribute__ ((unused)))
-{
- return NULL;
-}
-
-static const char *
-default_core_note_type_name (uint32_t ignore __attribute__ ((unused)),
- char *buf __attribute__ ((unused)),
- size_t len __attribute__ ((unused)))
-{
- return NULL;
-}
-
-static int
-default_auxv_info (GElf_Xword a_type __attribute__ ((unused)),
- const char **name __attribute__ ((unused)),
- const char **format __attribute__ ((unused)))
-{
- return 0;
-}
-
-static int
-default_core_note (GElf_Word n_type __attribute__ ((unused)),
- GElf_Word descsz __attribute__ ((unused)),
- GElf_Word *ro __attribute__ ((unused)),
- size_t *nregloc __attribute__ ((unused)),
- const Ebl_Register_Location **reglocs
- __attribute__ ((unused)),
- size_t *nitems __attribute__ ((unused)),
- const Ebl_Core_Item **items __attribute__ ((unused)))
-{
- return 0;
-}
-
-static const char *
-default_object_note_type_name (uint32_t ignore __attribute__ ((unused)),
- char *buf __attribute__ ((unused)),
- size_t len __attribute__ ((unused)))
-{
- return NULL;
-}
-
-static bool
-default_object_note (const char *name __attribute__ ((unused)),
- uint32_t type __attribute__ ((unused)),
- uint32_t descsz __attribute__ ((unused)),
- const char *desc __attribute__ ((unused)))
-{
- return NULL;
-}
-
-static bool
-default_debugscn_p (const char *name)
-{
- /* We know by default only about the DWARF debug sections which have
- fixed names. */
- static const char *dwarf_scn_names[] =
- {
- /* DWARF 1 */
- ".debug",
- ".line",
- /* GNU DWARF 1 extensions */
- ".debug_srcinfo",
- ".debug_sfnames",
- /* DWARF 1.1 and DWARF 2 */
- ".debug_aranges",
- ".debug_pubnames",
- /* DWARF 2 */
- ".debug_info",
- ".debug_abbrev",
- ".debug_line",
- ".debug_frame",
- ".debug_str",
- ".debug_loc",
- ".debug_macinfo",
- /* DWARF 3 */
- ".debug_ranges",
- /* SGI/MIPS DWARF 2 extensions */
- ".debug_weaknames",
- ".debug_funcnames",
- ".debug_typenames",
- ".debug_varnames"
- };
- const size_t ndwarf_scn_names = (sizeof (dwarf_scn_names)
- / sizeof (dwarf_scn_names[0]));
- for (size_t cnt = 0; cnt < ndwarf_scn_names; ++cnt)
- if (strcmp (name, dwarf_scn_names[cnt]) == 0)
- return true;
-
- return false;
-}
-
-static bool
-default_copy_reloc_p (int reloc __attribute__ ((unused)))
-{
- return false;
-}
-/* ANDROID_CHANGE_BEGIN */
-#ifndef __APPLE__
-strong_alias (default_copy_reloc_p, default_none_reloc_p)
-strong_alias (default_copy_reloc_p, default_relative_reloc_p)
-#endif
-/* ANDROID_CHANGE_END */
-
-static bool
-default_check_special_symbol (Elf *elf __attribute__ ((unused)),
- GElf_Ehdr *ehdr __attribute__ ((unused)),
- const GElf_Sym *sym __attribute__ ((unused)),
- const char *name __attribute__ ((unused)),
- const GElf_Shdr *destshdr __attribute__ ((unused)))
-{
- return false;
-}
-
-static bool
-default_bss_plt_p (Elf *elf __attribute__ ((unused)),
- GElf_Ehdr *ehdr __attribute__ ((unused)))
-{
- return false;
-}
-
-static int
-default_return_value_location (Dwarf_Die *functypedie __attribute__ ((unused)),
- const Dwarf_Op **locops __attribute__ ((unused)))
-{
- return -2;
-}
-
-static ssize_t
-default_register_info (Ebl *ebl __attribute__ ((unused)),
- int regno, char *name, size_t namelen,
- const char **prefix,
- const char **setname,
- int *bits, int *type)
-{
- if (name == NULL)
- return 0;
-
- *setname = "???";
- *prefix = "";
- *bits = -1;
- *type = DW_ATE_void;
- return snprintf (name, namelen, "reg%d", regno);
-}
-
-static int
-default_syscall_abi (Ebl *ebl __attribute__ ((unused)),
- int *sp, int *pc, int *callno, int args[6])
-{
- *sp = *pc = *callno = -1;
- args[0] = -1;
- args[1] = -1;
- args[2] = -1;
- args[3] = -1;
- args[4] = -1;
- args[5] = -1;
- return -1;
-}
-
-static bool
-default_check_object_attribute (Ebl *ebl __attribute__ ((unused)),
- const char *vendor __attribute__ ((unused)),
- int tag __attribute__ ((unused)),
- uint64_t value __attribute__ ((unused)),
- const char **tag_name, const char **value_name)
-{
- *tag_name = NULL;
- *value_name = NULL;
- return false;
-}
diff --git a/libebl/eblosabiname.c b/libebl/eblosabiname.c
deleted file mode 100644
index 3b38b44..0000000
--- a/libebl/eblosabiname.c
+++ /dev/null
@@ -1,105 +0,0 @@
-/* Return OS ABI name
- Copyright (C) 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdio.h>
-#include <libeblP.h>
-
-
-const char *
-ebl_osabi_name (ebl, osabi, buf, len)
- Ebl *ebl;
- int osabi;
- char *buf;
- size_t len;
-{
- const char *res = ebl != NULL ? ebl->osabi_name (osabi, buf, len) : NULL;
-
- if (res == NULL)
- {
- if (osabi == ELFOSABI_NONE)
- res = "UNIX - System V";
- else if (osabi == ELFOSABI_HPUX)
- res = "HP/UX";
- else if (osabi == ELFOSABI_NETBSD)
- res = "NetBSD";
- else if (osabi == ELFOSABI_LINUX)
- res = "Linux";
- else if (osabi == ELFOSABI_SOLARIS)
- res = "Solaris";
- else if (osabi == ELFOSABI_AIX)
- res = "AIX";
- else if (osabi == ELFOSABI_IRIX)
- res = "Irix";
- else if (osabi == ELFOSABI_FREEBSD)
- res = "FreeBSD";
- else if (osabi == ELFOSABI_TRU64)
- res = "TRU64";
- else if (osabi == ELFOSABI_MODESTO)
- res = "Modesto";
- else if (osabi == ELFOSABI_OPENBSD)
- res = "OpenBSD";
- else if (osabi == ELFOSABI_ARM)
- res = "Arm";
- else if (osabi == ELFOSABI_STANDALONE)
- res = gettext ("Stand alone");
- else
- {
- snprintf (buf, len, "%s: %d", gettext ("<unknown>"), osabi);
-
- res = buf;
- }
- }
-
- return res;
-}
diff --git a/libebl/eblreginfo.c b/libebl/eblreginfo.c
deleted file mode 100644
index 8fc4abf..0000000
--- a/libebl/eblreginfo.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/* Return register name information.
- Copyright (C) 2005, 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <inttypes.h>
-#include <libeblP.h>
-
-
-ssize_t
-ebl_register_info (ebl, regno, name, namelen, prefix, setname, bits, type)
- Ebl *ebl;
- int regno;
- char *name;
- size_t namelen;
- const char **prefix;
- const char **setname;
- int *bits;
- int *type;
-{
- return ebl == NULL ? -1 : ebl->register_info (ebl, regno, name, namelen,
- prefix, setname, bits, type);
-}
diff --git a/libebl/eblrelativerelocp.c b/libebl/eblrelativerelocp.c
deleted file mode 100644
index 8ea97b8..0000000
--- a/libebl/eblrelativerelocp.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Check whether given relocation is a relocation relocation.
- Copyright (C) 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2006.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libeblP.h>
-
-
-bool
-ebl_relative_reloc_p (ebl, reloc)
- Ebl *ebl;
- int reloc;
-{
- return ebl->relative_reloc_p (reloc);
-}
diff --git a/libebl/eblrelocsimpletype.c b/libebl/eblrelocsimpletype.c
deleted file mode 100644
index 87eb5a8..0000000
--- a/libebl/eblrelocsimpletype.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Check relocation type for simple types.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libeblP.h>
-
-
-Elf_Type
-ebl_reloc_simple_type (ebl, reloc)
- Ebl *ebl;
- int reloc;
-{
- return ebl != NULL ? ebl->reloc_simple_type (ebl, reloc) : ELF_T_NUM;
-}
diff --git a/libebl/eblreloctypecheck.c b/libebl/eblreloctypecheck.c
deleted file mode 100644
index 576073c..0000000
--- a/libebl/eblreloctypecheck.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Check relocation type.
- Copyright (C) 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libeblP.h>
-
-
-bool
-ebl_reloc_type_check (ebl, reloc)
- Ebl *ebl;
- int reloc;
-{
- return ebl != NULL ? ebl->reloc_type_check (reloc) : false;
-}
diff --git a/libebl/eblreloctypename.c b/libebl/eblreloctypename.c
deleted file mode 100644
index c715b06..0000000
--- a/libebl/eblreloctypename.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/* Return relocation type name.
- Copyright (C) 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdio.h>
-#include <libeblP.h>
-
-
-const char *
-ebl_reloc_type_name (ebl, reloc, buf, len)
- Ebl *ebl;
- int reloc;
- char *buf;
- size_t len;
-{
- const char *res;
-
- res = ebl != NULL ? ebl->reloc_type_name (reloc, buf, len) : NULL;
- if (res == NULL)
- /* There are no generic relocation type names. */
- res = "???";
-
- return res;
-}
diff --git a/libebl/eblrelocvaliduse.c b/libebl/eblrelocvaliduse.c
deleted file mode 100644
index 40f2715..0000000
--- a/libebl/eblrelocvaliduse.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Check relocation type use.
- Copyright (C) 2003 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libeblP.h>
-
-
-bool
-ebl_reloc_valid_use (ebl, reloc)
- Ebl *ebl;
- int reloc;
-{
- return ebl != NULL ? ebl->reloc_valid_use (ebl->elf, reloc) : false;
-}
diff --git a/libebl/eblretval.c b/libebl/eblretval.c
deleted file mode 100644
index 56dc30f..0000000
--- a/libebl/eblretval.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Return location expression to find return value given a function type DIE.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <inttypes.h>
-#include <libeblP.h>
-
-
-int
-ebl_return_value_location (ebl, functypedie, locops)
- Ebl *ebl;
- Dwarf_Die *functypedie;
- const Dwarf_Op **locops;
-{
- return ebl == NULL ? -1 : ebl->return_value_location (functypedie, locops);
-}
diff --git a/libebl/eblsectionname.c b/libebl/eblsectionname.c
deleted file mode 100644
index f1c2b56..0000000
--- a/libebl/eblsectionname.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/* Return section name.
- Copyright (C) 2001, 2002, 2004 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdio.h>
-#include <libeblP.h>
-
-
-const char *
-ebl_section_name (ebl, section, xsection, buf, len, scnnames, shnum)
- Ebl *ebl;
- int section;
- int xsection;
- char *buf;
- size_t len;
- const char *scnnames[];
- size_t shnum;
-{
- const char *res = ebl != NULL ? ebl->section_name (section, xsection,
- buf, len) : NULL;
-
- if (res == NULL)
- {
- if (section == SHN_UNDEF)
- res = "UNDEF";
- else if (section == SHN_ABS)
- res = "ABS";
- else if (section == SHN_COMMON)
- res = "COMMON";
- else if (section == SHN_BEFORE)
- res = "BEFORE";
- else if (section == SHN_AFTER)
- res = "AFTER";
- else if ((section < SHN_LORESERVE || section == SHN_XINDEX)
- && (size_t) section < shnum)
- {
- int idx = section != SHN_XINDEX ? section : xsection;
-
- if (scnnames != NULL)
- res = scnnames[idx];
- else
- {
- snprintf (buf, len, "%d", idx);
- res = buf;
- }
- }
- else
- {
- /* Handle OS-specific section names. */
- if (section == SHN_XINDEX)
- snprintf (buf, len, "%s: %d", "XINDEX", xsection);
- else if (section >= SHN_LOOS && section <= SHN_HIOS)
- snprintf (buf, len, "LOOS+%x", section - SHN_LOOS);
- /* Handle processor-specific section names. */
- else if (section >= SHN_LOPROC && section <= SHN_HIPROC)
- snprintf (buf, len, "LOPROC+%x", section - SHN_LOPROC);
- else if (section >= SHN_LORESERVE && section <= SHN_HIRESERVE)
- snprintf (buf, len, "LORESERVE+%x", section - SHN_LORESERVE);
- else
- snprintf (buf, len, "%s: %d", gettext ("<unknown>"), section);
-
- res = buf;
- }
- }
-
- return res;
-}
diff --git a/libebl/eblsectionstripp.c b/libebl/eblsectionstripp.c
deleted file mode 100644
index 9aa7502..0000000
--- a/libebl/eblsectionstripp.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/* Check whether section can be stripped.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <string.h>
-#include "libeblP.h"
-
-
-bool
-ebl_section_strip_p (Ebl *ebl, const GElf_Ehdr *ehdr, const GElf_Shdr *shdr,
- const char *name, bool remove_comment,
- bool only_remove_debug)
-{
- /* If only debug information should be removed check the name. There
- is unfortunately no other way. */
- if (unlikely (only_remove_debug))
- {
- if (ebl_debugscn_p (ebl, name))
- return true;
-
- if (shdr->sh_type == SHT_RELA || shdr->sh_type == SHT_REL)
- {
- Elf_Scn *scn_l = elf_getscn (ebl->elf, (shdr)->sh_info);
- GElf_Shdr shdr_mem_l;
- GElf_Shdr *shdr_l = gelf_getshdr (scn_l, &shdr_mem_l);
- if (shdr_l == NULL)
- {
- const char *s_l = elf_strptr (ebl->elf, ehdr->e_shstrndx,
- shdr_l->sh_name);
- if (s_l != NULL && ebl_debugscn_p (ebl, s_l))
- return true;
- }
- }
-
- return false;
- }
-
- return SECTION_STRIP_P (shdr, name, remove_comment);
-}
diff --git a/libebl/eblsectiontypename.c b/libebl/eblsectiontypename.c
deleted file mode 100644
index a37e5f6..0000000
--- a/libebl/eblsectiontypename.c
+++ /dev/null
@@ -1,148 +0,0 @@
-/* Return section type name.
- Copyright (C) 2001, 2002, 2006, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdio.h>
-#include <libeblP.h>
-
-
-const char *
-ebl_section_type_name (ebl, section, buf, len)
- Ebl *ebl;
- int section;
- char *buf;
- size_t len;
-{
- const char *res = ebl->section_type_name (section, buf, len);
-
- if (res == NULL)
- {
- static const char *knowntypes[] =
- {
-#define KNOWNSTYPE(name) [SHT_##name] = #name
- KNOWNSTYPE (NULL),
- KNOWNSTYPE (PROGBITS),
- KNOWNSTYPE (SYMTAB),
- KNOWNSTYPE (STRTAB),
- KNOWNSTYPE (RELA),
- KNOWNSTYPE (HASH),
- KNOWNSTYPE (DYNAMIC),
- KNOWNSTYPE (NOTE),
- KNOWNSTYPE (NOBITS),
- KNOWNSTYPE (REL),
- KNOWNSTYPE (SHLIB),
- KNOWNSTYPE (DYNSYM),
- KNOWNSTYPE (INIT_ARRAY),
- KNOWNSTYPE (FINI_ARRAY),
- KNOWNSTYPE (PREINIT_ARRAY),
- KNOWNSTYPE (GROUP),
- KNOWNSTYPE (SYMTAB_SHNDX)
- };
-
- /* Handle standard names. */
- if ((size_t) section < sizeof (knowntypes) / sizeof (knowntypes[0])
- && knowntypes[section] != NULL)
- res = knowntypes[section];
- /* The symbol versioning/Sun extensions. */
- else if (section >= SHT_LOSUNW && section <= SHT_HISUNW)
- {
- static const char *sunwtypes[] =
- {
-#undef KNOWNSTYPE
-#define KNOWNSTYPE(name) [SHT_##name - SHT_LOSUNW] = #name
- KNOWNSTYPE (SUNW_move),
- KNOWNSTYPE (SUNW_COMDAT),
- KNOWNSTYPE (SUNW_syminfo),
- KNOWNSTYPE (GNU_verdef),
- KNOWNSTYPE (GNU_verneed),
- KNOWNSTYPE (GNU_versym)
- };
- res = sunwtypes[section - SHT_LOSUNW];
- }
- else
- /* A few GNU additions. */
- switch (section)
- {
- case SHT_CHECKSUM:
- res = "CHECKSUM";
- break;
- case SHT_GNU_LIBLIST:
- res = "GNU_LIBLIST";
- break;
- case SHT_GNU_HASH:
- res = "GNU_HASH";
- break;
- case SHT_GNU_ATTRIBUTES:
- res = "GNU_ATTRIBUTES";
- break;
-
- default:
- /* Handle OS-specific section names. */
- if (section >= SHT_LOOS && section <= SHT_HIOS)
- snprintf (buf, len, "SHT_LOOS+%x", section - SHT_LOOS);
- /* Handle processor-specific section names. */
- else if (section >= SHT_LOPROC && section <= SHT_HIPROC)
- snprintf (buf, len, "SHT_LOPROC+%x", section - SHT_LOPROC);
- else if ((unsigned int) section >= SHT_LOUSER
- && (unsigned int) section <= SHT_HIUSER)
- snprintf (buf, len, "SHT_LOUSER+%x", section - SHT_LOUSER);
- else
- snprintf (buf, len, "%s: %d", gettext ("<unknown>"), section);
-
- res = buf;
- break;
- }
- }
-
- return res;
-}
diff --git a/libebl/eblsegmenttypename.c b/libebl/eblsegmenttypename.c
deleted file mode 100644
index 8c4c295..0000000
--- a/libebl/eblsegmenttypename.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/* Return segment type name.
- Copyright (C) 2001, 2002, 2004 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdio.h>
-#include <libeblP.h>
-
-
-const char *
-ebl_segment_type_name (ebl, segment, buf, len)
- Ebl *ebl;
- int segment;
- char *buf;
- size_t len;
-{
- const char *res;
-
- res = ebl != NULL ? ebl->segment_type_name (segment, buf, len) : NULL;
- if (res == NULL)
- {
- static const char *ptypes[PT_NUM] =
- {
-#define PTYPE(name) [PT_##name] = #name
- PTYPE (NULL),
- PTYPE (LOAD),
- PTYPE (DYNAMIC),
- PTYPE (INTERP),
- PTYPE (NOTE),
- PTYPE (SHLIB),
- PTYPE (PHDR),
- PTYPE (TLS)
- };
-
- /* Is it one of the standard segment types? */
- if (segment >= PT_NULL && segment < PT_NUM)
- res = ptypes[segment];
- else if (segment == PT_GNU_EH_FRAME)
- res = "GNU_EH_FRAME";
- else if (segment == PT_GNU_STACK)
- res = "GNU_STACK";
- else if (segment == PT_GNU_RELRO)
- res = "GNU_RELRO";
- else if (segment == PT_SUNWBSS)
- res = "SUNWBSS";
- else if (segment == PT_SUNWSTACK)
- res = "SUNWSTACK";
- else
- {
- if (segment >= PT_LOOS && segment <= PT_HIOS)
- snprintf (buf, len, "LOOS+%d", segment - PT_LOOS);
- else if (segment >= PT_LOPROC && segment <= PT_HIPROC)
- snprintf (buf, len, "LOPROC+%d", segment - PT_LOPROC);
- else
- snprintf (buf, len, "%s: %d", gettext ("<unknown>"), segment);
-
- res = buf;
- }
- }
-
- return res;
-}
diff --git a/libebl/eblshflagscombine.c b/libebl/eblshflagscombine.c
deleted file mode 100644
index 49a6560..0000000
--- a/libebl/eblshflagscombine.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Return combines section header flags value.
- Copyright (C) 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libeblP.h>
-
-
-GElf_Word
-ebl_sh_flags_combine (ebl, flags1, flags2)
- Ebl *ebl;
- GElf_Word flags1;
- GElf_Word flags2;
-{
- return ebl->sh_flags_combine (flags1, flags2);
-}
diff --git a/libebl/eblstrtab.c b/libebl/eblstrtab.c
deleted file mode 100644
index d6ce94a..0000000
--- a/libebl/eblstrtab.c
+++ /dev/null
@@ -1,373 +0,0 @@
-/* ELF string table handling.
- Copyright (C) 2000, 2001, 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <inttypes.h>
-#include <libelf.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/param.h>
-
-#include "libebl.h"
-#include <system.h>
-
-#ifndef MIN
-# define MIN(a, b) ((a) < (b) ? (a) : (b))
-#endif
-
-
-struct Ebl_Strent
-{
- const char *string;
- size_t len;
- struct Ebl_Strent *next;
- struct Ebl_Strent *left;
- struct Ebl_Strent *right;
- size_t offset;
- char reverse[0];
-};
-
-
-struct memoryblock
-{
- struct memoryblock *next;
- char memory[0];
-};
-
-
-struct Ebl_Strtab
-{
- struct Ebl_Strent *root;
- struct memoryblock *memory;
- char *backp;
- size_t left;
- size_t total;
- bool nullstr;
-
- struct Ebl_Strent null;
-};
-
-
-/* Cache for the pagesize. We correct this value a bit so that `malloc'
- is not allocating more than a page. */
-static size_t ps;
-
-
-struct Ebl_Strtab *
-ebl_strtabinit (bool nullstr)
-{
- if (ps == 0)
- {
- ps = sysconf (_SC_PAGESIZE) - 2 * sizeof (void *);
- assert (sizeof (struct memoryblock) < ps);
- }
-
- struct Ebl_Strtab *ret
- = (struct Ebl_Strtab *) calloc (1, sizeof (struct Ebl_Strtab));
- if (ret != NULL)
- {
- ret->nullstr = nullstr;
-
- if (nullstr)
- {
- ret->null.len = 1;
- ret->null.string = "";
- }
- }
-
- return ret;
-}
-
-
-static int
-morememory (struct Ebl_Strtab *st, size_t len)
-{
- if (len < ps)
- len = ps;
-
- struct memoryblock *newmem = (struct memoryblock *) malloc (len);
- if (newmem == NULL)
- return 1;
-
- newmem->next = st->memory;
- st->memory = newmem;
- st->backp = newmem->memory;
- st->left = len - offsetof (struct memoryblock, memory);
-
- return 0;
-}
-
-
-void
-ebl_strtabfree (struct Ebl_Strtab *st)
-{
- struct memoryblock *mb = st->memory;
-
- while (mb != NULL)
- {
- void *old = mb;
- mb = mb->next;
- free (old);
- }
-
- free (st);
-}
-
-
-static struct Ebl_Strent *
-newstring (struct Ebl_Strtab *st, const char *str, size_t len)
-{
- /* Compute the amount of padding needed to make the structure aligned. */
- size_t align = ((__alignof__ (struct Ebl_Strent)
- - (((uintptr_t) st->backp)
- & (__alignof__ (struct Ebl_Strent) - 1)))
- & (__alignof__ (struct Ebl_Strent) - 1));
-
- /* Make sure there is enough room in the memory block. */
- if (st->left < align + sizeof (struct Ebl_Strent) + len)
- {
- if (morememory (st, sizeof (struct Ebl_Strent) + len))
- return NULL;
-
- align = 0;
- }
-
- /* Create the reserved string. */
- struct Ebl_Strent *newstr = (struct Ebl_Strent *) (st->backp + align);
- newstr->string = str;
- newstr->len = len;
- newstr->next = NULL;
- newstr->left = NULL;
- newstr->right = NULL;
- newstr->offset = 0;
- for (int i = len - 2; i >= 0; --i)
- newstr->reverse[i] = str[len - 2 - i];
- newstr->reverse[len - 1] = '\0';
- st->backp += align + sizeof (struct Ebl_Strent) + len;
- st->left -= align + sizeof (struct Ebl_Strent) + len;
-
- return newstr;
-}
-
-
-/* XXX This function should definitely be rewritten to use a balancing
- tree algorith (AVL, red-black trees). For now a simple, correct
- implementation is enough. */
-static struct Ebl_Strent **
-searchstring (struct Ebl_Strent **sep, struct Ebl_Strent *newstr)
-{
- /* More strings? */
- if (*sep == NULL)
- {
- *sep = newstr;
- return sep;
- }
-
- /* Compare the strings. */
- int cmpres = memcmp ((*sep)->reverse, newstr->reverse,
- MIN ((*sep)->len, newstr->len) - 1);
- if (cmpres == 0)
- /* We found a matching string. */
- return sep;
- else if (cmpres > 0)
- return searchstring (&(*sep)->left, newstr);
- else
- return searchstring (&(*sep)->right, newstr);
-}
-
-
-/* Add new string. The actual string is assumed to be permanent. */
-struct Ebl_Strent *
-ebl_strtabadd (struct Ebl_Strtab *st, const char *str, size_t len)
-{
- /* Compute the string length if the caller doesn't know it. */
- if (len == 0)
- len = strlen (str) + 1;
-
- /* Make sure all "" strings get offset 0 but only if the table was
- created with a special null entry in mind. */
- if (len == 1 && st->null.string != NULL)
- return &st->null;
-
- /* Allocate memory for the new string and its associated information. */
- struct Ebl_Strent *newstr = newstring (st, str, len);
- if (newstr == NULL)
- return NULL;
-
- /* Search in the array for the place to insert the string. If there
- is no string with matching prefix and no string with matching
- leading substring, create a new entry. */
- struct Ebl_Strent **sep = searchstring (&st->root, newstr);
- if (*sep != newstr)
- {
- /* This is not the same entry. This means we have a prefix match. */
- if ((*sep)->len > newstr->len)
- {
- /* Check whether we already know this string. */
- for (struct Ebl_Strent *subs = (*sep)->next; subs != NULL;
- subs = subs->next)
- if (subs->len == newstr->len)
- {
- /* We have an exact match with a substring. Free the memory
- we allocated. */
- st->left += st->backp - (char *) newstr;
- st->backp = (char *) newstr;
-
- return subs;
- }
-
- /* We have a new substring. This means we don't need the reverse
- string of this entry anymore. */
- st->backp -= newstr->len;
- st->left += newstr->len;
-
- newstr->next = (*sep)->next;
- (*sep)->next = newstr;
- }
- else if ((*sep)->len != newstr->len)
- {
- /* When we get here it means that the string we are about to
- add has a common prefix with a string we already have but
- it is longer. In this case we have to put it first. */
- st->total += newstr->len - (*sep)->len;
- newstr->next = *sep;
- newstr->left = (*sep)->left;
- newstr->right = (*sep)->right;
- *sep = newstr;
- }
- else
- {
- /* We have an exact match. Free the memory we allocated. */
- st->left += st->backp - (char *) newstr;
- st->backp = (char *) newstr;
-
- newstr = *sep;
- }
- }
- else
- st->total += newstr->len;
-
- return newstr;
-}
-
-
-static void
-copystrings (struct Ebl_Strent *nodep, char **freep, size_t *offsetp)
-{
- if (nodep->left != NULL)
- copystrings (nodep->left, freep, offsetp);
-
- /* Process the current node. */
- nodep->offset = *offsetp;
- *freep = (char *) mempcpy (*freep, nodep->string, nodep->len);
- *offsetp += nodep->len;
-
- for (struct Ebl_Strent *subs = nodep->next; subs != NULL; subs = subs->next)
- {
- assert (subs->len < nodep->len);
- subs->offset = nodep->offset + nodep->len - subs->len;
- assert (subs->offset != 0 || subs->string[0] == '\0');
- }
-
- if (nodep->right != NULL)
- copystrings (nodep->right, freep, offsetp);
-}
-
-
-void
-ebl_strtabfinalize (struct Ebl_Strtab *st, Elf_Data *data)
-{
- size_t nulllen = st->nullstr ? 1 : 0;
-
- /* Fill in the information. */
- data->d_buf = malloc (st->total + nulllen);
- if (data->d_buf == NULL)
- abort ();
-
- /* The first byte must always be zero if we created the table with a
- null string. */
- if (st->nullstr)
- *((char *) data->d_buf) = '\0';
-
- data->d_type = ELF_T_BYTE;
- data->d_size = st->total + nulllen;
- data->d_off = 0;
- data->d_align = 1;
- data->d_version = EV_CURRENT;
-
- /* Now run through the tree and add all the string while also updating
- the offset members of the elfstrent records. */
- char *endp = (char *) data->d_buf + nulllen;
- size_t copylen = nulllen;
- copystrings (st->root, &endp, ©len);
- assert (copylen == st->total + nulllen);
-}
-
-
-size_t
-ebl_strtaboffset (struct Ebl_Strent *se)
-{
- return se->offset;
-}
-
-
-const char *
-ebl_string (struct Ebl_Strent *se)
-{
- assert (se->string != NULL);
-
- return se->string;
-}
diff --git a/libebl/eblsymbolbindingname.c b/libebl/eblsymbolbindingname.c
deleted file mode 100644
index c4412c9..0000000
--- a/libebl/eblsymbolbindingname.c
+++ /dev/null
@@ -1,93 +0,0 @@
-/* Return symbol binding name.
- Copyright (C) 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdio.h>
-#include <libeblP.h>
-
-
-const char *
-ebl_symbol_binding_name (ebl, binding, buf, len)
- Ebl *ebl;
- int binding;
- char *buf;
- size_t len;
-{
- const char *res;
-
- res = ebl != NULL ? ebl->symbol_type_name (binding, buf, len) : NULL;
- if (res == NULL)
- {
- static const char *stb_names[STB_NUM] =
- {
- "LOCAL", "GLOBAL", "WEAK"
- };
-
- /* Standard binding? */
- if (binding < STB_NUM)
- res = stb_names[binding];
- else
- {
- if (binding >= STB_LOPROC && binding <= STB_HIPROC)
- snprintf (buf, len, "LOPROC+%d", binding - STB_LOPROC);
- else if (binding >= STB_LOOS && binding <= STB_HIOS)
- snprintf (buf, len, "LOOS+%d", binding - STB_LOOS);
- else
- snprintf (buf, len, gettext ("<unknown>: %d"), binding);
-
- res = buf;
- }
- }
-
- return res;
-}
diff --git a/libebl/eblsymboltypename.c b/libebl/eblsymboltypename.c
deleted file mode 100644
index c7cb2cb..0000000
--- a/libebl/eblsymboltypename.c
+++ /dev/null
@@ -1,99 +0,0 @@
-/* Return symbol type name.
- Copyright (C) 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdio.h>
-#include <libeblP.h>
-
-
-const char *
-ebl_symbol_type_name (ebl, symbol, buf, len)
- Ebl *ebl;
- int symbol;
- char *buf;
- size_t len;
-{
- const char *res;
-
- res = ebl != NULL ? ebl->symbol_type_name (symbol, buf, len) : NULL;
- if (res == NULL)
- {
- static const char *stt_names[STT_NUM] =
- {
- [STT_NOTYPE] = "NOTYPE",
- [STT_OBJECT] = "OBJECT",
- [STT_FUNC] = "FUNC",
- [STT_SECTION] = "SECTION",
- [STT_FILE] = "FILE",
- [STT_COMMON] = "COMMON",
- [STT_TLS] = "TLS"
- };
-
- /* Standard type? */
- if (symbol < STT_NUM)
- res = stt_names[symbol];
- else
- {
- if (symbol >= STT_LOPROC && symbol <= STT_HIPROC)
- snprintf (buf, len, "LOPROC+%d", symbol - STT_LOPROC);
- else if (symbol >= STT_LOOS && symbol <= STT_HIOS)
- snprintf (buf, len, "LOOS+%d", symbol - STT_LOOS);
- else
- snprintf (buf, len, gettext ("<unknown>: %d"), symbol);
-
- res = buf;
- }
- }
-
- return res;
-}
diff --git a/libebl/eblsysvhashentrysize.c b/libebl/eblsysvhashentrysize.c
deleted file mode 100644
index 341979c..0000000
--- a/libebl/eblsysvhashentrysize.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Return OS ABI name
- Copyright (C) 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2006.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libeblP.h>
-
-
-int
-ebl_sysvhash_entrysize (ebl)
- Ebl *ebl;
-{
- return ebl->sysvhash_entrysize;
-}
diff --git a/libebl/eblwstrtab.c b/libebl/eblwstrtab.c
deleted file mode 100644
index f29c0c7..0000000
--- a/libebl/eblwstrtab.c
+++ /dev/null
@@ -1,380 +0,0 @@
-/* ELF string table handling.
- Copyright (C) 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <inttypes.h>
-#include <libelf.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <wchar.h>
-#include <sys/param.h>
-
-#include "libebl.h"
-#include <system.h>
-
-#ifndef MIN
-# define MIN(a, b) ((a) < (b) ? (a) : (b))
-#endif
-
-
-struct Ebl_WStrent
-{
- const wchar_t *string;
- size_t len;
- struct Ebl_WStrent *next;
- struct Ebl_WStrent *left;
- struct Ebl_WStrent *right;
- size_t offset;
- wchar_t reverse[0];
-};
-
-
-struct memoryblock
-{
- struct memoryblock *next;
- char memory[0];
-};
-
-
-struct Ebl_WStrtab
-{
- struct Ebl_WStrent *root;
- struct memoryblock *memory;
- char *backp;
- size_t left;
- size_t total;
- bool nullstr;
-
- struct Ebl_WStrent null;
-};
-
-
-/* Cache for the pagesize. We correct this value a bit so that `malloc'
- is not allocating more than a page. */
-static size_t ps;
-
-
-struct Ebl_WStrtab *
-ebl_wstrtabinit (bool nullstr)
-{
- struct Ebl_WStrtab *ret;
-
- if (ps == 0)
- {
- ps = sysconf (_SC_PAGESIZE) - 2 * sizeof (void *);
- assert (sizeof (struct memoryblock) < ps);
- }
-
- ret = (struct Ebl_WStrtab *) calloc (1, sizeof (struct Ebl_WStrtab));
- if (ret != NULL)
- {
- ret->nullstr = nullstr;
- if (nullstr)
- {
- ret->null.len = 1;
- ret->null.string = L"";
- }
- }
- return ret;
-}
-
-
-static int
-morememory (struct Ebl_WStrtab *st, size_t len)
-{
- struct memoryblock *newmem;
-
- if (len < ps)
- len = ps;
- newmem = (struct memoryblock *) malloc (len);
- if (newmem == NULL)
- return 1;
-
- newmem->next = st->memory;
- st->memory = newmem;
- st->backp = newmem->memory;
- st->left = len - offsetof (struct memoryblock, memory);
-
- return 0;
-}
-
-
-void
-ebl_wstrtabfree (struct Ebl_WStrtab *st)
-{
- struct memoryblock *mb = st->memory;
-
- while (mb != NULL)
- {
- void *old = mb;
- mb = mb->next;
- free (old);
- }
-
- free (st);
-}
-
-
-static struct Ebl_WStrent *
-newstring (struct Ebl_WStrtab *st, const wchar_t *str, size_t len)
-{
- struct Ebl_WStrent *newstr;
- size_t align;
- int i;
-
- /* Compute the amount of padding needed to make the structure aligned. */
- align = ((__alignof__ (struct Ebl_WStrent)
- - (((uintptr_t) st->backp)
- & (__alignof__ (struct Ebl_WStrent) - 1)))
- & (__alignof__ (struct Ebl_WStrent) - 1));
-
- /* Make sure there is enough room in the memory block. */
- if (st->left < align + sizeof (struct Ebl_WStrent) + len * sizeof (wchar_t))
- {
- if (morememory (st,
- sizeof (struct Ebl_WStrent) + len * sizeof (wchar_t)))
- return NULL;
-
- align = 0;
- }
-
- /* Create the reserved string. */
- newstr = (struct Ebl_WStrent *) (st->backp + align);
- newstr->string = str;
- newstr->len = len;
- newstr->next = NULL;
- newstr->left = NULL;
- newstr->right = NULL;
- newstr->offset = 0;
- for (i = len - 2; i >= 0; --i)
- newstr->reverse[i] = str[len - 2 - i];
- newstr->reverse[len - 1] = L'\0';
- st->backp += align + sizeof (struct Ebl_WStrent) + len * sizeof (wchar_t);
- st->left -= align + sizeof (struct Ebl_WStrent) + len * sizeof (wchar_t);
-
- return newstr;
-}
-
-
-/* XXX This function should definitely be rewritten to use a balancing
- tree algorith (AVL, red-black trees). For now a simple, correct
- implementation is enough. */
-static struct Ebl_WStrent **
-searchstring (struct Ebl_WStrent **sep, struct Ebl_WStrent *newstr)
-{
- int cmpres;
-
- /* More strings? */
- if (*sep == NULL)
- {
- *sep = newstr;
- return sep;
- }
-
- /* Compare the strings. */
- cmpres = wmemcmp ((*sep)->reverse, newstr->reverse,
- MIN ((*sep)->len, newstr->len) - 1);
- if (cmpres == 0)
- /* We found a matching string. */
- return sep;
- else if (cmpres > 0)
- return searchstring (&(*sep)->left, newstr);
- else
- return searchstring (&(*sep)->right, newstr);
-}
-
-
-/* Add new string. The actual string is assumed to be permanent. */
-struct Ebl_WStrent *
-ebl_wstrtabadd (struct Ebl_WStrtab *st, const wchar_t *str, size_t len)
-{
- struct Ebl_WStrent *newstr;
- struct Ebl_WStrent **sep;
-
- /* Compute the string length if the caller doesn't know it. */
- if (len == 0)
- len = wcslen (str) + 1;
-
- /* Make sure all "" strings get offset 0 but only if the table was
- created with a special null entry in mind. */
- if (len == 1 && st->null.string != NULL)
- return &st->null;
-
- /* Allocate memory for the new string and its associated information. */
- newstr = newstring (st, str, len);
- if (newstr == NULL)
- return NULL;
-
- /* Search in the array for the place to insert the string. If there
- is no string with matching prefix and no string with matching
- leading substring, create a new entry. */
- sep = searchstring (&st->root, newstr);
- if (*sep != newstr)
- {
- /* This is not the same entry. This means we have a prefix match. */
- if ((*sep)->len > newstr->len)
- {
- struct Ebl_WStrent *subs;
-
- /* Check whether we already know this string. */
- for (subs = (*sep)->next; subs != NULL; subs = subs->next)
- if (subs->len == newstr->len)
- {
- /* We have an exact match with a substring. Free the memory
- we allocated. */
- st->left += st->backp - (char *) newstr;
- st->backp = (char *) newstr;
-
- return subs;
- }
-
- /* We have a new substring. This means we don't need the reverse
- string of this entry anymore. */
- st->backp -= newstr->len;
- st->left += newstr->len;
-
- newstr->next = (*sep)->next;
- (*sep)->next = newstr;
- }
- else if ((*sep)->len != newstr->len)
- {
- /* When we get here it means that the string we are about to
- add has a common prefix with a string we already have but
- it is longer. In this case we have to put it first. */
- st->total += newstr->len - (*sep)->len;
- newstr->next = *sep;
- newstr->left = (*sep)->left;
- newstr->right = (*sep)->right;
- *sep = newstr;
- }
- else
- {
- /* We have an exact match. Free the memory we allocated. */
- st->left += st->backp - (char *) newstr;
- st->backp = (char *) newstr;
-
- newstr = *sep;
- }
- }
- else
- st->total += newstr->len;
-
- return newstr;
-}
-
-
-static void
-copystrings (struct Ebl_WStrent *nodep, wchar_t **freep, size_t *offsetp)
-{
- struct Ebl_WStrent *subs;
-
- if (nodep->left != NULL)
- copystrings (nodep->left, freep, offsetp);
-
- /* Process the current node. */
- nodep->offset = *offsetp;
- *freep = wmempcpy (*freep, nodep->string, nodep->len);
- *offsetp += nodep->len * sizeof (wchar_t);
-
- for (subs = nodep->next; subs != NULL; subs = subs->next)
- {
- assert (subs->len < nodep->len);
- subs->offset = nodep->offset + nodep->len - subs->len;
- assert (subs->offset != 0 || subs->string[0] == '\0');
- }
-
- if (nodep->right != NULL)
- copystrings (nodep->right, freep, offsetp);
-}
-
-
-void
-ebl_wstrtabfinalize (struct Ebl_WStrtab *st, Elf_Data *data)
-{
- size_t copylen;
- wchar_t *endp;
- size_t nulllen = st->nullstr ? 1 : 0;
-
- /* Fill in the information. */
- data->d_buf = malloc ((st->total + nulllen) * sizeof (wchar_t));
- if (data->d_buf == NULL)
- abort ();
-
- /* The first byte must always be zero if we created the table with a
- null string. */
- if (st->nullstr)
- *((wchar_t *) data->d_buf) = L'\0';
-
- data->d_type = ELF_T_BYTE;
- data->d_size = st->total + nulllen;
- data->d_off = 0;
- data->d_align = 1;
- data->d_version = EV_CURRENT;
-
- /* Now run through the tree and add all the string while also updating
- the offset members of the elfstrent records. */
- endp = (wchar_t *) data->d_buf + nulllen;
- copylen = sizeof (wchar_t) * nulllen;
- copystrings (st->root, &endp, ©len);
- assert (copylen == (st->total + nulllen) * sizeof (wchar_t));
-}
-
-
-size_t
-ebl_wstrtaboffset (struct Ebl_WStrent *se)
-{
- return se->offset;
-}
diff --git a/libebl/libebl.h b/libebl/libebl.h
deleted file mode 100644
index 5025869..0000000
--- a/libebl/libebl.h
+++ /dev/null
@@ -1,368 +0,0 @@
-/* Interface for libebl.
- Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifndef _LIBEBL_H
-#define _LIBEBL_H 1
-
-#include <gelf.h>
-#include "libdw.h"
-#include <stdbool.h>
-#include <stddef.h>
-#include <stdint.h>
-
-#include "elf-knowledge.h"
-
-
-/* Opaque type for the handle. */
-typedef struct ebl Ebl;
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Get backend handle for object associated with ELF handle. */
-extern Ebl *ebl_openbackend (Elf *elf);
-/* Similar but without underlying ELF file. */
-extern Ebl *ebl_openbackend_machine (GElf_Half machine);
-/* Similar but with emulation name given. */
-extern Ebl *ebl_openbackend_emulation (const char *emulation);
-
-/* Free resources allocated for backend handle. */
-extern void ebl_closebackend (Ebl *bh);
-
-
-/* Information about the descriptor. */
-
-/* Get ELF machine. */
-extern int ebl_get_elfmachine (Ebl *ebl) __attribute__ ((__pure__));
-
-/* Get ELF class. */
-extern int ebl_get_elfclass (Ebl *ebl) __attribute__ ((__pure__));
-
-/* Get ELF data encoding. */
-extern int ebl_get_elfdata (Ebl *ebl) __attribute__ ((__pure__));
-
-
-/* Function to call the callback functions including default ELF
- handling. */
-
-/* Return backend name. */
-extern const char *ebl_backend_name (Ebl *ebl);
-
-/* Return relocation type name. */
-extern const char *ebl_object_type_name (Ebl *ebl, int object,
- char *buf, size_t len);
-
-/* Return relocation type name. */
-extern const char *ebl_reloc_type_name (Ebl *ebl, int reloc,
- char *buf, size_t len);
-
-/* Check relocation type. */
-extern bool ebl_reloc_type_check (Ebl *ebl, int reloc);
-
-/* Check relocation type use. */
-extern bool ebl_reloc_valid_use (Ebl *ebl, int reloc);
-
-/* Check if relocation type is for simple absolute relocations.
- Return ELF_T_{BYTE,HALF,SWORD,SXWORD} for a simple type, else ELF_T_NUM. */
-extern Elf_Type ebl_reloc_simple_type (Ebl *ebl, int reloc);
-
-/* Return true if the symbol type is that referencing the GOT. E.g.,
- R_386_GOTPC. */
-extern bool ebl_gotpc_reloc_check (Ebl *ebl, int reloc);
-
-/* Return segment type name. */
-extern const char *ebl_segment_type_name (Ebl *ebl, int segment,
- char *buf, size_t len);
-
-/* Return section type name. */
-extern const char *ebl_section_type_name (Ebl *ebl, int section,
- char *buf, size_t len);
-
-/* Return section name. */
-extern const char *ebl_section_name (Ebl *ebl, int section, int xsection,
- char *buf, size_t len,
- const char *scnnames[], size_t shnum);
-
-/* Return machine flag names. */
-extern const char *ebl_machine_flag_name (Ebl *ebl, GElf_Word flags,
- char *buf, size_t len);
-
-/* Check whether machine flag is valid. */
-extern bool ebl_machine_flag_check (Ebl *ebl, GElf_Word flags);
-
-/* Check whether SHF_MASKPROC flags are valid. */
-extern bool ebl_machine_section_flag_check (Ebl *ebl, GElf_Xword flags);
-
-/* Check whether the section with the given index, header, and name
- is a special machine section that is valid despite a combination
- of flags or other details that are not generically valid. */
-extern bool ebl_check_special_section (Ebl *ebl, int ndx,
- const GElf_Shdr *shdr, const char *name);
-
-/* Return symbol type name. */
-extern const char *ebl_symbol_type_name (Ebl *ebl, int symbol,
- char *buf, size_t len);
-
-/* Return symbol binding name. */
-extern const char *ebl_symbol_binding_name (Ebl *ebl, int binding,
- char *buf, size_t len);
-
-/* Return dynamic tag name. */
-extern const char *ebl_dynamic_tag_name (Ebl *ebl, int64_t tag,
- char *buf, size_t len);
-
-/* Check dynamic tag. */
-extern bool ebl_dynamic_tag_check (Ebl *ebl, int64_t tag);
-
-/* Check whether given symbol's st_value and st_size are OK despite failing
- normal checks. */
-extern bool ebl_check_special_symbol (Ebl *ebl, GElf_Ehdr *ehdr,
- const GElf_Sym *sym, const char *name,
- const GElf_Shdr *destshdr);
-
-/* Return combined section header flags value. */
-extern GElf_Word ebl_sh_flags_combine (Ebl *ebl, GElf_Word flags1,
- GElf_Word flags2);
-
-/* Return symbolic representation of OS ABI. */
-extern const char *ebl_osabi_name (Ebl *ebl, int osabi, char *buf, size_t len);
-
-
-/* Return name of the note section type for a core file. */
-extern const char *ebl_core_note_type_name (Ebl *ebl, uint32_t type, char *buf,
- size_t len);
-
-/* Return name of the note section type for an object file. */
-extern const char *ebl_object_note_type_name (Ebl *ebl, uint32_t type,
- char *buf, size_t len);
-
-/* Print information about object note if available. */
-extern void ebl_object_note (Ebl *ebl, const char *name, uint32_t type,
- uint32_t descsz, const char *desc);
-
-/* Check whether an attribute in a .gnu_attributes section is recognized.
- Fills in *TAG_NAME with the name for this tag.
- If VALUE is a known value for that tag, also fills in *VALUE_NAME. */
-extern bool ebl_check_object_attribute (Ebl *ebl, const char *vendor,
- int tag, uint64_t value,
- const char **tag_name,
- const char **value_name);
-
-
-/* Check section name for being that of a debug informatino section. */
-extern bool ebl_debugscn_p (Ebl *ebl, const char *name);
-
-/* Check whether given relocation is a copy relocation. */
-extern bool ebl_copy_reloc_p (Ebl *ebl, int reloc);
-
-/* Check whether given relocation is a no-op relocation. */
-extern bool ebl_none_reloc_p (Ebl *ebl, int reloc);
-
-/* Check whether given relocation is a relative relocation. */
-extern bool ebl_relative_reloc_p (Ebl *ebl, int reloc);
-
-/* Check whether section should be stripped. */
-extern bool ebl_section_strip_p (Ebl *ebl, const GElf_Ehdr *ehdr,
- const GElf_Shdr *shdr, const char *name,
- bool remove_comment, bool only_remove_debug);
-
-/* Check if backend uses a bss PLT in this file. */
-extern bool ebl_bss_plt_p (Ebl *ebl, GElf_Ehdr *ehdr);
-
-/* Return size of entry in SysV-style hash table. */
-extern int ebl_sysvhash_entrysize (Ebl *ebl);
-
-/* Return location expression to find return value given a
- DW_TAG_subprogram, DW_TAG_subroutine_type, or similar DIE describing
- function itself (whose DW_AT_type attribute describes its return type).
- Returns -1 for a libdw error (see dwarf_errno).
- Returns -2 for an unrecognized type formation.
- Returns zero if the function has no return value (e.g. "void" in C).
- Otherwise, *LOCOPS gets a location expression to find the return value,
- and returns the number of operations in the expression. The pointer is
- permanently allocated at least as long as the Ebl handle is open. */
-extern int ebl_return_value_location (Ebl *ebl,
- Dwarf_Die *functypedie,
- const Dwarf_Op **locops);
-
-/* Fill in register information given DWARF register numbers.
- If NAME is null, return the maximum REGNO + 1 that has a name.
- Otherwise, store in NAME the name for DWARF register number REGNO
- and return the number of bytes written (including '\0' terminator).
- Return -1 if NAMELEN is too short or REGNO is negative or too large.
- Return 0 if REGNO is unused (a gap in the DWARF number assignment).
- On success, set *SETNAME to a description like "integer" or "FPU"
- fit for "%s registers" title display, and *PREFIX to the string
- that precedes NAME in canonical assembler syntax (e.g. "%" or "$").
- The NAME string contains identifier characters only (maybe just digits). */
-extern ssize_t ebl_register_info (Ebl *ebl,
- int regno, char *name, size_t namelen,
- const char **prefix, const char **setname,
- int *bits, int *type);
-
-/* Fill in the DWARF register numbers for the registers used in system calls.
- The SP and PC are what kernel reports call the user stack pointer and PC.
- The CALLNO and ARGS are the system call number and incoming arguments.
- Each of these is filled with the DWARF register number corresponding,
- or -1 if there is none. Returns zero when the information is available. */
-extern int ebl_syscall_abi (Ebl *ebl, int *sp, int *pc,
- int *callno, int args[6]);
-
-/* ELF string table handling. */
-struct Ebl_Strtab;
-struct Ebl_Strent;
-
-/* Create new ELF string table object in memory. */
-extern struct Ebl_Strtab *ebl_strtabinit (bool nullstr);
-
-/* Free resources allocated for ELF string table ST. */
-extern void ebl_strtabfree (struct Ebl_Strtab *st);
-
-/* Add string STR (length LEN is != 0) to ELF string table ST. */
-extern struct Ebl_Strent *ebl_strtabadd (struct Ebl_Strtab *st,
- const char *str, size_t len);
-
-/* Finalize string table ST and store size and memory location information
- in DATA. */
-extern void ebl_strtabfinalize (struct Ebl_Strtab *st, Elf_Data *data);
-
-/* Get offset in string table for string associated with SE. */
-extern size_t ebl_strtaboffset (struct Ebl_Strent *se);
-
-/* Return the string associated with SE. */
-extern const char *ebl_string (struct Ebl_Strent *se);
-
-
-/* ELF wide char string table handling. */
-struct Ebl_WStrtab;
-struct Ebl_WStrent;
-
-/* Create new ELF wide char string table object in memory. */
-extern struct Ebl_WStrtab *ebl_wstrtabinit (bool nullstr);
-
-/* Free resources allocated for ELF wide char string table ST. */
-extern void ebl_wstrtabfree (struct Ebl_WStrtab *st);
-
-/* Add string STR (length LEN is != 0) to ELF string table ST. */
-extern struct Ebl_WStrent *ebl_wstrtabadd (struct Ebl_WStrtab *st,
- const wchar_t *str, size_t len);
-
-/* Finalize string table ST and store size and memory location information
- in DATA. */
-extern void ebl_wstrtabfinalize (struct Ebl_WStrtab *st, Elf_Data *data);
-
-/* Get offset in wide char string table for string associated with SE. */
-extern size_t ebl_wstrtaboffset (struct Ebl_WStrent *se);
-
-
-/* Generic string table handling. */
-struct Ebl_GStrtab;
-struct Ebl_GStrent;
-
-/* Create new string table object in memory. */
-extern struct Ebl_GStrtab *ebl_gstrtabinit (unsigned int width, bool nullstr);
-
-/* Free resources allocated for string table ST. */
-extern void ebl_gstrtabfree (struct Ebl_GStrtab *st);
-
-/* Add string STR (length LEN is != 0) to string table ST. */
-extern struct Ebl_GStrent *ebl_gstrtabadd (struct Ebl_GStrtab *st,
- const char *str, size_t len);
-
-/* Finalize string table ST and store size and memory location information
- in DATA. */
-extern void ebl_gstrtabfinalize (struct Ebl_GStrtab *st, Elf_Data *data);
-
-/* Get offset in wide char string table for string associated with SE. */
-extern size_t ebl_gstrtaboffset (struct Ebl_GStrent *se);
-
-
-/* Register map info. */
-typedef struct
-{
- Dwarf_Half offset; /* Byte offset in register data block. */
- Dwarf_Half regno; /* DWARF register number. */
- uint8_t bits; /* Bits of data for one register. */
- uint8_t pad; /* Bytes of padding after register's data. */
- Dwarf_Half count; /* Consecutive register numbers here. */
-} Ebl_Register_Location;
-
-/* Non-register data items in core notes. */
-typedef struct
-{
- const char *name; /* Printable identifier. */
- const char *group; /* Identifier for category of related items. */
- Dwarf_Half offset; /* Byte offset in note data. */
- Dwarf_Half count;
- Elf_Type type;
- char format;
- bool thread_identifier;
-} Ebl_Core_Item;
-
-/* Describe the format of a core file note with type field matching N_TYPE
- and descriptor size matching DESCSZ. */
-extern int ebl_core_note (Ebl *ebl, GElf_Word n_type, GElf_Word descsz,
- GElf_Word *regs_offset, size_t *nregloc,
- const Ebl_Register_Location **reglocs,
- size_t *nitems, const Ebl_Core_Item **items)
- __nonnull_attribute__ (1, 4, 5, 6, 7, 8);
-
-/* Describe the auxv type number. */
-extern int ebl_auxv_info (Ebl *ebl, GElf_Xword a_type,
- const char **name, const char **format)
- __nonnull_attribute__ (1, 3, 4);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* libebl.h */
diff --git a/libebl/libeblP.h b/libebl/libeblP.h
deleted file mode 100644
index f765291..0000000
--- a/libebl/libeblP.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/* Internal definitions for interface for libebl.
- Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifndef _LIBEBLP_H
-#define _LIBEBLP_H 1
-
-#include <gelf.h>
-#include <libasm.h>
-#include <libebl.h>
-#include <libintl.h>
-
-/* Backend handle. */
-struct ebl
-{
- /* Machine name. */
- const char *name;
-
- /* Emulation name. */
- const char *emulation;
-
- /* ELF machine, class, and data encoding. */
- uint_fast16_t machine;
- uint_fast8_t class;
- uint_fast8_t data;
-
- /* The libelf handle (if known). */
- Elf *elf;
-
- /* See ebl-hooks.h for the declarations of the hook functions. */
-# define EBLHOOK(name) (*name)
-# include "ebl-hooks.h"
-# undef EBLHOOK
-
- /* Size of entry in Sysv-style hash table. */
- int sysvhash_entrysize;
-
- /* Internal data. */
- void *dlhandle;
-};
-
-
-/* Type of the initialization functions in the backend modules. */
-typedef const char *(*ebl_bhinit_t) (Elf *, GElf_Half, Ebl *, size_t);
-
-
-/* gettext helper macros. */
-#undef _
-#define _(Str) dgettext ("elfutils", Str)
-
-#endif /* libeblP.h */
diff --git a/libelf-po/ChangeLog b/libelf-po/ChangeLog
deleted file mode 100644
index 78eb2ff..0000000
--- a/libelf-po/ChangeLog
+++ /dev/null
@@ -1,11 +0,0 @@
-2004-01-18 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.in.in: Set PACKAGE to libelf.
-
-2004-01-17 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.in.in: Find mkinstalldirs script in right directory.
-
-2003-08-11 Ulrich Drepper <drepper@redhat.com>
-
- * Moved to CVS archive.
diff --git a/libelf-po/Makefile b/libelf-po/Makefile
deleted file mode 100644
index afd5647..0000000
--- a/libelf-po/Makefile
+++ /dev/null
@@ -1,369 +0,0 @@
-# Makefile for PO directory in any package using GNU gettext.
-# Copyright (C) 1995-1997, 2000-2002 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
-#
-# This file can be copied and used freely without restrictions. It can
-# be used in projects which are not available under the GNU General Public
-# License but which still want to provide support for the GNU gettext
-# functionality.
-# Please note that the actual code of GNU gettext is covered by the GNU
-# General Public License and is *not* in the public domain.
-
-PACKAGE = libelf
-VERSION = 0.97
-
-SHELL = /bin/sh
-
-
-srcdir = .
-top_srcdir = ..
-
-
-prefix = /work/elfutils/google/linux-install-elfutils-0.97/
-exec_prefix = ${prefix}
-datadir = ${prefix}/share
-localedir = $(datadir)/locale
-gettextsrcdir = $(datadir)/gettext/po
-top_builddir = ..
-
-INSTALL = /usr/bin/install -c
-INSTALL_DATA = ${INSTALL} -m 644
-MKINSTALLDIRS = config/mkinstalldirs
-mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac`
-
-GMSGFMT = /usr/bin/msgfmt
-MSGFMT = /usr/bin/msgfmt
-XGETTEXT = /usr/bin/xgettext
-MSGMERGE = msgmerge
-MSGMERGE_UPDATE = /usr/bin/msgmerge --update
-MSGINIT = msginit
-MSGCONV = msgconv
-MSGFILTER = msgfilter
-
-POFILES =
-GMOFILES =
-UPDATEPOFILES =
-DUMMYPOFILES =
-DISTFILES.common = Makefile.in.in Makevars \
-$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
-DISTFILES = $(DISTFILES.common) POTFILES.in $(DOMAIN).pot \
-$(POFILES) $(GMOFILES) \
-$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
-
-POTFILES = \
- ../libelf/elf_error.c
-
-CATALOGS =
-
-# Makevars gets inserted here. (Don't remove this line!)
-# Makefile variables for PO directory in any package using GNU gettext.
-
-# Usually the message domain is the same as the package name.
-DOMAIN = $(PACKAGE)
-
-# These two variables depend on the location of this directory.
-subdir = po
-top_builddir = ..
-
-# These options get passed to xgettext.
-XGETTEXT_OPTIONS = --keyword=_ --keyword=N_
-
-# This is the copyright holder that gets inserted into the header of the
-# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
-# package. (Note that the msgstr strings, extracted from the package's
-# sources, belong to the copyright holder of the package.) Translators are
-# expected to transfer the copyright for their translations to this person
-# or entity, or to disclaim their copyright. The empty string stands for
-# the public domain; in this case the translators are expected to disclaim
-# their copyright.
-COPYRIGHT_HOLDER = Red Hat, Inc.
-
-# This is the list of locale categories, beyond LC_MESSAGES, for which the
-# message catalogs shall be used. It is usually empty.
-EXTRA_LOCALE_CATEGORIES =
-
-.SUFFIXES:
-.SUFFIXES: .po .gmo .mo .nop .po-update
-
-.po.mo:
- $(MSGFMT) -c -o $@ $<
-
-.po.gmo:
- @lang=`echo $* | sed -e 's,.*/,,'`; \
- test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
- echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \
- cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po
-
-
-all: all-yes
-
-all-yes: $(CATALOGS)
-all-no:
-
-# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
-# otherwise packages like GCC can not be built if only parts of the source
-# have been downloaded.
-
-$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in
- $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
- --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \
- --files-from=$(srcdir)/POTFILES.in \
- --copyright-holder='$(COPYRIGHT_HOLDER)' \
- && test ! -f $(DOMAIN).po \
- || ( rm -f $(srcdir)/$(DOMAIN).pot \
- && mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot )
-
-$(srcdir)/$(DOMAIN).pot:
- $(MAKE) $(DOMAIN).pot-update
-
-$(POFILES): $(srcdir)/$(DOMAIN).pot
- @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
- test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
- echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \
- cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot
-
-
-install: install-exec install-data
-install-exec:
-install-data: install-data-yes
- if test "$(PACKAGE)" = "gettext"; then \
- $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
- for file in $(DISTFILES.common); do \
- $(INSTALL_DATA) $(srcdir)/$$file \
- $(DESTDIR)$(gettextsrcdir)/$$file; \
- done; \
- else \
- : ; \
- fi
-install-data-no: all
-install-data-yes: all
- $(mkinstalldirs) $(DESTDIR)$(datadir)
- @catalogs='$(CATALOGS)'; \
- for cat in $$catalogs; do \
- cat=`basename $$cat`; \
- lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
- dir=$(localedir)/$$lang/LC_MESSAGES; \
- $(mkinstalldirs) $(DESTDIR)$$dir; \
- if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
- $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
- echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
- for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
- if test -n "$$lc"; then \
- if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
- link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
- mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
- mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
- (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
- for file in *; do \
- if test -f $$file; then \
- ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
- fi; \
- done); \
- rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
- else \
- if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
- :; \
- else \
- rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
- mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
- fi; \
- fi; \
- rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
- ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
- ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
- cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
- echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
- fi; \
- done; \
- done
-
-install-strip: install
-
-installdirs: installdirs-exec installdirs-data
-installdirs-exec:
-installdirs-data: installdirs-data-yes
- if test "$(PACKAGE)" = "gettext"; then \
- $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
- else \
- : ; \
- fi
-installdirs-data-no:
-installdirs-data-yes:
- $(mkinstalldirs) $(DESTDIR)$(datadir)
- @catalogs='$(CATALOGS)'; \
- for cat in $$catalogs; do \
- cat=`basename $$cat`; \
- lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
- dir=$(localedir)/$$lang/LC_MESSAGES; \
- $(mkinstalldirs) $(DESTDIR)$$dir; \
- for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
- if test -n "$$lc"; then \
- if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
- link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
- mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
- mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
- (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
- for file in *; do \
- if test -f $$file; then \
- ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
- fi; \
- done); \
- rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
- else \
- if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
- :; \
- else \
- rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
- mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
- fi; \
- fi; \
- fi; \
- done; \
- done
-
-# Define this as empty until I found a useful application.
-installcheck:
-
-uninstall: uninstall-exec uninstall-data
-uninstall-exec:
-uninstall-data: uninstall-data-yes
- if test "$(PACKAGE)" = "gettext"; then \
- for file in $(DISTFILES.common); do \
- rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
- done; \
- else \
- : ; \
- fi
-uninstall-data-no:
-uninstall-data-yes:
- catalogs='$(CATALOGS)'; \
- for cat in $$catalogs; do \
- cat=`basename $$cat`; \
- lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
- for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
- rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
- done; \
- done
-
-check: all
-
-dvi info tags TAGS ID:
-
-mostlyclean:
- rm -f core core.* $(DOMAIN).po *.new.po
- rm -fr *.o
-
-clean: mostlyclean
-
-distclean: clean
- rm -f Makefile Makefile.in POTFILES *.mo
-
-maintainer-clean: distclean
- @echo "This command is intended for maintainers to use;"
- @echo "it deletes files that may require special tools to rebuild."
- rm -f $(GMOFILES)
-
-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
-dist distdir:
- $(MAKE) update-po
- @$(MAKE) dist2
-# This is a separate target because 'update-po' must be executed before.
-dist2: $(DISTFILES)
- dists="$(DISTFILES)"; \
- if test -f $(srcdir)/ChangeLog; then dists="$$dists ChangeLog"; fi; \
- if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
- for file in $$dists; do \
- if test -f $$file; then \
- cp -p $$file $(distdir); \
- else \
- cp -p $(srcdir)/$$file $(distdir); \
- fi; \
- done
-
-update-po: Makefile
- $(MAKE) $(DOMAIN).pot-update
- $(MAKE) $(UPDATEPOFILES)
- $(MAKE) update-gmo
-
-# General rule for updating PO files.
-
-.nop.po-update:
- @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
- if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; fi; \
- tmpdir=`pwd`; \
- echo "$$lang:"; \
- test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
- echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
- cd $(srcdir); \
- if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \
- if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
- rm -f $$tmpdir/$$lang.new.po; \
- else \
- if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
- :; \
- else \
- echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
- exit 1; \
- fi; \
- fi; \
- else \
- echo "msgmerge for $$lang.po failed!" 1>&2; \
- rm -f $$tmpdir/$$lang.new.po; \
- fi
-
-$(DUMMYPOFILES):
-
-update-gmo: Makefile $(GMOFILES)
- @:
-
-Makefile: Makefile.in.in $(top_builddir)/config.status POTFILES.in
- cd $(top_builddir) \
- && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \
- $(SHELL) ./config.status
-
-force:
-
-# Tell versions [3.59,3.63) of GNU make not to export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
-# Special Makefile rules for English message catalogs with quotation marks.
-
-DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot
-
-.SUFFIXES: .insert-header .po-update-en
-
-en@quot.po-update: en@quot.po-update-en
-en@boldquot.po-update: en@boldquot.po-update-en
-
-.insert-header.po-update-en:
- @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \
- if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \
- tmpdir=`pwd`; \
- echo "$$lang:"; \
- ll=`echo $$lang | sed -e 's/@.*//'`; \
- LC_ALL=C; export LC_ALL; \
- cd $(srcdir); \
- if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \
- if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
- rm -f $$tmpdir/$$lang.new.po; \
- else \
- if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
- :; \
- else \
- echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
- exit 1; \
- fi; \
- fi; \
- else \
- echo "creation of $$lang.po failed!" 1>&2; \
- rm -f $$tmpdir/$$lang.new.po; \
- fi
-
-en@quot.insert-header: insert-header.sin
- sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header
-
-en@boldquot.insert-header: insert-header.sin
- sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header
-
-mostlyclean: mostlyclean-quot
-mostlyclean-quot:
- rm -f *.insert-header
diff --git a/libelf-po/Makefile.in b/libelf-po/Makefile.in
deleted file mode 100644
index 21eb20d..0000000
--- a/libelf-po/Makefile.in
+++ /dev/null
@@ -1,301 +0,0 @@
-# Makefile for PO directory in any package using GNU gettext.
-# Copyright (C) 1995-1997, 2000-2002 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
-#
-# This file can be copied and used freely without restrictions. It can
-# be used in projects which are not available under the GNU General Public
-# License but which still want to provide support for the GNU gettext
-# functionality.
-# Please note that the actual code of GNU gettext is covered by the GNU
-# General Public License and is *not* in the public domain.
-
-PACKAGE = libelf
-VERSION = 0.97
-
-SHELL = /bin/sh
-
-
-srcdir = .
-top_srcdir = ..
-
-
-prefix = /work/elfutils/google/linux-install-elfutils-0.97/
-exec_prefix = ${prefix}
-datadir = ${prefix}/share
-localedir = $(datadir)/locale
-gettextsrcdir = $(datadir)/gettext/po
-top_builddir = ..
-
-INSTALL = /usr/bin/install -c
-INSTALL_DATA = ${INSTALL} -m 644
-MKINSTALLDIRS = config/mkinstalldirs
-mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac`
-
-GMSGFMT = /usr/bin/msgfmt
-MSGFMT = /usr/bin/msgfmt
-XGETTEXT = /usr/bin/xgettext
-MSGMERGE = msgmerge
-MSGMERGE_UPDATE = /usr/bin/msgmerge --update
-MSGINIT = msginit
-MSGCONV = msgconv
-MSGFILTER = msgfilter
-
-POFILES = @POFILES@
-GMOFILES = @GMOFILES@
-UPDATEPOFILES = @UPDATEPOFILES@
-DUMMYPOFILES = @DUMMYPOFILES@
-DISTFILES.common = Makefile.in.in Makevars \
-$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
-DISTFILES = $(DISTFILES.common) POTFILES.in $(DOMAIN).pot \
-$(POFILES) $(GMOFILES) \
-$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
-
-POTFILES = \
-
-CATALOGS = @CATALOGS@
-
-# Makevars gets inserted here. (Don't remove this line!)
-
-.SUFFIXES:
-.SUFFIXES: .po .gmo .mo .nop .po-update
-
-.po.mo:
- $(MSGFMT) -c -o $@ $<
-
-.po.gmo:
- @lang=`echo $* | sed -e 's,.*/,,'`; \
- test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
- echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \
- cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po
-
-
-all: all-yes
-
-all-yes: $(CATALOGS)
-all-no:
-
-# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
-# otherwise packages like GCC can not be built if only parts of the source
-# have been downloaded.
-
-$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in
- $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
- --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \
- --files-from=$(srcdir)/POTFILES.in \
- --copyright-holder='$(COPYRIGHT_HOLDER)' \
- && test ! -f $(DOMAIN).po \
- || ( rm -f $(srcdir)/$(DOMAIN).pot \
- && mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot )
-
-$(srcdir)/$(DOMAIN).pot:
- $(MAKE) $(DOMAIN).pot-update
-
-$(POFILES): $(srcdir)/$(DOMAIN).pot
- @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
- test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
- echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \
- cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot
-
-
-install: install-exec install-data
-install-exec:
-install-data: install-data-yes
- if test "$(PACKAGE)" = "gettext"; then \
- $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
- for file in $(DISTFILES.common); do \
- $(INSTALL_DATA) $(srcdir)/$$file \
- $(DESTDIR)$(gettextsrcdir)/$$file; \
- done; \
- else \
- : ; \
- fi
-install-data-no: all
-install-data-yes: all
- $(mkinstalldirs) $(DESTDIR)$(datadir)
- @catalogs='$(CATALOGS)'; \
- for cat in $$catalogs; do \
- cat=`basename $$cat`; \
- lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
- dir=$(localedir)/$$lang/LC_MESSAGES; \
- $(mkinstalldirs) $(DESTDIR)$$dir; \
- if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
- $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
- echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
- for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
- if test -n "$$lc"; then \
- if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
- link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
- mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
- mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
- (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
- for file in *; do \
- if test -f $$file; then \
- ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
- fi; \
- done); \
- rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
- else \
- if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
- :; \
- else \
- rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
- mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
- fi; \
- fi; \
- rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
- ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
- ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
- cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
- echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
- fi; \
- done; \
- done
-
-install-strip: install
-
-installdirs: installdirs-exec installdirs-data
-installdirs-exec:
-installdirs-data: installdirs-data-yes
- if test "$(PACKAGE)" = "gettext"; then \
- $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
- else \
- : ; \
- fi
-installdirs-data-no:
-installdirs-data-yes:
- $(mkinstalldirs) $(DESTDIR)$(datadir)
- @catalogs='$(CATALOGS)'; \
- for cat in $$catalogs; do \
- cat=`basename $$cat`; \
- lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
- dir=$(localedir)/$$lang/LC_MESSAGES; \
- $(mkinstalldirs) $(DESTDIR)$$dir; \
- for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
- if test -n "$$lc"; then \
- if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
- link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
- mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
- mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
- (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
- for file in *; do \
- if test -f $$file; then \
- ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
- fi; \
- done); \
- rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
- else \
- if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
- :; \
- else \
- rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
- mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
- fi; \
- fi; \
- fi; \
- done; \
- done
-
-# Define this as empty until I found a useful application.
-installcheck:
-
-uninstall: uninstall-exec uninstall-data
-uninstall-exec:
-uninstall-data: uninstall-data-yes
- if test "$(PACKAGE)" = "gettext"; then \
- for file in $(DISTFILES.common); do \
- rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
- done; \
- else \
- : ; \
- fi
-uninstall-data-no:
-uninstall-data-yes:
- catalogs='$(CATALOGS)'; \
- for cat in $$catalogs; do \
- cat=`basename $$cat`; \
- lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
- for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
- rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
- done; \
- done
-
-check: all
-
-dvi info tags TAGS ID:
-
-mostlyclean:
- rm -f core core.* $(DOMAIN).po *.new.po
- rm -fr *.o
-
-clean: mostlyclean
-
-distclean: clean
- rm -f Makefile Makefile.in POTFILES *.mo
-
-maintainer-clean: distclean
- @echo "This command is intended for maintainers to use;"
- @echo "it deletes files that may require special tools to rebuild."
- rm -f $(GMOFILES)
-
-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
-dist distdir:
- $(MAKE) update-po
- @$(MAKE) dist2
-# This is a separate target because 'update-po' must be executed before.
-dist2: $(DISTFILES)
- dists="$(DISTFILES)"; \
- if test -f $(srcdir)/ChangeLog; then dists="$$dists ChangeLog"; fi; \
- if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
- for file in $$dists; do \
- if test -f $$file; then \
- cp -p $$file $(distdir); \
- else \
- cp -p $(srcdir)/$$file $(distdir); \
- fi; \
- done
-
-update-po: Makefile
- $(MAKE) $(DOMAIN).pot-update
- $(MAKE) $(UPDATEPOFILES)
- $(MAKE) update-gmo
-
-# General rule for updating PO files.
-
-.nop.po-update:
- @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
- if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; fi; \
- tmpdir=`pwd`; \
- echo "$$lang:"; \
- test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
- echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
- cd $(srcdir); \
- if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \
- if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
- rm -f $$tmpdir/$$lang.new.po; \
- else \
- if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
- :; \
- else \
- echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
- exit 1; \
- fi; \
- fi; \
- else \
- echo "msgmerge for $$lang.po failed!" 1>&2; \
- rm -f $$tmpdir/$$lang.new.po; \
- fi
-
-$(DUMMYPOFILES):
-
-update-gmo: Makefile $(GMOFILES)
- @:
-
-Makefile: Makefile.in.in $(top_builddir)/config.status POTFILES.in
- cd $(top_builddir) \
- && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \
- $(SHELL) ./config.status
-
-force:
-
-# Tell versions [3.59,3.63) of GNU make not to export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/libelf-po/Makefile.in.in b/libelf-po/Makefile.in.in
deleted file mode 100644
index 4a7a268..0000000
--- a/libelf-po/Makefile.in.in
+++ /dev/null
@@ -1,301 +0,0 @@
-# Makefile for PO directory in any package using GNU gettext.
-# Copyright (C) 1995-1997, 2000-2002 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
-#
-# This file can be copied and used freely without restrictions. It can
-# be used in projects which are not available under the GNU General Public
-# License but which still want to provide support for the GNU gettext
-# functionality.
-# Please note that the actual code of GNU gettext is covered by the GNU
-# General Public License and is *not* in the public domain.
-
-PACKAGE = libelf
-VERSION = @VERSION@
-
-SHELL = /bin/sh
-@SET_MAKE@
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-datadir = @datadir@
-localedir = $(datadir)/locale
-gettextsrcdir = $(datadir)/gettext/po
-top_builddir = ..
-
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac`
-
-GMSGFMT = @GMSGFMT@
-MSGFMT = @MSGFMT@
-XGETTEXT = @XGETTEXT@
-MSGMERGE = msgmerge
-MSGMERGE_UPDATE = @MSGMERGE@ --update
-MSGINIT = msginit
-MSGCONV = msgconv
-MSGFILTER = msgfilter
-
-POFILES = @POFILES@
-GMOFILES = @GMOFILES@
-UPDATEPOFILES = @UPDATEPOFILES@
-DUMMYPOFILES = @DUMMYPOFILES@
-DISTFILES.common = Makefile.in.in Makevars \
-$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
-DISTFILES = $(DISTFILES.common) POTFILES.in $(DOMAIN).pot \
-$(POFILES) $(GMOFILES) \
-$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
-
-POTFILES = \
-
-CATALOGS = @CATALOGS@
-
-# Makevars gets inserted here. (Don't remove this line!)
-
-.SUFFIXES:
-.SUFFIXES: .po .gmo .mo .nop .po-update
-
-.po.mo:
- $(MSGFMT) -c -o $@ $<
-
-.po.gmo:
- @lang=`echo $* | sed -e 's,.*/,,'`; \
- test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
- echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \
- cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po
-
-
-all: all-@USE_NLS@
-
-all-yes: $(CATALOGS)
-all-no:
-
-# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
-# otherwise packages like GCC can not be built if only parts of the source
-# have been downloaded.
-
-$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in
- $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
- --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \
- --files-from=$(srcdir)/POTFILES.in \
- --copyright-holder='$(COPYRIGHT_HOLDER)' \
- && test ! -f $(DOMAIN).po \
- || ( rm -f $(srcdir)/$(DOMAIN).pot \
- && mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot )
-
-$(srcdir)/$(DOMAIN).pot:
- $(MAKE) $(DOMAIN).pot-update
-
-$(POFILES): $(srcdir)/$(DOMAIN).pot
- @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
- test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
- echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \
- cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot
-
-
-install: install-exec install-data
-install-exec:
-install-data: install-data-@USE_NLS@
- if test "$(PACKAGE)" = "gettext"; then \
- $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
- for file in $(DISTFILES.common); do \
- $(INSTALL_DATA) $(srcdir)/$$file \
- $(DESTDIR)$(gettextsrcdir)/$$file; \
- done; \
- else \
- : ; \
- fi
-install-data-no: all
-install-data-yes: all
- $(mkinstalldirs) $(DESTDIR)$(datadir)
- @catalogs='$(CATALOGS)'; \
- for cat in $$catalogs; do \
- cat=`basename $$cat`; \
- lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
- dir=$(localedir)/$$lang/LC_MESSAGES; \
- $(mkinstalldirs) $(DESTDIR)$$dir; \
- if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
- $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
- echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
- for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
- if test -n "$$lc"; then \
- if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
- link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
- mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
- mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
- (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
- for file in *; do \
- if test -f $$file; then \
- ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
- fi; \
- done); \
- rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
- else \
- if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
- :; \
- else \
- rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
- mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
- fi; \
- fi; \
- rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
- ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
- ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
- cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
- echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
- fi; \
- done; \
- done
-
-install-strip: install
-
-installdirs: installdirs-exec installdirs-data
-installdirs-exec:
-installdirs-data: installdirs-data-@USE_NLS@
- if test "$(PACKAGE)" = "gettext"; then \
- $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
- else \
- : ; \
- fi
-installdirs-data-no:
-installdirs-data-yes:
- $(mkinstalldirs) $(DESTDIR)$(datadir)
- @catalogs='$(CATALOGS)'; \
- for cat in $$catalogs; do \
- cat=`basename $$cat`; \
- lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
- dir=$(localedir)/$$lang/LC_MESSAGES; \
- $(mkinstalldirs) $(DESTDIR)$$dir; \
- for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
- if test -n "$$lc"; then \
- if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
- link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
- mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
- mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
- (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
- for file in *; do \
- if test -f $$file; then \
- ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
- fi; \
- done); \
- rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
- else \
- if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
- :; \
- else \
- rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
- mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
- fi; \
- fi; \
- fi; \
- done; \
- done
-
-# Define this as empty until I found a useful application.
-installcheck:
-
-uninstall: uninstall-exec uninstall-data
-uninstall-exec:
-uninstall-data: uninstall-data-@USE_NLS@
- if test "$(PACKAGE)" = "gettext"; then \
- for file in $(DISTFILES.common); do \
- rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
- done; \
- else \
- : ; \
- fi
-uninstall-data-no:
-uninstall-data-yes:
- catalogs='$(CATALOGS)'; \
- for cat in $$catalogs; do \
- cat=`basename $$cat`; \
- lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
- for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
- rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
- done; \
- done
-
-check: all
-
-dvi info tags TAGS ID:
-
-mostlyclean:
- rm -f core core.* $(DOMAIN).po *.new.po
- rm -fr *.o
-
-clean: mostlyclean
-
-distclean: clean
- rm -f Makefile Makefile.in POTFILES *.mo
-
-maintainer-clean: distclean
- @echo "This command is intended for maintainers to use;"
- @echo "it deletes files that may require special tools to rebuild."
- rm -f $(GMOFILES)
-
-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
-dist distdir:
- $(MAKE) update-po
- @$(MAKE) dist2
-# This is a separate target because 'update-po' must be executed before.
-dist2: $(DISTFILES)
- dists="$(DISTFILES)"; \
- if test -f $(srcdir)/ChangeLog; then dists="$$dists ChangeLog"; fi; \
- if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
- for file in $$dists; do \
- if test -f $$file; then \
- cp -p $$file $(distdir); \
- else \
- cp -p $(srcdir)/$$file $(distdir); \
- fi; \
- done
-
-update-po: Makefile
- $(MAKE) $(DOMAIN).pot-update
- $(MAKE) $(UPDATEPOFILES)
- $(MAKE) update-gmo
-
-# General rule for updating PO files.
-
-.nop.po-update:
- @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
- if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; fi; \
- tmpdir=`pwd`; \
- echo "$$lang:"; \
- test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
- echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
- cd $(srcdir); \
- if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \
- if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
- rm -f $$tmpdir/$$lang.new.po; \
- else \
- if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
- :; \
- else \
- echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
- exit 1; \
- fi; \
- fi; \
- else \
- echo "msgmerge for $$lang.po failed!" 1>&2; \
- rm -f $$tmpdir/$$lang.new.po; \
- fi
-
-$(DUMMYPOFILES):
-
-update-gmo: Makefile $(GMOFILES)
- @:
-
-Makefile: Makefile.in.in $(top_builddir)/config.status POTFILES.in
- cd $(top_builddir) \
- && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \
- $(SHELL) ./config.status
-
-force:
-
-# Tell versions [3.59,3.63) of GNU make not to export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/libelf-po/Makevars b/libelf-po/Makevars
deleted file mode 100644
index 0accb70..0000000
--- a/libelf-po/Makevars
+++ /dev/null
@@ -1,25 +0,0 @@
-# Makefile variables for PO directory in any package using GNU gettext.
-
-# Usually the message domain is the same as the package name.
-DOMAIN = $(PACKAGE)
-
-# These two variables depend on the location of this directory.
-subdir = po
-top_builddir = ..
-
-# These options get passed to xgettext.
-XGETTEXT_OPTIONS = --keyword=_ --keyword=N_
-
-# This is the copyright holder that gets inserted into the header of the
-# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
-# package. (Note that the msgstr strings, extracted from the package's
-# sources, belong to the copyright holder of the package.) Translators are
-# expected to transfer the copyright for their translations to this person
-# or entity, or to disclaim their copyright. The empty string stands for
-# the public domain; in this case the translators are expected to disclaim
-# their copyright.
-COPYRIGHT_HOLDER = Red Hat, Inc.
-
-# This is the list of locale categories, beyond LC_MESSAGES, for which the
-# message catalogs shall be used. It is usually empty.
-EXTRA_LOCALE_CATEGORIES =
diff --git a/libelf-po/POTFILES b/libelf-po/POTFILES
deleted file mode 100644
index f17f924..0000000
--- a/libelf-po/POTFILES
+++ /dev/null
@@ -1 +0,0 @@
- ../libelf/elf_error.c
diff --git a/libelf-po/POTFILES.in b/libelf-po/POTFILES.in
deleted file mode 100644
index b25620f..0000000
--- a/libelf-po/POTFILES.in
+++ /dev/null
@@ -1,5 +0,0 @@
-# List of files which containing translatable strings.
-# Copyright (C) 2000 Red Hat, Inc.
-
-# Library sources
-libelf/elf_error.c
diff --git a/libelf-po/Rules-quot b/libelf-po/Rules-quot
deleted file mode 100644
index 5f46d23..0000000
--- a/libelf-po/Rules-quot
+++ /dev/null
@@ -1,42 +0,0 @@
-# Special Makefile rules for English message catalogs with quotation marks.
-
-DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot
-
-.SUFFIXES: .insert-header .po-update-en
-
-en@quot.po-update: en@quot.po-update-en
-en@boldquot.po-update: en@boldquot.po-update-en
-
-.insert-header.po-update-en:
- @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \
- if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \
- tmpdir=`pwd`; \
- echo "$$lang:"; \
- ll=`echo $$lang | sed -e 's/@.*//'`; \
- LC_ALL=C; export LC_ALL; \
- cd $(srcdir); \
- if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \
- if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
- rm -f $$tmpdir/$$lang.new.po; \
- else \
- if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
- :; \
- else \
- echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
- exit 1; \
- fi; \
- fi; \
- else \
- echo "creation of $$lang.po failed!" 1>&2; \
- rm -f $$tmpdir/$$lang.new.po; \
- fi
-
-en@quot.insert-header: insert-header.sin
- sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header
-
-en@boldquot.insert-header: insert-header.sin
- sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header
-
-mostlyclean: mostlyclean-quot
-mostlyclean-quot:
- rm -f *.insert-header
diff --git a/libelf-po/boldquot.sed b/libelf-po/boldquot.sed
deleted file mode 100644
index 4b937aa..0000000
--- a/libelf-po/boldquot.sed
+++ /dev/null
@@ -1,10 +0,0 @@
-s/"\([^"]*\)"/“\1”/g
-s/`\([^`']*\)'/‘\1’/g
-s/ '\([^`']*\)' / ‘\1’ /g
-s/ '\([^`']*\)'$/ ‘\1’/g
-s/^'\([^`']*\)' /‘\1’ /g
-s/“”/""/g
-s/“/“[1m/g
-s/”/[0m”/g
-s/‘/‘[1m/g
-s/’/[0m’/g
diff --git a/libelf-po/insert-header.sin b/libelf-po/insert-header.sin
deleted file mode 100644
index b26de01..0000000
--- a/libelf-po/insert-header.sin
+++ /dev/null
@@ -1,23 +0,0 @@
-# Sed script that inserts the file called HEADER before the header entry.
-#
-# At each occurrence of a line starting with "msgid ", we execute the following
-# commands. At the first occurrence, insert the file. At the following
-# occurrences, do nothing. The distinction between the first and the following
-# occurrences is achieved by looking at the hold space.
-/^msgid /{
-x
-# Test if the hold space is empty.
-s/m/m/
-ta
-# Yes it was empty. First occurrence. Read the file.
-r HEADER
-# Output the file's contents by reading the next line. But don't lose the
-# current line while doing this.
-g
-N
-bb
-:a
-# The hold space was nonempty. Following occurrences. Do nothing.
-x
-:b
-}
diff --git a/libelf-po/libelf.pot b/libelf-po/libelf.pot
deleted file mode 100644
index dfcd770..0000000
--- a/libelf-po/libelf.pot
+++ /dev/null
@@ -1,177 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR Red Hat, Inc.
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2004-09-25 12:42-0700\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: libelf/elf_error.c:80
-msgid "no error"
-msgstr ""
-
-#: libelf/elf_error.c:83
-msgid "unknown error"
-msgstr ""
-
-#: libelf/elf_error.c:87
-msgid "unknown version"
-msgstr ""
-
-#: libelf/elf_error.c:91
-msgid "unknown type"
-msgstr ""
-
-#: libelf/elf_error.c:95
-msgid "invalid `Elf' handle"
-msgstr ""
-
-#: libelf/elf_error.c:99
-msgid "invalid size of source operand"
-msgstr ""
-
-#: libelf/elf_error.c:103
-msgid "invalid size of destination operand"
-msgstr ""
-
-#: libelf/elf_error.c:107
-msgid "invalid encoding"
-msgstr ""
-
-#: libelf/elf_error.c:111
-msgid "out of memory"
-msgstr ""
-
-#: libelf/elf_error.c:115
-msgid "invalid file descriptor"
-msgstr ""
-
-#: libelf/elf_error.c:119
-msgid "invalid operation"
-msgstr ""
-
-#: libelf/elf_error.c:123
-msgid "ELF version not set"
-msgstr ""
-
-#: libelf/elf_error.c:127 libelf/elf_error.c:175
-msgid "invalid command"
-msgstr ""
-
-#: libelf/elf_error.c:131 libelf/elf_error.c:191
-msgid "offset out of range"
-msgstr ""
-
-#: libelf/elf_error.c:135
-msgid "invalid fmag field in archive header"
-msgstr ""
-
-#: libelf/elf_error.c:139
-msgid "invalid archive file"
-msgstr ""
-
-#: libelf/elf_error.c:143
-msgid "descriptor is not for an archive"
-msgstr ""
-
-#: libelf/elf_error.c:147
-msgid "no index available"
-msgstr ""
-
-#: libelf/elf_error.c:151
-msgid "cannot read data from file"
-msgstr ""
-
-#: libelf/elf_error.c:155
-msgid "cannot write data to file"
-msgstr ""
-
-#: libelf/elf_error.c:159
-msgid "invalid binary class"
-msgstr ""
-
-#: libelf/elf_error.c:163
-msgid "invalid section index"
-msgstr ""
-
-#: libelf/elf_error.c:167
-msgid "invalid operand"
-msgstr ""
-
-#: libelf/elf_error.c:171
-msgid "invalid section"
-msgstr ""
-
-#: libelf/elf_error.c:179
-msgid "executable header not created first"
-msgstr ""
-
-#: libelf/elf_error.c:183
-msgid "file descriptor disabled"
-msgstr ""
-
-#: libelf/elf_error.c:187
-msgid "archive/member fildes mismatch"
-msgstr ""
-
-#: libelf/elf_error.c:195
-msgid "cannot manipulate null section"
-msgstr ""
-
-#: libelf/elf_error.c:199
-msgid "data/scn mismatch"
-msgstr ""
-
-#: libelf/elf_error.c:203
-msgid "invalid section header"
-msgstr ""
-
-#: libelf/elf_error.c:207
-msgid "invalid data"
-msgstr ""
-
-#: libelf/elf_error.c:211
-msgid "unknown data encoding"
-msgstr ""
-
-#: libelf/elf_error.c:215
-msgid "section `sh_size' too small for data"
-msgstr ""
-
-#: libelf/elf_error.c:219
-msgid "invalid section alignment"
-msgstr ""
-
-#: libelf/elf_error.c:223
-msgid "invalid section entry size"
-msgstr ""
-
-#: libelf/elf_error.c:227
-msgid "update() for write on read-only file"
-msgstr ""
-
-#: libelf/elf_error.c:231
-msgid "no such file"
-msgstr ""
-
-#: libelf/elf_error.c:235
-msgid "only relocatable files can contain section groups"
-msgstr ""
-
-#: libelf/elf_error.c:240
-msgid "program header only allowed in executables and shared objects"
-msgstr ""
-
-#: libelf/elf_error.c:245
-msgid "file has no program header"
-msgstr ""
diff --git a/libelf-po/quot.sed b/libelf-po/quot.sed
deleted file mode 100644
index 0122c46..0000000
--- a/libelf-po/quot.sed
+++ /dev/null
@@ -1,6 +0,0 @@
-s/"\([^"]*\)"/“\1”/g
-s/`\([^`']*\)'/‘\1’/g
-s/ '\([^`']*\)' / ‘\1’ /g
-s/ '\([^`']*\)'$/ ‘\1’/g
-s/^'\([^`']*\)' /‘\1’ /g
-s/“”/""/g
diff --git a/libelf/Android.mk b/libelf/Android.mk
deleted file mode 100755
index 95ccadf..0000000
--- a/libelf/Android.mk
+++ /dev/null
@@ -1,191 +0,0 @@
-# Copyright (C) 2012 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-LOCAL_PATH := $(call my-dir)
-
-supported_platforms := linux-x86 darwin-x86
-cur_platform := $(filter $(HOST_OS)-$(HOST_ARCH),$(supported_platforms))
-
-ifdef cur_platform
-
-#
-# host libelf
-#
-
-include $(CLEAR_VARS)
-
-LIBELF_SRC_FILES := \
- elf32_checksum.c \
- elf32_fsize.c \
- elf32_getehdr.c \
- elf32_getphdr.c \
- elf32_getshdr.c \
- elf32_newehdr.c \
- elf32_newphdr.c \
- elf32_offscn.c \
- elf32_updatefile.c \
- elf32_updatenull.c \
- elf32_xlatetof.c \
- elf32_xlatetom.c \
- elf64_checksum.c \
- elf64_fsize.c \
- elf64_getehdr.c \
- elf64_getphdr.c \
- elf64_getshdr.c \
- elf64_newehdr.c \
- elf64_newphdr.c \
- elf64_offscn.c \
- elf64_updatefile.c \
- elf64_updatenull.c \
- elf64_xlatetof.c \
- elf64_xlatetom.c \
- elf_begin.c \
- elf_clone.c \
- elf_cntl.c \
- elf_end.c \
- elf_error.c \
- elf_fill.c \
- elf_flagdata.c \
- elf_flagehdr.c \
- elf_flagelf.c \
- elf_flagphdr.c \
- elf_flagscn.c \
- elf_flagshdr.c \
- elf_getarhdr.c \
- elf_getaroff.c \
- elf_getarsym.c \
- elf_getbase.c \
- elf_getdata.c \
- elf_getdata_rawchunk.c \
- elf_getident.c \
- elf_getscn.c \
- elf_getshnum.c \
- elf_getshstrndx.c \
- elf_gnu_hash.c \
- elf_hash.c \
- elf_kind.c \
- elf_memory.c \
- elf_ndxscn.c \
- elf_newdata.c \
- elf_newscn.c \
- elf_next.c \
- elf_nextscn.c \
- elf_rand.c \
- elf_rawdata.c \
- elf_rawfile.c \
- elf_readall.c \
- elf_scnshndx.c \
- elf_strptr.c \
- elf_update.c \
- elf_version.c \
- gelf_checksum.c \
- gelf_fsize.c \
- gelf_getauxv.c \
- gelf_getclass.c \
- gelf_getdyn.c \
- gelf_getehdr.c \
- gelf_getlib.c \
- gelf_getmove.c \
- gelf_getnote.c \
- gelf_getphdr.c \
- gelf_getrela.c \
- gelf_getrel.c \
- gelf_getshdr.c \
- gelf_getsym.c \
- gelf_getsyminfo.c \
- gelf_getsymshndx.c \
- gelf_getverdaux.c \
- gelf_getverdef.c \
- gelf_getvernaux.c \
- gelf_getverneed.c \
- gelf_getversym.c \
- gelf_newehdr.c \
- gelf_newphdr.c \
- gelf_offscn.c \
- gelf_update_auxv.c \
- gelf_update_dyn.c \
- gelf_update_ehdr.c \
- gelf_update_lib.c \
- gelf_update_move.c \
- gelf_update_phdr.c \
- gelf_update_rela.c \
- gelf_update_rel.c \
- gelf_update_shdr.c \
- gelf_update_sym.c \
- gelf_update_syminfo.c \
- gelf_update_symshndx.c \
- gelf_update_verdaux.c \
- gelf_update_verdef.c \
- gelf_update_vernaux.c \
- gelf_update_verneed.c \
- gelf_update_versym.c \
- gelf_xlate.c \
- gelf_xlatetof.c \
- gelf_xlatetom.c \
- libelf_crc32.c \
- libelf_next_prime.c \
- nlist.c
-
-LOCAL_SRC_FILES := $(LIBELF_SRC_FILES)
-
-LOCAL_C_INCLUDES := \
- $(LOCAL_PATH)/.. \
- $(LOCAL_PATH)/../lib \
- $(LOCAL_PATH)/../libelf
-
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/../host-$(HOST_OS)-fixup
-
-LOCAL_CFLAGS += -DHAVE_CONFIG_H -std=gnu99 -D_GNU_SOURCE
-
-# to suppress the "pointer of type ‘void *’ used in arithmetic" warning
-LOCAL_CFLAGS += -Wno-pointer-arith
-
-ifeq ($(HOST_OS),darwin)
- LOCAL_CFLAGS += -fnested-functions
-endif
-
-# to fix machine-dependent issues
-LOCAL_CFLAGS += -include $(LOCAL_PATH)/../host-$(HOST_OS)-fixup/AndroidFixup.h
-
-LOCAL_MODULE := libelf
-
-include $(BUILD_HOST_STATIC_LIBRARY)
-
-#
-# target libelf
-#
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(LIBELF_SRC_FILES)
-
-LOCAL_C_INCLUDES := \
- $(LOCAL_PATH)/.. \
- $(LOCAL_PATH)/../lib \
- $(LOCAL_PATH)/../libelf
-
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/../bionic-fixup
-
-LOCAL_CFLAGS += -DHAVE_CONFIG_H -std=gnu99 -Werror
-
-# to suppress the "pointer of type ‘void *’ used in arithmetic" warning
-LOCAL_CFLAGS += -Wno-pointer-arith
-
-LOCAL_CFLAGS += -include $(LOCAL_PATH)/../bionic-fixup/AndroidFixup.h
-
-LOCAL_MODULE := libelf
-
-include $(BUILD_STATIC_LIBRARY)
-
-endif #cur_platform
diff --git a/libelf/ChangeLog b/libelf/ChangeLog
deleted file mode 100644
index 9578f8b..0000000
--- a/libelf/ChangeLog
+++ /dev/null
@@ -1,600 +0,0 @@
-2008-12-11 Roland McGrath <roland@redhat.com>
-
- * elf32_updatefile.c (__elfw2(LIBELFBITS,updatemmap)): Handle
- placement offset going backwards, for out-of-order or overlapping
- (bogus) sh_offset layouts. It's a dumb use, but should not crash.
- (__elfw2(LIBELFBITS,updatefile)): Likewise.
- Fixes RHBZ#476136.
-
- * libelf.h (Elf_Data): Whitespace fix.
-
-2008-12-10 Roland McGrath <roland@redhat.com>
-
- * elf_getarhdr.c (elf_getarhdr): Fix missing rename in last change.
-
-2008-10-22 Petr Machata <pmachata@redhat.com>
-
- * elf_rawfile.c (elf_rawfile): Lock around elf-> references.
-
-2008-10-21 Petr Machata <pmachata@redhat.com>
-
- * libelfP.h: Rename getehdr_rdlock to getehdr_wrlock.
- * elf32_getehdr.c (getehdr_rdlock): Move the code to new function
- getehdr_impl and make it a wrapper. Rename to getehdr_wrlock.
- (getehdr_impl): Guard elf->class init with wrlock.
- (getehdr): Also make it a wrapper of getehdr_impl.
- * elf32_updatenull.c (updatenull_wrlock): Call getehdr_wrlock.
-
-2008-10-20 Petr Machata <pmachata@redhat.com>
-
- * elf_getdata_rawchunk.c (elf_getdata_rawchunk): Lock around the
- code that reads mutable elf state. Relock to write lock to chain
- the new chunk on the elf rawchunks list.
-
-2008-10-20 Petr Machata <pmachata@redhat.com>
-
- * elf32_checksum.c (checksum): Place a lock around the code that
- processes data. Make it wrlock if the code needs to xlate the
- data before processing.
-
-2008-10-16 Petr Machata <pmachata@redhat.com>
-
- * elf_begin.c
- (__libelf_next_arhdr): Rename to __libelf_next_arhdr_wrlock.
- (dup_elf): Adjust the call.
- (elf_begin): New local function lock_dup_elf. Relocks the elf if
- necessary before calling dup. Call this instead of dup_elf.
- * elf_getarhdr.c
- (elf_getarhdr): Lock before calling __libelf_next_arhdr_wrlock.
- * elf_next.c (elf_next): Likewise.
- * elf_rand.c (elf_rand): Likewise.
-
-2008-10-14 Petr Machata <pmachata@redhat.com>
-
- * elf_getdata.c (__elf_getdata_rdlock): Lock before converting.
-
-2008-11-26 Roland McGrath <roland@redhat.com>
-
- * elf.h: Update from glibc.
-
-2008-10-06 Roland McGrath <roland@redhat.com>
-
- * elf_getarhdr.c (elf_getarhdr): Return NULL when passed NULL.
-
-2008-08-27 Roland McGrath <roland@redhat.com>
-
- * elf_begin.c (get_shnum): Avoid misaligned reads for matching endian.
-
- * libelfP.h [!ALLOW_UNALIGNED] (__libelf_type_align): Fix CLASS index.
-
-2008-08-25 Roland McGrath <roland@redhat.com>
-
- * Makefile.am (libelf_so_LDLIBS): New variable.
- (libelf.so): Use it in the link.
-
-2008-08-21 Petr Machata <pmachata@redhat.com>
-
- * elf_getdata.c, libelfP.h
- (__elf_getdata_internal): Rename to __elf_getdata_rdlock.
- (__libelf_set_rawdata_wrlock): New function.
- (__libelf_set_rawdata): Make it a wrapper that calls *_wrlock.
- * elf32_updatenull.c, libelfP.h
- (__elfNN_updatenull): Rename to __elfNN_updatenull_wrlock.
-
-2008-08-21 Petr Machata <pmachata@redhat.com>
-
- * elf32_getphdr.c, libelfP.h
- (__elfNN_getphdr_internal): Drop. Move __elfNN_getphdr_internal
- code to __elfNN_getphdr_wrlock.
- (__elfNN_getphdr_rdlock, __elfNN_getphdr_wrlock): New functions.
- (__elfNN_getphdr_rdlock, __elfNN_getphdr_wrlock): Make these
- wrappers of getphdr_impl.
-
-2008-08-21 Petr Machata <pmachata@redhat.com>
-
- * elf32_getehdr.c, libelfP.h
- (__elfNN_getehdr_internal): Rename to __elfNN_getehdr_rdlock.
- * gelf_getehdr, libelfP.h:
- (__gelf_getehdr_internal): Rename to __gelf_getehdr_rdlock.
-
-2008-08-21 Petr Machata <pmachata@redhat.com>
-
- * elf32_getshdr.c
- (__elfNN_getshdr_internal): Drop.
- (load_shdr_wrlock, scn_valid): New functions, contain bits of
- behaviour from __elfNN_getshdr_internal.
- (__elfNN_getshdr_rdlock, __elfNN_getshdr_wrlock): Replacements for
- dropped _internal functions above.
- * elf_getshnum.c
- (__elf_getshnum_internal): Rename to __elf_getshnum_rdlock.
-
-2008-08-04 Petr Machata <pmachata@redhat.com>
-
- * libelfP.h (RWLOCK_RDLOCK, RWLOCK_WRLOCK, RWLOCK_UNLOCK): New macros.
-
-2008-07-28 Roland McGrath <roland@redhat.com>
-
- * elf.h: Update from glibc.
-
-2008-03-31 Roland McGrath <roland@redhat.com>
-
- * elf32_offscn.c: Make sure shdrs have been read in.
-
-2008-02-19 Roland McGrath <roland@redhat.com>
-
- * elf.h: Update from glibc.
-
-2008-02-08 Roland McGrath <roland@redhat.com>
-
- * elf.h: Update from glibc.
-
-2008-01-31 Ulrich Drepper <drepper@redhat.com>
-
- * elf_strptr.c (elf_strptr): Don't fail if the ELF file is currently
- under construction and no raw data can be read from disk.
-
-2008-01-30 Roland McGrath <roland@redhat.com>
-
- * elf.h: Update from glibc.
-
-2008-01-26 Roland McGrath <roland@redhat.com>
-
- * elf_begin.c (__libelf_next_arhdr): Rewrite conversions using a macro.
- Fixes various pastos in wrong type in sizeof, wrong string parsed.
-
-2008-01-20 Roland McGrath <roland@redhat.com>
-
- * elf_getaroff.c: Calculate from start_offset, instead of using
- parent's state.ar.offset field.
-
-2008-01-08 Roland McGrath <roland@redhat.com>
-
- * Makefile.am (euinclude): Variable removed.
- (pkginclude_HEADERS): Set this instead of euinclude_HEADERS.
-
-2008-01-03 Roland McGrath <roland@redhat.com>
-
- * common.h: Add __attribute__ ((unused)) to static functions.
-
-2007-12-20 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am (libelf_a_SOURCES): Add elf_scnshndx.
- * libelfP.h (struct Elf_Scn): Add shndx_index field.
- Declare __elf_scnshndx_internal.
- * elf32_getshdr.c: Record location of extended section header.
- * elf_begin.c (file_read_elf): Likewise.
- * elf_scnshndx.c: New file.
- * libelf.h: Declare elf_scnshndx.
- * libelf.map: Add elf_scnshndx to version ELFUTILS_1.4.
-
-2007-11-12 Roland McGrath <roland@redhat.com>
-
- * libelf.h: Replace off64_t with loff_t throughout.
- Only that type name is unconditionally defined by <sys/types.h>
-
-2007-11-03 Roland McGrath <roland@redhat.com>
-
- * libelf.h (Elf_Data): Comment fix.
-
-2007-10-18 Roland McGrath <roland@redhat.com>
-
- * elf.h: Update from glibc.
-
-2007-10-07 Roland McGrath <roland@redhat.com>
-
- * elf_begin.c (__libelf_next_arhdr): Fix fencepost error and wrong
- member access in terminating name with no trailing /. Trim trailing
- spaces when there is no /.
-
-2007-10-04 Roland McGrath <roland@redhat.com>
-
- * elf_end.c (elf_end): Don't free ELF->state.ar.ar_sym when it's -1l.
-
-2007-10-03 Roland McGrath <roland@redhat.com>
-
- * libelf.h (Elf_Data): Use off64_t for d_off.
- (Elf_Arhdr): Use off64_t for ar_size.
- (elf_update, elf_getbase, elf_getaroff): Return off64_t.
-
- * gelf_rawchunk.c: File removed.
- * gelf_freechunk.c: File removed.
- * Makefile.am (libelf_a_SOURCES): Remove them.
- * libelf.map (ELFUTILS_1.0): Remove exports.
- * gelf.h: Remove decls.
-
- * elf_getdata_rawchunk.c: New file.
- * Makefile.am (libelf_a_SOURCES): Add it.
- * libelf.map (ELFUTILS_1.3): Add elf_getdata_rawchunk.
- * libelf.h: Declare it.
- * libelfP.h (Elf_Data_Chunk): New type.
- (struct Elf.elf): New member `rawchunks'.
- * elf_end.c (elf_end): Free recorded rawchunk buffers.
-
-2007-08-24 Roland McGrath <roland@redhat.com>
-
- * gelf_getnote.c: New file.
- * Makefile.am (libelf_a_SOURCES): Add it.
- * gelf.h: Declare gelf_getnote.
- * libelf.map (ELFUTILS_1.3): Add gelf_getnote.
-
- * libelfP.h (NOTE_ALIGN): New macro.
- * note_xlate.h: New file.
- * Makefile.am (noinst_HEADERS): Add it.
- * gelf_xlate.c: Include it.
- (__elf_xfctstom): Use elf_cvt_note.
- * elf_getdata.c (shtype_map, __libelf_type_align): Handle SHT_NOTE.
- (__libelf_set_rawdata): Likewise.
-
-2007-08-19 Roland McGrath <roland@redhat.com>
-
- * gelf_update_auxv.c: New file.
- * gelf_getauxv.c: New file.
- * Makefile.am (libelf_a_SOURCES): Add them.
- * gelf.h: Declare gelf_getauxv, gelf_update_auxv.
- * libelf.map (ELFUTILS_1.3): New set, inherits fom ELFUTILS_1.2.
- Export gelf_getauxv, gelf_update_auxv.
-
- * libelf.h (Elf_Type): Add ELF_T_AUXV.
- * abstract.h: Add auxv_t entries.
- * exttypes.h: Likewise.
- * gelf_xlate.h: Likewise.
- * gelf_xlate.c (__elf_xfctstom): Add ELF_T_AUXV entries.
- * gelf_fsize.c (__libelf_type_sizes): Likewise.
-
-2007-08-12 Roland McGrath <roland@redhat.com>
-
- * elf32_updatefile.c (compare_sections): Sort secondarily on sh_size,
- and only tertiarily on index.
-
-2007-07-09 Roland McGrath <roland@redhat.com>
-
- * elf.h: Update from glibc.
-
-2007-04-22 Roland McGrath <roland@redhat.com>
-
- * elf.h: Update from glibc.
-
-2007-03-18 Roland McGrath <roland@redhat.com>
-
- * elf_begin.c (get_shnum): Fix test for e_shoff being out of bounds.
- Return zero when the section headers do not fit within MAXSIZE.
-
-2007-03-09 Roland McGrath <roland@redhat.com>
-
- * libelfP.h (LIBELF_EV_IDX): New macro.
- (__libelf_type_align): New macro.
- [! ALLOW_UNALIGNED]: Declare __libc_type_aligns array.
- * elf_getdata.c (shtype_map): Convert to just Elf_Type[][].
- (convert_data, __libelf_set_rawdata): Use that, __libelf_type_align,
- and __libelf_type_sizes, in place of old table.
- (__libc_type_aligns): New const variable.
-
-2007-02-04 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile (libelf.so): Build with -z relro.
-
- * elf_begin.c (read_file): When using ELF_C_READ_MMAP use MAP_PRIVATE.
-
-2007-01-30 Ulrich Drepper <drepper@redhat.com>
-
- * nlist.c: Close file descriptor before returning.
-
-2007-01-20 Roland McGrath <roland@redhat.com>
-
- * gnuhash_xlate.h (elf_cvt_gnuhash): Fix fence-post error so we
- convert the final word.
-
- * elf32_getshdr.c: Don't byteswap shdr fields when EI_DATA matches
- MY_ELFDATA on !ALLOW_UNALIGNED machines.
-
-2007-01-18 Roland McGrath <roland@redhat.com>
-
- * gelf_rawchunk.c (gelf_rawchunk): Clear RESULT pointer after freeing
- it on read error.
-
-2006-10-13 Roland McGrath <roland@redhat.com>
-
- * elf32_updatenull.c: Look for and accept phdr also for ET_CORE.
- * elf_error.c (msgstr): Change ELF_E_INVALID_PHDR string.
-
-2006-08-29 Roland McGrath <roland@redhat.com>
-
- * elf32_getphdr.c: Don't byteswap phdr fields when EI_DATA matches
- MY_ELFDATA on !ALLOW_UNALIGNED machines.
- Reported by Christian Aichinger <Greek0@gmx.net>.
-
- * Makefile.am (CLEANFILES): Add libelf.so.$(VERSION).
-
-2006-08-08 Ulrich Drepper <drepper@redhat.com>
-
- * elf.h (DT_VALNUM): Update.
- (DT_ADDRNUM): Likewise.
-
-2006-07-12 Ulrich Drepper <drepper@redhat.com>
-
- * elf32_updatefile.c: Adjust for internal_function_def removal.
- * elf32_updatenull.c: Likewise.
- * elf_begin.c: Likewise.
- * elf_getdata.c: Likewise.
-
-2006-07-11 Ulrich Drepper <drepper@redhat.com>
-
- * libelf.h: Define ELF_T_GNUHASH.
- * elf_getdata.c (TYPEIDX): Handle SHT_GNU_HASH.
- (shtype_map): Add SHT_GNU_HASH entries.
- * gelf_xlate.c (__elf_xfctstom): Add ELF_T_GNUHASH entries.
- * gnuhash_xlate.h: New file.
- * Makefile.am (noinst_HEADERS): Add gnuhash_xlate.h.
-
-2006-07-06 Ulrich Drepper <drepper@redhat.com>
-
- * elf_gnu_hash.c: New file.
- * libelf.h: Declare elf_gnu_hash.
- * Makefile.am (libelf_a_SOURCES): Add elf_gnu_hash.
- * libelf.map: Add elf_gnu_map for version ELFUTILS_1.2.
-
-2006-06-15 Roland McGrath <roland@redhat.com>
-
- * libelf.h (elf_getarsym): Fix comment typo.
- Rename second parameter to be more explanatory.
- (elf_getident, elf_rawhide): Likewise.
-
-2006-05-28 Ulrich Drepper <drepper@redhat.com>
-
- * elf32_updatefile.c (updatemmap): Preserve section content if
- copying would overwrite them.
- Fix msync paramters.
-
-2006-04-04 Roland McGrath <roland@redhat.com>
-
- * elf32_updatefile.c (updatemmap): Handle other-endian case.
-
-2006-04-04 Ulrich Drepper <drepper@redhat.com>
-
- * elf32_updatefile.c (updatemmap): Cleanups. Remove shdr_dest
- variable. Before writing sections, make a copy of the section
- header data if necessary. Don't write section header while
- writing the section constent, it might overwrite some sections.
- Restore the pointer afterwards.
- * elf32_updatenull.c (updatenull): If the offset of a section in a
- file changed make sure we read the section so that it'll be written
- out.
-
- * elf_update.c: Remove debug message.
-
-2005-12-07 Roland McGrath <roland@redhat.com>
-
- * gelf_xlate.c [! ALLOW_UNALIGNED] (union unaligned): New type.
- (FETCH, STORE): New macros.
- (INLINE3): Use those to do alignment-friendly conversion.
-
- * elf32_getshdr.c: Include map_address and start_offset in alignment
- calculations.
- * elf32_getphdr.c: Likewise.
-
-2005-11-19 Roland McGrath <roland@redhat.com>
-
- * elf.h: Update from glibc.
-
-2005-11-17 Roland McGrath <roland@redhat.com>
-
- * elf.h: Update from glibc.
-
-2005-11-10 Roland McGrath <roland@redhat.com>
-
- * elf.h: Update from glibc.
-
-2005-09-09 Roland McGrath <roland@redhat.com>
-
- * elf_update.c (write_file): Stat the file and fchmod it after update
- if its mode had S_ISUID or S_ISGID bits set.
-
-2005-08-28 Ulrich Drepper <drepper@redhat.com>
-
- * elf32_getphdr.c: Include <system.h>. Use pread_retry instead of
- pread. And branch prediction where useful.
- * elf_begin.c: Likewise.
- * elf_getdata.c: Likewise.
- * elf_getshstrndx.c: Likewise.
- * elf_readall.c: Likewise.
- * gelf_rawchunk.c: Likewise.
- * elf32_updatefile.c: Include <system.h>. Use pread_retry instead of
- pread. And branch prediction where useful.
- * elf_getarsym.c: Don't define pread_retry here.
-
- * Makefile.am: Use $(LINK) not $(CC) when creating DSO.
- (%.os): Use COMPILE.os.
- (COMPILE.os): Filter out gconv options.
-
-2005-08-27 Ulrich Drepper <drepper@redhat.com>
-
- * elf_begin.c (file_read_elf): Avoid reading ELF header from file
- again. Instead accept additional parameter which points to it if we
- don't use mmap.
- (get_shnum): Use passed in e_ident value as source of ELF header.
-
-2005-08-15 Ulrich Drepper <drepper@redhat.com>
-
- * elf_begin.c (__libelf_next_arhdr): Use TEMP_FAILURE_RETRY.
-
- * Makefile (libelf_a_SOURCES): Add elf_getaroff.c.
- * libelf.map: Export elf_getaroff.
- * libelf.h: Declare elf_getaroff.
- * elf_getaroff.c: New file.
-
-2005-08-13 Ulrich Drepper <drepper@redhat.com>
-
- * elf_begin.c (get_shnum): Optimize memory handling. Always read from
- mapped file if available. Fix access to 64-bit sh_size. Recognize
- overflow.
- (file_read_elf): Likewise.
-
-2005-08-12 Roland McGrath <roland@redhat.com>
-
- * elf32_offscn.c: Do not match empty sections at OFFSET unless
- there are no nonempty sections at that offset.
-
-2005-08-07 Ulrich Drepper <drepper@redhat.com>
-
- * elf.h: Update from glibc.
-
-2005-08-06 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am (AM_CFLAGS): Add -fpic when BUILD_STATIC.
-
-2005-08-03 Ulrich Drepper <drepper@redhat.com>
-
- * libelf.map: Move elf32_offscn, elf64_offscn, and gelf_offscn in
- new version ELFUTILS_1.1.1.
-
-2005-08-02 Ulrich Drepper <drepper@redhat.com>
-
- * elf_error.c: Add handling of ELF_E_INVALID_OFFSET.
- * elf32_offscn.c: New file.
- * elf64_offscn.c: New file.
- * gelf_offscn.c: New file.
- * Makefile.am (libelf_a_SOURCES): Add elf32_offscn.c, elf64_offscn.c,
- and gelf_offscn.c.
- * libelf.sym: Export new symbols.
-
-2005-07-23 Ulrich Drepper <drepper@redhat.com>
-
- * elf-knowledge.h (SECTION_STRIP_P): Don't handle removal of debug
- sections here anymore.
- * elf32_checksum.c: Adjust for change in SECTION_STRIP_P interface.
-
- * elf_update.c (elf_update): Get write lock, not read lock.
-
- * elf32_updatenull.c (updatenull): Get section headers if necessary
- and possible.
-
-2005-07-22 Ulrich Drepper <drepper@redhat.com>
-
- * elf32_updatenull.c (updatenull): If program header hasn't been loaded
- yet, try to do it now.
- Don't unnecessarily update overflow of section count in zeroth section
- sh_size field.
- If section content hasn't been read yet, do it before looking for the
- block size. If no section data present, infer size of section header.
-
-2005-05-11 Ulrich Drepper <drepper@redhat.com>
-
- * elf.h: Update again.
-
-2005-05-09 Ulrich Drepper <drepper@redhat.com>
-
- * elf.h: Update from glibc.
-
-2005-05-08 Roland McGrath <roland@redhat.com>
-
- * elf_begin.c (read_file) [_MUDFLAP]: Don't use mmap for now.
- * elf_update.c (write_file) [_MUDFLAP]: Likewise.
-
-2005-03-29 Ulrich Drepper <drepper@redhat.com>
-
- * elf32_checksum.c: Use INTUSE and INTDEF to avoid PLTs.
- * elf_end.c: Likewise.
- * elf_getdata.c: Likewise.
- * gelf_getehdr.c: Likewise.
- * nlist.c: Likewise.
- * libelfP.h: Add declarations of internal functions.
-
-2005-02-15 Ulrich Drepper <drepper@redhat.com>
-
- * common.h (CONVERT): Make sure all values are unsigned.
- (CONVERT_TO): Likewise.
-
- * Makefile.am (AM_CFLAGS): Add -Wformat=2.
- Fix rule to build libelf.so.
-
-2005-02-06 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: Cleanup AM_CFLAGS handling. Add -Wunused -Wextra.
- Remove lint handling.
- * elf32_getphdr.c: Minor cleanups.
- * elf32_getshdr.c: Likewise.
- * elf32_updatefile.c: Likewise.
- * elf32_updatenull.c: Likewise.
- * elf_begin.c: Likewise.
- * elf_error.c: Likewise.
- * elf_getarsym.c: Likewise.
- * elf_getdata.c: Likewise.
- * elf_update.c: Likewise.
- * gelf_xlate.c: Likewise.
-
-2005-02-05 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: Check for text relocations in constructed DSO.
-
- * Makefile.am [MUDFLAP] (AM_CFLAGS): Add -Werror -fpic -fmudflap.
-
-2005-02-04 Ulrich Drepper <drepper@redhat.com>
-
- * gelf_getehdr.c (gelf_getehdr): Slight optimization.
-
- * elf32_checksum.c (checksum): Do not look at NOBITS sections.
-
- * gelf.h: Add gelf_checksum prototype.
-
-2004-09-25 Ulrich Drepper <drepper@redhat.com>
-
- * elf32_checksum.c: Make compile with gcc 4.0.
- * elf32_updatefile.c: Likewise.
- * elf32_updatenull.c: Likewise.
- * elf_begin.c: Likewise.
- * elf_error.c: Likewise.
- * elf_getdata.c: Likewise.
- * elf_getident.c: Likewise.
-
-2004-04-01 Ulrich Drepper <drepper@redhat.com>
-
- * elf.h: Update from glibc.
-
-2004-01-23 Ulrich Drepper <drepper@redhat.com>
-
- * elf_update.c: Fix locking.
- * elf_clone.c: Likewise.
-
- * libelf.h: Define ELF_T_LIB.
- * gelf_getlib.c: New file.
- * gelf_update_lib.c: New file.
- * gelf.h: Declare the new functions. Define GElf_Lib.
- * abstract.h: Define Lib, Lib32, Lib64.
- * gelf_xlate.c (__elf_xfctstom): Add ELF_T_LIB entry.
- * gelf_xlate.h: Add entry for ElfXX_Lib.
- * elf_getdata.c: Recognize SHT_GNU_LIBLIST as a known section type.
- * libelf.map: Add new symbols to ELFUTILS_1.1.
- * Makefile.am (libelf_a_SOURCES): Add gelf_getlib.c and
- gelf_update_lib.c.
-
-2004-01-17 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: Support building with mudflap.
-
- * gelf_xlate.c (INLINE3): Avoid using cast as lvalue.
- * dl-hash.h (_dl_elf_hash): Likewise.
-
-2004-01-05 Ulrich Drepper <drepper@redhat.com>
-
- * elf-knowledge.h: New file. From libelf subdir.
- * Makefile.am (euincludedir): Define.
- (euinclude_HEADERS): Add elf-knowledge.h.
-
-2003-09-24 Ulrich Drepper <drepper@redhat.com>
-
- * elf.h: Define some PT_IA_64_HP_* constants.
-
-2003-09-23 Jakub Jelinek <jakub@redhat.com>
-
- * libelfP.h (struct Elf): Move state.elf64.sizestr_offset after
- state.elf64.scnincr to match state.elf{,32}.
-
-2003-08-12 Ulrich Drepper <drepper@redhat.com>
-
- * elf32_updatefile.c (__updatemmap): When writing back file where
- some sections have not been read in, count their sizes based on
- the section header.
-
-2003-08-11 Ulrich Drepper <drepper@redhat.com>
-
- * Moved to CVS archive.
diff --git a/libelf/Makefile.am b/libelf/Makefile.am
deleted file mode 100644
index 2458ecb..0000000
--- a/libelf/Makefile.am
+++ /dev/null
@@ -1,145 +0,0 @@
-## Process this file with automake to create Makefile.in
-##
-## Copyright (C) 1996-2006, 2007, 2008 Red Hat, Inc.
-## This file is part of Red Hat elfutils.
-##
-## Red Hat elfutils is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by the
-## Free Software Foundation; version 2 of the License.
-##
-## Red Hat elfutils 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
-## General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License along
-## with Red Hat elfutils; if not, write to the Free Software Foundation,
-## Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-##
-## Red Hat elfutils is an included package of the Open Invention Network.
-## An included package of the Open Invention Network is a package for which
-## Open Invention Network licensees cross-license their patents. No patent
-## license is granted, either expressly or impliedly, by designation as an
-## included package. Should you wish to participate in the Open Invention
-## Network licensing program, please visit www.openinventionnetwork.com
-## <http://www.openinventionnetwork.com>.
-##
-DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H
-if MUDFLAP
-AM_CFLAGS = -fmudflap
-else
-AM_CFLAGS =
-endif
-if BUILD_STATIC
-AM_CFLAGS += -fpic
-endif
-AM_CFLAGS += -Wall -Wshadow -Werror -Wunused -Wextra -Wformat=2 -std=gnu99 \
- $($(*F)_CFLAGS)
-INCLUDES = -I$(srcdir) -I$(top_srcdir)/lib -I..
-GCC_INCLUDE = -I$(shell $(CC) -print-file-name=include)
-VERSION = 1
-PACKAGE_VERSION = @PACKAGE_VERSION@
-
-COMPILE.os = $(filter-out -fprofile-arcs, $(filter-out -ftest-coverage, \
- $(COMPILE)))
-
-lib_LIBRARIES = libelf.a
-if !MUDFLAP
-noinst_LIBRARIES = libelf_pic.a
-noinst_PROGRAMS = $(noinst_LIBRARIES:_pic.a=.so)
-endif
-include_HEADERS = libelf.h gelf.h nlist.h
-
-pkginclude_HEADERS = elf-knowledge.h
-
-libelf_a_SOURCES = elf_version.c elf_hash.c elf_error.c elf_fill.c \
- elf_begin.c elf_next.c elf_rand.c elf_end.c elf_kind.c \
- gelf_getclass.c elf_getbase.c elf_getident.c \
- elf32_fsize.c elf64_fsize.c gelf_fsize.c \
- elf32_xlatetof.c elf32_xlatetom.c elf64_xlatetof.c \
- elf64_xlatetom.c gelf_xlate.c \
- elf32_getehdr.c elf64_getehdr.c gelf_getehdr.c \
- elf32_newehdr.c elf64_newehdr.c gelf_newehdr.c \
- gelf_update_ehdr.c \
- elf32_getphdr.c elf64_getphdr.c gelf_getphdr.c \
- elf32_newphdr.c elf64_newphdr.c gelf_newphdr.c \
- gelf_update_phdr.c \
- elf_getarhdr.c elf_getarsym.c \
- elf_rawfile.c elf_readall.c elf_cntl.c \
- elf_getscn.c elf_nextscn.c elf_ndxscn.c elf_newscn.c \
- elf32_getshdr.c elf64_getshdr.c gelf_getshdr.c \
- gelf_update_shdr.c \
- elf_strptr.c elf_rawdata.c elf_getdata.c elf_newdata.c \
- elf_getdata_rawchunk.c \
- elf_flagelf.c elf_flagehdr.c elf_flagphdr.c elf_flagscn.c \
- elf_flagshdr.c elf_flagdata.c elf_memory.c \
- elf_update.c elf32_updatenull.c elf64_updatenull.c \
- elf32_updatefile.c elf64_updatefile.c \
- gelf_getsym.c gelf_update_sym.c \
- gelf_getversym.c gelf_getverneed.c gelf_getvernaux.c \
- gelf_getverdef.c gelf_getverdaux.c \
- gelf_getrel.c gelf_getrela.c \
- gelf_update_rel.c gelf_update_rela.c \
- gelf_getdyn.c gelf_update_dyn.c \
- gelf_getmove.c gelf_update_move.c \
- gelf_getsyminfo.c gelf_update_syminfo.c \
- gelf_getauxv.c gelf_update_auxv.c \
- gelf_getnote.c \
- gelf_xlatetof.c gelf_xlatetom.c \
- nlist.c \
- gelf_getsymshndx.c gelf_update_symshndx.c \
- gelf_update_versym.c gelf_update_verneed.c \
- gelf_update_vernaux.c gelf_update_verdef.c \
- gelf_update_verdaux.c \
- elf_getshnum.c elf_getshstrndx.c \
- gelf_checksum.c elf32_checksum.c elf64_checksum.c \
- libelf_crc32.c libelf_next_prime.c \
- elf_clone.c \
- gelf_getlib.c gelf_update_lib.c \
- elf32_offscn.c elf64_offscn.c gelf_offscn.c \
- elf_getaroff.c \
- elf_gnu_hash.c \
- elf_scnshndx.c
-
-if !MUDFLAP
-libelf_pic_a_SOURCES =
-am_libelf_pic_a_OBJECTS = $(libelf_a_SOURCES:.c=.os)
-
-libelf_so_LDLIBS =
-if USE_TLS
-libelf_so_LDLIBS += -lpthread
-endif
-
-libelf_so_SOURCES =
-libelf.so: libelf_pic.a libelf.map
- $(LINK) -shared -o $@ -Wl,--whole-archive,$<,--no-whole-archive \
- -Wl,--version-script,$(srcdir)/libelf.map,--no-undefined \
- -Wl,--soname,$@.$(VERSION),-z,-defs,-z,relro $(libelf_so_LDLIBS)
- if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi
- ln -fs $@ $@.$(VERSION)
-
-%.os: %.c %.o
- if $(COMPILE.os) -c -o $@ -fpic -DPIC -DSHARED -MT $@ -MD -MP \
- -MF "$(DEPDIR)/$*.Tpo" `test -f '$<' || echo '$(srcdir)/'`$<; \
- then cat "$(DEPDIR)/$*.Tpo" >> "$(DEPDIR)/$*.Po"; \
- rm -f "$(DEPDIR)/$*.Tpo"; \
- else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
- fi
-
-install: install-am libelf.so
- $(mkinstalldirs) $(DESTDIR)$(libdir)
- $(INSTALL_PROGRAM) libelf.so $(DESTDIR)$(libdir)/libelf-$(PACKAGE_VERSION).so
- ln -fs libelf-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir)/libelf.so.$(VERSION)
- ln -fs libelf.so.$(VERSION) $(DESTDIR)$(libdir)/libelf.so
-
-uninstall: uninstall-am
- rm -f $(DESTDIR)$(libdir)/libelf-$(PACKAGE_VERSION).so
- rm -f $(DESTDIR)$(libdir)/libelf.so.$(VERSION)
- rm -f $(DESTDIR)$(libdir)/libelf.so
-endif
-
-noinst_HEADERS = elf.h abstract.h common.h exttypes.h gelf_xlate.h libelfP.h \
- version_xlate.h gnuhash_xlate.h note_xlate.h dl-hash.h
-EXTRA_DIST = libelf.map
-
-CLEANFILES = $(am_libelf_pic_a_OBJECTS) *.gcno *.gcda libelf.so.$(VERSION)
diff --git a/libelf/Makefile.in b/libelf/Makefile.in
deleted file mode 100644
index 73af7d2..0000000
--- a/libelf/Makefile.in
+++ /dev/null
@@ -1,785 +0,0 @@
-# Makefile.in generated by automake 1.10.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-@BUILD_STATIC_TRUE@am__append_1 = -fpic
-@MUDFLAP_FALSE@noinst_PROGRAMS = $(am__EXEEXT_1)
-@MUDFLAP_TRUE@am_libelf_pic_a_OBJECTS =
-@MUDFLAP_FALSE@@USE_TLS_TRUE@am__append_2 = -lpthread
-subdir = libelf
-DIST_COMMON = $(include_HEADERS) $(noinst_HEADERS) \
- $(pkginclude_HEADERS) $(srcdir)/Makefile.am \
- $(srcdir)/Makefile.in ChangeLog
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
- $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
- *) f=$$p;; \
- esac;
-am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)" \
- "$(DESTDIR)$(pkgincludedir)"
-libLIBRARIES_INSTALL = $(INSTALL_DATA)
-LIBRARIES = $(lib_LIBRARIES) $(noinst_LIBRARIES)
-AR = ar
-ARFLAGS = cru
-libelf_a_AR = $(AR) $(ARFLAGS)
-libelf_a_LIBADD =
-am_libelf_a_OBJECTS = elf_version.$(OBJEXT) elf_hash.$(OBJEXT) \
- elf_error.$(OBJEXT) elf_fill.$(OBJEXT) elf_begin.$(OBJEXT) \
- elf_next.$(OBJEXT) elf_rand.$(OBJEXT) elf_end.$(OBJEXT) \
- elf_kind.$(OBJEXT) gelf_getclass.$(OBJEXT) \
- elf_getbase.$(OBJEXT) elf_getident.$(OBJEXT) \
- elf32_fsize.$(OBJEXT) elf64_fsize.$(OBJEXT) \
- gelf_fsize.$(OBJEXT) elf32_xlatetof.$(OBJEXT) \
- elf32_xlatetom.$(OBJEXT) elf64_xlatetof.$(OBJEXT) \
- elf64_xlatetom.$(OBJEXT) gelf_xlate.$(OBJEXT) \
- elf32_getehdr.$(OBJEXT) elf64_getehdr.$(OBJEXT) \
- gelf_getehdr.$(OBJEXT) elf32_newehdr.$(OBJEXT) \
- elf64_newehdr.$(OBJEXT) gelf_newehdr.$(OBJEXT) \
- gelf_update_ehdr.$(OBJEXT) elf32_getphdr.$(OBJEXT) \
- elf64_getphdr.$(OBJEXT) gelf_getphdr.$(OBJEXT) \
- elf32_newphdr.$(OBJEXT) elf64_newphdr.$(OBJEXT) \
- gelf_newphdr.$(OBJEXT) gelf_update_phdr.$(OBJEXT) \
- elf_getarhdr.$(OBJEXT) elf_getarsym.$(OBJEXT) \
- elf_rawfile.$(OBJEXT) elf_readall.$(OBJEXT) elf_cntl.$(OBJEXT) \
- elf_getscn.$(OBJEXT) elf_nextscn.$(OBJEXT) \
- elf_ndxscn.$(OBJEXT) elf_newscn.$(OBJEXT) \
- elf32_getshdr.$(OBJEXT) elf64_getshdr.$(OBJEXT) \
- gelf_getshdr.$(OBJEXT) gelf_update_shdr.$(OBJEXT) \
- elf_strptr.$(OBJEXT) elf_rawdata.$(OBJEXT) \
- elf_getdata.$(OBJEXT) elf_newdata.$(OBJEXT) \
- elf_getdata_rawchunk.$(OBJEXT) elf_flagelf.$(OBJEXT) \
- elf_flagehdr.$(OBJEXT) elf_flagphdr.$(OBJEXT) \
- elf_flagscn.$(OBJEXT) elf_flagshdr.$(OBJEXT) \
- elf_flagdata.$(OBJEXT) elf_memory.$(OBJEXT) \
- elf_update.$(OBJEXT) elf32_updatenull.$(OBJEXT) \
- elf64_updatenull.$(OBJEXT) elf32_updatefile.$(OBJEXT) \
- elf64_updatefile.$(OBJEXT) gelf_getsym.$(OBJEXT) \
- gelf_update_sym.$(OBJEXT) gelf_getversym.$(OBJEXT) \
- gelf_getverneed.$(OBJEXT) gelf_getvernaux.$(OBJEXT) \
- gelf_getverdef.$(OBJEXT) gelf_getverdaux.$(OBJEXT) \
- gelf_getrel.$(OBJEXT) gelf_getrela.$(OBJEXT) \
- gelf_update_rel.$(OBJEXT) gelf_update_rela.$(OBJEXT) \
- gelf_getdyn.$(OBJEXT) gelf_update_dyn.$(OBJEXT) \
- gelf_getmove.$(OBJEXT) gelf_update_move.$(OBJEXT) \
- gelf_getsyminfo.$(OBJEXT) gelf_update_syminfo.$(OBJEXT) \
- gelf_getauxv.$(OBJEXT) gelf_update_auxv.$(OBJEXT) \
- gelf_getnote.$(OBJEXT) gelf_xlatetof.$(OBJEXT) \
- gelf_xlatetom.$(OBJEXT) nlist.$(OBJEXT) \
- gelf_getsymshndx.$(OBJEXT) gelf_update_symshndx.$(OBJEXT) \
- gelf_update_versym.$(OBJEXT) gelf_update_verneed.$(OBJEXT) \
- gelf_update_vernaux.$(OBJEXT) gelf_update_verdef.$(OBJEXT) \
- gelf_update_verdaux.$(OBJEXT) elf_getshnum.$(OBJEXT) \
- elf_getshstrndx.$(OBJEXT) gelf_checksum.$(OBJEXT) \
- elf32_checksum.$(OBJEXT) elf64_checksum.$(OBJEXT) \
- libelf_crc32.$(OBJEXT) libelf_next_prime.$(OBJEXT) \
- elf_clone.$(OBJEXT) gelf_getlib.$(OBJEXT) \
- gelf_update_lib.$(OBJEXT) elf32_offscn.$(OBJEXT) \
- elf64_offscn.$(OBJEXT) gelf_offscn.$(OBJEXT) \
- elf_getaroff.$(OBJEXT) elf_gnu_hash.$(OBJEXT) \
- elf_scnshndx.$(OBJEXT)
-libelf_a_OBJECTS = $(am_libelf_a_OBJECTS)
-libelf_pic_a_AR = $(AR) $(ARFLAGS)
-libelf_pic_a_LIBADD =
-libelf_pic_a_OBJECTS = $(am_libelf_pic_a_OBJECTS)
-@MUDFLAP_FALSE@am__EXEEXT_1 = libelf.so$(EXEEXT)
-PROGRAMS = $(noinst_PROGRAMS)
-am_libelf_so_OBJECTS =
-libelf_so_OBJECTS = $(am_libelf_so_OBJECTS)
-libelf_so_LDADD = $(LDADD)
-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-SOURCES = $(libelf_a_SOURCES) $(libelf_pic_a_SOURCES) \
- $(libelf_so_SOURCES)
-DIST_SOURCES = $(libelf_a_SOURCES) $(libelf_pic_a_SOURCES) \
- $(libelf_so_SOURCES)
-includeHEADERS_INSTALL = $(INSTALL_HEADER)
-pkgincludeHEADERS_INSTALL = $(INSTALL_HEADER)
-HEADERS = $(include_HEADERS) $(noinst_HEADERS) $(pkginclude_HEADERS)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEBUGPRED = @DEBUGPRED@
-DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H
-DEPDIR = @DEPDIR@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EXEEXT = @EXEEXT@
-GMSGFMT = @GMSGFMT@
-GMSGFMT_015 = @GMSGFMT_015@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LDFLAGS = @LDFLAGS@
-LEX = @LEX@
-LEXLIB = @LEXLIB@
-LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
-LIBEBL_SUBDIR = @LIBEBL_SUBDIR@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LOCALEDIR = @LOCALEDIR@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MKDIR_P = @MKDIR_P@
-MODVERSION = @MODVERSION@
-MSGFMT = @MSGFMT@
-MSGFMT_015 = @MSGFMT_015@
-MSGMERGE = @MSGMERGE@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-RANLIB = @RANLIB@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-USE_NLS = @USE_NLS@
-VERSION = 1
-XGETTEXT = @XGETTEXT@
-XGETTEXT_015 = @XGETTEXT_015@
-YACC = @YACC@
-YFLAGS = @YFLAGS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-base_cpu = @base_cpu@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-eu_version = @eu_version@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-@MUDFLAP_FALSE@AM_CFLAGS = $(am__append_1) -Wall -Wshadow -Werror \
-@MUDFLAP_FALSE@ -Wunused -Wextra -Wformat=2 -std=gnu99 \
-@MUDFLAP_FALSE@ $($(*F)_CFLAGS)
-@MUDFLAP_TRUE@AM_CFLAGS = -fmudflap $(am__append_1) -Wall -Wshadow \
-@MUDFLAP_TRUE@ -Werror -Wunused -Wextra -Wformat=2 -std=gnu99 \
-@MUDFLAP_TRUE@ $($(*F)_CFLAGS)
-INCLUDES = -I$(srcdir) -I$(top_srcdir)/lib -I..
-GCC_INCLUDE = -I$(shell $(CC) -print-file-name=include)
-COMPILE.os = $(filter-out -fprofile-arcs, $(filter-out -ftest-coverage, \
- $(COMPILE)))
-
-lib_LIBRARIES = libelf.a
-@MUDFLAP_FALSE@noinst_LIBRARIES = libelf_pic.a
-include_HEADERS = libelf.h gelf.h nlist.h
-pkginclude_HEADERS = elf-knowledge.h
-libelf_a_SOURCES = elf_version.c elf_hash.c elf_error.c elf_fill.c \
- elf_begin.c elf_next.c elf_rand.c elf_end.c elf_kind.c \
- gelf_getclass.c elf_getbase.c elf_getident.c \
- elf32_fsize.c elf64_fsize.c gelf_fsize.c \
- elf32_xlatetof.c elf32_xlatetom.c elf64_xlatetof.c \
- elf64_xlatetom.c gelf_xlate.c \
- elf32_getehdr.c elf64_getehdr.c gelf_getehdr.c \
- elf32_newehdr.c elf64_newehdr.c gelf_newehdr.c \
- gelf_update_ehdr.c \
- elf32_getphdr.c elf64_getphdr.c gelf_getphdr.c \
- elf32_newphdr.c elf64_newphdr.c gelf_newphdr.c \
- gelf_update_phdr.c \
- elf_getarhdr.c elf_getarsym.c \
- elf_rawfile.c elf_readall.c elf_cntl.c \
- elf_getscn.c elf_nextscn.c elf_ndxscn.c elf_newscn.c \
- elf32_getshdr.c elf64_getshdr.c gelf_getshdr.c \
- gelf_update_shdr.c \
- elf_strptr.c elf_rawdata.c elf_getdata.c elf_newdata.c \
- elf_getdata_rawchunk.c \
- elf_flagelf.c elf_flagehdr.c elf_flagphdr.c elf_flagscn.c \
- elf_flagshdr.c elf_flagdata.c elf_memory.c \
- elf_update.c elf32_updatenull.c elf64_updatenull.c \
- elf32_updatefile.c elf64_updatefile.c \
- gelf_getsym.c gelf_update_sym.c \
- gelf_getversym.c gelf_getverneed.c gelf_getvernaux.c \
- gelf_getverdef.c gelf_getverdaux.c \
- gelf_getrel.c gelf_getrela.c \
- gelf_update_rel.c gelf_update_rela.c \
- gelf_getdyn.c gelf_update_dyn.c \
- gelf_getmove.c gelf_update_move.c \
- gelf_getsyminfo.c gelf_update_syminfo.c \
- gelf_getauxv.c gelf_update_auxv.c \
- gelf_getnote.c \
- gelf_xlatetof.c gelf_xlatetom.c \
- nlist.c \
- gelf_getsymshndx.c gelf_update_symshndx.c \
- gelf_update_versym.c gelf_update_verneed.c \
- gelf_update_vernaux.c gelf_update_verdef.c \
- gelf_update_verdaux.c \
- elf_getshnum.c elf_getshstrndx.c \
- gelf_checksum.c elf32_checksum.c elf64_checksum.c \
- libelf_crc32.c libelf_next_prime.c \
- elf_clone.c \
- gelf_getlib.c gelf_update_lib.c \
- elf32_offscn.c elf64_offscn.c gelf_offscn.c \
- elf_getaroff.c \
- elf_gnu_hash.c \
- elf_scnshndx.c
-
-@MUDFLAP_FALSE@libelf_pic_a_SOURCES =
-@MUDFLAP_FALSE@am_libelf_pic_a_OBJECTS = $(libelf_a_SOURCES:.c=.os)
-@MUDFLAP_FALSE@libelf_so_LDLIBS = $(am__append_2)
-@MUDFLAP_FALSE@libelf_so_SOURCES =
-noinst_HEADERS = elf.h abstract.h common.h exttypes.h gelf_xlate.h libelfP.h \
- version_xlate.h gnuhash_xlate.h note_xlate.h dl-hash.h
-
-EXTRA_DIST = libelf.map
-CLEANFILES = $(am_libelf_pic_a_OBJECTS) *.gcno *.gcda libelf.so.$(VERSION)
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
- && exit 0; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits libelf/Makefile'; \
- cd $(top_srcdir) && \
- $(AUTOMAKE) --gnits libelf/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-install-libLIBRARIES: $(lib_LIBRARIES)
- @$(NORMAL_INSTALL)
- test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
- @list='$(lib_LIBRARIES)'; for p in $$list; do \
- if test -f $$p; then \
- f=$(am__strip_dir) \
- echo " $(libLIBRARIES_INSTALL) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
- $(libLIBRARIES_INSTALL) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
- else :; fi; \
- done
- @$(POST_INSTALL)
- @list='$(lib_LIBRARIES)'; for p in $$list; do \
- if test -f $$p; then \
- p=$(am__strip_dir) \
- echo " $(RANLIB) '$(DESTDIR)$(libdir)/$$p'"; \
- $(RANLIB) "$(DESTDIR)$(libdir)/$$p"; \
- else :; fi; \
- done
-
-uninstall-libLIBRARIES:
- @$(NORMAL_UNINSTALL)
- @list='$(lib_LIBRARIES)'; for p in $$list; do \
- p=$(am__strip_dir) \
- echo " rm -f '$(DESTDIR)$(libdir)/$$p'"; \
- rm -f "$(DESTDIR)$(libdir)/$$p"; \
- done
-
-clean-libLIBRARIES:
- -test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES)
-
-clean-noinstLIBRARIES:
- -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
-libelf.a: $(libelf_a_OBJECTS) $(libelf_a_DEPENDENCIES)
- -rm -f libelf.a
- $(libelf_a_AR) libelf.a $(libelf_a_OBJECTS) $(libelf_a_LIBADD)
- $(RANLIB) libelf.a
-libelf_pic.a: $(libelf_pic_a_OBJECTS) $(libelf_pic_a_DEPENDENCIES)
- -rm -f libelf_pic.a
- $(libelf_pic_a_AR) libelf_pic.a $(libelf_pic_a_OBJECTS) $(libelf_pic_a_LIBADD)
- $(RANLIB) libelf_pic.a
-
-clean-noinstPROGRAMS:
- -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
-@MUDFLAP_TRUE@libelf.so$(EXEEXT): $(libelf_so_OBJECTS) $(libelf_so_DEPENDENCIES)
-@MUDFLAP_TRUE@ @rm -f libelf.so$(EXEEXT)
-@MUDFLAP_TRUE@ $(LINK) $(libelf_so_OBJECTS) $(libelf_so_LDADD) $(LIBS)
-
-mostlyclean-compile:
- -rm -f *.$(OBJEXT)
-
-distclean-compile:
- -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32_checksum.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32_fsize.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32_getehdr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32_getphdr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32_getshdr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32_newehdr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32_newphdr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32_offscn.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32_updatefile.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32_updatenull.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32_xlatetof.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32_xlatetom.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64_checksum.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64_fsize.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64_getehdr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64_getphdr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64_getshdr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64_newehdr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64_newphdr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64_offscn.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64_updatefile.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64_updatenull.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64_xlatetof.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64_xlatetom.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_begin.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_clone.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_cntl.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_end.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_error.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_fill.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_flagdata.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_flagehdr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_flagelf.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_flagphdr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_flagscn.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_flagshdr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_getarhdr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_getaroff.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_getarsym.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_getbase.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_getdata.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_getdata_rawchunk.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_getident.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_getscn.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_getshnum.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_getshstrndx.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_gnu_hash.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_hash.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_kind.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_memory.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_ndxscn.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_newdata.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_newscn.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_next.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_nextscn.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_rand.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_rawdata.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_rawfile.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_readall.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_scnshndx.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_strptr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_update.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf_version.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_checksum.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_fsize.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_getauxv.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_getclass.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_getdyn.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_getehdr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_getlib.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_getmove.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_getnote.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_getphdr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_getrel.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_getrela.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_getshdr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_getsym.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_getsyminfo.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_getsymshndx.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_getverdaux.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_getverdef.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_getvernaux.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_getverneed.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_getversym.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_newehdr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_newphdr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_offscn.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_update_auxv.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_update_dyn.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_update_ehdr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_update_lib.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_update_move.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_update_phdr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_update_rel.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_update_rela.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_update_shdr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_update_sym.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_update_syminfo.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_update_symshndx.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_update_verdaux.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_update_verdef.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_update_vernaux.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_update_verneed.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_update_versym.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_xlate.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_xlatetof.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gelf_xlatetom.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libelf_crc32.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libelf_next_prime.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlist.Po@am__quote@
-
-.c.o:
-@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
-
-.c.obj:
-@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
-install-includeHEADERS: $(include_HEADERS)
- @$(NORMAL_INSTALL)
- test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)"
- @list='$(include_HEADERS)'; for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- f=$(am__strip_dir) \
- echo " $(includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \
- $(includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \
- done
-
-uninstall-includeHEADERS:
- @$(NORMAL_UNINSTALL)
- @list='$(include_HEADERS)'; for p in $$list; do \
- f=$(am__strip_dir) \
- echo " rm -f '$(DESTDIR)$(includedir)/$$f'"; \
- rm -f "$(DESTDIR)$(includedir)/$$f"; \
- done
-install-pkgincludeHEADERS: $(pkginclude_HEADERS)
- @$(NORMAL_INSTALL)
- test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)"
- @list='$(pkginclude_HEADERS)'; for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- f=$(am__strip_dir) \
- echo " $(pkgincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgincludedir)/$$f'"; \
- $(pkgincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgincludedir)/$$f"; \
- done
-
-uninstall-pkgincludeHEADERS:
- @$(NORMAL_UNINSTALL)
- @list='$(pkginclude_HEADERS)'; for p in $$list; do \
- f=$(am__strip_dir) \
- echo " rm -f '$(DESTDIR)$(pkgincludedir)/$$f'"; \
- rm -f "$(DESTDIR)$(pkgincludedir)/$$f"; \
- done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- mkid -fID $$unique
-tags: TAGS
-
-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- here=`pwd`; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$tags $$unique; \
- fi
-ctags: CTAGS
-CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- test -z "$(CTAGS_ARGS)$$tags$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$tags $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && cd $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) $$here
-
-distclean-tags:
- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- list='$(DISTFILES)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
- fi; \
- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
- else \
- test -f $(distdir)/$$file \
- || cp -p $$d/$$file $(distdir)/$$file \
- || exit 1; \
- fi; \
- done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(HEADERS)
-installdirs:
- for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)" "$(DESTDIR)$(pkgincludedir)"; do \
- test -z "$$dir" || $(MKDIR_P) "$$dir"; \
- done
-@MUDFLAP_TRUE@install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-@MUDFLAP_TRUE@uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libLIBRARIES clean-noinstLIBRARIES \
- clean-noinstPROGRAMS mostlyclean-am
-
-distclean: distclean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
- distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-info: info-am
-
-info-am:
-
-install-data-am: install-includeHEADERS install-pkgincludeHEADERS
-
-install-dvi: install-dvi-am
-
-install-exec-am: install-libLIBRARIES
-
-install-html: install-html-am
-
-install-info: install-info-am
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-ps: install-ps-am
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-includeHEADERS uninstall-libLIBRARIES \
- uninstall-pkgincludeHEADERS
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
- clean-libLIBRARIES clean-noinstLIBRARIES clean-noinstPROGRAMS \
- ctags distclean distclean-compile distclean-generic \
- distclean-tags distdir dvi dvi-am html html-am info info-am \
- install install-am install-data install-data-am install-dvi \
- install-dvi-am install-exec install-exec-am install-html \
- install-html-am install-includeHEADERS install-info \
- install-info-am install-libLIBRARIES install-man install-pdf \
- install-pdf-am install-pkgincludeHEADERS install-ps \
- install-ps-am install-strip installcheck installcheck-am \
- installdirs maintainer-clean maintainer-clean-generic \
- mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \
- ps ps-am tags uninstall uninstall-am uninstall-includeHEADERS \
- uninstall-libLIBRARIES uninstall-pkgincludeHEADERS
-
-@MUDFLAP_FALSE@libelf.so: libelf_pic.a libelf.map
-@MUDFLAP_FALSE@ $(LINK) -shared -o $@ -Wl,--whole-archive,$<,--no-whole-archive \
-@MUDFLAP_FALSE@ -Wl,--version-script,$(srcdir)/libelf.map,--no-undefined \
-@MUDFLAP_FALSE@ -Wl,--soname,$@.$(VERSION),-z,-defs,-z,relro $(libelf_so_LDLIBS)
-@MUDFLAP_FALSE@ if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi
-@MUDFLAP_FALSE@ ln -fs $@ $@.$(VERSION)
-
-@MUDFLAP_FALSE@%.os: %.c %.o
-@MUDFLAP_FALSE@ if $(COMPILE.os) -c -o $@ -fpic -DPIC -DSHARED -MT $@ -MD -MP \
-@MUDFLAP_FALSE@ -MF "$(DEPDIR)/$*.Tpo" `test -f '$<' || echo '$(srcdir)/'`$<; \
-@MUDFLAP_FALSE@ then cat "$(DEPDIR)/$*.Tpo" >> "$(DEPDIR)/$*.Po"; \
-@MUDFLAP_FALSE@ rm -f "$(DEPDIR)/$*.Tpo"; \
-@MUDFLAP_FALSE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
-@MUDFLAP_FALSE@ fi
-
-@MUDFLAP_FALSE@install: install-am libelf.so
-@MUDFLAP_FALSE@ $(mkinstalldirs) $(DESTDIR)$(libdir)
-@MUDFLAP_FALSE@ $(INSTALL_PROGRAM) libelf.so $(DESTDIR)$(libdir)/libelf-$(PACKAGE_VERSION).so
-@MUDFLAP_FALSE@ ln -fs libelf-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir)/libelf.so.$(VERSION)
-@MUDFLAP_FALSE@ ln -fs libelf.so.$(VERSION) $(DESTDIR)$(libdir)/libelf.so
-
-@MUDFLAP_FALSE@uninstall: uninstall-am
-@MUDFLAP_FALSE@ rm -f $(DESTDIR)$(libdir)/libelf-$(PACKAGE_VERSION).so
-@MUDFLAP_FALSE@ rm -f $(DESTDIR)$(libdir)/libelf.so.$(VERSION)
-@MUDFLAP_FALSE@ rm -f $(DESTDIR)$(libdir)/libelf.so
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/libelf/abstract.h b/libelf/abstract.h
deleted file mode 100644
index e359f96..0000000
--- a/libelf/abstract.h
+++ /dev/null
@@ -1,333 +0,0 @@
-/* Abstract description of component ELF types.
- Copyright (C) 1998, 1999, 2000, 2002, 2004, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-/* ELF header. */
-#define Ehdr(Bits, Ext) \
-START (Bits, Ehdr, Ext##Ehdr) \
- TYPE_EXTRA (unsigned char e_ident[EI_NIDENT];) \
- TYPE_XLATE (memmove (tdest->e_ident, tsrc->e_ident, EI_NIDENT);) \
- TYPE_NAME (ElfW2(Bits, Ext##Half), e_type) \
- TYPE_NAME (ElfW2(Bits, Ext##Half), e_machine) \
- TYPE_NAME (ElfW2(Bits, Ext##Word), e_version) \
- TYPE_NAME (ElfW2(Bits, Ext##Addr), e_entry) \
- TYPE_NAME (ElfW2(Bits, Ext##Off), e_phoff) \
- TYPE_NAME (ElfW2(Bits, Ext##Off), e_shoff) \
- TYPE_NAME (ElfW2(Bits, Ext##Word), e_flags) \
- TYPE_NAME (ElfW2(Bits, Ext##Half), e_ehsize) \
- TYPE_NAME (ElfW2(Bits, Ext##Half), e_phentsize) \
- TYPE_NAME (ElfW2(Bits, Ext##Half), e_phnum) \
- TYPE_NAME (ElfW2(Bits, Ext##Half), e_shentsize) \
- TYPE_NAME (ElfW2(Bits, Ext##Half), e_shnum) \
- TYPE_NAME (ElfW2(Bits, Ext##Half), e_shstrndx) \
-END (Bits, Ext##Ehdr)
-
-#define Ehdr32(Ext) \
- Ehdr(32, Ext)
-#define Ehdr64(Ext) \
- Ehdr(64, Ext)
-
-
-/* Program header. */
-#define Phdr32(Ext) \
-START (32, Phdr, Ext##Phdr) \
- TYPE_NAME (ElfW2(32, Ext##Word), p_type) \
- TYPE_NAME (ElfW2(32, Ext##Off), p_offset) \
- TYPE_NAME (ElfW2(32, Ext##Addr), p_vaddr) \
- TYPE_NAME (ElfW2(32, Ext##Addr), p_paddr) \
- TYPE_NAME (ElfW2(32, Ext##Word), p_filesz) \
- TYPE_NAME (ElfW2(32, Ext##Word), p_memsz) \
- TYPE_NAME (ElfW2(32, Ext##Word), p_flags) \
- TYPE_NAME (ElfW2(32, Ext##Word), p_align) \
-END (32, Ext##Phdr)
-#define Phdr64(Ext) \
-START (64, Phdr, Ext##Phdr) \
- TYPE_NAME (ElfW2(64, Ext##Word), p_type) \
- TYPE_NAME (ElfW2(64, Ext##Word), p_flags) \
- TYPE_NAME (ElfW2(64, Ext##Off), p_offset) \
- TYPE_NAME (ElfW2(64, Ext##Addr), p_vaddr) \
- TYPE_NAME (ElfW2(64, Ext##Addr), p_paddr) \
- TYPE_NAME (ElfW2(64, Ext##Xword), p_filesz) \
- TYPE_NAME (ElfW2(64, Ext##Xword), p_memsz) \
- TYPE_NAME (ElfW2(64, Ext##Xword), p_align) \
-END (64, Ext##Phdr)
-
-
-/* Section header. */
-#define Shdr32(Ext) \
-START (32, Shdr, Ext##Shdr) \
- TYPE_NAME (ElfW2(32, Ext##Word), sh_name) \
- TYPE_NAME (ElfW2(32, Ext##Word), sh_type) \
- TYPE_NAME (ElfW2(32, Ext##Word), sh_flags) \
- TYPE_NAME (ElfW2(32, Ext##Addr), sh_addr) \
- TYPE_NAME (ElfW2(32, Ext##Off), sh_offset) \
- TYPE_NAME (ElfW2(32, Ext##Word), sh_size) \
- TYPE_NAME (ElfW2(32, Ext##Word), sh_link) \
- TYPE_NAME (ElfW2(32, Ext##Word), sh_info) \
- TYPE_NAME (ElfW2(32, Ext##Word), sh_addralign) \
- TYPE_NAME (ElfW2(32, Ext##Word), sh_entsize) \
-END (32, Ext##Shdr)
-#define Shdr64(Ext) \
-START (64, Shdr, Ext##Shdr) \
- TYPE_NAME (ElfW2(64, Ext##Word), sh_name) \
- TYPE_NAME (ElfW2(64, Ext##Word), sh_type) \
- TYPE_NAME (ElfW2(64, Ext##Xword), sh_flags) \
- TYPE_NAME (ElfW2(64, Ext##Addr), sh_addr) \
- TYPE_NAME (ElfW2(64, Ext##Off), sh_offset) \
- TYPE_NAME (ElfW2(64, Ext##Xword), sh_size) \
- TYPE_NAME (ElfW2(64, Ext##Word), sh_link) \
- TYPE_NAME (ElfW2(64, Ext##Word), sh_info) \
- TYPE_NAME (ElfW2(64, Ext##Xword), sh_addralign) \
- TYPE_NAME (ElfW2(64, Ext##Xword), sh_entsize) \
-END (64, Ext##Shdr)
-
-
-/* Symbol table. */
-#define Sym32(Ext) \
-START (32, Sym, Ext##Sym) \
- TYPE_NAME (ElfW2(32, Ext##Word), st_name) \
- TYPE_NAME (ElfW2(32, Ext##Addr), st_value) \
- TYPE_NAME (ElfW2(32, Ext##Word), st_size) \
- TYPE_EXTRA (unsigned char st_info;) \
- TYPE_XLATE (tdest->st_info = tsrc->st_info;) \
- TYPE_EXTRA (unsigned char st_other;) \
- TYPE_XLATE (tdest->st_other = tsrc->st_other;) \
- TYPE_NAME (ElfW2(32, Ext##Half), st_shndx) \
-END (32, Ext##Sym)
-#define Sym64(Ext) \
-START (64, Sym, Ext##Sym) \
- TYPE_NAME (ElfW2(64, Ext##Word), st_name) \
- TYPE_EXTRA (unsigned char st_info;) \
- TYPE_XLATE (tdest->st_info = tsrc->st_info;) \
- TYPE_EXTRA (unsigned char st_other;) \
- TYPE_XLATE (tdest->st_other = tsrc->st_other;) \
- TYPE_NAME (ElfW2(64, Ext##Half), st_shndx) \
- TYPE_NAME (ElfW2(64, Ext##Addr), st_value) \
- TYPE_NAME (ElfW2(64, Ext##Xword), st_size) \
-END (64, Ext##Sym)
-
-
-/* Relocation. */
-#define Rel32(Ext) \
-START (32, Rel, Ext##Rel) \
- TYPE_NAME (ElfW2(32, Ext##Addr), r_offset) \
- TYPE_NAME (ElfW2(32, Ext##Word), r_info) \
-END (32, Ext##Rel)
-#define Rel64(Ext) \
-START (64, Rel, Ext##Rel) \
- TYPE_NAME (ElfW2(64, Ext##Addr), r_offset) \
- TYPE_NAME (ElfW2(64, Ext##Xword), r_info) \
-END (64, Ext##Rel)
-
-#define Rela32(Ext) \
-START (32, Rela, Ext##Rela) \
- TYPE_NAME (ElfW2(32, Ext##Addr), r_offset) \
- TYPE_NAME (ElfW2(32, Ext##Word), r_info) \
- TYPE_NAME (ElfW2(32, Ext##Sword), r_addend) \
-END (32, Ext##Rela)
-#define Rela64(Ext) \
-START (64, Rela, Ext##Rela) \
- TYPE_NAME (ElfW2(64, Ext##Addr), r_offset) \
- TYPE_NAME (ElfW2(64, Ext##Xword), r_info) \
- TYPE_NAME (ElfW2(64, Ext##Sxword), r_addend) \
-END (64, Ext##Rela)
-
-
-/* Note entry header. */
-#define Note(Bits, Ext) \
-START (Bits, Nhdr, Ext##Nhdr) \
- TYPE_NAME (ElfW2(Bits, Ext##Word), n_namesz) \
- TYPE_NAME (ElfW2(Bits, Ext##Word), n_descsz) \
- TYPE_NAME (ElfW2(Bits, Ext##Word), n_type) \
-END (Bits, Ext##Nhdr)
-
-#define Note32(Ext) \
- Note (32, Ext)
-#define Note64(Ext) \
- Note (64, Ext)
-
-
-/* Dynamic section data. */
-#define Dyn32(Ext) \
-START (32, Dyn, Ext##Dyn) \
- TYPE_NAME (ElfW2(32, Ext##Sword), d_tag) \
- TYPE_EXTRA (union {) \
- TYPE_EXTRA (ElfW2(32, Ext##Word) d_val;) \
- TYPE_EXTRA (ElfW2(32, Ext##Addr) d_ptr;) \
- TYPE_XLATE (Elf32_cvt_Addr1 (&tdest->d_un.d_val, &tsrc->d_un.d_val);) \
- TYPE_EXTRA (ElfW2(32, Ext##Off) d_off;) \
- TYPE_EXTRA (} d_un;) \
-END (32, Ext##Dyn)
-#define Dyn64(Ext) \
-START (64, Dyn, Ext##Dyn) \
- TYPE_NAME (ElfW2(64, Ext##Xword), d_tag) \
- TYPE_EXTRA (union {) \
- TYPE_EXTRA (ElfW2(64, Ext##Xword) d_val;) \
- TYPE_EXTRA (ElfW2(64, Ext##Addr) d_ptr;) \
- TYPE_XLATE (Elf64_cvt_Addr1 (&tdest->d_un.d_val, &tsrc->d_un.d_val);) \
- TYPE_EXTRA (} d_un;) \
-END (64, Ext##Dyn)
-
-
-#ifndef GENERATE_CONVERSION
-/* Version definitions. */
-# define Verdef(Bits, Ext) \
-START (Bits, Verdef, Ext##Verdef) \
- TYPE_NAME (ElfW2(Bits, Ext##Half), vd_version) \
- TYPE_NAME (ElfW2(Bits, Ext##Half), vd_flags) \
- TYPE_NAME (ElfW2(Bits, Ext##Half), vd_ndx) \
- TYPE_NAME (ElfW2(Bits, Ext##Half), vd_cnt) \
- TYPE_NAME (ElfW2(Bits, Ext##Word), vd_hash) \
- TYPE_NAME (ElfW2(Bits, Ext##Word), vd_aux) \
- TYPE_NAME (ElfW2(Bits, Ext##Word), vd_next) \
-END (Bits, Ext##Verdef)
-
-# define Verdef32(Ext) \
- Verdef (32, Ext)
-# define Verdef64(Ext) \
- Verdef (64, Ext)
-
-# define Verdaux(Bits, Ext) \
-START (Bits, Verdaux, Ext##Verdaux) \
- TYPE_NAME (ElfW2(Bits, Ext##Word), vda_name) \
- TYPE_NAME (ElfW2(Bits, Ext##Word), vda_next) \
-END (Bits, Ext##Verdaux)
-
-# define Verdaux32(Ext) \
- Verdaux (32, Ext)
-# define Verdaux64(Ext) \
- Verdaux (64, Ext)
-
-/* Required versions. */
-# define Verneed(Bits, Ext) \
-START (Bits, Verneed, Ext##Verneed) \
- TYPE_NAME (ElfW2(Bits, Ext##Half), vn_version) \
- TYPE_NAME (ElfW2(Bits, Ext##Half), vn_cnt) \
- TYPE_NAME (ElfW2(Bits, Ext##Word), vn_file) \
- TYPE_NAME (ElfW2(Bits, Ext##Word), vn_aux) \
- TYPE_NAME (ElfW2(Bits, Ext##Word), vn_next) \
-END (Bits, Ext##Verneed)
-
-# define Verneed32(Ext) \
- Verneed (32, Ext)
-# define Verneed64(Ext) \
- Verneed (64, Ext)
-
-# define Vernaux(Bits, Ext) \
-START (Bits, Vernaux, Ext##Vernaux) \
- TYPE_NAME (ElfW2(Bits, Ext##Word), vna_hash) \
- TYPE_NAME (ElfW2(Bits, Ext##Half), vna_flags) \
- TYPE_NAME (ElfW2(Bits, Ext##Half), vna_other) \
- TYPE_NAME (ElfW2(Bits, Ext##Word), vna_name) \
- TYPE_NAME (ElfW2(Bits, Ext##Word), vna_next) \
-END (Bits, Ext##Vernaux)
-
-# define Vernaux32(Ext) \
- Vernaux (32, Ext)
-# define Vernaux64(Ext) \
- Vernaux (64, Ext)
-#endif
-
-/* Symbol information. */
-#define Syminfo(Bits, Ext) \
-START (Bits, Syminfo, Ext##Syminfo) \
- TYPE_NAME (ElfW2(Bits, Ext##Half), si_boundto) \
- TYPE_NAME (ElfW2(Bits, Ext##Half), si_flags) \
-END (Bits, Ext##Syminfo)
-
-#define Syminfo32(Ext) \
- Syminfo (32, Ext)
-#define Syminfo64(Ext) \
- Syminfo (64, Ext)
-
-/* Move information. */
-#define Move(Bits, Ext) \
-START (Bits, Move, Ext##Move) \
- TYPE_NAME (ElfW2(Bits, Ext##Xword), m_value) \
- TYPE_NAME (ElfW2(Bits, Ext##Xword), m_info) \
- TYPE_NAME (ElfW2(Bits, Ext##Xword), m_poffset) \
- TYPE_NAME (ElfW2(Bits, Ext##Half), m_repeat) \
- TYPE_NAME (ElfW2(Bits, Ext##Half), m_stride) \
-END (Bits, Ext##Move)
-
-#define Move32(Ext) \
- Move (32, Ext)
-#define Move64(Ext) \
- Move (64, Ext)
-
-#define Lib(Bits, Ext) \
-START (Bits, Lib, Ext##Lib) \
- TYPE_NAME (ElfW2(Bits, Ext##Word), l_name) \
- TYPE_NAME (ElfW2(Bits, Ext##Word), l_time_stamp) \
- TYPE_NAME (ElfW2(Bits, Ext##Word), l_checksum) \
- TYPE_NAME (ElfW2(Bits, Ext##Word), l_version) \
- TYPE_NAME (ElfW2(Bits, Ext##Word), l_flags) \
-END (Bits, Ext##Lib)
-
-#define Lib32(Ext) \
- Lib (32, Ext)
-#define Lib64(Ext) \
- Lib (64, Ext)
-
-#define auxv_t32(Ext) \
-START (32, auxv_t, Ext##auxv_t) \
- TYPE_NAME (ElfW2(32, Ext##Word), a_type) \
- TYPE_EXTRA (union {) \
- TYPE_EXTRA (ElfW2(32, Ext##Word) a_val;) \
- TYPE_XLATE (Elf32_cvt_Addr1 (&tdest->a_un.a_val, &tsrc->a_un.a_val);) \
- TYPE_EXTRA (} a_un;) \
-END (32, Ext##auxv_t)
-#define auxv_t64(Ext) \
-START (64, auxv_t, Ext##auxv_t) \
- TYPE_NAME (ElfW2(64, Ext##Xword), a_type) \
- TYPE_EXTRA (union {) \
- TYPE_EXTRA (ElfW2(64, Ext##Xword) a_val;) \
- TYPE_XLATE (Elf64_cvt_Addr1 (&tdest->a_un.a_val, &tsrc->a_un.a_val);) \
- TYPE_EXTRA (} a_un;) \
-END (64, Ext##auxv_t)
diff --git a/libelf/common.h b/libelf/common.h
deleted file mode 100644
index 8eef2a7..0000000
--- a/libelf/common.h
+++ /dev/null
@@ -1,184 +0,0 @@
-/* Common definitions for handling files in memory or only on disk.
- Copyright (C) 1998, 1999, 2000, 2002, 2005, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifndef _COMMON_H
-#define _COMMON_H 1
-
-#include <ar.h>
-#include <byteswap.h>
-#include <endian.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-static inline Elf_Kind
-__attribute__ ((unused))
-determine_kind (void *buf, size_t len)
-{
- /* First test for an archive. */
- if (len >= SARMAG && memcmp (buf, ARMAG, SARMAG) == 0)
- return ELF_K_AR;
-
- /* Next try ELF files. */
- if (len >= EI_NIDENT && memcmp (buf, ELFMAG, SELFMAG) == 0)
- {
- /* Could be an ELF file. */
- int eclass = (int) ((unsigned char *) buf)[EI_CLASS];
- int data = (int) ((unsigned char *) buf)[EI_DATA];
- int version = (int) ((unsigned char *) buf)[EI_VERSION];
-
- if (eclass > ELFCLASSNONE && eclass < ELFCLASSNUM
- && data > ELFDATANONE && data < ELFDATANUM
- && version > EV_NONE && version < EV_NUM)
- return ELF_K_ELF;
- }
-
- /* We do not know this file type. */
- return ELF_K_NONE;
-}
-
-
-/* Allocate an Elf descriptor and fill in the generic information. */
-static inline Elf *
-__attribute__ ((unused))
-allocate_elf (int fildes, void *map_address, off_t offset, size_t maxsize,
- Elf_Cmd cmd, Elf *parent, Elf_Kind kind, size_t extra)
-{
- Elf *result = (Elf *) calloc (1, sizeof (Elf) + extra);
- if (result == NULL)
- __libelf_seterrno (ELF_E_NOMEM);
- else
- {
- result->kind = kind;
- result->ref_count = 1;
- result->cmd = cmd;
- result->fildes = fildes;
- result->start_offset = offset;
- result->maximum_size = maxsize;
- result->map_address = map_address;
- result->parent = parent;
-
- rwlock_init (result->lock);
- }
-
- return result;
-}
-
-
-/* Acquire lock for the descriptor and all children. */
-static void
-__attribute__ ((unused))
-libelf_acquire_all (Elf *elf)
-{
- rwlock_wrlock (elf->lock);
-
- if (elf->kind == ELF_K_AR)
- {
- Elf *child = elf->state.ar.children;
-
- while (child != NULL)
- {
- if (child->ref_count != 0)
- libelf_acquire_all (child);
- child = child->next;
- }
- }
-}
-
-/* Release own lock and those of the children. */
-static void
-__attribute__ ((unused))
-libelf_release_all (Elf *elf)
-{
- if (elf->kind == ELF_K_AR)
- {
- Elf *child = elf->state.ar.children;
-
- while (child != NULL)
- {
- if (child->ref_count != 0)
- libelf_release_all (child);
- child = child->next;
- }
- }
-
- rwlock_unlock (elf->lock);
-}
-
-
-/* Macro to convert endianess in place. It determines the function it
- has to use itself. */
-#define CONVERT(Var) \
- (Var) = (sizeof (Var) == 1 \
- ? (unsigned char) (Var) \
- : (sizeof (Var) == 2 \
- ? bswap_16 (Var) \
- : (sizeof (Var) == 4 \
- ? bswap_32 (Var) \
- : bswap_64 (Var))))
-
-#define CONVERT_TO(Dst, Var) \
- (Dst) = (sizeof (Var) == 1 \
- ? (unsigned char) (Var) \
- : (sizeof (Var) == 2 \
- ? bswap_16 (Var) \
- : (sizeof (Var) == 4 \
- ? bswap_32 (Var) \
- : bswap_64 (Var))))
-
-
-#if __BYTE_ORDER == __LITTLE_ENDIAN
-# define MY_ELFDATA ELFDATA2LSB
-#else
-# define MY_ELFDATA ELFDATA2MSB
-#endif
-
-#endif /* common.h */
diff --git a/libelf/dl-hash.h b/libelf/dl-hash.h
deleted file mode 100644
index fd59394..0000000
--- a/libelf/dl-hash.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/* Compute hash value for given string according to ELF standard.
- Copyright (C) 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1995.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under an Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) and to distribute linked
- combinations including the two. Non-GPL Code permitted under this
- exception must only link to the code of Red Hat elfutils through those
- well defined interfaces identified in the file named EXCEPTION found in
- the source code files (the "Approved Interfaces"). The files of Non-GPL
- Code may instantiate templates or use macros or inline functions from
- the Approved Interfaces without causing the resulting work to be covered
- by the GNU General Public License. Only Red Hat, Inc. may make changes
- or additions to the list of Approved Interfaces. Red Hat's grant of
- this exception is conditioned upon your not adding any new exceptions.
- If you wish to add a new Approved Interface or exception, please contact
- Red Hat. You must obey the GNU General Public License in all respects
- for all of the Red Hat elfutils code and other code used in conjunction
- with Red Hat elfutils except the Non-GPL Code covered by this exception.
- If you modify this file, you may extend this exception to your version
- of the file, but you are not obligated to do so. If you do not wish to
- provide this exception without modification, you must delete this
- exception statement from your version and license this file solely under
- the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifndef _DL_HASH_H
-#define _DL_HASH_H 1
-
-
-/* This is the hashing function specified by the ELF ABI. In the
- first five operations no overflow is possible so we optimized it a
- bit. */
-static inline unsigned int
-__attribute__ ((__pure__))
-_dl_elf_hash (const char *name)
-{
- const unsigned char *iname = (const unsigned char *) name;
- unsigned int hash = (unsigned int) *iname++;
- if (*iname != '\0')
- {
- hash = (hash << 4) + (unsigned int) *iname++;
- if (*iname != '\0')
- {
- hash = (hash << 4) + (unsigned int) *iname++;
- if (*iname != '\0')
- {
- hash = (hash << 4) + (unsigned int) *iname++;
- if (*iname != '\0')
- {
- hash = (hash << 4) + (unsigned int) *iname++;
- while (*iname != '\0')
- {
- unsigned int hi;
- hash = (hash << 4) + (unsigned int) *iname++;
- hi = hash & 0xf0000000;
-
- /* The algorithm specified in the ELF ABI is as
- follows:
-
- if (hi != 0)
- hash ^= hi >> 24;
-
- hash &= ~hi;
-
- But the following is equivalent and a lot
- faster, especially on modern processors. */
-
- hash ^= hi;
- hash ^= hi >> 24;
- }
- }
- }
- }
- }
- return hash;
-}
-
-#endif /* dl-hash.h */
diff --git a/libelf/elf-knowledge.h b/libelf/elf-knowledge.h
deleted file mode 100644
index 8b4c0d7..0000000
--- a/libelf/elf-knowledge.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/* Accumulation of various pieces of knowledge about ELF.
- Copyright (C) 2000, 2001, 2002, 2003, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifndef _ELF_KNOWLEDGE_H
-#define _ELF_KNOWLEDGE_H 1
-
-#include <stdbool.h>
-
-
-/* Test whether a section can be stripped or not. */
-#define SECTION_STRIP_P(shdr, name, remove_comment) \
- /* Sections which are allocated are not removed. */ \
- (((shdr)->sh_flags & SHF_ALLOC) == 0 \
- /* We never remove .note sections. */ \
- && (shdr)->sh_type != SHT_NOTE \
- && (((shdr)->sh_type) != SHT_PROGBITS \
- /* Never remove .gnu.warning.* sections. */ \
- || (strncmp (name, ".gnu.warning.", sizeof ".gnu.warning." - 1) != 0 \
- /* We remove .comment sections only if explicitly told to do so. */\
- && (remove_comment \
- || strcmp (name, ".comment") != 0))) \
- /* So far we do not remove any of the non-standard sections. \
- XXX Maybe in future. */ \
- && (shdr)->sh_type < SHT_NUM)
-
-
-/* Test whether `sh_info' field in section header contains a section
- index. There are two kinds of sections doing this:
-
- - the sections containing relocation information reference in this
- field the section to which the relocations apply;
-
- - section with the SHF_INFO_LINK flag set to signal that `sh_info'
- references a section. This allows correct handling of unknown
- sections. */
-#define SH_INFO_LINK_P(Shdr) \
- ((Shdr)->sh_type == SHT_REL || (Shdr)->sh_type == SHT_RELA \
- || ((Shdr)->sh_flags & SHF_INFO_LINK) != 0)
-
-
-/* When combining ELF section flags we must distinguish two kinds:
-
- - flags which cause problem if not added to the result even if not
- present in all input sections
-
- - flags which cause problem if added to the result if not present
- in all input sections
-
- The following definition is for the general case. There might be
- machine specific extensions. */
-#define SH_FLAGS_COMBINE(Flags1, Flags2) \
- (((Flags1 | Flags2) \
- & (SHF_WRITE | SHF_ALLOC | SHF_EXECINSTR | SHF_LINK_ORDER \
- | SHF_OS_NONCONFORMING | SHF_GROUP)) \
- | (Flags1 & Flags2 & (SHF_MERGE | SHF_STRINGS | SHF_INFO_LINK)))
-
-/* Similar macro: return the bits of the flags which necessarily must
- match if two sections are automatically combined. Sections still
- can be forcefully combined in which case SH_FLAGS_COMBINE can be
- used to determine the combined flags. */
-#define SH_FLAGS_IMPORTANT(Flags) \
- ((Flags) & ~((GElf_Xword) 0 | SHF_LINK_ORDER | SHF_OS_NONCONFORMING))
-
-
-/* Size of an entry in the hash table. The ELF specification says all
- entries are regardless of platform 32-bits in size. Early 64-bit
- ports (namely Alpha for Linux) got this wrong. The wording was not
- clear.
-
- Several years later the ABI for the 64-bit S390s was developed.
- Many things were copied from the IA-64 ABI (which uses the correct
- 32-bit entry size) but what do these people do? They use 64-bit
- entries. It is really shocking to see what kind of morons are out
- there. And even worse: they are allowed to design ABIs. */
-#define SH_ENTSIZE_HASH(Ehdr) \
- ((Ehdr)->e_machine == EM_ALPHA \
- || ((Ehdr)->e_machine == EM_S390 \
- && (Ehdr)->e_ident[EI_CLASS] == ELFCLASS64) ? 8 : 4)
-
-#endif /* elf-knowledge.h */
diff --git a/libelf/elf.h b/libelf/elf.h
deleted file mode 100644
index f18288c..0000000
--- a/libelf/elf.h
+++ /dev/null
@@ -1,2690 +0,0 @@
-/* This file defines standard ELF types, structures, and macros.
- Copyright (C) 1995-2003,2004,2005,2006,2007,2008
- 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, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
-
-#ifndef _ELF_H
-#define _ELF_H 1
-
-/* ANDROID_CHANGE_BEGIN */
-/*
- * elf.h may be directly included from a different project, and features.h does
- * not exist on host Mac OS.
- */
-#ifndef __APPLE__
-#include <features.h>
-#endif
-/* ANDROID_CHANGE_END */
-
-__BEGIN_DECLS
-
-/* Standard ELF types. */
-
-#include <stdint.h>
-
-/* Type for a 16-bit quantity. */
-typedef uint16_t Elf32_Half;
-typedef uint16_t Elf64_Half;
-
-/* Types for signed and unsigned 32-bit quantities. */
-typedef uint32_t Elf32_Word;
-typedef int32_t Elf32_Sword;
-typedef uint32_t Elf64_Word;
-typedef int32_t Elf64_Sword;
-
-/* Types for signed and unsigned 64-bit quantities. */
-typedef uint64_t Elf32_Xword;
-typedef int64_t Elf32_Sxword;
-typedef uint64_t Elf64_Xword;
-typedef int64_t Elf64_Sxword;
-
-/* Type of addresses. */
-typedef uint32_t Elf32_Addr;
-typedef uint64_t Elf64_Addr;
-
-/* Type of file offsets. */
-typedef uint32_t Elf32_Off;
-typedef uint64_t Elf64_Off;
-
-/* Type for section indices, which are 16-bit quantities. */
-typedef uint16_t Elf32_Section;
-typedef uint16_t Elf64_Section;
-
-/* Type for version symbol information. */
-typedef Elf32_Half Elf32_Versym;
-typedef Elf64_Half Elf64_Versym;
-
-
-/* The ELF file header. This appears at the start of every ELF file. */
-
-#define EI_NIDENT (16)
-
-typedef struct
-{
- unsigned char e_ident[EI_NIDENT]; /* Magic number and other info */
- Elf32_Half e_type; /* Object file type */
- Elf32_Half e_machine; /* Architecture */
- Elf32_Word e_version; /* Object file version */
- Elf32_Addr e_entry; /* Entry point virtual address */
- Elf32_Off e_phoff; /* Program header table file offset */
- Elf32_Off e_shoff; /* Section header table file offset */
- Elf32_Word e_flags; /* Processor-specific flags */
- Elf32_Half e_ehsize; /* ELF header size in bytes */
- Elf32_Half e_phentsize; /* Program header table entry size */
- Elf32_Half e_phnum; /* Program header table entry count */
- Elf32_Half e_shentsize; /* Section header table entry size */
- Elf32_Half e_shnum; /* Section header table entry count */
- Elf32_Half e_shstrndx; /* Section header string table index */
-} Elf32_Ehdr;
-
-typedef struct
-{
- unsigned char e_ident[EI_NIDENT]; /* Magic number and other info */
- Elf64_Half e_type; /* Object file type */
- Elf64_Half e_machine; /* Architecture */
- Elf64_Word e_version; /* Object file version */
- Elf64_Addr e_entry; /* Entry point virtual address */
- Elf64_Off e_phoff; /* Program header table file offset */
- Elf64_Off e_shoff; /* Section header table file offset */
- Elf64_Word e_flags; /* Processor-specific flags */
- Elf64_Half e_ehsize; /* ELF header size in bytes */
- Elf64_Half e_phentsize; /* Program header table entry size */
- Elf64_Half e_phnum; /* Program header table entry count */
- Elf64_Half e_shentsize; /* Section header table entry size */
- Elf64_Half e_shnum; /* Section header table entry count */
- Elf64_Half e_shstrndx; /* Section header string table index */
-} Elf64_Ehdr;
-
-/* Fields in the e_ident array. The EI_* macros are indices into the
- array. The macros under each EI_* macro are the values the byte
- may have. */
-
-#define EI_MAG0 0 /* File identification byte 0 index */
-#define ELFMAG0 0x7f /* Magic number byte 0 */
-
-#define EI_MAG1 1 /* File identification byte 1 index */
-#define ELFMAG1 'E' /* Magic number byte 1 */
-
-#define EI_MAG2 2 /* File identification byte 2 index */
-#define ELFMAG2 'L' /* Magic number byte 2 */
-
-#define EI_MAG3 3 /* File identification byte 3 index */
-#define ELFMAG3 'F' /* Magic number byte 3 */
-
-/* Conglomeration of the identification bytes, for easy testing as a word. */
-#define ELFMAG "\177ELF"
-#define SELFMAG 4
-
-#define EI_CLASS 4 /* File class byte index */
-#define ELFCLASSNONE 0 /* Invalid class */
-#define ELFCLASS32 1 /* 32-bit objects */
-#define ELFCLASS64 2 /* 64-bit objects */
-#define ELFCLASSNUM 3
-
-#define EI_DATA 5 /* Data encoding byte index */
-#define ELFDATANONE 0 /* Invalid data encoding */
-#define ELFDATA2LSB 1 /* 2's complement, little endian */
-#define ELFDATA2MSB 2 /* 2's complement, big endian */
-#define ELFDATANUM 3
-
-#define EI_VERSION 6 /* File version byte index */
- /* Value must be EV_CURRENT */
-
-#define EI_OSABI 7 /* OS ABI identification */
-#define ELFOSABI_NONE 0 /* UNIX System V ABI */
-#define ELFOSABI_SYSV 0 /* Alias. */
-#define ELFOSABI_HPUX 1 /* HP-UX */
-#define ELFOSABI_NETBSD 2 /* NetBSD. */
-#define ELFOSABI_LINUX 3 /* Linux. */
-#define ELFOSABI_SOLARIS 6 /* Sun Solaris. */
-#define ELFOSABI_AIX 7 /* IBM AIX. */
-#define ELFOSABI_IRIX 8 /* SGI Irix. */
-#define ELFOSABI_FREEBSD 9 /* FreeBSD. */
-#define ELFOSABI_TRU64 10 /* Compaq TRU64 UNIX. */
-#define ELFOSABI_MODESTO 11 /* Novell Modesto. */
-#define ELFOSABI_OPENBSD 12 /* OpenBSD. */
-#define ELFOSABI_ARM 97 /* ARM */
-#define ELFOSABI_STANDALONE 255 /* Standalone (embedded) application */
-
-#define EI_ABIVERSION 8 /* ABI version */
-
-#define EI_PAD 9 /* Byte index of padding bytes */
-
-/* Legal values for e_type (object file type). */
-
-#define ET_NONE 0 /* No file type */
-#define ET_REL 1 /* Relocatable file */
-#define ET_EXEC 2 /* Executable file */
-#define ET_DYN 3 /* Shared object file */
-#define ET_CORE 4 /* Core file */
-#define ET_NUM 5 /* Number of defined types */
-#define ET_LOOS 0xfe00 /* OS-specific range start */
-#define ET_HIOS 0xfeff /* OS-specific range end */
-#define ET_LOPROC 0xff00 /* Processor-specific range start */
-#define ET_HIPROC 0xffff /* Processor-specific range end */
-
-/* Legal values for e_machine (architecture). */
-
-#define EM_NONE 0 /* No machine */
-#define EM_M32 1 /* AT&T WE 32100 */
-#define EM_SPARC 2 /* SUN SPARC */
-#define EM_386 3 /* Intel 80386 */
-#define EM_68K 4 /* Motorola m68k family */
-#define EM_88K 5 /* Motorola m88k family */
-#define EM_860 7 /* Intel 80860 */
-#define EM_MIPS 8 /* MIPS R3000 big-endian */
-#define EM_S370 9 /* IBM System/370 */
-#define EM_MIPS_RS3_LE 10 /* MIPS R3000 little-endian */
-
-#define EM_PARISC 15 /* HPPA */
-#define EM_VPP500 17 /* Fujitsu VPP500 */
-#define EM_SPARC32PLUS 18 /* Sun's "v8plus" */
-#define EM_960 19 /* Intel 80960 */
-#define EM_PPC 20 /* PowerPC */
-#define EM_PPC64 21 /* PowerPC 64-bit */
-#define EM_S390 22 /* IBM S390 */
-
-#define EM_V800 36 /* NEC V800 series */
-#define EM_FR20 37 /* Fujitsu FR20 */
-#define EM_RH32 38 /* TRW RH-32 */
-#define EM_RCE 39 /* Motorola RCE */
-#define EM_ARM 40 /* ARM */
-#define EM_FAKE_ALPHA 41 /* Digital Alpha */
-#define EM_SH 42 /* Hitachi SH */
-#define EM_SPARCV9 43 /* SPARC v9 64-bit */
-#define EM_TRICORE 44 /* Siemens Tricore */
-#define EM_ARC 45 /* Argonaut RISC Core */
-#define EM_H8_300 46 /* Hitachi H8/300 */
-#define EM_H8_300H 47 /* Hitachi H8/300H */
-#define EM_H8S 48 /* Hitachi H8S */
-#define EM_H8_500 49 /* Hitachi H8/500 */
-#define EM_IA_64 50 /* Intel Merced */
-#define EM_MIPS_X 51 /* Stanford MIPS-X */
-#define EM_COLDFIRE 52 /* Motorola Coldfire */
-#define EM_68HC12 53 /* Motorola M68HC12 */
-#define EM_MMA 54 /* Fujitsu MMA Multimedia Accelerator*/
-#define EM_PCP 55 /* Siemens PCP */
-#define EM_NCPU 56 /* Sony nCPU embeeded RISC */
-#define EM_NDR1 57 /* Denso NDR1 microprocessor */
-#define EM_STARCORE 58 /* Motorola Start*Core processor */
-#define EM_ME16 59 /* Toyota ME16 processor */
-#define EM_ST100 60 /* STMicroelectronic ST100 processor */
-#define EM_TINYJ 61 /* Advanced Logic Corp. Tinyj emb.fam*/
-#define EM_X86_64 62 /* AMD x86-64 architecture */
-#define EM_PDSP 63 /* Sony DSP Processor */
-
-#define EM_FX66 66 /* Siemens FX66 microcontroller */
-#define EM_ST9PLUS 67 /* STMicroelectronics ST9+ 8/16 mc */
-#define EM_ST7 68 /* STmicroelectronics ST7 8 bit mc */
-#define EM_68HC16 69 /* Motorola MC68HC16 microcontroller */
-#define EM_68HC11 70 /* Motorola MC68HC11 microcontroller */
-#define EM_68HC08 71 /* Motorola MC68HC08 microcontroller */
-#define EM_68HC05 72 /* Motorola MC68HC05 microcontroller */
-#define EM_SVX 73 /* Silicon Graphics SVx */
-#define EM_ST19 74 /* STMicroelectronics ST19 8 bit mc */
-#define EM_VAX 75 /* Digital VAX */
-#define EM_CRIS 76 /* Axis Communications 32-bit embedded processor */
-#define EM_JAVELIN 77 /* Infineon Technologies 32-bit embedded processor */
-#define EM_FIREPATH 78 /* Element 14 64-bit DSP Processor */
-#define EM_ZSP 79 /* LSI Logic 16-bit DSP Processor */
-#define EM_MMIX 80 /* Donald Knuth's educational 64-bit processor */
-#define EM_HUANY 81 /* Harvard University machine-independent object files */
-#define EM_PRISM 82 /* SiTera Prism */
-#define EM_AVR 83 /* Atmel AVR 8-bit microcontroller */
-#define EM_FR30 84 /* Fujitsu FR30 */
-#define EM_D10V 85 /* Mitsubishi D10V */
-#define EM_D30V 86 /* Mitsubishi D30V */
-#define EM_V850 87 /* NEC v850 */
-#define EM_M32R 88 /* Mitsubishi M32R */
-#define EM_MN10300 89 /* Matsushita MN10300 */
-#define EM_MN10200 90 /* Matsushita MN10200 */
-#define EM_PJ 91 /* picoJava */
-#define EM_OPENRISC 92 /* OpenRISC 32-bit embedded processor */
-#define EM_ARC_A5 93 /* ARC Cores Tangent-A5 */
-#define EM_XTENSA 94 /* Tensilica Xtensa Architecture */
-#define EM_NUM 95
-
-/* If it is necessary to assign new unofficial EM_* values, please
- pick large random numbers (0x8523, 0xa7f2, etc.) to minimize the
- chances of collision with official or non-GNU unofficial values. */
-
-#define EM_ALPHA 0x9026
-
-/* Legal values for e_version (version). */
-
-#define EV_NONE 0 /* Invalid ELF version */
-#define EV_CURRENT 1 /* Current version */
-#define EV_NUM 2
-
-/* Section header. */
-
-typedef struct
-{
- Elf32_Word sh_name; /* Section name (string tbl index) */
- Elf32_Word sh_type; /* Section type */
- Elf32_Word sh_flags; /* Section flags */
- Elf32_Addr sh_addr; /* Section virtual addr at execution */
- Elf32_Off sh_offset; /* Section file offset */
- Elf32_Word sh_size; /* Section size in bytes */
- Elf32_Word sh_link; /* Link to another section */
- Elf32_Word sh_info; /* Additional section information */
- Elf32_Word sh_addralign; /* Section alignment */
- Elf32_Word sh_entsize; /* Entry size if section holds table */
-} Elf32_Shdr;
-
-typedef struct
-{
- Elf64_Word sh_name; /* Section name (string tbl index) */
- Elf64_Word sh_type; /* Section type */
- Elf64_Xword sh_flags; /* Section flags */
- Elf64_Addr sh_addr; /* Section virtual addr at execution */
- Elf64_Off sh_offset; /* Section file offset */
- Elf64_Xword sh_size; /* Section size in bytes */
- Elf64_Word sh_link; /* Link to another section */
- Elf64_Word sh_info; /* Additional section information */
- Elf64_Xword sh_addralign; /* Section alignment */
- Elf64_Xword sh_entsize; /* Entry size if section holds table */
-} Elf64_Shdr;
-
-/* Special section indices. */
-
-#define SHN_UNDEF 0 /* Undefined section */
-#define SHN_LORESERVE 0xff00 /* Start of reserved indices */
-#define SHN_LOPROC 0xff00 /* Start of processor-specific */
-#define SHN_BEFORE 0xff00 /* Order section before all others
- (Solaris). */
-#define SHN_AFTER 0xff01 /* Order section after all others
- (Solaris). */
-#define SHN_HIPROC 0xff1f /* End of processor-specific */
-#define SHN_LOOS 0xff20 /* Start of OS-specific */
-#define SHN_HIOS 0xff3f /* End of OS-specific */
-#define SHN_ABS 0xfff1 /* Associated symbol is absolute */
-#define SHN_COMMON 0xfff2 /* Associated symbol is common */
-#define SHN_XINDEX 0xffff /* Index is in extra table. */
-#define SHN_HIRESERVE 0xffff /* End of reserved indices */
-
-/* Legal values for sh_type (section type). */
-
-#define SHT_NULL 0 /* Section header table entry unused */
-#define SHT_PROGBITS 1 /* Program data */
-#define SHT_SYMTAB 2 /* Symbol table */
-#define SHT_STRTAB 3 /* String table */
-#define SHT_RELA 4 /* Relocation entries with addends */
-#define SHT_HASH 5 /* Symbol hash table */
-#define SHT_DYNAMIC 6 /* Dynamic linking information */
-#define SHT_NOTE 7 /* Notes */
-#define SHT_NOBITS 8 /* Program space with no data (bss) */
-#define SHT_REL 9 /* Relocation entries, no addends */
-#define SHT_SHLIB 10 /* Reserved */
-#define SHT_DYNSYM 11 /* Dynamic linker symbol table */
-#define SHT_INIT_ARRAY 14 /* Array of constructors */
-#define SHT_FINI_ARRAY 15 /* Array of destructors */
-#define SHT_PREINIT_ARRAY 16 /* Array of pre-constructors */
-#define SHT_GROUP 17 /* Section group */
-#define SHT_SYMTAB_SHNDX 18 /* Extended section indeces */
-#define SHT_NUM 19 /* Number of defined types. */
-#define SHT_LOOS 0x60000000 /* Start OS-specific. */
-#define SHT_GNU_ATTRIBUTES 0x6ffffff5 /* Object attributes. */
-#define SHT_GNU_HASH 0x6ffffff6 /* GNU-style hash table. */
-#define SHT_GNU_LIBLIST 0x6ffffff7 /* Prelink library list */
-#define SHT_CHECKSUM 0x6ffffff8 /* Checksum for DSO content. */
-#define SHT_LOSUNW 0x6ffffffa /* Sun-specific low bound. */
-#define SHT_SUNW_move 0x6ffffffa
-#define SHT_SUNW_COMDAT 0x6ffffffb
-#define SHT_SUNW_syminfo 0x6ffffffc
-#define SHT_GNU_verdef 0x6ffffffd /* Version definition section. */
-#define SHT_GNU_verneed 0x6ffffffe /* Version needs section. */
-#define SHT_GNU_versym 0x6fffffff /* Version symbol table. */
-#define SHT_HISUNW 0x6fffffff /* Sun-specific high bound. */
-#define SHT_HIOS 0x6fffffff /* End OS-specific type */
-#define SHT_LOPROC 0x70000000 /* Start of processor-specific */
-#define SHT_HIPROC 0x7fffffff /* End of processor-specific */
-#define SHT_LOUSER 0x80000000 /* Start of application-specific */
-#define SHT_HIUSER 0x8fffffff /* End of application-specific */
-
-/* Legal values for sh_flags (section flags). */
-
-#define SHF_WRITE (1 << 0) /* Writable */
-#define SHF_ALLOC (1 << 1) /* Occupies memory during execution */
-#define SHF_EXECINSTR (1 << 2) /* Executable */
-#define SHF_MERGE (1 << 4) /* Might be merged */
-#define SHF_STRINGS (1 << 5) /* Contains nul-terminated strings */
-#define SHF_INFO_LINK (1 << 6) /* `sh_info' contains SHT index */
-#define SHF_LINK_ORDER (1 << 7) /* Preserve order after combining */
-#define SHF_OS_NONCONFORMING (1 << 8) /* Non-standard OS specific handling
- required */
-#define SHF_GROUP (1 << 9) /* Section is member of a group. */
-#define SHF_TLS (1 << 10) /* Section hold thread-local data. */
-#define SHF_MASKOS 0x0ff00000 /* OS-specific. */
-#define SHF_MASKPROC 0xf0000000 /* Processor-specific */
-#define SHF_ORDERED (1 << 30) /* Special ordering requirement
- (Solaris). */
-#define SHF_EXCLUDE (1 << 31) /* Section is excluded unless
- referenced or allocated (Solaris).*/
-
-/* Section group handling. */
-#define GRP_COMDAT 0x1 /* Mark group as COMDAT. */
-
-/* Symbol table entry. */
-
-typedef struct
-{
- Elf32_Word st_name; /* Symbol name (string tbl index) */
- Elf32_Addr st_value; /* Symbol value */
- Elf32_Word st_size; /* Symbol size */
- unsigned char st_info; /* Symbol type and binding */
- unsigned char st_other; /* Symbol visibility */
- Elf32_Section st_shndx; /* Section index */
-} Elf32_Sym;
-
-typedef struct
-{
- Elf64_Word st_name; /* Symbol name (string tbl index) */
- unsigned char st_info; /* Symbol type and binding */
- unsigned char st_other; /* Symbol visibility */
- Elf64_Section st_shndx; /* Section index */
- Elf64_Addr st_value; /* Symbol value */
- Elf64_Xword st_size; /* Symbol size */
-} Elf64_Sym;
-
-/* The syminfo section if available contains additional information about
- every dynamic symbol. */
-
-typedef struct
-{
- Elf32_Half si_boundto; /* Direct bindings, symbol bound to */
- Elf32_Half si_flags; /* Per symbol flags */
-} Elf32_Syminfo;
-
-typedef struct
-{
- Elf64_Half si_boundto; /* Direct bindings, symbol bound to */
- Elf64_Half si_flags; /* Per symbol flags */
-} Elf64_Syminfo;
-
-/* Possible values for si_boundto. */
-#define SYMINFO_BT_SELF 0xffff /* Symbol bound to self */
-#define SYMINFO_BT_PARENT 0xfffe /* Symbol bound to parent */
-#define SYMINFO_BT_LOWRESERVE 0xff00 /* Beginning of reserved entries */
-
-/* Possible bitmasks for si_flags. */
-#define SYMINFO_FLG_DIRECT 0x0001 /* Direct bound symbol */
-#define SYMINFO_FLG_PASSTHRU 0x0002 /* Pass-thru symbol for translator */
-#define SYMINFO_FLG_COPY 0x0004 /* Symbol is a copy-reloc */
-#define SYMINFO_FLG_LAZYLOAD 0x0008 /* Symbol bound to object to be lazy
- loaded */
-/* Syminfo version values. */
-#define SYMINFO_NONE 0
-#define SYMINFO_CURRENT 1
-#define SYMINFO_NUM 2
-
-
-/* How to extract and insert information held in the st_info field. */
-
-#define ELF32_ST_BIND(val) (((unsigned char) (val)) >> 4)
-#define ELF32_ST_TYPE(val) ((val) & 0xf)
-#define ELF32_ST_INFO(bind, type) (((bind) << 4) + ((type) & 0xf))
-
-/* Both Elf32_Sym and Elf64_Sym use the same one-byte st_info field. */
-#define ELF64_ST_BIND(val) ELF32_ST_BIND (val)
-#define ELF64_ST_TYPE(val) ELF32_ST_TYPE (val)
-#define ELF64_ST_INFO(bind, type) ELF32_ST_INFO ((bind), (type))
-
-/* Legal values for ST_BIND subfield of st_info (symbol binding). */
-
-#define STB_LOCAL 0 /* Local symbol */
-#define STB_GLOBAL 1 /* Global symbol */
-#define STB_WEAK 2 /* Weak symbol */
-#define STB_NUM 3 /* Number of defined types. */
-#define STB_LOOS 10 /* Start of OS-specific */
-#define STB_HIOS 12 /* End of OS-specific */
-#define STB_LOPROC 13 /* Start of processor-specific */
-#define STB_HIPROC 15 /* End of processor-specific */
-
-/* Legal values for ST_TYPE subfield of st_info (symbol type). */
-
-#define STT_NOTYPE 0 /* Symbol type is unspecified */
-#define STT_OBJECT 1 /* Symbol is a data object */
-#define STT_FUNC 2 /* Symbol is a code object */
-#define STT_SECTION 3 /* Symbol associated with a section */
-#define STT_FILE 4 /* Symbol's name is file name */
-#define STT_COMMON 5 /* Symbol is a common data object */
-#define STT_TLS 6 /* Symbol is thread-local data object*/
-#define STT_NUM 7 /* Number of defined types. */
-#define STT_LOOS 10 /* Start of OS-specific */
-#define STT_HIOS 12 /* End of OS-specific */
-#define STT_LOPROC 13 /* Start of processor-specific */
-#define STT_HIPROC 15 /* End of processor-specific */
-
-
-/* Symbol table indices are found in the hash buckets and chain table
- of a symbol hash table section. This special index value indicates
- the end of a chain, meaning no further symbols are found in that bucket. */
-
-#define STN_UNDEF 0 /* End of a chain. */
-
-
-/* How to extract and insert information held in the st_other field. */
-
-#define ELF32_ST_VISIBILITY(o) ((o) & 0x03)
-
-/* For ELF64 the definitions are the same. */
-#define ELF64_ST_VISIBILITY(o) ELF32_ST_VISIBILITY (o)
-
-/* Symbol visibility specification encoded in the st_other field. */
-#define STV_DEFAULT 0 /* Default symbol visibility rules */
-#define STV_INTERNAL 1 /* Processor specific hidden class */
-#define STV_HIDDEN 2 /* Sym unavailable in other modules */
-#define STV_PROTECTED 3 /* Not preemptible, not exported */
-
-
-/* Relocation table entry without addend (in section of type SHT_REL). */
-
-typedef struct
-{
- Elf32_Addr r_offset; /* Address */
- Elf32_Word r_info; /* Relocation type and symbol index */
-} Elf32_Rel;
-
-/* I have seen two different definitions of the Elf64_Rel and
- Elf64_Rela structures, so we'll leave them out until Novell (or
- whoever) gets their act together. */
-/* The following, at least, is used on Sparc v9, MIPS, and Alpha. */
-
-typedef struct
-{
- Elf64_Addr r_offset; /* Address */
- Elf64_Xword r_info; /* Relocation type and symbol index */
-} Elf64_Rel;
-
-/* Relocation table entry with addend (in section of type SHT_RELA). */
-
-typedef struct
-{
- Elf32_Addr r_offset; /* Address */
- Elf32_Word r_info; /* Relocation type and symbol index */
- Elf32_Sword r_addend; /* Addend */
-} Elf32_Rela;
-
-typedef struct
-{
- Elf64_Addr r_offset; /* Address */
- Elf64_Xword r_info; /* Relocation type and symbol index */
- Elf64_Sxword r_addend; /* Addend */
-} Elf64_Rela;
-
-/* How to extract and insert information held in the r_info field. */
-
-#define ELF32_R_SYM(val) ((val) >> 8)
-#define ELF32_R_TYPE(val) ((val) & 0xff)
-#define ELF32_R_INFO(sym, type) (((sym) << 8) + ((type) & 0xff))
-
-#define ELF64_R_SYM(i) ((i) >> 32)
-#define ELF64_R_TYPE(i) ((i) & 0xffffffff)
-#define ELF64_R_INFO(sym,type) ((((Elf64_Xword) (sym)) << 32) + (type))
-
-/* Program segment header. */
-
-typedef struct
-{
- Elf32_Word p_type; /* Segment type */
- Elf32_Off p_offset; /* Segment file offset */
- Elf32_Addr p_vaddr; /* Segment virtual address */
- Elf32_Addr p_paddr; /* Segment physical address */
- Elf32_Word p_filesz; /* Segment size in file */
- Elf32_Word p_memsz; /* Segment size in memory */
- Elf32_Word p_flags; /* Segment flags */
- Elf32_Word p_align; /* Segment alignment */
-} Elf32_Phdr;
-
-typedef struct
-{
- Elf64_Word p_type; /* Segment type */
- Elf64_Word p_flags; /* Segment flags */
- Elf64_Off p_offset; /* Segment file offset */
- Elf64_Addr p_vaddr; /* Segment virtual address */
- Elf64_Addr p_paddr; /* Segment physical address */
- Elf64_Xword p_filesz; /* Segment size in file */
- Elf64_Xword p_memsz; /* Segment size in memory */
- Elf64_Xword p_align; /* Segment alignment */
-} Elf64_Phdr;
-
-/* Legal values for p_type (segment type). */
-
-#define PT_NULL 0 /* Program header table entry unused */
-#define PT_LOAD 1 /* Loadable program segment */
-#define PT_DYNAMIC 2 /* Dynamic linking information */
-#define PT_INTERP 3 /* Program interpreter */
-#define PT_NOTE 4 /* Auxiliary information */
-#define PT_SHLIB 5 /* Reserved */
-#define PT_PHDR 6 /* Entry for header table itself */
-#define PT_TLS 7 /* Thread-local storage segment */
-#define PT_NUM 8 /* Number of defined types */
-#define PT_LOOS 0x60000000 /* Start of OS-specific */
-#define PT_GNU_EH_FRAME 0x6474e550 /* GCC .eh_frame_hdr segment */
-#define PT_GNU_STACK 0x6474e551 /* Indicates stack executability */
-#define PT_GNU_RELRO 0x6474e552 /* Read-only after relocation */
-#define PT_LOSUNW 0x6ffffffa
-#define PT_SUNWBSS 0x6ffffffa /* Sun Specific segment */
-#define PT_SUNWSTACK 0x6ffffffb /* Stack segment */
-#define PT_HISUNW 0x6fffffff
-#define PT_HIOS 0x6fffffff /* End of OS-specific */
-#define PT_LOPROC 0x70000000 /* Start of processor-specific */
-#define PT_HIPROC 0x7fffffff /* End of processor-specific */
-
-/* Legal values for p_flags (segment flags). */
-
-#define PF_X (1 << 0) /* Segment is executable */
-#define PF_W (1 << 1) /* Segment is writable */
-#define PF_R (1 << 2) /* Segment is readable */
-#define PF_MASKOS 0x0ff00000 /* OS-specific */
-#define PF_MASKPROC 0xf0000000 /* Processor-specific */
-
-/* Legal values for note segment descriptor types for core files. */
-
-#define NT_PRSTATUS 1 /* Contains copy of prstatus struct */
-#define NT_FPREGSET 2 /* Contains copy of fpregset struct */
-#define NT_PRPSINFO 3 /* Contains copy of prpsinfo struct */
-#define NT_PRXREG 4 /* Contains copy of prxregset struct */
-#define NT_TASKSTRUCT 4 /* Contains copy of task structure */
-#define NT_PLATFORM 5 /* String from sysinfo(SI_PLATFORM) */
-#define NT_AUXV 6 /* Contains copy of auxv array */
-#define NT_GWINDOWS 7 /* Contains copy of gwindows struct */
-#define NT_ASRS 8 /* Contains copy of asrset struct */
-#define NT_PSTATUS 10 /* Contains copy of pstatus struct */
-#define NT_PSINFO 13 /* Contains copy of psinfo struct */
-#define NT_PRCRED 14 /* Contains copy of prcred struct */
-#define NT_UTSNAME 15 /* Contains copy of utsname struct */
-#define NT_LWPSTATUS 16 /* Contains copy of lwpstatus struct */
-#define NT_LWPSINFO 17 /* Contains copy of lwpinfo struct */
-#define NT_PRFPXREG 20 /* Contains copy of fprxregset struct */
-#define NT_PRXFPREG 0x46e62b7f /* Contains copy of user_fxsr_struct */
-#define NT_PPC_VMX 0x100 /* PowerPC Altivec/VMX registers */
-#define NT_PPC_SPE 0x101 /* PowerPC SPE/EVR registers */
-#define NT_PPC_VSX 0x102 /* PowerPC VSX registers */
-#define NT_386_TLS 0x200 /* i386 TLS slots (struct user_desc) */
-#define NT_386_IOPERM 0x201 /* x86 io permission bitmap (1=deny) */
-
-/* Legal values for the note segment descriptor types for object files. */
-
-#define NT_VERSION 1 /* Contains a version string. */
-
-
-/* Dynamic section entry. */
-
-typedef struct
-{
- Elf32_Sword d_tag; /* Dynamic entry type */
- union
- {
- Elf32_Word d_val; /* Integer value */
- Elf32_Addr d_ptr; /* Address value */
- } d_un;
-} Elf32_Dyn;
-
-typedef struct
-{
- Elf64_Sxword d_tag; /* Dynamic entry type */
- union
- {
- Elf64_Xword d_val; /* Integer value */
- Elf64_Addr d_ptr; /* Address value */
- } d_un;
-} Elf64_Dyn;
-
-/* Legal values for d_tag (dynamic entry type). */
-
-#define DT_NULL 0 /* Marks end of dynamic section */
-#define DT_NEEDED 1 /* Name of needed library */
-#define DT_PLTRELSZ 2 /* Size in bytes of PLT relocs */
-#define DT_PLTGOT 3 /* Processor defined value */
-#define DT_HASH 4 /* Address of symbol hash table */
-#define DT_STRTAB 5 /* Address of string table */
-#define DT_SYMTAB 6 /* Address of symbol table */
-#define DT_RELA 7 /* Address of Rela relocs */
-#define DT_RELASZ 8 /* Total size of Rela relocs */
-#define DT_RELAENT 9 /* Size of one Rela reloc */
-#define DT_STRSZ 10 /* Size of string table */
-#define DT_SYMENT 11 /* Size of one symbol table entry */
-#define DT_INIT 12 /* Address of init function */
-#define DT_FINI 13 /* Address of termination function */
-#define DT_SONAME 14 /* Name of shared object */
-#define DT_RPATH 15 /* Library search path (deprecated) */
-#define DT_SYMBOLIC 16 /* Start symbol search here */
-#define DT_REL 17 /* Address of Rel relocs */
-#define DT_RELSZ 18 /* Total size of Rel relocs */
-#define DT_RELENT 19 /* Size of one Rel reloc */
-#define DT_PLTREL 20 /* Type of reloc in PLT */
-#define DT_DEBUG 21 /* For debugging; unspecified */
-#define DT_TEXTREL 22 /* Reloc might modify .text */
-#define DT_JMPREL 23 /* Address of PLT relocs */
-#define DT_BIND_NOW 24 /* Process relocations of object */
-#define DT_INIT_ARRAY 25 /* Array with addresses of init fct */
-#define DT_FINI_ARRAY 26 /* Array with addresses of fini fct */
-#define DT_INIT_ARRAYSZ 27 /* Size in bytes of DT_INIT_ARRAY */
-#define DT_FINI_ARRAYSZ 28 /* Size in bytes of DT_FINI_ARRAY */
-#define DT_RUNPATH 29 /* Library search path */
-#define DT_FLAGS 30 /* Flags for the object being loaded */
-#define DT_ENCODING 32 /* Start of encoded range */
-#define DT_PREINIT_ARRAY 32 /* Array with addresses of preinit fct*/
-#define DT_PREINIT_ARRAYSZ 33 /* size in bytes of DT_PREINIT_ARRAY */
-#define DT_NUM 34 /* Number used */
-#define DT_LOOS 0x6000000d /* Start of OS-specific */
-#define DT_HIOS 0x6ffff000 /* End of OS-specific */
-#define DT_LOPROC 0x70000000 /* Start of processor-specific */
-#define DT_HIPROC 0x7fffffff /* End of processor-specific */
-#define DT_PROCNUM DT_MIPS_NUM /* Most used by any processor */
-
-/* DT_* entries which fall between DT_VALRNGHI & DT_VALRNGLO use the
- Dyn.d_un.d_val field of the Elf*_Dyn structure. This follows Sun's
- approach. */
-#define DT_VALRNGLO 0x6ffffd00
-#define DT_GNU_PRELINKED 0x6ffffdf5 /* Prelinking timestamp */
-#define DT_GNU_CONFLICTSZ 0x6ffffdf6 /* Size of conflict section */
-#define DT_GNU_LIBLISTSZ 0x6ffffdf7 /* Size of library list */
-#define DT_CHECKSUM 0x6ffffdf8
-#define DT_PLTPADSZ 0x6ffffdf9
-#define DT_MOVEENT 0x6ffffdfa
-#define DT_MOVESZ 0x6ffffdfb
-#define DT_FEATURE_1 0x6ffffdfc /* Feature selection (DTF_*). */
-#define DT_POSFLAG_1 0x6ffffdfd /* Flags for DT_* entries, effecting
- the following DT_* entry. */
-#define DT_SYMINSZ 0x6ffffdfe /* Size of syminfo table (in bytes) */
-#define DT_SYMINENT 0x6ffffdff /* Entry size of syminfo */
-#define DT_VALRNGHI 0x6ffffdff
-#define DT_VALTAGIDX(tag) (DT_VALRNGHI - (tag)) /* Reverse order! */
-#define DT_VALNUM 12
-
-/* DT_* entries which fall between DT_ADDRRNGHI & DT_ADDRRNGLO use the
- Dyn.d_un.d_ptr field of the Elf*_Dyn structure.
-
- If any adjustment is made to the ELF object after it has been
- built these entries will need to be adjusted. */
-#define DT_ADDRRNGLO 0x6ffffe00
-#define DT_GNU_HASH 0x6ffffef5 /* GNU-style hash table. */
-#define DT_TLSDESC_PLT 0x6ffffef6
-#define DT_TLSDESC_GOT 0x6ffffef7
-#define DT_GNU_CONFLICT 0x6ffffef8 /* Start of conflict section */
-#define DT_GNU_LIBLIST 0x6ffffef9 /* Library list */
-#define DT_CONFIG 0x6ffffefa /* Configuration information. */
-#define DT_DEPAUDIT 0x6ffffefb /* Dependency auditing. */
-#define DT_AUDIT 0x6ffffefc /* Object auditing. */
-#define DT_PLTPAD 0x6ffffefd /* PLT padding. */
-#define DT_MOVETAB 0x6ffffefe /* Move table. */
-#define DT_SYMINFO 0x6ffffeff /* Syminfo table. */
-#define DT_ADDRRNGHI 0x6ffffeff
-#define DT_ADDRTAGIDX(tag) (DT_ADDRRNGHI - (tag)) /* Reverse order! */
-#define DT_ADDRNUM 11
-
-/* The versioning entry types. The next are defined as part of the
- GNU extension. */
-#define DT_VERSYM 0x6ffffff0
-
-#define DT_RELACOUNT 0x6ffffff9
-#define DT_RELCOUNT 0x6ffffffa
-
-/* These were chosen by Sun. */
-#define DT_FLAGS_1 0x6ffffffb /* State flags, see DF_1_* below. */
-#define DT_VERDEF 0x6ffffffc /* Address of version definition
- table */
-#define DT_VERDEFNUM 0x6ffffffd /* Number of version definitions */
-#define DT_VERNEED 0x6ffffffe /* Address of table with needed
- versions */
-#define DT_VERNEEDNUM 0x6fffffff /* Number of needed versions */
-#define DT_VERSIONTAGIDX(tag) (DT_VERNEEDNUM - (tag)) /* Reverse order! */
-#define DT_VERSIONTAGNUM 16
-
-/* Sun added these machine-independent extensions in the "processor-specific"
- range. Be compatible. */
-#define DT_AUXILIARY 0x7ffffffd /* Shared object to load before self */
-#define DT_FILTER 0x7fffffff /* Shared object to get values from */
-#define DT_EXTRATAGIDX(tag) ((Elf32_Word)-((Elf32_Sword) (tag) <<1>>1)-1)
-#define DT_EXTRANUM 3
-
-/* Values of `d_un.d_val' in the DT_FLAGS entry. */
-#define DF_ORIGIN 0x00000001 /* Object may use DF_ORIGIN */
-#define DF_SYMBOLIC 0x00000002 /* Symbol resolutions starts here */
-#define DF_TEXTREL 0x00000004 /* Object contains text relocations */
-#define DF_BIND_NOW 0x00000008 /* No lazy binding for this object */
-#define DF_STATIC_TLS 0x00000010 /* Module uses the static TLS model */
-
-/* State flags selectable in the `d_un.d_val' element of the DT_FLAGS_1
- entry in the dynamic section. */
-#define DF_1_NOW 0x00000001 /* Set RTLD_NOW for this object. */
-#define DF_1_GLOBAL 0x00000002 /* Set RTLD_GLOBAL for this object. */
-#define DF_1_GROUP 0x00000004 /* Set RTLD_GROUP for this object. */
-#define DF_1_NODELETE 0x00000008 /* Set RTLD_NODELETE for this object.*/
-#define DF_1_LOADFLTR 0x00000010 /* Trigger filtee loading at runtime.*/
-#define DF_1_INITFIRST 0x00000020 /* Set RTLD_INITFIRST for this object*/
-#define DF_1_NOOPEN 0x00000040 /* Set RTLD_NOOPEN for this object. */
-#define DF_1_ORIGIN 0x00000080 /* $ORIGIN must be handled. */
-#define DF_1_DIRECT 0x00000100 /* Direct binding enabled. */
-#define DF_1_TRANS 0x00000200
-#define DF_1_INTERPOSE 0x00000400 /* Object is used to interpose. */
-#define DF_1_NODEFLIB 0x00000800 /* Ignore default lib search path. */
-#define DF_1_NODUMP 0x00001000 /* Object can't be dldump'ed. */
-#define DF_1_CONFALT 0x00002000 /* Configuration alternative created.*/
-#define DF_1_ENDFILTEE 0x00004000 /* Filtee terminates filters search. */
-#define DF_1_DISPRELDNE 0x00008000 /* Disp reloc applied at build time. */
-#define DF_1_DISPRELPND 0x00010000 /* Disp reloc applied at run-time. */
-
-/* Flags for the feature selection in DT_FEATURE_1. */
-#define DTF_1_PARINIT 0x00000001
-#define DTF_1_CONFEXP 0x00000002
-
-/* Flags in the DT_POSFLAG_1 entry effecting only the next DT_* entry. */
-#define DF_P1_LAZYLOAD 0x00000001 /* Lazyload following object. */
-#define DF_P1_GROUPPERM 0x00000002 /* Symbols from next object are not
- generally available. */
-
-/* Version definition sections. */
-
-typedef struct
-{
- Elf32_Half vd_version; /* Version revision */
- Elf32_Half vd_flags; /* Version information */
- Elf32_Half vd_ndx; /* Version Index */
- Elf32_Half vd_cnt; /* Number of associated aux entries */
- Elf32_Word vd_hash; /* Version name hash value */
- Elf32_Word vd_aux; /* Offset in bytes to verdaux array */
- Elf32_Word vd_next; /* Offset in bytes to next verdef
- entry */
-} Elf32_Verdef;
-
-typedef struct
-{
- Elf64_Half vd_version; /* Version revision */
- Elf64_Half vd_flags; /* Version information */
- Elf64_Half vd_ndx; /* Version Index */
- Elf64_Half vd_cnt; /* Number of associated aux entries */
- Elf64_Word vd_hash; /* Version name hash value */
- Elf64_Word vd_aux; /* Offset in bytes to verdaux array */
- Elf64_Word vd_next; /* Offset in bytes to next verdef
- entry */
-} Elf64_Verdef;
-
-
-/* Legal values for vd_version (version revision). */
-#define VER_DEF_NONE 0 /* No version */
-#define VER_DEF_CURRENT 1 /* Current version */
-#define VER_DEF_NUM 2 /* Given version number */
-
-/* Legal values for vd_flags (version information flags). */
-#define VER_FLG_BASE 0x1 /* Version definition of file itself */
-#define VER_FLG_WEAK 0x2 /* Weak version identifier */
-
-/* Versym symbol index values. */
-#define VER_NDX_LOCAL 0 /* Symbol is local. */
-#define VER_NDX_GLOBAL 1 /* Symbol is global. */
-#define VER_NDX_LORESERVE 0xff00 /* Beginning of reserved entries. */
-#define VER_NDX_ELIMINATE 0xff01 /* Symbol is to be eliminated. */
-
-/* Auxialiary version information. */
-
-typedef struct
-{
- Elf32_Word vda_name; /* Version or dependency names */
- Elf32_Word vda_next; /* Offset in bytes to next verdaux
- entry */
-} Elf32_Verdaux;
-
-typedef struct
-{
- Elf64_Word vda_name; /* Version or dependency names */
- Elf64_Word vda_next; /* Offset in bytes to next verdaux
- entry */
-} Elf64_Verdaux;
-
-
-/* Version dependency section. */
-
-typedef struct
-{
- Elf32_Half vn_version; /* Version of structure */
- Elf32_Half vn_cnt; /* Number of associated aux entries */
- Elf32_Word vn_file; /* Offset of filename for this
- dependency */
- Elf32_Word vn_aux; /* Offset in bytes to vernaux array */
- Elf32_Word vn_next; /* Offset in bytes to next verneed
- entry */
-} Elf32_Verneed;
-
-typedef struct
-{
- Elf64_Half vn_version; /* Version of structure */
- Elf64_Half vn_cnt; /* Number of associated aux entries */
- Elf64_Word vn_file; /* Offset of filename for this
- dependency */
- Elf64_Word vn_aux; /* Offset in bytes to vernaux array */
- Elf64_Word vn_next; /* Offset in bytes to next verneed
- entry */
-} Elf64_Verneed;
-
-
-/* Legal values for vn_version (version revision). */
-#define VER_NEED_NONE 0 /* No version */
-#define VER_NEED_CURRENT 1 /* Current version */
-#define VER_NEED_NUM 2 /* Given version number */
-
-/* Auxiliary needed version information. */
-
-typedef struct
-{
- Elf32_Word vna_hash; /* Hash value of dependency name */
- Elf32_Half vna_flags; /* Dependency specific information */
- Elf32_Half vna_other; /* Unused */
- Elf32_Word vna_name; /* Dependency name string offset */
- Elf32_Word vna_next; /* Offset in bytes to next vernaux
- entry */
-} Elf32_Vernaux;
-
-typedef struct
-{
- Elf64_Word vna_hash; /* Hash value of dependency name */
- Elf64_Half vna_flags; /* Dependency specific information */
- Elf64_Half vna_other; /* Unused */
- Elf64_Word vna_name; /* Dependency name string offset */
- Elf64_Word vna_next; /* Offset in bytes to next vernaux
- entry */
-} Elf64_Vernaux;
-
-
-/* Legal values for vna_flags. */
-#define VER_FLG_WEAK 0x2 /* Weak version identifier */
-
-
-/* Auxiliary vector. */
-
-/* This vector is normally only used by the program interpreter. The
- usual definition in an ABI supplement uses the name auxv_t. The
- vector is not usually defined in a standard <elf.h> file, but it
- can't hurt. We rename it to avoid conflicts. The sizes of these
- types are an arrangement between the exec server and the program
- interpreter, so we don't fully specify them here. */
-
-typedef struct
-{
- uint32_t a_type; /* Entry type */
- union
- {
- uint32_t a_val; /* Integer value */
- /* We use to have pointer elements added here. We cannot do that,
- though, since it does not work when using 32-bit definitions
- on 64-bit platforms and vice versa. */
- } a_un;
-} Elf32_auxv_t;
-
-typedef struct
-{
- uint64_t a_type; /* Entry type */
- union
- {
- uint64_t a_val; /* Integer value */
- /* We use to have pointer elements added here. We cannot do that,
- though, since it does not work when using 32-bit definitions
- on 64-bit platforms and vice versa. */
- } a_un;
-} Elf64_auxv_t;
-
-/* Legal values for a_type (entry type). */
-
-#define AT_NULL 0 /* End of vector */
-#define AT_IGNORE 1 /* Entry should be ignored */
-#define AT_EXECFD 2 /* File descriptor of program */
-#define AT_PHDR 3 /* Program headers for program */
-#define AT_PHENT 4 /* Size of program header entry */
-#define AT_PHNUM 5 /* Number of program headers */
-#define AT_PAGESZ 6 /* System page size */
-#define AT_BASE 7 /* Base address of interpreter */
-#define AT_FLAGS 8 /* Flags */
-#define AT_ENTRY 9 /* Entry point of program */
-#define AT_NOTELF 10 /* Program is not ELF */
-#define AT_UID 11 /* Real uid */
-#define AT_EUID 12 /* Effective uid */
-#define AT_GID 13 /* Real gid */
-#define AT_EGID 14 /* Effective gid */
-#define AT_CLKTCK 17 /* Frequency of times() */
-
-/* Some more special a_type values describing the hardware. */
-#define AT_PLATFORM 15 /* String identifying platform. */
-#define AT_HWCAP 16 /* Machine dependent hints about
- processor capabilities. */
-
-/* This entry gives some information about the FPU initialization
- performed by the kernel. */
-#define AT_FPUCW 18 /* Used FPU control word. */
-
-/* Cache block sizes. */
-#define AT_DCACHEBSIZE 19 /* Data cache block size. */
-#define AT_ICACHEBSIZE 20 /* Instruction cache block size. */
-#define AT_UCACHEBSIZE 21 /* Unified cache block size. */
-
-/* A special ignored value for PPC, used by the kernel to control the
- interpretation of the AUXV. Must be > 16. */
-#define AT_IGNOREPPC 22 /* Entry should be ignored. */
-
-#define AT_SECURE 23 /* Boolean, was exec setuid-like? */
-
-#define AT_EXECFN 31 /* Filename of executable. */
-
-/* Pointer to the global system page used for system calls and other
- nice things. */
-#define AT_SYSINFO 32
-#define AT_SYSINFO_EHDR 33
-
-/* Shapes of the caches. Bits 0-3 contains associativity; bits 4-7 contains
- log2 of line size; mask those to get cache size. */
-#define AT_L1I_CACHESHAPE 34
-#define AT_L1D_CACHESHAPE 35
-#define AT_L2_CACHESHAPE 36
-#define AT_L3_CACHESHAPE 37
-
-/* Note section contents. Each entry in the note section begins with
- a header of a fixed form. */
-
-typedef struct
-{
- Elf32_Word n_namesz; /* Length of the note's name. */
- Elf32_Word n_descsz; /* Length of the note's descriptor. */
- Elf32_Word n_type; /* Type of the note. */
-} Elf32_Nhdr;
-
-typedef struct
-{
- Elf64_Word n_namesz; /* Length of the note's name. */
- Elf64_Word n_descsz; /* Length of the note's descriptor. */
- Elf64_Word n_type; /* Type of the note. */
-} Elf64_Nhdr;
-
-/* Known names of notes. */
-
-/* Solaris entries in the note section have this name. */
-#define ELF_NOTE_SOLARIS "SUNW Solaris"
-
-/* Note entries for GNU systems have this name. */
-#define ELF_NOTE_GNU "GNU"
-
-
-/* Defined types of notes for Solaris. */
-
-/* Value of descriptor (one word) is desired pagesize for the binary. */
-#define ELF_NOTE_PAGESIZE_HINT 1
-
-
-/* Defined note types for GNU systems. */
-
-/* ABI information. The descriptor consists of words:
- word 0: OS descriptor
- word 1: major version of the ABI
- word 2: minor version of the ABI
- word 3: subminor version of the ABI
-*/
-#define NT_GNU_ABI_TAG 1
-#define ELF_NOTE_ABI NT_GNU_ABI_TAG /* Old name. */
-
-/* Known OSes. These values can appear in word 0 of an
- NT_GNU_ABI_TAG note section entry. */
-#define ELF_NOTE_OS_LINUX 0
-#define ELF_NOTE_OS_GNU 1
-#define ELF_NOTE_OS_SOLARIS2 2
-#define ELF_NOTE_OS_FREEBSD 3
-
-/* Synthetic hwcap information. The descriptor begins with two words:
- word 0: number of entries
- word 1: bitmask of enabled entries
- Then follow variable-length entries, one byte followed by a
- '\0'-terminated hwcap name string. The byte gives the bit
- number to test if enabled, (1U << bit) & bitmask. */
-#define NT_GNU_HWCAP 2
-
-/* Build ID bits as generated by ld --build-id.
- The descriptor consists of any nonzero number of bytes. */
-#define NT_GNU_BUILD_ID 3
-
-
-/* Move records. */
-typedef struct
-{
- Elf32_Xword m_value; /* Symbol value. */
- Elf32_Word m_info; /* Size and index. */
- Elf32_Word m_poffset; /* Symbol offset. */
- Elf32_Half m_repeat; /* Repeat count. */
- Elf32_Half m_stride; /* Stride info. */
-} Elf32_Move;
-
-typedef struct
-{
- Elf64_Xword m_value; /* Symbol value. */
- Elf64_Xword m_info; /* Size and index. */
- Elf64_Xword m_poffset; /* Symbol offset. */
- Elf64_Half m_repeat; /* Repeat count. */
- Elf64_Half m_stride; /* Stride info. */
-} Elf64_Move;
-
-/* Macro to construct move records. */
-#define ELF32_M_SYM(info) ((info) >> 8)
-#define ELF32_M_SIZE(info) ((unsigned char) (info))
-#define ELF32_M_INFO(sym, size) (((sym) << 8) + (unsigned char) (size))
-
-#define ELF64_M_SYM(info) ELF32_M_SYM (info)
-#define ELF64_M_SIZE(info) ELF32_M_SIZE (info)
-#define ELF64_M_INFO(sym, size) ELF32_M_INFO (sym, size)
-
-
-/* Motorola 68k specific definitions. */
-
-/* Values for Elf32_Ehdr.e_flags. */
-#define EF_CPU32 0x00810000
-
-/* m68k relocs. */
-
-#define R_68K_NONE 0 /* No reloc */
-#define R_68K_32 1 /* Direct 32 bit */
-#define R_68K_16 2 /* Direct 16 bit */
-#define R_68K_8 3 /* Direct 8 bit */
-#define R_68K_PC32 4 /* PC relative 32 bit */
-#define R_68K_PC16 5 /* PC relative 16 bit */
-#define R_68K_PC8 6 /* PC relative 8 bit */
-#define R_68K_GOT32 7 /* 32 bit PC relative GOT entry */
-#define R_68K_GOT16 8 /* 16 bit PC relative GOT entry */
-#define R_68K_GOT8 9 /* 8 bit PC relative GOT entry */
-#define R_68K_GOT32O 10 /* 32 bit GOT offset */
-#define R_68K_GOT16O 11 /* 16 bit GOT offset */
-#define R_68K_GOT8O 12 /* 8 bit GOT offset */
-#define R_68K_PLT32 13 /* 32 bit PC relative PLT address */
-#define R_68K_PLT16 14 /* 16 bit PC relative PLT address */
-#define R_68K_PLT8 15 /* 8 bit PC relative PLT address */
-#define R_68K_PLT32O 16 /* 32 bit PLT offset */
-#define R_68K_PLT16O 17 /* 16 bit PLT offset */
-#define R_68K_PLT8O 18 /* 8 bit PLT offset */
-#define R_68K_COPY 19 /* Copy symbol at runtime */
-#define R_68K_GLOB_DAT 20 /* Create GOT entry */
-#define R_68K_JMP_SLOT 21 /* Create PLT entry */
-#define R_68K_RELATIVE 22 /* Adjust by program base */
-/* Keep this the last entry. */
-#define R_68K_NUM 23
-
-/* Intel 80386 specific definitions. */
-
-/* i386 relocs. */
-
-#define R_386_NONE 0 /* No reloc */
-#define R_386_32 1 /* Direct 32 bit */
-#define R_386_PC32 2 /* PC relative 32 bit */
-#define R_386_GOT32 3 /* 32 bit GOT entry */
-#define R_386_PLT32 4 /* 32 bit PLT address */
-#define R_386_COPY 5 /* Copy symbol at runtime */
-#define R_386_GLOB_DAT 6 /* Create GOT entry */
-#define R_386_JMP_SLOT 7 /* Create PLT entry */
-#define R_386_RELATIVE 8 /* Adjust by program base */
-#define R_386_GOTOFF 9 /* 32 bit offset to GOT */
-#define R_386_GOTPC 10 /* 32 bit PC relative offset to GOT */
-#define R_386_32PLT 11
-#define R_386_TLS_TPOFF 14 /* Offset in static TLS block */
-#define R_386_TLS_IE 15 /* Address of GOT entry for static TLS
- block offset */
-#define R_386_TLS_GOTIE 16 /* GOT entry for static TLS block
- offset */
-#define R_386_TLS_LE 17 /* Offset relative to static TLS
- block */
-#define R_386_TLS_GD 18 /* Direct 32 bit for GNU version of
- general dynamic thread local data */
-#define R_386_TLS_LDM 19 /* Direct 32 bit for GNU version of
- local dynamic thread local data
- in LE code */
-#define R_386_16 20
-#define R_386_PC16 21
-#define R_386_8 22
-#define R_386_PC8 23
-#define R_386_TLS_GD_32 24 /* Direct 32 bit for general dynamic
- thread local data */
-#define R_386_TLS_GD_PUSH 25 /* Tag for pushl in GD TLS code */
-#define R_386_TLS_GD_CALL 26 /* Relocation for call to
- __tls_get_addr() */
-#define R_386_TLS_GD_POP 27 /* Tag for popl in GD TLS code */
-#define R_386_TLS_LDM_32 28 /* Direct 32 bit for local dynamic
- thread local data in LE code */
-#define R_386_TLS_LDM_PUSH 29 /* Tag for pushl in LDM TLS code */
-#define R_386_TLS_LDM_CALL 30 /* Relocation for call to
- __tls_get_addr() in LDM code */
-#define R_386_TLS_LDM_POP 31 /* Tag for popl in LDM TLS code */
-#define R_386_TLS_LDO_32 32 /* Offset relative to TLS block */
-#define R_386_TLS_IE_32 33 /* GOT entry for negated static TLS
- block offset */
-#define R_386_TLS_LE_32 34 /* Negated offset relative to static
- TLS block */
-#define R_386_TLS_DTPMOD32 35 /* ID of module containing symbol */
-#define R_386_TLS_DTPOFF32 36 /* Offset in TLS block */
-#define R_386_TLS_TPOFF32 37 /* Negated offset in static TLS block */
-/* 38? */
-#define R_386_TLS_GOTDESC 39 /* GOT offset for TLS descriptor. */
-#define R_386_TLS_DESC_CALL 40 /* Marker of call through TLS
- descriptor for
- relaxation. */
-#define R_386_TLS_DESC 41 /* TLS descriptor containing
- pointer to code and to
- argument, returning the TLS
- offset for the symbol. */
-/* Keep this the last entry. */
-#define R_386_NUM 42
-
-/* SUN SPARC specific definitions. */
-
-/* Legal values for ST_TYPE subfield of st_info (symbol type). */
-
-#define STT_SPARC_REGISTER 13 /* Global register reserved to app. */
-
-/* Values for Elf64_Ehdr.e_flags. */
-
-#define EF_SPARCV9_MM 3
-#define EF_SPARCV9_TSO 0
-#define EF_SPARCV9_PSO 1
-#define EF_SPARCV9_RMO 2
-#define EF_SPARC_LEDATA 0x800000 /* little endian data */
-#define EF_SPARC_EXT_MASK 0xFFFF00
-#define EF_SPARC_32PLUS 0x000100 /* generic V8+ features */
-#define EF_SPARC_SUN_US1 0x000200 /* Sun UltraSPARC1 extensions */
-#define EF_SPARC_HAL_R1 0x000400 /* HAL R1 extensions */
-#define EF_SPARC_SUN_US3 0x000800 /* Sun UltraSPARCIII extensions */
-
-/* SPARC relocs. */
-
-#define R_SPARC_NONE 0 /* No reloc */
-#define R_SPARC_8 1 /* Direct 8 bit */
-#define R_SPARC_16 2 /* Direct 16 bit */
-#define R_SPARC_32 3 /* Direct 32 bit */
-#define R_SPARC_DISP8 4 /* PC relative 8 bit */
-#define R_SPARC_DISP16 5 /* PC relative 16 bit */
-#define R_SPARC_DISP32 6 /* PC relative 32 bit */
-#define R_SPARC_WDISP30 7 /* PC relative 30 bit shifted */
-#define R_SPARC_WDISP22 8 /* PC relative 22 bit shifted */
-#define R_SPARC_HI22 9 /* High 22 bit */
-#define R_SPARC_22 10 /* Direct 22 bit */
-#define R_SPARC_13 11 /* Direct 13 bit */
-#define R_SPARC_LO10 12 /* Truncated 10 bit */
-#define R_SPARC_GOT10 13 /* Truncated 10 bit GOT entry */
-#define R_SPARC_GOT13 14 /* 13 bit GOT entry */
-#define R_SPARC_GOT22 15 /* 22 bit GOT entry shifted */
-#define R_SPARC_PC10 16 /* PC relative 10 bit truncated */
-#define R_SPARC_PC22 17 /* PC relative 22 bit shifted */
-#define R_SPARC_WPLT30 18 /* 30 bit PC relative PLT address */
-#define R_SPARC_COPY 19 /* Copy symbol at runtime */
-#define R_SPARC_GLOB_DAT 20 /* Create GOT entry */
-#define R_SPARC_JMP_SLOT 21 /* Create PLT entry */
-#define R_SPARC_RELATIVE 22 /* Adjust by program base */
-#define R_SPARC_UA32 23 /* Direct 32 bit unaligned */
-
-/* Additional Sparc64 relocs. */
-
-#define R_SPARC_PLT32 24 /* Direct 32 bit ref to PLT entry */
-#define R_SPARC_HIPLT22 25 /* High 22 bit PLT entry */
-#define R_SPARC_LOPLT10 26 /* Truncated 10 bit PLT entry */
-#define R_SPARC_PCPLT32 27 /* PC rel 32 bit ref to PLT entry */
-#define R_SPARC_PCPLT22 28 /* PC rel high 22 bit PLT entry */
-#define R_SPARC_PCPLT10 29 /* PC rel trunc 10 bit PLT entry */
-#define R_SPARC_10 30 /* Direct 10 bit */
-#define R_SPARC_11 31 /* Direct 11 bit */
-#define R_SPARC_64 32 /* Direct 64 bit */
-#define R_SPARC_OLO10 33 /* 10bit with secondary 13bit addend */
-#define R_SPARC_HH22 34 /* Top 22 bits of direct 64 bit */
-#define R_SPARC_HM10 35 /* High middle 10 bits of ... */
-#define R_SPARC_LM22 36 /* Low middle 22 bits of ... */
-#define R_SPARC_PC_HH22 37 /* Top 22 bits of pc rel 64 bit */
-#define R_SPARC_PC_HM10 38 /* High middle 10 bit of ... */
-#define R_SPARC_PC_LM22 39 /* Low miggle 22 bits of ... */
-#define R_SPARC_WDISP16 40 /* PC relative 16 bit shifted */
-#define R_SPARC_WDISP19 41 /* PC relative 19 bit shifted */
-#define R_SPARC_7 43 /* Direct 7 bit */
-#define R_SPARC_5 44 /* Direct 5 bit */
-#define R_SPARC_6 45 /* Direct 6 bit */
-#define R_SPARC_DISP64 46 /* PC relative 64 bit */
-#define R_SPARC_PLT64 47 /* Direct 64 bit ref to PLT entry */
-#define R_SPARC_HIX22 48 /* High 22 bit complemented */
-#define R_SPARC_LOX10 49 /* Truncated 11 bit complemented */
-#define R_SPARC_H44 50 /* Direct high 12 of 44 bit */
-#define R_SPARC_M44 51 /* Direct mid 22 of 44 bit */
-#define R_SPARC_L44 52 /* Direct low 10 of 44 bit */
-#define R_SPARC_REGISTER 53 /* Global register usage */
-#define R_SPARC_UA64 54 /* Direct 64 bit unaligned */
-#define R_SPARC_UA16 55 /* Direct 16 bit unaligned */
-#define R_SPARC_TLS_GD_HI22 56
-#define R_SPARC_TLS_GD_LO10 57
-#define R_SPARC_TLS_GD_ADD 58
-#define R_SPARC_TLS_GD_CALL 59
-#define R_SPARC_TLS_LDM_HI22 60
-#define R_SPARC_TLS_LDM_LO10 61
-#define R_SPARC_TLS_LDM_ADD 62
-#define R_SPARC_TLS_LDM_CALL 63
-#define R_SPARC_TLS_LDO_HIX22 64
-#define R_SPARC_TLS_LDO_LOX10 65
-#define R_SPARC_TLS_LDO_ADD 66
-#define R_SPARC_TLS_IE_HI22 67
-#define R_SPARC_TLS_IE_LO10 68
-#define R_SPARC_TLS_IE_LD 69
-#define R_SPARC_TLS_IE_LDX 70
-#define R_SPARC_TLS_IE_ADD 71
-#define R_SPARC_TLS_LE_HIX22 72
-#define R_SPARC_TLS_LE_LOX10 73
-#define R_SPARC_TLS_DTPMOD32 74
-#define R_SPARC_TLS_DTPMOD64 75
-#define R_SPARC_TLS_DTPOFF32 76
-#define R_SPARC_TLS_DTPOFF64 77
-#define R_SPARC_TLS_TPOFF32 78
-#define R_SPARC_TLS_TPOFF64 79
-/* Keep this the last entry. */
-#define R_SPARC_NUM 80
-
-/* For Sparc64, legal values for d_tag of Elf64_Dyn. */
-
-#define DT_SPARC_REGISTER 0x70000001
-#define DT_SPARC_NUM 2
-
-/* Bits present in AT_HWCAP on SPARC. */
-
-#define HWCAP_SPARC_FLUSH 1 /* The CPU supports flush insn. */
-#define HWCAP_SPARC_STBAR 2
-#define HWCAP_SPARC_SWAP 4
-#define HWCAP_SPARC_MULDIV 8
-#define HWCAP_SPARC_V9 16 /* The CPU is v9, so v8plus is ok. */
-#define HWCAP_SPARC_ULTRA3 32
-#define HWCAP_SPARC_BLKINIT 64 /* Sun4v with block-init/load-twin. */
-#define HWCAP_SPARC_N2 128
-
-/* MIPS R3000 specific definitions. */
-
-/* Legal values for e_flags field of Elf32_Ehdr. */
-
-#define EF_MIPS_NOREORDER 1 /* A .noreorder directive was used */
-#define EF_MIPS_PIC 2 /* Contains PIC code */
-#define EF_MIPS_CPIC 4 /* Uses PIC calling sequence */
-#define EF_MIPS_XGOT 8
-#define EF_MIPS_64BIT_WHIRL 16
-#define EF_MIPS_ABI2 32
-#define EF_MIPS_ABI_ON32 64
-#define EF_MIPS_ARCH 0xf0000000 /* MIPS architecture level */
-
-/* Legal values for MIPS architecture level. */
-
-#define EF_MIPS_ARCH_1 0x00000000 /* -mips1 code. */
-#define EF_MIPS_ARCH_2 0x10000000 /* -mips2 code. */
-#define EF_MIPS_ARCH_3 0x20000000 /* -mips3 code. */
-#define EF_MIPS_ARCH_4 0x30000000 /* -mips4 code. */
-#define EF_MIPS_ARCH_5 0x40000000 /* -mips5 code. */
-#define EF_MIPS_ARCH_32 0x60000000 /* MIPS32 code. */
-#define EF_MIPS_ARCH_64 0x70000000 /* MIPS64 code. */
-
-/* The following are non-official names and should not be used. */
-
-#define E_MIPS_ARCH_1 0x00000000 /* -mips1 code. */
-#define E_MIPS_ARCH_2 0x10000000 /* -mips2 code. */
-#define E_MIPS_ARCH_3 0x20000000 /* -mips3 code. */
-#define E_MIPS_ARCH_4 0x30000000 /* -mips4 code. */
-#define E_MIPS_ARCH_5 0x40000000 /* -mips5 code. */
-#define E_MIPS_ARCH_32 0x60000000 /* MIPS32 code. */
-#define E_MIPS_ARCH_64 0x70000000 /* MIPS64 code. */
-
-/* Special section indices. */
-
-#define SHN_MIPS_ACOMMON 0xff00 /* Allocated common symbols */
-#define SHN_MIPS_TEXT 0xff01 /* Allocated test symbols. */
-#define SHN_MIPS_DATA 0xff02 /* Allocated data symbols. */
-#define SHN_MIPS_SCOMMON 0xff03 /* Small common symbols */
-#define SHN_MIPS_SUNDEFINED 0xff04 /* Small undefined symbols */
-
-/* Legal values for sh_type field of Elf32_Shdr. */
-
-#define SHT_MIPS_LIBLIST 0x70000000 /* Shared objects used in link */
-#define SHT_MIPS_MSYM 0x70000001
-#define SHT_MIPS_CONFLICT 0x70000002 /* Conflicting symbols */
-#define SHT_MIPS_GPTAB 0x70000003 /* Global data area sizes */
-#define SHT_MIPS_UCODE 0x70000004 /* Reserved for SGI/MIPS compilers */
-#define SHT_MIPS_DEBUG 0x70000005 /* MIPS ECOFF debugging information*/
-#define SHT_MIPS_REGINFO 0x70000006 /* Register usage information */
-#define SHT_MIPS_PACKAGE 0x70000007
-#define SHT_MIPS_PACKSYM 0x70000008
-#define SHT_MIPS_RELD 0x70000009
-#define SHT_MIPS_IFACE 0x7000000b
-#define SHT_MIPS_CONTENT 0x7000000c
-#define SHT_MIPS_OPTIONS 0x7000000d /* Miscellaneous options. */
-#define SHT_MIPS_SHDR 0x70000010
-#define SHT_MIPS_FDESC 0x70000011
-#define SHT_MIPS_EXTSYM 0x70000012
-#define SHT_MIPS_DENSE 0x70000013
-#define SHT_MIPS_PDESC 0x70000014
-#define SHT_MIPS_LOCSYM 0x70000015
-#define SHT_MIPS_AUXSYM 0x70000016
-#define SHT_MIPS_OPTSYM 0x70000017
-#define SHT_MIPS_LOCSTR 0x70000018
-#define SHT_MIPS_LINE 0x70000019
-#define SHT_MIPS_RFDESC 0x7000001a
-#define SHT_MIPS_DELTASYM 0x7000001b
-#define SHT_MIPS_DELTAINST 0x7000001c
-#define SHT_MIPS_DELTACLASS 0x7000001d
-#define SHT_MIPS_DWARF 0x7000001e /* DWARF debugging information. */
-#define SHT_MIPS_DELTADECL 0x7000001f
-#define SHT_MIPS_SYMBOL_LIB 0x70000020
-#define SHT_MIPS_EVENTS 0x70000021 /* Event section. */
-#define SHT_MIPS_TRANSLATE 0x70000022
-#define SHT_MIPS_PIXIE 0x70000023
-#define SHT_MIPS_XLATE 0x70000024
-#define SHT_MIPS_XLATE_DEBUG 0x70000025
-#define SHT_MIPS_WHIRL 0x70000026
-#define SHT_MIPS_EH_REGION 0x70000027
-#define SHT_MIPS_XLATE_OLD 0x70000028
-#define SHT_MIPS_PDR_EXCEPTION 0x70000029
-
-/* Legal values for sh_flags field of Elf32_Shdr. */
-
-#define SHF_MIPS_GPREL 0x10000000 /* Must be part of global data area */
-#define SHF_MIPS_MERGE 0x20000000
-#define SHF_MIPS_ADDR 0x40000000
-#define SHF_MIPS_STRINGS 0x80000000
-#define SHF_MIPS_NOSTRIP 0x08000000
-#define SHF_MIPS_LOCAL 0x04000000
-#define SHF_MIPS_NAMES 0x02000000
-#define SHF_MIPS_NODUPE 0x01000000
-
-
-/* Symbol tables. */
-
-/* MIPS specific values for `st_other'. */
-#define STO_MIPS_DEFAULT 0x0
-#define STO_MIPS_INTERNAL 0x1
-#define STO_MIPS_HIDDEN 0x2
-#define STO_MIPS_PROTECTED 0x3
-#define STO_MIPS_PLT 0x8
-#define STO_MIPS_SC_ALIGN_UNUSED 0xff
-
-/* MIPS specific values for `st_info'. */
-#define STB_MIPS_SPLIT_COMMON 13
-
-/* Entries found in sections of type SHT_MIPS_GPTAB. */
-
-typedef union
-{
- struct
- {
- Elf32_Word gt_current_g_value; /* -G value used for compilation */
- Elf32_Word gt_unused; /* Not used */
- } gt_header; /* First entry in section */
- struct
- {
- Elf32_Word gt_g_value; /* If this value were used for -G */
- Elf32_Word gt_bytes; /* This many bytes would be used */
- } gt_entry; /* Subsequent entries in section */
-} Elf32_gptab;
-
-/* Entry found in sections of type SHT_MIPS_REGINFO. */
-
-typedef struct
-{
- Elf32_Word ri_gprmask; /* General registers used */
- Elf32_Word ri_cprmask[4]; /* Coprocessor registers used */
- Elf32_Sword ri_gp_value; /* $gp register value */
-} Elf32_RegInfo;
-
-/* Entries found in sections of type SHT_MIPS_OPTIONS. */
-
-typedef struct
-{
- unsigned char kind; /* Determines interpretation of the
- variable part of descriptor. */
- unsigned char size; /* Size of descriptor, including header. */
- Elf32_Section section; /* Section header index of section affected,
- 0 for global options. */
- Elf32_Word info; /* Kind-specific information. */
-} Elf_Options;
-
-/* Values for `kind' field in Elf_Options. */
-
-#define ODK_NULL 0 /* Undefined. */
-#define ODK_REGINFO 1 /* Register usage information. */
-#define ODK_EXCEPTIONS 2 /* Exception processing options. */
-#define ODK_PAD 3 /* Section padding options. */
-#define ODK_HWPATCH 4 /* Hardware workarounds performed */
-#define ODK_FILL 5 /* record the fill value used by the linker. */
-#define ODK_TAGS 6 /* reserve space for desktop tools to write. */
-#define ODK_HWAND 7 /* HW workarounds. 'AND' bits when merging. */
-#define ODK_HWOR 8 /* HW workarounds. 'OR' bits when merging. */
-
-/* Values for `info' in Elf_Options for ODK_EXCEPTIONS entries. */
-
-#define OEX_FPU_MIN 0x1f /* FPE's which MUST be enabled. */
-#define OEX_FPU_MAX 0x1f00 /* FPE's which MAY be enabled. */
-#define OEX_PAGE0 0x10000 /* page zero must be mapped. */
-#define OEX_SMM 0x20000 /* Force sequential memory mode? */
-#define OEX_FPDBUG 0x40000 /* Force floating point debug mode? */
-#define OEX_PRECISEFP OEX_FPDBUG
-#define OEX_DISMISS 0x80000 /* Dismiss invalid address faults? */
-
-#define OEX_FPU_INVAL 0x10
-#define OEX_FPU_DIV0 0x08
-#define OEX_FPU_OFLO 0x04
-#define OEX_FPU_UFLO 0x02
-#define OEX_FPU_INEX 0x01
-
-/* Masks for `info' in Elf_Options for an ODK_HWPATCH entry. */
-
-#define OHW_R4KEOP 0x1 /* R4000 end-of-page patch. */
-#define OHW_R8KPFETCH 0x2 /* may need R8000 prefetch patch. */
-#define OHW_R5KEOP 0x4 /* R5000 end-of-page patch. */
-#define OHW_R5KCVTL 0x8 /* R5000 cvt.[ds].l bug. clean=1. */
-
-#define OPAD_PREFIX 0x1
-#define OPAD_POSTFIX 0x2
-#define OPAD_SYMBOL 0x4
-
-/* Entry found in `.options' section. */
-
-typedef struct
-{
- Elf32_Word hwp_flags1; /* Extra flags. */
- Elf32_Word hwp_flags2; /* Extra flags. */
-} Elf_Options_Hw;
-
-/* Masks for `info' in ElfOptions for ODK_HWAND and ODK_HWOR entries. */
-
-#define OHWA0_R4KEOP_CHECKED 0x00000001
-#define OHWA1_R4KEOP_CLEAN 0x00000002
-
-/* MIPS relocs. */
-
-#define R_MIPS_NONE 0 /* No reloc */
-#define R_MIPS_16 1 /* Direct 16 bit */
-#define R_MIPS_32 2 /* Direct 32 bit */
-#define R_MIPS_REL32 3 /* PC relative 32 bit */
-#define R_MIPS_26 4 /* Direct 26 bit shifted */
-#define R_MIPS_HI16 5 /* High 16 bit */
-#define R_MIPS_LO16 6 /* Low 16 bit */
-#define R_MIPS_GPREL16 7 /* GP relative 16 bit */
-#define R_MIPS_LITERAL 8 /* 16 bit literal entry */
-#define R_MIPS_GOT16 9 /* 16 bit GOT entry */
-#define R_MIPS_PC16 10 /* PC relative 16 bit */
-#define R_MIPS_CALL16 11 /* 16 bit GOT entry for function */
-#define R_MIPS_GPREL32 12 /* GP relative 32 bit */
-
-#define R_MIPS_SHIFT5 16
-#define R_MIPS_SHIFT6 17
-#define R_MIPS_64 18
-#define R_MIPS_GOT_DISP 19
-#define R_MIPS_GOT_PAGE 20
-#define R_MIPS_GOT_OFST 21
-#define R_MIPS_GOT_HI16 22
-#define R_MIPS_GOT_LO16 23
-#define R_MIPS_SUB 24
-#define R_MIPS_INSERT_A 25
-#define R_MIPS_INSERT_B 26
-#define R_MIPS_DELETE 27
-#define R_MIPS_HIGHER 28
-#define R_MIPS_HIGHEST 29
-#define R_MIPS_CALL_HI16 30
-#define R_MIPS_CALL_LO16 31
-#define R_MIPS_SCN_DISP 32
-#define R_MIPS_REL16 33
-#define R_MIPS_ADD_IMMEDIATE 34
-#define R_MIPS_PJUMP 35
-#define R_MIPS_RELGOT 36
-#define R_MIPS_JALR 37
-#define R_MIPS_TLS_DTPMOD32 38 /* Module number 32 bit */
-#define R_MIPS_TLS_DTPREL32 39 /* Module-relative offset 32 bit */
-#define R_MIPS_TLS_DTPMOD64 40 /* Module number 64 bit */
-#define R_MIPS_TLS_DTPREL64 41 /* Module-relative offset 64 bit */
-#define R_MIPS_TLS_GD 42 /* 16 bit GOT offset for GD */
-#define R_MIPS_TLS_LDM 43 /* 16 bit GOT offset for LDM */
-#define R_MIPS_TLS_DTPREL_HI16 44 /* Module-relative offset, high 16 bits */
-#define R_MIPS_TLS_DTPREL_LO16 45 /* Module-relative offset, low 16 bits */
-#define R_MIPS_TLS_GOTTPREL 46 /* 16 bit GOT offset for IE */
-#define R_MIPS_TLS_TPREL32 47 /* TP-relative offset, 32 bit */
-#define R_MIPS_TLS_TPREL64 48 /* TP-relative offset, 64 bit */
-#define R_MIPS_TLS_TPREL_HI16 49 /* TP-relative offset, high 16 bits */
-#define R_MIPS_TLS_TPREL_LO16 50 /* TP-relative offset, low 16 bits */
-#define R_MIPS_GLOB_DAT 51
-#define R_MIPS_COPY 126
-#define R_MIPS_JUMP_SLOT 127
-/* Keep this the last entry. */
-#define R_MIPS_NUM 128
-
-/* Legal values for p_type field of Elf32_Phdr. */
-
-#define PT_MIPS_REGINFO 0x70000000 /* Register usage information */
-#define PT_MIPS_RTPROC 0x70000001 /* Runtime procedure table. */
-#define PT_MIPS_OPTIONS 0x70000002
-
-/* Special program header types. */
-
-#define PF_MIPS_LOCAL 0x10000000
-
-/* Legal values for d_tag field of Elf32_Dyn. */
-
-#define DT_MIPS_RLD_VERSION 0x70000001 /* Runtime linker interface version */
-#define DT_MIPS_TIME_STAMP 0x70000002 /* Timestamp */
-#define DT_MIPS_ICHECKSUM 0x70000003 /* Checksum */
-#define DT_MIPS_IVERSION 0x70000004 /* Version string (string tbl index) */
-#define DT_MIPS_FLAGS 0x70000005 /* Flags */
-#define DT_MIPS_BASE_ADDRESS 0x70000006 /* Base address */
-#define DT_MIPS_MSYM 0x70000007
-#define DT_MIPS_CONFLICT 0x70000008 /* Address of CONFLICT section */
-#define DT_MIPS_LIBLIST 0x70000009 /* Address of LIBLIST section */
-#define DT_MIPS_LOCAL_GOTNO 0x7000000a /* Number of local GOT entries */
-#define DT_MIPS_CONFLICTNO 0x7000000b /* Number of CONFLICT entries */
-#define DT_MIPS_LIBLISTNO 0x70000010 /* Number of LIBLIST entries */
-#define DT_MIPS_SYMTABNO 0x70000011 /* Number of DYNSYM entries */
-#define DT_MIPS_UNREFEXTNO 0x70000012 /* First external DYNSYM */
-#define DT_MIPS_GOTSYM 0x70000013 /* First GOT entry in DYNSYM */
-#define DT_MIPS_HIPAGENO 0x70000014 /* Number of GOT page table entries */
-#define DT_MIPS_RLD_MAP 0x70000016 /* Address of run time loader map. */
-#define DT_MIPS_DELTA_CLASS 0x70000017 /* Delta C++ class definition. */
-#define DT_MIPS_DELTA_CLASS_NO 0x70000018 /* Number of entries in
- DT_MIPS_DELTA_CLASS. */
-#define DT_MIPS_DELTA_INSTANCE 0x70000019 /* Delta C++ class instances. */
-#define DT_MIPS_DELTA_INSTANCE_NO 0x7000001a /* Number of entries in
- DT_MIPS_DELTA_INSTANCE. */
-#define DT_MIPS_DELTA_RELOC 0x7000001b /* Delta relocations. */
-#define DT_MIPS_DELTA_RELOC_NO 0x7000001c /* Number of entries in
- DT_MIPS_DELTA_RELOC. */
-#define DT_MIPS_DELTA_SYM 0x7000001d /* Delta symbols that Delta
- relocations refer to. */
-#define DT_MIPS_DELTA_SYM_NO 0x7000001e /* Number of entries in
- DT_MIPS_DELTA_SYM. */
-#define DT_MIPS_DELTA_CLASSSYM 0x70000020 /* Delta symbols that hold the
- class declaration. */
-#define DT_MIPS_DELTA_CLASSSYM_NO 0x70000021 /* Number of entries in
- DT_MIPS_DELTA_CLASSSYM. */
-#define DT_MIPS_CXX_FLAGS 0x70000022 /* Flags indicating for C++ flavor. */
-#define DT_MIPS_PIXIE_INIT 0x70000023
-#define DT_MIPS_SYMBOL_LIB 0x70000024
-#define DT_MIPS_LOCALPAGE_GOTIDX 0x70000025
-#define DT_MIPS_LOCAL_GOTIDX 0x70000026
-#define DT_MIPS_HIDDEN_GOTIDX 0x70000027
-#define DT_MIPS_PROTECTED_GOTIDX 0x70000028
-#define DT_MIPS_OPTIONS 0x70000029 /* Address of .options. */
-#define DT_MIPS_INTERFACE 0x7000002a /* Address of .interface. */
-#define DT_MIPS_DYNSTR_ALIGN 0x7000002b
-#define DT_MIPS_INTERFACE_SIZE 0x7000002c /* Size of the .interface section. */
-#define DT_MIPS_RLD_TEXT_RESOLVE_ADDR 0x7000002d /* Address of rld_text_rsolve
- function stored in GOT. */
-#define DT_MIPS_PERF_SUFFIX 0x7000002e /* Default suffix of dso to be added
- by rld on dlopen() calls. */
-#define DT_MIPS_COMPACT_SIZE 0x7000002f /* (O32)Size of compact rel section. */
-#define DT_MIPS_GP_VALUE 0x70000030 /* GP value for aux GOTs. */
-#define DT_MIPS_AUX_DYNAMIC 0x70000031 /* Address of aux .dynamic. */
-/* The address of .got.plt in an executable using the new non-PIC ABI. */
-#define DT_MIPS_PLTGOT 0x70000032
-/* The base of the PLT in an executable using the new non-PIC ABI if that
- PLT is writable. For a non-writable PLT, this is omitted or has a zero
- value. */
-#define DT_MIPS_RWPLT 0x70000034
-#define DT_MIPS_NUM 0x35
-
-/* Legal values for DT_MIPS_FLAGS Elf32_Dyn entry. */
-
-#define RHF_NONE 0 /* No flags */
-#define RHF_QUICKSTART (1 << 0) /* Use quickstart */
-#define RHF_NOTPOT (1 << 1) /* Hash size not power of 2 */
-#define RHF_NO_LIBRARY_REPLACEMENT (1 << 2) /* Ignore LD_LIBRARY_PATH */
-#define RHF_NO_MOVE (1 << 3)
-#define RHF_SGI_ONLY (1 << 4)
-#define RHF_GUARANTEE_INIT (1 << 5)
-#define RHF_DELTA_C_PLUS_PLUS (1 << 6)
-#define RHF_GUARANTEE_START_INIT (1 << 7)
-#define RHF_PIXIE (1 << 8)
-#define RHF_DEFAULT_DELAY_LOAD (1 << 9)
-#define RHF_REQUICKSTART (1 << 10)
-#define RHF_REQUICKSTARTED (1 << 11)
-#define RHF_CORD (1 << 12)
-#define RHF_NO_UNRES_UNDEF (1 << 13)
-#define RHF_RLD_ORDER_SAFE (1 << 14)
-
-/* Entries found in sections of type SHT_MIPS_LIBLIST. */
-
-typedef struct
-{
- Elf32_Word l_name; /* Name (string table index) */
- Elf32_Word l_time_stamp; /* Timestamp */
- Elf32_Word l_checksum; /* Checksum */
- Elf32_Word l_version; /* Interface version */
- Elf32_Word l_flags; /* Flags */
-} Elf32_Lib;
-
-typedef struct
-{
- Elf64_Word l_name; /* Name (string table index) */
- Elf64_Word l_time_stamp; /* Timestamp */
- Elf64_Word l_checksum; /* Checksum */
- Elf64_Word l_version; /* Interface version */
- Elf64_Word l_flags; /* Flags */
-} Elf64_Lib;
-
-
-/* Legal values for l_flags. */
-
-#define LL_NONE 0
-#define LL_EXACT_MATCH (1 << 0) /* Require exact match */
-#define LL_IGNORE_INT_VER (1 << 1) /* Ignore interface version */
-#define LL_REQUIRE_MINOR (1 << 2)
-#define LL_EXPORTS (1 << 3)
-#define LL_DELAY_LOAD (1 << 4)
-#define LL_DELTA (1 << 5)
-
-/* Entries found in sections of type SHT_MIPS_CONFLICT. */
-
-typedef Elf32_Addr Elf32_Conflict;
-
-
-/* HPPA specific definitions. */
-
-/* Legal values for e_flags field of Elf32_Ehdr. */
-
-#define EF_PARISC_TRAPNIL 0x00010000 /* Trap nil pointer dereference. */
-#define EF_PARISC_EXT 0x00020000 /* Program uses arch. extensions. */
-#define EF_PARISC_LSB 0x00040000 /* Program expects little endian. */
-#define EF_PARISC_WIDE 0x00080000 /* Program expects wide mode. */
-#define EF_PARISC_NO_KABP 0x00100000 /* No kernel assisted branch
- prediction. */
-#define EF_PARISC_LAZYSWAP 0x00400000 /* Allow lazy swapping. */
-#define EF_PARISC_ARCH 0x0000ffff /* Architecture version. */
-
-/* Defined values for `e_flags & EF_PARISC_ARCH' are: */
-
-#define EFA_PARISC_1_0 0x020b /* PA-RISC 1.0 big-endian. */
-#define EFA_PARISC_1_1 0x0210 /* PA-RISC 1.1 big-endian. */
-#define EFA_PARISC_2_0 0x0214 /* PA-RISC 2.0 big-endian. */
-
-/* Additional section indeces. */
-
-#define SHN_PARISC_ANSI_COMMON 0xff00 /* Section for tenatively declared
- symbols in ANSI C. */
-#define SHN_PARISC_HUGE_COMMON 0xff01 /* Common blocks in huge model. */
-
-/* Legal values for sh_type field of Elf32_Shdr. */
-
-#define SHT_PARISC_EXT 0x70000000 /* Contains product specific ext. */
-#define SHT_PARISC_UNWIND 0x70000001 /* Unwind information. */
-#define SHT_PARISC_DOC 0x70000002 /* Debug info for optimized code. */
-
-/* Legal values for sh_flags field of Elf32_Shdr. */
-
-#define SHF_PARISC_SHORT 0x20000000 /* Section with short addressing. */
-#define SHF_PARISC_HUGE 0x40000000 /* Section far from gp. */
-#define SHF_PARISC_SBP 0x80000000 /* Static branch prediction code. */
-
-/* Legal values for ST_TYPE subfield of st_info (symbol type). */
-
-#define STT_PARISC_MILLICODE 13 /* Millicode function entry point. */
-
-#define STT_HP_OPAQUE (STT_LOOS + 0x1)
-#define STT_HP_STUB (STT_LOOS + 0x2)
-
-/* HPPA relocs. */
-
-#define R_PARISC_NONE 0 /* No reloc. */
-#define R_PARISC_DIR32 1 /* Direct 32-bit reference. */
-#define R_PARISC_DIR21L 2 /* Left 21 bits of eff. address. */
-#define R_PARISC_DIR17R 3 /* Right 17 bits of eff. address. */
-#define R_PARISC_DIR17F 4 /* 17 bits of eff. address. */
-#define R_PARISC_DIR14R 6 /* Right 14 bits of eff. address. */
-#define R_PARISC_PCREL32 9 /* 32-bit rel. address. */
-#define R_PARISC_PCREL21L 10 /* Left 21 bits of rel. address. */
-#define R_PARISC_PCREL17R 11 /* Right 17 bits of rel. address. */
-#define R_PARISC_PCREL17F 12 /* 17 bits of rel. address. */
-#define R_PARISC_PCREL14R 14 /* Right 14 bits of rel. address. */
-#define R_PARISC_DPREL21L 18 /* Left 21 bits of rel. address. */
-#define R_PARISC_DPREL14R 22 /* Right 14 bits of rel. address. */
-#define R_PARISC_GPREL21L 26 /* GP-relative, left 21 bits. */
-#define R_PARISC_GPREL14R 30 /* GP-relative, right 14 bits. */
-#define R_PARISC_LTOFF21L 34 /* LT-relative, left 21 bits. */
-#define R_PARISC_LTOFF14R 38 /* LT-relative, right 14 bits. */
-#define R_PARISC_SECREL32 41 /* 32 bits section rel. address. */
-#define R_PARISC_SEGBASE 48 /* No relocation, set segment base. */
-#define R_PARISC_SEGREL32 49 /* 32 bits segment rel. address. */
-#define R_PARISC_PLTOFF21L 50 /* PLT rel. address, left 21 bits. */
-#define R_PARISC_PLTOFF14R 54 /* PLT rel. address, right 14 bits. */
-#define R_PARISC_LTOFF_FPTR32 57 /* 32 bits LT-rel. function pointer. */
-#define R_PARISC_LTOFF_FPTR21L 58 /* LT-rel. fct ptr, left 21 bits. */
-#define R_PARISC_LTOFF_FPTR14R 62 /* LT-rel. fct ptr, right 14 bits. */
-#define R_PARISC_FPTR64 64 /* 64 bits function address. */
-#define R_PARISC_PLABEL32 65 /* 32 bits function address. */
-#define R_PARISC_PLABEL21L 66 /* Left 21 bits of fdesc address. */
-#define R_PARISC_PLABEL14R 70 /* Right 14 bits of fdesc address. */
-#define R_PARISC_PCREL64 72 /* 64 bits PC-rel. address. */
-#define R_PARISC_PCREL22F 74 /* 22 bits PC-rel. address. */
-#define R_PARISC_PCREL14WR 75 /* PC-rel. address, right 14 bits. */
-#define R_PARISC_PCREL14DR 76 /* PC rel. address, right 14 bits. */
-#define R_PARISC_PCREL16F 77 /* 16 bits PC-rel. address. */
-#define R_PARISC_PCREL16WF 78 /* 16 bits PC-rel. address. */
-#define R_PARISC_PCREL16DF 79 /* 16 bits PC-rel. address. */
-#define R_PARISC_DIR64 80 /* 64 bits of eff. address. */
-#define R_PARISC_DIR14WR 83 /* 14 bits of eff. address. */
-#define R_PARISC_DIR14DR 84 /* 14 bits of eff. address. */
-#define R_PARISC_DIR16F 85 /* 16 bits of eff. address. */
-#define R_PARISC_DIR16WF 86 /* 16 bits of eff. address. */
-#define R_PARISC_DIR16DF 87 /* 16 bits of eff. address. */
-#define R_PARISC_GPREL64 88 /* 64 bits of GP-rel. address. */
-#define R_PARISC_GPREL14WR 91 /* GP-rel. address, right 14 bits. */
-#define R_PARISC_GPREL14DR 92 /* GP-rel. address, right 14 bits. */
-#define R_PARISC_GPREL16F 93 /* 16 bits GP-rel. address. */
-#define R_PARISC_GPREL16WF 94 /* 16 bits GP-rel. address. */
-#define R_PARISC_GPREL16DF 95 /* 16 bits GP-rel. address. */
-#define R_PARISC_LTOFF64 96 /* 64 bits LT-rel. address. */
-#define R_PARISC_LTOFF14WR 99 /* LT-rel. address, right 14 bits. */
-#define R_PARISC_LTOFF14DR 100 /* LT-rel. address, right 14 bits. */
-#define R_PARISC_LTOFF16F 101 /* 16 bits LT-rel. address. */
-#define R_PARISC_LTOFF16WF 102 /* 16 bits LT-rel. address. */
-#define R_PARISC_LTOFF16DF 103 /* 16 bits LT-rel. address. */
-#define R_PARISC_SECREL64 104 /* 64 bits section rel. address. */
-#define R_PARISC_SEGREL64 112 /* 64 bits segment rel. address. */
-#define R_PARISC_PLTOFF14WR 115 /* PLT-rel. address, right 14 bits. */
-#define R_PARISC_PLTOFF14DR 116 /* PLT-rel. address, right 14 bits. */
-#define R_PARISC_PLTOFF16F 117 /* 16 bits LT-rel. address. */
-#define R_PARISC_PLTOFF16WF 118 /* 16 bits PLT-rel. address. */
-#define R_PARISC_PLTOFF16DF 119 /* 16 bits PLT-rel. address. */
-#define R_PARISC_LTOFF_FPTR64 120 /* 64 bits LT-rel. function ptr. */
-#define R_PARISC_LTOFF_FPTR14WR 123 /* LT-rel. fct. ptr., right 14 bits. */
-#define R_PARISC_LTOFF_FPTR14DR 124 /* LT-rel. fct. ptr., right 14 bits. */
-#define R_PARISC_LTOFF_FPTR16F 125 /* 16 bits LT-rel. function ptr. */
-#define R_PARISC_LTOFF_FPTR16WF 126 /* 16 bits LT-rel. function ptr. */
-#define R_PARISC_LTOFF_FPTR16DF 127 /* 16 bits LT-rel. function ptr. */
-#define R_PARISC_LORESERVE 128
-#define R_PARISC_COPY 128 /* Copy relocation. */
-#define R_PARISC_IPLT 129 /* Dynamic reloc, imported PLT */
-#define R_PARISC_EPLT 130 /* Dynamic reloc, exported PLT */
-#define R_PARISC_TPREL32 153 /* 32 bits TP-rel. address. */
-#define R_PARISC_TPREL21L 154 /* TP-rel. address, left 21 bits. */
-#define R_PARISC_TPREL14R 158 /* TP-rel. address, right 14 bits. */
-#define R_PARISC_LTOFF_TP21L 162 /* LT-TP-rel. address, left 21 bits. */
-#define R_PARISC_LTOFF_TP14R 166 /* LT-TP-rel. address, right 14 bits.*/
-#define R_PARISC_LTOFF_TP14F 167 /* 14 bits LT-TP-rel. address. */
-#define R_PARISC_TPREL64 216 /* 64 bits TP-rel. address. */
-#define R_PARISC_TPREL14WR 219 /* TP-rel. address, right 14 bits. */
-#define R_PARISC_TPREL14DR 220 /* TP-rel. address, right 14 bits. */
-#define R_PARISC_TPREL16F 221 /* 16 bits TP-rel. address. */
-#define R_PARISC_TPREL16WF 222 /* 16 bits TP-rel. address. */
-#define R_PARISC_TPREL16DF 223 /* 16 bits TP-rel. address. */
-#define R_PARISC_LTOFF_TP64 224 /* 64 bits LT-TP-rel. address. */
-#define R_PARISC_LTOFF_TP14WR 227 /* LT-TP-rel. address, right 14 bits.*/
-#define R_PARISC_LTOFF_TP14DR 228 /* LT-TP-rel. address, right 14 bits.*/
-#define R_PARISC_LTOFF_TP16F 229 /* 16 bits LT-TP-rel. address. */
-#define R_PARISC_LTOFF_TP16WF 230 /* 16 bits LT-TP-rel. address. */
-#define R_PARISC_LTOFF_TP16DF 231 /* 16 bits LT-TP-rel. address. */
-#define R_PARISC_GNU_VTENTRY 232
-#define R_PARISC_GNU_VTINHERIT 233
-#define R_PARISC_TLS_GD21L 234 /* GD 21-bit left. */
-#define R_PARISC_TLS_GD14R 235 /* GD 14-bit right. */
-#define R_PARISC_TLS_GDCALL 236 /* GD call to __t_g_a. */
-#define R_PARISC_TLS_LDM21L 237 /* LD module 21-bit left. */
-#define R_PARISC_TLS_LDM14R 238 /* LD module 14-bit right. */
-#define R_PARISC_TLS_LDMCALL 239 /* LD module call to __t_g_a. */
-#define R_PARISC_TLS_LDO21L 240 /* LD offset 21-bit left. */
-#define R_PARISC_TLS_LDO14R 241 /* LD offset 14-bit right. */
-#define R_PARISC_TLS_DTPMOD32 242 /* DTP module 32-bit. */
-#define R_PARISC_TLS_DTPMOD64 243 /* DTP module 64-bit. */
-#define R_PARISC_TLS_DTPOFF32 244 /* DTP offset 32-bit. */
-#define R_PARISC_TLS_DTPOFF64 245 /* DTP offset 32-bit. */
-#define R_PARISC_TLS_LE21L R_PARISC_TPREL21L
-#define R_PARISC_TLS_LE14R R_PARISC_TPREL14R
-#define R_PARISC_TLS_IE21L R_PARISC_LTOFF_TP21L
-#define R_PARISC_TLS_IE14R R_PARISC_LTOFF_TP14R
-#define R_PARISC_TLS_TPREL32 R_PARISC_TPREL32
-#define R_PARISC_TLS_TPREL64 R_PARISC_TPREL64
-#define R_PARISC_HIRESERVE 255
-
-/* Legal values for p_type field of Elf32_Phdr/Elf64_Phdr. */
-
-#define PT_HP_TLS (PT_LOOS + 0x0)
-#define PT_HP_CORE_NONE (PT_LOOS + 0x1)
-#define PT_HP_CORE_VERSION (PT_LOOS + 0x2)
-#define PT_HP_CORE_KERNEL (PT_LOOS + 0x3)
-#define PT_HP_CORE_COMM (PT_LOOS + 0x4)
-#define PT_HP_CORE_PROC (PT_LOOS + 0x5)
-#define PT_HP_CORE_LOADABLE (PT_LOOS + 0x6)
-#define PT_HP_CORE_STACK (PT_LOOS + 0x7)
-#define PT_HP_CORE_SHM (PT_LOOS + 0x8)
-#define PT_HP_CORE_MMF (PT_LOOS + 0x9)
-#define PT_HP_PARALLEL (PT_LOOS + 0x10)
-#define PT_HP_FASTBIND (PT_LOOS + 0x11)
-#define PT_HP_OPT_ANNOT (PT_LOOS + 0x12)
-#define PT_HP_HSL_ANNOT (PT_LOOS + 0x13)
-#define PT_HP_STACK (PT_LOOS + 0x14)
-
-#define PT_PARISC_ARCHEXT 0x70000000
-#define PT_PARISC_UNWIND 0x70000001
-
-/* Legal values for p_flags field of Elf32_Phdr/Elf64_Phdr. */
-
-#define PF_PARISC_SBP 0x08000000
-
-#define PF_HP_PAGE_SIZE 0x00100000
-#define PF_HP_FAR_SHARED 0x00200000
-#define PF_HP_NEAR_SHARED 0x00400000
-#define PF_HP_CODE 0x01000000
-#define PF_HP_MODIFY 0x02000000
-#define PF_HP_LAZYSWAP 0x04000000
-#define PF_HP_SBP 0x08000000
-
-
-/* Alpha specific definitions. */
-
-/* Legal values for e_flags field of Elf64_Ehdr. */
-
-#define EF_ALPHA_32BIT 1 /* All addresses must be < 2GB. */
-#define EF_ALPHA_CANRELAX 2 /* Relocations for relaxing exist. */
-
-/* Legal values for sh_type field of Elf64_Shdr. */
-
-/* These two are primerily concerned with ECOFF debugging info. */
-#define SHT_ALPHA_DEBUG 0x70000001
-#define SHT_ALPHA_REGINFO 0x70000002
-
-/* Legal values for sh_flags field of Elf64_Shdr. */
-
-#define SHF_ALPHA_GPREL 0x10000000
-
-/* Legal values for st_other field of Elf64_Sym. */
-#define STO_ALPHA_NOPV 0x80 /* No PV required. */
-#define STO_ALPHA_STD_GPLOAD 0x88 /* PV only used for initial ldgp. */
-
-/* Alpha relocs. */
-
-#define R_ALPHA_NONE 0 /* No reloc */
-#define R_ALPHA_REFLONG 1 /* Direct 32 bit */
-#define R_ALPHA_REFQUAD 2 /* Direct 64 bit */
-#define R_ALPHA_GPREL32 3 /* GP relative 32 bit */
-#define R_ALPHA_LITERAL 4 /* GP relative 16 bit w/optimization */
-#define R_ALPHA_LITUSE 5 /* Optimization hint for LITERAL */
-#define R_ALPHA_GPDISP 6 /* Add displacement to GP */
-#define R_ALPHA_BRADDR 7 /* PC+4 relative 23 bit shifted */
-#define R_ALPHA_HINT 8 /* PC+4 relative 16 bit shifted */
-#define R_ALPHA_SREL16 9 /* PC relative 16 bit */
-#define R_ALPHA_SREL32 10 /* PC relative 32 bit */
-#define R_ALPHA_SREL64 11 /* PC relative 64 bit */
-#define R_ALPHA_GPRELHIGH 17 /* GP relative 32 bit, high 16 bits */
-#define R_ALPHA_GPRELLOW 18 /* GP relative 32 bit, low 16 bits */
-#define R_ALPHA_GPREL16 19 /* GP relative 16 bit */
-#define R_ALPHA_COPY 24 /* Copy symbol at runtime */
-#define R_ALPHA_GLOB_DAT 25 /* Create GOT entry */
-#define R_ALPHA_JMP_SLOT 26 /* Create PLT entry */
-#define R_ALPHA_RELATIVE 27 /* Adjust by program base */
-#define R_ALPHA_TLS_GD_HI 28
-#define R_ALPHA_TLSGD 29
-#define R_ALPHA_TLS_LDM 30
-#define R_ALPHA_DTPMOD64 31
-#define R_ALPHA_GOTDTPREL 32
-#define R_ALPHA_DTPREL64 33
-#define R_ALPHA_DTPRELHI 34
-#define R_ALPHA_DTPRELLO 35
-#define R_ALPHA_DTPREL16 36
-#define R_ALPHA_GOTTPREL 37
-#define R_ALPHA_TPREL64 38
-#define R_ALPHA_TPRELHI 39
-#define R_ALPHA_TPRELLO 40
-#define R_ALPHA_TPREL16 41
-/* Keep this the last entry. */
-#define R_ALPHA_NUM 46
-
-/* Magic values of the LITUSE relocation addend. */
-#define LITUSE_ALPHA_ADDR 0
-#define LITUSE_ALPHA_BASE 1
-#define LITUSE_ALPHA_BYTOFF 2
-#define LITUSE_ALPHA_JSR 3
-#define LITUSE_ALPHA_TLS_GD 4
-#define LITUSE_ALPHA_TLS_LDM 5
-
-/* Legal values for d_tag of Elf64_Dyn. */
-#define DT_ALPHA_PLTRO (DT_LOPROC + 0)
-#define DT_ALPHA_NUM 1
-
-/* PowerPC specific declarations */
-
-/* Values for Elf32/64_Ehdr.e_flags. */
-#define EF_PPC_EMB 0x80000000 /* PowerPC embedded flag */
-
-/* Cygnus local bits below */
-#define EF_PPC_RELOCATABLE 0x00010000 /* PowerPC -mrelocatable flag*/
-#define EF_PPC_RELOCATABLE_LIB 0x00008000 /* PowerPC -mrelocatable-lib
- flag */
-
-/* PowerPC relocations defined by the ABIs */
-#define R_PPC_NONE 0
-#define R_PPC_ADDR32 1 /* 32bit absolute address */
-#define R_PPC_ADDR24 2 /* 26bit address, 2 bits ignored. */
-#define R_PPC_ADDR16 3 /* 16bit absolute address */
-#define R_PPC_ADDR16_LO 4 /* lower 16bit of absolute address */
-#define R_PPC_ADDR16_HI 5 /* high 16bit of absolute address */
-#define R_PPC_ADDR16_HA 6 /* adjusted high 16bit */
-#define R_PPC_ADDR14 7 /* 16bit address, 2 bits ignored */
-#define R_PPC_ADDR14_BRTAKEN 8
-#define R_PPC_ADDR14_BRNTAKEN 9
-#define R_PPC_REL24 10 /* PC relative 26 bit */
-#define R_PPC_REL14 11 /* PC relative 16 bit */
-#define R_PPC_REL14_BRTAKEN 12
-#define R_PPC_REL14_BRNTAKEN 13
-#define R_PPC_GOT16 14
-#define R_PPC_GOT16_LO 15
-#define R_PPC_GOT16_HI 16
-#define R_PPC_GOT16_HA 17
-#define R_PPC_PLTREL24 18
-#define R_PPC_COPY 19
-#define R_PPC_GLOB_DAT 20
-#define R_PPC_JMP_SLOT 21
-#define R_PPC_RELATIVE 22
-#define R_PPC_LOCAL24PC 23
-#define R_PPC_UADDR32 24
-#define R_PPC_UADDR16 25
-#define R_PPC_REL32 26
-#define R_PPC_PLT32 27
-#define R_PPC_PLTREL32 28
-#define R_PPC_PLT16_LO 29
-#define R_PPC_PLT16_HI 30
-#define R_PPC_PLT16_HA 31
-#define R_PPC_SDAREL16 32
-#define R_PPC_SECTOFF 33
-#define R_PPC_SECTOFF_LO 34
-#define R_PPC_SECTOFF_HI 35
-#define R_PPC_SECTOFF_HA 36
-
-/* PowerPC relocations defined for the TLS access ABI. */
-#define R_PPC_TLS 67 /* none (sym+add)@tls */
-#define R_PPC_DTPMOD32 68 /* word32 (sym+add)@dtpmod */
-#define R_PPC_TPREL16 69 /* half16* (sym+add)@tprel */
-#define R_PPC_TPREL16_LO 70 /* half16 (sym+add)@tprel@l */
-#define R_PPC_TPREL16_HI 71 /* half16 (sym+add)@tprel@h */
-#define R_PPC_TPREL16_HA 72 /* half16 (sym+add)@tprel@ha */
-#define R_PPC_TPREL32 73 /* word32 (sym+add)@tprel */
-#define R_PPC_DTPREL16 74 /* half16* (sym+add)@dtprel */
-#define R_PPC_DTPREL16_LO 75 /* half16 (sym+add)@dtprel@l */
-#define R_PPC_DTPREL16_HI 76 /* half16 (sym+add)@dtprel@h */
-#define R_PPC_DTPREL16_HA 77 /* half16 (sym+add)@dtprel@ha */
-#define R_PPC_DTPREL32 78 /* word32 (sym+add)@dtprel */
-#define R_PPC_GOT_TLSGD16 79 /* half16* (sym+add)@got@tlsgd */
-#define R_PPC_GOT_TLSGD16_LO 80 /* half16 (sym+add)@got@tlsgd@l */
-#define R_PPC_GOT_TLSGD16_HI 81 /* half16 (sym+add)@got@tlsgd@h */
-#define R_PPC_GOT_TLSGD16_HA 82 /* half16 (sym+add)@got@tlsgd@ha */
-#define R_PPC_GOT_TLSLD16 83 /* half16* (sym+add)@got@tlsld */
-#define R_PPC_GOT_TLSLD16_LO 84 /* half16 (sym+add)@got@tlsld@l */
-#define R_PPC_GOT_TLSLD16_HI 85 /* half16 (sym+add)@got@tlsld@h */
-#define R_PPC_GOT_TLSLD16_HA 86 /* half16 (sym+add)@got@tlsld@ha */
-#define R_PPC_GOT_TPREL16 87 /* half16* (sym+add)@got@tprel */
-#define R_PPC_GOT_TPREL16_LO 88 /* half16 (sym+add)@got@tprel@l */
-#define R_PPC_GOT_TPREL16_HI 89 /* half16 (sym+add)@got@tprel@h */
-#define R_PPC_GOT_TPREL16_HA 90 /* half16 (sym+add)@got@tprel@ha */
-#define R_PPC_GOT_DTPREL16 91 /* half16* (sym+add)@got@dtprel */
-#define R_PPC_GOT_DTPREL16_LO 92 /* half16* (sym+add)@got@dtprel@l */
-#define R_PPC_GOT_DTPREL16_HI 93 /* half16* (sym+add)@got@dtprel@h */
-#define R_PPC_GOT_DTPREL16_HA 94 /* half16* (sym+add)@got@dtprel@ha */
-
-/* Keep this the last entry. */
-#define R_PPC_NUM 95
-
-/* The remaining relocs are from the Embedded ELF ABI, and are not
- in the SVR4 ELF ABI. */
-#define R_PPC_EMB_NADDR32 101
-#define R_PPC_EMB_NADDR16 102
-#define R_PPC_EMB_NADDR16_LO 103
-#define R_PPC_EMB_NADDR16_HI 104
-#define R_PPC_EMB_NADDR16_HA 105
-#define R_PPC_EMB_SDAI16 106
-#define R_PPC_EMB_SDA2I16 107
-#define R_PPC_EMB_SDA2REL 108
-#define R_PPC_EMB_SDA21 109 /* 16 bit offset in SDA */
-#define R_PPC_EMB_MRKREF 110
-#define R_PPC_EMB_RELSEC16 111
-#define R_PPC_EMB_RELST_LO 112
-#define R_PPC_EMB_RELST_HI 113
-#define R_PPC_EMB_RELST_HA 114
-#define R_PPC_EMB_BIT_FLD 115
-#define R_PPC_EMB_RELSDA 116 /* 16 bit relative offset in SDA */
-
-/* Diab tool relocations. */
-#define R_PPC_DIAB_SDA21_LO 180 /* like EMB_SDA21, but lower 16 bit */
-#define R_PPC_DIAB_SDA21_HI 181 /* like EMB_SDA21, but high 16 bit */
-#define R_PPC_DIAB_SDA21_HA 182 /* like EMB_SDA21, adjusted high 16 */
-#define R_PPC_DIAB_RELSDA_LO 183 /* like EMB_RELSDA, but lower 16 bit */
-#define R_PPC_DIAB_RELSDA_HI 184 /* like EMB_RELSDA, but high 16 bit */
-#define R_PPC_DIAB_RELSDA_HA 185 /* like EMB_RELSDA, adjusted high 16 */
-
-/* GNU relocs used in PIC code sequences. */
-#define R_PPC_REL16 249 /* word32 (sym-.) */
-#define R_PPC_REL16_LO 250 /* half16 (sym-.)@l */
-#define R_PPC_REL16_HI 251 /* half16 (sym-.)@h */
-#define R_PPC_REL16_HA 252 /* half16 (sym-.)@ha */
-
-/* This is a phony reloc to handle any old fashioned TOC16 references
- that may still be in object files. */
-#define R_PPC_TOC16 255
-
-/* PowerPC specific values for the Dyn d_tag field. */
-#define DT_PPC_GOT (DT_LOPROC + 0)
-#define DT_PPC_NUM 1
-
-/* PowerPC64 relocations defined by the ABIs */
-#define R_PPC64_NONE R_PPC_NONE
-#define R_PPC64_ADDR32 R_PPC_ADDR32 /* 32bit absolute address */
-#define R_PPC64_ADDR24 R_PPC_ADDR24 /* 26bit address, word aligned */
-#define R_PPC64_ADDR16 R_PPC_ADDR16 /* 16bit absolute address */
-#define R_PPC64_ADDR16_LO R_PPC_ADDR16_LO /* lower 16bits of address */
-#define R_PPC64_ADDR16_HI R_PPC_ADDR16_HI /* high 16bits of address. */
-#define R_PPC64_ADDR16_HA R_PPC_ADDR16_HA /* adjusted high 16bits. */
-#define R_PPC64_ADDR14 R_PPC_ADDR14 /* 16bit address, word aligned */
-#define R_PPC64_ADDR14_BRTAKEN R_PPC_ADDR14_BRTAKEN
-#define R_PPC64_ADDR14_BRNTAKEN R_PPC_ADDR14_BRNTAKEN
-#define R_PPC64_REL24 R_PPC_REL24 /* PC-rel. 26 bit, word aligned */
-#define R_PPC64_REL14 R_PPC_REL14 /* PC relative 16 bit */
-#define R_PPC64_REL14_BRTAKEN R_PPC_REL14_BRTAKEN
-#define R_PPC64_REL14_BRNTAKEN R_PPC_REL14_BRNTAKEN
-#define R_PPC64_GOT16 R_PPC_GOT16
-#define R_PPC64_GOT16_LO R_PPC_GOT16_LO
-#define R_PPC64_GOT16_HI R_PPC_GOT16_HI
-#define R_PPC64_GOT16_HA R_PPC_GOT16_HA
-
-#define R_PPC64_COPY R_PPC_COPY
-#define R_PPC64_GLOB_DAT R_PPC_GLOB_DAT
-#define R_PPC64_JMP_SLOT R_PPC_JMP_SLOT
-#define R_PPC64_RELATIVE R_PPC_RELATIVE
-
-#define R_PPC64_UADDR32 R_PPC_UADDR32
-#define R_PPC64_UADDR16 R_PPC_UADDR16
-#define R_PPC64_REL32 R_PPC_REL32
-#define R_PPC64_PLT32 R_PPC_PLT32
-#define R_PPC64_PLTREL32 R_PPC_PLTREL32
-#define R_PPC64_PLT16_LO R_PPC_PLT16_LO
-#define R_PPC64_PLT16_HI R_PPC_PLT16_HI
-#define R_PPC64_PLT16_HA R_PPC_PLT16_HA
-
-#define R_PPC64_SECTOFF R_PPC_SECTOFF
-#define R_PPC64_SECTOFF_LO R_PPC_SECTOFF_LO
-#define R_PPC64_SECTOFF_HI R_PPC_SECTOFF_HI
-#define R_PPC64_SECTOFF_HA R_PPC_SECTOFF_HA
-#define R_PPC64_ADDR30 37 /* word30 (S + A - P) >> 2 */
-#define R_PPC64_ADDR64 38 /* doubleword64 S + A */
-#define R_PPC64_ADDR16_HIGHER 39 /* half16 #higher(S + A) */
-#define R_PPC64_ADDR16_HIGHERA 40 /* half16 #highera(S + A) */
-#define R_PPC64_ADDR16_HIGHEST 41 /* half16 #highest(S + A) */
-#define R_PPC64_ADDR16_HIGHESTA 42 /* half16 #highesta(S + A) */
-#define R_PPC64_UADDR64 43 /* doubleword64 S + A */
-#define R_PPC64_REL64 44 /* doubleword64 S + A - P */
-#define R_PPC64_PLT64 45 /* doubleword64 L + A */
-#define R_PPC64_PLTREL64 46 /* doubleword64 L + A - P */
-#define R_PPC64_TOC16 47 /* half16* S + A - .TOC */
-#define R_PPC64_TOC16_LO 48 /* half16 #lo(S + A - .TOC.) */
-#define R_PPC64_TOC16_HI 49 /* half16 #hi(S + A - .TOC.) */
-#define R_PPC64_TOC16_HA 50 /* half16 #ha(S + A - .TOC.) */
-#define R_PPC64_TOC 51 /* doubleword64 .TOC */
-#define R_PPC64_PLTGOT16 52 /* half16* M + A */
-#define R_PPC64_PLTGOT16_LO 53 /* half16 #lo(M + A) */
-#define R_PPC64_PLTGOT16_HI 54 /* half16 #hi(M + A) */
-#define R_PPC64_PLTGOT16_HA 55 /* half16 #ha(M + A) */
-
-#define R_PPC64_ADDR16_DS 56 /* half16ds* (S + A) >> 2 */
-#define R_PPC64_ADDR16_LO_DS 57 /* half16ds #lo(S + A) >> 2 */
-#define R_PPC64_GOT16_DS 58 /* half16ds* (G + A) >> 2 */
-#define R_PPC64_GOT16_LO_DS 59 /* half16ds #lo(G + A) >> 2 */
-#define R_PPC64_PLT16_LO_DS 60 /* half16ds #lo(L + A) >> 2 */
-#define R_PPC64_SECTOFF_DS 61 /* half16ds* (R + A) >> 2 */
-#define R_PPC64_SECTOFF_LO_DS 62 /* half16ds #lo(R + A) >> 2 */
-#define R_PPC64_TOC16_DS 63 /* half16ds* (S + A - .TOC.) >> 2 */
-#define R_PPC64_TOC16_LO_DS 64 /* half16ds #lo(S + A - .TOC.) >> 2 */
-#define R_PPC64_PLTGOT16_DS 65 /* half16ds* (M + A) >> 2 */
-#define R_PPC64_PLTGOT16_LO_DS 66 /* half16ds #lo(M + A) >> 2 */
-
-/* PowerPC64 relocations defined for the TLS access ABI. */
-#define R_PPC64_TLS 67 /* none (sym+add)@tls */
-#define R_PPC64_DTPMOD64 68 /* doubleword64 (sym+add)@dtpmod */
-#define R_PPC64_TPREL16 69 /* half16* (sym+add)@tprel */
-#define R_PPC64_TPREL16_LO 70 /* half16 (sym+add)@tprel@l */
-#define R_PPC64_TPREL16_HI 71 /* half16 (sym+add)@tprel@h */
-#define R_PPC64_TPREL16_HA 72 /* half16 (sym+add)@tprel@ha */
-#define R_PPC64_TPREL64 73 /* doubleword64 (sym+add)@tprel */
-#define R_PPC64_DTPREL16 74 /* half16* (sym+add)@dtprel */
-#define R_PPC64_DTPREL16_LO 75 /* half16 (sym+add)@dtprel@l */
-#define R_PPC64_DTPREL16_HI 76 /* half16 (sym+add)@dtprel@h */
-#define R_PPC64_DTPREL16_HA 77 /* half16 (sym+add)@dtprel@ha */
-#define R_PPC64_DTPREL64 78 /* doubleword64 (sym+add)@dtprel */
-#define R_PPC64_GOT_TLSGD16 79 /* half16* (sym+add)@got@tlsgd */
-#define R_PPC64_GOT_TLSGD16_LO 80 /* half16 (sym+add)@got@tlsgd@l */
-#define R_PPC64_GOT_TLSGD16_HI 81 /* half16 (sym+add)@got@tlsgd@h */
-#define R_PPC64_GOT_TLSGD16_HA 82 /* half16 (sym+add)@got@tlsgd@ha */
-#define R_PPC64_GOT_TLSLD16 83 /* half16* (sym+add)@got@tlsld */
-#define R_PPC64_GOT_TLSLD16_LO 84 /* half16 (sym+add)@got@tlsld@l */
-#define R_PPC64_GOT_TLSLD16_HI 85 /* half16 (sym+add)@got@tlsld@h */
-#define R_PPC64_GOT_TLSLD16_HA 86 /* half16 (sym+add)@got@tlsld@ha */
-#define R_PPC64_GOT_TPREL16_DS 87 /* half16ds* (sym+add)@got@tprel */
-#define R_PPC64_GOT_TPREL16_LO_DS 88 /* half16ds (sym+add)@got@tprel@l */
-#define R_PPC64_GOT_TPREL16_HI 89 /* half16 (sym+add)@got@tprel@h */
-#define R_PPC64_GOT_TPREL16_HA 90 /* half16 (sym+add)@got@tprel@ha */
-#define R_PPC64_GOT_DTPREL16_DS 91 /* half16ds* (sym+add)@got@dtprel */
-#define R_PPC64_GOT_DTPREL16_LO_DS 92 /* half16ds (sym+add)@got@dtprel@l */
-#define R_PPC64_GOT_DTPREL16_HI 93 /* half16 (sym+add)@got@dtprel@h */
-#define R_PPC64_GOT_DTPREL16_HA 94 /* half16 (sym+add)@got@dtprel@ha */
-#define R_PPC64_TPREL16_DS 95 /* half16ds* (sym+add)@tprel */
-#define R_PPC64_TPREL16_LO_DS 96 /* half16ds (sym+add)@tprel@l */
-#define R_PPC64_TPREL16_HIGHER 97 /* half16 (sym+add)@tprel@higher */
-#define R_PPC64_TPREL16_HIGHERA 98 /* half16 (sym+add)@tprel@highera */
-#define R_PPC64_TPREL16_HIGHEST 99 /* half16 (sym+add)@tprel@highest */
-#define R_PPC64_TPREL16_HIGHESTA 100 /* half16 (sym+add)@tprel@highesta */
-#define R_PPC64_DTPREL16_DS 101 /* half16ds* (sym+add)@dtprel */
-#define R_PPC64_DTPREL16_LO_DS 102 /* half16ds (sym+add)@dtprel@l */
-#define R_PPC64_DTPREL16_HIGHER 103 /* half16 (sym+add)@dtprel@higher */
-#define R_PPC64_DTPREL16_HIGHERA 104 /* half16 (sym+add)@dtprel@highera */
-#define R_PPC64_DTPREL16_HIGHEST 105 /* half16 (sym+add)@dtprel@highest */
-#define R_PPC64_DTPREL16_HIGHESTA 106 /* half16 (sym+add)@dtprel@highesta */
-
-/* Keep this the last entry. */
-#define R_PPC64_NUM 107
-
-/* PowerPC64 specific values for the Dyn d_tag field. */
-#define DT_PPC64_GLINK (DT_LOPROC + 0)
-#define DT_PPC64_OPD (DT_LOPROC + 1)
-#define DT_PPC64_OPDSZ (DT_LOPROC + 2)
-#define DT_PPC64_NUM 3
-
-
-/* ARM specific declarations */
-
-/* Processor specific flags for the ELF header e_flags field. */
-#define EF_ARM_RELEXEC 0x01
-#define EF_ARM_HASENTRY 0x02
-#define EF_ARM_INTERWORK 0x04
-#define EF_ARM_APCS_26 0x08
-#define EF_ARM_APCS_FLOAT 0x10
-#define EF_ARM_PIC 0x20
-#define EF_ARM_ALIGN8 0x40 /* 8-bit structure alignment is in use */
-#define EF_ARM_NEW_ABI 0x80
-#define EF_ARM_OLD_ABI 0x100
-
-/* Other constants defined in the ARM ELF spec. version B-01. */
-/* NB. These conflict with values defined above. */
-#define EF_ARM_SYMSARESORTED 0x04
-#define EF_ARM_DYNSYMSUSESEGIDX 0x08
-#define EF_ARM_MAPSYMSFIRST 0x10
-#define EF_ARM_EABIMASK 0XFF000000
-
-#define EF_ARM_EABI_VERSION(flags) ((flags) & EF_ARM_EABIMASK)
-#define EF_ARM_EABI_UNKNOWN 0x00000000
-#define EF_ARM_EABI_VER1 0x01000000
-#define EF_ARM_EABI_VER2 0x02000000
-
-/* Additional symbol types for Thumb */
-#define STT_ARM_TFUNC 0xd
-
-/* ARM-specific values for sh_flags */
-#define SHF_ARM_ENTRYSECT 0x10000000 /* Section contains an entry point */
-#define SHF_ARM_COMDEF 0x80000000 /* Section may be multiply defined
- in the input to a link step */
-
-/* ARM-specific program header flags */
-#define PF_ARM_SB 0x10000000 /* Segment contains the location
- addressed by the static base */
-
-/* Processor specific values for the Phdr p_type field. */
-#define PT_ARM_EXIDX 0x70000001 /* .ARM.exidx segment */
-
-/* ARM relocs. */
-
-#define R_ARM_NONE 0 /* No reloc */
-#define R_ARM_PC24 1 /* PC relative 26 bit branch */
-#define R_ARM_ABS32 2 /* Direct 32 bit */
-#define R_ARM_REL32 3 /* PC relative 32 bit */
-#define R_ARM_PC13 4
-#define R_ARM_ABS16 5 /* Direct 16 bit */
-#define R_ARM_ABS12 6 /* Direct 12 bit */
-#define R_ARM_THM_ABS5 7
-#define R_ARM_ABS8 8 /* Direct 8 bit */
-#define R_ARM_SBREL32 9
-#define R_ARM_THM_PC22 10
-#define R_ARM_THM_PC8 11
-#define R_ARM_AMP_VCALL9 12
-#define R_ARM_SWI24 13
-#define R_ARM_THM_SWI8 14
-#define R_ARM_XPC25 15
-#define R_ARM_THM_XPC22 16
-#define R_ARM_TLS_DTPMOD32 17 /* ID of module containing symbol */
-#define R_ARM_TLS_DTPOFF32 18 /* Offset in TLS block */
-#define R_ARM_TLS_TPOFF32 19 /* Offset in static TLS block */
-#define R_ARM_COPY 20 /* Copy symbol at runtime */
-#define R_ARM_GLOB_DAT 21 /* Create GOT entry */
-#define R_ARM_JUMP_SLOT 22 /* Create PLT entry */
-#define R_ARM_RELATIVE 23 /* Adjust by program base */
-#define R_ARM_GOTOFF 24 /* 32 bit offset to GOT */
-#define R_ARM_GOTPC 25 /* 32 bit PC relative offset to GOT */
-#define R_ARM_GOT32 26 /* 32 bit GOT entry */
-#define R_ARM_PLT32 27 /* 32 bit PLT address */
-#define R_ARM_ALU_PCREL_7_0 32
-#define R_ARM_ALU_PCREL_15_8 33
-#define R_ARM_ALU_PCREL_23_15 34
-#define R_ARM_LDR_SBREL_11_0 35
-#define R_ARM_ALU_SBREL_19_12 36
-#define R_ARM_ALU_SBREL_27_20 37
-#define R_ARM_GNU_VTENTRY 100
-#define R_ARM_GNU_VTINHERIT 101
-#define R_ARM_THM_PC11 102 /* thumb unconditional branch */
-#define R_ARM_THM_PC9 103 /* thumb conditional branch */
-#define R_ARM_TLS_GD32 104 /* PC-rel 32 bit for global dynamic
- thread local data */
-#define R_ARM_TLS_LDM32 105 /* PC-rel 32 bit for local dynamic
- thread local data */
-#define R_ARM_TLS_LDO32 106 /* 32 bit offset relative to TLS
- block */
-#define R_ARM_TLS_IE32 107 /* PC-rel 32 bit for GOT entry of
- static TLS block offset */
-#define R_ARM_TLS_LE32 108 /* 32 bit offset relative to static
- TLS block */
-#define R_ARM_RXPC25 249
-#define R_ARM_RSBREL32 250
-#define R_ARM_THM_RPC22 251
-#define R_ARM_RREL32 252
-#define R_ARM_RABS22 253
-#define R_ARM_RPC24 254
-#define R_ARM_RBASE 255
-/* Keep this the last entry. */
-#define R_ARM_NUM 256
-
-/* IA-64 specific declarations. */
-
-/* Processor specific flags for the Ehdr e_flags field. */
-#define EF_IA_64_MASKOS 0x0000000f /* os-specific flags */
-#define EF_IA_64_ABI64 0x00000010 /* 64-bit ABI */
-#define EF_IA_64_ARCH 0xff000000 /* arch. version mask */
-
-/* Processor specific values for the Phdr p_type field. */
-#define PT_IA_64_ARCHEXT (PT_LOPROC + 0) /* arch extension bits */
-#define PT_IA_64_UNWIND (PT_LOPROC + 1) /* ia64 unwind bits */
-#define PT_IA_64_HP_OPT_ANOT (PT_LOOS + 0x12)
-#define PT_IA_64_HP_HSL_ANOT (PT_LOOS + 0x13)
-#define PT_IA_64_HP_STACK (PT_LOOS + 0x14)
-
-/* Processor specific flags for the Phdr p_flags field. */
-#define PF_IA_64_NORECOV 0x80000000 /* spec insns w/o recovery */
-
-/* Processor specific values for the Shdr sh_type field. */
-#define SHT_IA_64_EXT (SHT_LOPROC + 0) /* extension bits */
-#define SHT_IA_64_UNWIND (SHT_LOPROC + 1) /* unwind bits */
-
-/* Processor specific flags for the Shdr sh_flags field. */
-#define SHF_IA_64_SHORT 0x10000000 /* section near gp */
-#define SHF_IA_64_NORECOV 0x20000000 /* spec insns w/o recovery */
-
-/* Processor specific values for the Dyn d_tag field. */
-#define DT_IA_64_PLT_RESERVE (DT_LOPROC + 0)
-#define DT_IA_64_NUM 1
-
-/* IA-64 relocations. */
-#define R_IA64_NONE 0x00 /* none */
-#define R_IA64_IMM14 0x21 /* symbol + addend, add imm14 */
-#define R_IA64_IMM22 0x22 /* symbol + addend, add imm22 */
-#define R_IA64_IMM64 0x23 /* symbol + addend, mov imm64 */
-#define R_IA64_DIR32MSB 0x24 /* symbol + addend, data4 MSB */
-#define R_IA64_DIR32LSB 0x25 /* symbol + addend, data4 LSB */
-#define R_IA64_DIR64MSB 0x26 /* symbol + addend, data8 MSB */
-#define R_IA64_DIR64LSB 0x27 /* symbol + addend, data8 LSB */
-#define R_IA64_GPREL22 0x2a /* @gprel(sym + add), add imm22 */
-#define R_IA64_GPREL64I 0x2b /* @gprel(sym + add), mov imm64 */
-#define R_IA64_GPREL32MSB 0x2c /* @gprel(sym + add), data4 MSB */
-#define R_IA64_GPREL32LSB 0x2d /* @gprel(sym + add), data4 LSB */
-#define R_IA64_GPREL64MSB 0x2e /* @gprel(sym + add), data8 MSB */
-#define R_IA64_GPREL64LSB 0x2f /* @gprel(sym + add), data8 LSB */
-#define R_IA64_LTOFF22 0x32 /* @ltoff(sym + add), add imm22 */
-#define R_IA64_LTOFF64I 0x33 /* @ltoff(sym + add), mov imm64 */
-#define R_IA64_PLTOFF22 0x3a /* @pltoff(sym + add), add imm22 */
-#define R_IA64_PLTOFF64I 0x3b /* @pltoff(sym + add), mov imm64 */
-#define R_IA64_PLTOFF64MSB 0x3e /* @pltoff(sym + add), data8 MSB */
-#define R_IA64_PLTOFF64LSB 0x3f /* @pltoff(sym + add), data8 LSB */
-#define R_IA64_FPTR64I 0x43 /* @fptr(sym + add), mov imm64 */
-#define R_IA64_FPTR32MSB 0x44 /* @fptr(sym + add), data4 MSB */
-#define R_IA64_FPTR32LSB 0x45 /* @fptr(sym + add), data4 LSB */
-#define R_IA64_FPTR64MSB 0x46 /* @fptr(sym + add), data8 MSB */
-#define R_IA64_FPTR64LSB 0x47 /* @fptr(sym + add), data8 LSB */
-#define R_IA64_PCREL60B 0x48 /* @pcrel(sym + add), brl */
-#define R_IA64_PCREL21B 0x49 /* @pcrel(sym + add), ptb, call */
-#define R_IA64_PCREL21M 0x4a /* @pcrel(sym + add), chk.s */
-#define R_IA64_PCREL21F 0x4b /* @pcrel(sym + add), fchkf */
-#define R_IA64_PCREL32MSB 0x4c /* @pcrel(sym + add), data4 MSB */
-#define R_IA64_PCREL32LSB 0x4d /* @pcrel(sym + add), data4 LSB */
-#define R_IA64_PCREL64MSB 0x4e /* @pcrel(sym + add), data8 MSB */
-#define R_IA64_PCREL64LSB 0x4f /* @pcrel(sym + add), data8 LSB */
-#define R_IA64_LTOFF_FPTR22 0x52 /* @ltoff(@fptr(s+a)), imm22 */
-#define R_IA64_LTOFF_FPTR64I 0x53 /* @ltoff(@fptr(s+a)), imm64 */
-#define R_IA64_LTOFF_FPTR32MSB 0x54 /* @ltoff(@fptr(s+a)), data4 MSB */
-#define R_IA64_LTOFF_FPTR32LSB 0x55 /* @ltoff(@fptr(s+a)), data4 LSB */
-#define R_IA64_LTOFF_FPTR64MSB 0x56 /* @ltoff(@fptr(s+a)), data8 MSB */
-#define R_IA64_LTOFF_FPTR64LSB 0x57 /* @ltoff(@fptr(s+a)), data8 LSB */
-#define R_IA64_SEGREL32MSB 0x5c /* @segrel(sym + add), data4 MSB */
-#define R_IA64_SEGREL32LSB 0x5d /* @segrel(sym + add), data4 LSB */
-#define R_IA64_SEGREL64MSB 0x5e /* @segrel(sym + add), data8 MSB */
-#define R_IA64_SEGREL64LSB 0x5f /* @segrel(sym + add), data8 LSB */
-#define R_IA64_SECREL32MSB 0x64 /* @secrel(sym + add), data4 MSB */
-#define R_IA64_SECREL32LSB 0x65 /* @secrel(sym + add), data4 LSB */
-#define R_IA64_SECREL64MSB 0x66 /* @secrel(sym + add), data8 MSB */
-#define R_IA64_SECREL64LSB 0x67 /* @secrel(sym + add), data8 LSB */
-#define R_IA64_REL32MSB 0x6c /* data 4 + REL */
-#define R_IA64_REL32LSB 0x6d /* data 4 + REL */
-#define R_IA64_REL64MSB 0x6e /* data 8 + REL */
-#define R_IA64_REL64LSB 0x6f /* data 8 + REL */
-#define R_IA64_LTV32MSB 0x74 /* symbol + addend, data4 MSB */
-#define R_IA64_LTV32LSB 0x75 /* symbol + addend, data4 LSB */
-#define R_IA64_LTV64MSB 0x76 /* symbol + addend, data8 MSB */
-#define R_IA64_LTV64LSB 0x77 /* symbol + addend, data8 LSB */
-#define R_IA64_PCREL21BI 0x79 /* @pcrel(sym + add), 21bit inst */
-#define R_IA64_PCREL22 0x7a /* @pcrel(sym + add), 22bit inst */
-#define R_IA64_PCREL64I 0x7b /* @pcrel(sym + add), 64bit inst */
-#define R_IA64_IPLTMSB 0x80 /* dynamic reloc, imported PLT, MSB */
-#define R_IA64_IPLTLSB 0x81 /* dynamic reloc, imported PLT, LSB */
-#define R_IA64_COPY 0x84 /* copy relocation */
-#define R_IA64_SUB 0x85 /* Addend and symbol difference */
-#define R_IA64_LTOFF22X 0x86 /* LTOFF22, relaxable. */
-#define R_IA64_LDXMOV 0x87 /* Use of LTOFF22X. */
-#define R_IA64_TPREL14 0x91 /* @tprel(sym + add), imm14 */
-#define R_IA64_TPREL22 0x92 /* @tprel(sym + add), imm22 */
-#define R_IA64_TPREL64I 0x93 /* @tprel(sym + add), imm64 */
-#define R_IA64_TPREL64MSB 0x96 /* @tprel(sym + add), data8 MSB */
-#define R_IA64_TPREL64LSB 0x97 /* @tprel(sym + add), data8 LSB */
-#define R_IA64_LTOFF_TPREL22 0x9a /* @ltoff(@tprel(s+a)), imm2 */
-#define R_IA64_DTPMOD64MSB 0xa6 /* @dtpmod(sym + add), data8 MSB */
-#define R_IA64_DTPMOD64LSB 0xa7 /* @dtpmod(sym + add), data8 LSB */
-#define R_IA64_LTOFF_DTPMOD22 0xaa /* @ltoff(@dtpmod(sym + add)), imm22 */
-#define R_IA64_DTPREL14 0xb1 /* @dtprel(sym + add), imm14 */
-#define R_IA64_DTPREL22 0xb2 /* @dtprel(sym + add), imm22 */
-#define R_IA64_DTPREL64I 0xb3 /* @dtprel(sym + add), imm64 */
-#define R_IA64_DTPREL32MSB 0xb4 /* @dtprel(sym + add), data4 MSB */
-#define R_IA64_DTPREL32LSB 0xb5 /* @dtprel(sym + add), data4 LSB */
-#define R_IA64_DTPREL64MSB 0xb6 /* @dtprel(sym + add), data8 MSB */
-#define R_IA64_DTPREL64LSB 0xb7 /* @dtprel(sym + add), data8 LSB */
-#define R_IA64_LTOFF_DTPREL22 0xba /* @ltoff(@dtprel(s+a)), imm22 */
-
-/* SH specific declarations */
-
-/* SH relocs. */
-#define R_SH_NONE 0
-#define R_SH_DIR32 1
-#define R_SH_REL32 2
-#define R_SH_DIR8WPN 3
-#define R_SH_IND12W 4
-#define R_SH_DIR8WPL 5
-#define R_SH_DIR8WPZ 6
-#define R_SH_DIR8BP 7
-#define R_SH_DIR8W 8
-#define R_SH_DIR8L 9
-#define R_SH_SWITCH16 25
-#define R_SH_SWITCH32 26
-#define R_SH_USES 27
-#define R_SH_COUNT 28
-#define R_SH_ALIGN 29
-#define R_SH_CODE 30
-#define R_SH_DATA 31
-#define R_SH_LABEL 32
-#define R_SH_SWITCH8 33
-#define R_SH_GNU_VTINHERIT 34
-#define R_SH_GNU_VTENTRY 35
-#define R_SH_TLS_GD_32 144
-#define R_SH_TLS_LD_32 145
-#define R_SH_TLS_LDO_32 146
-#define R_SH_TLS_IE_32 147
-#define R_SH_TLS_LE_32 148
-#define R_SH_TLS_DTPMOD32 149
-#define R_SH_TLS_DTPOFF32 150
-#define R_SH_TLS_TPOFF32 151
-#define R_SH_GOT32 160
-#define R_SH_PLT32 161
-#define R_SH_COPY 162
-#define R_SH_GLOB_DAT 163
-#define R_SH_JMP_SLOT 164
-#define R_SH_RELATIVE 165
-#define R_SH_GOTOFF 166
-#define R_SH_GOTPC 167
-/* Keep this the last entry. */
-#define R_SH_NUM 256
-
-/* Additional s390 relocs */
-
-#define R_390_NONE 0 /* No reloc. */
-#define R_390_8 1 /* Direct 8 bit. */
-#define R_390_12 2 /* Direct 12 bit. */
-#define R_390_16 3 /* Direct 16 bit. */
-#define R_390_32 4 /* Direct 32 bit. */
-#define R_390_PC32 5 /* PC relative 32 bit. */
-#define R_390_GOT12 6 /* 12 bit GOT offset. */
-#define R_390_GOT32 7 /* 32 bit GOT offset. */
-#define R_390_PLT32 8 /* 32 bit PC relative PLT address. */
-#define R_390_COPY 9 /* Copy symbol at runtime. */
-#define R_390_GLOB_DAT 10 /* Create GOT entry. */
-#define R_390_JMP_SLOT 11 /* Create PLT entry. */
-#define R_390_RELATIVE 12 /* Adjust by program base. */
-#define R_390_GOTOFF32 13 /* 32 bit offset to GOT. */
-#define R_390_GOTPC 14 /* 32 bit PC relative offset to GOT. */
-#define R_390_GOT16 15 /* 16 bit GOT offset. */
-#define R_390_PC16 16 /* PC relative 16 bit. */
-#define R_390_PC16DBL 17 /* PC relative 16 bit shifted by 1. */
-#define R_390_PLT16DBL 18 /* 16 bit PC rel. PLT shifted by 1. */
-#define R_390_PC32DBL 19 /* PC relative 32 bit shifted by 1. */
-#define R_390_PLT32DBL 20 /* 32 bit PC rel. PLT shifted by 1. */
-#define R_390_GOTPCDBL 21 /* 32 bit PC rel. GOT shifted by 1. */
-#define R_390_64 22 /* Direct 64 bit. */
-#define R_390_PC64 23 /* PC relative 64 bit. */
-#define R_390_GOT64 24 /* 64 bit GOT offset. */
-#define R_390_PLT64 25 /* 64 bit PC relative PLT address. */
-#define R_390_GOTENT 26 /* 32 bit PC rel. to GOT entry >> 1. */
-#define R_390_GOTOFF16 27 /* 16 bit offset to GOT. */
-#define R_390_GOTOFF64 28 /* 64 bit offset to GOT. */
-#define R_390_GOTPLT12 29 /* 12 bit offset to jump slot. */
-#define R_390_GOTPLT16 30 /* 16 bit offset to jump slot. */
-#define R_390_GOTPLT32 31 /* 32 bit offset to jump slot. */
-#define R_390_GOTPLT64 32 /* 64 bit offset to jump slot. */
-#define R_390_GOTPLTENT 33 /* 32 bit rel. offset to jump slot. */
-#define R_390_PLTOFF16 34 /* 16 bit offset from GOT to PLT. */
-#define R_390_PLTOFF32 35 /* 32 bit offset from GOT to PLT. */
-#define R_390_PLTOFF64 36 /* 16 bit offset from GOT to PLT. */
-#define R_390_TLS_LOAD 37 /* Tag for load insn in TLS code. */
-#define R_390_TLS_GDCALL 38 /* Tag for function call in general
- dynamic TLS code. */
-#define R_390_TLS_LDCALL 39 /* Tag for function call in local
- dynamic TLS code. */
-#define R_390_TLS_GD32 40 /* Direct 32 bit for general dynamic
- thread local data. */
-#define R_390_TLS_GD64 41 /* Direct 64 bit for general dynamic
- thread local data. */
-#define R_390_TLS_GOTIE12 42 /* 12 bit GOT offset for static TLS
- block offset. */
-#define R_390_TLS_GOTIE32 43 /* 32 bit GOT offset for static TLS
- block offset. */
-#define R_390_TLS_GOTIE64 44 /* 64 bit GOT offset for static TLS
- block offset. */
-#define R_390_TLS_LDM32 45 /* Direct 32 bit for local dynamic
- thread local data in LE code. */
-#define R_390_TLS_LDM64 46 /* Direct 64 bit for local dynamic
- thread local data in LE code. */
-#define R_390_TLS_IE32 47 /* 32 bit address of GOT entry for
- negated static TLS block offset. */
-#define R_390_TLS_IE64 48 /* 64 bit address of GOT entry for
- negated static TLS block offset. */
-#define R_390_TLS_IEENT 49 /* 32 bit rel. offset to GOT entry for
- negated static TLS block offset. */
-#define R_390_TLS_LE32 50 /* 32 bit negated offset relative to
- static TLS block. */
-#define R_390_TLS_LE64 51 /* 64 bit negated offset relative to
- static TLS block. */
-#define R_390_TLS_LDO32 52 /* 32 bit offset relative to TLS
- block. */
-#define R_390_TLS_LDO64 53 /* 64 bit offset relative to TLS
- block. */
-#define R_390_TLS_DTPMOD 54 /* ID of module containing symbol. */
-#define R_390_TLS_DTPOFF 55 /* Offset in TLS block. */
-#define R_390_TLS_TPOFF 56 /* Negated offset in static TLS
- block. */
-#define R_390_20 57 /* Direct 20 bit. */
-#define R_390_GOT20 58 /* 20 bit GOT offset. */
-#define R_390_GOTPLT20 59 /* 20 bit offset to jump slot. */
-#define R_390_TLS_GOTIE20 60 /* 20 bit GOT offset for static TLS
- block offset. */
-/* Keep this the last entry. */
-#define R_390_NUM 61
-
-
-/* CRIS relocations. */
-#define R_CRIS_NONE 0
-#define R_CRIS_8 1
-#define R_CRIS_16 2
-#define R_CRIS_32 3
-#define R_CRIS_8_PCREL 4
-#define R_CRIS_16_PCREL 5
-#define R_CRIS_32_PCREL 6
-#define R_CRIS_GNU_VTINHERIT 7
-#define R_CRIS_GNU_VTENTRY 8
-#define R_CRIS_COPY 9
-#define R_CRIS_GLOB_DAT 10
-#define R_CRIS_JUMP_SLOT 11
-#define R_CRIS_RELATIVE 12
-#define R_CRIS_16_GOT 13
-#define R_CRIS_32_GOT 14
-#define R_CRIS_16_GOTPLT 15
-#define R_CRIS_32_GOTPLT 16
-#define R_CRIS_32_GOTREL 17
-#define R_CRIS_32_PLT_GOTREL 18
-#define R_CRIS_32_PLT_PCREL 19
-
-#define R_CRIS_NUM 20
-
-
-/* AMD x86-64 relocations. */
-#define R_X86_64_NONE 0 /* No reloc */
-#define R_X86_64_64 1 /* Direct 64 bit */
-#define R_X86_64_PC32 2 /* PC relative 32 bit signed */
-#define R_X86_64_GOT32 3 /* 32 bit GOT entry */
-#define R_X86_64_PLT32 4 /* 32 bit PLT address */
-#define R_X86_64_COPY 5 /* Copy symbol at runtime */
-#define R_X86_64_GLOB_DAT 6 /* Create GOT entry */
-#define R_X86_64_JUMP_SLOT 7 /* Create PLT entry */
-#define R_X86_64_RELATIVE 8 /* Adjust by program base */
-#define R_X86_64_GOTPCREL 9 /* 32 bit signed PC relative
- offset to GOT */
-#define R_X86_64_32 10 /* Direct 32 bit zero extended */
-#define R_X86_64_32S 11 /* Direct 32 bit sign extended */
-#define R_X86_64_16 12 /* Direct 16 bit zero extended */
-#define R_X86_64_PC16 13 /* 16 bit sign extended pc relative */
-#define R_X86_64_8 14 /* Direct 8 bit sign extended */
-#define R_X86_64_PC8 15 /* 8 bit sign extended pc relative */
-#define R_X86_64_DTPMOD64 16 /* ID of module containing symbol */
-#define R_X86_64_DTPOFF64 17 /* Offset in module's TLS block */
-#define R_X86_64_TPOFF64 18 /* Offset in initial TLS block */
-#define R_X86_64_TLSGD 19 /* 32 bit signed PC relative offset
- to two GOT entries for GD symbol */
-#define R_X86_64_TLSLD 20 /* 32 bit signed PC relative offset
- to two GOT entries for LD symbol */
-#define R_X86_64_DTPOFF32 21 /* Offset in TLS block */
-#define R_X86_64_GOTTPOFF 22 /* 32 bit signed PC relative offset
- to GOT entry for IE symbol */
-#define R_X86_64_TPOFF32 23 /* Offset in initial TLS block */
-#define R_X86_64_PC64 24 /* PC relative 64 bit */
-#define R_X86_64_GOTOFF64 25 /* 64 bit offset to GOT */
-#define R_X86_64_GOTPC32 26 /* 32 bit signed pc relative
- offset to GOT */
-/* 27 .. 33 */
-#define R_X86_64_GOTPC32_TLSDESC 34 /* GOT offset for TLS descriptor. */
-#define R_X86_64_TLSDESC_CALL 35 /* Marker for call through TLS
- descriptor. */
-#define R_X86_64_TLSDESC 36 /* TLS descriptor. */
-
-#define R_X86_64_NUM 37
-
-
-/* AM33 relocations. */
-#define R_MN10300_NONE 0 /* No reloc. */
-#define R_MN10300_32 1 /* Direct 32 bit. */
-#define R_MN10300_16 2 /* Direct 16 bit. */
-#define R_MN10300_8 3 /* Direct 8 bit. */
-#define R_MN10300_PCREL32 4 /* PC-relative 32-bit. */
-#define R_MN10300_PCREL16 5 /* PC-relative 16-bit signed. */
-#define R_MN10300_PCREL8 6 /* PC-relative 8-bit signed. */
-#define R_MN10300_GNU_VTINHERIT 7 /* Ancient C++ vtable garbage... */
-#define R_MN10300_GNU_VTENTRY 8 /* ... collection annotation. */
-#define R_MN10300_24 9 /* Direct 24 bit. */
-#define R_MN10300_GOTPC32 10 /* 32-bit PCrel offset to GOT. */
-#define R_MN10300_GOTPC16 11 /* 16-bit PCrel offset to GOT. */
-#define R_MN10300_GOTOFF32 12 /* 32-bit offset from GOT. */
-#define R_MN10300_GOTOFF24 13 /* 24-bit offset from GOT. */
-#define R_MN10300_GOTOFF16 14 /* 16-bit offset from GOT. */
-#define R_MN10300_PLT32 15 /* 32-bit PCrel to PLT entry. */
-#define R_MN10300_PLT16 16 /* 16-bit PCrel to PLT entry. */
-#define R_MN10300_GOT32 17 /* 32-bit offset to GOT entry. */
-#define R_MN10300_GOT24 18 /* 24-bit offset to GOT entry. */
-#define R_MN10300_GOT16 19 /* 16-bit offset to GOT entry. */
-#define R_MN10300_COPY 20 /* Copy symbol at runtime. */
-#define R_MN10300_GLOB_DAT 21 /* Create GOT entry. */
-#define R_MN10300_JMP_SLOT 22 /* Create PLT entry. */
-#define R_MN10300_RELATIVE 23 /* Adjust by program base. */
-
-#define R_MN10300_NUM 24
-
-
-/* M32R relocs. */
-#define R_M32R_NONE 0 /* No reloc. */
-#define R_M32R_16 1 /* Direct 16 bit. */
-#define R_M32R_32 2 /* Direct 32 bit. */
-#define R_M32R_24 3 /* Direct 24 bit. */
-#define R_M32R_10_PCREL 4 /* PC relative 10 bit shifted. */
-#define R_M32R_18_PCREL 5 /* PC relative 18 bit shifted. */
-#define R_M32R_26_PCREL 6 /* PC relative 26 bit shifted. */
-#define R_M32R_HI16_ULO 7 /* High 16 bit with unsigned low. */
-#define R_M32R_HI16_SLO 8 /* High 16 bit with signed low. */
-#define R_M32R_LO16 9 /* Low 16 bit. */
-#define R_M32R_SDA16 10 /* 16 bit offset in SDA. */
-#define R_M32R_GNU_VTINHERIT 11
-#define R_M32R_GNU_VTENTRY 12
-/* M32R relocs use SHT_RELA. */
-#define R_M32R_16_RELA 33 /* Direct 16 bit. */
-#define R_M32R_32_RELA 34 /* Direct 32 bit. */
-#define R_M32R_24_RELA 35 /* Direct 24 bit. */
-#define R_M32R_10_PCREL_RELA 36 /* PC relative 10 bit shifted. */
-#define R_M32R_18_PCREL_RELA 37 /* PC relative 18 bit shifted. */
-#define R_M32R_26_PCREL_RELA 38 /* PC relative 26 bit shifted. */
-#define R_M32R_HI16_ULO_RELA 39 /* High 16 bit with unsigned low */
-#define R_M32R_HI16_SLO_RELA 40 /* High 16 bit with signed low */
-#define R_M32R_LO16_RELA 41 /* Low 16 bit */
-#define R_M32R_SDA16_RELA 42 /* 16 bit offset in SDA */
-#define R_M32R_RELA_GNU_VTINHERIT 43
-#define R_M32R_RELA_GNU_VTENTRY 44
-#define R_M32R_REL32 45 /* PC relative 32 bit. */
-
-#define R_M32R_GOT24 48 /* 24 bit GOT entry */
-#define R_M32R_26_PLTREL 49 /* 26 bit PC relative to PLT shifted */
-#define R_M32R_COPY 50 /* Copy symbol at runtime */
-#define R_M32R_GLOB_DAT 51 /* Create GOT entry */
-#define R_M32R_JMP_SLOT 52 /* Create PLT entry */
-#define R_M32R_RELATIVE 53 /* Adjust by program base */
-#define R_M32R_GOTOFF 54 /* 24 bit offset to GOT */
-#define R_M32R_GOTPC24 55 /* 24 bit PC relative offset to GOT */
-#define R_M32R_GOT16_HI_ULO 56 /* High 16 bit GOT entry with unsigned
- low */
-#define R_M32R_GOT16_HI_SLO 57 /* High 16 bit GOT entry with signed
- low */
-#define R_M32R_GOT16_LO 58 /* Low 16 bit GOT entry */
-#define R_M32R_GOTPC_HI_ULO 59 /* High 16 bit PC relative offset to
- GOT with unsigned low */
-#define R_M32R_GOTPC_HI_SLO 60 /* High 16 bit PC relative offset to
- GOT with signed low */
-#define R_M32R_GOTPC_LO 61 /* Low 16 bit PC relative offset to
- GOT */
-#define R_M32R_GOTOFF_HI_ULO 62 /* High 16 bit offset to GOT
- with unsigned low */
-#define R_M32R_GOTOFF_HI_SLO 63 /* High 16 bit offset to GOT
- with signed low */
-#define R_M32R_GOTOFF_LO 64 /* Low 16 bit offset to GOT */
-#define R_M32R_NUM 256 /* Keep this the last entry. */
-
-
-__END_DECLS
-
-#endif /* elf.h */
diff --git a/libelf/elf32_checksum.c b/libelf/elf32_checksum.c
deleted file mode 100644
index 32b4a02..0000000
--- a/libelf/elf32_checksum.c
+++ /dev/null
@@ -1,195 +0,0 @@
-/* Compute simple checksum from permanent parts of the ELF file.
- Copyright (C) 2002, 2003, 2004, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <endian.h>
-#include <stdbool.h>
-#include <stddef.h>
-#include <string.h>
-
-#include "gelf.h"
-#include "libelfP.h"
-#include "elf-knowledge.h"
-
-#ifndef LIBELFBITS
-# define LIBELFBITS 32
-#endif
-
-
-/* The SECTION_STRIP_P macro wants to call into libebl which we cannot
- do and do not have to do here. Provide a dummy replacement. */
-#define ebl_debugscn_p(ebl, name) true
-
-
-#define process_block(crc, data) \
- __libelf_crc32 (crc, data->d_buf, data->d_size)
-
-
-long int
-elfw2(LIBELFBITS,checksum) (elf)
- Elf *elf;
-{
- size_t shstrndx;
- Elf_Scn *scn;
- long int result = 0;
- unsigned char *ident;
- bool same_byte_order;
-
- if (elf == NULL)
- return -1l;
-
- /* Find the section header string table. */
- if (INTUSE(elf_getshstrndx) (elf, &shstrndx) < 0)
- {
- /* This can only happen if the ELF handle is not for real. */
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return -1l;
- }
-
- /* Determine whether the byte order of the file and that of the host
- is the same. */
- ident = elf->state.ELFW(elf,LIBELFBITS).ehdr->e_ident;
- same_byte_order = ((ident[EI_DATA] == ELFDATA2LSB
- && __BYTE_ORDER == __LITTLE_ENDIAN)
- || (ident[EI_DATA] == ELFDATA2MSB
- && __BYTE_ORDER == __BIG_ENDIAN));
-
- /* If we don't have native byte order, we will likely need to
- convert the data with xlate functions. We do it upfront instead
- of relocking mid-iteration. */
- if (!likely (same_byte_order))
- rwlock_wrlock (elf->lock);
- else
- rwlock_rdlock (elf->lock);
-
- /* Iterate over all sections to find those which are not strippable. */
- scn = NULL;
- while ((scn = INTUSE(elf_nextscn) (elf, scn)) != NULL)
- {
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr;
- Elf_Data *data;
-
- /* Get the section header. */
- shdr = INTUSE(gelf_getshdr) (scn, &shdr_mem);
- if (shdr == NULL)
- {
- __libelf_seterrno (ELF_E_INVALID_SECTION_HEADER);
- result = -1l;
- goto out;
- }
-
- if (SECTION_STRIP_P (shdr,
- INTUSE(elf_strptr) (elf, shstrndx, shdr->sh_name),
- true))
- /* The section can be stripped. Don't use it. */
- continue;
-
- /* Do not look at NOBITS sections. */
- if (shdr->sh_type == SHT_NOBITS)
- continue;
-
- /* To compute the checksum we need to get to the data. For
- repeatable results we must use the external format. The data
- we get with 'elf'getdata' might be changed for endianess
- reasons. Therefore we use 'elf_rawdata' if possible. But
- this function can fail if the data was constructed by the
- program. In this case we have to use 'elf_getdata' and
- eventually convert the data to the external format. */
- data = INTUSE(elf_rawdata) (scn, NULL);
- if (data != NULL)
- {
- /* The raw data is available. */
- result = process_block (result, data);
-
- /* Maybe the user added more data. These blocks cannot be
- read using 'elf_rawdata'. Simply proceed with looking
- for more data block with 'elf_getdata'. */
- }
-
- /* Iterate through the list of data blocks. */
- while ((data = INTUSE(elf_getdata) (scn, data)) != NULL)
- /* If the file byte order is the same as the host byte order
- process the buffer directly. If the data is just a stream
- of bytes which the library will not convert we can use it
- as well. */
- if (likely (same_byte_order) || data->d_type == ELF_T_BYTE)
- result = process_block (result, data);
- else
- {
- /* Convert the data to file byte order. */
- if (INTUSE(elfw2(LIBELFBITS,xlatetof)) (data, data, ident[EI_DATA])
- == NULL)
- {
- result = -1l;
- goto out;
- }
-
- result = process_block (result, data);
-
- /* And convert it back. */
- if (INTUSE(elfw2(LIBELFBITS,xlatetom)) (data, data, ident[EI_DATA])
- == NULL)
- {
- result = -1l;
- goto out;
- }
- }
- }
-
- out:
- rwlock_unlock (elf->lock);
- return result;
-}
-INTDEF(elfw2(LIBELFBITS,checksum))
diff --git a/libelf/elf32_fsize.c b/libelf/elf32_fsize.c
deleted file mode 100644
index f8be6f8..0000000
--- a/libelf/elf32_fsize.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/* Return the size of an object file type.
- Copyright (C) 1998, 1999, 2000, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libelf.h>
-#include "libelfP.h"
-
-#ifndef LIBELFBITS
-# define LIBELFBITS 32
-#endif
-
-
-size_t
-elfw2(LIBELFBITS, fsize) (type, count, version)
- Elf_Type type;
- size_t count;
- unsigned int version;
-{
- /* We do not have differences between file and memory sizes. Better
- not since otherwise `mmap' would not work. */
- if (unlikely (version == EV_NONE) || unlikely (version >= EV_NUM))
- {
- __libelf_seterrno (ELF_E_UNKNOWN_VERSION);
- return 0;
- }
-
- if (unlikely (type >= ELF_T_NUM))
- {
- __libelf_seterrno (ELF_E_UNKNOWN_TYPE);
- return 0;
- }
-
-#if EV_NUM != 2
- return (count
- * __libelf_type_sizes[version - 1][ELFW(ELFCLASS,LIBELFBITS) - 1][type]);
-#else
- return (count
- * __libelf_type_sizes[0][ELFW(ELFCLASS,LIBELFBITS) - 1][type]);
-#endif
-}
-/* ANDROID_CHANGE_BEGIN */
-#ifndef __APPLE__
-#define local_strong_alias(n1, n2) strong_alias (n1, n2)
-local_strong_alias (elfw2(LIBELFBITS, fsize), __elfw2(LIBELFBITS, msize))
-#endif
-/* ANDROID_CHANGE_END */
diff --git a/libelf/elf32_getehdr.c b/libelf/elf32_getehdr.c
deleted file mode 100644
index 8009133..0000000
--- a/libelf/elf32_getehdr.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/* Get ELF header.
- Copyright (C) 1998, 1999, 2000, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libelf.h>
-#include <stddef.h>
-
-#include "libelfP.h"
-
-#ifndef LIBELFBITS
-# define LIBELFBITS 32
-#endif
-
-
-static ElfW2(LIBELFBITS,Ehdr) *
-getehdr_impl (elf, wrlock)
- Elf *elf;
- int wrlock;
-{
- if (elf == NULL)
- return NULL;
-
- if (unlikely (elf->kind != ELF_K_ELF))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return NULL;
- }
-
- again:
- if (elf->class == 0)
- {
- if (!wrlock)
- {
- rwlock_unlock (elf->lock);
- rwlock_wrlock (elf->lock);
- wrlock = 1;
- goto again;
- }
- elf->class = ELFW(ELFCLASS,LIBELFBITS);
- }
- else if (unlikely (elf->class != ELFW(ELFCLASS,LIBELFBITS)))
- {
- __libelf_seterrno (ELF_E_INVALID_CLASS);
- return NULL;
- }
-
- return elf->state.ELFW(elf,LIBELFBITS).ehdr;
-}
-
-ElfW2(LIBELFBITS,Ehdr) *
-__elfw2(LIBELFBITS,getehdr_wrlock) (elf)
- Elf *elf;
-{
- return getehdr_impl (elf, 1);
-}
-
-ElfW2(LIBELFBITS,Ehdr) *
-elfw2(LIBELFBITS,getehdr) (elf)
- Elf *elf;
-{
- ElfW2(LIBELFBITS,Ehdr) *result;
- if (elf == NULL)
- return NULL;
-
- rwlock_rdlock (elf->lock);
- result = getehdr_impl (elf, 0);
- rwlock_unlock (elf->lock);
-
- return result;
-}
diff --git a/libelf/elf32_getphdr.c b/libelf/elf32_getphdr.c
deleted file mode 100644
index c32c282..0000000
--- a/libelf/elf32_getphdr.c
+++ /dev/null
@@ -1,257 +0,0 @@
-/* Get ELF program header table.
- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <errno.h>
-#include <stdbool.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <assert.h>
-
-#include <system.h>
-#include "libelfP.h"
-#include "common.h"
-
-#ifndef LIBELFBITS
-# define LIBELFBITS 32
-#endif
-
-ElfW2(LIBELFBITS,Phdr) *
-__elfw2(LIBELFBITS,getphdr_wrlock) (elf)
- Elf *elf;
-{
- ElfW2(LIBELFBITS,Phdr) *result;
-
- /* If the program header entry has already been filled in the code
- below must already have been run. So the class is set, too. No
- need to waste any more time here. */
- result = elf->state.ELFW(elf,LIBELFBITS).phdr;
- if (likely (result != NULL))
- return result;
-
- if (elf->class == 0)
- elf->class = ELFW(ELFCLASS,LIBELFBITS);
- else if (elf->class != ELFW(ELFCLASS,LIBELFBITS))
- {
- __libelf_seterrno (ELF_E_INVALID_CLASS);
- result = NULL;
- goto out;
- }
-
- if (likely (result == NULL))
- {
- /* Read the section header table. */
- ElfW2(LIBELFBITS,Ehdr) *ehdr = elf->state.ELFW(elf,LIBELFBITS).ehdr;
-
- /* If no program header exists return NULL. */
- size_t phnum = ehdr->e_phnum;
- if (phnum == 0)
- {
- __libelf_seterrno (ELF_E_NO_PHDR);
- goto out;
- }
-
- size_t size = phnum * sizeof (ElfW2(LIBELFBITS,Phdr));
-
- if (elf->map_address != NULL)
- {
- /* All the data is already mapped. Use it. */
- void *file_phdr = ((char *) elf->map_address
- + elf->start_offset + ehdr->e_phoff);
- if (ehdr->e_ident[EI_DATA] == MY_ELFDATA
- && (ALLOW_UNALIGNED
- || ((uintptr_t) file_phdr
- & (__alignof__ (ElfW2(LIBELFBITS,Phdr)) - 1)) == 0))
- /* Simply use the mapped data. */
- elf->state.ELFW(elf,LIBELFBITS).phdr = file_phdr;
- else
- {
- ElfW2(LIBELFBITS,Phdr) *notcvt;
- ElfW2(LIBELFBITS,Phdr) *phdr;
-
- /* Allocate memory for the program headers. We know the number
- of entries from the ELF header. */
- phdr = elf->state.ELFW(elf,LIBELFBITS).phdr =
- (ElfW2(LIBELFBITS,Phdr) *) malloc (size);
- if (elf->state.ELFW(elf,LIBELFBITS).phdr == NULL)
- {
- __libelf_seterrno (ELF_E_NOMEM);
- goto out;
- }
- elf->state.ELFW(elf,LIBELFBITS).phdr_flags |=
- ELF_F_MALLOCED | ELF_F_DIRTY;
-
- /* Now copy the data and at the same time convert the
- byte order. */
-
- if (ehdr->e_ident[EI_DATA] == MY_ELFDATA)
- {
- assert (! ALLOW_UNALIGNED);
- memcpy (phdr, file_phdr, size);
- }
- else
- {
- if (ALLOW_UNALIGNED
- || ((uintptr_t) file_phdr
- & (__alignof__ (ElfW2(LIBELFBITS,Phdr)) - 1)) == 0)
- notcvt = file_phdr;
- else
- {
- notcvt = (ElfW2(LIBELFBITS,Phdr) *) alloca (size);
- memcpy (notcvt, file_phdr, size);
- }
-
- for (size_t cnt = 0; cnt < phnum; ++cnt)
- {
- CONVERT_TO (phdr[cnt].p_type, notcvt[cnt].p_type);
- CONVERT_TO (phdr[cnt].p_offset, notcvt[cnt].p_offset);
- CONVERT_TO (phdr[cnt].p_vaddr, notcvt[cnt].p_vaddr);
- CONVERT_TO (phdr[cnt].p_paddr, notcvt[cnt].p_paddr);
- CONVERT_TO (phdr[cnt].p_filesz, notcvt[cnt].p_filesz);
- CONVERT_TO (phdr[cnt].p_memsz, notcvt[cnt].p_memsz);
- CONVERT_TO (phdr[cnt].p_flags, notcvt[cnt].p_flags);
- CONVERT_TO (phdr[cnt].p_align, notcvt[cnt].p_align);
- }
- }
- }
- }
- else if (likely (elf->fildes != -1))
- {
- /* Allocate memory for the program headers. We know the number
- of entries from the ELF header. */
- elf->state.ELFW(elf,LIBELFBITS).phdr =
- (ElfW2(LIBELFBITS,Phdr) *) malloc (size);
- if (elf->state.ELFW(elf,LIBELFBITS).phdr == NULL)
- {
- __libelf_seterrno (ELF_E_NOMEM);
- goto out;
- }
- elf->state.ELFW(elf,LIBELFBITS).phdr_flags |= ELF_F_MALLOCED;
-
- /* Read the header. */
- ssize_t n = pread_retry (elf->fildes,
- elf->state.ELFW(elf,LIBELFBITS).phdr, size,
- elf->start_offset + ehdr->e_phoff);
- if (unlikely ((size_t) n != size))
- {
- /* Severe problems. We cannot read the data. */
- __libelf_seterrno (ELF_E_READ_ERROR);
- free (elf->state.ELFW(elf,LIBELFBITS).phdr);
- elf->state.ELFW(elf,LIBELFBITS).phdr = NULL;
- goto out;
- }
-
- /* If the byte order of the file is not the same as the one
- of the host convert the data now. */
- if (ehdr->e_ident[EI_DATA] != MY_ELFDATA)
- {
- ElfW2(LIBELFBITS,Phdr) *phdr
- = elf->state.ELFW(elf,LIBELFBITS).phdr;
-
- for (size_t cnt = 0; cnt < phnum; ++cnt)
- {
- CONVERT (phdr[cnt].p_type);
- CONVERT (phdr[cnt].p_offset);
- CONVERT (phdr[cnt].p_vaddr);
- CONVERT (phdr[cnt].p_paddr);
- CONVERT (phdr[cnt].p_filesz);
- CONVERT (phdr[cnt].p_memsz);
- CONVERT (phdr[cnt].p_flags);
- CONVERT (phdr[cnt].p_align);
- }
- }
- }
- else
- {
- /* The file descriptor was already enabled and not all data was
- read. */
- __libelf_seterrno (ELF_E_FD_DISABLED);
- goto out;
- }
-
- result = elf->state.ELFW(elf,LIBELFBITS).phdr;
- }
-
- out:
- return result;
-}
-
-ElfW2(LIBELFBITS,Phdr) *
-elfw2(LIBELFBITS,getphdr) (elf)
- Elf *elf;
-{
- ElfW2(LIBELFBITS,Phdr) *result;
-
- if (elf == NULL)
- return NULL;
-
- if (unlikely (elf->kind != ELF_K_ELF))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return NULL;
- }
-
- /* If the program header entry has already been filled in the code
- * in getphdr_wrlock must already have been run. So the class is
- * set, too. No need to waste any more time here. */
- result = elf->state.ELFW(elf,LIBELFBITS).phdr;
- if (likely (result != NULL))
- return result;
-
- rwlock_wrlock (elf->lock);
- result = __elfw2(LIBELFBITS,getphdr_wrlock) (elf);
- rwlock_unlock (elf->lock);
-
- return result;
-}
-INTDEF(elfw2(LIBELFBITS,getphdr))
diff --git a/libelf/elf32_getshdr.c b/libelf/elf32_getshdr.c
deleted file mode 100644
index 91f5b3a..0000000
--- a/libelf/elf32_getshdr.c
+++ /dev/null
@@ -1,294 +0,0 @@
-/* Return section header.
- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2005, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <errno.h>
-#include <stdbool.h>
-#include <unistd.h>
-
-#include <system.h>
-#include "libelfP.h"
-#include "common.h"
-
-#ifndef LIBELFBITS
-# define LIBELFBITS 32
-#endif
-
-
-static ElfW2(LIBELFBITS,Shdr) *
-load_shdr_wrlock (Elf_Scn *scn)
-{
- ElfW2(LIBELFBITS,Shdr) *result;
-
- /* Read the section header table. */
- Elf *elf = scn->elf;
- ElfW2(LIBELFBITS,Ehdr) *ehdr = elf->state.ELFW(elf,LIBELFBITS).ehdr;
-
- /* Try again, maybe the data is there now. */
- result = scn->shdr.ELFW(e,LIBELFBITS);
- if (result != NULL)
- goto out;
-
- size_t shnum;
- if (__elf_getshnum_rdlock (elf, &shnum) != 0)
- goto out;
- size_t size = shnum * sizeof (ElfW2(LIBELFBITS,Shdr));
-
- /* Allocate memory for the section headers. We know the number
- of entries from the ELF header. */
- ElfW2(LIBELFBITS,Shdr) *shdr = elf->state.ELFW(elf,LIBELFBITS).shdr =
- (ElfW2(LIBELFBITS,Shdr) *) malloc (size);
- if (elf->state.ELFW(elf,LIBELFBITS).shdr == NULL)
- {
- __libelf_seterrno (ELF_E_NOMEM);
- goto out;
- }
- elf->state.ELFW(elf,LIBELFBITS).shdr_malloced = 1;
-
- if (elf->map_address != NULL)
- {
- ElfW2(LIBELFBITS,Shdr) *notcvt;
-
- /* All the data is already mapped. If we could use it
- directly this would already have happened. */
- void *file_shdr = ((char *) elf->map_address
- + elf->start_offset + ehdr->e_shoff);
-
- assert (ehdr->e_ident[EI_DATA] != MY_ELFDATA
- || (! ALLOW_UNALIGNED
- && ((uintptr_t) file_shdr
- & (__alignof__ (ElfW2(LIBELFBITS,Shdr)) - 1)) != 0));
-
- /* Now copy the data and at the same time convert the byte order. */
- if (ehdr->e_ident[EI_DATA] == MY_ELFDATA)
- {
- assert (! ALLOW_UNALIGNED);
- memcpy (shdr, file_shdr, size);
- }
- else
- {
- if (ALLOW_UNALIGNED
- || ((uintptr_t) file_shdr
- & (__alignof__ (ElfW2(LIBELFBITS,Shdr)) - 1)) == 0)
- notcvt = (ElfW2(LIBELFBITS,Shdr) *)
- ((char *) elf->map_address
- + elf->start_offset + ehdr->e_shoff);
- else
- {
- notcvt = (ElfW2(LIBELFBITS,Shdr) *) alloca (size);
- memcpy (notcvt, ((char *) elf->map_address
- + elf->start_offset + ehdr->e_shoff),
- size);
- }
-
- for (size_t cnt = 0; cnt < shnum; ++cnt)
- {
- CONVERT_TO (shdr[cnt].sh_name, notcvt[cnt].sh_name);
- CONVERT_TO (shdr[cnt].sh_type, notcvt[cnt].sh_type);
- CONVERT_TO (shdr[cnt].sh_flags, notcvt[cnt].sh_flags);
- CONVERT_TO (shdr[cnt].sh_addr, notcvt[cnt].sh_addr);
- CONVERT_TO (shdr[cnt].sh_offset, notcvt[cnt].sh_offset);
- CONVERT_TO (shdr[cnt].sh_size, notcvt[cnt].sh_size);
- CONVERT_TO (shdr[cnt].sh_link, notcvt[cnt].sh_link);
- CONVERT_TO (shdr[cnt].sh_info, notcvt[cnt].sh_info);
- CONVERT_TO (shdr[cnt].sh_addralign,
- notcvt[cnt].sh_addralign);
- CONVERT_TO (shdr[cnt].sh_entsize, notcvt[cnt].sh_entsize);
-
- /* If this is a section with an extended index add a
- reference in the section which uses the extended
- index. */
- if (shdr[cnt].sh_type == SHT_SYMTAB_SHNDX
- && shdr[cnt].sh_link < shnum)
- elf->state.ELFW(elf,LIBELFBITS).scns.data[shdr[cnt].sh_link].shndx_index
- = cnt;
-
- /* Set the own shndx_index field in case it has not yet
- been set. */
- if (elf->state.ELFW(elf,LIBELFBITS).scns.data[cnt].shndx_index == 0)
- elf->state.ELFW(elf,LIBELFBITS).scns.data[cnt].shndx_index
- = -1;
- }
- }
- }
- else if (likely (elf->fildes != -1))
- {
- /* Read the header. */
- ssize_t n = pread_retry (elf->fildes,
- elf->state.ELFW(elf,LIBELFBITS).shdr, size,
- elf->start_offset + ehdr->e_shoff);
- if (unlikely ((size_t) n != size))
- {
- /* Severe problems. We cannot read the data. */
- __libelf_seterrno (ELF_E_READ_ERROR);
- goto free_and_out;
- }
-
- /* If the byte order of the file is not the same as the one
- of the host convert the data now. */
- if (ehdr->e_ident[EI_DATA] != MY_ELFDATA)
- for (size_t cnt = 0; cnt < shnum; ++cnt)
- {
- CONVERT (shdr[cnt].sh_name);
- CONVERT (shdr[cnt].sh_type);
- CONVERT (shdr[cnt].sh_flags);
- CONVERT (shdr[cnt].sh_addr);
- CONVERT (shdr[cnt].sh_offset);
- CONVERT (shdr[cnt].sh_size);
- CONVERT (shdr[cnt].sh_link);
- CONVERT (shdr[cnt].sh_info);
- CONVERT (shdr[cnt].sh_addralign);
- CONVERT (shdr[cnt].sh_entsize);
- }
- }
- else
- {
- /* The file descriptor was already enabled and not all data was
- read. Undo the allocation. */
- __libelf_seterrno (ELF_E_FD_DISABLED);
-
- free_and_out:
- free (shdr);
- elf->state.ELFW(elf,LIBELFBITS).shdr = NULL;
- elf->state.ELFW(elf,LIBELFBITS).shdr_malloced = 0;
-
- goto out;
- }
-
- /* Set the pointers in the `scn's. */
- for (size_t cnt = 0; cnt < shnum; ++cnt)
- elf->state.ELFW(elf,LIBELFBITS).scns.data[cnt].shdr.ELFW(e,LIBELFBITS)
- = &elf->state.ELFW(elf,LIBELFBITS).shdr[cnt];
-
- result = scn->shdr.ELFW(e,LIBELFBITS);
- assert (result != NULL);
-
-out:
- return result;
-}
-
-static bool
-scn_valid (Elf_Scn *scn)
-{
- if (scn == NULL)
- return false;
-
- if (unlikely (scn->elf->state.elf.ehdr == NULL))
- {
- __libelf_seterrno (ELF_E_WRONG_ORDER_EHDR);
- return false;
- }
-
- if (unlikely (scn->elf->class != ELFW(ELFCLASS,LIBELFBITS)))
- {
- __libelf_seterrno (ELF_E_INVALID_CLASS);
- return false;
- }
-
- return true;
-}
-
-ElfW2(LIBELFBITS,Shdr) *
-__elfw2(LIBELFBITS,getshdr_rdlock) (scn)
- Elf_Scn *scn;
-{
- ElfW2(LIBELFBITS,Shdr) *result;
-
- if (!scn_valid (scn))
- return NULL;
-
- result = scn->shdr.ELFW(e,LIBELFBITS);
- if (result == NULL)
- {
- rwlock_unlock (scn->elf->lock);
- rwlock_wrlock (scn->elf->lock);
- result = scn->shdr.ELFW(e,LIBELFBITS);
- if (result == NULL)
- result = load_shdr_wrlock (scn);
- }
-
- return result;
-}
-
-ElfW2(LIBELFBITS,Shdr) *
-__elfw2(LIBELFBITS,getshdr_wrlock) (scn)
- Elf_Scn *scn;
-{
- ElfW2(LIBELFBITS,Shdr) *result;
-
- if (!scn_valid (scn))
- return NULL;
-
- result = scn->shdr.ELFW(e,LIBELFBITS);
- if (result == NULL)
- result = load_shdr_wrlock (scn);
-
- return result;
-}
-
-ElfW2(LIBELFBITS,Shdr) *
-elfw2(LIBELFBITS,getshdr) (scn)
- Elf_Scn *scn;
-{
- ElfW2(LIBELFBITS,Shdr) *result;
-
- if (!scn_valid (scn))
- return NULL;
-
- rwlock_rdlock (scn->elf->lock);
- result = __elfw2(LIBELFBITS,getshdr_rdlock) (scn);
- rwlock_unlock (scn->elf->lock);
-
- return result;
-}
diff --git a/libelf/elf32_newehdr.c b/libelf/elf32_newehdr.c
deleted file mode 100644
index 4e20056..0000000
--- a/libelf/elf32_newehdr.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/* Create new ELF header.
- Copyright (C) 1998, 1999, 2000, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-#ifndef LIBELFBITS
-# define LIBELFBITS 32
-#endif
-
-
-ElfW2(LIBELFBITS,Ehdr) *
-elfw2(LIBELFBITS,newehdr) (elf)
- Elf *elf;
-{
- ElfW2(LIBELFBITS,Ehdr) *result;
-
- if (elf == NULL)
- return NULL;
-
- if (unlikely (elf->kind != ELF_K_ELF))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return NULL;
- }
-
- rwlock_wrlock (elf->lock);
-
- if (elf->class == 0)
- elf->class = ELFW(ELFCLASS,LIBELFBITS);
- else if (unlikely (elf->class != ELFW(ELFCLASS,LIBELFBITS)))
- {
- __libelf_seterrno (ELF_E_INVALID_CLASS);
- result = NULL;
- goto out;
- }
-
- /* Don't create an ELF header if one already exists. */
- if (elf->state.ELFW(elf,LIBELFBITS).ehdr == NULL)
- {
- /* We use the memory in the ELF descriptor. */
- elf->state.ELFW(elf,LIBELFBITS).ehdr =
- &elf->state.ELFW(elf,LIBELFBITS).ehdr_mem;
-
- /* We clear this memory. */
- memset (elf->state.ELFW(elf,LIBELFBITS).ehdr, '\0',
- sizeof (ElfW2(LIBELFBITS,Ehdr)));
-
- /* Mark the ELF header has modified. */
- elf->state.ELFW(elf,LIBELFBITS).ehdr_flags |= ELF_F_DIRTY;
- }
-
- result = elf->state.ELFW(elf,LIBELFBITS).ehdr;
-
- out:
- rwlock_unlock (elf->lock);
-
- return result;
-}
-INTDEF(elfw2(LIBELFBITS,newehdr))
diff --git a/libelf/elf32_newphdr.c b/libelf/elf32_newphdr.c
deleted file mode 100644
index d1b1608..0000000
--- a/libelf/elf32_newphdr.c
+++ /dev/null
@@ -1,171 +0,0 @@
-/* Create new ELF program header table.
- Copyright (C) 1999, 2000, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-#ifndef LIBELFBITS
-# define LIBELFBITS 32
-#endif
-
-
-ElfW2(LIBELFBITS,Phdr) *
-elfw2(LIBELFBITS,newphdr) (elf, count)
- Elf *elf;
- size_t count;
-{
- ElfW2(LIBELFBITS,Phdr) *result;
-
- if (elf == NULL)
- return NULL;
-
- if (unlikely (elf->kind != ELF_K_ELF))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return NULL;
- }
-
- rwlock_wrlock (elf->lock);
-
- if (elf->class == 0)
- elf->class = ELFW(ELFCLASS,LIBELFBITS);
- else if (unlikely (elf->class != ELFW(ELFCLASS,LIBELFBITS)))
- {
- __libelf_seterrno (ELF_E_INVALID_CLASS);
- result = NULL;
- goto out;
- }
-
- if (unlikely (elf->state.ELFW(elf,LIBELFBITS).ehdr == NULL))
- {
- __libelf_seterrno (ELF_E_WRONG_ORDER_EHDR);
- result = NULL;
- goto out;
- }
-
- /* A COUNT of zero means remove existing table. */
- if (count == 0)
- {
- /* Free the old program header. */
- if (elf->state.ELFW(elf,LIBELFBITS).phdr != NULL)
- {
- if (elf->state.ELFW(elf,LIBELFBITS).phdr_flags & ELF_F_MALLOCED)
- free (elf->state.ELFW(elf,LIBELFBITS).phdr);
-
- /* Set the pointer to NULL. */
- elf->state.ELFW(elf,LIBELFBITS).phdr = NULL;
- /* Set the `e_phnum' member to the new value. */
- elf->state.ELFW(elf,LIBELFBITS).ehdr->e_phnum = 0;
- /* Also set the size. */
- elf->state.ELFW(elf,LIBELFBITS).ehdr->e_phentsize =
- sizeof (ElfW2(LIBELFBITS,Phdr));
-
- elf->state.ELFW(elf,LIBELFBITS).phdr_flags |= ELF_F_DIRTY;
- elf->flags |= ELF_F_DIRTY;
- __libelf_seterrno (ELF_E_NOERROR);
- }
-
- result = NULL;
- }
- else if (elf->state.ELFW(elf,LIBELFBITS).ehdr->e_phnum != count
- || elf->state.ELFW(elf,LIBELFBITS).phdr == NULL)
- {
- /* Allocate a new program header with the appropriate number of
- elements. */
- result = (ElfW2(LIBELFBITS,Phdr) *)
- realloc (elf->state.ELFW(elf,LIBELFBITS).phdr,
- count * sizeof (ElfW2(LIBELFBITS,Phdr)));
- if (result == NULL)
- __libelf_seterrno (ELF_E_NOMEM);
- else
- {
- /* Now set the result. */
- elf->state.ELFW(elf,LIBELFBITS).phdr = result;
- /* Clear the whole memory. */
- memset (result, '\0', count * sizeof (ElfW2(LIBELFBITS,Phdr)));
- /* Set the `e_phnum' member to the new value. */
- elf->state.ELFW(elf,LIBELFBITS).ehdr->e_phnum = count;
- /* Also set the size. */
- elf->state.ELFW(elf,LIBELFBITS).ehdr->e_phentsize =
- elf_typesize (LIBELFBITS, ELF_T_PHDR, 1);
- /* Remember we allocated the array and mark the structure is
- modified. */
- elf->state.ELFW(elf,LIBELFBITS).phdr_flags |=
- ELF_F_DIRTY | ELF_F_MALLOCED;
- /* We have to rewrite the entire file if the size of the
- program header is changed. */
- elf->flags |= ELF_F_DIRTY;
- }
- }
- else
- {
- /* We have the same number of entries. Just clear the array. */
- assert (elf->state.ELFW(elf,LIBELFBITS).ehdr->e_phentsize
- == elf_typesize (LIBELFBITS, ELF_T_PHDR, 1));
-
- /* Mark the structure as modified. */
- elf->state.ELFW(elf,LIBELFBITS).phdr_flags |= ELF_F_DIRTY;
-
- result = elf->state.ELFW(elf,LIBELFBITS).phdr;
- }
-
- out:
- rwlock_unlock (elf->lock);
-
- return result;
-}
-INTDEF(elfw2(LIBELFBITS,newphdr))
diff --git a/libelf/elf32_offscn.c b/libelf/elf32_offscn.c
deleted file mode 100644
index 86eff8b..0000000
--- a/libelf/elf32_offscn.c
+++ /dev/null
@@ -1,121 +0,0 @@
-/* Get section at specific index.
- Copyright (C) 2005, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2005.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <stddef.h>
-#include <stdlib.h>
-
-#include "libelfP.h"
-
-#ifndef LIBELFBITS
-# define LIBELFBITS 32
-#endif
-
-
-Elf_Scn *
-elfw2(LIBELFBITS,offscn) (elf, offset)
- Elf *elf;
- ElfW2(LIBELFBITS,Off) offset;
-{
- if (elf == NULL)
- return NULL;
-
- if (unlikely (elf->kind != ELF_K_ELF))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return NULL;
- }
-
- Elf_ScnList *runp = &elf->state.ELFW(elf,LIBELFBITS).scns;
-
- /* If we have not looked at section headers before,
- we might need to read them in first. */
- if (runp->cnt > 0
- && unlikely (runp->data[0].shdr.ELFW(e,LIBELFBITS) == NULL)
- && unlikely (elfw2(LIBELFBITS,getshdr) (&runp->data[0]) == NULL))
- return NULL;
-
- rwlock_rdlock (elf->lock);
-
- Elf_Scn *result = NULL;
-
- /* Find the section in the list. */
- while (1)
- {
- for (unsigned int i = 0; i < runp->cnt; ++i)
- if (runp->data[i].shdr.ELFW(e,LIBELFBITS)->sh_offset == offset)
- {
- result = &runp->data[i];
-
- /* If this section is empty, the following one has the same
- sh_offset. We presume the caller is looking for a nonempty
- section, so keep looking if this one is empty. */
- if (runp->data[i].shdr.ELFW(e,LIBELFBITS)->sh_size != 0)
- goto out;
- }
-
- runp = runp->next;
- if (runp == NULL)
- {
- __libelf_seterrno (ELF_E_INVALID_OFFSET);
- break;
- }
- }
-
- out:
- rwlock_unlock (elf->lock);
-
- return result;
-}
-INTDEF(elfw2(LIBELFBITS,offscn))
diff --git a/libelf/elf32_updatefile.c b/libelf/elf32_updatefile.c
deleted file mode 100644
index e88f4a4..0000000
--- a/libelf/elf32_updatefile.c
+++ /dev/null
@@ -1,738 +0,0 @@
-/* Write changed data structures.
- Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <errno.h>
-#include <libelf.h>
-#include <stdbool.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/mman.h>
-#include <sys/param.h>
-
-#include <system.h>
-#include "libelfP.h"
-
-
-#ifndef LIBELFBITS
-# define LIBELFBITS 32
-#endif
-
-
-static int
-compare_sections (const void *a, const void *b)
-{
- const Elf_Scn **scna = (const Elf_Scn **) a;
- const Elf_Scn **scnb = (const Elf_Scn **) b;
-
- if ((*scna)->shdr.ELFW(e,LIBELFBITS)->sh_offset
- < (*scnb)->shdr.ELFW(e,LIBELFBITS)->sh_offset)
- return -1;
-
- if ((*scna)->shdr.ELFW(e,LIBELFBITS)->sh_offset
- > (*scnb)->shdr.ELFW(e,LIBELFBITS)->sh_offset)
- return 1;
-
- if ((*scna)->shdr.ELFW(e,LIBELFBITS)->sh_size
- < (*scnb)->shdr.ELFW(e,LIBELFBITS)->sh_size)
- return -1;
-
- if ((*scna)->shdr.ELFW(e,LIBELFBITS)->sh_size
- > (*scnb)->shdr.ELFW(e,LIBELFBITS)->sh_size)
- return 1;
-
- if ((*scna)->index < (*scnb)->index)
- return -1;
-
- if ((*scna)->index > (*scnb)->index)
- return 1;
-
- return 0;
-}
-
-
-/* Insert the sections in the list into the provided array and sort
- them according to their start offsets. For sections with equal
- start offsets, the size is used; for sections with equal start
- offsets and sizes, the section index is used. Sorting by size
- ensures that zero-length sections are processed first, which
- is what we want since they do not advance our file writing position. */
-static void
-sort_sections (Elf_Scn **scns, Elf_ScnList *list)
-{
- Elf_Scn **scnp = scns;
- do
- for (size_t cnt = 0; cnt < list->cnt; ++cnt)
- *scnp++ = &list->data[cnt];
- while ((list = list->next) != NULL);
-
- qsort (scns, scnp - scns, sizeof (*scns), compare_sections);
-}
-
-
-int
-internal_function
-__elfw2(LIBELFBITS,updatemmap) (Elf *elf, int change_bo, size_t shnum)
-{
- ElfW2(LIBELFBITS,Ehdr) *ehdr;
- char *last_position;
-
- /* We need the ELF header several times. */
- ehdr = elf->state.ELFW(elf,LIBELFBITS).ehdr;
-
- /* Write out the ELF header. */
- if ((elf->state.ELFW(elf,LIBELFBITS).ehdr_flags | elf->flags) & ELF_F_DIRTY)
- {
- /* If the type sizes should be different at some time we have to
- rewrite this code. */
- assert (sizeof (ElfW2(LIBELFBITS,Ehdr))
- == elf_typesize (LIBELFBITS, ELF_T_EHDR, 1));
-
- if (unlikely (change_bo))
- {
- /* Today there is only one version of the ELF header. */
-#if EV_NUM != 2
- xfct_t fctp;
- fctp = __elf_xfctstom[__libelf_version - 1][EV_CURRENT - 1][ELFW(ELFCLASS, LIBELFBITS) - 1][ELF_T_EHDR];
-#else
-# undef fctp
-# define fctp __elf_xfctstom[0][EV_CURRENT - 1][ELFW(ELFCLASS, LIBELFBITS) - 1][ELF_T_EHDR]
-#endif
-
- /* Do the real work. */
- (*fctp) ((char *) elf->map_address + elf->start_offset, ehdr,
- sizeof (ElfW2(LIBELFBITS,Ehdr)), 1);
- }
- else
- memcpy (elf->map_address + elf->start_offset, ehdr,
- sizeof (ElfW2(LIBELFBITS,Ehdr)));
-
- elf->state.ELFW(elf,LIBELFBITS).ehdr_flags &= ~ELF_F_DIRTY;
- }
-
- /* Write out the program header table. */
- if (elf->state.ELFW(elf,LIBELFBITS).phdr != NULL
- && ((elf->state.ELFW(elf,LIBELFBITS).phdr_flags | elf->flags)
- & ELF_F_DIRTY))
- {
- /* If the type sizes should be different at some time we have to
- rewrite this code. */
- assert (sizeof (ElfW2(LIBELFBITS,Phdr))
- == elf_typesize (LIBELFBITS, ELF_T_PHDR, 1));
-
- /* Maybe the user wants a gap between the ELF header and the program
- header. */
- if (ehdr->e_phoff > ehdr->e_ehsize)
- memset (elf->map_address + elf->start_offset + ehdr->e_ehsize,
- __libelf_fill_byte, ehdr->e_phoff - ehdr->e_ehsize);
-
- if (unlikely (change_bo))
- {
- /* Today there is only one version of the ELF header. */
-#if EV_NUM != 2
- xfct_t fctp;
- fctp = __elf_xfctstom[__libelf_version - 1][EV_CURRENT - 1][ELFW(ELFCLASS, LIBELFBITS) - 1][ELF_T_PHDR];
-#else
-# undef fctp
-# define fctp __elf_xfctstom[0][EV_CURRENT - 1][ELFW(ELFCLASS, LIBELFBITS) - 1][ELF_T_PHDR]
-#endif
-
- /* Do the real work. */
- (*fctp) (elf->map_address + elf->start_offset + ehdr->e_phoff,
- elf->state.ELFW(elf,LIBELFBITS).phdr,
- sizeof (ElfW2(LIBELFBITS,Phdr)) * ehdr->e_phnum, 1);
- }
- else
- memcpy (elf->map_address + elf->start_offset + ehdr->e_phoff,
- elf->state.ELFW(elf,LIBELFBITS).phdr,
- sizeof (ElfW2(LIBELFBITS,Phdr)) * ehdr->e_phnum);
-
- elf->state.ELFW(elf,LIBELFBITS).phdr_flags &= ~ELF_F_DIRTY;
- }
-
- /* From now on we have to keep track of the last position to eventually
- fill the gaps with the prescribed fill byte. */
- last_position = ((char *) elf->map_address + elf->start_offset
- + MAX (elf_typesize (LIBELFBITS, ELF_T_EHDR, 1),
- ehdr->e_phoff)
- + elf_typesize (LIBELFBITS, ELF_T_PHDR, ehdr->e_phnum));
-
- /* Write all the sections. Well, only those which are modified. */
- if (shnum > 0)
- {
- Elf_ScnList *list = &elf->state.ELFW(elf,LIBELFBITS).scns;
- Elf_Scn **scns = (Elf_Scn **) alloca (shnum * sizeof (Elf_Scn *));
- char *const shdr_start = ((char *) elf->map_address + elf->start_offset
- + ehdr->e_shoff);
- char *const shdr_end = shdr_start + ehdr->e_shnum * ehdr->e_shentsize;
-
-#if EV_NUM != 2
- xfct_t shdr_fctp = __elf_xfctstom[__libelf_version - 1][EV_CURRENT - 1][ELFW(ELFCLASS, LIBELFBITS) - 1][ELF_T_SHDR];
-#else
-# undef shdr_fctp
-# define shdr_fctp __elf_xfctstom[0][EV_CURRENT - 1][ELFW(ELFCLASS, LIBELFBITS) - 1][ELF_T_SHDR]
-#endif
-#define shdr_dest ((ElfW2(LIBELFBITS,Shdr) *) shdr_start)
-
- /* Get all sections into the array and sort them. */
- sort_sections (scns, list);
-
- /* We possibly have to copy the section header data because moving
- the sections might overwrite the data. */
- for (size_t cnt = 0; cnt < shnum; ++cnt)
- {
- Elf_Scn *scn = scns[cnt];
-
- if (!elf->state.ELFW(elf,LIBELFBITS).shdr_malloced
- && (scn->shdr_flags & ELF_F_MALLOCED) == 0
- && scn->shdr.ELFW(e,LIBELFBITS) != &shdr_dest[scn->index])
- {
- assert ((char *) elf->map_address + elf->start_offset
- < (char *) scn->shdr.ELFW(e,LIBELFBITS));
- assert ((char *) scn->shdr.ELFW(e,LIBELFBITS)
- < ((char *) elf->map_address + elf->start_offset
- + elf->maximum_size));
-
- void *p = alloca (sizeof (ElfW2(LIBELFBITS,Shdr)));
- scn->shdr.ELFW(e,LIBELFBITS)
- = memcpy (p, scn->shdr.ELFW(e,LIBELFBITS),
- sizeof (ElfW2(LIBELFBITS,Shdr)));
- }
-
- /* If the file is mmaped and the original position of the
- section in the file is lower than the new position we
- need to save the section content since otherwise it is
- overwritten before it can be copied. If there are
- multiple data segments in the list only the first can be
- from the file. */
- if (((char *) elf->map_address + elf->start_offset
- <= (char *) scn->data_list.data.d.d_buf)
- && ((char *) scn->data_list.data.d.d_buf
- < ((char *) elf->map_address + elf->start_offset
- + elf->maximum_size))
- && (((char *) elf->map_address + elf->start_offset
- + scn->shdr.ELFW(e,LIBELFBITS)->sh_offset)
- > (char *) scn->data_list.data.d.d_buf))
- {
- void *p = malloc (scn->data_list.data.d.d_size);
- if (p == NULL)
- {
- __libelf_seterrno (ELF_E_NOMEM);
- return -1;
- }
- scn->data_list.data.d.d_buf = scn->data_base
- = memcpy (p, scn->data_list.data.d.d_buf,
- scn->data_list.data.d.d_size);
- }
- }
-
- /* Iterate over all the section in the order in which they
- appear in the output file. */
- for (size_t cnt = 0; cnt < shnum; ++cnt)
- {
- Elf_Scn *scn = scns[cnt];
-
- ElfW2(LIBELFBITS,Shdr) *shdr = scn->shdr.ELFW(e,LIBELFBITS);
-
- char *scn_start = ((char *) elf->map_address
- + elf->start_offset + shdr->sh_offset);
- Elf_Data_List *dl = &scn->data_list;
-
- if (shdr->sh_type != SHT_NOBITS && scn->data_list_rear != NULL)
- do
- {
- assert (dl->data.d.d_off >= 0);
- assert ((GElf_Off) dl->data.d.d_off <= shdr->sh_size);
- assert (dl->data.d.d_size <= (shdr->sh_size
- - (GElf_Off) dl->data.d.d_off));
-
- if ((scn->flags | dl->flags | elf->flags) & ELF_F_DIRTY)
- {
- if (scn_start + dl->data.d.d_off > last_position)
- {
- /* This code assumes that the data blocks for
- a section are ordered by offset. */
- size_t written = 0;
-
- if (last_position < shdr_start)
- {
- written = MIN (scn_start + dl->data.d.d_off
- - last_position,
- shdr_start - last_position);
-
- memset (last_position, __libelf_fill_byte,
- written);
- }
-
- if (last_position + written
- != scn_start + dl->data.d.d_off
- && shdr_end < scn_start + dl->data.d.d_off)
- memset (shdr_end, __libelf_fill_byte,
- scn_start + dl->data.d.d_off - shdr_end);
- }
-
- /* Let it go backward if the sections use a bogus
- layout with overlaps. We'll overwrite the stupid
- user's section data with the latest one, rather than
- crashing. */
-
- last_position = scn_start + dl->data.d.d_off;
-
- if (unlikely (change_bo))
- {
-#if EV_NUM != 2
- xfct_t fctp;
- fctp = __elf_xfctstom[__libelf_version - 1][dl->data.d.d_version - 1][ELFW(ELFCLASS, LIBELFBITS) - 1][dl->data.d.d_type];
-#else
-# undef fctp
-# define fctp __elf_xfctstom[0][EV_CURRENT - 1][ELFW(ELFCLASS, LIBELFBITS) - 1][dl->data.d.d_type]
-#endif
-
- /* Do the real work. */
- (*fctp) (last_position, dl->data.d.d_buf,
- dl->data.d.d_size, 1);
-
- last_position += dl->data.d.d_size;
- }
- else
- last_position = mempcpy (last_position,
- dl->data.d.d_buf,
- dl->data.d.d_size);
- }
- else
- last_position += dl->data.d.d_size;
-
- assert (scn_start + dl->data.d.d_off + dl->data.d.d_size
- == last_position);
-
- dl->flags &= ~ELF_F_DIRTY;
-
- dl = dl->next;
- }
- while (dl != NULL);
- else if (shdr->sh_type != SHT_NOBITS && scn->index != 0)
- /* We have to trust the existing section header information. */
- last_position += shdr->sh_size;
-
- scn->flags &= ~ELF_F_DIRTY;
- }
-
- /* Fill the gap between last section and section header table if
- necessary. */
- if ((elf->flags & ELF_F_DIRTY)
- && last_position < ((char *) elf->map_address + elf->start_offset
- + ehdr->e_shoff))
- memset (last_position, __libelf_fill_byte,
- (char *) elf->map_address + elf->start_offset + ehdr->e_shoff
- - last_position);
-
- /* Write the section header table entry if necessary. */
- for (size_t cnt = 0; cnt < shnum; ++cnt)
- {
- Elf_Scn *scn = scns[cnt];
-
- if ((scn->shdr_flags | elf->flags) & ELF_F_DIRTY)
- {
- if (unlikely (change_bo))
- (*shdr_fctp) (&shdr_dest[scn->index],
- scn->shdr.ELFW(e,LIBELFBITS),
- sizeof (ElfW2(LIBELFBITS,Shdr)), 1);
- else
- memcpy (&shdr_dest[scn->index],
- scn->shdr.ELFW(e,LIBELFBITS),
- sizeof (ElfW2(LIBELFBITS,Shdr)));
-
- /* If we previously made a copy of the section header
- entry we now have to adjust the pointer again so
- point to new place in the mapping. */
- if (!elf->state.ELFW(elf,LIBELFBITS).shdr_malloced
- && (scn->shdr_flags & ELF_F_MALLOCED) == 0)
- scn->shdr.ELFW(e,LIBELFBITS) = &shdr_dest[scn->index];
-
- scn->shdr_flags &= ~ELF_F_DIRTY;
- }
- }
- }
-
- /* That was the last part. Clear the overall flag. */
- elf->flags &= ~ELF_F_DIRTY;
-
- /* Make sure the content hits the disk. */
- char *msync_start = ((char *) elf->map_address
- + (elf->start_offset & ~(sysconf (_SC_PAGESIZE) - 1)));
- char *msync_end = ((char *) elf->map_address
- + elf->start_offset + ehdr->e_shoff
- + ehdr->e_shentsize * shnum);
- (void) msync (msync_start, msync_end - msync_start, MS_SYNC);
-
- return 0;
-}
-
-
-/* Size of the buffer we use to generate the blocks of fill bytes. */
-#define FILLBUFSIZE 4096
-
-/* If we have to convert the section buffer contents we have to use
- temporary buffer. Only buffers up to MAX_TMPBUF bytes are allocated
- on the stack. */
-#define MAX_TMPBUF 32768
-
-
-/* Helper function to write out fill bytes. */
-static int
-fill (int fd, off_t pos, size_t len, char *fillbuf, size_t *filledp)
-{
- size_t filled = *filledp;
- size_t fill_len = MIN (len, FILLBUFSIZE);
-
- if (unlikely (fill_len > filled) && filled < FILLBUFSIZE)
- {
- /* Initialize a few more bytes. */
- memset (fillbuf + filled, __libelf_fill_byte, fill_len - filled);
- *filledp = filled = fill_len;
- }
-
- do
- {
- /* This many bytes we want to write in this round. */
- size_t n = MIN (filled, len);
-
- if (unlikely ((size_t) pwrite_retry (fd, fillbuf, n, pos) != n))
- {
- __libelf_seterrno (ELF_E_WRITE_ERROR);
- return 1;
- }
-
- pos += n;
- len -= n;
- }
- while (len > 0);
-
- return 0;
-}
-
-
-int
-internal_function
-__elfw2(LIBELFBITS,updatefile) (Elf *elf, int change_bo, size_t shnum)
-{
- char fillbuf[FILLBUFSIZE];
- size_t filled = 0;
-
- /* We need the ELF header several times. */
- ElfW2(LIBELFBITS,Ehdr) *ehdr = elf->state.ELFW(elf,LIBELFBITS).ehdr;
-
- /* Write out the ELF header. */
- if ((elf->state.ELFW(elf,LIBELFBITS).ehdr_flags | elf->flags) & ELF_F_DIRTY)
- {
- ElfW2(LIBELFBITS,Ehdr) tmp_ehdr;
- ElfW2(LIBELFBITS,Ehdr) *out_ehdr = ehdr;
-
- /* If the type sizes should be different at some time we have to
- rewrite this code. */
- assert (sizeof (ElfW2(LIBELFBITS,Ehdr))
- == elf_typesize (LIBELFBITS, ELF_T_EHDR, 1));
-
- if (unlikely (change_bo))
- {
- /* Today there is only one version of the ELF header. */
-#if EV_NUM != 2
- xfct_t fctp;
- fctp = __elf_xfctstom[__libelf_version - 1][EV_CURRENT - 1][ELFW(ELFCLASS, LIBELFBITS) - 1][ELF_T_EHDR];
-#else
-# undef fctp
-# define fctp __elf_xfctstom[0][EV_CURRENT - 1][ELFW(ELFCLASS, LIBELFBITS) - 1][ELF_T_EHDR]
-#endif
-
- /* Write the converted ELF header in a temporary buffer. */
- (*fctp) (&tmp_ehdr, ehdr, sizeof (ElfW2(LIBELFBITS,Ehdr)), 1);
-
- /* This is the buffer we want to write. */
- out_ehdr = &tmp_ehdr;
- }
-
- /* Write out the ELF header. */
- if (unlikely (pwrite_retry (elf->fildes, out_ehdr,
- sizeof (ElfW2(LIBELFBITS,Ehdr)), 0)
- != sizeof (ElfW2(LIBELFBITS,Ehdr))))
- {
- __libelf_seterrno (ELF_E_WRITE_ERROR);
- return 1;
- }
-
- elf->state.ELFW(elf,LIBELFBITS).ehdr_flags &= ~ELF_F_DIRTY;
- }
-
- /* If the type sizes should be different at some time we have to
- rewrite this code. */
- assert (sizeof (ElfW2(LIBELFBITS,Phdr))
- == elf_typesize (LIBELFBITS, ELF_T_PHDR, 1));
-
- /* Write out the program header table. */
- if (elf->state.ELFW(elf,LIBELFBITS).phdr != NULL
- && ((elf->state.ELFW(elf,LIBELFBITS).phdr_flags | elf->flags)
- & ELF_F_DIRTY))
- {
- ElfW2(LIBELFBITS,Phdr) *tmp_phdr = NULL;
- ElfW2(LIBELFBITS,Phdr) *out_phdr = elf->state.ELFW(elf,LIBELFBITS).phdr;
-
- /* Maybe the user wants a gap between the ELF header and the program
- header. */
- if (ehdr->e_phoff > ehdr->e_ehsize
- && unlikely (fill (elf->fildes, ehdr->e_ehsize,
- ehdr->e_phoff - ehdr->e_ehsize, fillbuf, &filled)
- != 0))
- return 1;
-
- if (unlikely (change_bo))
- {
- /* Today there is only one version of the ELF header. */
-#if EV_NUM != 2
- xfct_t fctp;
- fctp = __elf_xfctstom[__libelf_version - 1][EV_CURRENT - 1][ELFW(ELFCLASS, LIBELFBITS) - 1][ELF_T_PHDR];
-#else
-# undef fctp
-# define fctp __elf_xfctstom[0][EV_CURRENT - 1][ELFW(ELFCLASS, LIBELFBITS) - 1][ELF_T_PHDR]
-#endif
-
- /* Allocate sufficient memory. */
- tmp_phdr = (ElfW2(LIBELFBITS,Phdr) *)
- malloc (sizeof (ElfW2(LIBELFBITS,Phdr)) * ehdr->e_phnum);
- if (tmp_phdr == NULL)
- {
- __libelf_seterrno (ELF_E_NOMEM);
- return 1;
- }
-
- /* Write the converted ELF header in a temporary buffer. */
- (*fctp) (tmp_phdr, elf->state.ELFW(elf,LIBELFBITS).phdr,
- sizeof (ElfW2(LIBELFBITS,Phdr)) * ehdr->e_phnum, 1);
-
- /* This is the buffer we want to write. */
- out_phdr = tmp_phdr;
- }
-
- /* Write out the ELF header. */
- size_t phdr_size = sizeof (ElfW2(LIBELFBITS,Phdr)) * ehdr->e_phnum;
- if (unlikely ((size_t) pwrite_retry (elf->fildes, out_phdr,
- phdr_size, ehdr->e_phoff)
- != phdr_size))
- {
- __libelf_seterrno (ELF_E_WRITE_ERROR);
- return 1;
- }
-
- /* This is a no-op we we have not allocated any memory. */
- free (tmp_phdr);
-
- elf->state.ELFW(elf,LIBELFBITS).phdr_flags &= ~ELF_F_DIRTY;
- }
-
- /* From now on we have to keep track of the last position to eventually
- fill the gaps with the prescribed fill byte. */
- off_t last_offset;
- if (elf->state.ELFW(elf,LIBELFBITS).phdr == NULL)
- last_offset = elf_typesize (LIBELFBITS, ELF_T_EHDR, 1);
- else
- last_offset = (ehdr->e_phoff
- + sizeof (ElfW2(LIBELFBITS,Phdr)) * ehdr->e_phnum);
-
- /* Write all the sections. Well, only those which are modified. */
- if (shnum > 0)
- {
- off_t shdr_offset = elf->start_offset + ehdr->e_shoff;
-#if EV_NUM != 2
- xfct_t shdr_fctp = __elf_xfctstom[__libelf_version - 1][EV_CURRENT - 1][ELFW(ELFCLASS, LIBELFBITS) - 1][ELF_T_SHDR];
-#else
-# undef shdr_fctp
-# define shdr_fctp __elf_xfctstom[0][EV_CURRENT - 1][ELFW(ELFCLASS, LIBELFBITS) - 1][ELF_T_SHDR]
-#endif
-
- ElfW2(LIBELFBITS,Shdr) *shdr_data;
- if (change_bo || elf->state.ELFW(elf,LIBELFBITS).shdr == NULL)
- shdr_data = (ElfW2(LIBELFBITS,Shdr) *)
- alloca (shnum * sizeof (ElfW2(LIBELFBITS,Shdr)));
- else
- shdr_data = elf->state.ELFW(elf,LIBELFBITS).shdr;
- int shdr_flags = elf->flags;
-
- /* Get all sections into the array and sort them. */
- Elf_ScnList *list = &elf->state.ELFW(elf,LIBELFBITS).scns;
- Elf_Scn **scns = (Elf_Scn **) alloca (shnum * sizeof (Elf_Scn *));
- sort_sections (scns, list);
-
- for (size_t cnt = 0; cnt < shnum; ++cnt)
- {
- Elf_Scn *scn = scns[cnt];
-
- ElfW2(LIBELFBITS,Shdr) *shdr = scn->shdr.ELFW(e,LIBELFBITS);
-
- off_t scn_start = elf->start_offset + shdr->sh_offset;
- Elf_Data_List *dl = &scn->data_list;
-
- if (shdr->sh_type != SHT_NOBITS && scn->data_list_rear != NULL
- && scn->index != 0)
- do
- {
- if ((scn->flags | dl->flags | elf->flags) & ELF_F_DIRTY)
- {
- char tmpbuf[MAX_TMPBUF];
- void *buf = dl->data.d.d_buf;
-
- if (scn_start + dl->data.d.d_off > last_offset)
- {
- if (unlikely (fill (elf->fildes, last_offset,
- (scn_start + dl->data.d.d_off)
- - last_offset, fillbuf,
- &filled) != 0))
- return 1;
- }
-
- /* Let it go backward if the sections use a bogus
- layout with overlaps. We'll overwrite the stupid
- user's section data with the latest one, rather than
- crashing. */
-
- last_offset = scn_start + dl->data.d.d_off;
-
- if (unlikely (change_bo))
- {
-#if EV_NUM != 2
- xfct_t fctp;
- fctp = __elf_xfctstom[__libelf_version - 1][dl->data.d.d_version - 1][ELFW(ELFCLASS, LIBELFBITS) - 1][dl->data.d.d_type];
-#else
-# undef fctp
-# define fctp __elf_xfctstom[0][EV_CURRENT - 1][ELFW(ELFCLASS, LIBELFBITS) - 1][dl->data.d.d_type]
-#endif
-
- buf = tmpbuf;
- if (dl->data.d.d_size > MAX_TMPBUF)
- {
- buf = malloc (dl->data.d.d_size);
- if (buf == NULL)
- {
- __libelf_seterrno (ELF_E_NOMEM);
- return 1;
- }
- }
-
- /* Do the real work. */
- (*fctp) (buf, dl->data.d.d_buf, dl->data.d.d_size, 1);
- }
-
- ssize_t n = pwrite_retry (elf->fildes, buf,
- dl->data.d.d_size,
- last_offset);
- if (unlikely ((size_t) n != dl->data.d.d_size))
- {
- if (buf != dl->data.d.d_buf && buf != tmpbuf)
- free (buf);
-
- __libelf_seterrno (ELF_E_WRITE_ERROR);
- return 1;
- }
-
- if (buf != dl->data.d.d_buf && buf != tmpbuf)
- free (buf);
- }
-
- last_offset += dl->data.d.d_size;
-
- dl->flags &= ~ELF_F_DIRTY;
-
- dl = dl->next;
- }
- while (dl != NULL);
- else if (shdr->sh_type != SHT_NOBITS && scn->index != 0)
- last_offset = scn_start + shdr->sh_size;
-
- /* Collect the section header table information. */
- if (unlikely (change_bo))
- (*shdr_fctp) (&shdr_data[scn->index],
- scn->shdr.ELFW(e,LIBELFBITS),
- sizeof (ElfW2(LIBELFBITS,Shdr)), 1);
- else if (elf->state.ELFW(elf,LIBELFBITS).shdr == NULL)
- memcpy (&shdr_data[scn->index], scn->shdr.ELFW(e,LIBELFBITS),
- sizeof (ElfW2(LIBELFBITS,Shdr)));
-
- shdr_flags |= scn->shdr_flags;
- scn->shdr_flags &= ~ELF_F_DIRTY;
- }
-
- /* Fill the gap between last section and section header table if
- necessary. */
- if ((elf->flags & ELF_F_DIRTY) && last_offset < shdr_offset
- && unlikely (fill (elf->fildes, last_offset,
- shdr_offset - last_offset,
- fillbuf, &filled) != 0))
- return 1;
-
- /* Write out the section header table. */
- if (shdr_flags & ELF_F_DIRTY
- && unlikely ((size_t) pwrite_retry (elf->fildes, shdr_data,
- sizeof (ElfW2(LIBELFBITS,Shdr))
- * shnum, shdr_offset)
- != sizeof (ElfW2(LIBELFBITS,Shdr)) * shnum))
- {
- __libelf_seterrno (ELF_E_WRITE_ERROR);
- return 1;
- }
- }
-
- /* That was the last part. Clear the overall flag. */
- elf->flags &= ~ELF_F_DIRTY;
-
- return 0;
-}
diff --git a/libelf/elf32_updatenull.c b/libelf/elf32_updatenull.c
deleted file mode 100644
index a18d0be..0000000
--- a/libelf/elf32_updatenull.c
+++ /dev/null
@@ -1,433 +0,0 @@
-/* Update data structures for changes.
- Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <endian.h>
-#include <libelf.h>
-#include <stdbool.h>
-#include <string.h>
-#include <sys/param.h>
-
-#include "libelfP.h"
-#include "elf-knowledge.h"
-
-#ifndef LIBELFBITS
-# define LIBELFBITS 32
-#endif
-
-
-
-static int
-ELFW(default_ehdr,LIBELFBITS) (Elf *elf, ElfW2(LIBELFBITS,Ehdr) *ehdr,
- size_t shnum, int *change_bop)
-{
- /* Always write the magic bytes. */
- if (memcmp (&ehdr->e_ident[EI_MAG0], ELFMAG, SELFMAG) != 0)
- {
- memcpy (&ehdr->e_ident[EI_MAG0], ELFMAG, SELFMAG);
- elf->state.ELFW(elf,LIBELFBITS).ehdr_flags |= ELF_F_DIRTY;
- }
-
- /* Always set the file class. */
- update_if_changed (ehdr->e_ident[EI_CLASS], ELFW(ELFCLASS,LIBELFBITS),
- elf->state.ELFW(elf,LIBELFBITS).ehdr_flags);
-
- /* Set the data encoding if necessary. */
- if (unlikely (ehdr->e_ident[EI_DATA] == ELFDATANONE))
- {
- ehdr->e_ident[EI_DATA] =
- BYTE_ORDER == BIG_ENDIAN ? ELFDATA2MSB : ELFDATA2LSB;
- elf->state.ELFW(elf,LIBELFBITS).ehdr_flags |= ELF_F_DIRTY;
- }
- else if (unlikely (ehdr->e_ident[EI_DATA] >= ELFDATANUM))
- {
- __libelf_seterrno (ELF_E_DATA_ENCODING);
- return 1;
- }
- else
- *change_bop = ((BYTE_ORDER == LITTLE_ENDIAN
- && ehdr->e_ident[EI_DATA] != ELFDATA2LSB)
- || (BYTE_ORDER == BIG_ENDIAN
- && ehdr->e_ident[EI_DATA] != ELFDATA2MSB));
-
- /* Unconditionally overwrite the ELF version. */
- update_if_changed (ehdr->e_ident[EI_VERSION], EV_CURRENT,
- elf->state.ELFW(elf,LIBELFBITS).ehdr_flags);
-
- if (unlikely (ehdr->e_version == EV_NONE)
- || unlikely (ehdr->e_version >= EV_NUM))
- {
- __libelf_seterrno (ELF_E_UNKNOWN_VERSION);
- return 1;
- }
-
- if (unlikely (shnum >= SHN_LORESERVE))
- {
- update_if_changed (ehdr->e_shnum, 0,
- elf->state.ELFW(elf,LIBELFBITS).ehdr_flags);
- }
- else
- update_if_changed (ehdr->e_shnum, shnum,
- elf->state.ELFW(elf,LIBELFBITS).ehdr_flags);
-
- if (unlikely (ehdr->e_ehsize != elf_typesize (LIBELFBITS, ELF_T_EHDR, 1)))
- {
- ehdr->e_ehsize = elf_typesize (LIBELFBITS, ELF_T_EHDR, 1);
- elf->state.ELFW(elf,LIBELFBITS).ehdr_flags |= ELF_F_DIRTY;
- }
-
- return 0;
-}
-
-
-off_t
-internal_function
-__elfw2(LIBELFBITS,updatenull_wrlock) (Elf *elf, int *change_bop, size_t shnum)
-{
- ElfW2(LIBELFBITS,Ehdr) *ehdr;
- int changed = 0;
- int ehdr_flags = 0;
-
- ehdr = __elfw2(LIBELFBITS,getehdr_wrlock) (elf);
-
- /* Set the default values. */
- if (ELFW(default_ehdr,LIBELFBITS) (elf, ehdr, shnum, change_bop) != 0)
- return -1;
-
- /* At least the ELF header is there. */
- off_t size = elf_typesize (LIBELFBITS, ELF_T_EHDR, 1);
-
- /* Set the program header position. */
- if (elf->state.ELFW(elf,LIBELFBITS).phdr == NULL
- && (ehdr->e_type == ET_EXEC || ehdr->e_type == ET_DYN
- || ehdr->e_type == ET_CORE))
- (void) __elfw2(LIBELFBITS,getphdr_wrlock) (elf);
- if (elf->state.ELFW(elf,LIBELFBITS).phdr != NULL)
- {
- /* Only executables, shared objects, and core files have a program
- header. */
- if (ehdr->e_type != ET_EXEC && ehdr->e_type != ET_DYN
- && unlikely (ehdr->e_type != ET_CORE))
- {
- __libelf_seterrno (ELF_E_INVALID_PHDR);
- return -1;
- }
-
- if (elf->flags & ELF_F_LAYOUT)
- {
- /* The user is supposed to fill out e_phoff. Use it and
- e_phnum to determine the maximum extend. */
- size = MAX ((size_t) size,
- ehdr->e_phoff
- + elf_typesize (LIBELFBITS, ELF_T_PHDR, ehdr->e_phnum));
- }
- else
- {
- update_if_changed (ehdr->e_phoff,
- elf_typesize (LIBELFBITS, ELF_T_EHDR, 1),
- ehdr_flags);
-
- /* We need no alignment here. */
- size += elf_typesize (LIBELFBITS, ELF_T_PHDR, ehdr->e_phnum);
- }
- }
-
- if (shnum > 0)
- {
- Elf_ScnList *list;
- bool first = true;
-
- assert (elf->state.ELFW(elf,LIBELFBITS).scns.cnt > 0);
-
- if (shnum >= SHN_LORESERVE)
- {
- /* We have to fill in the number of sections in the header
- of the zeroth section. */
- Elf_Scn *scn0 = &elf->state.ELFW(elf,LIBELFBITS).scns.data[0];
-
- update_if_changed (scn0->shdr.ELFW(e,LIBELFBITS)->sh_size,
- shnum, scn0->shdr_flags);
- }
-
- /* Go over all sections and find out how large they are. */
- list = &elf->state.ELFW(elf,LIBELFBITS).scns;
-
- /* Load the section headers if necessary. This loads the
- headers for all sections. */
- if (list->data[1].shdr.ELFW(e,LIBELFBITS) == NULL)
- (void) __elfw2(LIBELFBITS,getshdr_wrlock) (&list->data[1]);
-
- do
- {
- for (size_t cnt = first == true; cnt < list->cnt; ++cnt)
- {
- Elf_Scn *scn = &list->data[cnt];
- ElfW2(LIBELFBITS,Shdr) *shdr = scn->shdr.ELFW(e,LIBELFBITS);
- off_t offset = 0;
-
- assert (shdr != NULL);
- ElfW2(LIBELFBITS,Word) sh_entsize = shdr->sh_entsize;
- ElfW2(LIBELFBITS,Word) sh_align = shdr->sh_addralign ?: 1;
-
- /* Set the sh_entsize value if we can reliably detect it. */
- switch (shdr->sh_type)
- {
- case SHT_SYMTAB:
- sh_entsize = elf_typesize (LIBELFBITS, ELF_T_SYM, 1);
- break;
- case SHT_RELA:
- sh_entsize = elf_typesize (LIBELFBITS, ELF_T_RELA, 1);
- break;
- case SHT_GROUP:
- /* Only relocatable files can contain section groups. */
- if (ehdr->e_type != ET_REL)
- {
- __libelf_seterrno (ELF_E_GROUP_NOT_REL);
- return -1;
- }
- /* FALLTHROUGH */
- case SHT_SYMTAB_SHNDX:
- sh_entsize = elf_typesize (32, ELF_T_WORD, 1);
- break;
- case SHT_HASH:
- sh_entsize = SH_ENTSIZE_HASH (ehdr);
- break;
- case SHT_DYNAMIC:
- sh_entsize = elf_typesize (LIBELFBITS, ELF_T_DYN, 1);
- break;
- case SHT_REL:
- sh_entsize = elf_typesize (LIBELFBITS, ELF_T_REL, 1);
- break;
- case SHT_DYNSYM:
- sh_entsize = elf_typesize (LIBELFBITS, ELF_T_SYM, 1);
- break;
- case SHT_SUNW_move:
- sh_entsize = elf_typesize (LIBELFBITS, ELF_T_MOVE, 1);
- break;
- case SHT_SUNW_syminfo:
- sh_entsize = elf_typesize (LIBELFBITS, ELF_T_SYMINFO, 1);
- break;
- default:
- break;
- }
-
- /* If the section header contained the wrong entry size
- correct it and mark the header as modified. */
- update_if_changed (shdr->sh_entsize, sh_entsize,
- scn->shdr_flags);
-
- if (scn->data_read == 0
- && __libelf_set_rawdata_wrlock (scn) != 0)
- /* Something went wrong. The error value is already set. */
- return -1;
-
- /* Iterate over all data blocks. */
- if (list->data[cnt].data_list_rear != NULL)
- {
- Elf_Data_List *dl = &scn->data_list;
-
- while (dl != NULL)
- {
- Elf_Data *data = &dl->data.d;
- if (dl == &scn->data_list && data->d_buf == NULL
- && scn->rawdata.d.d_buf != NULL)
- data = &scn->rawdata.d;
-
- if (unlikely (data->d_version == EV_NONE)
- || unlikely (data->d_version >= EV_NUM))
- {
- __libelf_seterrno (ELF_E_UNKNOWN_VERSION);
- return -1;
- }
-
- if (unlikely (! powerof2 (data->d_align)))
- {
- __libelf_seterrno (ELF_E_INVALID_ALIGN);
- return -1;
- }
-
- sh_align = MAX (sh_align, data->d_align);
-
- if (elf->flags & ELF_F_LAYOUT)
- {
- /* The user specified the offset and the size.
- All we have to do is check whether this block
- fits in the size specified for the section. */
- if (unlikely ((GElf_Word) (data->d_off
- + data->d_size)
- > shdr->sh_size))
- {
- __libelf_seterrno (ELF_E_SECTION_TOO_SMALL);
- return -1;
- }
- }
- else
- {
- /* Determine the padding. */
- offset = ((offset + data->d_align - 1)
- & ~(data->d_align - 1));
-
- update_if_changed (data->d_off, offset, changed);
-
- offset += data->d_size;
- }
-
- /* Next data block. */
- dl = dl->next;
- }
- }
- else
- /* Get the size of the section from the raw data. If
- none is available the value is zero. */
- offset += scn->rawdata.d.d_size;
-
- if (elf->flags & ELF_F_LAYOUT)
- {
- size = MAX ((GElf_Word) size,
- shdr->sh_offset
- + (shdr->sh_type != SHT_NOBITS
- ? shdr->sh_size : 0));
-
- /* The alignment must be a power of two. This is a
- requirement from the ELF specification. Additionally
- we test for the alignment of the section being large
- enough for the largest alignment required by a data
- block. */
- if (unlikely (! powerof2 (shdr->sh_addralign))
- || unlikely (shdr->sh_addralign < sh_align))
- {
- __libelf_seterrno (ELF_E_INVALID_ALIGN);
- return -1;
- }
- }
- else
- {
- /* How much alignment do we need for this section. */
- update_if_changed (shdr->sh_addralign, sh_align,
- scn->shdr_flags);
-
- size = (size + sh_align - 1) & ~(sh_align - 1);
- int offset_changed = 0;
- update_if_changed (shdr->sh_offset, (GElf_Word) size,
- offset_changed);
- changed |= offset_changed;
-
- if (offset_changed && scn->data_list_rear == NULL)
- {
- /* The position of the section in the file
- changed. Create the section data list. */
- if (__elf_getdata_rdlock (scn, NULL) == NULL)
- return -1;
- }
-
- /* See whether the section size is correct. */
- update_if_changed (shdr->sh_size, (GElf_Word) offset,
- changed);
-
- if (shdr->sh_type != SHT_NOBITS)
- size += offset;
-
- scn->flags |= changed;
- }
-
- /* Check that the section size is actually a multiple of
- the entry size. */
- if (shdr->sh_entsize != 0
- && unlikely (shdr->sh_size % shdr->sh_entsize != 0)
- && (elf->flags & ELF_F_PERMISSIVE) == 0)
- {
- __libelf_seterrno (ELF_E_INVALID_SHENTSIZE);
- return -1;
- }
- }
-
- assert (list->next == NULL || list->cnt == list->max);
-
- first = false;
- }
- while ((list = list->next) != NULL);
-
- /* Store section information. */
- if (elf->flags & ELF_F_LAYOUT)
- {
- /* The user is supposed to fill out e_phoff. Use it and
- e_phnum to determine the maximum extend. */
- size = MAX ((GElf_Word) size,
- (ehdr->e_shoff
- + (elf_typesize (LIBELFBITS, ELF_T_SHDR, shnum))));
- }
- else
- {
- /* Align for section header table.
-
- Yes, we use `sizeof' and not `__alignof__' since we do not
- want to be surprised by architectures with less strict
- alignment rules. */
-#define SHDR_ALIGN sizeof (ElfW2(LIBELFBITS,Off))
- size = (size + SHDR_ALIGN - 1) & ~(SHDR_ALIGN - 1);
-
- update_if_changed (ehdr->e_shoff, (GElf_Word) size, elf->flags);
- update_if_changed (ehdr->e_shentsize,
- elf_typesize (LIBELFBITS, ELF_T_SHDR, 1),
- ehdr_flags);
-
- /* Account for the section header size. */
- size += elf_typesize (LIBELFBITS, ELF_T_SHDR, shnum);
- }
- }
-
- elf->state.ELFW(elf,LIBELFBITS).ehdr_flags |= ehdr_flags;
-
- return size;
-}
diff --git a/libelf/elf32_xlatetof.c b/libelf/elf32_xlatetof.c
deleted file mode 100644
index dc686ec..0000000
--- a/libelf/elf32_xlatetof.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/* Convert from memory to file representation.
- Copyright (C) 1998, 1999, 2000, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <endian.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-#ifndef LIBELFBITS
-# define LIBELFBITS 32
-#endif
-
-
-Elf_Data *
-elfw2(LIBELFBITS, xlatetof) (dest, src, encode)
- Elf_Data *dest;
- const Elf_Data *src;
- unsigned int encode;
-{
- /* First test whether the input data is really suitable for this
- type. This means, whether there is an integer number of records.
- Note that for this implementation the memory and file size of the
- data types are identical. */
-#if EV_NUM != 2
- size_t recsize = __libelf_type_sizes[src->d_version - 1][ELFW(ELFCLASS,LIBELFBITS) - 1][src->d_type];
-#else
- size_t recsize = __libelf_type_sizes[0][ELFW(ELFCLASS,LIBELFBITS) - 1][src->d_type];
-#endif
-
- if (src->d_size % recsize != 0)
- {
- __libelf_seterrno (ELF_E_INVALID_DATA);
- return NULL;
- }
-
- /* Next see whether the converted data fits in the output buffer. */
- if (src->d_size > dest->d_size)
- {
- __libelf_seterrno (ELF_E_DEST_SIZE);
- return NULL;
- }
-
- /* Test the encode parameter. */
- if (encode != ELFDATA2LSB && encode != ELFDATA2MSB)
- {
- __libelf_seterrno (ELF_E_INVALID_ENCODING);
- return NULL;
- }
-
- /* Determine the translation function to use.
-
- At this point we make an assumption which is valid for all
- existing implementations so far: the memory and file sizes are
- the same. This has very important consequences:
- a) The requirement that the source and destination buffer can
- overlap can easily be fulfilled.
- b) We need only one function to convert from and memory to file
- and vice versa since the function only has to copy and/or
- change the byte order.
- */
- if ((__BYTE_ORDER == __LITTLE_ENDIAN && encode == ELFDATA2LSB)
- || (__BYTE_ORDER == __BIG_ENDIAN && encode == ELFDATA2MSB))
- {
- /* We simply have to copy since the byte order is the same. */
- if (src->d_buf != dest->d_buf)
- memmove (dest->d_buf, src->d_buf, src->d_size);
- }
- else
- {
- xfct_t fctp;
-
- /* Get a pointer to the transformation functions. The `#ifdef' is
- a small optimization since we don't anticipate another ELF
- version and so would waste "precious" code. */
-#if EV_NUM != 2
- fctp = __elf_xfctstom[dest->d_version - 1][src->d_version - 1][ELFW(ELFCLASS, LIBELFBITS) - 1][src->d_type];
-#else
- fctp = __elf_xfctstom[0][0][ELFW(ELFCLASS, LIBELFBITS) - 1][src->d_type];
-#endif
-
- /* Do the real work. */
- (*fctp) (dest->d_buf, src->d_buf, src->d_size, 1);
- }
-
- /* Now set the real destination type and length since the operation was
- successful. */
- dest->d_type = src->d_type;
- dest->d_size = src->d_size;
-
- return dest;
-}
-INTDEF(elfw2(LIBELFBITS, xlatetof))
diff --git a/libelf/elf32_xlatetom.c b/libelf/elf32_xlatetom.c
deleted file mode 100644
index 4f54df2..0000000
--- a/libelf/elf32_xlatetom.c
+++ /dev/null
@@ -1,145 +0,0 @@
-/* Convert from file to memory representation.
- Copyright (C) 1998, 1999, 2000, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <endian.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-#ifndef LIBELFBITS
-# define LIBELFBITS 32
-#endif
-
-
-Elf_Data *
-elfw2(LIBELFBITS, xlatetom) (dest, src, encode)
- Elf_Data *dest;
- const Elf_Data *src;
- unsigned int encode;
-{
- /* First test whether the input data is really suitable for this
- type. This means, whether there is an integer number of records.
- Note that for this implementation the memory and file size of the
- data types are identical. */
-#if EV_NUM != 2
- size_t recsize = __libelf_type_sizes[src->d_version - 1][ELFW(ELFCLASS,LIBELFBITS) - 1][src->d_type];
-#else
- size_t recsize = __libelf_type_sizes[0][ELFW(ELFCLASS,LIBELFBITS) - 1][src->d_type];
-#endif
-
-
- if (src->d_size % recsize != 0)
- {
- __libelf_seterrno (ELF_E_INVALID_DATA);
- return NULL;
- }
-
- /* Next see whether the converted data fits in the output buffer. */
- if (src->d_size > dest->d_size)
- {
- __libelf_seterrno (ELF_E_DEST_SIZE);
- return NULL;
- }
-
- /* Test the encode parameter. */
- if (encode != ELFDATA2LSB && encode != ELFDATA2MSB)
- {
- __libelf_seterrno (ELF_E_INVALID_ENCODING);
- return NULL;
- }
-
- /* Determine the translation function to use.
-
- At this point we make an assumption which is valid for all
- existing implementations so far: the memory and file sizes are
- the same. This has very important consequences:
- a) The requirement that the source and destination buffer can
- overlap can easily be fulfilled.
- b) We need only one function to convert from and memory to file
- and vice versa since the function only has to copy and/or
- change the byte order.
- */
- if ((BYTE_ORDER == LITTLE_ENDIAN && encode == ELFDATA2LSB)
- || (BYTE_ORDER == BIG_ENDIAN && encode == ELFDATA2MSB))
- {
- /* We simply have to copy since the byte order is the same. */
- if (src->d_buf != dest->d_buf)
- memmove (dest->d_buf, src->d_buf, src->d_size);
- }
- else
- {
- xfct_t fctp;
-
- /* Get a pointer to the transformation functions. The `#ifdef' is
- a small optimization since we don't anticipate another ELF
- version and so would waste "precious" code. */
-#if EV_NUM != 2
- fctp = __elf_xfctstom[src->d_version - 1][dest->d_version - 1][ELFW(ELFCLASS, LIBELFBITS) - 1][src->d_type];
-#else
- fctp = __elf_xfctstom[0][0][ELFW(ELFCLASS, LIBELFBITS) - 1][src->d_type];
-#endif
-
- /* Do the real work. */
- (*fctp) (dest->d_buf, src->d_buf, src->d_size, 0);
- }
-
- /* Now set the real destination type and length since the operation was
- successful. */
- dest->d_type = src->d_type;
- dest->d_size = src->d_size;
-
- return dest;
-}
-INTDEF(elfw2(LIBELFBITS, xlatetom))
diff --git a/libelf/elf64_checksum.c b/libelf/elf64_checksum.c
deleted file mode 100644
index 000b66f..0000000
--- a/libelf/elf64_checksum.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Compute simple checksum from permanent parts of the ELF file.
- Copyright (C) 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#define LIBELFBITS 64
-#include "elf32_checksum.c"
diff --git a/libelf/elf64_fsize.c b/libelf/elf64_fsize.c
deleted file mode 100644
index 2ee0512..0000000
--- a/libelf/elf64_fsize.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Return the size of an object file type.
- Copyright (C) 1998, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#define LIBELFBITS 64
-#include "elf32_fsize.c"
diff --git a/libelf/elf64_getehdr.c b/libelf/elf64_getehdr.c
deleted file mode 100644
index c649679..0000000
--- a/libelf/elf64_getehdr.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Return program header table.
- Copyright (C) 1998, 1999, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#define LIBELFBITS 64
-#include "elf32_getehdr.c"
diff --git a/libelf/elf64_getphdr.c b/libelf/elf64_getphdr.c
deleted file mode 100644
index 5e2d0ea..0000000
--- a/libelf/elf64_getphdr.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Return program header table.
- Copyright (C) 1998, 1999, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#define LIBELFBITS 64
-#include "elf32_getphdr.c"
diff --git a/libelf/elf64_getshdr.c b/libelf/elf64_getshdr.c
deleted file mode 100644
index 5b86dbe..0000000
--- a/libelf/elf64_getshdr.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Return section header.
- Copyright (C) 1998, 1999, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#define LIBELFBITS 64
-#include "elf32_getshdr.c"
diff --git a/libelf/elf64_newehdr.c b/libelf/elf64_newehdr.c
deleted file mode 100644
index eaea2b1..0000000
--- a/libelf/elf64_newehdr.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Create new program header table.
- Copyright (C) 1999, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1999.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#define LIBELFBITS 64
-#include "elf32_newehdr.c"
diff --git a/libelf/elf64_newphdr.c b/libelf/elf64_newphdr.c
deleted file mode 100644
index 91a4133..0000000
--- a/libelf/elf64_newphdr.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Create new program header table.
- Copyright (C) 1999, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1999.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#define LIBELFBITS 64
-#include "elf32_newphdr.c"
diff --git a/libelf/elf64_offscn.c b/libelf/elf64_offscn.c
deleted file mode 100644
index 6d31215..0000000
--- a/libelf/elf64_offscn.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Return program header table.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#define LIBELFBITS 64
-#include "elf32_offscn.c"
diff --git a/libelf/elf64_updatefile.c b/libelf/elf64_updatefile.c
deleted file mode 100644
index 5502d18..0000000
--- a/libelf/elf64_updatefile.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Copyright (C) 2000, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#define LIBELFBITS 64
-#include "elf32_updatefile.c"
diff --git a/libelf/elf64_updatenull.c b/libelf/elf64_updatenull.c
deleted file mode 100644
index 6838fd8..0000000
--- a/libelf/elf64_updatenull.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Copyright (C) 2000, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#define LIBELFBITS 64
-#include "elf32_updatenull.c"
diff --git a/libelf/elf64_xlatetof.c b/libelf/elf64_xlatetof.c
deleted file mode 100644
index 2747ce0..0000000
--- a/libelf/elf64_xlatetof.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Convert from memory to file representation.
- Copyright (C) 1998, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#define LIBELFBITS 64
-#include "elf32_xlatetof.c"
diff --git a/libelf/elf64_xlatetom.c b/libelf/elf64_xlatetom.c
deleted file mode 100644
index 6fa6a02..0000000
--- a/libelf/elf64_xlatetom.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Convert from file to memory representation.
- Copyright (C) 1998, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#define LIBELFBITS 64
-#include "elf32_xlatetom.c"
diff --git a/libelf/elf_begin.c b/libelf/elf_begin.c
deleted file mode 100644
index 9d06f92..0000000
--- a/libelf/elf_begin.c
+++ /dev/null
@@ -1,1104 +0,0 @@
-/* Create descriptor for processing file.
- Copyright (C) 1998-2005, 2006, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <ctype.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <stdbool.h>
-#include <stddef.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/mman.h>
-#include <sys/param.h>
-#include <sys/stat.h>
-
-#include <system.h>
-#include "libelfP.h"
-#include "common.h"
-
-/* Create descriptor for archive in memory. */
-static inline Elf *
-file_read_ar (int fildes, void *map_address, off_t offset, size_t maxsize,
- Elf_Cmd cmd, Elf *parent)
-{
- Elf *elf;
-
- /* Create a descriptor. */
- elf = allocate_elf (fildes, map_address, offset, maxsize, cmd, parent,
- ELF_K_AR, 0);
- if (elf != NULL)
- {
- /* We don't read all the symbol tables in advance. All this will
- happen on demand. */
- elf->state.ar.offset = offset + SARMAG;
-
- elf->state.ar.elf_ar_hdr.ar_rawname = elf->state.ar.raw_name;
- }
-
- return elf;
-}
-
-
-static size_t
-get_shnum (void *map_address, unsigned char *e_ident, int fildes, off_t offset,
- size_t maxsize)
-{
- size_t result;
- union
- {
- Elf32_Ehdr *e32;
- Elf64_Ehdr *e64;
- void *p;
- } ehdr;
- union
- {
- Elf32_Ehdr e32;
- Elf64_Ehdr e64;
- } ehdr_mem;
- bool is32 = e_ident[EI_CLASS] == ELFCLASS32;
-
- /* Make the ELF header available. */
- if (e_ident[EI_DATA] == MY_ELFDATA
- && (ALLOW_UNALIGNED
- || (((size_t) e_ident
- & ((is32 ? __alignof__ (Elf32_Ehdr) : __alignof__ (Elf64_Ehdr))
- - 1)) == 0)))
- ehdr.p = e_ident;
- else
- {
- /* We already read the ELF header. We have to copy the header
- since we possibly modify the data here and the caller
- expects the memory it passes in to be preserved. */
- ehdr.p = &ehdr_mem;
-
- if (is32)
- {
- if (ALLOW_UNALIGNED)
- {
- ehdr_mem.e32.e_shnum = ((Elf32_Ehdr *) e_ident)->e_shnum;
- ehdr_mem.e32.e_shoff = ((Elf32_Ehdr *) e_ident)->e_shoff;
- }
- else
- memcpy (&ehdr_mem, e_ident, sizeof (Elf32_Ehdr));
-
- if (e_ident[EI_DATA] != MY_ELFDATA)
- {
- CONVERT (ehdr_mem.e32.e_shnum);
- CONVERT (ehdr_mem.e32.e_shoff);
- }
- }
- else
- {
- if (ALLOW_UNALIGNED)
- {
- ehdr_mem.e64.e_shnum = ((Elf64_Ehdr *) e_ident)->e_shnum;
- ehdr_mem.e64.e_shoff = ((Elf64_Ehdr *) e_ident)->e_shoff;
- }
- else
- memcpy (&ehdr_mem, e_ident, sizeof (Elf64_Ehdr));
-
- if (e_ident[EI_DATA] != MY_ELFDATA)
- {
- CONVERT (ehdr_mem.e64.e_shnum);
- CONVERT (ehdr_mem.e64.e_shoff);
- }
- }
- }
-
- if (is32)
- {
- /* Get the number of sections from the ELF header. */
- result = ehdr.e32->e_shnum;
-
- if (unlikely (result == 0) && ehdr.e32->e_shoff != 0)
- {
- if (ehdr.e32->e_shoff + sizeof (Elf32_Shdr) > maxsize)
- /* Cannot read the first section header. */
- return 0;
-
- if (likely (map_address != NULL) && e_ident[EI_DATA] == MY_ELFDATA
- && (ALLOW_UNALIGNED
- || (((size_t) ((char *) map_address + offset))
- & (__alignof__ (Elf32_Ehdr) - 1)) == 0))
- /* We can directly access the memory. */
- result = ((Elf32_Shdr *) ((char *) map_address + ehdr.e32->e_shoff
- + offset))->sh_size;
- else
- {
- Elf32_Word size;
-
- if (likely (map_address != NULL))
- /* gcc will optimize the memcpy to a simple memory
- access while taking care of alignment issues. */
- memcpy (&size, &((Elf32_Shdr *) ((char *) map_address
- + ehdr.e32->e_shoff
- + offset))->sh_size,
- sizeof (Elf32_Word));
- else
- if (unlikely (pread_retry (fildes, &size, sizeof (Elf32_Word),
- offset + ehdr.e32->e_shoff
- + offsetof (Elf32_Shdr, sh_size))
- != sizeof (Elf32_Word)))
- return (size_t) -1l;
-
- if (e_ident[EI_DATA] != MY_ELFDATA)
- CONVERT (size);
-
- result = size;
- }
- }
-
- /* If the section headers were truncated, pretend none were there. */
- if (ehdr.e32->e_shoff > maxsize
- || maxsize - ehdr.e32->e_shoff < sizeof (Elf32_Shdr) * result)
- result = 0;
- }
- else
- {
- /* Get the number of sections from the ELF header. */
- result = ehdr.e64->e_shnum;
-
- if (unlikely (result == 0) && ehdr.e64->e_shoff != 0)
- {
- if (ehdr.e64->e_shoff + sizeof (Elf64_Shdr) > maxsize)
- /* Cannot read the first section header. */
- return 0;
-
- Elf64_Xword size;
- if (likely (map_address != NULL) && e_ident[EI_DATA] == MY_ELFDATA
- && (ALLOW_UNALIGNED
- || (((size_t) ((char *) map_address + offset))
- & (__alignof__ (Elf64_Ehdr) - 1)) == 0))
- /* We can directly access the memory. */
- size = ((Elf64_Shdr *) ((char *) map_address + ehdr.e64->e_shoff
- + offset))->sh_size;
- else
- {
- if (likely (map_address != NULL))
- /* gcc will optimize the memcpy to a simple memory
- access while taking care of alignment issues. */
- memcpy (&size, &((Elf64_Shdr *) ((char *) map_address
- + ehdr.e64->e_shoff
- + offset))->sh_size,
- sizeof (Elf64_Xword));
- else
- if (unlikely (pread_retry (fildes, &size, sizeof (Elf64_Word),
- offset + ehdr.e64->e_shoff
- + offsetof (Elf64_Shdr, sh_size))
- != sizeof (Elf64_Xword)))
- return (size_t) -1l;
-
- if (e_ident[EI_DATA] != MY_ELFDATA)
- CONVERT (size);
- }
-
- if (size > ~((GElf_Word) 0))
- /* Invalid value, it is too large. */
- return (size_t) -1l;
-
- result = size;
- }
-
- /* If the section headers were truncated, pretend none were there. */
- if (ehdr.e64->e_shoff > maxsize
- || maxsize - ehdr.e64->e_shoff < sizeof (Elf64_Shdr) * result)
- result = 0;
- }
-
- return result;
-}
-
-
-/* Create descriptor for ELF file in memory. */
-static Elf *
-file_read_elf (int fildes, void *map_address, unsigned char *e_ident,
- off_t offset, size_t maxsize, Elf_Cmd cmd, Elf *parent)
-{
- /* Verify the binary is of the class we can handle. */
- if (unlikely ((e_ident[EI_CLASS] != ELFCLASS32
- && e_ident[EI_CLASS] != ELFCLASS64)
- /* We also can only handle two encodings. */
- || (e_ident[EI_DATA] != ELFDATA2LSB
- && e_ident[EI_DATA] != ELFDATA2MSB)))
- {
- /* Cannot handle this. */
- __libelf_seterrno (ELF_E_INVALID_FILE);
- return NULL;
- }
-
- /* Determine the number of sections. */
- size_t scncnt = get_shnum (map_address, e_ident, fildes, offset, maxsize);
- if (scncnt == (size_t) -1l)
- /* Could not determine the number of sections. */
- return NULL;
-
- /* We can now allocate the memory. */
- Elf *elf = allocate_elf (fildes, map_address, offset, maxsize, cmd, parent,
- ELF_K_ELF, scncnt * sizeof (Elf_Scn));
- if (elf == NULL)
- /* Not enough memory. */
- return NULL;
-
- /* Some more or less arbitrary value. */
- elf->state.elf.scnincr = 10;
-
- /* Make the class easily available. */
- elf->class = e_ident[EI_CLASS];
-
- if (e_ident[EI_CLASS] == ELFCLASS32)
- {
- /* This pointer might not be directly usable if the alignment is
- not sufficient for the architecture. */
- Elf32_Ehdr *ehdr = (Elf32_Ehdr *) ((char *) map_address + offset);
-
- assert ((unsigned int) scncnt == scncnt);
- elf->state.elf32.scns.cnt = elf->state.elf32.scns.max = scncnt;
-
- /* This is a 32-bit binary. */
- if (map_address != NULL && e_ident[EI_DATA] == MY_ELFDATA
- && (ALLOW_UNALIGNED
- || ((((uintptr_t) ehdr) & (__alignof__ (Elf32_Ehdr) - 1)) == 0
- && ((uintptr_t) ((char *) ehdr + ehdr->e_shoff)
- & (__alignof__ (Elf32_Shdr) - 1)) == 0
- && ((uintptr_t) ((char *) ehdr + ehdr->e_phoff)
- & (__alignof__ (Elf32_Phdr) - 1)) == 0)))
- {
- /* We can use the mmapped memory. */
- elf->state.elf32.ehdr = ehdr;
- elf->state.elf32.shdr
- = (Elf32_Shdr *) ((char *) ehdr + ehdr->e_shoff);
- if (ehdr->e_phnum > 0)
- /* Assign a value only if there really is a program
- header. Otherwise the value remains NULL. */
- elf->state.elf32.phdr
- = (Elf32_Phdr *) ((char *) ehdr + ehdr->e_phoff);
-
- for (size_t cnt = 0; cnt < scncnt; ++cnt)
- {
- elf->state.elf32.scns.data[cnt].index = cnt;
- elf->state.elf32.scns.data[cnt].elf = elf;
- elf->state.elf32.scns.data[cnt].shdr.e32 =
- &elf->state.elf32.shdr[cnt];
- elf->state.elf32.scns.data[cnt].rawdata_base =
- elf->state.elf32.scns.data[cnt].data_base =
- ((char *) map_address + offset
- + elf->state.elf32.shdr[cnt].sh_offset);
- elf->state.elf32.scns.data[cnt].list = &elf->state.elf32.scns;
-
- /* If this is a section with an extended index add a
- reference in the section which uses the extended
- index. */
- if (elf->state.elf32.shdr[cnt].sh_type == SHT_SYMTAB_SHNDX
- && elf->state.elf32.shdr[cnt].sh_link < scncnt)
- elf->state.elf32.scns.data[elf->state.elf32.shdr[cnt].sh_link].shndx_index
- = cnt;
-
- /* Set the own shndx_index field in case it has not yet
- been set. */
- if (elf->state.elf32.scns.data[cnt].shndx_index == 0)
- elf->state.elf32.scns.data[cnt].shndx_index = -1;
- }
- }
- else
- {
- /* Copy the ELF header. */
- elf->state.elf32.ehdr = memcpy (&elf->state.elf32.ehdr_mem, e_ident,
- sizeof (Elf32_Ehdr));
-
- if (e_ident[EI_DATA] != MY_ELFDATA)
- {
- CONVERT (elf->state.elf32.ehdr_mem.e_type);
- CONVERT (elf->state.elf32.ehdr_mem.e_machine);
- CONVERT (elf->state.elf32.ehdr_mem.e_version);
- CONVERT (elf->state.elf32.ehdr_mem.e_entry);
- CONVERT (elf->state.elf32.ehdr_mem.e_phoff);
- CONVERT (elf->state.elf32.ehdr_mem.e_shoff);
- CONVERT (elf->state.elf32.ehdr_mem.e_flags);
- CONVERT (elf->state.elf32.ehdr_mem.e_ehsize);
- CONVERT (elf->state.elf32.ehdr_mem.e_phentsize);
- CONVERT (elf->state.elf32.ehdr_mem.e_phnum);
- CONVERT (elf->state.elf32.ehdr_mem.e_shentsize);
- CONVERT (elf->state.elf32.ehdr_mem.e_shnum);
- CONVERT (elf->state.elf32.ehdr_mem.e_shstrndx);
- }
-
- for (size_t cnt = 0; cnt < scncnt; ++cnt)
- {
- elf->state.elf32.scns.data[cnt].index = cnt;
- elf->state.elf32.scns.data[cnt].elf = elf;
- elf->state.elf32.scns.data[cnt].list = &elf->state.elf32.scns;
- }
- }
-
- /* So far only one block with sections. */
- elf->state.elf32.scns_last = &elf->state.elf32.scns;
- }
- else
- {
- /* This pointer might not be directly usable if the alignment is
- not sufficient for the architecture. */
- Elf64_Ehdr *ehdr = (Elf64_Ehdr *) ((char *) map_address + offset);
-
- assert ((unsigned int) scncnt == scncnt);
- elf->state.elf64.scns.cnt = elf->state.elf64.scns.max = scncnt;
-
- /* This is a 64-bit binary. */
- if (map_address != NULL && e_ident[EI_DATA] == MY_ELFDATA
- && (ALLOW_UNALIGNED
- || ((((uintptr_t) ehdr) & (__alignof__ (Elf64_Ehdr) - 1)) == 0
- && ((uintptr_t) ((char *) ehdr + ehdr->e_shoff)
- & (__alignof__ (Elf64_Shdr) - 1)) == 0
- && ((uintptr_t) ((char *) ehdr + ehdr->e_phoff)
- & (__alignof__ (Elf64_Phdr) - 1)) == 0)))
- {
- /* We can use the mmapped memory. */
- elf->state.elf64.ehdr = ehdr;
- elf->state.elf64.shdr
- = (Elf64_Shdr *) ((char *) ehdr + ehdr->e_shoff);
- if (ehdr->e_phnum > 0)
- /* Assign a value only if there really is a program
- header. Otherwise the value remains NULL. */
- elf->state.elf64.phdr
- = (Elf64_Phdr *) ((char *) ehdr + ehdr->e_phoff);
-
- for (size_t cnt = 0; cnt < scncnt; ++cnt)
- {
- elf->state.elf64.scns.data[cnt].index = cnt;
- elf->state.elf64.scns.data[cnt].elf = elf;
- elf->state.elf64.scns.data[cnt].shdr.e64 =
- &elf->state.elf64.shdr[cnt];
- elf->state.elf64.scns.data[cnt].rawdata_base =
- elf->state.elf64.scns.data[cnt].data_base =
- ((char *) map_address + offset
- + elf->state.elf64.shdr[cnt].sh_offset);
- elf->state.elf64.scns.data[cnt].list = &elf->state.elf64.scns;
-
- /* If this is a section with an extended index add a
- reference in the section which uses the extended
- index. */
- if (elf->state.elf64.shdr[cnt].sh_type == SHT_SYMTAB_SHNDX
- && elf->state.elf64.shdr[cnt].sh_link < scncnt)
- elf->state.elf64.scns.data[elf->state.elf64.shdr[cnt].sh_link].shndx_index
- = cnt;
-
- /* Set the own shndx_index field in case it has not yet
- been set. */
- if (elf->state.elf64.scns.data[cnt].shndx_index == 0)
- elf->state.elf64.scns.data[cnt].shndx_index = -1;
- }
- }
- else
- {
- /* Copy the ELF header. */
- elf->state.elf64.ehdr = memcpy (&elf->state.elf64.ehdr_mem, e_ident,
- sizeof (Elf64_Ehdr));
-
- if (e_ident[EI_DATA] != MY_ELFDATA)
- {
- CONVERT (elf->state.elf64.ehdr_mem.e_type);
- CONVERT (elf->state.elf64.ehdr_mem.e_machine);
- CONVERT (elf->state.elf64.ehdr_mem.e_version);
- CONVERT (elf->state.elf64.ehdr_mem.e_entry);
- CONVERT (elf->state.elf64.ehdr_mem.e_phoff);
- CONVERT (elf->state.elf64.ehdr_mem.e_shoff);
- CONVERT (elf->state.elf64.ehdr_mem.e_flags);
- CONVERT (elf->state.elf64.ehdr_mem.e_ehsize);
- CONVERT (elf->state.elf64.ehdr_mem.e_phentsize);
- CONVERT (elf->state.elf64.ehdr_mem.e_phnum);
- CONVERT (elf->state.elf64.ehdr_mem.e_shentsize);
- CONVERT (elf->state.elf64.ehdr_mem.e_shnum);
- CONVERT (elf->state.elf64.ehdr_mem.e_shstrndx);
- }
-
- for (size_t cnt = 0; cnt < scncnt; ++cnt)
- {
- elf->state.elf64.scns.data[cnt].index = cnt;
- elf->state.elf64.scns.data[cnt].elf = elf;
- elf->state.elf64.scns.data[cnt].list = &elf->state.elf64.scns;
- }
- }
-
- /* So far only one block with sections. */
- elf->state.elf64.scns_last = &elf->state.elf64.scns;
- }
-
- return elf;
-}
-
-
-Elf *
-internal_function
-__libelf_read_mmaped_file (int fildes, void *map_address, off_t offset,
- size_t maxsize, Elf_Cmd cmd, Elf *parent)
-{
- /* We have to find out what kind of file this is. We handle ELF
- files and archives. To find out what we have we must look at the
- header. The header for an ELF file is EI_NIDENT bytes in size,
- the header for an archive file SARMAG bytes long. */
- unsigned char *e_ident = (unsigned char *) map_address + offset;
-
- /* See what kind of object we have here. */
- Elf_Kind kind = determine_kind (e_ident, maxsize);
-
- switch (kind)
- {
- case ELF_K_ELF:
- return file_read_elf (fildes, map_address, e_ident, offset, maxsize,
- cmd, parent);
-
- case ELF_K_AR:
- return file_read_ar (fildes, map_address, offset, maxsize, cmd, parent);
-
- default:
- break;
- }
-
- /* This case is easy. Since we cannot do anything with this file
- create a dummy descriptor. */
- return allocate_elf (fildes, map_address, offset, maxsize, cmd, parent,
- ELF_K_NONE, 0);
-}
-
-
-static Elf *
-read_unmmaped_file (int fildes, off_t offset, size_t maxsize, Elf_Cmd cmd,
- Elf *parent)
-{
- /* We have to find out what kind of file this is. We handle ELF
- files and archives. To find out what we have we must read the
- header. The identification header for an ELF file is EI_NIDENT
- bytes in size, but we read the whole ELF header since we will
- need it anyway later. For archives the header in SARMAG bytes
- long. Read the maximum of these numbers.
-
- XXX We have to change this for the extended `ar' format some day.
-
- Use a union to ensure alignment. We might later access the
- memory as a ElfXX_Ehdr. */
- union
- {
- Elf64_Ehdr ehdr;
- unsigned char header[MAX (sizeof (Elf64_Ehdr), SARMAG)];
- } mem;
-
- /* Read the head of the file. */
- ssize_t nread = pread_retry (fildes, mem.header,
- MIN (MAX (sizeof (Elf64_Ehdr), SARMAG),
- maxsize),
- offset);
- if (unlikely (nread == -1))
- /* We cannot even read the head of the file. Maybe FILDES is associated
- with an unseekable device. This is nothing we can handle. */
- return NULL;
-
- /* See what kind of object we have here. */
- Elf_Kind kind = determine_kind (mem.header, nread);
-
- switch (kind)
- {
- case ELF_K_AR:
- return file_read_ar (fildes, NULL, offset, maxsize, cmd, parent);
-
- case ELF_K_ELF:
- /* Make sure at least the ELF header is contained in the file. */
- if ((size_t) nread >= (mem.header[EI_CLASS] == ELFCLASS32
- ? sizeof (Elf32_Ehdr) : sizeof (Elf64_Ehdr)))
- return file_read_elf (fildes, NULL, mem.header, offset, maxsize, cmd,
- parent);
- /* FALLTHROUGH */
-
- default:
- break;
- }
-
- /* This case is easy. Since we cannot do anything with this file
- create a dummy descriptor. */
- return allocate_elf (fildes, NULL, offset, maxsize, cmd, parent,
- ELF_K_NONE, 0);
-}
-
-
-/* Open a file for reading. If possible we will try to mmap() the file. */
-static struct Elf *
-read_file (int fildes, off_t offset, size_t maxsize,
- Elf_Cmd cmd, Elf *parent)
-{
- void *map_address = NULL;
- int use_mmap = (cmd == ELF_C_READ_MMAP || cmd == ELF_C_RDWR_MMAP
- || cmd == ELF_C_WRITE_MMAP
- || cmd == ELF_C_READ_MMAP_PRIVATE);
-
-#if _MUDFLAP
- /* Mudflap doesn't grok that our mmap'd data is ok. */
- use_mmap = 0;
-#endif
-
- if (use_mmap)
- {
- if (parent == NULL)
- {
- if (maxsize == ~((size_t) 0))
- {
- /* We don't know in the moment how large the file is.
- Determine it now. */
- struct stat st;
-
- if (fstat (fildes, &st) == 0
- && (sizeof (size_t) >= sizeof (st.st_size)
- || st.st_size <= ~((size_t) 0)))
- maxsize = (size_t) st.st_size;
- }
-
- /* We try to map the file ourself. */
- map_address = mmap (NULL, maxsize, (cmd == ELF_C_READ_MMAP
- ? PROT_READ
- : PROT_READ|PROT_WRITE),
- cmd == ELF_C_READ_MMAP_PRIVATE
- || cmd == ELF_C_READ_MMAP
- ? MAP_PRIVATE : MAP_SHARED,
- fildes, offset);
-
- if (map_address == MAP_FAILED)
- map_address = NULL;
- }
- else
- {
- /* The parent is already loaded. Use it. */
- assert (maxsize != ~((size_t) 0));
-
- map_address = parent->map_address;
- }
- }
-
- /* If we have the file in memory optimize the access. */
- if (map_address != NULL)
- {
- assert (map_address != MAP_FAILED);
-
- struct Elf *result = __libelf_read_mmaped_file (fildes, map_address,
- offset, maxsize, cmd,
- parent);
-
- /* If something went wrong during the initialization unmap the
- memory if we mmaped here. */
- if (result == NULL
- && (parent == NULL
- || parent->map_address != map_address))
- munmap (map_address, maxsize);
- else if (parent == NULL)
- /* Remember that we mmap()ed the memory. */
- result->flags |= ELF_F_MMAPPED;
-
- return result;
- }
-
- /* Otherwise we have to do it the hard way. We read as much as necessary
- from the file whenever we need information which is not available. */
- return read_unmmaped_file (fildes, offset, maxsize, cmd, parent);
-}
-
-
-/* Find the entry with the long names for the content of this archive. */
-static const char *
-read_long_names (Elf *elf)
-{
- off_t offset = SARMAG; /* This is the first entry. */
- struct ar_hdr hdrm;
- struct ar_hdr *hdr;
- char *newp;
- size_t len;
-
- while (1)
- {
- if (elf->map_address != NULL)
- {
- if (offset + sizeof (struct ar_hdr) > elf->maximum_size)
- return NULL;
-
- /* The data is mapped. */
- hdr = (struct ar_hdr *) (elf->map_address + offset);
- }
- else
- {
- /* Read the header from the file. */
- if (unlikely (pread_retry (elf->fildes, &hdrm, sizeof (hdrm),
- elf->start_offset + offset)
- != sizeof (hdrm)))
- return NULL;
-
- hdr = &hdrm;
- }
-
- len = atol (hdr->ar_size);
-
- if (memcmp (hdr->ar_name, "// ", 16) == 0)
- break;
-
- offset += sizeof (struct ar_hdr) + ((len + 1) & ~1l);
- }
-
- /* Due to the stupid format of the long name table entry (which are not
- NUL terminted) we have to provide an appropriate representation anyhow.
- Therefore we always make a copy which has the appropriate form. */
- newp = (char *) malloc (len);
- if (newp != NULL)
- {
- char *runp;
-
- if (elf->map_address != NULL)
- /* Simply copy it over. */
- elf->state.ar.long_names = (char *) memcpy (newp,
- elf->map_address + offset
- + sizeof (struct ar_hdr),
- len);
- else
- {
- if (unlikely ((size_t) pread_retry (elf->fildes, newp, len,
- elf->start_offset + offset
- + sizeof (struct ar_hdr))
- != len))
- {
- /* We were not able to read all data. */
- free (newp);
- elf->state.ar.long_names = NULL;
- return NULL;
- }
- elf->state.ar.long_names = newp;
- }
-
- elf->state.ar.long_names_len = len;
-
- /* Now NUL-terminate the strings. */
- runp = newp;
- while (1)
- {
- runp = (char *) memchr (runp, '/', newp + len - runp);
- if (runp == NULL)
- /* This was the last entry. */
- break;
-
- /* NUL-terminate the string. */
- *runp = '\0';
-
- /* Skip the NUL byte and the \012. */
- runp += 2;
-
- /* A sanity check. Somebody might have generated invalid
- archive. */
- if (runp >= newp + len)
- break;
- }
- }
-
- return newp;
-}
-
-
-/* Read the next archive header. */
-int
-internal_function
-__libelf_next_arhdr_wrlock (elf)
- Elf *elf;
-{
- struct ar_hdr *ar_hdr;
- Elf_Arhdr *elf_ar_hdr;
-
- if (elf->map_address != NULL)
- {
- /* See whether this entry is in the file. */
- if (unlikely (elf->state.ar.offset + sizeof (struct ar_hdr)
- > elf->start_offset + elf->maximum_size))
- {
- /* This record is not anymore in the file. */
- __libelf_seterrno (ELF_E_RANGE);
- return -1;
- }
- ar_hdr = (struct ar_hdr *) (elf->map_address + elf->state.ar.offset);
- }
- else
- {
- ar_hdr = &elf->state.ar.ar_hdr;
-
- if (unlikely (pread_retry (elf->fildes, ar_hdr, sizeof (struct ar_hdr),
- elf->state.ar.offset)
- != sizeof (struct ar_hdr)))
- {
- /* Something went wrong while reading the file. */
- __libelf_seterrno (ELF_E_RANGE);
- return -1;
- }
- }
-
- /* One little consistency check. */
- if (unlikely (memcmp (ar_hdr->ar_fmag, ARFMAG, 2) != 0))
- {
- /* This is no valid archive. */
- __libelf_seterrno (ELF_E_ARCHIVE_FMAG);
- return -1;
- }
-
- /* Copy the raw name over to a NUL terminated buffer. */
- *((char *) __mempcpy (elf->state.ar.raw_name, ar_hdr->ar_name, 16)) = '\0';
-
- elf_ar_hdr = &elf->state.ar.elf_ar_hdr;
-
- /* Now convert the `struct ar_hdr' into `Elf_Arhdr'.
- Determine whether this is a special entry. */
- if (ar_hdr->ar_name[0] == '/')
- {
- if (ar_hdr->ar_name[1] == ' '
- && memcmp (ar_hdr->ar_name, "/ ", 16) == 0)
- /* This is the index. */
- elf_ar_hdr->ar_name = memcpy (elf->state.ar.ar_name, "/", 2);
- else if (ar_hdr->ar_name[1] == '/'
- && memcmp (ar_hdr->ar_name, "// ", 16) == 0)
- /* This is the array with the long names. */
- elf_ar_hdr->ar_name = memcpy (elf->state.ar.ar_name, "//", 3);
- else if (likely (isdigit (ar_hdr->ar_name[1])))
- {
- size_t offset;
-
- /* This is a long name. First we have to read the long name
- table, if this hasn't happened already. */
- if (unlikely (elf->state.ar.long_names == NULL
- && read_long_names (elf) == NULL))
- {
- /* No long name table although it is reference. The archive is
- broken. */
- __libelf_seterrno (ELF_E_INVALID_ARCHIVE);
- return -1;
- }
-
- offset = atol (ar_hdr->ar_name + 1);
- if (unlikely (offset >= elf->state.ar.long_names_len))
- {
- /* The index in the long name table is larger than the table. */
- __libelf_seterrno (ELF_E_INVALID_ARCHIVE);
- return -1;
- }
- elf_ar_hdr->ar_name = elf->state.ar.long_names + offset;
- }
- else
- {
- /* This is none of the known special entries. */
- __libelf_seterrno (ELF_E_INVALID_ARCHIVE);
- return -1;
- }
- }
- else
- {
- char *endp;
-
- /* It is a normal entry. Copy over the name. */
- endp = (char *) memccpy (elf->state.ar.ar_name, ar_hdr->ar_name,
- '/', 16);
- if (endp != NULL)
- endp[-1] = '\0';
- else
- {
- /* In the old BSD style of archive, there is no / terminator.
- Instead, there is space padding at the end of the name. */
- size_t i = 15;
- do
- elf->state.ar.ar_name[i] = '\0';
- while (i > 0 && elf->state.ar.ar_name[--i] == ' ');
- }
-
- elf_ar_hdr->ar_name = elf->state.ar.ar_name;
- }
-
- if (unlikely (ar_hdr->ar_size[0] == ' '))
- /* Something is really wrong. We cannot live without a size for
- the member since it will not be possible to find the next
- archive member. */
- {
- __libelf_seterrno (ELF_E_INVALID_ARCHIVE);
- return -1;
- }
-
- /* Since there are no specialized functions to convert ASCII to
- time_t, uid_t, gid_t, mode_t, and off_t we use either atol or
- atoll depending on the size of the types. We are also prepared
- for the case where the whole field in the `struct ar_hdr' is
- filled in which case we cannot simply use atol/l but instead have
- to create a temporary copy. */
-
-#define INT_FIELD(FIELD) \
- do \
- { \
- char buf[sizeof (ar_hdr->FIELD) + 1]; \
- const char *string = ar_hdr->FIELD; \
- if (ar_hdr->FIELD[sizeof (ar_hdr->FIELD) - 1] != ' ') \
- { \
- *((char *) __mempcpy (buf, ar_hdr->FIELD, sizeof (ar_hdr->FIELD))) \
- = '\0'; \
- string = buf; \
- } \
- if (sizeof (elf_ar_hdr->FIELD) <= sizeof (long int)) \
- elf_ar_hdr->FIELD = (__typeof (elf_ar_hdr->FIELD)) atol (string); \
- else \
- elf_ar_hdr->FIELD = (__typeof (elf_ar_hdr->FIELD)) atoll (string); \
- } \
- while (0)
-
- INT_FIELD (ar_date);
- INT_FIELD (ar_uid);
- INT_FIELD (ar_gid);
- INT_FIELD (ar_mode);
- INT_FIELD (ar_size);
-
- return 0;
-}
-
-
-/* We were asked to return a clone of an existing descriptor. This
- function must be called with the lock on the parent descriptor
- being held. */
-static Elf *
-dup_elf (int fildes, Elf_Cmd cmd, Elf *ref)
-{
- struct Elf *result;
-
- if (fildes == -1)
- /* Allow the user to pass -1 as the file descriptor for the new file. */
- fildes = ref->fildes;
- /* The file descriptor better should be the same. If it was disconnected
- already (using `elf_cntl') we do not test it. */
- else if (unlikely (ref->fildes != -1 && fildes != ref->fildes))
- {
- __libelf_seterrno (ELF_E_FD_MISMATCH);
- return NULL;
- }
-
- /* The mode must allow reading. I.e., a descriptor creating with a
- command different then ELF_C_READ, ELF_C_WRITE and ELF_C_RDWR is
- not allowed. */
- if (unlikely (ref->cmd != ELF_C_READ && ref->cmd != ELF_C_READ_MMAP
- && ref->cmd != ELF_C_WRITE && ref->cmd != ELF_C_WRITE_MMAP
- && ref->cmd != ELF_C_RDWR && ref->cmd != ELF_C_RDWR_MMAP
- && ref->cmd != ELF_C_READ_MMAP_PRIVATE))
- {
- __libelf_seterrno (ELF_E_INVALID_OP);
- return NULL;
- }
-
- /* Now it is time to distinguish between reading normal files and
- archives. Normal files can easily be handled be incrementing the
- reference counter and return the same descriptor. */
- if (ref->kind != ELF_K_AR)
- {
- ++ref->ref_count;
- return ref;
- }
-
- /* This is an archive. We must create a descriptor for the archive
- member the internal pointer of the archive file desriptor is
- pointing to. First read the header of the next member if this
- has not happened already. */
- if (ref->state.ar.elf_ar_hdr.ar_name == NULL
- && __libelf_next_arhdr_wrlock (ref) != 0)
- /* Something went wrong. Maybe there is no member left. */
- return NULL;
-
- /* We have all the information we need about the next archive member.
- Now create a descriptor for it. */
- result = read_file (fildes, ref->state.ar.offset + sizeof (struct ar_hdr),
- ref->state.ar.elf_ar_hdr.ar_size, cmd, ref);
-
- /* Enlist this new descriptor in the list of children. */
- if (result != NULL)
- {
- result->next = ref->state.ar.children;
- ref->state.ar.children = result;
- }
-
- return result;
-}
-
-
-/* Return desriptor for empty file ready for writing. */
-static struct Elf *
-write_file (int fd, Elf_Cmd cmd)
-{
- /* We simply create an empty `Elf' structure. */
-#define NSCNSALLOC 10
- Elf *result = allocate_elf (fd, NULL, 0, 0, cmd, NULL, ELF_K_ELF,
- NSCNSALLOC * sizeof (Elf_Scn));
-
- if (result != NULL)
- {
- /* We have to write to the file in any case. */
- result->flags = ELF_F_DIRTY;
-
- /* Some more or less arbitrary value. */
- result->state.elf.scnincr = NSCNSALLOC;
-
- /* We have allocated room for some sections. */
- assert (offsetof (struct Elf, state.elf32.scns)
- == offsetof (struct Elf, state.elf64.scns));
- result->state.elf.scns_last = &result->state.elf32.scns;
- result->state.elf32.scns.max = NSCNSALLOC;
- }
-
- return result;
-}
-
-
-/* Return a descriptor for the file belonging to FILDES. */
-Elf *
-elf_begin (fildes, cmd, ref)
- int fildes;
- Elf_Cmd cmd;
- Elf *ref;
-{
- Elf *retval;
-
- if (unlikely (! __libelf_version_initialized))
- {
- /* Version wasn't set so far. */
- __libelf_seterrno (ELF_E_NO_VERSION);
- return NULL;
- }
-
- if (ref != NULL)
- /* Make sure the descriptor is not suddenly going away. */
- rwlock_rdlock (ref->lock);
- else if (unlikely (fcntl (fildes, F_GETFL) == -1 && errno == EBADF))
- {
- /* We cannot do anything productive without a file descriptor. */
- __libelf_seterrno (ELF_E_INVALID_FILE);
- return NULL;
- }
-
- Elf *lock_dup_elf ()
- {
- /* We need wrlock to dup an archive. */
- if (ref->kind == ELF_K_AR)
- {
- rwlock_unlock (ref->lock);
- rwlock_wrlock (ref->lock);
- }
-
- /* Duplicate the descriptor. */
- return dup_elf (fildes, cmd, ref);
- }
-
- switch (cmd)
- {
- case ELF_C_NULL:
- /* We simply return a NULL pointer. */
- retval = NULL;
- break;
-
- case ELF_C_READ_MMAP_PRIVATE:
- /* If we have a reference it must also be opened this way. */
- if (unlikely (ref != NULL && ref->cmd != ELF_C_READ_MMAP_PRIVATE))
- {
- __libelf_seterrno (ELF_E_INVALID_CMD);
- retval = NULL;
- break;
- }
- /* FALLTHROUGH */
-
- case ELF_C_READ:
- case ELF_C_READ_MMAP:
- if (ref != NULL)
- retval = lock_dup_elf ();
- else
- /* Create descriptor for existing file. */
- retval = read_file (fildes, 0, ~((size_t) 0), cmd, NULL);
- break;
-
- case ELF_C_RDWR:
- case ELF_C_RDWR_MMAP:
- /* If we have a REF object it must also be opened using this
- command. */
- if (ref != NULL)
- {
- if (unlikely (ref->cmd != ELF_C_RDWR && ref->cmd != ELF_C_RDWR_MMAP
- && ref->cmd != ELF_C_WRITE
- && ref->cmd != ELF_C_WRITE_MMAP))
- {
- /* This is not ok. REF must also be opened for writing. */
- __libelf_seterrno (ELF_E_INVALID_CMD);
- retval = NULL;
- }
- else
- retval = lock_dup_elf ();
- }
- else
- /* Create descriptor for existing file. */
- retval = read_file (fildes, 0, ~((size_t) 0), cmd, NULL);
- break;
-
- case ELF_C_WRITE:
- case ELF_C_WRITE_MMAP:
- /* We ignore REF and prepare a descriptor to write a new file. */
- retval = write_file (fildes, cmd);
- break;
-
- default:
- __libelf_seterrno (ELF_E_INVALID_CMD);
- retval = NULL;
- break;
- }
-
- /* Release the lock. */
- if (ref != NULL)
- rwlock_unlock (ref->lock);
-
- return retval;
-}
-INTDEF(elf_begin)
diff --git a/libelf/elf_clone.c b/libelf/elf_clone.c
deleted file mode 100644
index 8b699fa..0000000
--- a/libelf/elf_clone.c
+++ /dev/null
@@ -1,102 +0,0 @@
-/* Create clone of a given descriptor.
- Copyright (C) 2003, 2004 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <stddef.h>
-#include "libelfP.h"
-#include "common.h"
-
-
-Elf *
-elf_clone (Elf *elf, Elf_Cmd cmd)
-{
- Elf *retval = NULL;
-
- if (elf == NULL)
- /* Some earlier mistake. */
- return NULL;
-
- /* Make sure the descriptor is not suddenly going away. */
- rwlock_rdlock (elf->lock);
-
- if (cmd != ELF_C_EMPTY)
- // XXX TODO handle ELF_C_READ/WRITE etc
- goto out;
-
- retval = allocate_elf (elf->fildes, elf->map_address, elf->start_offset,
- elf->maximum_size, elf->cmd, elf->parent, elf->kind,
- elf->state.elf32.scns.max * sizeof (Elf_Scn));
- if (retval != NULL)
- {
- /* We have to write to the file in any case. */
- retval->flags = ELF_F_DIRTY;
-
- /* Some more or less arbitrary value. */
- retval->state.elf.scnincr = 10;
-
- /* We have allocated room for some sections. */
- assert (offsetof (struct Elf, state.elf32.scns)
- == offsetof (struct Elf, state.elf64.scns));
- retval->state.elf.scns_last = &retval->state.elf32.scns;
- retval->state.elf32.scns.max = elf->state.elf32.scns.max;
-
- retval->class = elf->class;
- }
-
- /* Release the lock. */
- out:
- rwlock_unlock (elf->lock);
-
- return retval;
-}
diff --git a/libelf/elf_cntl.c b/libelf/elf_cntl.c
deleted file mode 100644
index fd5b47b..0000000
--- a/libelf/elf_cntl.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/* Control an ELF file desrciptor.
- Copyright (C) 1998, 1999, 2000, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <unistd.h>
-
-#include "libelfP.h"
-
-
-int
-elf_cntl (elf, cmd)
- Elf *elf;
- Elf_Cmd cmd;
-{
- int result = 0;
-
- if (elf == NULL)
- return -1;
-
- if (elf->fildes == -1)
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return -1;
- }
-
- rwlock_wrlock (elf->lock);
-
- switch (cmd)
- {
- case ELF_C_FDREAD:
- /* If not all of the file is in the memory read it now. */
- if (elf->map_address == NULL && __libelf_readall (elf) == NULL)
- {
- /* We were not able to read everything. */
- result = -1;
- break;
- }
- /* FALLTHROUGH */
-
- case ELF_C_FDDONE:
- /* Mark the file descriptor as not usable. */
- elf->fildes = -1;
- break;
-
- default:
- __libelf_seterrno (ELF_E_INVALID_CMD);
- result = -1;
- break;
- }
-
- rwlock_unlock (elf->lock);
-
- return result;
-}
diff --git a/libelf/elf_end.c b/libelf/elf_end.c
deleted file mode 100644
index 5112eae..0000000
--- a/libelf/elf_end.c
+++ /dev/null
@@ -1,252 +0,0 @@
-/* Free resources associated with Elf descriptor.
- Copyright (C) 1998,1999,2000,2001,2002,2004,2005,2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <sys/mman.h>
-
-#include "libelfP.h"
-
-
-int
-elf_end (elf)
- Elf *elf;
-{
- Elf *parent;
-
- if (elf == NULL)
- /* This is allowed and is a no-op. */
- return 0;
-
- /* Make sure we are alone. */
- rwlock_wrlock (elf->lock);
-
- if (elf->ref_count != 0 && --elf->ref_count != 0)
- {
- /* Not yet the last activation. */
- int result = elf->ref_count;
- rwlock_unlock (elf->lock);
- return result;
- }
-
- if (elf->kind == ELF_K_AR)
- {
- /* We cannot remove the descriptor now since we still have some
- descriptors which depend on it. But we can free the archive
- symbol table since this is only available via the archive ELF
- descriptor. The long name table cannot be freed yet since
- the archive headers for the ELF files in the archive point
- into this array. */
- if (elf->state.ar.ar_sym != (Elf_Arsym *) -1l)
- free (elf->state.ar.ar_sym);
- elf->state.ar.ar_sym = NULL;
-
- if (elf->state.ar.children != NULL)
- return 0;
- }
-
- /* Remove this structure from the children list. */
- parent = elf->parent;
- if (parent != NULL)
- {
- /* This is tricky. Lock must be acquire from the father to
- the child but here we already have the child lock. We
- solve this problem by giving free the child lock. The
- state of REF_COUNT==0 is handled all over the library, so
- this should be ok. */
- rwlock_unlock (elf->lock);
- rwlock_rdlock (parent->lock);
- rwlock_wrlock (elf->lock);
-
- if (parent->state.ar.children == elf)
- parent->state.ar.children = elf->next;
- else
- {
- struct Elf *child = parent->state.ar.children;
-
- while (child->next != elf)
- child = child->next;
-
- child->next = elf->next;
- }
-
- rwlock_unlock (parent->lock);
- }
-
- /* This was the last activation. Free all resources. */
- switch (elf->kind)
- {
- case ELF_K_AR:
- if (elf->state.ar.long_names != NULL)
- free (elf->state.ar.long_names);
- break;
-
- case ELF_K_ELF:
- {
- Elf_Data_Chunk *rawchunks
- = (elf->class == ELFCLASS32
- || (offsetof (struct Elf, state.elf32.rawchunks)
- == offsetof (struct Elf, state.elf64.rawchunks))
- ? elf->state.elf32.rawchunks
- : elf->state.elf64.rawchunks);
- while (rawchunks != NULL)
- {
- Elf_Data_Chunk *next = rawchunks->next;
- if (rawchunks->dummy_scn.flags & ELF_F_MALLOCED)
- free (rawchunks->data.d.d_buf);
- free (rawchunks);
- rawchunks = next;
- }
-
- Elf_ScnList *list = (elf->class == ELFCLASS32
- || (offsetof (struct Elf, state.elf32.scns)
- == offsetof (struct Elf, state.elf64.scns))
- ? &elf->state.elf32.scns
- : &elf->state.elf64.scns);
-
- do
- {
- /* Free all separately allocated section headers. */
- size_t cnt = list->max;
-
- while (cnt-- > 0)
- {
- /* These pointers can be NULL; it's safe to use
- 'free' since it will check for this. */
- Elf_Scn *scn = &list->data[cnt];
- Elf_Data_List *runp;
-
- if ((scn->shdr_flags & ELF_F_MALLOCED) != 0)
- /* It doesn't matter which pointer. */
- free (scn->shdr.e32);
-
- /* If the file has the same byte order and the
- architecture doesn't require overly stringent
- alignment the raw data buffer is the same as the
- one used for presenting to the caller. */
- if (scn->data_base != scn->rawdata_base)
- free (scn->data_base);
-
- /* The section data is allocated if we couldn't mmap
- the file. */
- if (elf->map_address == NULL)
- free (scn->rawdata_base);
-
- /* Free the list of data buffers for the section.
- We don't free the buffers themselves since this
- is the users job. */
- runp = scn->data_list.next;
- while (runp != NULL)
- {
- Elf_Data_List *oldp = runp;
- runp = runp->next;
- if ((oldp->flags & ELF_F_MALLOCED) != 0)
- free (oldp);
- }
- }
-
- /* Free the memory for the array. */
- Elf_ScnList *oldp = list;
- list = list->next;
- assert (list == NULL || oldp->cnt == oldp->max);
- if (oldp != (elf->class == ELFCLASS32
- || (offsetof (struct Elf, state.elf32.scns)
- == offsetof (struct Elf, state.elf64.scns))
- ? &elf->state.elf32.scns
- : &elf->state.elf64.scns))
- free (oldp);
- }
- while (list != NULL);
- }
-
- /* Free the section header. */
- if (elf->state.elf.shdr_malloced != 0)
- free (elf->class == ELFCLASS32
- || (offsetof (struct Elf, state.elf32.shdr)
- == offsetof (struct Elf, state.elf64.shdr))
- ? (void *) elf->state.elf32.shdr
- : (void *) elf->state.elf64.shdr);
-
- /* Free the program header. */
- if ((elf->state.elf.phdr_flags & ELF_F_MALLOCED) != 0)
- free (elf->class == ELFCLASS32
- || (offsetof (struct Elf, state.elf32.phdr)
- == offsetof (struct Elf, state.elf64.phdr))
- ? (void *) elf->state.elf32.phdr
- : (void *) elf->state.elf64.phdr);
- break;
-
- default:
- break;
- }
-
- if (elf->map_address != NULL && parent == NULL)
- {
- /* The file was read or mapped for this descriptor. */
- if ((elf->flags & ELF_F_MALLOCED) != 0)
- free (elf->map_address);
- else if ((elf->flags & ELF_F_MMAPPED) != 0)
- munmap (elf->map_address, elf->maximum_size);
- }
-
- rwlock_fini (elf->lock);
-
- /* Finally the descriptor itself. */
- free (elf);
-
- return (parent != NULL && parent->ref_count == 0
- ? INTUSE(elf_end) (parent) : 0);
-}
-INTDEF(elf_end)
diff --git a/libelf/elf_error.c b/libelf/elf_error.c
deleted file mode 100644
index 5e00372..0000000
--- a/libelf/elf_error.c
+++ /dev/null
@@ -1,407 +0,0 @@
-/* Error handling in libelf.
- Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <libintl.h>
-#include <stdbool.h>
-#include <stdint.h>
-#include <stdlib.h>
-
-#include "libelfP.h"
-
-
-#ifdef USE_TLS
-/* The error number. */
-static __thread int global_error;
-#else
-/* This is the key for the thread specific memory. */
-static tls_key_t key;
-
-/* The error number. Used in non-threaded programs. */
-static int global_error;
-static bool threaded;
-/* We need to initialize the thread-specific data. */
-once_define (static, once);
-
-/* The initialization and destruction functions. */
-static void init (void);
-static void free_key_mem (void *mem);
-#endif /* TLS */
-
-
-int
-elf_errno (void)
-{
- int result;
-
-#ifndef USE_TLS
- /* If we have not yet initialized the buffer do it now. */
- once_execute (once, init);
-
- if (threaded)
- {
- /* We do not allocate memory for the data. It is only a word.
- We can store it in place of the pointer. */
- result = (intptr_t) getspecific (key);
-
- setspecific (key, (void *) (intptr_t) ELF_E_NOERROR);
- return result;
- }
-#endif /* TLS */
-
- result = global_error;
- global_error = ELF_E_NOERROR;
- return result;
-}
-
-
-/* Return the appropriate message for the error. */
-static const char msgstr[] =
-{
-#define ELF_E_NOERROR_IDX 0
- N_("no error")
- "\0"
-#define ELF_E_UNKNOWN_ERROR_IDX (ELF_E_NOERROR_IDX + sizeof "no error")
- N_("unknown error")
- "\0"
-#define ELF_E_UNKNOWN_VERSION_IDX \
- (ELF_E_UNKNOWN_ERROR_IDX + sizeof "unknown error")
- N_("unknown version")
- "\0"
-#define ELF_E_UNKNOWN_TYPE_IDX \
- (ELF_E_UNKNOWN_VERSION_IDX + sizeof "unknown version")
- N_("unknown type")
- "\0"
-#define ELF_E_INVALID_HANDLE_IDX \
- (ELF_E_UNKNOWN_TYPE_IDX + sizeof "unknown type")
- N_("invalid `Elf' handle")
- "\0"
-#define ELF_E_SOURCE_SIZE_IDX \
- (ELF_E_INVALID_HANDLE_IDX + sizeof "invalid `Elf' handle")
- N_("invalid size of source operand")
- "\0"
-#define ELF_E_DEST_SIZE_IDX \
- (ELF_E_SOURCE_SIZE_IDX + sizeof "invalid size of source operand")
- N_("invalid size of destination operand")
- "\0"
-#define ELF_E_INVALID_ENCODING_IDX \
- (ELF_E_DEST_SIZE_IDX + sizeof "invalid size of destination operand")
- N_("invalid encoding")
- "\0"
-#define ELF_E_NOMEM_IDX \
- (ELF_E_INVALID_ENCODING_IDX + sizeof "invalid encoding")
- N_("out of memory")
- "\0"
-#define ELF_E_INVALID_FILE_IDX \
- (ELF_E_NOMEM_IDX + sizeof "out of memory")
- N_("invalid file descriptor")
- "\0"
-#define ELF_E_INVALID_OP_IDX \
- (ELF_E_INVALID_FILE_IDX + sizeof "invalid file descriptor")
- N_("invalid operation")
- "\0"
-#define ELF_E_NO_VERSION_IDX \
- (ELF_E_INVALID_OP_IDX + sizeof "invalid operation")
- N_("ELF version not set")
- "\0"
-#define ELF_E_INVALID_CMD_IDX \
- (ELF_E_NO_VERSION_IDX + sizeof "ELF version not set")
- N_("invalid command")
- "\0"
-#define ELF_E_RANGE_IDX \
- (ELF_E_INVALID_CMD_IDX + sizeof "invalid command")
- N_("offset out of range")
- "\0"
-#define ELF_E_ARCHIVE_FMAG_IDX \
- (ELF_E_RANGE_IDX + sizeof "offset out of range")
- N_("invalid fmag field in archive header")
- "\0"
-#define ELF_E_INVALID_ARCHIVE_IDX \
- (ELF_E_ARCHIVE_FMAG_IDX + sizeof "invalid fmag field in archive header")
- N_("invalid archive file")
- "\0"
-#define ELF_E_NO_ARCHIVE_IDX \
- (ELF_E_INVALID_ARCHIVE_IDX + sizeof "invalid archive file")
- N_("descriptor is not for an archive")
- "\0"
-#define ELF_E_NO_INDEX_IDX \
- (ELF_E_NO_ARCHIVE_IDX + sizeof "descriptor is not for an archive")
- N_("no index available")
- "\0"
-#define ELF_E_READ_ERROR_IDX \
- (ELF_E_NO_INDEX_IDX + sizeof "no index available")
- N_("cannot read data from file")
- "\0"
-#define ELF_E_WRITE_ERROR_IDX \
- (ELF_E_READ_ERROR_IDX + sizeof "cannot read data from file")
- N_("cannot write data to file")
- "\0"
-#define ELF_E_INVALID_CLASS_IDX \
- (ELF_E_WRITE_ERROR_IDX + sizeof "cannot write data to file")
- N_("invalid binary class")
- "\0"
-#define ELF_E_INVALID_INDEX_IDX \
- (ELF_E_INVALID_CLASS_IDX + sizeof "invalid binary class")
- N_("invalid section index")
- "\0"
-#define ELF_E_INVALID_OPERAND_IDX \
- (ELF_E_INVALID_INDEX_IDX + sizeof "invalid section index")
- N_("invalid operand")
- "\0"
-#define ELF_E_INVALID_SECTION_IDX \
- (ELF_E_INVALID_OPERAND_IDX + sizeof "invalid operand")
- N_("invalid section")
- "\0"
-#define ELF_E_INVALID_COMMAND_IDX \
- (ELF_E_INVALID_SECTION_IDX + sizeof "invalid section")
- N_("invalid command")
- "\0"
-#define ELF_E_WRONG_ORDER_EHDR_IDX \
- (ELF_E_INVALID_COMMAND_IDX + sizeof "invalid command")
- N_("executable header not created first")
- "\0"
-#define ELF_E_FD_DISABLED_IDX \
- (ELF_E_WRONG_ORDER_EHDR_IDX + sizeof "executable header not created first")
- N_("file descriptor disabled")
- "\0"
-#define ELF_E_FD_MISMATCH_IDX \
- (ELF_E_FD_DISABLED_IDX + sizeof "file descriptor disabled")
- N_("archive/member fildes mismatch")
- "\0"
-#define ELF_E_OFFSET_RANGE_IDX \
- (ELF_E_FD_MISMATCH_IDX + sizeof "archive/member fildes mismatch")
- N_("offset out of range")
- "\0"
-#define ELF_E_NOT_NUL_SECTION_IDX \
- (ELF_E_OFFSET_RANGE_IDX + sizeof "offset out of range")
- N_("cannot manipulate null section")
- "\0"
-#define ELF_E_DATA_MISMATCH_IDX \
- (ELF_E_NOT_NUL_SECTION_IDX + sizeof "cannot manipulate null section")
- N_("data/scn mismatch")
- "\0"
-#define ELF_E_INVALID_SECTION_HEADER_IDX \
- (ELF_E_DATA_MISMATCH_IDX + sizeof "data/scn mismatch")
- N_("invalid section header")
- "\0"
-#define ELF_E_INVALID_DATA_IDX \
- (ELF_E_INVALID_SECTION_HEADER_IDX + sizeof "invalid section header")
- N_("invalid data")
- "\0"
-#define ELF_E_DATA_ENCODING_IDX \
- (ELF_E_INVALID_DATA_IDX + sizeof "invalid data")
- N_("unknown data encoding")
- "\0"
-#define ELF_E_SECTION_TOO_SMALL_IDX \
- (ELF_E_DATA_ENCODING_IDX + sizeof "unknown data encoding")
- N_("section `sh_size' too small for data")
- "\0"
-#define ELF_E_INVALID_ALIGN_IDX \
- (ELF_E_SECTION_TOO_SMALL_IDX + sizeof "section `sh_size' too small for data")
- N_("invalid section alignment")
- "\0"
-#define ELF_E_INVALID_SHENTSIZE_IDX \
- (ELF_E_INVALID_ALIGN_IDX + sizeof "invalid section alignment")
- N_("invalid section entry size")
- "\0"
-#define ELF_E_UPDATE_RO_IDX \
- (ELF_E_INVALID_SHENTSIZE_IDX + sizeof "invalid section entry size")
- N_("update() for write on read-only file")
- "\0"
-#define ELF_E_NOFILE_IDX \
- (ELF_E_UPDATE_RO_IDX + sizeof "update() for write on read-only file")
- N_("no such file")
- "\0"
-#define ELF_E_GROUP_NOT_REL_IDX \
- (ELF_E_NOFILE_IDX + sizeof "no such file")
- N_("only relocatable files can contain section groups")
- "\0"
-#define ELF_E_INVALID_PHDR_IDX \
- (ELF_E_GROUP_NOT_REL_IDX \
- + sizeof "only relocatable files can contain section groups")
- N_("program header only allowed in executables, shared objects, and \
-core files")
- "\0"
-#define ELF_E_NO_PHDR_IDX \
- (ELF_E_INVALID_PHDR_IDX \
- + sizeof "program header only allowed in executables, shared objects, and \
-core files")
- N_("file has no program header")
- "\0"
-#define ELF_E_INVALID_OFFSET_IDX \
- (ELF_E_NO_PHDR_IDX \
- + sizeof "file has no program header")
- N_("invalid offset")
-};
-
-
-static const uint_fast16_t msgidx[ELF_E_NUM] =
-{
- [ELF_E_NOERROR] = ELF_E_NOERROR_IDX,
- [ELF_E_UNKNOWN_ERROR] = ELF_E_UNKNOWN_ERROR_IDX,
- [ELF_E_UNKNOWN_VERSION] = ELF_E_UNKNOWN_VERSION_IDX,
- [ELF_E_UNKNOWN_TYPE] = ELF_E_UNKNOWN_TYPE_IDX,
- [ELF_E_INVALID_HANDLE] = ELF_E_INVALID_HANDLE_IDX,
- [ELF_E_SOURCE_SIZE] = ELF_E_SOURCE_SIZE_IDX,
- [ELF_E_DEST_SIZE] = ELF_E_DEST_SIZE_IDX,
- [ELF_E_INVALID_ENCODING] = ELF_E_INVALID_ENCODING_IDX,
- [ELF_E_NOMEM] = ELF_E_NOMEM_IDX,
- [ELF_E_INVALID_FILE] = ELF_E_INVALID_FILE_IDX,
- [ELF_E_INVALID_OP] = ELF_E_INVALID_OP_IDX,
- [ELF_E_NO_VERSION] = ELF_E_NO_VERSION_IDX,
- [ELF_E_INVALID_CMD] = ELF_E_INVALID_CMD_IDX,
- [ELF_E_RANGE] = ELF_E_RANGE_IDX,
- [ELF_E_ARCHIVE_FMAG] = ELF_E_ARCHIVE_FMAG_IDX,
- [ELF_E_INVALID_ARCHIVE] = ELF_E_INVALID_ARCHIVE_IDX,
- [ELF_E_NO_ARCHIVE] = ELF_E_NO_ARCHIVE_IDX,
- [ELF_E_NO_INDEX] = ELF_E_NO_INDEX_IDX,
- [ELF_E_READ_ERROR] = ELF_E_READ_ERROR_IDX,
- [ELF_E_WRITE_ERROR] = ELF_E_WRITE_ERROR_IDX,
- [ELF_E_INVALID_CLASS] = ELF_E_INVALID_CLASS_IDX,
- [ELF_E_INVALID_INDEX] = ELF_E_INVALID_INDEX_IDX,
- [ELF_E_INVALID_OPERAND] = ELF_E_INVALID_OPERAND_IDX,
- [ELF_E_INVALID_SECTION] = ELF_E_INVALID_SECTION_IDX,
- [ELF_E_INVALID_COMMAND] = ELF_E_INVALID_COMMAND_IDX,
- [ELF_E_WRONG_ORDER_EHDR] = ELF_E_WRONG_ORDER_EHDR_IDX,
- [ELF_E_FD_DISABLED] = ELF_E_FD_DISABLED_IDX,
- [ELF_E_FD_MISMATCH] = ELF_E_FD_MISMATCH_IDX,
- [ELF_E_OFFSET_RANGE] = ELF_E_OFFSET_RANGE_IDX,
- [ELF_E_NOT_NUL_SECTION] = ELF_E_NOT_NUL_SECTION_IDX,
- [ELF_E_DATA_MISMATCH] = ELF_E_DATA_MISMATCH_IDX,
- [ELF_E_INVALID_SECTION_HEADER] = ELF_E_INVALID_SECTION_HEADER_IDX,
- [ELF_E_INVALID_DATA] = ELF_E_INVALID_DATA_IDX,
- [ELF_E_DATA_ENCODING] = ELF_E_DATA_ENCODING_IDX,
- [ELF_E_SECTION_TOO_SMALL] = ELF_E_SECTION_TOO_SMALL_IDX,
- [ELF_E_INVALID_ALIGN] = ELF_E_INVALID_ALIGN_IDX,
- [ELF_E_INVALID_SHENTSIZE] = ELF_E_INVALID_SHENTSIZE_IDX,
- [ELF_E_UPDATE_RO] = ELF_E_UPDATE_RO_IDX,
- [ELF_E_NOFILE] = ELF_E_NOFILE_IDX,
- [ELF_E_GROUP_NOT_REL] = ELF_E_GROUP_NOT_REL_IDX,
- [ELF_E_INVALID_PHDR] = ELF_E_INVALID_PHDR_IDX,
- [ELF_E_NO_PHDR] = ELF_E_NO_PHDR_IDX,
- [ELF_E_INVALID_OFFSET] = ELF_E_INVALID_OFFSET_IDX
-};
-#define nmsgidx ((int) (sizeof (msgidx) / sizeof (msgidx[0])))
-
-
-void
-__libelf_seterrno (value)
- int value;
-{
-#ifndef USE_TLS
- /* If we have not yet initialized the buffer do it now. */
- once_execute (once, init);
-
- if (threaded)
- /* We do not allocate memory for the data. It is only a word.
- We can store it in place of the pointer. */
- setspecific (key, (void *) (intptr_t) value);
-#endif /* TLS */
-
- global_error = value >= 0 && value < nmsgidx ? value : ELF_E_UNKNOWN_ERROR;
-}
-
-
-const char *
-elf_errmsg (error)
- int error;
-{
- int last_error;
-
-#ifndef USE_TLS
- /* If we have not yet initialized the buffer do it now. */
- once_execute (once, init);
-
- if ((error == 0 || error == -1) && threaded)
- /* We do not allocate memory for the data. It is only a word.
- We can store it in place of the pointer. */
- last_error = (intptr_t) getspecific (key);
- else
-#endif /* TLS */
- last_error = global_error;
-
- if (error == 0)
- {
- assert (msgidx[last_error] < sizeof (msgstr));
- return last_error != 0 ? _(msgstr + msgidx[last_error]) : NULL;
- }
- else if (error < -1 || error >= nmsgidx)
- return _(msgstr + ELF_E_UNKNOWN_ERROR_IDX);
-
- assert (msgidx[error == -1 ? last_error : error] < sizeof (msgstr));
- return _(msgstr + msgidx[error == -1 ? last_error : error]);
-}
-
-
-#ifndef USE_TLS
-/* Free the thread specific data, this is done if a thread terminates. */
-static void
-free_key_mem (void *mem __attribute__ ((unused)))
-{
- setspecific (key, NULL);
-}
-
-
-/* Initialize the key for the global variable. */
-static void
-init (void)
-{
- // XXX Screw you, gcc4, the unused function attribute does not work.
- __asm ("" :: "r" (free_key_mem));
-
- if (key_create (&key, free_key_mem) == 0)
- /* Creating the key succeeded. */
- threaded = true;
-}
-#endif /* TLS */
diff --git a/libelf/elf_fill.c b/libelf/elf_fill.c
deleted file mode 100644
index ae69951..0000000
--- a/libelf/elf_fill.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* Set fill byte used when constructing ELF objects.
- Copyright (C) 1998, 2000, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libelf.h>
-
-#include "libelfP.h"
-
-
-int __libelf_fill_byte;
-
-
-void
-elf_fill (fill)
- int fill;
-{
- __libelf_fill_byte = fill;
-}
diff --git a/libelf/elf_flagdata.c b/libelf/elf_flagdata.c
deleted file mode 100644
index a2cbdd9..0000000
--- a/libelf/elf_flagdata.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/* Manipulate ELF data flag.
- Copyright (C) 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libelf.h>
-#include <stddef.h>
-
-#include "libelfP.h"
-
-
-unsigned int
-elf_flagdata (data, cmd, flags)
- Elf_Data *data;
- Elf_Cmd cmd;
- unsigned int flags;
-{
- Elf_Data_Scn *data_scn;
- unsigned int result;
-
- if (data == NULL)
- return 0;
-
- data_scn = (Elf_Data_Scn *) data;
-
- if (data_scn == NULL || unlikely (data_scn->s->elf->kind != ELF_K_ELF))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return 0;
- }
-
- if (likely (cmd == ELF_C_SET))
- result = (data_scn->s->flags |= (flags & ELF_F_DIRTY));
- else if (likely (cmd == ELF_C_CLR))
- result = (data_scn->s->flags &= ~(flags & ELF_F_DIRTY));
- else
- {
- __libelf_seterrno (ELF_E_INVALID_COMMAND);
- return 0;
- }
-
- return result;
-}
diff --git a/libelf/elf_flagehdr.c b/libelf/elf_flagehdr.c
deleted file mode 100644
index 499cf1d..0000000
--- a/libelf/elf_flagehdr.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/* Manipulate ELF header flags.
- Copyright (C) 1999, 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1999.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libelf.h>
-#include <stddef.h>
-
-#include "libelfP.h"
-
-
-unsigned int
-elf_flagehdr (elf, cmd, flags)
- Elf *elf;
- Elf_Cmd cmd;
- unsigned int flags;
-{
- unsigned int result;
-
- if (elf == NULL)
- return 0;
-
- if (unlikely (elf->kind != ELF_K_ELF))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return 0;
- }
-
- if (likely (cmd == ELF_C_SET))
- result = (elf->state.elf.ehdr_flags |= (flags & ELF_F_DIRTY));
- else if (cmd == ELF_C_CLR)
- result = (elf->state.elf.ehdr_flags &= ~(flags & ELF_F_DIRTY));
- else
- {
- __libelf_seterrno (ELF_E_INVALID_COMMAND);
- return 0;
- }
-
- return result;
-}
diff --git a/libelf/elf_flagelf.c b/libelf/elf_flagelf.c
deleted file mode 100644
index 4ea4500..0000000
--- a/libelf/elf_flagelf.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/* Manipulate ELF file flags.
- Copyright (C) 1999, 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1999.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libelf.h>
-#include <stddef.h>
-
-#include "libelfP.h"
-
-
-unsigned int
-elf_flagelf (elf, cmd, flags)
- Elf *elf;
- Elf_Cmd cmd;
- unsigned int flags;
-{
- unsigned int result;
-
- if (elf == NULL)
- return 0;
-
- if (unlikely (elf->kind != ELF_K_ELF))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return 0;
- }
-
- if (likely (cmd == ELF_C_SET))
- result = (elf->flags
- |= (flags & (ELF_F_DIRTY | ELF_F_LAYOUT | ELF_F_PERMISSIVE)));
- else if (likely (cmd == ELF_C_CLR))
- result = (elf->flags
- &= ~(flags & (ELF_F_DIRTY | ELF_F_LAYOUT | ELF_F_PERMISSIVE)));
- else
- {
- __libelf_seterrno (ELF_E_INVALID_COMMAND);
- return 0;
- }
-
- return result;
-}
diff --git a/libelf/elf_flagphdr.c b/libelf/elf_flagphdr.c
deleted file mode 100644
index de1bccf..0000000
--- a/libelf/elf_flagphdr.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/* Manipulate ELF program header flags.
- Copyright (C) 1999, 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1999.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libelf.h>
-#include <stddef.h>
-
-#include "libelfP.h"
-
-
-unsigned int
-elf_flagphdr (elf, cmd, flags)
- Elf *elf;
- Elf_Cmd cmd;
- unsigned int flags;
-{
- unsigned int result;
-
- if (elf == NULL)
- return 0;
-
- if (unlikely (elf->kind != ELF_K_ELF))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return 0;
- }
-
- if (likely (cmd == ELF_C_SET))
- result = (elf->state.elf.phdr_flags |= (flags & ELF_F_DIRTY));
- else if (likely (cmd == ELF_C_CLR))
- result = (elf->state.elf.phdr_flags &= ~(flags & ELF_F_DIRTY));
- else
- {
- __libelf_seterrno (ELF_E_INVALID_COMMAND);
- return 0;
- }
-
- return result;
-}
diff --git a/libelf/elf_flagscn.c b/libelf/elf_flagscn.c
deleted file mode 100644
index f4dba95..0000000
--- a/libelf/elf_flagscn.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/* Manipulate ELF section flags.
- Copyright (C) 1999, 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1999.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libelf.h>
-#include <stddef.h>
-
-#include "libelfP.h"
-
-
-unsigned int
-elf_flagscn (scn, cmd, flags)
- Elf_Scn *scn;
- Elf_Cmd cmd;
- unsigned int flags;
-{
- unsigned int result;
-
- if (scn == NULL)
- return 0;
-
- if (unlikely (scn->elf->kind != ELF_K_ELF))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return 0;
- }
-
- if (likely (cmd == ELF_C_SET))
- result = (scn->flags |= (flags & ELF_F_DIRTY));
- else if (likely (cmd == ELF_C_CLR))
- result = (scn->flags &= ~(flags & ELF_F_DIRTY));
- else
- {
- __libelf_seterrno (ELF_E_INVALID_COMMAND);
- return 0;
- }
-
- return result;
-}
diff --git a/libelf/elf_flagshdr.c b/libelf/elf_flagshdr.c
deleted file mode 100644
index de645bb..0000000
--- a/libelf/elf_flagshdr.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/* Manipulate ELF section header flags.
- Copyright (C) 1999, 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1999.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libelf.h>
-#include <stddef.h>
-
-#include "libelfP.h"
-
-
-unsigned int
-elf_flagshdr (scn, cmd, flags)
- Elf_Scn *scn;
- Elf_Cmd cmd;
- unsigned int flags;
-{
- unsigned int result;
-
- if (scn == NULL)
- return 0;
-
- if (unlikely (scn->elf->kind != ELF_K_ELF))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return 0;
- }
-
- if (likely (cmd == ELF_C_SET))
- result = (scn->shdr_flags |= (flags & ELF_F_DIRTY));
- else if (likely (cmd == ELF_C_CLR))
- result = (scn->shdr_flags &= ~(flags & ELF_F_DIRTY));
- else
- {
- __libelf_seterrno (ELF_E_INVALID_COMMAND);
- return 0;
- }
-
- return result;
-}
diff --git a/libelf/elf_getarhdr.c b/libelf/elf_getarhdr.c
deleted file mode 100644
index 61e4e0a..0000000
--- a/libelf/elf_getarhdr.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/* Read header of next archive member.
- Copyright (C) 1998, 1999, 2000, 2002, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <libelf.h>
-#include <stddef.h>
-
-#include "libelfP.h"
-
-
-Elf_Arhdr *
-elf_getarhdr (elf)
- Elf *elf;
-{
- if (elf == NULL)
- return NULL;
-
- Elf *parent = elf->parent;
-
- /* Calling this function is not ok for any file type but archives. */
- if (parent == NULL)
- {
- __libelf_seterrno (ELF_E_INVALID_OP);
- return NULL;
- }
-
- /* Make sure we have read the archive header. */
- if (parent->state.ar.elf_ar_hdr.ar_name == NULL
- && __libelf_next_arhdr_wrlock (parent) != 0)
- {
- rwlock_wrlock (parent->lock);
- int st = __libelf_next_arhdr_wrlock (parent);
- rwlock_unlock (parent->lock);
-
- if (st != 0)
- /* Something went wrong. Maybe there is no member left. */
- return NULL;
- }
-
- /* We can be sure the parent is an archive. */
- assert (parent->kind == ELF_K_AR);
-
- return &parent->state.ar.elf_ar_hdr;
-}
diff --git a/libelf/elf_getaroff.c b/libelf/elf_getaroff.c
deleted file mode 100644
index 8dea061..0000000
--- a/libelf/elf_getaroff.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Return offset in archive for current file ELF.
- Copyright (C) 2005, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2005.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <libelf.h>
-#include <stddef.h>
-
-#include "libelfP.h"
-
-
-off_t
-elf_getaroff (elf)
- Elf *elf;
-{
- /* Be gratious, the specs demand it. */
- if (elf == NULL || elf->parent == NULL)
- return ELF_C_NULL;
-
- /* We can be sure the parent is an archive. */
- Elf *parent = elf->parent;
- assert (parent->kind == ELF_K_AR);
-
- return elf->start_offset - sizeof (struct ar_hdr) - parent->start_offset;
-}
diff --git a/libelf/elf_getarsym.c b/libelf/elf_getarsym.c
deleted file mode 100644
index e6ecaad..0000000
--- a/libelf/elf_getarsym.c
+++ /dev/null
@@ -1,278 +0,0 @@
-/* Return symbol table of archive.
- Copyright (C) 1998, 1999, 2000, 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <byteswap.h>
-#include <endian.h>
-#include <errno.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <system.h>
-#include <dl-hash.h>
-#include "libelfP.h"
-
-
-Elf_Arsym *
-elf_getarsym (elf, ptr)
- Elf *elf;
- size_t *ptr;
-{
- if (elf->kind != ELF_K_AR)
- {
- /* This is no archive. */
- __libelf_seterrno (ELF_E_NO_ARCHIVE);
- return NULL;
- }
-
- if (ptr != NULL)
- /* In case of an error or when we know the value store the expected
- value now. Doing this allows us easier exits in an error case. */
- *ptr = elf->state.ar.ar_sym_num;
-
- if (elf->state.ar.ar_sym == (Elf_Arsym *) -1l)
- {
- /* There is no index. */
- __libelf_seterrno (ELF_E_NO_INDEX);
- return NULL;
- }
-
- Elf_Arsym *result = elf->state.ar.ar_sym;
- if (result == NULL)
- {
- /* We have not yet read the index. */
- rwlock_wrlock (elf->lock);
-
- /* In case we find no index remember this for the next call. */
- elf->state.ar.ar_sym = (Elf_Arsym *) -1l;
-
- struct ar_hdr *index_hdr;
- if (elf->map_address == NULL)
- {
- /* We must read index from the file. */
- assert (elf->fildes != -1);
- if (pread_retry (elf->fildes, &elf->state.ar.ar_hdr,
- sizeof (struct ar_hdr), elf->start_offset + SARMAG)
- != sizeof (struct ar_hdr))
- {
- /* It is not possible to read the index. Maybe it does not
- exist. */
- __libelf_seterrno (ELF_E_READ_ERROR);
- goto out;
- }
-
- index_hdr = &elf->state.ar.ar_hdr;
- }
- else
- {
- if (SARMAG + sizeof (struct ar_hdr) > elf->maximum_size)
- {
- /* There is no room for the full archive. */
- __libelf_seterrno (ELF_E_NO_INDEX);
- goto out;
- }
-
- index_hdr = (struct ar_hdr *) (elf->map_address
- + elf->start_offset + SARMAG);
- }
-
- /* Now test whether this really is an archive. */
- if (memcmp (index_hdr->ar_fmag, ARFMAG, 2) != 0)
- {
- /* Invalid magic bytes. */
- __libelf_seterrno (ELF_E_ARCHIVE_FMAG);
- goto out;
- }
-
- /* Now test whether this is the index. It is denoted by the
- name being "/ ".
- XXX This is not entirely true. There are some more forms.
- Which of them shall we handle? */
- if (memcmp (index_hdr->ar_name, "/ ", 16) != 0)
- {
- /* If the index is not the first entry, there is no index.
-
- XXX Is this true? */
- __libelf_seterrno (ELF_E_NO_INDEX);
- goto out;
- }
-
- /* We have an archive. The first word in there is the number of
- entries in the table. */
- uint32_t n;
- if (elf->map_address == NULL)
- {
- if (pread_retry (elf->fildes, &n, sizeof (n),
- elf->start_offset + SARMAG + sizeof (struct ar_hdr))
- != sizeof (n))
- {
- /* Cannot read the number of entries. */
- __libelf_seterrno (ELF_E_NO_INDEX);
- goto out;
- }
- }
- else
- n = *(uint32_t *) (elf->map_address + elf->start_offset
- + SARMAG + sizeof (struct ar_hdr));
-
- if (__BYTE_ORDER == __LITTLE_ENDIAN)
- n = bswap_32 (n);
-
- /* Now we can perform some first tests on whether all the data
- needed for the index is available. */
- char tmpbuf[17];
- memcpy (tmpbuf, index_hdr->ar_size, 10);
- tmpbuf[10] = '\0';
- size_t index_size = atol (tmpbuf);
-
- if (SARMAG + sizeof (struct ar_hdr) + index_size > elf->maximum_size
- || n * sizeof (uint32_t) > index_size)
- {
- /* This index table cannot be right since it does not fit into
- the file. */
- __libelf_seterrno (ELF_E_NO_INDEX);
- goto out;
- }
-
- /* Now we can allocate the arrays needed to store the index. */
- size_t ar_sym_len = (n + 1) * sizeof (Elf_Arsym);
- elf->state.ar.ar_sym = (Elf_Arsym *) malloc (ar_sym_len);
- if (elf->state.ar.ar_sym != NULL)
- {
- uint32_t *file_data;
- char *str_data;
-
- if (elf->map_address == NULL)
- {
- file_data = (uint32_t *) alloca (n * sizeof (uint32_t));
-
- ar_sym_len += index_size - n * sizeof (uint32_t);
- Elf_Arsym *newp = (Elf_Arsym *) realloc (elf->state.ar.ar_sym,
- ar_sym_len);
- if (newp == NULL)
- {
- free (elf->state.ar.ar_sym);
- elf->state.ar.ar_sym = NULL;
- __libelf_seterrno (ELF_E_NOMEM);
- goto out;
- }
- elf->state.ar.ar_sym = newp;
-
- char *new_str = (char *) (elf->state.ar.ar_sym + n + 1);
-
- /* Now read the data from the file. */
- if ((size_t) pread_retry (elf->fildes, file_data,
- n * sizeof (uint32_t),
- elf->start_offset + SARMAG
- + sizeof (struct ar_hdr)
- + sizeof (uint32_t))
- != n * sizeof (uint32_t)
- || ((size_t) pread_retry (elf->fildes, new_str,
- index_size - n * sizeof (uint32_t),
- elf->start_offset
- + SARMAG + sizeof (struct ar_hdr)
- + (n + 1) * sizeof (uint32_t))
- != index_size - n * sizeof (uint32_t)))
- {
- /* We were not able to read the data. */
- free (elf->state.ar.ar_sym);
- elf->state.ar.ar_sym = NULL;
- __libelf_seterrno (ELF_E_NO_INDEX);
- goto out;
- }
-
- str_data = (char *) new_str;
- }
- else
- {
- file_data = (uint32_t *) (elf->map_address + elf->start_offset
- + SARMAG + sizeof (struct ar_hdr)
- + sizeof (uint32_t));
- str_data = (char *) &file_data[n];
- }
-
- /* Now we can build the data structure. */
- Elf_Arsym *arsym = elf->state.ar.ar_sym;
- for (size_t cnt = 0; cnt < n; ++cnt)
- {
- arsym[cnt].as_name = str_data;
- if (__BYTE_ORDER == __LITTLE_ENDIAN)
- arsym[cnt].as_off = bswap_32 (file_data[cnt]);
- else
- arsym[cnt].as_off = file_data[cnt];
- arsym[cnt].as_hash = _dl_elf_hash (str_data);
- str_data = rawmemchr (str_data, '\0') + 1;
- }
- /* At the end a special entry. */
- arsym[n].as_name = NULL;
- arsym[n].as_off = 0;
- arsym[n].as_hash = ~0UL;
-
- /* Tell the caller how many entries we have. */
- elf->state.ar.ar_sym_num = n + 1;
- }
-
- result = elf->state.ar.ar_sym;
-
- out:
- rwlock_unlock (elf->lock);
- }
-
- if (ptr != NULL)
- *ptr = elf->state.ar.ar_sym_num;
-
- return result;
-}
diff --git a/libelf/elf_getbase.c b/libelf/elf_getbase.c
deleted file mode 100644
index 2b6cf85..0000000
--- a/libelf/elf_getbase.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Return offset of first byte for the object.
- Copyright (C) 1998, 2000, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libelf.h>
-#include <stddef.h>
-
-#include "libelfP.h"
-
-
-off_t
-elf_getbase (elf)
- Elf *elf;
-{
- return elf == NULL ? (off_t) -1 : elf->start_offset;
-}
diff --git a/libelf/elf_getdata.c b/libelf/elf_getdata.c
deleted file mode 100644
index e083b03..0000000
--- a/libelf/elf_getdata.c
+++ /dev/null
@@ -1,503 +0,0 @@
-/* Return the next data element from the section after possibly converting it.
- Copyright (C) 1998-2005, 2006, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <errno.h>
-#include <stddef.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "libelfP.h"
-#include <system.h>
-#include "common.h"
-#include "elf-knowledge.h"
-
-
-#define TYPEIDX(Sh_Type) \
- (Sh_Type >= SHT_NULL && Sh_Type < SHT_NUM \
- ? Sh_Type \
- : (Sh_Type >= SHT_GNU_HASH && Sh_Type <= SHT_HISUNW \
- ? SHT_NUM + Sh_Type - SHT_GNU_HASH \
- : 0))
-
-/* Associate section types with libelf types. */
-static const Elf_Type shtype_map[EV_NUM - 1][TYPEIDX (SHT_HISUNW) + 1] =
- {
- [EV_CURRENT - 1] =
- {
- [SHT_SYMTAB] = ELF_T_SYM,
- [SHT_RELA] = ELF_T_RELA,
- [SHT_HASH] = ELF_T_WORD,
- [SHT_DYNAMIC] = ELF_T_DYN,
- [SHT_REL] = ELF_T_REL,
- [SHT_DYNSYM] = ELF_T_SYM,
- [SHT_INIT_ARRAY] = ELF_T_ADDR,
- [SHT_FINI_ARRAY] = ELF_T_ADDR,
- [SHT_PREINIT_ARRAY] = ELF_T_ADDR,
- [SHT_GROUP] = ELF_T_WORD,
- [SHT_SYMTAB_SHNDX] = ELF_T_WORD,
- [SHT_NOTE] = ELF_T_NHDR,
- [TYPEIDX (SHT_GNU_verdef)] = ELF_T_VDEF,
- [TYPEIDX (SHT_GNU_verneed)] = ELF_T_VNEED,
- [TYPEIDX (SHT_GNU_versym)] = ELF_T_HALF,
- [TYPEIDX (SHT_SUNW_syminfo)] = ELF_T_SYMINFO,
- [TYPEIDX (SHT_SUNW_move)] = ELF_T_MOVE,
- [TYPEIDX (SHT_GNU_LIBLIST)] = ELF_T_LIB,
- [TYPEIDX (SHT_GNU_HASH)] = ELF_T_GNUHASH,
- }
- };
-
-#if !ALLOW_UNALIGNED
-/* Associate libelf types with their internal alignment requirements. */
-const uint_fast8_t __libelf_type_aligns[EV_NUM - 1][ELFCLASSNUM - 1][ELF_T_NUM] =
- {
-# define TYPE_ALIGNS(Bits) \
- { \
- [ELF_T_ADDR] = __alignof__ (ElfW2(Bits,Addr)), \
- [ELF_T_HALF] = __alignof__ (ElfW2(Bits,Half)), \
- [ELF_T_WORD] = __alignof__ (ElfW2(Bits,Word)), \
- [ELF_T_SYM] = __alignof__ (ElfW2(Bits,Sym)), \
- [ELF_T_SYMINFO] = __alignof__ (ElfW2(Bits,Syminfo)), \
- [ELF_T_REL] = __alignof__ (ElfW2(Bits,Rel)), \
- [ELF_T_RELA] = __alignof__ (ElfW2(Bits,Rela)), \
- [ELF_T_DYN] = __alignof__ (ElfW2(Bits,Dyn)), \
- [ELF_T_VDEF] = __alignof__ (ElfW2(Bits,Verdef)), \
- [ELF_T_VDAUX] = __alignof__ (ElfW2(Bits,Verdaux)), \
- [ELF_T_VNEED] = __alignof__ (ElfW2(Bits,Verneed)), \
- [ELF_T_VNAUX] = __alignof__ (ElfW2(Bits,Vernaux)), \
- [ELF_T_MOVE] = __alignof__ (ElfW2(Bits,Move)), \
- [ELF_T_LIB] = __alignof__ (ElfW2(Bits,Lib)), \
- [ELF_T_NHDR] = __alignof__ (ElfW2(Bits,Nhdr)), \
- }
- [EV_CURRENT - 1] =
- {
- [ELFCLASS32 - 1] = TYPE_ALIGNS (32),
- [ELFCLASS64 - 1] = TYPE_ALIGNS (64),
- }
-# undef TYPE_ALIGNS
- };
-#endif
-
-
-/* Convert the data in the current section. */
-static void
-convert_data (Elf_Scn *scn, int version __attribute__ ((unused)), int eclass,
- int data, size_t size, Elf_Type type)
-{
- const size_t align = __libelf_type_align (eclass, type);
-
- if (data == MY_ELFDATA)
- {
- if (((((size_t) (char *) scn->rawdata_base)) & (align - 1)) == 0)
- /* No need to copy, we can use the raw data. */
- scn->data_base = scn->rawdata_base;
- else
- {
- scn->data_base = (char *) malloc (size);
- if (scn->data_base == NULL)
- {
- __libelf_seterrno (ELF_E_NOMEM);
- return;
- }
-
- /* The copy will be appropriately aligned for direct access. */
- memcpy (scn->data_base, scn->rawdata_base, size);
- }
- }
- else
- {
- xfct_t fp;
-
- scn->data_base = (char *) malloc (size);
- if (scn->data_base == NULL)
- {
- __libelf_seterrno (ELF_E_NOMEM);
- return;
- }
-
- /* Get the conversion function. */
-#if EV_NUM != 2
- fp = __elf_xfctstom[version - 1][__libelf_version - 1][eclass - 1][type];
-#else
- fp = __elf_xfctstom[0][0][eclass - 1][type];
-#endif
-
- fp (scn->data_base, scn->rawdata_base, size, 0);
- }
-
- scn->data_list.data.d.d_buf = scn->data_base;
- scn->data_list.data.d.d_size = size;
- scn->data_list.data.d.d_type = type;
- scn->data_list.data.d.d_off = scn->rawdata.d.d_off;
- scn->data_list.data.d.d_align = scn->rawdata.d.d_align;
- scn->data_list.data.d.d_version = scn->rawdata.d.d_version;
-
- scn->data_list.data.s = scn;
-}
-
-
-/* Store the information for the raw data in the `rawdata' element. */
-int
-internal_function
-__libelf_set_rawdata_wrlock (Elf_Scn *scn)
-{
- size_t offset;
- size_t size;
- size_t align;
- int type;
- Elf *elf = scn->elf;
-
- if (elf->class == ELFCLASS32)
- {
- Elf32_Shdr *shdr
- = scn->shdr.e32 ?: __elf32_getshdr_wrlock (scn);
-
- if (shdr == NULL)
- /* Something went terribly wrong. */
- return 1;
-
- offset = shdr->sh_offset;
- size = shdr->sh_size;
- type = shdr->sh_type;
- align = shdr->sh_addralign;
- }
- else
- {
- Elf64_Shdr *shdr
- = scn->shdr.e64 ?: __elf64_getshdr_wrlock (scn);
-
- if (shdr == NULL)
- /* Something went terribly wrong. */
- return 1;
-
- offset = shdr->sh_offset;
- size = shdr->sh_size;
- type = shdr->sh_type;
- align = shdr->sh_addralign;
- }
-
- /* If the section has no data (for whatever reason), leave the `d_buf'
- pointer NULL. */
- if (size != 0 && type != SHT_NOBITS)
- {
- /* First a test whether the section is valid at all. */
- size_t entsize;
-
- if (type == SHT_HASH)
- {
- GElf_Ehdr ehdr_mem;
- GElf_Ehdr *ehdr = __gelf_getehdr_rdlock (elf, &ehdr_mem);
- entsize = SH_ENTSIZE_HASH (ehdr);
- }
- else
- {
- Elf_Type t = shtype_map[LIBELF_EV_IDX][TYPEIDX (type)];
- if (t == ELF_T_VDEF || t == ELF_T_NHDR
- || (t == ELF_T_GNUHASH && elf->class == ELFCLASS64))
- entsize = 1;
- else
- entsize = __libelf_type_sizes[LIBELF_EV_IDX][elf->class - 1][t];
- }
-
- /* We assume it is an array of bytes if it is none of the structured
- sections we know of. */
- if (entsize == 0)
- entsize = 1;
-
- if (unlikely (size % entsize != 0))
- {
- __libelf_seterrno (ELF_E_INVALID_DATA);
- return 1;
- }
-
- /* We can use the mapped or loaded data if available. */
- if (elf->map_address != NULL)
- {
- /* First see whether the information in the section header is
- valid and it does not ask for too much. */
- if (unlikely (offset + size > elf->maximum_size))
- {
- /* Something is wrong. */
- __libelf_seterrno (ELF_E_INVALID_SECTION_HEADER);
- return 1;
- }
-
- scn->rawdata_base = scn->rawdata.d.d_buf
- = (char *) elf->map_address + elf->start_offset + offset;
- }
- else if (likely (elf->fildes != -1))
- {
- /* We have to read the data from the file. Allocate the needed
- memory. */
- scn->rawdata_base = scn->rawdata.d.d_buf
- = (char *) malloc (size);
- if (scn->rawdata.d.d_buf == NULL)
- {
- __libelf_seterrno (ELF_E_NOMEM);
- return 1;
- }
-
- ssize_t n = pread_retry (elf->fildes, scn->rawdata.d.d_buf, size,
- elf->start_offset + offset);
- if (unlikely ((size_t) n != size))
- {
- /* Cannot read the data. */
- free (scn->rawdata.d.d_buf);
- scn->rawdata_base = scn->rawdata.d.d_buf = NULL;
- __libelf_seterrno (ELF_E_READ_ERROR);
- return 1;
- }
- }
- else
- {
- /* The file descriptor is already closed, we cannot get the data
- anymore. */
- __libelf_seterrno (ELF_E_FD_DISABLED);
- return 1;
- }
- }
-
- scn->rawdata.d.d_size = size;
- /* Some broken ELF ABI for 64-bit machines use the wrong hash table
- entry size. See elf-knowledge.h for more information. */
- if (type == SHT_HASH && elf->class == ELFCLASS64)
- {
- GElf_Ehdr ehdr_mem;
- GElf_Ehdr *ehdr = __gelf_getehdr_rdlock (elf, &ehdr_mem);
- scn->rawdata.d.d_type
- = (SH_ENTSIZE_HASH (ehdr) == 4 ? ELF_T_WORD : ELF_T_XWORD);
- }
- else
- scn->rawdata.d.d_type = shtype_map[LIBELF_EV_IDX][TYPEIDX (type)];
- scn->rawdata.d.d_off = 0;
- scn->rawdata.d.d_align = align;
- if (elf->class == ELFCLASS32
- || (offsetof (struct Elf, state.elf32.ehdr)
- == offsetof (struct Elf, state.elf64.ehdr)))
- scn->rawdata.d.d_version =
- elf->state.elf32.ehdr->e_ident[EI_VERSION];
- else
- scn->rawdata.d.d_version =
- elf->state.elf64.ehdr->e_ident[EI_VERSION];
-
- scn->rawdata.s = scn;
-
- scn->data_read = 1;
-
- /* We actually read data from the file. At least we tried. */
- scn->flags |= ELF_F_FILEDATA;
-
- return 0;
-}
-
-int
-internal_function
-__libelf_set_rawdata (Elf_Scn *scn)
-{
- int result;
-
- if (scn == NULL)
- return 1;
-
- rwlock_wrlock (scn->elf->lock);
- result = __libelf_set_rawdata_wrlock (scn);
- rwlock_unlock (scn->elf->lock);
-
- return result;
-}
-
-Elf_Data *
-internal_function
-__elf_getdata_rdlock (scn, data)
- Elf_Scn *scn;
- Elf_Data *data;
-{
- Elf_Data *result = NULL;
- Elf *elf;
- int locked = 0;
-
- if (scn == NULL)
- return NULL;
-
- if (unlikely (scn->elf->kind != ELF_K_ELF))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return NULL;
- }
-
- /* We will need this multiple times later on. */
- elf = scn->elf;
-
- /* If `data' is not NULL this means we are not addressing the initial
- data in the file. But this also means this data is already read
- (since otherwise it is not possible to have a valid `data' pointer)
- and all the data structures are initialized as well. In this case
- we can simply walk the list of data records. */
- if (data != NULL)
- {
- Elf_Data_List *runp;
-
- /* It is not possible that if DATA is not NULL the first entry is
- returned. But this also means that there must be a first data
- entry. */
- if (scn->data_list_rear == NULL
- /* The section the reference data is for must match the section
- parameter. */
- || unlikely (((Elf_Data_Scn *) data)->s != scn))
- {
- __libelf_seterrno (ELF_E_DATA_MISMATCH);
- goto out;
- }
-
- /* We start searching with the first entry. */
- runp = &scn->data_list;
-
- while (1)
- {
- /* If `data' does not match any known record punt. */
- if (runp == NULL)
- {
- __libelf_seterrno (ELF_E_DATA_MISMATCH);
- goto out;
- }
-
- if (&runp->data.d == data)
- /* Found the entry. */
- break;
-
- runp = runp->next;
- }
-
- /* Return the data for the next data record. */
- result = runp->next ? &runp->next->data.d : NULL;
- goto out;
- }
-
- /* If the data for this section was not yet initialized do it now. */
- if (scn->data_read == 0)
- {
- /* We cannot acquire a write lock while we are holding a read
- lock. Therefore give up the read lock and then get the write
- lock. But this means that the data could meanwhile be
- modified, therefore start the tests again. */
- rwlock_unlock (elf->lock);
- rwlock_wrlock (elf->lock);
- locked = 1;
-
- /* Read the data from the file. There is always a file (or
- memory region) associated with this descriptor since
- otherwise the `data_read' flag would be set. */
- if (scn->data_read == 0 && __libelf_set_rawdata_wrlock (scn) != 0)
- /* Something went wrong. The error value is already set. */
- goto out;
- }
-
- /* At this point we know the raw data is available. But it might be
- empty in case the section has size zero (for whatever reason).
- Now create the converted data in case this is necessary. */
- if (scn->data_list_rear == NULL)
- {
- if (scn->rawdata.d.d_buf != NULL && scn->rawdata.d.d_size > 0)
- {
- if (!locked)
- {
- rwlock_unlock (elf->lock);
- rwlock_wrlock (elf->lock);
- if (scn->data_list_rear != NULL)
- goto pass;
- }
-
- /* Convert according to the version and the type. */
- convert_data (scn, __libelf_version, elf->class,
- (elf->class == ELFCLASS32
- || (offsetof (struct Elf, state.elf32.ehdr)
- == offsetof (struct Elf, state.elf64.ehdr))
- ? elf->state.elf32.ehdr->e_ident[EI_DATA]
- : elf->state.elf64.ehdr->e_ident[EI_DATA]),
- scn->rawdata.d.d_size, scn->rawdata.d.d_type);
- }
- else
- /* This is an empty or NOBITS section. There is no buffer but
- the size information etc is important. */
- scn->data_list.data.d = scn->rawdata.d;
-
- scn->data_list_rear = &scn->data_list;
- }
-
- /* If no data is present we cannot return any. */
- if (scn->data_list_rear != NULL)
- pass:
- /* Return the first data element in the list. */
- result = &scn->data_list.data.d;
-
- out:
- return result;
-}
-
-Elf_Data *
-elf_getdata (scn, data)
- Elf_Scn *scn;
- Elf_Data *data;
-{
- Elf_Data *result;
-
- if (scn == NULL)
- return NULL;
-
- rwlock_rdlock (scn->elf->lock);
- result = __elf_getdata_rdlock (scn, data);
- rwlock_unlock (scn->elf->lock);
-
- return result;
-}
-INTDEF(elf_getdata)
diff --git a/libelf/elf_getdata_rawchunk.c b/libelf/elf_getdata_rawchunk.c
deleted file mode 100644
index a655cb0..0000000
--- a/libelf/elf_getdata_rawchunk.c
+++ /dev/null
@@ -1,210 +0,0 @@
-/* Return converted data from raw chunk of ELF file.
- Copyright (C) 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <system.h>
-#include "libelfP.h"
-#include "common.h"
-
-Elf_Data *
-elf_getdata_rawchunk (elf, offset, size, type)
- Elf *elf;
- /* ANDROID_CHANGE_BEGIN */
-#if 0
- off64_t offset;
-#else
- off_t offset;
-#endif
- /* ANDROID_CHANGE_END */
- size_t size;
- Elf_Type type;
-{
- if (unlikely (elf == NULL))
- return NULL;
-
- if (unlikely (elf->kind != ELF_K_ELF))
- {
- /* No valid descriptor. */
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return NULL;
- }
-
- /* ANDROID_CHANGE_BEGIN */
-#if 0
- if (unlikely (size > elf->maximum_size
- || (off64_t) (elf->maximum_size - size) < offset))
-#else
- if (unlikely (size > elf->maximum_size
- || (off_t) (elf->maximum_size - size) < offset))
-#endif
- /* ANDROID_CHANGE_END */
- {
- /* Invalid request. */
- __libelf_seterrno (ELF_E_INVALID_OP);
- return NULL;
- }
-
- if (type >= ELF_T_NUM)
- {
- __libelf_seterrno (ELF_E_UNKNOWN_TYPE);
- return NULL;
- }
-
- /* Get the raw bytes from the file. */
- void *rawchunk;
- int flags = 0;
- Elf_Data *result = NULL;
-
- rwlock_rdlock (elf->lock);
-
- /* If the file is mmap'ed we can use it directly. */
- if (elf->map_address != NULL)
- rawchunk = elf->map_address + elf->start_offset + offset;
- else
- {
- /* We allocate the memory and read the data from the file. */
- rawchunk = malloc (size);
- if (rawchunk == NULL)
- {
- nomem:
- __libelf_seterrno (ELF_E_NOMEM);
- goto out;
- }
-
- /* Read the file content. */
- if (unlikely ((size_t) pread_retry (elf->fildes, rawchunk, size,
- elf->start_offset + offset)
- != size))
- {
- /* Something went wrong. */
- free (rawchunk);
- __libelf_seterrno (ELF_E_READ_ERROR);
- goto out;
- }
-
- flags = ELF_F_MALLOCED;
- }
-
- /* Copy and/or convert the data as needed for aligned native-order access. */
- size_t align = __libelf_type_align (elf->class, type);
- void *buffer;
- if (elf->state.elf32.ehdr->e_ident[EI_DATA] == MY_ELFDATA)
- {
- if (((uintptr_t) rawchunk & (align - 1)) == 0)
- /* No need to copy, we can use the raw data. */
- buffer = rawchunk;
- else
- {
- /* A malloc'd block is always sufficiently aligned. */
- assert (flags == 0);
-
- buffer = malloc (size);
- if (unlikely (buffer == NULL))
- goto nomem;
- flags = ELF_F_MALLOCED;
-
- /* The copy will be appropriately aligned for direct access. */
- memcpy (buffer, rawchunk, size);
- }
- }
- else
- {
- if (flags)
- buffer = rawchunk;
- else
- {
- buffer = malloc (size);
- if (unlikely (buffer == NULL))
- goto nomem;
- flags = ELF_F_MALLOCED;
- }
-
- /* Call the conversion function. */
- (*__elf_xfctstom[LIBELF_EV_IDX][LIBELF_EV_IDX][elf->class - 1][type])
- (buffer, rawchunk, size, 0);
- }
-
- /* Allocate the dummy container to point at this buffer. */
- Elf_Data_Chunk *chunk = calloc (1, sizeof *chunk);
- if (chunk == NULL)
- {
- if (flags)
- free (buffer);
- goto nomem;
- }
-
- chunk->dummy_scn.elf = elf;
- chunk->dummy_scn.flags = flags;
- chunk->data.s = &chunk->dummy_scn;
- chunk->data.d.d_buf = buffer;
- chunk->data.d.d_size = size;
- chunk->data.d.d_type = type;
- chunk->data.d.d_align = align;
- chunk->data.d.d_version = __libelf_version;
-
- rwlock_unlock (elf->lock);
- rwlock_wrlock (elf->lock);
-
- chunk->next = elf->state.elf.rawchunks;
- elf->state.elf.rawchunks = chunk;
- result = &chunk->data.d;
-
- out:
- rwlock_unlock (elf->lock);
- return result;
-}
diff --git a/libelf/elf_getident.c b/libelf/elf_getident.c
deleted file mode 100644
index f9bac10..0000000
--- a/libelf/elf_getident.c
+++ /dev/null
@@ -1,84 +0,0 @@
-/* Retrieve file identification data.
- Copyright (C) 1998, 1999, 2000, 2002, 2004 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stddef.h>
-
-#include "libelfP.h"
-
-
-char *
-elf_getident (elf, ptr)
- Elf *elf;
- size_t *ptr;
-{
- /* In case this is no ELF file, the handle is invalid and we return
- NULL. */
- if (elf == NULL || elf->kind != ELF_K_ELF)
- {
- if (ptr != NULL)
- *ptr = 0;
- return NULL;
- }
-
- /* We already read the ELF header. Return a pointer to it and store
- the length in *PTR. */
- if (ptr != NULL)
- *ptr = EI_NIDENT;
-
- return (char *) (elf->class == ELFCLASS32
- || (offsetof (struct Elf, state.elf32.ehdr)
- == offsetof (struct Elf, state.elf64.ehdr))
- ? elf->state.elf32.ehdr->e_ident
- : elf->state.elf64.ehdr->e_ident);
-}
diff --git a/libelf/elf_getscn.c b/libelf/elf_getscn.c
deleted file mode 100644
index 5c14a58..0000000
--- a/libelf/elf_getscn.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/* Get section at specific index.
- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <stddef.h>
-#include <stdlib.h>
-
-#include "libelfP.h"
-
-
-Elf_Scn *
-elf_getscn (elf, idx)
- Elf *elf;
- size_t idx;
-{
- if (elf == NULL)
- return NULL;
-
- if (unlikely (elf->kind != ELF_K_ELF))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return NULL;
- }
-
- rwlock_rdlock (elf->lock);
-
- Elf_Scn *result = NULL;
-
- /* Find the section in the list. */
- Elf_ScnList *runp = (elf->class == ELFCLASS32
- || (offsetof (struct Elf, state.elf32.scns)
- == offsetof (struct Elf, state.elf64.scns))
- ? &elf->state.elf32.scns : &elf->state.elf64.scns);
- while (1)
- {
- if (idx < runp->max)
- {
- if (idx < runp->cnt)
- result = &runp->data[idx];
- else
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- break;
- }
-
- idx -= runp->max;
-
- runp = runp->next;
- if (runp == NULL)
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- break;
- }
- }
-
- rwlock_unlock (elf->lock);
-
- return result;
-}
-INTDEF(elf_getscn)
diff --git a/libelf/elf_getshnum.c b/libelf/elf_getshnum.c
deleted file mode 100644
index 3c65ef4..0000000
--- a/libelf/elf_getshnum.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/* Return number of sections in the ELF file.
- Copyright (C) 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <gelf.h>
-#include <stddef.h>
-
-#include "libelfP.h"
-
-
-int
-__elf_getshnum_rdlock (elf, dst)
- Elf *elf;
- size_t *dst;
-{
- int result = 0;
- int idx;
-
- if (elf == NULL)
- return -1;
-
- if (unlikely (elf->kind != ELF_K_ELF))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return -1;
- }
-
- idx = elf->state.elf.scns_last->cnt;
- if (idx != 0
- || (elf->state.elf.scns_last
- != (elf->class == ELFCLASS32
- || (offsetof (Elf, state.elf32.scns)
- == offsetof (Elf, state.elf64.scns))
- ? &elf->state.elf32.scns : &elf->state.elf64.scns)))
- /* There is at least one section. */
- *dst = 1 + elf->state.elf.scns_last->data[idx - 1].index;
- else
- *dst = 0;
-
- return result;
-}
-
-int
-elf_getshnum (elf, dst)
- Elf *elf;
- size_t *dst;
-{
- int result;
-
- if (elf == NULL)
- return -1;
-
- rwlock_rdlock (elf->lock);
- result = __elf_getshnum_rdlock (elf, dst);
- rwlock_unlock (elf->lock);
-
- return result;
-}
diff --git a/libelf/elf_getshstrndx.c b/libelf/elf_getshstrndx.c
deleted file mode 100644
index 52516a8..0000000
--- a/libelf/elf_getshstrndx.c
+++ /dev/null
@@ -1,203 +0,0 @@
-/* Return section index of section header string table.
- Copyright (C) 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <errno.h>
-#include <gelf.h>
-#include <stddef.h>
-#include <unistd.h>
-
-#include <system.h>
-#include "libelfP.h"
-#include "common.h"
-
-
-int
-elf_getshstrndx (elf, dst)
- Elf *elf;
- size_t *dst;
-{
- int result = 0;
-
- if (elf == NULL)
- return -1;
-
- if (unlikely (elf->kind != ELF_K_ELF))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return -1;
- }
-
- rwlock_rdlock (elf->lock);
-
- /* We rely here on the fact that the `elf' element is a common prefix
- of `elf32' and `elf64'. */
- assert (offsetof (struct Elf, state.elf.ehdr)
- == offsetof (struct Elf, state.elf32.ehdr));
- assert (sizeof (elf->state.elf.ehdr)
- == sizeof (elf->state.elf32.ehdr));
- assert (offsetof (struct Elf, state.elf.ehdr)
- == offsetof (struct Elf, state.elf64.ehdr));
- assert (sizeof (elf->state.elf.ehdr)
- == sizeof (elf->state.elf64.ehdr));
-
- if (unlikely (elf->state.elf.ehdr == NULL))
- {
- __libelf_seterrno (ELF_E_WRONG_ORDER_EHDR);
- result = -1;
- }
- else
- {
- Elf32_Word num;
-
- num = (elf->class == ELFCLASS32
- ? elf->state.elf32.ehdr->e_shstrndx
- : elf->state.elf64.ehdr->e_shstrndx);
-
- /* Determine whether the index is too big to fit in the ELF
- header. */
- if (unlikely (num == SHN_XINDEX))
- {
- /* Yes. Search the zeroth section header. */
- if (elf->class == ELFCLASS32)
- {
- size_t offset;
-
- if (elf->state.elf32.scns.data[0].shdr.e32 != NULL)
- {
- num = elf->state.elf32.scns.data[0].shdr.e32->sh_link;
- goto success;
- }
-
- offset = elf->state.elf32.ehdr->e_shoff;
-
- if (elf->map_address != NULL
- && elf->state.elf32.ehdr->e_ident[EI_DATA] == MY_ELFDATA
- && (ALLOW_UNALIGNED
- || (((size_t) ((char *) elf->map_address + offset))
- & (__alignof__ (Elf32_Shdr) - 1)) == 0))
- /* We can directly access the memory. */
- num = ((Elf32_Shdr *) (elf->map_address + offset))->sh_link;
- else
- {
- /* We avoid reading in all the section headers. Just read
- the first one. */
- Elf32_Shdr shdr_mem;
-
- if (unlikely (pread_retry (elf->fildes, &shdr_mem,
- sizeof (Elf32_Shdr), offset)
- != sizeof (Elf32_Shdr)))
- {
- /* We must be able to read this ELF section header. */
- __libelf_seterrno (ELF_E_INVALID_FILE);
- result = -1;
- goto out;
- }
-
- if (elf->state.elf32.ehdr->e_ident[EI_DATA] != MY_ELFDATA)
- CONVERT (shdr_mem.sh_link);
- num = shdr_mem.sh_link;
- }
- }
- else
- {
- if (elf->state.elf64.scns.data[0].shdr.e64 != NULL)
- {
- num = elf->state.elf64.scns.data[0].shdr.e64->sh_link;
- goto success;
- }
-
- size_t offset = elf->state.elf64.ehdr->e_shoff;
-
- if (elf->map_address != NULL
- && elf->state.elf64.ehdr->e_ident[EI_DATA] == MY_ELFDATA
- && (ALLOW_UNALIGNED
- || (((size_t) ((char *) elf->map_address + offset))
- & (__alignof__ (Elf64_Shdr) - 1)) == 0))
- /* We can directly access the memory. */
- num = ((Elf64_Shdr *) (elf->map_address + offset))->sh_link;
- else
- {
- /* We avoid reading in all the section headers. Just read
- the first one. */
- Elf64_Shdr shdr_mem;
-
- if (unlikely (pread_retry (elf->fildes, &shdr_mem,
- sizeof (Elf64_Shdr), offset)
- != sizeof (Elf64_Shdr)))
- {
- /* We must be able to read this ELF section header. */
- __libelf_seterrno (ELF_E_INVALID_FILE);
- result = -1;
- goto out;
- }
-
- if (elf->state.elf64.ehdr->e_ident[EI_DATA] != MY_ELFDATA)
- CONVERT (shdr_mem.sh_link);
- num = shdr_mem.sh_link;
- }
- }
- }
-
- /* Store the result. */
- success:
- *dst = num;
- }
-
- out:
- rwlock_unlock (elf->lock);
-
- return result;
-}
-INTDEF(elf_getshstrndx)
diff --git a/libelf/elf_gnu_hash.c b/libelf/elf_gnu_hash.c
deleted file mode 100644
index efaee43..0000000
--- a/libelf/elf_gnu_hash.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* GNU-style Hash function used in ELF implementations.
- Copyright (C) 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2006.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libelfP.h>
-
-/* Get the implementation. */
-#include <dl-hash.h>
-
-unsigned long int
-elf_gnu_hash (string)
- const char *string;
-{
- uint_fast32_t h = 5381;
- for (unsigned char c = *string; c != '\0'; c = *++string)
- h = h * 33 + c;
- return h & 0xffffffff;
-}
diff --git a/libelf/elf_hash.c b/libelf/elf_hash.c
deleted file mode 100644
index 94c0a85..0000000
--- a/libelf/elf_hash.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Hash function used in ELF implementations.
- Copyright (C) 1998, 1999, 2000, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libelfP.h>
-
-/* Get the implementation. */
-#include <dl-hash.h>
-
-unsigned long int
-elf_hash (string)
- const char *string;
-{
- return _dl_elf_hash (string);
-}
-INTDEF(elf_hash)
diff --git a/libelf/elf_kind.c b/libelf/elf_kind.c
deleted file mode 100644
index 06aeaa9..0000000
--- a/libelf/elf_kind.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Return the kind of file associated with the descriptor.
- Copyright (C) 1998, 1999, 2000, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libelf.h>
-#include <stddef.h>
-
-#include "libelfP.h"
-
-
-Elf_Kind
-elf_kind (elf)
- Elf *elf;
-{
- return elf == NULL ? ELF_K_NONE : elf->kind;
-}
diff --git a/libelf/elf_memory.c b/libelf/elf_memory.c
deleted file mode 100644
index f6468c8..0000000
--- a/libelf/elf_memory.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/* Create descriptor for memory region.
- Copyright (C) 1999, 2000, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 1999.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libelf.h>
-#include <stddef.h>
-
-#include "libelfP.h"
-
-
-Elf *
-elf_memory (image, size)
- char *image;
- size_t size;
-{
- if (image == NULL)
- {
- __libelf_seterrno (ELF_E_INVALID_OPERAND);
- return NULL;
- }
-
- return __libelf_read_mmaped_file (-1, image, 0, size, ELF_C_READ, NULL);
-}
diff --git a/libelf/elf_ndxscn.c b/libelf/elf_ndxscn.c
deleted file mode 100644
index 53082ae..0000000
--- a/libelf/elf_ndxscn.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Get index of section.
- Copyright (C) 1998, 1999, 2000, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libelf.h>
-#include <stddef.h>
-
-#include "libelfP.h"
-
-
-size_t
-elf_ndxscn (scn)
- Elf_Scn *scn;
-{
- if (scn == NULL)
- return SHN_UNDEF;
-
- return scn->index;
-}
diff --git a/libelf/elf_newdata.c b/libelf/elf_newdata.c
deleted file mode 100644
index db17ea5..0000000
--- a/libelf/elf_newdata.c
+++ /dev/null
@@ -1,130 +0,0 @@
-/* Create new, empty section data.
- Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stddef.h>
-#include <stdlib.h>
-
-#include "libelfP.h"
-
-
-Elf_Data *
-elf_newdata (Elf_Scn *scn)
-{
- Elf_Data_List *result = NULL;
-
- if (scn == NULL)
- return NULL;
-
- if (unlikely (scn->index == 0))
- {
- /* It is not allowed to add something to the 0th section. */
- __libelf_seterrno (ELF_E_NOT_NUL_SECTION);
- return NULL;
- }
-
- if (scn->elf->class == ELFCLASS32
- || (offsetof (struct Elf, state.elf32.ehdr)
- == offsetof (struct Elf, state.elf64.ehdr))
- ? scn->elf->state.elf32.ehdr == NULL
- : scn->elf->state.elf64.ehdr == NULL)
- {
- __libelf_seterrno (ELF_E_WRONG_ORDER_EHDR);
- return NULL;
- }
-
- rwlock_wrlock (scn->elf->lock);
-
- if (scn->data_read && scn->data_list_rear == NULL)
- {
- /* This means the section was created by the user and this is the
- first data. */
- result = &scn->data_list;
- result->flags = ELF_F_DIRTY;
- }
- else
- {
- /* Create a new, empty data descriptor. */
- result = (Elf_Data_List *) calloc (1, sizeof (Elf_Data_List));
- if (result == NULL)
- {
- __libelf_seterrno (ELF_E_NOMEM);
- goto out;
- }
-
- result->flags = ELF_F_DIRTY | ELF_F_MALLOCED;
-
- if (scn->data_list_rear == NULL)
- /* We create new data without reading/converting the data from the
- file. That is fine but we have to remember this. */
- scn->data_list_rear = &scn->data_list;
- }
-
- /* Set the predefined values. */
- result->data.d.d_version = __libelf_version;
-
- result->data.s = scn;
-
- /* Add to the end of the list. */
- if (scn->data_list_rear != NULL)
- scn->data_list_rear->next = result;
-
- scn->data_list_rear = result;
-
- out:
- rwlock_unlock (scn->elf->lock);
-
- /* Please note that the following is thread safe and is also defined
- for RESULT == NULL since it still return NULL. */
- return &result->data.d;
-}
diff --git a/libelf/elf_newscn.c b/libelf/elf_newscn.c
deleted file mode 100644
index aefab33..0000000
--- a/libelf/elf_newscn.c
+++ /dev/null
@@ -1,176 +0,0 @@
-/* Append new section.
- Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <stdbool.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-
-Elf_Scn *
-elf_newscn (elf)
- Elf *elf;
-{
- Elf_Scn *result = NULL;
- bool first = false;
-
- if (elf == NULL)
- return NULL;
-
- /* We rely on the prefix of the `elf', `elf32', and `elf64' element
- being the same. */
- assert (offsetof (Elf, state.elf.scns_last)
- == offsetof (Elf, state.elf32.scns_last));
- assert (offsetof (Elf, state.elf.scns_last)
- == offsetof (Elf, state.elf64.scns_last));
- assert (offsetof (Elf, state.elf32.scns)
- == offsetof (Elf, state.elf64.scns));
-
- rwlock_wrlock (elf->lock);
-
- again:
- if (elf->state.elf.scns_last->cnt < elf->state.elf.scns_last->max)
- {
- result = &elf->state.elf.scns_last->data[elf->state.elf.scns_last->cnt];
-
- if (++elf->state.elf.scns_last->cnt == 1
- && (elf->state.elf.scns_last
- == (elf->class == ELFCLASS32
- || (offsetof (Elf, state.elf32.scns)
- == offsetof (Elf, state.elf64.scns))
- ? &elf->state.elf32.scns : &elf->state.elf64.scns)))
- /* This is zeroth section. */
- first = true;
- else
- {
- assert (elf->state.elf.scns_last->cnt > 1);
- result->index = result[-1].index + 1;
- }
- }
- else
- {
- /* We must allocate a new element. */
- Elf_ScnList *newp;
-
- assert (elf->state.elf.scnincr > 0);
-
- newp = (Elf_ScnList *) calloc (sizeof (Elf_ScnList)
- + ((elf->state.elf.scnincr *= 2)
- * sizeof (Elf_Scn)), 1);
- if (newp == NULL)
- {
- __libelf_seterrno (ELF_E_NOMEM);
- goto out;
- }
-
- result = &newp->data[0];
-
- /* One section used. */
- ++newp->cnt;
-
- /* This is the number of sections we allocated. */
- newp->max = elf->state.elf.scnincr;
-
- /* Remember the index for the first section in this block. */
- newp->data[0].index
- = 1 + elf->state.elf.scns_last->data[elf->state.elf.scns_last->max - 1].index;
-
- /* Enqueue the new list element. */
- elf->state.elf.scns_last = elf->state.elf.scns_last->next = newp;
- }
-
- /* Create a section header for this section. */
- if (elf->class == ELFCLASS32)
- {
- result->shdr.e32 = (Elf32_Shdr *) calloc (1, sizeof (Elf32_Shdr));
- if (result->shdr.e32 == NULL)
- {
- __libelf_seterrno (ELF_E_NOMEM);
- goto out;
- }
- }
- else
- {
- result->shdr.e64 = (Elf64_Shdr *) calloc (1, sizeof (Elf64_Shdr));
- if (result->shdr.e64 == NULL)
- {
- __libelf_seterrno (ELF_E_NOMEM);
- goto out;
- }
- }
-
- result->elf = elf;
- result->shdr_flags = ELF_F_DIRTY | ELF_F_MALLOCED;
- result->list = elf->state.elf.scns_last;
-
- /* Initialize the data part. */
- result->data_read = 1;
- if (unlikely (first))
- {
- /* For the first section we mark the data as already available. */
- //result->data_list_rear = &result->data_list;
- first = false;
- goto again;
- }
-
- result->flags |= ELF_F_DIRTY;
-
- out:
- rwlock_unlock (elf->lock);
-
- return result;
-}
diff --git a/libelf/elf_next.c b/libelf/elf_next.c
deleted file mode 100644
index fbfb272..0000000
--- a/libelf/elf_next.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/* Advance in archive to next element.
- Copyright (C) 1998, 1999, 2000, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <libelf.h>
-#include <stddef.h>
-
-#include "libelfP.h"
-
-
-Elf_Cmd
-elf_next (elf)
- Elf *elf;
-{
- Elf *parent;
- Elf_Cmd ret;
-
- /* Be gratious, the specs demand it. */
- if (elf == NULL || elf->parent == NULL)
- return ELF_C_NULL;
-
- /* We can be sure the parent is an archive. */
- parent = elf->parent;
- assert (parent->kind == ELF_K_AR);
-
- rwlock_wrlock (parent->lock);
-
- /* Now advance the offset. */
- parent->state.ar.offset += (sizeof (struct ar_hdr)
- + ((parent->state.ar.elf_ar_hdr.ar_size + 1)
- & ~1l));
-
- /* Get the next archive header. */
- ret = __libelf_next_arhdr_wrlock (parent) != 0 ? ELF_C_NULL : elf->cmd;
-
- rwlock_unlock (parent->lock);
-
- return ret;
-}
diff --git a/libelf/elf_nextscn.c b/libelf/elf_nextscn.c
deleted file mode 100644
index a1842bb..0000000
--- a/libelf/elf_nextscn.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/* Get next section.
- Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <libelf.h>
-#include <stddef.h>
-
-#include "libelfP.h"
-
-
-Elf_Scn *
-elf_nextscn (elf, scn)
- Elf *elf;
- Elf_Scn *scn;
-{
- Elf_Scn *result = NULL;
-
- if (elf == NULL)
- return NULL;
-
- rwlock_rdlock (elf->lock);
-
- if (scn == NULL)
- {
- /* If no section handle is given return the first (not 0th) section. */
- if (elf->class == ELFCLASS32
- || (offsetof (Elf, state.elf32.scns)
- == offsetof (Elf, state.elf64.scns)))
- {
- if (elf->state.elf32.scns.cnt > 1)
- result = &elf->state.elf32.scns.data[1];
- }
- else
- {
- if (elf->state.elf64.scns.cnt > 1)
- result = &elf->state.elf64.scns.data[1];
- }
- }
- else
- {
- Elf_ScnList *list = scn->list;
-
- if (scn + 1 < &list->data[list->cnt])
- result = scn + 1;
- else if (scn + 1 == &list->data[list->max]
- && (list = list->next) != NULL)
- {
- /* If there is another element in the section list it must
- have at least one entry. */
- assert (list->cnt > 0);
- result = &list->data[0];
- }
- }
-
- rwlock_unlock (elf->lock);
-
- return result;
-}
-INTDEF(elf_nextscn)
diff --git a/libelf/elf_rand.c b/libelf/elf_rand.c
deleted file mode 100644
index a766d38..0000000
--- a/libelf/elf_rand.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/* Select specific element in archive.
- Copyright (C) 1998, 1999, 2000, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libelf.h>
-#include <stddef.h>
-
-#include "libelfP.h"
-
-
-size_t
-elf_rand (elf, offset)
- Elf *elf;
- size_t offset;
-{
- /* Be gratious, the specs demand it. */
- if (elf == NULL || elf->kind != ELF_K_AR)
- return 0;
-
- rwlock_wrlock (elf->lock);
-
- /* Save the old offset and set the offset. */
- elf->state.ar.offset = elf->start_offset + offset;
-
- /* Get the next archive header. */
- if (__libelf_next_arhdr_wrlock (elf) != 0)
- {
- /* Mark the archive header as unusable. */
- elf->state.ar.elf_ar_hdr.ar_name = NULL;
- return 0;
- }
-
- rwlock_unlock (elf->lock);
-
- return offset;
-}
diff --git a/libelf/elf_rawdata.c b/libelf/elf_rawdata.c
deleted file mode 100644
index b8bb0f4..0000000
--- a/libelf/elf_rawdata.c
+++ /dev/null
@@ -1,99 +0,0 @@
-/* Return raw section content.
- Copyright (C) 1998, 1999, 2000, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdlib.h>
-
-#include "libelfP.h"
-
-
-Elf_Data *
-elf_rawdata (scn, data)
- Elf_Scn *scn;
- Elf_Data *data;
-{
- if (scn == NULL || scn->elf->kind != ELF_K_ELF)
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return NULL;
- }
-
- /* If `data' is not NULL this means we are not addressing the initial
- data in the file. But this also means this data is already read
- (since otherwise it is not possible to have a valid `data' pointer)
- and all the data structures are initialized as well. In this case
- we can simply walk the list of data records. */
- if (data != NULL
- || (scn->data_read != 0 && (scn->flags & ELF_F_FILEDATA) == 0))
- {
- /* We don't allow accessing any but the data read from the file
- as raw. */
- __libelf_seterrno (ELF_E_DATA_MISMATCH);
- return NULL;
- }
-
- /* If the data for this section was not yet initialized do it now. */
- if (scn->data_read == 0)
- {
- /* First thing we do is to read the data from the file. There is
- always a file (or memory region) associated with this descriptor
- since otherwise the `data_read' flag would be set. */
- if (__libelf_set_rawdata (scn) != 0)
- /* Something went wrong. The error value is already set. */
- return NULL;
- }
-
- /* Return the first data element in the list. */
- return &scn->rawdata.d;
-}
-INTDEF(elf_rawdata)
diff --git a/libelf/elf_rawfile.c b/libelf/elf_rawfile.c
deleted file mode 100644
index a62a354..0000000
--- a/libelf/elf_rawfile.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/* Retrieve uninterpreted file contents.
- Copyright (C) 1998, 1999, 2000, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libelf.h>
-#include <stddef.h>
-
-#include "libelfP.h"
-
-
-char *
-elf_rawfile (elf, ptr)
- Elf *elf;
- size_t *ptr;
-{
- char *result;
-
- if (elf == NULL)
- {
- /* No valid descriptor. */
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- error_out:
- if (ptr != NULL)
- *ptr = 0;
- return NULL;
- }
-
- /* If the file is not mmap'ed and not previously loaded, do it now. */
- if (elf->map_address == NULL && __libelf_readall (elf) == NULL)
- goto error_out;
-
- rwlock_rdlock (elf->lock);
- if (ptr != NULL)
- *ptr = elf->maximum_size;
-
- result = (char *) elf->map_address + elf->start_offset;
- rwlock_unlock (elf->lock);
-
- return result;
-}
diff --git a/libelf/elf_readall.c b/libelf/elf_readall.c
deleted file mode 100644
index 8f171b2..0000000
--- a/libelf/elf_readall.c
+++ /dev/null
@@ -1,153 +0,0 @@
-/* Read all of the file associated with the descriptor.
- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <errno.h>
-#include <unistd.h>
-
-#include <system.h>
-#include "libelfP.h"
-#include "common.h"
-
-
-static void
-set_address (Elf *elf, size_t offset)
-{
- if (elf->kind == ELF_K_AR)
- {
- Elf *child = elf->state.ar.children;
-
- while (child != NULL)
- {
- if (child->map_address == NULL)
- {
- child->map_address = elf->map_address;
- child->start_offset -= offset;
- if (child->kind == ELF_K_AR)
- child->state.ar.offset -= offset;
-
- set_address (child, offset);
- }
-
- child = child->next;
- }
- }
-}
-
-
-char *
-__libelf_readall (elf)
- Elf *elf;
-{
- /* Get the file. */
- rwlock_wrlock (elf->lock);
-
- if (elf->map_address == NULL && unlikely (elf->fildes == -1))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- rwlock_unlock (elf->lock);
- return NULL;
- }
-
- /* If the file is not mmap'ed and not previously loaded, do it now. */
- if (elf->map_address == NULL)
- {
- char *mem;
-
- /* If this is an archive and we have derived descriptors get the
- locks for all of them. */
- libelf_acquire_all (elf);
-
- /* Allocate all the memory we need. */
- mem = (char *) malloc (elf->maximum_size);
- if (mem != NULL)
- {
- /* Read the file content. */
- if (unlikely ((size_t) pread_retry (elf->fildes, mem,
- elf->maximum_size,
- elf->start_offset)
- != elf->maximum_size))
- {
- /* Something went wrong. */
- __libelf_seterrno (ELF_E_READ_ERROR);
- free (mem);
- }
- else
- {
- /* Remember the address. */
- elf->map_address = mem;
-
- /* Also remember that we allocated the memory. */
- elf->flags |= ELF_F_MALLOCED;
-
- /* Propagate the information down to all children and
- their children. */
- set_address (elf, elf->start_offset);
-
- /* Correct the own offsets. */
- if (elf->kind == ELF_K_AR)
- elf->state.ar.offset -= elf->start_offset;
- elf->start_offset = 0;
- }
- }
- else
- __libelf_seterrno (ELF_E_NOMEM);
-
- /* Free the locks on the children. */
- libelf_release_all (elf);
- }
-
- rwlock_unlock (elf->lock);
-
- return (char *) elf->map_address;
-}
diff --git a/libelf/elf_scnshndx.c b/libelf/elf_scnshndx.c
deleted file mode 100644
index 987d23e..0000000
--- a/libelf/elf_scnshndx.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/* Get the section index of the extended section index table.
- Copyright (C) 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2007.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libelfP.h"
-
-
-int
-elf_scnshndx (Elf_Scn *scn)
-{
- if (unlikely (scn->shndx_index == 0))
- {
- /* We do not have the value yet. We get it as a side effect of
- getting a section header. */
- GElf_Shdr shdr_mem;
- (void) INTUSE(gelf_getshdr) (scn, &shdr_mem);
- }
-
- return scn->shndx_index;
-}
-INTDEF(elf_scnshndx)
diff --git a/libelf/elf_strptr.c b/libelf/elf_strptr.c
deleted file mode 100644
index 35a0e9b..0000000
--- a/libelf/elf_strptr.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/* Return string pointer from string section.
- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libelf.h>
-#include <stddef.h>
-
-#include "libelfP.h"
-
-
-char *
-elf_strptr (elf, idx, offset)
- Elf *elf;
- size_t idx;
- size_t offset;
-{
- if (elf == NULL)
- return NULL;
-
- if (elf->kind != ELF_K_ELF)
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return NULL;
- }
-
- rwlock_rdlock (elf->lock);
-
- char *result = NULL;
- Elf_Scn *strscn;
-
- /* Find the section in the list. */
- Elf_ScnList *runp = (elf->class == ELFCLASS32
- || (offsetof (struct Elf, state.elf32.scns)
- == offsetof (struct Elf, state.elf64.scns))
- ? &elf->state.elf32.scns : &elf->state.elf64.scns);
- while (1)
- {
- if (idx < runp->max)
- {
- if (idx < runp->cnt)
- strscn = &runp->data[idx];
- else
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- goto out;
- }
- break;
- }
-
- idx -= runp->max;
-
- runp = runp->next;
- if (runp == NULL)
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- goto out;
- }
- }
-
- if (elf->class == ELFCLASS32)
- {
- if (unlikely (strscn->shdr.e32->sh_type != SHT_STRTAB))
- {
- /* This is no string section. */
- __libelf_seterrno (ELF_E_INVALID_SECTION);
- goto out;
- }
-
- if (unlikely (offset >= strscn->shdr.e32->sh_size))
- {
- /* The given offset is too big, it is beyond this section. */
- __libelf_seterrno (ELF_E_OFFSET_RANGE);
- goto out;
- }
- }
- else
- {
- if (unlikely (strscn->shdr.e64->sh_type != SHT_STRTAB))
- {
- /* This is no string section. */
- __libelf_seterrno (ELF_E_INVALID_SECTION);
- goto out;
- }
-
- if (unlikely (offset >= strscn->shdr.e64->sh_size))
- {
- /* The given offset is too big, it is beyond this section. */
- __libelf_seterrno (ELF_E_OFFSET_RANGE);
- goto out;
- }
- }
-
- if (strscn->rawdata_base == NULL && ! strscn->data_read)
- {
- rwlock_unlock (elf->lock);
- rwlock_wrlock (elf->lock);
- if (strscn->rawdata_base == NULL && ! strscn->data_read
- /* Read the section data. */
- && __libelf_set_rawdata_wrlock (strscn) != 0)
- goto out;
- }
-
- if (likely (strscn->rawdata_base != NULL))
- result = &strscn->rawdata_base[offset];
- else
- {
- /* This is a file which is currently created. Use the list of
- data blocks. */
- struct Elf_Data_List *dl = &strscn->data_list;
- while (dl != NULL)
- {
- if (offset >= (size_t) dl->data.d.d_off
- && offset < dl->data.d.d_off + dl->data.d.d_size)
- {
- result = (char *) dl->data.d.d_buf + (offset - dl->data.d.d_off);
- break;
- }
-
- dl = dl->next;
- }
- }
-
- out:
- rwlock_unlock (elf->lock);
-
- return result;
-}
-INTDEF(elf_strptr)
diff --git a/libelf/elf_update.c b/libelf/elf_update.c
deleted file mode 100644
index 5daece4..0000000
--- a/libelf/elf_update.c
+++ /dev/null
@@ -1,224 +0,0 @@
-/* Update data structures for changes and write them out.
- Copyright (C) 1999, 2000, 2001, 2002, 2004, 2005, 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 1999.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libelf.h>
-#include <unistd.h>
-#include <sys/mman.h>
-#include <sys/stat.h>
-
-#include "libelfP.h"
-
-
-static off_t
-write_file (Elf *elf, off_t size, int change_bo, size_t shnum)
-{
- int class = elf->class;
-
- /* Check the mode bits now, before modification might change them. */
- struct stat st;
- if (unlikely (fstat (elf->fildes, &st) != 0))
- {
- __libelf_seterrno (ELF_E_WRITE_ERROR);
- return -1;
- }
-
- /* Adjust the size in any case. We do this even if we use `write'.
- We cannot do this if this file is in an archive. We also don't
- do it *now* if we are shortening the file since this would
- prevent programs to use the data of the file in generating the
- new file. We truncate the file later in this case. */
- if (elf->parent == NULL
- && (elf->maximum_size == ~((size_t) 0)
- || (size_t) size > elf->maximum_size)
- && unlikely (ftruncate (elf->fildes, size) != 0))
- {
- __libelf_seterrno (ELF_E_WRITE_ERROR);
- return -1;
- }
-
- /* Try to map the file if this isn't done yet. */
- if (elf->map_address == NULL && elf->cmd == ELF_C_WRITE_MMAP)
- {
-#if _MUDFLAP
- /* Mudflap doesn't grok that our mmap'd data is ok. */
-#else
- elf->map_address = mmap (NULL, size, PROT_READ | PROT_WRITE,
- MAP_SHARED, elf->fildes, 0);
- if (unlikely (elf->map_address == MAP_FAILED))
- elf->map_address = NULL;
-#endif
- }
-
- if (elf->map_address != NULL)
- {
- /* The file is mmaped. */
- if ((class == ELFCLASS32
- ? __elf32_updatemmap (elf, change_bo, shnum)
- : __elf64_updatemmap (elf, change_bo, shnum)) != 0)
- /* Some problem while writing. */
- size = -1;
- }
- else
- {
- /* The file is not mmaped. */
- if ((class == ELFCLASS32
- ? __elf32_updatefile (elf, change_bo, shnum)
- : __elf64_updatefile (elf, change_bo, shnum)) != 0)
- /* Some problem while writing. */
- size = -1;
- }
-
- if (size != -1
- && elf->parent == NULL
- && elf->maximum_size != ~((size_t) 0)
- && (size_t) size < elf->maximum_size
- && unlikely (ftruncate (elf->fildes, size) != 0))
- {
- __libelf_seterrno (ELF_E_WRITE_ERROR);
- size = -1;
- }
-
- /* POSIX says that ftruncate and write may clear the S_ISUID and S_ISGID
- mode bits. So make sure we restore them afterwards if they were set.
- This is not atomic if someone else chmod's the file while we operate. */
- if (size != -1
- && unlikely (st.st_mode & (S_ISUID | S_ISGID))
- /* fchmod ignores the bits we cannot change. */
- && unlikely (fchmod (elf->fildes, st.st_mode) != 0))
- {
- __libelf_seterrno (ELF_E_WRITE_ERROR);
- size = -1;
- }
-
- if (size != -1 && elf->parent == NULL)
- elf->maximum_size = size;
-
- return size;
-}
-
-
-off_t
-elf_update (elf, cmd)
- Elf *elf;
- Elf_Cmd cmd;
-{
- size_t shnum;
- off_t size;
- int change_bo = 0;
-
- if (cmd != ELF_C_NULL
- && cmd != ELF_C_WRITE
- && unlikely (cmd != ELF_C_WRITE_MMAP))
- {
- __libelf_seterrno (ELF_E_INVALID_CMD);
- return -1;
- }
-
- if (elf == NULL)
- return -1;
-
- if (elf->kind != ELF_K_ELF)
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return -1;
- }
-
- rwlock_wrlock (elf->lock);
-
- /* Make sure we have an ELF header. */
- if (elf->state.elf.ehdr == NULL)
- {
- __libelf_seterrno (ELF_E_WRONG_ORDER_EHDR);
- size = -1;
- goto out;
- }
-
- /* Determine the number of sections. */
- shnum = (elf->state.elf.scns_last->cnt == 0
- ? 0
- : 1 + elf->state.elf.scns_last->data[elf->state.elf.scns_last->cnt - 1].index);
-
- /* Update the ELF descriptor. First, place the program header. It
- will come right after the ELF header. The count the size of all
- sections and finally place the section table. */
- size = (elf->class == ELFCLASS32
- ? __elf32_updatenull_wrlock (elf, &change_bo, shnum)
- : __elf64_updatenull_wrlock (elf, &change_bo, shnum));
- if (likely (size != -1)
- /* See whether we actually have to write out the data. */
- && (cmd == ELF_C_WRITE || cmd == ELF_C_WRITE_MMAP))
- {
- if (elf->cmd != ELF_C_RDWR
- && elf->cmd != ELF_C_RDWR_MMAP
- && elf->cmd != ELF_C_WRITE
- && unlikely (elf->cmd != ELF_C_WRITE_MMAP))
- {
- __libelf_seterrno (ELF_E_UPDATE_RO);
- size = -1;
- }
- else if (unlikely (elf->fildes == -1))
- {
- /* We closed the file already. */
- __libelf_seterrno (ELF_E_FD_DISABLED);
- size = -1;
- }
- else
- size = write_file (elf, size, change_bo, shnum);
- }
-
- out:
- rwlock_unlock (elf->lock);
-
- return size;
-}
diff --git a/libelf/elf_version.c b/libelf/elf_version.c
deleted file mode 100644
index cbed496..0000000
--- a/libelf/elf_version.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/* Coordinate ELF library and application versions.
- Copyright (C) 1998, 1999, 2000, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libelfP.h>
-
-
-/* Is the version initialized? */
-int __libelf_version_initialized;
-
-/* Currently selected version. */
-unsigned int __libelf_version = EV_CURRENT;
-
-
-unsigned int
-elf_version (version)
- unsigned int version;
-{
- if (version == EV_NONE)
- return __libelf_version;
-
- if (likely (version < EV_NUM))
- {
- /* Phew, we know this version. */
- unsigned int last_version = __libelf_version;
-
- /* Store the new version. */
- __libelf_version = version;
-
- /* Signal that the version is now initialized. */
- __libelf_version_initialized = 1;
-
- /* And return the last version. */
- return last_version;
- }
-
- /* We cannot handle this version. */
- __libelf_seterrno (ELF_E_UNKNOWN_VERSION);
- return EV_NONE;
-}
-INTDEF(elf_version)
diff --git a/libelf/exttypes.h b/libelf/exttypes.h
deleted file mode 100644
index 3bb90c3..0000000
--- a/libelf/exttypes.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/* External ELF types.
- Copyright (C) 1998, 1999, 2000, 2002, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifndef _EXTTYPES_H
-#define _EXTTYPES_H 1
-
-/* Integral types. */
-typedef char Elf32_Ext_Addr[ELF32_FSZ_ADDR];
-typedef char Elf32_Ext_Off[ELF32_FSZ_OFF];
-typedef char Elf32_Ext_Half[ELF32_FSZ_HALF];
-typedef char Elf32_Ext_Sword[ELF32_FSZ_SWORD];
-typedef char Elf32_Ext_Word[ELF32_FSZ_WORD];
-typedef char Elf32_Ext_Sxword[ELF32_FSZ_SXWORD];
-typedef char Elf32_Ext_Xword[ELF32_FSZ_XWORD];
-
-typedef char Elf64_Ext_Addr[ELF64_FSZ_ADDR];
-typedef char Elf64_Ext_Off[ELF64_FSZ_OFF];
-typedef char Elf64_Ext_Half[ELF64_FSZ_HALF];
-typedef char Elf64_Ext_Sword[ELF64_FSZ_SWORD];
-typedef char Elf64_Ext_Word[ELF64_FSZ_WORD];
-typedef char Elf64_Ext_Sxword[ELF64_FSZ_SXWORD];
-typedef char Elf64_Ext_Xword[ELF64_FSZ_XWORD];
-
-
-/* Define the composed types. */
-#define START(Bits, Name, EName) typedef struct {
-#define END(Bits, Name) } ElfW2(Bits, Name)
-#define TYPE_NAME(Type, Name) Type Name;
-#define TYPE_EXTRA(Text) Text
-#define TYPE_XLATE(Text)
-
-/* Get the abstract definitions. */
-#include "abstract.h"
-
-/* And define the types. */
-Ehdr32 (Ext_);
-Phdr32 (Ext_);
-Shdr32 (Ext_);
-Sym32 (Ext_);
-Rel32 (Ext_);
-Rela32 (Ext_);
-Note32 (Ext_);
-Dyn32 (Ext_);
-Verdef32 (Ext_);
-Verdaux32 (Ext_);
-Verneed32 (Ext_);
-Vernaux32 (Ext_);
-Syminfo32 (Ext_);
-Move32 (Ext_);
-auxv_t32 (Ext_);
-
-Ehdr64 (Ext_);
-Phdr64 (Ext_);
-Shdr64 (Ext_);
-Sym64 (Ext_);
-Rel64 (Ext_);
-Rela64 (Ext_);
-Note64 (Ext_);
-Dyn64 (Ext_);
-Verdef64 (Ext_);
-Verdaux64 (Ext_);
-Verneed64 (Ext_);
-Vernaux64 (Ext_);
-Syminfo64 (Ext_);
-Move64 (Ext_);
-auxv_t64 (Ext_);
-
-#undef START
-#undef END
-#undef TYPE_NAME
-#undef TYPE_EXTRA
-#undef TYPE_XLATE
-
-#endif /* exttypes.h */
diff --git a/libelf/gelf.h b/libelf/gelf.h
deleted file mode 100644
index 533e15a..0000000
--- a/libelf/gelf.h
+++ /dev/null
@@ -1,353 +0,0 @@
-/* This file defines generic ELF types, structures, and macros.
- Copyright (C) 1999, 2000, 2001, 2002, 2004, 2005, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifndef _GELF_H
-#define _GELF_H 1
-
-#include <libelf.h>
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Class independent type definitions. Correctly speaking this is not
- true. We assume that 64-bit binaries are the largest class and
- therefore all other classes can be represented without loss. */
-
-/* Type for a 16-bit quantity. */
-typedef Elf64_Half GElf_Half;
-
-/* Types for signed and unsigned 32-bit quantities. */
-typedef Elf64_Word GElf_Word;
-typedef Elf64_Sword GElf_Sword;
-
-/* Types for signed and unsigned 64-bit quantities. */
-typedef Elf64_Xword GElf_Xword;
-typedef Elf64_Sxword GElf_Sxword;
-
-/* Type of addresses. */
-typedef Elf64_Addr GElf_Addr;
-
-/* Type of file offsets. */
-typedef Elf64_Off GElf_Off;
-
-
-/* The ELF file header. This appears at the start of every ELF file. */
-typedef Elf64_Ehdr GElf_Ehdr;
-
-/* Section header. */
-typedef Elf64_Shdr GElf_Shdr;
-
-/* Section index. */
-/* XXX This should probably be a larger type in preparation of times when
- regular section indices can be larger. */
-typedef Elf64_Section GElf_Section;
-
-/* Symbol table entry. */
-typedef Elf64_Sym GElf_Sym;
-
-/* The syminfo section if available contains additional information about
- every dynamic symbol. */
-typedef Elf64_Syminfo GElf_Syminfo;
-
-/* Relocation table entry without addend (in section of type SHT_REL). */
-typedef Elf64_Rel GElf_Rel;
-
-/* Relocation table entry with addend (in section of type SHT_RELA). */
-typedef Elf64_Rela GElf_Rela;
-
-/* Program segment header. */
-typedef Elf64_Phdr GElf_Phdr;
-
-/* Dynamic section entry. */
-typedef Elf64_Dyn GElf_Dyn;
-
-
-/* Version definition sections. */
-typedef Elf64_Verdef GElf_Verdef;
-
-/* Auxialiary version information. */
-typedef Elf64_Verdaux GElf_Verdaux;
-
-/* Version dependency section. */
-typedef Elf64_Verneed GElf_Verneed;
-
-/* Auxiliary needed version information. */
-typedef Elf64_Vernaux GElf_Vernaux;
-
-
-/* Type for version symbol information. */
-typedef Elf64_Versym GElf_Versym;
-
-
-/* Auxiliary vector. */
-typedef Elf64_auxv_t GElf_auxv_t;
-
-
-/* Note section contents. */
-typedef Elf64_Nhdr GElf_Nhdr;
-
-
-/* Move structure. */
-typedef Elf64_Move GElf_Move;
-
-
-/* Library list structure. */
-typedef Elf64_Lib GElf_Lib;
-
-
-/* How to extract and insert information held in the st_info field. */
-
-#define GELF_ST_BIND(val) ELF64_ST_BIND (val)
-#define GELF_ST_TYPE(val) ELF64_ST_TYPE (val)
-#define GELF_ST_INFO(bind, type) ELF64_ST_INFO (bind, type)
-
-/* How to extract information held in the st_other field. */
-
-#define GELF_ST_VISIBILITY(val) ELF64_ST_VISIBILITY (val)
-
-
-/* How to extract and insert information held in the r_info field. */
-
-#define GELF_R_SYM(info) ELF64_R_SYM (info)
-#define GELF_R_TYPE(info) ELF64_R_TYPE (info)
-#define GELF_R_INFO(sym, type) ELF64_R_INFO (sym, type)
-
-
-/* How to extract and insert information held in the m_info field. */
-#define GELF_M_SYM(info) ELF64_M_SYM (info)
-#define GELF_M_SIZE(info) ELF64_M_SIZE (info)
-#define GELF_M_INFO(sym, size) ELF64_M_INFO (sym, size)
-
-
-/* Get class of the file associated with ELF. */
-extern int gelf_getclass (Elf *__elf);
-
-
-/* Return size of array of COUNT elemeents of the type denoted by TYPE
- in the external representation. The binary class is taken from ELF.
- The result is based on version VERSION of the ELF standard. */
-extern size_t gelf_fsize (Elf *__elf, Elf_Type __type, size_t __count,
- unsigned int __version);
-
-/* Retrieve object file header. */
-extern GElf_Ehdr *gelf_getehdr (Elf *__elf, GElf_Ehdr *__dest);
-
-/* Update the ELF header. */
-extern int gelf_update_ehdr (Elf *__elf, GElf_Ehdr *__src);
-
-/* Create new ELF header if none exists. */
-extern unsigned long int gelf_newehdr (Elf *__elf, int __class);
-
-/* Get section at OFFSET. */
-extern Elf_Scn *gelf_offscn (Elf *__elf, GElf_Off __offset);
-
-/* Retrieve section header. */
-extern GElf_Shdr *gelf_getshdr (Elf_Scn *__scn, GElf_Shdr *__dst);
-
-/* Update section header. */
-extern int gelf_update_shdr (Elf_Scn *__scn, GElf_Shdr *__src);
-
-/* Retrieve program header table entry. */
-extern GElf_Phdr *gelf_getphdr (Elf *__elf, int __ndx, GElf_Phdr *__dst);
-
-/* Update the program header. */
-extern int gelf_update_phdr (Elf *__elf, int __ndx, GElf_Phdr *__src);
-
-/* Create new program header with PHNUM entries. */
-extern unsigned long int gelf_newphdr (Elf *__elf, size_t __phnum);
-
-
-/* Convert data structure from the representation in the file represented
- by ELF to their memory representation. */
-extern Elf_Data *gelf_xlatetom (Elf *__elf, Elf_Data *__dest,
- const Elf_Data *__src, unsigned int __encode);
-
-/* Convert data structure from to the representation in memory
- represented by ELF file representation. */
-extern Elf_Data *gelf_xlatetof (Elf *__elf, Elf_Data *__dest,
- const Elf_Data *__src, unsigned int __encode);
-
-
-/* Retrieve REL relocation info at the given index. */
-extern GElf_Rel *gelf_getrel (Elf_Data *__data, int __ndx, GElf_Rel *__dst);
-
-/* Retrieve RELA relocation info at the given index. */
-extern GElf_Rela *gelf_getrela (Elf_Data *__data, int __ndx, GElf_Rela *__dst);
-
-/* Update REL relocation information at given index. */
-extern int gelf_update_rel (Elf_Data *__dst, int __ndx, GElf_Rel *__src);
-
-/* Update RELA relocation information at given index. */
-extern int gelf_update_rela (Elf_Data *__dst, int __ndx, GElf_Rela *__src);
-
-
-/* Retrieve symbol information from the symbol table at the given index. */
-extern GElf_Sym *gelf_getsym (Elf_Data *__data, int __ndx, GElf_Sym *__dst);
-
-/* Update symbol information in the symbol table at the given index. */
-extern int gelf_update_sym (Elf_Data *__data, int __ndx, GElf_Sym *__src);
-
-
-/* Retrieve symbol information and separate section index from the
- symbol table at the given index. */
-extern GElf_Sym *gelf_getsymshndx (Elf_Data *__symdata, Elf_Data *__shndxdata,
- int __ndx, GElf_Sym *__sym,
- Elf32_Word *__xshndx);
-
-/* Update symbol information and separate section index in the symbol
- table at the given index. */
-extern int gelf_update_symshndx (Elf_Data *__symdata, Elf_Data *__shndxdata,
- int __ndx, GElf_Sym *__sym,
- Elf32_Word __xshndx);
-
-
-/* Retrieve additional symbol information from the symbol table at the
- given index. */
-extern GElf_Syminfo *gelf_getsyminfo (Elf_Data *__data, int __ndx,
- GElf_Syminfo *__dst);
-
-/* Update additional symbol information in the symbol table at the
- given index. */
-extern int gelf_update_syminfo (Elf_Data *__data, int __ndx,
- GElf_Syminfo *__src);
-
-
-/* Get information from dynamic table at the given index. */
-extern GElf_Dyn *gelf_getdyn (Elf_Data *__data, int __ndx, GElf_Dyn *__dst);
-
-/* Update information in dynamic table at the given index. */
-extern int gelf_update_dyn (Elf_Data *__dst, int __ndx, GElf_Dyn *__src);
-
-
-/* Get move structure at the given index. */
-extern GElf_Move *gelf_getmove (Elf_Data *__data, int __ndx, GElf_Move *__dst);
-
-/* Update move structure at the given index. */
-extern int gelf_update_move (Elf_Data *__data, int __ndx,
- GElf_Move *__src);
-
-
-/* Get library from table at the given index. */
-extern GElf_Lib *gelf_getlib (Elf_Data *__data, int __ndx, GElf_Lib *__dst);
-
-/* Update library in table at the given index. */
-extern int gelf_update_lib (Elf_Data *__data, int __ndx, GElf_Lib *__src);
-
-
-
-/* Retrieve symbol version information at given index. */
-extern GElf_Versym *gelf_getversym (Elf_Data *__data, int __ndx,
- GElf_Versym *__dst);
-
-/* Update symbol version information. */
-extern int gelf_update_versym (Elf_Data *__data, int __ndx,
- GElf_Versym *__src);
-
-
-/* Retrieve required symbol version information at given offset. */
-extern GElf_Verneed *gelf_getverneed (Elf_Data *__data, int __offset,
- GElf_Verneed *__dst);
-
-/* Update required symbol version information. */
-extern int gelf_update_verneed (Elf_Data *__data, int __offset,
- GElf_Verneed *__src);
-
-/* Retrieve additional required symbol version information at given offset. */
-extern GElf_Vernaux *gelf_getvernaux (Elf_Data *__data, int __offset,
- GElf_Vernaux *__dst);
-
-/* Update additional required symbol version information. */
-extern int gelf_update_vernaux (Elf_Data *__data, int __offset,
- GElf_Vernaux *__src);
-
-
-/* Retrieve symbol version definition information at given offset. */
-extern GElf_Verdef *gelf_getverdef (Elf_Data *__data, int __offset,
- GElf_Verdef *__dst);
-
-/* Update symbol version definition information. */
-extern int gelf_update_verdef (Elf_Data *__data, int __offset,
- GElf_Verdef *__src);
-
-/* Retrieve additional symbol version definition information at given
- offset. */
-extern GElf_Verdaux *gelf_getverdaux (Elf_Data *__data, int __offset,
- GElf_Verdaux *__dst);
-
-/* Update additional symbol version definition information. */
-extern int gelf_update_verdaux (Elf_Data *__data, int __offset,
- GElf_Verdaux *__src);
-
-
-/* Get auxv entry at the given index. */
-extern GElf_auxv_t *gelf_getauxv (Elf_Data *__data, int __ndx,
- GElf_auxv_t *__dst);
-
-/* Update auxv entry at the given index. */
-extern int gelf_update_auxv (Elf_Data *__data, int __ndx, GElf_auxv_t *__src);
-
-
-/* Get note header at the given offset into the data, and the offsets of
- the note's name and descriptor data. Returns the offset of the next
- note header, or 0 for an invalid offset or corrupt note header. */
-extern size_t gelf_getnote (Elf_Data *__data, size_t __offset,
- GElf_Nhdr *__result,
- size_t *__name_offset, size_t *__desc_offset);
-
-
-/* Compute simple checksum from permanent parts of the ELF file. */
-extern long int gelf_checksum (Elf *__elf);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* gelf.h */
diff --git a/libelf/gelf_checksum.c b/libelf/gelf_checksum.c
deleted file mode 100644
index fb0daa5..0000000
--- a/libelf/gelf_checksum.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Convert from file to memory representation. Generic ELF version.
- Copyright (C) 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <gelf.h>
-#include <stddef.h>
-
-#include "libelfP.h"
-
-
-long int
-gelf_checksum (elf)
- Elf *elf;
-{
- if (elf == NULL)
- return -1l;
-
- return (elf->class == ELFCLASS32
- ? INTUSE(elf32_checksum) (elf) : INTUSE(elf64_checksum) (elf));
-}
diff --git a/libelf/gelf_fsize.c b/libelf/gelf_fsize.c
deleted file mode 100644
index 98197e0..0000000
--- a/libelf/gelf_fsize.c
+++ /dev/null
@@ -1,130 +0,0 @@
-/* Return the size of an object file type.
- Copyright (C) 1998, 1999, 2000, 2002, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <gelf.h>
-#include <stddef.h>
-
-#include "libelfP.h"
-
-
-/* These are the sizes for all the known types. */
-const size_t __libelf_type_sizes[EV_NUM - 1][ELFCLASSNUM - 1][ELF_T_NUM] =
-{
- /* We have no entry for EV_NONE siince we have to set an error. */
- [EV_CURRENT - 1] = {
- [ELFCLASS32 - 1] = {
-#define TYPE_SIZES(LIBELFBITS) \
- [ELF_T_ADDR] = ELFW2(LIBELFBITS, FSZ_ADDR), \
- [ELF_T_OFF] = ELFW2(LIBELFBITS, FSZ_OFF), \
- [ELF_T_BYTE] = 1, \
- [ELF_T_HALF] = ELFW2(LIBELFBITS, FSZ_HALF), \
- [ELF_T_WORD] = ELFW2(LIBELFBITS, FSZ_WORD), \
- [ELF_T_SWORD] = ELFW2(LIBELFBITS, FSZ_SWORD), \
- [ELF_T_XWORD] = ELFW2(LIBELFBITS, FSZ_XWORD), \
- [ELF_T_SXWORD] = ELFW2(LIBELFBITS, FSZ_SXWORD), \
- [ELF_T_EHDR] = sizeof (ElfW2(LIBELFBITS, Ext_Ehdr)), \
- [ELF_T_SHDR] = sizeof (ElfW2(LIBELFBITS, Ext_Shdr)), \
- [ELF_T_SYM] = sizeof (ElfW2(LIBELFBITS, Ext_Sym)), \
- [ELF_T_REL] = sizeof (ElfW2(LIBELFBITS, Ext_Rel)), \
- [ELF_T_RELA] = sizeof (ElfW2(LIBELFBITS, Ext_Rela)), \
- [ELF_T_PHDR] = sizeof (ElfW2(LIBELFBITS, Ext_Phdr)), \
- [ELF_T_DYN] = sizeof (ElfW2(LIBELFBITS, Ext_Dyn)), \
- [ELF_T_VDEF] = sizeof (ElfW2(LIBELFBITS, Ext_Verdef)), \
- [ELF_T_VDAUX] = sizeof (ElfW2(LIBELFBITS, Ext_Verdaux)), \
- [ELF_T_VNEED] = sizeof (ElfW2(LIBELFBITS, Ext_Verneed)), \
- [ELF_T_VNAUX] = sizeof (ElfW2(LIBELFBITS, Ext_Vernaux)), \
- [ELF_T_NHDR] = sizeof (ElfW2(LIBELFBITS, Ext_Nhdr)), \
- [ELF_T_SYMINFO] = sizeof (ElfW2(LIBELFBITS, Ext_Syminfo)), \
- [ELF_T_MOVE] = sizeof (ElfW2(LIBELFBITS, Ext_Move)), \
- [ELF_T_AUXV] = sizeof (ElfW2(LIBELFBITS, Ext_auxv_t))
- TYPE_SIZES (32)
- },
- [ELFCLASS64 - 1] = {
- TYPE_SIZES (64)
- }
- }
-};
-
-
-size_t
-gelf_fsize (elf, type, count, version)
- Elf *elf;
- Elf_Type type;
- size_t count;
- unsigned int version;
-{
- /* We do not have differences between file and memory sizes. Better
- not since otherwise `mmap' would not work. */
- if (elf == NULL)
- return 0;
-
- if (version == EV_NONE || version >= EV_NUM)
- {
- __libelf_seterrno (ELF_E_UNKNOWN_VERSION);
- return 0;
- }
-
- if (type >= ELF_T_NUM)
- {
- __libelf_seterrno (ELF_E_UNKNOWN_TYPE);
- return 0;
- }
-
-#if EV_NUM != 2
- return count * __libelf_type_sizes[version - 1][elf->class - 1][type];
-#else
- return count * __libelf_type_sizes[0][elf->class - 1][type];
-#endif
-}
-INTDEF(gelf_fsize)
diff --git a/libelf/gelf_getauxv.c b/libelf/gelf_getauxv.c
deleted file mode 100644
index 036bdcc..0000000
--- a/libelf/gelf_getauxv.c
+++ /dev/null
@@ -1,130 +0,0 @@
-/* Get information from auxiliary vector at the given index.
- Copyright (C) 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <gelf.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-
-GElf_auxv_t *
-gelf_getauxv (data, ndx, dst)
- Elf_Data *data;
- int ndx;
- GElf_auxv_t *dst;
-{
- Elf_Data_Scn *data_scn = (Elf_Data_Scn *) data;
- GElf_auxv_t *result = NULL;
- Elf *elf;
-
- if (data_scn == NULL)
- return NULL;
-
- if (unlikely (data_scn->d.d_type != ELF_T_AUXV))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return NULL;
- }
-
- elf = data_scn->s->elf;
-
- rwlock_rdlock (elf->lock);
-
- /* This is the one place where we have to take advantage of the fact
- that an `Elf_Data' pointer is also a pointer to `Elf_Data_Scn'.
- The interface is broken so that it requires this hack. */
- if (elf->class == ELFCLASS32)
- {
- Elf32_auxv_t *src;
-
- /* Here it gets a bit more complicated. The format of the vector
- entries has to be converted. The user better have provided a
- buffer where we can store the information. While copying the data
- we convert the format. */
- if (unlikely ((ndx + 1) * sizeof (Elf32_auxv_t) > data_scn->d.d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- goto out;
- }
-
- src = &((Elf32_auxv_t *) data_scn->d.d_buf)[ndx];
-
- /* This might look like a simple copy operation but it's
- not. There are zero- and sign-extensions going on. */
- dst->a_type = src->a_type;
- dst->a_un.a_val = src->a_un.a_val;
- }
- else
- {
- /* If this is a 64 bit object it's easy. */
- assert (sizeof (GElf_auxv_t) == sizeof (Elf64_auxv_t));
-
- /* The data is already in the correct form. Just make sure the
- index is OK. */
- if (unlikely ((ndx + 1) * sizeof (GElf_auxv_t) > data_scn->d.d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- goto out;
- }
-
- *dst = ((GElf_auxv_t *) data_scn->d.d_buf)[ndx];
- }
-
- result = dst;
-
- out:
- rwlock_unlock (elf->lock);
-
- return result;
-}
diff --git a/libelf/gelf_getclass.c b/libelf/gelf_getclass.c
deleted file mode 100644
index 02784d7..0000000
--- a/libelf/gelf_getclass.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Return the class of file associated with the descriptor.
- Copyright (C) 1999, 2000, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1999.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <gelf.h>
-#include <stddef.h>
-
-#include "libelfP.h"
-
-
-int
-gelf_getclass (elf)
- Elf *elf;
-{
- return elf == NULL || elf->kind != ELF_K_ELF ? ELFCLASSNONE : elf->class;
-}
diff --git a/libelf/gelf_getdyn.c b/libelf/gelf_getdyn.c
deleted file mode 100644
index 82f8e32..0000000
--- a/libelf/gelf_getdyn.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/* Get information from dynamic table at the given index.
- Copyright (C) 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <gelf.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-
-GElf_Dyn *
-gelf_getdyn (data, ndx, dst)
- Elf_Data *data;
- int ndx;
- GElf_Dyn *dst;
-{
- Elf_Data_Scn *data_scn = (Elf_Data_Scn *) data;
- GElf_Dyn *result = NULL;
- Elf *elf;
-
- if (data_scn == NULL)
- return NULL;
-
- if (unlikely (data_scn->d.d_type != ELF_T_DYN))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return NULL;
- }
-
- elf = data_scn->s->elf;
-
- rwlock_rdlock (elf->lock);
-
- /* This is the one place where we have to take advantage of the fact
- that an `Elf_Data' pointer is also a pointer to `Elf_Data_Scn'.
- The interface is broken so that it requires this hack. */
- if (elf->class == ELFCLASS32)
- {
- Elf32_Dyn *src;
-
- /* Here it gets a bit more complicated. The format of the symbol
- table entries has to be adopted. The user better has provided
- a buffer where we can store the information. While copying the
- data we are converting the format. */
- if (unlikely ((ndx + 1) * sizeof (Elf32_Dyn) > data_scn->d.d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- goto out;
- }
-
- src = &((Elf32_Dyn *) data_scn->d.d_buf)[ndx];
-
- /* This might look like a simple copy operation but it's
- not. There are zero- and sign-extensions going on. */
- dst->d_tag = src->d_tag;
- /* It OK to copy `d_val' since `d_ptr' has the same size. */
- dst->d_un.d_val = src->d_un.d_val;
- }
- else
- {
- /* If this is a 64 bit object it's easy. */
- assert (sizeof (GElf_Dyn) == sizeof (Elf64_Dyn));
-
- /* The data is already in the correct form. Just make sure the
- index is OK. */
- if (unlikely ((ndx + 1) * sizeof (GElf_Dyn) > data_scn->d.d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- goto out;
- }
-
- *dst = ((GElf_Dyn *) data_scn->d.d_buf)[ndx];
- }
-
- result = dst;
-
- out:
- rwlock_unlock (elf->lock);
-
- return result;
-}
diff --git a/libelf/gelf_getehdr.c b/libelf/gelf_getehdr.c
deleted file mode 100644
index 34b5db3..0000000
--- a/libelf/gelf_getehdr.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/* Get ELF header.
- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <gelf.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-
-GElf_Ehdr *
-__gelf_getehdr_rdlock (elf, dest)
- Elf *elf;
- GElf_Ehdr *dest;
-{
- GElf_Ehdr *result = NULL;
-
- if (elf == NULL)
- return NULL;
-
- if (unlikely (elf->kind != ELF_K_ELF))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return NULL;
- }
-
- /* The following is an optimization: the ehdr element is at the same
- position in both the elf32 and elf64 structure. */
- if (offsetof (struct Elf, state.elf32.ehdr)
- != offsetof (struct Elf, state.elf64.ehdr))
- abort ();
- /* Just pick one of the values. */
- if (unlikely (elf->state.elf64.ehdr == NULL))
- /* Maybe no ELF header was created yet. */
- __libelf_seterrno (ELF_E_WRONG_ORDER_EHDR);
- else if (elf->class == ELFCLASS32)
- {
- Elf32_Ehdr *ehdr = elf->state.elf32.ehdr;
-
- /* Convert the 32-bit struct to an 64-bit one. */
- memcpy (dest->e_ident, ehdr->e_ident, EI_NIDENT);
-#define COPY(name) \
- dest->name = ehdr->name
- COPY (e_type);
- COPY (e_machine);
- COPY (e_version);
- COPY (e_entry);
- COPY (e_phoff);
- COPY (e_shoff);
- COPY (e_flags);
- COPY (e_ehsize);
- COPY (e_phentsize);
- COPY (e_phnum);
- COPY (e_shentsize);
- COPY (e_shnum);
- COPY (e_shstrndx);
-
- result = dest;
- }
- else
- result = memcpy (dest, elf->state.elf64.ehdr, sizeof (*dest));
-
- return result;
-}
-
-GElf_Ehdr *
-gelf_getehdr (elf, dest)
- Elf *elf;
- GElf_Ehdr *dest;
-{
- GElf_Ehdr *result;
- if (elf == NULL)
- return NULL;
-
- rwlock_rdlock (elf->lock);
- result = __gelf_getehdr_rdlock (elf, dest);
- rwlock_unlock (elf->lock);
-
- return result;
-}
diff --git a/libelf/gelf_getlib.c b/libelf/gelf_getlib.c
deleted file mode 100644
index aa91a73..0000000
--- a/libelf/gelf_getlib.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/* Get library from table at the given index.
- Copyright (C) 2004 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <gelf.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-
-GElf_Lib *
-gelf_getlib (data, ndx, dst)
- Elf_Data *data;
- int ndx;
- GElf_Lib *dst;
-{
- if (data == NULL)
- return NULL;
-
- if (unlikely (data->d_type != ELF_T_LIB))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return NULL;
- }
-
- Elf_Data_Scn *data_scn = (Elf_Data_Scn *) data;
-
- rwlock_rdlock (data_scn->s->elf->lock);
-
- /* The on disk format of Elf32_Lib and Elf64_Lib is identical. So
- we can simplify things significantly. */
- assert (sizeof (GElf_Lib) == sizeof (Elf32_Lib));
- assert (sizeof (GElf_Lib) == sizeof (Elf64_Lib));
-
- /* The data is already in the correct form. Just make sure the
- index is OK. */
- GElf_Lib *result = NULL;
- if (unlikely ((ndx + 1) * sizeof (GElf_Lib) > data->d_size))
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- else
- {
- *dst = ((GElf_Lib *) data->d_buf)[ndx];
-
- result = dst;
- }
-
- rwlock_unlock (data_scn->s->elf->lock);
-
- return result;
-}
diff --git a/libelf/gelf_getmove.c b/libelf/gelf_getmove.c
deleted file mode 100644
index 6e76948..0000000
--- a/libelf/gelf_getmove.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/* Get move structure at the given index.
- Copyright (C) 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <gelf.h>
-#include <stddef.h>
-
-#include "libelfP.h"
-
-
-GElf_Move *
-gelf_getmove (data, ndx, dst)
- Elf_Data *data;
- int ndx;
- GElf_Move *dst;
-{
- GElf_Move *result = NULL;
- Elf *elf;
-
- if (data == NULL)
- return NULL;
-
- if (unlikely (data->d_type != ELF_T_MOVE))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return NULL;
- }
-
- /* The types for 32 and 64 bit are the same. Lucky us. */
- assert (sizeof (GElf_Move) == sizeof (Elf32_Move));
- assert (sizeof (GElf_Move) == sizeof (Elf64_Move));
-
- /* The data is already in the correct form. Just make sure the
- index is OK. */
- if (unlikely ((ndx + 1) * sizeof (GElf_Move) > data->d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- goto out;
- }
-
- elf = ((Elf_Data_Scn *) data)->s->elf;
- rwlock_rdlock (elf->lock);
-
- *dst = ((GElf_Move *) data->d_buf)[ndx];
-
- rwlock_unlock (elf->lock);
-
- result = dst;
-
- out:
- return result;
-}
diff --git a/libelf/gelf_getnote.c b/libelf/gelf_getnote.c
deleted file mode 100644
index e490018..0000000
--- a/libelf/gelf_getnote.c
+++ /dev/null
@@ -1,119 +0,0 @@
-/* Get note information at the supplied offset.
- Copyright (C) 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <gelf.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-size_t
-gelf_getnote (data, offset, result, name_offset, desc_offset)
- Elf_Data *data;
- size_t offset;
- GElf_Nhdr *result;
- size_t *name_offset;
- size_t *desc_offset;
-{
- if (data == NULL)
- return 0;
-
- if (unlikely (data->d_type != ELF_T_NHDR))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return 0;
- }
-
- /* It's easy to handle this type. It has the same size for 32 and
- 64 bit objects. */
- assert (sizeof (GElf_Nhdr) == sizeof (Elf32_Nhdr));
- assert (sizeof (GElf_Nhdr) == sizeof (Elf64_Nhdr));
-
- rwlock_rdlock (((Elf_Data_Scn *) data)->s->elf->lock);
-
- /* The data is already in the correct form. Just make sure the
- offset is OK. */
- if (unlikely (offset + sizeof (GElf_Nhdr) > data->d_size))
- {
- __libelf_seterrno (ELF_E_OFFSET_RANGE);
- offset = 0;
- }
- else
- {
- const GElf_Nhdr *n = data->d_buf + offset;
- offset += sizeof *n;
-
- GElf_Word namesz = NOTE_ALIGN (n->n_namesz);
- GElf_Word descsz = NOTE_ALIGN (n->n_descsz);
-
- if (unlikely (data->d_size - offset < namesz))
- offset = 0;
- else
- {
- *name_offset = offset;
- offset += namesz;
- if (unlikely (data->d_size - offset < descsz))
- offset = 0;
- else
- {
- *desc_offset = offset;
- offset += descsz;
- *result = *n;
- }
- }
- }
-
- rwlock_unlock (((Elf_Data_Scn *) data)->s->elf->lock);
-
- return offset;
-}
diff --git a/libelf/gelf_getphdr.c b/libelf/gelf_getphdr.c
deleted file mode 100644
index 66cd143..0000000
--- a/libelf/gelf_getphdr.c
+++ /dev/null
@@ -1,155 +0,0 @@
-/* Return program header table entry.
- Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <gelf.h>
-#include <string.h>
-#include <stdbool.h>
-
-#include "libelfP.h"
-
-
-GElf_Phdr *
-gelf_getphdr (elf, ndx, dst)
- Elf *elf;
- int ndx;
- GElf_Phdr *dst;
-{
- GElf_Phdr *result = NULL;
-
- if (elf == NULL)
- return NULL;
-
- if (unlikely (elf->kind != ELF_K_ELF))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return NULL;
- }
-
- if (dst == NULL)
- {
- __libelf_seterrno (ELF_E_INVALID_OPERAND);
- return NULL;
- }
-
- rwlock_rdlock (elf->lock);
-
- if (elf->class == ELFCLASS32)
- {
- /* Copy the elements one-by-one. */
- Elf32_Phdr *phdr = elf->state.elf32.phdr;
-
- if (phdr == NULL)
- {
- rwlock_unlock (elf->lock);
- phdr = INTUSE(elf32_getphdr) (elf);
- if (phdr == NULL)
- /* The error number is already set. */
- return NULL;
- rwlock_rdlock (elf->lock);
- }
-
- /* Test whether the index is ok. */
- if (ndx >= elf->state.elf32.ehdr->e_phnum)
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- goto out;
- }
-
- /* We know the result now. */
- result = dst;
-
- /* Now correct the pointer to point to the correct element. */
- phdr += ndx;
-
-#define COPY(Name) result->Name = phdr->Name
- COPY (p_type);
- COPY (p_offset);
- COPY (p_vaddr);
- COPY (p_paddr);
- COPY (p_filesz);
- COPY (p_memsz);
- COPY (p_flags);
- COPY (p_align);
- }
- else
- {
- /* Copy the elements one-by-one. */
- Elf64_Phdr *phdr = elf->state.elf64.phdr;
-
- if (phdr == NULL)
- {
- rwlock_unlock (elf->lock);
- phdr = INTUSE(elf64_getphdr) (elf);
- if (phdr == NULL)
- /* The error number is already set. */
- return NULL;
- rwlock_rdlock (elf->lock);
- }
-
- /* Test whether the index is ok. */
- if (ndx >= elf->state.elf64.ehdr->e_phnum)
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- goto out;
- }
-
- /* We only have to copy the data. */
- result = memcpy (dst, phdr + ndx, sizeof (GElf_Phdr));
- }
-
- out:
- rwlock_unlock (elf->lock);
-
- return result;
-}
diff --git a/libelf/gelf_getrel.c b/libelf/gelf_getrel.c
deleted file mode 100644
index f3775bd..0000000
--- a/libelf/gelf_getrel.c
+++ /dev/null
@@ -1,129 +0,0 @@
-/* Get REL relocation information at given index.
- Copyright (C) 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <gelf.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-
-GElf_Rel *
-gelf_getrel (data, ndx, dst)
- Elf_Data *data;
- int ndx;
- GElf_Rel *dst;
-{
- Elf_Data_Scn *data_scn = (Elf_Data_Scn *) data;
- Elf_Scn *scn;
- GElf_Rel *result;
-
- if (data_scn == NULL)
- return NULL;
-
- if (unlikely (ndx < 0))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- return NULL;
- }
-
- if (unlikely (data_scn->d.d_type != ELF_T_REL))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return NULL;
- }
-
- /* This is the one place where we have to take advantage of the fact
- that an `Elf_Data' pointer is also a pointer to `Elf_Data_Scn'.
- The interface is broken so that it requires this hack. */
- scn = data_scn->s;
-
- rwlock_rdlock (scn->elf->lock);
-
- if (scn->elf->class == ELFCLASS32)
- {
- /* We have to convert the data. */
- if (unlikely ((ndx + 1) * sizeof (Elf32_Rel) > data_scn->d.d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- result = NULL;
- }
- else
- {
- Elf32_Rel *src = &((Elf32_Rel *) data_scn->d.d_buf)[ndx];
-
- dst->r_offset = src->r_offset;
- dst->r_info = GELF_R_INFO (ELF32_R_SYM (src->r_info),
- ELF32_R_TYPE (src->r_info));
-
- result = dst;
- }
- }
- else
- {
- /* Simply copy the data after we made sure we are actually getting
- correct data. */
- if (unlikely ((ndx + 1) * sizeof (Elf64_Rel) > data_scn->d.d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- result = NULL;
- }
- else
- result = memcpy (dst, &((Elf64_Rel *) data_scn->d.d_buf)[ndx],
- sizeof (Elf64_Rel));
- }
-
- rwlock_unlock (scn->elf->lock);
-
- return result;
-}
diff --git a/libelf/gelf_getrela.c b/libelf/gelf_getrela.c
deleted file mode 100644
index 0275c37..0000000
--- a/libelf/gelf_getrela.c
+++ /dev/null
@@ -1,130 +0,0 @@
-/* Get RELA relocation information at given index.
- Copyright (C) 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <gelf.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-
-GElf_Rela *
-gelf_getrela (data, ndx, dst)
- Elf_Data *data;
- int ndx;
- GElf_Rela *dst;
-{
- Elf_Data_Scn *data_scn = (Elf_Data_Scn *) data;
- Elf_Scn *scn;
- GElf_Rela *result;
-
- if (data_scn == NULL)
- return NULL;
-
- if (unlikely (ndx < 0))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- return NULL;
- }
-
- if (unlikely (data_scn->d.d_type != ELF_T_RELA))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return NULL;
- }
-
- /* This is the one place where we have to take advantage of the fact
- that an `Elf_Data' pointer is also a pointer to `Elf_Data_Scn'.
- The interface is broken so that it requires this hack. */
- scn = data_scn->s;
-
- rwlock_rdlock (scn->elf->lock);
-
- if (scn->elf->class == ELFCLASS32)
- {
- /* We have to convert the data. */
- if (unlikely ((ndx + 1) * sizeof (Elf32_Rela) > data_scn->d.d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- result = NULL;
- }
- else
- {
- Elf32_Rela *src = &((Elf32_Rela *) data_scn->d.d_buf)[ndx];
-
- dst->r_offset = src->r_offset;
- dst->r_info = GELF_R_INFO (ELF32_R_SYM (src->r_info),
- ELF32_R_TYPE (src->r_info));
- dst->r_addend = src->r_addend;
-
- result = dst;
- }
- }
- else
- {
- /* Simply copy the data after we made sure we are actually getting
- correct data. */
- if (unlikely ((ndx + 1) * sizeof (Elf64_Rela) > data_scn->d.d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- result = NULL;
- }
- else
- result = memcpy (dst, &((Elf64_Rela *) data_scn->d.d_buf)[ndx],
- sizeof (Elf64_Rela));
- }
-
- rwlock_unlock (scn->elf->lock);
-
- return result;
-}
diff --git a/libelf/gelf_getshdr.c b/libelf/gelf_getshdr.c
deleted file mode 100644
index 8b46dfa..0000000
--- a/libelf/gelf_getshdr.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/* Return section header.
- Copyright (C) 1998, 1999, 2000, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <gelf.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-
-GElf_Shdr *
-gelf_getshdr (scn, dst)
- Elf_Scn *scn;
- GElf_Shdr *dst;
-{
- GElf_Shdr *result = NULL;
-
- if (scn == NULL)
- return NULL;
-
- if (dst == NULL)
- {
- __libelf_seterrno (ELF_E_INVALID_OPERAND);
- return NULL;
- }
-
- rwlock_rdlock (scn->elf->lock);
-
- if (scn->elf->class == ELFCLASS32)
- {
- /* Copy the elements one-by-one. */
- Elf32_Shdr *shdr
- = scn->shdr.e32 ?: __elf32_getshdr_rdlock (scn);
-
- if (shdr == NULL)
- {
- __libelf_seterrno (ELF_E_INVALID_OPERAND);
- goto out;
- }
-
-#define COPY(name) \
- dst->name = shdr->name
- COPY (sh_name);
- COPY (sh_type);
- COPY (sh_flags);
- COPY (sh_addr);
- COPY (sh_offset);
- COPY (sh_size);
- COPY (sh_link);
- COPY (sh_info);
- COPY (sh_addralign);
- COPY (sh_entsize);
-
- result = dst;
- }
- else
- {
- Elf64_Shdr *shdr
- = scn->shdr.e64 ?: __elf64_getshdr_rdlock (scn);
-
- if (shdr == NULL)
- {
- __libelf_seterrno (ELF_E_INVALID_OPERAND);
- goto out;
- }
-
- /* We only have to copy the data. */
- result = memcpy (dst, shdr, sizeof (GElf_Shdr));
- }
-
- out:
- rwlock_unlock (scn->elf->lock);
-
- return result;
-}
-INTDEF(gelf_getshdr)
diff --git a/libelf/gelf_getsym.c b/libelf/gelf_getsym.c
deleted file mode 100644
index 162061f..0000000
--- a/libelf/gelf_getsym.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/* Get symbol information from symbol table at the given index.
- Copyright (C) 1999, 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1999.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <gelf.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-
-GElf_Sym *
-gelf_getsym (data, ndx, dst)
- Elf_Data *data;
- int ndx;
- GElf_Sym *dst;
-{
- Elf_Data_Scn *data_scn = (Elf_Data_Scn *) data;
- GElf_Sym *result = NULL;
-
- if (data == NULL)
- return NULL;
-
- if (unlikely (data->d_type != ELF_T_SYM))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return NULL;
- }
-
- rwlock_rdlock (data_scn->s->elf->lock);
-
- /* This is the one place where we have to take advantage of the fact
- that an `Elf_Data' pointer is also a pointer to `Elf_Data_Scn'.
- The interface is broken so that it requires this hack. */
- if (data_scn->s->elf->class == ELFCLASS32)
- {
- Elf32_Sym *src;
-
- /* Here it gets a bit more complicated. The format of the symbol
- table entries has to be adopted. The user better has provided
- a buffer where we can store the information. While copying the
- data we are converting the format. */
- if (unlikely ((ndx + 1) * sizeof (Elf32_Sym) > data->d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- goto out;
- }
-
- src = &((Elf32_Sym *) data->d_buf)[ndx];
-
- /* This might look like a simple copy operation but it's
- not. There are zero- and sign-extensions going on. */
-#define COPY(name) \
- dst->name = src->name
- COPY (st_name);
- /* Please note that we can simply copy the `st_info' element since
- the definitions of ELFxx_ST_BIND and ELFxx_ST_TYPE are the same
- for the 64 bit variant. */
- COPY (st_info);
- COPY (st_other);
- COPY (st_shndx);
- COPY (st_value);
- COPY (st_size);
- }
- else
- {
- /* If this is a 64 bit object it's easy. */
- assert (sizeof (GElf_Sym) == sizeof (Elf64_Sym));
-
- /* The data is already in the correct form. Just make sure the
- index is OK. */
- if (unlikely ((ndx + 1) * sizeof (GElf_Sym) > data->d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- goto out;
- }
-
- *dst = ((GElf_Sym *) data->d_buf)[ndx];
- }
-
- result = dst;
-
- out:
- rwlock_unlock (data_scn->s->elf->lock);
-
- return result;
-}
-INTDEF(gelf_getsym)
diff --git a/libelf/gelf_getsyminfo.c b/libelf/gelf_getsyminfo.c
deleted file mode 100644
index 2c07526..0000000
--- a/libelf/gelf_getsyminfo.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/* Get additional symbol information from symbol table at the given index.
- Copyright (C) 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <gelf.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-
-GElf_Syminfo *
-gelf_getsyminfo (data, ndx, dst)
- Elf_Data *data;
- int ndx;
- GElf_Syminfo *dst;
-{
- GElf_Syminfo *result = NULL;
-
- if (data == NULL)
- return NULL;
-
- if (unlikely (data->d_type != ELF_T_SYMINFO))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return NULL;
- }
-
- /* The types for 32 and 64 bit are the same. Lucky us. */
- assert (sizeof (GElf_Syminfo) == sizeof (Elf32_Syminfo));
- assert (sizeof (GElf_Syminfo) == sizeof (Elf64_Syminfo));
-
- rwlock_rdlock (((Elf_Data_Scn *) data)->s->elf->lock);
-
- /* The data is already in the correct form. Just make sure the
- index is OK. */
- if (unlikely ((ndx + 1) * sizeof (GElf_Syminfo) > data->d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- goto out;
- }
-
- *dst = ((GElf_Syminfo *) data->d_buf)[ndx];
-
- result = dst;
-
- out:
- rwlock_unlock (((Elf_Data_Scn *) data)->s->elf->lock);
-
- return result;
-}
diff --git a/libelf/gelf_getsymshndx.c b/libelf/gelf_getsymshndx.c
deleted file mode 100644
index a9cfc18..0000000
--- a/libelf/gelf_getsymshndx.c
+++ /dev/null
@@ -1,161 +0,0 @@
-/* Get symbol information and separate section index from symbol table
- at the given index.
- Copyright (C) 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <gelf.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-
-GElf_Sym *
-gelf_getsymshndx (symdata, shndxdata, ndx, dst, dstshndx)
- Elf_Data *symdata;
- Elf_Data *shndxdata;
- int ndx;
- GElf_Sym *dst;
- Elf32_Word *dstshndx;
-{
- Elf_Data_Scn *symdata_scn = (Elf_Data_Scn *) symdata;
- Elf_Data_Scn *shndxdata_scn = (Elf_Data_Scn *) shndxdata;
- GElf_Sym *result = NULL;
- Elf32_Word shndx = 0;
-
- if (symdata == NULL)
- return NULL;
-
- if (unlikely (symdata->d_type != ELF_T_SYM)
- || (likely (shndxdata_scn != NULL)
- && unlikely (shndxdata->d_type != ELF_T_WORD)))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return NULL;
- }
-
- rwlock_rdlock (symdata_scn->s->elf->lock);
-
- /* The user is not required to pass a data descriptor for an extended
- section index table. */
- if (likely (shndxdata_scn != NULL))
- {
- if (unlikely ((ndx + 1) * sizeof (Elf32_Word) > shndxdata_scn->d.d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- goto out;
- }
-
- shndx = ((Elf32_Word *) shndxdata_scn->d.d_buf)[ndx];
- }
-
- /* This is the one place where we have to take advantage of the fact
- that an `Elf_Data' pointer is also a pointer to `Elf_Data_Scn'.
- The interface is broken so that it requires this hack. */
- if (symdata_scn->s->elf->class == ELFCLASS32)
- {
- Elf32_Sym *src;
-
- /* Here it gets a bit more complicated. The format of the symbol
- table entries has to be adopted. The user better has provided
- a buffer where we can store the information. While copying the
- data we are converting the format. */
- if (unlikely ((ndx + 1) * sizeof (Elf32_Sym) > symdata->d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- goto out;
- }
-
- src = &((Elf32_Sym *) symdata->d_buf)[ndx];
-
- /* This might look like a simple copy operation but it's
- not. There are zero- and sign-extensions going on. */
-#define COPY(name) \
- dst->name = src->name
- COPY (st_name);
- /* Please note that we can simply copy the `st_info' element since
- the definitions of ELFxx_ST_BIND and ELFxx_ST_TYPE are the same
- for the 64 bit variant. */
- COPY (st_info);
- COPY (st_other);
- COPY (st_shndx);
- COPY (st_value);
- COPY (st_size);
- }
- else
- {
- /* If this is a 64 bit object it's easy. */
- assert (sizeof (GElf_Sym) == sizeof (Elf64_Sym));
-
- /* The data is already in the correct form. Just make sure the
- index is OK. */
- if (unlikely ((ndx + 1) * sizeof (GElf_Sym) > symdata->d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- goto out;
- }
-
- *dst = ((GElf_Sym *) symdata->d_buf)[ndx];
- }
-
- /* Now we can store the section index. */
- if (dstshndx != NULL)
- *dstshndx = shndx;
-
- result = dst;
-
- out:
- rwlock_unlock (symdata_scn->s->elf->lock);
-
- return result;
-}
diff --git a/libelf/gelf_getverdaux.c b/libelf/gelf_getverdaux.c
deleted file mode 100644
index b8bcf14..0000000
--- a/libelf/gelf_getverdaux.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/* Get additional symbol version definition information at the given offset.
- Copyright (C) 1999, 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1999.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <gelf.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-
-GElf_Verdaux *
-gelf_getverdaux (data, offset, dst)
- Elf_Data *data;
- int offset;
- GElf_Verdaux *dst;
-{
- GElf_Verdaux *result;
-
- if (data == NULL)
- return NULL;
-
- if (unlikely (data->d_type != ELF_T_VDEF))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return NULL;
- }
-
- /* It's easy to handle this type. It has the same size for 32 and
- 64 bit objects. */
- assert (sizeof (GElf_Verdaux) == sizeof (Elf32_Verdaux));
- assert (sizeof (GElf_Verdaux) == sizeof (Elf64_Verdaux));
-
- rwlock_rdlock (((Elf_Data_Scn *) data)->s->elf->lock);
-
- /* The data is already in the correct form. Just make sure the
- index is OK. */
- if (unlikely (offset < 0)
- || unlikely (offset + sizeof (GElf_Verdaux) > data->d_size)
- || unlikely (offset % __alignof__ (GElf_Verdaux) != 0))
- {
- __libelf_seterrno (ELF_E_OFFSET_RANGE);
- result = NULL;
- }
- else
- result = (GElf_Verdaux *) memcpy (dst, (char *) data->d_buf + offset,
- sizeof (GElf_Verdaux));
-
-
- rwlock_unlock (((Elf_Data_Scn *) data)->s->elf->lock);
-
- return result;
-}
diff --git a/libelf/gelf_getverdef.c b/libelf/gelf_getverdef.c
deleted file mode 100644
index 05cc2e8..0000000
--- a/libelf/gelf_getverdef.c
+++ /dev/null
@@ -1,102 +0,0 @@
-/* Get symbol version definition information at the given offset.
- Copyright (C) 1999, 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1999.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <gelf.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-
-GElf_Verdef *
-gelf_getverdef (data, offset, dst)
- Elf_Data *data;
- int offset;
- GElf_Verdef *dst;
-{
- GElf_Verdef *result;
-
- if (data == NULL)
- return NULL;
-
- if (unlikely (data->d_type != ELF_T_VDEF))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return NULL;
- }
-
- /* It's easy to handle this type. It has the same size for 32 and
- 64 bit objects. */
- assert (sizeof (GElf_Verdef) == sizeof (Elf32_Verdef));
- assert (sizeof (GElf_Verdef) == sizeof (Elf64_Verdef));
-
- rwlock_rdlock (((Elf_Data_Scn *) data)->s->elf->lock);
-
- /* The data is already in the correct form. Just make sure the
- index is OK. */
- if (unlikely (offset < 0)
- || unlikely (offset + sizeof (GElf_Verdef) > data->d_size)
- || unlikely (offset % __alignof__ (GElf_Verdef) != 0))
- {
- __libelf_seterrno (ELF_E_OFFSET_RANGE);
- result = NULL;
- }
- else
- result = (GElf_Verdef *) memcpy (dst, (char *) data->d_buf + offset,
- sizeof (GElf_Verdef));
-
- rwlock_unlock (((Elf_Data_Scn *) data)->s->elf->lock);
-
- return result;
-}
diff --git a/libelf/gelf_getvernaux.c b/libelf/gelf_getvernaux.c
deleted file mode 100644
index 45d3300..0000000
--- a/libelf/gelf_getvernaux.c
+++ /dev/null
@@ -1,105 +0,0 @@
-/* Get additional required symbol version information at the given offset.
- Copyright (C) 1999, 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1999.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <gelf.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-
-GElf_Vernaux *
-gelf_getvernaux (data, offset, dst)
- Elf_Data *data;
- int offset;
- GElf_Vernaux *dst;
-{
- GElf_Vernaux *result;
-
- if (data == NULL)
- return NULL;
-
- if (unlikely (data->d_type != ELF_T_VNEED))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return NULL;
- }
-
- /* It's easy to handle this type. It has the same size for 32 and
- 64 bit objects. And fortunately the `ElfXXX_Vernaux' records
- also have the same size. */
- assert (sizeof (GElf_Vernaux) == sizeof (Elf32_Verneed));
- assert (sizeof (GElf_Vernaux) == sizeof (Elf64_Verneed));
- assert (sizeof (GElf_Vernaux) == sizeof (Elf32_Vernaux));
- assert (sizeof (GElf_Vernaux) == sizeof (Elf64_Vernaux));
-
- rwlock_rdlock (((Elf_Data_Scn *) data)->s->elf->lock);
-
- /* The data is already in the correct form. Just make sure the
- index is OK. */
- if (unlikely (offset < 0)
- || unlikely (offset + sizeof (GElf_Vernaux) > data->d_size)
- || unlikely (offset % sizeof (GElf_Vernaux) != 0))
- {
- __libelf_seterrno (ELF_E_OFFSET_RANGE);
- result = NULL;
- }
- else
- result = (GElf_Vernaux *) memcpy (dst, (char *) data->d_buf + offset,
- sizeof (GElf_Verneed));
-
- rwlock_unlock (((Elf_Data_Scn *) data)->s->elf->lock);
-
- return result;
-}
diff --git a/libelf/gelf_getverneed.c b/libelf/gelf_getverneed.c
deleted file mode 100644
index e82a055..0000000
--- a/libelf/gelf_getverneed.c
+++ /dev/null
@@ -1,105 +0,0 @@
-/* Get required symbol version information at the given offset.
- Copyright (C) 1999, 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1999.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <gelf.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-
-GElf_Verneed *
-gelf_getverneed (data, offset, dst)
- Elf_Data *data;
- int offset;
- GElf_Verneed *dst;
-{
- GElf_Verneed *result;
-
- if (data == NULL)
- return NULL;
-
- if (unlikely (data->d_type != ELF_T_VNEED))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return NULL;
- }
-
- /* It's easy to handle this type. It has the same size for 32 and
- 64 bit objects. And fortunately the `ElfXXX_Vernaux' records
- also have the same size. */
- assert (sizeof (GElf_Verneed) == sizeof (Elf32_Verneed));
- assert (sizeof (GElf_Verneed) == sizeof (Elf64_Verneed));
- assert (sizeof (GElf_Verneed) == sizeof (Elf32_Vernaux));
- assert (sizeof (GElf_Verneed) == sizeof (Elf64_Vernaux));
-
- rwlock_rdlock (((Elf_Data_Scn *) data)->s->elf->lock);
-
- /* The data is already in the correct form. Just make sure the
- index is OK. */
- if (unlikely (offset < 0)
- || unlikely (offset + sizeof (GElf_Verneed) > data->d_size)
- || unlikely (offset % sizeof (GElf_Verneed) != 0))
- {
- __libelf_seterrno (ELF_E_OFFSET_RANGE);
- result = NULL;
- }
- else
- result = (GElf_Verneed *) memcpy (dst, (char *) data->d_buf + offset,
- sizeof (GElf_Verneed));
-
- rwlock_unlock (((Elf_Data_Scn *) data)->s->elf->lock);
-
- return result;
-}
diff --git a/libelf/gelf_getversym.c b/libelf/gelf_getversym.c
deleted file mode 100644
index 397b7ed..0000000
--- a/libelf/gelf_getversym.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/* Get symbol version information at the given index.
- Copyright (C) 1999, 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1999.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <gelf.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-
-GElf_Versym *
-gelf_getversym (data, ndx, dst)
- Elf_Data *data;
- int ndx;
- GElf_Versym *dst;
-{
- Elf_Data_Scn *data_scn = (Elf_Data_Scn *) data;
- Elf_Scn *scn;
- GElf_Versym *result;
-
- if (data == NULL)
- return NULL;
-
- if (unlikely (data->d_type != ELF_T_HALF))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return NULL;
- }
-
- /* This is the one place where we have to take advantage of the fact
- that an `Elf_Data' pointer is also a pointer to `Elf_Data_Scn'.
- The interface is broken so that it requires this hack. */
- scn = data_scn->s;
-
- /* It's easy to handle this type. It has the same size for 32 and
- 64 bit objects. */
- assert (sizeof (GElf_Versym) == sizeof (Elf32_Versym));
- assert (sizeof (GElf_Versym) == sizeof (Elf64_Versym));
-
- rwlock_rdlock (scn->elf->lock);
-
- /* The data is already in the correct form. Just make sure the
- index is OK. */
- if (unlikely ((ndx + 1) * sizeof (GElf_Versym) > data->d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- result = NULL;
- }
- else
- {
- *dst = ((GElf_Versym *) data->d_buf)[ndx];
-
- result = dst;
- }
-
- rwlock_unlock (scn->elf->lock);
-
- return result;
-}
diff --git a/libelf/gelf_newehdr.c b/libelf/gelf_newehdr.c
deleted file mode 100644
index 2f720b8..0000000
--- a/libelf/gelf_newehdr.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Create new ELF header.
- Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <gelf.h>
-#include <stdlib.h>
-
-#include "libelfP.h"
-
-
-unsigned long int
-gelf_newehdr (elf, class)
- Elf *elf;
- int class;
-{
- return (class == ELFCLASS32
- ? (unsigned long int) INTUSE(elf32_newehdr) (elf)
- : (unsigned long int) INTUSE(elf64_newehdr) (elf));
-}
diff --git a/libelf/gelf_newphdr.c b/libelf/gelf_newphdr.c
deleted file mode 100644
index 6530692..0000000
--- a/libelf/gelf_newphdr.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Create new ELF program header.
- Copyright (C) 1998, 1999, 2000, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <gelf.h>
-#include <stdlib.h>
-
-#include "libelfP.h"
-
-
-unsigned long int
-gelf_newphdr (elf, phnum)
- Elf *elf;
- size_t phnum;
-{
- return (elf->class == ELFCLASS32
- ? (unsigned long int) INTUSE(elf32_newphdr) (elf, phnum)
- : (unsigned long int) INTUSE(elf64_newphdr) (elf, phnum));
-}
diff --git a/libelf/gelf_offscn.c b/libelf/gelf_offscn.c
deleted file mode 100644
index 573195c..0000000
--- a/libelf/gelf_offscn.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/* Create new ELF header.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <gelf.h>
-#include <stdlib.h>
-
-#include "libelfP.h"
-
-
-Elf_Scn *
-gelf_offscn (elf, offset)
- Elf *elf;
- GElf_Off offset;
-{
- if (elf->class == ELFCLASS32)
- {
- if ((Elf32_Off) offset != offset)
- {
- __libelf_seterrno (ELF_E_INVALID_OFFSET);
- return NULL;
- }
-
- return INTUSE(elf32_offscn) (elf, (Elf32_Off) offset);
- }
-
- return INTUSE(elf64_offscn) (elf, offset);
-}
diff --git a/libelf/gelf_update_auxv.c b/libelf/gelf_update_auxv.c
deleted file mode 100644
index b294ead..0000000
--- a/libelf/gelf_update_auxv.c
+++ /dev/null
@@ -1,135 +0,0 @@
-/* Update information in dynamic table at the given index.
- Copyright (C) 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <gelf.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-
-int
-gelf_update_auxv (data, ndx, src)
- Elf_Data *data;
- int ndx;
- GElf_auxv_t *src;
-{
- Elf_Data_Scn *data_scn = (Elf_Data_Scn *) data;
- Elf_Scn *scn;
- int result = 0;
-
- if (data == NULL)
- return 0;
-
- if (unlikely (ndx < 0))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- return 0;
- }
-
- if (unlikely (data_scn->d.d_type != ELF_T_AUXV))
- {
- /* The type of the data better should match. */
- __libelf_seterrno (ELF_E_DATA_MISMATCH);
- return 0;
- }
-
- scn = data_scn->s;
- rwlock_wrlock (scn->elf->lock);
-
- if (scn->elf->class == ELFCLASS32)
- {
- Elf32_auxv_t *auxv;
-
- /* There is the possibility that the values in the input are
- too large. */
- if (unlikely (src->a_type > 0xffffffffll)
- || unlikely (src->a_un.a_val > 0xffffffffull))
- {
- __libelf_seterrno (ELF_E_INVALID_DATA);
- goto out;
- }
-
- /* Check whether we have to resize the data buffer. */
- if (unlikely ((ndx + 1) * sizeof (Elf32_auxv_t) > data_scn->d.d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- goto out;
- }
-
- auxv = &((Elf32_auxv_t *) data_scn->d.d_buf)[ndx];
-
- auxv->a_type = src->a_type;
- auxv->a_un.a_val = src->a_un.a_val;
- }
- else
- {
- /* Check whether we have to resize the data buffer. */
- if (unlikely ((ndx + 1) * sizeof (Elf64_auxv_t) > data_scn->d.d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- goto out;
- }
-
- ((Elf64_auxv_t *) data_scn->d.d_buf)[ndx] = *src;
- }
-
- result = 1;
-
- /* Mark the section as modified. */
- scn->flags |= ELF_F_DIRTY;
-
- out:
- rwlock_unlock (scn->elf->lock);
-
- return result;
-}
diff --git a/libelf/gelf_update_dyn.c b/libelf/gelf_update_dyn.c
deleted file mode 100644
index 10bfb6a..0000000
--- a/libelf/gelf_update_dyn.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/* Update information in dynamic table at the given index.
- Copyright (C) 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <gelf.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-
-int
-gelf_update_dyn (data, ndx, src)
- Elf_Data *data;
- int ndx;
- GElf_Dyn *src;
-{
- Elf_Data_Scn *data_scn = (Elf_Data_Scn *) data;
- Elf_Scn *scn;
- int result = 0;
-
- if (data == NULL)
- return 0;
-
- if (unlikely (ndx < 0))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- return 0;
- }
-
- if (unlikely (data_scn->d.d_type != ELF_T_DYN))
- {
- /* The type of the data better should match. */
- __libelf_seterrno (ELF_E_DATA_MISMATCH);
- return 0;
- }
-
- scn = data_scn->s;
- rwlock_wrlock (scn->elf->lock);
-
- if (scn->elf->class == ELFCLASS32)
- {
- Elf32_Dyn *dyn;
-
- /* There is the possibility that the values in the input are
- too large. */
- if (unlikely (src->d_tag < -0x80000000ll)
- || unlikely (src->d_tag > 0x7fffffffll)
- || unlikely (src->d_un.d_val > 0xffffffffull))
- {
- __libelf_seterrno (ELF_E_INVALID_DATA);
- goto out;
- }
-
- /* Check whether we have to resize the data buffer. */
- if (unlikely ((ndx + 1) * sizeof (Elf32_Dyn) > data_scn->d.d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- goto out;
- }
-
- dyn = &((Elf32_Dyn *) data_scn->d.d_buf)[ndx];
-
- dyn->d_tag = src->d_tag;
- dyn->d_un.d_val = src->d_un.d_val;
- }
- else
- {
- /* Check whether we have to resize the data buffer. */
- if (unlikely ((ndx + 1) * sizeof (Elf64_Dyn) > data_scn->d.d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- goto out;
- }
-
- ((Elf64_Dyn *) data_scn->d.d_buf)[ndx] = *src;
- }
-
- result = 1;
-
- /* Mark the section as modified. */
- scn->flags |= ELF_F_DIRTY;
-
- out:
- rwlock_unlock (scn->elf->lock);
-
- return result;
-}
diff --git a/libelf/gelf_update_ehdr.c b/libelf/gelf_update_ehdr.c
deleted file mode 100644
index 4d5c2b6..0000000
--- a/libelf/gelf_update_ehdr.c
+++ /dev/null
@@ -1,136 +0,0 @@
-/* Update ELF header.
- Copyright (C) 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <gelf.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-
-int
-gelf_update_ehdr (Elf *elf, GElf_Ehdr *src)
-{
- int result = 0;
-
- if (elf == NULL)
- return 0;
-
- if (unlikely (elf->kind != ELF_K_ELF))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return 0;
- }
-
- rwlock_wrlock (elf->lock);
-
- if (elf->class == ELFCLASS32)
- {
- Elf32_Ehdr *ehdr = elf->state.elf32.ehdr;
-
- if (ehdr == NULL)
- {
- __libelf_seterrno (ELF_E_WRONG_ORDER_EHDR);
- goto out;
- }
-
- /* We have to convert the data to the 32 bit format. This might
- overflow some fields so we have to test for this case before
- copying. */
- if (unlikely (src->e_entry > 0xffffffffull)
- || unlikely (src->e_phoff > 0xffffffffull)
- || unlikely (src->e_shoff > 0xffffffffull))
- {
- __libelf_seterrno (ELF_E_INVALID_DATA);
- goto out;
- }
-
- /* Copy the data. */
- memcpy (ehdr->e_ident, src->e_ident, EI_NIDENT);
-#define COPY(name) \
- ehdr->name = src->name
- COPY (e_type);
- COPY (e_machine);
- COPY (e_version);
- COPY (e_entry);
- COPY (e_phoff);
- COPY (e_shoff);
- COPY (e_flags);
- COPY (e_ehsize);
- COPY (e_phentsize);
- COPY (e_phnum);
- COPY (e_shentsize);
- COPY (e_shnum);
- COPY (e_shstrndx);
- }
- else
- {
- Elf64_Ehdr *ehdr = elf->state.elf64.ehdr;
-
- if (ehdr == NULL)
- {
- __libelf_seterrno (ELF_E_WRONG_ORDER_EHDR);
- goto out;
- }
-
- /* Just copy the data. */
- memcpy (ehdr, src, sizeof (Elf64_Ehdr));
- }
-
- result = 1;
-
- out:
- rwlock_unlock (elf->lock);
-
- return result;
-}
diff --git a/libelf/gelf_update_lib.c b/libelf/gelf_update_lib.c
deleted file mode 100644
index 9571016..0000000
--- a/libelf/gelf_update_lib.c
+++ /dev/null
@@ -1,105 +0,0 @@
-/* Update library in table at the given index.
- Copyright (C) 2004 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <gelf.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-
-int
-gelf_update_lib (data, ndx, src)
- Elf_Data *data;
- int ndx;
- GElf_Lib *src;
-{
- if (data == NULL)
- return 0;
-
- if (unlikely (ndx < 0))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- return 0;
- }
-
- Elf_Data_Scn *data_scn = (Elf_Data_Scn *) data;
- if (unlikely (data_scn->d.d_type != ELF_T_LIB))
- {
- /* The type of the data better should match. */
- __libelf_seterrno (ELF_E_DATA_MISMATCH);
- return 0;
- }
-
- Elf_Scn *scn = data_scn->s;
- rwlock_wrlock (scn->elf->lock);
-
- /* Check whether we have to resize the data buffer. */
- int result = 0;
- if (unlikely ((ndx + 1) * sizeof (Elf64_Lib) > data_scn->d.d_size))
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- else
- {
- ((Elf64_Lib *) data_scn->d.d_buf)[ndx] = *src;
-
- result = 1;
-
- /* Mark the section as modified. */
- scn->flags |= ELF_F_DIRTY;
- }
-
- rwlock_unlock (scn->elf->lock);
-
- return result;
-}
diff --git a/libelf/gelf_update_move.c b/libelf/gelf_update_move.c
deleted file mode 100644
index fd67be1..0000000
--- a/libelf/gelf_update_move.c
+++ /dev/null
@@ -1,102 +0,0 @@
-/* Update move structure at the given index.
- Copyright (C) 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <gelf.h>
-#include <stdlib.h>
-
-#include "libelfP.h"
-
-
-int
-gelf_update_move (data, ndx, src)
- Elf_Data *data;
- int ndx;
- GElf_Move *src;
-{
- Elf_Data_Scn *data_scn = (Elf_Data_Scn *) data;
-
- if (data == NULL)
- return 0;
-
- /* The types for 32 and 64 bit are the same. Lucky us. */
- assert (sizeof (GElf_Move) == sizeof (Elf32_Move));
- assert (sizeof (GElf_Move) == sizeof (Elf64_Move));
-
- /* Check whether we have to resize the data buffer. */
- if (unlikely (ndx < 0)
- || unlikely ((ndx + 1) * sizeof (GElf_Move) > data_scn->d.d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- return 0;
- }
-
- if (unlikely (data_scn->d.d_type != ELF_T_MOVE))
- {
- /* The type of the data better should match. */
- __libelf_seterrno (ELF_E_DATA_MISMATCH);
- return 0;
- }
-
- rwlock_wrlock (data_scn->s->elf->lock);
-
- ((GElf_Move *) data_scn->d.d_buf)[ndx] = *src;
-
- /* Mark the section as modified. */
- data_scn->s->flags |= ELF_F_DIRTY;
-
- rwlock_unlock (data_scn->s->elf->lock);
-
- return 1;
-}
diff --git a/libelf/gelf_update_phdr.c b/libelf/gelf_update_phdr.c
deleted file mode 100644
index e8b7f78..0000000
--- a/libelf/gelf_update_phdr.c
+++ /dev/null
@@ -1,153 +0,0 @@
-/* Update program header program header table entry.
- Copyright (C) 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <gelf.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-
-int
-gelf_update_phdr (Elf *elf, int ndx, GElf_Phdr *src)
-{
- int result = 0;
-
- if (elf == NULL)
- return 0;
-
- if (unlikely (elf->kind != ELF_K_ELF))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return 0;
- }
-
- rwlock_wrlock (elf->lock);
-
- if (elf->class == ELFCLASS32)
- {
- Elf32_Phdr *phdr = elf->state.elf32.phdr;
-
- /* We have to convert the data to the 32 bit format. This might
- overflow some fields so we have to test for this case before
- copying. */
- if (unlikely (src->p_offset > 0xffffffffull)
- || unlikely (src->p_vaddr > 0xffffffffull)
- || unlikely (src->p_paddr > 0xffffffffull)
- || unlikely (src->p_filesz > 0xffffffffull)
- || unlikely (src->p_memsz > 0xffffffffull)
- || unlikely (src->p_align > 0xffffffffull))
- {
- __libelf_seterrno (ELF_E_INVALID_DATA);
- goto out;
- }
-
- if (phdr == NULL)
- {
- phdr = __elf32_getphdr_wrlock (elf);
- if (phdr == NULL)
- /* The error number is already set. */
- goto out;
- }
-
- /* Test whether the index is ok. */
- if (unlikely (ndx >= elf->state.elf32.ehdr->e_phnum))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- goto out;
- }
-
- /* Now correct the pointer to point to the correct element. */
- phdr += ndx;
-
-#define COPY(name) \
- phdr->name = src->name
- COPY (p_type);
- COPY (p_offset);
- COPY (p_vaddr);
- COPY (p_paddr);
- COPY (p_filesz);
- COPY (p_memsz);
- COPY (p_flags);
- COPY (p_align);
- }
- else
- {
- Elf64_Phdr *phdr = elf->state.elf64.phdr;
-
- if (phdr == NULL)
- {
- phdr = __elf64_getphdr_wrlock (elf);
- if (phdr == NULL)
- /* The error number is already set. */
- goto out;
- }
-
- /* Test whether the index is ok. */
- if (unlikely (ndx >= elf->state.elf64.ehdr->e_phnum))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- goto out;
- }
-
- /* Just copy the data. */
- memcpy (phdr + ndx, src, sizeof (Elf64_Phdr));
- }
-
- result = 1;
-
- out:
- rwlock_unlock (elf->lock);
-
- return result;
-}
diff --git a/libelf/gelf_update_rel.c b/libelf/gelf_update_rel.c
deleted file mode 100644
index 049b71a..0000000
--- a/libelf/gelf_update_rel.c
+++ /dev/null
@@ -1,135 +0,0 @@
-/* Update REL relocation information at given index.
- Copyright (C) 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <gelf.h>
-#include <stdlib.h>
-
-#include "libelfP.h"
-
-
-int
-gelf_update_rel (Elf_Data *dst, int ndx, GElf_Rel *src)
-{
- Elf_Data_Scn *data_scn = (Elf_Data_Scn *) dst;
- Elf_Scn *scn;
- int result = 0;
-
- if (dst == NULL)
- return 0;
-
- if (unlikely (ndx < 0))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- return 0;
- }
-
- if (unlikely (data_scn->d.d_type != ELF_T_REL))
- {
- /* The type of the data better should match. */
- __libelf_seterrno (ELF_E_DATA_MISMATCH);
- return 0;
- }
-
- scn = data_scn->s;
- rwlock_wrlock (scn->elf->lock);
-
- if (scn->elf->class == ELFCLASS32)
- {
- Elf32_Rel *rel;
-
- /* There is the possibility that the values in the input are
- too large. */
- if (unlikely (src->r_offset > 0xffffffffull)
- || unlikely (GELF_R_SYM (src->r_info) > 0xffffff)
- || unlikely (GELF_R_TYPE (src->r_info) > 0xff))
- {
- __libelf_seterrno (ELF_E_INVALID_DATA);
- goto out;
- }
-
- /* Check whether we have to resize the data buffer. */
- if (unlikely ((ndx + 1) * sizeof (Elf32_Rel) > data_scn->d.d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- goto out;
- }
-
- rel = &((Elf32_Rel *) data_scn->d.d_buf)[ndx];
-
- rel->r_offset = src->r_offset;
- rel->r_info = ELF32_R_INFO (GELF_R_SYM (src->r_info),
- GELF_R_TYPE (src->r_info));
- }
- else
- {
- /* Check whether we have to resize the data buffer. */
- if (unlikely ((ndx + 1) * sizeof (Elf64_Rel) > data_scn->d.d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- goto out;
- }
-
- ((Elf64_Rel *) data_scn->d.d_buf)[ndx] = *src;
- }
-
- result = 1;
-
- /* Mark the section as modified. */
- scn->flags |= ELF_F_DIRTY;
-
- out:
- rwlock_unlock (scn->elf->lock);
-
- return result;
-}
diff --git a/libelf/gelf_update_rela.c b/libelf/gelf_update_rela.c
deleted file mode 100644
index dc99c68..0000000
--- a/libelf/gelf_update_rela.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/* Update RELA relocation information at given index.
- Copyright (C) 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <gelf.h>
-#include <stdlib.h>
-
-#include "libelfP.h"
-
-
-int
-gelf_update_rela (Elf_Data *dst, int ndx, GElf_Rela *src)
-{
- Elf_Data_Scn *data_scn = (Elf_Data_Scn *) dst;
- Elf_Scn *scn;
- int result = 0;
-
- if (dst == NULL)
- return 0;
-
- if (unlikely (ndx < 0))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- return 0;
- }
-
- if (unlikely (data_scn->d.d_type != ELF_T_RELA))
- {
- /* The type of the data better should match. */
- __libelf_seterrno (ELF_E_DATA_MISMATCH);
- return 0;
- }
-
- scn = data_scn->s;
- rwlock_wrlock (scn->elf->lock);
-
- if (scn->elf->class == ELFCLASS32)
- {
- Elf32_Rela *rel;
-
- /* There is the possibility that the values in the input are
- too large. */
- if (unlikely (src->r_offset > 0xffffffffull)
- || unlikely (GELF_R_SYM (src->r_info) > 0xffffff)
- || unlikely (GELF_R_TYPE (src->r_info) > 0xff)
- || unlikely (src->r_addend < -0x80000000ll)
- || unlikely (src->r_addend > 0x7fffffffll))
- {
- __libelf_seterrno (ELF_E_INVALID_DATA);
- goto out;
- }
-
- /* Check whether we have to resize the data buffer. */
- if (unlikely ((ndx + 1) * sizeof (Elf32_Rela) > data_scn->d.d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- goto out;
- }
-
- rel = &((Elf32_Rela *) data_scn->d.d_buf)[ndx];
-
- rel->r_offset = src->r_offset;
- rel->r_info = ELF32_R_INFO (GELF_R_SYM (src->r_info),
- GELF_R_TYPE (src->r_info));
- rel->r_addend = src->r_addend;
- }
- else
- {
- /* Check whether we have to resize the data buffer. */
- if (unlikely ((ndx + 1) * sizeof (Elf64_Rela) > data_scn->d.d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- goto out;
- }
-
- ((Elf64_Rela *) data_scn->d.d_buf)[ndx] = *src;
- }
-
- result = 1;
-
- /* Mark the section as modified. */
- scn->flags |= ELF_F_DIRTY;
-
- out:
- rwlock_unlock (scn->elf->lock);
-
- return result;
-}
diff --git a/libelf/gelf_update_shdr.c b/libelf/gelf_update_shdr.c
deleted file mode 100644
index c57eab8..0000000
--- a/libelf/gelf_update_shdr.c
+++ /dev/null
@@ -1,129 +0,0 @@
-/* Update section header.
- Copyright (C) 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <gelf.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-
-int
-gelf_update_shdr (Elf_Scn *scn, GElf_Shdr *src)
-{
- int result = 0;
- Elf *elf;
-
- if (scn == NULL || src == NULL)
- return 0;
-
- elf = scn->elf;
- rwlock_wrlock (elf->lock);
-
- if (elf->class == ELFCLASS32)
- {
- Elf32_Shdr *shdr
- = scn->shdr.e32 ?: __elf32_getshdr_wrlock (scn);
-
- if (shdr == NULL)
- {
- __libelf_seterrno (ELF_E_INVALID_OPERAND);
- goto out;
- }
-
- if (unlikely (src->sh_flags > 0xffffffffull)
- || unlikely (src->sh_addr > 0xffffffffull)
- || unlikely (src->sh_offset > 0xffffffffull)
- || unlikely (src->sh_size > 0xffffffffull)
- || unlikely (src->sh_addralign > 0xffffffffull)
- || unlikely (src->sh_entsize > 0xffffffffull))
- {
- __libelf_seterrno (ELF_E_INVALID_DATA);
- goto out;
- }
-
-#define COPY(name) \
- shdr->name = src->name
- COPY (sh_name);
- COPY (sh_type);
- COPY (sh_flags);
- COPY (sh_addr);
- COPY (sh_offset);
- COPY (sh_size);
- COPY (sh_link);
- COPY (sh_info);
- COPY (sh_addralign);
- COPY (sh_entsize);
- }
- else
- {
- Elf64_Shdr *shdr
- = scn->shdr.e64 ?: __elf64_getshdr_wrlock (scn);
-
- if (shdr == NULL)
- {
- __libelf_seterrno (ELF_E_INVALID_OPERAND);
- goto out;
- }
-
- /* We only have to copy the data. */
- (void) memcpy (shdr, src, sizeof (GElf_Shdr));
- }
-
- result = 1;
-
- out:
- rwlock_unlock (elf->lock);
-
- return result;
-}
diff --git a/libelf/gelf_update_sym.c b/libelf/gelf_update_sym.c
deleted file mode 100644
index fff45fd..0000000
--- a/libelf/gelf_update_sym.c
+++ /dev/null
@@ -1,146 +0,0 @@
-/* Update symbol information in symbol table at the given index.
- Copyright (C) 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <gelf.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-
-int
-gelf_update_sym (data, ndx, src)
- Elf_Data *data;
- int ndx;
- GElf_Sym *src;
-{
- Elf_Data_Scn *data_scn = (Elf_Data_Scn *) data;
- Elf_Scn *scn;
- int result = 0;
-
- if (data == NULL)
- return 0;
-
- if (unlikely (ndx < 0))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- return 0;
- }
-
- if (unlikely (data_scn->d.d_type != ELF_T_SYM))
- {
- /* The type of the data better should match. */
- __libelf_seterrno (ELF_E_DATA_MISMATCH);
- return 0;
- }
-
- scn = data_scn->s;
- rwlock_wrlock (scn->elf->lock);
-
- if (scn->elf->class == ELFCLASS32)
- {
- Elf32_Sym *sym;
-
- /* There is the possibility that the values in the input are
- too large. */
- if (unlikely (src->st_value > 0xffffffffull)
- || unlikely (src->st_size > 0xffffffffull))
- {
- __libelf_seterrno (ELF_E_INVALID_DATA);
- goto out;
- }
-
- /* Check whether we have to resize the data buffer. */
- if (unlikely ((ndx + 1) * sizeof (Elf32_Sym) > data_scn->d.d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- goto out;
- }
-
- sym = &((Elf32_Sym *) data_scn->d.d_buf)[ndx];
-
-#define COPY(name) \
- sym->name = src->name
- COPY (st_name);
- COPY (st_value);
- COPY (st_size);
- /* Please note that we can simply copy the `st_info' element since
- the definitions of ELFxx_ST_BIND and ELFxx_ST_TYPE are the same
- for the 64 bit variant. */
- COPY (st_info);
- COPY (st_other);
- COPY (st_shndx);
- }
- else
- {
- /* Check whether we have to resize the data buffer. */
- if (unlikely ((ndx + 1) * sizeof (Elf64_Sym) > data_scn->d.d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- goto out;
- }
-
- ((Elf64_Sym *) data_scn->d.d_buf)[ndx] = *src;
- }
-
- result = 1;
-
- /* Mark the section as modified. */
- scn->flags |= ELF_F_DIRTY;
-
- out:
- rwlock_unlock (scn->elf->lock);
-
- return result;
-}
diff --git a/libelf/gelf_update_syminfo.c b/libelf/gelf_update_syminfo.c
deleted file mode 100644
index a0e176d..0000000
--- a/libelf/gelf_update_syminfo.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/* Update additional symbol information in symbol table at the given index.
- Copyright (C) 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <gelf.h>
-#include <stdlib.h>
-
-#include "libelfP.h"
-
-
-int
-gelf_update_syminfo (data, ndx, src)
- Elf_Data *data;
- int ndx;
- GElf_Syminfo *src;
-{
- Elf_Data_Scn *data_scn = (Elf_Data_Scn *) data;
- Elf_Scn *scn;
- int result = 0;
-
- if (data == NULL)
- return 0;
-
- if (unlikely (ndx < 0))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- return 0;
- }
-
- if (unlikely (data_scn->d.d_type != ELF_T_SYMINFO))
- {
- /* The type of the data better should match. */
- __libelf_seterrno (ELF_E_DATA_MISMATCH);
- return 0;
- }
-
- /* The types for 32 and 64 bit are the same. Lucky us. */
- assert (sizeof (GElf_Syminfo) == sizeof (Elf32_Syminfo));
- assert (sizeof (GElf_Syminfo) == sizeof (Elf64_Syminfo));
-
- scn = data_scn->s;
- rwlock_wrlock (scn->elf->lock);
-
- /* Check whether we have to resize the data buffer. */
- if (unlikely ((ndx + 1) * sizeof (GElf_Syminfo) > data_scn->d.d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- goto out;
- }
-
- ((GElf_Syminfo *) data_scn->d.d_buf)[ndx] = *src;
-
- result = 1;
-
- /* Mark the section as modified. */
- scn->flags |= ELF_F_DIRTY;
-
- out:
- rwlock_unlock (scn->elf->lock);
-
- return result;
-}
diff --git a/libelf/gelf_update_symshndx.c b/libelf/gelf_update_symshndx.c
deleted file mode 100644
index 2d393c1..0000000
--- a/libelf/gelf_update_symshndx.c
+++ /dev/null
@@ -1,176 +0,0 @@
-/* Update symbol information and section index in symbol table at the
- given index.
- Copyright (C) 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <gelf.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-
-int
-gelf_update_symshndx (symdata, shndxdata, ndx, src, srcshndx)
- Elf_Data *symdata;
- Elf_Data *shndxdata;
- int ndx;
- GElf_Sym *src;
- Elf32_Word srcshndx;
-{
- Elf_Data_Scn *symdata_scn = (Elf_Data_Scn *) symdata;
- Elf_Data_Scn *shndxdata_scn = (Elf_Data_Scn *) shndxdata;
- Elf_Scn *scn;
- Elf32_Word *shndx = NULL;
- int result = 0;
-
- if (symdata == NULL)
- return 0;
-
- if (unlikely (ndx < 0))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- return 0;
- }
-
- if (unlikely (symdata_scn->d.d_type != ELF_T_SYM))
- {
- /* The type of the data better should match. */
- __libelf_seterrno (ELF_E_DATA_MISMATCH);
- return 0;
- }
-
- scn = symdata_scn->s;
- /* We simply have to believe the user that the two sections belong to
- the same ELF file. */
- rwlock_wrlock (scn->elf->lock);
-
- /* The user is not required to pass a data descriptor for an extended
- section index table. */
- if (shndxdata_scn != NULL)
- {
- if (unlikely ((ndx + 1) * sizeof (Elf32_Word) > shndxdata_scn->d.d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- goto out;
- }
-
- shndx = &((Elf32_Word *) shndxdata_scn->d.d_buf)[ndx];
- }
- /* But if s/he does not the extended sectio index must be zero. */
- else if (unlikely (srcshndx != 0))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- goto out;
- }
-
- if (scn->elf->class == ELFCLASS32)
- {
- Elf32_Sym *sym;
-
- /* There is the possibility that the values in the input are
- too large. */
- if (unlikely (src->st_value > 0xffffffffull)
- || unlikely (src->st_size > 0xffffffffull))
- {
- __libelf_seterrno (ELF_E_INVALID_DATA);
- goto out;
- }
-
- /* Check whether we have to resize the data buffer. */
- if (unlikely ((ndx + 1) * sizeof (Elf32_Sym) > symdata_scn->d.d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- goto out;
- }
-
- sym = &((Elf32_Sym *) symdata_scn->d.d_buf)[ndx];
-
-#define COPY(name) \
- sym->name = src->name
- COPY (st_name);
- COPY (st_value);
- COPY (st_size);
- /* Please note that we can simply copy the `st_info' element since
- the definitions of ELFxx_ST_BIND and ELFxx_ST_TYPE are the same
- for the 64 bit variant. */
- COPY (st_info);
- COPY (st_other);
- COPY (st_shndx);
- }
- else
- {
- /* Check whether we have to resize the data buffer. */
- if (unlikely ((ndx + 1) * sizeof (Elf64_Sym) > symdata_scn->d.d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- goto out;
- }
-
- ((Elf64_Sym *) symdata_scn->d.d_buf)[ndx] = *src;
- }
-
- /* Now we can store the section index. */
- if (shndx != NULL)
- *shndx = srcshndx;
-
- result = 1;
-
- /* Mark the section as modified. */
- scn->flags |= ELF_F_DIRTY;
-
- out:
- rwlock_unlock (scn->elf->lock);
-
- return result;
-}
diff --git a/libelf/gelf_update_verdaux.c b/libelf/gelf_update_verdaux.c
deleted file mode 100644
index 17866ef..0000000
--- a/libelf/gelf_update_verdaux.c
+++ /dev/null
@@ -1,102 +0,0 @@
-/* Update additional symbol version definition information.
- Copyright (C) 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <gelf.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-
-int
-gelf_update_verdaux (data, offset, src)
- Elf_Data *data;
- int offset;
- GElf_Verdaux *src;
-{
- Elf_Data_Scn *data_scn = (Elf_Data_Scn *) data;
-
- if (data == NULL)
- return 0;
-
- /* The types for 32 and 64 bit are the same. Lucky us. */
- assert (sizeof (GElf_Verdaux) == sizeof (Elf32_Verdaux));
- assert (sizeof (GElf_Verdaux) == sizeof (Elf64_Verdaux));
-
- /* Check whether we have to resize the data buffer. */
- if (unlikely (offset < 0)
- || unlikely ((offset + sizeof (GElf_Verdaux)) > data_scn->d.d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- return 0;
- }
-
- if (unlikely (data_scn->d.d_type != ELF_T_VDEF))
- {
- /* The type of the data better should match. */
- __libelf_seterrno (ELF_E_DATA_MISMATCH);
- return 0;
- }
-
- rwlock_wrlock (data_scn->s->elf->lock);
-
- memcpy ((char *) data_scn->d.d_buf + offset, src, sizeof (GElf_Verdaux));
-
- /* Mark the section as modified. */
- data_scn->s->flags |= ELF_F_DIRTY;
-
- rwlock_unlock (data_scn->s->elf->lock);
-
- return 1;
-}
diff --git a/libelf/gelf_update_verdef.c b/libelf/gelf_update_verdef.c
deleted file mode 100644
index cd19cb7..0000000
--- a/libelf/gelf_update_verdef.c
+++ /dev/null
@@ -1,102 +0,0 @@
-/* Update symbol version definition information.
- Copyright (C) 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <gelf.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-
-int
-gelf_update_verdef (data, offset, src)
- Elf_Data *data;
- int offset;
- GElf_Verdef *src;
-{
- Elf_Data_Scn *data_scn = (Elf_Data_Scn *) data;
-
- if (data == NULL)
- return 0;
-
- /* The types for 32 and 64 bit are the same. Lucky us. */
- assert (sizeof (GElf_Verdef) == sizeof (Elf32_Verdef));
- assert (sizeof (GElf_Verdef) == sizeof (Elf64_Verdef));
-
- /* Check whether we have to resize the data buffer. */
- if (unlikely (offset < 0)
- || unlikely ((offset + sizeof (GElf_Verdef)) > data_scn->d.d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- return 0;
- }
-
- if (unlikely (data_scn->d.d_type != ELF_T_VDEF))
- {
- /* The type of the data better should match. */
- __libelf_seterrno (ELF_E_DATA_MISMATCH);
- return 0;
- }
-
- rwlock_wrlock (data_scn->s->elf->lock);
-
- memcpy ((char *) data_scn->d.d_buf + offset, src, sizeof (GElf_Verdef));
-
- /* Mark the section as modified. */
- data_scn->s->flags |= ELF_F_DIRTY;
-
- rwlock_unlock (data_scn->s->elf->lock);
-
- return 1;
-}
diff --git a/libelf/gelf_update_vernaux.c b/libelf/gelf_update_vernaux.c
deleted file mode 100644
index 2be69e1..0000000
--- a/libelf/gelf_update_vernaux.c
+++ /dev/null
@@ -1,102 +0,0 @@
-/* Update additional required symbol version information.
- Copyright (C) 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <gelf.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-
-int
-gelf_update_vernaux (data, offset, src)
- Elf_Data *data;
- int offset;
- GElf_Vernaux *src;
-{
- Elf_Data_Scn *data_scn = (Elf_Data_Scn *) data;
-
- if (data == NULL)
- return 0;
-
- /* The types for 32 and 64 bit are the same. Lucky us. */
- assert (sizeof (GElf_Vernaux) == sizeof (Elf32_Vernaux));
- assert (sizeof (GElf_Vernaux) == sizeof (Elf64_Vernaux));
-
- /* Check whether we have to resize the data buffer. */
- if (unlikely (offset < 0)
- || unlikely ((offset + sizeof (GElf_Vernaux)) > data_scn->d.d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- return 0;
- }
-
- if (unlikely (data_scn->d.d_type != ELF_T_VNEED))
- {
- /* The type of the data better should match. */
- __libelf_seterrno (ELF_E_DATA_MISMATCH);
- return 0;
- }
-
- rwlock_wrlock (data_scn->s->elf->lock);
-
- memcpy ((char *) data_scn->d.d_buf + offset, src, sizeof (GElf_Vernaux));
-
- /* Mark the section as modified. */
- data_scn->s->flags |= ELF_F_DIRTY;
-
- rwlock_unlock (data_scn->s->elf->lock);
-
- return 1;
-}
diff --git a/libelf/gelf_update_verneed.c b/libelf/gelf_update_verneed.c
deleted file mode 100644
index 95f2d18..0000000
--- a/libelf/gelf_update_verneed.c
+++ /dev/null
@@ -1,102 +0,0 @@
-/* Update required symbol version information.
- Copyright (C) 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <gelf.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-
-int
-gelf_update_verneed (data, offset, src)
- Elf_Data *data;
- int offset;
- GElf_Verneed *src;
-{
- Elf_Data_Scn *data_scn = (Elf_Data_Scn *) data;
-
- if (data == NULL)
- return 0;
-
- /* The types for 32 and 64 bit are the same. Lucky us. */
- assert (sizeof (GElf_Verneed) == sizeof (Elf32_Verneed));
- assert (sizeof (GElf_Verneed) == sizeof (Elf64_Verneed));
-
- /* Check whether we have to resize the data buffer. */
- if (unlikely (offset < 0)
- || unlikely ((offset + sizeof (GElf_Verneed)) > data_scn->d.d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- return 0;
- }
-
- if (unlikely (data_scn->d.d_type != ELF_T_VNEED))
- {
- /* The type of the data better should match. */
- __libelf_seterrno (ELF_E_DATA_MISMATCH);
- return 0;
- }
-
- rwlock_wrlock (data_scn->s->elf->lock);
-
- memcpy ((char *) data_scn->d.d_buf + offset, src, sizeof (GElf_Verneed));
-
- /* Mark the section as modified. */
- data_scn->s->flags |= ELF_F_DIRTY;
-
- rwlock_unlock (data_scn->s->elf->lock);
-
- return 1;
-}
diff --git a/libelf/gelf_update_versym.c b/libelf/gelf_update_versym.c
deleted file mode 100644
index 905c8f7..0000000
--- a/libelf/gelf_update_versym.c
+++ /dev/null
@@ -1,102 +0,0 @@
-/* Update symbol version information.
- Copyright (C) 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <gelf.h>
-#include <stdlib.h>
-
-#include "libelfP.h"
-
-
-int
-gelf_update_versym (data, ndx, src)
- Elf_Data *data;
- int ndx;
- GElf_Versym *src;
-{
- Elf_Data_Scn *data_scn = (Elf_Data_Scn *) data;
-
- if (data == NULL)
- return 0;
-
- /* The types for 32 and 64 bit are the same. Lucky us. */
- assert (sizeof (GElf_Versym) == sizeof (Elf32_Versym));
- assert (sizeof (GElf_Versym) == sizeof (Elf64_Versym));
-
- /* Check whether we have to resize the data buffer. */
- if (unlikely (ndx < 0)
- || unlikely ((ndx + 1) * sizeof (GElf_Versym) > data_scn->d.d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- return 0;
- }
-
- if (unlikely (data_scn->d.d_type != ELF_T_HALF))
- {
- /* The type of the data better should match. */
- __libelf_seterrno (ELF_E_DATA_MISMATCH);
- return 0;
- }
-
- rwlock_wrlock (data_scn->s->elf->lock);
-
- ((GElf_Versym *) data_scn->d.d_buf)[ndx] = *src;
-
- /* Mark the section as modified. */
- data_scn->s->flags |= ELF_F_DIRTY;
-
- rwlock_unlock (data_scn->s->elf->lock);
-
- return 1;
-}
diff --git a/libelf/gelf_xlate.c b/libelf/gelf_xlate.c
deleted file mode 100644
index 48a790c..0000000
--- a/libelf/gelf_xlate.c
+++ /dev/null
@@ -1,239 +0,0 @@
-/* Transformation functions for ELF data types.
- Copyright (C) 1998,1999,2000,2002,2004,2005,2006,2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <byteswap.h>
-#include <stdint.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include "libelfP.h"
-
-#ifndef LIBELFBITS
-# define LIBELFBITS 32
-#endif
-
-
-/* Well, what shall I say. Nothing to do here. */
-#define elf_cvt_Byte(dest, src, n) \
- (__builtin_constant_p (n) && (n) == 1 \
- ? (void) (*((char *) (dest)) = *((char *) (src))) \
- : Elf32_cvt_Byte (dest, src, n))
-static void
-(elf_cvt_Byte) (void *dest, const void *src, size_t n,
- int encode __attribute__ ((unused)))
-{
- memmove (dest, src, n);
-}
-
-
-/* We'll optimize the definition of the conversion functions here a
- bit. We need only functions for 16, 32, and 64 bits. The
- functions referenced in the table will be aliases for one of these
- functions. Which one is decided by the ELFxx_FSZ_type. */
-
-#if ALLOW_UNALIGNED
-
-#define FETCH(Bits, ptr) (*(const uint##Bits##_t *) ptr)
-#define STORE(Bits, ptr, val) (*(uint##Bits##_t *) ptr = val)
-
-#else
-
-union unaligned
- {
- uint16_t u16;
- uint32_t u32;
- uint64_t u64;
- } __attribute__ ((packed));
-
-#define FETCH(Bits, ptr) (((const union unaligned *) ptr)->u##Bits)
-#define STORE(Bits, ptr, val) (((union unaligned *) ptr)->u##Bits = val)
-
-#endif
-
-/* Now define the conversion functions for the basic types. We use here
- the fact that file and memory types are the same and that we have the
- ELFxx_FSZ_* macros.
-
- At the same time we define inline functions which we will use to
- convert the complex types. */
-#define FUNDAMENTAL(NAME, Name, Bits) \
- INLINE2 (ELFW2(Bits,FSZ_##NAME), ElfW2(Bits,cvt_##Name), ElfW2(Bits,Name))
-#define INLINE2(Bytes, FName, TName) \
- INLINE3 (Bytes, FName, TName)
-#define INLINE3(Bytes, FName, TName) \
- static inline void FName##1 (void *dest, const void *ptr) \
- { \
- switch (Bytes) \
- { \
- case 2: STORE (16, dest, bswap_16 (FETCH (16, ptr))); break; \
- case 4: STORE (32, dest, bswap_32 (FETCH (32, ptr))); break; \
- case 8: STORE (64, dest, bswap_64 (FETCH (64, ptr))); break; \
- default: \
- abort (); \
- } \
- } \
- \
- static void FName (void *dest, const void *ptr, size_t len, \
- int encode __attribute__ ((unused))) \
- { \
- size_t n = len / sizeof (TName); \
- if (dest < ptr) \
- while (n-- > 0) \
- { \
- FName##1 (dest, ptr); \
- dest += Bytes; \
- ptr += Bytes; \
- } \
- else \
- { \
- dest += len; \
- ptr += len; \
- while (n-- > 0) \
- { \
- ptr -= Bytes; \
- dest -= Bytes; \
- FName##1 (dest, ptr); \
- } \
- } \
- }
-
-
-/* Now the tricky part: define the transformation functions for the
- complex types. We will use the definitions of the types in
- abstract.h. */
-#define START(Bits, Name, EName) \
- static void \
- ElfW2 (Bits, cvt_##Name) (void *dest, const void *src, size_t len, \
- int encode __attribute__ ((unused))) \
- { ElfW2(Bits, Name) *tdest = (ElfW2(Bits, Name) *) dest; \
- ElfW2(Bits, Name) *tsrc = (ElfW2(Bits, Name) *) src; \
- size_t n; \
- for (n = len / sizeof (ElfW2(Bits, Name)); n > 0; ++tdest, ++tsrc, --n) {
-#define END(Bits, Name) } }
-#define TYPE_EXTRA(Code)
-#define TYPE_XLATE(Code) Code
-#define TYPE_NAME(Type, Name) TYPE_NAME2 (Type, Name)
-#define TYPE_NAME2(Type, Name) Type##1 (&tdest->Name, &tsrc->Name);
-#define TYPE(Name, Bits) TYPE2 (Name, Bits)
-#define TYPE2(Name, Bits) TYPE3 (Name##Bits)
-#define TYPE3(Name) Name (cvt_)
-
-/* Signal that we are generating conversion functions. */
-#define GENERATE_CONVERSION
-
-/* First generate the 32-bit conversion functions. */
-#define LIBELFBITS 32
-#include "gelf_xlate.h"
-
-/* Now generate the 64-bit conversion functions. */
-#define LIBELFBITS 64
-#include "gelf_xlate.h"
-
-
-/* We have a few functions which we must create by hand since the sections
- do not contain records of only one type. */
-#include "version_xlate.h"
-#include "gnuhash_xlate.h"
-#include "note_xlate.h"
-
-
-/* Now the externally visible table with the function pointers. */
-const xfct_t __elf_xfctstom[EV_NUM - 1][EV_NUM - 1][ELFCLASSNUM - 1][ELF_T_NUM] =
-{
- [EV_CURRENT - 1] = {
- [EV_CURRENT - 1] = {
- [ELFCLASS32 - 1] = {
-#define define_xfcts(Bits) \
- [ELF_T_BYTE] = elf_cvt_Byte, \
- [ELF_T_ADDR] = ElfW2(Bits, cvt_Addr), \
- [ELF_T_DYN] = ElfW2(Bits, cvt_Dyn), \
- [ELF_T_EHDR] = ElfW2(Bits, cvt_Ehdr), \
- [ELF_T_HALF] = ElfW2(Bits, cvt_Half), \
- [ELF_T_OFF] = ElfW2(Bits, cvt_Off), \
- [ELF_T_PHDR] = ElfW2(Bits, cvt_Phdr), \
- [ELF_T_RELA] = ElfW2(Bits, cvt_Rela), \
- [ELF_T_REL] = ElfW2(Bits, cvt_Rel), \
- [ELF_T_SHDR] = ElfW2(Bits, cvt_Shdr), \
- [ELF_T_SWORD] = ElfW2(Bits, cvt_Sword), \
- [ELF_T_SYM] = ElfW2(Bits, cvt_Sym), \
- [ELF_T_WORD] = ElfW2(Bits, cvt_Word), \
- [ELF_T_XWORD] = ElfW2(Bits, cvt_Xword), \
- [ELF_T_SXWORD] = ElfW2(Bits, cvt_Sxword), \
- [ELF_T_VDEF] = elf_cvt_Verdef, \
- [ELF_T_VDAUX] = elf_cvt_Verdef, \
- [ELF_T_VNEED] = elf_cvt_Verneed, \
- [ELF_T_VNAUX] = elf_cvt_Verneed, \
- [ELF_T_NHDR] = elf_cvt_note, \
- [ELF_T_SYMINFO] = ElfW2(Bits, cvt_Syminfo), \
- [ELF_T_MOVE] = ElfW2(Bits, cvt_Move), \
- [ELF_T_LIB] = ElfW2(Bits, cvt_Lib), \
- [ELF_T_AUXV] = ElfW2(Bits, cvt_auxv_t)
- define_xfcts (32),
- [ELF_T_GNUHASH] = Elf32_cvt_Word
- },
- [ELFCLASS64 - 1] = {
- define_xfcts (64),
- [ELF_T_GNUHASH] = elf_cvt_gnuhash
- }
- }
- }
-};
-/* ANDROID_CHANGE_BEGIN */
-#ifndef __APPLE__
-/* For now we only handle the case where the memory representation is the
- same as the file representation. Should this change we have to define
- separate functions. For now reuse them. */
-strong_alias (__elf_xfctstom, __elf_xfctstof)
-#endif
-/* ANDROID_CHANGE_END */
diff --git a/libelf/gelf_xlate.h b/libelf/gelf_xlate.h
deleted file mode 100644
index e7659f1..0000000
--- a/libelf/gelf_xlate.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* Helper file for type conversion function generation.
- Copyright (C) 1998, 1999, 2000, 2002, 2004, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-
-/* Simple types. */
-FUNDAMENTAL (ADDR, Addr, LIBELFBITS);
-FUNDAMENTAL (OFF, Off, LIBELFBITS);
-FUNDAMENTAL (HALF, Half, LIBELFBITS);
-FUNDAMENTAL (WORD, Word, LIBELFBITS);
-FUNDAMENTAL (SWORD, Sword, LIBELFBITS);
-FUNDAMENTAL (XWORD, Xword, LIBELFBITS);
-FUNDAMENTAL (SXWORD, Sxword, LIBELFBITS);
-
-/* The structured types. */
-TYPE (Ehdr, LIBELFBITS)
-TYPE (Phdr, LIBELFBITS)
-TYPE (Shdr, LIBELFBITS)
-TYPE (Sym, LIBELFBITS)
-TYPE (Rel, LIBELFBITS)
-TYPE (Rela, LIBELFBITS)
-TYPE (Note, LIBELFBITS)
-TYPE (Dyn, LIBELFBITS)
-TYPE (Syminfo, LIBELFBITS)
-TYPE (Move, LIBELFBITS)
-TYPE (Lib, LIBELFBITS)
-TYPE (auxv_t, LIBELFBITS)
-
-
-/* Prepare for the next round. */
-#undef LIBELFBITS
diff --git a/libelf/gelf_xlatetof.c b/libelf/gelf_xlatetof.c
deleted file mode 100644
index e7f8238..0000000
--- a/libelf/gelf_xlatetof.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/* Convert from memory to file representation. Generic ELF version.
- Copyright (C) 2000, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <gelf.h>
-#include <stddef.h>
-
-#include "libelfP.h"
-
-
-Elf_Data *
-gelf_xlatetof (elf, dest, src, encode)
- Elf *elf;
- Elf_Data *dest;
- const Elf_Data * src;
- unsigned int encode;
-{
- if (elf == NULL)
- return NULL;
-
- return (elf->class == ELFCLASS32
- ? INTUSE(elf32_xlatetof) (dest, src, encode)
- : INTUSE(elf64_xlatetof) (dest, src, encode));
-}
diff --git a/libelf/gelf_xlatetom.c b/libelf/gelf_xlatetom.c
deleted file mode 100644
index b7da1b2..0000000
--- a/libelf/gelf_xlatetom.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/* Convert from file to memory representation. Generic ELF version.
- Copyright (C) 2000, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <gelf.h>
-#include <stddef.h>
-
-#include "libelfP.h"
-
-
-Elf_Data *
-gelf_xlatetom (elf, dest, src, encode)
- Elf *elf;
- Elf_Data *dest;
- const Elf_Data * src;
- unsigned int encode;
-{
- if (elf == NULL)
- return NULL;
-
- return (elf->class == ELFCLASS32
- ? INTUSE(elf32_xlatetom) (dest, src, encode)
- : INTUSE(elf64_xlatetom) (dest, src, encode));
-}
diff --git a/libelf/gnuhash_xlate.h b/libelf/gnuhash_xlate.h
deleted file mode 100644
index d79764d..0000000
--- a/libelf/gnuhash_xlate.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/* Conversion functions for versioning information.
- Copyright (C) 2006, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2006.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <assert.h>
-#include <gelf.h>
-
-#include "libelfP.h"
-
-
-static void
-elf_cvt_gnuhash (void *dest, const void *src, size_t len, int encode)
-{
- /* The GNU hash table format on 64 bit machines mixes 32 bit and 64 bit
- words. We must detangle them here. */
- Elf32_Word *dest32 = dest;
- const Elf32_Word *src32 = src;
-
- /* First four control words, 32 bits. */
- for (unsigned int cnt = 0; cnt < 4; ++cnt)
- {
- if (len < 4)
- return;
- dest32[cnt] = bswap_32 (src32[cnt]);
- len -= 4;
- }
-
- Elf32_Word bitmask_words = encode ? src32[2] : dest32[2];
-
- /* Now the 64 bit words. */
- Elf64_Xword *dest64 = (Elf64_Xword *) &dest32[4];
- const Elf64_Xword *src64 = (const Elf64_Xword *) &src32[4];
- for (unsigned int cnt = 0; cnt < bitmask_words; ++cnt)
- {
- if (len < 8)
- return;
- dest64[cnt] = bswap_64 (src64[cnt]);
- len -= 8;
- }
-
- /* The rest are 32 bit words again. */
- src32 = (const Elf32_Word *) &src64[bitmask_words];
- dest32 = (Elf32_Word *) &dest64[bitmask_words];
- while (len >= 4)
- {
- *dest32++ = bswap_32 (*src32++);
- len -= 4;
- }
-}
diff --git a/libelf/libelf.h b/libelf/libelf.h
deleted file mode 100644
index 8021266..0000000
--- a/libelf/libelf.h
+++ /dev/null
@@ -1,439 +0,0 @@
-/* Interface for libelf.
- Copyright (C) 1998, 1999, 2000, 2002, 2004, 2005, 2006, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifndef _LIBELF_H
-#define _LIBELF_H 1
-
-#include <sys/types.h>
-
-/* Get the ELF types. */
-#include <elf.h>
-
-
-/* Known translation types. */
-typedef enum
-{
- ELF_T_BYTE, /* unsigned char */
- ELF_T_ADDR, /* Elf32_Addr, Elf64_Addr, ... */
- ELF_T_DYN, /* Dynamic section record. */
- ELF_T_EHDR, /* ELF header. */
- ELF_T_HALF, /* Elf32_Half, Elf64_Half, ... */
- ELF_T_OFF, /* Elf32_Off, Elf64_Off, ... */
- ELF_T_PHDR, /* Program header. */
- ELF_T_RELA, /* Relocation entry with addend. */
- ELF_T_REL, /* Relocation entry. */
- ELF_T_SHDR, /* Section header. */
- ELF_T_SWORD, /* Elf32_Sword, Elf64_Sword, ... */
- ELF_T_SYM, /* Symbol record. */
- ELF_T_WORD, /* Elf32_Word, Elf64_Word, ... */
- ELF_T_XWORD, /* Elf32_Xword, Elf64_Xword, ... */
- ELF_T_SXWORD, /* Elf32_Sxword, Elf64_Sxword, ... */
- ELF_T_VDEF, /* Elf32_Verdef, Elf64_Verdef, ... */
- ELF_T_VDAUX, /* Elf32_Verdaux, Elf64_Verdaux, ... */
- ELF_T_VNEED, /* Elf32_Verneed, Elf64_Verneed, ... */
- ELF_T_VNAUX, /* Elf32_Vernaux, Elf64_Vernaux, ... */
- ELF_T_NHDR, /* Elf32_Nhdr, Elf64_Nhdr, ... */
- ELF_T_SYMINFO, /* Elf32_Syminfo, Elf64_Syminfo, ... */
- ELF_T_MOVE, /* Elf32_Move, Elf64_Move, ... */
- ELF_T_LIB, /* Elf32_Lib, Elf64_Lib, ... */
- ELF_T_GNUHASH, /* GNU-style hash section. */
- ELF_T_AUXV, /* Elf32_auxv_t, Elf64_auxv_t, ... */
- /* Keep this the last entry. */
- ELF_T_NUM
-} Elf_Type;
-
-/* Descriptor for data to be converted to or from memory format. */
-typedef struct
-{
- void *d_buf; /* Pointer to the actual data. */
- Elf_Type d_type; /* Type of this piece of data. */
- unsigned int d_version; /* ELF version. */
- size_t d_size; /* Size in bytes. */
- /* ANDROID_CHANGE_BEGIN */
-#if 0
- loff_t d_off; /* Offset into section. */
-#else
- off_t d_off; /* Offset into section. */
-#endif
- /* ANDROID_CHANGE_END */
- size_t d_align; /* Alignment in section. */
-} Elf_Data;
-
-
-/* Commands for `...'. */
-typedef enum
-{
- ELF_C_NULL, /* Nothing, terminate, or compute only. */
- ELF_C_READ, /* Read .. */
- ELF_C_RDWR, /* Read and write .. */
- ELF_C_WRITE, /* Write .. */
- ELF_C_CLR, /* Clear flag. */
- ELF_C_SET, /* Set flag. */
- ELF_C_FDDONE, /* Signal that file descriptor will not be
- used anymore. */
- ELF_C_FDREAD, /* Read rest of data so that file descriptor
- is not used anymore. */
- /* The following are extensions. */
- ELF_C_READ_MMAP, /* Read, but mmap the file if possible. */
- ELF_C_RDWR_MMAP, /* Read and write, with mmap. */
- ELF_C_WRITE_MMAP, /* Write, with mmap. */
- ELF_C_READ_MMAP_PRIVATE, /* Read, but memory is writable, results are
- not written to the file. */
- ELF_C_EMPTY, /* Copy basic file data but not the content. */
- /* Keep this the last entry. */
- ELF_C_NUM
-} Elf_Cmd;
-
-
-/* Flags for the ELF structures. */
-enum
-{
- ELF_F_DIRTY = 0x1,
-#define ELF_F_DIRTY ELF_F_DIRTY
- ELF_F_LAYOUT = 0x4,
-#define ELF_F_LAYOUT ELF_F_LAYOUT
- ELF_F_PERMISSIVE = 0x8
-#define ELF_F_PERMISSIVE ELF_F_PERMISSIVE
-};
-
-
-/* Identification values for recognized object files. */
-typedef enum
-{
- ELF_K_NONE, /* Unknown. */
- ELF_K_AR, /* Archive. */
- ELF_K_COFF, /* Stupid old COFF. */
- ELF_K_ELF, /* ELF file. */
- /* Keep this the last entry. */
- ELF_K_NUM
-} Elf_Kind;
-
-
-/* Archive member header. */
-typedef struct
-{
- char *ar_name; /* Name of archive member. */
- time_t ar_date; /* File date. */
- uid_t ar_uid; /* User ID. */
- gid_t ar_gid; /* Group ID. */
- mode_t ar_mode; /* File mode. */
- /* ANDROID_CHANGE_BEGIN */
-#if 0
- loff_t ar_size; /* File size. */
-#else
- off_t ar_size; /* File size. */
-#endif
- /* ANDROID_CHANGE_END */
- char *ar_rawname; /* Original name of archive member. */
-} Elf_Arhdr;
-
-
-/* Archive symbol table entry. */
-typedef struct
-{
- char *as_name; /* Symbol name. */
- size_t as_off; /* Offset for this file in the archive. */
- unsigned long int as_hash; /* Hash value of the name. */
-} Elf_Arsym;
-
-
-/* Descriptor for the ELF file. */
-typedef struct Elf Elf;
-
-/* Descriptor for ELF file section. */
-typedef struct Elf_Scn Elf_Scn;
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Return descriptor for ELF file to work according to CMD. */
-extern Elf *elf_begin (int __fildes, Elf_Cmd __cmd, Elf *__ref);
-
-/* Create a clone of an existing ELF descriptor. */
- extern Elf *elf_clone (Elf *__elf, Elf_Cmd __cmd);
-
-/* Create descriptor for memory region. */
-extern Elf *elf_memory (char *__image, size_t __size);
-
-/* Advance archive descriptor to next element. */
-extern Elf_Cmd elf_next (Elf *__elf);
-
-/* Free resources allocated for ELF. */
-extern int elf_end (Elf *__elf);
-
-/* Update ELF descriptor and write file to disk. */
-/* ANDROID_CHANGE_BEGIN */
-#if 0
-extern off_t elf_update (Elf *__elf, Elf_Cmd __cmd);
-#else
-#endif
-/* ANDROID_CHANGE_END */
-
-
-/* Determine what kind of file is associated with ELF. */
-extern Elf_Kind elf_kind (Elf *__elf) __attribute__ ((__pure__));
-
-/* Get the base offset for an object file. */
-/* ANDROID_CHANGE_BEGIN */
-#if 0
-extern loff_t elf_getbase (Elf *__elf);
-#else
-extern off_t elf_getbase (Elf *__elf);
-#endif
-/* ANDROID_CHANGE_END */
-
-
-/* Retrieve file identification data. */
-extern char *elf_getident (Elf *__elf, size_t *__nbytes);
-
-/* Retrieve class-dependent object file header. */
-extern Elf32_Ehdr *elf32_getehdr (Elf *__elf);
-/* Similar but this time the binary calls is ELFCLASS64. */
-extern Elf64_Ehdr *elf64_getehdr (Elf *__elf);
-
-/* Create ELF header if none exists. */
-extern Elf32_Ehdr *elf32_newehdr (Elf *__elf);
-/* Similar but this time the binary calls is ELFCLASS64. */
-extern Elf64_Ehdr *elf64_newehdr (Elf *__elf);
-
-/* Retrieve class-dependent program header table. */
-extern Elf32_Phdr *elf32_getphdr (Elf *__elf);
-/* Similar but this time the binary calls is ELFCLASS64. */
-extern Elf64_Phdr *elf64_getphdr (Elf *__elf);
-
-/* Create ELF program header. */
-extern Elf32_Phdr *elf32_newphdr (Elf *__elf, size_t __cnt);
-/* Similar but this time the binary calls is ELFCLASS64. */
-extern Elf64_Phdr *elf64_newphdr (Elf *__elf, size_t __cnt);
-
-
-/* Get section at INDEX. */
-extern Elf_Scn *elf_getscn (Elf *__elf, size_t __index);
-
-/* Get section at OFFSET. */
-extern Elf_Scn *elf32_offscn (Elf *__elf, Elf32_Off __offset);
-/* Similar bug this time the binary calls is ELFCLASS64. */
-extern Elf_Scn *elf64_offscn (Elf *__elf, Elf64_Off __offset);
-
-/* Get index of section. */
-extern size_t elf_ndxscn (Elf_Scn *__scn);
-
-/* Get section with next section index. */
-extern Elf_Scn *elf_nextscn (Elf *__elf, Elf_Scn *__scn);
-
-/* Create a new section and append it at the end of the table. */
-extern Elf_Scn *elf_newscn (Elf *__elf);
-
-/* Get the section index of the extended section index table for the
- given symbol table. */
-extern int elf_scnshndx (Elf_Scn *__scn);
-
-/* Get the number of sections in the ELF file. If the file uses more
- sections than can be represented in the e_shnum field of the ELF
- header the information from the sh_size field in the zeroth section
- header is used. */
-extern int elf_getshnum (Elf *__elf, size_t *__dst);
-
-
-/* Get the section index of the section header string table in the ELF
- file. If the index cannot be represented in the e_shnum field of
- the ELF header the information from the sh_link field in the zeroth
- section header is used. */
-extern int elf_getshstrndx (Elf *__elf, size_t *__dst);
-
-
-/* Retrieve section header of ELFCLASS32 binary. */
-extern Elf32_Shdr *elf32_getshdr (Elf_Scn *__scn);
-/* Similar for ELFCLASS64. */
-extern Elf64_Shdr *elf64_getshdr (Elf_Scn *__scn);
-
-
-/* Set or clear flags for ELF file. */
-extern unsigned int elf_flagelf (Elf *__elf, Elf_Cmd __cmd,
- unsigned int __flags);
-/* Similarly for the ELF header. */
-extern unsigned int elf_flagehdr (Elf *__elf, Elf_Cmd __cmd,
- unsigned int __flags);
-/* Similarly for the ELF program header. */
-extern unsigned int elf_flagphdr (Elf *__elf, Elf_Cmd __cmd,
- unsigned int __flags);
-/* Similarly for the given ELF section. */
-extern unsigned int elf_flagscn (Elf_Scn *__scn, Elf_Cmd __cmd,
- unsigned int __flags);
-/* Similarly for the given ELF data. */
-extern unsigned int elf_flagdata (Elf_Data *__data, Elf_Cmd __cmd,
- unsigned int __flags);
-/* Similarly for the given ELF section header. */
-extern unsigned int elf_flagshdr (Elf_Scn *__scn, Elf_Cmd __cmd,
- unsigned int __flags);
-
-
-/* Get data from section while translating from file representation
- to memory representation. */
-extern Elf_Data *elf_getdata (Elf_Scn *__scn, Elf_Data *__data);
-
-/* Get uninterpreted section content. */
-extern Elf_Data *elf_rawdata (Elf_Scn *__scn, Elf_Data *__data);
-
-/* Create new data descriptor for section SCN. */
-extern Elf_Data *elf_newdata (Elf_Scn *__scn);
-
-/* Get data translated from a chunk of the file contents as section data
- would be for TYPE. The resulting Elf_Data pointer is valid until
- elf_end (ELF) is called. */
-/* ANDROID_CHANGE_BEGIN */
-#if 0
-extern Elf_Data *elf_getdata_rawchunk (Elf *__elf,
- loff_t __offset, size_t __size,
- Elf_Type __type);
-#else
-extern Elf_Data *elf_getdata_rawchunk (Elf *__elf,
- off_t __offset, size_t __size,
- Elf_Type __type);
-#endif
-/* ANDROID_CHANGE_END */
-
-
-/* Return pointer to string at OFFSET in section INDEX. */
-extern char *elf_strptr (Elf *__elf, size_t __index, size_t __offset);
-
-
-/* Return header of archive. */
-extern Elf_Arhdr *elf_getarhdr (Elf *__elf);
-
-/* Return offset in archive for current file ELF. */
-/* ANDROID_CHANGE_BEGIN */
-#if 0
-extern loff_t elf_getaroff (Elf *__elf);
-#else
-extern off_t elf_getaroff (Elf *__elf);
-#endif
-/* ANDROID_CHANGE_END */
-
-/* Select archive element at OFFSET. */
-extern size_t elf_rand (Elf *__elf, size_t __offset);
-
-/* Get symbol table of archive. */
-extern Elf_Arsym *elf_getarsym (Elf *__elf, size_t *__narsyms);
-
-
-/* Control ELF descriptor. */
-extern int elf_cntl (Elf *__elf, Elf_Cmd __cmd);
-
-/* Retrieve uninterpreted file contents. */
-extern char *elf_rawfile (Elf *__elf, size_t *__nbytes);
-
-
-/* Return size of array of COUNT elements of the type denoted by TYPE
- in the external representation. The binary class is taken from ELF.
- The result is based on version VERSION of the ELF standard. */
-extern size_t elf32_fsize (Elf_Type __type, size_t __count,
- unsigned int __version)
- __attribute__ ((__const__));
-/* Similar but this time the binary calls is ELFCLASS64. */
-extern size_t elf64_fsize (Elf_Type __type, size_t __count,
- unsigned int __version)
- __attribute__ ((__const__));
-
-
-/* Convert data structure from the representation in the file represented
- by ELF to their memory representation. */
-extern Elf_Data *elf32_xlatetom (Elf_Data *__dest, const Elf_Data *__src,
- unsigned int __encode);
-/* Same for 64 bit class. */
-extern Elf_Data *elf64_xlatetom (Elf_Data *__dest, const Elf_Data *__src,
- unsigned int __encode);
-
-/* Convert data structure from to the representation in memory
- represented by ELF file representation. */
-extern Elf_Data *elf32_xlatetof (Elf_Data *__dest, const Elf_Data *__src,
- unsigned int __encode);
-/* Same for 64 bit class. */
-extern Elf_Data *elf64_xlatetof (Elf_Data *__dest, const Elf_Data *__src,
- unsigned int __encode);
-
-
-/* Return error code of last failing function call. This value is kept
- separately for each thread. */
-extern int elf_errno (void);
-
-/* Return error string for ERROR. If ERROR is zero, return error string
- for most recent error or NULL is none occurred. If ERROR is -1 the
- behaviour is similar to the last case except that not NULL but a legal
- string is returned. */
-extern const char *elf_errmsg (int __error);
-
-
-/* Coordinate ELF library and application versions. */
-extern unsigned int elf_version (unsigned int __version);
-
-/* Set fill bytes used to fill holes in data structures. */
-extern void elf_fill (int __fill);
-
-/* Compute hash value. */
-extern unsigned long int elf_hash (const char *__string)
- __attribute__ ((__pure__));
-
-/* Compute hash value using the GNU-specific hash function. */
-extern unsigned long int elf_gnu_hash (const char *__string)
- __attribute__ ((__pure__));
-
-
-/* Compute simple checksum from permanent parts of the ELF file. */
-extern long int elf32_checksum (Elf *__elf);
-/* Similar but this time the binary calls is ELFCLASS64. */
-extern long int elf64_checksum (Elf *__elf);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* libelf.h */
diff --git a/libelf/libelf.map b/libelf/libelf.map
deleted file mode 100644
index c253777..0000000
--- a/libelf/libelf.map
+++ /dev/null
@@ -1,130 +0,0 @@
-ELFUTILS_1.0 {
- global:
- elf32_checksum;
- elf32_fsize;
- elf32_getehdr;
- elf32_getphdr;
- elf32_getshdr;
- elf32_newehdr;
- elf32_newphdr;
- elf32_xlatetof;
- elf32_xlatetom;
- elf64_checksum;
- elf64_fsize;
- elf64_getehdr;
- elf64_getphdr;
- elf64_getshdr;
- elf64_newehdr;
- elf64_newphdr;
- elf64_xlatetof;
- elf64_xlatetom;
- elf_begin;
- elf_clone;
- elf_cntl;
- elf_end;
- elf_errmsg;
- elf_errno;
- elf_fill;
- elf_flagdata;
- elf_flagehdr;
- elf_flagelf;
- elf_flagphdr;
- elf_flagscn;
- elf_flagshdr;
- elf_getarhdr;
- elf_getarsym;
- elf_getbase;
- elf_getdata;
- elf_getident;
- elf_getscn;
- elf_getshnum;
- elf_getshstrndx;
- elf_hash;
- elf_kind;
- elf_memory;
- elf_ndxscn;
- elf_newdata;
- elf_newscn;
- elf_next;
- elf_nextscn;
- elf_rand;
- elf_rawdata;
- elf_rawfile;
- elf_scncnt;
- elf_strptr;
- elf_update;
- elf_version;
- gelf_checksum;
- gelf_fsize;
- gelf_getclass;
- gelf_getdyn;
- gelf_getehdr;
- gelf_getmove;
- gelf_getphdr;
- gelf_getrel;
- gelf_getrela;
- gelf_getshdr;
- gelf_getsym;
- gelf_getsyminfo;
- gelf_getsymshndx;
- gelf_getverdaux;
- gelf_getverdef;
- gelf_getvernaux;
- gelf_getverneed;
- gelf_getversym;
- gelf_newehdr;
- gelf_newphdr;
- gelf_update_dyn;
- gelf_update_ehdr;
- gelf_update_move;
- gelf_update_phdr;
- gelf_update_rel;
- gelf_update_rela;
- gelf_update_shdr;
- gelf_update_sym;
- gelf_update_syminfo;
- gelf_update_symshndx;
- gelf_update_verdaux;
- gelf_update_verdef;
- gelf_update_vernaux;
- gelf_update_verneed;
- gelf_update_versym;
- gelf_xlatetof;
- gelf_xlatetom;
- nlist;
-
- local:
- *;
-};
-
-ELFUTILS_1.1 {
- global:
- gelf_getlib;
- gelf_update_lib;
-} ELFUTILS_1.0;
-
-ELFUTILS_1.1.1 {
- global:
- elf32_offscn;
- elf64_offscn;
- gelf_offscn;
- elf_getaroff;
-} ELFUTILS_1.1;
-
-ELFUTILS_1.2 {
- global:
- elf_gnu_hash;
-} ELFUTILS_1.1.1;
-
-ELFUTILS_1.3 {
- global:
- elf_getdata_rawchunk;
- gelf_getauxv;
- gelf_update_auxv;
- gelf_getnote;
-} ELFUTILS_1.2;
-
-ELFUTILS_1.4 {
- global:
- elf_scnshndx;
-} ELFUTILS_1.3;
diff --git a/libelf/libelfP.h b/libelf/libelfP.h
deleted file mode 100644
index e810039..0000000
--- a/libelf/libelfP.h
+++ /dev/null
@@ -1,614 +0,0 @@
-/* Internal interfaces for libelf.
- Copyright (C) 1998-2003, 2005, 2006, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifndef _LIBELFP_H
-#define _LIBELFP_H 1
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <ar.h>
-#include <gelf.h>
-
-#include <errno.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <string.h>
-
-/* gettext helper macros. */
-#define _(Str) dgettext ("libelf", Str)
-
-
-/* Helper Macros to write 32 bit and 64 bit functions. */
-#define __elfw2_(Bits, Name) __elf##Bits##_##Name
-#define elfw2_(Bits, Name) elf##Bits##_##Name
-#define ElfW2_(Bits, Name) Elf##Bits##_##Name
-#define ELFW2_(Bits, Name) ELF##Bits##_##Name
-#define ELFW_(Name, Bits) Name##Bits
-#define __elfw2(Bits, Name) __elfw2_(Bits, Name)
-#define elfw2(Bits, Name) elfw2_(Bits, Name)
-#define ElfW2(Bits, Name) ElfW2_(Bits, Name)
-#define ELFW2(Bits, Name) ELFW2_(Bits, Name)
-#define ELFW(Name, Bits) ELFW_(Name, Bits)
-
-
-/* Sizes of the external types, for 32 bits objects. */
-#define ELF32_FSZ_ADDR 4
-#define ELF32_FSZ_OFF 4
-#define ELF32_FSZ_HALF 2
-#define ELF32_FSZ_WORD 4
-#define ELF32_FSZ_SWORD 4
-#define ELF32_FSZ_XWORD 8
-#define ELF32_FSZ_SXWORD 8
-
-/* Same for 64 bits objects. */
-#define ELF64_FSZ_ADDR 8
-#define ELF64_FSZ_OFF 8
-#define ELF64_FSZ_HALF 2
-#define ELF64_FSZ_WORD 4
-#define ELF64_FSZ_SWORD 4
-#define ELF64_FSZ_XWORD 8
-#define ELF64_FSZ_SXWORD 8
-
-
-/* This is an extension of the ELF_F_* enumeration. The values here are
- not part of the library interface, they are only used internally. */
-enum
-{
- ELF_F_MMAPPED = 0x40,
- ELF_F_MALLOCED = 0x80,
- ELF_F_FILEDATA = 0x100
-};
-
-
-/* Get definition of all the external types. */
-#include "exttypes.h"
-
-
-/* Error values. */
-enum
-{
- ELF_E_NOERROR = 0,
- ELF_E_UNKNOWN_ERROR,
- ELF_E_UNKNOWN_VERSION,
- ELF_E_UNKNOWN_TYPE,
- ELF_E_INVALID_HANDLE,
- ELF_E_SOURCE_SIZE,
- ELF_E_DEST_SIZE,
- ELF_E_INVALID_ENCODING,
- ELF_E_NOMEM,
- ELF_E_INVALID_FILE,
- ELF_E_INVALID_OP,
- ELF_E_NO_VERSION,
- ELF_E_INVALID_CMD,
- ELF_E_RANGE,
- ELF_E_ARCHIVE_FMAG,
- ELF_E_INVALID_ARCHIVE,
- ELF_E_NO_ARCHIVE,
- ELF_E_NO_INDEX,
- ELF_E_READ_ERROR,
- ELF_E_WRITE_ERROR,
- ELF_E_INVALID_CLASS,
- ELF_E_INVALID_INDEX,
- ELF_E_INVALID_OPERAND,
- ELF_E_INVALID_SECTION,
- ELF_E_INVALID_COMMAND,
- ELF_E_WRONG_ORDER_EHDR,
- ELF_E_FD_DISABLED,
- ELF_E_FD_MISMATCH,
- ELF_E_OFFSET_RANGE,
- ELF_E_NOT_NUL_SECTION,
- ELF_E_DATA_MISMATCH,
- ELF_E_INVALID_SECTION_HEADER,
- ELF_E_INVALID_DATA,
- ELF_E_DATA_ENCODING,
- ELF_E_SECTION_TOO_SMALL,
- ELF_E_INVALID_ALIGN,
- ELF_E_INVALID_SHENTSIZE,
- ELF_E_UPDATE_RO,
- ELF_E_NOFILE,
- ELF_E_GROUP_NOT_REL,
- ELF_E_INVALID_PHDR,
- ELF_E_NO_PHDR,
- ELF_E_INVALID_OFFSET,
- /* Keep this as the last entry. */
- ELF_E_NUM
-};
-
-
-/* The visible `Elf_Data' type is not sufficent for some operations due
- to a misdesigned interface. Extend it for internal purposes. */
-typedef struct
-{
- Elf_Data d;
- Elf_Scn *s;
-} Elf_Data_Scn;
-
-
-/* List of `Elf_Data' descriptors. This is what makes up the section
- contents. */
-typedef struct Elf_Data_List
-{
- /* `data' *must* be the first element in the struct. */
- Elf_Data_Scn data;
- struct Elf_Data_List *next;
- int flags;
-} Elf_Data_List;
-
-
-/* Descriptor for ELF section. */
-struct Elf_Scn
-{
- /* We have to distinguish several different situations:
-
- 1. the section is user created. Therefore there is no file or memory
- region to read the data from. Here we have two different subcases:
-
- a) data was not yet added (before the first `elf_newdata' call)
-
- b) at least one data set is available
-
- 2. this is a section from a file/memory region. We have to read the
- current content in one data block if we have to. But we don't
- read the data until it is necessary. So we have the subcases:
-
- a) the section in the file has size zero (for whatever reason)
-
- b) the data of the file is not (yet) read
-
- c) the data is read and available.
-
- In addition to this we have different data sets, the raw and the converted
- data. This distinction only exists for the data read from the file.
- All user-added data set (all but the first when read from the file or
- all of them for user-create sections) are the same in both formats.
- We don't create the converted data before it is necessary.
-
- The `data_read' element signals whether data is available in the
- raw format.
-
- If there is data from the file/memory region or if read one data
- set is added the `rawdata_list_read' pointer in non-NULL and points
- to the last filled data set. `raw_datalist_rear' is therefore NULL
- only if there is no data set at all.
-
- This so far allows to distinguish all but two cases (given that the
- `rawdata_list' and `data_list' entries are initialized to zero) is
- between not yet loaded data from the file/memory region and a section
- with zero size and type ELF_T_BYTE. */
- Elf_Data_List data_list; /* List of data buffers. */
- Elf_Data_List *data_list_rear; /* Pointer to the rear of the data list. */
-
- Elf_Data_Scn rawdata; /* Uninterpreted data of the section. */
-
- int data_read; /* Nonzero if the section was created by the
- user or if the data from the file/memory
- is read. */
- int shndx_index; /* Index of the extended section index
- table for this symbol table (if this
- section is a symbol table). */
-
- size_t index; /* Index of this section. */
- struct Elf *elf; /* The underlying ELF file. */
-
- union
- {
- Elf32_Shdr *e32; /* Pointer to 32bit section header. */
- Elf64_Shdr *e64; /* Pointer to 64bit section header. */
- } shdr;
-
- unsigned int shdr_flags; /* Section header modified? */
- unsigned int flags; /* Section changed in size? */
-
- char *rawdata_base; /* The unmodified data of the section. */
- char *data_base; /* The converted data of the section. */
-
- struct Elf_ScnList *list; /* Pointer the the section list element the
- data is in. */
-};
-
-
-/* List of section. */
-typedef struct Elf_ScnList
-{
- unsigned int cnt; /* Number of elements of 'data' used. */
- unsigned int max; /* Number of elements of 'data' allocated. */
- struct Elf_ScnList *next; /* Next block of sections. */
- struct Elf_Scn data[0]; /* Section data. */
-} Elf_ScnList;
-
-
-/* elf_getdata_rawchunk result. */
-typedef struct Elf_Data_Chunk
-{
- Elf_Data_Scn data;
- union
- {
- Elf_Scn dummy_scn;
- struct Elf_Data_Chunk *next;
- };
-} Elf_Data_Chunk;
-
-
-/* The ELF descriptor. */
-struct Elf
-{
- /* What kind of file is underneath (ELF file, archive...). */
- Elf_Kind kind;
-
- /* Command used to create this descriptor. */
- Elf_Cmd cmd;
-
- /* The binary class. */
- unsigned int class;
-
- /* The used file descriptor. -1 if not available anymore. */
- int fildes;
-
- /* Offset in the archive this file starts or zero. */
- off_t start_offset;
-
- /* Size of the file in the archive or the entire file size, or ~0
- for an (yet) unknown size. */
- size_t maximum_size;
-
- /* Address to which the file was mapped. NULL if not mapped. */
- void *map_address;
-
- /* Describes the way the memory was allocated and if the dirty bit is
- signalled it means that the whole file has to be rewritten since
- the layout changed. */
- int flags;
-
- /* When created for an archive member this points to the descriptor
- for the archive. */
- Elf *parent;
-
- /* Lock to handle multithreaded programs. */
- rwlock_define (,lock);
-
- /* Reference counting for the descriptor. */
- int ref_count;
-
- struct Elf *next; /* Used in list of archive descriptors. */
-
- union
- {
- struct
- {
- int ehdr_flags; /* Flags (dirty) for ELF header. */
- int phdr_flags; /* Flags (dirty|malloc) for program header. */
- int shdr_malloced; /* Nonzero if shdr array was allocated. */
-
- /* The next fields are only useful when testing for ==/!= NULL. */
- void *ehdr;
- void *shdr;
- void *phdr;
-
- Elf_ScnList *scns_last; /* Last element in the section list.
- If NULL the data has not yet been
- read from the file. */
- Elf_Data_Chunk *rawchunks; /* List of elf_getdata_rawchunk results. */
- unsigned int scnincr; /* Number of sections allocate the last
- time. */
- off64_t sizestr_offset; /* Offset of the size string in the parent
- if this is an archive member. */
- } elf;
-
- struct
- {
- int ehdr_flags; /* Flags (dirty) for ELF header. */
- int phdr_flags; /* Flags (dirty|malloc) for program header. */
- int shdr_malloced; /* Nonzero if shdr array was allocated. */
-
- Elf32_Ehdr *ehdr; /* Pointer to the ELF header. This is
- never malloced. */
- Elf32_Shdr *shdr; /* Used when reading from a file. */
- Elf32_Phdr *phdr; /* Pointer to the program header array. */
- Elf_ScnList *scns_last; /* Last element in the section list.
- If NULL the data has not yet been
- read from the file. */
- Elf_Data_Chunk *rawchunks; /* List of elf_getdata_rawchunk results. */
- unsigned int scnincr; /* Number of sections allocate the last
- time. */
- off64_t sizestr_offset; /* Offset of the size string in the parent
- if this is an archive member. */
- Elf32_Ehdr ehdr_mem; /* Memory used for ELF header when not
- mmaped. */
- char __e32scnspad[sizeof (Elf64_Ehdr) - sizeof (Elf32_Ehdr)];
-
- /* The section array. */
- Elf_ScnList scns;
- } elf32;
-
- struct
- {
- int ehdr_flags; /* Flags (dirty) for ELF header. */
- int phdr_flags; /* Flags (dirty|malloc) for program header. */
- int shdr_malloced; /* Nonzero if shdr array was allocated. */
-
- Elf64_Ehdr *ehdr; /* Pointer to the ELF header. This is
- never malloced. */
- Elf64_Shdr *shdr; /* Used when reading from a file. */
- Elf64_Phdr *phdr; /* Pointer to the program header array. */
- Elf_ScnList *scns_last; /* Last element in the section list.
- If NULL the data has not yet been
- read from the file. */
- Elf_Data_Chunk *rawchunks; /* List of elf_getdata_rawchunk results. */
- unsigned int scnincr; /* Number of sections allocate the last
- time. */
- off64_t sizestr_offset; /* Offset of the size string in the parent
- if this is an archive member. */
- Elf64_Ehdr ehdr_mem; /* Memory used for ELF header when not
- mmaped. */
-
- /* The section array. */
- Elf_ScnList scns;
- } elf64;
-
- struct
- {
- int has_index; /* Set when file has index. 0 means
- undecided, > 0 means it has one. */
- Elf_Arsym *ar_sym; /* Symbol table returned by elf_getarsym. */
- size_t ar_sym_num; /* Number of entries in `ar_sym'. */
- char *long_names; /* If no index is available but long names
- are used this elements points to the data.*/
- size_t long_names_len; /* Length of the long name table. */
- off_t offset; /* Offset in file we are currently at.
- elf_next() advances this to the next
- member of the archive. */
- Elf_Arhdr elf_ar_hdr; /* Structure returned by 'elf_getarhdr'. */
- struct ar_hdr ar_hdr; /* Header read from file. */
- char ar_name[16]; /* NUL terminated ar_name of elf_ar_hdr. */
- char raw_name[17]; /* This is a buffer for the NUL terminated
- named raw_name used in the elf_ar_hdr. */
- struct Elf *children; /* List of all descriptors for this archive. */
- } ar;
- } state;
-
- /* There absolutely never must be anything following the union. */
-};
-
-/* Type of the conversion functions. These functions will convert the
- byte order. */
-typedef void (*xfct_t) (void *, const void *, size_t, int);
-
-/* The table with the function pointers. */
-extern const xfct_t __elf_xfctstom[EV_NUM - 1][EV_NUM - 1][ELFCLASSNUM - 1][ELF_T_NUM] attribute_hidden;
-extern const xfct_t __elf_xfctstof[EV_NUM - 1][EV_NUM - 1][ELFCLASSNUM - 1][ELF_T_NUM] attribute_hidden;
-
-
-/* Array with sizes of the external types indexed by ELF version, binary
- class, and type. */
-extern const size_t __libelf_type_sizes[EV_NUM - 1][ELFCLASSNUM - 1][ELF_T_NUM] attribute_hidden;
-/* We often have to access the size for a type in the current version. */
-#if EV_NUM != 2
-# define elf_typesize(class,type,n) \
- elfw2(class,fsize) (type, n, __libelf_version)
-#else
-# define elf_typesize(class,type,n) \
- (__libelf_type_sizes[EV_CURRENT - 1][ELFW(ELFCLASS,class) - 1][type] * n)
-#endif
-
-/* Currently selected version of the ELF specification. */
-extern unsigned int __libelf_version attribute_hidden;
-
-/* The byte value used for filling gaps. */
-extern int __libelf_fill_byte attribute_hidden;
-
-/* Nonzero if the version was set. */
-extern int __libelf_version_initialized attribute_hidden;
-
-/* Index for __libelf_type_sizes et al. */
-#if EV_NUM == 2
-# define LIBELF_EV_IDX 0
-#else
-# define LIBELF_EV_IDX (__libelf_version - 1)
-#endif
-
-#if !ALLOW_UNALIGNED
-/* Array with alignment requirements of the internal types indexed by ELF
- version, binary class, and type. */
-extern const uint_fast8_t __libelf_type_aligns[EV_NUM - 1][ELFCLASSNUM - 1][ELF_T_NUM] attribute_hidden;
-# define __libelf_type_align(class, type) \
- (__libelf_type_aligns[LIBELF_EV_IDX][class - 1][type] ?: 1)
-#else
-# define __libelf_type_align(class, type) 1
-#endif
-
-/* The libelf API does not have such a function but it is still useful.
- Get the memory size for the given type.
-
- These functions cannot be marked internal since they are aliases
- of the export elfXX_fsize functions.*/
-extern size_t __elf32_msize (Elf_Type __type, size_t __count,
- unsigned int __version);
-extern size_t __elf64_msize (Elf_Type __type, size_t __count,
- unsigned int __version);
-
-
-/* Create Elf descriptor from memory image. */
-extern Elf *__libelf_read_mmaped_file (int fildes, void *map_address,
- off_t offset, size_t maxsize,
- Elf_Cmd cmd, Elf *parent)
- internal_function;
-
-/* Set error value. */
-extern void __libelf_seterrno (int value) internal_function;
-
-/* Get the next archive header. */
-extern int __libelf_next_arhdr_wrlock (Elf *elf) internal_function;
-
-/* Read all of the file associated with the descriptor. */
-extern char *__libelf_readall (Elf *elf) internal_function;
-
-/* Read the complete section table and convert the byte order if necessary. */
-extern int __libelf_readsections (Elf *elf) internal_function;
-
-/* Store the information for the raw data in the `rawdata_list' element. */
-extern int __libelf_set_rawdata (Elf_Scn *scn) internal_function;
-extern int __libelf_set_rawdata_wrlock (Elf_Scn *scn) internal_function;
-
-
-/* Helper functions for elf_update. */
-extern off_t __elf32_updatenull_wrlock (Elf *elf, int *change_bop,
- size_t shnum) internal_function;
-extern off_t __elf64_updatenull_wrlock (Elf *elf, int *change_bop,
- size_t shnum) internal_function;
-
-extern int __elf32_updatemmap (Elf *elf, int change_bo, size_t shnum)
- internal_function;
-extern int __elf64_updatemmap (Elf *elf, int change_bo, size_t shnum)
- internal_function;
-extern int __elf32_updatefile (Elf *elf, int change_bo, size_t shnum)
- internal_function;
-extern int __elf64_updatefile (Elf *elf, int change_bo, size_t shnum)
- internal_function;
-
-
-/* Alias for exported functions to avoid PLT entries, and
- rdlock/wrlock variants of these functions. */
-extern int __elf_end_internal (Elf *__elf) attribute_hidden;
-extern Elf *__elf_begin_internal (int __fildes, Elf_Cmd __cmd, Elf *__ref)
- attribute_hidden;
-extern Elf32_Ehdr *__elf32_getehdr_wrlock (Elf *__elf) internal_function;
-extern Elf64_Ehdr *__elf64_getehdr_wrlock (Elf *__elf) internal_function;
-extern Elf32_Ehdr *__elf32_newehdr_internal (Elf *__elf) attribute_hidden;
-extern Elf64_Ehdr *__elf64_newehdr_internal (Elf *__elf) attribute_hidden;
-extern Elf32_Phdr *__elf32_getphdr_internal (Elf *__elf) attribute_hidden;
-extern Elf64_Phdr *__elf64_getphdr_internal (Elf *__elf) attribute_hidden;
-extern Elf32_Phdr *__elf32_getphdr_wrlock (Elf *__elf) attribute_hidden;
-extern Elf64_Phdr *__elf64_getphdr_wrlock (Elf *__elf) attribute_hidden;
-extern Elf32_Phdr *__elf32_newphdr_internal (Elf *__elf, size_t __cnt)
- attribute_hidden;
-extern Elf64_Phdr *__elf64_newphdr_internal (Elf *__elf, size_t __cnt)
- attribute_hidden;
-extern Elf_Scn *__elf32_offscn_internal (Elf *__elf, Elf32_Off __offset)
- attribute_hidden;
-extern Elf_Scn *__elf64_offscn_internal (Elf *__elf, Elf64_Off __offset)
- attribute_hidden;
-extern int __elf_getshnum_rdlock (Elf *__elf, size_t *__dst) internal_function;
-extern int __elf_getshstrndx_internal (Elf *__elf, size_t *__dst)
- attribute_hidden;
-extern Elf32_Shdr *__elf32_getshdr_rdlock (Elf_Scn *__scn) internal_function;
-extern Elf64_Shdr *__elf64_getshdr_rdlock (Elf_Scn *__scn) internal_function;
-extern Elf32_Shdr *__elf32_getshdr_wrlock (Elf_Scn *__scn) internal_function;
-extern Elf64_Shdr *__elf64_getshdr_wrlock (Elf_Scn *__scn) internal_function;
-extern Elf_Scn *__elf_getscn_internal (Elf *__elf, size_t __index)
- attribute_hidden;
-extern Elf_Scn *__elf_nextscn_internal (Elf *__elf, Elf_Scn *__scn)
- attribute_hidden;
-extern int __elf_scnshndx_internal (Elf_Scn *__scn) attribute_hidden;
-extern Elf_Data *__elf_getdata_internal (Elf_Scn *__scn, Elf_Data *__data)
- attribute_hidden;
-extern Elf_Data *__elf_getdata_rdlock (Elf_Scn *__scn, Elf_Data *__data)
- internal_function;
-extern Elf_Data *__elf_rawdata_internal (Elf_Scn *__scn, Elf_Data *__data)
- attribute_hidden;
-extern char *__elf_strptr_internal (Elf *__elf, size_t __index,
- size_t __offset) attribute_hidden;
-extern Elf_Data *__elf32_xlatetom_internal (Elf_Data *__dest,
- const Elf_Data *__src,
- unsigned int __encode)
- attribute_hidden;
-extern Elf_Data *__elf64_xlatetom_internal (Elf_Data *__dest,
- const Elf_Data *__src,
- unsigned int __encode)
- attribute_hidden;
-extern Elf_Data *__elf32_xlatetof_internal (Elf_Data *__dest,
- const Elf_Data *__src,
- unsigned int __encode)
- attribute_hidden;
-extern Elf_Data *__elf64_xlatetof_internal (Elf_Data *__dest,
- const Elf_Data *__src,
- unsigned int __encode)
- attribute_hidden;
-extern unsigned int __elf_version_internal (unsigned int __version)
- attribute_hidden;
-extern unsigned long int __elf_hash_internal (const char *__string)
- __attribute__ ((__pure__, visibility ("hidden")));
-extern long int __elf32_checksum_internal (Elf *__elf) attribute_hidden;
-extern long int __elf64_checksum_internal (Elf *__elf) attribute_hidden;
-
-
-extern GElf_Ehdr *__gelf_getehdr_rdlock (Elf *__elf, GElf_Ehdr *__dest)
- internal_function;
-extern size_t __gelf_fsize_internal (Elf *__elf, Elf_Type __type,
- size_t __count, unsigned int __version)
- attribute_hidden;
-extern GElf_Shdr *__gelf_getshdr_internal (Elf_Scn *__scn, GElf_Shdr *__dst)
- attribute_hidden;
-extern GElf_Sym *__gelf_getsym_internal (Elf_Data *__data, int __ndx,
- GElf_Sym *__dst) attribute_hidden;
-
-
-extern uint32_t __libelf_crc32 (uint32_t crc, unsigned char *buf, size_t len)
- attribute_hidden;
-
-
-/* We often have to update a flag iff a value changed. Make this
- convenient. */
-#define update_if_changed(var, exp, flag) \
- do { \
- __typeof__ (var) *_var = &(var); \
- __typeof__ (exp) _exp = (exp); \
- if (*_var != _exp) \
- { \
- *_var = _exp; \
- (flag) |= ELF_F_DIRTY; \
- } \
- } while (0)
-
-/* Align offset to 4 bytes as needed for note name and descriptor data. */
-#define NOTE_ALIGN(n) (((n) + 3) & -4U)
-
-#endif /* libelfP.h */
diff --git a/libelf/libelf_crc32.c b/libelf/libelf_crc32.c
deleted file mode 100644
index 10ce34c..0000000
--- a/libelf/libelf_crc32.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Copyright (C) 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#define crc32 attribute_hidden __libelf_crc32
-#define LIB_SYSTEM_H 1
-#include <libelf.h>
-#include "../lib/crc32.c"
diff --git a/libelf/libelf_next_prime.c b/libelf/libelf_next_prime.c
deleted file mode 100644
index 1b96012..0000000
--- a/libelf/libelf_next_prime.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Copyright (C) 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#define next_prime attribute_hidden __libelf_next_prime
-#include "../lib/next_prime.c"
diff --git a/libelf/nlist.c b/libelf/nlist.c
deleted file mode 100644
index f1fe176..0000000
--- a/libelf/nlist.c
+++ /dev/null
@@ -1,264 +0,0 @@
-/* Extract symbol list from binary.
- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2005, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <fcntl.h>
-#include <gelf.h>
-#include <libelf.h>
-#include <nlist.h>
-#include <unistd.h>
-
-#include "libelfP.h"
-
-
-struct hashentry
-{
- const char *str;
- GElf_Sym sym;
-};
-#define TYPE struct hashentry
-/* XXX Use a better hash function some day. */
-#define HASHFCT(str, len) INTUSE(elf_hash) (str)
-#define COMPARE(p1, p2) strcmp ((p1)->str, (p2)->str)
-#define CLASS static
-#define PREFIX nlist_
-#define xcalloc(n, m) calloc (n, m)
-#define next_prime(s) __libelf_next_prime (s)
-#include <fixedsizehash.h>
-
-
-int
-nlist (const char *filename, struct nlist *nl)
-{
- int fd;
- Elf *elf;
- Elf_Scn *scn = NULL;
- Elf_Scn *symscn = NULL;
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = NULL;
- Elf_Data *data;
- struct nlist_fshash *table;
- size_t nsyms;
- size_t cnt;
-
- /* Open the file. */
- fd = open (filename, O_RDONLY);
- if (fd == -1)
- {
- __libelf_seterrno (ELF_E_NOFILE);
- goto fail;
- }
-
- /* For compatibility reasons (`nlist' existed before ELF and libelf)
- we don't expect the caller to set the ELF version. Do this here
- if it hasn't happened yet. */
- if (__libelf_version_initialized == 0)
- INTUSE(elf_version) (EV_CURRENT);
-
- /* Now get an ELF descriptor. */
- elf = INTUSE(elf_begin) (fd, ELF_C_READ_MMAP, NULL);
- if (elf == NULL)
- goto fail_fd;
-
- /* Find a symbol table. We prefer the real symbol table but if it
- does not exist use the dynamic symbol table. */
- while ((scn = INTUSE(elf_nextscn) (elf, scn)) != NULL)
- {
- shdr = INTUSE(gelf_getshdr) (scn, &shdr_mem);
- if (shdr == NULL)
- goto fail_close;
-
- /* That is what we are looking for. */
- if (shdr->sh_type == SHT_SYMTAB)
- {
- symscn = scn;
- break;
- }
-
- /* Better than nothing. Remember this section. */
- if (shdr->sh_type == SHT_DYNSYM)
- symscn = scn;
- }
-
- if (symscn == NULL)
- /* We haven't found anything. Fail. */
- goto fail_close;
-
- /* Re-get the section header in case we found only the dynamic symbol
- table. */
- if (scn == NULL)
- shdr = INTUSE(gelf_getshdr) (symscn, &shdr_mem);
- /* SHDR->SH_LINK now contains the index of the string section. */
-
- /* Get the data for the symbol section. */
- data = INTUSE(elf_getdata) (symscn, NULL);
- if (data == NULL)
- goto fail_close;
-
- /* How many symbols are there? */
- nsyms = (shdr->sh_size
- / INTUSE(gelf_fsize) (elf, ELF_T_SYM, 1, data->d_version));
-
- /* Create the hash table. */
- table = nlist_fshash_init (nsyms);
- if (table == NULL)
- {
- __libelf_seterrno (ELF_E_NOMEM);
- goto fail_close;
- }
-
- /* Iterate over all the symbols in the section. */
- for (cnt = 0; cnt < nsyms; ++cnt)
- {
- struct hashentry mem;
- GElf_Sym *sym;
-
- /* Get the symbol. */
- sym = INTUSE(gelf_getsym) (data, cnt, &mem.sym);
- if (sym == NULL)
- goto fail_dealloc;
-
- /* Get the name of the symbol. */
- mem.str = INTUSE(elf_strptr) (elf, shdr->sh_link, sym->st_name);
- if (mem.str == NULL)
- goto fail_dealloc;
-
- /* Don't allow zero-length strings. */
- if (mem.str[0] == '\0')
- continue;
-
- /* And add it to the hash table. Note that we are using the
- overwrite version. This will ensure that
- a) global symbols are preferred over local symbols since
- they are all located at the end
- b) if there are multiple local symbols with the same name
- the last one is used.
- */
- (void) nlist_fshash_overwrite (table, mem.str, 0, &mem);
- }
-
- /* Now it is time to look for the symbols the user asked for.
- XXX What is a `null name/null string'? This is what the
- standard says terminates the list. Is it a null pointer
- or a zero-length string? We test for both... */
- while (nl->n_name != NULL && nl->n_name[0] != '\0')
- {
- struct hashentry search;
- const struct hashentry *found;
-
- /* Search for a matching entry in the hash table. */
- search.str = nl->n_name;
- found = nlist_fshash_find (table, nl->n_name, 0, &search);
-
- if (found != NULL)
- {
- /* Found it. */
- nl->n_value = found->sym.st_value;
- nl->n_scnum = found->sym.st_shndx;
- nl->n_type = GELF_ST_TYPE (found->sym.st_info);
- /* XXX What shall we fill in the next fields? */
- nl->n_sclass = 0;
- nl->n_numaux = 0;
- }
- else
- {
- /* Not there. */
- nl->n_value = 0;
- nl->n_scnum = 0;
- nl->n_type = 0;
- nl->n_sclass = 0;
- nl->n_numaux = 0;
- }
-
- /* Next search request. */
- ++nl;
- }
-
- /* Free the resources. */
- nlist_fshash_fini (table);
-
- /* We do not need the ELF descriptor anymore. */
- (void) INTUSE(elf_end) (elf);
-
- /* Neither the file descriptor. */
- (void) close (fd);
-
- return 0;
-
- fail_dealloc:
- nlist_fshash_fini (table);
-
- fail_close:
- /* We do not need the ELF descriptor anymore. */
- (void) INTUSE(elf_end) (elf);
-
- fail_fd:
- /* Neither the file descriptor. */
- (void) close (fd);
-
- fail:
- /* We have to set all entries to zero. */
- while (nl->n_name != NULL && nl->n_name[0] != '\0')
- {
- nl->n_value = 0;
- nl->n_scnum = 0;
- nl->n_type = 0;
- nl->n_sclass = 0;
- nl->n_numaux = 0;
-
- /* Next entry. */
- ++nl;
- }
-
- return -1;
-}
diff --git a/libelf/nlist.h b/libelf/nlist.h
deleted file mode 100644
index ce6569e..0000000
--- a/libelf/nlist.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* Interface for nlist.
- Copyright (C) 1998, 1999, 2000, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifndef _NLIST_H
-#define _NLIST_H 1
-
-
-/* Symbol list type. */
-struct nlist
-{
- char *n_name; /* Symbol name. */
- long int n_value; /* Value of symbol. */
- short int n_scnum; /* Section number found in. */
- unsigned short int n_type; /* Type of symbol. */
- char n_sclass; /* Storage class. */
- char n_numaux; /* Number of auxiliary entries. */
-};
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Get specified entries from file. */
-extern int nlist (__const char *__filename, struct nlist *__nl);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* nlist.h */
diff --git a/libelf/note_xlate.h b/libelf/note_xlate.h
deleted file mode 100644
index 6e8b78c..0000000
--- a/libelf/note_xlate.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/* Conversion functions for notes.
- Copyright (C) 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-static void
-elf_cvt_note (void *dest, const void *src, size_t len, int encode)
-{
- assert (sizeof (Elf32_Nhdr) == sizeof (Elf64_Nhdr));
-
- while (len > 0)
- {
- (1 ? Elf32_cvt_Nhdr : Elf64_cvt_Nhdr) (dest, src, sizeof (Elf32_Nhdr),
- encode);
- const Elf32_Nhdr *n = encode ? src : dest;
- Elf32_Word namesz = NOTE_ALIGN (n->n_namesz);
- Elf32_Word descsz = NOTE_ALIGN (n->n_descsz);
-
- len -= sizeof *n;
- src += sizeof *n;
- dest += sizeof *n;
-
- if (namesz > len)
- break;
- len -= namesz;
- if (descsz > len)
- break;
- len -= descsz;
-
- if (src != dest)
- memcpy (dest, src, namesz + descsz);
-
- src += namesz + descsz;
- dest += namesz + descsz;
- }
-}
diff --git a/libelf/version_xlate.h b/libelf/version_xlate.h
deleted file mode 100644
index b32cacd..0000000
--- a/libelf/version_xlate.h
+++ /dev/null
@@ -1,241 +0,0 @@
-/* Conversion functions for versioning information.
- Copyright (C) 1998, 1999, 2000, 2002, 2003 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <assert.h>
-#include <gelf.h>
-
-#include "libelfP.h"
-
-
-static void
-elf_cvt_Verdef (void *dest, const void *src, size_t len, int encode)
-{
- /* We have two different record types: ElfXX_Verndef and ElfXX_Verdaux.
- To recognize them we have to walk the data structure and convert
- them one after the other. The ENCODE parameter specifies whether
- we are encoding or decoding. When we are encoding we can immediately
- use the data in the buffer; if not, we have to decode the data before
- using it. */
- size_t def_offset = 0;
- GElf_Verdef *ddest;
- GElf_Verdef *dsrc;
-
- /* We rely on the types being all the same size. */
- assert (sizeof (GElf_Verdef) == sizeof (Elf32_Verdef));
- assert (sizeof (GElf_Verdaux) == sizeof (Elf32_Verdaux));
- assert (sizeof (GElf_Verdef) == sizeof (Elf64_Verdef));
- assert (sizeof (GElf_Verdaux) == sizeof (Elf64_Verdaux));
-
- if (len == 0)
- return;
-
- do
- {
- size_t aux_offset;
- GElf_Verdaux *asrc;
-
- /* Test for correct offset. */
- if (def_offset + sizeof (GElf_Verdef) > len)
- return;
-
- /* Work the tree from the first record. */
- ddest = (GElf_Verdef *) ((char *) dest + def_offset);
- dsrc = (GElf_Verdef *) ((char *) src + def_offset);
-
- /* Decode first if necessary. */
- if (! encode)
- {
- ddest->vd_version = bswap_16 (dsrc->vd_version);
- ddest->vd_flags = bswap_16 (dsrc->vd_flags);
- ddest->vd_ndx = bswap_16 (dsrc->vd_ndx);
- ddest->vd_cnt = bswap_16 (dsrc->vd_cnt);
- ddest->vd_hash = bswap_32 (dsrc->vd_hash);
- ddest->vd_aux = bswap_32 (dsrc->vd_aux);
- ddest->vd_next = bswap_32 (dsrc->vd_next);
-
- aux_offset = def_offset + ddest->vd_aux;
- }
- else
- aux_offset = def_offset + dsrc->vd_aux;
-
- /* Handle all the auxiliary records belonging to this definition. */
- do
- {
- GElf_Verdaux *adest;
-
- /* Test for correct offset. */
- if (aux_offset + sizeof (GElf_Verdaux) > len)
- return;
-
- adest = (GElf_Verdaux *) ((char *) dest + aux_offset);
- asrc = (GElf_Verdaux *) ((char *) src + aux_offset);
-
- if (encode)
- aux_offset += asrc->vda_next;
-
- adest->vda_name = bswap_32 (asrc->vda_name);
- adest->vda_next = bswap_32 (asrc->vda_next);
-
- if (! encode)
- aux_offset += adest->vda_next;
- }
- while (asrc->vda_next != 0);
-
- /* Encode now if necessary. */
- if (encode)
- {
- def_offset += dsrc->vd_next;
-
- ddest->vd_version = bswap_16 (dsrc->vd_version);
- ddest->vd_flags = bswap_16 (dsrc->vd_flags);
- ddest->vd_ndx = bswap_16 (dsrc->vd_ndx);
- ddest->vd_cnt = bswap_16 (dsrc->vd_cnt);
- ddest->vd_hash = bswap_32 (dsrc->vd_hash);
- ddest->vd_aux = bswap_32 (dsrc->vd_aux);
- ddest->vd_next = bswap_32 (dsrc->vd_next);
- }
- else
- def_offset += ddest->vd_next;
- }
- while (dsrc->vd_next != 0);
-}
-
-
-static void
-elf_cvt_Verneed (void *dest, const void *src, size_t len, int encode)
-{
- /* We have two different record types: ElfXX_Verndef and ElfXX_Verdaux.
- To recognize them we have to walk the data structure and convert
- them one after the other. The ENCODE parameter specifies whether
- we are encoding or decoding. When we are encoding we can immediately
- use the data in the buffer; if not, we have to decode the data before
- using it. */
- size_t need_offset = 0;
- GElf_Verneed *ndest;
- GElf_Verneed *nsrc;
-
- /* We rely on the types being all the same size. */
- assert (sizeof (GElf_Verneed) == sizeof (Elf32_Verneed));
- assert (sizeof (GElf_Vernaux) == sizeof (Elf32_Vernaux));
- assert (sizeof (GElf_Verneed) == sizeof (Elf64_Verneed));
- assert (sizeof (GElf_Vernaux) == sizeof (Elf64_Vernaux));
-
- if (len == 0)
- return;
-
- do
- {
- size_t aux_offset;
- GElf_Vernaux *asrc;
-
- /* Test for correct offset. */
- if (need_offset + sizeof (GElf_Verneed) > len)
- return;
-
- /* Work the tree from the first record. */
- ndest = (GElf_Verneed *) ((char *) dest + need_offset);
- nsrc = (GElf_Verneed *) ((char *) src + need_offset);
-
- /* Decode first if necessary. */
- if (! encode)
- {
- ndest->vn_version = bswap_16 (nsrc->vn_version);
- ndest->vn_cnt = bswap_16 (nsrc->vn_cnt);
- ndest->vn_file = bswap_32 (nsrc->vn_file);
- ndest->vn_aux = bswap_32 (nsrc->vn_aux);
- ndest->vn_next = bswap_32 (nsrc->vn_next);
-
- aux_offset = need_offset + ndest->vn_aux;
- }
- else
- aux_offset = need_offset + nsrc->vn_aux;
-
- /* Handle all the auxiliary records belonging to this requirement. */
- do
- {
- GElf_Vernaux *adest;
-
- /* Test for correct offset. */
- if (aux_offset + sizeof (GElf_Vernaux) > len)
- return;
-
- adest = (GElf_Vernaux *) ((char *) dest + aux_offset);
- asrc = (GElf_Vernaux *) ((char *) src + aux_offset);
-
- if (encode)
- aux_offset += asrc->vna_next;
-
- adest->vna_hash = bswap_32 (asrc->vna_hash);
- adest->vna_flags = bswap_16 (asrc->vna_flags);
- adest->vna_other = bswap_16 (asrc->vna_other);
- adest->vna_name = bswap_32 (asrc->vna_name);
- adest->vna_next = bswap_32 (asrc->vna_next);
-
- if (! encode)
- aux_offset += adest->vna_next;
- }
- while (asrc->vna_next != 0);
-
- /* Encode now if necessary. */
- if (encode)
- {
- need_offset += nsrc->vn_next;
-
- ndest->vn_version = bswap_16 (nsrc->vn_version);
- ndest->vn_cnt = bswap_16 (nsrc->vn_cnt);
- ndest->vn_file = bswap_32 (nsrc->vn_file);
- ndest->vn_aux = bswap_32 (nsrc->vn_aux);
- ndest->vn_next = bswap_32 (nsrc->vn_next);
- }
- else
- need_offset += ndest->vn_next;
- }
- while (nsrc->vn_next != 0);
-}
diff --git a/m4/ChangeLog b/m4/ChangeLog
deleted file mode 100644
index e285a0e..0000000
--- a/m4/ChangeLog
+++ /dev/null
@@ -1,39 +0,0 @@
-2007-06-05 Ulrich Drepper <drepper@redhat.com>
-
- * gettext.m4: Update from gettext 0.16.1.
- * iconv.m4: Likewise.
- * progtest.m4: Likewise.
- * nls.m4: New file.
- * po.m4: New file.
-
-2005-02-15 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am (EXTRA_DIST): Remove glibc21.m4, intdiv0.m4,
- inttypes.m4, inttypes_h.m4, inttypes-pri.m4, isc-posix.m4,
- lib-ld.m4, lib-link.m4, lib-prefix.m4, stdint_h.m4, uintmax_t.m4,
- and ulonglong.m4.
- * glibc21.m4: Removed.
- * inttypes_h.m4: Removed.
- * inttypes.m4: Removed.
- * inttypes-pri.m4: Removed.
- * isc-posix.m4: Removed.
- * lib-ld.m4: Removed.
- * lib-link.m4: Removed.
- * lib-prefix.m4: Removed.
- * stdint_h.m4: Removed.
- * uintmax_t.m4: Removed.
- * ulonglong.m4: Removed.
-
-2002-03-22 gettextize <bug-gnu-gettext@gnu.org>
-
- * codeset.m4: Upgrade to gettext-0.11.
- * gettext.m4: Upgrade to gettext-0.11.
- * glibc21.m4: Upgrade to gettext-0.11.
- * iconv.m4: Upgrade to gettext-0.11.
- * isc-posix.m4: New file, from gettext-0.11.
- * lcmessage.m4: Upgrade to gettext-0.11.
- * lib-ld.m4: Upgrade to gettext-0.11.
- * lib-link.m4: Upgrade to gettext-0.11.
- * lib-prefix.m4: Upgrade to gettext-0.11.
- * progtest.m4: Upgrade to gettext-0.11.
- * Makefile.am (EXTRA_DIST): Add the new files.
diff --git a/m4/Makefile.am b/m4/Makefile.am
deleted file mode 100644
index dd955e6..0000000
--- a/m4/Makefile.am
+++ /dev/null
@@ -1,29 +0,0 @@
-## Process this file with automake to produce Makefile.in -*-Makefile-*-
-##
-## Copyright (C) 2000, 2001, 2002, 2004, 2005 Red Hat, Inc.
-## This file is part of Red Hat elfutils.
-##
-## Red Hat elfutils is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by the
-## Free Software Foundation; version 2 of the License.
-##
-## Red Hat elfutils 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
-## General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License along
-## with Red Hat elfutils; if not, write to the Free Software Foundation,
-## Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-##
-## Red Hat elfutils is an included package of the Open Invention Network.
-## An included package of the Open Invention Network is a package for which
-## Open Invention Network licensees cross-license their patents. No patent
-## license is granted, either expressly or impliedly, by designation as an
-## included package. Should you wish to participate in the Open Invention
-## Network licensing program, please visit www.openinventionnetwork.com
-## <http://www.openinventionnetwork.com>.
-##
-
-##m4-files-begin
-EXTRA_DIST = codeset.m4 gettext.m4 iconv.m4 lcmessage.m4 progtest.m4
diff --git a/m4/Makefile.in b/m4/Makefile.in
deleted file mode 100644
index 614c5cb..0000000
--- a/m4/Makefile.in
+++ /dev/null
@@ -1,321 +0,0 @@
-# Makefile.in generated by automake 1.10.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = m4
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ChangeLog
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-SOURCES =
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEBUGPRED = @DEBUGPRED@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EXEEXT = @EXEEXT@
-GMSGFMT = @GMSGFMT@
-GMSGFMT_015 = @GMSGFMT_015@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LDFLAGS = @LDFLAGS@
-LEX = @LEX@
-LEXLIB = @LEXLIB@
-LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
-LIBEBL_SUBDIR = @LIBEBL_SUBDIR@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LOCALEDIR = @LOCALEDIR@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MKDIR_P = @MKDIR_P@
-MODVERSION = @MODVERSION@
-MSGFMT = @MSGFMT@
-MSGFMT_015 = @MSGFMT_015@
-MSGMERGE = @MSGMERGE@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-RANLIB = @RANLIB@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-USE_NLS = @USE_NLS@
-VERSION = @VERSION@
-XGETTEXT = @XGETTEXT@
-XGETTEXT_015 = @XGETTEXT_015@
-YACC = @YACC@
-YFLAGS = @YFLAGS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-base_cpu = @base_cpu@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-eu_version = @eu_version@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-EXTRA_DIST = codeset.m4 gettext.m4 iconv.m4 lcmessage.m4 progtest.m4
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
- && exit 0; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits m4/Makefile'; \
- cd $(top_srcdir) && \
- $(AUTOMAKE) --gnits m4/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- list='$(DISTFILES)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
- fi; \
- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
- else \
- test -f $(distdir)/$$file \
- || cp -p $$d/$$file $(distdir)/$$file \
- || exit 1; \
- fi; \
- done
-check-am: all-am
-check: check-am
-all-am: Makefile
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic mostlyclean-am
-
-distclean: distclean-am
- -rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-info: install-info-am
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-ps: install-ps-am
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic distclean \
- distclean-generic distdir dvi dvi-am html html-am info info-am \
- install install-am install-data install-data-am install-dvi \
- install-dvi-am install-exec install-exec-am install-html \
- install-html-am install-info install-info-am install-man \
- install-pdf install-pdf-am install-ps install-ps-am \
- install-strip installcheck installcheck-am installdirs \
- maintainer-clean maintainer-clean-generic mostlyclean \
- mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/m4/codeset.m4 b/m4/codeset.m4
deleted file mode 100644
index 59535eb..0000000
--- a/m4/codeset.m4
+++ /dev/null
@@ -1,23 +0,0 @@
-# codeset.m4 serial AM1 (gettext-0.10.40)
-dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Bruno Haible.
-
-AC_DEFUN([AM_LANGINFO_CODESET],
-[
- AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset,
- [AC_TRY_LINK([#include <langinfo.h>],
- [char* cs = nl_langinfo(CODESET);],
- am_cv_langinfo_codeset=yes,
- am_cv_langinfo_codeset=no)
- ])
- if test $am_cv_langinfo_codeset = yes; then
- AC_DEFINE(HAVE_LANGINFO_CODESET, 1,
- [Define if you have <langinfo.h> and nl_langinfo(CODESET).])
- fi
-])
diff --git a/m4/gettext.m4 b/m4/gettext.m4
deleted file mode 100644
index 91c345e..0000000
--- a/m4/gettext.m4
+++ /dev/null
@@ -1,419 +0,0 @@
-# gettext.m4 serial 59 (gettext-0.16.1)
-dnl Copyright (C) 1995-2006 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-dnl
-dnl This file can can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Library General Public
-dnl License but which still want to provide support for the GNU gettext
-dnl functionality.
-dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Library General Public License, and the rest of the GNU
-dnl gettext package package is covered by the GNU General Public License.
-dnl They are *not* in the public domain.
-
-dnl Authors:
-dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
-dnl Bruno Haible <haible@clisp.cons.org>, 2000-2006.
-
-dnl Macro to add for using GNU gettext.
-
-dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
-dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The
-dnl default (if it is not specified or empty) is 'no-libtool'.
-dnl INTLSYMBOL should be 'external' for packages with no intl directory,
-dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory.
-dnl If INTLSYMBOL is 'use-libtool', then a libtool library
-dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static,
-dnl depending on --{enable,disable}-{shared,static} and on the presence of
-dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library
-dnl $(top_builddir)/intl/libintl.a will be created.
-dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
-dnl implementations (in libc or libintl) without the ngettext() function
-dnl will be ignored. If NEEDSYMBOL is specified and is
-dnl 'need-formatstring-macros', then GNU gettext implementations that don't
-dnl support the ISO C 99 <inttypes.h> formatstring macros will be ignored.
-dnl INTLDIR is used to find the intl libraries. If empty,
-dnl the value `$(top_builddir)/intl/' is used.
-dnl
-dnl The result of the configuration is one of three cases:
-dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
-dnl and used.
-dnl Catalog format: GNU --> install in $(datadir)
-dnl Catalog extension: .mo after installation, .gmo in source tree
-dnl 2) GNU gettext has been found in the system's C library.
-dnl Catalog format: GNU --> install in $(datadir)
-dnl Catalog extension: .mo after installation, .gmo in source tree
-dnl 3) No internationalization, always use English msgid.
-dnl Catalog format: none
-dnl Catalog extension: none
-dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur.
-dnl The use of .gmo is historical (it was needed to avoid overwriting the
-dnl GNU format catalogs when building on a platform with an X/Open gettext),
-dnl but we keep it in order not to force irrelevant filename changes on the
-dnl maintainers.
-dnl
-AC_DEFUN([AM_GNU_GETTEXT],
-[
- dnl Argument checking.
- ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], ,
- [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
-])])])])])
- ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
- [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
-])])])])
- define([gt_included_intl],
- ifelse([$1], [external],
- ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]),
- [yes]))
- define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], []))
- gt_NEEDS_INIT
- AM_GNU_GETTEXT_NEED([$2])
-
- AC_REQUIRE([AM_PO_SUBDIRS])dnl
- ifelse(gt_included_intl, yes, [
- AC_REQUIRE([AM_INTL_SUBDIR])dnl
- ])
-
- dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
- AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
- AC_REQUIRE([AC_LIB_RPATH])
-
- dnl Sometimes libintl requires libiconv, so first search for libiconv.
- dnl Ideally we would do this search only after the
- dnl if test "$USE_NLS" = "yes"; then
- dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
- dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT
- dnl the configure script would need to contain the same shell code
- dnl again, outside any 'if'. There are two solutions:
- dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
- dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
- dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not
- dnl documented, we avoid it.
- ifelse(gt_included_intl, yes, , [
- AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
- ])
-
- dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation.
- gt_INTL_MACOSX
-
- dnl Set USE_NLS.
- AC_REQUIRE([AM_NLS])
-
- ifelse(gt_included_intl, yes, [
- BUILD_INCLUDED_LIBINTL=no
- USE_INCLUDED_LIBINTL=no
- ])
- LIBINTL=
- LTLIBINTL=
- POSUB=
-
- dnl Add a version number to the cache macros.
- case " $gt_needs " in
- *" need-formatstring-macros "*) gt_api_version=3 ;;
- *" need-ngettext "*) gt_api_version=2 ;;
- *) gt_api_version=1 ;;
- esac
- gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
- gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
-
- dnl If we use NLS figure out what method
- if test "$USE_NLS" = "yes"; then
- gt_use_preinstalled_gnugettext=no
- ifelse(gt_included_intl, yes, [
- AC_MSG_CHECKING([whether included gettext is requested])
- AC_ARG_WITH(included-gettext,
- [ --with-included-gettext use the GNU gettext library included here],
- nls_cv_force_use_gnu_gettext=$withval,
- nls_cv_force_use_gnu_gettext=no)
- AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
-
- nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
- if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
- ])
- dnl User does not insist on using GNU NLS library. Figure out what
- dnl to use. If GNU gettext is available we use this. Else we have
- dnl to fall back to GNU NLS library.
-
- if test $gt_api_version -ge 3; then
- gt_revision_test_code='
-#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
-#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
-#endif
-changequote(,)dnl
-typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
-changequote([,])dnl
-'
- else
- gt_revision_test_code=
- fi
- if test $gt_api_version -ge 2; then
- gt_expression_test_code=' + * ngettext ("", "", 0)'
- else
- gt_expression_test_code=
- fi
-
- AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc],
- [AC_TRY_LINK([#include <libintl.h>
-$gt_revision_test_code
-extern int _nl_msg_cat_cntr;
-extern int *_nl_domain_bindings;],
- [bindtextdomain ("", "");
-return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings],
- [eval "$gt_func_gnugettext_libc=yes"],
- [eval "$gt_func_gnugettext_libc=no"])])
-
- if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
- dnl Sometimes libintl requires libiconv, so first search for libiconv.
- ifelse(gt_included_intl, yes, , [
- AM_ICONV_LINK
- ])
- dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
- dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv])
- dnl because that would add "-liconv" to LIBINTL and LTLIBINTL
- dnl even if libiconv doesn't exist.
- AC_LIB_LINKFLAGS_BODY([intl])
- AC_CACHE_CHECK([for GNU gettext in libintl],
- [$gt_func_gnugettext_libintl],
- [gt_save_CPPFLAGS="$CPPFLAGS"
- CPPFLAGS="$CPPFLAGS $INCINTL"
- gt_save_LIBS="$LIBS"
- LIBS="$LIBS $LIBINTL"
- dnl Now see whether libintl exists and does not depend on libiconv.
- AC_TRY_LINK([#include <libintl.h>
-$gt_revision_test_code
-extern int _nl_msg_cat_cntr;
-extern
-#ifdef __cplusplus
-"C"
-#endif
-const char *_nl_expand_alias (const char *);],
- [bindtextdomain ("", "");
-return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
- [eval "$gt_func_gnugettext_libintl=yes"],
- [eval "$gt_func_gnugettext_libintl=no"])
- dnl Now see whether libintl exists and depends on libiconv.
- if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
- LIBS="$LIBS $LIBICONV"
- AC_TRY_LINK([#include <libintl.h>
-$gt_revision_test_code
-extern int _nl_msg_cat_cntr;
-extern
-#ifdef __cplusplus
-"C"
-#endif
-const char *_nl_expand_alias (const char *);],
- [bindtextdomain ("", "");
-return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
- [LIBINTL="$LIBINTL $LIBICONV"
- LTLIBINTL="$LTLIBINTL $LTLIBICONV"
- eval "$gt_func_gnugettext_libintl=yes"
- ])
- fi
- CPPFLAGS="$gt_save_CPPFLAGS"
- LIBS="$gt_save_LIBS"])
- fi
-
- dnl If an already present or preinstalled GNU gettext() is found,
- dnl use it. But if this macro is used in GNU gettext, and GNU
- dnl gettext is already preinstalled in libintl, we update this
- dnl libintl. (Cf. the install rule in intl/Makefile.in.)
- if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
- || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
- && test "$PACKAGE" != gettext-runtime \
- && test "$PACKAGE" != gettext-tools; }; then
- gt_use_preinstalled_gnugettext=yes
- else
- dnl Reset the values set by searching for libintl.
- LIBINTL=
- LTLIBINTL=
- INCINTL=
- fi
-
- ifelse(gt_included_intl, yes, [
- if test "$gt_use_preinstalled_gnugettext" != "yes"; then
- dnl GNU gettext is not found in the C library.
- dnl Fall back on included GNU gettext library.
- nls_cv_use_gnu_gettext=yes
- fi
- fi
-
- if test "$nls_cv_use_gnu_gettext" = "yes"; then
- dnl Mark actions used to generate GNU NLS library.
- BUILD_INCLUDED_LIBINTL=yes
- USE_INCLUDED_LIBINTL=yes
- LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD"
- LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD"
- LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
- fi
-
- CATOBJEXT=
- if test "$gt_use_preinstalled_gnugettext" = "yes" \
- || test "$nls_cv_use_gnu_gettext" = "yes"; then
- dnl Mark actions to use GNU gettext tools.
- CATOBJEXT=.gmo
- fi
- ])
-
- if test -n "$INTL_MACOSX_LIBS"; then
- if test "$gt_use_preinstalled_gnugettext" = "yes" \
- || test "$nls_cv_use_gnu_gettext" = "yes"; then
- dnl Some extra flags are needed during linking.
- LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
- LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
- fi
- fi
-
- if test "$gt_use_preinstalled_gnugettext" = "yes" \
- || test "$nls_cv_use_gnu_gettext" = "yes"; then
- AC_DEFINE(ENABLE_NLS, 1,
- [Define to 1 if translation of program messages to the user's native language
- is requested.])
- else
- USE_NLS=no
- fi
- fi
-
- AC_MSG_CHECKING([whether to use NLS])
- AC_MSG_RESULT([$USE_NLS])
- if test "$USE_NLS" = "yes"; then
- AC_MSG_CHECKING([where the gettext function comes from])
- if test "$gt_use_preinstalled_gnugettext" = "yes"; then
- if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
- gt_source="external libintl"
- else
- gt_source="libc"
- fi
- else
- gt_source="included intl directory"
- fi
- AC_MSG_RESULT([$gt_source])
- fi
-
- if test "$USE_NLS" = "yes"; then
-
- if test "$gt_use_preinstalled_gnugettext" = "yes"; then
- if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
- AC_MSG_CHECKING([how to link with libintl])
- AC_MSG_RESULT([$LIBINTL])
- AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])
- fi
-
- dnl For backward compatibility. Some packages may be using this.
- AC_DEFINE(HAVE_GETTEXT, 1,
- [Define if the GNU gettext() function is already present or preinstalled.])
- AC_DEFINE(HAVE_DCGETTEXT, 1,
- [Define if the GNU dcgettext() function is already present or preinstalled.])
- fi
-
- dnl We need to process the po/ directory.
- POSUB=po
- fi
-
- ifelse(gt_included_intl, yes, [
- dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
- dnl to 'yes' because some of the testsuite requires it.
- if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
- BUILD_INCLUDED_LIBINTL=yes
- fi
-
- dnl Make all variables we use known to autoconf.
- AC_SUBST(BUILD_INCLUDED_LIBINTL)
- AC_SUBST(USE_INCLUDED_LIBINTL)
- AC_SUBST(CATOBJEXT)
-
- dnl For backward compatibility. Some configure.ins may be using this.
- nls_cv_header_intl=
- nls_cv_header_libgt=
-
- dnl For backward compatibility. Some Makefiles may be using this.
- DATADIRNAME=share
- AC_SUBST(DATADIRNAME)
-
- dnl For backward compatibility. Some Makefiles may be using this.
- INSTOBJEXT=.mo
- AC_SUBST(INSTOBJEXT)
-
- dnl For backward compatibility. Some Makefiles may be using this.
- GENCAT=gencat
- AC_SUBST(GENCAT)
-
- dnl For backward compatibility. Some Makefiles may be using this.
- INTLOBJS=
- if test "$USE_INCLUDED_LIBINTL" = yes; then
- INTLOBJS="\$(GETTOBJS)"
- fi
- AC_SUBST(INTLOBJS)
-
- dnl Enable libtool support if the surrounding package wishes it.
- INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix
- AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX)
- ])
-
- dnl For backward compatibility. Some Makefiles may be using this.
- INTLLIBS="$LIBINTL"
- AC_SUBST(INTLLIBS)
-
- dnl Make all documented variables known to autoconf.
- AC_SUBST(LIBINTL)
- AC_SUBST(LTLIBINTL)
- AC_SUBST(POSUB)
-])
-
-
-dnl Checks for special options needed on MacOS X.
-dnl Defines INTL_MACOSX_LIBS.
-AC_DEFUN([gt_INTL_MACOSX],
-[
- dnl Check for API introduced in MacOS X 10.2.
- AC_CACHE_CHECK([for CFPreferencesCopyAppValue],
- gt_cv_func_CFPreferencesCopyAppValue,
- [gt_save_LIBS="$LIBS"
- LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
- AC_TRY_LINK([#include <CoreFoundation/CFPreferences.h>],
- [CFPreferencesCopyAppValue(NULL, NULL)],
- [gt_cv_func_CFPreferencesCopyAppValue=yes],
- [gt_cv_func_CFPreferencesCopyAppValue=no])
- LIBS="$gt_save_LIBS"])
- if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
- AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], 1,
- [Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.])
- fi
- dnl Check for API introduced in MacOS X 10.3.
- AC_CACHE_CHECK([for CFLocaleCopyCurrent], gt_cv_func_CFLocaleCopyCurrent,
- [gt_save_LIBS="$LIBS"
- LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
- AC_TRY_LINK([#include <CoreFoundation/CFLocale.h>], [CFLocaleCopyCurrent();],
- [gt_cv_func_CFLocaleCopyCurrent=yes],
- [gt_cv_func_CFLocaleCopyCurrent=no])
- LIBS="$gt_save_LIBS"])
- if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
- AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], 1,
- [Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework.])
- fi
- INTL_MACOSX_LIBS=
- if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
- INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
- fi
- AC_SUBST([INTL_MACOSX_LIBS])
-])
-
-
-dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized.
-m4_define([gt_NEEDS_INIT],
-[
- m4_divert_text([DEFAULTS], [gt_needs=])
- m4_define([gt_NEEDS_INIT], [])
-])
-
-
-dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL])
-AC_DEFUN([AM_GNU_GETTEXT_NEED],
-[
- m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"])
-])
-
-
-dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
-AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
diff --git a/m4/iconv.m4 b/m4/iconv.m4
deleted file mode 100644
index 654c415..0000000
--- a/m4/iconv.m4
+++ /dev/null
@@ -1,101 +0,0 @@
-# iconv.m4 serial AM4 (gettext-0.11.3)
-dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible.
-
-AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
-[
- dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
- AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
- AC_REQUIRE([AC_LIB_RPATH])
-
- dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
- dnl accordingly.
- AC_LIB_LINKFLAGS_BODY([iconv])
-])
-
-AC_DEFUN([AM_ICONV_LINK],
-[
- dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
- dnl those with the standalone portable GNU libiconv installed).
-
- dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
- dnl accordingly.
- AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
-
- dnl Add $INCICONV to CPPFLAGS before performing the following checks,
- dnl because if the user has installed libiconv and not disabled its use
- dnl via --without-libiconv-prefix, he wants to use it. The first
- dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed.
- am_save_CPPFLAGS="$CPPFLAGS"
- AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
-
- AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [
- am_cv_func_iconv="no, consider installing GNU libiconv"
- am_cv_lib_iconv=no
- AC_TRY_LINK([#include <stdlib.h>
-#include <iconv.h>],
- [iconv_t cd = iconv_open("","");
- iconv(cd,NULL,NULL,NULL,NULL);
- iconv_close(cd);],
- am_cv_func_iconv=yes)
- if test "$am_cv_func_iconv" != yes; then
- am_save_LIBS="$LIBS"
- LIBS="$LIBS $LIBICONV"
- AC_TRY_LINK([#include <stdlib.h>
-#include <iconv.h>],
- [iconv_t cd = iconv_open("","");
- iconv(cd,NULL,NULL,NULL,NULL);
- iconv_close(cd);],
- am_cv_lib_iconv=yes
- am_cv_func_iconv=yes)
- LIBS="$am_save_LIBS"
- fi
- ])
- if test "$am_cv_func_iconv" = yes; then
- AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
- fi
- if test "$am_cv_lib_iconv" = yes; then
- AC_MSG_CHECKING([how to link with libiconv])
- AC_MSG_RESULT([$LIBICONV])
- else
- dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
- dnl either.
- CPPFLAGS="$am_save_CPPFLAGS"
- LIBICONV=
- LTLIBICONV=
- fi
- AC_SUBST(LIBICONV)
- AC_SUBST(LTLIBICONV)
-])
-
-AC_DEFUN([AM_ICONV],
-[
- AM_ICONV_LINK
- if test "$am_cv_func_iconv" = yes; then
- AC_MSG_CHECKING([for iconv declaration])
- AC_CACHE_VAL(am_cv_proto_iconv, [
- AC_TRY_COMPILE([
-#include <stdlib.h>
-#include <iconv.h>
-extern
-#ifdef __cplusplus
-"C"
-#endif
-#if defined(__STDC__) || defined(__cplusplus)
-size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
-#else
-size_t iconv();
-#endif
-], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const")
- am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
- am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
- AC_MSG_RESULT([$]{ac_t:-
- }[$]am_cv_proto_iconv)
- AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1,
- [Define as const if the declaration of iconv() needs const.])
- fi
-])
diff --git a/m4/lcmessage.m4 b/m4/lcmessage.m4
deleted file mode 100644
index ffbf915..0000000
--- a/m4/lcmessage.m4
+++ /dev/null
@@ -1,32 +0,0 @@
-# lcmessage.m4 serial 2 (gettext-0.10.40)
-dnl Copyright (C) 1995-2002 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-dnl
-dnl This file can can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Library General Public
-dnl License but which still want to provide support for the GNU gettext
-dnl functionality.
-dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Library General Public License, and the rest of the GNU
-dnl gettext package package is covered by the GNU General Public License.
-dnl They are *not* in the public domain.
-
-dnl Authors:
-dnl Ulrich Drepper <drepper@cygnus.com>, 1995.
-
-# Check whether LC_MESSAGES is available in <locale.h>.
-
-AC_DEFUN([AM_LC_MESSAGES],
- [if test $ac_cv_header_locale_h = yes; then
- AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
- [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
- am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
- if test $am_cv_val_LC_MESSAGES = yes; then
- AC_DEFINE(HAVE_LC_MESSAGES, 1,
- [Define if your <locale.h> file defines LC_MESSAGES.])
- fi
- fi])
diff --git a/m4/nls.m4 b/m4/nls.m4
deleted file mode 100644
index 7967cc2..0000000
--- a/m4/nls.m4
+++ /dev/null
@@ -1,31 +0,0 @@
-# nls.m4 serial 3 (gettext-0.15)
-dnl Copyright (C) 1995-2003, 2005-2006 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-dnl
-dnl This file can can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Library General Public
-dnl License but which still want to provide support for the GNU gettext
-dnl functionality.
-dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Library General Public License, and the rest of the GNU
-dnl gettext package package is covered by the GNU General Public License.
-dnl They are *not* in the public domain.
-
-dnl Authors:
-dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
-dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003.
-
-AC_PREREQ(2.50)
-
-AC_DEFUN([AM_NLS],
-[
- AC_MSG_CHECKING([whether NLS is requested])
- dnl Default is enabled NLS
- AC_ARG_ENABLE(nls,
- [ --disable-nls do not use Native Language Support],
- USE_NLS=$enableval, USE_NLS=yes)
- AC_MSG_RESULT($USE_NLS)
- AC_SUBST(USE_NLS)
-])
diff --git a/m4/po.m4 b/m4/po.m4
deleted file mode 100644
index 00133ef..0000000
--- a/m4/po.m4
+++ /dev/null
@@ -1,428 +0,0 @@
-# po.m4 serial 13 (gettext-0.15)
-dnl Copyright (C) 1995-2006 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-dnl
-dnl This file can can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Library General Public
-dnl License but which still want to provide support for the GNU gettext
-dnl functionality.
-dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Library General Public License, and the rest of the GNU
-dnl gettext package package is covered by the GNU General Public License.
-dnl They are *not* in the public domain.
-
-dnl Authors:
-dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
-dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003.
-
-AC_PREREQ(2.50)
-
-dnl Checks for all prerequisites of the po subdirectory.
-AC_DEFUN([AM_PO_SUBDIRS],
-[
- AC_REQUIRE([AC_PROG_MAKE_SET])dnl
- AC_REQUIRE([AC_PROG_INSTALL])dnl
- AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
- AC_REQUIRE([AM_NLS])dnl
-
- dnl Perform the following tests also if --disable-nls has been given,
- dnl because they are needed for "make dist" to work.
-
- dnl Search for GNU msgfmt in the PATH.
- dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions.
- dnl The second test excludes FreeBSD msgfmt.
- AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
- [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
- (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
- :)
- AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
-
- dnl Test whether it is GNU msgfmt >= 0.15.
-changequote(,)dnl
- case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
- '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;;
- *) MSGFMT_015=$MSGFMT ;;
- esac
-changequote([,])dnl
- AC_SUBST([MSGFMT_015])
-changequote(,)dnl
- case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
- '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
- *) GMSGFMT_015=$GMSGFMT ;;
- esac
-changequote([,])dnl
- AC_SUBST([GMSGFMT_015])
-
- dnl Search for GNU xgettext 0.12 or newer in the PATH.
- dnl The first test excludes Solaris xgettext and early GNU xgettext versions.
- dnl The second test excludes FreeBSD xgettext.
- AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
- [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
- (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
- :)
- dnl Remove leftover from FreeBSD xgettext call.
- rm -f messages.po
-
- dnl Test whether it is GNU xgettext >= 0.15.
-changequote(,)dnl
- case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
- '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
- *) XGETTEXT_015=$XGETTEXT ;;
- esac
-changequote([,])dnl
- AC_SUBST([XGETTEXT_015])
-
- dnl Search for GNU msgmerge 0.11 or newer in the PATH.
- AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge,
- [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :)
-
- dnl Installation directories.
- dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we
- dnl have to define it here, so that it can be used in po/Makefile.
- test -n "$localedir" || localedir='${datadir}/locale'
- AC_SUBST([localedir])
-
- AC_CONFIG_COMMANDS([po-directories], [[
- for ac_file in $CONFIG_FILES; do
- # Support "outfile[:infile[:infile...]]"
- case "$ac_file" in
- *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
- esac
- # PO directories have a Makefile.in generated from Makefile.in.in.
- case "$ac_file" in */Makefile.in)
- # Adjust a relative srcdir.
- ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
- ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
- ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
- # In autoconf-2.13 it is called $ac_given_srcdir.
- # In autoconf-2.50 it is called $srcdir.
- test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
- case "$ac_given_srcdir" in
- .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
- /*) top_srcdir="$ac_given_srcdir" ;;
- *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
- esac
- # Treat a directory as a PO directory if and only if it has a
- # POTFILES.in file. This allows packages to have multiple PO
- # directories under different names or in different locations.
- if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
- rm -f "$ac_dir/POTFILES"
- test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
- cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
- POMAKEFILEDEPS="POTFILES.in"
- # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
- # on $ac_dir but don't depend on user-specified configuration
- # parameters.
- if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
- # The LINGUAS file contains the set of available languages.
- if test -n "$OBSOLETE_ALL_LINGUAS"; then
- test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
- fi
- ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
- # Hide the ALL_LINGUAS assigment from automake < 1.5.
- eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
- POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
- else
- # The set of available languages was given in configure.in.
- # Hide the ALL_LINGUAS assigment from automake < 1.5.
- eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
- fi
- # Compute POFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
- # Compute UPDATEPOFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
- # Compute DUMMYPOFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
- # Compute GMOFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
- case "$ac_given_srcdir" in
- .) srcdirpre= ;;
- *) srcdirpre='$(srcdir)/' ;;
- esac
- POFILES=
- UPDATEPOFILES=
- DUMMYPOFILES=
- GMOFILES=
- for lang in $ALL_LINGUAS; do
- POFILES="$POFILES $srcdirpre$lang.po"
- UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
- DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
- GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
- done
- # CATALOGS depends on both $ac_dir and the user's LINGUAS
- # environment variable.
- INST_LINGUAS=
- if test -n "$ALL_LINGUAS"; then
- for presentlang in $ALL_LINGUAS; do
- useit=no
- if test "%UNSET%" != "$LINGUAS"; then
- desiredlanguages="$LINGUAS"
- else
- desiredlanguages="$ALL_LINGUAS"
- fi
- for desiredlang in $desiredlanguages; do
- # Use the presentlang catalog if desiredlang is
- # a. equal to presentlang, or
- # b. a variant of presentlang (because in this case,
- # presentlang can be used as a fallback for messages
- # which are not translated in the desiredlang catalog).
- case "$desiredlang" in
- "$presentlang"*) useit=yes;;
- esac
- done
- if test $useit = yes; then
- INST_LINGUAS="$INST_LINGUAS $presentlang"
- fi
- done
- fi
- CATALOGS=
- if test -n "$INST_LINGUAS"; then
- for lang in $INST_LINGUAS; do
- CATALOGS="$CATALOGS $lang.gmo"
- done
- fi
- test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
- sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
- for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
- if test -f "$f"; then
- case "$f" in
- *.orig | *.bak | *~) ;;
- *) cat "$f" >> "$ac_dir/Makefile" ;;
- esac
- fi
- done
- fi
- ;;
- esac
- done]],
- [# Capture the value of obsolete ALL_LINGUAS because we need it to compute
- # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
- # from automake < 1.5.
- eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
- # Capture the value of LINGUAS because we need it to compute CATALOGS.
- LINGUAS="${LINGUAS-%UNSET%}"
- ])
-])
-
-dnl Postprocesses a Makefile in a directory containing PO files.
-AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE],
-[
- # When this code is run, in config.status, two variables have already been
- # set:
- # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in,
- # - LINGUAS is the value of the environment variable LINGUAS at configure
- # time.
-
-changequote(,)dnl
- # Adjust a relative srcdir.
- ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
- ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
- ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
- # In autoconf-2.13 it is called $ac_given_srcdir.
- # In autoconf-2.50 it is called $srcdir.
- test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
- case "$ac_given_srcdir" in
- .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
- /*) top_srcdir="$ac_given_srcdir" ;;
- *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
- esac
-
- # Find a way to echo strings without interpreting backslash.
- if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then
- gt_echo='echo'
- else
- if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then
- gt_echo='printf %s\n'
- else
- echo_func () {
- cat <<EOT
-$*
-EOT
- }
- gt_echo='echo_func'
- fi
- fi
-
- # A sed script that extracts the value of VARIABLE from a Makefile.
- sed_x_variable='
-# Test if the hold space is empty.
-x
-s/P/P/
-x
-ta
-# Yes it was empty. Look if we have the expected variable definition.
-/^[ ]*VARIABLE[ ]*=/{
- # Seen the first line of the variable definition.
- s/^[ ]*VARIABLE[ ]*=//
- ba
-}
-bd
-:a
-# Here we are processing a line from the variable definition.
-# Remove comment, more precisely replace it with a space.
-s/#.*$/ /
-# See if the line ends in a backslash.
-tb
-:b
-s/\\$//
-# Print the line, without the trailing backslash.
-p
-tc
-# There was no trailing backslash. The end of the variable definition is
-# reached. Clear the hold space.
-s/^.*$//
-x
-bd
-:c
-# A trailing backslash means that the variable definition continues in the
-# next line. Put a nonempty string into the hold space to indicate this.
-s/^.*$/P/
-x
-:d
-'
-changequote([,])dnl
-
- # Set POTFILES to the value of the Makefile variable POTFILES.
- sed_x_POTFILES=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'`
- POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"`
- # Compute POTFILES_DEPS as
- # $(foreach file, $(POTFILES), $(top_srcdir)/$(file))
- POTFILES_DEPS=
- for file in $POTFILES; do
- POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file"
- done
- POMAKEFILEDEPS=""
-
- if test -n "$OBSOLETE_ALL_LINGUAS"; then
- test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
- fi
- if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
- # The LINGUAS file contains the set of available languages.
- ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
- POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
- else
- # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS.
- sed_x_LINGUAS=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'`
- ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"`
- fi
- # Hide the ALL_LINGUAS assigment from automake < 1.5.
- eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
- # Compute POFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
- # Compute UPDATEPOFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
- # Compute DUMMYPOFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
- # Compute GMOFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
- # Compute PROPERTIESFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).properties)
- # Compute CLASSFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).class)
- # Compute QMFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm)
- # Compute MSGFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg)
- # Compute RESOURCESDLLFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll)
- case "$ac_given_srcdir" in
- .) srcdirpre= ;;
- *) srcdirpre='$(srcdir)/' ;;
- esac
- POFILES=
- UPDATEPOFILES=
- DUMMYPOFILES=
- GMOFILES=
- PROPERTIESFILES=
- CLASSFILES=
- QMFILES=
- MSGFILES=
- RESOURCESDLLFILES=
- for lang in $ALL_LINGUAS; do
- POFILES="$POFILES $srcdirpre$lang.po"
- UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
- DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
- GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
- PROPERTIESFILES="$PROPERTIESFILES \$(top_srcdir)/\$(DOMAIN)_$lang.properties"
- CLASSFILES="$CLASSFILES \$(top_srcdir)/\$(DOMAIN)_$lang.class"
- QMFILES="$QMFILES $srcdirpre$lang.qm"
- frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
- MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg"
- frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
- RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll"
- done
- # CATALOGS depends on both $ac_dir and the user's LINGUAS
- # environment variable.
- INST_LINGUAS=
- if test -n "$ALL_LINGUAS"; then
- for presentlang in $ALL_LINGUAS; do
- useit=no
- if test "%UNSET%" != "$LINGUAS"; then
- desiredlanguages="$LINGUAS"
- else
- desiredlanguages="$ALL_LINGUAS"
- fi
- for desiredlang in $desiredlanguages; do
- # Use the presentlang catalog if desiredlang is
- # a. equal to presentlang, or
- # b. a variant of presentlang (because in this case,
- # presentlang can be used as a fallback for messages
- # which are not translated in the desiredlang catalog).
- case "$desiredlang" in
- "$presentlang"*) useit=yes;;
- esac
- done
- if test $useit = yes; then
- INST_LINGUAS="$INST_LINGUAS $presentlang"
- fi
- done
- fi
- CATALOGS=
- JAVACATALOGS=
- QTCATALOGS=
- TCLCATALOGS=
- CSHARPCATALOGS=
- if test -n "$INST_LINGUAS"; then
- for lang in $INST_LINGUAS; do
- CATALOGS="$CATALOGS $lang.gmo"
- JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties"
- QTCATALOGS="$QTCATALOGS $lang.qm"
- frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
- TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg"
- frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
- CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll"
- done
- fi
-
- sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp"
- if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then
- # Add dependencies that cannot be formulated as a simple suffix rule.
- for lang in $ALL_LINGUAS; do
- frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
- cat >> "$ac_file.tmp" <<EOF
-$frobbedlang.msg: $lang.po
- @echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \
- \$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
-EOF
- done
- fi
- if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then
- # Add dependencies that cannot be formulated as a simple suffix rule.
- for lang in $ALL_LINGUAS; do
- frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
- cat >> "$ac_file.tmp" <<EOF
-$frobbedlang/\$(DOMAIN).resources.dll: $lang.po
- @echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \
- \$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
-EOF
- done
- fi
- if test -n "$POMAKEFILEDEPS"; then
- cat >> "$ac_file.tmp" <<EOF
-Makefile: $POMAKEFILEDEPS
-EOF
- fi
- mv "$ac_file.tmp" "$ac_file"
-])
diff --git a/m4/progtest.m4 b/m4/progtest.m4
deleted file mode 100644
index a56365c..0000000
--- a/m4/progtest.m4
+++ /dev/null
@@ -1,92 +0,0 @@
-# progtest.m4 serial 4 (gettext-0.14.2)
-dnl Copyright (C) 1996-2003, 2005 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-dnl
-dnl This file can can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Library General Public
-dnl License but which still want to provide support for the GNU gettext
-dnl functionality.
-dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Library General Public License, and the rest of the GNU
-dnl gettext package package is covered by the GNU General Public License.
-dnl They are *not* in the public domain.
-
-dnl Authors:
-dnl Ulrich Drepper <drepper@cygnus.com>, 1996.
-
-AC_PREREQ(2.50)
-
-# Search path for a program which passes the given test.
-
-dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
-dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
-AC_DEFUN([AM_PATH_PROG_WITH_TEST],
-[
-# Prepare PATH_SEPARATOR.
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- echo "#! /bin/sh" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
- else
- PATH_SEPARATOR=:
- fi
- rm -f conf$$.sh
-fi
-
-# Find out how to test for executable files. Don't use a zero-byte file,
-# as systems may use methods other than mode bits to determine executability.
-cat >conf$$.file <<_ASEOF
-#! /bin/sh
-exit 0
-_ASEOF
-chmod +x conf$$.file
-if test -x conf$$.file >/dev/null 2>&1; then
- ac_executable_p="test -x"
-else
- ac_executable_p="test -f"
-fi
-rm -f conf$$.file
-
-# Extract the first word of "$2", so it can be a program name with args.
-set dummy $2; ac_word=[$]2
-AC_MSG_CHECKING([for $ac_word])
-AC_CACHE_VAL(ac_cv_path_$1,
-[case "[$]$1" in
- [[\\/]]* | ?:[[\\/]]*)
- ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
- ;;
- *)
- ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
- for ac_dir in ifelse([$5], , $PATH, [$5]); do
- IFS="$ac_save_IFS"
- test -z "$ac_dir" && ac_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
- echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD
- if [$3]; then
- ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext"
- break 2
- fi
- fi
- done
- done
- IFS="$ac_save_IFS"
-dnl If no 4th arg is given, leave the cache variable unset,
-dnl so AC_PATH_PROGS will keep looking.
-ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
-])dnl
- ;;
-esac])dnl
-$1="$ac_cv_path_$1"
-if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
- AC_MSG_RESULT([$]$1)
-else
- AC_MSG_RESULT(no)
-fi
-AC_SUBST($1)dnl
-])
diff --git a/po/ChangeLog b/po/ChangeLog
deleted file mode 100644
index bbb72fa..0000000
--- a/po/ChangeLog
+++ /dev/null
@@ -1,51 +0,0 @@
-2007-06-05 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.in.in: Update from gettext 0.16.1.
- * Rules-quot: Likewise.
- * Makevars: Add more XGGETEXT_OPTIONS.
-
- * remove-potcdata.sin: New file.
-
- * POTFILES.in: Also include messages from libelf.
-
-2007-04-18 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.in.in: Remove MKINSTALLDIRS.
- Define mkinstalldirs to mkdir -p.
-
-2006-04-04 Roland McGrath <roland@redhat.com>
-
- * POTFILES.in: Comment out lib/xstrdup.c, not distributed any more.
-
-2005-08-27 Ulrich Drepper <drepper@redhat.com>
-
- * POTFILES.in: Add src/strings.c.
-
-2005-08-15 Ulrich Drepper <drepper@redhat.com>
-
- * POTFILES.in: Add src/ranlib.c.
-
-2005-08-05 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.in.in (XGETTEXT_OPTIONS): Move adding of --flag options
- after magic Makevars line. Also look for ERROR from elflint.
-
-2005-07-21 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.in.in: Add src/elfcmp.
-
-2005-05-07 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.in.in (XGETTEXT_OPTIONS): Define.
-
-2005-02-05 Ulrich Drepper <drepper@redhat.com>
-
- * POTFILES.in: Remove unnecessary entries.
-
-2004-01-18 Ulrich Drepper <drepper@redhat.com>
-
- * POTFILES.in: Add files from libdw, libebl, and libasm.
-
-2003-08-11 Ulrich Drepper <drepper@redhat.com>
-
- * Moved to CVS archive.
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
deleted file mode 100644
index 5022b8b..0000000
--- a/po/Makefile.in.in
+++ /dev/null
@@ -1,403 +0,0 @@
-# Makefile for PO directory in any package using GNU gettext.
-# Copyright (C) 1995-1997, 2000-2006 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
-#
-# This file can be copied and used freely without restrictions. It can
-# be used in projects which are not available under the GNU General Public
-# License but which still want to provide support for the GNU gettext
-# functionality.
-# Please note that the actual code of GNU gettext is covered by the GNU
-# General Public License and is *not* in the public domain.
-#
-# Origin: gettext-0.16
-
-PACKAGE = @PACKAGE@
-VERSION = @VERSION@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-
-SHELL = /bin/sh
-@SET_MAKE@
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-datarootdir = @datarootdir@
-datadir = @datadir@
-localedir = @localedir@
-gettextsrcdir = $(datadir)/gettext/po
-
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-
-# We use $(mkdir_p).
-# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as
-# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions,
-# @install_sh@ does not start with $(SHELL), so we add it.
-# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined
-# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake
-# versions, $(mkinstalldirs) and $(install_sh) are unused.
-mkinstalldirs = $(SHELL) @install_sh@ -d
-install_sh = $(SHELL) @install_sh@
-MKDIR_P = @MKDIR_P@
-mkdir_p = @mkdir_p@
-
-GMSGFMT_ = @GMSGFMT@
-GMSGFMT_no = @GMSGFMT@
-GMSGFMT_yes = @GMSGFMT_015@
-GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT))
-MSGFMT_ = @MSGFMT@
-MSGFMT_no = @MSGFMT@
-MSGFMT_yes = @MSGFMT_015@
-MSGFMT = $(MSGFMT_$(USE_MSGCTXT))
-XGETTEXT_ = @XGETTEXT@
-XGETTEXT_no = @XGETTEXT@
-XGETTEXT_yes = @XGETTEXT_015@
-XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT))
-MSGMERGE = msgmerge
-MSGMERGE_UPDATE = @MSGMERGE@ --update
-MSGINIT = msginit
-MSGCONV = msgconv
-MSGFILTER = msgfilter
-
-POFILES = @POFILES@
-GMOFILES = @GMOFILES@
-UPDATEPOFILES = @UPDATEPOFILES@
-DUMMYPOFILES = @DUMMYPOFILES@
-DISTFILES.common = Makefile.in.in remove-potcdate.sin \
-$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
-DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \
-$(POFILES) $(GMOFILES) \
-$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
-
-POTFILES = \
-
-CATALOGS = @CATALOGS@
-
-# Makevars gets inserted here. (Don't remove this line!)
-
-.SUFFIXES:
-.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update
-
-.po.mo:
- @echo "$(MSGFMT) -c -o $@ $<"; \
- $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@
-
-.po.gmo:
- @lang=`echo $* | sed -e 's,.*/,,'`; \
- test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
- echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \
- cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo
-
-.sin.sed:
- sed -e '/^#/d' $< > t-$@
- mv t-$@ $@
-
-
-all: all-@USE_NLS@
-
-all-yes: stamp-po
-all-no:
-
-# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no
-# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because
-# we don't want to bother translators with empty POT files). We assume that
-# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty.
-# In this case, stamp-po is a nop (i.e. a phony target).
-
-# stamp-po is a timestamp denoting the last time at which the CATALOGS have
-# been loosely updated. Its purpose is that when a developer or translator
-# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS,
-# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent
-# invocations of "make" will do nothing. This timestamp would not be necessary
-# if updating the $(CATALOGS) would always touch them; however, the rule for
-# $(POFILES) has been designed to not touch files that don't need to be
-# changed.
-stamp-po: $(srcdir)/$(DOMAIN).pot
- test ! -f $(srcdir)/$(DOMAIN).pot || \
- test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
- @test ! -f $(srcdir)/$(DOMAIN).pot || { \
- echo "touch stamp-po" && \
- echo timestamp > stamp-poT && \
- mv stamp-poT stamp-po; \
- }
-
-# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
-# otherwise packages like GCC can not be built if only parts of the source
-# have been downloaded.
-
-# This target rebuilds $(DOMAIN).pot; it is an expensive operation.
-# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
-$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
- if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \
- msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \
- else \
- msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \
- fi; \
- $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
- --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \
- --files-from=$(srcdir)/POTFILES.in \
- --copyright-holder='$(COPYRIGHT_HOLDER)' \
- --msgid-bugs-address="$$msgid_bugs_address"
- test ! -f $(DOMAIN).po || { \
- if test -f $(srcdir)/$(DOMAIN).pot; then \
- sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
- sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
- if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \
- rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \
- else \
- rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \
- mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
- fi; \
- else \
- mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
- fi; \
- }
-
-# This rule has no dependencies: we don't need to update $(DOMAIN).pot at
-# every "make" invocation, only create it when it is missing.
-# Only "make $(DOMAIN).pot-update" or "make dist" will force an update.
-$(srcdir)/$(DOMAIN).pot:
- $(MAKE) $(DOMAIN).pot-update
-
-# This target rebuilds a PO file if $(DOMAIN).pot has changed.
-# Note that a PO file is not touched if it doesn't need to be changed.
-$(POFILES): $(srcdir)/$(DOMAIN).pot
- @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
- if test -f "$(srcdir)/$${lang}.po"; then \
- test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
- echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \
- cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \
- else \
- $(MAKE) $${lang}.po-create; \
- fi
-
-
-install: install-exec install-data
-install-exec:
-install-data: install-data-@USE_NLS@
- if test "$(PACKAGE)" = "gettext-tools"; then \
- $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
- for file in $(DISTFILES.common) Makevars.template; do \
- $(INSTALL_DATA) $(srcdir)/$$file \
- $(DESTDIR)$(gettextsrcdir)/$$file; \
- done; \
- for file in Makevars; do \
- rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
- done; \
- else \
- : ; \
- fi
-install-data-no: all
-install-data-yes: all
- $(mkdir_p) $(DESTDIR)$(datadir)
- @catalogs='$(CATALOGS)'; \
- for cat in $$catalogs; do \
- cat=`basename $$cat`; \
- lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
- dir=$(localedir)/$$lang/LC_MESSAGES; \
- $(mkdir_p) $(DESTDIR)$$dir; \
- if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
- $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
- echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
- for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
- if test -n "$$lc"; then \
- if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
- link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
- mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
- mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
- (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
- for file in *; do \
- if test -f $$file; then \
- ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
- fi; \
- done); \
- rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
- else \
- if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
- :; \
- else \
- rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
- mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
- fi; \
- fi; \
- rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
- ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
- ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
- cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
- echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
- fi; \
- done; \
- done
-
-install-strip: install
-
-installdirs: installdirs-exec installdirs-data
-installdirs-exec:
-installdirs-data: installdirs-data-@USE_NLS@
- if test "$(PACKAGE)" = "gettext-tools"; then \
- $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
- else \
- : ; \
- fi
-installdirs-data-no:
-installdirs-data-yes:
- $(mkdir_p) $(DESTDIR)$(datadir)
- @catalogs='$(CATALOGS)'; \
- for cat in $$catalogs; do \
- cat=`basename $$cat`; \
- lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
- dir=$(localedir)/$$lang/LC_MESSAGES; \
- $(mkdir_p) $(DESTDIR)$$dir; \
- for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
- if test -n "$$lc"; then \
- if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
- link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
- mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
- mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
- (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
- for file in *; do \
- if test -f $$file; then \
- ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
- fi; \
- done); \
- rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
- else \
- if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
- :; \
- else \
- rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
- mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
- fi; \
- fi; \
- fi; \
- done; \
- done
-
-# Define this as empty until I found a useful application.
-installcheck:
-
-uninstall: uninstall-exec uninstall-data
-uninstall-exec:
-uninstall-data: uninstall-data-@USE_NLS@
- if test "$(PACKAGE)" = "gettext-tools"; then \
- for file in $(DISTFILES.common) Makevars.template; do \
- rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
- done; \
- else \
- : ; \
- fi
-uninstall-data-no:
-uninstall-data-yes:
- catalogs='$(CATALOGS)'; \
- for cat in $$catalogs; do \
- cat=`basename $$cat`; \
- lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
- for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
- rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
- done; \
- done
-
-check: all
-
-info dvi ps pdf html tags TAGS ctags CTAGS ID:
-
-mostlyclean:
- rm -f remove-potcdate.sed
- rm -f stamp-poT
- rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
- rm -fr *.o
-
-clean: mostlyclean
-
-distclean: clean
- rm -f Makefile Makefile.in POTFILES *.mo
-
-maintainer-clean: distclean
- @echo "This command is intended for maintainers to use;"
- @echo "it deletes files that may require special tools to rebuild."
- rm -f stamp-po $(GMOFILES)
-
-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
-dist distdir:
- $(MAKE) update-po
- @$(MAKE) dist2
-# This is a separate target because 'update-po' must be executed before.
-dist2: stamp-po $(DISTFILES)
- dists="$(DISTFILES)"; \
- if test "$(PACKAGE)" = "gettext-tools"; then \
- dists="$$dists Makevars.template"; \
- fi; \
- if test -f $(srcdir)/$(DOMAIN).pot; then \
- dists="$$dists $(DOMAIN).pot stamp-po"; \
- fi; \
- if test -f $(srcdir)/ChangeLog; then \
- dists="$$dists ChangeLog"; \
- fi; \
- for i in 0 1 2 3 4 5 6 7 8 9; do \
- if test -f $(srcdir)/ChangeLog.$$i; then \
- dists="$$dists ChangeLog.$$i"; \
- fi; \
- done; \
- if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
- for file in $$dists; do \
- if test -f $$file; then \
- cp -p $$file $(distdir) || exit 1; \
- else \
- cp -p $(srcdir)/$$file $(distdir) || exit 1; \
- fi; \
- done
-
-update-po: Makefile
- $(MAKE) $(DOMAIN).pot-update
- test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
- $(MAKE) update-gmo
-
-# General rule for creating PO files.
-
-.nop.po-create:
- @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \
- echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
- exit 1
-
-# General rule for updating PO files.
-
-.nop.po-update:
- @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
- if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \
- tmpdir=`pwd`; \
- echo "$$lang:"; \
- test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
- echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
- cd $(srcdir); \
- if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \
- if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
- rm -f $$tmpdir/$$lang.new.po; \
- else \
- if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
- :; \
- else \
- echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
- exit 1; \
- fi; \
- fi; \
- else \
- echo "msgmerge for $$lang.po failed!" 1>&2; \
- rm -f $$tmpdir/$$lang.new.po; \
- fi
-
-$(DUMMYPOFILES):
-
-update-gmo: Makefile $(GMOFILES)
- @:
-
-Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@
- cd $(top_builddir) \
- && $(SHELL) ./config.status $(subdir)/$@.in po-directories
-
-force:
-
-# Tell versions [3.59,3.63) of GNU make not to export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/po/Makevars b/po/Makevars
deleted file mode 100644
index b8ea702..0000000
--- a/po/Makevars
+++ /dev/null
@@ -1,42 +0,0 @@
-# Makefile variables for PO directory in any package using GNU gettext.
-
-# Usually the message domain is the same as the package name.
-DOMAIN = $(PACKAGE)
-
-# These two variables depend on the location of this directory.
-subdir = po
-top_builddir = ..
-
-# These options get passed to xgettext.
-XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ --flag=error:3:c-format \
- --flag=ERROR:1:c-format
-
-# This is the copyright holder that gets inserted into the header of the
-# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
-# package. (Note that the msgstr strings, extracted from the package's
-# sources, belong to the copyright holder of the package.) Translators are
-# expected to transfer the copyright for their translations to this person
-# or entity, or to disclaim their copyright. The empty string stands for
-# the public domain; in this case the translators are expected to disclaim
-# their copyright.
-COPYRIGHT_HOLDER = Red Hat, Inc.
-
-# This is the email address or URL to which the translators shall report
-# bugs in the untranslated strings:
-# - Strings which are not entire sentences, see the maintainer guidelines
-# in the GNU gettext documentation, section 'Preparing Strings'.
-# - Strings which use unclear terms or require additional context to be
-# understood.
-# - Strings which make invalid assumptions about notation of date, time or
-# money.
-# - Pluralisation problems.
-# - Incorrect English spelling.
-# - Incorrect formatting.
-# It can be your email address, or a mailing list address where translators
-# can write to without being subscribed, or the URL of a web page through
-# which the translators can contact you.
-MSGID_BUGS_ADDRESS = http://bugzilla.redhat.com/
-
-# This is the list of locale categories, beyond LC_MESSAGES, for which the
-# message catalogs shall be used. It is usually empty.
-EXTRA_LOCALE_CATEGORIES =
diff --git a/po/POTFILES.in b/po/POTFILES.in
deleted file mode 100644
index e3a192b..0000000
--- a/po/POTFILES.in
+++ /dev/null
@@ -1,27 +0,0 @@
-# List of files which containing translatable strings.
-# Copyright (C) 2000, 2005 Red Hat, Inc.
-
-# Files from the compatibility library
-lib/xmalloc.c
-#lib/xstrdup.c
-lib/xstrndup.c
-
-# Library sources
-libelf/elf_error.c
-libasm/asm_error.c
-libdw/dwarf_error.c
-
-# Program sources
-src/nm.c
-src/readelf.c
-src/size.c
-src/strip.c
-src/ld.c
-src/ldgeneric.c
-src/ldscript.y
-src/elflint.c
-src/addr2line.c
-src/findtextrel.c
-src/elfcmp.c
-src/ranlib.c
-src/strings.c
diff --git a/po/Rules-quot b/po/Rules-quot
deleted file mode 100644
index 9c2a995..0000000
--- a/po/Rules-quot
+++ /dev/null
@@ -1,47 +0,0 @@
-# Special Makefile rules for English message catalogs with quotation marks.
-
-DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot
-
-.SUFFIXES: .insert-header .po-update-en
-
-en@quot.po-create:
- $(MAKE) en@quot.po-update
-en@boldquot.po-create:
- $(MAKE) en@boldquot.po-update
-
-en@quot.po-update: en@quot.po-update-en
-en@boldquot.po-update: en@boldquot.po-update-en
-
-.insert-header.po-update-en:
- @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \
- if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \
- tmpdir=`pwd`; \
- echo "$$lang:"; \
- ll=`echo $$lang | sed -e 's/@.*//'`; \
- LC_ALL=C; export LC_ALL; \
- cd $(srcdir); \
- if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \
- if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
- rm -f $$tmpdir/$$lang.new.po; \
- else \
- if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
- :; \
- else \
- echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
- exit 1; \
- fi; \
- fi; \
- else \
- echo "creation of $$lang.po failed!" 1>&2; \
- rm -f $$tmpdir/$$lang.new.po; \
- fi
-
-en@quot.insert-header: insert-header.sin
- sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header
-
-en@boldquot.insert-header: insert-header.sin
- sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header
-
-mostlyclean: mostlyclean-quot
-mostlyclean-quot:
- rm -f *.insert-header
diff --git a/po/boldquot.sed b/po/boldquot.sed
deleted file mode 100644
index 4b937aa..0000000
--- a/po/boldquot.sed
+++ /dev/null
@@ -1,10 +0,0 @@
-s/"\([^"]*\)"/“\1”/g
-s/`\([^`']*\)'/‘\1’/g
-s/ '\([^`']*\)' / ‘\1’ /g
-s/ '\([^`']*\)'$/ ‘\1’/g
-s/^'\([^`']*\)' /‘\1’ /g
-s/“”/""/g
-s/“/“[1m/g
-s/”/[0m”/g
-s/‘/‘[1m/g
-s/’/[0m’/g
diff --git a/po/elfutils.pot b/po/elfutils.pot
deleted file mode 100644
index 3929a52..0000000
--- a/po/elfutils.pot
+++ /dev/null
@@ -1,4631 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR Red Hat, Inc.
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: http://bugzilla.redhat.com/\n"
-"POT-Creation-Date: 2008-12-17 16:48-0800\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
-
-#: lib/xmalloc.c:51 lib/xmalloc.c:65 lib/xmalloc.c:79 src/readelf.c:2683
-#: src/readelf.c:3018
-#, c-format
-msgid "memory exhausted"
-msgstr ""
-
-#: libelf/elf_error.c:113 libasm/asm_error.c:120 libdw/dwarf_error.c:111
-msgid "no error"
-msgstr ""
-
-#: libelf/elf_error.c:116 libasm/asm_error.c:163 libdw/dwarf_error.c:112
-msgid "unknown error"
-msgstr ""
-
-#: libelf/elf_error.c:120
-msgid "unknown version"
-msgstr ""
-
-#: libelf/elf_error.c:124
-msgid "unknown type"
-msgstr ""
-
-#: libelf/elf_error.c:128
-msgid "invalid `Elf' handle"
-msgstr ""
-
-#: libelf/elf_error.c:132
-msgid "invalid size of source operand"
-msgstr ""
-
-#: libelf/elf_error.c:136
-msgid "invalid size of destination operand"
-msgstr ""
-
-#: libelf/elf_error.c:140
-msgid "invalid encoding"
-msgstr ""
-
-#: libelf/elf_error.c:144 libasm/asm_error.c:121 libdw/dwarf_error.c:120
-msgid "out of memory"
-msgstr ""
-
-#: libelf/elf_error.c:148
-msgid "invalid file descriptor"
-msgstr ""
-
-#: libelf/elf_error.c:152
-msgid "invalid operation"
-msgstr ""
-
-#: libelf/elf_error.c:156
-msgid "ELF version not set"
-msgstr ""
-
-#: libelf/elf_error.c:160 libelf/elf_error.c:208 libdw/dwarf_error.c:122
-msgid "invalid command"
-msgstr ""
-
-#: libelf/elf_error.c:164 libelf/elf_error.c:224
-msgid "offset out of range"
-msgstr ""
-
-#: libelf/elf_error.c:168
-msgid "invalid fmag field in archive header"
-msgstr ""
-
-#: libelf/elf_error.c:172
-msgid "invalid archive file"
-msgstr ""
-
-#: libelf/elf_error.c:176
-msgid "descriptor is not for an archive"
-msgstr ""
-
-#: libelf/elf_error.c:180
-msgid "no index available"
-msgstr ""
-
-#: libelf/elf_error.c:184
-msgid "cannot read data from file"
-msgstr ""
-
-#: libelf/elf_error.c:188
-msgid "cannot write data to file"
-msgstr ""
-
-#: libelf/elf_error.c:192
-msgid "invalid binary class"
-msgstr ""
-
-#: libelf/elf_error.c:196
-msgid "invalid section index"
-msgstr ""
-
-#: libelf/elf_error.c:200
-msgid "invalid operand"
-msgstr ""
-
-#: libelf/elf_error.c:204
-msgid "invalid section"
-msgstr ""
-
-#: libelf/elf_error.c:212
-msgid "executable header not created first"
-msgstr ""
-
-#: libelf/elf_error.c:216
-msgid "file descriptor disabled"
-msgstr ""
-
-#: libelf/elf_error.c:220
-msgid "archive/member fildes mismatch"
-msgstr ""
-
-#: libelf/elf_error.c:228
-msgid "cannot manipulate null section"
-msgstr ""
-
-#: libelf/elf_error.c:232
-msgid "data/scn mismatch"
-msgstr ""
-
-#: libelf/elf_error.c:236
-msgid "invalid section header"
-msgstr ""
-
-#: libelf/elf_error.c:240
-msgid "invalid data"
-msgstr ""
-
-#: libelf/elf_error.c:244
-msgid "unknown data encoding"
-msgstr ""
-
-#: libelf/elf_error.c:248
-msgid "section `sh_size' too small for data"
-msgstr ""
-
-#: libelf/elf_error.c:252
-msgid "invalid section alignment"
-msgstr ""
-
-#: libelf/elf_error.c:256
-msgid "invalid section entry size"
-msgstr ""
-
-#: libelf/elf_error.c:260
-msgid "update() for write on read-only file"
-msgstr ""
-
-#: libelf/elf_error.c:264
-msgid "no such file"
-msgstr ""
-
-#: libelf/elf_error.c:268
-msgid "only relocatable files can contain section groups"
-msgstr ""
-
-#: libelf/elf_error.c:273
-msgid ""
-"program header only allowed in executables, shared objects, and core files"
-msgstr ""
-
-#: libelf/elf_error.c:280
-msgid "file has no program header"
-msgstr ""
-
-#: libelf/elf_error.c:285 libdw/dwarf_error.c:144
-msgid "invalid offset"
-msgstr ""
-
-#: libasm/asm_error.c:122 src/ldgeneric.c:2687
-#, c-format
-msgid "cannot create output file"
-msgstr ""
-
-#: libasm/asm_error.c:123
-msgid "invalid parameter"
-msgstr ""
-
-#: libasm/asm_error.c:124
-msgid "cannot change mode of output file"
-msgstr ""
-
-#: libasm/asm_error.c:125 src/ldgeneric.c:7001
-#, c-format
-msgid "cannot rename output file"
-msgstr ""
-
-#: libasm/asm_error.c:126
-msgid "duplicate symbol"
-msgstr ""
-
-#: libasm/asm_error.c:127
-msgid "invalid section type for operation"
-msgstr ""
-
-#: libasm/asm_error.c:128
-msgid "error during output of data"
-msgstr ""
-
-#: libasm/asm_error.c:129
-msgid "no backend support available"
-msgstr ""
-
-#: libdw/dwarf_error.c:113
-msgid "invalid access"
-msgstr ""
-
-#: libdw/dwarf_error.c:114
-msgid "no regular file"
-msgstr ""
-
-#: libdw/dwarf_error.c:115
-msgid "I/O error"
-msgstr ""
-
-#: libdw/dwarf_error.c:116
-msgid "invalid ELF file"
-msgstr ""
-
-#: libdw/dwarf_error.c:117
-msgid "no DWARF information"
-msgstr ""
-
-#: libdw/dwarf_error.c:118
-msgid "no ELF file"
-msgstr ""
-
-#: libdw/dwarf_error.c:119
-msgid "cannot get ELF header"
-msgstr ""
-
-#: libdw/dwarf_error.c:121
-msgid "not implemented"
-msgstr ""
-
-#: libdw/dwarf_error.c:123
-msgid "invalid version"
-msgstr ""
-
-#: libdw/dwarf_error.c:124
-msgid "invalid file"
-msgstr ""
-
-#: libdw/dwarf_error.c:125
-msgid "no entries found"
-msgstr ""
-
-#: libdw/dwarf_error.c:126
-msgid "invalid DWARF"
-msgstr ""
-
-#: libdw/dwarf_error.c:127
-msgid "no string data"
-msgstr ""
-
-#: libdw/dwarf_error.c:128
-msgid "no address value"
-msgstr ""
-
-#: libdw/dwarf_error.c:129
-msgid "no constant value"
-msgstr ""
-
-#: libdw/dwarf_error.c:130
-msgid "no reference value"
-msgstr ""
-
-#: libdw/dwarf_error.c:131
-msgid "invalid reference value"
-msgstr ""
-
-#: libdw/dwarf_error.c:132
-msgid ".debug_line section missing"
-msgstr ""
-
-#: libdw/dwarf_error.c:133
-msgid "invalid .debug_line section"
-msgstr ""
-
-#: libdw/dwarf_error.c:134
-msgid "debug information too big"
-msgstr ""
-
-#: libdw/dwarf_error.c:135
-msgid "invalid DWARF version"
-msgstr ""
-
-#: libdw/dwarf_error.c:136
-msgid "invalid directory index"
-msgstr ""
-
-#: libdw/dwarf_error.c:137
-msgid "address out of range"
-msgstr ""
-
-#: libdw/dwarf_error.c:138
-msgid "no location list value"
-msgstr ""
-
-#: libdw/dwarf_error.c:139
-msgid "no block data"
-msgstr ""
-
-#: libdw/dwarf_error.c:140
-msgid "invalid line index"
-msgstr ""
-
-#: libdw/dwarf_error.c:141
-msgid "invalid address range index"
-msgstr ""
-
-#: libdw/dwarf_error.c:142
-msgid "no matching address range"
-msgstr ""
-
-#: libdw/dwarf_error.c:143
-msgid "no flag value"
-msgstr ""
-
-#: libdw/dwarf_error.c:145
-msgid ".debug_ranges section missing"
-msgstr ""
-
-#: src/nm.c:74 src/readelf.c:72 src/strip.c:72
-msgid "Output selection:"
-msgstr ""
-
-#: src/nm.c:75
-msgid "Display debugger-only symbols"
-msgstr ""
-
-#: src/nm.c:76
-msgid "Display only defined symbols"
-msgstr ""
-
-#: src/nm.c:79
-msgid "Display dynamic symbols instead of normal symbols"
-msgstr ""
-
-#: src/nm.c:80
-msgid "Display only external symbols"
-msgstr ""
-
-#: src/nm.c:81
-msgid "Display only undefined symbols"
-msgstr ""
-
-#: src/nm.c:83
-msgid "Include index for symbols from archive members"
-msgstr ""
-
-#: src/nm.c:85 src/size.c:66
-msgid "Output format:"
-msgstr ""
-
-#: src/nm.c:87
-msgid "Print name of the input file before every symbol"
-msgstr ""
-
-#: src/nm.c:90
-msgid ""
-"Use the output format FORMAT. FORMAT can be `bsd', `sysv' or `posix'. The "
-"default is `sysv'"
-msgstr ""
-
-#: src/nm.c:92
-msgid "Same as --format=bsd"
-msgstr ""
-
-#: src/nm.c:93
-msgid "Same as --format=posix"
-msgstr ""
-
-#: src/nm.c:94 src/size.c:72
-msgid "Use RADIX for printing symbol values"
-msgstr ""
-
-#: src/nm.c:95
-msgid "Mark weak symbols"
-msgstr ""
-
-#: src/nm.c:96
-msgid "Print size of defined symbols"
-msgstr ""
-
-#: src/nm.c:98 src/size.c:80 src/strip.c:77
-msgid "Output options:"
-msgstr ""
-
-#: src/nm.c:99
-msgid "Sort symbols numerically by address"
-msgstr ""
-
-#: src/nm.c:101
-msgid "Do not sort the symbols"
-msgstr ""
-
-#: src/nm.c:102
-msgid "Reverse the sense of the sort"
-msgstr ""
-
-#: src/nm.c:103 src/addr2line.c:71 src/findtextrel.c:73 src/elfcmp.c:74
-#: src/strings.c:83
-msgid "Miscellaneous:"
-msgstr ""
-
-#: src/nm.c:108
-msgid "List symbols from FILEs (a.out by default)."
-msgstr ""
-
-#: src/nm.c:111 src/size.c:92 src/strip.c:96 src/findtextrel.c:82
-#: src/strings.c:92
-msgid "[FILE...]"
-msgstr ""
-
-#: src/nm.c:136 src/size.c:117 src/strip.c:120
-#, c-format
-msgid "%s: INTERNAL ERROR %d (%s-%s): %s"
-msgstr ""
-
-#: src/nm.c:253 src/readelf.c:416 src/size.c:219 src/strip.c:203 src/ld.c:957
-#: src/elflint.c:240 src/addr2line.c:178 src/findtextrel.c:168
-#: src/elfcmp.c:521 src/ranlib.c:136 src/strings.c:227
-#, c-format
-msgid ""
-"Copyright (C) %s Red Hat, Inc.\n"
-"This is free software; see the source for copying conditions. There is NO\n"
-"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
-msgstr ""
-
-#: src/nm.c:258 src/readelf.c:421 src/size.c:224 src/strip.c:208 src/ld.c:962
-#: src/elflint.c:245 src/addr2line.c:183 src/findtextrel.c:173
-#: src/elfcmp.c:526 src/ranlib.c:141 src/strings.c:232
-#, c-format
-msgid "Written by %s.\n"
-msgstr ""
-
-#: src/nm.c:363 src/size.c:301 src/strip.c:432 src/strip.c:467
-#: src/ldgeneric.c:1767 src/ldgeneric.c:4257 src/findtextrel.c:227
-#: src/elfcmp.c:573 src/ranlib.c:169 src/strings.c:183
-#, c-format
-msgid "cannot open '%s'"
-msgstr ""
-
-#: src/nm.c:380 src/nm.c:392 src/size.c:317 src/size.c:400 src/strip.c:1814
-#, c-format
-msgid "while closing '%s'"
-msgstr ""
-
-#: src/nm.c:402 src/strip.c:358
-#, c-format
-msgid "%s: File format not recognized"
-msgstr ""
-
-#: src/nm.c:442
-msgid ""
-"\n"
-"Archive index:"
-msgstr ""
-
-#: src/nm.c:451
-#, c-format
-msgid "invalid offset %zu for symbol %s"
-msgstr ""
-
-#: src/nm.c:456
-#, c-format
-msgid "%s in %s\n"
-msgstr ""
-
-#: src/nm.c:464
-#, c-format
-msgid "cannot reset archive offset to beginning"
-msgstr ""
-
-#: src/nm.c:488
-#, c-format
-msgid "%s%s%s: file format not recognized"
-msgstr ""
-
-#: src/nm.c:700
-#, c-format
-msgid "cannot create search tree"
-msgstr ""
-
-#: src/nm.c:740 src/nm.c:1002 src/readelf.c:834 src/readelf.c:973
-#: src/readelf.c:1114 src/readelf.c:1296 src/readelf.c:1494 src/readelf.c:1639
-#: src/readelf.c:1807 src/readelf.c:2061 src/readelf.c:2127 src/readelf.c:2205
-#: src/readelf.c:2702 src/readelf.c:2738 src/readelf.c:2800 src/readelf.c:5298
-#: src/readelf.c:6159 src/readelf.c:6304 src/readelf.c:6373 src/size.c:418
-#: src/size.c:492 src/strip.c:482
-#, c-format
-msgid "cannot get section header string table index"
-msgstr ""
-
-#: src/nm.c:766
-#, c-format
-msgid ""
-"\n"
-"\n"
-"Symbols from %s:\n"
-"\n"
-msgstr ""
-
-#: src/nm.c:768
-#, c-format
-msgid ""
-"\n"
-"\n"
-"Symbols from %s[%s]:\n"
-"\n"
-msgstr ""
-
-#: src/nm.c:771
-#, c-format
-msgid ""
-"%*s%-*s %-*s Class Type %-*s %*s Section\n"
-"\n"
-msgstr ""
-
-#: src/nm.c:1012
-#, c-format
-msgid "%s: entry size in section `%s' is not what we expect"
-msgstr ""
-
-#: src/nm.c:1016
-#, c-format
-msgid "%s: size of section `%s' is not multiple of entry size"
-msgstr ""
-
-#: src/nm.c:1255
-#, c-format
-msgid "%s%s%s%s: Invalid operation"
-msgstr ""
-
-#: src/nm.c:1312
-#, c-format
-msgid "%s%s%s: no symbols"
-msgstr ""
-
-#: src/readelf.c:73
-msgid "Equivalent to: -h -l"
-msgstr ""
-
-#: src/readelf.c:74
-msgid "Display the dynamic segment"
-msgstr ""
-
-#: src/readelf.c:75
-msgid "Display the ELF file header"
-msgstr ""
-
-#: src/readelf.c:77
-msgid "Display histogram of bucket list lengths"
-msgstr ""
-
-#: src/readelf.c:78
-msgid "Display the program headers"
-msgstr ""
-
-#: src/readelf.c:80
-msgid "Display relocations"
-msgstr ""
-
-#: src/readelf.c:81
-msgid "Display the sections' header"
-msgstr ""
-
-#: src/readelf.c:83
-msgid "Display the symbol table"
-msgstr ""
-
-#: src/readelf.c:84
-msgid "Display versioning information"
-msgstr ""
-
-#: src/readelf.c:86
-msgid ""
-"Display DWARF section content. SECTION can be one of abbrev, aranges, "
-"frame, info, loc, line, ranges, pubnames, str, or macinfo."
-msgstr ""
-
-#: src/readelf.c:89
-msgid "Display the core notes"
-msgstr ""
-
-#: src/readelf.c:91
-msgid "Display architecture specific information (if any)"
-msgstr ""
-
-#: src/readelf.c:93
-msgid "Dump the uninterpreted contents of SECTION, by number or name"
-msgstr ""
-
-#: src/readelf.c:95
-msgid "Print string contents of sections"
-msgstr ""
-
-#: src/readelf.c:98
-msgid "Display the symbol index of an archive"
-msgstr ""
-
-#: src/readelf.c:100
-msgid "Output control:"
-msgstr ""
-
-#: src/readelf.c:106
-msgid "Print information from ELF file in human-readable form."
-msgstr ""
-
-#: src/readelf.c:110 src/elflint.c:86
-msgid "FILE..."
-msgstr ""
-
-#: src/readelf.c:256 src/elflint.c:159
-#, c-format
-msgid "cannot open input file"
-msgstr ""
-
-#: src/readelf.c:363
-#, c-format
-msgid "Unknown DWARF debug section `%s'.\n"
-msgstr ""
-
-#: src/readelf.c:392 src/elflint.c:223
-msgid "Missing file name.\n"
-msgstr ""
-
-#: src/readelf.c:397
-msgid "No operation specified.\n"
-msgstr ""
-
-#: src/readelf.c:432
-#, c-format
-msgid "cannot generate Elf descriptor: %s"
-msgstr ""
-
-#: src/readelf.c:444
-#, c-format
-msgid "'%s' is not an archive, cannot print archive index"
-msgstr ""
-
-#: src/readelf.c:449
-#, c-format
-msgid "error while closing Elf descriptor: %s"
-msgstr ""
-
-#: src/readelf.c:541
-#, c-format
-msgid "cannot stat input file"
-msgstr ""
-
-#: src/readelf.c:543
-#, c-format
-msgid "input file is empty"
-msgstr ""
-
-#: src/readelf.c:545
-#, c-format
-msgid "failed reading '%s': %s"
-msgstr ""
-
-#: src/readelf.c:580
-#, c-format
-msgid "cannot read ELF header: %s"
-msgstr ""
-
-#: src/readelf.c:588
-#, c-format
-msgid "cannot create EBL handle"
-msgstr ""
-
-#: src/readelf.c:595 src/strip.c:542 src/ldgeneric.c:661 src/ldgeneric.c:1122
-#, c-format
-msgid "cannot determine number of sections: %s"
-msgstr ""
-
-#: src/readelf.c:681
-msgid "NONE (None)"
-msgstr ""
-
-#: src/readelf.c:682
-msgid "REL (Relocatable file)"
-msgstr ""
-
-#: src/readelf.c:683
-msgid "EXEC (Executable file)"
-msgstr ""
-
-#: src/readelf.c:684
-msgid "DYN (Shared object file)"
-msgstr ""
-
-#: src/readelf.c:685
-msgid "CORE (Core file)"
-msgstr ""
-
-#: src/readelf.c:690
-#, c-format
-msgid "OS Specific: (%x)\n"
-msgstr ""
-
-#: src/readelf.c:692
-#, c-format
-msgid "Processor Specific: (%x)\n"
-msgstr ""
-
-#: src/readelf.c:702
-msgid ""
-"ELF Header:\n"
-" Magic: "
-msgstr ""
-
-#: src/readelf.c:706
-#, c-format
-msgid ""
-"\n"
-" Class: %s\n"
-msgstr ""
-
-#: src/readelf.c:711
-#, c-format
-msgid " Data: %s\n"
-msgstr ""
-
-#: src/readelf.c:717
-#, c-format
-msgid " Ident Version: %hhd %s\n"
-msgstr ""
-
-#: src/readelf.c:719 src/readelf.c:736
-msgid "(current)"
-msgstr ""
-
-#: src/readelf.c:723
-#, c-format
-msgid " OS/ABI: %s\n"
-msgstr ""
-
-#: src/readelf.c:726
-#, c-format
-msgid " ABI Version: %hhd\n"
-msgstr ""
-
-#: src/readelf.c:729
-msgid " Type: "
-msgstr ""
-
-#: src/readelf.c:732
-#, c-format
-msgid " Machine: %s\n"
-msgstr ""
-
-#: src/readelf.c:734
-#, c-format
-msgid " Version: %d %s\n"
-msgstr ""
-
-#: src/readelf.c:738
-#, c-format
-msgid " Entry point address: %#<PRIx64>\n"
-msgstr ""
-
-#: src/readelf.c:741
-#, c-format
-msgid " Start of program headers: %<PRId64> %s\n"
-msgstr ""
-
-#: src/readelf.c:742 src/readelf.c:745
-msgid "(bytes into file)"
-msgstr ""
-
-#: src/readelf.c:744
-#, c-format
-msgid " Start of section headers: %<PRId64> %s\n"
-msgstr ""
-
-#: src/readelf.c:747
-#, c-format
-msgid " Flags: %s\n"
-msgstr ""
-
-#: src/readelf.c:750
-#, c-format
-msgid " Size of this header: %<PRId16> %s\n"
-msgstr ""
-
-#: src/readelf.c:751 src/readelf.c:754 src/readelf.c:760
-msgid "(bytes)"
-msgstr ""
-
-#: src/readelf.c:753
-#, c-format
-msgid " Size of program header entries: %<PRId16> %s\n"
-msgstr ""
-
-#: src/readelf.c:756
-#, c-format
-msgid " Number of program headers entries: %<PRId16>\n"
-msgstr ""
-
-#: src/readelf.c:759
-#, c-format
-msgid " Size of section header entries: %<PRId16> %s\n"
-msgstr ""
-
-#: src/readelf.c:762
-#, c-format
-msgid " Number of section headers entries: %<PRId16>"
-msgstr ""
-
-#: src/readelf.c:769
-#, c-format
-msgid " (%<PRIu32> in [0].sh_size)"
-msgstr ""
-
-#: src/readelf.c:772 src/readelf.c:786
-msgid " ([0] not available)"
-msgstr ""
-
-#: src/readelf.c:782
-#, c-format
-msgid " (%<PRIu32> in [0].sh_link)"
-msgstr ""
-
-#: src/readelf.c:790
-#, c-format
-msgid ""
-" Section header string table index: XINDEX%s\n"
-"\n"
-msgstr ""
-
-#: src/readelf.c:794
-#, c-format
-msgid ""
-" Section header string table index: %<PRId16>\n"
-"\n"
-msgstr ""
-
-#: src/readelf.c:826
-#, c-format
-msgid ""
-"There are %d section headers, starting at offset %#<PRIx64>:\n"
-"\n"
-msgstr ""
-
-#: src/readelf.c:836
-msgid "Section Headers:"
-msgstr ""
-
-#: src/readelf.c:839
-msgid ""
-"[Nr] Name Type Addr Off Size ES Flags Lk "
-"Inf Al"
-msgstr ""
-
-#: src/readelf.c:841
-msgid ""
-"[Nr] Name Type Addr Off Size ES "
-"Flags Lk Inf Al"
-msgstr ""
-
-#: src/readelf.c:848 src/readelf.c:997
-#, c-format
-msgid "cannot get section: %s"
-msgstr ""
-
-#: src/readelf.c:855 src/readelf.c:1005 src/readelf.c:6324
-#, c-format
-msgid "cannot get section header: %s"
-msgstr ""
-
-#: src/readelf.c:913
-msgid "Program Headers:"
-msgstr ""
-
-#: src/readelf.c:915
-msgid ""
-" Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align"
-msgstr ""
-
-#: src/readelf.c:918
-msgid ""
-" Type Offset VirtAddr PhysAddr FileSiz "
-"MemSiz Flg Align"
-msgstr ""
-
-#: src/readelf.c:958
-#, c-format
-msgid "\t[Requesting program interpreter: %s]\n"
-msgstr ""
-
-#: src/readelf.c:975
-msgid ""
-"\n"
-" Section to Segment mapping:\n"
-" Segment Sections..."
-msgstr ""
-
-#: src/readelf.c:986
-#, c-format
-msgid "cannot get program header: %s"
-msgstr ""
-
-#: src/readelf.c:1120
-#, c-format
-msgid ""
-"\n"
-"COMDAT section group [%2zu] '%s' with signature '%s' contains %zu entry:\n"
-msgid_plural ""
-"\n"
-"COMDAT section group [%2zu] '%s' with signature '%s' contains %zu entries:\n"
-msgstr[0] ""
-msgstr[1] ""
-
-#: src/readelf.c:1125
-#, c-format
-msgid ""
-"\n"
-"Section group [%2zu] '%s' with signature '%s' contains %zu entry:\n"
-msgid_plural ""
-"\n"
-"Section group [%2zu] '%s' with signature '%s' contains %zu entries:\n"
-msgstr[0] ""
-msgstr[1] ""
-
-#: src/readelf.c:1133
-msgid "<INVALID SYMBOL>"
-msgstr ""
-
-#: src/readelf.c:1147
-msgid "<INVALID SECTION>"
-msgstr ""
-
-#: src/readelf.c:1298
-#, c-format
-msgid ""
-"\n"
-"Dynamic segment contains %lu entry:\n"
-" Addr: %#0*<PRIx64> Offset: %#08<PRIx64> Link to section: [%2u] '%s'\n"
-msgid_plural ""
-"\n"
-"Dynamic segment contains %lu entries:\n"
-" Addr: %#0*<PRIx64> Offset: %#08<PRIx64> Link to section: [%2u] '%s'\n"
-msgstr[0] ""
-msgstr[1] ""
-
-#: src/readelf.c:1310
-msgid " Type Value\n"
-msgstr ""
-
-#: src/readelf.c:1334
-#, c-format
-msgid "Shared library: [%s]\n"
-msgstr ""
-
-#: src/readelf.c:1339
-#, c-format
-msgid "Library soname: [%s]\n"
-msgstr ""
-
-#: src/readelf.c:1344
-#, c-format
-msgid "Library rpath: [%s]\n"
-msgstr ""
-
-#: src/readelf.c:1349
-#, c-format
-msgid "Library runpath: [%s]\n"
-msgstr ""
-
-#: src/readelf.c:1369
-#, c-format
-msgid "%<PRId64> (bytes)\n"
-msgstr ""
-
-#: src/readelf.c:1479 src/readelf.c:1624
-#, c-format
-msgid ""
-"\n"
-"Invalid symbol table at offset %#0<PRIx64>\n"
-msgstr ""
-
-#: src/readelf.c:1497
-#, c-format
-msgid ""
-"\n"
-"Relocation section [%2u] '%s' for section [%2u] '%s' at offset %#0<PRIx64> "
-"contains %d entry:\n"
-msgid_plural ""
-"\n"
-"Relocation section [%2u] '%s' for section [%2u] '%s' at offset %#0<PRIx64> "
-"contains %d entries:\n"
-msgstr[0] ""
-msgstr[1] ""
-
-#: src/readelf.c:1512
-#, c-format
-msgid ""
-"\n"
-"Relocation section [%2u] '%s' at offset %#0<PRIx64> contains %d entry:\n"
-msgid_plural ""
-"\n"
-"Relocation section [%2u] '%s' at offset %#0<PRIx64> contains %d entries:\n"
-msgstr[0] ""
-msgstr[1] ""
-
-#: src/readelf.c:1522
-msgid " Offset Type Value Name\n"
-msgstr ""
-
-#: src/readelf.c:1524
-msgid " Offset Type Value Name\n"
-msgstr ""
-
-#: src/readelf.c:1548 src/readelf.c:1560 src/readelf.c:1578 src/readelf.c:1590
-#: src/readelf.c:1680 src/readelf.c:1693 src/readelf.c:1712 src/readelf.c:1725
-msgid "<INVALID RELOC>"
-msgstr ""
-
-#: src/readelf.c:1549 src/readelf.c:1681
-msgid "INVALID SYMBOL"
-msgstr ""
-
-#: src/readelf.c:1579 src/readelf.c:1713
-msgid "INVALID SECTION"
-msgstr ""
-
-#: src/readelf.c:1641
-#, c-format
-msgid ""
-"\n"
-"Relocation section [%2zu] '%s' for section [%2u] '%s' at offset %#0<PRIx64> "
-"contains %d entry:\n"
-msgid_plural ""
-"\n"
-"Relocation section [%2zu] '%s' for section [%2u] '%s' at offset %#0<PRIx64> "
-"contains %d entries:\n"
-msgstr[0] ""
-msgstr[1] ""
-
-#: src/readelf.c:1653
-msgid " Offset Type Value Addend Name\n"
-msgstr ""
-
-#: src/readelf.c:1655
-msgid " Offset Type Value Addend Name\n"
-msgstr ""
-
-#: src/readelf.c:1814
-#, c-format
-msgid ""
-"\n"
-"Symbol table [%2u] '%s' contains %u entry:\n"
-msgid_plural ""
-"\n"
-"Symbol table [%2u] '%s' contains %u entries:\n"
-msgstr[0] ""
-msgstr[1] ""
-
-#: src/readelf.c:1820
-#, c-format
-msgid " %lu local symbol String table: [%2u] '%s'\n"
-msgid_plural " %lu local symbols String table: [%2u] '%s'\n"
-msgstr[0] ""
-msgstr[1] ""
-
-#: src/readelf.c:1830
-msgid " Num: Value Size Type Bind Vis Ndx Name\n"
-msgstr ""
-
-#: src/readelf.c:1832
-msgid " Num: Value Size Type Bind Vis Ndx Name\n"
-msgstr ""
-
-#: src/readelf.c:1852
-#, c-format
-msgid "%5u: %0*<PRIx64> %6<PRId64> %-7s %-6s %-9s %6s %s"
-msgstr ""
-
-#: src/readelf.c:1940
-#, c-format
-msgid "bad dynamic symbol"
-msgstr ""
-
-#: src/readelf.c:2022
-msgid "none"
-msgstr ""
-
-#: src/readelf.c:2039
-msgid "| <unknown>"
-msgstr ""
-
-#: src/readelf.c:2064
-#, c-format
-msgid ""
-"\n"
-"Version needs section [%2u] '%s' contains %d entry:\n"
-" Addr: %#0*<PRIx64> Offset: %#08<PRIx64> Link to section: [%2u] '%s'\n"
-msgid_plural ""
-"\n"
-"Version needs section [%2u] '%s' contains %d entries:\n"
-" Addr: %#0*<PRIx64> Offset: %#08<PRIx64> Link to section: [%2u] '%s'\n"
-msgstr[0] ""
-msgstr[1] ""
-
-#: src/readelf.c:2087
-#, c-format
-msgid " %#06x: Version: %hu File: %s Cnt: %hu\n"
-msgstr ""
-
-#: src/readelf.c:2100
-#, c-format
-msgid " %#06x: Name: %s Flags: %s Version: %hu\n"
-msgstr ""
-
-#: src/readelf.c:2131
-#, c-format
-msgid ""
-"\n"
-"Version definition section [%2u] '%s' contains %d entry:\n"
-" Addr: %#0*<PRIx64> Offset: %#08<PRIx64> Link to section: [%2u] '%s'\n"
-msgid_plural ""
-"\n"
-"Version definition section [%2u] '%s' contains %d entries:\n"
-" Addr: %#0*<PRIx64> Offset: %#08<PRIx64> Link to section: [%2u] '%s'\n"
-msgstr[0] ""
-msgstr[1] ""
-
-#: src/readelf.c:2161
-#, c-format
-msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n"
-msgstr ""
-
-#: src/readelf.c:2176
-#, c-format
-msgid " %#06x: Parent %d: %s\n"
-msgstr ""
-
-#: src/readelf.c:2408
-#, c-format
-msgid ""
-"\n"
-"Version symbols section [%2u] '%s' contains %d entry:\n"
-" Addr: %#0*<PRIx64> Offset: %#08<PRIx64> Link to section: [%2u] '%s'"
-msgid_plural ""
-"\n"
-"Version symbols section [%2u] '%s' contains %d entries:\n"
-" Addr: %#0*<PRIx64> Offset: %#08<PRIx64> Link to section: [%2u] '%s'"
-msgstr[0] ""
-msgstr[1] ""
-
-#: src/readelf.c:2438
-msgid " 0 *local* "
-msgstr ""
-
-#: src/readelf.c:2443
-msgid " 1 *global* "
-msgstr ""
-
-#: src/readelf.c:2474
-#, c-format
-msgid ""
-"\n"
-"Histogram for bucket list length in section [%2u] '%s' (total of %d "
-"bucket):\n"
-" Addr: %#0*<PRIx64> Offset: %#08<PRIx64> Link to section: [%2u] '%s'\n"
-msgid_plural ""
-"\n"
-"Histogram for bucket list length in section [%2u] '%s' (total of %d "
-"buckets):\n"
-" Addr: %#0*<PRIx64> Offset: %#08<PRIx64> Link to section: [%2u] '%s'\n"
-msgstr[0] ""
-msgstr[1] ""
-
-#: src/readelf.c:2497
-#, c-format
-msgid " Length Number % of total Coverage\n"
-msgstr ""
-
-#: src/readelf.c:2499
-#, c-format
-msgid " 0 %6<PRIu32> %5.1f%%\n"
-msgstr ""
-
-#: src/readelf.c:2506
-#, c-format
-msgid "%7d %6<PRIu32> %5.1f%% %5.1f%%\n"
-msgstr ""
-
-#: src/readelf.c:2519
-#, c-format
-msgid ""
-" Average number of tests: successful lookup: %f\n"
-" unsuccessful lookup: %f\n"
-msgstr ""
-
-#: src/readelf.c:2537 src/readelf.c:2579 src/readelf.c:2620
-#, c-format
-msgid "cannot get data for section %d: %s"
-msgstr ""
-
-#: src/readelf.c:2674
-#, c-format
-msgid ""
-" Symbol Bias: %u\n"
-" Bitmask Size: %zu bytes %<PRIuFAST32>%% bits set 2nd hash shift: %u\n"
-msgstr ""
-
-#: src/readelf.c:2748
-#, c-format
-msgid ""
-"\n"
-"Library list section [%2zu] '%s' at offset %#0<PRIx64> contains %d entry:\n"
-msgid_plural ""
-"\n"
-"Library list section [%2zu] '%s' at offset %#0<PRIx64> contains %d entries:\n"
-msgstr[0] ""
-msgstr[1] ""
-
-#: src/readelf.c:2762
-msgid ""
-" Library Time Stamp Checksum Version "
-"Flags"
-msgstr ""
-
-#: src/readelf.c:2810
-#, c-format
-msgid ""
-"\n"
-"Object attributes section [%2zu] '%s' of %<PRIu64> bytes at offset %"
-"#0<PRIx64>:\n"
-msgstr ""
-
-#: src/readelf.c:2826
-msgid " Owner Size\n"
-msgstr ""
-
-#: src/readelf.c:2852
-#, c-format
-msgid " %-13s %4<PRIu32>\n"
-msgstr ""
-
-#: src/readelf.c:2883
-#, c-format
-msgid " %-4u %12<PRIu32>\n"
-msgstr ""
-
-#: src/readelf.c:2888
-#, c-format
-msgid " File: %11<PRIu32>\n"
-msgstr ""
-
-#: src/readelf.c:2923
-#, c-format
-msgid " %s: %<PRId64>, %s\n"
-msgstr ""
-
-#: src/readelf.c:2926
-#, c-format
-msgid " %s: %<PRId64>\n"
-msgstr ""
-
-#: src/readelf.c:2929
-#, c-format
-msgid " %s: %s\n"
-msgstr ""
-
-#: src/readelf.c:2936
-#, c-format
-msgid " %u: %<PRId64>\n"
-msgstr ""
-
-#: src/readelf.c:2939
-#, c-format
-msgid " %u: %s\n"
-msgstr ""
-
-#: src/readelf.c:2974
-#, c-format
-msgid "%s+%#<PRIx64> <%s+%#<PRIx64>>"
-msgstr ""
-
-#: src/readelf.c:2977
-#, c-format
-msgid "%s+%#0*<PRIx64> <%s+%#<PRIx64>>"
-msgstr ""
-
-#: src/readelf.c:2982
-#, c-format
-msgid "%#<PRIx64> <%s+%#<PRIx64>>"
-msgstr ""
-
-#: src/readelf.c:2985
-#, c-format
-msgid "%#0*<PRIx64> <%s+%#<PRIx64>>"
-msgstr ""
-
-#: src/readelf.c:2991
-#, c-format
-msgid "%s+%#<PRIx64> <%s>"
-msgstr ""
-
-#: src/readelf.c:2994
-#, c-format
-msgid "%s+%#0*<PRIx64> <%s>"
-msgstr ""
-
-#: src/readelf.c:2998
-#, c-format
-msgid "%#<PRIx64> <%s>"
-msgstr ""
-
-#: src/readelf.c:3001
-#, c-format
-msgid "%#0*<PRIx64> <%s>"
-msgstr ""
-
-#: src/readelf.c:3006
-#, c-format
-msgid "%s+%#<PRIx64>"
-msgstr ""
-
-#: src/readelf.c:3009
-#, c-format
-msgid "%s+%#0*<PRIx64>"
-msgstr ""
-
-#: src/readelf.c:3117
-#, c-format
-msgid "unknown tag %hx"
-msgstr ""
-
-#: src/readelf.c:3119
-#, c-format
-msgid "unknown user tag %hx"
-msgstr ""
-
-#: src/readelf.c:3329
-#, c-format
-msgid "unknown attribute %hx"
-msgstr ""
-
-#: src/readelf.c:3332
-#, c-format
-msgid "unknown user attribute %hx"
-msgstr ""
-
-#: src/readelf.c:3378
-#, c-format
-msgid "unknown form %<PRIx64>"
-msgstr ""
-
-#: src/readelf.c:3966
-#, c-format
-msgid ""
-"\n"
-"DWARF section '%s' at offset %#<PRIx64>:\n"
-" [ Code]\n"
-msgstr ""
-
-#: src/readelf.c:3973
-#, c-format
-msgid ""
-"\n"
-"Abbreviation section at offset %<PRIu64>:\n"
-msgstr ""
-
-#: src/readelf.c:3986
-#, c-format
-msgid " *** error while reading abbreviation: %s\n"
-msgstr ""
-
-#: src/readelf.c:4002
-#, c-format
-msgid " [%5u] offset: %<PRId64>, children: %s, tag: %s\n"
-msgstr ""
-
-#: src/readelf.c:4005
-msgid "yes"
-msgstr ""
-
-#: src/readelf.c:4005
-msgid "no"
-msgstr ""
-
-#: src/readelf.c:4042
-#, c-format
-msgid "cannot get .debug_aranges content: %s"
-msgstr ""
-
-#: src/readelf.c:4047
-#, c-format
-msgid ""
-"\n"
-"DWARF section '%s' at offset %#<PRIx64> contains %zu entry:\n"
-msgid_plural ""
-"\n"
-"DWARF section '%s' at offset %#<PRIx64> contains %zu entries:\n"
-msgstr[0] ""
-msgstr[1] ""
-
-#: src/readelf.c:4077
-#, c-format
-msgid " [%*zu] ???\n"
-msgstr ""
-
-#: src/readelf.c:4079
-#, c-format
-msgid ""
-" [%*zu] start: %0#*<PRIx64>, length: %5<PRIu64>, CU DIE offset: %6<PRId64>\n"
-msgstr ""
-
-#: src/readelf.c:4098
-#, c-format
-msgid "cannot get .debug_ranges content: %s"
-msgstr ""
-
-#: src/readelf.c:4103 src/readelf.c:4516 src/readelf.c:4964 src/readelf.c:5059
-#: src/readelf.c:5232
-#, c-format
-msgid ""
-"\n"
-"DWARF section '%s' at offset %#<PRIx64>:\n"
-msgstr ""
-
-#: src/readelf.c:4117 src/readelf.c:4978
-#, c-format
-msgid " [%6tx] <INVALID DATA>\n"
-msgstr ""
-
-#: src/readelf.c:4139 src/readelf.c:5000
-#, c-format
-msgid " [%6tx] base address %s\n"
-msgstr ""
-
-#: src/readelf.c:4150
-#, c-format
-msgid " [%6tx] %s..%s\n"
-msgstr ""
-
-#: src/readelf.c:4152
-#, c-format
-msgid " %s..%s\n"
-msgstr ""
-
-#: src/readelf.c:4192
-#, c-format
-msgid "cannot get attribute code: %s"
-msgstr ""
-
-#: src/readelf.c:4200
-#, c-format
-msgid "cannot get attribute form: %s"
-msgstr ""
-
-#: src/readelf.c:4213
-#, c-format
-msgid "cannot get attribute value: %s"
-msgstr ""
-
-#: src/readelf.c:4395
-#, c-format
-msgid ""
-"\n"
-"DWARF section '%s' at offset %#<PRIx64>:\n"
-" [Offset]\n"
-msgstr ""
-
-#: src/readelf.c:4420
-#, c-format
-msgid ""
-" Compilation unit at offset %<PRIu64>:\n"
-" Version: %<PRIu16>, Abbreviation section offset: %<PRIu64>, Address size: %"
-"<PRIu8>, Offset size: %<PRIu8>\n"
-msgstr ""
-
-#: src/readelf.c:4438
-#, c-format
-msgid "cannot get DIE at offset %<PRIu64> in section '%s': %s"
-msgstr ""
-
-#: src/readelf.c:4449
-#, c-format
-msgid "cannot get DIE offset: %s"
-msgstr ""
-
-#: src/readelf.c:4457
-#, c-format
-msgid "cannot get tag of DIE at offset %<PRIu64> in section '%s': %s"
-msgstr ""
-
-#: src/readelf.c:4486
-#, c-format
-msgid "cannot get next DIE: %s\n"
-msgstr ""
-
-#: src/readelf.c:4493
-#, c-format
-msgid "cannot get next DIE: %s"
-msgstr ""
-
-#: src/readelf.c:4528
-#, c-format
-msgid "cannot get line data section data: %s"
-msgstr ""
-
-#: src/readelf.c:4541
-#, c-format
-msgid ""
-"\n"
-"Table at offset %Zu:\n"
-msgstr ""
-
-#: src/readelf.c:4550
-#, c-format
-msgid "invalid data in section [%zu] '%s'"
-msgstr ""
-
-#: src/readelf.c:4593
-#, c-format
-msgid ""
-"\n"
-" Length: %<PRIu64>\n"
-" DWARF version: %<PRIuFAST16>\n"
-" Prologue length: %<PRIu64>\n"
-" Minimum instruction length: %<PRIuFAST8>\n"
-" Initial value if '%s': %<PRIuFAST8>\n"
-" Line base: %<PRIdFAST8>\n"
-" Line range: %<PRIuFAST8>\n"
-" Opcode base: %<PRIuFAST8>\n"
-"\n"
-"Opcodes:\n"
-msgstr ""
-
-#: src/readelf.c:4612
-#, c-format
-msgid "invalid data at offset %tu in section [%zu] '%s'"
-msgstr ""
-
-#: src/readelf.c:4627
-#, c-format
-msgid " [%*<PRIuFAST8>] %hhu argument\n"
-msgid_plural " [%*<PRIuFAST8>] %hhu arguments\n"
-msgstr[0] ""
-msgstr[1] ""
-
-#: src/readelf.c:4635
-msgid ""
-"\n"
-"Directory table:"
-msgstr ""
-
-#: src/readelf.c:4651
-msgid ""
-"\n"
-"File name table:\n"
-" Entry Dir Time Size Name"
-msgstr ""
-
-#: src/readelf.c:4680
-msgid ""
-"\n"
-"Line number statements:"
-msgstr ""
-
-#: src/readelf.c:4741
-#, c-format
-msgid " special opcode %u: address+%u = %s, line%+d = %zu\n"
-msgstr ""
-
-#: src/readelf.c:4761
-#, c-format
-msgid " extended opcode %u: "
-msgstr ""
-
-#: src/readelf.c:4766
-msgid "end of sequence"
-msgstr ""
-
-#: src/readelf.c:4781
-#, c-format
-msgid "set address to %s\n"
-msgstr ""
-
-#: src/readelf.c:4802
-#, c-format
-msgid "define new file: dir=%u, mtime=%<PRIu64>, length=%<PRIu64>, name=%s\n"
-msgstr ""
-
-#: src/readelf.c:4811
-msgid "unknown opcode"
-msgstr ""
-
-#: src/readelf.c:4823
-msgid " copy"
-msgstr ""
-
-#: src/readelf.c:4833
-#, c-format
-msgid "advance address by %u to %s\n"
-msgstr ""
-
-#: src/readelf.c:4844
-#, c-format
-msgid " advance line by constant %d to %<PRId64>\n"
-msgstr ""
-
-#: src/readelf.c:4852
-#, c-format
-msgid " set file to %<PRIu64>\n"
-msgstr ""
-
-#: src/readelf.c:4862
-#, c-format
-msgid " set column to %<PRIu64>\n"
-msgstr ""
-
-#: src/readelf.c:4869
-#, c-format
-msgid " set '%s' to %<PRIuFAST8>\n"
-msgstr ""
-
-#: src/readelf.c:4875
-msgid " set basic block flag"
-msgstr ""
-
-#: src/readelf.c:4885
-#, c-format
-msgid "advance address by constant %u to %s\n"
-msgstr ""
-
-#: src/readelf.c:4901
-#, c-format
-msgid "advance address by fixed value %u to %s\n"
-msgstr ""
-
-#: src/readelf.c:4910
-msgid " set prologue end flag"
-msgstr ""
-
-#: src/readelf.c:4915
-msgid " set epilogue begin flag"
-msgstr ""
-
-#: src/readelf.c:4924
-#, c-format
-msgid " unknown opcode with %<PRIu8> parameter:"
-msgid_plural " unknown opcode with %<PRIu8> parameters:"
-msgstr[0] ""
-msgstr[1] ""
-
-#: src/readelf.c:4959
-#, c-format
-msgid "cannot get .debug_loc content: %s"
-msgstr ""
-
-#: src/readelf.c:5014
-#, c-format
-msgid " [%6tx] %s..%s"
-msgstr ""
-
-#: src/readelf.c:5016
-#, c-format
-msgid " %s..%s"
-msgstr ""
-
-#: src/readelf.c:5069
-#, c-format
-msgid "cannot get macro information section data: %s"
-msgstr ""
-
-#: src/readelf.c:5148
-#, c-format
-msgid "%*s*** non-terminated string at end of section"
-msgstr ""
-
-#: src/readelf.c:5216
-#, c-format
-msgid " [%5d] DIE offset: %6<PRId64>, CU DIE offset: %6<PRId64>, name: %s\n"
-msgstr ""
-
-#: src/readelf.c:5257
-#, c-format
-msgid ""
-"\n"
-"DWARF section '%s' at offset %#<PRIx64>:\n"
-" %*s String\n"
-msgstr ""
-
-#: src/readelf.c:5270
-#, c-format
-msgid " *** error while reading strings: %s\n"
-msgstr ""
-
-#: src/readelf.c:5289
-#, c-format
-msgid "cannot get debug context descriptor: %s"
-msgstr ""
-
-#: src/readelf.c:5419 src/readelf.c:5997
-#, c-format
-msgid "cannot convert core note data: %s"
-msgstr ""
-
-#: src/readelf.c:5724
-#, c-format
-msgid ""
-"\n"
-"%*s... <repeats %u more times> ..."
-msgstr ""
-
-#: src/readelf.c:5766
-#, c-format
-msgid "unable to handle register number %d"
-msgstr ""
-
-#: src/readelf.c:5913 src/readelf.c:5937
-#, c-format
-msgid "cannot register info: %s"
-msgstr ""
-
-#: src/readelf.c:6095
-msgid " Owner Data size Type\n"
-msgstr ""
-
-#: src/readelf.c:6113
-#, c-format
-msgid " %-13.*s %9<PRId32> %s\n"
-msgstr ""
-
-#: src/readelf.c:6144
-#, c-format
-msgid "cannot get content of note section: %s"
-msgstr ""
-
-#: src/readelf.c:6171
-#, c-format
-msgid ""
-"\n"
-"Note section [%2zu] '%s' of %<PRIu64> bytes at offset %#0<PRIx64>:\n"
-msgstr ""
-
-#: src/readelf.c:6194
-#, c-format
-msgid ""
-"\n"
-"Note segment of %<PRIu64> bytes at offset %#0<PRIx64>:\n"
-msgstr ""
-
-#: src/readelf.c:6240
-#, c-format
-msgid ""
-"\n"
-"Section [%Zu] '%s' has no data to dump.\n"
-msgstr ""
-
-#: src/readelf.c:6246 src/readelf.c:6268
-#, c-format
-msgid "cannot get data for section [%Zu] '%s': %s"
-msgstr ""
-
-#: src/readelf.c:6250
-#, c-format
-msgid ""
-"\n"
-"Hex dump of section [%Zu] '%s', %<PRIu64> bytes at offset %#0<PRIx64>:\n"
-msgstr ""
-
-#: src/readelf.c:6263
-#, c-format
-msgid ""
-"\n"
-"Section [%Zu] '%s' is empty.\n"
-msgstr ""
-
-#: src/readelf.c:6272
-#, c-format
-msgid ""
-"\n"
-"String section [%Zu] '%s' contains %<PRIu64> bytes at offset %#0<PRIx64>:\n"
-msgstr ""
-
-#: src/readelf.c:6319
-#, c-format
-msgid ""
-"\n"
-"section [%lu] does not exist"
-msgstr ""
-
-#: src/readelf.c:6345
-#, c-format
-msgid ""
-"\n"
-"section '%s' does not exist"
-msgstr ""
-
-#: src/readelf.c:6406
-#, c-format
-msgid "cannot get symbol index of archive '%s': %s"
-msgstr ""
-
-#: src/readelf.c:6409
-#, c-format
-msgid ""
-"\n"
-"Archive '%s' has no symbol index\n"
-msgstr ""
-
-#: src/readelf.c:6413
-#, c-format
-msgid ""
-"\n"
-"Index of archive '%s' has %Zu entries:\n"
-msgstr ""
-
-#: src/readelf.c:6431
-#, c-format
-msgid "cannot extract member at offset %Zu in '%s': %s"
-msgstr ""
-
-#: src/readelf.c:6436
-#, c-format
-msgid "Archive member '%s' contains:\n"
-msgstr ""
-
-#: src/size.c:68
-msgid ""
-"Use the output format FORMAT. FORMAT can be `bsd' or `sysv'. The default "
-"is `bsd'"
-msgstr ""
-
-#: src/size.c:70
-msgid "Same as `--format=sysv'"
-msgstr ""
-
-#: src/size.c:71
-msgid "Same as `--format=bsd'"
-msgstr ""
-
-#: src/size.c:74
-msgid "Same as `--radix=10'"
-msgstr ""
-
-#: src/size.c:75
-msgid "Same as `--radix=8'"
-msgstr ""
-
-#: src/size.c:76
-msgid "Same as `--radix=16'"
-msgstr ""
-
-#: src/size.c:78
-msgid "Similar to `--format=sysv' output but in one line"
-msgstr ""
-
-#: src/size.c:82
-msgid "Print size and permission flags for loadable segments"
-msgstr ""
-
-#: src/size.c:83
-msgid "Display the total sizes (bsd only)"
-msgstr ""
-
-#: src/size.c:88
-msgid "List section sizes of FILEs (a.out by default)."
-msgstr ""
-
-#: src/size.c:269
-#, c-format
-msgid "Invalid format: %s"
-msgstr ""
-
-#: src/size.c:280
-#, c-format
-msgid "Invalid radix: %s"
-msgstr ""
-
-#: src/size.c:329
-#, c-format
-msgid "%s: file format not recognized"
-msgstr ""
-
-#: src/size.c:439 src/size.c:582
-#, c-format
-msgid " (ex %s)"
-msgstr ""
-
-#: src/size.c:607
-msgid "(TOTALS)\n"
-msgstr ""
-
-#: src/strip.c:73
-msgid "Place stripped output into FILE"
-msgstr ""
-
-#: src/strip.c:74
-msgid "Extract the removed sections into FILE"
-msgstr ""
-
-#: src/strip.c:75
-msgid "Embed name FILE instead of -f argument"
-msgstr ""
-
-#: src/strip.c:79
-msgid "Remove all debugging symbols"
-msgstr ""
-
-#: src/strip.c:83
-msgid "Copy modified/access timestamps to the output"
-msgstr ""
-
-#: src/strip.c:85
-msgid "Remove .comment section"
-msgstr ""
-
-#: src/strip.c:88
-msgid "Relax a few rules to handle slightly broken ELF files"
-msgstr ""
-
-#: src/strip.c:93
-msgid "Discard symbols from object files."
-msgstr ""
-
-#: src/strip.c:185
-#, c-format
-msgid "Only one input file allowed together with '-o' and '-f'"
-msgstr ""
-
-#: src/strip.c:221
-#, c-format
-msgid "-f option specified twice"
-msgstr ""
-
-#: src/strip.c:230
-#, c-format
-msgid "-F option specified twice"
-msgstr ""
-
-#: src/strip.c:239
-#, c-format
-msgid "-o option specified twice"
-msgstr ""
-
-#: src/strip.c:259
-msgid "-R option supports only .comment section"
-msgstr ""
-
-#: src/strip.c:297 src/strip.c:321
-#, c-format
-msgid "cannot stat input file '%s'"
-msgstr ""
-
-#: src/strip.c:311
-#, c-format
-msgid "while opening '%s'"
-msgstr ""
-
-#: src/strip.c:349
-#, c-format
-msgid "%s: cannot use -o or -f when stripping archive"
-msgstr ""
-
-#: src/strip.c:447
-#, c-format
-msgid "cannot open EBL backend"
-msgstr ""
-
-#: src/strip.c:497 src/strip.c:521
-#, c-format
-msgid "cannot create new file '%s': %s"
-msgstr ""
-
-#: src/strip.c:581
-#, c-format
-msgid "illformed file '%s'"
-msgstr ""
-
-#: src/strip.c:867 src/strip.c:954
-#, c-format
-msgid "while generating output file: %s"
-msgstr ""
-
-#: src/strip.c:927 src/strip.c:1666
-#, c-format
-msgid "%s: error while creating ELF header: %s"
-msgstr ""
-
-#: src/strip.c:941
-#, c-format
-msgid "while preparing output for '%s'"
-msgstr ""
-
-#: src/strip.c:992 src/strip.c:1048
-#, c-format
-msgid "while create section header section: %s"
-msgstr ""
-
-#: src/strip.c:998
-#, c-format
-msgid "cannot allocate section data: %s"
-msgstr ""
-
-#: src/strip.c:1057
-#, c-format
-msgid "while create section header string table: %s"
-msgstr ""
-
-#: src/strip.c:1591 src/strip.c:1688
-#, c-format
-msgid "while writing '%s': %s"
-msgstr ""
-
-#: src/strip.c:1602
-#, c-format
-msgid "while creating '%s'"
-msgstr ""
-
-#: src/strip.c:1614
-#, c-format
-msgid "while computing checksum for debug information"
-msgstr ""
-
-#: src/strip.c:1674
-#, c-format
-msgid "%s: error while reading the file: %s"
-msgstr ""
-
-#: src/strip.c:1720 src/strip.c:1727
-#, c-format
-msgid "error while finishing '%s': %s"
-msgstr ""
-
-#: src/strip.c:1750 src/strip.c:1807
-#, c-format
-msgid "cannot set access and modification date of '%s'"
-msgstr ""
-
-#: src/ld.c:87
-msgid "Input File Control:"
-msgstr ""
-
-#: src/ld.c:89
-msgid "Include whole archives in the output from now on."
-msgstr ""
-
-#: src/ld.c:91
-msgid "Stop including the whole arhives in the output."
-msgstr ""
-
-#: src/ld.c:92 src/ld.c:106 src/ld.c:184
-msgid "FILE"
-msgstr ""
-
-#: src/ld.c:93
-msgid "Start a group."
-msgstr ""
-
-#: src/ld.c:94
-msgid "End a group."
-msgstr ""
-
-#: src/ld.c:95
-msgid "PATH"
-msgstr ""
-
-#: src/ld.c:96
-msgid "Add PATH to list of directories files are searched in."
-msgstr ""
-
-#: src/ld.c:98
-msgid "Only set DT_NEEDED for following dynamic libs if actually used"
-msgstr ""
-
-#: src/ld.c:100
-msgid "Always set DT_NEEDED for following dynamic libs"
-msgstr ""
-
-#: src/ld.c:102
-msgid "Ignore LD_LIBRARY_PATH environment variable."
-msgstr ""
-
-#: src/ld.c:105
-msgid "Output File Control:"
-msgstr ""
-
-#: src/ld.c:106
-msgid "Place output in FILE."
-msgstr ""
-
-#: src/ld.c:109
-msgid "Object is marked to not use default search path at runtime."
-msgstr ""
-
-#: src/ld.c:111
-msgid "Same as --whole-archive."
-msgstr ""
-
-#: src/ld.c:112
-msgid ""
-"Default rules of extracting from archive; weak references are not enough."
-msgstr ""
-
-#: src/ld.c:116
-msgid "Weak references cause extraction from archive."
-msgstr ""
-
-#: src/ld.c:118
-msgid "Allow multiple definitions; first is used."
-msgstr ""
-
-#: src/ld.c:120
-msgid "Disallow/allow undefined symbols in DSOs."
-msgstr ""
-
-#: src/ld.c:123
-msgid "Object requires immediate handling of $ORIGIN."
-msgstr ""
-
-#: src/ld.c:125
-msgid "Relocation will not be processed lazily."
-msgstr ""
-
-#: src/ld.c:127
-msgid "Object cannot be unloaded at runtime."
-msgstr ""
-
-#: src/ld.c:129
-msgid "Mark object to be initialized first."
-msgstr ""
-
-#: src/ld.c:131
-msgid "Enable/disable lazy-loading flag for following dependencies."
-msgstr ""
-
-#: src/ld.c:133
-msgid "Mark object as not loadable with 'dlopen'."
-msgstr ""
-
-#: src/ld.c:135
-msgid "Ignore/record dependencies on unused DSOs."
-msgstr ""
-
-#: src/ld.c:137
-msgid "Generated DSO will be a system library."
-msgstr ""
-
-#: src/ld.c:138
-msgid "ADDRESS"
-msgstr ""
-
-#: src/ld.c:138
-msgid "Set entry point address."
-msgstr ""
-
-#: src/ld.c:141
-msgid "Do not link against shared libraries."
-msgstr ""
-
-#: src/ld.c:144
-msgid "Prefer linking against shared libraries."
-msgstr ""
-
-#: src/ld.c:145
-msgid "Export all dynamic symbols."
-msgstr ""
-
-#: src/ld.c:146
-msgid "Strip all symbols."
-msgstr ""
-
-#: src/ld.c:147
-msgid "Strip debugging symbols."
-msgstr ""
-
-#: src/ld.c:149
-msgid "Assume pagesize for the target system to be SIZE."
-msgstr ""
-
-#: src/ld.c:151
-msgid "Set runtime DSO search path."
-msgstr ""
-
-#: src/ld.c:154
-msgid "Set link time DSO search path."
-msgstr ""
-
-#: src/ld.c:155
-msgid "Generate dynamic shared object."
-msgstr ""
-
-#: src/ld.c:156
-msgid "Generate relocatable object."
-msgstr ""
-
-#: src/ld.c:159
-msgid "Causes symbol not assigned to a version be reduced to local."
-msgstr ""
-
-#: src/ld.c:160
-msgid "Remove unused sections."
-msgstr ""
-
-#: src/ld.c:163
-msgid "Don't remove unused sections."
-msgstr ""
-
-#: src/ld.c:164
-msgid "Set soname of shared object."
-msgstr ""
-
-#: src/ld.c:165
-msgid "Set the dynamic linker name."
-msgstr ""
-
-#: src/ld.c:168
-msgid "Add/suppress addition indentifying link-editor to .comment section."
-msgstr ""
-
-#: src/ld.c:171
-msgid "Create .eh_frame_hdr section"
-msgstr ""
-
-#: src/ld.c:173
-msgid "Set hash style to sysv, gnu or both."
-msgstr ""
-
-#: src/ld.c:175
-msgid "Generate build ID note (md5, sha1 (default), uuid)."
-msgstr ""
-
-#: src/ld.c:177
-msgid "Linker Operation Control:"
-msgstr ""
-
-#: src/ld.c:178
-msgid "Verbose messages."
-msgstr ""
-
-#: src/ld.c:179
-msgid "Trace file opens."
-msgstr ""
-
-#: src/ld.c:181
-msgid "Trade speed for less memory usage"
-msgstr ""
-
-#: src/ld.c:182
-msgid "LEVEL"
-msgstr ""
-
-#: src/ld.c:183
-msgid "Set optimization level to LEVEL."
-msgstr ""
-
-#: src/ld.c:184
-msgid "Use linker script in FILE."
-msgstr ""
-
-#: src/ld.c:187
-msgid "Select to get parser debug information"
-msgstr ""
-
-#: src/ld.c:190
-msgid "Read version information from FILE."
-msgstr ""
-
-#: src/ld.c:191
-msgid "Set emulation to NAME."
-msgstr ""
-
-#: src/ld.c:197
-msgid "Combine object and archive files."
-msgstr ""
-
-#: src/ld.c:200
-msgid "[FILE]..."
-msgstr ""
-
-#: src/ld.c:333
-#, c-format
-msgid "At least one input file needed"
-msgstr ""
-
-#: src/ld.c:349
-#, c-format
-msgid "error while preparing linking"
-msgstr ""
-
-#: src/ld.c:356
-#, c-format
-msgid "cannot open linker script '%s'"
-msgstr ""
-
-#: src/ld.c:397
-#, c-format
-msgid "-( without matching -)"
-msgstr ""
-
-#: src/ld.c:572 src/ld.c:610
-#, c-format
-msgid "only one option of -G and -r is allowed"
-msgstr ""
-
-#: src/ld.c:594
-#, c-format
-msgid "more than one '-m' parameter"
-msgstr ""
-
-#: src/ld.c:604 src/ld.c:1013
-#, c-format
-msgid "unknown option `-%c %s'"
-msgstr ""
-
-#: src/ld.c:646
-#, c-format
-msgid "invalid page size value '%s': ignored"
-msgstr ""
-
-#: src/ld.c:687
-#, c-format
-msgid "invalid hash style '%s'"
-msgstr ""
-
-#: src/ld.c:697
-#, c-format
-msgid "invalid build-ID style '%s'"
-msgstr ""
-
-#: src/ld.c:785
-#, c-format
-msgid "More than one output file name given."
-msgstr ""
-
-#: src/ld.c:802
-#, c-format
-msgid "Invalid optimization level `%s'"
-msgstr ""
-
-#: src/ld.c:850
-#, c-format
-msgid "nested -( -) groups are not allowed"
-msgstr ""
-
-#: src/ld.c:869
-#, c-format
-msgid "-) without matching -("
-msgstr ""
-
-#: src/ld.c:1046
-#, c-format
-msgid "unknown option '-%c %s'"
-msgstr ""
-
-#: src/ld.c:1150
-#, c-format
-msgid "could not find input file to determine output file format"
-msgstr ""
-
-#: src/ld.c:1152
-#, c-format
-msgid "try again with an appropriate '-m' parameter"
-msgstr ""
-
-#: src/ld.c:1445
-#, c-format
-msgid "cannot read version script '%s'"
-msgstr ""
-
-#: src/ld.c:1511 src/ld.c:1550
-#, c-format
-msgid "duplicate definition of '%s' in linker script"
-msgstr ""
-
-#: src/ldgeneric.c:209 src/ldgeneric.c:5151
-#, c-format
-msgid "cannot create string table"
-msgstr ""
-
-#: src/ldgeneric.c:255
-#, c-format
-msgid "cannot load ld backend library '%s': %s"
-msgstr ""
-
-#: src/ldgeneric.c:265
-#, c-format
-msgid "cannot find init function in ld backend library '%s': %s"
-msgstr ""
-
-#: src/ldgeneric.c:310
-#, c-format
-msgid "%s listed more than once as input"
-msgstr ""
-
-#: src/ldgeneric.c:424
-#, c-format
-msgid "%s (for -l%s)\n"
-msgstr ""
-
-#: src/ldgeneric.c:425
-#, c-format
-msgid "%s (for DT_NEEDED %s)\n"
-msgstr ""
-
-#: src/ldgeneric.c:519
-#, c-format
-msgid "cannot open %s"
-msgstr ""
-
-#: src/ldgeneric.c:573
-#, c-format
-msgid "Warning: type of `%s' changed from %s in %s to %s in %s"
-msgstr ""
-
-#: src/ldgeneric.c:586
-#, c-format
-msgid "Warning: size of `%s' changed from %<PRIu64> in %s to %<PRIu64> in %s"
-msgstr ""
-
-#: src/ldgeneric.c:677
-#, c-format
-msgid "(%s+%#<PRIx64>): multiple definition of %s `%s'\n"
-msgstr ""
-
-#: src/ldgeneric.c:700
-#, c-format
-msgid "(%s+%#<PRIx64>): first defined here\n"
-msgstr ""
-
-#: src/ldgeneric.c:819
-#, c-format
-msgid "%s: cannot get section group data: %s"
-msgstr ""
-
-#: src/ldgeneric.c:840
-#, c-format
-msgid "%s: section '%s' with group flag set does not belong to any group"
-msgstr ""
-
-#: src/ldgeneric.c:885
-#, c-format
-msgid "%s: section [%2d] '%s' is not in the correct section group"
-msgstr ""
-
-#: src/ldgeneric.c:1156 src/ldgeneric.c:1413 src/ldgeneric.c:1422
-#: src/ldgeneric.c:1481 src/ldgeneric.c:1490 src/ldgeneric.c:1753
-#: src/ldgeneric.c:2005
-#, c-format
-msgid "%s: invalid ELF file (%s:%d)\n"
-msgstr ""
-
-#: src/ldgeneric.c:1250
-#, c-format
-msgid "%s: only files of type ET_REL might contain section groups"
-msgstr ""
-
-#: src/ldgeneric.c:1302
-#, c-format
-msgid "%s: cannot determine signature of section group [%2zd] '%s': %s"
-msgstr ""
-
-#: src/ldgeneric.c:1314
-#, c-format
-msgid "%s: cannot get content of section group [%2zd] '%s': %s'"
-msgstr ""
-
-#: src/ldgeneric.c:1328
-#, c-format
-msgid ""
-"%s: group member %zu of section group [%2zd] '%s' has too high index: %"
-"<PRIu32>"
-msgstr ""
-
-#: src/ldgeneric.c:1350
-#, c-format
-msgid "%s: section '%s' has unknown type: %d"
-msgstr ""
-
-#: src/ldgeneric.c:1729
-#, c-format
-msgid "cannot get descriptor for ELF file (%s:%d): %s\n"
-msgstr ""
-
-#: src/ldgeneric.c:1899
-#, c-format
-msgid "cannot read archive `%s': %s"
-msgstr ""
-
-#: src/ldgeneric.c:2020
-#, c-format
-msgid "file of type %s cannot be linked in\n"
-msgstr ""
-
-#: src/ldgeneric.c:2032
-#, c-format
-msgid "%s: input file incompatible with ELF machine type %s\n"
-msgstr ""
-
-#: src/ldgeneric.c:2044
-#, c-format
-msgid "%s: cannot get section header string table index: %s\n"
-msgstr ""
-
-#: src/ldgeneric.c:2073
-#, c-format
-msgid "cannot use DSO '%s' when generating relocatable object file"
-msgstr ""
-
-#: src/ldgeneric.c:2158
-#, c-format
-msgid "input file '%s' ignored"
-msgstr ""
-
-#: src/ldgeneric.c:2372
-#, c-format
-msgid "undefined symbol `%s' in %s"
-msgstr ""
-
-#: src/ldgeneric.c:2702
-#, c-format
-msgid "cannot create ELF descriptor for output file: %s"
-msgstr ""
-
-#: src/ldgeneric.c:2709
-#, c-format
-msgid "could not create ELF header for output file: %s"
-msgstr ""
-
-#: src/ldgeneric.c:3224 src/ldgeneric.c:3294 src/ldgeneric.c:3330
-#: src/ldgeneric.c:4457 src/ldgeneric.c:4506 src/ldgeneric.c:4538
-#: src/ldgeneric.c:4773 src/ldgeneric.c:4828 src/ldgeneric.c:5075
-#: src/ldgeneric.c:5131 src/ldgeneric.c:5600 src/ldgeneric.c:5612
-#, c-format
-msgid "cannot create section for output file: %s"
-msgstr ""
-
-#: src/ldgeneric.c:3444
-#, c-format
-msgid "address computation expression contains variable '%s'"
-msgstr ""
-
-#: src/ldgeneric.c:3489
-#, c-format
-msgid ""
-"argument '%<PRIuMAX>' of ALIGN in address computation expression is no power "
-"of two"
-msgstr ""
-
-#: src/ldgeneric.c:3684
-#, c-format
-msgid "cannot find entry symbol '%s': defaulting to %#0*<PRIx64>"
-msgstr ""
-
-#: src/ldgeneric.c:3690
-#, c-format
-msgid "no entry symbol specified: defaulting to %#0*<PRIx64>"
-msgstr ""
-
-#: src/ldgeneric.c:3920
-#, c-format
-msgid "cannot create GNU hash table section for output file: %s"
-msgstr ""
-
-#: src/ldgeneric.c:4071
-#, c-format
-msgid "cannot create hash table section for output file: %s"
-msgstr ""
-
-#: src/ldgeneric.c:4114
-#, c-format
-msgid "cannot create build ID section: %s"
-msgstr ""
-
-#: src/ldgeneric.c:4191
-#, c-format
-msgid "cannot convert section data to file format: %s"
-msgstr ""
-
-#: src/ldgeneric.c:4200
-#, c-format
-msgid "cannot convert section data to memory format: %s"
-msgstr ""
-
-#: src/ldgeneric.c:4261
-#, c-format
-msgid "cannot read enough data for UUID"
-msgstr ""
-
-#: src/ldgeneric.c:4358 src/ldgeneric.c:4379 src/ldgeneric.c:4408
-#: src/ldgeneric.c:6062
-#, c-format
-msgid "cannot create symbol table for output file: %s"
-msgstr ""
-
-#: src/ldgeneric.c:5300 src/ldgeneric.c:5852
-#, c-format
-msgid "section index too large in dynamic symbol table"
-msgstr ""
-
-#: src/ldgeneric.c:5745
-#, c-format
-msgid "cannot create versioning section: %s"
-msgstr ""
-
-#: src/ldgeneric.c:5818
-#, c-format
-msgid "cannot create dynamic symbol table for output file: %s"
-msgstr ""
-
-#: src/ldgeneric.c:5994
-#, c-format
-msgid "cannot create versioning data: %s"
-msgstr ""
-
-#: src/ldgeneric.c:6094 src/ldgeneric.c:6107 src/ldgeneric.c:6171
-#: src/ldgeneric.c:6179
-#, c-format
-msgid "cannot create section header string section: %s"
-msgstr ""
-
-#: src/ldgeneric.c:6101
-#, c-format
-msgid "cannot create section header string section"
-msgstr ""
-
-#: src/ldgeneric.c:6259
-#, c-format
-msgid "cannot create program header: %s"
-msgstr ""
-
-#: src/ldgeneric.c:6267
-#, c-format
-msgid "while determining file layout: %s"
-msgstr ""
-
-#: src/ldgeneric.c:6388
-#, c-format
-msgid "internal error: non-nobits section follows nobits section"
-msgstr ""
-
-#: src/ldgeneric.c:6925
-#, c-format
-msgid "cannot get header of 0th section: %s"
-msgstr ""
-
-#: src/ldgeneric.c:6941
-#, c-format
-msgid "cannot update ELF header: %s"
-msgstr ""
-
-#: src/ldgeneric.c:6972
-#, c-format
-msgid "linker backend didn't specify function to relocate section"
-msgstr ""
-
-#: src/ldgeneric.c:6984
-#, c-format
-msgid "while writing output file: %s"
-msgstr ""
-
-#: src/ldgeneric.c:6989
-#, c-format
-msgid "while finishing output file: %s"
-msgstr ""
-
-#: src/ldgeneric.c:6995
-#, c-format
-msgid "cannot stat output file"
-msgstr ""
-
-#: src/ldgeneric.c:7011
-#, c-format
-msgid "WARNING: temporary output file overwritten before linking finished"
-msgstr ""
-
-#: src/ldgeneric.c:7064 src/ldgeneric.c:7075 src/ldgeneric.c:7086
-#: src/ldgeneric.c:7097 src/ldgeneric.c:7116 src/ldgeneric.c:7129
-#: src/ldgeneric.c:7141
-#, c-format
-msgid "no machine specific '%s' implementation"
-msgstr ""
-
-#: src/ldscript.y:178
-msgid "mode for segment invalid\n"
-msgstr ""
-
-#: src/ldscript.y:465
-#, c-format
-msgid "while reading version script '%s': %s at line %d"
-msgstr ""
-
-#: src/ldscript.y:466
-#, c-format
-msgid "while reading linker script '%s': %s at line %d"
-msgstr ""
-
-#: src/ldscript.y:745
-#, c-format
-msgid "symbol '%s' in declared both local and global for unnamed version"
-msgstr ""
-
-#: src/ldscript.y:747
-#, c-format
-msgid "symbol '%s' in declared both local and global for version '%s'"
-msgstr ""
-
-#: src/ldscript.y:767 src/ldscript.y:774
-#, c-format
-msgid "default visibility set as local and global"
-msgstr ""
-
-#: src/elflint.c:72
-msgid "Be extremely strict, flag level 2 features."
-msgstr ""
-
-#: src/elflint.c:73
-msgid "Do not print anything if successful"
-msgstr ""
-
-#: src/elflint.c:74
-msgid "Binary is a separate debuginfo file"
-msgstr ""
-
-#: src/elflint.c:76
-msgid ""
-"Binary has been created with GNU ld and is therefore known to be broken in "
-"certain ways"
-msgstr ""
-
-#: src/elflint.c:82
-msgid "Pedantic checking of ELF files compliance with gABI/psABI spec."
-msgstr ""
-
-#: src/elflint.c:166
-#, c-format
-msgid "cannot generate Elf descriptor: %s\n"
-msgstr ""
-
-#: src/elflint.c:185
-#, c-format
-msgid "error while closing Elf descriptor: %s\n"
-msgstr ""
-
-#: src/elflint.c:189
-msgid "No errors"
-msgstr ""
-
-#: src/elflint.c:303
-#, c-format
-msgid " error while freeing sub-ELF descriptor: %s\n"
-msgstr ""
-
-#: src/elflint.c:311
-#, c-format
-msgid "Not an ELF file - it has the wrong magic bytes at the start\n"
-msgstr ""
-
-#: src/elflint.c:370
-#, c-format
-msgid "e_ident[%d] == %d is no known class\n"
-msgstr ""
-
-#: src/elflint.c:375
-#, c-format
-msgid "e_ident[%d] == %d is no known data encoding\n"
-msgstr ""
-
-#: src/elflint.c:379
-#, c-format
-msgid "unknown ELF header version number e_ident[%d] == %d\n"
-msgstr ""
-
-#: src/elflint.c:384
-#, c-format
-msgid "unsupported OS ABI e_ident[%d] == '%s'\n"
-msgstr ""
-
-#: src/elflint.c:390
-#, c-format
-msgid "unsupport ABI version e_ident[%d] == %d\n"
-msgstr ""
-
-#: src/elflint.c:395
-#, c-format
-msgid "e_ident[%zu] is not zero\n"
-msgstr ""
-
-#: src/elflint.c:400
-#, c-format
-msgid "unknown object file type %d\n"
-msgstr ""
-
-#: src/elflint.c:407
-#, c-format
-msgid "unknown machine type %d\n"
-msgstr ""
-
-#: src/elflint.c:411
-#, c-format
-msgid "unknown object file version\n"
-msgstr ""
-
-#: src/elflint.c:417
-#, c-format
-msgid "invalid program header offset\n"
-msgstr ""
-
-#: src/elflint.c:419
-#, c-format
-msgid "executables and DSOs cannot have zero program header offset\n"
-msgstr ""
-
-#: src/elflint.c:423
-#, c-format
-msgid "invalid number of program header entries\n"
-msgstr ""
-
-#: src/elflint.c:431
-#, c-format
-msgid "invalid section header table offset\n"
-msgstr ""
-
-#: src/elflint.c:434
-#, c-format
-msgid "section header table must be present\n"
-msgstr ""
-
-#: src/elflint.c:448
-#, c-format
-msgid "invalid number of section header table entries\n"
-msgstr ""
-
-#: src/elflint.c:465
-#, c-format
-msgid "invalid section header index\n"
-msgstr ""
-
-#: src/elflint.c:470
-#, c-format
-msgid "invalid machine flags: %s\n"
-msgstr ""
-
-#: src/elflint.c:477 src/elflint.c:494
-#, c-format
-msgid "invalid ELF header size: %hd\n"
-msgstr ""
-
-#: src/elflint.c:480 src/elflint.c:497
-#, c-format
-msgid "invalid program header size: %hd\n"
-msgstr ""
-
-#: src/elflint.c:483 src/elflint.c:500
-#, c-format
-msgid "invalid program header position or size\n"
-msgstr ""
-
-#: src/elflint.c:486 src/elflint.c:503
-#, c-format
-msgid "invalid section header size: %hd\n"
-msgstr ""
-
-#: src/elflint.c:489 src/elflint.c:506
-#, c-format
-msgid "invalid section header position or size\n"
-msgstr ""
-
-#: src/elflint.c:550
-#, c-format
-msgid ""
-"section [%2d] '%s': section with SHF_GROUP flag set not part of a section "
-"group\n"
-msgstr ""
-
-#: src/elflint.c:554
-#, c-format
-msgid ""
-"section [%2d] '%s': section group [%2zu] '%s' does not preceed group member\n"
-msgstr ""
-
-#: src/elflint.c:570 src/elflint.c:1395 src/elflint.c:1445 src/elflint.c:1554
-#: src/elflint.c:2148 src/elflint.c:2662 src/elflint.c:2823 src/elflint.c:2953
-#: src/elflint.c:3125 src/elflint.c:4005
-#, c-format
-msgid "section [%2d] '%s': cannot get section data\n"
-msgstr ""
-
-#: src/elflint.c:583 src/elflint.c:1561
-#, c-format
-msgid ""
-"section [%2d] '%s': referenced as string table for section [%2d] '%s' but "
-"type is not SHT_STRTAB\n"
-msgstr ""
-
-#: src/elflint.c:606
-#, c-format
-msgid ""
-"section [%2d] '%s': symbol table cannot have more than one extended index "
-"section\n"
-msgstr ""
-
-#: src/elflint.c:617
-#, c-format
-msgid "section [%2u] '%s': entry size is does not match ElfXX_Sym\n"
-msgstr ""
-
-#: src/elflint.c:626
-#, c-format
-msgid "section [%2d] '%s': cannot get symbol %d: %s\n"
-msgstr ""
-
-#: src/elflint.c:631 src/elflint.c:634 src/elflint.c:637 src/elflint.c:640
-#: src/elflint.c:643 src/elflint.c:646
-#, c-format
-msgid "section [%2d] '%s': '%s' in zeroth entry not zero\n"
-msgstr ""
-
-#: src/elflint.c:649
-#, c-format
-msgid "section [%2d] '%s': XINDEX for zeroth entry not zero\n"
-msgstr ""
-
-#: src/elflint.c:659
-#, c-format
-msgid "section [%2d] '%s': cannot get symbol %zu: %s\n"
-msgstr ""
-
-#: src/elflint.c:668
-#, c-format
-msgid "section [%2d] '%s': symbol %zu: invalid name value\n"
-msgstr ""
-
-#: src/elflint.c:681
-#, c-format
-msgid ""
-"section [%2d] '%s': symbol %zu: too large section index but no extended "
-"section index section\n"
-msgstr ""
-
-#: src/elflint.c:687
-#, c-format
-msgid ""
-"section [%2d] '%s': symbol %zu: XINDEX used for index which would fit in "
-"st_shndx (%<PRIu32>)\n"
-msgstr ""
-
-#: src/elflint.c:699
-#, c-format
-msgid "section [%2d] '%s': symbol %zu: invalid section index\n"
-msgstr ""
-
-#: src/elflint.c:707
-#, c-format
-msgid "section [%2d] '%s': symbol %zu: unknown type\n"
-msgstr ""
-
-#: src/elflint.c:711
-#, c-format
-msgid "section [%2d] '%s': symbol %zu: unknown symbol binding\n"
-msgstr ""
-
-#: src/elflint.c:719
-#, c-format
-msgid ""
-"section [%2d] '%s': symbol %zu: COMMON only allowed in relocatable files\n"
-msgstr ""
-
-#: src/elflint.c:723
-#, c-format
-msgid "section [%2d] '%s': symbol %zu: local COMMON symbols are nonsense\n"
-msgstr ""
-
-#: src/elflint.c:727
-#, c-format
-msgid ""
-"section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n"
-msgstr ""
-
-#: src/elflint.c:759
-#, c-format
-msgid "section [%2d] '%s': symbol %zu: st_value out of bounds\n"
-msgstr ""
-
-#: src/elflint.c:765 src/elflint.c:790 src/elflint.c:833
-#, c-format
-msgid ""
-"section [%2d] '%s': symbol %zu does not fit completely in referenced section "
-"[%2d] '%s'\n"
-msgstr ""
-
-#: src/elflint.c:774
-#, c-format
-msgid ""
-"section [%2d] '%s': symbol %zu: referenced section [%2d] '%s' does not have "
-"SHF_TLS flag set\n"
-msgstr ""
-
-#: src/elflint.c:784 src/elflint.c:826
-#, c-format
-msgid ""
-"section [%2d] '%s': symbol %zu: st_value out of bounds of referenced section "
-"[%2d] '%s'\n"
-msgstr ""
-
-#: src/elflint.c:811
-#, c-format
-msgid ""
-"section [%2d] '%s': symbol %zu: TLS symbol but no TLS program header entry\n"
-msgstr ""
-
-#: src/elflint.c:819
-#, c-format
-msgid ""
-"section [%2d] '%s': symbol %zu: st_value short of referenced section [%2d] '%"
-"s'\n"
-msgstr ""
-
-#: src/elflint.c:846
-#, c-format
-msgid ""
-"section [%2d] '%s': symbol %zu: local symbol outside range described in "
-"sh_info\n"
-msgstr ""
-
-#: src/elflint.c:853
-#, c-format
-msgid ""
-"section [%2d] '%s': symbol %zu: non-local symbol outside range described in "
-"sh_info\n"
-msgstr ""
-
-#: src/elflint.c:860
-#, c-format
-msgid "section [%2d] '%s': symbol %zu: non-local section symbol\n"
-msgstr ""
-
-#: src/elflint.c:910
-#, c-format
-msgid ""
-"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section [%"
-"2d]\n"
-msgstr ""
-
-#: src/elflint.c:917
-#, c-format
-msgid ""
-"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] '%"
-"s'\n"
-msgstr ""
-
-#: src/elflint.c:933
-#, c-format
-msgid ""
-"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %#<PRIx64> does not "
-"match %s section address %#<PRIx64>\n"
-msgstr ""
-
-#: src/elflint.c:940
-#, c-format
-msgid ""
-"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size %<PRIu64> does not "
-"match %s section size %<PRIu64>\n"
-msgstr ""
-
-#: src/elflint.c:948
-#, c-format
-msgid ""
-"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got "
-"section\n"
-msgstr ""
-
-#: src/elflint.c:964
-#, c-format
-msgid ""
-"section [%2d] '%s': _DYNAMIC_ symbol value %#<PRIx64> does not match dynamic "
-"segment address %#<PRIx64>\n"
-msgstr ""
-
-#: src/elflint.c:971
-#, c-format
-msgid ""
-"section [%2d] '%s': _DYNAMIC symbol size %<PRIu64> does not match dynamic "
-"segment size %<PRIu64>\n"
-msgstr ""
-
-#: src/elflint.c:1022
-#, c-format
-msgid "section [%2d] '%s': DT_RELCOUNT used for this RELA section\n"
-msgstr ""
-
-#: src/elflint.c:1031 src/elflint.c:1083
-#, c-format
-msgid "section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n"
-msgstr ""
-
-#: src/elflint.c:1056 src/elflint.c:1108
-#, c-format
-msgid ""
-"section [%2d] '%s': relative relocations after index %d as specified by "
-"DT_RELCOUNT\n"
-msgstr ""
-
-#: src/elflint.c:1062 src/elflint.c:1114
-#, c-format
-msgid ""
-"section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT "
-"specified %d relative relocations\n"
-msgstr ""
-
-#: src/elflint.c:1074
-#, c-format
-msgid "section [%2d] '%s': DT_RELACOUNT used for this REL section\n"
-msgstr ""
-
-#: src/elflint.c:1156
-#, c-format
-msgid "section [%2d] '%s': invalid destination section index\n"
-msgstr ""
-
-#: src/elflint.c:1169
-#, c-format
-msgid "section [%2d] '%s': invalid destination section type\n"
-msgstr ""
-
-#: src/elflint.c:1177
-#, c-format
-msgid "section [%2d] '%s': sh_info should be zero\n"
-msgstr ""
-
-#: src/elflint.c:1184
-#, c-format
-msgid "section [%2d] '%s': no relocations for merge-able sections possible\n"
-msgstr ""
-
-#: src/elflint.c:1191
-#, c-format
-msgid "section [%2d] '%s': section entry size does not match ElfXX_Rela\n"
-msgstr ""
-
-#: src/elflint.c:1251
-#, c-format
-msgid "text relocation flag set but there is no read-only segment\n"
-msgstr ""
-
-#: src/elflint.c:1278
-#, c-format
-msgid "section [%2d] '%s': relocation %zu: invalid type\n"
-msgstr ""
-
-#: src/elflint.c:1286
-#, c-format
-msgid ""
-"section [%2d] '%s': relocation %zu: relocation type invalid for the file "
-"type\n"
-msgstr ""
-
-#: src/elflint.c:1294
-#, c-format
-msgid "section [%2d] '%s': relocation %zu: invalid symbol index\n"
-msgstr ""
-
-#: src/elflint.c:1312
-#, c-format
-msgid ""
-"section [%2d] '%s': relocation %zu: only symbol '_GLOBAL_OFFSET_TABLE_' can "
-"be used with %s\n"
-msgstr ""
-
-#: src/elflint.c:1329
-#, c-format
-msgid "section [%2d] '%s': relocation %zu: offset out of bounds\n"
-msgstr ""
-
-#: src/elflint.c:1344
-#, c-format
-msgid ""
-"section [%2d] '%s': relocation %zu: copy relocation against symbol of type %"
-"s\n"
-msgstr ""
-
-#: src/elflint.c:1365
-#, c-format
-msgid ""
-"section [%2d] '%s': relocation %zu: read-only section modified but text "
-"relocation flag not set\n"
-msgstr ""
-
-#: src/elflint.c:1380
-#, c-format
-msgid "section [%2d] '%s': relocations are against loaded and unloaded data\n"
-msgstr ""
-
-#: src/elflint.c:1419 src/elflint.c:1469
-#, c-format
-msgid "section [%2d] '%s': cannot get relocation %zu: %s\n"
-msgstr ""
-
-#: src/elflint.c:1549
-#, c-format
-msgid "more than one dynamic section present\n"
-msgstr ""
-
-#: src/elflint.c:1567
-#, c-format
-msgid "section [%2d] '%s': section entry size does not match ElfXX_Dyn\n"
-msgstr ""
-
-#: src/elflint.c:1572 src/elflint.c:1864
-#, c-format
-msgid "section [%2d] '%s': sh_info not zero\n"
-msgstr ""
-
-#: src/elflint.c:1582
-#, c-format
-msgid "section [%2d] '%s': cannot get dynamic section entry %zu: %s\n"
-msgstr ""
-
-#: src/elflint.c:1590
-#, c-format
-msgid "section [%2d] '%s': non-DT_NULL entries follow DT_NULL entry\n"
-msgstr ""
-
-#: src/elflint.c:1597
-#, c-format
-msgid "section [%2d] '%s': entry %zu: unknown tag\n"
-msgstr ""
-
-#: src/elflint.c:1608
-#, c-format
-msgid "section [%2d] '%s': entry %zu: more than one entry with tag %s\n"
-msgstr ""
-
-#: src/elflint.c:1618
-#, c-format
-msgid "section [%2d] '%s': entry %zu: level 2 tag %s used\n"
-msgstr ""
-
-#: src/elflint.c:1636
-#, c-format
-msgid ""
-"section [%2d] '%s': entry %zu: DT_PLTREL value must be DT_REL or DT_RELA\n"
-msgstr ""
-
-#: src/elflint.c:1658
-#, c-format
-msgid ""
-"section [%2d] '%s': entry %zu: pointer does not match address of section [%"
-"2d] '%s' referenced by sh_link\n"
-msgstr ""
-
-#: src/elflint.c:1701
-#, c-format
-msgid ""
-"section [%2d] '%s': entry %zu: %s value must point into loaded segment\n"
-msgstr ""
-
-#: src/elflint.c:1716
-#, c-format
-msgid ""
-"section [%2d] '%s': entry %zu: %s value must be valid offset in section [%"
-"2d] '%s'\n"
-msgstr ""
-
-#: src/elflint.c:1736 src/elflint.c:1764
-#, c-format
-msgid "section [%2d] '%s': contains %s entry but not %s\n"
-msgstr ""
-
-#: src/elflint.c:1748
-#, c-format
-msgid "section [%2d] '%s': mandatory tag %s not present\n"
-msgstr ""
-
-#: src/elflint.c:1757
-#, c-format
-msgid "section [%2d] '%s': no hash section present\n"
-msgstr ""
-
-#: src/elflint.c:1772 src/elflint.c:1779
-#, c-format
-msgid "section [%2d] '%s': not all of %s, %s, and %s are present\n"
-msgstr ""
-
-#: src/elflint.c:1789 src/elflint.c:1793
-#, c-format
-msgid "section [%2d] '%s': %s tag missing in DSO marked during prelinking\n"
-msgstr ""
-
-#: src/elflint.c:1799
-#, c-format
-msgid "section [%2d] '%s': non-DSO file marked as dependency during prelink\n"
-msgstr ""
-
-#: src/elflint.c:1810 src/elflint.c:1814 src/elflint.c:1818 src/elflint.c:1822
-#, c-format
-msgid "section [%2d] '%s': %s tag missing in prelinked executable\n"
-msgstr ""
-
-#: src/elflint.c:1834
-#, c-format
-msgid ""
-"section [%2d] '%s': only relocatable files can have extended section index\n"
-msgstr ""
-
-#: src/elflint.c:1844
-#, c-format
-msgid ""
-"section [%2d] '%s': extended section index section not for symbol table\n"
-msgstr ""
-
-#: src/elflint.c:1849
-#, c-format
-msgid "cannot get data for symbol section\n"
-msgstr ""
-
-#: src/elflint.c:1852
-#, c-format
-msgid "section [%2d] '%s': entry size does not match Elf32_Word\n"
-msgstr ""
-
-#: src/elflint.c:1859
-#, c-format
-msgid "section [%2d] '%s': extended index table too small for symbol table\n"
-msgstr ""
-
-#: src/elflint.c:1874
-#, c-format
-msgid ""
-"section [%2d] '%s': extended section index in section [%2zu] '%s' refers to "
-"same symbol table\n"
-msgstr ""
-
-#: src/elflint.c:1885
-#, c-format
-msgid "symbol 0 should have zero extended section index\n"
-msgstr ""
-
-#: src/elflint.c:1897
-#, c-format
-msgid "cannot get data for symbol %zu\n"
-msgstr ""
-
-#: src/elflint.c:1902
-#, c-format
-msgid "extended section index is %<PRIu32> but symbol index is not XINDEX\n"
-msgstr ""
-
-#: src/elflint.c:1918 src/elflint.c:1959
-#, c-format
-msgid ""
-"section [%2d] '%s': hash table section is too small (is %ld, expected %ld)\n"
-msgstr ""
-
-#: src/elflint.c:1930 src/elflint.c:1971
-#, c-format
-msgid "section [%2d] '%s': chain array too large\n"
-msgstr ""
-
-#: src/elflint.c:1939 src/elflint.c:1980
-#, c-format
-msgid "section [%2d] '%s': hash bucket reference %zu out of bounds\n"
-msgstr ""
-
-#: src/elflint.c:1945
-#, c-format
-msgid "section [%2d] '%s': hash chain reference %zu out of bounds\n"
-msgstr ""
-
-#: src/elflint.c:1986
-#, c-format
-msgid "section [%2d] '%s': hash chain reference %<PRIu64> out of bounds\n"
-msgstr ""
-
-#: src/elflint.c:2001
-#, c-format
-msgid "section [%2d] '%s': bitmask size not power of 2: %u\n"
-msgstr ""
-
-#: src/elflint.c:2012
-#, c-format
-msgid ""
-"section [%2d] '%s': hash table section is too small (is %ld, expected at "
-"least%ld)\n"
-msgstr ""
-
-#: src/elflint.c:2020
-#, c-format
-msgid "section [%2d] '%s': 2nd hash function shift too big: %u\n"
-msgstr ""
-
-#: src/elflint.c:2052
-#, c-format
-msgid ""
-"section [%2d] '%s': hash chain for bucket %zu lower than symbol index bias\n"
-msgstr ""
-
-#: src/elflint.c:2073
-#, c-format
-msgid ""
-"section [%2d] '%s': symbol %u referenced in chain for bucket %zu is "
-"undefined\n"
-msgstr ""
-
-#: src/elflint.c:2084
-#, c-format
-msgid ""
-"section [%2d] '%s': hash value for symbol %u in chain for bucket %zu wrong\n"
-msgstr ""
-
-#: src/elflint.c:2115
-#, c-format
-msgid "section [%2d] '%s': hash chain for bucket %zu out of bounds\n"
-msgstr ""
-
-#: src/elflint.c:2120
-#, c-format
-msgid ""
-"section [%2d] '%s': symbol reference in chain for bucket %zu out of bounds\n"
-msgstr ""
-
-#: src/elflint.c:2126
-#, c-format
-msgid "section [%2d] '%s': bitmask does not match names in the hash table\n"
-msgstr ""
-
-#: src/elflint.c:2139
-#, c-format
-msgid "section [%2d] '%s': relocatable files cannot have hash tables\n"
-msgstr ""
-
-#: src/elflint.c:2157
-#, c-format
-msgid "section [%2d] '%s': hash table not for dynamic symbol table\n"
-msgstr ""
-
-#: src/elflint.c:2165
-#, c-format
-msgid "section [%2d] '%s': hash table entry size incorrect\n"
-msgstr ""
-
-#: src/elflint.c:2170
-#, c-format
-msgid "section [%2d] '%s': not marked to be allocated\n"
-msgstr ""
-
-#: src/elflint.c:2175
-#, c-format
-msgid ""
-"section [%2d] '%s': hash table has not even room for initial administrative "
-"entries\n"
-msgstr ""
-
-#: src/elflint.c:2223
-#, c-format
-msgid "sh_link in hash sections [%2zu] '%s' and [%2zu] '%s' not identical\n"
-msgstr ""
-
-#: src/elflint.c:2301 src/elflint.c:2305
-#, c-format
-msgid "section [%2zu] '%s': reference to symbol index 0\n"
-msgstr ""
-
-#: src/elflint.c:2312
-#, c-format
-msgid ""
-"symbol %d referenced in new hash table in [%2zu] '%s' but not in old hash "
-"table in [%2zu] '%s'\n"
-msgstr ""
-
-#: src/elflint.c:2324
-#, c-format
-msgid ""
-"symbol %d referenced in old hash table in [%2zu] '%s' but not in new hash "
-"table in [%2zu] '%s'\n"
-msgstr ""
-
-#: src/elflint.c:2340
-#, c-format
-msgid "section [%2d] '%s': nonzero sh_%s for NULL section\n"
-msgstr ""
-
-#: src/elflint.c:2360
-#, c-format
-msgid ""
-"section [%2d] '%s': section groups only allowed in relocatable object files\n"
-msgstr ""
-
-#: src/elflint.c:2371
-#, c-format
-msgid "section [%2d] '%s': cannot get symbol table: %s\n"
-msgstr ""
-
-#: src/elflint.c:2376
-#, c-format
-msgid "section [%2d] '%s': section reference in sh_link is no symbol table\n"
-msgstr ""
-
-#: src/elflint.c:2382
-#, c-format
-msgid "section [%2d] '%s': invalid symbol index in sh_info\n"
-msgstr ""
-
-#: src/elflint.c:2387
-#, c-format
-msgid "section [%2d] '%s': sh_flags not zero\n"
-msgstr ""
-
-#: src/elflint.c:2394
-#, c-format
-msgid "section [%2d] '%s': cannot get symbol for signature\n"
-msgstr ""
-
-#: src/elflint.c:2399
-#, c-format
-msgid "section [%2d] '%s': signature symbol canot be empty string\n"
-msgstr ""
-
-#: src/elflint.c:2405
-#, c-format
-msgid "section [%2d] '%s': sh_flags not set correctly\n"
-msgstr ""
-
-#: src/elflint.c:2411
-#, c-format
-msgid "section [%2d] '%s': cannot get data: %s\n"
-msgstr ""
-
-#: src/elflint.c:2420
-#, c-format
-msgid "section [%2d] '%s': section size not multiple of sizeof(Elf32_Word)\n"
-msgstr ""
-
-#: src/elflint.c:2425
-#, c-format
-msgid "section [%2d] '%s': section group without flags word\n"
-msgstr ""
-
-#: src/elflint.c:2431
-#, c-format
-msgid "section [%2d] '%s': section group without member\n"
-msgstr ""
-
-#: src/elflint.c:2435
-#, c-format
-msgid "section [%2d] '%s': section group with only one member\n"
-msgstr ""
-
-#: src/elflint.c:2446
-#, c-format
-msgid "section [%2d] '%s': unknown section group flags\n"
-msgstr ""
-
-#: src/elflint.c:2458
-#, c-format
-msgid "section [%2d] '%s': section index %Zu out of range\n"
-msgstr ""
-
-#: src/elflint.c:2467
-#, c-format
-msgid "section [%2d] '%s': cannot get section header for element %zu: %s\n"
-msgstr ""
-
-#: src/elflint.c:2474
-#, c-format
-msgid "section [%2d] '%s': section group contains another group [%2d] '%s'\n"
-msgstr ""
-
-#: src/elflint.c:2480
-#, c-format
-msgid ""
-"section [%2d] '%s': element %Zu references section [%2d] '%s' without "
-"SHF_GROUP flag set\n"
-msgstr ""
-
-#: src/elflint.c:2487
-#, c-format
-msgid "section [%2d] '%s' is contained in more than one section group\n"
-msgstr ""
-
-#: src/elflint.c:2676
-#, c-format
-msgid ""
-"section [%2d] '%s' refers in sh_link to section [%2d] '%s' which is no "
-"dynamic symbol table\n"
-msgstr ""
-
-#: src/elflint.c:2687
-#, c-format
-msgid ""
-"section [%2d] '%s' has different number of entries than symbol table [%2d] '%"
-"s'\n"
-msgstr ""
-
-#: src/elflint.c:2703
-#, c-format
-msgid "section [%2d] '%s': symbol %d: cannot read version data\n"
-msgstr ""
-
-#: src/elflint.c:2719
-#, c-format
-msgid "section [%2d] '%s': symbol %d: local symbol with global scope\n"
-msgstr ""
-
-#: src/elflint.c:2727
-#, c-format
-msgid "section [%2d] '%s': symbol %d: local symbol with version\n"
-msgstr ""
-
-#: src/elflint.c:2741
-#, c-format
-msgid "section [%2d] '%s': symbol %d: invalid version index %d\n"
-msgstr ""
-
-#: src/elflint.c:2746
-#, c-format
-msgid ""
-"section [%2d] '%s': symbol %d: version index %d is for defined version\n"
-msgstr ""
-
-#: src/elflint.c:2756
-#, c-format
-msgid ""
-"section [%2d] '%s': symbol %d: version index %d is for requested version\n"
-msgstr ""
-
-#: src/elflint.c:2808
-#, c-format
-msgid "more than one version reference section present\n"
-msgstr ""
-
-#: src/elflint.c:2816 src/elflint.c:2945
-#, c-format
-msgid "section [%2d] '%s': sh_link does not link to string table\n"
-msgstr ""
-
-#: src/elflint.c:2839 src/elflint.c:2997
-#, c-format
-msgid "section [%2d] '%s': entry %d has wrong version %d\n"
-msgstr ""
-
-#: src/elflint.c:2845 src/elflint.c:3003
-#, c-format
-msgid "section [%2d] '%s': entry %d has wrong offset of auxiliary data\n"
-msgstr ""
-
-#: src/elflint.c:2853
-#, c-format
-msgid "section [%2d] '%s': entry %d has invalid file reference\n"
-msgstr ""
-
-#: src/elflint.c:2861
-#, c-format
-msgid "section [%2d] '%s': entry %d references unknown dependency\n"
-msgstr ""
-
-#: src/elflint.c:2873
-#, c-format
-msgid "section [%2d] '%s': auxiliary entry %d of entry %d has unknown flag\n"
-msgstr ""
-
-#: src/elflint.c:2880
-#, c-format
-msgid ""
-"section [%2d] '%s': auxiliary entry %d of entry %d has invalid name "
-"reference\n"
-msgstr ""
-
-#: src/elflint.c:2887
-#, c-format
-msgid ""
-"section [%2d] '%s': auxiliary entry %d of entry %d has wrong hash value: %"
-"#x, expected %#x\n"
-msgstr ""
-
-#: src/elflint.c:2897
-#, c-format
-msgid ""
-"section [%2d] '%s': auxiliary entry %d of entry %d has duplicate version "
-"name '%s'\n"
-msgstr ""
-
-#: src/elflint.c:2908
-#, c-format
-msgid ""
-"section [%2d] '%s': auxiliary entry %d of entry %d has wrong next field\n"
-msgstr ""
-
-#: src/elflint.c:2924 src/elflint.c:3082
-#, c-format
-msgid "section [%2d] '%s': entry %d has invalid offset to next entry\n"
-msgstr ""
-
-#: src/elflint.c:2937
-#, c-format
-msgid "more than one version definition section present\n"
-msgstr ""
-
-#: src/elflint.c:2982
-#, c-format
-msgid "section [%2d] '%s': more than one BASE definition\n"
-msgstr ""
-
-#: src/elflint.c:2986
-#, c-format
-msgid "section [%2d] '%s': BASE definition must have index VER_NDX_GLOBAL\n"
-msgstr ""
-
-#: src/elflint.c:2992
-#, c-format
-msgid "section [%2d] '%s': entry %d has unknown flag\n"
-msgstr ""
-
-#: src/elflint.c:3016
-#, c-format
-msgid "section [%2d] '%s': entry %d has invalid name reference\n"
-msgstr ""
-
-#: src/elflint.c:3023
-#, c-format
-msgid "section [%2d] '%s': entry %d has wrong hash value: %#x, expected %#x\n"
-msgstr ""
-
-#: src/elflint.c:3032
-#, c-format
-msgid "section [%2d] '%s': entry %d has duplicate version name '%s'\n"
-msgstr ""
-
-#: src/elflint.c:3051
-#, c-format
-msgid ""
-"section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n"
-msgstr ""
-
-#: src/elflint.c:3066
-#, c-format
-msgid "section [%2d] '%s': entry %d has wrong next field in auxiliary data\n"
-msgstr ""
-
-#: src/elflint.c:3088
-#, c-format
-msgid "section [%2d] '%s': no BASE definition\n"
-msgstr ""
-
-#: src/elflint.c:3104
-#, c-format
-msgid "section [%2d] '%s': unknown parent version '%s'\n"
-msgstr ""
-
-#: src/elflint.c:3117
-#, c-format
-msgid "section [%2d] '%s': empty object attributes section\n"
-msgstr ""
-
-#: src/elflint.c:3138
-#, c-format
-msgid "section [%2d] '%s': unrecognized attribute format\n"
-msgstr ""
-
-#: src/elflint.c:3154
-#, c-format
-msgid ""
-"section [%2d] '%s': offset %zu: zero length field in attribute section\n"
-msgstr ""
-
-#: src/elflint.c:3163
-#, c-format
-msgid "section [%2d] '%s': offset %zu: invalid length in attribute section\n"
-msgstr ""
-
-#: src/elflint.c:3175
-#, c-format
-msgid "section [%2d] '%s': offset %zu: unterminated vendor name string\n"
-msgstr ""
-
-#: src/elflint.c:3192
-#, c-format
-msgid ""
-"section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n"
-msgstr ""
-
-#: src/elflint.c:3201
-#, c-format
-msgid "section [%2d] '%s': offset %zu: truncated attribute section\n"
-msgstr ""
-
-#: src/elflint.c:3210
-#, c-format
-msgid ""
-"section [%2d] '%s': offset %zu: zero length field in attribute subsection\n"
-msgstr ""
-
-#: src/elflint.c:3223
-#, c-format
-msgid ""
-"section [%2d] '%s': offset %zu: invalid length in attribute subsection\n"
-msgstr ""
-
-#: src/elflint.c:3234
-#, c-format
-msgid ""
-"section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n"
-msgstr ""
-
-#: src/elflint.c:3252
-#, c-format
-msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n"
-msgstr ""
-
-#: src/elflint.c:3263
-#, c-format
-msgid "section [%2d] '%s': offset %zu: unterminated string in attribute\n"
-msgstr ""
-
-#: src/elflint.c:3276
-#, c-format
-msgid "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n"
-msgstr ""
-
-#: src/elflint.c:3280
-#, c-format
-msgid ""
-"section [%2d] '%s': offset %zu: unrecognized %s attribute value %<PRIu64>\n"
-msgstr ""
-
-#: src/elflint.c:3290
-#, c-format
-msgid "section [%2d] '%s': offset %zu: vendor '%s' unknown\n"
-msgstr ""
-
-#: src/elflint.c:3296
-#, c-format
-msgid ""
-"section [%2d] '%s': offset %zu: extra bytes after last attribute section\n"
-msgstr ""
-
-#: src/elflint.c:3378
-#, c-format
-msgid "cannot get section header of zeroth section\n"
-msgstr ""
-
-#: src/elflint.c:3382
-#, c-format
-msgid "zeroth section has nonzero name\n"
-msgstr ""
-
-#: src/elflint.c:3384
-#, c-format
-msgid "zeroth section has nonzero type\n"
-msgstr ""
-
-#: src/elflint.c:3386
-#, c-format
-msgid "zeroth section has nonzero flags\n"
-msgstr ""
-
-#: src/elflint.c:3388
-#, c-format
-msgid "zeroth section has nonzero address\n"
-msgstr ""
-
-#: src/elflint.c:3390
-#, c-format
-msgid "zeroth section has nonzero offset\n"
-msgstr ""
-
-#: src/elflint.c:3392
-#, c-format
-msgid "zeroth section has nonzero info field\n"
-msgstr ""
-
-#: src/elflint.c:3394
-#, c-format
-msgid "zeroth section has nonzero align value\n"
-msgstr ""
-
-#: src/elflint.c:3396
-#, c-format
-msgid "zeroth section has nonzero entry size value\n"
-msgstr ""
-
-#: src/elflint.c:3399
-#, c-format
-msgid ""
-"zeroth section has nonzero size value while ELF header has nonzero shnum "
-"value\n"
-msgstr ""
-
-#: src/elflint.c:3403
-#, c-format
-msgid ""
-"zeroth section has nonzero link value while ELF header does not signal "
-"overflow in shstrndx\n"
-msgstr ""
-
-#: src/elflint.c:3420
-#, c-format
-msgid "cannot get section header for section [%2zu] '%s': %s\n"
-msgstr ""
-
-#: src/elflint.c:3429
-#, c-format
-msgid "section [%2zu]: invalid name\n"
-msgstr ""
-
-#: src/elflint.c:3456
-#, c-format
-msgid "section [%2d] '%s' has wrong type: expected %s, is %s\n"
-msgstr ""
-
-#: src/elflint.c:3472
-#, c-format
-msgid "section [%2zu] '%s' has wrong flags: expected %s, is %s\n"
-msgstr ""
-
-#: src/elflint.c:3489
-#, c-format
-msgid ""
-"section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n"
-msgstr ""
-
-#: src/elflint.c:3507
-#, c-format
-msgid "section [%2zu] '%s' present in object file\n"
-msgstr ""
-
-#: src/elflint.c:3513 src/elflint.c:3545
-#, c-format
-msgid ""
-"section [%2zu] '%s' has SHF_ALLOC flag set but there is no loadable segment\n"
-msgstr ""
-
-#: src/elflint.c:3518 src/elflint.c:3550
-#, c-format
-msgid ""
-"section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable "
-"segments\n"
-msgstr ""
-
-#: src/elflint.c:3526
-#, c-format
-msgid ""
-"section [%2zu] '%s' is extension section index table in non-object file\n"
-msgstr ""
-
-#: src/elflint.c:3561
-#, c-format
-msgid "section [%2zu] '%s': size not multiple of entry size\n"
-msgstr ""
-
-#: src/elflint.c:3566
-#, c-format
-msgid "cannot get section header\n"
-msgstr ""
-
-#: src/elflint.c:3576
-#, c-format
-msgid "section [%2zu] '%s' has unsupported type %d\n"
-msgstr ""
-
-#: src/elflint.c:3590
-#, c-format
-msgid ""
-"section [%2zu] '%s' contains invalid processor-specific flag(s) %#<PRIx64>\n"
-msgstr ""
-
-#: src/elflint.c:3597
-#, c-format
-msgid "section [%2zu] '%s' contains unknown flag(s) %#<PRIx64>\n"
-msgstr ""
-
-#: src/elflint.c:3605
-#, c-format
-msgid "section [%2zu] '%s': thread-local data sections address not zero\n"
-msgstr ""
-
-#: src/elflint.c:3613
-#, c-format
-msgid "section [%2zu] '%s': invalid section reference in link value\n"
-msgstr ""
-
-#: src/elflint.c:3618
-#, c-format
-msgid "section [%2zu] '%s': invalid section reference in info value\n"
-msgstr ""
-
-#: src/elflint.c:3625
-#, c-format
-msgid "section [%2zu] '%s': strings flag set without merge flag\n"
-msgstr ""
-
-#: src/elflint.c:3630
-#, c-format
-msgid "section [%2zu] '%s': merge flag set but entry size is zero\n"
-msgstr ""
-
-#: src/elflint.c:3648
-#, c-format
-msgid "section [%2zu] '%s' has unexpected type %d for an executable section\n"
-msgstr ""
-
-#: src/elflint.c:3657
-#, c-format
-msgid "section [%2zu] '%s' is both executable and writable\n"
-msgstr ""
-
-#: src/elflint.c:3684
-#, c-format
-msgid ""
-"section [%2zu] '%s' not fully contained in segment of program header entry %"
-"d\n"
-msgstr ""
-
-#: src/elflint.c:3692
-#, c-format
-msgid ""
-"section [%2zu] '%s' has type NOBITS but is read from the file in segment of "
-"program header entry %d\n"
-msgstr ""
-
-#: src/elflint.c:3701
-#, c-format
-msgid ""
-"section [%2zu] '%s' has not type NOBITS but is not read from the file in "
-"segment of program header entry %d\n"
-msgstr ""
-
-#: src/elflint.c:3712
-#, c-format
-msgid "section [%2zu] '%s' is executable in nonexecutable segment %d\n"
-msgstr ""
-
-#: src/elflint.c:3722
-#, c-format
-msgid "section [%2zu] '%s' is writable in unwritable segment %d\n"
-msgstr ""
-
-#: src/elflint.c:3732
-#, c-format
-msgid ""
-"section [%2zu] '%s': alloc flag set but section not in any loaded segment\n"
-msgstr ""
-
-#: src/elflint.c:3738
-#, c-format
-msgid ""
-"section [%2zu] '%s': ELF header says this is the section header string table "
-"but type is not SHT_TYPE\n"
-msgstr ""
-
-#: src/elflint.c:3746
-#, c-format
-msgid ""
-"section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n"
-msgstr ""
-
-#: src/elflint.c:3797
-#, c-format
-msgid "more than one version symbol table present\n"
-msgstr ""
-
-#: src/elflint.c:3820
-#, c-format
-msgid "INTERP program header entry but no .interp section\n"
-msgstr ""
-
-#: src/elflint.c:3831
-#, c-format
-msgid ""
-"loadable segment [%u] is executable but contains no executable sections\n"
-msgstr ""
-
-#: src/elflint.c:3837
-#, c-format
-msgid "loadable segment [%u] is writable but contains no writable sections\n"
-msgstr ""
-
-#: src/elflint.c:3848
-#, c-format
-msgid ""
-"no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section "
-"exist\n"
-msgstr ""
-
-#: src/elflint.c:3861
-#, c-format
-msgid "duplicate version index %d\n"
-msgstr ""
-
-#: src/elflint.c:3875
-#, c-format
-msgid ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n"
-msgstr ""
-
-#: src/elflint.c:3924
-#, c-format
-msgid "phdr[%d]: unknown core file note type %<PRIu32> at offset %<PRIu64>\n"
-msgstr ""
-
-#: src/elflint.c:3928
-#, c-format
-msgid ""
-"section [%2d] '%s': unknown core file note type %<PRIu32> at offset %Zu\n"
-msgstr ""
-
-#: src/elflint.c:3950
-#, c-format
-msgid "phdr[%d]: unknown object file note type %<PRIu32> at offset %Zu\n"
-msgstr ""
-
-#: src/elflint.c:3954
-#, c-format
-msgid ""
-"section [%2d] '%s': unknown object file note type %<PRIu32> at offset %Zu\n"
-msgstr ""
-
-#: src/elflint.c:3970
-#, c-format
-msgid "phdr[%d]: no note entries defined for the type of file\n"
-msgstr ""
-
-#: src/elflint.c:3989
-#, c-format
-msgid "phdr[%d]: cannot get content of note section: %s\n"
-msgstr ""
-
-#: src/elflint.c:3992
-#, c-format
-msgid "phdr[%d]: extra %<PRIu64> bytes after last note\n"
-msgstr ""
-
-#: src/elflint.c:4012
-#, c-format
-msgid "section [%2d] '%s': no note entries defined for the type of file\n"
-msgstr ""
-
-#: src/elflint.c:4019
-#, c-format
-msgid "section [%2d] '%s': cannot get content of note section\n"
-msgstr ""
-
-#: src/elflint.c:4022
-#, c-format
-msgid "section [%2d] '%s': extra %<PRIu64> bytes after last note\n"
-msgstr ""
-
-#: src/elflint.c:4035
-#, c-format
-msgid ""
-"only executables, shared objects, and core files can have program headers\n"
-msgstr ""
-
-#: src/elflint.c:4050
-#, c-format
-msgid "cannot get program header entry %d: %s\n"
-msgstr ""
-
-#: src/elflint.c:4059
-#, c-format
-msgid "program header entry %d: unknown program header entry type %#<PRIx64>\n"
-msgstr ""
-
-#: src/elflint.c:4070
-#, c-format
-msgid "more than one INTERP entry in program header\n"
-msgstr ""
-
-#: src/elflint.c:4078
-#, c-format
-msgid "more than one TLS entry in program header\n"
-msgstr ""
-
-#: src/elflint.c:4085
-#, c-format
-msgid "static executable cannot have dynamic sections\n"
-msgstr ""
-
-#: src/elflint.c:4099
-#, c-format
-msgid "dynamic section reference in program header has wrong offset\n"
-msgstr ""
-
-#: src/elflint.c:4102
-#, c-format
-msgid "dynamic section size mismatch in program and section header\n"
-msgstr ""
-
-#: src/elflint.c:4112
-#, c-format
-msgid "more than one GNU_RELRO entry in program header\n"
-msgstr ""
-
-#: src/elflint.c:4133
-#, c-format
-msgid "loadable segment GNU_RELRO applies to is not writable\n"
-msgstr ""
-
-#: src/elflint.c:4136
-#, c-format
-msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n"
-msgstr ""
-
-#: src/elflint.c:4144 src/elflint.c:4167
-#, c-format
-msgid "%s segment not contained in a loaded segment\n"
-msgstr ""
-
-#: src/elflint.c:4173
-#, c-format
-msgid "program header offset in ELF header and PHDR entry do not match"
-msgstr ""
-
-#: src/elflint.c:4179
-#, c-format
-msgid "program header entry %d: file size greater than memory size\n"
-msgstr ""
-
-#: src/elflint.c:4186
-#, c-format
-msgid "program header entry %d: alignment not a power of 2\n"
-msgstr ""
-
-#: src/elflint.c:4189
-#, c-format
-msgid ""
-"program header entry %d: file offset and virtual address not module of "
-"alignment\n"
-msgstr ""
-
-#: src/elflint.c:4225
-#, c-format
-msgid "cannot read ELF header: %s\n"
-msgstr ""
-
-#: src/elflint.c:4246
-#, c-format
-msgid "text relocation flag set but not needed\n"
-msgstr ""
-
-#: src/addr2line.c:64
-msgid "Output selection options:"
-msgstr ""
-
-#: src/addr2line.c:65
-msgid "Show only base names of source files"
-msgstr ""
-
-#: src/addr2line.c:67
-msgid "Show absolute file names using compilation directory"
-msgstr ""
-
-#: src/addr2line.c:68
-msgid "Also show function names"
-msgstr ""
-
-#: src/addr2line.c:69
-msgid "Also show symbol or section names"
-msgstr ""
-
-#: src/addr2line.c:80
-msgid ""
-"Locate source files and line information for ADDRs (in a.out by default)."
-msgstr ""
-
-#: src/addr2line.c:84
-msgid "[ADDR...]"
-msgstr ""
-
-#: src/addr2line.c:385
-#, c-format
-msgid "Section syntax requires exactly one module"
-msgstr ""
-
-#: src/addr2line.c:408
-#, c-format
-msgid "offset %#<PRIxMAX> lies outside section '%s'"
-msgstr ""
-
-#: src/addr2line.c:426
-#, c-format
-msgid "cannot find symbol '%s'"
-msgstr ""
-
-#: src/addr2line.c:431
-#, c-format
-msgid "offset %#<PRIxMAX> lies outside contents of '%s'"
-msgstr ""
-
-#: src/findtextrel.c:68
-msgid "Input Selection:"
-msgstr ""
-
-#: src/findtextrel.c:69
-msgid "Prepend PATH to all file names"
-msgstr ""
-
-#: src/findtextrel.c:71
-msgid "Use PATH as root of debuginfo hierarchy"
-msgstr ""
-
-#: src/findtextrel.c:78
-msgid "Locate source of text relocations in FILEs (a.out by default)."
-msgstr ""
-
-#: src/findtextrel.c:234 src/elfcmp.c:577 src/ranlib.c:186
-#, c-format
-msgid "cannot create ELF descriptor for '%s': %s"
-msgstr ""
-
-#: src/findtextrel.c:244
-#, c-format
-msgid "cannot get ELF header '%s': %s"
-msgstr ""
-
-#: src/findtextrel.c:255
-#, c-format
-msgid "'%s' is not a DSO or PIE"
-msgstr ""
-
-#: src/findtextrel.c:272
-#, c-format
-msgid "getting get section header of section %zu: %s"
-msgstr ""
-
-#: src/findtextrel.c:290
-#, c-format
-msgid "cannot read dynamic section: %s"
-msgstr ""
-
-#: src/findtextrel.c:305
-#, c-format
-msgid "no text relocations reported in '%s'"
-msgstr ""
-
-#: src/findtextrel.c:317
-#, c-format
-msgid "while reading ELF file"
-msgstr ""
-
-#: src/findtextrel.c:326 src/findtextrel.c:343
-#, c-format
-msgid "cannot get program header index at offset %d: %s"
-msgstr ""
-
-#: src/findtextrel.c:395
-#, c-format
-msgid "cannot get section header of section %Zu: %s"
-msgstr ""
-
-#: src/findtextrel.c:407
-#, c-format
-msgid "cannot get symbol table section %zu in '%s': %s"
-msgstr ""
-
-#: src/findtextrel.c:427 src/findtextrel.c:450
-#, c-format
-msgid "cannot get relocation at index %d in section %zu in '%s': %s"
-msgstr ""
-
-#: src/findtextrel.c:515
-#, c-format
-msgid "%s not compiled with -fpic/-fPIC\n"
-msgstr ""
-
-#: src/findtextrel.c:568
-#, c-format
-msgid ""
-"the file containing the function '%s' is not compiled with -fpic/-fPIC\n"
-msgstr ""
-
-#: src/findtextrel.c:575 src/findtextrel.c:595
-#, c-format
-msgid ""
-"the file containing the function '%s' might not be compiled with -fpic/-"
-"fPIC\n"
-msgstr ""
-
-#: src/findtextrel.c:583
-#, c-format
-msgid ""
-"either the file containing the function '%s' or the file containing the "
-"function '%s' is not compiled with -fpic/-fPIC\n"
-msgstr ""
-
-#: src/findtextrel.c:603
-#, c-format
-msgid ""
-"a relocation modifies memory at offset %llu in a write-protected segment\n"
-msgstr ""
-
-#: src/elfcmp.c:68
-msgid "Control options:"
-msgstr ""
-
-#: src/elfcmp.c:69
-msgid ""
-"Control treatment of gaps in loadable segments [ignore|match] (default: "
-"ignore)"
-msgstr ""
-
-#: src/elfcmp.c:71
-msgid "Ignore permutation of buckets in SHT_HASH section"
-msgstr ""
-
-#: src/elfcmp.c:72
-msgid "Output nothing; yield exit status only"
-msgstr ""
-
-#: src/elfcmp.c:79
-msgid "Compare relevant parts of two ELF files for equality."
-msgstr ""
-
-#: src/elfcmp.c:83
-msgid "FILE1 FILE2"
-msgstr ""
-
-#: src/elfcmp.c:139
-msgid "Invalid number of parameters.\n"
-msgstr ""
-
-#: src/elfcmp.c:167 src/elfcmp.c:172
-#, c-format
-msgid "cannot get ELF header of '%s': %s"
-msgstr ""
-
-#: src/elfcmp.c:189
-#, c-format
-msgid "%s %s diff: ELF header"
-msgstr ""
-
-#: src/elfcmp.c:247
-#, c-format
-msgid "%s %s differ: section header"
-msgstr ""
-
-#: src/elfcmp.c:275 src/elfcmp.c:281
-#, c-format
-msgid "cannot get content of section %zu in '%s': %s"
-msgstr ""
-
-#: src/elfcmp.c:297 src/elfcmp.c:303
-#, c-format
-msgid "cannot get symbol in '%s': %s"
-msgstr ""
-
-#: src/elfcmp.c:324
-#, c-format
-msgid "%s %s differ: symbol table [%zu]"
-msgstr ""
-
-#: src/elfcmp.c:327
-#, c-format
-msgid "%s %s differ: symbol table [%zu,%zu]"
-msgstr ""
-
-#: src/elfcmp.c:375
-#, c-format
-msgid "%s %s differ: section [%zu] '%s' content"
-msgstr ""
-
-#: src/elfcmp.c:379
-#, c-format
-msgid "%s %s differ: section [%zu,%zu] '%s' content"
-msgstr ""
-
-#: src/elfcmp.c:395
-#, c-format
-msgid "%s %s differ: unequal amount of important sections"
-msgstr ""
-
-#: src/elfcmp.c:429 src/elfcmp.c:434
-#, c-format
-msgid "cannot load data of '%s': %s"
-msgstr ""
-
-#: src/elfcmp.c:453 src/elfcmp.c:459
-#, c-format
-msgid "cannot get program header entry %d of '%s': %s"
-msgstr ""
-
-#: src/elfcmp.c:465
-#, c-format
-msgid "%s %s differ: program header %d"
-msgstr ""
-
-#: src/elfcmp.c:490
-#, c-format
-msgid "%s %s differ: gap"
-msgstr ""
-
-#: src/elfcmp.c:549
-#, c-format
-msgid "Invalid value '%s' for --gaps parameter."
-msgstr ""
-
-#: src/elfcmp.c:582
-#, c-format
-msgid "cannot create EBL descriptor for '%s'"
-msgstr ""
-
-#: src/elfcmp.c:600
-#, c-format
-msgid "cannot get section header of section %zu: %s"
-msgstr ""
-
-#: src/elfcmp.c:610
-#, c-format
-msgid "cannot get content of section %zu: %s"
-msgstr ""
-
-#: src/elfcmp.c:620 src/elfcmp.c:634
-#, c-format
-msgid "cannot get relocation: %s"
-msgstr ""
-
-#: src/ranlib.c:74
-msgid "Generate an index to speed access to archives."
-msgstr ""
-
-#: src/ranlib.c:77
-msgid "ARCHIVE"
-msgstr ""
-
-#: src/ranlib.c:116
-#, c-format
-msgid "Archive name required"
-msgstr ""
-
-#: src/ranlib.c:176
-#, c-format
-msgid "cannot stat '%s'"
-msgstr ""
-
-#: src/ranlib.c:194
-#, c-format
-msgid "'%s' is no archive"
-msgstr ""
-
-#: src/ranlib.c:229
-#, c-format
-msgid "error while freeing sub-ELF descriptor: %s"
-msgstr ""
-
-#: src/ranlib.c:250
-#, c-format
-msgid "cannot create new file"
-msgstr ""
-
-#: src/strings.c:70
-msgid "Output Selection:"
-msgstr ""
-
-#: src/strings.c:71
-msgid "Scan entire file, not only loaded sections"
-msgstr ""
-
-#: src/strings.c:73
-msgid "Only NUL-terminated sequences of MIN-LEN characters or more are printed"
-msgstr ""
-
-#: src/strings.c:74
-msgid ""
-"Select character size and endianess: s = 7-bit, S = 8-bit, {b,l} = 16-bit, "
-"{B,L} = 32-bit"
-msgstr ""
-
-#: src/strings.c:78
-msgid "Print name of the file before each string."
-msgstr ""
-
-#: src/strings.c:80
-msgid "Print location of the string in base 8, 10, or 16 respectively."
-msgstr ""
-
-#: src/strings.c:81
-msgid "Alias for --radix=o"
-msgstr ""
-
-#: src/strings.c:88
-msgid "Print the strings of printable characters in files."
-msgstr ""
-
-#: src/strings.c:268 src/strings.c:303
-#, c-format
-msgid "invalid value '%s' for %s parameter"
-msgstr ""
-
-#: src/strings.c:314
-#, c-format
-msgid "invalid minimum length of matched string size"
-msgstr ""
-
-#: src/strings.c:601
-#, c-format
-msgid "lseek64 failed"
-msgstr ""
-
-#: src/strings.c:616
-#, c-format
-msgid "re-mmap failed"
-msgstr ""
-
-#: src/strings.c:653
-#, c-format
-msgid "mprotect failed"
-msgstr ""
-
-#: src/strings.c:680
-#, c-format
-msgid "re=mmap failed"
-msgstr ""
diff --git a/po/en@boldquot.header b/po/en@boldquot.header
deleted file mode 100644
index fedb6a0..0000000
--- a/po/en@boldquot.header
+++ /dev/null
@@ -1,25 +0,0 @@
-# All this catalog "translates" are quotation characters.
-# The msgids must be ASCII and therefore cannot contain real quotation
-# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
-# and double quote (0x22). These substitutes look strange; see
-# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
-#
-# This catalog translates grave accent (0x60) and apostrophe (0x27) to
-# left single quotation mark (U+2018) and right single quotation mark (U+2019).
-# It also translates pairs of apostrophe (0x27) to
-# left single quotation mark (U+2018) and right single quotation mark (U+2019)
-# and pairs of quotation mark (0x22) to
-# left double quotation mark (U+201C) and right double quotation mark (U+201D).
-#
-# When output to an UTF-8 terminal, the quotation characters appear perfectly.
-# When output to an ISO-8859-1 terminal, the single quotation marks are
-# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
-# grave/acute accent (by libiconv), and the double quotation marks are
-# transliterated to 0x22.
-# When output to an ASCII terminal, the single quotation marks are
-# transliterated to apostrophes, and the double quotation marks are
-# transliterated to 0x22.
-#
-# This catalog furthermore displays the text between the quotation marks in
-# bold face, assuming the VT100/XTerm escape sequences.
-#
diff --git a/po/en@quot.header b/po/en@quot.header
deleted file mode 100644
index a9647fc..0000000
--- a/po/en@quot.header
+++ /dev/null
@@ -1,22 +0,0 @@
-# All this catalog "translates" are quotation characters.
-# The msgids must be ASCII and therefore cannot contain real quotation
-# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
-# and double quote (0x22). These substitutes look strange; see
-# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
-#
-# This catalog translates grave accent (0x60) and apostrophe (0x27) to
-# left single quotation mark (U+2018) and right single quotation mark (U+2019).
-# It also translates pairs of apostrophe (0x27) to
-# left single quotation mark (U+2018) and right single quotation mark (U+2019)
-# and pairs of quotation mark (0x22) to
-# left double quotation mark (U+201C) and right double quotation mark (U+201D).
-#
-# When output to an UTF-8 terminal, the quotation characters appear perfectly.
-# When output to an ISO-8859-1 terminal, the single quotation marks are
-# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
-# grave/acute accent (by libiconv), and the double quotation marks are
-# transliterated to 0x22.
-# When output to an ASCII terminal, the single quotation marks are
-# transliterated to apostrophes, and the double quotation marks are
-# transliterated to 0x22.
-#
diff --git a/po/insert-header.sin b/po/insert-header.sin
deleted file mode 100644
index b26de01..0000000
--- a/po/insert-header.sin
+++ /dev/null
@@ -1,23 +0,0 @@
-# Sed script that inserts the file called HEADER before the header entry.
-#
-# At each occurrence of a line starting with "msgid ", we execute the following
-# commands. At the first occurrence, insert the file. At the following
-# occurrences, do nothing. The distinction between the first and the following
-# occurrences is achieved by looking at the hold space.
-/^msgid /{
-x
-# Test if the hold space is empty.
-s/m/m/
-ta
-# Yes it was empty. First occurrence. Read the file.
-r HEADER
-# Output the file's contents by reading the next line. But don't lose the
-# current line while doing this.
-g
-N
-bb
-:a
-# The hold space was nonempty. Following occurrences. Do nothing.
-x
-:b
-}
diff --git a/po/quot.sed b/po/quot.sed
deleted file mode 100644
index 0122c46..0000000
--- a/po/quot.sed
+++ /dev/null
@@ -1,6 +0,0 @@
-s/"\([^"]*\)"/“\1”/g
-s/`\([^`']*\)'/‘\1’/g
-s/ '\([^`']*\)' / ‘\1’ /g
-s/ '\([^`']*\)'$/ ‘\1’/g
-s/^'\([^`']*\)' /‘\1’ /g
-s/“”/""/g
diff --git a/po/remove-potcdate.sin b/po/remove-potcdate.sin
deleted file mode 100644
index 2436c49..0000000
--- a/po/remove-potcdate.sin
+++ /dev/null
@@ -1,19 +0,0 @@
-# Sed script that remove the POT-Creation-Date line in the header entry
-# from a POT file.
-#
-# The distinction between the first and the following occurrences of the
-# pattern is achieved by looking at the hold space.
-/^"POT-Creation-Date: .*"$/{
-x
-# Test if the hold space is empty.
-s/P/P/
-ta
-# Yes it was empty. First occurrence. Remove the line.
-g
-d
-bb
-:a
-# The hold space was nonempty. Following occurrences. Do nothing.
-x
-:b
-}
diff --git a/po/stamp-po b/po/stamp-po
deleted file mode 100644
index 9788f70..0000000
--- a/po/stamp-po
+++ /dev/null
@@ -1 +0,0 @@
-timestamp
diff --git a/src/ChangeLog b/src/ChangeLog
deleted file mode 100644
index b14d58b..0000000
--- a/src/ChangeLog
+++ /dev/null
@@ -1,1559 +0,0 @@
-2008-12-11 Roland McGrath <roland@redhat.com>
-
- * nm.c (sym_name): New function.
- (show_symbols_sysv): Use it in place of elf_strptr.
- (show_symbols_bsd, show_symbols_posix): Likewise.
- Fixes RHBZ#476136.
-
- * nm.c (show_symbols_sysv): Use an alloca'd backup section name when
- elf_strptr fails.
-
-2008-12-02 Roland McGrath <roland@redhat.com>
-
- * readelf.c (count_dwflmod, process_file): Don't presume encoding of
- nonzero OFFSET argument to dwfl_getmodules.
-
-2008-08-07 Roland McGrath <roland@redhat.com>
-
- * addr2line.c (main): Pass string to handle_address.
- (see_one_module): New function, subroutine of handle_address.
- (find_symbol): Likewise.
- (handle_address): Take string argument rather than address.
- Convert plain number, or handle strings like "(section)+offset"
- or "symbol+offset".
-
-2008-08-01 Roland McGrath <roland@redhat.com>
-
- * readelf.c (handle_core_item): Handle 'B' type for 1-origin bitset.
- For 'b' and 'B', print <x-y,z> or ~<x,y-z> rather than 1/0 string.
-
- * readelf.c (convert): Take new argument SIZE.
- (handle_core_register, handle_core_item): Update callers.
- (handle_core_item): Take new arg REPEATED_SIZE.
- (handle_core_items): Special case for a singleton item,
- let handle_core_item handle repeats if it wants to.
-
- * readelf.c (handle_core_items): Give abridged output
- for identical groups repeated more than twice.
-
-2008-07-04 Roland McGrath <roland@redhat.com>
-
- * readelf.c (handle_core_items): Handle ELF_T_ADDR.
-
-2008-04-10 Roland McGrath <roland@redhat.com>
-
- * strip.c (handle_elf): Don't keep sections that kept symbol tables
- refer to. Instead, just be sure to preserve the original symbol
- table in the debug file so those symbols go with their sections and
- can be elided from the stripped version of the symbol table.
-
- * strip.c (handle_elf): When a discarded section kept in the debug
- file refers to a nondiscard section via sh_link/sh_info, preserve
- that nondiscarded section unmodified in the debug file as well.
- Skip adjustment of discarded sections symbol table references when
- that symbol table is copied in this way.
-
- * elflint.c (check_symtab): Don't crash from missing symbol names
- after diagnosing bogus strtab.
-
- * strip.c (handle_elf): Cosmetic cleanup in special section contents
- adjustment for symtab changes.
-
-2008-03-31 Roland McGrath <roland@redhat.com>
-
- * elflint.c (check_sections): Add checks on SHF_EXECINSTR sections:
- must be SHT_PROGBITS, must not be SHF_WRITE. Let backend hook
- excuse a special section.
-
-2008-03-27 Roland McGrath <roland@redhat.com>
-
- * elflint.c (check_sections): Check that executability and writability
- of sections is reflected in segment p_flags.
-
-2008-03-26 Roland McGrath <roland@redhat.com>
-
- * elflint.c (check_program_header): Accept PT_GNU_RELRO p_flags
- that matches its PT_LOAD's p_flags &~ PF_W. On sparc, PF_X really
- is valid in RELRO.
-
-2008-02-29 Roland McGrath <roland@redhat.com>
-
- * readelf.c (print_attributes): Add a cast.
- * elflint.c (check_attributes): Likewise.
-
- * unaligned.h (add_8ubyte_unaligned): Cast PTR argument for parity
- with [UNALIGNED_ACCESS_CLASS == BYTE_ORDER] definition.
- (add_4ubyte_unaligned, add_2ubyte_unaligned): Likewise.
-
-2008-02-03 Ulrich Drepper <drepper@redhat.com>
-
- * i386_ld.c (elf_i386_count_relocations): Implement R_386_TLS_GD
- when linked into executable.
- (elf_i386_create_relocations): Likewise.
-
-2008-02-20 Roland McGrath <roland@redhat.com>
-
- * readelf.c (print_attributes): New function.
- (process_elf_file): Call it under -A.
-
- * elflint.c (check_attributes): Implement it for real.
-
-2008-02-19 Roland McGrath <roland@redhat.com>
-
- * elflint.c (special_sections): Handle .gnu.attributes section.
- (check_sections): Likewise.
- (check_attributes): New function.
-
-2008-02-10 Roland McGrath <roland@redhat.com>
-
- * elfcmp.c (main): Ignore sh_offset differences in non-SHF_ALLOC
- sections and ET_REL files.
-
-2008-02-02 Ulrich Drepper <drepper@redhat.com>
-
- * elf32-i386.script: Add .eh_frame_hdr, .tdata, and .tbss sections.
- * i386_ld.c (elf_i386_count_relocations): Handle R_386_TLS_LDO_32
- and R_386_TLS_LE.
- (elf_i386_create_relocations): Likewise.
- * ld.h (struct ld_state): Add need_tls, tls_start, and tls_tcb
- elements.
- * ldgeneric.c (add_section): If TLS section is used, set need_tls flag.
- (ld_generic_create_outfile): Add PT_TLS entry to program header.
- Fix generation of PT_GNU_STACK entry.
-
-2008-02-01 Ulrich Drepper <drepper@redhat.com>
-
- * ld.c (replace_args): Prevent loop over replacements if the parameter
- is only two characters long.
-
- * ld.c: Recognize sha1 argument for --build-id parameter.
- * ldgeneric.c (create_build_id_section): Handle sha1.
- (compute_hash_sum): New function. Broken out of compute_build_id.
- Take hash function and context as parameters.
- (compute_build_id): Use compute_hash_sum for md5 and the new sha1
- implementation.
-
-2008-01-31 Ulrich Drepper <drepper@redhat.com>
-
- * elf32-i386.script: Add .note.ABI-tag and .note.gnu.build-id sections.
- * ld.c: Recognize --build-id command line parameter.
- * ld.h: Define scn_dot_note_gnu_build_id.
- (struct ld_state): Add build_id and buildidscnidx elements.
- * ldgeneric.c: Implement --build-id command line parameter.
- * ldlex.l (ID): Recognize - as valid character after the first one.
-
-2008-01-29 Ulrich Drepper <drepper@redhat.com>
-
- * ld.c (replace_args): New function.
- (main): Use it to rewrite old-style parameters.
-
- * elf32-i386.script: Add .gnu.hash section.
- * ldgeneric.c (optimal_bucket_size): A tiny bit more efficient.
- (fillin_special_symbol): Initialize st_size.
- (sortfct_hashval): New function.
- (create_gnu_hash): New function.
- (create_hash): New function.
- (ld_generic_create_outfile): Use the new functions to create the
- hash tables.
-
- * elflint.c (check_gnu_hash): Fix index value printed in error message.
-
-2008-01-24 Ulrich Drepper <drepper@redhat.com>
-
- * elflint.c (check_group): Check that signature symbol for section
- group is not an empty string.
- * ldgeneric.c: Remove magic assignment of indeces in the dynsym
- section. Start implementation of --hash-style.
- * i386_ld.c: Likewise.
- * ld.c: Recognize --hash-style.
- * ld.h (struct scninfo): Add comdat_group.
- Add additional parameter to finalize_plt callback.
-
-2008-01-22 Ulrich Drepper <drepper@redhat.com>
-
- * ld.h (struct callbacks): Add initialize_gotplt.
- (struct scnhead): Add scn_dot_gotplt.
- (struct ld_state): Add gotpltscnidx.
- * i386_ld.c (elf_i386_initialize_plt): Minor optimization.
- (elf_i386_initialize_pltrel): Likewise.
- (elf_i386_initialize_got): There is now a separate .got.plt, so
- don't do the PLT-related work here. Initialize d_type.
- (elf_i386_initialize_gotplt): New function.
- (elf_i386_plt0): Use ud2a after indirect jump.
- (elf_i386_pic_plt0_entry): Likewise.
- (elf_i386_finalize_plt): Reference now .got.plt.
- (elf_i386_count_relocations): For GOT entries which need no relocation
- don't bump nrel_got.
- (elf_i386_create_relocations): Also get .got.plt. Rewrite R-386_GOT32
- handling for split .got/.got.plt.
- (elf_i386_ld_init): Initialize callbacks.initialize_gotplt.
- * elf32-i386.script: Sort sections for security. There are no .got
- input sections. Add .got.plt.
- * ldgeneric.c (ld_generic_generate_sections): Add .got.plt section.
- (ld_generic_create_outfile): Initialize .got.plt section.
- Use .got.plt address for _GLOBAL_OFFSET_TABLE_ symbol and DT_PLTGOT.
-
-2008-01-19 Ulrich Drepper <drepper@redhat.com>
-
- * i386_ld.c (elf_i386_count_relocations): PLT relocations for undefined
- symbols are not carried over into statically linked output files.
- Add dummy entries for more TLS relocations.
-
- * ld.c (options): Add long names for -( and -).
-
- * ldgeneric.c (check_definition): For newly found definitions don't
- mark section as used if symbol is absolute.
- (extract_from_archive): Only assign archive sequence number the first
- time the archive is handled. Update ld_state.last_archive_used
- if any symbol was used. Remove nround variable.
- (file_process2): When using symbol from an archive, update
- ld_state.group_start_archive, ld_state.archives, and
- ld_state.tailarchives.
- (ld_generic_file_process): If group is not handled anymore, after
- freeing ELF handles for the archives, clear ld_state.archives and
- *nextp. Fix wrong logic in recognizing first iteration of group
- loop. When clearing flags, also clear ld_state.group_start_archive.
-
-2008-01-11 Ulrich Drepper <drepper@redhat.com>
-
- * objdump.c (show_disasm): Adjust disassembler format string for
- removal of %e.
-
-2008-01-04 Roland McGrath <roland@redhat.com>
-
- * readelf.c (handle_core_items): Take new arg DESCSZ; if nonzero,
- a size greater than the items cover means multiple sets of items.
- (handle_core_note): Update caller.
-
-2008-01-04 Roland McGrath <roland@redhat.com>
-
- * strip.c (handle_elf): Move SHDRIDX defn to silence gcc warning.
-
-2008-01-03 Roland McGrath <roland@redhat.com>
-
- * ld.h (linked_from_dso_p): Use __attribute__ ((__gnu_inline__)).
-
- * elflint.c (check_dynamic): Remove duplicate initializer.
-
-2008-01-02 Ulrich Drepper <drepper@redhat.com>
-
- * addr2line.c: Update copyright year.
- * ar.c: Likewise.
- * elfcmp.c: Likewise.
- * elflint.c: Likewise.
- * findtextrel.c: Likewise.
- * ld.c: Likewise.
- * nm.c: Likewise.
- * objdump.c: Likewise.
- * ranlib.c: Likewise.
- * readelf.c: Likewise.
- * size.c: Likewise.
- * strings.c: Likewise.
- * strip.c: Likewise.
- * unstrip.c: Likewise.
-
-2007-12-30 Ulrich Drepper <drepper@redhat.com>
-
- * objdump (show_disasm): Use %e after third parameter.
-
-2007-12-21 Ulrich Drepper <drepper@redhat.com>
-
- * strip.c: Fix wrong parenthesis in a few branch predictions.
- * strings.c: Likewise.
-
-2007-12-20 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am (DEFS): Add DEBUGPRED.
- * addr2line.c: Include debugpred.h.
- * ar.c: Likewise.
- * elfcmp.c: Likewise.
- * elflint.c: Likewise.
- * findtextrel.c: Likewise.
- * nm.c: Likewise.
- * objdump.c: Likewise.
- * ranlib.c: Likewise.
- * readelf.c: Likewise.
- * size.c: Likewise.
- * strings.c: Likewise.
- * strip.c: Likewise.
- * unstrip.c: Likewise.
- * debugpred.h: New file.
-
- * readelf.c (handle_relocs_rel): Use elf_scnshndx.
- (handle_relocs_rela): Likewise.
-
- * readelf.c: Add lots of likely/unlikely.
-
- * elflint.c: Minor cleanups.
-
-2007-11-19 Roland McGrath <roland@redhat.com>
-
- * readelf.c (print_ops): Handle all bad op codes gracefully.
- Print their numbers instead of just ???.
-
-2007-11-09 Roland McGrath <roland@redhat.com>
-
- * readelf.c (attr_callback): Handle DW_AT_data_location.
- Handle block forms to mean a DWARF expression for DW_AT_allocated,
- DW_AT_associated, DW_AT_bit_size, DW_AT_bit_offset, DW_AT_bit_stride,
- DW_AT_byte_size, DW_AT_byte_stride, DW_AT_count, DW_AT_lower_bound,
- DW_AT_upper_bound.
-
-2007-10-20 Roland McGrath <roland@redhat.com>
-
- * unstrip.c (options): Update -R description.
- (struct symbol): Put symbol details a union with a size_t pointer
- `duplicate'.
- (compare_symbols_output): Use null ->name as marker for discard
- symbols, not zero *->map.
- (copy_elided_sections): Record forwarding pointers for discarded
- duplicates and fill SYMNDX_MAP elements through them.
-
- * readelf.c (process_file): Set offline_next_address to 0 at start.
- (struct process_dwflmod_args): New type.
- (process_dwflmod): Take args in it, pass fd to process_elf_file.
- (process_file): Update caller; dup FD for passing to libdwfl.
- (process_elf_file): Take new arg FD. For ET_REL file when
- displaying data affected by libdwfl relocation, open a new Elf handle.
-
-2007-10-17 Roland McGrath <roland@redhat.com>
-
- * readelf.c (print_debug_line_section): For invalid data inside a
- unit with plausible length, keep printing at the next unit boundary.
-
- * readelf.c (attr_callback): Use dwarf_formref_die, not dwarf_formref.
-
-2007-10-16 Roland McGrath <roland@redhat.com>
-
- * readelf.c (hex_dump): Fix rounding error in whitespace calculation.
-
-2007-10-15 Roland McGrath <roland@redhat.com>
-
- * make-debug-archive.in: New file.
- * Makefile.am (EXTRA_DIST): Add it.
- (make-debug-archive): New target.
- (bin_SCRIPTS, CLEANFILES): Add it.
-
-2007-10-10 Roland McGrath <roland@redhat.com>
-
- * elflint.c (special_sections): Add new attrflag value exact_or_gnuld.
- Use it to check MERGE|STRINGS for .debug_str.
- (check_sections): Handle exact_or_gnuld.
-
-2007-10-08 Roland McGrath <roland@redhat.com>
-
- * readelf.c (handle_core_item): Handle 'T'|0x80 to indicate
- 64-bit struct timeval with 32-bit tv_usec.
-
-2007-10-07 Roland McGrath <roland@redhat.com>
-
- * readelf.c (check_archive_index): New function.
- (process_file): Call it. Change signature to take only fd and name.
- Use libdwfl to open the file, then iterate on its modules (multiple
- for an archive) to print file name and call process_elf_file.
- (main): Update caller. Let process_file do elf_begin.
- (count_dwflmod, process_dwflmod, find_no_debuginfo): New functions.
- (process_elf_file): Take only Dwfl_Module * argument.
- Don't print the file name here.
- (print_debug_*_section): Take Dwfl_Module * argument.
- (print_debug): Likewise. Update caller.
- (format_dwarf_addr): New function.
- (print_debug_ranges_section): Use it.
- (attr_callback): Likewise.
- (print_debug_line_section, print_debug_loc_section): Likewise.
-
- * readelf.c (print_debug_ranges_section): Translate all strings.
- (print_debug_loc_section): Likewise.
-
- * unstrip.c (copy_elided_sections): Initialize SEC.
-
- * ar.c (do_oper_insert): Put trailing / on short names.
-
- * arlib.h (MAX_AR_NAME_LEN): Decrease by one.
-
- * arlib2.c (arlib_add_long_name): Adjust for header size.
-
- * arlib.c (arlib_finalize): Pad long name table to keep size even.
-
- * ar.c (do_oper_insert): Use write_retry for padding write.
-
- * ar.c (do_oper_insert): Initialize CUR_OFF in no_old case.
- Unconditionally set FOUND[CNT]->elf when setting ->mem.
- (remember_long_name): New function.
- (do_oper_insert): Call it. Correctly use length of basename,
- not original name. Don't store long name twice for new member.
-
-2007-10-06 Roland McGrath <roland@redhat.com>
-
- * elflint.c (check_note): Skip empty segment.
- (check_note_section): Skip empty section.
-
- * unstrip.c (options, parse_opt, struct arg_info): Grok -R/--relocate.
- (handle_output_dir_module, handle_implicit_modules): Pass it down.
- (handle_dwfl_module): When set, use ET_REL already loaded by Dwfl.
- (compare_alloc_sections): Take new arg REL, ignore address if true.
- (compare_sections): Likewise, pass it down.
- (compare_sections_rel, compare_sections_nonrel): New functions.
- (find_alloc_sections_prelink, copy_elided_sections): Use them
- instead of compare_sections.
- (sections_match): New function, broken out of ...
- (find_alloc_section): ... here.
- (copy_elided_sections): Reorganize section match-up logic.
- Use sections_match for SHF_ALLOC in ET_REL.
- For ET_REL, let the nonzero sh_addr from the debug file dominate.
-
- * unstrip.c (add_new_section_symbols): Take new arg REL.
- When true, do not update section symbol values.
- (collect_symbols): Likewise. Update section symbols with address
- of chosen output section, not original section.
- (check_symtab_section_symbols, copy_elided_sections): Update callers.
-
- * unstrip.c (compare_alloc_sections): At the same address, preserve
- original section order.
-
- * elflint.c (special_sections): Don't require MERGE|STRINGS for
- .debug_str, it didn't always have them with older tools.
-
- * elflint.c (check_symtab, check_one_reloc): Ignore sh_addr in ET_REL.
-
-2007-10-05 Roland McGrath <roland@redhat.com>
-
- * elflint.c (check_symtab): Allow SHN_UNDEF _GLOBAL_OFFSET_TABLE_ in
- ET_REL file.
-
- * elflint.c (check_symtab): For _GLOBAL_OFFSET_TABLE_, diagnose
- SHN_UNDEF as "bad section". Use shndx value in messages.
-
- * elflint.c (special_sections): Add ".debug_str". Decrement namelen
- for ".debug" so it matches as a prefix.
- (IS_KNOWN_SPECIAL): New macro.
- (check_sections): Use it for ".plt" match. Cite wrong SHT_NOBITS
- type even under -d, for a .debug* or .shstrtab section.
-
- * readelf.c (print_ops): Use hex for address operand.
-
-2007-10-04 Roland McGrath <roland@redhat.com>
-
- * unstrip.c (copy_elided_sections): Initialize NDX_SECTION element for
- .gnu_debuglink section to SHN_UNDEF. Drop STT_SECTION symbols for
- sections mapped to SHN_UNDEF.
-
-2007-10-04 Ulrich Drepper <drepper@redhat.com>
-
- * readelf.c (dump_archive_index): Avoid warning about uninitialized
- variable with older glibc versions.
- Add some branch prediction.
-
-2007-10-04 Roland McGrath <roland@redhat.com>
-
- * readelf.c (print_archive_index): New variable.
- (options, parse_opt): Accept -c/--archive-index to set it.
- (dump_archive_index): New function.
- (process_file): Take new arg WILL_PRINT_ARCHIVE_INDEX.
- Call dump_archive_index on archives if set.
- (main): Update caller.
- (any_control_option): Give it file scope, moved out of ...
- (parse_opt): ... here.
-
-2007-10-03 Roland McGrath <roland@redhat.com>
-
- * unstrip.c (struct arg_info): Add `list' flag.
- (options, parse_opt): Grok -n/--list to set it.
- (list_module): New function.
- (handle_implicit_modules): Call it under -n.
-
- * elflint.c (check_note_section): New function.
- (check_sections): Call it for SHT_NOTE.
-
- * readelf.c (handle_notes): Use sections when available.
-
- * elflint.c (check_note_data): New function, broken out of ...
- (check_note): ... here. Call it and elf_getdata_rawchunk.
-
- * readelf.c (handle_auxv_note): Take offset as argument, not buffer.
- Use elf_getdata_rawchunk and gelf_getauxv.
- (handle_notes_data): New function, broken out of ...
- (handle_notes): ... here. Call it and elf_getdata_rawchunk.
-
-2007-10-01 Roland McGrath <roland@redhat.com>
-
- * readelf.c (hex_dump): Fix transposed subtraction generating spaces.
-
- * readelf.c (hex_dump): Fix line header to be hex instead of decimal.
-
-2007-09-10 Roland McGrath <roland@redhat.com>
-
- * readelf.c (options): Give -p optional argument, alias --string-dump.
- (string_sections, string_sections_tail): New static variables.
- (parse_opt): Set them when -p has an argument.
- (print_string_section): New function, broken out of ...
- (print_strings): ... here. Call it.
- (dump_data_section): New function, broken out of ...
- (dump_data): ... here. Call it.
- (for_each_section_argument): New function, broken out of ...
- (dump_data): ... here. Call it.
- (dump_strings): New function.
-
-2007-08-31 Roland McGrath <roland@redhat.com>
-
- * readelf.c (print_strings): Typo fix.
-
-2007-08-23 Roland McGrath <roland@redhat.com>
-
- * readelf.c (printf_with_wrap): Function removed.
- (REGISTER_WRAP_COLUMN): New macro.
- (handle_core_register): Use print_core_item instead.
- (struct register_info): New type.
- (compare_registers, compare_register_sets): New functions.
- (register_bitpos, compare_sets_by_info): New functions.
- (handle_core_registers): Use those to segregate and sort registers
- for display.
-
- * readelf.c (ITEM_WRAP_COLUMN): New macro.
- (print_core_item): New function.
- (handle_core_item): Use it instead of printf_with_wrap.
- (compare_core_items, compare_core_item_groups): New functions.
- (handle_core_items): Use them. Sort by group and force line breaks
- between groups.
-
- * readelf.c (handle_core_registers, handle_core_items): New functions,
- broken out of ...
- (handle_core_note): ... here. Call them.
-
-2007-08-22 Roland McGrath <roland@redhat.com>
-
- * unstrip.c (new_shstrtab): New function, broken out of ...
- (copy_elided_sections): ... here.
-
-2007-08-20 Roland McGrath <roland@redhat.com>
-
- Avoid local function trampolines in nm binary.
- * nm.c (sort_by_address): Move to a static function instead of local
- inside show_symbols.
- (sort_by_name_strtab): New static variable.
- (sort_by_name): Use it. Move to a static function instead of local
- inside show_symbols.
- (show_symbols): Set sort_by_name_strtab.
-
-2007-08-19 Roland McGrath <roland@redhat.com>
-
- * readelf.c (handle_auxv_note): New function.
- (handle_notes): Call it.
-
- * readelf.c (printf_with_wrap, convert): New functions.
- (handle_core_item, (handle_core_register): New functions.
- (handle_notes): Call those with details from ebl_core_note.
-
-2007-08-12 Roland McGrath <roland@redhat.com>
-
- * elflint.c (check_note): Accept type 0 with name "Linux".
-
- * elflint.c (special_sections): Accept SHF_ALLOC for ".note".
-
- * elflint.c (section_flags_string): Return "none" for 0, not "".
-
-2007-08-11 Roland McGrath <roland@redhat.com>
-
- * elflint.c (check_note): Accept NT_GNU_HWCAP, NT_GNU_BUILD_ID.
-
-2007-08-04 Ulrich Drepper <drepper@redhat.com>
-
- * readelf.c (hex_dump): Use isprint to determine whether to print
- character itself or full stop character.
- (dump_data): No need to check endp for NULL after strtol call.
-
-2007-08-03 Roland McGrath <roland@redhat.com>
-
- * readelf.c (print_string_sections): New variable.
- (options, parse_opt): Handle --strings/-p to set it.
- (print_strings): New function.
- (process_elf_file): Call it under -p.
-
- * readelf.c (options): Add hidden aliases --segments, --sections,
- as taken by binutils readelf.
-
-2007-08-01 Roland McGrath <roland@redhat.com>
-
- * readelf.c (dump_data_sections, dump_data_sections_tail):
- New variables.
- (options, parse_opt): Handle --hex-dump/-x, set them.
- (hex_dump): New function.
- (dump_data): New function, call it.
- (process_elf_file): Call it.
-
-2007-07-25 Roland McGrath <roland@redhat.com>
-
- * addr2line.c (show_symbols): New variable.
- (print_addrsym): New function.
- (handle_address): Call it.
- (options, parse_opt): Handle -S/--symbols.
-
-2007-06-05 Ulrich Drepper <drepper@redhat.com>
-
- * addr2line.c: Update for latest autoconf header.
- * ar.c: Likewise.
- * elfcmp.c: Likewise.
- * elflint.c: Likewise.
- * findtextrel.c: Likewise.
- * ld.c: Likewise.
- * ldgeneric.c: Likewise.
- * nm.c: Likewise.
- * objdump.c: Likewise.
- * ranlib.c: Likewise.
- * readelf.c: Likewise.
- * size.c: Likewise.
- * strings.c: Likewise.
- * strip.c: Likewise.
- * unstrip.c: Likewise.
-
-2007-05-18 Roland McGrath <roland@redhat.com>
-
- * unstrip.c (copy_elided_sections): Match up non-NOBITS sections with
- stripped file, so as not to duplicate a section copied in both.
-
- * strip.c (handle_elf): Keep SHT_NOTE section copies in the debug file.
-
-2007-05-17 Roland McGrath <roland@redhat.com>
-
- * unstrip.c (copy_elided_sections): Don't call gelf_newphdr for 0.
-
- * unstrip.c (handle_file): Tweak BIAS != 0 warning.
-
- * unstrip.c (handle_file): Take new arg CREATE_DIRS. If set,
- call make_directories here.
- (handle_explicit_files): Take new arg CREATE_DIRS, pass it down.
- (handle_dwfl_module): Likewise.
- (handle_implicit_modules): Update callers.
- (handle_output_dir_module): Likewise. Don't do make_directories here.
-
- * unstrip.c (get_section_name): New function, broken out of ...
- (copy_elided_sections): here. Update callers.
- (find_alloc_section): Broken out of ...
- (copy_elided_sections): ... here. Update caller.
- (symtab_count_leading_section_symbols): Take new arg NEWSYMDATA,
- update STT_SECTION symbols' st_value fields as a side effect.
- (check_symtab_section_symbols): Update caller.
- (add_new_section_symbols): Set st_value in symbols added.
- (collect_symbols): Reset S->value for STT_SECTION symbols recorded.
- Take new arg SPLIT_BSS. Adjust S->shndx recorded for symbols moved
- from .bss to .dynbss.
- (find_alloc_sections_prelink): New function. Associate debug file
- allocated SHT_NOBITS shdrs with stripped moved by prelink via
- .gnu.prelink_undo information.
- (copy_elided_sections): Call it when we couldn't find every allocated
- section. Don't use a debug file non-NOBITS section if SHF_ALLOC.
- Take STRIPPED_EHDR arg instead of E_TYPE and PHNUM.
- (handle_file): Update callers.
-
- * unstrip.c (copy_elided_sections): Ignore unfound unallocated section
- named ".comment".
-
- * elflint.c (check_sections): Fix association of segments with
- sections when p_memsz > p_filesz.
-
-2007-04-29 Roland McGrath <roland@redhat.com>
-
- * addr2line.c (options, main): Tweak argp group settings to fix
- usage output.
-
-2007-04-28 Roland McGrath <roland@redhat.com>
-
- * strip.c (handle_elf): Update debug file's SHT_NOBITS sections'
- sizes to match sections adjusted in the stripped file.
-
-2007-04-24 Roland McGrath <roland@redhat.com>
-
- * elfcmp.c (OPT_HASH_INEXACT): New macro.
- (hash_inexact): New variable.
- (options, parse_opt): Add --hash-inexact option to set it.
- (hash_content_equivalent): New function.
- (main): Call it for differing SHT_HASH sections under --hash-inexact.
-
-2007-04-23 Roland McGrath <roland@redhat.com>
-
- * unstrip.c: New file.
- * Makefile.am (bin_PROGRAMS): Add it.
- (unstrip_LDADD): New variable.
-
- * strip.c (options): Allow --output for -o.
-
-2007-02-15 Ulrich Drepper <drepper@redhat.com>
-
- * readelf.c: Remove unused code. Add a few consts.
-
-2007-02-15 Roland McGrath <roland@redhat.com>
-
- * readelf.c (print_debug): Fix brainos in SHDR test.
-
-2007-02-05 Roland McGrath <roland@redhat.com>
-
- * ar.c: Include <limits.h>, since we use LONG_MAX.
-
-2007-02-05 Ulrich Drepper <drepper@redhat.com>
-
- * ar.c: Add ugly hack to work around gcc complaining that we
- ignore fchown's return value.
- (do_oper_insert): Handle error when writing padding.
- * ranlib.c: Add fchown complain work around.
-
- * arlib.c: Make symtab a global variable. Change all users.
- * arlib2.c: Likewise.
- * ranlib.c: Likewise.
- * ar.c: Likewise.
- * arlib.h: Declare it.
-
-2007-01-11 Roland McGrath <roland@redhat.com>
-
- * elflint.c (check_sections): Use ebl_machine_section_flag_check on
- SHF_MASKPROC bits separately from generic sh_flags validation.
-
-2007-02-04 Ulrich Drepper <drepper@redhat.com>
-
- * ar.c: New file.
- * arlib.c: New file.
- * arlib2.c: New file.
- * arlib.h: New file.
- * Makefile (noinst_LIBRARIES): Add libar.
- (libar_a_SOURCES): Define.
- (ar_LDADD): Define.
- (CFLAGS_ar): Define.
- * ranlib.c: Change to use arlib.
-
- * elflint.c (check_symtab): Work around GNU ld bug which omits
- sections but not symbols in those sections.
-
-2007-01-10 Ulrich Drepper <drepper@redhat.com>
-
- * addr2line.c: Update copyright year.
- * elfcmp.c: Likewise.
- * elflint.c: Likewise.
- * findtextrel.c: Likewise.
- * ld.c: Likewise.
- * nm.c: Likewise.
- * objdump.c: Likewise.
- * ranlib.c: Likewise.
- * readelf.c: Likewise.
- * size.c: Likewise.
- * strings.c: Likewise.
- * strip.c: Likewise.
-
-2006-12-09 Ulrich Drepper <drepper@redhat.com>
-
- * elflint.c (compare_hash_gnu_hash): New function. Report if the
- two hash tables have different content (module expected omission
- of undefined symbols).
-
-2006-10-31 Roland McGrath <roland@redhat.com>
-
- * elflint.c (check_program_header): Don't complain about
- p_filesz > p_memsz if p_memsz is zero and p_type is PT_NOTE.
-
-2006-09-19 Jakub Jelinek <jakub@redhat.com>
-
- * strip.c (process_file): Disallow -f on archives.
-
-2006-10-09 Roland McGrath <roland@redhat.com>
-
- * Makefile.am (libld_elf_i386.so): Use $(LINK), not $(CC).
-
-2006-08-29 Roland McGrath <roland@redhat.com>
-
- * Makefile.am (MAINTAINERCLEANFILES): New variable.
-
- * readelf.c (handle_relocs_rel): Typo fix, test DESTSHDR properly.
- Reported by Christian Aichinger <Greek0@gmx.net>.
-
- * elflint.c (valid_e_machine): Add EM_ALPHA.
- Reported by Christian Aichinger <Greek0@gmx.net>.
-
-2006-08-08 Ulrich Drepper <drepper@redhat.com>
-
- * elflint.c (check_dynamic): Don't require DT_HASH for DT_SYMTAB.
- Keep track of which "high DT" entries are present.
- Check that either old or GNU-style hash table is present.
- If GNU-style hash table is used a symbol table is mandatory.
- Check that if any prelink entry is present all of them are.
- (check_gnu_hash): Only fail for undefined symbols in GNU-style hash
- table if they don't refer to functions.
-
-2006-07-17 Roland McGrath <roland@redhat.com>
-
- * elflint.c (struct version_namelist): Use GElf_Versym for `ndx' field.
- (add_version): Likewise for argument.
- (check_versym): Cast constant to GElf_Versym for comparison.
-
-2006-07-12 Roland McGrath <roland@redhat.com>
-
- * readelf.c (handle_gnu_hash): Add casts for machines where
- Elf32_Word != unsigned int.
-
-2006-07-12 Ulrich Drepper <drepper@redhat.com>
-
- * elflint.c (check_sysv_hash64): Fix printf format.
-
-2006-07-11 Roland McGrath <roland@redhat.com>
-
- * addr2line.c (options): English fix in -f doc string.
-
- * addr2line.c (use_comp_dir): New variable.
- (options, parse_opt): Grok -A/--absolute to set it.
- (handle_address): If set, prepend dwfl_line_comp_dir results to
- relative file names.
-
-2006-07-06 Ulrich Drepper <drepper@redhat.com>
-
- * elflint.c: Adjust for latest new hash table format.
- * readelf.c: Likewise.
-
- * elflint.c (check_versym): Ignore hidden bit when comparing version
- numbers.
-
-2006-07-05 Ulrich Drepper <drepper@redhat.com>
-
- * ldgeneric.c (ld_generic_create_outfile): Correctly recognize
- discarded COMDAT symbols.
-
- * i386_ld.c (elf_i386_count_relocations): Lot of corrections.
- (elf_i386_create_relocations): Likewise.
- * ld.h (struct symbol): Add local and hidden bits.
- * ld.c (create_special_section_symbol): These synthsized symbols
- are local and hidden.
- * ldgeneric.c (file_process2): Check whether input file matches
- the emulation.
- (fillin_special_symbol): Create symbols as local and/or hidden
- if requested.
- (ld_generic_create_outfile): Make local copy of symbol.
- Don't hide global, defined symbols in dynamic symbol table unless
- requested. Synthetic symbols have no version information.
-
- * elflint.c: Add support for checking 64-bit SysV-style hash tables.
- * readelf.c: Add support for printing 64-bit SysV-style hash tables.
-
-2006-07-04 Ulrich Drepper <drepper@redhat.com>
-
- * elflint.c (is_rel_dyn): Fix and extend DT_RELCOUNT/DT_RELACOUNT
- testing.
-
-2006-07-03 Ulrich Drepper <drepper@redhat.com>
-
- * elflint.c: Add testing of DT_GNU_HASH.
- * readelf.c: Implement showing histogram for DT_GNU_HASH section.
-
- * Makefile.am: Add hacks to create dependency files for non-generic
- linker.
-
-2006-06-12 Ulrich Drepper <drepper@redhat.com>
-
- * ldgeneric.c (ld_generic_generate_sections): Don't create .interp
- section if creating a DSO and no interpreter is given.
- (ld_generic_create_outfile): Don't store reference to symbols in
- discarded COMDAT groups. Don't create PHDR and INTERP program header
- for DSO if no interpreter is specified.
- (create_verneed_data): Pretty printing.
-
- * ldscript.y (content): If a DSO is created don't set default
- interpreter from linker script.
-
- * i386_ld.c (elf_i386_count_relocations): Do not add relocations
- for symbols in discarded COMDAT groups.
- (elf_i386_create_relocations): Likewise.
- * ld.h (struct scninfo): Add unused_comdat.
- * ldgeneric.c (add_section): Also check group signature when
- matching COMDAT sections.
- (add_relocatable_file): Ignore symbols in COMDAT group which are
- discarded.
-
- * elflint.c (check_one_reloc): For *_NONE relocs only check type
- and symbol reference.
-
-2006-06-11 Ulrich Drepper <drepper@redhat.com>
-
- * elflint.c (check_dynamic): Fix checking value of tags which are
- offsets in the string section. Make sure DT_STRTAB points to the
- section referenced in sh_link.
-
- * ld.c (options): Add headers. Add short option 'R' for '--rpath'.
-
- * ld.c: Recognize --eh-frame-hdr option.
- * ld.h (struct ld_state): Add eh_frame_hdr field.
- * ldgeneric.c (struct unw_eh_frame_hdr): Define.
-
- * ldgeneric.c (add_section): Use ebl_sh_flags_combine instead of
- SH_FLAGS_COMBINE.
- (add_relocatable_file): Minor optimization of last change.
- (match_section): Don't preserve SHF_GROUP flag any longer.
-
-2006-06-10 Ulrich Drepper <drepper@redhat.com>
-
- * ld.c (parse_z_option): Recognize execstack and noexecstack.
- Handle record and ignore as position dependent options.
- (parse_z_option_2): Handle ignore and record here.
- * ld.h (struct ld_state): Add execstack field.
- * ldgeneric.c (add_relocatable_file): Recognize .note.GNU-stack
- sections.
- (ld_generic_create_outfile): Fix program header creation in native
- linker. Add PT_GNU_STACK program header.
-
-2006-06-09 Ulrich Drepper <drepper@redhat.com>
-
- * i386_ld.c (elf_i386_finalize_plt): Don't change symbol table entries
- for PLT entries if there is no local definition.
-
- * ld.c (parse_option): Handle -z ignore like --as-needed and
- -z record like --no-as-needed.
- * ld.h (struct ld_state): Remove ignore_unused_dsos field.
- * ldgeneric.c (new_generated_scn): Always compute ndt_needed by
- looping over DSOs. When deciding about adding DT_NEEDED entries
- use ->as_needed instead of ignore_unused_dsos.
-
-2006-05-31 Ulrich Drepper <drepper@redhat.com>
-
- * ld.c: Recognize --as-needed and --no-as-needed options.
- * ld.h (struct usedfile): Add as_needed field.
- (struct ld_state): Likewise.
- * ldgeneric.c (ld_handle_filename_list): Copy as_needed flag from
- the list.
- * ldscript.y (filename_id_list): Split to correctly parse all
- combinations.
- (mark_as_needed): Fix loop.
-
-2006-05-28 Ulrich Drepper <drepper@redhat.com>
-
- * addr2line.c (print_dwarf_function): Use unsigned type for lineno
- and colno.
-
-2006-05-27 Ulrich Drepper <drepper@redhat.com>
-
- * readelf.c (handle_relocs_rela): Better notations for addon value.
- (print_ehdr): Distinguish e_ident[EI_VERSION] from e_version.
-
-2006-04-04 Ulrich Drepper <drepper@redhat.com>
-
- * addr2line.c: Update copyright year.
- * elfcmp.c: Likewise.
- * elflint.c: Likewise.
- * findtextrel.c: Likewise.
- * ld.c: Likewise.
- * nm.c: Likewise.
- * objdump.c: Likewise.
- * ranlib.c: Likewise.
- * readelf.c: Likewise.
- * size.c: Likewise.
- * strings.c: Likewise.
- * strip.c: Likewise.
-
-2006-03-09 Roland McGrath <roland@redhat.com>
-
- * Makefile.am (AM_LDFLAGS): New variable.
-
-2006-03-01 Roland McGrath <roland@redhat.com>
-
- * readelf.c (dwarf_tag_string, dwarf_attr_string): Update name tables
- for dwarf.h changes matching 3.0 spec.
- (dwarf_encoding_string, dwarf_lang_string, print_ops): Likewise.
-
-2005-12-04 Ulrich Drepper <drepper@redhat.com>
-
- * elflint.c (check_one_reloc): If relocation section is not loaded,
- don't check whether the relocations modify read-only sections or
- loaded and unloaded sections.
-
-2005-11-28 Ulrich Drepper <drepper@redhat.com>
-
- * elflint.c (check_one_reloc): Take additional parameters. Use
- them to determine whether relocation is valid in this type of
- file. DSOs and executables can contain relocation sections in
- unloaded sections which just show the relocations the linker
- applied. Adjust all callers.
- (check_program_header): Check that PT_PHDR is loaded and that offset
- matches the one in the ELF header.
-
-2005-10-26 Roland McGrath <roland@redhat.com>
-
- * nm.c (get_var_range): dwarf_getloclist -> dwarf_getlocation.
-
-2005-09-03 Ulrich Drepper <drepper@redhat.com>
-
- * strip.c (handle_elf): Unify some error messages.
- * ld.c (main): Likewise.
- * ldgeneric.c (open_elf): Likewise.
- * elfcmp.c (main): Likewise.
- * elflint.c (check_elf_header): Likewise.
-
- * size.c (process_file): Fix typo in error message.
-
- * readelf.c: Lots of little cleanups. Use _unlocked functions.
-
-2005-09-02 Ulrich Drepper <drepper@redhat.com>
-
- * strings.c (main): Reset elfmap variable after munmap call.
- [_MUDFLAP] (map_file): Simplify mudflap debugging by not using mmap.
-
-2005-08-28 Ulrich Drepper <drepper@redhat.com>
-
- * ranlib.c: Don't define pread_retry and write_retry here.
-
- * Makefile.an [BUILD_STATIC] (libdw): Add -ldl.
- (CLEANFILES): Add *.gcno *.gcda *.gconv.
-
- * strings.c (process_chunk): Reorder expressions in conditional
- (process_chunk_mb): Likewise.
-
- * strings.c: New file.
- * Makefile.am (bin_PROGRAMS): Add strings.
- (strings_no_Wstring): Define.
- (strings_LDADD): Define.
-
-2005-08-27 Roland McGrath <roland@redhat.com>
-
- * addr2line.c (dwarf_diename_integrate): Function removed.
- (print_dwarf_function): Use plain dwarf_diename.
-
-2005-08-24 Ulrich Drepper <drepper@redhat.com>
-
- * elflint.c (check_versym): Versioned symbols should not have
- local binding.
-
-2005-08-15 Ulrich Drepper <drepper@redhat.com>
-
- * elflint.c (check_versym): Allow VER_NDX_LOCAL symbols to be
- undefined.
-
- * Makefile.am: Add rules to build ranlib.
- * ranlib.c: New file.
-
-2005-08-14 Roland McGrath <roland@redhat.com>
-
- * elflint.c (check_sections): Use ebl_section_type_name and allow any
- sh_type it recognizes.
-
- * elflint.c (check_sections): Print unknown flags in hex, don't
- truncate high bits. Print section number and name for unknown type.
-
-2005-08-13 Roland McGrath <roland@redhat.com>
-
- * elflint.c (check_program_header): Use ebl_segment_type_name and
- allow any p_type it recognizes. Include p_type value in error
- message for unknown type.
-
-2005-08-13 Ulrich Drepper <drepper@redhat.com>
-
- * elflint.c (check_symtab): Simplify last change a bit. Pass ehdr
- to ebl_check_special_symbol.
- (check_sections): Pass ehdr to ebl_bss_plt_p.
-
-2005-08-12 Roland McGrath <roland@redhat.com>
-
- * elflint.c (check_symtab): Check that _GLOBAL_OFFSET_TABLE_ st_shndx
- refers to the right section if it's not SHN_ABS.
- Let ebl_check_special_symbol override _G_O_T_ value and size checks.
-
- * elflint.c (check_sections): Don't complain about a non-NOBITS
- section taking no segment space, if it's sh_size is 0.
-
- * elflint.c (check_sections): Use ebl_bss_plt_p to see if .plt should
- be PROGBITS or NOBITS.
-
- * elflint.c (check_symtab): Use ebl_check_special_symbol to override
- standard st_value and st_size checks.
-
-2005-07-28 Roland McGrath <roland@redhat.com>
-
- * addr2line.c (options, parse_opt): Don't handle -e here.
- (executable): Variable removed.
- (argp_children): New static variable.
- (argp): Use it. Make const.
- (main): Fill in argp_children from dwfl_standard_argp ().
- Let libdwfl handle file selection, pass Dwfl handle to handle_address.
- (print_dwarf_function): New function. Try to figure out inline chain.
- (elf_getname): Function removed, libdwfl does it for us.
- (handle_address): Take Dwfl handle instead of Elf, Dwarf handles.
- Use dwfl_module_addrname instead of elf_getname.
- Use dwfl_module_getsrc and dwfl_lineinfo instead of libdw calls.
- * Makefile.am (INCLUDES): Add libdwfl directory to path.
-
-2005-08-10 Ulrich Drepper <drepper@redhat.com>
-
- * strip.c (parse_opt): STATE parameter is now used.
- Various little cleanups.
-
- * readelf.c (print_debug_line_section): Correct fallout of renaming
- of DW_LNS_set_epilog_begin.
-
-2005-08-08 Roland McGrath <roland@redhat.com>
-
- * strip.c (options, parse_opt): Grok -R .comment for compatibility
- with binutils strip. Likewise -d, -S, as aliases for -g.
- Likewise ignore -s/--strip-all.
-
-2005-08-07 Roland McGrath <roland@redhat.com>
-
- * strip.c (process_file): Open read-only when using a different output
- file.
-
-2005-08-06 Ulrich Drepper <drepper@redhat.com>
-
- * elflint.c (in_nobits_scn): New function.
- (check_versym): Allow references for defined symbols against versions
- of other DSOs also for symbols in nobits sections.
- Move a few variables around.
-
- * Makefile.am (AM_CFLAGS): Avoid duplication.
- Link with statis libs if BUILD_STATIC.
-
-2005-08-05 Ulrich Drepper <drepper@redhat.com>
-
- * elflint.c: Many, many more tests. Mostly related to symbol
- versioning. Those sections should now be completely checked.
-
- * readelf.c (print_dynamic): Use gelf_offscn.
-
-2005-08-04 Ulrich Drepper <drepper@redhat.com>
-
- * elflint.c: Add lots more tests: more extension symbol table sanity,
- versioning section tests, hash table tests. General cleanup.
-
-2005-08-02 Ulrich Drepper <drepper@redhat.com>
-
- * objdump.c: New file.
- * Makefile.am (bin_PROGRAMS): Add objdump.
- (objdump_LDADD): Define.
-
- * elflint.c (check_reloc_shdr): New function split out from check_rela
- and check_rel.
- (check_one_reloc): New function. Likewise.
- (check_rela): Use check_reloc_shdr and check_one_reloc.
- (check_rel): Likewise.
- (check_program_header): Check that PT_DYNAMIC entry matches .dynamic
- section.
- Add checks that relocations against read-only segments are flagged,
- that the text relocation flag is not set unnecessarily, and that
- relocations in one section are either against loaded or not-loaded
- segments.
-
-2005-08-01 Ulrich Drepper <drepper@redhat.com>
-
- * elfcmp.c (main): Ignore section count and section name string table
- section index.
-
-2005-07-27 Roland McGrath <roland@redhat.com>
-
- * elfcmp.c: Include <locale.h>.
-
-2005-07-27 Ulrich Drepper <drepper@redhat.com>
-
- * elfcmp.c: Print name and index of differing section.
-
-2005-07-24 Ulrich Drepper <drepper@redhat.com>
-
- * elfcmp.c: Implement comparing gaps between sections.
-
-2005-07-23 Ulrich Drepper <drepper@redhat.com>
-
- * elflint.c: Include libeblP.h instead of libebl.h.
- * nm.c: Likewise.
- * readelf.c: Likewise.
- * elfcmp.c: Likewise.
-
- * elfcmp.c (main): Compare individual ELF header fields, excluding
- e_shoff instead of the whole struct at once.
- Use ebl_section_strip_p instead of SECTION_STRIP_P.
- * strip.c: Use ebl_section_strip_p instead of SECTION_STRIP_P.
-
-2005-07-22 Ulrich Drepper <drepper@redhat.com>
-
- * elfcmp.c (main): Take empty section into account when comparing
- section content.
-
- * elflint.c (check_dynamic): Check that d_tag value is >= 0 before
- using it.
-
-2005-07-21 Ulrich Drepper <drepper@redhat.com>
-
- * elfcmp.c: New file.
- * Makefile.am (bin_PROGRAMS): Add elfcmp.
- (elfcmp_LDADD): Define.
-
- * elflint.c (check_rela): Check that copy relocations only reference
- object symbols or symbols with unknown type.
- (check_rel): Likewise.
-
-2005-06-08 Roland McGrath <roland@redhat.com>
-
- * readelf.c (print_ops): Add consts.
-
-2005-05-31 Roland McGrath <roland@redhat.com>
-
- * readelf.c (print_debug_abbrev_section): Don't bail after first CU's
- abbreviations. Print a header line before each CU section.
-
- * readelf.c (print_debug_loc_section): Fix indentation for larger
- address size.
-
-2005-05-30 Roland McGrath <roland@redhat.com>
-
- * readelf.c (print_debug_line_section): Print section offset of each
- CU's table, so they are easy to find from seeing the stmt_list value.
-
- * readelf.c (dwarf_attr_string): Add all attributes in <dwarf.h>.
- (attr_callback): Grok DW_AT_ranges and print offset in hex.
-
- * readelf.c (attr_callback): Add 2 to addrsize * 2 for %#0* format.
- (print_debug_ranges_section, print_debug_loc_section): Likewise.
-
- * readelf.c (print_ops): Take different args for indentation control.
- (attr_callback): Caller updated.
- Grok several more block-form attributes as being location expressions.
- For those same attributes with udata forms, format output differently
- for location list offset.
- (print_debug_loc_section): Implement it for real.
-
- * readelf.c (options): Mention ranges for --debug-dump.
- (enum section_e): Add section_ranges.
- (parse_opt): Grok "ranges" for -w/--debug-dump.
- (print_debug_ranges_section): New function.
- (print_debug): Handle .debug_ranges section.
-
-2005-05-30 Ulrich Drepper <drepper@redhat.com>
-
- * readelf.c (handle_notes): At least x86-64 need not have the note
- section values aligned to 8 bytes.
-
-2005-05-18 Ulrich Drepper <drepper@redhat.com>
-
- * readelf.c (dwarf_tag_string): Add new tags.
-
-2005-05-08 Roland McGrath <roland@redhat.com>
-
- * strip.c (handle_elf): Don't translate hash and versym data formats,
- elf_getdata already did it for us.
-
-2005-05-07 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am (findtextrel_LDADD): Add $(libmudflap).
- (addr2line_LDADD): Likewise.
-
-2005-05-03 Roland McGrath <roland@redhat.com>
-
- * strip.c (handle_elf): Apply symbol table fixups to discarded
- relocation sections when they are being saved in the debug file.
-
- * strip.c (handle_elf): Pass EHDR->e_ident[EI_DATA] to gelf_xlatetom
- and gelf_xlatetof, not the native byte order.
-
- * strip.c (parse_opt): Give error if -f or -o is repeated.
- (main): Exit if argp_parse returns nonzero.
-
- * strip.c (debug_fname_embed): New variable.
- (options, parse_opt): New option -F to set it.
-
-2005-05-07 Ulrich Drepper <drepper@redhat.com>
-
- * readelf.c (parse_opt): Make any_control_option variable
- local. Simplify some tests.
-
-2005-05-03 Roland McGrath <roland@redhat.com>
-
- * strip.c (crc32_file): Function removed (now in ../lib).
-
-2005-05-03 Roland McGrath <roland@redhat.com>
-
- * elflint.c (is_debuginfo): New variable.
- (options, parse_opt): New option --debuginfo/-d to set it.
- (check_sections): If is_debuginfo, don't complain about SHT_NOBITS.
- (check_note): If is_debuginfo, don't try to get note contents.
-
-2005-04-24 Ulrich Drepper <drepper@redhat.com>
-
- * readelf.c (print_debug_abbrev_section): Don't print error when end of
- section reached.
-
-2005-04-14 Ulrich Drepper <drepper@redhat.com>
-
- * readelf.c (dwarf_encoding_string): New function.
- (dwarf_inline_string): New function.
- (dwarf_access_string): New function.
- (dwarf_visibility_string): New function.
- (dwarf_virtuality_string): New function.
- (dwarf_identifier_case_string): New function.
- (dwarf_calling_convention_string): New function.
- (dwarf_ordering_string): New function.
- (dwarf_discr_list_string): New function.
- (attr_callback): Decode man more attribute values.
-
-2005-04-01 Ulrich Drepper <drepper@redhat.com>
-
- * addr2line.c: Finish implementation of -f option.
-
-2005-03-29 Ulrich Drepper <drepper@redhat.com>
-
- * addr2line.c: New file.
- * Makefile.am (bin_PROGRAMS): Add addr2line.
- Define addr2line_LDADD.
-
- * findtextrel.c: Use new dwarf_addrdie function.
-
- * findtextrel.c: Fix usage message and re-add accidentally removed
- line.
-
-2005-03-28 Ulrich Drepper <drepper@redhat.com>
-
- * findtextrel.c: New file.
- * Makefile: Add rules to build findtextrel.
-
-2005-02-15 Ulrich Drepper <drepper@redhat.com>
-
- * ldlex.l: Provide ECHO definition to avoid warning.
-
- * elflint.c (check_program_header): Fix typo in RELRO test.
-
- * Makefile.am (AM_CFLAGS): Add more warning options.
- * elflint.c: Fix warnings introduced by the new warning options.
- * i386_ld.c: Likewise.
- * ld.c: Likewise.
- * ld.h: Likewise.
- * ldgeneric.c: Likewise.
- * nm.c: Likewise.
- * readelf.c: Likewise.
- * sectionhash.c: Likewise.
- * size.c: Likewise.
- * string.c: Likewise.
-
-2005-02-05 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: Check for text relocations in constructed DSOs.
-
- * Makefile.am [MUDFLAP] (AM_CFLAGS): Add -fmudflap. Link all apps
- with -lmudflap.
-
- * ldscript.y: Add as_needed handling.
- * ldlex.l: Recognize AS_NEEDED token.
- * ld.h (struct filename_list): Add as_needed flag.
-
-2005-02-04 Ulrich Drepper <drepper@redhat.com>
-
- * elflint.c (check_symtab): Correctly determine size of GOT section.
-
-2005-01-19 Ulrich Drepper <drepper@redhat.com>
-
- * ld.c: Remove unnecessary more_help function. Print bug report
- address using argp.
- * strip.c: Likewise.
- * size.c: Likewise.
- * nm.c: Likewise.
- * readelf.c: Likewise.
- * elflint.c: Likewise.
-
- * elflint.c (main): Don't check for parameter problems here.
- (parse_opt): Do it here, where we get informed about some of them
- anyway.
-
- * readelf.c (main): Don't check for parameter problems here.
- (parse_opt): Do it here, where we get informed about some of them
- anyway.
-
-2005-01-11 Ulrich Drepper <drepper@redhat.com>
-
- * strip.c: Update copyright year.
- * readelf.c: Likewise.
- * size.c: Likewise.
- * nm.c: Likewise.
- * ld.c: Likewise.
- * elflint.c: Likewise.
-
- * elflint.c (check_symtab): Don't warn about wrong size for
- _DYNAMIC and __GLOBAL_OFFSET_TABLE__ for --gnu-ld.
-
-2004-10-05 Ulrich Drepper <drepper@redhat.com>
-
- * readelf.c (print_phdr): In section mapping, also indicate
- sections in read-only segments.
-
-2004-09-25 Ulrich Drepper <drepper@redhat.com>
-
- * readelf.c: Make compile with gcc 4.0.
- * strip.c: Likewise.
-
-2004-08-16 Ulrich Drepper <drepper@redhat.com>
-
- * strip.c (handle_elf): Rewrite dynamic memory handling to use of
- allocate to work around gcc 3.4 bug.
-
-2004-01-25 Ulrich Drepper <drepper@redhat.com>
-
- * ldlex.l (invalid_char): Better error message.
-
-2004-01-23 Ulrich Drepper <drepper@redhat.com>
-
- * readelf.c: Print SHT_GNU_LIBLIST sections.
-
- * none_ld.c: New file.
-
-2004-01-21 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: Enable building of machine specific linker.
-
-2004-01-20 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: Support building with mudflap.
-
- * i386_ld.c: Fix warnings gcc 3.4 spits out.
- * ldgeneric.c: Likewise.
- * ldscript.y: Likewise.
- * readelf.c: Likewise.
- * strip.c: Likewise.
-
- * readelf.c (print_debug_line_section): Determine address size
- correctly.
-
-2004-01-19 Ulrich Drepper <drepper@redhat.com>
-
- * readelf.c (print_phdr): Show which sections are covered by the
- PT_GNU_RELRO entry.
-
- * elflint.c (check_program_header): Check PT_GNU_RELRO entry.
-
- * readelf.c (print_debug_macinfo_section): Implement.
-
-2004-01-18 Ulrich Drepper <drepper@redhat.com>
-
- * readelf.c (print_debug_line_section): Implement.
-
-2004-01-17 Ulrich Drepper <drepper@redhat.com>
-
- * src/elflint.c: Use PACKAGE_NAME instead of PACKAGE.
- * src/ld.c: Likewise.
- * src/nm.c: Likewise.
- * src/readelf.c: Likewise.
- * src/size.c: Likewise.
- * src/strip.c: Likewise.
-
- * strip.c: Add a few more unlikely. Reduce scope of some variables.
-
- * Makefile.am: Support building with mudflap.
-
-2004-01-16 Ulrich Drepper <drepper@redhat.com>
-
- * readelf.c (print_debug_info_section): Free dies memory.
-
- * readelf.c: Print .debug_info section content.
-
-2004-01-13 Ulrich Drepper <drepper@redhat.com>
-
- * readelf.c (print_shdr): Add support for SHF_ORDERED and SHF_EXCLUDE.
-
-2004-01-12 Ulrich Drepper <drepper@redhat.com>
-
- * readelf.c (print_debug_aranges): Implement using libdw.
-
-2004-01-11 Ulrich Drepper <drepper@redhat.com>
-
- * nm.c: Adjust for Dwarf_Files type and dwarf_lineno interface change.
-
- * readelf.c: Use libdw instead of libdwarf. Not all of the old
- behavior is available yet.
- * Makefile.am: Link readelf with libdw. Remove libdwarf include path.
-
-2004-01-09 Ulrich Drepper <drepper@redhat.com>
-
- * nm.c (get_local_names): Adjust call to dwarf_nextcu.
-
- * nm.c: Implement getting information about local variables.
-
-2004-01-07 Ulrich Drepper <drepper@redhat.com>
-
- * nm.c: Read also debug information for local symbols.
-
-2004-01-05 Ulrich Drepper <drepper@redhat.com>
-
- * nm.c: Shuffle dwarf handling code around so the maximum column
- width can be computed ahead of printing. Avoid collection symbols
- which are not printed anyway.
-
- * nm.c: Rewrite dwarf handling to use libdw.
- * Makefile.am (AM_CFLAGS): Add -std parameter.
- (INCLUDES): Find header in libdw subdir.
- (nm_LDADD): Replace libdwarf with libdw.
-
- * elflint.c: Update copyright year.
- * readelf.c: Likewise.
- * size.c: Likewise.
- * strip.c: Likewise.
- * nm.c: Likewise.
-
-2003-12-31 Ulrich Drepper <drepper@redhat.com>
-
- * strip.c (process_file): Close file before returning.
-
-2003-11-19 Ulrich Drepper <drepper@redhat.com>
-
- * readelf.c (handle_dynamic): Make column for tag name wider.
-
-2003-09-29 Ulrich Drepper <drepper@redhat.com>
-
- * readelf.c (handle_dynamic): Always terminate tag name with a space.
-
-2003-09-25 Ulrich Drepper <drepper@redhat.com>
-
- * strip.c (process_file): Don't mmap the input file, we modify the
- data structures and don't want the change end up on disk.
-
-2003-09-23 Jakub Jelinek <jakub@redhat.com>
-
- * unaligned.h (union u_2ubyte_unaligned,
- union u_4ubyte_unaligned, union u_8ubyte_unaligned): Add
- packed attribute.
- (add_2ubyte_unaligned, add_4ubyte_unaligned,
- add_8ubyte_unaligned): Avoid nesting bswap_NN macros.
- Read/store value through _ptr->u instead of *_ptr.
-
-2003-09-22 Ulrich Drepper <drepper@redhat.com>
-
- * size.c (show_sysv): Change type of maxlen to int.
-
- * strip.c (handle_elf): Handle the 64-bit archs which is 64-bit
- buckets.
-
- * i386_ld.c: Many many fixes and extensions.
- * ld.c: Likewise.
- * ldgeneric.c: Likewise.
-
-2003-08-16 Ulrich Drepper <drepper@redhat.com>
-
- * ldgeneric.c (check_definition): Don't add symbol on dso_list if
- the reference is from another DSO.
-
-2003-08-15 Ulrich Drepper <drepper@redhat.com>
-
- * ldgeneric.c (find_entry_point): It is no fatal error if no entry
- point is found when creating a DSO.
-
-2003-08-14 Ulrich Drepper <drepper@redhat.com>
-
- * ld.c (main): Always call FLAG_UNRESOLVED.
- * ldgeneric.c (ld_generic_flag_unresolved): Only complain about
- undefined symbols if not creating DSO or ld_state.nodefs is not set.
-
-2003-08-13 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.in: Depend on libebl.a, not libebl.so.
-
- * ld.c (main): Mark stream for linker script as locked by caller.
- (read_version_script): Likewise.
- * ldlex.c: Define fread and fwrite to _unlocked variant.
-
- * i386_ld.c (elf_i386_finalize_plt): Replace #ifdefs with uses of
- target_bswap_32.
- * unaligned.h: Define target_bswap_16, target_bswap_32, and
- target_bswap_64.
- (store_2ubyte_unaligned, store_4ubyte_unaligned,
- store_8ubyte_unaligned): Define using new macros.
-
-2003-08-12 Ulrich Drepper <drepper@redhat.com>
-
- * i386_ld.c (elf_i386_finalize_plt): Use packed structs to access
- possibly unaligned memory. Support use of big endian machines.
-
-2003-08-11 Ulrich Drepper <drepper@redhat.com>
-
- * Moved to CVS archive.
diff --git a/src/Makefile.am b/src/Makefile.am
deleted file mode 100644
index f72bb45..0000000
--- a/src/Makefile.am
+++ /dev/null
@@ -1,199 +0,0 @@
-## Process this file with automake to create Makefile.in
-##
-## Copyright (C) 1996-2002, 2003, 2004, 2005, 2006, 2007 Red Hat, Inc.
-## This file is part of Red Hat elfutils.
-##
-## Red Hat elfutils is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by the
-## Free Software Foundation; version 2 of the License.
-##
-## Red Hat elfutils 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
-## General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License along
-## with Red Hat elfutils; if not, write to the Free Software Foundation,
-## Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-##
-## Red Hat elfutils is an included package of the Open Invention Network.
-## An included package of the Open Invention Network is a package for which
-## Open Invention Network licensees cross-license their patents. No patent
-## license is granted, either expressly or impliedly, by designation as an
-## included package. Should you wish to participate in the Open Invention
-## Network licensing program, please visit www.openinventionnetwork.com
-## <http://www.openinventionnetwork.com>.
-##
-DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H $(YYDEBUG) -DDEBUGPRED=@DEBUGPRED@ \
- -DSRCDIR=\"$(shell cd $(srcdir);pwd)\" -DOBJDIR=\"$(shell pwd)\"
-if MUDFLAP
-AM_CFLAGS = -fmudflap
-else
-AM_CFLAGS =
-endif
-AM_CFLAGS += -Wall -Wshadow -std=gnu99 $(native_ld_cflags) \
- $(if $($(*F)_no_Werror),,-Werror) \
- $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \
- $(if $($(*F)_no_Wformat),,-Wformat=2) $(CFLAGS_$(*F))
-
-INCLUDES = -I$(srcdir) -I$(srcdir)/../libelf -I$(srcdir)/../libebl \
- -I$(srcdir)/../libdw -I$(srcdir)/../libdwfl \
- -I$(srcdir)/../libasm -I$(srcdir)/../lib -I..
-
-AM_LDFLAGS = -Wl,-rpath-link,../libelf:../libdw
-
-YACC = @YACC@ -d
-AM_YFLAGS = -pld
-AM_LFLAGS = -Pld -olex.yy.c
-## Uncomment to enable debugging of linker script parser
-##YYDEBUG = -DYYDEBUG=1
-
-native_ld = @native_ld@
-base_cpu = @base_cpu@
-
-bin_PROGRAMS = readelf nm size strip ld elflint findtextrel addr2line \
- elfcmp objdump ranlib strings ar unstrip
-
-
-ld_dsos = libld_elf_i386_pic.a
-if NATIVE_LD
-noinst_LIBRARIES = libld_elf.a libar.a
-native_ld_cflags = -DBASE_ELF_NAME=elf_$(base_cpu)
-else
-noinst_LIBRARIES = libld_elf.a libar.a $(ld_dsos)
-noinst_PROGRAMS = $(ld_dsos:_pic.a=.so)
-endif
-if NEVER
-# We never build this library but we need to get the dependency files
-# of all the linker backends that might be used in a non-generic linker.
-noinst_LIBRARIES += libdummy.a
-libdummy_a_SOURCES = i386_ld.c
-endif
-
-textrel_check = if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi
-
-
-ld_SOURCES = ld.c ldgeneric.c ldlex.l ldscript.y symbolhash.c sectionhash.c \
- versionhash.c
-
-libar_a_SOURCES = arlib.c arlib2.c
-
-noinst_HEADERS = ld.h symbolhash.h sectionhash.h versionhash.h \
- ldscript.h xelf.h unaligned.h
-
-EXTRA_DIST = elf32-i386.script libld_elf_i386.map $(ld_modules) arlib.h \
- debugpred.h
-ld_modules = i386_ld.c
-
-bin_SCRIPTS = make-debug-archive
-EXTRA_DIST += make-debug-archive.in
-CLEANFILES = make-debug-archive
-
-if MUDFLAP
-libmudflap = -lmudflap
-endif
-
-if BUILD_STATIC
-libasm = ../libasm/libasm.a
-libdw = ../libdw/libdw.a $(libelf) $(libebl) -ldl
-libelf = ../libelf/libelf.a
-else
-libasm = ../libasm/libasm.so
-libdw = ../libdw/libdw.so
-libelf = ../libelf/libelf.so
-endif
-libebl = ../libebl/libebl.a
-libeu = ../lib/libeu.a
-
-nm_no_Wformat = yes
-size_no_Wformat = yes
-strings_no_Wformat = yes
-# XXX While the file is not finished, don't warn about this
-ldgeneric_no_Wunused = yes
-
-readelf_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl
-nm_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl
-size_LDADD = $(libelf) $(libeu) $(libmudflap)
-strip_LDADD = $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl
-ld_LDADD = $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl
-if NATIVE_LD
-# -ldl is always needed for libebl.
-ld_LDADD += libld_elf.a
-endif
-ld_LDFLAGS = -rdynamic
-elflint_LDADD = $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl
-findtextrel_LDADD = $(libdw) $(libelf) $(libmudflap)
-addr2line_LDADD = $(libdw) $(libmudflap)
-elfcmp_LDADD = $(libebl) $(libelf) $(libmudflap) -ldl
-objdump_LDADD = $(libasm) $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl
-ranlib_LDADD = libar.a $(libelf) $(libeu) $(libmudflap)
-strings_LDADD = $(libelf) $(libeu) $(libmudflap)
-ar_LDADD = libar.a $(libelf) $(libeu) $(libmudflap)
-CFLAGS_ar = -DAR=\"$(shell echo ar|sed '$(transform)')\"
-unstrip_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(libmudflap) -ldl
-
-ldlex.o: ldscript.c
-ldlex_no_Werror = yes
-ldscript.h: ldscript.c
-
-if NATIVE_LD
-# Machine-specific linker code.
-libld_elf_a_SOURCES := $(base_cpu)_ld.c
-else
-libld_elf_i386_pic_a_SOURCES =
-am_libld_elf_i386_pic_a_OBJECTS = i386_ld.os
-
-libld_elf_i386_so_SOURCES =
-libld_elf_i386.so: libld_elf_i386_pic.a libld_elf_i386.map
- $(LINK) -shared -o $@ -Wl,--whole-archive,$<,--no-whole-archive \
- $(libelf) $(libeu) \
- -Wl,--version-script,$(srcdir)/libld_elf_i386.map
- $(textrel_check)
-endif
-
-
-%.os: %.c %.o
- if $(filter-out -fmudflap,$(COMPILE)) -c -o $@ -fpic -DPIC -DSHARED \
- -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
- `test -f '$<' || echo '$(srcdir)/'`$<; \
- then cat "$(DEPDIR)/$*.Tpo" >> "$(DEPDIR)/$*.Po"; \
- rm -f "$(DEPDIR)/$*.Tpo"; \
- else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
- fi
-
-# Special rule to make it possible to define libld_elf_a_SOURCES as we do.
-# Otherwise make would complain.
-.deps/none_ld.Po: none_ld.os
- -:
-
-
-installcheck-binPROGRAMS: $(bin_PROGRAMS)
- bad=0; pid=$$$$; list="$(bin_PROGRAMS)"; for p in $$list; do \
- case ' $(AM_INSTALLCHECK_STD_OPTIONS_EXEMPT) ' in \
- *" $$p "* | *" $(srcdir)/$$p "*) continue;; \
- esac; \
- f=`echo "$$p" | \
- sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
- for opt in --help --version; do \
- if LD_LIBRARY_PATH=$(DESTDIR)$(libdir) \
- $(DESTDIR)$(bindir)/$$f $$opt > c$${pid}_.out 2> c$${pid}_.err \
- && test -n "`cat c$${pid}_.out`" \
- && test -z "`cat c$${pid}_.err`"; then :; \
- else echo "$$f does not support $$opt" 1>&2; bad=1; fi; \
- done; \
- done; rm -f c$${pid}_.???; exit $$bad
-
-CLEANFILES += none_ld.os $(ld_modules:.c=.os) *.gcno *.gcda *.gconv
-
-MAINTAINERCLEANFILES = ldlex.c ldscript.c ldscript.h
-
-
-make-debug-archive: $(srcdir)/make-debug-archive.in
- UNSTRIP=$(bindir)/`echo unstrip | sed '$(transform)'`; \
- AR=$(bindir)/`echo ar | sed '$(transform)'`; \
- sed -e "s,@UNSTRIP@,$$UNSTRIP,g" -e "s,@AR@,$$AR,g" \
- -e "s%[@]PACKAGE_NAME[@]%$(PACKAGE_NAME)%g" \
- -e "s%[@]PACKAGE_VERSION[@]%$(PACKAGE_VERSION)%g" \
- $(srcdir)/make-debug-archive.in > $@.new
- chmod +x $@.new
- mv -f $@.new $@
diff --git a/src/Makefile.in b/src/Makefile.in
deleted file mode 100644
index 7822b10..0000000
--- a/src/Makefile.in
+++ /dev/null
@@ -1,809 +0,0 @@
-# Makefile.in generated by automake 1.10.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-
-
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-bin_PROGRAMS = readelf$(EXEEXT) nm$(EXEEXT) size$(EXEEXT) \
- strip$(EXEEXT) ld$(EXEEXT) elflint$(EXEEXT) \
- findtextrel$(EXEEXT) addr2line$(EXEEXT) elfcmp$(EXEEXT) \
- objdump$(EXEEXT) ranlib$(EXEEXT) strings$(EXEEXT) ar$(EXEEXT) \
- unstrip$(EXEEXT)
-@NATIVE_LD_FALSE@noinst_PROGRAMS = $(am__EXEEXT_1)
-# We never build this library but we need to get the dependency files
-# of all the linker backends that might be used in a non-generic linker.
-@NEVER_TRUE@am__append_1 = libdummy.a
-# -ldl is always needed for libebl.
-@NATIVE_LD_TRUE@am__append_2 = libld_elf.a
-@NATIVE_LD_TRUE@am_libld_elf_i386_pic_a_OBJECTS =
-subdir = src
-DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
- $(srcdir)/Makefile.in ChangeLog ldlex.c ldscript.c ylwrap
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-LIBRARIES = $(noinst_LIBRARIES)
-AR = ar
-ARFLAGS = cru
-libar_a_AR = $(AR) $(ARFLAGS)
-libar_a_LIBADD =
-am_libar_a_OBJECTS = arlib.$(OBJEXT) arlib2.$(OBJEXT)
-libar_a_OBJECTS = $(am_libar_a_OBJECTS)
-libdummy_a_AR = $(AR) $(ARFLAGS)
-libdummy_a_LIBADD =
-am__libdummy_a_SOURCES_DIST = i386_ld.c
-@NEVER_TRUE@am_libdummy_a_OBJECTS = i386_ld.$(OBJEXT)
-libdummy_a_OBJECTS = $(am_libdummy_a_OBJECTS)
-libld_elf_a_AR = $(AR) $(ARFLAGS)
-libld_elf_a_LIBADD =
-am__libld_elf_a_SOURCES_DIST = $(base_cpu)_ld.c
-@NATIVE_LD_TRUE@am_libld_elf_a_OBJECTS = $(base_cpu)_ld.$(OBJEXT)
-libld_elf_a_OBJECTS = $(am_libld_elf_a_OBJECTS)
-libld_elf_i386_pic_a_AR = $(AR) $(ARFLAGS)
-libld_elf_i386_pic_a_LIBADD =
-libld_elf_i386_pic_a_OBJECTS = $(am_libld_elf_i386_pic_a_OBJECTS)
-am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)"
-binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
-am__EXEEXT_1 = libld_elf_i386.so$(EXEEXT)
-PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
-addr2line_SOURCES = addr2line.c
-addr2line_OBJECTS = addr2line.$(OBJEXT)
-@BUILD_STATIC_FALSE@am__DEPENDENCIES_1 = ../libdw/libdw.so
-@BUILD_STATIC_TRUE@am__DEPENDENCIES_1 = ../libdw/libdw.a $(libelf) \
-@BUILD_STATIC_TRUE@ $(libebl)
-am__DEPENDENCIES_2 =
-addr2line_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
-ar_SOURCES = ar.c
-ar_OBJECTS = ar.$(OBJEXT)
-ar_DEPENDENCIES = libar.a $(libelf) $(libeu) $(am__DEPENDENCIES_2)
-elfcmp_SOURCES = elfcmp.c
-elfcmp_OBJECTS = elfcmp.$(OBJEXT)
-elfcmp_DEPENDENCIES = $(libebl) $(libelf) $(am__DEPENDENCIES_2)
-elflint_SOURCES = elflint.c
-elflint_OBJECTS = elflint.$(OBJEXT)
-elflint_DEPENDENCIES = $(libebl) $(libelf) $(libeu) \
- $(am__DEPENDENCIES_2)
-findtextrel_SOURCES = findtextrel.c
-findtextrel_OBJECTS = findtextrel.$(OBJEXT)
-findtextrel_DEPENDENCIES = $(am__DEPENDENCIES_1) $(libelf) \
- $(am__DEPENDENCIES_2)
-am_ld_OBJECTS = ld.$(OBJEXT) ldgeneric.$(OBJEXT) ldlex.$(OBJEXT) \
- ldscript.$(OBJEXT) symbolhash.$(OBJEXT) sectionhash.$(OBJEXT) \
- versionhash.$(OBJEXT)
-ld_OBJECTS = $(am_ld_OBJECTS)
-ld_DEPENDENCIES = $(libebl) $(libelf) $(libeu) $(am__DEPENDENCIES_2) \
- $(am__append_2)
-ld_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(ld_LDFLAGS) $(LDFLAGS) -o \
- $@
-am_libld_elf_i386_so_OBJECTS =
-libld_elf_i386_so_OBJECTS = $(am_libld_elf_i386_so_OBJECTS)
-libld_elf_i386_so_LDADD = $(LDADD)
-nm_SOURCES = nm.c
-nm_OBJECTS = nm.$(OBJEXT)
-nm_DEPENDENCIES = $(am__DEPENDENCIES_1) $(libebl) $(libelf) $(libeu) \
- $(am__DEPENDENCIES_2)
-objdump_SOURCES = objdump.c
-objdump_OBJECTS = objdump.$(OBJEXT)
-objdump_DEPENDENCIES = $(libasm) $(libebl) $(libelf) $(libeu) \
- $(am__DEPENDENCIES_2)
-ranlib_SOURCES = ranlib.c
-ranlib_OBJECTS = ranlib.$(OBJEXT)
-ranlib_DEPENDENCIES = libar.a $(libelf) $(libeu) $(am__DEPENDENCIES_2)
-readelf_SOURCES = readelf.c
-readelf_OBJECTS = readelf.$(OBJEXT)
-readelf_DEPENDENCIES = $(am__DEPENDENCIES_1) $(libebl) $(libelf) \
- $(libeu) $(am__DEPENDENCIES_2)
-size_SOURCES = size.c
-size_OBJECTS = size.$(OBJEXT)
-size_DEPENDENCIES = $(libelf) $(libeu) $(am__DEPENDENCIES_2)
-strings_SOURCES = strings.c
-strings_OBJECTS = strings.$(OBJEXT)
-strings_DEPENDENCIES = $(libelf) $(libeu) $(am__DEPENDENCIES_2)
-strip_SOURCES = strip.c
-strip_OBJECTS = strip.$(OBJEXT)
-strip_DEPENDENCIES = $(libebl) $(libelf) $(libeu) \
- $(am__DEPENDENCIES_2)
-unstrip_SOURCES = unstrip.c
-unstrip_OBJECTS = unstrip.$(OBJEXT)
-unstrip_DEPENDENCIES = $(libebl) $(libelf) $(am__DEPENDENCIES_1) \
- $(libeu) $(am__DEPENDENCIES_2)
-binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
-SCRIPTS = $(bin_SCRIPTS)
-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-@MAINTAINER_MODE_FALSE@am__skiplex = test -f $@ ||
-LEXCOMPILE = $(LEX) $(LFLAGS) $(AM_LFLAGS)
-YLWRAP = $(top_srcdir)/config/ylwrap
-@MAINTAINER_MODE_FALSE@am__skipyacc = test -f $@ ||
-YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS)
-SOURCES = $(libar_a_SOURCES) $(libdummy_a_SOURCES) \
- $(libld_elf_a_SOURCES) $(libld_elf_i386_pic_a_SOURCES) \
- addr2line.c ar.c elfcmp.c elflint.c findtextrel.c \
- $(ld_SOURCES) $(libld_elf_i386_so_SOURCES) nm.c objdump.c \
- ranlib.c readelf.c size.c strings.c strip.c unstrip.c
-DIST_SOURCES = $(libar_a_SOURCES) $(am__libdummy_a_SOURCES_DIST) \
- $(am__libld_elf_a_SOURCES_DIST) \
- $(libld_elf_i386_pic_a_SOURCES) addr2line.c ar.c elfcmp.c \
- elflint.c findtextrel.c $(ld_SOURCES) \
- $(libld_elf_i386_so_SOURCES) nm.c objdump.c ranlib.c readelf.c \
- size.c strings.c strip.c unstrip.c
-HEADERS = $(noinst_HEADERS)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEBUGPRED = @DEBUGPRED@
-DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H $(YYDEBUG) -DDEBUGPRED=@DEBUGPRED@ \
- -DSRCDIR=\"$(shell cd $(srcdir);pwd)\" -DOBJDIR=\"$(shell pwd)\"
-
-DEPDIR = @DEPDIR@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EXEEXT = @EXEEXT@
-GMSGFMT = @GMSGFMT@
-GMSGFMT_015 = @GMSGFMT_015@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LDFLAGS = @LDFLAGS@
-LEX = @LEX@
-LEXLIB = @LEXLIB@
-LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
-LIBEBL_SUBDIR = @LIBEBL_SUBDIR@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LOCALEDIR = @LOCALEDIR@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MKDIR_P = @MKDIR_P@
-MODVERSION = @MODVERSION@
-MSGFMT = @MSGFMT@
-MSGFMT_015 = @MSGFMT_015@
-MSGMERGE = @MSGMERGE@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-RANLIB = @RANLIB@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-USE_NLS = @USE_NLS@
-VERSION = @VERSION@
-XGETTEXT = @XGETTEXT@
-XGETTEXT_015 = @XGETTEXT_015@
-YACC = @YACC@ -d
-YFLAGS = @YFLAGS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-base_cpu = @base_cpu@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-eu_version = @eu_version@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-@MUDFLAP_FALSE@AM_CFLAGS = -Wall -Wshadow -std=gnu99 \
-@MUDFLAP_FALSE@ $(native_ld_cflags) $(if \
-@MUDFLAP_FALSE@ $($(*F)_no_Werror),,-Werror) $(if \
-@MUDFLAP_FALSE@ $($(*F)_no_Wunused),,-Wunused -Wextra) $(if \
-@MUDFLAP_FALSE@ $($(*F)_no_Wformat),,-Wformat=2) \
-@MUDFLAP_FALSE@ $(CFLAGS_$(*F))
-@MUDFLAP_TRUE@AM_CFLAGS = -fmudflap -Wall -Wshadow -std=gnu99 \
-@MUDFLAP_TRUE@ $(native_ld_cflags) $(if \
-@MUDFLAP_TRUE@ $($(*F)_no_Werror),,-Werror) $(if \
-@MUDFLAP_TRUE@ $($(*F)_no_Wunused),,-Wunused -Wextra) $(if \
-@MUDFLAP_TRUE@ $($(*F)_no_Wformat),,-Wformat=2) $(CFLAGS_$(*F))
-INCLUDES = -I$(srcdir) -I$(srcdir)/../libelf -I$(srcdir)/../libebl \
- -I$(srcdir)/../libdw -I$(srcdir)/../libdwfl \
- -I$(srcdir)/../libasm -I$(srcdir)/../lib -I..
-
-AM_LDFLAGS = -Wl,-rpath-link,../libelf:../libdw
-AM_YFLAGS = -pld
-AM_LFLAGS = -Pld -olex.yy.c
-native_ld = @native_ld@
-ld_dsos = libld_elf_i386_pic.a
-@NATIVE_LD_FALSE@noinst_LIBRARIES = libld_elf.a libar.a $(ld_dsos) \
-@NATIVE_LD_FALSE@ $(am__append_1)
-@NATIVE_LD_TRUE@noinst_LIBRARIES = libld_elf.a libar.a $(am__append_1)
-@NATIVE_LD_TRUE@native_ld_cflags = -DBASE_ELF_NAME=elf_$(base_cpu)
-@NEVER_TRUE@libdummy_a_SOURCES = i386_ld.c
-textrel_check = if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi
-ld_SOURCES = ld.c ldgeneric.c ldlex.l ldscript.y symbolhash.c sectionhash.c \
- versionhash.c
-
-libar_a_SOURCES = arlib.c arlib2.c
-noinst_HEADERS = ld.h symbolhash.h sectionhash.h versionhash.h \
- ldscript.h xelf.h unaligned.h
-
-EXTRA_DIST = elf32-i386.script libld_elf_i386.map $(ld_modules) \
- arlib.h debugpred.h make-debug-archive.in
-ld_modules = i386_ld.c
-bin_SCRIPTS = make-debug-archive
-CLEANFILES = make-debug-archive none_ld.os $(ld_modules:.c=.os) *.gcno \
- *.gcda *.gconv
-@MUDFLAP_TRUE@libmudflap = -lmudflap
-@BUILD_STATIC_FALSE@libasm = ../libasm/libasm.so
-@BUILD_STATIC_TRUE@libasm = ../libasm/libasm.a
-@BUILD_STATIC_FALSE@libdw = ../libdw/libdw.so
-@BUILD_STATIC_TRUE@libdw = ../libdw/libdw.a $(libelf) $(libebl) -ldl
-@BUILD_STATIC_FALSE@libelf = ../libelf/libelf.so
-@BUILD_STATIC_TRUE@libelf = ../libelf/libelf.a
-libebl = ../libebl/libebl.a
-libeu = ../lib/libeu.a
-nm_no_Wformat = yes
-size_no_Wformat = yes
-strings_no_Wformat = yes
-# XXX While the file is not finished, don't warn about this
-ldgeneric_no_Wunused = yes
-readelf_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl
-nm_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl
-size_LDADD = $(libelf) $(libeu) $(libmudflap)
-strip_LDADD = $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl
-ld_LDADD = $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl \
- $(am__append_2)
-ld_LDFLAGS = -rdynamic
-elflint_LDADD = $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl
-findtextrel_LDADD = $(libdw) $(libelf) $(libmudflap)
-addr2line_LDADD = $(libdw) $(libmudflap)
-elfcmp_LDADD = $(libebl) $(libelf) $(libmudflap) -ldl
-objdump_LDADD = $(libasm) $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl
-ranlib_LDADD = libar.a $(libelf) $(libeu) $(libmudflap)
-strings_LDADD = $(libelf) $(libeu) $(libmudflap)
-ar_LDADD = libar.a $(libelf) $(libeu) $(libmudflap)
-CFLAGS_ar = -DAR=\"$(shell echo ar|sed '$(transform)')\"
-unstrip_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(libmudflap) -ldl
-ldlex_no_Werror = yes
-
-# Machine-specific linker code.
-@NATIVE_LD_TRUE@libld_elf_a_SOURCES := $(base_cpu)_ld.c
-@NATIVE_LD_FALSE@libld_elf_i386_pic_a_SOURCES =
-@NATIVE_LD_FALSE@am_libld_elf_i386_pic_a_OBJECTS = i386_ld.os
-@NATIVE_LD_FALSE@libld_elf_i386_so_SOURCES =
-MAINTAINERCLEANFILES = ldlex.c ldscript.c ldscript.h
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .l .o .obj .y
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
- && exit 0; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits src/Makefile'; \
- cd $(top_srcdir) && \
- $(AUTOMAKE) --gnits src/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-clean-noinstLIBRARIES:
- -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
-libar.a: $(libar_a_OBJECTS) $(libar_a_DEPENDENCIES)
- -rm -f libar.a
- $(libar_a_AR) libar.a $(libar_a_OBJECTS) $(libar_a_LIBADD)
- $(RANLIB) libar.a
-libdummy.a: $(libdummy_a_OBJECTS) $(libdummy_a_DEPENDENCIES)
- -rm -f libdummy.a
- $(libdummy_a_AR) libdummy.a $(libdummy_a_OBJECTS) $(libdummy_a_LIBADD)
- $(RANLIB) libdummy.a
-libld_elf.a: $(libld_elf_a_OBJECTS) $(libld_elf_a_DEPENDENCIES)
- -rm -f libld_elf.a
- $(libld_elf_a_AR) libld_elf.a $(libld_elf_a_OBJECTS) $(libld_elf_a_LIBADD)
- $(RANLIB) libld_elf.a
-libld_elf_i386_pic.a: $(libld_elf_i386_pic_a_OBJECTS) $(libld_elf_i386_pic_a_DEPENDENCIES)
- -rm -f libld_elf_i386_pic.a
- $(libld_elf_i386_pic_a_AR) libld_elf_i386_pic.a $(libld_elf_i386_pic_a_OBJECTS) $(libld_elf_i386_pic_a_LIBADD)
- $(RANLIB) libld_elf_i386_pic.a
-install-binPROGRAMS: $(bin_PROGRAMS)
- @$(NORMAL_INSTALL)
- test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
- @list='$(bin_PROGRAMS)'; for p in $$list; do \
- p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
- if test -f $$p \
- ; then \
- f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
- echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
- $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
- else :; fi; \
- done
-
-uninstall-binPROGRAMS:
- @$(NORMAL_UNINSTALL)
- @list='$(bin_PROGRAMS)'; for p in $$list; do \
- f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
- echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
- rm -f "$(DESTDIR)$(bindir)/$$f"; \
- done
-
-clean-binPROGRAMS:
- -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
-
-clean-noinstPROGRAMS:
- -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
-addr2line$(EXEEXT): $(addr2line_OBJECTS) $(addr2line_DEPENDENCIES)
- @rm -f addr2line$(EXEEXT)
- $(LINK) $(addr2line_OBJECTS) $(addr2line_LDADD) $(LIBS)
-ar$(EXEEXT): $(ar_OBJECTS) $(ar_DEPENDENCIES)
- @rm -f ar$(EXEEXT)
- $(LINK) $(ar_OBJECTS) $(ar_LDADD) $(LIBS)
-elfcmp$(EXEEXT): $(elfcmp_OBJECTS) $(elfcmp_DEPENDENCIES)
- @rm -f elfcmp$(EXEEXT)
- $(LINK) $(elfcmp_OBJECTS) $(elfcmp_LDADD) $(LIBS)
-elflint$(EXEEXT): $(elflint_OBJECTS) $(elflint_DEPENDENCIES)
- @rm -f elflint$(EXEEXT)
- $(LINK) $(elflint_OBJECTS) $(elflint_LDADD) $(LIBS)
-findtextrel$(EXEEXT): $(findtextrel_OBJECTS) $(findtextrel_DEPENDENCIES)
- @rm -f findtextrel$(EXEEXT)
- $(LINK) $(findtextrel_OBJECTS) $(findtextrel_LDADD) $(LIBS)
-ld$(EXEEXT): $(ld_OBJECTS) $(ld_DEPENDENCIES)
- @rm -f ld$(EXEEXT)
- $(ld_LINK) $(ld_OBJECTS) $(ld_LDADD) $(LIBS)
-@NATIVE_LD_TRUE@libld_elf_i386.so$(EXEEXT): $(libld_elf_i386_so_OBJECTS) $(libld_elf_i386_so_DEPENDENCIES)
-@NATIVE_LD_TRUE@ @rm -f libld_elf_i386.so$(EXEEXT)
-@NATIVE_LD_TRUE@ $(LINK) $(libld_elf_i386_so_OBJECTS) $(libld_elf_i386_so_LDADD) $(LIBS)
-nm$(EXEEXT): $(nm_OBJECTS) $(nm_DEPENDENCIES)
- @rm -f nm$(EXEEXT)
- $(LINK) $(nm_OBJECTS) $(nm_LDADD) $(LIBS)
-objdump$(EXEEXT): $(objdump_OBJECTS) $(objdump_DEPENDENCIES)
- @rm -f objdump$(EXEEXT)
- $(LINK) $(objdump_OBJECTS) $(objdump_LDADD) $(LIBS)
-ranlib$(EXEEXT): $(ranlib_OBJECTS) $(ranlib_DEPENDENCIES)
- @rm -f ranlib$(EXEEXT)
- $(LINK) $(ranlib_OBJECTS) $(ranlib_LDADD) $(LIBS)
-readelf$(EXEEXT): $(readelf_OBJECTS) $(readelf_DEPENDENCIES)
- @rm -f readelf$(EXEEXT)
- $(LINK) $(readelf_OBJECTS) $(readelf_LDADD) $(LIBS)
-size$(EXEEXT): $(size_OBJECTS) $(size_DEPENDENCIES)
- @rm -f size$(EXEEXT)
- $(LINK) $(size_OBJECTS) $(size_LDADD) $(LIBS)
-strings$(EXEEXT): $(strings_OBJECTS) $(strings_DEPENDENCIES)
- @rm -f strings$(EXEEXT)
- $(LINK) $(strings_OBJECTS) $(strings_LDADD) $(LIBS)
-strip$(EXEEXT): $(strip_OBJECTS) $(strip_DEPENDENCIES)
- @rm -f strip$(EXEEXT)
- $(LINK) $(strip_OBJECTS) $(strip_LDADD) $(LIBS)
-unstrip$(EXEEXT): $(unstrip_OBJECTS) $(unstrip_DEPENDENCIES)
- @rm -f unstrip$(EXEEXT)
- $(LINK) $(unstrip_OBJECTS) $(unstrip_LDADD) $(LIBS)
-install-binSCRIPTS: $(bin_SCRIPTS)
- @$(NORMAL_INSTALL)
- test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
- @list='$(bin_SCRIPTS)'; for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- if test -f $$d$$p; then \
- f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
- echo " $(binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \
- $(binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \
- else :; fi; \
- done
-
-uninstall-binSCRIPTS:
- @$(NORMAL_UNINSTALL)
- @list='$(bin_SCRIPTS)'; for p in $$list; do \
- f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
- echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
- rm -f "$(DESTDIR)$(bindir)/$$f"; \
- done
-
-installcheck-binSCRIPTS: $(bin_SCRIPTS)
- bad=0; pid=$$$$; list="$(bin_SCRIPTS)"; for p in $$list; do \
- case ' $(AM_INSTALLCHECK_STD_OPTIONS_EXEMPT) ' in \
- *" $$p "* | *" $(srcdir)/$$p "*) continue;; \
- esac; \
- f=`echo "$$p" | sed 's,^.*/,,;$(transform)'`; \
- for opt in --help --version; do \
- if "$(DESTDIR)$(bindir)/$$f" $$opt >c$${pid}_.out \
- 2>c$${pid}_.err </dev/null \
- && test -n "`cat c$${pid}_.out`" \
- && test -z "`cat c$${pid}_.err`"; then :; \
- else echo "$$f does not support $$opt" 1>&2; bad=1; fi; \
- done; \
- done; rm -f c$${pid}_.???; exit $$bad
-
-mostlyclean-compile:
- -rm -f *.$(OBJEXT)
-
-distclean-compile:
- -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(base_cpu)_ld.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addr2line.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ar.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arlib.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arlib2.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elfcmp.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elflint.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/findtextrel.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386_ld.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ld.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ldgeneric.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ldlex.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ldscript.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/objdump.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ranlib.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readelf.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sectionhash.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/size.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strings.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strip.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/symbolhash.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unstrip.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/versionhash.Po@am__quote@
-
-.c.o:
-@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
-
-.c.obj:
-@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.l.c:
- $(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE)
-
-.y.c:
- $(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h $*.h y.output $*.output -- $(YACCCOMPILE)
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- mkid -fID $$unique
-tags: TAGS
-
-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- here=`pwd`; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$tags $$unique; \
- fi
-ctags: CTAGS
-CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- test -z "$(CTAGS_ARGS)$$tags$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$tags $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && cd $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) $$here
-
-distclean-tags:
- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- list='$(DISTFILES)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
- fi; \
- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
- else \
- test -f $(distdir)/$$file \
- || cp -p $$d/$$file $(distdir)/$$file \
- || exit 1; \
- fi; \
- done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(SCRIPTS) $(HEADERS)
-installdirs:
- for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)"; do \
- test -z "$$dir" || $(MKDIR_P) "$$dir"; \
- done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
- -rm -f ldlex.c
- -rm -f ldscript.c
- -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-binPROGRAMS clean-generic clean-noinstLIBRARIES \
- clean-noinstPROGRAMS mostlyclean-am
-
-distclean: distclean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
- distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-exec-am: install-binPROGRAMS install-binSCRIPTS
-
-install-html: install-html-am
-
-install-info: install-info-am
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-ps: install-ps-am
-
-installcheck-am: installcheck-binPROGRAMS installcheck-binSCRIPTS
-
-maintainer-clean: maintainer-clean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
- clean-generic clean-noinstLIBRARIES clean-noinstPROGRAMS ctags \
- distclean distclean-compile distclean-generic distclean-tags \
- distdir dvi dvi-am html html-am info info-am install \
- install-am install-binPROGRAMS install-binSCRIPTS install-data \
- install-data-am install-dvi install-dvi-am install-exec \
- install-exec-am install-html install-html-am install-info \
- install-info-am install-man install-pdf install-pdf-am \
- install-ps install-ps-am install-strip installcheck \
- installcheck-am installcheck-binPROGRAMS \
- installcheck-binSCRIPTS installdirs maintainer-clean \
- maintainer-clean-generic mostlyclean mostlyclean-compile \
- mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
- uninstall-am uninstall-binPROGRAMS uninstall-binSCRIPTS
-
-
-ldlex.o: ldscript.c
-ldscript.h: ldscript.c
-@NATIVE_LD_FALSE@libld_elf_i386.so: libld_elf_i386_pic.a libld_elf_i386.map
-@NATIVE_LD_FALSE@ $(LINK) -shared -o $@ -Wl,--whole-archive,$<,--no-whole-archive \
-@NATIVE_LD_FALSE@ $(libelf) $(libeu) \
-@NATIVE_LD_FALSE@ -Wl,--version-script,$(srcdir)/libld_elf_i386.map
-@NATIVE_LD_FALSE@ $(textrel_check)
-
-%.os: %.c %.o
- if $(filter-out -fmudflap,$(COMPILE)) -c -o $@ -fpic -DPIC -DSHARED \
- -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
- `test -f '$<' || echo '$(srcdir)/'`$<; \
- then cat "$(DEPDIR)/$*.Tpo" >> "$(DEPDIR)/$*.Po"; \
- rm -f "$(DEPDIR)/$*.Tpo"; \
- else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
- fi
-
-# Special rule to make it possible to define libld_elf_a_SOURCES as we do.
-# Otherwise make would complain.
-.deps/none_ld.Po: none_ld.os
- -:
-
-installcheck-binPROGRAMS: $(bin_PROGRAMS)
- bad=0; pid=$$$$; list="$(bin_PROGRAMS)"; for p in $$list; do \
- case ' $(AM_INSTALLCHECK_STD_OPTIONS_EXEMPT) ' in \
- *" $$p "* | *" $(srcdir)/$$p "*) continue;; \
- esac; \
- f=`echo "$$p" | \
- sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
- for opt in --help --version; do \
- if LD_LIBRARY_PATH=$(DESTDIR)$(libdir) \
- $(DESTDIR)$(bindir)/$$f $$opt > c$${pid}_.out 2> c$${pid}_.err \
- && test -n "`cat c$${pid}_.out`" \
- && test -z "`cat c$${pid}_.err`"; then :; \
- else echo "$$f does not support $$opt" 1>&2; bad=1; fi; \
- done; \
- done; rm -f c$${pid}_.???; exit $$bad
-
-make-debug-archive: $(srcdir)/make-debug-archive.in
- UNSTRIP=$(bindir)/`echo unstrip | sed '$(transform)'`; \
- AR=$(bindir)/`echo ar | sed '$(transform)'`; \
- sed -e "s,@UNSTRIP@,$$UNSTRIP,g" -e "s,@AR@,$$AR,g" \
- -e "s%[@]PACKAGE_NAME[@]%$(PACKAGE_NAME)%g" \
- -e "s%[@]PACKAGE_VERSION[@]%$(PACKAGE_VERSION)%g" \
- $(srcdir)/make-debug-archive.in > $@.new
- chmod +x $@.new
- mv -f $@.new $@
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/src/addr2line.c b/src/addr2line.c
deleted file mode 100644
index 0d11e18..0000000
--- a/src/addr2line.c
+++ /dev/null
@@ -1,490 +0,0 @@
-/* Locate source files and line information for given addresses
- Copyright (C) 2005, 2006, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <argp.h>
-#include <assert.h>
-#include <errno.h>
-#include <error.h>
-#include <fcntl.h>
-#include <inttypes.h>
-#include <libdwfl.h>
-#include <dwarf.h>
-#include <libintl.h>
-#include <locale.h>
-#include <mcheck.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdio_ext.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-
-/* Name and version of program. */
-static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
-
-/* Bug report address. */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
-
-
-/* Values for the parameters which have no short form. */
-#define OPT_DEMANGLER 0x100
-
-/* Definitions of arguments for argp functions. */
-static const struct argp_option options[] =
-{
- { NULL, 0, NULL, 0, N_("Output selection options:"), 2 },
- { "basenames", 's', NULL, 0, N_("Show only base names of source files"), 0 },
- { "absolute", 'A', NULL, 0,
- N_("Show absolute file names using compilation directory"), 0 },
- { "functions", 'f', NULL, 0, N_("Also show function names"), 0 },
- { "symbols", 'S', NULL, 0, N_("Also show symbol or section names"), 0 },
-
- { NULL, 0, NULL, 0, N_("Miscellaneous:"), 0 },
- /* Unsupported options. */
- { "target", 'b', "ARG", OPTION_HIDDEN, NULL, 0 },
- { "demangle", 'C', "ARG", OPTION_HIDDEN | OPTION_ARG_OPTIONAL, NULL, 0 },
- { "demangler", OPT_DEMANGLER, "ARG", OPTION_HIDDEN, NULL, 0 },
- { NULL, 0, NULL, 0, NULL, 0 }
-};
-
-/* Short description of program. */
-static const char doc[] = N_("\
-Locate source files and line information for ADDRs (in a.out by default).");
-
-/* Strings for arguments in help texts. */
-static const char args_doc[] = N_("[ADDR...]");
-
-/* Prototype for option handler. */
-static error_t parse_opt (int key, char *arg, struct argp_state *state);
-
-static struct argp_child argp_children[2]; /* [0] is set in main. */
-
-/* Data structure to communicate with argp functions. */
-static const struct argp argp =
-{
- options, parse_opt, args_doc, doc, argp_children, NULL, NULL
-};
-
-
-/* Handle ADDR. */
-static int handle_address (const char *addr, Dwfl *dwfl);
-
-
-/* True if only base names of files should be shown. */
-static bool only_basenames;
-
-/* True if absolute file names based on DW_AT_comp_dir should be shown. */
-static bool use_comp_dir;
-
-/* True if function names should be shown. */
-static bool show_functions;
-
-/* True if ELF symbol or section info should be shown. */
-static bool show_symbols;
-
-
-int
-main (int argc, char *argv[])
-{
- int remaining;
- int result = 0;
-
- /* Make memory leak detection possible. */
- mtrace ();
-
- /* We use no threads here which can interfere with handling a stream. */
- (void) __fsetlocking (stdout, FSETLOCKING_BYCALLER);
-
- /* Set locale. */
- (void) setlocale (LC_ALL, "");
-
- /* Make sure the message catalog can be found. */
- (void) bindtextdomain (PACKAGE_TARNAME, LOCALEDIR);
-
- /* Initialize the message catalog. */
- (void) textdomain (PACKAGE_TARNAME);
-
- /* Parse and process arguments. This includes opening the modules. */
- argp_children[0].argp = dwfl_standard_argp ();
- argp_children[0].group = 1;
- Dwfl *dwfl = NULL;
- (void) argp_parse (&argp, argc, argv, 0, &remaining, &dwfl);
- assert (dwfl != NULL);
-
- /* Now handle the addresses. In case none are given on the command
- line, read from stdin. */
- if (remaining == argc)
- {
- /* We use no threads here which can interfere with handling a stream. */
- (void) __fsetlocking (stdin, FSETLOCKING_BYCALLER);
-
- char *buf = NULL;
- size_t len = 0;
- while (!feof_unlocked (stdin))
- {
- if (getline (&buf, &len, stdin) < 0)
- break;
-
- result = handle_address (buf, dwfl);
- }
-
- free (buf);
- }
- else
- {
- do
- result = handle_address (argv[remaining], dwfl);
- while (++remaining < argc);
- }
-
- return result;
-}
-
-
-/* Print the version information. */
-static void
-print_version (FILE *stream, struct argp_state *state __attribute__ ((unused)))
-{
- fprintf (stream, "addr2line (%s) %s\n", PACKAGE_NAME, PACKAGE_VERSION);
- fprintf (stream, gettext ("\
-Copyright (C) %s Red Hat, Inc.\n\
-This is free software; see the source for copying conditions. There is NO\n\
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
-"), "2008");
- fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper");
-}
-
-
-/* Handle program arguments. */
-static error_t
-parse_opt (int key, char *arg __attribute__ ((unused)),
- struct argp_state *state)
-{
- switch (key)
- {
- case ARGP_KEY_INIT:
- state->child_inputs[0] = state->input;
- break;
-
- case 'b':
- case 'C':
- case OPT_DEMANGLER:
- /* Ignored for compatibility. */
- break;
-
- case 's':
- only_basenames = true;
- break;
-
- case 'A':
- use_comp_dir = true;
- break;
-
- case 'f':
- show_functions = true;
- break;
-
- case 'S':
- show_symbols = true;
- break;
-
- default:
- return ARGP_ERR_UNKNOWN;
- }
- return 0;
-}
-
-
-static bool
-print_dwarf_function (Dwfl_Module *mod, Dwarf_Addr addr)
-{
- Dwarf_Addr bias = 0;
- Dwarf_Die *cudie = dwfl_module_addrdie (mod, addr, &bias);
-
- Dwarf_Die *scopes;
- int nscopes = dwarf_getscopes (cudie, addr - bias, &scopes);
- if (nscopes <= 0)
- return false;
-
- for (int i = 0; i < nscopes; ++i)
- switch (dwarf_tag (&scopes[i]))
- {
- case DW_TAG_subprogram:
- {
- const char *name = dwarf_diename (&scopes[i]);
- if (name == NULL)
- return false;
- puts (name);
- return true;
- }
-
- case DW_TAG_inlined_subroutine:
- {
- const char *name = dwarf_diename (&scopes[i]);
- if (name == NULL)
- return false;
- printf ("%s inlined", name);
-
- Dwarf_Files *files;
- if (dwarf_getsrcfiles (cudie, &files, NULL) == 0)
- {
- Dwarf_Attribute attr_mem;
- Dwarf_Word val;
- if (dwarf_formudata (dwarf_attr (&scopes[i],
- DW_AT_call_file,
- &attr_mem), &val) == 0)
- {
- const char *file = dwarf_filesrc (files, val, NULL, NULL);
- unsigned int lineno = 0;
- unsigned int colno = 0;
- if (dwarf_formudata (dwarf_attr (&scopes[i],
- DW_AT_call_line,
- &attr_mem), &val) == 0)
- lineno = val;
- if (dwarf_formudata (dwarf_attr (&scopes[i],
- DW_AT_call_column,
- &attr_mem), &val) == 0)
- colno = val;
- if (lineno == 0)
- {
- if (file != NULL)
- printf (" from %s", file);
- }
- else if (colno == 0)
- printf (" at %s:%u", file, lineno);
- else
- printf (" at %s:%u:%u", file, lineno, colno);
- }
- }
- printf (" in ");
- continue;
- }
- }
-
- return false;
-}
-
-static void
-print_addrsym (Dwfl_Module *mod, GElf_Addr addr)
-{
- GElf_Sym s;
- GElf_Word shndx;
- const char *name = dwfl_module_addrsym (mod, addr, &s, &shndx);
- if (name == NULL)
- {
- /* No symbol name. Get a section name instead. */
- int i = dwfl_module_relocate_address (mod, &addr);
- if (i >= 0)
- name = dwfl_module_relocation_info (mod, i, NULL);
- if (name == NULL)
- puts ("??");
- else
- printf ("(%s)+%#" PRIx64 "\n", name, addr);
- }
- else if (addr == s.st_value)
- puts (name);
- else
- printf ("%s+%#" PRIx64 "\n", name, addr - s.st_value);
-}
-
-static int
-see_one_module (Dwfl_Module *mod,
- void **userdata __attribute__ ((unused)),
- const char *name __attribute__ ((unused)),
- Dwarf_Addr start __attribute__ ((unused)),
- void *arg)
-{
- Dwfl_Module **result = arg;
- if (*result != NULL)
- return DWARF_CB_ABORT;
- *result = mod;
- return DWARF_CB_OK;
-}
-
-static int
-find_symbol (Dwfl_Module *mod,
- void **userdata __attribute__ ((unused)),
- const char *name __attribute__ ((unused)),
- Dwarf_Addr start __attribute__ ((unused)),
- void *arg)
-{
- const char *looking_for = ((void **) arg)[0];
- GElf_Sym *symbol = ((void **) arg)[1];
-
- int n = dwfl_module_getsymtab (mod);
- for (int i = 1; i < n; ++i)
- {
- const char *symbol_name = dwfl_module_getsym (mod, i, symbol, NULL);
- if (symbol_name == NULL)
- continue;
- switch (GELF_ST_TYPE (symbol->st_info))
- {
- case STT_SECTION:
- case STT_FILE:
- case STT_TLS:
- break;
- default:
- if (!strcmp (symbol_name, looking_for))
- {
- ((void **) arg)[0] = NULL;
- return DWARF_CB_ABORT;
- }
- }
- }
-
- return DWARF_CB_OK;
-}
-
-static int
-handle_address (const char *string, Dwfl *dwfl)
-{
- char *endp;
- uintmax_t addr = strtoumax (string, &endp, 0);
- if (endp == string)
- {
- bool parsed = false;
- int n;
- char *name = NULL;
- if (sscanf (string, "(%m[^)])%" PRIiMAX "%n", &name, &addr, &n) == 2
- && string[n] == '\0')
- {
- /* It was (section)+offset. This makes sense if there is
- only one module to look in for a section. */
- Dwfl_Module *mod = NULL;
- if (dwfl_getmodules (dwfl, &see_one_module, &mod, 0) != 0
- || mod == NULL)
- error (EXIT_FAILURE, 0, gettext ("Section syntax requires"
- " exactly one module"));
-
- int nscn = dwfl_module_relocations (mod);
- for (int i = 0; i < nscn; ++i)
- {
- GElf_Word shndx;
- const char *scn = dwfl_module_relocation_info (mod, i, &shndx);
- if (unlikely (scn == NULL))
- break;
- if (!strcmp (scn, name))
- {
- /* Found the section. */
- GElf_Shdr shdr_mem;
- GElf_Addr shdr_bias;
- GElf_Shdr *shdr = gelf_getshdr
- (elf_getscn (dwfl_module_getelf (mod, &shdr_bias), shndx),
- &shdr_mem);
- if (unlikely (shdr == NULL))
- break;
-
- if (addr >= shdr->sh_size)
- error (0, 0,
- gettext ("offset %#" PRIxMAX " lies outside"
- " section '%s'"),
- addr, scn);
-
- addr += shdr->sh_addr + shdr_bias;
- parsed = true;
- break;
- }
- }
- }
- else if (sscanf (string, "%m[^-+]%" PRIiMAX "%n", &name, &addr, &n) == 2
- && string[n] == '\0')
- {
- /* It was symbol+offset. */
- GElf_Sym sym;
- void *arg[2] = { name, &sym };
- (void) dwfl_getmodules (dwfl, &find_symbol, arg, 0);
- if (arg[0] != NULL)
- error (0, 0, gettext ("cannot find symbol '%s'"), name);
- else
- {
- if (sym.st_size != 0 && addr >= sym.st_size)
- error (0, 0,
- gettext ("offset %#" PRIxMAX " lies outside"
- " contents of '%s'"),
- addr, name);
- addr += sym.st_value;
- parsed = true;
- }
- }
-
- free (name);
- if (!parsed)
- return 1;
- }
-
- Dwfl_Module *mod = dwfl_addrmodule (dwfl, addr);
-
- if (show_functions)
- {
- /* First determine the function name. Use the DWARF information if
- possible. */
- if (! print_dwarf_function (mod, addr) && !show_symbols)
- puts (dwfl_module_addrname (mod, addr) ?: "??");
- }
-
- if (show_symbols)
- print_addrsym (mod, addr);
-
- Dwfl_Line *line = dwfl_module_getsrc (mod, addr);
-
- const char *src;
- int lineno, linecol;
- if (line != NULL && (src = dwfl_lineinfo (line, &addr, &lineno, &linecol,
- NULL, NULL)) != NULL)
- {
- const char *comp_dir = "";
- const char *comp_dir_sep = "";
-
- if (only_basenames)
- src = basename (src);
- else if (use_comp_dir && src[0] != '/')
- {
- comp_dir = dwfl_line_comp_dir (line);
- if (comp_dir != NULL)
- comp_dir_sep = "/";
- }
-
- if (linecol != 0)
- printf ("%s%s%s:%d:%d\n",
- comp_dir, comp_dir_sep, src, lineno, linecol);
- else
- printf ("%s%s%s:%d\n",
- comp_dir, comp_dir_sep, src, lineno);
- }
- else
- puts ("??:0");
-
- return 0;
-}
-
-
-#include "debugpred.h"
diff --git a/src/ar.c b/src/ar.c
deleted file mode 100644
index aade351..0000000
--- a/src/ar.c
+++ /dev/null
@@ -1,1518 +0,0 @@
-/* Create, modify, and extract from archives.
- Copyright (C) 2005, 2007 Red Hat, Inc.
- Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <argp.h>
-#include <assert.h>
-#include <error.h>
-#include <fcntl.h>
-#include <gelf.h>
-#include <libintl.h>
-#include <limits.h>
-#include <locale.h>
-#include <mcheck.h>
-#include <search.h>
-#include <stdbool.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <stdio_ext.h>
-#include <string.h>
-#include <time.h>
-#include <unistd.h>
-#include <sys/mman.h>
-#include <sys/statfs.h>
-#include <sys/time.h>
-
-#include <system.h>
-
-#include "arlib.h"
-
-
-/* Name and version of program. */
-static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
-/* Prototypes for local functions. */
-static int do_oper_extract (int oper, const char *arfname, char **argv,
- int argc, long int instance);
-static int do_oper_delete (const char *arfname, char **argv, int argc,
- long int instance);
-static int do_oper_insert (int oper, const char *arfname, char **argv,
- int argc, const char *member);
-
-
-/* Bug report address. */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
-
-
-/* Definitions of arguments for argp functions. */
-static const struct argp_option options[] =
-{
- { NULL, 0, NULL, 0, N_("Commands:"), 0 },
- { NULL, 'd', NULL, 0, N_("Delete files from archive."), 0 },
- { NULL, 'm', NULL, 0, N_("Move files in archive."), 0 },
- { NULL, 'p', NULL, 0, N_("Print files in archive."), 0 },
- { NULL, 'q', NULL, 0, N_("Quick append files to archive."), 0 },
- { NULL, 'r', NULL, 0,
- N_("Replace existing or insert new file into archive."), 0 },
- { NULL, 't', NULL, 0, N_("Display content of archive."), 0 },
- { NULL, 'x', NULL, 0, N_("Extract files from archive."), 0 },
-
- { NULL, 0, NULL, 0, N_("Command Modifiers:"), 0 },
- { NULL, 'o', NULL, 0, N_("Preserve original dates."), 0 },
- { NULL, 'N', NULL, 0, N_("Use instance [COUNT] of name."), 0 },
- { NULL, 'C', NULL, 0,
- N_("Do not replace existing files with extracted files."), 0 },
- { NULL, 'T', NULL, 0, N_("Allow filename to be truncated if necessary."),
- 0 },
- { NULL, 'v', NULL, 0, N_("Provide verbose output."), 0 },
- { NULL, 's', NULL, 0, N_("Force regeneration of symbol table."), 0 },
- { NULL, 'a', NULL, 0, N_("Insert file after [MEMBER]."), 0 },
- { NULL, 'b', NULL, 0, N_("Insert file before [MEMBER]."), 0 },
- { NULL, 'i', NULL, 0, N_("Same as -b."), 0 },
- { NULL, 'c', NULL, 0, N_("Suppress message when library has to be created."),
- 0 },
- { NULL, 'P', NULL, 0, N_("Use full path for file matching."), 0 },
- { NULL, 'u', NULL, 0, N_("Update only older files in archive."), 0 },
-
- { NULL, 0, NULL, 0, NULL, 0 }
-};
-
-/* Short description of program. */
-static const char doc[] = N_("Create, modify, and extract from archives.");
-
-/* Strings for arguments in help texts. */
-static const char args_doc[] = N_("[MEMBER] [COUNT] ARCHIVE [FILE...]");
-
-/* Prototype for option handler. */
-static error_t parse_opt (int key, char *arg, struct argp_state *state);
-
-/* Data structure to communicate with argp functions. */
-static struct argp argp =
-{
- options, parse_opt, args_doc, doc, NULL, NULL, NULL
-};
-
-
-/* What operation to perform. */
-static enum
- {
- oper_none,
- oper_delete,
- oper_move,
- oper_print,
- oper_qappend,
- oper_replace,
- oper_list,
- oper_extract
- } operation;
-
-/* Modifiers. */
-static bool verbose;
-static bool preserve_dates;
-static bool instance_specifed;
-static bool dont_replace_existing;
-static bool allow_truncate_fname;
-static bool force_symtab;
-static bool suppress_create_msg;
-static bool full_path;
-static bool update_newer;
-static enum { ipos_none, ipos_before, ipos_after } ipos;
-
-
-int
-main (int argc, char *argv[])
-{
- /* Make memory leak detection possible. */
- mtrace ();
-
- /* We use no threads here which can interfere with handling a stream. */
- (void) __fsetlocking (stdin, FSETLOCKING_BYCALLER);
- (void) __fsetlocking (stdout, FSETLOCKING_BYCALLER);
- (void) __fsetlocking (stderr, FSETLOCKING_BYCALLER);
-
- /* Set locale. */
- (void) setlocale (LC_ALL, "");
-
- /* Make sure the message catalog can be found. */
- (void) bindtextdomain (PACKAGE_TARNAME, LOCALEDIR);
-
- /* Initialize the message catalog. */
- (void) textdomain (PACKAGE_TARNAME);
-
- /* For historical reasons the options in the first parameter need
- not be preceded by a dash. Add it now if necessary. */
- if (argc > 1 && argv[1][0] != '-')
- {
- size_t len = strlen (argv[1]) + 1;
- char *newp = alloca (len + 1);
- newp[0] = '-';
- memcpy (&newp[1], argv[1], len);
- argv[1] = newp;
- }
-
- /* Parse and process arguments. */
- int remaining;
- (void) argp_parse (&argp, argc, argv, ARGP_IN_ORDER, &remaining, NULL);
-
- /* Tell the library which version we are expecting. */
- (void) elf_version (EV_CURRENT);
-
- /* Handle the [MEMBER] parameter. */
- const char *member = NULL;
- if (ipos != ipos_none)
- {
- /* Only valid for certain operations. */
- if (operation == oper_extract && operation == oper_delete)
- error (1, 0, gettext ("\
-'a', 'b', and 'i' are only allowed with the 'm' and 'r' options"));
-
- if (remaining == argc)
- {
- error (0, 0, gettext ("MEMBER parameter required"));
- argp_help (&argp, stderr, ARGP_HELP_SEE, AR);
- exit (EXIT_FAILURE);
- }
-
- member = argv[remaining++];
- }
-
- /* Handle the [COUNT] parameter. */
- long int instance = -1;
- if (instance_specifed)
- {
- /* Only valid for certain operations. */
- if (operation == oper_extract && operation == oper_delete)
- error (1, 0, gettext ("\
-'N' is only meaningful with the 'x' and 'd' options"));
-
- if (remaining == argc)
- {
- error (0, 0, gettext ("COUNT parameter required"));
- argp_help (&argp, stderr, ARGP_HELP_SEE, AR);
- exit (EXIT_FAILURE);
- }
-
- char *endp;
- errno = 0;
- if (((instance = strtol (argv[remaining], &endp, 10)) == LONG_MAX
- && errno == ERANGE)
- || instance <= 0
- || *endp != '\0')
- error (1, 0, gettext ("invalid COUNT parameter %s"), argv[remaining]);
-
- ++remaining;
- }
-
- if ((dont_replace_existing || allow_truncate_fname)
- && unlikely (operation != oper_extract))
- error (1, 0, gettext ("'%' is only meaningful with the 'x' option"),
- dont_replace_existing ? 'C' : 'T');
-
- /* There must at least be one more parameter specifying the archive. */
- if (remaining == argc)
- {
- error (0, 0, gettext ("Archive name required"));
- argp_help (&argp, stderr, ARGP_HELP_SEE, AR);
- exit (EXIT_FAILURE);
- }
-
- const char *arfname = argv[remaining++];
- argv += remaining;
- argc -= remaining;
-
- int status;
- switch (operation)
- {
- case oper_list:
- case oper_print:
- status = do_oper_extract (operation, arfname, argv, argc, -1);
- break;
-
- case oper_extract:
- status = do_oper_extract (operation, arfname, argv, argc, instance);
- break;
-
- case oper_delete:
- status = do_oper_delete (arfname, argv, argc, instance);
- break;
-
- case oper_move:
- case oper_qappend:
- case oper_replace:
- status = do_oper_insert (operation, arfname, argv, argc, member);
- break;
-
- default:
- assert (! "should not happen");
- status = 1;
- break;
- }
-
- return status;
-}
-
-
-/* Print the version information. */
-static void
-print_version (FILE *stream, struct argp_state *state __attribute__ ((unused)))
-{
- fprintf (stream, "ar (%s) %s\n", PACKAGE_NAME, PACKAGE_VERSION);
- fprintf (stream, gettext ("\
-Copyright (C) %s Red Hat, Inc.\n\
-This is free software; see the source for copying conditions. There is NO\n\
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
-"), "2008");
- fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper");
-}
-
-
-/* Handle program arguments. */
-static error_t
-parse_opt (int key, char *arg __attribute__ ((unused)),
- struct argp_state *state __attribute__ ((unused)))
-{
- switch (key)
- {
- case 'd':
- case 'm':
- case 'p':
- case 'q':
- case 'r':
- case 't':
- case 'x':
- if (operation != oper_none)
- {
- error (0, 0, gettext ("More than one operation specified"));
- argp_help (&argp, stderr, ARGP_HELP_SEE, AR);
- exit (EXIT_FAILURE);
- }
-
- switch (key)
- {
- case 'd':
- operation = oper_delete;
- break;
- case 'm':
- operation = oper_move;
- break;
- case 'p':
- operation = oper_print;
- break;
- case 'q':
- operation = oper_qappend;
- break;
- case 'r':
- operation = oper_replace;
- break;
- case 't':
- operation = oper_list;
- break;
- case 'x':
- operation = oper_extract;
- break;
- }
- break;
-
- case 'a':
- ipos = ipos_after;
- break;
-
- case 'b':
- case 'i':
- ipos = ipos_before;
- break;
-
- case 'c':
- suppress_create_msg = true;
- break;
-
- case 'C':
- dont_replace_existing = true;
- break;
-
- case 'N':
- instance_specifed = true;
- break;
-
- case 'o':
- preserve_dates = true;
- break;
-
- case 'P':
- full_path = true;
- break;
-
- case 's':
- force_symtab = true;
- break;
-
- case 'T':
- allow_truncate_fname = true;
- break;
-
- case 'v':
- verbose = true;
- break;
-
- default:
- return ARGP_ERR_UNKNOWN;
- }
- return 0;
-}
-
-
-static int
-open_archive (const char *arfname, int flags, int mode, Elf **elf,
- struct stat *st, bool miss_allowed)
-{
- int fd = open (arfname, flags, mode);
- if (fd == -1)
- {
- if (miss_allowed)
- return -1;
-
- error (EXIT_FAILURE, errno, gettext ("cannot open archive '%s'"),
- arfname);
- }
-
- if (elf != NULL)
- {
- Elf_Cmd cmd = flags == O_RDONLY ? ELF_C_READ_MMAP : ELF_C_RDWR_MMAP;
-
- *elf = elf_begin (fd, cmd, NULL);
- if (*elf == NULL)
- error (EXIT_FAILURE, 0, gettext ("cannot open archive '%s': %s"),
- arfname, elf_errmsg (-1));
-
- if (flags == O_RDONLY && elf_kind (*elf) != ELF_K_AR)
- error (EXIT_FAILURE, 0, gettext ("%s: not an archive file"), arfname);
- }
-
- if (st != NULL && fstat (fd, st) != 0)
- error (EXIT_FAILURE, errno, gettext ("cannot stat archive '%s'"),
- arfname);
-
- return fd;
-}
-
-
-static void
-not_found (int argc, char *argv[argc], bool found[argc])
-{
- for (int i = 0; i < argc; ++i)
- if (!found[i])
- printf (gettext ("no entry %s in archive\n"), argv[i]);
-}
-
-
-static int
-copy_content (Elf *elf, int newfd, off_t off, size_t n)
-{
- size_t len;
- char *rawfile = elf_rawfile (elf, &len);
-
- assert (off + n <= len);
-
- /* Tell the kernel we will read all the pages sequentially. */
- size_t ps = sysconf (_SC_PAGESIZE);
- if (n > 2 * ps)
- posix_madvise (rawfile + (off & ~(ps - 1)), n, POSIX_MADV_SEQUENTIAL);
-
- return write_retry (newfd, rawfile + off, n) != (ssize_t) n;
-}
-
-
-static int
-do_oper_extract (int oper, const char *arfname, char **argv, int argc,
- long int instance)
-{
- bool found[argc];
- memset (found, '\0', sizeof (found));
-
- struct statfs f;
- f.f_namelen = 0;
-
- off_t index_off = -1;
- size_t index_size = 0;
- off_t cur_off = SARMAG;
-
- int status = 0;
- Elf *elf;
- int fd = open_archive (arfname, O_RDONLY, 0, &elf, NULL, false);
-
- if (hcreate (2 * argc) == 0)
- error (EXIT_FAILURE, errno, gettext ("cannot create hash table"));
-
- for (int cnt = 0; cnt < argc; ++cnt)
- {
- ENTRY entry = { .key = argv[cnt], .data = &argv[cnt] };
- if (hsearch (entry, ENTER) == NULL)
- error (EXIT_FAILURE, errno,
- gettext ("cannot insert into hash table"));
- }
-
- struct stat st;
- if (force_symtab)
- {
- if (fstat (fd, &st) != 0)
- {
- error (0, errno, gettext ("cannot stat '%s'"), arfname);
- close (fd);
- return 1;
- }
- arlib_init ();
- }
-
- Elf_Cmd cmd = ELF_C_READ_MMAP;
- Elf *subelf;
- while ((subelf = elf_begin (fd, cmd, elf)) != NULL)
- {
- Elf_Arhdr *arhdr = elf_getarhdr (subelf);
-
- if (strcmp (arhdr->ar_name, "/") == 0)
- {
- index_off = elf_getaroff (subelf);
- index_size = arhdr->ar_size;
- goto next;
- }
- if (strcmp (arhdr->ar_name, "//") == 0)
- goto next;
-
- if (force_symtab)
- {
- arlib_add_symbols (elf, arfname, arhdr->ar_name, cur_off);
- cur_off += (((arhdr->ar_size + 1) & ~((off_t) 1))
- + sizeof (struct ar_hdr));
- }
-
- bool do_extract = argc <= 0;
- if (!do_extract)
- {
- ENTRY entry;
- entry.key = arhdr->ar_name;
- ENTRY *res = hsearch (entry, FIND);
- if (res != NULL && (instance < 0 || instance-- == 0)
- && !found[(char **) res->data - argv])
- found[(char **) res->data - argv] = do_extract = true;
- }
-
- if (do_extract)
- {
- if (verbose)
- {
- if (oper == oper_print)
- {
- printf ("\n<%s>\n\n", arhdr->ar_name);
-
- /* We have to flush now because now we use the descriptor
- directly. */
- fflush (stdout);
- }
- else if (oper == oper_list)
- {
- char datestr[100];
- strftime (datestr, sizeof (datestr), "%b %e %H:%M %Y",
- localtime (&arhdr->ar_date));
-
- printf ("%c%c%c%c%c%c%c%c%c %u/%u %6ju %s %s\n",
- (arhdr->ar_mode & S_IRUSR) ? 'r' : '-',
- (arhdr->ar_mode & S_IWUSR) ? 'w' : '-',
- (arhdr->ar_mode & S_IXUSR)
- ? ((arhdr->ar_mode & S_ISUID) ? 's' : 'x')
- : ((arhdr->ar_mode & S_ISUID) ? 'S' : '-'),
- (arhdr->ar_mode & S_IRGRP) ? 'r' : '-',
- (arhdr->ar_mode & S_IWGRP) ? 'w' : '-',
- (arhdr->ar_mode & S_IXGRP)
- ? ((arhdr->ar_mode & S_ISGID) ? 's' : 'x')
- : ((arhdr->ar_mode & S_ISGID) ? 'S' : '-'),
- (arhdr->ar_mode & S_IROTH) ? 'r' : '-',
- (arhdr->ar_mode & S_IWOTH) ? 'w' : '-',
- (arhdr->ar_mode & S_IXOTH)
- ? ((arhdr->ar_mode & S_ISVTX) ? 't' : 'x')
- : ((arhdr->ar_mode & S_ISVTX) ? 'T' : '-'),
- arhdr->ar_uid,
- arhdr->ar_gid,
- (uintmax_t) arhdr->ar_size,
- datestr,
- arhdr->ar_name);
- }
- else
- printf ("x - %s\n", arhdr->ar_name);
- }
-
- if (oper == oper_list)
- {
- if (!verbose)
- puts (arhdr->ar_name);
-
- goto next;
- }
-
- size_t nleft;
- char *data = elf_rawfile (subelf, &nleft);
- if (data == NULL)
- {
- error (0, 0, gettext ("cannot read content of %s: %s"),
- arhdr->ar_name, elf_errmsg (-1));
- status = 1;
- goto next;
- }
-
- int xfd;
- char tempfname[] = "XXXXXX";
- bool use_mkstemp = true;
-
- if (oper == oper_print)
- xfd = STDOUT_FILENO;
- else
- {
- xfd = mkstemp (tempfname);
- if (unlikely (xfd == -1))
- {
- /* We cannot create a temporary file. Try to overwrite
- the file or create it if it does not exist. */
- int flags = O_WRONLY | O_CREAT;
- if (dont_replace_existing)
- flags |= O_EXCL;
- else
- flags |= O_TRUNC;
- xfd = open (arhdr->ar_name, flags, 0600);
- if (unlikely (xfd == -1))
- {
- int printlen = INT_MAX;
-
- if (errno == ENAMETOOLONG && allow_truncate_fname
- && (f.f_namelen != 0 || statfs (".", &f) == 0))
- {
- /* Try to truncate the name. First find out by how
- much. */
- printlen = f.f_namelen;
- char truncfname[f.f_namelen + 1];
- *((char *) mempcpy (truncfname, arhdr->ar_name,
- f.f_namelen)) = '\0';
-
- xfd = open (truncfname, flags, 0600);
- }
-
- if (xfd == -1)
- {
- error (0, errno, gettext ("cannot open %.*s"),
- (int) printlen, arhdr->ar_name);
- status = 1;
- goto next;
- }
- }
-
- use_mkstemp = false;
- }
- }
-
- ssize_t n;
- while ((n = TEMP_FAILURE_RETRY (write (xfd, data, nleft))) != -1)
- {
- nleft -= n;
- if (nleft == 0)
- break;
- data += n;
- }
-
- if (unlikely (n == -1))
- {
- error (0, errno, gettext ("failed to write %s"), arhdr->ar_name);
- status = 1;
- unlink (tempfname);
- close (xfd);
- goto next;
- }
-
- if (oper != oper_print)
- {
- /* Fix up the mode. */
- if (unlikely (fchmod (xfd, arhdr->ar_mode) != 0))
- {
- error (0, errno, gettext ("cannot change mode of %s"),
- arhdr->ar_name);
- status = 0;
- }
-
- if (preserve_dates)
- {
- struct timeval tv[2];
- tv[0].tv_sec = arhdr->ar_date;
- tv[0].tv_usec = 0;
- tv[1].tv_sec = arhdr->ar_date;
- tv[1].tv_usec = 0;
-
- if (unlikely (futimes (xfd, tv) != 0))
- {
- error (0, errno,
- gettext ("cannot change modification time of %s"),
- arhdr->ar_name);
- status = 1;
- }
- }
-
- /* If we used a temporary file, move it do the right
- name now. */
- if (use_mkstemp)
- {
- int r;
-
- if (dont_replace_existing)
- {
- r = link (tempfname, arhdr->ar_name);
- if (likely (r == 0))
- unlink (tempfname);
- }
- else
- r = rename (tempfname, arhdr->ar_name);
-
- if (unlikely (r) != 0)
- {
- int printlen = INT_MAX;
-
- if (errno == ENAMETOOLONG && allow_truncate_fname
- && (f.f_namelen != 0 || statfs (".", &f) == 0))
- {
- /* Try to truncate the name. First find out by how
- much. */
- printlen = f.f_namelen;
- char truncfname[f.f_namelen + 1];
- *((char *) mempcpy (truncfname, arhdr->ar_name,
- f.f_namelen)) = '\0';
-
- if (dont_replace_existing)
- {
- r = link (tempfname, truncfname);
- if (likely (r == 0))
- unlink (tempfname);
- }
- else
- r = rename (tempfname, truncfname);
- }
-
- if (r != 0)
- {
- error (0, errno, gettext ("\
-cannot rename temporary file to %.*s"),
- printlen, arhdr->ar_name);
- unlink (tempfname);
- status = 1;
- }
- }
- }
-
- close (xfd);
- }
- }
-
- next:
- cmd = elf_next (subelf);
- if (elf_end (subelf) != 0)
- error (1, 0, "%s: %s", arfname, elf_errmsg (-1));
- }
-
- hdestroy ();
-
- if (force_symtab)
- {
- arlib_finalize ();
-
- if (symtab.symsnamelen != 0
- /* We have to rewrite the file also if it initially had an index
- but now does not need one anymore. */
- || (symtab.symsnamelen == 0 && index_size != 0))
- {
- char tmpfname[strlen (arfname) + 7];
- strcpy (stpcpy (tmpfname, arfname), "XXXXXX");
- int newfd = mkstemp (tmpfname);
- if (unlikely (newfd == -1))
- {
- nonew:
- error (0, errno, gettext ("cannot create new file"));
- status = 1;
- }
- else
- {
- /* Create the header. */
- if (unlikely (write_retry (newfd, ARMAG, SARMAG) != SARMAG))
- {
- // XXX Use /prof/self/fd/%d ???
- nonew_unlink:
- unlink (tmpfname);
- if (newfd != -1)
- close (newfd);
- goto nonew;
- }
-
- /* Create the new file. There are three parts as far we are
- concerned: 1. original context before the index, 2. the
- new index, 3. everything after the new index. */
- off_t rest_off;
- if (index_off != -1)
- rest_off = (index_off + sizeof (struct ar_hdr)
- + ((index_size + 1) & ~1ul));
- else
- rest_off = SARMAG;
-
- if ((symtab.symsnamelen != 0
- && ((write_retry (newfd, symtab.symsoff,
- symtab.symsofflen)
- != (ssize_t) symtab.symsofflen)
- || (write_retry (newfd, symtab.symsname,
- symtab.symsnamelen)
- != (ssize_t) symtab.symsnamelen)))
- /* Even if the original file had content before the
- symbol table, we write it in the correct order. */
- || (index_off != SARMAG
- && copy_content (elf, newfd, SARMAG, index_off - SARMAG))
- || copy_content (elf, newfd, rest_off, st.st_size - rest_off)
- /* Set the mode of the new file to the same values the
- original file has. */
- || fchmod (newfd, st.st_mode & ALLPERMS) != 0
- /* Never complain about fchown failing. */
- || (({asm ("" :: "r" (fchown (newfd, st.st_uid,
- st.st_gid))); }),
- close (newfd) != 0)
- || (newfd = -1, rename (tmpfname, arfname) != 0))
- goto nonew_unlink;
- }
- }
- }
-
- elf_end (elf);
-
- close (fd);
-
- not_found (argc, argv, found);
-
- return status;
-}
-
-
-struct armem
-{
- off_t off;
- off_t old_off;
- size_t size;
- long int long_name_off;
- struct armem *next;
- void *mem;
- time_t sec;
- uid_t uid;
- gid_t gid;
- mode_t mode;
- const char *name;
- Elf *elf;
-};
-
-
-static int
-write_member (struct armem *memb, off_t *startp, off_t *lenp, Elf *elf,
- off_t end_off, int newfd)
-{
- struct ar_hdr arhdr;
- char tmpbuf[sizeof (arhdr.ar_name) + 1];
-
- bool changed_header = memb->long_name_off != -1;
- if (changed_header)
- {
- /* In case of a long file name we assume the archive header
- changed and we write it here. */
- memcpy (&arhdr, elf_rawfile (elf, NULL) + *startp, sizeof (arhdr));
-
- snprintf (tmpbuf, sizeof (tmpbuf), "/%-*ld",
- (int) sizeof (arhdr.ar_name), memb->long_name_off);
- changed_header = memcmp (arhdr.ar_name, tmpbuf,
- sizeof (arhdr.ar_name)) != 0;
- }
-
- /* If the files are adjacent in the old file extend the range. */
- if (*startp != -1 && !changed_header && *startp + *lenp == memb->old_off)
- {
- /* Extend the current range. */
- *lenp += (memb->next != NULL
- ? memb->next->off : end_off) - memb->off;
- return 0;
- }
-
- /* Write out the old range. */
- if (*startp != -1 && copy_content (elf, newfd, *startp, *lenp))
- return -1;
-
- *startp = memb->old_off;
- *lenp = (memb->next != NULL ? memb->next->off : end_off) - memb->off;
-
- if (changed_header)
- {
- memcpy (arhdr.ar_name, tmpbuf, sizeof (arhdr.ar_name));
-
- if (unlikely (write_retry (newfd, &arhdr, sizeof (arhdr))
- != sizeof (arhdr)))
- return -1;
-
- *startp += sizeof (struct ar_hdr);
- assert ((size_t) *lenp >= sizeof (struct ar_hdr));
- *lenp -= sizeof (struct ar_hdr);
- }
-
- return 0;
-}
-
-/* Store the name in the long name table if necessary.
- Record its offset or -1 if we did not need to use the table. */
-static void
-remember_long_name (struct armem *mem, const char *name, size_t namelen)
-{
- mem->long_name_off = (namelen > MAX_AR_NAME_LEN
- ? arlib_add_long_name (name, namelen)
- : -1l);
-}
-
-static int
-do_oper_delete (const char *arfname, char **argv, int argc,
- long int instance)
-{
- bool *found = alloca (sizeof (bool) * argc);
- memset (found, '\0', sizeof (found));
-
- /* List of the files we keep. */
- struct armem *to_copy = NULL;
-
- int status = 0;
- Elf *elf;
- struct stat st;
- int fd = open_archive (arfname, O_RDONLY, 0, &elf, &st, false);
-
- if (hcreate (2 * argc) == 0)
- error (EXIT_FAILURE, errno, gettext ("cannot create hash table"));
-
- for (int cnt = 0; cnt < argc; ++cnt)
- {
- ENTRY entry = { .key = argv[cnt], .data = &argv[cnt] };
- if (hsearch (entry, ENTER) == NULL)
- error (EXIT_FAILURE, errno,
- gettext ("cannot insert into hash table"));
- }
-
- arlib_init ();
-
- off_t cur_off = SARMAG;
- Elf_Cmd cmd = ELF_C_READ_MMAP;
- Elf *subelf;
- while ((subelf = elf_begin (fd, cmd, elf)) != NULL)
- {
- Elf_Arhdr *arhdr = elf_getarhdr (subelf);
-
- /* Ignore the symbol table and the long file name table here. */
- if (strcmp (arhdr->ar_name, "/") == 0
- || strcmp (arhdr->ar_name, "//") == 0)
- goto next;
-
- bool do_delete = argc <= 0;
- if (!do_delete)
- {
- ENTRY entry;
- entry.key = arhdr->ar_name;
- ENTRY *res = hsearch (entry, FIND);
- if (res != NULL && (instance < 0 || instance-- == 0)
- && !found[(char **) res->data - argv])
- found[(char **) res->data - argv] = do_delete = true;
- }
-
- if (do_delete)
- {
- if (verbose)
- printf ("d - %s\n", arhdr->ar_name);
- }
- else
- {
- struct armem *newp = alloca (sizeof (struct armem));
- newp->old_off = elf_getaroff (subelf);
- newp->off = cur_off;
-
- cur_off += (((arhdr->ar_size + 1) & ~((off_t) 1))
- + sizeof (struct ar_hdr));
-
- if (to_copy == NULL)
- to_copy = newp->next = newp;
- else
- {
- newp->next = to_copy->next;
- to_copy = to_copy->next = newp;
- }
-
- /* If we recreate the symbol table read the file's symbol
- table now. */
- arlib_add_symbols (subelf, arfname, arhdr->ar_name, newp->off);
-
- /* Remember long file names. */
- remember_long_name (newp, arhdr->ar_name, strlen (arhdr->ar_name));
- }
-
- next:
- cmd = elf_next (subelf);
- if (elf_end (subelf) != 0)
- error (1, 0, "%s: %s", arfname, elf_errmsg (-1));
- }
-
- arlib_finalize ();
-
- hdestroy ();
-
- /* Create a new, temporary file in the same directory as the
- original file. */
- char tmpfname[strlen (arfname) + 7];
- strcpy (stpcpy (tmpfname, arfname), "XXXXXX");
- int newfd = mkstemp (tmpfname);
- if (unlikely (newfd == -1))
- goto nonew;
-
- /* Create the header. */
- if (unlikely (write_retry (newfd, ARMAG, SARMAG) != SARMAG))
- {
- // XXX Use /prof/self/fd/%d ???
- nonew_unlink:
- unlink (tmpfname);
- if (newfd != -1)
- close (newfd);
- nonew:
- error (0, errno, gettext ("cannot create new file"));
- status = 1;
- goto errout;
- }
-
- /* If the archive is empty that is all we have to do. */
- if (likely (to_copy != NULL))
- {
- /* Write the symbol table or the long file name table or both. */
- if (symtab.symsnamelen != 0
- && ((write_retry (newfd, symtab.symsoff, symtab.symsofflen)
- != (ssize_t) symtab.symsofflen)
- || (write_retry (newfd, symtab.symsname, symtab.symsnamelen)
- != (ssize_t) symtab.symsnamelen)))
- goto nonew_unlink;
-
- if (symtab.longnameslen > sizeof (struct ar_hdr)
- && (write_retry (newfd, symtab.longnames, symtab.longnameslen)
- != (ssize_t) symtab.longnameslen))
- goto nonew_unlink;
-
- /* NULL-terminate the list of files to copy. */
- struct armem *last = to_copy;
- to_copy = to_copy->next;
- last->next = NULL;
-
- off_t start = -1;
- off_t len = -1;
-
- do
- if (write_member (to_copy, &start, &len, elf, cur_off, newfd) != 0)
- goto nonew_unlink;
- while ((to_copy = to_copy->next) != NULL);
-
- /* Write the last part. */
- if (copy_content (elf, newfd, start, len))
- goto nonew_unlink;
- }
-
- /* Set the mode of the new file to the same values the original file
- has. */
- if (fchmod (newfd, st.st_mode & ALLPERMS) != 0
- /* Never complain about fchown failing. */
- || (({asm ("" :: "r" (fchown (newfd, st.st_uid, st.st_gid))); }),
- close (newfd) != 0)
- || (newfd = -1, rename (tmpfname, arfname) != 0))
- goto nonew_unlink;
-
- errout:
-#ifdef DEBUG
- elf_end (elf);
-
- arlib_fini ();
-
- close (fd);
-#endif
-
- not_found (argc, argv, found);
-
- return status;
-}
-
-
-static void
-no0print (bool ofmt, char *buf, int bufsize, long int val)
-{
- char tmpbuf[bufsize + 1];
- snprintf (tmpbuf, sizeof (tmpbuf), ofmt ? "%-*lo" : "%-*ld", bufsize, val);
- memcpy (buf, tmpbuf, bufsize);
-}
-
-
-static int
-do_oper_insert (int oper, const char *arfname, char **argv, int argc,
- const char *member)
-{
- int status = 0;
- Elf *elf;
- struct stat st;
- int fd = open_archive (arfname, O_RDONLY, 0, &elf, &st, oper != oper_move);
-
- /* List of the files we keep. */
- struct armem *all = NULL;
- struct armem *after_memberelem = NULL;
- struct armem **found = alloca (sizeof (*found) * argc);
- memset (found, '\0', sizeof (*found) * argc);
-
- arlib_init ();
-
- /* Initialize early for no_old case. */
- off_t cur_off = SARMAG;
-
- if (fd == -1)
- {
- if (!suppress_create_msg)
- fprintf (stderr, "%s: creating %s\n", AR, arfname);
-
- goto no_old;
- }
-
- /* Store the names of all files from the command line in a hash
- table so that we can match it. Note that when no file name is
- given we are basically doing nothing except recreating the
- index. */
- if (oper != oper_qappend)
- {
- if (hcreate (2 * argc) == 0)
- error (EXIT_FAILURE, errno, gettext ("cannot create hash table"));
-
- for (int cnt = 0; cnt < argc; ++cnt)
- {
- ENTRY entry;
- entry.key = full_path ? argv[cnt] : basename (argv[cnt]);
- entry.data = &argv[cnt];
- if (hsearch (entry, ENTER) == NULL)
- error (EXIT_FAILURE, errno,
- gettext ("cannot insert into hash table"));
- }
- }
-
- /* While iterating over the current content of the archive we must
- determine a number of things: which archive members to keep,
- which are replaced, and where to insert the new members. */
- Elf_Cmd cmd = ELF_C_READ_MMAP;
- Elf *subelf;
- while ((subelf = elf_begin (fd, cmd, elf)) != NULL)
- {
- Elf_Arhdr *arhdr = elf_getarhdr (subelf);
-
- /* Ignore the symbol table and the long file name table here. */
- if (strcmp (arhdr->ar_name, "/") == 0
- || strcmp (arhdr->ar_name, "//") == 0)
- goto next;
-
- struct armem *newp = alloca (sizeof (struct armem));
- newp->old_off = elf_getaroff (subelf);
- newp->size = arhdr->ar_size;
- newp->sec = arhdr->ar_date;
- newp->mem = NULL;
-
- /* Remember long file names. */
- remember_long_name (newp, arhdr->ar_name, strlen (arhdr->ar_name));
-
- /* Check whether this is a file we are looking for. */
- if (oper != oper_qappend)
- {
- /* Check whether this is the member used as the insert point. */
- if (member != NULL && strcmp (arhdr->ar_name, member) == 0)
- {
- /* Note that all == NULL means insert at the beginning. */
- if (ipos == ipos_before)
- after_memberelem = all;
- else
- after_memberelem = newp;
- member = NULL;
- }
-
- ENTRY entry;
- entry.key = arhdr->ar_name;
- ENTRY *res = hsearch (entry, FIND);
- if (res != NULL && found[(char **) res->data - argv] == NULL)
- {
- found[(char **) res->data - argv] = newp;
-
- /* If we insert before or after a certain element move
- all files to a special list. */
- if (unlikely (ipos != ipos_none || oper == oper_move))
- {
- if (after_memberelem == newp)
- /* Since we remove this element even though we should
- insert everything after it, we in fact insert
- everything after the previous element. */
- after_memberelem = all;
-
- goto next;
- }
- }
- }
-
- if (all == NULL)
- all = newp->next = newp;
- else
- {
- newp->next = all->next;
- all = all->next = newp;
- }
-
- next:
- cmd = elf_next (subelf);
- if (elf_end (subelf) != 0)
- error (EXIT_FAILURE, 0, "%s: %s", arfname, elf_errmsg (-1));
- }
-
- if (oper != oper_qappend)
- hdestroy ();
-
- no_old:
- if (member != NULL)
- error (EXIT_FAILURE, 0, gettext ("position member %s not found"),
- member);
-
- if (oper == oper_move)
- {
- /* Make sure all requested elements are found in the archive. */
- for (int cnt = 0; cnt < argc; ++cnt)
- {
- if (found[cnt] == NULL)
- {
- fprintf (stderr, gettext ("%s: no entry %s in archive!\n"),
- AR, argv[cnt]);
- status = 1;
- }
-
- if (verbose)
- printf ("m - %s\n", argv[cnt]);
- }
- }
- else
- {
- /* Open all the new files, get their sizes and add all symbols. */
- for (int cnt = 0; cnt < argc; ++cnt)
- {
- const char *bname = basename (argv[cnt]);
- size_t bnamelen = strlen (bname);
- if (found[cnt] == NULL)
- {
- found[cnt] = alloca (sizeof (struct armem));
- found[cnt]->old_off = -1;
-
- remember_long_name (found[cnt], bname, bnamelen);
- }
-
- struct stat newst;
- Elf *newelf;
- int newfd = open (argv[cnt], O_RDONLY);
- if (newfd == -1)
- {
- error (0, errno, gettext ("cannot open %s"), argv[cnt]);
- status = 1;
- }
- else if (fstat (newfd, &newst) == -1)
- {
- error (0, errno, gettext ("cannot stat %s"), argv[cnt]);
- close (newfd);
- status = 1;
- }
- else if (!S_ISREG (newst.st_mode))
- {
- error (0, errno, gettext ("%s is no regular file"), argv[cnt]);
- close (newfd);
- status = 1;
- }
- else if (update_newer
- && found[cnt]->old_off != -1l
- && found[cnt]->sec > st.st_mtime)
- /* Do nothing, the file in the archive is younger. */
- close (newfd);
- else if ((newelf = elf_begin (newfd, ELF_C_READ_MMAP, NULL))
- == NULL)
- {
- fprintf (stderr,
- gettext ("cannot get ELF descriptor for %s: %s\n"),
- argv[cnt], elf_errmsg (-1));
- status = 1;
- }
- else
- {
- if (verbose)
- printf ("%c - %s\n",
- found[cnt]->old_off == -1l ? 'a' : 'r', argv[cnt]);
-
- found[cnt]->elf = newelf;
- found[cnt]->sec = newst.st_mtime;
- found[cnt]->uid = newst.st_uid;
- found[cnt]->gid = newst.st_gid;
- found[cnt]->mode = newst.st_mode;
- found[cnt]->name = bname;
-
- found[cnt]->mem = elf_rawfile (newelf, &found[cnt]->size);
- if (found[cnt] == NULL || elf_cntl (newelf, ELF_C_FDDONE) != 0)
- error (EXIT_FAILURE, 0, gettext ("cannot read %s: %s"),
- argv[cnt], elf_errmsg (-1));
-
- close (newfd);
-
- if (found[cnt]->old_off != -1l)
- /* Remember long file names. */
- remember_long_name (found[cnt], bname, bnamelen);
- }
- }
- }
-
- if (status != 0)
- {
-#ifdef DEBUG
- elf_end (elf);
-
- arlib_fini ();
-
- close (fd);
-#endif
-
- return status;
- }
-
- /* If we have no entry point so far add at the end. AFTER_MEMBERELEM
- being NULL when adding before an entry means add at the beginning. */
- if (ipos != ipos_before && after_memberelem == NULL)
- after_memberelem = all;
-
- /* Convert the circular list into a normal list first. */
- if (all != NULL)
- {
- struct armem *tmp = all;
- all = all->next;
- tmp->next = NULL;
- }
-
- struct armem *last_added = after_memberelem;
- for (int cnt = 0; cnt < argc; ++cnt)
- if (oper != oper_replace || found[cnt]->old_off == -1)
- {
- if (last_added == NULL)
- {
- found[cnt]->next = all;
- last_added = all = found[cnt];
- }
- else
- {
- found[cnt]->next = last_added->next;
- last_added = last_added->next = found[cnt];
- }
- }
-
- /* Finally compute the offset and add the symbols for the files
- after the insert point. */
- if (likely (all != NULL))
- for (struct armem *memp = all; memp != NULL; memp = memp->next)
- {
- memp->off = cur_off;
-
- if (memp->mem == NULL)
- {
- Elf_Arhdr *arhdr;
- /* Fake initializing arhdr and subelf to keep gcc calm. */
- asm ("" : "=m" (arhdr), "=m" (subelf));
- if (elf_rand (elf, memp->old_off) == 0
- || (subelf = elf_begin (fd, ELF_C_READ_MMAP, elf)) == NULL
- || (arhdr = elf_getarhdr (subelf)) == NULL)
- /* This should never happen since we already looked at the
- archive content. But who knows... */
- error (EXIT_FAILURE, 0, "%s: %s", arfname, elf_errmsg (-1));
-
- arlib_add_symbols (subelf, arfname, arhdr->ar_name, cur_off);
-
- elf_end (subelf);
- }
- else
- arlib_add_symbols (memp->elf, arfname, memp->name, cur_off);
-
- cur_off += (((memp->size + 1) & ~((off_t) 1))
- + sizeof (struct ar_hdr));
- }
-
- /* Now we have all the information for the symbol table and long
- file name table. Construct the final layout. */
- arlib_finalize ();
-
- /* Create a new, temporary file in the same directory as the
- original file. */
- char tmpfname[strlen (arfname) + 7];
- strcpy (stpcpy (tmpfname, arfname), "XXXXXX");
- int newfd;
- if (fd != -1)
- newfd = mkstemp (tmpfname);
- else
- {
- newfd = open (arfname, O_RDWR | O_CREAT | O_EXCL, DEFFILEMODE);
- if (newfd == -1 && errno == EEXIST)
- /* Bah, first the file did not exist, now it does. Restart. */
- return do_oper_insert (oper, arfname, argv, argc, member);
- }
- if (unlikely (newfd == -1))
- goto nonew;
-
- /* Create the header. */
- if (unlikely (write_retry (newfd, ARMAG, SARMAG) != SARMAG))
- {
- nonew_unlink:
- if (fd != -1)
- {
- // XXX Use /prof/self/fd/%d ???
- unlink (tmpfname);
- if (newfd != -1)
- close (newfd);
- }
- nonew:
- error (0, errno, gettext ("cannot create new file"));
- status = 1;
- goto errout;
- }
-
- /* If the new archive is not empty we actually have something to do. */
- if (likely (all != NULL))
- {
- /* Write the symbol table or the long file name table or both. */
- if (symtab.symsnamelen != 0
- && ((write_retry (newfd, symtab.symsoff, symtab.symsofflen)
- != (ssize_t) symtab.symsofflen)
- || (write_retry (newfd, symtab.symsname, symtab.symsnamelen)
- != (ssize_t) symtab.symsnamelen)))
- goto nonew_unlink;
-
- if (symtab.longnameslen > sizeof (struct ar_hdr)
- && (write_retry (newfd, symtab.longnames, symtab.longnameslen)
- != (ssize_t) symtab.longnameslen))
- goto nonew_unlink;
-
- off_t start = -1;
- off_t len = -1;
-
- while (all != NULL)
- {
- if (all->mem != NULL)
- {
- /* This is a new file. If there is anything from the
- archive left to be written do it now. */
- if (start != -1 && copy_content (elf, newfd, start, len))
- goto nonew_unlink;
-
- start = -1;
- len = -1;
-
- /* Create the header. */
- struct ar_hdr arhdr;
- char tmpbuf[sizeof (arhdr.ar_name) + 1];
- if (all->long_name_off == -1)
- {
- size_t namelen = strlen (all->name);
- char *p = mempcpy (arhdr.ar_name, all->name, namelen);
- *p++ = '/';
- memset (p, ' ', sizeof (arhdr.ar_name) - namelen - 1);
- }
- else
- {
- snprintf (tmpbuf, sizeof (arhdr.ar_name) + 1, "/%-*ld",
- (int) sizeof (arhdr.ar_name), all->long_name_off);
- memcpy (arhdr.ar_name, tmpbuf, sizeof (arhdr.ar_name));
- }
-
- no0print (false, arhdr.ar_date, sizeof (arhdr.ar_date),
- all->sec);
- no0print (false, arhdr.ar_uid, sizeof (arhdr.ar_uid), all->uid);
- no0print (false, arhdr.ar_gid, sizeof (arhdr.ar_gid), all->gid);
- no0print (true, arhdr.ar_mode, sizeof (arhdr.ar_mode),
- all->mode);
- no0print (false, arhdr.ar_size, sizeof (arhdr.ar_size),
- all->size);
- memcpy (arhdr.ar_fmag, ARFMAG, sizeof (arhdr.ar_fmag));
-
- if (unlikely (write_retry (newfd, &arhdr, sizeof (arhdr))
- != sizeof (arhdr)))
- goto nonew_unlink;
-
- /* Now the file itself. */
- if (unlikely (write_retry (newfd, all->mem, all->size)
- != (off_t) all->size))
- goto nonew_unlink;
-
- /* Pad the file if its size is odd. */
- if ((all->size & 1) != 0)
- if (unlikely (write_retry (newfd, "\n", 1) != 1))
- goto nonew_unlink;
- }
- else
- {
- /* This is a member from the archive. */
- if (write_member (all, &start, &len, elf, cur_off, newfd)
- != 0)
- goto nonew_unlink;
- }
-
- all = all->next;
- }
-
- /* Write the last part. */
- if (start != -1 && copy_content (elf, newfd, start, len))
- goto nonew_unlink;
- }
-
- /* Set the mode of the new file to the same values the original file
- has. */
- if (fd != -1
- && (fchmod (newfd, st.st_mode & ALLPERMS) != 0
- /* Never complain about fchown failing. */
- || (({asm ("" :: "r" (fchown (newfd, st.st_uid, st.st_gid))); }),
- close (newfd) != 0)
- || (newfd = -1, rename (tmpfname, arfname) != 0)))
- goto nonew_unlink;
-
- errout:
-#ifdef DEBUG
- elf_end (elf);
-
- arlib_fini ();
-
- close (fd);
-#endif
-
- return status;
-}
-
-
-#include "debugpred.h"
diff --git a/src/arlib.c b/src/arlib.c
deleted file mode 100644
index af98454..0000000
--- a/src/arlib.c
+++ /dev/null
@@ -1,279 +0,0 @@
-/* Functions to handle creation of Linux archives.
- Copyright (C) 2007 Red Hat, Inc.
- Written by Ulrich Drepper <drepper@redhat.com>, 2007.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <error.h>
-#include <gelf.h>
-#include <libintl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-
-#include <system.h>
-
-#include "arlib.h"
-
-
-/* The one symbol table we hanble. */
-struct arlib_symtab symtab;
-
-
-/* Initialize ARLIB_SYMTAB structure. */
-void
-arlib_init (void)
-{
-#define obstack_chunk_alloc xmalloc
-#define obstack_chunk_free free
- obstack_init (&symtab.symsoffob);
- obstack_init (&symtab.symsnameob);
- obstack_init (&symtab.longnamesob);
-
- /* We add the archive header here as well, that avoids allocating
- another memory block. */
- struct ar_hdr ar_hdr;
- memcpy (ar_hdr.ar_name, "/ ", sizeof (ar_hdr.ar_name));
- /* Using snprintf here has a problem: the call always wants to add a
- NUL byte. We could use a trick whereby we specify the target
- buffer size longer than it is and this would not actually fail,
- since all the fields are consecutive and we fill them in in
- sequence (i.e., the NUL byte gets overwritten). But
- _FORTIFY_SOURCE=2 would not let us play these games. Therefore
- we play it safe. */
- char tmpbuf[sizeof (ar_hdr.ar_date) + 1];
- memcpy (ar_hdr.ar_date, tmpbuf,
- snprintf (tmpbuf, sizeof (tmpbuf), "%-*lld",
- (int) sizeof (ar_hdr.ar_date),
- (long long int) time (NULL)));
- assert ((sizeof (struct ar_hdr) % sizeof (uint32_t)) == 0);
-
- /* Note the string for the ar_uid and ar_gid cases is longer than
- necessary. This does not matter since we copy only as much as
- necessary but it helps the compiler to use the same string for
- the ar_mode case. */
- memcpy (ar_hdr.ar_uid, "0 ", sizeof (ar_hdr.ar_uid));
- memcpy (ar_hdr.ar_gid, "0 ", sizeof (ar_hdr.ar_gid));
- memcpy (ar_hdr.ar_mode, "0 ", sizeof (ar_hdr.ar_mode));
- memcpy (ar_hdr.ar_fmag, ARFMAG, sizeof (ar_hdr.ar_fmag));
-
- /* Add the archive header to the file content. */
- obstack_grow (&symtab.symsoffob, &ar_hdr, sizeof (ar_hdr));
-
- /* The first word in the offset table specifies the size. Create
- such an entry now. The real value will be filled-in later. For
- all supported platforms the following is true. */
- assert (sizeof (uint32_t) == sizeof (int));
- obstack_int_grow (&symtab.symsoffob, 0);
-
- /* The long name obstack also gets its archive header. As above,
- some of the input strings are longer than required but we only
- copy the necessary part. */
- memcpy (ar_hdr.ar_name, "// ", sizeof (ar_hdr.ar_name));
- memcpy (ar_hdr.ar_date, " ", sizeof (ar_hdr.ar_date));
- memcpy (ar_hdr.ar_uid, " ", sizeof (ar_hdr.ar_uid));
- memcpy (ar_hdr.ar_gid, " ", sizeof (ar_hdr.ar_gid));
- memcpy (ar_hdr.ar_mode, " ", sizeof (ar_hdr.ar_mode));
- /* The ar_size field will be filled in later and ar_fmag is already OK. */
- obstack_grow (&symtab.longnamesob, &ar_hdr, sizeof (ar_hdr));
-
- /* All other members are zero. */
- symtab.symsofflen = 0;
- symtab.symsoff = NULL;
- symtab.symsnamelen = 0;
- symtab.symsname = NULL;
-}
-
-
-/* Finalize ARLIB_SYMTAB content. */
-void
-arlib_finalize (void)
-{
- char tmpbuf[sizeof (((struct ar_hdr *) NULL)->ar_size) + 1];
-
- symtab.longnameslen = obstack_object_size (&symtab.longnamesob);
- if (symtab.longnameslen != sizeof (struct ar_hdr))
- {
- if ((symtab.longnameslen & 1) != 0)
- {
- /* Add one more byte to make length even. */
- obstack_grow (&symtab.longnamesob, "\n", 1);
- ++symtab.longnameslen;
- }
-
- symtab.longnames = obstack_finish (&symtab.longnamesob);
-
- memcpy (&((struct ar_hdr *) symtab.longnames)->ar_size, tmpbuf,
- snprintf (tmpbuf, sizeof (tmpbuf), "%-*zu",
- (int) sizeof (((struct ar_hdr *) NULL)->ar_size),
- symtab.longnameslen - sizeof (struct ar_hdr)));
- }
-
- symtab.symsofflen = obstack_object_size (&symtab.symsoffob);
- assert (symtab.symsofflen % sizeof (uint32_t) == 0);
- if (symtab.symsofflen != 0)
- {
- symtab.symsoff = (uint32_t *) obstack_finish (&symtab.symsoffob);
-
- /* Fill in the number of offsets now. */
- symtab.symsoff[AR_HDR_WORDS] = le_bswap_32 ((symtab.symsofflen
- - sizeof (struct ar_hdr))
- / sizeof (uint32_t) - 1);
- }
-
- symtab.symsnamelen = obstack_object_size (&symtab.symsnameob);
- if ((symtab.symsnamelen & 1) != 0)
- {
- /* Add one more NUL byte to make length even. */
- obstack_grow (&symtab.symsnameob, "", 1);
- ++symtab.symsnamelen;
- }
- symtab.symsname = obstack_finish (&symtab.symsnameob);
-
- /* Determine correction for the offsets in the symbol table. */
- off_t disp = 0;
- if (symtab.symsnamelen > 0)
- disp = symtab.symsofflen + symtab.symsnamelen;
- if (symtab.longnameslen > sizeof (struct ar_hdr))
- disp += symtab.longnameslen;
-
- if (disp != 0 && symtab.symsoff != NULL)
- {
- uint32_t nsyms = le_bswap_32 (symtab.symsoff[AR_HDR_WORDS]);
-
- for (uint32_t cnt = 1; cnt <= nsyms; ++cnt)
- {
- uint32_t val = le_bswap_32 (symtab.symsoff[AR_HDR_WORDS + cnt]);
- val += disp;
- symtab.symsoff[AR_HDR_WORDS + cnt] = le_bswap_32 (val);
- }
- }
-
- /* See comment for ar_date above. */
- memcpy (&((struct ar_hdr *) symtab.symsoff)->ar_size, tmpbuf,
- snprintf (tmpbuf, sizeof (tmpbuf), "%-*zu",
- (int) sizeof (((struct ar_hdr *) NULL)->ar_size),
- symtab.symsofflen + symtab.symsnamelen
- - sizeof (struct ar_hdr)));
-}
-
-
-/* Free resources for ARLIB_SYMTAB. */
-void
-arlib_fini (void)
-{
- obstack_free (&symtab.symsoffob, NULL);
- obstack_free (&symtab.symsnameob, NULL);
- obstack_free (&symtab.longnamesob, NULL);
-}
-
-
-/* Add name a file offset of a symbol. */
-void
-arlib_add_symref (const char *symname, off_t symoff)
-{
- /* For all supported platforms the following is true. */
- assert (sizeof (uint32_t) == sizeof (int));
- obstack_int_grow (&symtab.symsoffob, (int) le_bswap_32 (symoff));
-
- size_t symname_len = strlen (symname) + 1;
- obstack_grow (&symtab.symsnameob, symname, symname_len);
-}
-
-
-/* Add symbols from ELF with value OFFSET to the symbol table SYMTAB. */
-void
-arlib_add_symbols (Elf *elf, const char *arfname, const char *membername,
- off_t off)
-{
- if (sizeof (off) > sizeof (uint32_t) && off > ~((uint32_t) 0))
- /* The archive is too big. */
- error (EXIT_FAILURE, 0, gettext ("the archive '%s' is too large"),
- arfname);
-
- /* We only add symbol tables for ELF files. It makes not much sense
- to add symbols from executables but we do so for compatibility.
- For DSOs and executables we use the dynamic symbol table, for
- relocatable files all the DT_SYMTAB tables. */
- if (elf_kind (elf) != ELF_K_ELF)
- return;
-
- GElf_Ehdr ehdr_mem;
- GElf_Ehdr *ehdr = gelf_getehdr (elf, &ehdr_mem);
- if (ehdr == NULL)
- error (EXIT_FAILURE, 0, gettext ("cannot read ELF header of %s(%s): %s"),
- arfname, membername, elf_errmsg (-1));
-
- GElf_Word symtype;
- if (ehdr->e_type == ET_REL)
- symtype = SHT_SYMTAB;
- else if (ehdr->e_type == ET_EXEC || ehdr->e_type == ET_DYN)
- symtype = SHT_DYNSYM;
- else
- /* We do not handle that type. */
- return;
-
- /* Iterate over all sections. */
- Elf_Scn *scn = NULL;
- while ((scn = elf_nextscn (elf, scn)) != NULL)
- {
- /* Get the section header. */
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
- if (shdr == NULL)
- continue;
-
- if (shdr->sh_type != symtype)
- continue;
-
- Elf_Data *data = elf_getdata (scn, NULL);
- if (data == NULL)
- continue;
-
- int nsyms = shdr->sh_size / shdr->sh_entsize;
- for (int ndx = shdr->sh_info; ndx < nsyms; ++ndx)
- {
- GElf_Sym sym_mem;
- GElf_Sym *sym = gelf_getsym (data, ndx, &sym_mem);
- if (sym == NULL)
- continue;
-
- /* Ignore undefined symbols. */
- if (sym->st_shndx == SHN_UNDEF)
- continue;
-
- /* Use this symbol. */
- const char *symname = elf_strptr (elf, shdr->sh_link, sym->st_name);
- if (symname != NULL)
- arlib_add_symref (symname, off);
- }
-
- /* Only relocatable files can have more than one symbol table. */
- if (ehdr->e_type != ET_REL)
- break;
- }
-}
diff --git a/src/arlib.h b/src/arlib.h
deleted file mode 100644
index fd26d24..0000000
--- a/src/arlib.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/* Copyright (C) 2007 Red Hat, Inc.
- Written by Ulrich Drepper <drepper@redhat.com>, 2007.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifndef _ARLIB_H
-#define _ARLIB_H 1
-
-#include <ar.h>
-#include <byteswap.h>
-#include <endian.h>
-#include <libelf.h>
-#include <obstack.h>
-#include <stddef.h>
-#include <stdint.h>
-#include <sys/types.h>
-
-
-/* Maximum length of a file name that fits directly into the ar header.
- We cannot use the final byte since a / goes there. */
-#define MAX_AR_NAME_LEN (sizeof (((struct ar_hdr *) NULL)->ar_name) - 1)
-
-
-/* Words matching in size to archive header. */
-#define AR_HDR_WORDS (sizeof (struct ar_hdr) / sizeof (uint32_t))
-
-
-#if __BYTE_ORDER == __LITTLE_ENDIAN
-# define le_bswap_32(val) bswap_32 (val)
-#else
-# define le_bswap_32(val) (val)
-#endif
-
-
-/* Symbol table type. */
-struct arlib_symtab
-{
- /* Symbol table handling. */
- struct obstack symsoffob;
- struct obstack symsnameob;
- size_t symsofflen;
- uint32_t *symsoff;
- size_t symsnamelen;
- char *symsname;
-
- /* Long filename handling. */
- struct obstack longnamesob;
- size_t longnameslen;
- char *longnames;
-};
-
-
-/* Global variable with symbol table. */
-extern struct arlib_symtab symtab;
-
-
-/* Initialize ARLIB_SYMTAB structure. */
-extern void arlib_init (void);
-
-/* Finalize ARLIB_SYMTAB content. */
-extern void arlib_finalize (void);
-
-/* Free resources for ARLIB_SYMTAB. */
-extern void arlib_fini (void);
-
-/* Add symbols from ELF with value OFFSET to the symbol table SYMTAB. */
-extern void arlib_add_symbols (Elf *elf, const char *arfname,
- const char *membername, off_t off);
-
-/* Add name a file offset of a symbol. */
-extern void arlib_add_symref (const char *symname, off_t symoff);
-
-/* Add long file name FILENAME of length FILENAMELEN to the symbol table
- SYMTAB. Return the offset into the long file name table. */
-extern long int arlib_add_long_name (const char *filename, size_t filenamelen);
-
-#endif /* arlib.h */
diff --git a/src/arlib2.c b/src/arlib2.c
deleted file mode 100644
index 7098fec..0000000
--- a/src/arlib2.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Functions to handle creation of Linux archives.
- Copyright (C) 2007 Red Hat, Inc.
- Written by Ulrich Drepper <drepper@redhat.com>, 2007.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <error.h>
-#include <libintl.h>
-#include <limits.h>
-#include <string.h>
-#include <sys/param.h>
-
-#include "arlib.h"
-
-
-/* Add long file name FILENAME of length FILENAMELEN to the symbol table
- SYMTAB. Return the offset into the long file name table. */
-long int
-arlib_add_long_name (const char *filename, size_t filenamelen)
-{
- size_t size = obstack_object_size (&symtab.longnamesob);
-
- obstack_grow (&symtab.longnamesob, filename, filenamelen);
- obstack_grow (&symtab.longnamesob, "/\n", 2);
-
- return size - sizeof (struct ar_hdr);
-}
diff --git a/src/debugpred.h b/src/debugpred.h
deleted file mode 100644
index 867f4ac..0000000
--- a/src/debugpred.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Support to debug branch prediction.
- Copyright (C) 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2007.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <stdio.h>
-
-#if DEBUGPRED
-extern const unsigned long int __start_predict_data;
-extern const unsigned long int __stop_predict_data;
-extern const unsigned long int __start_predict_line;
-extern const char *__start_predict_file;
-
-static void
-__attribute__ ((destructor))
-predprint (void)
-{
- const unsigned long int *s = &__start_predict_data;
- const unsigned long int *e = &__stop_predict_data;
- const unsigned long int *sl = &__start_predict_line;
- const char **sf = &__start_predict_file;
- while (s < e)
- {
- if (s[0] != 0 || s[1] != 0)
- printf ("%s:%lu: wrong=%lu, correct=%lu%s\n", *sf, *sl, s[0], s[1],
- s[0] > s[1] ? " <==== WARNING" : "");
- ++sl;
- ++sf;
- s += 2;
- }
-}
-#endif
diff --git a/src/elf32-i386.script b/src/elf32-i386.script
deleted file mode 100644
index a6cfffa..0000000
--- a/src/elf32-i386.script
+++ /dev/null
@@ -1,229 +0,0 @@
-ENTRY(_start);
-
-SEARCH_DIR(/lib);
-SEARCH_DIR(/usr/lib);
-SEARCH_DIR(/usr/local/lib);
-SEARCH_DIR(/usr/i686-pc-linux-gnu/lib);
-
-INTERP(/lib/ld-linux.so.2);
-
-PAGESIZE(4k);
-
-SEGMENT [RX]
-{
-#ifdef SHARED
- . = SIZEOF_HEADERS;
-#else
- . = 0x08048000 + SIZEOF_HEADERS;
-#endif
-
- .interp;
- .note.ABI-tag;
- .note.gnu.build-id;
- .hash;
- .gnu.hash;
- .dynsym;
- .dynstr;
- .gnu.version;
- .gnu.version_d;
- .gnu.version_r;
- .rel.dyn;
- .rel.plt;
- .init { KEEP (*(.init)) }
- .plt;
- .text
- {
- *(.text)
- *(.text.*)
- *(.stub)
- *(.gnu.warning)
- *(.gnu.linkonce.t.*)
- }
- .fini { KEEP (*(.fini)) }
- PROVIDE (__etext = .);
- PROVIDE (_etext = .);
- PROVIDE (etext = .);
- .rodata
- {
- *(.rodata)
- *(.rodata.*)
- *(.gnu.linkonce.r.*)
- }
- .rodata1;
- .eh_frame_hdr;
- . = ALIGN(32 / 8);
- PROVIDE (__preinit_array_start = .);
- .preinit_array
- {
- *(.preinit_array)
- }
- PROVIDE (__preinit_array_end = .);
- PROVIDE (__init_array_start = .);
- .init_array
- {
- *(.init_array)
- }
- PROVIDE (__init_array_end = .);
- PROVIDE (__fini_array_start = .);
- .fini_array
- {
- *(.fini_array)
- }
- PROVIDE (__fini_array_end = .);
-}
-
-SEGMENT [RW]
-{
- .sdata2
- {
- *(.sdata2)
- *(.sdata2.*)
- *(.gnu.linkonce.s2.*)
- }
- .sbss2
- {
- *(.sbss2)
- *(.sbss2.*)
- *(.gnu.linkonce.sb2.*)
- }
- /* Adjust the address for the data segment. We want to adjust up to
- the same address within the page on the next page up. */
- . = ALIGN(PAGESIZE) + (. & (PAGESIZE - 1));
- .eh_frame
- {
- KEEP (*(.eh_frame))
- }
- .gcc_except_table;
- .tdata
- {
- *(.tdata)
- *(.tdata.*)
- *(.gnu.linkone.td.*)
- }
- .tbss
- {
- *(.tbss)
- *(.tbss.*)
- *(.gnu.linkone.tb.*)
- *(.tcommon)
- }
- .ctors
- {
- /* gcc uses crtbegin.o to find the start of
- the constructors, so we make sure it is
- first. Because this is a wildcard, it
- doesn't matter if the user does not
- actually link against crtbegin.o; the
- linker won't look for a file to match a
- wildcard. The wildcard also means that it
- doesn't matter which directory crtbegin.o
- is in. */
- KEEP (*crtbegin.o(.ctors))
- /* We don't want to include the .ctor section from
- from the crtend.o file until after the sorted ctors.
- The .ctor section from the crtend file contains the
- end of ctors marker and it must be last */
- KEEP (*(EXCLUDE_FILE (*crtend.o ) .ctors))
- KEEP (*(SORT(.ctors.*)))
- KEEP (*(.ctors))
- }
- .dtors
- {
- KEEP (*crtbegin.o(.dtors))
- KEEP (*(EXCLUDE_FILE (*crtend.o ) .dtors))
- KEEP (*(SORT(.dtors.*)))
- KEEP (*(.dtors))
- }
- .jcr;
- .dynamic;
- .got;
- .got.plt;
- .data
- {
- *(.data)
- *(.data.*)
- *(.gnu.linkonce.d.*)
- }
- /* We want the small data sections together, so single-instruction offsets
- can access them all, and initialized data all before uninitialized, so
- we can shorten the on-disk segment size. */
- .data1;
- .sdata
- {
- *(.sdata)
- *(.sdata.*)
- *(.gnu.linkonce.s.*)
- }
- _edata = .;
- PROVIDE (edata = .);
- __bss_start = .;
- .sbss
- {
- PROVIDE (__sbss_start = .);
- PROVIDE (___sbss_start = .);
- *(.dynsbss)
- *(.sbss)
- *(.sbss.*)
- *(.gnu.linkonce.sb.*)
- *(.scommon)
- PROVIDE (__sbss_end = .);
- PROVIDE (___sbss_end = .);
- }
- .bss
- {
- *(.dynbss)
- *(.bss)
- *(.bss.*)
- *(.gnu.linkonce.b.*)
- *(COMMON)
- /* Align here to ensure that the .bss section occupies space up to
- _end. Align after .bss to ensure correct alignment even if the
- .bss section disappears because there are no input sections. */
- . = ALIGN(32 / 8);
- }
- . = ALIGN(32 / 8);
- _end = .;
- PROVIDE (end = .);
-}
-
-SEGMENT []
-{
- /* Stabs debugging sections. */
- .stab;
- .stabstr;
- .stab.excl;
- .stab.exclstr;
- .stab.index;
- .stab.indexstr;
- .comment;
- /* DWARF debug sections.
- Symbols in the DWARF debugging sections are relative to the beginning
- of the section so we begin them at 0. */
- /* DWARF 1 */
- .debug;
- .line;
- /* GNU DWARF 1 extensions */
- .debug_srcinfo;
- .debug_sfnames;
- /* DWARF 1.1 and DWARF 2 */
- .debug_aranges;
- .debug_pubnames;
- /* DWARF 2 */
- .debug_info
- {
- *(.debug_info)
- *(.gnu.linkonce.wi.*)
- }
- .debug_abbrev;
- .debug_line;
- .debug_frame;
- .debug_str;
- .debug_loc;
- .debug_macinfo;
- /* SGI/MIPS DWARF 2 extensions */
- .debug_weaknames;
- .debug_funcnames;
- .debug_typenames;
- .debug_varnames;
- /* These must appear regardless of . */
-}
diff --git a/src/elfcmp.c b/src/elfcmp.c
deleted file mode 100644
index 0e134df..0000000
--- a/src/elfcmp.c
+++ /dev/null
@@ -1,751 +0,0 @@
-/* Compare relevant content of two ELF files.
- Copyright (C) 2005, 2006, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <argp.h>
-#include <assert.h>
-#include <errno.h>
-#include <error.h>
-#include <fcntl.h>
-#include <locale.h>
-#include <libintl.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "../libelf/elf-knowledge.h"
-#include "../libebl/libeblP.h"
-
-
-/* Prototypes of local functions. */
-static Elf *open_file (const char *fname, int *fdp, Ebl **eblp);
-static bool search_for_copy_reloc (Ebl *ebl, size_t scnndx, int symndx);
-static int regioncompare (const void *p1, const void *p2);
-
-
-/* Name and version of program. */
-static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
-
-/* Bug report address. */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
-
-/* Values for the parameters which have no short form. */
-#define OPT_GAPS 0x100
-#define OPT_HASH_INEXACT 0x101
-
-/* Definitions of arguments for argp functions. */
-static const struct argp_option options[] =
-{
- { NULL, 0, NULL, 0, N_("Control options:"), 0 },
- { "gaps", OPT_GAPS, "ACTION", 0, N_("Control treatment of gaps in loadable segments [ignore|match] (default: ignore)"), 0 },
- { "hash-inexact", OPT_HASH_INEXACT, NULL, 0,
- N_("Ignore permutation of buckets in SHT_HASH section"), 0 },
- { "quiet", 'q', NULL, 0, N_("Output nothing; yield exit status only"), 0 },
-
- { NULL, 0, NULL, 0, N_("Miscellaneous:"), 0 },
- { NULL, 0, NULL, 0, NULL, 0 }
-};
-
-/* Short description of program. */
-static const char doc[] = N_("\
-Compare relevant parts of two ELF files for equality.");
-
-/* Strings for arguments in help texts. */
-static const char args_doc[] = N_("FILE1 FILE2");
-
-/* Prototype for option handler. */
-static error_t parse_opt (int key, char *arg, struct argp_state *state);
-
-/* Data structure to communicate with argp functions. */
-static struct argp argp =
-{
- options, parse_opt, args_doc, doc, NULL, NULL, NULL
-};
-
-
-/* How to treat gaps in loadable segments. */
-static enum
- {
- gaps_ignore = 0,
- gaps_match
- }
- gaps;
-
-/* Structure to hold information about used regions. */
-struct region
-{
- GElf_Addr from;
- GElf_Addr to;
- struct region *next;
-};
-
-/* Nonzero if only exit status is wanted. */
-static bool quiet;
-
-/* True iff SHT_HASH treatment should be generous. */
-static bool hash_inexact;
-
-static bool hash_content_equivalent (size_t entsize, Elf_Data *, Elf_Data *);
-
-
-int
-main (int argc, char *argv[])
-{
- /* Set locale. */
- (void) setlocale (LC_ALL, "");
-
- /* Make sure the message catalog can be found. */
- (void) bindtextdomain (PACKAGE_TARNAME, LOCALEDIR);
-
- /* Initialize the message catalog. */
- (void) textdomain (PACKAGE_TARNAME);
-
- /* Parse and process arguments. */
- int remaining;
- (void) argp_parse (&argp, argc, argv, 0, &remaining, NULL);
-
- /* We expect exactly two non-option parameters. */
- if (unlikely (remaining + 2 != argc))
- {
- fputs (gettext ("Invalid number of parameters.\n"), stderr);
- argp_help (&argp, stderr, ARGP_HELP_SEE, program_invocation_short_name);
- exit (1);
- }
-
- /* Comparing the files is done in two phases:
- 1. compare all sections. Sections which are irrelevant (i.e., if
- strip would remove them) are ignored. Some section types are
- handled special.
- 2. all parts of the loadable segments which are not parts of any
- section is compared according to the rules of the --gaps option.
- */
- int result = 0;
- elf_version (EV_CURRENT);
-
- const char *const fname1 = argv[remaining];
- int fd1;
- Ebl *ebl1;
- Elf *elf1 = open_file (fname1, &fd1, &ebl1);
-
- const char *const fname2 = argv[remaining + 1];
- int fd2;
- Ebl *ebl2;
- Elf *elf2 = open_file (fname2, &fd2, &ebl2);
-
- GElf_Ehdr ehdr1_mem;
- GElf_Ehdr *ehdr1 = gelf_getehdr (elf1, &ehdr1_mem);
- if (ehdr1 == NULL)
- error (EXIT_FAILURE, 0, gettext ("cannot get ELF header of '%s': %s"),
- fname1, elf_errmsg (-1));
- GElf_Ehdr ehdr2_mem;
- GElf_Ehdr *ehdr2 = gelf_getehdr (elf2, &ehdr2_mem);
- if (ehdr2 == NULL)
- error (EXIT_FAILURE, 0, gettext ("cannot get ELF header of '%s': %s"),
- fname2, elf_errmsg (-1));
-
- /* Compare the ELF headers. */
- if (unlikely (memcmp (ehdr1->e_ident, ehdr2->e_ident, EI_NIDENT) != 0
- || ehdr1->e_type != ehdr2->e_type
- || ehdr1->e_machine != ehdr2->e_machine
- || ehdr1->e_version != ehdr2->e_version
- || ehdr1->e_entry != ehdr2->e_entry
- || ehdr1->e_phoff != ehdr2->e_phoff
- || ehdr1->e_flags != ehdr2->e_flags
- || ehdr1->e_ehsize != ehdr2->e_ehsize
- || ehdr1->e_phentsize != ehdr2->e_phentsize
- || ehdr1->e_phnum != ehdr2->e_phnum
- || ehdr1->e_shentsize != ehdr2->e_shentsize))
- {
- if (! quiet)
- error (0, 0, gettext ("%s %s diff: ELF header"), fname1, fname2);
- result = 1;
- goto out;
- }
-
- /* Iterate over all sections. We expect the sections in the two
- files to match exactly. */
- Elf_Scn *scn1 = NULL;
- Elf_Scn *scn2 = NULL;
- struct region *regions = NULL;
- size_t nregions = 0;
- while (1)
- {
- GElf_Shdr shdr1_mem;
- GElf_Shdr *shdr1;
- const char *sname1 = NULL;
- do
- {
- scn1 = elf_nextscn (elf1, scn1);
- shdr1 = gelf_getshdr (scn1, &shdr1_mem);
- if (shdr1 != NULL)
- sname1 = elf_strptr (elf1, ehdr1->e_shstrndx, shdr1->sh_name);
- }
- while (scn1 != NULL
- && ebl_section_strip_p (ebl1, ehdr1, shdr1, sname1, true, false));
-
- GElf_Shdr shdr2_mem;
- GElf_Shdr *shdr2;
- const char *sname2 = NULL;
- do
- {
- scn2 = elf_nextscn (elf2, scn2);
- shdr2 = gelf_getshdr (scn2, &shdr2_mem);
- if (shdr2 != NULL)
- sname2 = elf_strptr (elf2, ehdr2->e_shstrndx, shdr2->sh_name);
- }
- while (scn2 != NULL
- && ebl_section_strip_p (ebl2, ehdr2, shdr2, sname2, true, false));
-
- if (scn1 == NULL || scn2 == NULL)
- break;
-
- if (gaps != gaps_ignore && (shdr1->sh_flags & SHF_ALLOC) != 0)
- {
- struct region *newp = (struct region *) alloca (sizeof (*newp));
- newp->from = shdr1->sh_offset;
- newp->to = shdr1->sh_offset + shdr1->sh_size;
- newp->next = regions;
- regions = newp;
-
- ++nregions;
- }
-
- /* Compare the headers. We allow the name to be at a different
- location. */
- if (unlikely (strcmp (sname1, sname2) != 0))
- {
- header_mismatch:
- error (0, 0, gettext ("%s %s differ: section header"),
- fname1, fname2);
- result = 1;
- goto out;
- }
-
- /* We ignore certain sections. */
- if (strcmp (sname1, ".gnu_debuglink") == 0
- || strcmp (sname1, ".gnu.prelink_undo") == 0)
- continue;
-
- if (shdr1->sh_type != shdr2->sh_type
- // XXX Any flags which should be ignored?
- || shdr1->sh_flags != shdr2->sh_flags
- || shdr1->sh_addr != shdr2->sh_addr
- || (shdr1->sh_offset != shdr2->sh_offset
- && (shdr1->sh_flags & SHF_ALLOC)
- && ehdr1->e_type != ET_REL)
- || shdr1->sh_size != shdr2->sh_size
- || shdr1->sh_link != shdr2->sh_link
- || shdr1->sh_info != shdr2->sh_info
- || shdr1->sh_addralign != shdr2->sh_addralign
- || shdr1->sh_entsize != shdr2->sh_entsize)
- goto header_mismatch;
-
- Elf_Data *data1 = elf_getdata (scn1, NULL);
- if (data1 == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("cannot get content of section %zu in '%s': %s"),
- elf_ndxscn (scn1), fname1, elf_errmsg (-1));
-
- Elf_Data *data2 = elf_getdata (scn2, NULL);
- if (data2 == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("cannot get content of section %zu in '%s': %s"),
- elf_ndxscn (scn2), fname2, elf_errmsg (-1));
-
- switch (shdr1->sh_type)
- {
- case SHT_DYNSYM:
- case SHT_SYMTAB:
- /* Iterate over the symbol table. We ignore the st_size
- value of undefined symbols. */
- for (int ndx = 0; ndx < (int) (shdr1->sh_size / shdr1->sh_entsize);
- ++ndx)
- {
- GElf_Sym sym1_mem;
- GElf_Sym *sym1 = gelf_getsym (data1, ndx, &sym1_mem);
- if (sym1 == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("cannot get symbol in '%s': %s"),
- fname1, elf_errmsg (-1));
- GElf_Sym sym2_mem;
- GElf_Sym *sym2 = gelf_getsym (data2, ndx, &sym2_mem);
- if (sym2 == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("cannot get symbol in '%s': %s"),
- fname2, elf_errmsg (-1));
-
- const char *name1 = elf_strptr (elf1, shdr1->sh_link,
- sym1->st_name);
- const char *name2 = elf_strptr (elf2, shdr2->sh_link,
- sym2->st_name);
- if (unlikely (strcmp (name1, name2) != 0
- || sym1->st_value != sym2->st_value
- || (sym1->st_size != sym2->st_size
- && sym1->st_shndx != SHN_UNDEF)
- || sym1->st_info != sym2->st_info
- || sym1->st_other != sym2->st_other
- || sym1->st_shndx != sym1->st_shndx))
- {
- // XXX Do we want to allow reordered symbol tables?
- symtab_mismatch:
- if (! quiet)
- {
- if (elf_ndxscn (scn1) == elf_ndxscn (scn2))
- error (0, 0,
- gettext ("%s %s differ: symbol table [%zu]"),
- fname1, fname2, elf_ndxscn (scn1));
- else
- error (0, 0, gettext ("\
-%s %s differ: symbol table [%zu,%zu]"),
- fname1, fname2, elf_ndxscn (scn1),
- elf_ndxscn (scn2));
- }
- result = 1;
- goto out;
- }
-
- if (sym1->st_shndx == SHN_UNDEF
- && sym1->st_size != sym2->st_size)
- {
- /* The size of the symbol in the object defining it
- might have changed. That is OK unless the symbol
- is used in a copy relocation. Look over the
- sections in both files and determine which
- relocation section uses this symbol table
- section. Then look through the relocations to
- see whether any copy relocation references this
- symbol. */
- if (search_for_copy_reloc (ebl1, elf_ndxscn (scn1), ndx)
- || search_for_copy_reloc (ebl2, elf_ndxscn (scn2), ndx))
- goto symtab_mismatch;
- }
- }
- break;
-
- default:
- /* Compare the section content byte for byte. */
- assert (shdr1->sh_type == SHT_NOBITS
- || (data1->d_buf != NULL || data1->d_size == 0));
- assert (shdr2->sh_type == SHT_NOBITS
- || (data2->d_buf != NULL || data1->d_size == 0));
-
- if (unlikely (data1->d_size != data2->d_size
- || (shdr1->sh_type != SHT_NOBITS
- && memcmp (data1->d_buf, data2->d_buf,
- data1->d_size) != 0)))
- {
- if (hash_inexact
- && shdr1->sh_type == SHT_HASH
- && data1->d_size == data2->d_size
- && hash_content_equivalent (shdr1->sh_entsize, data1, data2))
- break;
-
- if (! quiet)
- {
- if (elf_ndxscn (scn1) == elf_ndxscn (scn2))
- error (0, 0, gettext ("\
-%s %s differ: section [%zu] '%s' content"),
- fname1, fname2, elf_ndxscn (scn1), sname1);
- else
- error (0, 0, gettext ("\
-%s %s differ: section [%zu,%zu] '%s' content"),
- fname1, fname2, elf_ndxscn (scn1),
- elf_ndxscn (scn2), sname1);
- }
- result = 1;
- goto out;
- }
- break;
- }
- }
-
- if (unlikely (scn1 != scn2))
- {
- if (! quiet)
- error (0, 0,
- gettext ("%s %s differ: unequal amount of important sections"),
- fname1, fname2);
- result = 1;
- goto out;
- }
-
- /* We we look at gaps, create artificial ones for the parts of the
- program which we are not in sections. */
- struct region ehdr_region;
- struct region phdr_region;
- if (gaps != gaps_ignore)
- {
- ehdr_region.from = 0;
- ehdr_region.to = ehdr1->e_ehsize;
- ehdr_region.next = &phdr_region;
-
- phdr_region.from = ehdr1->e_phoff;
- phdr_region.to = ehdr1->e_phoff + ehdr1->e_phnum * ehdr1->e_phentsize;
- phdr_region.next = regions;
-
- regions = &ehdr_region;
- nregions += 2;
- }
-
- /* If we need to look at the gaps we need access to the file data. */
- char *raw1 = NULL;
- size_t size1 = 0;
- char *raw2 = NULL;
- size_t size2 = 0;
- struct region *regionsarr = alloca (nregions * sizeof (struct region));
- if (gaps != gaps_ignore)
- {
- raw1 = elf_rawfile (elf1, &size1);
- if (raw1 == NULL )
- error (EXIT_FAILURE, 0, gettext ("cannot load data of '%s': %s"),
- fname1, elf_errmsg (-1));
-
- raw2 = elf_rawfile (elf2, &size2);
- if (raw2 == NULL )
- error (EXIT_FAILURE, 0, gettext ("cannot load data of '%s': %s"),
- fname2, elf_errmsg (-1));
-
- for (size_t cnt = 0; cnt < nregions; ++cnt)
- {
- regionsarr[cnt] = *regions;
- regions = regions->next;
- }
-
- qsort (regionsarr, nregions, sizeof (regionsarr[0]), regioncompare);
- }
-
- /* Compare the program header tables. */
- for (int ndx = 0; ndx < ehdr1->e_phnum; ++ndx)
- {
- GElf_Phdr phdr1_mem;
- GElf_Phdr *phdr1 = gelf_getphdr (elf1, ndx, &phdr1_mem);
- if (ehdr1 == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("cannot get program header entry %d of '%s': %s"),
- ndx, fname1, elf_errmsg (-1));
- GElf_Phdr phdr2_mem;
- GElf_Phdr *phdr2 = gelf_getphdr (elf2, ndx, &phdr2_mem);
- if (ehdr2 == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("cannot get program header entry %d of '%s': %s"),
- ndx, fname2, elf_errmsg (-1));
-
- if (unlikely (memcmp (phdr1, phdr2, sizeof (GElf_Phdr)) != 0))
- {
- if (! quiet)
- error (0, 0, gettext ("%s %s differ: program header %d"),
- fname1, fname2, ndx);
- result = 1;
- goto out;
- }
-
- if (gaps != gaps_ignore && phdr1->p_type == PT_LOAD)
- {
- size_t cnt = 0;
- while (cnt < nregions && regionsarr[cnt].to < phdr1->p_offset)
- ++cnt;
-
- GElf_Off last = phdr1->p_offset;
- GElf_Off end = phdr1->p_offset + phdr1->p_filesz;
- while (cnt < nregions && regionsarr[cnt].from < end)
- {
- if (last < regionsarr[cnt].from)
- {
- /* Compare the [LAST,FROM) region. */
- assert (gaps == gaps_match);
- if (unlikely (memcmp (raw1 + last, raw2 + last,
- regionsarr[cnt].from - last) != 0))
- {
- gapmismatch:
- if (!quiet)
- error (0, 0, gettext ("%s %s differ: gap"),
- fname1, fname2);
- result = 1;
- goto out;
- }
-
- }
- last = regionsarr[cnt].to;
- ++cnt;
- }
-
- if (cnt == nregions && last < end)
- goto gapmismatch;
- }
- }
-
- out:
- elf_end (elf1);
- elf_end (elf2);
- close (fd1);
- close (fd2);
-
- return result;
-}
-
-
-/* Print the version information. */
-static void
-print_version (FILE *stream, struct argp_state *state __attribute__ ((unused)))
-{
- fprintf (stream, "elfcmp (%s) %s\n", PACKAGE_NAME, PACKAGE_VERSION);
- fprintf (stream, gettext ("\
-Copyright (C) %s Red Hat, Inc.\n\
-This is free software; see the source for copying conditions. There is NO\n\
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
-"), "2008");
- fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper");
-}
-
-
-/* Handle program arguments. */
-static error_t
-parse_opt (int key, char *arg,
- struct argp_state *state __attribute__ ((unused)))
-{
- switch (key)
- {
- case 'q':
- quiet = true;
- break;
-
- case OPT_GAPS:
- if (strcasecmp (arg, "ignore") == 0)
- gaps = gaps_ignore;
- else if (likely (strcasecmp (arg, "match") == 0))
- gaps = gaps_match;
- else
- {
- fprintf (stderr,
- gettext ("Invalid value '%s' for --gaps parameter."),
- arg);
- argp_help (&argp, stderr, ARGP_HELP_SEE,
- program_invocation_short_name);
- exit (1);
- }
- break;
-
- case OPT_HASH_INEXACT:
- hash_inexact = true;
- break;
-
- default:
- return ARGP_ERR_UNKNOWN;
- }
- return 0;
-}
-
-
-static Elf *
-open_file (const char *fname, int *fdp, Ebl **eblp)
-{
- int fd = open (fname, O_RDONLY);
- if (unlikely (fd == -1))
- error (EXIT_FAILURE, errno, gettext ("cannot open '%s'"), fname);
- Elf *elf = elf_begin (fd, ELF_C_READ_MMAP, NULL);
- if (elf == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("cannot create ELF descriptor for '%s': %s"),
- fname, elf_errmsg (-1));
- Ebl *ebl = ebl_openbackend (elf);
- if (ebl == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("cannot create EBL descriptor for '%s'"), fname);
-
- *fdp = fd;
- *eblp = ebl;
- return elf;
-}
-
-
-static bool
-search_for_copy_reloc (Ebl *ebl, size_t scnndx, int symndx)
-{
- Elf_Scn *scn = NULL;
- while ((scn = elf_nextscn (ebl->elf, scn)) != NULL)
- {
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
- if (shdr == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("cannot get section header of section %zu: %s"),
- elf_ndxscn (scn), elf_errmsg (-1));
-
- if ((shdr->sh_type != SHT_REL && shdr->sh_type != SHT_RELA)
- || shdr->sh_link != scnndx)
- continue;
-
- Elf_Data *data = elf_getdata (scn, NULL);
- if (data == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("cannot get content of section %zu: %s"),
- elf_ndxscn (scn), elf_errmsg (-1));
-
- if (shdr->sh_type == SHT_REL)
- for (int ndx = 0; ndx < (int) (shdr->sh_size / shdr->sh_entsize);
- ++ndx)
- {
- GElf_Rel rel_mem;
- GElf_Rel *rel = gelf_getrel (data, ndx, &rel_mem);
- if (rel == NULL)
- error (EXIT_FAILURE, 0, gettext ("cannot get relocation: %s"),
- elf_errmsg (-1));
-
- if ((int) GELF_R_SYM (rel->r_info) == symndx
- && ebl_copy_reloc_p (ebl, GELF_R_TYPE (rel->r_info)))
- return true;
- }
- else
- for (int ndx = 0; ndx < (int) (shdr->sh_size / shdr->sh_entsize);
- ++ndx)
- {
- GElf_Rela rela_mem;
- GElf_Rela *rela = gelf_getrela (data, ndx, &rela_mem);
- if (rela == NULL)
- error (EXIT_FAILURE, 0, gettext ("cannot get relocation: %s"),
- elf_errmsg (-1));
-
- if ((int) GELF_R_SYM (rela->r_info) == symndx
- && ebl_copy_reloc_p (ebl, GELF_R_TYPE (rela->r_info)))
- return true;
- }
- }
-
- return false;
-}
-
-
-static int
-regioncompare (const void *p1, const void *p2)
-{
- const struct region *r1 = (const struct region *) p1;
- const struct region *r2 = (const struct region *) p2;
-
- if (r1->from < r2->from)
- return -1;
- return 1;
-}
-
-
-static int
-compare_Elf32_Word (const void *p1, const void *p2)
-{
- const Elf32_Word *w1 = p1;
- const Elf32_Word *w2 = p2;
- assert (sizeof (int) >= sizeof (*w1));
- return (int) *w1 - (int) *w2;
-}
-
-static int
-compare_Elf64_Xword (const void *p1, const void *p2)
-{
- const Elf64_Xword *w1 = p1;
- const Elf64_Xword *w2 = p2;
- return *w1 < *w2 ? -1 : *w1 > *w2 ? 1 : 0;
-}
-
-static bool
-hash_content_equivalent (size_t entsize, Elf_Data *data1, Elf_Data *data2)
-{
-#define CHECK_HASH(Hash_Word) \
- { \
- const Hash_Word *const hash1 = data1->d_buf; \
- const Hash_Word *const hash2 = data2->d_buf; \
- const size_t nbucket = hash1[0]; \
- const size_t nchain = hash1[1]; \
- if (data1->d_size != (2 + nbucket + nchain) * sizeof hash1[0] \
- || hash2[0] != nbucket || hash2[1] != nchain) \
- return false; \
- \
- const Hash_Word *const bucket1 = &hash1[2]; \
- const Hash_Word *const chain1 = &bucket1[nbucket]; \
- const Hash_Word *const bucket2 = &hash2[2]; \
- const Hash_Word *const chain2 = &bucket2[nbucket]; \
- \
- bool chain_ok[nchain]; \
- Hash_Word temp1[nchain - 1]; \
- Hash_Word temp2[nchain - 1]; \
- memset (chain_ok, 0, sizeof chain_ok); \
- for (size_t i = 0; i < nbucket; ++i) \
- { \
- if (bucket1[i] >= nchain || bucket2[i] >= nchain) \
- return false; \
- \
- size_t b1 = 0; \
- for (size_t p = bucket1[i]; p != STN_UNDEF; p = chain1[p]) \
- if (p >= nchain || b1 >= nchain - 1) \
- return false; \
- else \
- temp1[b1++] = p; \
- \
- size_t b2 = 0; \
- for (size_t p = bucket2[i]; p != STN_UNDEF; p = chain2[p]) \
- if (p >= nchain || b2 >= nchain - 1) \
- return false; \
- else \
- temp2[b2++] = p; \
- \
- if (b1 != b2) \
- return false; \
- \
- qsort (temp1, b1, sizeof temp1[0], compare_##Hash_Word); \
- qsort (temp2, b2, sizeof temp2[0], compare_##Hash_Word); \
- \
- for (b1 = 0; b1 < b2; ++b1) \
- if (temp1[b1] != temp2[b1]) \
- return false; \
- else \
- chain_ok[temp1[b1]] = true; \
- } \
- \
- for (size_t i = 0; i < nchain; ++i) \
- if (!chain_ok[i] && chain1[i] != chain2[i]) \
- return false; \
- \
- return true; \
- }
-
- switch (entsize)
- {
- case 4:
- CHECK_HASH (Elf32_Word);
- break;
- case 8:
- CHECK_HASH (Elf64_Xword);
- break;
- }
-
- return false;
-}
-
-
-#include "debugpred.h"
diff --git a/src/elflint.c b/src/elflint.c
deleted file mode 100644
index bc4219b..0000000
--- a/src/elflint.c
+++ /dev/null
@@ -1,4253 +0,0 @@
-/* Pedantic checking of ELF files compliance with gABI/psABI spec.
- Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <argp.h>
-#include <assert.h>
-#include <byteswap.h>
-#include <endian.h>
-#include <error.h>
-#include <fcntl.h>
-#include <gelf.h>
-#include <inttypes.h>
-#include <libintl.h>
-#include <locale.h>
-#include <stdbool.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/param.h>
-
-#include <elf-knowledge.h>
-#include <system.h>
-#include "../libelf/libelfP.h"
-#include "../libelf/common.h"
-#include "../libebl/libeblP.h"
-#include "../libdw/libdwP.h"
-#include "../libdwfl/libdwflP.h"
-#include "../libdw/memory-access.h"
-
-
-/* Name and version of program. */
-static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
-
-/* Bug report address. */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
-
-#define ARGP_strict 300
-#define ARGP_gnuld 301
-
-/* Definitions of arguments for argp functions. */
-static const struct argp_option options[] =
-{
-
- { "strict", ARGP_strict, NULL, 0,
- N_("Be extremely strict, flag level 2 features."), 0 },
- { "quiet", 'q', NULL, 0, N_("Do not print anything if successful"), 0 },
- { "debuginfo", 'd', NULL, 0, N_("Binary is a separate debuginfo file"), 0 },
- { "gnu-ld", ARGP_gnuld, NULL, 0,
- N_("Binary has been created with GNU ld and is therefore known to be \
-broken in certain ways"), 0 },
- { NULL, 0, NULL, 0, NULL, 0 }
-};
-
-/* Short description of program. */
-static const char doc[] = N_("\
-Pedantic checking of ELF files compliance with gABI/psABI spec.");
-
-/* Strings for arguments in help texts. */
-static const char args_doc[] = N_("FILE...");
-
-/* Prototype for option handler. */
-static error_t parse_opt (int key, char *arg, struct argp_state *state);
-
-/* Data structure to communicate with argp functions. */
-static struct argp argp =
-{
- options, parse_opt, args_doc, doc, NULL, NULL, NULL
-};
-
-
-/* Declarations of local functions. */
-static void process_file (int fd, Elf *elf, const char *prefix,
- const char *suffix, const char *fname, size_t size,
- bool only_one);
-static void process_elf_file (Elf *elf, const char *prefix, const char *suffix,
- const char *fname, size_t size, bool only_one);
-static void check_note_section (Ebl *ebl, GElf_Ehdr *ehdr,
- GElf_Shdr *shdr, int idx);
-
-
-/* Report an error. */
-#define ERROR(str, args...) \
- do { \
- printf (str, ##args); \
- ++error_count; \
- } while (0)
-static unsigned int error_count;
-
-/* True if we should perform very strict testing. */
-static bool be_strict;
-
-/* True if no message is to be printed if the run is succesful. */
-static bool be_quiet;
-
-/* True if binary is from strip -f, not a normal ELF file. */
-static bool is_debuginfo;
-
-/* True if binary is assumed to be generated with GNU ld. */
-static bool gnuld;
-
-/* Index of section header string table. */
-static uint32_t shstrndx;
-
-/* Array to count references in section groups. */
-static int *scnref;
-
-
-int
-main (int argc, char *argv[])
-{
- /* Set locale. */
- setlocale (LC_ALL, "");
-
- /* Initialize the message catalog. */
- textdomain (PACKAGE_TARNAME);
-
- /* Parse and process arguments. */
- int remaining;
- argp_parse (&argp, argc, argv, 0, &remaining, NULL);
-
- /* Before we start tell the ELF library which version we are using. */
- elf_version (EV_CURRENT);
-
- /* Now process all the files given at the command line. */
- bool only_one = remaining + 1 == argc;
- do
- {
- /* Open the file. */
- int fd = open (argv[remaining], O_RDONLY);
- if (fd == -1)
- {
- error (0, errno, gettext ("cannot open input file"));
- continue;
- }
-
- /* Create an `Elf' descriptor. */
- Elf *elf = elf_begin (fd, ELF_C_READ_MMAP, NULL);
- if (elf == NULL)
- ERROR (gettext ("cannot generate Elf descriptor: %s\n"),
- elf_errmsg (-1));
- else
- {
- unsigned int prev_error_count = error_count;
- struct stat64 st;
-
- if (fstat64 (fd, &st) != 0)
- {
- printf ("cannot stat '%s': %m\n", argv[remaining]);
- close (fd);
- continue;
- }
-
- process_file (fd, elf, NULL, NULL, argv[remaining], st.st_size,
- only_one);
-
- /* Now we can close the descriptor. */
- if (elf_end (elf) != 0)
- ERROR (gettext ("error while closing Elf descriptor: %s\n"),
- elf_errmsg (-1));
-
- if (prev_error_count == error_count && !be_quiet)
- puts (gettext ("No errors"));
- }
-
- close (fd);
- }
- while (++remaining < argc);
-
- return error_count != 0;
-}
-
-
-/* Handle program arguments. */
-static error_t
-parse_opt (int key, char *arg __attribute__ ((unused)),
- struct argp_state *state __attribute__ ((unused)))
-{
- switch (key)
- {
- case ARGP_strict:
- be_strict = true;
- break;
-
- case 'q':
- be_quiet = true;
- break;
-
- case 'd':
- is_debuginfo = true;
-
- case ARGP_gnuld:
- gnuld = true;
- break;
-
- case ARGP_KEY_NO_ARGS:
- fputs (gettext ("Missing file name.\n"), stderr);
- argp_help (&argp, stderr, ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR,
- program_invocation_short_name);
- exit (1);
-
- default:
- return ARGP_ERR_UNKNOWN;
- }
- return 0;
-}
-
-
-/* Print the version information. */
-static void
-print_version (FILE *stream, struct argp_state *state __attribute__ ((unused)))
-{
- fprintf (stream, "elflint (%s) %s\n", PACKAGE_NAME, PACKAGE_VERSION);
- fprintf (stream, gettext ("\
-Copyright (C) %s Red Hat, Inc.\n\
-This is free software; see the source for copying conditions. There is NO\n\
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
-"), "2008");
- fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper");
-}
-
-
-/* Process one file. */
-static void
-process_file (int fd, Elf *elf, const char *prefix, const char *suffix,
- const char *fname, size_t size, bool only_one)
-{
- /* We can handle two types of files: ELF files and archives. */
- Elf_Kind kind = elf_kind (elf);
-
- switch (kind)
- {
- case ELF_K_ELF:
- /* Yes! It's an ELF file. */
- process_elf_file (elf, prefix, suffix, fname, size, only_one);
- break;
-
- case ELF_K_AR:
- {
- Elf *subelf;
- Elf_Cmd cmd = ELF_C_READ_MMAP;
- size_t prefix_len = prefix == NULL ? 0 : strlen (prefix);
- size_t fname_len = strlen (fname) + 1;
- char new_prefix[prefix_len + 1 + fname_len];
- char new_suffix[(suffix == NULL ? 0 : strlen (suffix)) + 2];
- char *cp = new_prefix;
-
- /* Create the full name of the file. */
- if (prefix != NULL)
- {
- cp = mempcpy (cp, prefix, prefix_len);
- *cp++ = '(';
- strcpy (stpcpy (new_suffix, suffix), ")");
- }
- else
- new_suffix[0] = '\0';
- memcpy (cp, fname, fname_len);
-
- /* It's an archive. We process each file in it. */
- while ((subelf = elf_begin (fd, cmd, elf)) != NULL)
- {
- kind = elf_kind (subelf);
-
- /* Call this function recursively. */
- if (kind == ELF_K_ELF || kind == ELF_K_AR)
- {
- Elf_Arhdr *arhdr = elf_getarhdr (subelf);
- assert (arhdr != NULL);
-
- process_file (fd, subelf, new_prefix, new_suffix,
- arhdr->ar_name, arhdr->ar_size, false);
- }
-
- /* Get next archive element. */
- cmd = elf_next (subelf);
- if (elf_end (subelf) != 0)
- ERROR (gettext (" error while freeing sub-ELF descriptor: %s\n"),
- elf_errmsg (-1));
- }
- }
- break;
-
- default:
- /* We cannot do anything. */
- ERROR (gettext ("\
-Not an ELF file - it has the wrong magic bytes at the start\n"));
- break;
- }
-}
-
-
-static const char *
-section_name (Ebl *ebl, int idx)
-{
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr;
-
- shdr = gelf_getshdr (elf_getscn (ebl->elf, idx), &shdr_mem);
-
- return elf_strptr (ebl->elf, shstrndx, shdr->sh_name);
-}
-
-
-static const int valid_e_machine[] =
- {
- EM_M32, EM_SPARC, EM_386, EM_68K, EM_88K, EM_860, EM_MIPS, EM_S370,
- EM_MIPS_RS3_LE, EM_PARISC, EM_VPP500, EM_SPARC32PLUS, EM_960, EM_PPC,
- EM_PPC64, EM_S390, EM_V800, EM_FR20, EM_RH32, EM_RCE, EM_ARM,
- EM_FAKE_ALPHA, EM_SH, EM_SPARCV9, EM_TRICORE, EM_ARC, EM_H8_300,
- EM_H8_300H, EM_H8S, EM_H8_500, EM_IA_64, EM_MIPS_X, EM_COLDFIRE,
- EM_68HC12, EM_MMA, EM_PCP, EM_NCPU, EM_NDR1, EM_STARCORE, EM_ME16,
- EM_ST100, EM_TINYJ, EM_X86_64, EM_PDSP, EM_FX66, EM_ST9PLUS, EM_ST7,
- EM_68HC16, EM_68HC11, EM_68HC08, EM_68HC05, EM_SVX, EM_ST19, EM_VAX,
- EM_CRIS, EM_JAVELIN, EM_FIREPATH, EM_ZSP, EM_MMIX, EM_HUANY, EM_PRISM,
- EM_AVR, EM_FR30, EM_D10V, EM_D30V, EM_V850, EM_M32R, EM_MN10300,
- EM_MN10200, EM_PJ, EM_OPENRISC, EM_ARC_A5, EM_XTENSA, EM_ALPHA
- };
-#define nvalid_e_machine \
- (sizeof (valid_e_machine) / sizeof (valid_e_machine[0]))
-
-
-/* Number of sections. */
-static unsigned int shnum;
-
-
-static void
-check_elf_header (Ebl *ebl, GElf_Ehdr *ehdr, size_t size)
-{
- char buf[512];
- size_t cnt;
-
- /* Check e_ident field. */
- if (ehdr->e_ident[EI_MAG0] != ELFMAG0)
- ERROR ("e_ident[%d] != '%c'\n", EI_MAG0, ELFMAG0);
- if (ehdr->e_ident[EI_MAG1] != ELFMAG1)
- ERROR ("e_ident[%d] != '%c'\n", EI_MAG1, ELFMAG1);
- if (ehdr->e_ident[EI_MAG2] != ELFMAG2)
- ERROR ("e_ident[%d] != '%c'\n", EI_MAG2, ELFMAG2);
- if (ehdr->e_ident[EI_MAG3] != ELFMAG3)
- ERROR ("e_ident[%d] != '%c'\n", EI_MAG3, ELFMAG3);
-
- if (ehdr->e_ident[EI_CLASS] != ELFCLASS32
- && ehdr->e_ident[EI_CLASS] != ELFCLASS64)
- ERROR (gettext ("e_ident[%d] == %d is no known class\n"),
- EI_CLASS, ehdr->e_ident[EI_CLASS]);
-
- if (ehdr->e_ident[EI_DATA] != ELFDATA2LSB
- && ehdr->e_ident[EI_DATA] != ELFDATA2MSB)
- ERROR (gettext ("e_ident[%d] == %d is no known data encoding\n"),
- EI_DATA, ehdr->e_ident[EI_DATA]);
-
- if (ehdr->e_ident[EI_VERSION] != EV_CURRENT)
- ERROR (gettext ("unknown ELF header version number e_ident[%d] == %d\n"),
- EI_VERSION, ehdr->e_ident[EI_VERSION]);
-
- /* We currently don't handle any OS ABIs. */
- if (ehdr->e_ident[EI_OSABI] != ELFOSABI_NONE)
- ERROR (gettext ("unsupported OS ABI e_ident[%d] == '%s'\n"),
- EI_OSABI,
- ebl_osabi_name (ebl, ehdr->e_ident[EI_OSABI], buf, sizeof (buf)));
-
- /* No ABI versions other than zero supported either. */
- if (ehdr->e_ident[EI_ABIVERSION] != 0)
- ERROR (gettext ("unsupport ABI version e_ident[%d] == %d\n"),
- EI_ABIVERSION, ehdr->e_ident[EI_ABIVERSION]);
-
- for (cnt = EI_PAD; cnt < EI_NIDENT; ++cnt)
- if (ehdr->e_ident[cnt] != 0)
- ERROR (gettext ("e_ident[%zu] is not zero\n"), cnt);
-
- /* Check the e_type field. */
- if (ehdr->e_type != ET_REL && ehdr->e_type != ET_EXEC
- && ehdr->e_type != ET_DYN && ehdr->e_type != ET_CORE)
- ERROR (gettext ("unknown object file type %d\n"), ehdr->e_type);
-
- /* Check the e_machine field. */
- for (cnt = 0; cnt < nvalid_e_machine; ++cnt)
- if (valid_e_machine[cnt] == ehdr->e_machine)
- break;
- if (cnt == nvalid_e_machine)
- ERROR (gettext ("unknown machine type %d\n"), ehdr->e_machine);
-
- /* Check the e_version field. */
- if (ehdr->e_version != EV_CURRENT)
- ERROR (gettext ("unknown object file version\n"));
-
- /* Check the e_phoff and e_phnum fields. */
- if (ehdr->e_phoff == 0)
- {
- if (ehdr->e_phnum != 0)
- ERROR (gettext ("invalid program header offset\n"));
- else if (ehdr->e_type == ET_EXEC || ehdr->e_type == ET_DYN)
- ERROR (gettext ("\
-executables and DSOs cannot have zero program header offset\n"));
- }
- else if (ehdr->e_phnum == 0)
- ERROR (gettext ("invalid number of program header entries\n"));
-
- /* Check the e_shoff field. */
- shnum = ehdr->e_shnum;
- shstrndx = ehdr->e_shstrndx;
- if (ehdr->e_shoff == 0)
- {
- if (ehdr->e_shnum != 0)
- ERROR (gettext ("invalid section header table offset\n"));
- else if (ehdr->e_type != ET_EXEC && ehdr->e_type != ET_DYN
- && ehdr->e_type != ET_CORE)
- ERROR (gettext ("section header table must be present\n"));
- }
- else
- {
- if (ehdr->e_shnum == 0)
- {
- /* Get the header of the zeroth section. The sh_size field
- might contain the section number. */
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (elf_getscn (ebl->elf, 0), &shdr_mem);
- if (shdr != NULL)
- {
- /* The error will be reported later. */
- if (shdr->sh_size == 0)
- ERROR (gettext ("\
-invalid number of section header table entries\n"));
- else
- shnum = shdr->sh_size;
- }
- }
-
- if (ehdr->e_shstrndx == SHN_XINDEX)
- {
- /* Get the header of the zeroth section. The sh_size field
- might contain the section number. */
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (elf_getscn (ebl->elf, 0), &shdr_mem);
- if (shdr != NULL && shdr->sh_link < shnum)
- shstrndx = shdr->sh_link;
- }
- else if (shstrndx >= shnum)
- ERROR (gettext ("invalid section header index\n"));
- }
-
- /* Check the e_flags field. */
- if (!ebl_machine_flag_check (ebl, ehdr->e_flags))
- ERROR (gettext ("invalid machine flags: %s\n"),
- ebl_machine_flag_name (ebl, ehdr->e_flags, buf, sizeof (buf)));
-
- /* Check e_ehsize, e_phentsize, and e_shentsize fields. */
- if (gelf_getclass (ebl->elf) == ELFCLASS32)
- {
- if (ehdr->e_ehsize != 0 && ehdr->e_ehsize != sizeof (Elf32_Ehdr))
- ERROR (gettext ("invalid ELF header size: %hd\n"), ehdr->e_ehsize);
-
- if (ehdr->e_phentsize != 0 && ehdr->e_phentsize != sizeof (Elf32_Phdr))
- ERROR (gettext ("invalid program header size: %hd\n"),
- ehdr->e_phentsize);
- else if (ehdr->e_phoff + ehdr->e_phnum * ehdr->e_phentsize > size)
- ERROR (gettext ("invalid program header position or size\n"));
-
- if (ehdr->e_shentsize != 0 && ehdr->e_shentsize != sizeof (Elf32_Shdr))
- ERROR (gettext ("invalid section header size: %hd\n"),
- ehdr->e_shentsize);
- else if (ehdr->e_shoff + ehdr->e_shnum * ehdr->e_shentsize > size)
- ERROR (gettext ("invalid section header position or size\n"));
- }
- else if (gelf_getclass (ebl->elf) == ELFCLASS64)
- {
- if (ehdr->e_ehsize != 0 && ehdr->e_ehsize != sizeof (Elf64_Ehdr))
- ERROR (gettext ("invalid ELF header size: %hd\n"), ehdr->e_ehsize);
-
- if (ehdr->e_phentsize != 0 && ehdr->e_phentsize != sizeof (Elf64_Phdr))
- ERROR (gettext ("invalid program header size: %hd\n"),
- ehdr->e_phentsize);
- else if (ehdr->e_phoff + ehdr->e_phnum * ehdr->e_phentsize > size)
- ERROR (gettext ("invalid program header position or size\n"));
-
- if (ehdr->e_shentsize != 0 && ehdr->e_shentsize != sizeof (Elf64_Shdr))
- ERROR (gettext ("invalid section header size: %hd\n"),
- ehdr->e_shentsize);
- else if (ehdr->e_shoff + ehdr->e_shnum * ehdr->e_shentsize > size)
- ERROR (gettext ("invalid section header position or size\n"));
- }
-}
-
-
-/* Check that there is a section group section with index < IDX which
- contains section IDX and that there is exactly one. */
-static void
-check_scn_group (Ebl *ebl, int idx)
-{
- if (scnref[idx] == 0)
- {
- /* No reference so far. Search following sections, maybe the
- order is wrong. */
- size_t cnt;
-
- for (cnt = idx + 1; cnt < shnum; ++cnt)
- {
- Elf_Scn *scn = elf_getscn (ebl->elf, cnt);
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
- if (shdr == NULL)
- /* We cannot get the section header so we cannot check it.
- The error to get the section header will be shown
- somewhere else. */
- continue;
-
- if (shdr->sh_type != SHT_GROUP)
- continue;
-
- Elf_Data *data = elf_getdata (scn, NULL);
- if (data == NULL || data->d_size < sizeof (Elf32_Word))
- /* Cannot check the section. */
- continue;
-
- Elf32_Word *grpdata = (Elf32_Word *) data->d_buf;
- for (size_t inner = 1; inner < data->d_size / sizeof (Elf32_Word);
- ++inner)
- if (grpdata[inner] == (Elf32_Word) idx)
- goto out;
- }
-
- out:
- if (cnt == shnum)
- ERROR (gettext ("\
-section [%2d] '%s': section with SHF_GROUP flag set not part of a section group\n"),
- idx, section_name (ebl, idx));
- else
- ERROR (gettext ("\
-section [%2d] '%s': section group [%2zu] '%s' does not preceed group member\n"),
- idx, section_name (ebl, idx),
- cnt, section_name (ebl, cnt));
- }
-}
-
-
-static void
-check_symtab (Ebl *ebl, GElf_Ehdr *ehdr, GElf_Shdr *shdr, int idx)
-{
- bool no_xndx_warned = false;
- int no_pt_tls = 0;
- Elf_Data *data = elf_getdata (elf_getscn (ebl->elf, idx), NULL);
- if (data == NULL)
- {
- ERROR (gettext ("section [%2d] '%s': cannot get section data\n"),
- idx, section_name (ebl, idx));
- return;
- }
-
- GElf_Shdr strshdr_mem;
- GElf_Shdr *strshdr = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link),
- &strshdr_mem);
- if (strshdr == NULL)
- return;
-
- if (strshdr->sh_type != SHT_STRTAB)
- {
- ERROR (gettext ("section [%2d] '%s': referenced as string table for section [%2d] '%s' but type is not SHT_STRTAB\n"),
- shdr->sh_link, section_name (ebl, shdr->sh_link),
- idx, section_name (ebl, idx));
- strshdr = NULL;
- }
-
- /* Search for an extended section index table section. */
- Elf_Data *xndxdata = NULL;
- Elf32_Word xndxscnidx = 0;
- bool found_xndx = false;
- for (size_t cnt = 1; cnt < shnum; ++cnt)
- if (cnt != (size_t) idx)
- {
- Elf_Scn *xndxscn = elf_getscn (ebl->elf, cnt);
- GElf_Shdr xndxshdr_mem;
- GElf_Shdr *xndxshdr = gelf_getshdr (xndxscn, &xndxshdr_mem);
- if (xndxshdr == NULL)
- continue;
-
- if (xndxshdr->sh_type == SHT_SYMTAB_SHNDX
- && xndxshdr->sh_link == (GElf_Word) idx)
- {
- if (found_xndx)
- ERROR (gettext ("\
-section [%2d] '%s': symbol table cannot have more than one extended index section\n"),
- idx, section_name (ebl, idx));
-
- xndxdata = elf_getdata (xndxscn, NULL);
- xndxscnidx = elf_ndxscn (xndxscn);
- found_xndx = true;
- }
- }
-
- if (shdr->sh_entsize != gelf_fsize (ebl->elf, ELF_T_SYM, 1, EV_CURRENT))
- ERROR (gettext ("\
-section [%2u] '%s': entry size is does not match ElfXX_Sym\n"),
- idx, section_name (ebl, idx));
-
- /* Test the zeroth entry. */
- GElf_Sym sym_mem;
- Elf32_Word xndx;
- GElf_Sym *sym = gelf_getsymshndx (data, xndxdata, 0, &sym_mem, &xndx);
- if (sym == NULL)
- ERROR (gettext ("section [%2d] '%s': cannot get symbol %d: %s\n"),
- idx, section_name (ebl, idx), 0, elf_errmsg (-1));
- else
- {
- if (sym->st_name != 0)
- ERROR (gettext ("section [%2d] '%s': '%s' in zeroth entry not zero\n"),
- idx, section_name (ebl, idx), "st_name");
- if (sym->st_value != 0)
- ERROR (gettext ("section [%2d] '%s': '%s' in zeroth entry not zero\n"),
- idx, section_name (ebl, idx), "st_value");
- if (sym->st_size != 0)
- ERROR (gettext ("section [%2d] '%s': '%s' in zeroth entry not zero\n"),
- idx, section_name (ebl, idx), "st_size");
- if (sym->st_info != 0)
- ERROR (gettext ("section [%2d] '%s': '%s' in zeroth entry not zero\n"),
- idx, section_name (ebl, idx), "st_info");
- if (sym->st_other != 0)
- ERROR (gettext ("section [%2d] '%s': '%s' in zeroth entry not zero\n"),
- idx, section_name (ebl, idx), "st_other");
- if (sym->st_shndx != 0)
- ERROR (gettext ("section [%2d] '%s': '%s' in zeroth entry not zero\n"),
- idx, section_name (ebl, idx), "st_shndx");
- if (xndxdata != NULL && xndx != 0)
- ERROR (gettext ("\
-section [%2d] '%s': XINDEX for zeroth entry not zero\n"),
- xndxscnidx, section_name (ebl, xndxscnidx));
- }
-
- for (size_t cnt = 1; cnt < shdr->sh_size / shdr->sh_entsize; ++cnt)
- {
- sym = gelf_getsymshndx (data, xndxdata, cnt, &sym_mem, &xndx);
- if (sym == NULL)
- {
- ERROR (gettext ("section [%2d] '%s': cannot get symbol %zu: %s\n"),
- idx, section_name (ebl, idx), cnt, elf_errmsg (-1));
- continue;
- }
-
- const char *name = NULL;
- if (strshdr == NULL)
- name = "";
- else if (sym->st_name >= strshdr->sh_size)
- ERROR (gettext ("\
-section [%2d] '%s': symbol %zu: invalid name value\n"),
- idx, section_name (ebl, idx), cnt);
- else
- {
- name = elf_strptr (ebl->elf, shdr->sh_link, sym->st_name);
- assert (name != NULL);
- }
-
- if (sym->st_shndx == SHN_XINDEX)
- {
- if (xndxdata == NULL)
- {
- ERROR (gettext ("\
-section [%2d] '%s': symbol %zu: too large section index but no extended section index section\n"),
- idx, section_name (ebl, idx), cnt);
- no_xndx_warned = true;
- }
- else if (xndx < SHN_LORESERVE)
- ERROR (gettext ("\
-section [%2d] '%s': symbol %zu: XINDEX used for index which would fit in st_shndx (%" PRIu32 ")\n"),
- xndxscnidx, section_name (ebl, xndxscnidx), cnt,
- xndx);
- }
- else if ((sym->st_shndx >= SHN_LORESERVE
- // && sym->st_shndx <= SHN_HIRESERVE always true
- && sym->st_shndx != SHN_ABS
- && sym->st_shndx != SHN_COMMON)
- || (sym->st_shndx >= shnum
- && (sym->st_shndx < SHN_LORESERVE
- /* || sym->st_shndx > SHN_HIRESERVE always false */)))
- ERROR (gettext ("\
-section [%2d] '%s': symbol %zu: invalid section index\n"),
- idx, section_name (ebl, idx), cnt);
- else
- xndx = sym->st_shndx;
-
- if (GELF_ST_TYPE (sym->st_info) >= STT_NUM
- && !ebl_symbol_type_name (ebl, GELF_ST_TYPE (sym->st_info), NULL, 0))
- ERROR (gettext ("section [%2d] '%s': symbol %zu: unknown type\n"),
- idx, section_name (ebl, idx), cnt);
-
- if (GELF_ST_BIND (sym->st_info) >= STB_NUM)
- ERROR (gettext ("\
-section [%2d] '%s': symbol %zu: unknown symbol binding\n"),
- idx, section_name (ebl, idx), cnt);
-
- if (xndx == SHN_COMMON)
- {
- /* Common symbols can only appear in relocatable files. */
- if (ehdr->e_type != ET_REL)
- ERROR (gettext ("\
-section [%2d] '%s': symbol %zu: COMMON only allowed in relocatable files\n"),
- idx, section_name (ebl, idx), cnt);
- if (cnt < shdr->sh_info)
- ERROR (gettext ("\
-section [%2d] '%s': symbol %zu: local COMMON symbols are nonsense\n"),
- idx, section_name (ebl, idx), cnt);
- if (GELF_R_TYPE (sym->st_info) == STT_FUNC)
- ERROR (gettext ("\
-section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n"),
- idx, section_name (ebl, idx), cnt);
- }
- else if (xndx > 0 && xndx < shnum)
- {
- GElf_Shdr destshdr_mem;
- GElf_Shdr *destshdr;
-
- destshdr = gelf_getshdr (elf_getscn (ebl->elf, xndx), &destshdr_mem);
- if (destshdr != NULL)
- {
- GElf_Addr sh_addr = (ehdr->e_type == ET_REL ? 0
- : destshdr->sh_addr);
- if (GELF_ST_TYPE (sym->st_info) != STT_TLS)
- {
- if (! ebl_check_special_symbol (ebl, ehdr, sym, name,
- destshdr))
- {
- if (sym->st_value - sh_addr > destshdr->sh_size)
- {
- /* GNU ld has severe bugs. When it decides to remove
- empty sections it leaves symbols referencing them
- behind. These are symbols in .symtab. */
- if (!gnuld
- || strcmp (section_name (ebl, idx), ".symtab")
- || (strcmp (name, "__preinit_array_start") != 0
- && strcmp (name, "__preinit_array_end") != 0
- && strcmp (name, "__init_array_start") != 0
- && strcmp (name, "__init_array_end") != 0
- && strcmp (name, "__fini_array_start") != 0
- && strcmp (name, "__fini_array_end") != 0))
- ERROR (gettext ("\
-section [%2d] '%s': symbol %zu: st_value out of bounds\n"),
- idx, section_name (ebl, idx), cnt);
- }
- else if ((sym->st_value - sh_addr
- + sym->st_size) > destshdr->sh_size)
- ERROR (gettext ("\
-section [%2d] '%s': symbol %zu does not fit completely in referenced section [%2d] '%s'\n"),
- idx, section_name (ebl, idx), cnt,
- (int) xndx, section_name (ebl, xndx));
- }
- }
- else
- {
- if ((destshdr->sh_flags & SHF_TLS) == 0)
- ERROR (gettext ("\
-section [%2d] '%s': symbol %zu: referenced section [%2d] '%s' does not have SHF_TLS flag set\n"),
- idx, section_name (ebl, idx), cnt,
- (int) xndx, section_name (ebl, xndx));
-
- if (ehdr->e_type == ET_REL)
- {
- /* For object files the symbol value must fall
- into the section. */
- if (sym->st_value > destshdr->sh_size)
- ERROR (gettext ("\
-section [%2d] '%s': symbol %zu: st_value out of bounds of referenced section [%2d] '%s'\n"),
- idx, section_name (ebl, idx), cnt,
- (int) xndx, section_name (ebl, xndx));
- else if (sym->st_value + sym->st_size
- > destshdr->sh_size)
- ERROR (gettext ("\
-section [%2d] '%s': symbol %zu does not fit completely in referenced section [%2d] '%s'\n"),
- idx, section_name (ebl, idx), cnt,
- (int) xndx, section_name (ebl, xndx));
- }
- else
- {
- GElf_Phdr phdr_mem;
- GElf_Phdr *phdr = NULL;
- int pcnt;
-
- for (pcnt = 0; pcnt < ehdr->e_phnum; ++pcnt)
- {
- phdr = gelf_getphdr (ebl->elf, pcnt, &phdr_mem);
- if (phdr != NULL && phdr->p_type == PT_TLS)
- break;
- }
-
- if (pcnt == ehdr->e_phnum)
- {
- if (no_pt_tls++ == 0)
- ERROR (gettext ("\
-section [%2d] '%s': symbol %zu: TLS symbol but no TLS program header entry\n"),
- idx, section_name (ebl, idx), cnt);
- }
- else
- {
- if (sym->st_value
- < destshdr->sh_offset - phdr->p_offset)
- ERROR (gettext ("\
-section [%2d] '%s': symbol %zu: st_value short of referenced section [%2d] '%s'\n"),
- idx, section_name (ebl, idx), cnt,
- (int) xndx, section_name (ebl, xndx));
- else if (sym->st_value
- > (destshdr->sh_offset - phdr->p_offset
- + destshdr->sh_size))
- ERROR (gettext ("\
-section [%2d] '%s': symbol %zu: st_value out of bounds of referenced section [%2d] '%s'\n"),
- idx, section_name (ebl, idx), cnt,
- (int) xndx, section_name (ebl, xndx));
- else if (sym->st_value + sym->st_size
- > (destshdr->sh_offset - phdr->p_offset
- + destshdr->sh_size))
- ERROR (gettext ("\
-section [%2d] '%s': symbol %zu does not fit completely in referenced section [%2d] '%s'\n"),
- idx, section_name (ebl, idx), cnt,
- (int) xndx, section_name (ebl, xndx));
- }
- }
- }
- }
- }
-
- if (GELF_ST_BIND (sym->st_info) == STB_LOCAL)
- {
- if (cnt >= shdr->sh_info)
- ERROR (gettext ("\
-section [%2d] '%s': symbol %zu: local symbol outside range described in sh_info\n"),
- idx, section_name (ebl, idx), cnt);
- }
- else
- {
- if (cnt < shdr->sh_info)
- ERROR (gettext ("\
-section [%2d] '%s': symbol %zu: non-local symbol outside range described in sh_info\n"),
- idx, section_name (ebl, idx), cnt);
- }
-
- if (GELF_ST_TYPE (sym->st_info) == STT_SECTION
- && GELF_ST_BIND (sym->st_info) != STB_LOCAL)
- ERROR (gettext ("\
-section [%2d] '%s': symbol %zu: non-local section symbol\n"),
- idx, section_name (ebl, idx), cnt);
-
- if (name != NULL)
- {
- if (strcmp (name, "_GLOBAL_OFFSET_TABLE_") == 0)
- {
- /* Check that address and size match the global offset table. */
-
- GElf_Shdr destshdr_mem;
- GElf_Shdr *destshdr = gelf_getshdr (elf_getscn (ebl->elf, xndx),
- &destshdr_mem);
-
- if (destshdr == NULL && xndx == SHN_ABS)
- {
- /* In a DSO, we have to find the GOT section by name. */
- Elf_Scn *gotscn = NULL;
- Elf_Scn *gscn = NULL;
- while ((gscn = elf_nextscn (ebl->elf, gscn)) != NULL)
- {
- destshdr = gelf_getshdr (gscn, &destshdr_mem);
- assert (destshdr != NULL);
- const char *sname = elf_strptr (ebl->elf,
- ehdr->e_shstrndx,
- destshdr->sh_name);
- if (sname != NULL)
- {
- if (strcmp (sname, ".got.plt") == 0)
- break;
- if (strcmp (sname, ".got") == 0)
- /* Do not stop looking.
- There might be a .got.plt section. */
- gotscn = gscn;
- }
-
- destshdr = NULL;
- }
-
- if (destshdr == NULL && gotscn != NULL)
- destshdr = gelf_getshdr (gotscn, &destshdr_mem);
- }
-
- const char *sname = ((destshdr == NULL || xndx == SHN_UNDEF)
- ? NULL
- : elf_strptr (ebl->elf, ehdr->e_shstrndx,
- destshdr->sh_name));
- if (sname == NULL)
- {
- if (xndx != SHN_UNDEF || ehdr->e_type != ET_REL)
- ERROR (gettext ("\
-section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to \
-bad section [%2d]\n"),
- idx, section_name (ebl, idx), xndx);
- }
- else if (strcmp (sname, ".got.plt") != 0
- && strcmp (sname, ".got") != 0)
- ERROR (gettext ("\
-section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to \
-section [%2d] '%s'\n"),
- idx, section_name (ebl, idx), xndx, sname);
-
- if (destshdr != NULL)
- {
- /* Found it. */
- if (!ebl_check_special_symbol (ebl, ehdr, sym, name,
- destshdr))
- {
- if (ehdr->e_type != ET_REL
- && sym->st_value != destshdr->sh_addr)
- /* This test is more strict than the psABIs which
- usually allow the symbol to be in the middle of
- the .got section, allowing negative offsets. */
- ERROR (gettext ("\
-section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %#" PRIx64 " does not match %s section address %#" PRIx64 "\n"),
- idx, section_name (ebl, idx),
- (uint64_t) sym->st_value,
- sname, (uint64_t) destshdr->sh_addr);
-
- if (!gnuld && sym->st_size != destshdr->sh_size)
- ERROR (gettext ("\
-section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size %" PRIu64 " does not match %s section size %" PRIu64 "\n"),
- idx, section_name (ebl, idx),
- (uint64_t) sym->st_size,
- sname, (uint64_t) destshdr->sh_size);
- }
- }
- else
- ERROR (gettext ("\
-section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got section\n"),
- idx, section_name (ebl, idx));
- }
- else if (strcmp (name, "_DYNAMIC") == 0)
- /* Check that address and size match the dynamic section.
- We locate the dynamic section via the program header
- entry. */
- for (int pcnt = 0; pcnt < ehdr->e_phnum; ++pcnt)
- {
- GElf_Phdr phdr_mem;
- GElf_Phdr *phdr = gelf_getphdr (ebl->elf, pcnt, &phdr_mem);
-
- if (phdr != NULL && phdr->p_type == PT_DYNAMIC)
- {
- if (sym->st_value != phdr->p_vaddr)
- ERROR (gettext ("\
-section [%2d] '%s': _DYNAMIC_ symbol value %#" PRIx64 " does not match dynamic segment address %#" PRIx64 "\n"),
- idx, section_name (ebl, idx),
- (uint64_t) sym->st_value,
- (uint64_t) phdr->p_vaddr);
-
- if (!gnuld && sym->st_size != phdr->p_memsz)
- ERROR (gettext ("\
-section [%2d] '%s': _DYNAMIC symbol size %" PRIu64 " does not match dynamic segment size %" PRIu64 "\n"),
- idx, section_name (ebl, idx),
- (uint64_t) sym->st_size,
- (uint64_t) phdr->p_memsz);
-
- break;
- }
- }
- }
- }
-}
-
-
-static bool
-is_rel_dyn (Ebl *ebl, const GElf_Ehdr *ehdr, int idx, const GElf_Shdr *shdr,
- bool is_rela)
-{
- /* If this is no executable or DSO it cannot be a .rel.dyn section. */
- if (ehdr->e_type != ET_EXEC && ehdr->e_type != ET_DYN)
- return false;
-
- /* Check the section name. Unfortunately necessary. */
- if (strcmp (section_name (ebl, idx), is_rela ? ".rela.dyn" : ".rel.dyn"))
- return false;
-
- /* When a .rel.dyn section is used a DT_RELCOUNT dynamic section
- entry can be present as well. */
- Elf_Scn *scn = NULL;
- while ((scn = elf_nextscn (ebl->elf, scn)) != NULL)
- {
- GElf_Shdr rcshdr_mem;
- const GElf_Shdr *rcshdr = gelf_getshdr (scn, &rcshdr_mem);
- assert (rcshdr != NULL);
-
- if (rcshdr->sh_type == SHT_DYNAMIC)
- {
- /* Found the dynamic section. Look through it. */
- Elf_Data *d = elf_getdata (scn, NULL);
- size_t cnt;
-
- for (cnt = 1; cnt < rcshdr->sh_size / rcshdr->sh_entsize; ++cnt)
- {
- GElf_Dyn dyn_mem;
- GElf_Dyn *dyn = gelf_getdyn (d, cnt, &dyn_mem);
- assert (dyn != NULL);
-
- if (dyn->d_tag == DT_RELCOUNT)
- {
- /* Found it. Does the type match. */
- if (is_rela)
- ERROR (gettext ("\
-section [%2d] '%s': DT_RELCOUNT used for this RELA section\n"),
- idx, section_name (ebl, idx));
- else
- {
- /* Does the number specified number of relative
- relocations exceed the total number of
- relocations? */
- if (dyn->d_un.d_val > shdr->sh_size / shdr->sh_entsize)
- ERROR (gettext ("\
-section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n"),
- idx, section_name (ebl, idx),
- (int) dyn->d_un.d_val);
-
- /* Make sure the specified number of relocations are
- relative. */
- Elf_Data *reldata = elf_getdata (elf_getscn (ebl->elf,
- idx), NULL);
- if (reldata != NULL)
- for (size_t inner = 0;
- inner < shdr->sh_size / shdr->sh_entsize;
- ++inner)
- {
- GElf_Rel rel_mem;
- GElf_Rel *rel = gelf_getrel (reldata, inner,
- &rel_mem);
- if (rel == NULL)
- /* The problem will be reported elsewhere. */
- break;
-
- if (ebl_relative_reloc_p (ebl,
- GELF_R_TYPE (rel->r_info)))
- {
- if (inner >= dyn->d_un.d_val)
- ERROR (gettext ("\
-section [%2d] '%s': relative relocations after index %d as specified by DT_RELCOUNT\n"),
- idx, section_name (ebl, idx),
- (int) dyn->d_un.d_val);
- }
- else if (inner < dyn->d_un.d_val)
- ERROR (gettext ("\
-section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT specified %d relative relocations\n"),
- idx, section_name (ebl, idx),
- inner, (int) dyn->d_un.d_val);
- }
- }
- }
-
- if (dyn->d_tag == DT_RELACOUNT)
- {
- /* Found it. Does the type match. */
- if (!is_rela)
- ERROR (gettext ("\
-section [%2d] '%s': DT_RELACOUNT used for this REL section\n"),
- idx, section_name (ebl, idx));
- else
- {
- /* Does the number specified number of relative
- relocations exceed the total number of
- relocations? */
- if (dyn->d_un.d_val > shdr->sh_size / shdr->sh_entsize)
- ERROR (gettext ("\
-section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n"),
- idx, section_name (ebl, idx),
- (int) dyn->d_un.d_val);
-
- /* Make sure the specified number of relocations are
- relative. */
- Elf_Data *reldata = elf_getdata (elf_getscn (ebl->elf,
- idx), NULL);
- if (reldata != NULL)
- for (size_t inner = 0;
- inner < shdr->sh_size / shdr->sh_entsize;
- ++inner)
- {
- GElf_Rela rela_mem;
- GElf_Rela *rela = gelf_getrela (reldata, inner,
- &rela_mem);
- if (rela == NULL)
- /* The problem will be reported elsewhere. */
- break;
-
- if (ebl_relative_reloc_p (ebl,
- GELF_R_TYPE (rela->r_info)))
- {
- if (inner >= dyn->d_un.d_val)
- ERROR (gettext ("\
-section [%2d] '%s': relative relocations after index %d as specified by DT_RELCOUNT\n"),
- idx, section_name (ebl, idx),
- (int) dyn->d_un.d_val);
- }
- else if (inner < dyn->d_un.d_val)
- ERROR (gettext ("\
-section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT specified %d relative relocations\n"),
- idx, section_name (ebl, idx),
- inner, (int) dyn->d_un.d_val);
- }
- }
- }
- }
-
- break;
- }
- }
-
- return true;
-}
-
-
-struct loaded_segment
-{
- GElf_Addr from;
- GElf_Addr to;
- bool read_only;
- struct loaded_segment *next;
-};
-
-
-/* Check whether binary has text relocation flag set. */
-static bool textrel;
-
-/* Keep track of whether text relocation flag is needed. */
-static bool needed_textrel;
-
-
-static bool
-check_reloc_shdr (Ebl *ebl, const GElf_Ehdr *ehdr, const GElf_Shdr *shdr,
- int idx, int reltype, GElf_Shdr **destshdrp,
- GElf_Shdr *destshdr_memp, struct loaded_segment **loadedp)
-{
- bool reldyn = false;
-
- /* Check whether the link to the section we relocate is reasonable. */
- if (shdr->sh_info >= shnum)
- ERROR (gettext ("section [%2d] '%s': invalid destination section index\n"),
- idx, section_name (ebl, idx));
- else if (shdr->sh_info != 0)
- {
- *destshdrp = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_info),
- destshdr_memp);
- if (*destshdrp != NULL)
- {
- if((*destshdrp)->sh_type != SHT_PROGBITS
- && (*destshdrp)->sh_type != SHT_NOBITS)
- {
- reldyn = is_rel_dyn (ebl, ehdr, idx, shdr, true);
- if (!reldyn)
- ERROR (gettext ("\
-section [%2d] '%s': invalid destination section type\n"),
- idx, section_name (ebl, idx));
- else
- {
- /* There is no standard, but we require that .rel{,a}.dyn
- sections have a sh_info value of zero. */
- if (shdr->sh_info != 0)
- ERROR (gettext ("\
-section [%2d] '%s': sh_info should be zero\n"),
- idx, section_name (ebl, idx));
- }
- }
-
- if (((*destshdrp)->sh_flags & (SHF_MERGE | SHF_STRINGS)) != 0)
- ERROR (gettext ("\
-section [%2d] '%s': no relocations for merge-able sections possible\n"),
- idx, section_name (ebl, idx));
- }
- }
-
- if (shdr->sh_entsize != gelf_fsize (ebl->elf, reltype, 1, EV_CURRENT))
- ERROR (gettext (reltype == ELF_T_RELA ? "\
-section [%2d] '%s': section entry size does not match ElfXX_Rela\n" : "\
-section [%2d] '%s': section entry size does not match ElfXX_Rel\n"),
- idx, section_name (ebl, idx));
-
- /* In preparation of checking whether relocations are text
- relocations or not we need to determine whether the file is
- flagged to have text relocation and we need to determine a) what
- the loaded segments are and b) which are read-only. This will
- also allow us to determine whether the same reloc section is
- modifying loaded and not loaded segments. */
- for (int i = 0; i < ehdr->e_phnum; ++i)
- {
- GElf_Phdr phdr_mem;
- GElf_Phdr *phdr = gelf_getphdr (ebl->elf, i, &phdr_mem);
- if (phdr == NULL)
- continue;
-
- if (phdr->p_type == PT_LOAD)
- {
- struct loaded_segment *newp = xmalloc (sizeof (*newp));
- newp->from = phdr->p_vaddr;
- newp->to = phdr->p_vaddr + phdr->p_memsz;
- newp->read_only = (phdr->p_flags & PF_W) == 0;
- newp->next = *loadedp;
- *loadedp = newp;
- }
- else if (phdr->p_type == PT_DYNAMIC)
- {
- Elf_Scn *dynscn = gelf_offscn (ebl->elf, phdr->p_offset);
- GElf_Shdr dynshdr_mem;
- GElf_Shdr *dynshdr = gelf_getshdr (dynscn, &dynshdr_mem);
- Elf_Data *dyndata = elf_getdata (dynscn, NULL);
- if (dynshdr != NULL && dynshdr->sh_type == SHT_DYNAMIC
- && dyndata != NULL)
- for (size_t j = 0; j < dynshdr->sh_size / dynshdr->sh_entsize; ++j)
- {
- GElf_Dyn dyn_mem;
- GElf_Dyn *dyn = gelf_getdyn (dyndata, j, &dyn_mem);
- if (dyn != NULL
- && (dyn->d_tag == DT_TEXTREL
- || (dyn->d_tag == DT_FLAGS
- && (dyn->d_un.d_val & DF_TEXTREL) != 0)))
- {
- textrel = true;
- break;
- }
- }
- }
- }
-
- /* A quick test which can be easily done here (although it is a bit
- out of place): the text relocation flag makes only sense if there
- is a segment which is not writable. */
- if (textrel)
- {
- struct loaded_segment *seg = *loadedp;
- while (seg != NULL && !seg->read_only)
- seg = seg->next;
- if (seg == NULL)
- ERROR (gettext ("\
-text relocation flag set but there is no read-only segment\n"));
- }
-
- return reldyn;
-}
-
-
-enum load_state
- {
- state_undecided,
- state_loaded,
- state_unloaded,
- state_error
- };
-
-
-static void
-check_one_reloc (Ebl *ebl, GElf_Ehdr *ehdr, GElf_Shdr *relshdr, int idx,
- size_t cnt, const GElf_Shdr *symshdr, Elf_Data *symdata,
- GElf_Addr r_offset, GElf_Xword r_info,
- const GElf_Shdr *destshdr, bool reldyn,
- struct loaded_segment *loaded, enum load_state *statep)
-{
- bool known_broken = gnuld;
-
- if (!ebl_reloc_type_check (ebl, GELF_R_TYPE (r_info)))
- ERROR (gettext ("section [%2d] '%s': relocation %zu: invalid type\n"),
- idx, section_name (ebl, idx), cnt);
- else if (((ehdr->e_type != ET_EXEC && ehdr->e_type != ET_DYN)
- /* The executable/DSO can contain relocation sections with
- all the relocations the linker has applied. Those sections
- are marked non-loaded, though. */
- || (relshdr->sh_flags & SHF_ALLOC) != 0)
- && !ebl_reloc_valid_use (ebl, GELF_R_TYPE (r_info)))
- ERROR (gettext ("\
-section [%2d] '%s': relocation %zu: relocation type invalid for the file type\n"),
- idx, section_name (ebl, idx), cnt);
-
- if (symshdr != NULL
- && ((GELF_R_SYM (r_info) + 1)
- * gelf_fsize (ebl->elf, ELF_T_SYM, 1, EV_CURRENT)
- > symshdr->sh_size))
- ERROR (gettext ("\
-section [%2d] '%s': relocation %zu: invalid symbol index\n"),
- idx, section_name (ebl, idx), cnt);
-
- /* No more tests if this is a no-op relocation. */
- if (ebl_none_reloc_p (ebl, GELF_R_TYPE (r_info)))
- return;
-
- if (ebl_gotpc_reloc_check (ebl, GELF_R_TYPE (r_info)))
- {
- const char *name;
- char buf[64];
- GElf_Sym sym_mem;
- GElf_Sym *sym = gelf_getsym (symdata, GELF_R_SYM (r_info), &sym_mem);
- if (sym != NULL
- /* Get the name for the symbol. */
- && (name = elf_strptr (ebl->elf, symshdr->sh_link, sym->st_name))
- && strcmp (name, "_GLOBAL_OFFSET_TABLE_") !=0 )
- ERROR (gettext ("\
-section [%2d] '%s': relocation %zu: only symbol '_GLOBAL_OFFSET_TABLE_' can be used with %s\n"),
- idx, section_name (ebl, idx), cnt,
- ebl_reloc_type_name (ebl, GELF_R_SYM (r_info),
- buf, sizeof (buf)));
- }
-
- if (reldyn)
- {
- // XXX TODO Check .rel.dyn section addresses.
- }
- else if (!known_broken)
- {
- if (destshdr != NULL
- && GELF_R_TYPE (r_info) != 0
- && (r_offset - (ehdr->e_type == ET_REL ? 0
- : destshdr->sh_addr)) >= destshdr->sh_size)
- ERROR (gettext ("\
-section [%2d] '%s': relocation %zu: offset out of bounds\n"),
- idx, section_name (ebl, idx), cnt);
- }
-
- GElf_Sym sym_mem;
- GElf_Sym *sym = gelf_getsym (symdata, GELF_R_SYM (r_info), &sym_mem);
-
- if (ebl_copy_reloc_p (ebl, GELF_R_TYPE (r_info))
- /* Make sure the referenced symbol is an object or unspecified. */
- && sym != NULL
- && GELF_ST_TYPE (sym->st_info) != STT_NOTYPE
- && GELF_ST_TYPE (sym->st_info) != STT_OBJECT)
- {
- char buf[64];
- ERROR (gettext ("section [%2d] '%s': relocation %zu: copy relocation against symbol of type %s\n"),
- idx, section_name (ebl, idx), cnt,
- ebl_symbol_type_name (ebl, GELF_ST_TYPE (sym->st_info),
- buf, sizeof (buf)));
- }
-
- if ((ehdr->e_type != ET_EXEC && ehdr->e_type != ET_DYN)
- || (relshdr->sh_flags & SHF_ALLOC) != 0)
- {
- bool in_loaded_seg = false;
- while (loaded != NULL)
- {
- if (r_offset < loaded->to
- && r_offset + (sym == NULL ? 0 : sym->st_size) >= loaded->from)
- {
- /* The symbol is in this segment. */
- if (loaded->read_only)
- {
- if (textrel)
- needed_textrel = true;
- else
- ERROR (gettext ("section [%2d] '%s': relocation %zu: read-only section modified but text relocation flag not set\n"),
- idx, section_name (ebl, idx), cnt);
- }
-
- in_loaded_seg = true;
- }
-
- loaded = loaded->next;
- }
-
- if (*statep == state_undecided)
- *statep = in_loaded_seg ? state_loaded : state_unloaded;
- else if ((*statep == state_unloaded && in_loaded_seg)
- || (*statep == state_loaded && !in_loaded_seg))
- {
- ERROR (gettext ("\
-section [%2d] '%s': relocations are against loaded and unloaded data\n"),
- idx, section_name (ebl, idx));
- *statep = state_error;
- }
- }
-}
-
-
-static void
-check_rela (Ebl *ebl, GElf_Ehdr *ehdr, GElf_Shdr *shdr, int idx)
-{
- Elf_Data *data = elf_getdata (elf_getscn (ebl->elf, idx), NULL);
- if (data == NULL)
- {
- ERROR (gettext ("section [%2d] '%s': cannot get section data\n"),
- idx, section_name (ebl, idx));
- return;
- }
-
- /* Check the fields of the section header. */
- GElf_Shdr destshdr_mem;
- GElf_Shdr *destshdr = NULL;
- struct loaded_segment *loaded = NULL;
- bool reldyn = check_reloc_shdr (ebl, ehdr, shdr, idx, ELF_T_RELA, &destshdr,
- &destshdr_mem, &loaded);
-
- Elf_Scn *symscn = elf_getscn (ebl->elf, shdr->sh_link);
- GElf_Shdr symshdr_mem;
- GElf_Shdr *symshdr = gelf_getshdr (symscn, &symshdr_mem);
- Elf_Data *symdata = elf_getdata (symscn, NULL);
- enum load_state state = state_undecided;
-
- for (size_t cnt = 0; cnt < shdr->sh_size / shdr->sh_entsize; ++cnt)
- {
- GElf_Rela rela_mem;
- GElf_Rela *rela = gelf_getrela (data, cnt, &rela_mem);
- if (rela == NULL)
- {
- ERROR (gettext ("\
-section [%2d] '%s': cannot get relocation %zu: %s\n"),
- idx, section_name (ebl, idx), cnt, elf_errmsg (-1));
- continue;
- }
-
- check_one_reloc (ebl, ehdr, shdr, idx, cnt, symshdr, symdata,
- rela->r_offset, rela->r_info, destshdr, reldyn, loaded,
- &state);
- }
-
- while (loaded != NULL)
- {
- struct loaded_segment *old = loaded;
- loaded = loaded->next;
- free (old);
- }
-}
-
-
-static void
-check_rel (Ebl *ebl, GElf_Ehdr *ehdr, GElf_Shdr *shdr, int idx)
-{
- Elf_Data *data = elf_getdata (elf_getscn (ebl->elf, idx), NULL);
- if (data == NULL)
- {
- ERROR (gettext ("section [%2d] '%s': cannot get section data\n"),
- idx, section_name (ebl, idx));
- return;
- }
-
- /* Check the fields of the section header. */
- GElf_Shdr destshdr_mem;
- GElf_Shdr *destshdr = NULL;
- struct loaded_segment *loaded = NULL;
- bool reldyn = check_reloc_shdr (ebl, ehdr, shdr, idx, ELF_T_REL, &destshdr,
- &destshdr_mem, &loaded);
-
- Elf_Scn *symscn = elf_getscn (ebl->elf, shdr->sh_link);
- GElf_Shdr symshdr_mem;
- GElf_Shdr *symshdr = gelf_getshdr (symscn, &symshdr_mem);
- Elf_Data *symdata = elf_getdata (symscn, NULL);
- enum load_state state = state_undecided;
-
- for (size_t cnt = 0; cnt < shdr->sh_size / shdr->sh_entsize; ++cnt)
- {
- GElf_Rel rel_mem;
- GElf_Rel *rel = gelf_getrel (data, cnt, &rel_mem);
- if (rel == NULL)
- {
- ERROR (gettext ("\
-section [%2d] '%s': cannot get relocation %zu: %s\n"),
- idx, section_name (ebl, idx), cnt, elf_errmsg (-1));
- continue;
- }
-
- check_one_reloc (ebl, ehdr, shdr, idx, cnt, symshdr, symdata,
- rel->r_offset, rel->r_info, destshdr, reldyn, loaded,
- &state);
- }
-
- while (loaded != NULL)
- {
- struct loaded_segment *old = loaded;
- loaded = loaded->next;
- free (old);
- }
-}
-
-
-/* Number of dynamic sections. */
-static int ndynamic;
-
-
-static void
-check_dynamic (Ebl *ebl, GElf_Ehdr *ehdr, GElf_Shdr *shdr, int idx)
-{
- Elf_Data *data;
- GElf_Shdr strshdr_mem;
- GElf_Shdr *strshdr;
- size_t cnt;
- static const bool dependencies[DT_NUM][DT_NUM] =
- {
- [DT_NEEDED] = { [DT_STRTAB] = true },
- [DT_PLTRELSZ] = { [DT_JMPREL] = true },
- [DT_HASH] = { [DT_SYMTAB] = true },
- [DT_STRTAB] = { [DT_STRSZ] = true },
- [DT_SYMTAB] = { [DT_STRTAB] = true, [DT_SYMENT] = true },
- [DT_RELA] = { [DT_RELASZ] = true, [DT_RELAENT] = true },
- [DT_RELASZ] = { [DT_RELA] = true },
- [DT_RELAENT] = { [DT_RELA] = true },
- [DT_STRSZ] = { [DT_STRTAB] = true },
- [DT_SYMENT] = { [DT_SYMTAB] = true },
- [DT_SONAME] = { [DT_STRTAB] = true },
- [DT_RPATH] = { [DT_STRTAB] = true },
- [DT_REL] = { [DT_RELSZ] = true, [DT_RELENT] = true },
- [DT_RELSZ] = { [DT_REL] = true },
- [DT_RELENT] = { [DT_REL] = true },
- [DT_JMPREL] = { [DT_PLTRELSZ] = true, [DT_PLTREL] = true },
- [DT_RUNPATH] = { [DT_STRTAB] = true },
- [DT_PLTREL] = { [DT_JMPREL] = true },
- };
- bool has_dt[DT_NUM];
- bool has_val_dt[DT_VALNUM];
- bool has_addr_dt[DT_ADDRNUM];
- static const bool level2[DT_NUM] =
- {
- [DT_RPATH] = true,
- [DT_SYMBOLIC] = true,
- [DT_TEXTREL] = true,
- [DT_BIND_NOW] = true
- };
- static const bool mandatory[DT_NUM] =
- {
- [DT_NULL] = true,
- [DT_STRTAB] = true,
- [DT_SYMTAB] = true,
- [DT_STRSZ] = true,
- [DT_SYMENT] = true
- };
- GElf_Addr reladdr = 0;
- GElf_Word relsz = 0;
- GElf_Addr pltreladdr = 0;
- GElf_Word pltrelsz = 0;
-
- memset (has_dt, '\0', sizeof (has_dt));
- memset (has_val_dt, '\0', sizeof (has_val_dt));
- memset (has_addr_dt, '\0', sizeof (has_addr_dt));
-
- if (++ndynamic == 2)
- ERROR (gettext ("more than one dynamic section present\n"));
-
- data = elf_getdata (elf_getscn (ebl->elf, idx), NULL);
- if (data == NULL)
- {
- ERROR (gettext ("section [%2d] '%s': cannot get section data\n"),
- idx, section_name (ebl, idx));
- return;
- }
-
- strshdr = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), &strshdr_mem);
- if (strshdr != NULL && strshdr->sh_type != SHT_STRTAB)
- ERROR (gettext ("\
-section [%2d] '%s': referenced as string table for section [%2d] '%s' but type is not SHT_STRTAB\n"),
- shdr->sh_link, section_name (ebl, shdr->sh_link),
- idx, section_name (ebl, idx));
-
- if (shdr->sh_entsize != gelf_fsize (ebl->elf, ELF_T_DYN, 1, EV_CURRENT))
- ERROR (gettext ("\
-section [%2d] '%s': section entry size does not match ElfXX_Dyn\n"),
- idx, section_name (ebl, idx));
-
- if (shdr->sh_info != 0)
- ERROR (gettext ("section [%2d] '%s': sh_info not zero\n"),
- idx, section_name (ebl, idx));
-
- bool non_null_warned = false;
- for (cnt = 0; cnt < shdr->sh_size / shdr->sh_entsize; ++cnt)
- {
- GElf_Dyn dyn_mem;
- GElf_Dyn *dyn = gelf_getdyn (data, cnt, &dyn_mem);
- if (dyn == NULL)
- {
- ERROR (gettext ("\
-section [%2d] '%s': cannot get dynamic section entry %zu: %s\n"),
- idx, section_name (ebl, idx), cnt, elf_errmsg (-1));
- continue;
- }
-
- if (has_dt[DT_NULL] && dyn->d_tag != DT_NULL && ! non_null_warned)
- {
- ERROR (gettext ("\
-section [%2d] '%s': non-DT_NULL entries follow DT_NULL entry\n"),
- idx, section_name (ebl, idx));
- non_null_warned = true;
- }
-
- if (!ebl_dynamic_tag_check (ebl, dyn->d_tag))
- ERROR (gettext ("section [%2d] '%s': entry %zu: unknown tag\n"),
- idx, section_name (ebl, idx), cnt);
-
- if (dyn->d_tag >= 0 && dyn->d_tag < DT_NUM)
- {
- if (has_dt[dyn->d_tag]
- && dyn->d_tag != DT_NEEDED
- && dyn->d_tag != DT_NULL
- && dyn->d_tag != DT_POSFLAG_1)
- {
- char buf[50];
- ERROR (gettext ("\
-section [%2d] '%s': entry %zu: more than one entry with tag %s\n"),
- idx, section_name (ebl, idx), cnt,
- ebl_dynamic_tag_name (ebl, dyn->d_tag,
- buf, sizeof (buf)));
- }
-
- if (be_strict && level2[dyn->d_tag])
- {
- char buf[50];
- ERROR (gettext ("\
-section [%2d] '%s': entry %zu: level 2 tag %s used\n"),
- idx, section_name (ebl, idx), cnt,
- ebl_dynamic_tag_name (ebl, dyn->d_tag,
- buf, sizeof (buf)));
- }
-
- has_dt[dyn->d_tag] = true;
- }
- else if (dyn->d_tag <= DT_VALRNGHI
- && DT_VALTAGIDX (dyn->d_tag) < DT_VALNUM)
- has_val_dt[DT_VALTAGIDX (dyn->d_tag)] = true;
- else if (dyn->d_tag <= DT_ADDRRNGHI
- && DT_ADDRTAGIDX (dyn->d_tag) < DT_ADDRNUM)
- has_addr_dt[DT_ADDRTAGIDX (dyn->d_tag)] = true;
-
- if (dyn->d_tag == DT_PLTREL && dyn->d_un.d_val != DT_REL
- && dyn->d_un.d_val != DT_RELA)
- ERROR (gettext ("\
-section [%2d] '%s': entry %zu: DT_PLTREL value must be DT_REL or DT_RELA\n"),
- idx, section_name (ebl, idx), cnt);
-
- if (dyn->d_tag == DT_REL)
- reladdr = dyn->d_un.d_ptr;
- if (dyn->d_tag == DT_RELSZ)
- relsz = dyn->d_un.d_val;
- if (dyn->d_tag == DT_JMPREL)
- pltreladdr = dyn->d_un.d_ptr;
- if (dyn->d_tag == DT_PLTRELSZ)
- pltrelsz = dyn->d_un.d_val;
-
- /* Check that addresses for entries are in loaded segments. */
- switch (dyn->d_tag)
- {
- size_t n;
- case DT_STRTAB:
- /* We require the referenced section is the same as the one
- specified in sh_link. */
- if (strshdr->sh_addr != dyn->d_un.d_val)
- {
- ERROR (gettext ("\
-section [%2d] '%s': entry %zu: pointer does not match address of section [%2d] '%s' referenced by sh_link\n"),
- idx, section_name (ebl, idx), cnt,
- shdr->sh_link, section_name (ebl, shdr->sh_link));
- break;
- }
- goto check_addr;
-
- default:
- if (dyn->d_tag < DT_ADDRRNGLO || dyn->d_tag > DT_ADDRRNGHI)
- /* Value is no pointer. */
- break;
- /* FALLTHROUGH */
-
- case DT_AUXILIARY:
- case DT_FILTER:
- case DT_FINI:
- case DT_FINI_ARRAY:
- case DT_HASH:
- case DT_INIT:
- case DT_INIT_ARRAY:
- case DT_JMPREL:
- case DT_PLTGOT:
- case DT_REL:
- case DT_RELA:
- case DT_SYMBOLIC:
- case DT_SYMTAB:
- case DT_VERDEF:
- case DT_VERNEED:
- case DT_VERSYM:
- check_addr:
- for (n = 0; n < ehdr->e_phnum; ++n)
- {
- GElf_Phdr phdr_mem;
- GElf_Phdr *phdr = gelf_getphdr (ebl->elf, n, &phdr_mem);
- if (phdr != NULL && phdr->p_type == PT_LOAD
- && phdr->p_vaddr <= dyn->d_un.d_ptr
- && phdr->p_vaddr + phdr->p_memsz > dyn->d_un.d_ptr)
- break;
- }
- if (unlikely (n >= ehdr->e_phnum))
- {
- char buf[50];
- ERROR (gettext ("\
-section [%2d] '%s': entry %zu: %s value must point into loaded segment\n"),
- idx, section_name (ebl, idx), cnt,
- ebl_dynamic_tag_name (ebl, dyn->d_tag, buf,
- sizeof (buf)));
- }
- break;
-
- case DT_NEEDED:
- case DT_RPATH:
- case DT_RUNPATH:
- case DT_SONAME:
- if (dyn->d_un.d_ptr >= strshdr->sh_size)
- {
- char buf[50];
- ERROR (gettext ("\
-section [%2d] '%s': entry %zu: %s value must be valid offset in section [%2d] '%s'\n"),
- idx, section_name (ebl, idx), cnt,
- ebl_dynamic_tag_name (ebl, dyn->d_tag, buf,
- sizeof (buf)),
- shdr->sh_link, section_name (ebl, shdr->sh_link));
- }
- break;
- }
- }
-
- for (cnt = 1; cnt < DT_NUM; ++cnt)
- if (has_dt[cnt])
- {
- for (int inner = 0; inner < DT_NUM; ++inner)
- if (dependencies[cnt][inner] && ! has_dt[inner])
- {
- char buf1[50];
- char buf2[50];
-
- ERROR (gettext ("\
-section [%2d] '%s': contains %s entry but not %s\n"),
- idx, section_name (ebl, idx),
- ebl_dynamic_tag_name (ebl, cnt, buf1, sizeof (buf1)),
- ebl_dynamic_tag_name (ebl, inner, buf2, sizeof (buf2)));
- }
- }
- else
- {
- if (mandatory[cnt])
- {
- char buf[50];
- ERROR (gettext ("\
-section [%2d] '%s': mandatory tag %s not present\n"),
- idx, section_name (ebl, idx),
- ebl_dynamic_tag_name (ebl, cnt, buf, sizeof (buf)));
- }
- }
-
- /* Make sure we have an hash table. */
- if (!has_dt[DT_HASH] && !has_addr_dt[DT_ADDRTAGIDX (DT_GNU_HASH)])
- ERROR (gettext ("\
-section [%2d] '%s': no hash section present\n"),
- idx, section_name (ebl, idx));
-
- /* The GNU-style hash table also needs a symbol table. */
- if (!has_dt[DT_HASH] && has_addr_dt[DT_ADDRTAGIDX (DT_GNU_HASH)]
- && !has_dt[DT_SYMTAB])
- ERROR (gettext ("\
-section [%2d] '%s': contains %s entry but not %s\n"),
- idx, section_name (ebl, idx),
- "DT_GNU_HASH", "DT_SYMTAB");
-
- /* Check the rel/rela tags. At least one group must be available. */
- if ((has_dt[DT_RELA] || has_dt[DT_RELASZ] || has_dt[DT_RELAENT])
- && (!has_dt[DT_RELA] || !has_dt[DT_RELASZ] || !has_dt[DT_RELAENT]))
- ERROR (gettext ("\
-section [%2d] '%s': not all of %s, %s, and %s are present\n"),
- idx, section_name (ebl, idx),
- "DT_RELA", "DT_RELASZ", "DT_RELAENT");
-
- if ((has_dt[DT_REL] || has_dt[DT_RELSZ] || has_dt[DT_RELENT])
- && (!has_dt[DT_REL] || !has_dt[DT_RELSZ] || !has_dt[DT_RELENT]))
- ERROR (gettext ("\
-section [%2d] '%s': not all of %s, %s, and %s are present\n"),
- idx, section_name (ebl, idx),
- "DT_REL", "DT_RELSZ", "DT_RELENT");
-
- /* Check that all prelink sections are present if any of them is. */
- if (has_val_dt[DT_VALTAGIDX (DT_GNU_PRELINKED)]
- || has_val_dt[DT_VALTAGIDX (DT_CHECKSUM)])
- {
- if (!has_val_dt[DT_VALTAGIDX (DT_GNU_PRELINKED)])
- ERROR (gettext ("\
-section [%2d] '%s': %s tag missing in DSO marked during prelinking\n"),
- idx, section_name (ebl, idx), "DT_GNU_PRELINKED");
- if (!has_val_dt[DT_VALTAGIDX (DT_CHECKSUM)])
- ERROR (gettext ("\
-section [%2d] '%s': %s tag missing in DSO marked during prelinking\n"),
- idx, section_name (ebl, idx), "DT_CHECKSUM");
-
- /* Only DSOs can be marked like this. */
- if (ehdr->e_type != ET_DYN)
- ERROR (gettext ("\
-section [%2d] '%s': non-DSO file marked as dependency during prelink\n"),
- idx, section_name (ebl, idx));
- }
-
- if (has_val_dt[DT_VALTAGIDX (DT_GNU_CONFLICTSZ)]
- || has_val_dt[DT_VALTAGIDX (DT_GNU_LIBLISTSZ)]
- || has_addr_dt[DT_ADDRTAGIDX (DT_GNU_CONFLICT)]
- || has_addr_dt[DT_ADDRTAGIDX (DT_GNU_LIBLIST)])
- {
- if (!has_val_dt[DT_VALTAGIDX (DT_GNU_CONFLICTSZ)])
- ERROR (gettext ("\
-section [%2d] '%s': %s tag missing in prelinked executable\n"),
- idx, section_name (ebl, idx), "DT_GNU_CONFLICTSZ");
- if (!has_val_dt[DT_VALTAGIDX (DT_GNU_LIBLISTSZ)])
- ERROR (gettext ("\
-section [%2d] '%s': %s tag missing in prelinked executable\n"),
- idx, section_name (ebl, idx), "DT_GNU_LIBLISTSZ");
- if (!has_addr_dt[DT_ADDRTAGIDX (DT_GNU_CONFLICT)])
- ERROR (gettext ("\
-section [%2d] '%s': %s tag missing in prelinked executable\n"),
- idx, section_name (ebl, idx), "DT_GNU_CONFLICT");
- if (!has_addr_dt[DT_ADDRTAGIDX (DT_GNU_LIBLIST)])
- ERROR (gettext ("\
-section [%2d] '%s': %s tag missing in prelinked executable\n"),
- idx, section_name (ebl, idx), "DT_GNU_LIBLIST");
- }
-}
-
-
-static void
-check_symtab_shndx (Ebl *ebl, GElf_Ehdr *ehdr, GElf_Shdr *shdr, int idx)
-{
- if (ehdr->e_type != ET_REL)
- {
- ERROR (gettext ("\
-section [%2d] '%s': only relocatable files can have extended section index\n"),
- idx, section_name (ebl, idx));
- return;
- }
-
- Elf_Scn *symscn = elf_getscn (ebl->elf, shdr->sh_link);
- GElf_Shdr symshdr_mem;
- GElf_Shdr *symshdr = gelf_getshdr (symscn, &symshdr_mem);
- if (symshdr != NULL && symshdr->sh_type != SHT_SYMTAB)
- ERROR (gettext ("\
-section [%2d] '%s': extended section index section not for symbol table\n"),
- idx, section_name (ebl, idx));
- Elf_Data *symdata = elf_getdata (symscn, NULL);
- if (symdata == NULL)
- ERROR (gettext ("cannot get data for symbol section\n"));
-
- if (shdr->sh_entsize != sizeof (Elf32_Word))
- ERROR (gettext ("\
-section [%2d] '%s': entry size does not match Elf32_Word\n"),
- idx, section_name (ebl, idx));
-
- if (symshdr != NULL
- && (shdr->sh_size / shdr->sh_entsize
- < symshdr->sh_size / symshdr->sh_entsize))
- ERROR (gettext ("\
-section [%2d] '%s': extended index table too small for symbol table\n"),
- idx, section_name (ebl, idx));
-
- if (shdr->sh_info != 0)
- ERROR (gettext ("section [%2d] '%s': sh_info not zero\n"),
- idx, section_name (ebl, idx));
-
- for (size_t cnt = idx + 1; cnt < shnum; ++cnt)
- {
- GElf_Shdr rshdr_mem;
- GElf_Shdr *rshdr = gelf_getshdr (elf_getscn (ebl->elf, cnt), &rshdr_mem);
- if (rshdr != NULL && rshdr->sh_type == SHT_SYMTAB_SHNDX
- && rshdr->sh_link == shdr->sh_link)
- {
- ERROR (gettext ("\
-section [%2d] '%s': extended section index in section [%2zu] '%s' refers to same symbol table\n"),
- idx, section_name (ebl, idx),
- cnt, section_name (ebl, cnt));
- break;
- }
- }
-
- Elf_Data *data = elf_getdata (elf_getscn (ebl->elf, idx), NULL);
-
- if (*((Elf32_Word *) data->d_buf) != 0)
- ERROR (gettext ("symbol 0 should have zero extended section index\n"));
-
- for (size_t cnt = 1; cnt < data->d_size / sizeof (Elf32_Word); ++cnt)
- {
- Elf32_Word xndx = ((Elf32_Word *) data->d_buf)[cnt];
-
- if (xndx != 0)
- {
- GElf_Sym sym_data;
- GElf_Sym *sym = gelf_getsym (symdata, cnt, &sym_data);
- if (sym == NULL)
- {
- ERROR (gettext ("cannot get data for symbol %zu\n"), cnt);
- continue;
- }
-
- if (sym->st_shndx != SHN_XINDEX)
- ERROR (gettext ("\
-extended section index is %" PRIu32 " but symbol index is not XINDEX\n"),
- (uint32_t) xndx);
- }
- }
-}
-
-
-static void
-check_sysv_hash (Ebl *ebl, GElf_Shdr *shdr, Elf_Data *data, int idx,
- GElf_Shdr *symshdr)
-{
- Elf32_Word nbucket = ((Elf32_Word *) data->d_buf)[0];
- Elf32_Word nchain = ((Elf32_Word *) data->d_buf)[1];
-
- if (shdr->sh_size < (2 + nbucket + nchain) * shdr->sh_entsize)
- ERROR (gettext ("\
-section [%2d] '%s': hash table section is too small (is %ld, expected %ld)\n"),
- idx, section_name (ebl, idx), (long int) shdr->sh_size,
- (long int) ((2 + nbucket + nchain) * shdr->sh_entsize));
-
- size_t maxidx = nchain;
-
- if (symshdr != NULL)
- {
- size_t symsize = symshdr->sh_size / symshdr->sh_entsize;
-
- if (nchain > symshdr->sh_size / symshdr->sh_entsize)
- ERROR (gettext ("section [%2d] '%s': chain array too large\n"),
- idx, section_name (ebl, idx));
-
- maxidx = symsize;
- }
-
- size_t cnt;
- for (cnt = 2; cnt < 2 + nbucket; ++cnt)
- if (((Elf32_Word *) data->d_buf)[cnt] >= maxidx)
- ERROR (gettext ("\
-section [%2d] '%s': hash bucket reference %zu out of bounds\n"),
- idx, section_name (ebl, idx), cnt - 2);
-
- for (; cnt < 2 + nbucket + nchain; ++cnt)
- if (((Elf32_Word *) data->d_buf)[cnt] >= maxidx)
- ERROR (gettext ("\
-section [%2d] '%s': hash chain reference %zu out of bounds\n"),
- idx, section_name (ebl, idx), cnt - 2 - nbucket);
-}
-
-
-static void
-check_sysv_hash64 (Ebl *ebl, GElf_Shdr *shdr, Elf_Data *data, int idx,
- GElf_Shdr *symshdr)
-{
- Elf64_Xword nbucket = ((Elf64_Xword *) data->d_buf)[0];
- Elf64_Xword nchain = ((Elf64_Xword *) data->d_buf)[1];
-
- if (shdr->sh_size < (2 + nbucket + nchain) * shdr->sh_entsize)
- ERROR (gettext ("\
-section [%2d] '%s': hash table section is too small (is %ld, expected %ld)\n"),
- idx, section_name (ebl, idx), (long int) shdr->sh_size,
- (long int) ((2 + nbucket + nchain) * shdr->sh_entsize));
-
- size_t maxidx = nchain;
-
- if (symshdr != NULL)
- {
- size_t symsize = symshdr->sh_size / symshdr->sh_entsize;
-
- if (nchain > symshdr->sh_size / symshdr->sh_entsize)
- ERROR (gettext ("section [%2d] '%s': chain array too large\n"),
- idx, section_name (ebl, idx));
-
- maxidx = symsize;
- }
-
- size_t cnt;
- for (cnt = 2; cnt < 2 + nbucket; ++cnt)
- if (((Elf64_Xword *) data->d_buf)[cnt] >= maxidx)
- ERROR (gettext ("\
-section [%2d] '%s': hash bucket reference %zu out of bounds\n"),
- idx, section_name (ebl, idx), cnt - 2);
-
- for (; cnt < 2 + nbucket + nchain; ++cnt)
- if (((Elf64_Xword *) data->d_buf)[cnt] >= maxidx)
- ERROR (gettext ("\
-section [%2d] '%s': hash chain reference %" PRIu64 " out of bounds\n"),
- idx, section_name (ebl, idx), (uint64_t) (cnt - 2 - nbucket));
-}
-
-
-static void
-check_gnu_hash (Ebl *ebl, GElf_Shdr *shdr, Elf_Data *data, int idx,
- GElf_Shdr *symshdr)
-{
- Elf32_Word nbuckets = ((Elf32_Word *) data->d_buf)[0];
- Elf32_Word symbias = ((Elf32_Word *) data->d_buf)[1];
- Elf32_Word bitmask_words = ((Elf32_Word *) data->d_buf)[2];
-
- if (!powerof2 (bitmask_words))
- ERROR (gettext ("\
-section [%2d] '%s': bitmask size not power of 2: %u\n"),
- idx, section_name (ebl, idx), bitmask_words);
-
- size_t bitmask_idxmask = bitmask_words - 1;
- if (gelf_getclass (ebl->elf) == ELFCLASS64)
- bitmask_words *= 2;
- Elf32_Word shift = ((Elf32_Word *) data->d_buf)[3];
-
- if (shdr->sh_size < (4 + bitmask_words + nbuckets) * sizeof (Elf32_Word))
- {
- ERROR (gettext ("\
-section [%2d] '%s': hash table section is too small (is %ld, expected at least%ld)\n"),
- idx, section_name (ebl, idx), (long int) shdr->sh_size,
- (long int) ((4 + bitmask_words + nbuckets) * sizeof (Elf32_Word)));
- return;
- }
-
- if (shift > 31)
- ERROR (gettext ("\
-section [%2d] '%s': 2nd hash function shift too big: %u\n"),
- idx, section_name (ebl, idx), shift);
-
- size_t maxidx = shdr->sh_size / sizeof (Elf32_Word) - (4 + bitmask_words
- + nbuckets);
-
- if (symshdr != NULL)
- maxidx = MIN (maxidx, symshdr->sh_size / symshdr->sh_entsize);
-
- /* We need the symbol section data. */
- Elf_Data *symdata = elf_getdata (elf_getscn (ebl->elf, shdr->sh_link), NULL);
-
- union
- {
- Elf32_Word *p32;
- Elf64_Xword *p64;
- } bitmask = { .p32 = &((Elf32_Word *) data->d_buf)[4] },
- collected = { .p32 = xcalloc (bitmask_words, sizeof (Elf32_Word)) };
-
- size_t classbits = gelf_getclass (ebl->elf) == ELFCLASS32 ? 32 : 64;
-
- size_t cnt;
- for (cnt = 4 + bitmask_words; cnt < 4 + bitmask_words + nbuckets; ++cnt)
- {
- Elf32_Word symidx = ((Elf32_Word *) data->d_buf)[cnt];
-
- if (symidx == 0)
- continue;
-
- if (symidx < symbias)
- {
- ERROR (gettext ("\
-section [%2d] '%s': hash chain for bucket %zu lower than symbol index bias\n"),
- idx, section_name (ebl, idx), cnt - (4 + bitmask_words));
- continue;
- }
-
- while (symidx - symbias < maxidx)
- {
- Elf32_Word chainhash = ((Elf32_Word *) data->d_buf)[4
- + bitmask_words
- + nbuckets
- + symidx
- - symbias];
-
- if (symdata != NULL)
- {
- /* Check that the referenced symbol is not undefined. */
- GElf_Sym sym_mem;
- GElf_Sym *sym = gelf_getsym (symdata, symidx, &sym_mem);
- if (sym != NULL && sym->st_shndx == SHN_UNDEF
- && GELF_ST_TYPE (sym->st_info) != STT_FUNC)
- ERROR (gettext ("\
-section [%2d] '%s': symbol %u referenced in chain for bucket %zu is undefined\n"),
- idx, section_name (ebl, idx), symidx,
- cnt - (4 + bitmask_words));
-
- const char *symname = elf_strptr (ebl->elf, symshdr->sh_link,
- sym->st_name);
- if (symname != NULL)
- {
- Elf32_Word hval = elf_gnu_hash (symname);
- if ((hval & ~1u) != (chainhash & ~1u))
- ERROR (gettext ("\
-section [%2d] '%s': hash value for symbol %u in chain for bucket %zu wrong\n"),
- idx, section_name (ebl, idx), symidx,
- cnt - (4 + bitmask_words));
-
- /* Set the bits in the bitmask. */
- size_t maskidx = (hval / classbits) & bitmask_idxmask;
- if (classbits == 32)
- {
- collected.p32[maskidx]
- |= UINT32_C (1) << (hval & (classbits - 1));
- collected.p32[maskidx]
- |= UINT32_C (1) << ((hval >> shift) & (classbits - 1));
- }
- else
- {
- collected.p64[maskidx]
- |= UINT64_C (1) << (hval & (classbits - 1));
- collected.p64[maskidx]
- |= UINT64_C (1) << ((hval >> shift) & (classbits - 1));
- }
- }
- }
-
- if ((chainhash & 1) != 0)
- break;
-
- ++symidx;
- }
-
- if (symidx - symbias >= maxidx)
- ERROR (gettext ("\
-section [%2d] '%s': hash chain for bucket %zu out of bounds\n"),
- idx, section_name (ebl, idx), cnt - (4 + bitmask_words));
- else if (symshdr != NULL
- && symidx > symshdr->sh_size / symshdr->sh_entsize)
- ERROR (gettext ("\
-section [%2d] '%s': symbol reference in chain for bucket %zu out of bounds\n"),
- idx, section_name (ebl, idx), cnt - (4 + bitmask_words));
- }
-
- if (memcmp (collected.p32, bitmask.p32, bitmask_words * sizeof (Elf32_Word)))
- ERROR (gettext ("\
-section [%2d] '%s': bitmask does not match names in the hash table\n"),
- idx, section_name (ebl, idx));
-
- free (collected.p32);
-}
-
-
-static void
-check_hash (int tag, Ebl *ebl, GElf_Ehdr *ehdr, GElf_Shdr *shdr, int idx)
-{
- if (ehdr->e_type == ET_REL)
- {
- ERROR (gettext ("\
-section [%2d] '%s': relocatable files cannot have hash tables\n"),
- idx, section_name (ebl, idx));
- return;
- }
-
- Elf_Data *data = elf_getdata (elf_getscn (ebl->elf, idx), NULL);
- if (data == NULL)
- {
- ERROR (gettext ("section [%2d] '%s': cannot get section data\n"),
- idx, section_name (ebl, idx));
- return;
- }
-
- GElf_Shdr symshdr_mem;
- GElf_Shdr *symshdr = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link),
- &symshdr_mem);
- if (symshdr != NULL && symshdr->sh_type != SHT_DYNSYM)
- ERROR (gettext ("\
-section [%2d] '%s': hash table not for dynamic symbol table\n"),
- idx, section_name (ebl, idx));
-
- if (shdr->sh_entsize != (tag == SHT_GNU_HASH
- ? (gelf_getclass (ebl->elf) == ELFCLASS32
- ? sizeof (Elf32_Word) : 0)
- : (size_t) ebl_sysvhash_entrysize (ebl)))
- ERROR (gettext ("\
-section [%2d] '%s': hash table entry size incorrect\n"),
- idx, section_name (ebl, idx));
-
- if ((shdr->sh_flags & SHF_ALLOC) == 0)
- ERROR (gettext ("section [%2d] '%s': not marked to be allocated\n"),
- idx, section_name (ebl, idx));
-
- if (shdr->sh_size < (tag == SHT_GNU_HASH ? 4 : 2) * (shdr->sh_entsize ?: 4))
- {
- ERROR (gettext ("\
-section [%2d] '%s': hash table has not even room for initial administrative entries\n"),
- idx, section_name (ebl, idx));
- return;
- }
-
- switch (tag)
- {
- case SHT_HASH:
- if (ebl_sysvhash_entrysize (ebl) == sizeof (Elf64_Xword))
- check_sysv_hash64 (ebl, shdr, data, idx, symshdr);
- else
- check_sysv_hash (ebl, shdr, data, idx, symshdr);
- break;
-
- case SHT_GNU_HASH:
- check_gnu_hash (ebl, shdr, data, idx, symshdr);
- break;
-
- default:
- assert (! "should not happen");
- }
-}
-
-
-/* Compare content of both hash tables, it must be identical. */
-static void
-compare_hash_gnu_hash (Ebl *ebl, GElf_Ehdr *ehdr, size_t hash_idx,
- size_t gnu_hash_idx)
-{
- Elf_Scn *hash_scn = elf_getscn (ebl->elf, hash_idx);
- Elf_Data *hash_data = elf_getdata (hash_scn, NULL);
- GElf_Shdr hash_shdr_mem;
- GElf_Shdr *hash_shdr = gelf_getshdr (hash_scn, &hash_shdr_mem);
- Elf_Scn *gnu_hash_scn = elf_getscn (ebl->elf, gnu_hash_idx);
- Elf_Data *gnu_hash_data = elf_getdata (gnu_hash_scn, NULL);
- GElf_Shdr gnu_hash_shdr_mem;
- GElf_Shdr *gnu_hash_shdr = gelf_getshdr (gnu_hash_scn, &gnu_hash_shdr_mem);
-
- if (hash_shdr == NULL || gnu_hash_shdr == NULL
- || hash_data == NULL || gnu_hash_data == NULL)
- /* None of these pointers should be NULL since we used the
- sections already. We are careful nonetheless. */
- return;
-
- /* The link must point to the same symbol table. */
- if (hash_shdr->sh_link != gnu_hash_shdr->sh_link)
- {
- ERROR (gettext ("\
-sh_link in hash sections [%2zu] '%s' and [%2zu] '%s' not identical\n"),
- hash_idx, elf_strptr (ebl->elf, shstrndx, hash_shdr->sh_name),
- gnu_hash_idx,
- elf_strptr (ebl->elf, shstrndx, gnu_hash_shdr->sh_name));
- return;
- }
-
- Elf_Scn *sym_scn = elf_getscn (ebl->elf, hash_shdr->sh_link);
- Elf_Data *sym_data = elf_getdata (sym_scn, NULL);
- GElf_Shdr sym_shdr_mem;
- GElf_Shdr *sym_shdr = gelf_getshdr (sym_scn, &sym_shdr_mem);
-
- if (sym_data == NULL || sym_shdr == NULL)
- return;
-
- int nentries = sym_shdr->sh_size / sym_shdr->sh_entsize;
- char *used = alloca (nentries);
- memset (used, '\0', nentries);
-
- /* First go over the GNU_HASH table and mark the entries as used. */
- const Elf32_Word *gnu_hasharr = (Elf32_Word *) gnu_hash_data->d_buf;
- Elf32_Word gnu_nbucket = gnu_hasharr[0];
- const int bitmap_factor = ehdr->e_ident[EI_CLASS] == ELFCLASS32 ? 1 : 2;
- const Elf32_Word *gnu_bucket = (gnu_hasharr
- + (4 + gnu_hasharr[2] * bitmap_factor));
- const Elf32_Word *gnu_chain = gnu_bucket + gnu_hasharr[0] - gnu_hasharr[1];
-
- for (Elf32_Word cnt = 0; cnt < gnu_nbucket; ++cnt)
- {
- Elf32_Word symidx = gnu_bucket[cnt];
- if (symidx != STN_UNDEF)
- do
- used[symidx] |= 1;
- while ((gnu_chain[symidx++] & 1u) == 0);
- }
-
- /* Now go over the old hash table and check that we cover the same
- entries. */
- if (hash_shdr->sh_entsize == sizeof (Elf32_Word))
- {
- const Elf32_Word *hasharr = (Elf32_Word *) hash_data->d_buf;
- Elf32_Word nbucket = hasharr[0];
- const Elf32_Word *bucket = &hasharr[2];
- const Elf32_Word *chain = &hasharr[2 + nbucket];
-
- for (Elf32_Word cnt = 0; cnt < nbucket; ++cnt)
- {
- Elf32_Word symidx = bucket[cnt];
- while (symidx != STN_UNDEF)
- {
- used[symidx] |= 2;
- symidx = chain[symidx];
- }
- }
- }
- else
- {
- const Elf64_Xword *hasharr = (Elf64_Xword *) hash_data->d_buf;
- Elf64_Xword nbucket = hasharr[0];
- const Elf64_Xword *bucket = &hasharr[2];
- const Elf64_Xword *chain = &hasharr[2 + nbucket];
-
- for (Elf64_Xword cnt = 0; cnt < nbucket; ++cnt)
- {
- Elf64_Xword symidx = bucket[cnt];
- while (symidx != STN_UNDEF)
- {
- used[symidx] |= 2;
- symidx = chain[symidx];
- }
- }
- }
-
- /* Now see which entries are not set in one or both hash tables
- (unless the symbol is undefined in which case it can be omitted
- in the new table format). */
- if ((used[0] & 1) != 0)
- ERROR (gettext ("section [%2zu] '%s': reference to symbol index 0\n"),
- gnu_hash_idx,
- elf_strptr (ebl->elf, shstrndx, gnu_hash_shdr->sh_name));
- if ((used[0] & 2) != 0)
- ERROR (gettext ("section [%2zu] '%s': reference to symbol index 0\n"),
- hash_idx, elf_strptr (ebl->elf, shstrndx, hash_shdr->sh_name));
-
- for (int cnt = 1; cnt < nentries; ++cnt)
- if (used[cnt] != 0 && used[cnt] != 3)
- {
- if (used[cnt] == 1)
- ERROR (gettext ("\
-symbol %d referenced in new hash table in [%2zu] '%s' but not in old hash table in [%2zu] '%s'\n"),
- cnt, gnu_hash_idx,
- elf_strptr (ebl->elf, shstrndx, gnu_hash_shdr->sh_name),
- hash_idx,
- elf_strptr (ebl->elf, shstrndx, hash_shdr->sh_name));
- else
- {
- GElf_Sym sym_mem;
- GElf_Sym *sym = gelf_getsym (sym_data, cnt, &sym_mem);
-
- if (sym != NULL && sym->st_shndx != STN_UNDEF)
- ERROR (gettext ("\
-symbol %d referenced in old hash table in [%2zu] '%s' but not in new hash table in [%2zu] '%s'\n"),
- cnt, hash_idx,
- elf_strptr (ebl->elf, shstrndx, hash_shdr->sh_name),
- gnu_hash_idx,
- elf_strptr (ebl->elf, shstrndx, gnu_hash_shdr->sh_name));
- }
- }
-}
-
-
-static void
-check_null (Ebl *ebl, GElf_Shdr *shdr, int idx)
-{
-#define TEST(name, extra) \
- if (extra && shdr->sh_##name != 0) \
- ERROR (gettext ("section [%2d] '%s': nonzero sh_%s for NULL section\n"), \
- idx, section_name (ebl, idx), #name)
-
- TEST (name, 1);
- TEST (flags, 1);
- TEST (addr, 1);
- TEST (offset, 1);
- TEST (size, idx != 0);
- TEST (link, idx != 0);
- TEST (info, 1);
- TEST (addralign, 1);
- TEST (entsize, 1);
-}
-
-
-static void
-check_group (Ebl *ebl, GElf_Ehdr *ehdr, GElf_Shdr *shdr, int idx)
-{
- if (ehdr->e_type != ET_REL)
- {
- ERROR (gettext ("\
-section [%2d] '%s': section groups only allowed in relocatable object files\n"),
- idx, section_name (ebl, idx));
- return;
- }
-
- /* Check that sh_link is an index of a symbol table. */
- Elf_Scn *symscn = elf_getscn (ebl->elf, shdr->sh_link);
- GElf_Shdr symshdr_mem;
- GElf_Shdr *symshdr = gelf_getshdr (symscn, &symshdr_mem);
- if (symshdr == NULL)
- ERROR (gettext ("section [%2d] '%s': cannot get symbol table: %s\n"),
- idx, section_name (ebl, idx), elf_errmsg (-1));
- else
- {
- if (symshdr->sh_type != SHT_SYMTAB)
- ERROR (gettext ("\
-section [%2d] '%s': section reference in sh_link is no symbol table\n"),
- idx, section_name (ebl, idx));
-
- if (shdr->sh_info >= symshdr->sh_size / gelf_fsize (ebl->elf, ELF_T_SYM,
- 1, EV_CURRENT))
- ERROR (gettext ("\
-section [%2d] '%s': invalid symbol index in sh_info\n"),
- idx, section_name (ebl, idx));
-
- if (shdr->sh_flags != 0)
- ERROR (gettext ("section [%2d] '%s': sh_flags not zero\n"),
- idx, section_name (ebl, idx));
-
- GElf_Sym sym_data;
- GElf_Sym *sym = gelf_getsym (elf_getdata (symscn, NULL), shdr->sh_info,
- &sym_data);
- if (sym == NULL)
- ERROR (gettext ("\
-section [%2d] '%s': cannot get symbol for signature\n"),
- idx, section_name (ebl, idx));
- else if (strcmp (elf_strptr (ebl->elf, symshdr->sh_link, sym->st_name),
- "") == 0)
- ERROR (gettext ("\
-section [%2d] '%s': signature symbol canot be empty string\n"),
- idx, section_name (ebl, idx));
-
- if (be_strict
- && shdr->sh_entsize != elf32_fsize (ELF_T_WORD, 1, EV_CURRENT))
- ERROR (gettext ("section [%2d] '%s': sh_flags not set correctly\n"),
- idx, section_name (ebl, idx));
- }
-
- Elf_Data *data = elf_getdata (elf_getscn (ebl->elf, idx), NULL);
- if (data == NULL)
- ERROR (gettext ("section [%2d] '%s': cannot get data: %s\n"),
- idx, section_name (ebl, idx), elf_errmsg (-1));
- else
- {
- size_t elsize = elf32_fsize (ELF_T_WORD, 1, EV_CURRENT);
- size_t cnt;
- Elf32_Word val;
-
- if (data->d_size % elsize != 0)
- ERROR (gettext ("\
-section [%2d] '%s': section size not multiple of sizeof(Elf32_Word)\n"),
- idx, section_name (ebl, idx));
-
- if (data->d_size < elsize)
- ERROR (gettext ("\
-section [%2d] '%s': section group without flags word\n"),
- idx, section_name (ebl, idx));
- else if (be_strict)
- {
- if (data->d_size < 2 * elsize)
- ERROR (gettext ("\
-section [%2d] '%s': section group without member\n"),
- idx, section_name (ebl, idx));
- else if (data->d_size < 3 * elsize)
- ERROR (gettext ("\
-section [%2d] '%s': section group with only one member\n"),
- idx, section_name (ebl, idx));
- }
-
-#if ALLOW_UNALIGNED
- val = *((Elf32_Word *) data->d_buf);
-#else
- memcpy (&val, data->d_buf, elsize);
-#endif
- if ((val & ~GRP_COMDAT) != 0)
- ERROR (gettext ("section [%2d] '%s': unknown section group flags\n"),
- idx, section_name (ebl, idx));
-
- for (cnt = elsize; cnt < data->d_size; cnt += elsize)
- {
-#if ALLOW_UNALIGNED
- val = *((Elf32_Word *) ((char *) data->d_buf + cnt));
-#else
- memcpy (&val, (char *) data->d_buf + cnt, elsize);
-#endif
-
- if (val > shnum)
- ERROR (gettext ("\
-section [%2d] '%s': section index %Zu out of range\n"),
- idx, section_name (ebl, idx), cnt / elsize);
- else
- {
- GElf_Shdr refshdr_mem;
- GElf_Shdr *refshdr = gelf_getshdr (elf_getscn (ebl->elf, val),
- &refshdr_mem);
- if (refshdr == NULL)
- ERROR (gettext ("\
-section [%2d] '%s': cannot get section header for element %zu: %s\n"),
- idx, section_name (ebl, idx), cnt / elsize,
- elf_errmsg (-1));
- else
- {
- if (refshdr->sh_type == SHT_GROUP)
- ERROR (gettext ("\
-section [%2d] '%s': section group contains another group [%2d] '%s'\n"),
- idx, section_name (ebl, idx),
- val, section_name (ebl, val));
-
- if ((refshdr->sh_flags & SHF_GROUP) == 0)
- ERROR (gettext ("\
-section [%2d] '%s': element %Zu references section [%2d] '%s' without SHF_GROUP flag set\n"),
- idx, section_name (ebl, idx), cnt / elsize,
- val, section_name (ebl, val));
- }
-
- if (++scnref[val] == 2)
- ERROR (gettext ("\
-section [%2d] '%s' is contained in more than one section group\n"),
- val, section_name (ebl, val));
- }
- }
- }
-}
-
-
-static const char *
-section_flags_string (GElf_Word flags, char *buf, size_t len)
-{
- if (flags == 0)
- return "none";
-
- static const struct
- {
- GElf_Word flag;
- const char *name;
- } known_flags[] =
- {
-#define NEWFLAG(name) { SHF_##name, #name }
- NEWFLAG (WRITE),
- NEWFLAG (ALLOC),
- NEWFLAG (EXECINSTR),
- NEWFLAG (MERGE),
- NEWFLAG (STRINGS),
- NEWFLAG (INFO_LINK),
- NEWFLAG (LINK_ORDER),
- NEWFLAG (OS_NONCONFORMING),
- NEWFLAG (GROUP),
- NEWFLAG (TLS)
- };
-#undef NEWFLAG
- const size_t nknown_flags = sizeof (known_flags) / sizeof (known_flags[0]);
-
- char *cp = buf;
-
- for (size_t cnt = 0; cnt < nknown_flags; ++cnt)
- if (flags & known_flags[cnt].flag)
- {
- if (cp != buf && len > 1)
- {
- *cp++ = '|';
- --len;
- }
-
- size_t ncopy = MIN (len - 1, strlen (known_flags[cnt].name));
- cp = mempcpy (cp, known_flags[cnt].name, ncopy);
- len -= ncopy;
-
- flags ^= known_flags[cnt].flag;
- }
-
- if (flags != 0 || cp == buf)
- snprintf (cp, len - 1, "%" PRIx64, (uint64_t) flags);
-
- *cp = '\0';
-
- return buf;
-}
-
-
-static int
-has_copy_reloc (Ebl *ebl, unsigned int symscnndx, unsigned int symndx)
-{
- /* First find the relocation section for the symbol table. */
- Elf_Scn *scn = NULL;
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = NULL;
- while ((scn = elf_nextscn (ebl->elf, scn)) != NULL)
- {
- shdr = gelf_getshdr (scn, &shdr_mem);
- if (shdr != NULL
- && (shdr->sh_type == SHT_REL || shdr->sh_type == SHT_RELA)
- && shdr->sh_link == symscnndx)
- /* Found the section. */
- break;
- }
-
- if (scn == NULL)
- return 0;
-
- Elf_Data *data = elf_getdata (scn, NULL);
- if (data == NULL)
- return 0;
-
- if (shdr->sh_type == SHT_REL)
- for (int i = 0; (size_t) i < shdr->sh_size / shdr->sh_entsize; ++i)
- {
- GElf_Rel rel_mem;
- GElf_Rel *rel = gelf_getrel (data, i, &rel_mem);
- if (rel == NULL)
- continue;
-
- if (GELF_R_SYM (rel->r_info) == symndx
- && ebl_copy_reloc_p (ebl, GELF_R_TYPE (rel->r_info)))
- return 1;
- }
- else
- for (int i = 0; (size_t) i < shdr->sh_size / shdr->sh_entsize; ++i)
- {
- GElf_Rela rela_mem;
- GElf_Rela *rela = gelf_getrela (data, i, &rela_mem);
- if (rela == NULL)
- continue;
-
- if (GELF_R_SYM (rela->r_info) == symndx
- && ebl_copy_reloc_p (ebl, GELF_R_TYPE (rela->r_info)))
- return 1;
- }
-
- return 0;
-}
-
-
-static int
-in_nobits_scn (Ebl *ebl, unsigned int shndx)
-{
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (elf_getscn (ebl->elf, shndx), &shdr_mem);
- return shdr != NULL && shdr->sh_type == SHT_NOBITS;
-}
-
-
-static struct version_namelist
-{
- const char *objname;
- const char *name;
- GElf_Versym ndx;
- enum { ver_def, ver_need } type;
- struct version_namelist *next;
-} *version_namelist;
-
-
-static int
-add_version (const char *objname, const char *name, GElf_Versym ndx, int type)
-{
- /* Check that there are no duplications. */
- struct version_namelist *nlp = version_namelist;
- while (nlp != NULL)
- {
- if (((nlp->objname == NULL && objname == NULL)
- || (nlp->objname != NULL && objname != NULL
- && strcmp (nlp->objname, objname) == 0))
- && strcmp (nlp->name, name) == 0)
- return nlp->type == ver_def ? 1 : -1;
- nlp = nlp->next;
- }
-
- nlp = xmalloc (sizeof (*nlp));
- nlp->objname = objname;
- nlp->name = name;
- nlp->ndx = ndx;
- nlp->type = type;
- nlp->next = version_namelist;
- version_namelist = nlp;
-
- return 0;
-}
-
-
-static void
-check_versym (Ebl *ebl, int idx)
-{
- Elf_Scn *scn = elf_getscn (ebl->elf, idx);
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
- if (shdr == NULL)
- /* The error has already been reported. */
- return;
-
- Elf_Data *data = elf_getdata (scn, NULL);
- if (data == NULL)
- {
- ERROR (gettext ("section [%2d] '%s': cannot get section data\n"),
- idx, section_name (ebl, idx));
- return;
- }
-
- Elf_Scn *symscn = elf_getscn (ebl->elf, shdr->sh_link);
- GElf_Shdr symshdr_mem;
- GElf_Shdr *symshdr = gelf_getshdr (symscn, &symshdr_mem);
- if (symshdr == NULL)
- /* The error has already been reported. */
- return;
-
- if (symshdr->sh_type != SHT_DYNSYM)
- {
- ERROR (gettext ("\
-section [%2d] '%s' refers in sh_link to section [%2d] '%s' which is no dynamic symbol table\n"),
- idx, section_name (ebl, idx),
- shdr->sh_link, section_name (ebl, shdr->sh_link));
- return;
- }
-
- /* The number of elements in the version symbol table must be the
- same as the number of symbols. */
- if (shdr->sh_size / shdr->sh_entsize
- != symshdr->sh_size / symshdr->sh_entsize)
- ERROR (gettext ("\
-section [%2d] '%s' has different number of entries than symbol table [%2d] '%s'\n"),
- idx, section_name (ebl, idx),
- shdr->sh_link, section_name (ebl, shdr->sh_link));
-
- Elf_Data *symdata = elf_getdata (symscn, NULL);
- if (symdata == NULL)
- /* The error has already been reported. */
- return;
-
- for (int cnt = 1; (size_t) cnt < shdr->sh_size / shdr->sh_entsize; ++cnt)
- {
- GElf_Versym versym_mem;
- GElf_Versym *versym = gelf_getversym (data, cnt, &versym_mem);
- if (versym == NULL)
- {
- ERROR (gettext ("\
-section [%2d] '%s': symbol %d: cannot read version data\n"),
- idx, section_name (ebl, idx), cnt);
- break;
- }
-
- GElf_Sym sym_mem;
- GElf_Sym *sym = gelf_getsym (symdata, cnt, &sym_mem);
- if (sym == NULL)
- /* Already reported elsewhere. */
- continue;
-
- if (*versym == VER_NDX_GLOBAL)
- {
- /* Global symbol. Make sure it is not defined as local. */
- if (GELF_ST_BIND (sym->st_info) == STB_LOCAL)
- ERROR (gettext ("\
-section [%2d] '%s': symbol %d: local symbol with global scope\n"),
- idx, section_name (ebl, idx), cnt);
- }
- else if (*versym != VER_NDX_LOCAL)
- {
- /* Versioned symbol. Make sure it is not defined as local. */
- if (!gnuld && GELF_ST_BIND (sym->st_info) == STB_LOCAL)
- ERROR (gettext ("\
-section [%2d] '%s': symbol %d: local symbol with version\n"),
- idx, section_name (ebl, idx), cnt);
-
- /* Look through the list of defined versions and locate the
- index we need for this symbol. */
- struct version_namelist *runp = version_namelist;
- while (runp != NULL)
- if (runp->ndx == (*versym & (GElf_Versym) 0x7fff))
- break;
- else
- runp = runp->next;
-
- if (runp == NULL)
- ERROR (gettext ("\
-section [%2d] '%s': symbol %d: invalid version index %d\n"),
- idx, section_name (ebl, idx), cnt, (int) *versym);
- else if (sym->st_shndx == SHN_UNDEF
- && runp->type == ver_def)
- ERROR (gettext ("\
-section [%2d] '%s': symbol %d: version index %d is for defined version\n"),
- idx, section_name (ebl, idx), cnt, (int) *versym);
- else if (sym->st_shndx != SHN_UNDEF
- && runp->type == ver_need)
- {
- /* Unless this symbol has a copy relocation associated
- this must not happen. */
- if (!has_copy_reloc (ebl, shdr->sh_link, cnt)
- && !in_nobits_scn (ebl, sym->st_shndx))
- ERROR (gettext ("\
-section [%2d] '%s': symbol %d: version index %d is for requested version\n"),
- idx, section_name (ebl, idx), cnt, (int) *versym);
- }
- }
- }
-}
-
-
-static int
-unknown_dependency_p (Elf *elf, GElf_Ehdr *ehdr, const char *fname)
-{
- GElf_Phdr phdr_mem;
- GElf_Phdr *phdr = NULL;
-
- int i;
- for (i = 0; i < ehdr->e_phnum; ++i)
- if ((phdr = gelf_getphdr (elf, i, &phdr_mem)) != NULL
- && phdr->p_type == PT_DYNAMIC)
- break;
-
- if (i == ehdr->e_phnum)
- return 1;
- assert (phdr != NULL);
- Elf_Scn *scn = gelf_offscn (elf, phdr->p_offset);
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
- Elf_Data *data = elf_getdata (scn, NULL);
- if (shdr != NULL && shdr->sh_type == SHT_DYNAMIC && data != NULL)
- for (size_t j = 0; j < shdr->sh_size / shdr->sh_entsize; ++j)
- {
- GElf_Dyn dyn_mem;
- GElf_Dyn *dyn = gelf_getdyn (data, j, &dyn_mem);
- if (dyn != NULL && dyn->d_tag == DT_NEEDED)
- {
- const char *str = elf_strptr (elf, shdr->sh_link, dyn->d_un.d_val);
- if (str != NULL && strcmp (str, fname) == 0)
- /* Found it. */
- return 0;
- }
- }
-
- return 1;
-}
-
-
-static unsigned int nverneed;
-
-static void
-check_verneed (Ebl *ebl, GElf_Ehdr *ehdr, GElf_Shdr *shdr, int idx)
-{
- if (++nverneed == 2)
- ERROR (gettext ("more than one version reference section present\n"));
-
- GElf_Shdr strshdr_mem;
- GElf_Shdr *strshdr = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link),
- &strshdr_mem);
- if (strshdr == NULL)
- return;
- if (strshdr->sh_type != SHT_STRTAB)
- ERROR (gettext ("\
-section [%2d] '%s': sh_link does not link to string table\n"),
- idx, section_name (ebl, idx));
-
- Elf_Data *data = elf_getdata (elf_getscn (ebl->elf, idx), NULL);
- if (data == NULL)
- {
- ERROR (gettext ("section [%2d] '%s': cannot get section data\n"),
- idx, section_name (ebl, idx));
- return;
- }
- unsigned int offset = 0;
- for (int cnt = shdr->sh_info; --cnt >= 0; )
- {
- /* Get the data at the next offset. */
- GElf_Verneed needmem;
- GElf_Verneed *need = gelf_getverneed (data, offset, &needmem);
- if (need == NULL)
- break;
-
- unsigned int auxoffset = offset + need->vn_aux;
-
- if (need->vn_version != EV_CURRENT)
- ERROR (gettext ("\
-section [%2d] '%s': entry %d has wrong version %d\n"),
- idx, section_name (ebl, idx), cnt, (int) need->vn_version);
-
- if (need->vn_cnt > 0 && need->vn_aux < gelf_fsize (ebl->elf, ELF_T_VNEED,
- 1, EV_CURRENT))
- ERROR (gettext ("\
-section [%2d] '%s': entry %d has wrong offset of auxiliary data\n"),
- idx, section_name (ebl, idx), cnt);
-
- const char *libname = elf_strptr (ebl->elf, shdr->sh_link,
- need->vn_file);
- if (libname == NULL)
- {
- ERROR (gettext ("\
-section [%2d] '%s': entry %d has invalid file reference\n"),
- idx, section_name (ebl, idx), cnt);
- goto next_need;
- }
-
- /* Check that there is a DT_NEEDED entry for the referenced library. */
- if (unknown_dependency_p (ebl->elf, ehdr, libname))
- ERROR (gettext ("\
-section [%2d] '%s': entry %d references unknown dependency\n"),
- idx, section_name (ebl, idx), cnt);
-
- for (int cnt2 = need->vn_cnt; --cnt2 >= 0; )
- {
- GElf_Vernaux auxmem;
- GElf_Vernaux *aux = gelf_getvernaux (data, auxoffset, &auxmem);
- if (aux == NULL)
- break;
-
- if ((aux->vna_flags & ~VER_FLG_WEAK) != 0)
- ERROR (gettext ("\
-section [%2d] '%s': auxiliary entry %d of entry %d has unknown flag\n"),
- idx, section_name (ebl, idx), need->vn_cnt - cnt2, cnt);
-
- const char *verstr = elf_strptr (ebl->elf, shdr->sh_link,
- aux->vna_name);
- if (verstr == NULL)
- ERROR (gettext ("\
-section [%2d] '%s': auxiliary entry %d of entry %d has invalid name reference\n"),
- idx, section_name (ebl, idx), need->vn_cnt - cnt2, cnt);
- else
- {
- GElf_Word hashval = elf_hash (verstr);
- if (hashval != aux->vna_hash)
- ERROR (gettext ("\
-section [%2d] '%s': auxiliary entry %d of entry %d has wrong hash value: %#x, expected %#x\n"),
- idx, section_name (ebl, idx), need->vn_cnt - cnt2,
- cnt, (int) hashval, (int) aux->vna_hash);
-
- int res = add_version (libname, verstr, aux->vna_other,
- ver_need);
- if (unlikely (res !=0))
- {
- assert (res > 0);
- ERROR (gettext ("\
-section [%2d] '%s': auxiliary entry %d of entry %d has duplicate version name '%s'\n"),
- idx, section_name (ebl, idx), need->vn_cnt - cnt2,
- cnt, verstr);
- }
- }
-
- if ((aux->vna_next != 0 || cnt2 > 0)
- && aux->vna_next < gelf_fsize (ebl->elf, ELF_T_VNAUX, 1,
- EV_CURRENT))
- {
- ERROR (gettext ("\
-section [%2d] '%s': auxiliary entry %d of entry %d has wrong next field\n"),
- idx, section_name (ebl, idx), need->vn_cnt - cnt2, cnt);
- break;
- }
-
- auxoffset += MAX (aux->vna_next,
- gelf_fsize (ebl->elf, ELF_T_VNAUX, 1, EV_CURRENT));
- }
-
- /* Find the next offset. */
- next_need:
- offset += need->vn_next;
-
- if ((need->vn_next != 0 || cnt > 0)
- && offset < auxoffset)
- ERROR (gettext ("\
-section [%2d] '%s': entry %d has invalid offset to next entry\n"),
- idx, section_name (ebl, idx), cnt);
- }
-}
-
-
-static unsigned int nverdef;
-
-static void
-check_verdef (Ebl *ebl, GElf_Shdr *shdr, int idx)
-{
- if (++nverdef == 2)
- ERROR (gettext ("more than one version definition section present\n"));
-
- GElf_Shdr strshdr_mem;
- GElf_Shdr *strshdr = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link),
- &strshdr_mem);
- if (strshdr == NULL)
- return;
- if (strshdr->sh_type != SHT_STRTAB)
- ERROR (gettext ("\
-section [%2d] '%s': sh_link does not link to string table\n"),
- idx, section_name (ebl, idx));
-
- Elf_Data *data = elf_getdata (elf_getscn (ebl->elf, idx), NULL);
- if (data == NULL)
- {
- no_data:
- ERROR (gettext ("section [%2d] '%s': cannot get section data\n"),
- idx, section_name (ebl, idx));
- return;
- }
-
- /* Iterate over all version definition entries. We check that there
- is a BASE entry and that each index is unique. To do the later
- we collection the information in a list which is later
- examined. */
- struct namelist
- {
- const char *name;
- struct namelist *next;
- } *namelist = NULL;
- struct namelist *refnamelist = NULL;
-
- bool has_base = false;
- unsigned int offset = 0;
- for (int cnt = shdr->sh_info; --cnt >= 0; )
- {
- /* Get the data at the next offset. */
- GElf_Verdef defmem;
- GElf_Verdef *def = gelf_getverdef (data, offset, &defmem);
- if (def == NULL)
- goto no_data;
-
- if ((def->vd_flags & VER_FLG_BASE) != 0)
- {
- if (has_base)
- ERROR (gettext ("\
-section [%2d] '%s': more than one BASE definition\n"),
- idx, section_name (ebl, idx));
- if (def->vd_ndx != VER_NDX_GLOBAL)
- ERROR (gettext ("\
-section [%2d] '%s': BASE definition must have index VER_NDX_GLOBAL\n"),
- idx, section_name (ebl, idx));
- has_base = true;
- }
- if ((def->vd_flags & ~(VER_FLG_BASE|VER_FLG_WEAK)) != 0)
- ERROR (gettext ("\
-section [%2d] '%s': entry %d has unknown flag\n"),
- idx, section_name (ebl, idx), cnt);
-
- if (def->vd_version != EV_CURRENT)
- ERROR (gettext ("\
-section [%2d] '%s': entry %d has wrong version %d\n"),
- idx, section_name (ebl, idx), cnt, (int) def->vd_version);
-
- if (def->vd_cnt > 0 && def->vd_aux < gelf_fsize (ebl->elf, ELF_T_VDEF,
- 1, EV_CURRENT))
- ERROR (gettext ("\
-section [%2d] '%s': entry %d has wrong offset of auxiliary data\n"),
- idx, section_name (ebl, idx), cnt);
-
- unsigned int auxoffset = offset + def->vd_aux;
- GElf_Verdaux auxmem;
- GElf_Verdaux *aux = gelf_getverdaux (data, auxoffset, &auxmem);
- if (aux == NULL)
- goto no_data;
-
- const char *name = elf_strptr (ebl->elf, shdr->sh_link, aux->vda_name);
- if (name == NULL)
- {
- ERROR (gettext ("\
-section [%2d] '%s': entry %d has invalid name reference\n"),
- idx, section_name (ebl, idx), cnt);
- goto next_def;
- }
- GElf_Word hashval = elf_hash (name);
- if (def->vd_hash != hashval)
- ERROR (gettext ("\
-section [%2d] '%s': entry %d has wrong hash value: %#x, expected %#x\n"),
- idx, section_name (ebl, idx), cnt, (int) hashval,
- (int) def->vd_hash);
-
- int res = add_version (NULL, name, def->vd_ndx, ver_def);
- if (unlikely (res !=0))
- {
- assert (res > 0);
- ERROR (gettext ("\
-section [%2d] '%s': entry %d has duplicate version name '%s'\n"),
- idx, section_name (ebl, idx), cnt, name);
- }
-
- struct namelist *newname = alloca (sizeof (*newname));
- newname->name = name;
- newname->next = namelist;
- namelist = newname;
-
- auxoffset += aux->vda_next;
- for (int cnt2 = 1; cnt2 < def->vd_cnt; ++cnt2)
- {
- aux = gelf_getverdaux (data, auxoffset, &auxmem);
- if (aux == NULL)
- goto no_data;
-
- name = elf_strptr (ebl->elf, shdr->sh_link, aux->vda_name);
- if (name == NULL)
- ERROR (gettext ("\
-section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n"),
- idx, section_name (ebl, idx), cnt);
- else
- {
- newname = alloca (sizeof (*newname));
- newname->name = name;
- newname->next = refnamelist;
- refnamelist = newname;
- }
-
- if ((aux->vda_next != 0 || cnt2 + 1 < def->vd_cnt)
- && aux->vda_next < gelf_fsize (ebl->elf, ELF_T_VDAUX, 1,
- EV_CURRENT))
- {
- ERROR (gettext ("\
-section [%2d] '%s': entry %d has wrong next field in auxiliary data\n"),
- idx, section_name (ebl, idx), cnt);
- break;
- }
-
- auxoffset += MAX (aux->vda_next,
- gelf_fsize (ebl->elf, ELF_T_VDAUX, 1, EV_CURRENT));
- }
-
- /* Find the next offset. */
- next_def:
- offset += def->vd_next;
-
- if ((def->vd_next != 0 || cnt > 0)
- && offset < auxoffset)
- ERROR (gettext ("\
-section [%2d] '%s': entry %d has invalid offset to next entry\n"),
- idx, section_name (ebl, idx), cnt);
- }
-
- if (!has_base)
- ERROR (gettext ("section [%2d] '%s': no BASE definition\n"),
- idx, section_name (ebl, idx));
-
- /* Check whether the referenced names are available. */
- while (namelist != NULL)
- {
- struct version_namelist *runp = version_namelist;
- while (runp != NULL)
- {
- if (runp->type == ver_def
- && strcmp (runp->name, namelist->name) == 0)
- break;
- runp = runp->next;
- }
-
- if (runp == NULL)
- ERROR (gettext ("\
-section [%2d] '%s': unknown parent version '%s'\n"),
- idx, section_name (ebl, idx), namelist->name);
-
- namelist = namelist->next;
- }
-}
-
-static void
-check_attributes (Ebl *ebl, GElf_Ehdr *ehdr, GElf_Shdr *shdr, int idx)
-{
- if (shdr->sh_size == 0)
- {
- ERROR (gettext ("section [%2d] '%s': empty object attributes section\n"),
- idx, section_name (ebl, idx));
- return;
- }
-
- Elf_Data *data = elf_rawdata (elf_getscn (ebl->elf, idx), NULL);
- if (data == NULL || data->d_size == 0)
- {
- ERROR (gettext ("section [%2d] '%s': cannot get section data\n"),
- idx, section_name (ebl, idx));
- return;
- }
-
- inline size_t pos (const unsigned char *p)
- {
- return p - (const unsigned char *) data->d_buf;
- }
-
- const unsigned char *p = data->d_buf;
- if (*p++ != 'A')
- {
- ERROR (gettext ("section [%2d] '%s': unrecognized attribute format\n"),
- idx, section_name (ebl, idx));
- return;
- }
-
- inline size_t left (void)
- {
- return (const unsigned char *) data->d_buf + data->d_size - p;
- }
-
- while (left () >= 4)
- {
- uint32_t len;
- memcpy (&len, p, sizeof len);
-
- if (len == 0)
- ERROR (gettext ("\
-section [%2d] '%s': offset %zu: zero length field in attribute section\n"),
- idx, section_name (ebl, idx), pos (p));
-
- if (MY_ELFDATA != ehdr->e_ident[EI_DATA])
- CONVERT (len);
-
- if (len > left ())
- {
- ERROR (gettext ("\
-section [%2d] '%s': offset %zu: invalid length in attribute section\n"),
- idx, section_name (ebl, idx), pos (p));
- break;
- }
-
- const unsigned char *name = p + sizeof len;
- p += len;
-
- unsigned const char *q = memchr (name, '\0', len);
- if (q == NULL)
- {
- ERROR (gettext ("\
-section [%2d] '%s': offset %zu: unterminated vendor name string\n"),
- idx, section_name (ebl, idx), pos (p));
- continue;
- }
- ++q;
-
- if (q - name == sizeof "gnu" && !memcmp (name, "gnu", sizeof "gnu"))
- while (q < p)
- {
- unsigned const char *chunk = q;
-
- unsigned int subsection_tag;
- get_uleb128 (subsection_tag, q);
-
- if (q >= p)
- {
- ERROR (gettext ("\
-section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n"),
- idx, section_name (ebl, idx), pos (chunk));
- break;
- }
-
- uint32_t subsection_len;
- if (p - q < (ptrdiff_t) sizeof subsection_len)
- {
- ERROR (gettext ("\
-section [%2d] '%s': offset %zu: truncated attribute section\n"),
- idx, section_name (ebl, idx), pos (q));
- break;
- }
-
- memcpy (&subsection_len, q, sizeof subsection_len);
- if (subsection_len == 0)
- {
- ERROR (gettext ("\
-section [%2d] '%s': offset %zu: zero length field in attribute subsection\n"),
- idx, section_name (ebl, idx), pos (q));
-
- q += sizeof subsection_len;
- continue;
- }
-
- if (MY_ELFDATA != ehdr->e_ident[EI_DATA])
- CONVERT (subsection_len);
-
- if (p - chunk < (ptrdiff_t) subsection_len)
- {
- ERROR (gettext ("\
-section [%2d] '%s': offset %zu: invalid length in attribute subsection\n"),
- idx, section_name (ebl, idx), pos (q));
- break;
- }
-
- const unsigned char *subsection_end = chunk + subsection_len;
- chunk = q;
- q = subsection_end;
-
- if (subsection_tag != 1) /* Tag_File */
- ERROR (gettext ("\
-section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n"),
- idx, section_name (ebl, idx), pos (chunk), subsection_tag);
- else
- {
- chunk += sizeof subsection_len;
- while (chunk < q)
- {
- unsigned int tag;
- get_uleb128 (tag, chunk);
-
- uint64_t value = 0;
- const unsigned char *r = chunk;
- if (tag == 32 || (tag & 1) == 0)
- {
- get_uleb128 (value, r);
- if (r > q)
- {
- ERROR (gettext ("\
-section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n"),
- idx, section_name (ebl, idx), pos (chunk));
- break;
- }
- }
- if (tag == 32 || (tag & 1) != 0)
- {
- r = memchr (r, '\0', q - r);
- if (r == NULL)
- {
- ERROR (gettext ("\
-section [%2d] '%s': offset %zu: unterminated string in attribute\n"),
- idx, section_name (ebl, idx), pos (chunk));
- break;
- }
- ++r;
- }
-
- const char *tag_name = NULL;
- const char *value_name = NULL;
- if (!ebl_check_object_attribute (ebl, (const char *) name,
- tag, value,
- &tag_name, &value_name))
- ERROR (gettext ("\
-section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n"),
- idx, section_name (ebl, idx), pos (chunk), tag);
- else if ((tag & 1) == 0 && value_name == NULL)
- ERROR (gettext ("\
-section [%2d] '%s': offset %zu: unrecognized %s attribute value %" PRIu64 "\n"),
- idx, section_name (ebl, idx), pos (chunk),
- tag_name, value);
-
- chunk = r;
- }
- }
- }
- else
- ERROR (gettext ("\
-section [%2d] '%s': offset %zu: vendor '%s' unknown\n"),
- idx, section_name (ebl, idx), pos (p), name);
- }
-
- if (left () != 0)
- ERROR (gettext ("\
-section [%2d] '%s': offset %zu: extra bytes after last attribute section\n"),
- idx, section_name (ebl, idx), pos (p));
-}
-
-static bool has_loadable_segment;
-static bool has_interp_segment;
-
-static const struct
-{
- const char *name;
- size_t namelen;
- GElf_Word type;
- enum { unused, exact, atleast, exact_or_gnuld } attrflag;
- GElf_Word attr;
- GElf_Word attr2;
-} special_sections[] =
- {
- /* See figure 4-14 in the gABI. */
- { ".bss", 5, SHT_NOBITS, exact, SHF_ALLOC | SHF_WRITE, 0 },
- { ".comment", 8, SHT_PROGBITS, exact, 0, 0 },
- { ".data", 6, SHT_PROGBITS, exact, SHF_ALLOC | SHF_WRITE, 0 },
- { ".data1", 7, SHT_PROGBITS, exact, SHF_ALLOC | SHF_WRITE, 0 },
- { ".debug_str", 11, SHT_PROGBITS, exact_or_gnuld, SHF_MERGE | SHF_STRINGS, 0 },
- { ".debug", 6, SHT_PROGBITS, exact, 0, 0 },
- { ".dynamic", 9, SHT_DYNAMIC, atleast, SHF_ALLOC, SHF_WRITE },
- { ".dynstr", 8, SHT_STRTAB, exact, SHF_ALLOC, 0 },
- { ".dynsym", 8, SHT_DYNSYM, exact, SHF_ALLOC, 0 },
- { ".fini", 6, SHT_PROGBITS, exact, SHF_ALLOC | SHF_EXECINSTR, 0 },
- { ".fini_array", 12, SHT_FINI_ARRAY, exact, SHF_ALLOC | SHF_WRITE, 0 },
- { ".got", 5, SHT_PROGBITS, unused, 0, 0 }, // XXX more info?
- { ".hash", 6, SHT_HASH, exact, SHF_ALLOC, 0 },
- { ".init", 6, SHT_PROGBITS, exact, SHF_ALLOC | SHF_EXECINSTR, 0 },
- { ".init_array", 12, SHT_INIT_ARRAY, exact, SHF_ALLOC | SHF_WRITE, 0 },
- { ".interp", 8, SHT_PROGBITS, atleast, 0, SHF_ALLOC }, // XXX more tests?
- { ".line", 6, SHT_PROGBITS, exact, 0, 0 },
- { ".note", 6, SHT_NOTE, atleast, 0, SHF_ALLOC },
- { ".plt", 5, SHT_PROGBITS, unused, 0, 0 }, // XXX more tests
- { ".preinit_array", 15, SHT_PREINIT_ARRAY, exact, SHF_ALLOC | SHF_WRITE, 0 },
- { ".rela", 5, SHT_RELA, atleast, 0, SHF_ALLOC }, // XXX more tests
- { ".rel", 4, SHT_REL, atleast, 0, SHF_ALLOC }, // XXX more tests
- { ".rodata", 8, SHT_PROGBITS, atleast, SHF_ALLOC, SHF_MERGE | SHF_STRINGS },
- { ".rodata1", 9, SHT_PROGBITS, atleast, SHF_ALLOC, SHF_MERGE | SHF_STRINGS },
- { ".shstrtab", 10, SHT_STRTAB, exact, 0, 0 },
- { ".strtab", 8, SHT_STRTAB, atleast, 0, SHF_ALLOC }, // XXX more tests
- { ".symtab", 8, SHT_SYMTAB, atleast, 0, SHF_ALLOC }, // XXX more tests
- { ".symtab_shndx", 14, SHT_SYMTAB_SHNDX, atleast, 0, SHF_ALLOC }, // XXX more tests
- { ".tbss", 6, SHT_NOBITS, exact, SHF_ALLOC | SHF_WRITE | SHF_TLS, 0 },
- { ".tdata", 7, SHT_PROGBITS, exact, SHF_ALLOC | SHF_WRITE | SHF_TLS, 0 },
- { ".tdata1", 8, SHT_PROGBITS, exact, SHF_ALLOC | SHF_WRITE | SHF_TLS, 0 },
- { ".text", 6, SHT_PROGBITS, exact, SHF_ALLOC | SHF_EXECINSTR, 0 },
-
- /* The following are GNU extensions. */
- { ".gnu.version", 13, SHT_GNU_versym, exact, SHF_ALLOC, 0 },
- { ".gnu.version_d", 15, SHT_GNU_verdef, exact, SHF_ALLOC, 0 },
- { ".gnu.version_r", 15, SHT_GNU_verneed, exact, SHF_ALLOC, 0 },
- { ".gnu.attributes", 16, SHT_GNU_ATTRIBUTES, exact, 0, 0 },
- };
-#define nspecial_sections \
- (sizeof (special_sections) / sizeof (special_sections[0]))
-
-#define IS_KNOWN_SPECIAL(idx, string, prefix) \
- (special_sections[idx].namelen == sizeof string - (prefix ? 1 : 0) \
- && !memcmp (special_sections[idx].name, string, \
- sizeof string - (prefix ? 1 : 0)))
-
-static void
-check_sections (Ebl *ebl, GElf_Ehdr *ehdr)
-{
- if (ehdr->e_shoff == 0)
- /* No section header. */
- return;
-
- /* Allocate array to count references in section groups. */
- scnref = (int *) xcalloc (shnum, sizeof (int));
-
- /* Check the zeroth section first. It must not have any contents
- and the section header must contain nonzero value at most in the
- sh_size and sh_link fields. */
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (elf_getscn (ebl->elf, 0), &shdr_mem);
- if (shdr == NULL)
- ERROR (gettext ("cannot get section header of zeroth section\n"));
- else
- {
- if (shdr->sh_name != 0)
- ERROR (gettext ("zeroth section has nonzero name\n"));
- if (shdr->sh_type != 0)
- ERROR (gettext ("zeroth section has nonzero type\n"));
- if (shdr->sh_flags != 0)
- ERROR (gettext ("zeroth section has nonzero flags\n"));
- if (shdr->sh_addr != 0)
- ERROR (gettext ("zeroth section has nonzero address\n"));
- if (shdr->sh_offset != 0)
- ERROR (gettext ("zeroth section has nonzero offset\n"));
- if (shdr->sh_info != 0)
- ERROR (gettext ("zeroth section has nonzero info field\n"));
- if (shdr->sh_addralign != 0)
- ERROR (gettext ("zeroth section has nonzero align value\n"));
- if (shdr->sh_entsize != 0)
- ERROR (gettext ("zeroth section has nonzero entry size value\n"));
-
- if (shdr->sh_size != 0 && ehdr->e_shnum != 0)
- ERROR (gettext ("\
-zeroth section has nonzero size value while ELF header has nonzero shnum value\n"));
-
- if (shdr->sh_link != 0 && ehdr->e_shstrndx != SHN_XINDEX)
- ERROR (gettext ("\
-zeroth section has nonzero link value while ELF header does not signal overflow in shstrndx\n"));
- }
-
- int *segment_flags = xcalloc (ehdr->e_phnum, sizeof segment_flags[0]);
-
- bool dot_interp_section = false;
-
- size_t hash_idx = 0;
- size_t gnu_hash_idx = 0;
-
- size_t versym_scnndx = 0;
- for (size_t cnt = 1; cnt < shnum; ++cnt)
- {
- shdr = gelf_getshdr (elf_getscn (ebl->elf, cnt), &shdr_mem);
- if (shdr == NULL)
- {
- ERROR (gettext ("\
-cannot get section header for section [%2zu] '%s': %s\n"),
- cnt, section_name (ebl, cnt), elf_errmsg (-1));
- continue;
- }
-
- const char *scnname = elf_strptr (ebl->elf, shstrndx, shdr->sh_name);
-
- if (scnname == NULL)
- ERROR (gettext ("section [%2zu]: invalid name\n"), cnt);
- else
- {
- /* Check whether it is one of the special sections defined in
- the gABI. */
- size_t s;
- for (s = 0; s < nspecial_sections; ++s)
- if (strncmp (scnname, special_sections[s].name,
- special_sections[s].namelen) == 0)
- {
- char stbuf1[100];
- char stbuf2[100];
- char stbuf3[100];
-
- GElf_Word good_type = special_sections[s].type;
- if (IS_KNOWN_SPECIAL (s, ".plt", false)
- && ebl_bss_plt_p (ebl, ehdr))
- good_type = SHT_NOBITS;
-
- /* In a debuginfo file, any normal section can be SHT_NOBITS.
- This is only invalid for DWARF sections and .shstrtab. */
- if (shdr->sh_type != good_type
- && (shdr->sh_type != SHT_NOBITS
- || !is_debuginfo
- || IS_KNOWN_SPECIAL (s, ".debug_str", false)
- || IS_KNOWN_SPECIAL (s, ".debug", true)
- || IS_KNOWN_SPECIAL (s, ".shstrtab", false)))
- ERROR (gettext ("\
-section [%2d] '%s' has wrong type: expected %s, is %s\n"),
- (int) cnt, scnname,
- ebl_section_type_name (ebl, special_sections[s].type,
- stbuf1, sizeof (stbuf1)),
- ebl_section_type_name (ebl, shdr->sh_type,
- stbuf2, sizeof (stbuf2)));
-
- if (special_sections[s].attrflag == exact
- || special_sections[s].attrflag == exact_or_gnuld)
- {
- /* Except for the link order and group bit all the
- other bits should match exactly. */
- if ((shdr->sh_flags & ~(SHF_LINK_ORDER | SHF_GROUP))
- != special_sections[s].attr
- && (special_sections[s].attrflag == exact || !gnuld))
- ERROR (gettext ("\
-section [%2zu] '%s' has wrong flags: expected %s, is %s\n"),
- cnt, scnname,
- section_flags_string (special_sections[s].attr,
- stbuf1, sizeof (stbuf1)),
- section_flags_string (shdr->sh_flags
- & ~SHF_LINK_ORDER,
- stbuf2, sizeof (stbuf2)));
- }
- else if (special_sections[s].attrflag == atleast)
- {
- if ((shdr->sh_flags & special_sections[s].attr)
- != special_sections[s].attr
- || ((shdr->sh_flags & ~(SHF_LINK_ORDER | SHF_GROUP
- | special_sections[s].attr
- | special_sections[s].attr2))
- != 0))
- ERROR (gettext ("\
-section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n"),
- cnt, scnname,
- section_flags_string (special_sections[s].attr,
- stbuf1, sizeof (stbuf1)),
- section_flags_string (special_sections[s].attr2,
- stbuf2, sizeof (stbuf2)),
- section_flags_string (shdr->sh_flags
- & ~(SHF_LINK_ORDER
- | SHF_GROUP),
- stbuf3, sizeof (stbuf3)));
- }
-
- if (strcmp (scnname, ".interp") == 0)
- {
- dot_interp_section = true;
-
- if (ehdr->e_type == ET_REL)
- ERROR (gettext ("\
-section [%2zu] '%s' present in object file\n"),
- cnt, scnname);
-
- if ((shdr->sh_flags & SHF_ALLOC) != 0
- && !has_loadable_segment)
- ERROR (gettext ("\
-section [%2zu] '%s' has SHF_ALLOC flag set but there is no loadable segment\n"),
- cnt, scnname);
- else if ((shdr->sh_flags & SHF_ALLOC) == 0
- && has_loadable_segment)
- ERROR (gettext ("\
-section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable segments\n"),
- cnt, scnname);
- }
- else
- {
- if (strcmp (scnname, ".symtab_shndx") == 0
- && ehdr->e_type != ET_REL)
- ERROR (gettext ("\
-section [%2zu] '%s' is extension section index table in non-object file\n"),
- cnt, scnname);
-
- /* These sections must have the SHF_ALLOC flag set iff
- a loadable segment is available.
-
- .relxxx
- .strtab
- .symtab
- .symtab_shndx
-
- Check that if there is a reference from the
- loaded section these sections also have the
- ALLOC flag set. */
-#if 0
- // XXX TODO
- if ((shdr->sh_flags & SHF_ALLOC) != 0
- && !has_loadable_segment)
- ERROR (gettext ("\
-section [%2zu] '%s' has SHF_ALLOC flag set but there is no loadable segment\n"),
- cnt, scnname);
- else if ((shdr->sh_flags & SHF_ALLOC) == 0
- && has_loadable_segment)
- ERROR (gettext ("\
-section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable segments\n"),
- cnt, scnname);
-#endif
- }
-
- break;
- }
- }
-
- if (shdr->sh_entsize != 0 && shdr->sh_size % shdr->sh_entsize)
- ERROR (gettext ("\
-section [%2zu] '%s': size not multiple of entry size\n"),
- cnt, section_name (ebl, cnt));
-
- if (elf_strptr (ebl->elf, shstrndx, shdr->sh_name) == NULL)
- ERROR (gettext ("cannot get section header\n"));
-
- if (shdr->sh_type >= SHT_NUM
- && shdr->sh_type != SHT_GNU_ATTRIBUTES
- && shdr->sh_type != SHT_GNU_LIBLIST
- && shdr->sh_type != SHT_CHECKSUM
- && shdr->sh_type != SHT_GNU_verdef
- && shdr->sh_type != SHT_GNU_verneed
- && shdr->sh_type != SHT_GNU_versym
- && ebl_section_type_name (ebl, shdr->sh_type, NULL, 0) == NULL)
- ERROR (gettext ("section [%2zu] '%s' has unsupported type %d\n"),
- cnt, section_name (ebl, cnt),
- (int) shdr->sh_type);
-
-#define ALL_SH_FLAGS (SHF_WRITE | SHF_ALLOC | SHF_EXECINSTR | SHF_MERGE \
- | SHF_STRINGS | SHF_INFO_LINK | SHF_LINK_ORDER \
- | SHF_OS_NONCONFORMING | SHF_GROUP | SHF_TLS)
- if (shdr->sh_flags & ~(GElf_Xword) ALL_SH_FLAGS)
- {
- GElf_Xword sh_flags = shdr->sh_flags & ~(GElf_Xword) ALL_SH_FLAGS;
- if (sh_flags & SHF_MASKPROC)
- {
- if (!ebl_machine_section_flag_check (ebl,
- sh_flags & SHF_MASKPROC))
- ERROR (gettext ("section [%2zu] '%s'"
- " contains invalid processor-specific flag(s)"
- " %#" PRIx64 "\n"),
- cnt, section_name (ebl, cnt), sh_flags & SHF_MASKPROC);
- sh_flags &= ~(GElf_Xword) SHF_MASKPROC;
- }
- if (sh_flags != 0)
- ERROR (gettext ("section [%2zu] '%s' contains unknown flag(s)"
- " %#" PRIx64 "\n"),
- cnt, section_name (ebl, cnt), sh_flags);
- }
- if (shdr->sh_flags & SHF_TLS)
- {
- // XXX Correct?
- if (shdr->sh_addr != 0 && !gnuld)
- ERROR (gettext ("\
-section [%2zu] '%s': thread-local data sections address not zero\n"),
- cnt, section_name (ebl, cnt));
-
- // XXX TODO more tests!?
- }
-
- if (shdr->sh_link >= shnum)
- ERROR (gettext ("\
-section [%2zu] '%s': invalid section reference in link value\n"),
- cnt, section_name (ebl, cnt));
-
- if (SH_INFO_LINK_P (shdr) && shdr->sh_info >= shnum)
- ERROR (gettext ("\
-section [%2zu] '%s': invalid section reference in info value\n"),
- cnt, section_name (ebl, cnt));
-
- if ((shdr->sh_flags & SHF_MERGE) == 0
- && (shdr->sh_flags & SHF_STRINGS) != 0
- && be_strict)
- ERROR (gettext ("\
-section [%2zu] '%s': strings flag set without merge flag\n"),
- cnt, section_name (ebl, cnt));
-
- if ((shdr->sh_flags & SHF_MERGE) != 0 && shdr->sh_entsize == 0)
- ERROR (gettext ("\
-section [%2zu] '%s': merge flag set but entry size is zero\n"),
- cnt, section_name (ebl, cnt));
-
- if (shdr->sh_flags & SHF_GROUP)
- check_scn_group (ebl, cnt);
-
- if (shdr->sh_flags & SHF_EXECINSTR)
- {
- switch (shdr->sh_type)
- {
- case SHT_PROGBITS:
- break;
-
- case SHT_NOBITS:
- if (is_debuginfo)
- break;
- default:
- ERROR (gettext ("\
-section [%2zu] '%s' has unexpected type %d for an executable section\n"),
- cnt, section_name (ebl, cnt), shdr->sh_type);
- break;
- }
-
- if ((shdr->sh_flags & SHF_WRITE)
- && !ebl_check_special_section (ebl, cnt, shdr,
- section_name (ebl, cnt)))
- ERROR (gettext ("\
-section [%2zu] '%s' is both executable and writable\n"),
- cnt, section_name (ebl, cnt));
- }
-
- if (ehdr->e_type != ET_REL && (shdr->sh_flags & SHF_ALLOC) != 0)
- {
- /* Make sure the section is contained in a loaded segment
- and that the initialization part matches NOBITS sections. */
- int pcnt;
- GElf_Phdr phdr_mem;
- GElf_Phdr *phdr;
-
- for (pcnt = 0; pcnt < ehdr->e_phnum; ++pcnt)
- if ((phdr = gelf_getphdr (ebl->elf, pcnt, &phdr_mem)) != NULL
- && ((phdr->p_type == PT_LOAD
- && (shdr->sh_flags & SHF_TLS) == 0)
- || (phdr->p_type == PT_TLS
- && (shdr->sh_flags & SHF_TLS) != 0))
- && phdr->p_offset <= shdr->sh_offset
- && (phdr->p_offset + phdr->p_filesz > shdr->sh_offset
- || (phdr->p_offset + phdr->p_memsz > shdr->sh_offset
- && shdr->sh_type == SHT_NOBITS)))
- {
- /* Found the segment. */
- if (phdr->p_offset + phdr->p_memsz
- < shdr->sh_offset + shdr->sh_size)
- ERROR (gettext ("\
-section [%2zu] '%s' not fully contained in segment of program header entry %d\n"),
- cnt, section_name (ebl, cnt), pcnt);
-
- if (shdr->sh_type == SHT_NOBITS)
- {
- if (shdr->sh_offset < phdr->p_offset + phdr->p_filesz
- && !is_debuginfo)
- ERROR (gettext ("\
-section [%2zu] '%s' has type NOBITS but is read from the file in segment of program header entry %d\n"),
- cnt, section_name (ebl, cnt), pcnt);
- }
- else
- {
- const GElf_Off end = phdr->p_offset + phdr->p_filesz;
- if (shdr->sh_offset > end ||
- (shdr->sh_offset == end && shdr->sh_size != 0))
- ERROR (gettext ("\
-section [%2zu] '%s' has not type NOBITS but is not read from the file in segment of program header entry %d\n"),
- cnt, section_name (ebl, cnt), pcnt);
- }
-
- if (shdr->sh_type != SHT_NOBITS)
- {
- if ((shdr->sh_flags & SHF_EXECINSTR) != 0)
- {
- segment_flags[pcnt] |= PF_X;
- if ((phdr->p_flags & PF_X) == 0)
- ERROR (gettext ("\
-section [%2zu] '%s' is executable in nonexecutable segment %d\n"),
- cnt, section_name (ebl, cnt), pcnt);
- }
-
- if ((shdr->sh_flags & SHF_WRITE) != 0)
- {
- segment_flags[pcnt] |= PF_W;
- if (0 /* XXX vdso images have this */
- && (phdr->p_flags & PF_W) == 0)
- ERROR (gettext ("\
-section [%2zu] '%s' is writable in unwritable segment %d\n"),
- cnt, section_name (ebl, cnt), pcnt);
- }
- }
-
- break;
- }
-
- if (pcnt == ehdr->e_phnum)
- ERROR (gettext ("\
-section [%2zu] '%s': alloc flag set but section not in any loaded segment\n"),
- cnt, section_name (ebl, cnt));
- }
-
- if (cnt == shstrndx && shdr->sh_type != SHT_STRTAB)
- ERROR (gettext ("\
-section [%2zu] '%s': ELF header says this is the section header string table but type is not SHT_TYPE\n"),
- cnt, section_name (ebl, cnt));
-
- switch (shdr->sh_type)
- {
- case SHT_DYNSYM:
- if (ehdr->e_type == ET_REL)
- ERROR (gettext ("\
-section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n"),
- cnt, section_name (ebl, cnt));
- /* FALLTHROUGH */
- case SHT_SYMTAB:
- check_symtab (ebl, ehdr, shdr, cnt);
- break;
-
- case SHT_RELA:
- check_rela (ebl, ehdr, shdr, cnt);
- break;
-
- case SHT_REL:
- check_rel (ebl, ehdr, shdr, cnt);
- break;
-
- case SHT_DYNAMIC:
- check_dynamic (ebl, ehdr, shdr, cnt);
- break;
-
- case SHT_SYMTAB_SHNDX:
- check_symtab_shndx (ebl, ehdr, shdr, cnt);
- break;
-
- case SHT_HASH:
- check_hash (shdr->sh_type, ebl, ehdr, shdr, cnt);
- hash_idx = cnt;
- break;
-
- case SHT_GNU_HASH:
- check_hash (shdr->sh_type, ebl, ehdr, shdr, cnt);
- gnu_hash_idx = cnt;
- break;
-
- case SHT_NULL:
- check_null (ebl, shdr, cnt);
- break;
-
- case SHT_GROUP:
- check_group (ebl, ehdr, shdr, cnt);
- break;
-
- case SHT_NOTE:
- check_note_section (ebl, ehdr, shdr, cnt);
- break;
-
- case SHT_GNU_versym:
- /* We cannot process this section now since we have no guarantee
- that the verneed and verdef sections have already been read.
- Just remember the section index. */
- if (versym_scnndx != 0)
- ERROR (gettext ("more than one version symbol table present\n"));
- versym_scnndx = cnt;
- break;
-
- case SHT_GNU_verneed:
- check_verneed (ebl, ehdr, shdr, cnt);
- break;
-
- case SHT_GNU_verdef:
- check_verdef (ebl, shdr, cnt);
- break;
-
- case SHT_GNU_ATTRIBUTES:
- check_attributes (ebl, ehdr, shdr, cnt);
- break;
-
- default:
- /* Nothing. */
- break;
- }
- }
-
- if (has_interp_segment && !dot_interp_section)
- ERROR (gettext ("INTERP program header entry but no .interp section\n"));
-
- if (!is_debuginfo)
- for (int pcnt = 0; pcnt < ehdr->e_phnum; ++pcnt)
- {
- GElf_Phdr phdr_mem;
- GElf_Phdr *phdr = gelf_getphdr (ebl->elf, pcnt, &phdr_mem);
- if (phdr != NULL && (phdr->p_type == PT_LOAD || phdr->p_type == PT_TLS))
- {
- if ((phdr->p_flags & PF_X) != 0
- && (segment_flags[pcnt] & PF_X) == 0)
- ERROR (gettext ("\
-loadable segment [%u] is executable but contains no executable sections\n"),
- pcnt);
-
- if ((phdr->p_flags & PF_W) != 0
- && (segment_flags[pcnt] & PF_W) == 0)
- ERROR (gettext ("\
-loadable segment [%u] is writable but contains no writable sections\n"),
- pcnt);
- }
- }
-
- free (segment_flags);
-
- if (version_namelist != NULL)
- {
- if (versym_scnndx == 0)
- ERROR (gettext ("\
-no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section exist\n"));
- else
- check_versym (ebl, versym_scnndx);
-
- /* Check for duplicate index numbers. */
- do
- {
- struct version_namelist *runp = version_namelist->next;
- while (runp != NULL)
- {
- if (version_namelist->ndx == runp->ndx)
- {
- ERROR (gettext ("duplicate version index %d\n"),
- (int) version_namelist->ndx);
- break;
- }
- runp = runp->next;
- }
-
- struct version_namelist *old = version_namelist;
- version_namelist = version_namelist->next;
- free (old);
- }
- while (version_namelist != NULL);
- }
- else if (versym_scnndx != 0)
- ERROR (gettext ("\
-.gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n"));
-
- if (hash_idx != 0 && gnu_hash_idx != 0)
- compare_hash_gnu_hash (ebl, ehdr, hash_idx, gnu_hash_idx);
-
- free (scnref);
-}
-
-
-static GElf_Off
-check_note_data (Ebl *ebl, const GElf_Ehdr *ehdr,
- Elf_Data *data, int shndx, int phndx, GElf_Off start)
-{
- size_t offset = 0;
- size_t last_offset = 0;
- GElf_Nhdr nhdr;
- size_t name_offset;
- size_t desc_offset;
- while (offset < data->d_size
- && (offset = gelf_getnote (data, offset,
- &nhdr, &name_offset, &desc_offset)) > 0)
- {
- last_offset = offset;
-
- /* Make sure it is one of the note types we know about. */
- if (ehdr->e_type == ET_CORE)
- switch (nhdr.n_type)
- {
- case NT_PRSTATUS:
- case NT_FPREGSET:
- case NT_PRPSINFO:
- case NT_TASKSTRUCT: /* NT_PRXREG on Solaris. */
- case NT_PLATFORM:
- case NT_AUXV:
- case NT_GWINDOWS:
- case NT_ASRS:
- case NT_PSTATUS:
- case NT_PSINFO:
- case NT_PRCRED:
- case NT_UTSNAME:
- case NT_LWPSTATUS:
- case NT_LWPSINFO:
- case NT_PRFPXREG:
- /* Known type. */
- break;
-
- default:
- if (shndx == 0)
- ERROR (gettext ("\
-phdr[%d]: unknown core file note type %" PRIu32 " at offset %" PRIu64 "\n"),
- phndx, (uint32_t) nhdr.n_type, start + offset);
- else
- ERROR (gettext ("\
-section [%2d] '%s': unknown core file note type %" PRIu32
- " at offset %Zu\n"),
- shndx, section_name (ebl, shndx),
- (uint32_t) nhdr.n_type, offset);
- }
- else
- switch (nhdr.n_type)
- {
- case NT_GNU_ABI_TAG:
- case NT_GNU_HWCAP:
- case NT_GNU_BUILD_ID:
- break;
-
- case 0:
- /* Linux vDSOs use a type 0 note for the kernel version word. */
- if (nhdr.n_namesz == sizeof "Linux"
- && !memcmp (data->d_buf + name_offset, "Linux", sizeof "Linux"))
- break;
-
- default:
- if (shndx == 0)
- ERROR (gettext ("\
-phdr[%d]: unknown object file note type %" PRIu32 " at offset %Zu\n"),
- phndx, (uint32_t) nhdr.n_type, offset);
- else
- ERROR (gettext ("\
-section [%2d] '%s': unknown object file note type %" PRIu32
- " at offset %Zu\n"),
- shndx, section_name (ebl, shndx),
- (uint32_t) nhdr.n_type, offset);
- }
- }
-
- return last_offset;
-}
-
-static void
-check_note (Ebl *ebl, GElf_Ehdr *ehdr, GElf_Phdr *phdr, int cnt)
-{
- if (ehdr->e_type != ET_CORE && ehdr->e_type != ET_REL
- && ehdr->e_type != ET_EXEC && ehdr->e_type != ET_DYN)
- ERROR (gettext ("\
-phdr[%d]: no note entries defined for the type of file\n"),
- cnt);
-
- if (is_debuginfo)
- /* The p_offset values in a separate debug file are bogus. */
- return;
-
- if (phdr->p_filesz == 0)
- return;
-
- GElf_Off notes_size = 0;
- Elf_Data *data = elf_getdata_rawchunk (ebl->elf,
- phdr->p_offset, phdr->p_filesz,
- ELF_T_NHDR);
- if (data != NULL)
- notes_size = check_note_data (ebl, ehdr, data, 0, cnt, phdr->p_offset);
-
- if (notes_size == 0)
- ERROR (gettext ("phdr[%d]: cannot get content of note section: %s\n"),
- cnt, elf_errmsg (-1));
- else if (notes_size != phdr->p_filesz)
- ERROR (gettext ("phdr[%d]: extra %" PRIu64 " bytes after last note\n"),
- cnt, phdr->p_filesz - notes_size);
-}
-
-static void
-check_note_section (Ebl *ebl, GElf_Ehdr *ehdr, GElf_Shdr *shdr, int idx)
-{
- if (shdr->sh_size == 0)
- return;
-
- Elf_Data *data = elf_getdata (elf_getscn (ebl->elf, idx), NULL);
- if (data == NULL)
- {
- ERROR (gettext ("section [%2d] '%s': cannot get section data\n"),
- idx, section_name (ebl, idx));
- return;
- }
-
- if (ehdr->e_type != ET_CORE && ehdr->e_type != ET_REL
- && ehdr->e_type != ET_EXEC && ehdr->e_type != ET_DYN)
- ERROR (gettext ("\
-section [%2d] '%s': no note entries defined for the type of file\n"),
- idx, section_name (ebl, idx));
-
- GElf_Off notes_size = check_note_data (ebl, ehdr, data, idx, 0, 0);
-
- if (notes_size == 0)
- ERROR (gettext ("section [%2d] '%s': cannot get content of note section\n"),
- idx, section_name (ebl, idx));
- else if (notes_size != shdr->sh_size)
- ERROR (gettext ("section [%2d] '%s': extra %" PRIu64
- " bytes after last note\n"),
- idx, section_name (ebl, idx), shdr->sh_size - notes_size);
-}
-
-static void
-check_program_header (Ebl *ebl, GElf_Ehdr *ehdr)
-{
- if (ehdr->e_phoff == 0)
- return;
-
- if (ehdr->e_type != ET_EXEC && ehdr->e_type != ET_DYN
- && ehdr->e_type != ET_CORE)
- ERROR (gettext ("\
-only executables, shared objects, and core files can have program headers\n"));
-
- int num_pt_interp = 0;
- int num_pt_tls = 0;
- int num_pt_relro = 0;
-
- for (int cnt = 0; cnt < ehdr->e_phnum; ++cnt)
- {
- GElf_Phdr phdr_mem;
- GElf_Phdr *phdr;
-
- phdr = gelf_getphdr (ebl->elf, cnt, &phdr_mem);
- if (phdr == NULL)
- {
- ERROR (gettext ("cannot get program header entry %d: %s\n"),
- cnt, elf_errmsg (-1));
- continue;
- }
-
- if (phdr->p_type >= PT_NUM && phdr->p_type != PT_GNU_EH_FRAME
- && phdr->p_type != PT_GNU_STACK && phdr->p_type != PT_GNU_RELRO
- /* Check for a known machine-specific type. */
- && ebl_segment_type_name (ebl, phdr->p_type, NULL, 0) == NULL)
- ERROR (gettext ("\
-program header entry %d: unknown program header entry type %#" PRIx64 "\n"),
- cnt, (uint64_t) phdr->p_type);
-
- if (phdr->p_type == PT_LOAD)
- has_loadable_segment = true;
- else if (phdr->p_type == PT_INTERP)
- {
- if (++num_pt_interp != 1)
- {
- if (num_pt_interp == 2)
- ERROR (gettext ("\
-more than one INTERP entry in program header\n"));
- }
- has_interp_segment = true;
- }
- else if (phdr->p_type == PT_TLS)
- {
- if (++num_pt_tls == 2)
- ERROR (gettext ("more than one TLS entry in program header\n"));
- }
- else if (phdr->p_type == PT_NOTE)
- check_note (ebl, ehdr, phdr, cnt);
- else if (phdr->p_type == PT_DYNAMIC)
- {
- if (ehdr->e_type == ET_EXEC && ! has_interp_segment)
- ERROR (gettext ("\
-static executable cannot have dynamic sections\n"));
- else
- {
- /* Check that the .dynamic section, if it exists, has
- the same address. */
- Elf_Scn *scn = NULL;
- while ((scn = elf_nextscn (ebl->elf, scn)) != NULL)
- {
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
- if (shdr != NULL && shdr->sh_type == SHT_DYNAMIC)
- {
- if (phdr->p_offset != shdr->sh_offset)
- ERROR (gettext ("\
-dynamic section reference in program header has wrong offset\n"));
- if (phdr->p_memsz != shdr->sh_size)
- ERROR (gettext ("\
-dynamic section size mismatch in program and section header\n"));
- break;
- }
- }
- }
- }
- else if (phdr->p_type == PT_GNU_RELRO)
- {
- if (++num_pt_relro == 2)
- ERROR (gettext ("\
-more than one GNU_RELRO entry in program header\n"));
- else
- {
- /* Check that the region is in a writable segment. */
- int inner;
- for (inner = 0; inner < ehdr->e_phnum; ++inner)
- {
- GElf_Phdr phdr2_mem;
- GElf_Phdr *phdr2;
-
- phdr2 = gelf_getphdr (ebl->elf, inner, &phdr2_mem);
- if (phdr2 == NULL)
- continue;
-
- if (phdr2->p_type == PT_LOAD
- && phdr->p_vaddr >= phdr2->p_vaddr
- && (phdr->p_vaddr + phdr->p_memsz
- <= phdr2->p_vaddr + phdr2->p_memsz))
- {
- if ((phdr2->p_flags & PF_W) == 0)
- ERROR (gettext ("\
-loadable segment GNU_RELRO applies to is not writable\n"));
- if ((phdr2->p_flags &~ PF_W) != (phdr->p_flags &~ PF_W))
- ERROR (gettext ("\
-loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n"),
- cnt, inner);
- break;
- }
- }
-
- if (inner >= ehdr->e_phnum)
- ERROR (gettext ("\
-%s segment not contained in a loaded segment\n"), "GNU_RELRO");
- }
- }
- else if (phdr->p_type == PT_PHDR)
- {
- /* Check that the region is in a writable segment. */
- int inner;
- for (inner = 0; inner < ehdr->e_phnum; ++inner)
- {
- GElf_Phdr phdr2_mem;
- GElf_Phdr *phdr2;
-
- phdr2 = gelf_getphdr (ebl->elf, inner, &phdr2_mem);
- if (phdr2 != NULL
- && phdr2->p_type == PT_LOAD
- && phdr->p_vaddr >= phdr2->p_vaddr
- && (phdr->p_vaddr + phdr->p_memsz
- <= phdr2->p_vaddr + phdr2->p_memsz))
- break;
- }
-
- if (inner >= ehdr->e_phnum)
- ERROR (gettext ("\
-%s segment not contained in a loaded segment\n"), "PHDR");
-
- /* Check that offset in segment corresponds to offset in ELF
- header. */
- if (phdr->p_offset != ehdr->e_phoff)
- ERROR (gettext ("\
-program header offset in ELF header and PHDR entry do not match"));
- }
-
- if (phdr->p_filesz > phdr->p_memsz
- && (phdr->p_memsz != 0 || phdr->p_type != PT_NOTE))
- ERROR (gettext ("\
-program header entry %d: file size greater than memory size\n"),
- cnt);
-
- if (phdr->p_align > 1)
- {
- if (!powerof2 (phdr->p_align))
- ERROR (gettext ("\
-program header entry %d: alignment not a power of 2\n"), cnt);
- else if ((phdr->p_vaddr - phdr->p_offset) % phdr->p_align != 0)
- ERROR (gettext ("\
-program header entry %d: file offset and virtual address not module of alignment\n"), cnt);
- }
- }
-}
-
-
-/* Process one file. */
-static void
-process_elf_file (Elf *elf, const char *prefix, const char *suffix,
- const char *fname, size_t size, bool only_one)
-{
- /* Reset variables. */
- ndynamic = 0;
- nverneed = 0;
- nverdef = 0;
- textrel = false;
- needed_textrel = false;
- has_loadable_segment = false;
- has_interp_segment = false;
-
- GElf_Ehdr ehdr_mem;
- GElf_Ehdr *ehdr = gelf_getehdr (elf, &ehdr_mem);
- Ebl *ebl;
-
- /* Print the file name. */
- if (!only_one)
- {
- if (prefix != NULL)
- printf ("\n%s(%s)%s:\n", prefix, fname, suffix);
- else
- printf ("\n%s:\n", fname);
- }
-
- if (ehdr == NULL)
- {
- ERROR (gettext ("cannot read ELF header: %s\n"), elf_errmsg (-1));
- return;
- }
-
- ebl = ebl_openbackend (elf);
- /* If there is no appropriate backend library we cannot test
- architecture and OS specific features. Any encountered extension
- is an error. */
-
- /* Go straight by the gABI, check all the parts in turn. */
- check_elf_header (ebl, ehdr, size);
-
- /* Check the program header. */
- check_program_header (ebl, ehdr);
-
- /* Next the section headers. It is OK if there are no section
- headers at all. */
- check_sections (ebl, ehdr);
-
- /* Report if no relocation section needed the text relocation flag. */
- if (textrel && !needed_textrel)
- ERROR (gettext ("text relocation flag set but not needed\n"));
-
- /* Free the resources. */
- ebl_closebackend (ebl);
-}
-
-
-#include "debugpred.h"
diff --git a/src/findtextrel.c b/src/findtextrel.c
deleted file mode 100644
index 245db7f..0000000
--- a/src/findtextrel.c
+++ /dev/null
@@ -1,611 +0,0 @@
-/* Locate source files or functions which caused text relocations.
- Copyright (C) 2005, 2006, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <argp.h>
-#include <assert.h>
-#include <errno.h>
-#include <error.h>
-#include <fcntl.h>
-#include <gelf.h>
-#include <libdw.h>
-#include <libintl.h>
-#include <locale.h>
-#include <search.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-
-struct segments
-{
- GElf_Addr from;
- GElf_Addr to;
-};
-
-
-/* Name and version of program. */
-static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
-
-/* Bug report address. */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
-
-/* Values for the parameters which have no short form. */
-#define OPT_DEBUGINFO 0x100
-
-/* Definitions of arguments for argp functions. */
-static const struct argp_option options[] =
-{
- { NULL, 0, NULL, 0, N_("Input Selection:"), 0 },
- { "root", 'r', "PATH", 0, N_("Prepend PATH to all file names"), 0 },
- { "debuginfo", OPT_DEBUGINFO, "PATH", 0,
- N_("Use PATH as root of debuginfo hierarchy"), 0 },
-
- { NULL, 0, NULL, 0, N_("Miscellaneous:"), 0 },
- { NULL, 0, NULL, 0, NULL, 0 }
-};
-
-/* Short description of program. */
-static const char doc[] = N_("\
-Locate source of text relocations in FILEs (a.out by default).");
-
-/* Strings for arguments in help texts. */
-static const char args_doc[] = N_("[FILE...]");
-
-/* Prototype for option handler. */
-static error_t parse_opt (int key, char *arg, struct argp_state *state);
-
-/* Data structure to communicate with argp functions. */
-static struct argp argp =
-{
- options, parse_opt, args_doc, doc, NULL, NULL, NULL
-};
-
-
-/* Print symbols in file named FNAME. */
-static int process_file (const char *fname, bool more_than_one);
-
-/* Check for text relocations in the given file. The segment
- information is known. */
-static void check_rel (size_t nsegments, struct segments segments[nsegments],
- GElf_Addr addr, Elf *elf, Elf_Scn *symscn, Dwarf *dw,
- const char *fname, bool more_than_one,
- void **knownsrcs);
-
-
-
-/* User-provided root directory. */
-static const char *rootdir = "/";
-
-/* Root of debuginfo directory hierarchy. */
-static const char *debuginfo_root;
-
-
-int
-main (int argc, char *argv[])
-{
- int remaining;
- int result = 0;
-
- /* Set locale. */
- (void) setlocale (LC_ALL, "");
-
- /* Make sure the message catalog can be found. */
- (void) bindtextdomain (PACKAGE_TARNAME, LOCALEDIR);
-
- /* Initialize the message catalog. */
- (void) textdomain (PACKAGE_TARNAME);
-
- /* Parse and process arguments. */
- (void) argp_parse (&argp, argc, argv, 0, &remaining, NULL);
-
- /* Tell the library which version we are expecting. */
- elf_version (EV_CURRENT);
-
- /* If the user has not specified the root directory for the
- debuginfo hierarchy, we have to determine it ourselves. */
- if (debuginfo_root == NULL)
- {
- // XXX The runtime should provide this information.
-#if defined __ia64__ || defined __alpha__
- debuginfo_root = "/usr/lib/debug";
-#else
- debuginfo_root = (sizeof (long int) == 4
- ? "/usr/lib/debug" : "/usr/lib64/debug");
-#endif
- }
-
- if (remaining == argc)
- result = process_file ("a.out", false);
- else
- {
- /* Process all the remaining files. */
- const bool more_than_one = remaining + 1 < argc;
-
- do
- result |= process_file (argv[remaining], more_than_one);
- while (++remaining < argc);
- }
-
- return result;
-}
-
-
-/* Print the version information. */
-static void
-print_version (FILE *stream, struct argp_state *state __attribute__ ((unused)))
-{
- fprintf (stream, "findtextrel (%s) %s\n", PACKAGE_NAME, PACKAGE_VERSION);
- fprintf (stream, gettext ("\
-Copyright (C) %s Red Hat, Inc.\n\
-This is free software; see the source for copying conditions. There is NO\n\
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
-"), "2008");
- fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper");
-}
-
-
-/* Handle program arguments. */
-static error_t
-parse_opt (int key, char *arg,
- struct argp_state *state __attribute__ ((unused)))
-{
- switch (key)
- {
- case 'r':
- rootdir = arg;
- break;
-
- case OPT_DEBUGINFO:
- debuginfo_root = arg;
- break;
-
- default:
- return ARGP_ERR_UNKNOWN;
- }
- return 0;
-}
-
-
-static void
-noop (void *arg __attribute__ ((unused)))
-{
-}
-
-
-static int
-process_file (const char *fname, bool more_than_one)
-{
- int result = 0;
- void *knownsrcs = NULL;
-
- size_t fname_len = strlen (fname);
- size_t rootdir_len = strlen (rootdir);
- const char *real_fname = fname;
- if (fname[0] == '/' && (rootdir[0] != '/' || rootdir[1] != '\0'))
- {
- /* Prepend the user-provided root directory. */
- char *new_fname = alloca (rootdir_len + fname_len + 2);
- *((char *) mempcpy (stpcpy (mempcpy (new_fname, rootdir, rootdir_len),
- "/"),
- fname, fname_len)) = '\0';
- real_fname = new_fname;
- }
-
- int fd = open64 (real_fname, O_RDONLY);
- if (fd == -1)
- {
- error (0, errno, gettext ("cannot open '%s'"), fname);
- return 1;
- }
-
- Elf *elf = elf_begin (fd, ELF_C_READ_MMAP, NULL);
- if (elf == NULL)
- {
- error (0, 0, gettext ("cannot create ELF descriptor for '%s': %s"),
- fname, elf_errmsg (-1));
- goto err_close;
- }
-
- /* Make sure the file is a DSO. */
- GElf_Ehdr ehdr_mem;
- GElf_Ehdr *ehdr = gelf_getehdr (elf, &ehdr_mem);
- if (ehdr == NULL)
- {
- error (0, 0, gettext ("cannot get ELF header '%s': %s"),
- fname, elf_errmsg (-1));
- err_elf_close:
- elf_end (elf);
- err_close:
- close (fd);
- return 1;
- }
-
- if (ehdr->e_type != ET_DYN)
- {
- error (0, 0, gettext ("'%s' is not a DSO or PIE"), fname);
- goto err_elf_close;
- }
-
- /* Determine whether the DSO has text relocations at all and locate
- the symbol table. */
- Elf_Scn *symscn = NULL;
- Elf_Scn *scn = NULL;
- while ((scn = elf_nextscn (elf, scn)) != NULL)
- {
- /* Handle the section if it is a symbol table. */
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
-
- if (shdr == NULL)
- {
- error (0, 0,
- gettext ("getting get section header of section %zu: %s"),
- elf_ndxscn (scn), elf_errmsg (-1));
- goto err_elf_close;
- }
-
- if (shdr->sh_type == SHT_DYNAMIC)
- {
- Elf_Data *data = elf_getdata (scn, NULL);
-
- for (size_t cnt = 0; cnt < shdr->sh_size / shdr->sh_entsize;
- ++cnt)
- {
- GElf_Dyn dynmem;
- GElf_Dyn *dyn;
-
- dyn = gelf_getdyn (data, cnt, &dynmem);
- if (dyn == NULL)
- {
- error (0, 0, gettext ("cannot read dynamic section: %s"),
- elf_errmsg (-1));
- goto err_elf_close;
- }
-
- if (dyn->d_tag == DT_TEXTREL
- || (dyn->d_tag == DT_FLAGS
- && (dyn->d_un.d_val & DF_TEXTREL) != 0))
- goto have_textrel;
- }
- }
- else if (shdr->sh_type == SHT_SYMTAB)
- symscn = scn;
- }
-
- error (0, 0, gettext ("no text relocations reported in '%s'"), fname);
- return 1;
-
- have_textrel:;
- int fd2 = -1;
- Elf *elf2 = NULL;
- /* Get the address ranges for the loaded segments. */
- size_t nsegments_max = 10;
- size_t nsegments = 0;
- struct segments *segments
- = (struct segments *) malloc (nsegments_max * sizeof (segments[0]));
- if (segments == NULL)
- error (1, errno, gettext ("while reading ELF file"));
-
- for (int i = 0; i < ehdr->e_phnum; ++i)
- {
- GElf_Phdr phdr_mem;
- GElf_Phdr *phdr = gelf_getphdr (elf, i, &phdr_mem);
- if (phdr == NULL)
- {
- error (0, 0,
- gettext ("cannot get program header index at offset %d: %s"),
- i, elf_errmsg (-1));
- result = 1;
- goto next;
- }
-
- if (phdr->p_type == PT_LOAD && (phdr->p_flags & PF_W) == 0)
- {
- if (nsegments == nsegments_max)
- {
- nsegments_max *= 2;
- segments
- = (struct segments *) realloc (segments,
- nsegments_max
- * sizeof (segments[0]));
- if (segments == NULL)
- {
- error (0, 0, gettext ("\
-cannot get program header index at offset %d: %s"),
- i, elf_errmsg (-1));
- result = 1;
- goto next;
- }
- }
-
- segments[nsegments].from = phdr->p_vaddr;
- segments[nsegments].to = phdr->p_vaddr + phdr->p_memsz;
- ++nsegments;
- }
- }
-
- if (nsegments > 0)
- {
-
- Dwarf *dw = dwarf_begin_elf (elf, DWARF_C_READ, NULL);
- /* Look for debuginfo files if the information is not the in
- opened file itself. This makes only sense if the input file
- is specified with an absolute path. */
- if (dw == NULL && fname[0] == '/')
- {
- size_t debuginfo_rootlen = strlen (debuginfo_root);
- char *difname = (char *) alloca (rootdir_len + debuginfo_rootlen
- + fname_len + 8);
- strcpy (mempcpy (stpcpy (mempcpy (mempcpy (difname, rootdir,
- rootdir_len),
- debuginfo_root,
- debuginfo_rootlen),
- "/"),
- fname, fname_len),
- ".debug");
-
- fd2 = open64 (difname, O_RDONLY);
- if (fd2 != -1
- && (elf2 = elf_begin (fd2, ELF_C_READ_MMAP, NULL)) != NULL)
- dw = dwarf_begin_elf (elf2, DWARF_C_READ, NULL);
- }
-
- /* Look at all relocations and determine which modify
- write-protected segments. */
- scn = NULL;
- while ((scn = elf_nextscn (elf, scn)) != NULL)
- {
- /* Handle the section if it is a symbol table. */
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
-
- if (shdr == NULL)
- {
- error (0, 0,
- gettext ("cannot get section header of section %Zu: %s"),
- elf_ndxscn (scn), elf_errmsg (-1));
- result = 1;
- goto next;
- }
-
- if ((shdr->sh_type == SHT_REL || shdr->sh_type == SHT_RELA)
- && symscn == NULL)
- {
- symscn = elf_getscn (elf, shdr->sh_link);
- if (symscn == NULL)
- {
- error (0, 0, gettext ("\
-cannot get symbol table section %zu in '%s': %s"),
- (size_t) shdr->sh_link, fname, elf_errmsg (-1));
- result = 1;
- goto next;
- }
- }
-
- if (shdr->sh_type == SHT_REL)
- {
- Elf_Data *data = elf_getdata (scn, NULL);
-
- for (int cnt = 0;
- (size_t) cnt < shdr->sh_size / shdr->sh_entsize;
- ++cnt)
- {
- GElf_Rel rel_mem;
- GElf_Rel *rel = gelf_getrel (data, cnt, &rel_mem);
- if (rel == NULL)
- {
- error (0, 0, gettext ("\
-cannot get relocation at index %d in section %zu in '%s': %s"),
- cnt, elf_ndxscn (scn), fname, elf_errmsg (-1));
- result = 1;
- goto next;
- }
-
- check_rel (nsegments, segments, rel->r_offset, elf,
- symscn, dw, fname, more_than_one, &knownsrcs);
- }
- }
- else if (shdr->sh_type == SHT_RELA)
- {
- Elf_Data *data = elf_getdata (scn, NULL);
-
- for (int cnt = 0;
- (size_t) cnt < shdr->sh_size / shdr->sh_entsize;
- ++cnt)
- {
- GElf_Rela rela_mem;
- GElf_Rela *rela = gelf_getrela (data, cnt, &rela_mem);
- if (rela == NULL)
- {
- error (0, 0, gettext ("\
-cannot get relocation at index %d in section %zu in '%s': %s"),
- cnt, elf_ndxscn (scn), fname, elf_errmsg (-1));
- result = 1;
- goto next;
- }
-
- check_rel (nsegments, segments, rela->r_offset, elf,
- symscn, dw, fname, more_than_one, &knownsrcs);
- }
- }
- }
-
- dwarf_end (dw);
- }
-
- next:
- elf_end (elf);
- elf_end (elf2);
- close (fd);
- if (fd2 != -1)
- close (fd2);
-
- tdestroy (knownsrcs, noop);
-
- return result;
-}
-
-
-static int
-ptrcompare (const void *p1, const void *p2)
-{
- if ((uintptr_t) p1 < (uintptr_t) p2)
- return -1;
- if ((uintptr_t) p1 > (uintptr_t) p2)
- return 1;
- return 0;
-}
-
-
-static void
-check_rel (size_t nsegments, struct segments segments[nsegments],
- GElf_Addr addr, Elf *elf, Elf_Scn *symscn, Dwarf *dw,
- const char *fname, bool more_than_one, void **knownsrcs)
-{
- for (size_t cnt = 0; cnt < nsegments; ++cnt)
- if (segments[cnt].from <= addr && segments[cnt].to > addr)
- {
- Dwarf_Die die_mem;
- Dwarf_Die *die;
- Dwarf_Line *line;
- const char *src;
-
- if (more_than_one)
- printf ("%s: ", fname);
-
- if ((die = dwarf_addrdie (dw, addr, &die_mem)) != NULL
- && (line = dwarf_getsrc_die (die, addr)) != NULL
- && (src = dwarf_linesrc (line, NULL, NULL)) != NULL)
- {
- /* There can be more than one relocation against one file.
- Try to avoid multiple messages. And yes, the code uses
- pointer comparison. */
- if (tfind (src, knownsrcs, ptrcompare) == NULL)
- {
- printf (gettext ("%s not compiled with -fpic/-fPIC\n"), src);
- tsearch (src, knownsrcs, ptrcompare);
- }
- return;
- }
- else
- {
- /* At least look at the symbol table to see which function
- the modified address is in. */
- Elf_Data *symdata = elf_getdata (symscn, NULL);
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (symscn, &shdr_mem);
- if (shdr != NULL)
- {
- GElf_Addr lowaddr = 0;
- int lowidx = -1;
- GElf_Addr highaddr = ~0ul;
- int highidx = -1;
- GElf_Sym sym_mem;
- GElf_Sym *sym;
-
- for (int i = 0; (size_t) i < shdr->sh_size / shdr->sh_entsize;
- ++i)
- {
- sym = gelf_getsym (symdata, i, &sym_mem);
- if (sym == NULL)
- continue;
-
- if (sym->st_value < addr && sym->st_value > lowaddr)
- {
- lowaddr = sym->st_value;
- lowidx = i;
- }
- if (sym->st_value > addr && sym->st_value < highaddr)
- {
- highaddr = sym->st_value;
- highidx = i;
- }
- }
-
- if (lowidx != -1)
- {
- sym = gelf_getsym (symdata, lowidx, &sym_mem);
- assert (sym != NULL);
-
- const char *lowstr = elf_strptr (elf, shdr->sh_link,
- sym->st_name);
-
- if (sym->st_value + sym->st_size > addr)
- {
- /* It is this function. */
- if (tfind (lowstr, knownsrcs, ptrcompare) == NULL)
- {
- printf (gettext ("\
-the file containing the function '%s' is not compiled with -fpic/-fPIC\n"),
- lowstr);
- tsearch (lowstr, knownsrcs, ptrcompare);
- }
- }
- else if (highidx == -1)
- printf (gettext ("\
-the file containing the function '%s' might not be compiled with -fpic/-fPIC\n"),
- lowstr);
- else
- {
- sym = gelf_getsym (symdata, highidx, &sym_mem);
- assert (sym != NULL);
-
- printf (gettext ("\
-either the file containing the function '%s' or the file containing the function '%s' is not compiled with -fpic/-fPIC\n"),
- lowstr, elf_strptr (elf, shdr->sh_link,
- sym->st_name));
- }
- return;
- }
- else if (highidx != -1)
- {
- sym = gelf_getsym (symdata, highidx, &sym_mem);
- assert (sym != NULL);
-
- printf (gettext ("\
-the file containing the function '%s' might not be compiled with -fpic/-fPIC\n"),
- elf_strptr (elf, shdr->sh_link, sym->st_name));
- return;
- }
- }
- }
-
- printf (gettext ("\
-a relocation modifies memory at offset %llu in a write-protected segment\n"),
- (unsigned long long int) addr);
- break;
- }
-}
-
-
-#include "debugpred.h"
diff --git a/src/i386_ld.c b/src/i386_ld.c
deleted file mode 100644
index 2702ef8..0000000
--- a/src/i386_ld.c
+++ /dev/null
@@ -1,1110 +0,0 @@
-/* Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <error.h>
-#include <libintl.h>
-#include <stdlib.h>
-#include <string.h>
-
-// XXX For debugging
-#include <stdio.h>
-
-#include <system.h>
-#include "ld.h"
-#include "list.h"
-/* x86 is little endian. */
-#define UNALIGNED_ACCESS_CLASS LITTLE_ENDIAN
-#include "unaligned.h"
-#include "xelf.h"
-
-
-/* The old callbacks. */
-static int (*old_open_outfile) (struct ld_state *, int, int, int);
-
-
-static int
-elf_i386_open_outfile (struct ld_state *statep,
- int machine __attribute__ ((unused)),
- int klass __attribute__ ((unused)),
- int data __attribute__ ((unused)))
-{
- /* This backend only handles 32-bit object files. */
- /* XXX For now just use the generic backend. */
- return old_open_outfile (statep, EM_386, ELFCLASS32, ELFDATA2LSB);
-}
-
-
-/* Process relocations for the output in a relocatable file. This
- only means adjusting offset and symbol indices. */
-static void
-elf_i386_relocate_section (struct ld_state *statep __attribute__ ((unused)),
- Elf_Scn *outscn, struct scninfo *firstp,
- const Elf32_Word *dblindirect)
-{
- struct scninfo *runp;
- Elf_Data *data;
-
- /* Iterate over all the input sections. Appropriate data buffers in the
- output sections were already created. */
- runp = firstp;
- data = NULL;
- do
- {
- Elf_Data *reltgtdata;
- Elf_Data *insymdata;
- Elf_Data *inxndxdata = NULL;
- size_t maxcnt;
- size_t cnt;
- const Elf32_Word *symindirect;
- struct symbol **symref;
- struct usedfiles *file = runp->fileinfo;
- XElf_Shdr *shdr = &SCNINFO_SHDR (runp->shdr);
-
- /* Get the output section data buffer for this input section. */
- data = elf_getdata (outscn, data);
- assert (data != NULL);
-
- /* Get the data for section in the input file this relocation
- section is relocating. Since these buffers are reused in the
- output modifying these buffers has the correct result. */
- reltgtdata = elf_getdata (file->scninfo[shdr->sh_info].scn, NULL);
-
- /* Get the data for the input section symbol table for this
- relocation section. */
- insymdata = elf_getdata (file->scninfo[shdr->sh_link].scn, NULL);
- assert (insymdata != NULL);
-
- /* And the extended section index table. */
- inxndxdata = runp->fileinfo->xndxdata;
-
- /* Number of relocations. */
- maxcnt = shdr->sh_size / shdr->sh_entsize;
-
- /* Array directing local symbol table offsets to output symbol
- table offsets. */
- symindirect = file->symindirect;
-
- /* References to the symbol records. */
- symref = file->symref;
-
- /* Iterate over all the relocations in the section. */
- for (cnt = 0; cnt < maxcnt; ++cnt)
- {
- XElf_Rel_vardef (rel);
- Elf32_Word si;
- XElf_Sym_vardef (sym);
- Elf32_Word xndx;
-
- /* Get the relocation data itself. x86 uses Rel
- relocations. In case we have to handle Rela as well the
- whole loop probably should be duplicated. */
- xelf_getrel (data, cnt, rel);
- assert (rel != NULL);
-
- /* Compute the symbol index in the output file. */
- si = symindirect[XELF_R_SYM (rel->r_info)];
- if (si == 0)
- {
- /* This happens if the symbol is locally undefined or
- superceded by some other definition. */
- assert (symref[XELF_R_SYM (rel->r_info)] != NULL);
- si = symref[XELF_R_SYM (rel->r_info)]->outsymidx;
- }
- /* Take reordering performed to sort the symbol table into
- account. */
- si = dblindirect[si];
-
- /* Get the symbol table entry. */
- xelf_getsymshndx (insymdata, inxndxdata, XELF_R_SYM (rel->r_info),
- sym, xndx);
- if (sym->st_shndx != SHN_XINDEX)
- xndx = sym->st_shndx;
- assert (xndx < SHN_LORESERVE || xndx > SHN_HIRESERVE);
-
- /* We fortunately don't have to do much. The relocations
- mostly get only updates of the offset. Only for a
- relocation referring to a section do we have to do
- something. In this case the reference to the sections
- has no direct equivalent since the part the input section
- contributes need not start at the same offset as in the
- input file. Therefore we have to adjust the addend which
- in the case of Rel relocations is in the target section
- itself. */
- if (XELF_ST_TYPE (sym->st_info) == STT_SECTION)
- {
- /* We expect here only R_386_32 relocations. */
- assert (XELF_R_TYPE (rel->r_info) == R_386_32);
-
- /* Avoid writing to the section memory if this is
- effectively a no-op since it might save a
- copy-on-write operation. */
- Elf32_Word toadd = file->scninfo[xndx].offset;
- if (toadd != 0)
- add_4ubyte_unaligned (reltgtdata->d_buf + rel->r_offset,
- toadd);
- }
-
- /* Adjust the offset for the position of the input section
- content in the output section. */
- rel->r_offset += file->scninfo[shdr->sh_info].offset;
-
- /* And finally adjust the index of the symbol in the output
- symbol table. */
- rel->r_info = XELF_R_INFO (si, XELF_R_TYPE (rel->r_info));
-
- /* Store the result. */
- (void) xelf_update_rel (data, cnt, rel);
- }
-
- runp = runp->next;
- }
- while (runp != firstp);
-}
-
-
-/* Each PLT entry has 16 bytes. We need one entry as overhead for
- the code to set up the call into the runtime relocation. */
-#define PLT_ENTRY_SIZE 16
-
-static void
-elf_i386_initialize_plt (struct ld_state *statep, Elf_Scn *scn)
-{
- Elf_Data *data;
- XElf_Shdr_vardef (shdr);
-
- /* Change the entry size in the section header. */
- xelf_getshdr (scn, shdr);
- assert (shdr != NULL);
- shdr->sh_entsize = PLT_ENTRY_SIZE;
- (void) xelf_update_shdr (scn, shdr);
-
- data = elf_newdata (scn);
- if (data == NULL)
- error (EXIT_FAILURE, 0, gettext ("cannot allocate PLT section: %s"),
- elf_errmsg (-1));
-
- /* We need one special PLT entry (performing the jump to the runtime
- relocation routines) and one for each function we call in a DSO. */
- data->d_size = (1 + statep->nplt) * PLT_ENTRY_SIZE;
- data->d_buf = xcalloc (1, data->d_size);
- assert (data->d_type == ELF_T_BYTE);
- data->d_off = 0;
- data->d_align = 8;
-
- statep->nplt_used = 1;
-}
-
-
-static void
-elf_i386_initialize_pltrel (struct ld_state *statep, Elf_Scn *scn)
-{
- Elf_Data *data;
-
- data = elf_newdata (scn);
- if (data == NULL)
- error (EXIT_FAILURE, 0, gettext ("cannot allocate PLTREL section: %s"),
- elf_errmsg (-1));
-
- /* One relocation per PLT entry. */
- size_t size = statep->nplt * sizeof (Elf32_Rel);
- data->d_buf = xcalloc (1, size);
- data->d_type = ELF_T_REL;
- data->d_size = size;
- data->d_align = 4;
- data->d_off = 0;
-}
-
-
-static void
-elf_i386_initialize_got (struct ld_state *statep, Elf_Scn *scn)
-{
- /* If we come here we better need a GOT. */
- assert (statep->ngot != 0);
-
- Elf_Data *data = elf_newdata (scn);
- if (data == NULL)
- error (EXIT_FAILURE, 0, gettext ("cannot allocate GOT section: %s"),
- elf_errmsg (-1));
-
- /* Just a single word per GOT entry is needed. */
- size_t size = statep->ngot * sizeof (Elf32_Addr);
- data->d_buf = xcalloc (1, size);
- data->d_size = size;
- data->d_type = ELF_T_WORD;
- data->d_off = 0;
- data->d_align = sizeof (Elf32_Addr);
-}
-
-
-static void
-elf_i386_initialize_gotplt (struct ld_state *statep, Elf_Scn *scn)
-{
- /* If we come here we better need a PLT. */
- assert (statep->nplt != 0);
-
- Elf_Data *data = elf_newdata (scn);
- if (data == NULL)
- error (EXIT_FAILURE, 0, gettext ("cannot allocate GOTPLT section: %s"),
- elf_errmsg (-1));
-
- /* We construct the .got.plt section in pieces. Here we only add the data
- structures which are used by the PLT. This includes three reserved
- entries at the beginning (the first will contain a pointer to the
- .dynamic section), and one word for each PLT entry. */
- size_t size = (3 + statep->nplt) * sizeof (Elf32_Addr);
- data->d_buf = xcalloc (1, size);
- data->d_type = ELF_T_WORD;
- data->d_size = size;
- data->d_off = 0;
- data->d_align = sizeof (Elf32_Addr);
-}
-
-
-/* The first entry in an absolute procedure linkage table looks like
- this. See the SVR4 ABI i386 supplement to see how this works. */
-static const unsigned char elf_i386_plt0_entry[PLT_ENTRY_SIZE] =
-{
- 0xff, 0x35, /* pushl contents of address */
- 0, 0, 0, 0, /* replaced with address of .got + 4. */
- 0xff, 0x25, /* jmp indirect */
- 0, 0, 0, 0, /* replaced with address of .got + 8. */
- 0x0f, 0x0b, /* ud2a, to prevent further decoding. */
- 0, 0 /* pad out to 16 bytes. */
-};
-
-/* Type describing the first PLT entry in non-PIC. */
-struct plt0_entry
-{
- /* First a 'push' of the second GOT entry. */
- unsigned char push_instr[2];
- uint32_t gotp4_addr;
- /* Second, a 'jmp indirect' to the third GOT entry. */
- unsigned char jmp_instr[2];
- uint32_t gotp8_addr;
- /* Padding. */
- unsigned char padding[4];
-} __attribute__ ((packed));
-
-/* The first entry in a PIC procedure linkage table look like this. */
-static const unsigned char elf_i386_pic_plt0_entry[PLT_ENTRY_SIZE] =
-{
- 0xff, 0xb3, 4, 0, 0, 0, /* pushl 4(%ebx) */
- 0xff, 0xa3, 8, 0, 0, 0, /* jmp *8(%ebx) */
- 0x0f, 0x0b, /* ud2a, to prevent further decoding. */
- 0, 0 /* pad out to 16 bytes. */
-};
-
-/* Contents of all but the first PLT entry in executable. */
-static const unsigned char elf_i386_plt_entry[PLT_ENTRY_SIZE] =
-{
- 0xff, 0x25, /* jmp indirect */
- 0, 0, 0, 0, /* replaced with address of this symbol in .got. */
- 0x68, /* pushl immediate */
- 0, 0, 0, 0, /* replaced with offset into relocation table. */
- 0xe9, /* jmp relative */
- 0, 0, 0, 0 /* replaced with offset to start of .plt. */
-};
-
-/* Contents of all but the first PLT entry in DSOs. */
-static const unsigned char elf_i386_pic_plt_entry[PLT_ENTRY_SIZE] =
-{
- 0xff, 0xa3, /* jmp *offset(%ebx) */
- 0, 0, 0, 0, /* replaced with offset of this symbol in .got. */
- 0x68, /* pushl immediate */
- 0, 0, 0, 0, /* replaced with offset into relocation table. */
- 0xe9, /* jmp relative */
- 0, 0, 0, 0 /* replaced with offset to start of .plt. */
-};
-
-/* Type describing a PLT entry. */
-struct plt_entry
-{
- /* The first instruction is 'jmp indirect' or 'jmp *offset(%ebs)'. */
- unsigned char jmp_instr[2];
- uint32_t offset_got;
- /* The second instruction is 'push immediate'. */
- unsigned char push_instr;
- uint32_t push_imm;
- /* Finally a 'jmp relative'. */
- unsigned char jmp_instr2;
- uint32_t plt0_offset;
-} __attribute__ ((packed));
-
-
-static void
-elf_i386_finalize_plt (struct ld_state *statep, size_t nsym,
- size_t nsym_local, struct symbol **ndxtosym)
-{
- if (unlikely (statep->nplt + statep->ngot == 0))
- /* Nothing to be done. */
- return;
-
- Elf_Scn *scn;
- XElf_Shdr_vardef (shdr);
- Elf_Data *data;
- const bool build_dso = statep->file_type == dso_file_type;
-
- /* Get the address of the .got.plt section. */
- scn = elf_getscn (statep->outelf, statep->gotpltscnidx);
- xelf_getshdr (scn, shdr);
- data = elf_getdata (scn, NULL);
- assert (shdr != NULL && data != NULL);
- /* The address points to the .got.plt section, not the .got section. */
- Elf32_Addr gotaddr = shdr->sh_addr;
-
- /* Now create the initial values for the .got.plt section. The
- first word contains the address of the .dynamic section. The
- second and third entry are left empty for use by the dynamic
- linker. The following entries are pointers to the instructions
- following the initial jmp instruction in the corresponding PLT
- entry. */
- xelf_getshdr (elf_getscn (statep->outelf, statep->dynamicscnidx), shdr);
- assert (shdr != NULL);
- ((Elf32_Word *) data->d_buf)[0] = shdr->sh_addr;
-
- /* The PLT contains code which a user of a function jumps to. The first
- PLT entry is special, so the first used one has the index 1. */
- scn = elf_getscn (statep->outelf, statep->pltscnidx);
- XElf_Shdr_vardef (pltshdr);
- xelf_getshdr (scn, pltshdr);
- assert (pltshdr != NULL);
-
- Elf_Data *dynsymdata = elf_getdata (elf_getscn (statep->outelf,
- statep->dynsymscnidx), NULL);
- assert (dynsymdata != NULL);
-
- Elf_Data *symdata = NULL;
- if (statep->symscnidx != 0)
- {
- symdata = elf_getdata (elf_getscn (statep->outelf, statep->symscnidx),
- NULL);
- assert (symdata != NULL);
- }
-
- /* Create the .plt section. */
- scn = elf_getscn (statep->outelf, statep->pltscnidx);
- Elf_Data *pltdata = elf_getdata (scn, NULL);
- assert (pltdata != NULL);
-
- /* Also create the .rel.plt section data. It simply means relocations
- addressing the corresponding entry in the .got.plt section. The
- section name is misleading. */
- scn = elf_getscn (statep->outelf, statep->pltrelscnidx);
- xelf_getshdr (scn, shdr);
- Elf_Data *reldata = elf_getdata (scn, NULL);
- assert (shdr != NULL && reldata != NULL);
-
- /* Update the sh_link to point to the section being modified. We
- point it here (correctly) to the .got.plt section. Some linkers
- (e.g., the GNU binutils linker) point to the .plt section. This
- is wrong since the .plt section isn't modified even though the
- name .rel.plt suggests that this is correct. */
- shdr->sh_link = statep->dynsymscnidx;
- shdr->sh_info = statep->gotpltscnidx;
- (void) xelf_update_shdr (scn, shdr);
-
- /* Create the first entry of the .plt section. */
- assert (pltdata->d_size >= PLT_ENTRY_SIZE);
- if (build_dso)
- /* Copy the entry. It's complete, no relocation needed. */
- memcpy (pltdata->d_buf, elf_i386_pic_plt0_entry, PLT_ENTRY_SIZE);
- else
- {
- /* Copy the skeleton. */
- memcpy (pltdata->d_buf, elf_i386_plt0_entry, PLT_ENTRY_SIZE);
-
- /* And fill in the addresses. */
- struct plt0_entry *addr = (struct plt0_entry *) pltdata->d_buf;
- addr->gotp4_addr = target_bswap_32 (gotaddr + 4);
- addr->gotp8_addr = target_bswap_32 (gotaddr + 8);
- }
-
- /* For DSOs we need GOT offsets, otherwise the GOT address. */
- Elf32_Addr gotaddr_off = build_dso ? 0 : gotaddr;
-
- /* Create the remaining entries. */
- const unsigned char *plt_template
- = build_dso ? elf_i386_pic_plt_entry : elf_i386_plt_entry;
-
- for (size_t idx = nsym_local; idx < nsym; ++idx)
- {
- struct symbol *symbol = ndxtosym[idx];
- if (symbol == NULL || symbol->type != STT_FUNC
- || ndxtosym[idx]->outdynsymidx == 0
- // XXX is the following test correct?
- || ! ndxtosym[idx]->in_dso)
- continue;
-
- size_t pltidx = symbol->merge.value;
-
- assert (pltidx > 0);
- assert ((3 + pltidx) * sizeof (Elf32_Word) <= data->d_size);
-
- /* Address in the PLT. */
- Elf32_Addr pltentryaddr = (pltshdr->sh_addr + pltidx * PLT_ENTRY_SIZE);
-
- /* Point the GOT entry at the PLT entry, after the initial jmp. */
- ((Elf32_Word *) data->d_buf)[2 + pltidx] = pltentryaddr + 6;
-
- /* If the symbol is defined, adjust the address. */
- if (((Elf32_Sym *) dynsymdata->d_buf)[ndxtosym[idx]->outdynsymidx].st_shndx != SHN_UNDEF)
- {
- /* The value of the symbol is the address of the corresponding PLT
- entry. Store the address, also for the normal symbol table if
- this is necessary. */
- ((Elf32_Sym *) dynsymdata->d_buf)[pltidx].st_value = pltentryaddr;
-
- if (symdata != NULL)
- {
- assert(nsym - statep->nplt + (pltidx - 1) == idx);
- ((Elf32_Sym *) symdata->d_buf)[nsym - statep->nplt
- + (pltidx - 1)].st_value
- = pltentryaddr;
- }
- }
-
- /* Copy the PLT entry template. */
- assert (pltdata->d_size >= (1 + pltidx) * PLT_ENTRY_SIZE);
- struct plt_entry *addr = (struct plt_entry *) ((char *) pltdata->d_buf
- + (pltidx
- * PLT_ENTRY_SIZE));
- memcpy (addr, plt_template, PLT_ENTRY_SIZE);
-
- /* And once more, fill in the addresses. First the address of
- this symbol in .got. */
- addr->offset_got = target_bswap_32 (gotaddr_off
- + (2 + pltidx) * sizeof (Elf32_Addr));
- /* Offset into relocation table. */
- addr->push_imm = target_bswap_32 ((pltidx - 1) * sizeof (Elf32_Rel));
- /* Offset to start of .plt. */
- addr->plt0_offset = target_bswap_32 (-(1 + pltidx) * PLT_ENTRY_SIZE);
-
-
- XElf_Rel_vardef (rel);
- assert (pltidx * sizeof (Elf32_Rel) <= reldata->d_size);
- xelf_getrel_ptr (reldata, pltidx - 1, rel);
- rel->r_offset = gotaddr + (2 + pltidx) * sizeof (Elf32_Addr);
- /* The symbol table entries for the functions from DSOs are at
- the beginning of the symbol table. */
- rel->r_info = XELF_R_INFO (ndxtosym[idx]->outdynsymidx, R_386_JMP_SLOT);
- (void) xelf_update_rel (reldata, pltidx - 1, rel);
- }
-}
-
-
-static int
-elf_i386_rel_type (struct ld_state *statep __attribute__ ((__unused__)))
-{
- /* ELF/i386 uses REL. */
- return DT_REL;
-}
-
-
-static void
-elf_i386_count_relocations (struct ld_state *statep, struct scninfo *scninfo)
-{
- /* We go through the list of input sections and count those relocations
- which are not handled by the linker. At the same time we have to
- see how many GOT entries we need and how much .bss space is needed
- for copy relocations. */
- Elf_Data *data = elf_getdata (scninfo->scn, NULL);
- XElf_Shdr *shdr = &SCNINFO_SHDR (scninfo->shdr);
- size_t maxcnt = shdr->sh_size / shdr->sh_entsize;
- size_t relsize = 0;
- size_t cnt;
- struct symbol *sym;
-
- assert (shdr->sh_type == SHT_REL);
-
- for (cnt = 0; cnt < maxcnt; ++cnt)
- {
- XElf_Rel_vardef (rel);
-
- xelf_getrel (data, cnt, rel);
- /* XXX Should we complain about failing accesses? */
- if (rel != NULL)
- {
- Elf32_Word r_sym = XELF_R_SYM (rel->r_info);
-
- /* Symbols in COMDAT group sections which are discarded do
- not have to be relocated. */
- if (r_sym >= scninfo->fileinfo->nlocalsymbols
- && unlikely (scninfo->fileinfo->symref[r_sym] == NULL))
- continue;
-
- switch (XELF_R_TYPE (rel->r_info))
- {
- case R_386_GOT32:
- if (! scninfo->fileinfo->symref[r_sym]->defined
- || scninfo->fileinfo->symref[r_sym]->in_dso
- || statep->file_type == dso_file_type)
- {
- relsize += sizeof (Elf32_Rel);
- ++statep->nrel_got;
- }
-
- /* Even if this relocation is not emitted in the output
- file it requires a GOT entry. */
- ++statep->ngot;
-
- /* FALLTHROUGH */
-
- case R_386_GOTOFF:
- case R_386_GOTPC:
- statep->need_got = true;
- break;
-
- case R_386_32:
- case R_386_PC32:
- /* These relocations cause text relocations in DSOs. */
- if (linked_from_dso_p (scninfo, r_sym))
- {
- if (statep->file_type == dso_file_type)
- {
- relsize += sizeof (Elf32_Rel);
- // XXX Do we have to check whether the target
- // XXX section is read-only first?
- statep->dt_flags |= DF_TEXTREL;
- }
- else
- {
- /* Non-function objects from a DSO need to get a
- copy relocation. */
- sym = scninfo->fileinfo->symref[r_sym];
-
- /* Only do this if we have not requested a copy
- relocation already. */
- if (unlikely (sym->type != STT_FUNC) && ! sym->need_copy)
- {
- sym->need_copy = 1;
- ++statep->ncopy;
- relsize += sizeof (Elf32_Rel);
- }
- }
- }
- else if (statep->file_type == dso_file_type
- && XELF_R_TYPE (rel->r_info) == R_386_32)
- relsize += sizeof (Elf32_Rel);
-
- break;
-
- case R_386_PLT32:
- /* We might need a PLT entry. But we cannot say for sure
- here since one of the symbols might turn up being
- defined in the executable (if we create such a thing).
- If a DSO is created we still might use a local
- definition.
-
- If the symbol is not defined and we are not creating
- a statically linked binary, then we need in any case
- a PLT entry. */
- if (! scninfo->fileinfo->symref[r_sym]->defined
- && !statep->statically)
- {
- sym = scninfo->fileinfo->symref[r_sym];
- sym->type = STT_FUNC;
- sym->in_dso = 1;
- sym->defined = 1;
-
- /* Remove from the list of unresolved symbols. */
- --statep->nunresolved;
- if (! sym->weak)
- --statep->nunresolved_nonweak;
- CDBL_LIST_DEL (statep->unresolved, sym);
-
- /* Add to the list of symbols we expect from a DSO. */
- ++statep->nplt;
- ++statep->nfrom_dso;
- CDBL_LIST_ADD_REAR (statep->from_dso, sym);
- }
- break;
-
- case R_386_TLS_LDO_32:
- if (statep->file_type != executable_file_type)
- abort ();
- /* We do not need a relocation in the output file. */
- break;
-
- case R_386_TLS_LE:
- /* We never need a relocation in the output file. */
- break;
-
- case R_386_TLS_IE:
- if (statep->file_type == dso_file_type)
- error (EXIT_FAILURE, 0, gettext ("initial-executable TLS relocation cannot be used "));
- if (!scninfo->fileinfo->symref[r_sym]->defined
- || scninfo->fileinfo->symref[r_sym]->in_dso)
- {
- abort ();
- }
- break;
-
- case R_386_TLS_GD:
- if (statep->file_type != executable_file_type
- || !scninfo->fileinfo->symref[r_sym]->defined
- || scninfo->fileinfo->symref[r_sym]->in_dso)
- {
- abort ();
- }
- break;
-
- case R_386_TLS_GOTIE:
- case R_386_TLS_LDM:
- case R_386_TLS_GD_32:
- case R_386_TLS_GD_PUSH:
- case R_386_TLS_GD_CALL:
- case R_386_TLS_GD_POP:
- case R_386_TLS_LDM_32:
- case R_386_TLS_LDM_PUSH:
- case R_386_TLS_LDM_CALL:
- case R_386_TLS_LDM_POP:
- case R_386_TLS_IE_32:
- case R_386_TLS_LE_32:
- /* XXX */
- abort ();
- break;
-
- case R_386_NONE:
- /* Nothing to be done. */
- break;
-
- /* These relocation should never be generated by an
- assembler. */
- case R_386_COPY:
- case R_386_GLOB_DAT:
- case R_386_JMP_SLOT:
- case R_386_RELATIVE:
- case R_386_TLS_DTPMOD32:
- case R_386_TLS_DTPOFF32:
- case R_386_TLS_TPOFF32:
- /* Unknown relocation. */
- default:
- abort ();
- }
- }
- }
-
- scninfo->relsize = relsize;
-}
-
-
-static void
-elf_i386_create_relocations (struct ld_state *statep,
- const Elf32_Word *dblindirect __attribute__ ((unused)))
-{
- /* Get the address of the got section. */
- Elf_Scn *pltscn = elf_getscn (statep->outelf, statep->pltscnidx);
- Elf32_Shdr *shdr = elf32_getshdr (pltscn);
- assert (shdr != NULL);
- Elf32_Addr pltaddr = shdr->sh_addr;
-
- Elf_Scn *gotscn = elf_getscn (statep->outelf, statep->gotscnidx);
- // XXX Adjust the address, if necessary, for relro
- Elf_Data *gotdata = NULL;
- if (statep->need_got)
- {
- gotdata = elf_getdata (gotscn, NULL);
- assert (gotdata != NULL);
- }
-
- Elf_Scn *gotpltscn = elf_getscn (statep->outelf, statep->gotpltscnidx);
- shdr = elf32_getshdr (gotpltscn);
- assert (shdr != NULL);
- Elf32_Addr gotaddr = shdr->sh_addr;
-
- Elf_Scn *reldynscn = elf_getscn (statep->outelf, statep->reldynscnidx);
- Elf_Data *reldyndata = elf_getdata (reldynscn, NULL);
- assert (reldyndata != NULL);
-
- size_t nreldyn = 0;
- size_t ngotconst = statep->nrel_got;
-
- struct scninfo *first = statep->rellist->next;
- struct scninfo *runp = first;
- do
- {
- XElf_Shdr *rshdr = &SCNINFO_SHDR (runp->shdr);
- Elf_Data *reldata = elf_getdata (runp->scn, NULL);
- int nrels = rshdr->sh_size / rshdr->sh_entsize;
-
- /* We will need the following values a couple of times. Help
- the compiler and improve readability. */
- struct symbol **symref = runp->fileinfo->symref;
- struct scninfo *scninfo = runp->fileinfo->scninfo;
-
- /* This is the offset of the input section we are looking at in
- the output file. */
- XElf_Addr inscnoffset = scninfo[rshdr->sh_info].offset;
-
- /* The target section. We use the data from the input file. */
- Elf_Data *data = elf_getdata (scninfo[rshdr->sh_info].scn, NULL);
-
- /* We cannot handle relocations against merge-able sections. */
- assert ((SCNINFO_SHDR (scninfo[rshdr->sh_link].shdr).sh_flags
- & SHF_MERGE) == 0);
-
- /* Cache the access to the symbol table data. */
- Elf_Data *symdata = elf_getdata (scninfo[rshdr->sh_link].scn, NULL);
-
- for (int cnt = 0; cnt < nrels; ++cnt)
- {
- XElf_Rel_vardef (rel);
- XElf_Rel *rel2;
- xelf_getrel (reldata, cnt, rel);
- assert (rel != NULL);
- XElf_Addr reladdr = inscnoffset + rel->r_offset;
- XElf_Addr value;
-
- size_t idx = XELF_R_SYM (rel->r_info);
- if (idx < runp->fileinfo->nlocalsymbols)
- {
- XElf_Sym_vardef (sym);
- xelf_getsym (symdata, idx, sym);
-
- /* The value only depends on the position of the referenced
- section in the output file and the addend. */
- value = scninfo[sym->st_shndx].offset + sym->st_value;
- }
- else
- {
- if (symref[idx] == NULL)
- /* Symbol in ignored COMDAT group section. */
- continue;
-
- value = symref[idx]->merge.value;
- if (symref[idx]->in_dso)
- {
- /* MERGE.VALUE contains the PLT index. If this is not for
- a function the actual value will be computed later. */
- assert (value != 0 || symref[idx]->type != STT_FUNC);
- value = pltaddr + value * PLT_ENTRY_SIZE;
- }
- }
-
- /* Address of the relocated memory in the data buffer. */
- unsigned char *relloc = (unsigned char *) data->d_buf + rel->r_offset;
-
- uint32_t thisgotidx;
- switch (XELF_R_TYPE (rel->r_info))
- {
- /* These three cases can be handled together since the
- symbol associated with the R_386_GOTPC relocation is
- _GLOBAL_OFFSET_TABLE_ which has a value corresponding
- to the address of the GOT and the address of the PLT
- entry required for R_386_PLT32 is computed above. */
- case R_386_PC32:
- case R_386_GOTPC:
- case R_386_PLT32:
- value -= reladdr;
- /* FALLTHROUGH */
-
- case R_386_32:
- if (linked_from_dso_p (scninfo, idx)
- && statep->file_type != dso_file_type
- && symref[idx]->type != STT_FUNC)
- {
- value = (ld_state.copy_section->offset
- + symref[idx]->merge.value);
-
- if (unlikely (symref[idx]->need_copy))
- {
- /* Add a relocation to initialize the GOT entry. */
- assert (symref[idx]->outdynsymidx != 0);
-#if NATIVE_ELF != 0
- xelf_getrel_ptr (reldyndata, nreldyn, rel2);
-#else
- rel2 = &rel_mem;
-#endif
- rel2->r_offset = value;
- rel2->r_info
- = XELF_R_INFO (symref[idx]->outdynsymidx, R_386_COPY);
- (void) xelf_update_rel (reldyndata, nreldyn, rel2);
- ++nreldyn;
- assert (nreldyn <= statep->nrel_got);
-
- /* Update the symbol table record for the new
- address. */
- Elf32_Word symidx = symref[idx]->outdynsymidx;
- Elf_Scn *symscn = elf_getscn (statep->outelf,
- statep->dynsymscnidx);
- Elf_Data *outsymdata = elf_getdata (symscn, NULL);
- assert (outsymdata != NULL);
- XElf_Sym_vardef (sym);
- xelf_getsym (outsymdata, symidx, sym);
- sym->st_value = value;
- sym->st_shndx = statep->copy_section->outscnndx;
- (void) xelf_update_sym (outsymdata, symidx, sym);
-
- symidx = symref[idx]->outsymidx;
- if (symidx != 0)
- {
- symidx = statep->dblindirect[symidx];
- symscn = elf_getscn (statep->outelf,
- statep->symscnidx);
- outsymdata = elf_getdata (symscn, NULL);
- assert (outsymdata != NULL);
- xelf_getsym (outsymdata, symidx, sym);
- sym->st_value = value;
- sym->st_shndx = statep->copy_section->outscnndx;
- (void) xelf_update_sym (outsymdata, symidx, sym);
- }
-
- /* Remember that we set up the copy relocation. */
- symref[idx]->need_copy = 0;
- }
- }
- else if (statep->file_type == dso_file_type
- && XELF_R_TYPE (rel->r_info) == R_386_32)
- {
-#if NATIVE_ELF != 0
- xelf_getrel_ptr (reldyndata, nreldyn, rel2);
-#else
- rel2 = &rel_mem;
-#endif
- rel2->r_offset = value;
-
- /* For symbols we do not export we generate a relative
- relocation. */
- if (idx < SCNINFO_SHDR (scninfo[rshdr->sh_link].shdr).sh_info
- || symref[idx]->outdynsymidx == 0)
- rel2->r_info = XELF_R_INFO (0, R_386_RELATIVE);
- else
- rel2->r_info
- = XELF_R_INFO (symref[idx]->outdynsymidx, R_386_32);
- (void) xelf_update_rel (reldyndata, nreldyn, rel2);
- ++nreldyn;
- assert (nreldyn <= statep->nrel_got);
-
- value = 0;
- }
- add_4ubyte_unaligned (relloc, value);
- break;
-
- case R_386_GOT32:
- if (! symref[idx]->defined || symref[idx]->in_dso)
- {
- thisgotidx = nreldyn++;
- assert (thisgotidx < statep->nrel_got);
-
- /* Add a relocation to initialize the GOT entry. */
-#if NATIVE_ELF != 0
- xelf_getrel_ptr (reldyndata, thisgotidx, rel2);
-#else
- rel2 = &rel_mem;
-#endif
- rel2->r_offset = gotaddr + ((thisgotidx - statep->ngot)
- * sizeof (Elf32_Addr));
- rel2->r_info
- = XELF_R_INFO (symref[idx]->outdynsymidx, R_386_GLOB_DAT);
- (void) xelf_update_rel (reldyndata, thisgotidx, rel2);
- }
- else if (statep->file_type != dso_file_type)
- {
- thisgotidx = ngotconst++;
- assert (thisgotidx < statep->ngot);
-
- /* We have to use a GOT since the generated code
- requires it but we know the address and therefore
- do not need a relocation. */
- ((uint32_t *) gotdata->d_buf)[thisgotidx] = value;
- }
- else
- {
- thisgotidx = nreldyn++;
- assert (thisgotidx < statep->nrel_got);
-
- // XXX generate a relative relocation.
- abort ();
- }
-
- store_4ubyte_unaligned (relloc,
- (thisgotidx - statep->ngot)
- * sizeof (Elf32_Addr));
- break;
-
- case R_386_GOTOFF:
- add_4ubyte_unaligned (relloc, value - gotaddr);
- break;
-
- case R_386_TLS_LE:
- value = symref[idx]->merge.value - ld_state.tls_tcb;
- store_4ubyte_unaligned (relloc, value);
- break;
-
- case R_386_TLS_IE:
- if (symref[idx]->defined && !symref[idx]->in_dso)
- {
- /* The symbol is defined in the executable.
- Perform the IE->LE optimization.
- There are multiple versions, though.
-
- First version: mov ADDR,REG. */
- if (relloc[-2] == 0x8b
- && ((relloc[-1] & 0xc7) == 0x05))
- {
- relloc[-2] = 0xc7;
- relloc[-1] = 0xc0 | ((relloc[-1] >> 3) & 7);
- store_4ubyte_unaligned (relloc, (symref[idx]->merge.value
- - ld_state.tls_tcb));
- }
- else
- {
- abort ();
- }
- }
- else
- {
- abort ();
- }
- break;
-
- case R_386_TLS_LDO_32:
- value = symref[idx]->merge.value - ld_state.tls_start;
- store_4ubyte_unaligned (relloc, value);
- break;
-
- case R_386_TLS_GD:
- if (ld_state.file_type == executable_file_type)
- {
- if (symref[idx]->defined && !symref[idx]->in_dso)
- {
- /* The symbol is defined in the executable.
- Perform the GD->LE optimization. */
- static const char gd_to_le[] =
- {
- /* mov %gs:0x0,%eax */
- 0x65, 0xa1, 0x00, 0x00, 0x00, 0x00,
- /* sub $OFFSET,%eax */
- 0x81, 0xe8
- };
-#ifndef NDEBUG
- static const char gd_text[] =
- {
- /* lea 0x0(,%ebx,1),%eax */
- 0x8d, 0x04, 0x1d, 0x00, 0x00, 0x00, 0x00,
- /* call ___tls_get_addr */
- 0xe8
- };
- assert (memcmp (relloc - 3, gd_text, sizeof (gd_text))
- == 0);
-#endif
- relloc = mempcpy (relloc - 3, gd_to_le,
- sizeof (gd_to_le));
- value = ld_state.tls_tcb- symref[idx]->merge.value;
- store_4ubyte_unaligned (relloc, value);
-
- /* We have to skip over the next relocation which is
- the matching R_i386_PLT32 for __tls_get_addr. */
- ++cnt;
-#ifndef NDEBUG
- assert (cnt < nrels);
- XElf_Off old_offset = rel->r_offset;
- xelf_getrel (reldata, cnt, rel);
- assert (rel != NULL);
- assert (XELF_R_TYPE (rel->r_info) == R_386_PLT32);
- idx = XELF_R_SYM (rel->r_info);
- assert (strcmp (symref[idx]->name, "___tls_get_addr")
- == 0);
- assert (old_offset + 5 == rel->r_offset);
-#endif
-
- break;
- }
- }
- abort ();
- break;
-
- case R_386_32PLT:
- case R_386_TLS_TPOFF:
- case R_386_TLS_GOTIE:
- case R_386_TLS_LDM:
- case R_386_16:
- case R_386_PC16:
- case R_386_8:
- case R_386_PC8:
- case R_386_TLS_GD_32:
- case R_386_TLS_GD_PUSH:
- case R_386_TLS_GD_CALL:
- case R_386_TLS_GD_POP:
- case R_386_TLS_LDM_32:
- case R_386_TLS_LDM_PUSH:
- case R_386_TLS_LDM_CALL:
- case R_386_TLS_LDM_POP:
- case R_386_TLS_IE_32:
- case R_386_TLS_LE_32:
- // XXX For now fall through
- break;
-
- case R_386_NONE:
- /* Nothing to do. */
- break;
-
- case R_386_COPY:
- case R_386_JMP_SLOT:
- case R_386_RELATIVE:
- case R_386_GLOB_DAT:
- case R_386_TLS_DTPMOD32:
- case R_386_TLS_DTPOFF32:
- case R_386_TLS_TPOFF32:
- default:
- /* Should not happen. */
- abort ();
- }
- }
- }
- while ((runp = runp->next) != first);
-}
-
-
-int
-elf_i386_ld_init (struct ld_state *statep)
-{
- /* We have a few callbacks available. */
- old_open_outfile = statep->callbacks.open_outfile;
- statep->callbacks.open_outfile = elf_i386_open_outfile;
-
- statep->callbacks.relocate_section = elf_i386_relocate_section;
-
- statep->callbacks.initialize_plt = elf_i386_initialize_plt;
- statep->callbacks.initialize_pltrel = elf_i386_initialize_pltrel;
-
- statep->callbacks.initialize_got = elf_i386_initialize_got;
- statep->callbacks.initialize_gotplt = elf_i386_initialize_gotplt;
-
- statep->callbacks.finalize_plt = elf_i386_finalize_plt;
-
- statep->callbacks.rel_type = elf_i386_rel_type;
-
- statep->callbacks.count_relocations = elf_i386_count_relocations;
-
- statep->callbacks.create_relocations = elf_i386_create_relocations;
-
- return 0;
-}
diff --git a/src/ld.c b/src/ld.c
deleted file mode 100644
index 63fc378..0000000
--- a/src/ld.c
+++ /dev/null
@@ -1,1618 +0,0 @@
-/* Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <argp.h>
-#include <assert.h>
-#include <error.h>
-#include <fcntl.h>
-#include <libelf.h>
-#include <libintl.h>
-#include <locale.h>
-#include <mcheck.h>
-#include <stdio.h>
-#include <stdio_ext.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <system.h>
-#include "ld.h"
-#include "list.h"
-
-
-/* Name and version of program. */
-static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
-
-/* Bug report address. */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
-
-
-/* Values for the various options. */
-enum
- {
- ARGP_whole_archive = 300,
- ARGP_no_whole_archive,
- ARGP_static,
- ARGP_dynamic,
- ARGP_pagesize,
- ARGP_rpath_link,
- ARGP_runpath,
- ARGP_runpath_link,
- ARGP_version_script,
- ARGP_gc_sections,
- ARGP_no_gc_sections,
- ARGP_no_undefined,
- ARGP_conserve,
- ARGP_as_needed,
- ARGP_no_as_needed,
- ARGP_eh_frame_hdr,
- ARGP_hash_style,
- ARGP_build_id,
-#if YYDEBUG
- ARGP_yydebug,
-#endif
- };
-
-
-/* Definitions of arguments for argp functions. */
-static const struct argp_option options[] =
-{
- { NULL, 0, NULL, 0, N_("Input File Control:"), 0 },
- { "whole-archive", ARGP_whole_archive, NULL, 0,
- N_("Include whole archives in the output from now on."), 0 },
- { "no-whole-archive", ARGP_no_whole_archive, NULL, 0,
- N_("Stop including the whole arhives in the output."), 0 },
- { NULL, 'l', N_("FILE"), OPTION_HIDDEN, NULL, 0 },
- { "start-group", '(', NULL, 0, N_("Start a group."), 0 },
- { "end-group", ')', NULL, 0, N_("End a group."), 0 },
- { NULL, 'L', N_("PATH"), 0,
- N_("Add PATH to list of directories files are searched in."), 0 },
- { "as-needed", ARGP_as_needed, NULL, 0,
- N_("Only set DT_NEEDED for following dynamic libs if actually used"), 0 },
- { "no-as-needed", ARGP_no_as_needed, NULL, 0,
- N_("Always set DT_NEEDED for following dynamic libs"), 0 },
- { "rpath-link", ARGP_rpath_link, "PATH", OPTION_HIDDEN, NULL, 0 },
- { NULL, 'i', NULL, 0, N_("Ignore LD_LIBRARY_PATH environment variable."),
- 0 },
-
- { NULL, 0, NULL, 0, N_("Output File Control:"), 0 },
- { "output", 'o', N_("FILE"), 0, N_("Place output in FILE."), 0 },
- { NULL, 'z', "KEYWORD", OPTION_HIDDEN, NULL, 0 },
- { "-z nodefaultlib", '\0', NULL, OPTION_DOC,
- N_("Object is marked to not use default search path at runtime."), 0 },
- { "-z allextract", '\0', NULL, OPTION_DOC,
- N_("Same as --whole-archive."), 0 },
- { "-z defaultextract", '\0', NULL, OPTION_DOC, N_("\
-Default rules of extracting from archive; weak references are not enough."),
- 0 },
- { "-z weakextract", '\0', NULL, OPTION_DOC,
- N_("Weak references cause extraction from archive."), 0 },
- { "-z muldefs", '\0', NULL, OPTION_DOC,
- N_("Allow multiple definitions; first is used."), 0 },
- { "-z defs | nodefs", '\0', NULL, OPTION_DOC,
- N_("Disallow/allow undefined symbols in DSOs."), 0 },
- { "no-undefined", ARGP_no_undefined, NULL, OPTION_HIDDEN, NULL, 0 },
- { "-z origin", '\0', NULL, OPTION_DOC,
- N_("Object requires immediate handling of $ORIGIN."), 0 },
- { "-z now", '\0', NULL, OPTION_DOC,
- N_("Relocation will not be processed lazily."), 0 },
- { "-z nodelete", '\0', NULL, OPTION_DOC,
- N_("Object cannot be unloaded at runtime."), 0 },
- { "-z initfirst", '\0', NULL, OPTION_DOC,
- N_("Mark object to be initialized first."), 0 },
- { "-z lazyload | nolazyload", '\0', NULL, OPTION_DOC,
- N_("Enable/disable lazy-loading flag for following dependencies."), 0 },
- { "-z nodlopen", '\0', NULL, OPTION_DOC,
- N_("Mark object as not loadable with 'dlopen'."), 0 },
- { "-z ignore | record", '\0', NULL, OPTION_DOC,
- N_("Ignore/record dependencies on unused DSOs."), 0 },
- { "-z systemlibrary", '\0', NULL, OPTION_DOC,
- N_("Generated DSO will be a system library."), 0 },
- { "entry", 'e', N_("ADDRESS"), 0, N_("Set entry point address."), 0 },
- { "static", ARGP_static, NULL, OPTION_HIDDEN, NULL, 0 },
- { "-B static", ARGP_static, NULL, OPTION_DOC,
- N_("Do not link against shared libraries."), 0 },
- { "dynamic", ARGP_dynamic, NULL, OPTION_HIDDEN, NULL, 0 },
- { "-B dynamic", ARGP_dynamic, NULL, OPTION_DOC,
- N_("Prefer linking against shared libraries."), 0 },
- { "export-dynamic", 'E', NULL, 0, N_("Export all dynamic symbols."), 0 },
- { "strip-all", 's', NULL, 0, N_("Strip all symbols."), 0 },
- { "strip-debug", 'S', NULL, 0, N_("Strip debugging symbols."), 0 },
- { "pagesize", ARGP_pagesize, "SIZE", 0,
- N_("Assume pagesize for the target system to be SIZE."), 0 },
- { "rpath", 'R', "PATH", OPTION_HIDDEN, NULL, 0 },
- { "runpath", ARGP_runpath, "PATH", 0, N_("Set runtime DSO search path."),
- 0 },
- { "runpath-link", ARGP_runpath_link, "PATH", 0,
- N_("Set link time DSO search path."), 0 },
- { "shared", 'G', NULL, 0, N_("Generate dynamic shared object."), 0 },
- { NULL, 'r', NULL, 0L, N_("Generate relocatable object."), 0 },
- { NULL, 'B', "KEYWORD", OPTION_HIDDEN, "", 0 },
- { "-B local", 'B', NULL, OPTION_DOC,
- N_("Causes symbol not assigned to a version be reduced to local."), 0 },
- { "gc-sections", ARGP_gc_sections, NULL, 0, N_("Remove unused sections."),
- 0 },
- { "no-gc-sections", ARGP_no_gc_sections, NULL, 0,
- N_("Don't remove unused sections."), 0 },
- { "soname", 'h', "NAME", 0, N_("Set soname of shared object."), 0 },
- { "dynamic-linker", 'I', "NAME", 0, N_("Set the dynamic linker name."), 0 },
- { NULL, 'Q', "YN", OPTION_HIDDEN, NULL, 0 },
- { "-Q y | n", 'Q', NULL, OPTION_DOC,
- N_("Add/suppress addition indentifying link-editor to .comment section."),
- 0 },
- { "eh-frame-hdr", ARGP_eh_frame_hdr, NULL, 0,
- N_("Create .eh_frame_hdr section"), 0 },
- { "hash-style", ARGP_hash_style, "STYLE", 0,
- N_("Set hash style to sysv, gnu or both."), 0 },
- { "build-id", ARGP_build_id, "STYLE", OPTION_ARG_OPTIONAL,
- N_("Generate build ID note (md5, sha1 (default), uuid)."), 0 },
-
- { NULL, 0, NULL, 0, N_("Linker Operation Control:"), 0 },
- { "verbose", 'v', NULL, 0, N_("Verbose messages."), 0 },
- { "trace", 't', NULL, 0, N_("Trace file opens."), 0 },
- { "conserve-memory", ARGP_conserve, NULL, 0,
- N_("Trade speed for less memory usage"), 0 },
- { NULL, 'O', N_("LEVEL"), OPTION_ARG_OPTIONAL,
- N_("Set optimization level to LEVEL."), 0 },
- { NULL, 'c', N_("FILE"), 0, N_("Use linker script in FILE."), 0 },
-#if YYDEBUG
- { "yydebug", ARGP_yydebug, NULL, 0,
- N_("Select to get parser debug information"), 0 },
-#endif
- { "version-script", ARGP_version_script, "FILE", 0,
- N_("Read version information from FILE."), 0 },
- { "emulation", 'm', "NAME", 0, N_("Set emulation to NAME."), 0 },
-
- { NULL, 0, NULL, 0, NULL, 0 }
-};
-
-/* Short description of program. */
-static const char doc[] = N_("Combine object and archive files.");
-
-/* Strings for arguments in help texts. */
-static const char args_doc[] = N_("[FILE]...");
-
-/* Prototype for option handler. */
-static void replace_args (int argc, char *argv[]);
-static error_t parse_opt_1st (int key, char *arg, struct argp_state *state);
-static error_t parse_opt_2nd (int key, char *arg, struct argp_state *state);
-
-/* Data structure to communicate with argp functions. */
-static struct argp argp_1st =
-{
- options, parse_opt_1st, args_doc, doc, NULL, NULL, NULL
-};
-static struct argp argp_2nd =
-{
- options, parse_opt_2nd, args_doc, doc, NULL, NULL, NULL
-};
-
-
-/* Linker state. This contains all global information. */
-struct ld_state ld_state;
-
-/* List of the input files. */
-static struct file_list
-{
- const char *name;
- struct file_list *next;
-} *input_file_list;
-
-/* If nonzero be verbose. */
-int verbose;
-
-/* If nonzero, trade speed for less memory/address space usage. */
-int conserve_memory;
-
-/* The emulation name to use. */
-static const char *emulation;
-
-/* Keep track of the nesting level. Even though we don't handle nested
- groups we still keep track to improve the error messages. */
-static int group_level;
-
-/* The last file we processed. */
-static struct usedfiles *last_file;
-
-/* The default linker script. */
-/* XXX We'll do this a bit different in the real solution. */
-static const char *linker_script = SRCDIR "/elf32-i386.script";
-
-/* Nonzero if an error occurred while loading the input files. */
-static int error_loading;
-
-
-/* Intermediate storage for the LD_LIBRARY_PATH information from the
- environment. */
-static char *ld_library_path1;
-
-/* Flag used to communicate with the scanner. */
-int ld_scan_version_script;
-
-/* Name of the input file. */
-const char *ldin_fname;
-
-/* Define by parser if required. */
-extern int lddebug;
-
-
-/* Prototypes for local functions. */
-static void parse_z_option (const char *arg);
-static void parse_z_option_2 (const char *arg);
-static void parse_B_option (const char *arg);
-static void parse_B_option_2 (const char *arg);
-static void determine_output_format (void);
-static void load_needed (void);
-static void collect_sections (void);
-static void add_rxxpath (struct pathelement **pathp, const char *str);
-static void gen_rxxpath_data (void);
-static void read_version_script (const char *fname);
-static void create_lscript_symbols (void);
-static void create_special_section_symbol (struct symbol **symp,
- const char *name);
-
-
-int
-main (int argc, char *argv[])
-{
- int remaining;
- int err;
-
-#ifndef NDEBUG
- /* Enable memory debugging. */
- mtrace ();
-#endif
-
- /* Sanity check. We always want to use the LFS functionality. */
- if (sizeof (off_t) != sizeof (off64_t))
- abort ();
-
- /* We use no threads here which can interfere with handling a stream. */
- __fsetlocking (stdin, FSETLOCKING_BYCALLER);
- __fsetlocking (stdout, FSETLOCKING_BYCALLER);
- __fsetlocking (stderr, FSETLOCKING_BYCALLER);
-
- /* Set locale. */
- setlocale (LC_ALL, "");
-
- /* Make sure the message catalog can be found. */
- bindtextdomain (PACKAGE_TARNAME, LOCALEDIR);
-
- /* Initialize the message catalog. */
- textdomain (PACKAGE_TARNAME);
-
- /* Before we start tell the ELF library which version we are using. */
- elf_version (EV_CURRENT);
-
- /* The user can use the LD_LIBRARY_PATH environment variable to add
- additional lookup directories. */
- ld_library_path1 = getenv ("LD_LIBRARY_PATH");
-
- /* Initialize the memory handling. */
-#define obstack_chunk_alloc xmalloc
-#define obstack_chunk_free free
- obstack_init (&ld_state.smem);
-
- /* Recognize old-style parameters for compatibility. */
- replace_args (argc, argv);
-
- /* One quick pass over the parameters which allows us to scan for options
- with global effect which influence the rest of the processing. */
- argp_parse (&argp_1st, argc, argv, ARGP_IN_ORDER, &remaining, NULL);
-
- /* We need at least one input file. */
- if (input_file_list == NULL)
- {
- error (0, 0, gettext ("At least one input file needed"));
- argp_help (&argp_1st, stderr, ARGP_HELP_SEE, "ld");
- exit (EXIT_FAILURE);
- }
-
- /* Determine which ELF backend to use. */
- determine_output_format ();
-
- /* If no hash style was specific default to the oldand slow SysV
- method. */
- if (unlikely (ld_state.hash_style == hash_style_none))
- ld_state.hash_style = hash_style_sysv;
-
- /* Prepare state. */
- err = ld_prepare_state (emulation);
- if (err != 0)
- error (EXIT_FAILURE, 0, gettext ("error while preparing linking"));
-
- /* XXX Read the linker script now. Since we later will have the linker
- script built in we don't go into trouble to make sure we handle GROUP
- statements in the script. This simply must not happen. */
- ldin = fopen (linker_script, "r");
- if (ldin == NULL)
- error (EXIT_FAILURE, errno, gettext ("cannot open linker script '%s'"),
- linker_script);
- /* No need for locking. */
- __fsetlocking (ldin, FSETLOCKING_BYCALLER);
-
- ld_state.srcfiles = NULL;
- ldlineno = 1;
- ld_scan_version_script = 0;
- ldin_fname = linker_script;
- if (ldparse () != 0)
- /* Something went wrong during parsing. */
- exit (EXIT_FAILURE);
- fclose (ldin);
-
- /* We now might have a list of directories to look for libraries in
- named by the linker script. Put them in a different list so that
- they are searched after all paths given by the user on the
- command line. */
- ld_state.default_paths = ld_state.paths;
- ld_state.paths = ld_state.tailpaths = NULL;
-
- /* Get runpath/rpath information in usable form. */
- gen_rxxpath_data ();
-
- /* Parse and process arguments for real. */
- argp_parse (&argp_2nd, argc, argv, ARGP_IN_ORDER, &remaining, NULL);
- /* All options should have been processed by the argp parser. */
- assert (remaining == argc);
-
- /* Process the last file. */
- while (last_file != NULL)
- /* Try to open the file. */
- error_loading |= FILE_PROCESS (-1, last_file, &ld_state, &last_file);
-
- /* Stop if there has been a problem while reading the input files. */
- if (error_loading)
- exit (error_loading);
-
- /* See whether all opened -( were closed. */
- if (group_level > 0)
- {
- error (0, 0, gettext ("-( without matching -)"));
- argp_help (&argp_1st, stderr, ARGP_HELP_SEE, "ld");
- exit (EXIT_FAILURE);
- }
-
- /* When we create a relocatable file we don't have to look for the
- DT_NEEDED DSOs and we also don't test for undefined symbols. */
- if (ld_state.file_type != relocatable_file_type)
- {
- /* At this point we have loaded all the direct dependencies. What
- remains to be done is find the indirect dependencies. These are
- DSOs which are referenced by the DT_NEEDED entries in the DSOs
- which are direct dependencies. We have to transitively find and
- load all these dependencies. */
- load_needed ();
-
- /* At this point all object files and DSOs are read. If there
- are still undefined symbols left they might have to be
- synthesized from the linker script. */
- create_lscript_symbols ();
-
- /* Now that we have loaded all the object files we can determine
- whether we have any non-weak unresolved references left. If
- there are any we stop. If the user used the '-z nodefs' option
- and we are creating a DSO don't perform the tests. */
- if (FLAG_UNRESOLVED (&ld_state) != 0)
- exit (1);
- }
-
- /* Collect information about the relocations which will be carried
- forward into the output. We have to do this here and now since
- we need to know which sections have to be created. */
- if (ld_state.file_type != relocatable_file_type)
- {
- void *p ;
- struct scnhead *h;
-
- p = NULL;
- while ((h = ld_section_tab_iterate (&ld_state.section_tab, &p)) != NULL)
- if (h->type == SHT_REL || h->type == SHT_RELA)
- {
- struct scninfo *runp = h->last;
- do
- {
- /* If we are processing the relocations determine how
- many will be in the output file. Also determine
- how many GOT entries are needed. */
- COUNT_RELOCATIONS (&ld_state, runp);
-
- ld_state.relsize_total += runp->relsize;
- }
- while ((runp = runp->next) != h->last);
- }
- }
-
- /* Not part of the gABI, but part of every psABI: the symbols for the
- GOT section. Add the symbol if necessary. */
- if (ld_state.need_got)
- create_special_section_symbol (&ld_state.got_symbol,
- "_GLOBAL_OFFSET_TABLE_");
- /* Similarly for the _DYNAMIC symbol which points to the dynamic
- section. */
- if (dynamically_linked_p ())
- create_special_section_symbol (&ld_state.dyn_symbol, "_DYNAMIC");
-
- /* We are ready to start working on the output file. Not all
- information has been gather or created yet. This will be done as
- we go. Open the file now. */
- if (OPEN_OUTFILE (&ld_state, EM_NONE, ELFCLASSNONE, ELFDATANONE) != 0)
- exit (1);
-
- /* Create the sections which are generated by the linker and are not
- present in the input file. The output file must already have
- been opened since we need the ELF descriptor to deduce type
- sizes. */
- GENERATE_SECTIONS (&ld_state);
-
- /* At this point we have read all the files and know all the
- sections which have to be linked into the application. We do now
- create an array listing all the sections. We will than pass this
- array to a system specific function which can reorder it at will.
- The functions can also merge sections if this is what is
- wanted. */
- collect_sections ();
-
- /* Create the output sections now. This may requires sorting them
- first. */
- CREATE_SECTIONS (&ld_state);
-
- /* Create the output file data. Appropriate code for the selected
- output file type is called. */
- if (CREATE_OUTFILE (&ld_state) != 0)
- exit (1);
-
- /* Finalize the output file, write the data out. */
- err |= FINALIZE (&ld_state);
-
- /* Return with an non-zero exit status also if any error message has
- been printed. */
- return err | (error_message_count != 0);
-}
-
-
-static void
-replace_args (int argc, char *argv[])
-{
- static const struct
- {
- const char *from;
- const char *to;
- } args[] =
- {
- { "-export-dynamic", "--export-dynamic" },
- { "-dynamic-linker", "--dynamic-linker" },
- { "-static", "--static" },
- };
- const size_t nargs = sizeof (args) / sizeof (args[0]);
-
- for (int i = 1; i < argc; ++i)
- if (argv[i][0] == '-' && islower (argv[i][1]) && argv[i][2] != '\0')
- for (size_t j = 0; j < nargs; ++j)
- if (strcmp (argv[i], args[j].from) == 0)
- {
- argv[i] = (char *) args[j].to;
- break;
- }
-}
-
-
-static int
-valid_hexarg (const char *arg)
-{
- if (strncasecmp (arg, "0x", 2) != 0)
- return 0;
-
- arg += 2;
- do
- {
- if (isxdigit (arg[0]) && isxdigit (arg[1]))
- {
- arg += 2;
- if (arg[0] == '-' || arg[0] == ':')
- ++arg;
- }
- else
- return 0;
- }
- while (*arg != '\0');
-
- return 1;
-}
-
-
-/* Quick scan of the parameter list for options with global effect. */
-static error_t
-parse_opt_1st (int key, char *arg,
- struct argp_state *state __attribute__ ((unused)))
-{
- switch (key)
- {
- case 'B':
- parse_B_option (arg);
- break;
-
- case 'c':
- linker_script = arg;
- break;
-
- case 'E':
- ld_state.export_all_dynamic = true;
- break;
-
- case 'G':
- if (ld_state.file_type != no_file_type)
- error (EXIT_FAILURE, 0,
- gettext ("only one option of -G and -r is allowed"));
- ld_state.file_type = dso_file_type;
-
- /* If we generate a DSO we have to export all symbols. */
- ld_state.export_all_dynamic = true;
- break;
-
- case 'h':
- ld_state.soname = arg;
- break;
-
- case 'i':
- /* Discard the LD_LIBRARY_PATH value we found. */
- ld_library_path1 = NULL;
- break;
-
- case 'I':
- ld_state.interp = arg;
- break;
-
- case 'm':
- if (emulation != NULL)
- error (EXIT_FAILURE, 0, gettext ("more than one '-m' parameter"));
- emulation = arg;
- break;
-
- case 'Q':
- if (arg[1] == '\0' && (arg[0] == 'y' || arg[0] == 'Y'))
- ld_state.add_ld_comment = true;
- else if (arg[1] == '\0' && (arg[0] == 'n' || arg[0] == 'N'))
- ld_state.add_ld_comment = true;
- else
- error (EXIT_FAILURE, 0, gettext ("unknown option `-%c %s'"), 'Q', arg);
- break;
-
- case 'r':
- if (ld_state.file_type != no_file_type)
- error (EXIT_FAILURE, 0,
- gettext ("only one option of -G and -r is allowed"));
- ld_state.file_type = relocatable_file_type;
- break;
-
- case 'S':
- ld_state.strip = strip_debug;
- break;
-
- case 't':
- ld_state.trace_files = true;
- break;
-
- case 'v':
- verbose = 1;
- break;
-
- case 'z':
- /* The SysV linker used 'z' to pass various flags to the linker.
- We follow this. See 'parse_z_option' for the options we
- recognize. */
- parse_z_option (arg);
- break;
-
- case ARGP_pagesize:
- {
- char *endp;
- ld_state.pagesize = strtoul (arg, &endp, 0);
- if (*endp != '\0')
- {
- if (endp[1] == '\0' && tolower (*endp) == 'k')
- ld_state.pagesize *= 1024;
- else if (endp[1] == '\0' && tolower (*endp) == 'm')
- ld_state.pagesize *= 1024 * 1024;
- else
- {
- error (0, 0,
- gettext ("invalid page size value '%s': ignored"),
- arg);
- ld_state.pagesize = 0;
- }
- }
- }
- break;
-
- case 'R':
- add_rxxpath (&ld_state.rpath, arg);
- break;
-
- case ARGP_rpath_link:
- add_rxxpath (&ld_state.rpath_link, arg);
- break;
-
- case ARGP_runpath:
- add_rxxpath (&ld_state.runpath, arg);
- break;
-
- case ARGP_runpath_link:
- add_rxxpath (&ld_state.runpath_link, arg);
- break;
-
- case ARGP_gc_sections:
- case ARGP_no_gc_sections:
- ld_state.gc_sections = key == ARGP_gc_sections;
- break;
-
- case ARGP_eh_frame_hdr:
- ld_state.eh_frame_hdr = true;
- break;
-
- case ARGP_hash_style:
- if (strcmp (arg, "gnu") == 0)
- ld_state.hash_style = hash_style_gnu;
- else if (strcmp (arg, "both") == 0)
- ld_state.hash_style = hash_style_gnu | hash_style_sysv;
- else if (strcmp (arg, "sysv") == 0)
- ld_state.hash_style = hash_style_sysv;
- else
- error (EXIT_FAILURE, 0, gettext ("invalid hash style '%s'"), arg);
- break;
-
- case ARGP_build_id:
- if (arg == NULL)
- ld_state.build_id = "sha1";
- else if (strcmp (arg, "uuid") != 0
- && strcmp (arg, "md5") != 0
- && strcmp (arg, "sha1") != 0
- && !valid_hexarg (arg))
- error (EXIT_FAILURE, 0, gettext ("invalid build-ID style '%s'"), arg);
- else
- ld_state.build_id = arg;
- break;
-
- case 's':
- if (arg == NULL)
- {
- if (ld_state.strip == strip_all)
- ld_state.strip = strip_everything;
- else
- ld_state.strip = strip_all;
- break;
- }
- /* FALLTHROUGH */
-
- case 'e':
- case 'o':
- case 'O':
- case ARGP_whole_archive:
- case ARGP_no_whole_archive:
- case ARGP_as_needed:
- case ARGP_no_as_needed:
- case 'L':
- case '(':
- case ')':
- case 'l':
- case ARGP_static:
- case ARGP_dynamic:
- case ARGP_version_script:
- /* We'll handle these in the second pass. */
- break;
-
- case ARGP_KEY_ARG:
- {
- struct file_list *newp;
-
- newp = (struct file_list *) xmalloc (sizeof (struct file_list));
- newp->name = arg;
-#ifndef NDEBUG
- newp->next = NULL;
-#endif
- CSNGL_LIST_ADD_REAR (input_file_list, newp);
- }
- break;
-
-#if YYDEBUG
- case ARGP_yydebug:
- lddebug = 1;
- break;
-#endif
-
- case ARGP_no_undefined:
- ld_state.nodefs = false;
- break;
-
- case ARGP_conserve:
- conserve_memory = 1;
- break;
-
- default:
- return ARGP_ERR_UNKNOWN;
- }
- return 0;
-}
-
-
-/* Handle program arguments for real. */
-static error_t
-parse_opt_2nd (int key, char *arg,
- struct argp_state *state __attribute__ ((unused)))
-{
- static bool group_start_requested;
- static bool group_end_requested;
-
- switch (key)
- {
- case 'B':
- parse_B_option_2 (arg);
- break;
-
- case 'e':
- ld_state.entry = arg;
- break;
-
- case 'o':
- if (ld_state.outfname != NULL)
- {
- error (0, 0, gettext ("More than one output file name given."));
- see_help:
- argp_help (&argp_2nd, stderr, ARGP_HELP_SEE, "ld");
- exit (EXIT_FAILURE);
- }
- ld_state.outfname = arg;
- break;
-
- case 'O':
- if (arg == NULL)
- ld_state.optlevel = 1;
- else
- {
- char *endp;
- unsigned long int level = strtoul (arg, &endp, 10);
- if (*endp != '\0')
- {
- error (0, 0, gettext ("Invalid optimization level `%s'"), arg);
- goto see_help;
- }
- ld_state.optlevel = level;
- }
- break;
-
- case ARGP_whole_archive:
- ld_state.extract_rule = allextract;
- break;
- case ARGP_no_whole_archive:
- ld_state.extract_rule = defaultextract;
- break;
-
- case ARGP_as_needed:
- ld_state.as_needed = true;
- break;
- case ARGP_no_as_needed:
- ld_state.as_needed = false;
- break;
-
- case ARGP_static:
- case ARGP_dynamic:
- /* Enable/disable use for DSOs. */
- ld_state.statically = key == ARGP_static;
- break;
-
- case 'z':
- /* The SysV linker used 'z' to pass various flags to the linker.
- We follow this. See 'parse_z_option' for the options we
- recognize. */
- parse_z_option_2 (arg);
- break;
-
- case ARGP_version_script:
- read_version_script (arg);
- break;
-
- case 'L':
- /* Add a new search directory. */
- ld_new_searchdir (arg);
- break;
-
- case '(':
- /* Start a link group. We have to be able to determine the object
- file which is named next. Do this by remembering a pointer to
- the pointer which will point to the next object. */
- if (verbose && (group_start_requested || !group_end_requested))
- error (0, 0, gettext ("nested -( -) groups are not allowed"));
-
- /* Increment the nesting level. */
- ++group_level;
-
- /* Record group start. */
- group_start_requested = true;
- group_end_requested = false;
- break;
-
- case ')':
- /* End a link group. If there is no group open this is clearly
- a bug. If there is a group open insert a back reference
- pointer in the record for the last object of the group. If
- there is no new object or just one don't do anything. */
- if (!group_end_requested)
- {
- if (group_level == 0)
- {
- error (0, 0, gettext ("-) without matching -("));
- goto see_help;
- }
- }
- else
- last_file->group_end = true;
-
- if (group_level > 0)
- --group_level;
- break;
-
- case 'l':
- case ARGP_KEY_ARG:
- {
- while (last_file != NULL)
- /* Try to open the file. */
- error_loading |= FILE_PROCESS (-1, last_file, &ld_state, &last_file);
-
- last_file = ld_new_inputfile (arg,
- key == 'l'
- ? archive_file_type
- : relocatable_file_type);
- if (group_start_requested)
- {
- last_file->group_start = true;
-
- group_start_requested = false;
- group_end_requested = true;
- }
- }
- break;
-
- default:
- /* We can catch all other options here. They either have
- already been handled or, if the parameter was not correct,
- the error has been reported. */
- break;
- }
- return 0;
-}
-
-
-/* Load all the DSOs named as dependencies in other DSOs we already
- loaded. */
-static void
-load_needed (void)
-{
- struct usedfiles *first;
- struct usedfiles *runp;
-
- /* XXX There is one problem here: do we allow references from
- regular object files to be satisfied by these implicit
- dependencies? The old linker allows this and several libraries
- depend on this. Solaris' linker does not allow this; it provides
- the user with a comprehensive error message explaining the
- situation.
-
- XXX IMO the old ld behavior is correct since this is also how the
- dynamic linker will work. It will look for unresolved references
- in all loaded DSOs.
-
- XXX Should we add an option to get Solaris compatibility? */
- if (ld_state.needed == NULL)
- return;
-
- runp = first = ld_state.needed->next;
- do
- {
- struct usedfiles *ignore;
- struct usedfiles *next = runp->next;
- int err;
-
- err = FILE_PROCESS (-1, runp, &ld_state, &ignore);
- if (err != 0)
- /* Something went wrong. */
- exit (err);
-
- runp = next;
- }
- while (runp != first);
-}
-
-
-/* Print the version information. */
-static void
-print_version (FILE *stream, struct argp_state *state __attribute__ ((unused)))
-{
- fprintf (stream, "ld (%s) %s\n", PACKAGE_NAME, PACKAGE_VERSION);
- fprintf (stream, gettext ("\
-Copyright (C) %s Red Hat, Inc.\n\
-This is free software; see the source for copying conditions. There is NO\n\
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
-"), "2008");
- fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper");
-}
-
-
-/* There are a lot of -z options, parse them here. Some of them have
- to be parsed in the first pass, others must be handled in the
- second pass. */
-static void
-parse_z_option (const char *arg)
-{
- if (strcmp (arg, "nodefaultlib") == 0
- /* This is only meaningful if we create a DSO. */
- && ld_state.file_type == dso_file_type)
- ld_state.dt_flags_1 |= DF_1_NODEFLIB;
- else if (strcmp (arg, "muldefs") == 0)
- ld_state.muldefs = true;
- else if (strcmp (arg, "nodefs") == 0)
- ld_state.nodefs = true;
- else if (strcmp (arg, "defs") == 0)
- ld_state.nodefs = false;
- else if (strcmp (arg, "now") == 0)
- /* We could also set the DF_1_NOW flag in DT_FLAGS_1 but this isn't
- necessary. */
- ld_state.dt_flags |= DF_BIND_NOW;
- else if (strcmp (arg, "origin") == 0)
- /* We could also set the DF_1_ORIGIN flag in DT_FLAGS_1 but this isn't
- necessary. */
- ld_state.dt_flags |= DF_ORIGIN;
- else if (strcmp (arg, "nodelete") == 0
- /* This is only meaningful if we create a DSO. */
- && ld_state.file_type == dso_file_type)
- ld_state.dt_flags_1 |= DF_1_NODELETE;
- else if (strcmp (arg, "initfirst") == 0)
- ld_state.dt_flags_1 |= DF_1_INITFIRST;
- else if (strcmp (arg, "nodlopen") == 0
- /* This is only meaningful if we create a DSO. */
- && ld_state.file_type == dso_file_type)
- ld_state.dt_flags_1 |= DF_1_NOOPEN;
- else if (strcmp (arg, "systemlibrary") == 0)
- ld_state.is_system_library = true;
- else if (strcmp (arg, "execstack") == 0)
- ld_state.execstack = execstack_true;
- else if (strcmp (arg, "noexecstack") == 0)
- ld_state.execstack = execstack_false_force;
- else if (strcmp (arg, "allextract") != 0
- && strcmp (arg, "defaultextract") != 0
- && strcmp (arg, "weakextract") != 0
- && strcmp (arg, "lazyload") != 0
- && strcmp (arg, "nolazyload") != 0
- && strcmp (arg, "ignore") != 0
- && strcmp (arg, "record") != 0)
- error (0, 0, gettext ("unknown option `-%c %s'"), 'z', arg);
-}
-
-
-static void
-parse_z_option_2 (const char *arg)
-{
- if (strcmp (arg, "allextract") == 0)
- ld_state.extract_rule = allextract;
- else if (strcmp (arg, "defaultextract") == 0)
- ld_state.extract_rule = defaultextract;
- else if (strcmp (arg, "weakextract") == 0)
- ld_state.extract_rule = weakextract;
- else if (strcmp (arg, "lazyload") == 0)
- ld_state.lazyload = true;
- else if (strcmp (arg, "nolazyload") == 0)
- ld_state.lazyload = false;
- else if (strcmp (arg, "ignore") == 0)
- ld_state.as_needed = true;
- else if (strcmp (arg, "record") == 0)
- ld_state.as_needed = false;
-}
-
-
-/* There are a lot of -B options, parse them here. */
-static void
-parse_B_option (const char *arg)
-{
- if (strcmp (arg, "local") == 0)
- ld_state.default_bind_local = true;
- else if (strcmp (arg, "symbolic") != 0
- && strcmp (arg, "static") != 0
- && strcmp (arg, "dynamic") != 0)
- error (0, 0, gettext ("unknown option '-%c %s'"), 'B', arg);
-}
-
-
-/* The same functionality, but called in the second pass over the
- parameters. */
-static void
-parse_B_option_2 (const char *arg)
-{
- if (strcmp (arg, "static") == 0)
- ld_state.statically = true;
- else if (strcmp (arg, "dynamic") == 0)
- ld_state.statically = false;
- else if (strcmp (arg, "symbolic") == 0
- /* This is only meaningful if we create a DSO. */
- && ld_state.file_type == dso_file_type)
- ld_state.dt_flags |= DF_SYMBOLIC;
-}
-
-
-static void
-determine_output_format (void)
-{
- /* First change the 'input_file_list' variable in a simple
- single-linked list. */
- struct file_list *last = input_file_list;
- input_file_list = input_file_list->next;
- last->next = NULL;
-
- /* Determine the target configuration which we are supposed to use.
- The user can use the '-m' option to select one. If this is
- missing we are trying to load one file and determine the
- architecture from that. */
- if (emulation != NULL)
- {
- ld_state.ebl = ebl_openbackend_emulation (emulation);
-
- assert (ld_state.ebl != NULL);
- }
- else
- {
- /* Find an ELF input file and let it determine the ELf backend. */
- struct file_list *runp = input_file_list;
-
- while (runp != NULL)
- {
- int fd = open (runp->name, O_RDONLY);
- if (fd != -1)
- {
- int try (Elf *elf)
- {
- int result = 0;
-
- if (elf == NULL)
- return 0;
-
- if (elf_kind (elf) == ELF_K_ELF)
- {
- /* We have an ELF file. We now can find out
- what the output format should be. */
- XElf_Ehdr_vardef(ehdr);
-
- /* Get the ELF header of the object. */
- xelf_getehdr (elf, ehdr);
- if (ehdr != NULL)
- ld_state.ebl =
- ebl_openbackend_machine (ehdr->e_machine);
-
- result = 1;
- }
- else if (elf_kind (elf) == ELF_K_AR)
- {
- /* Try the archive members. This could
- potentially lead to wrong results if the
- archive contains files for more than one
- architecture. But this is the user's
- problem. */
- Elf *subelf;
- Elf_Cmd cmd = ELF_C_READ_MMAP;
-
- while ((subelf = elf_begin (fd, cmd, elf)) != NULL)
- {
- cmd = elf_next (subelf);
-
- if (try (subelf) != 0)
- break;
- }
- }
-
- elf_end (elf);
-
- return result;
- }
-
- if (try (elf_begin (fd, ELF_C_READ_MMAP, NULL)) != 0)
- /* Found a file. */
- break;
- }
-
- runp = runp->next;
- }
-
- if (ld_state.ebl == NULL)
- {
- error (0, 0, gettext ("\
-could not find input file to determine output file format"));
- error (EXIT_FAILURE, 0, gettext ("\
-try again with an appropriate '-m' parameter"));
- }
- }
-
- /* We don't need the list of input files anymore. The second run over
- the parameters will handle them. */
- while (input_file_list != NULL)
- {
- struct file_list *oldp = input_file_list;
- input_file_list = input_file_list->next;
- free (oldp);
- }
-
- /* We also know now what kind of file we are supposed to create. If
- the user hasn't selected anythign we create and executable. */
- if (ld_state.file_type == no_file_type)
- ld_state.file_type = executable_file_type;
-}
-
-/* Add DIR to the list of directories searched for object files and
- libraries. */
-void
-ld_new_searchdir (const char *dir)
-{
- struct pathelement *newpath;
-
- newpath = (struct pathelement *)
- obstack_calloc (&ld_state.smem, sizeof (struct pathelement));
-
- newpath->pname = dir;
-
- /* Enqueue the file. */
- if (ld_state.tailpaths == NULL)
- ld_state.paths = ld_state.tailpaths = newpath;
- else
- {
- ld_state.tailpaths->next = newpath;
- ld_state.tailpaths = newpath;
- }
-}
-
-
-struct usedfiles *
-ld_new_inputfile (const char *fname, enum file_type type)
-{
- struct usedfiles *newfile = (struct usedfiles *)
- obstack_calloc (&ld_state.smem, sizeof (struct usedfiles));
-
- newfile->soname = newfile->fname = newfile->rfname = fname;
- newfile->file_type = type;
- newfile->extract_rule = ld_state.extract_rule;
- newfile->as_needed = ld_state.as_needed;
- newfile->lazyload = ld_state.lazyload;
- newfile->status = not_opened;
-
- return newfile;
-}
-
-
-/* Create an array listing all the sections. We will than pass this
- array to a system specific function which can reorder it at will.
- The functions can also merge sections if this is what is
- wanted. */
-static void
-collect_sections (void)
-{
- void *p ;
- struct scnhead *h;
- size_t cnt;
-
- /* We have that many sections. At least for now. */
- ld_state.nallsections = ld_state.section_tab.filled;
-
- /* Allocate the array. We allocate one more entry than computed so
- far since we might need a new section for the copy relocations. */
- ld_state.allsections =
- (struct scnhead **) obstack_alloc (&ld_state.smem,
- (ld_state.nallsections + 1)
- * sizeof (struct scnhead *));
-
- /* Fill the array. We rely here on the hash table iterator to
- return the entries in the order they were added. */
- cnt = 0;
- p = NULL;
- while ((h = ld_section_tab_iterate (&ld_state.section_tab, &p)) != NULL)
- {
- struct scninfo *runp;
- bool used = false;
-
- if (h->kind == scn_normal)
- {
- runp = h->last;
- do
- {
- if (h->type == SHT_REL || h->type == SHT_RELA)
- {
- if (runp->used)
- /* This is a relocation section. If the section
- it is relocating is used in the result so must
- the relocation section. */
- runp->used
- = runp->fileinfo->scninfo[SCNINFO_SHDR (runp->shdr).sh_info].used;
- }
-
- /* Accumulate the result. */
- used |= runp->used;
-
- /* Next input section. */
- runp = runp->next;
- }
- while (runp != h->last);
-
- h->used = used;
- }
-
- ld_state.allsections[cnt++] = h;
- }
- ld_state.nusedsections = cnt;
-
- assert (cnt == ld_state.nallsections);
-}
-
-
-/* Add given path to the end of list. */
-static void
-add_rxxpath (struct pathelement **pathp, const char *str)
-{
- struct pathelement *newp;
-
- /* The path elements can in theory be freed after we read all the
- files. But the amount of memory we are talking about is small
- and the cost of free() calls is not neglectable. */
- newp = (struct pathelement *) obstack_alloc (&ld_state.smem, sizeof (*newp));
- newp->pname = str;
- newp->exist = 0;
-#ifndef NDEBUG
- newp->next = NULL;
-#endif
-
- CSNGL_LIST_ADD_REAR (*pathp, newp);
-}
-
-
-/* Convert lists of possibly colon-separated directory lists into lists
- where each entry is for a single directory. */
-static void
-normalize_dirlist (struct pathelement **pathp)
-{
- struct pathelement *firstp = *pathp;
-
- do
- {
- const char *pname = (*pathp)->pname;
- const char *colonp = strchrnul (pname, ':');
-
- if (colonp != NULL)
- {
- struct pathelement *lastp = *pathp;
- struct pathelement *newp;
-
- while (1)
- {
- if (colonp == pname)
- lastp->pname = ".";
- else
- lastp->pname = obstack_strndup (&ld_state.smem, pname,
- colonp - pname);
-
- if (*colonp == '\0')
- break;
- pname = colonp + 1;
-
- newp = (struct pathelement *) obstack_alloc (&ld_state.smem,
- sizeof (*newp));
- newp->next = lastp->next;
- newp->exist = 0;
- lastp = lastp->next = newp;
-
- colonp = strchrnul (pname, ':');
- }
-
- pathp = &lastp->next;
- }
- else
- pathp = &(*pathp)->next;
- }
- while (*pathp != firstp);
-}
-
-
-/* Called after all parameters are parsed to bring the runpath/rpath
- information into a usable form. */
-static void
-gen_rxxpath_data (void)
-{
- char *ld_library_path2;
-
- /* Convert the information in true single-linked lists for easy use.
- At this point we also discard the rpath information if runpath
- information is provided. rpath is deprecated and should not be
- used (or ever be invented for that matter). */
- if (ld_state.rpath != NULL)
- {
- struct pathelement *endp = ld_state.rpath;
- ld_state.rpath = ld_state.rpath->next;
- endp->next = NULL;
- }
- if (ld_state.rpath_link != NULL)
- {
- struct pathelement *endp = ld_state.rpath_link;
- ld_state.rpath_link = ld_state.rpath_link->next;
- endp->next = NULL;
- }
-
- if (ld_state.runpath != NULL)
- {
- struct pathelement *endp = ld_state.runpath;
- ld_state.runpath = ld_state.runpath->next;
- endp->next = NULL;
-
- /* If rpath information is also available discard it.
- XXX Should there be a possibility to avoid this? */
- while (ld_state.rpath != NULL)
- {
- struct pathelement *old = ld_state.rpath;
- ld_state.rpath = ld_state.rpath->next;
- free (old);
- }
- }
- if (ld_state.runpath_link != NULL)
- {
- struct pathelement *endp = ld_state.runpath_link;
- ld_state.runpath_link = ld_state.runpath_link->next;
- endp->next = NULL;
-
- /* If rpath information is also available discard it.
- XXX Should there be a possibility to avoid this? */
- while (ld_state.rpath_link != NULL)
- {
- struct pathelement *old = ld_state.rpath_link;
- ld_state.rpath_link = ld_state.rpath_link->next;
- free (old);
- }
-
- /* The information in the strings in the list can actually be
- directory lists themselves, with entries separated by colons.
- Convert the list now to a list with one list entry for each
- directory. */
- normalize_dirlist (&ld_state.runpath_link);
- }
- else if (ld_state.rpath_link != NULL)
- /* Same as for the runpath_link above. */
- normalize_dirlist (&ld_state.rpath_link);
-
-
- /* As a related task, handle the LD_LIBRARY_PATH value here. First
- we have to possibly split the value found (if it contains a
- semicolon). Then we have to split the value in list of
- directories, i.e., split at the colons. */
- if (ld_library_path1 != NULL)
- {
- ld_library_path2 = strchr (ld_library_path1, ';');
- if (ld_library_path2 == NULL)
- {
- /* If no semicolon is present the directories are looked at
- after the -L parameters (-> ld_library_path2). */
- ld_library_path2 = ld_library_path1;
- ld_library_path1 = NULL;
- }
- else
- {
- /* NUL terminate the first part. */
- *ld_library_path2++ = '\0';
-
- /* Convert the string value in a list. */
- add_rxxpath (&ld_state.ld_library_path1, ld_library_path1);
- normalize_dirlist (&ld_state.ld_library_path1);
- }
-
- add_rxxpath (&ld_state.ld_library_path2, ld_library_path2);
- normalize_dirlist (&ld_state.ld_library_path2);
- }
-}
-
-
-static void
-read_version_script (const char *fname)
-{
- /* Open the file. The name is supposed to be the complete (relative
- or absolute) path. No search along a path will be performed. */
- ldin = fopen (fname, "r");
- if (ldin == NULL)
- error (EXIT_FAILURE, errno, gettext ("cannot read version script '%s'"),
- fname);
- /* No need for locking. */
- __fsetlocking (ldin, FSETLOCKING_BYCALLER);
-
- /* Tell the parser that this is a version script. */
- ld_scan_version_script = 1;
-
- ldlineno = 1;
- ldin_fname = fname;
- if (ldparse () != 0)
- /* Something went wrong during parsing. */
- exit (EXIT_FAILURE);
-
- fclose (ldin);
-}
-
-
-static void
-create_lscript_symbols (void)
-{
- /* Walk through the data from the linker script and generate all the
- symbols which are required to be present and and those marked
- with PROVIDE if there is a undefined reference. */
- if (ld_state.output_segments == NULL)
- return;
-
- struct output_segment *segment = ld_state.output_segments->next;
- do
- {
- struct output_rule *orule;
-
- for (orule = segment->output_rules; orule != NULL; orule = orule->next)
- if (orule->tag == output_assignment
- /* The assignments to "." (i.e., the PC) have to be
- ignored here. */
- && strcmp (orule->val.assignment->variable, ".") != 0)
- {
- struct symbol *s = ld_state.unresolved;
-
- /* Check whether the symbol is needed. */
- if (likely (s != NULL))
- {
- struct symbol *first = s;
- const char *providename = orule->val.assignment->variable;
-
- /* Determine whether the provided symbol is still
- undefined. */
- // XXX TODO Loop inside a loop. Gag! Must rewrite. */
- do
- if (strcmp (s->name, providename) == 0)
- {
- /* Not defined but referenced. */
- if (unlikely (!s->defined))
- {
- /* Put on the list of symbols. First remove it from
- whatever list it currently is on. */
- CDBL_LIST_DEL (ld_state.unresolved, s);
- --ld_state.nunresolved;
- goto use_it;
- }
-
- if (unlikely (!orule->val.assignment->provide_flag))
- {
- /* The symbol is already defined and now again
- in the linker script. This is an error. */
- error (0, 0, gettext ("\
-duplicate definition of '%s' in linker script"),
- providename);
- goto next_rule;
- }
- }
- while ((s = s->next) != first);
- }
-
- /* If the symbol only has to be provided if it is needed,
- ignore it here since it is not undefined. */
- if (orule->val.assignment->provide_flag)
- continue;
-
- /* Allocate memory for this new symbol. */
- s = (struct symbol *)
- obstack_calloc (&ld_state.smem, sizeof (struct symbol));
-
- /* Initialize it. */
- s->name = orule->val.assignment->variable;
-
- /* Insert it into the symbol hash table. */
- unsigned long int hval = elf_hash (s->name);
- if (unlikely (ld_symbol_tab_insert (&ld_state.symbol_tab,
- hval, s) != 0))
- {
- /* This means the symbol is defined somewhere else.
- Maybe it comes from a DSO or so. Get the
- definition. */
- free (s);
- struct symbol *old = ld_symbol_tab_find (&ld_state.symbol_tab,
- hval, s);
- assert (old != NULL);
- free (s);
-
- /* If this is a definition from the application itself
- this means a duplicate definition. */
- if (! old->in_dso)
- {
- error (0, 0, gettext ("\
-duplicate definition of '%s' in linker script"),
- s->name);
- goto next_rule;
- }
-
- /* We use the definition from the linker script. */
- s = old;
- }
-
- use_it:
- /* The symbol is (now) defined. */
- s->defined = 1;
- s->type = STT_NOTYPE;
-
- /* Add a reference to the symbol record. We will come
- across it when creating the output file. */
- orule->val.assignment->sym = s;
-
- SNGL_LIST_PUSH (ld_state.lscript_syms, s);
- ++ld_state.nlscript_syms;
-
- next_rule:
- ;
- }
-
- segment = segment->next;
- }
- while (segment != ld_state.output_segments->next);
-}
-
-
-/* Create creation of spection section symbols representing sections in the
- output file. This is done for symbols like _GLOBAL_OFFSET_TABLE_ and
- _DYNAMIC. */
-static void
-create_special_section_symbol (struct symbol **symp, const char *name)
-{
- if (*symp == NULL)
- {
- /* No symbol defined found yet. Create one. */
- struct symbol *newsym = (struct symbol *)
- obstack_calloc (&ld_state.smem, sizeof (*newsym));
-
- newsym->name = name;
- // XXX Should we mark the symbol hidden? They are hardly useful
- // used outside the current object.
-
- /* Add to the symbol table. */
- if (unlikely (ld_symbol_tab_insert (&ld_state.symbol_tab,
- elf_hash (name), newsym) != 0))
- abort ();
-
- *symp = newsym;
- }
- else if ((*symp)->defined)
- /* Cannot happen. We do use this symbol from any input file. */
- abort ();
-
- (*symp)->defined = 1;
- (*symp)->local = 1;
- (*symp)->hidden = 1;
- (*symp)->type = STT_OBJECT;
-
- ++ld_state.nsymtab;
-}
-
-
-#include "debugpred.h"
diff --git a/src/ld.h b/src/ld.h
deleted file mode 100644
index 535f7cd..0000000
--- a/src/ld.h
+++ /dev/null
@@ -1,1143 +0,0 @@
-/* Copyright (C) 2001, 2002, 2003, 2005, 2006, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifndef LD_H
-#define LD_H 1
-
-#include <dlfcn.h>
-#include <obstack.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include "xelf.h"
-
-
-/* Recommended size of the buffer passed to ld_strerror. */
-#define ERRBUFSIZE (512)
-
-/* Character used to introduce version name after symbol. */
-#define VER_CHR '@'
-
-
-/* Methods for handling archives. */
-enum extract_rule
- {
- defaultextract, /* Weak references don't cause archive member to
- be used. */
- weakextract, /* Weak references cause archive member to be
- extracted. */
- allextract /* Extract all archive members regardless of
- references (aka whole-archive). */
- };
-
-
-/* Type of output file. */
-enum file_type
- {
- no_file_type = 0, /* None selected so far. */
- executable_file_type, /* Executable. */
- dso_file_type, /* DSO. */
- dso_needed_file_type, /* DSO introduced by DT_NEEDED. */
- relocatable_file_type, /* Relocatable object file. */
- archive_file_type /* Archive (input only). */
- };
-
-
-struct usedfiles
-{
- /* The next file given at the command line. */
- struct usedfiles *next;
- /* Nonzero if this file is the beginning of a group. */
- bool group_start;
- /* Nonzero if this file is the end of a group. */
- bool group_end;
- /* Pointer to the beginning of the group. It is necessary to
- explain why we cannot simply use the 'next' pointer and have a
- circular single-linked list like in many cases. The problem is
- that the last archive of the group, if it is the last file of the
- group, contains the only existing pointer to the next file we
- have to look at. All files are initially connected via the
- 'next' pointer in a single-linked list. Therefore we cannot
- overwrite this value. It instead will be used once the group is
- handled and we go on processing the rest of the files. */
- struct usedfiles *group_backref;
-
- /* Name/path of the file. */
- const char *fname;
- /* Resolved file name. */
- const char *rfname;
- /* Name used as reference in DT_NEEDED entries. This is normally
- the SONAME. If it is missing it's normally the fname above. */
- const char *soname;
- /* Handle for the SONAME in the string table. */
- struct Ebl_Strent *sonameent;
-
- /* Help to identify duplicates. */
- dev_t dev;
- ino_t ino;
-
- enum
- {
- not_opened,
- opened,
- in_archive,
- closed
- } status;
-
- /* How to extract elements from archives. */
- enum extract_rule extract_rule;
-
- /* Lazy-loading rule. */
- bool lazyload;
-
- /* If this is a DSO the flag indicates whether the file is directly
- used in a reference. */
- bool used;
-
- /* True when file should be added to DT_NEEDED list only when
- directly referenced. */
- bool as_needed;
-
- /* If nonzero this is the archive sequence number which can be used to
- determine whether back refernces from -( -) or GROUP statements
- have to be followed. */
- int archive_seq;
-
- /* Pointer to the record for the archive containing this file. */
- struct usedfiles *archive_file;
-
- /* Type of file. We have to distinguish these types since they
- are searched for differently. */
- enum file_type file_type;
- /* This is the ELF library handle for this file. */
- Elf *elf;
-
- /* The ELF header. */
-#if NATIVE_ELF != 0
- XElf_Ehdr *ehdr;
-# define FILEINFO_EHDR(fi) (*(fi))
-#else
- XElf_Ehdr ehdr;
-# define FILEINFO_EHDR(fi) (fi)
-#endif
-
- /* Index of the section header string table section. We use a
- separate field and not the e_shstrndx field in the ELF header
- since in case of a file with more than 64000 sections the index
- might be stored in the section header of section zero. The
- elf_getshstrndx() function can find the value but it is too
- costly to repeat this call over and over. */
- size_t shstrndx;
-
- /* Info about the sections of the file. */
- struct scninfo
- {
- /* Handle for the section. Note that we can store a section
- handle here because the file is not changing. This together
- with the knowledge about the libelf library is enough for us to
- assume the section reference remains valid at all times. */
- Elf_Scn *scn;
- /* Section header. */
-#if NATIVE_ELF != 0
- XElf_Shdr *shdr;
-# define SCNINFO_SHDR(si) (*(si))
-#else
- XElf_Shdr shdr;
-# define SCNINFO_SHDR(si) (si)
-#endif
- /* Offset of this files section in the combined section. */
- XElf_Off offset;
- /* Index of the section in the output file. */
- Elf32_Word outscnndx;
- /* Index of the output section in the 'allsection' array. */
- Elf32_Word allsectionsidx;
- /* True if the section is used. */
- bool used;
- /* True if section is an unused COMDAT section. */
- bool unused_comdat;
- /* True if this is a COMDAT group section. */
- bool comdat_group;
- /* Section group number. This is the index of the SHT_GROUP section. */
- Elf32_Word grpid;
- /* Pointer back to the containing file information structure. */
- struct usedfiles *fileinfo;
- /* List of symbols in this section (set only for merge-able sections
- and group sections). */
- struct symbol *symbols;
- /* Size of relocations in this section. Only used for relocation
- sections. */
- size_t relsize;
- /* Pointer to next section which is put in the given output
- section. */
- struct scninfo *next;
- } *scninfo;
-
- /* List of section group sections. */
- struct scninfo *groups;
-
- /* The symbol table section.
-
- XXX Maybe support for more than one symbol table is needed. */
- Elf_Data *symtabdata;
- /* Extra section index table section. */
- Elf_Data *xndxdata;
- /* Dynamic symbol table section. */
- Elf_Data *dynsymtabdata;
- /* The version number section. */
- Elf_Data *versymdata;
- /* The defined versions. */
- Elf_Data *verdefdata;
- /* Number of versions defined. */
- size_t nverdef;
- /* True if the version with the given index number is used in the
- output. */
- XElf_Versym *verdefused;
- /* How many versions are used. */
- size_t nverdefused;
- /* Handle for name of the version. */
- struct Ebl_Strent **verdefent;
- /* The needed versions. */
- Elf_Data *verneeddata;
- /* String table section associated with the symbol table. */
- Elf32_Word symstridx;
- /* String table section associated with the dynamic symbol table. */
- Elf32_Word dynsymstridx;
- /* Number of entries in the symbol table. */
- size_t nsymtab;
- size_t nlocalsymbols;
- size_t ndynsymtab;
- /* Dynamic section. */
- Elf_Scn *dynscn;
-
- /* Indirection table for the symbols defined here. */
- Elf32_Word *symindirect;
- Elf32_Word *dynsymindirect;
- /* For undefined or common symbols we need a reference to the symbol
- record. */
- struct symbol **symref;
- struct symbol **dynsymref;
-
- /* This is the file descriptor. The value is -1 if the descriptor
- was already closed. This can happen if we needed file descriptors
- to open new files. */
- int fd;
- /* This flag is true if the descriptor was passed to the generic
- functions from somewhere else. This is an implementation detail;
- no machine-specific code must use this flag. */
- bool fd_passed;
-
- /* True if any of the sections is merge-able. */
- bool has_merge_sections;
-};
-
-
-/* Functions to test for the various types of files we handle. */
-static inline int
-ld_file_rel_p (struct usedfiles *file)
-{
- return (elf_kind (file->elf) == ELF_K_ELF
- && FILEINFO_EHDR (file->ehdr).e_type == ET_REL);
-}
-
-static inline int
-ld_file_dso_p (struct usedfiles *file)
-{
- return (elf_kind (file->elf) == ELF_K_ELF
- && FILEINFO_EHDR (file->ehdr).e_type == ET_DYN);
-}
-
-static inline int
-ld_file_ar_p (struct usedfiles *file)
-{
- return elf_kind (file->elf) == ELF_K_AR;
-}
-
-
-struct pathelement
-{
- /* The next path to search. */
- struct pathelement *next;
- /* The path name. */
- const char *pname;
- /* Larger than zero if the directory exists, smaller than zero if not,
- zero if it is not yet known. */
- int exist;
-};
-
-
-/* Forward declaration. */
-struct ld_state;
-
-
-/* Callback functions. */
-struct callbacks
-{
- /* Library names passed to the linker as -lXXX represent files named
- libXXX.YY. The YY part can have different forms, depending on the
- architecture. The generic set is .so and .a (in this order). */
- const char **(*lib_extensions) (struct ld_state *)
- __attribute__ ((__const__));
-#define LIB_EXTENSION(state) \
- DL_CALL_FCT ((state)->callbacks.lib_extensions, (state))
-
- /* Process the given file. If the file is not yet open, open it.
- The first parameter is a file descriptor for the file which can
- be -1 to indicate the file has not yet been found. The second
- parameter describes the file to be opened, the last one is the
- state of the linker which among other information contain the
- paths we look at.*/
- int (*file_process) (int fd, struct usedfiles *, struct ld_state *,
- struct usedfiles **);
-#define FILE_PROCESS(fd, file, state, nextp) \
- DL_CALL_FCT ((state)->callbacks.file_process, (fd, file, state, nextp))
-
- /* Close the given file. */
- int (*file_close) (struct usedfiles *, struct ld_state *);
-#define FILE_CLOSE(file, state) \
- DL_CALL_FCT ((state)->callbacks.file_close, (file, state))
-
- /* Create the output sections now. This requires knowledge about
- all the sections we will need. It may be necessary to sort the
- sections in the order they are supposed to appear in the
- executable. The sorting use many different kinds of information
- to optimize the resulting binary. Important is to respect
- segment boundaries and the needed alignment. The mode of the
- segments will be determined afterwards automatically by the
- output routines. */
- void (*create_sections) (struct ld_state *);
-#define CREATE_SECTIONS(state) \
- DL_CALL_FCT ((state)->callbacks.create_sections, (state))
-
- /* Determine whether we have any non-weak unresolved references left. */
- int (*flag_unresolved) (struct ld_state *);
-#define FLAG_UNRESOLVED(state) \
- DL_CALL_FCT ((state)->callbacks.flag_unresolved, (state))
-
- /* Create the sections which are generated by the linker and are not
- present in the input file. */
- void (*generate_sections) (struct ld_state *);
-#define GENERATE_SECTIONS(state) \
- DL_CALL_FCT ((state)->callbacks.generate_sections, (state))
-
- /* Open the output file. The file name is given or "a.out". We
- create as much of the ELF structure as possible. */
- int (*open_outfile) (struct ld_state *, int, int, int);
-#define OPEN_OUTFILE(state, machine, class, data) \
- DL_CALL_FCT ((state)->callbacks.open_outfile, (state, machine, class, data))
-
- /* Create the data for the output file. */
- int (*create_outfile) (struct ld_state *);
-#define CREATE_OUTFILE(state) \
- DL_CALL_FCT ((state)->callbacks.create_outfile, (state))
-
- /* Process a relocation section. */
- void (*relocate_section) (struct ld_state *, Elf_Scn *, struct scninfo *,
- const Elf32_Word *);
-#define RELOCATE_SECTION(state, outscn, first, dblindirect) \
- DL_CALL_FCT ((state)->callbacks.relocate_section, (state, outscn, first, \
- dblindirect))
-
- /* Allocate a data buffer for the relocations of the given output
- section. */
- void (*count_relocations) (struct ld_state *, struct scninfo *);
-#define COUNT_RELOCATIONS(state, scninfo) \
- DL_CALL_FCT ((state)->callbacks.count_relocations, (state, scninfo))
-
- /* Create relocations for executable or DSO. */
- void (*create_relocations) (struct ld_state *, const Elf32_Word *);
-#define CREATE_RELOCATIONS(state, dlbindirect) \
- DL_CALL_FCT ((state)->callbacks.create_relocations, (state, dblindirect))
-
- /* Finalize the output file. */
- int (*finalize) (struct ld_state *);
-#define FINALIZE(state) \
- DL_CALL_FCT ((state)->callbacks.finalize, (state))
-
- /* Check whether special section number is known. */
- bool (*special_section_number_p) (struct ld_state *, size_t);
-#define SPECIAL_SECTION_NUMBER_P(state, number) \
- DL_CALL_FCT ((state)->callbacks.special_section_number_p, (state, number))
-
- /* Check whether section type is known. */
- bool (*section_type_p) (struct ld_state *, XElf_Word);
-#define SECTION_TYPE_P(state, type) \
- DL_CALL_FCT ((state)->callbacks.section_type_p, (state, type))
-
- /* Return section flags for .dynamic section. */
- XElf_Xword (*dynamic_section_flags) (struct ld_state *);
-#define DYNAMIC_SECTION_FLAGS(state) \
- DL_CALL_FCT ((state)->callbacks.dynamic_section_flags, (state))
-
- /* Create the data structures for the .plt section and initialize it. */
- void (*initialize_plt) (struct ld_state *, Elf_Scn *scn);
-#define INITIALIZE_PLT(state, scn) \
- DL_CALL_FCT ((state)->callbacks.initialize_plt, (state, scn))
-
- /* Create the data structures for the .rel.plt section and initialize it. */
- void (*initialize_pltrel) (struct ld_state *, Elf_Scn *scn);
-#define INITIALIZE_PLTREL(state, scn) \
- DL_CALL_FCT ((state)->callbacks.initialize_pltrel, (state, scn))
-
- /* Finalize the .plt section the what belongs to them. */
- void (*finalize_plt) (struct ld_state *, size_t, size_t, struct symbol **);
-#define FINALIZE_PLT(state, nsym, nsym_dyn, ndxtosym) \
- DL_CALL_FCT ((state)->callbacks.finalize_plt, (state, nsym, nsym_dyn, \
- ndxtosym))
-
- /* Create the data structures for the .got section and initialize it. */
- void (*initialize_got) (struct ld_state *, Elf_Scn *scn);
-#define INITIALIZE_GOT(state, scn) \
- DL_CALL_FCT ((state)->callbacks.initialize_got, (state, scn))
-
- /* Create the data structures for the .got.plt section and initialize it. */
- void (*initialize_gotplt) (struct ld_state *, Elf_Scn *scn);
-#define INITIALIZE_GOTPLT(state, scn) \
- DL_CALL_FCT ((state)->callbacks.initialize_gotplt, (state, scn))
-
- /* Return the tag corresponding to the native relocation type for
- the platform. */
- int (*rel_type) (struct ld_state *);
-#define REL_TYPE(state) \
- DL_CALL_FCT ((state)->callbacks.rel_type, (state))
-};
-
-
-/* Structure for symbol representation. This data structure is used a
- lot, so size is important. */
-struct symbol
-{
- /* Symbol name. */
- const char *name;
- /* Size of the object. */
- XElf_Xword size;
- /* Index of the symbol in the symbol table of the object. */
- size_t symidx;
- /* Index of the symbol in the symbol table of the output file. */
- size_t outsymidx;
-
- /* Description where the symbol is found/needed. */
- size_t scndx;
- struct usedfiles *file;
- /* Index of the symbol table. */
- Elf32_Word symscndx;
-
- /* Index of the symbol in the dynamic symbol table of the output
- file. Note that the value only needs to be 16 bit wide since
- there cannot be more sections in an executable or DSO. */
- unsigned int outdynsymidx:16;
-
- /* Type of the symbol. */
- unsigned int type:4;
- /* Various flags. */
- unsigned int defined:1;
- unsigned int common:1;
- unsigned int weak:1;
- unsigned int added:1;
- unsigned int merged:1;
- unsigned int local:1;
- unsigned int hidden:1;
- /* Nonzero if the symbol is on the from_dso list. */
- unsigned int on_dsolist:1;
- /* Nonzero if symbol needs copy relocation, reset when the
- relocation has been created. */
- unsigned int need_copy:1;
- unsigned int in_dso:1;
-
- union
- {
- /* Pointer to the handle created by the functions which create
- merged section contents. We use 'void *' because there are
- different implementations used. */
- void *handle;
- XElf_Addr value;
- } merge;
-
- /* Pointer to next/previous symbol on whatever list the symbol is. */
- struct symbol *next;
- struct symbol *previous;
- /* Pointer to next symbol of the same section (only set for merge-able
- sections). */
- struct symbol *next_in_scn;
-};
-
-
-/* Get the definition for the symbol table. */
-#include <symbolhash.h>
-
-/* Simple single linked list of file names. */
-struct filename_list
-{
- const char *name;
- struct usedfiles *real;
- struct filename_list *next;
- bool group_start;
- bool group_end;
- bool as_needed;
-};
-
-
-/* Data structure to describe expression in linker script. */
-struct expression
-{
- enum expression_tag
- {
- exp_num,
- exp_sizeof_headers,
- exp_pagesize,
- exp_id,
- exp_mult,
- exp_div,
- exp_mod,
- exp_plus,
- exp_minus,
- exp_and,
- exp_or,
- exp_align
- } tag;
-
- union
- {
- uintmax_t num;
- struct expression *child;
- struct
- {
- struct expression *left;
- struct expression *right;
- } binary;
- const char *str;
- } val;
-};
-
-
-/* Data structure for section name with flags. */
-struct input_section_name
-{
- const char *name;
- bool sort_flag;
-};
-
-/* File name mask with section name. */
-struct filemask_section_name
-{
- const char *filemask;
- const char *excludemask;
- struct input_section_name *section_name;
- bool keep_flag;
-};
-
-/* Data structure for assignments. */
-struct assignment
-{
- const char *variable;
- struct expression *expression;
- struct symbol *sym;
- bool provide_flag;
-};
-
-
-/* Data structure describing input for an output section. */
-struct input_rule
-{
- enum
- {
- input_section,
- input_assignment
- } tag;
-
- union
- {
- struct assignment *assignment;
- struct filemask_section_name *section;
- } val;
-
- struct input_rule *next;
-};
-
-
-/* Data structure to describe output section. */
-struct output_section
-{
- const char *name;
- struct input_rule *input;
- XElf_Addr max_alignment;
- bool ignored;
-};
-
-
-/* Data structure to describe output file format. */
-struct output_rule
-{
- enum
- {
- output_section,
- output_assignment
- } tag;
-
- union
- {
- struct assignment *assignment;
- struct output_section section;
- } val;
-
- struct output_rule *next;
-};
-
-
-/* List of all the segments the linker script describes. */
-struct output_segment
-{
- int mode;
- struct output_rule *output_rules;
- struct output_segment *next;
-
- XElf_Off offset;
- XElf_Addr addr;
- XElf_Xword align;
-};
-
-
-/* List of identifiers. */
-struct id_list
-{
- union
- {
- enum id_type
- {
- id_str, /* Normal string. */
- id_all, /* "*", matches all. */
- id_wild /* Globbing wildcard string. */
- } id_type;
- struct
- {
- bool local;
- const char *versionname;
- } s;
- } u;
- const char *id;
- struct id_list *next;
-};
-
-
-/* Version information. */
-struct version
-{
- struct version *next;
- struct id_list *local_names;
- struct id_list *global_names;
- const char *versionname;
- const char *parentname;
-};
-
-
-/* Head for list of sections. */
-struct scnhead
-{
- /* Name of the sections. */
- const char *name;
-
- /* Accumulated flags for the sections. */
- XElf_Xword flags;
-
- /* Type of the sections. */
- XElf_Word type;
-
- /* Entry size. If there are differencs between the sections with
- the same name this field contains 1. */
- XElf_Word entsize;
-
- /* If non-NULL pointer to group signature. */
- const char *grp_signature;
-
- /* Maximum alignment for all sections. */
- XElf_Word align;
-
- /* Distinguish between normal sections coming from the input file
- and sections generated by the linker. */
- enum scn_kind
- {
- scn_normal, /* Section from the input file(s). */
- scn_dot_interp, /* Generated .interp section. */
- scn_dot_got, /* Generated .got section. */
- scn_dot_gotplt, /* Generated .got.plt section. */
- scn_dot_dynrel, /* Generated .rel.dyn section. */
- scn_dot_dynamic, /* Generated .dynamic section. */
- scn_dot_dynsym, /* Generated .dynsym section. */
- scn_dot_dynstr, /* Generated .dynstr section. */
- scn_dot_hash, /* Generated .hash section. */
- scn_dot_gnu_hash, /* Generated .gnu.hash section. */
- scn_dot_plt, /* Generated .plt section. */
- scn_dot_pltrel, /* Generated .rel.plt section. */
- scn_dot_version, /* Generated .gnu.version section. */
- scn_dot_version_r, /* Generated .gnu.version_r section. */
- scn_dot_note_gnu_build_id /* Generated .note.gnu.build-id section. */
- } kind;
-
- /* True is the section is used in the output. */
- bool used;
-
- /* Total size (only determined this way for relocation sections). */
- size_t relsize;
-
- /* Filled in by the section sorting to indicate which segment the
- section goes in. */
- int segment_nr;
-
- /* Index of the output section. We cannot store the section handle
- directly here since the handle is a pointer in a dynamically
- allocated table which might move if it becomes too small for all
- the sections. Using the index the correct value can be found at
- all times. */
- XElf_Word scnidx;
-
- /* Index of the STT_SECTION entry for this section in the symbol
- table. */
- XElf_Word scnsymidx;
-
- /* Address of the section in the output file. */
- XElf_Addr addr;
-
- /* Handle for the section name in the output file's section header
- string table. */
- struct Ebl_Strent *nameent;
-
- /* Tail of list of symbols for this section. Only set if the
- section is merge-able. */
- struct symbol *symbols;
-
- /* Pointer to last section. */
- struct scninfo *last;
-};
-
-
-/* Define hash table for sections. */
-#include <sectionhash.h>
-
-/* Define hash table for version symbols. */
-#include <versionhash.h>
-
-
-/* State of the linker. */
-struct ld_state
-{
- /* ELF backend library handle. */
- Ebl *ebl;
-
- /* List of all archives participating, in this order. */
- struct usedfiles *archives;
- /* End of the list. */
- struct usedfiles *tailarchives;
- /* If nonzero we are looking for the beginning of a group. */
- bool group_start_requested;
- /* Pointer to the archive starting the group. */
- struct usedfiles *group_start_archive;
-
- /* List of the DSOs we found. */
- struct usedfiles *dsofiles;
- /* Number of DSO files. */
- size_t ndsofiles;
- /* Ultimate list of object files which are linked in. */
- struct usedfiles *relfiles;
-
- /* List the DT_NEEDED DSOs. */
- struct usedfiles *needed;
-
- /* Temporary storage for the parser. */
- struct filename_list *srcfiles;
-
- /* List of all the paths to look at. */
- struct pathelement *paths;
- /* Tail of the list. */
- struct pathelement *tailpaths;
-
- /* User provided paths for lookup of DSOs. */
- struct pathelement *rpath;
- struct pathelement *rpath_link;
- struct pathelement *runpath;
- struct pathelement *runpath_link;
- struct Ebl_Strent *rxxpath_strent;
- int rxxpath_tag;
-
- /* From the environment variable LD_LIBRARY_PATH. */
- struct pathelement *ld_library_path1;
- struct pathelement *ld_library_path2;
-
- /* Name of the output file. */
- const char *outfname;
- /* Name of the temporary file we initially create. */
- const char *tempfname;
- /* File descriptor opened for the output file. */
- int outfd;
- /* The ELF descriptor for the output file. */
- Elf *outelf;
-
- /* Type of output file. */
- enum file_type file_type;
-
- /* Is this a system library or not. */
- bool is_system_library;
-
- /* Page size to be assumed for the binary. */
- size_t pagesize;
-
- /* Name of the interpreter for dynamically linked objects. */
- const char *interp;
- /* Index of the .interp section. */
- Elf32_Word interpscnidx;
-
- /* Optimization level. */
- unsigned long int optlevel;
-
- /* If true static linking is requested. */
- bool statically;
-
- /* If true, add DT_NEEDED entries for following files if they are
- needed. */
- bool as_needed;
-
- /* How to extract elements from archives. */
- enum extract_rule extract_rule;
-
- /* Sequence number of the last archive we used. */
- int last_archive_used;
-
- /* If true print to stdout information about the files we are
- trying to open. */
- bool trace_files;
-
- /* If true multiple definitions are not considered an error; the
- first is used. */
- bool muldefs;
-
- /* If true undefined symbols when building DSOs are not fatal. */
- bool nodefs;
-
- /* If true add line indentifying link-editor to .comment section. */
- bool add_ld_comment;
-
- /* Stripping while linking. */
- enum
- {
- strip_none,
- strip_debug,
- strip_all,
- strip_everything
- } strip;
-
- /* The callback function vector. */
- struct callbacks callbacks;
-
- /* Name of the entry symbol. Can also be a numeric value. */
- const char *entry;
-
- /* The description of the segments in the output file. */
- struct output_segment *output_segments;
-
- /* List of the symbols we created from linker script definitions. */
- struct symbol *lscript_syms;
- size_t nlscript_syms;
-
- /* Table with known symbols. */
- ld_symbol_tab symbol_tab;
-
- /* Table with used sections. */
- ld_section_tab section_tab;
-
- /* The list of sections once we collected them. */
- struct scnhead **allsections;
- size_t nallsections;
- size_t nusedsections;
- size_t nnotesections;
-
- /* Beginning of the list of symbols which are still unresolved. */
- struct symbol *unresolved;
- /* Number of truely unresolved entries in the list. */
- size_t nunresolved;
- /* Number of truely unresolved, non-weak entries in the list. */
- size_t nunresolved_nonweak;
-
- /* List of common symbols. */
- struct symbol *common_syms;
- /* Section for the common symbols. */
- struct scninfo *common_section;
-
- /* List of symbols defined in DSOs and used in a relocatable file.
- DSO symbols not referenced in the relocatable files are not on
- the list. If a symbol is on the list the on_dsolist field in the
- 'struct symbol' is nonzero. */
- struct symbol *from_dso;
- /* Number of entries in from_dso. */
- size_t nfrom_dso;
- /* Number of entries in the dynamic symbol table. */
- size_t ndynsym;
- /* Number of PLT entries from DSO references. */
- size_t nplt;
- /* Number of PLT entries from DSO references. */
- size_t ngot;
- /* Number of copy relocations. */
- size_t ncopy;
- /* Section for copy relocations. */
- struct scninfo *copy_section;
-
- /* Keeping track of the number of symbols in the output file. */
- size_t nsymtab;
- size_t nlocalsymbols;
-
- /* Special symbols. */
- struct symbol *init_symbol;
- struct symbol *fini_symbol;
-
- /* The description of the segments in the output file as described
- in the default linker script. This information will be used in
- addition to the user-provided information. */
- struct output_segment *default_output_segments;
- /* Search paths added by the default linker script. */
- struct pathelement *default_paths;
-
-#ifndef BASE_ELF_NAME
- /* The handle of the ld backend library. */
- void *ldlib;
-#endif
-
- /* String table for the section headers. */
- struct Ebl_Strtab *shstrtab;
-
- /* True if output file should contain symbol table. */
- bool need_symtab;
- /* Symbol table section. */
- Elf32_Word symscnidx;
- /* Extended section table section. */
- Elf32_Word xndxscnidx;
- /* Symbol string table section. */
- Elf32_Word strscnidx;
-
- /* True if output file should contain dynamic symbol table. */
- bool need_dynsym;
- /* Dynamic symbol table section. */
- Elf32_Word dynsymscnidx;
- /* Dynamic symbol string table section. */
- Elf32_Word dynstrscnidx;
- /* Dynamic symbol hash tables. */
- size_t hashscnidx;
- size_t gnuhashscnidx;
-
- /* Procedure linkage table section. */
- Elf32_Word pltscnidx;
- /* Number of entries already in the PLT section. */
- size_t nplt_used;
- /* Relocation for procedure linkage table section. */
- Elf32_Word pltrelscnidx;
-
- /* Global offset table section. */
- Elf32_Word gotscnidx;
- /* And the part of the PLT. */
- Elf32_Word gotpltscnidx;
-
- /* This section will hole all non-PLT relocations. */
- Elf32_Word reldynscnidx;
-
- /* Index of the sections to handle versioning. */
- Elf32_Word versymscnidx;
- Elf32_Word verneedscnidx;
- /* XXX Should the following names be verneed...? */
- /* Number of version definitions in input DSOs used. */
- int nverdefused;
- /* Number of input DSOs using versioning. */
- int nverdeffile;
- /* Index of next version. */
- int nextveridx;
-
- /* TLS segment. */
- bool need_tls;
- XElf_Addr tls_start;
- XElf_Addr tls_tcb;
-
- /* Hash table for version symbol strings. Only strings without
- special characters are hashed here. */
- ld_version_str_tab version_str_tab;
- /* At most one of the following two variables is set to true if either
- global or local symbol binding is selected as the default. */
- bool default_bind_local;
- bool default_bind_global;
-
- /* Execuatable stack selection. */
- enum execstack
- {
- execstack_false = 0,
- execstack_true,
- execstack_false_force
- } execstack;
-
- /* True if only used sections are used. */
- bool gc_sections;
-
- /* Array to determine final index of symbol. */
- Elf32_Word *dblindirect;
-
- /* Section group handling. */
- struct scngroup
- {
- Elf32_Word outscnidx;
- int nscns;
- struct member
- {
- struct scnhead *scn;
- struct member *next;
- } *member;
- struct Ebl_Strent *nameent;
- struct symbol *symbol;
- struct scngroup *next;
- } *groups;
-
- /* True if the output file needs a .got section. */
- bool need_got;
- /* Number of relocations for GOT section caused. */
- size_t nrel_got;
-
- /* Number of entries needed in the .dynamic section. */
- int ndynamic;
- /* To keep track of added entries. */
- int ndynamic_filled;
- /* Index for the dynamic section. */
- Elf32_Word dynamicscnidx;
-
- /* Flags set in the DT_FLAGS word. */
- Elf32_Word dt_flags;
- /* Flags set in the DT_FLAGS_1 word. */
- Elf32_Word dt_flags_1;
- /* Flags set in the DT_FEATURE_1 word. */
- Elf32_Word dt_feature_1;
-
- /* Lazy-loading state for dependencies. */
- bool lazyload;
-
- /* True if an .eh_frame_hdr section should be generated. */
- bool eh_frame_hdr;
-
- /* What hash style to generate. */
- enum
- {
- hash_style_none = 0,
- hash_style_sysv = 1,
-#define GENERATE_SYSV_HASH ((ld_state.hash_style & hash_style_sysv) != 0)
- hash_style_gnu = 2
-#define GENERATE_GNU_HASH ((ld_state.hash_style & hash_style_gnu) != 0)
- }
- hash_style;
-
-
- /* True if in executables all global symbols should be exported in
- the dynamic symbol table. */
- bool export_all_dynamic;
-
- /* Build-ID style. NULL is none. */
- const char *build_id;
- Elf32_Word buildidscnidx;
-
- /* If DSO is generated, this is the SONAME. */
- const char *soname;
-
- /* List of all relocation sections. */
- struct scninfo *rellist;
- /* Total size of non-PLT relocations. */
- size_t relsize_total;
-
- /* Record for the GOT symbol, if known. */
- struct symbol *got_symbol;
- /* Record for the dynamic section symbol, if known. */
- struct symbol *dyn_symbol;
-
- /* Obstack used for small objects which will not be deleted. */
- struct obstack smem;
-};
-
-
-/* The interface to the scanner. */
-
-/* Parser entry point. */
-extern int ldparse (void);
-
-/* The input file. */
-extern FILE *ldin;
-
-/* Name of the input file. */
-extern const char *ldin_fname;
-
-/* Current line number. Must be reset for a new file. */
-extern int ldlineno;
-
-/* If nonzero we are currently parsing a version script. */
-extern int ld_scan_version_script;
-
-/* Flags defined in ld.c. */
-extern int verbose;
-extern int conserve_memory;
-
-
-/* Linker state. This contains all global information. */
-extern struct ld_state ld_state;
-
-
-/* Generic ld helper functions. */
-
-/* Append a new directory to search libraries in. */
-extern void ld_new_searchdir (const char *dir);
-
-/* Append a new file to the list of input files. */
-extern struct usedfiles *ld_new_inputfile (const char *fname,
- enum file_type type);
-
-
-/* These are the generic implementations for the callbacks used by ld. */
-
-/* Initialize state object. This callback function is called after the
- parameters are parsed but before any file is searched for. */
-extern int ld_prepare_state (const char *emulation);
-
-
-/* Function to determine whether an object will be dynamically linked. */
-extern bool dynamically_linked_p (void);
-
-/* Helper functions for the architecture specific code. */
-
-/* Checked whether the symbol is undefined and referenced from a DSO. */
-extern bool linked_from_dso_p (struct scninfo *scninfo, size_t symidx);
-#ifdef __GNUC_STDC_INLINE__
-__attribute__ ((__gnu_inline__))
-#endif
-extern inline bool
-linked_from_dso_p (struct scninfo *scninfo, size_t symidx)
-{
- struct usedfiles *file = scninfo->fileinfo;
-
- /* If this symbol is not undefined in this file it cannot come from
- a DSO. */
- if (symidx < file->nlocalsymbols)
- return false;
-
- struct symbol *sym = file->symref[symidx];
-
- return sym->defined && sym->in_dso;
-}
-
-#endif /* ld.h */
diff --git a/src/ldgeneric.c b/src/ldgeneric.c
deleted file mode 100644
index 8df2a57..0000000
--- a/src/ldgeneric.c
+++ /dev/null
@@ -1,7143 +0,0 @@
-/* Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <ctype.h>
-#include <dlfcn.h>
-#include <errno.h>
-#include <error.h>
-#include <fcntl.h>
-#include <fnmatch.h>
-#include <gelf.h>
-#include <inttypes.h>
-#include <libintl.h>
-#include <stdbool.h>
-#include <stdio_ext.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/param.h>
-#include <sys/stat.h>
-
-#include <elf-knowledge.h>
-#include "ld.h"
-#include "list.h"
-#include <md5.h>
-#include <sha1.h>
-#include <system.h>
-
-
-/* Header of .eh_frame_hdr section. */
-struct unw_eh_frame_hdr
-{
- unsigned char version;
- unsigned char eh_frame_ptr_enc;
- unsigned char fde_count_enc;
- unsigned char table_enc;
-};
-#define EH_FRAME_HDR_VERSION 1
-
-
-/* Prototypes for local functions. */
-static const char **ld_generic_lib_extensions (struct ld_state *)
- __attribute__ ((__const__));
-static int ld_generic_file_close (struct usedfiles *fileinfo,
- struct ld_state *statep);
-static int ld_generic_file_process (int fd, struct usedfiles *fileinfo,
- struct ld_state *statep,
- struct usedfiles **nextp);
-static void ld_generic_generate_sections (struct ld_state *statep);
-static void ld_generic_create_sections (struct ld_state *statep);
-static int ld_generic_flag_unresolved (struct ld_state *statep);
-static int ld_generic_open_outfile (struct ld_state *statep, int machine,
- int class, int data);
-static int ld_generic_create_outfile (struct ld_state *statep);
-static void ld_generic_relocate_section (struct ld_state *statep,
- Elf_Scn *outscn,
- struct scninfo *firstp,
- const Elf32_Word *dblindirect);
-static int ld_generic_finalize (struct ld_state *statep);
-static bool ld_generic_special_section_number_p (struct ld_state *statep,
- size_t number);
-static bool ld_generic_section_type_p (struct ld_state *statep,
- XElf_Word type);
-static XElf_Xword ld_generic_dynamic_section_flags (struct ld_state *statep);
-static void ld_generic_initialize_plt (struct ld_state *statep, Elf_Scn *scn);
-static void ld_generic_initialize_pltrel (struct ld_state *statep,
- Elf_Scn *scn);
-static void ld_generic_initialize_got (struct ld_state *statep, Elf_Scn *scn);
-static void ld_generic_initialize_gotplt (struct ld_state *statep,
- Elf_Scn *scn);
-static void ld_generic_finalize_plt (struct ld_state *statep, size_t nsym,
- size_t nsym_dyn,
- struct symbol **ndxtosymp);
-static int ld_generic_rel_type (struct ld_state *statep);
-static void ld_generic_count_relocations (struct ld_state *statep,
- struct scninfo *scninfo);
-static void ld_generic_create_relocations (struct ld_state *statep,
- const Elf32_Word *dblindirect);
-
-static int file_process2 (struct usedfiles *fileinfo);
-static void mark_section_used (struct scninfo *scninfo, Elf32_Word shndx,
- struct scninfo **grpscnp);
-
-
-/* Map symbol index to struct symbol record. */
-static struct symbol **ndxtosym;
-
-/* String table reference to all symbols in the symbol table. */
-static struct Ebl_Strent **symstrent;
-
-
-/* Check whether file associated with FD is a DSO. */
-static bool
-is_dso_p (int fd)
-{
- /* We have to read the 'e_type' field. It has the same size (16
- bits) in 32- and 64-bit ELF. */
- XElf_Half e_type;
-
- return (pread (fd, &e_type, sizeof (e_type), offsetof (XElf_Ehdr, e_type))
- == sizeof (e_type)
- && e_type == ET_DYN);
-}
-
-
-/* Print the complete name of a file, including the archive it is
- contained in. */
-static int
-print_file_name (FILE *s, struct usedfiles *fileinfo, int first_level,
- int newline)
-{
- int npar = 0;
-
- if (fileinfo->archive_file != NULL)
- {
- npar = print_file_name (s, fileinfo->archive_file, 0, 0) + 1;
- fputc_unlocked ('(', s);
- fputs_unlocked (fileinfo->rfname, s);
-
- if (first_level)
- while (npar-- > 0)
- fputc_unlocked (')', s);
- }
- else
- fputs_unlocked (fileinfo->rfname, s);
-
- if (first_level && newline)
- fputc_unlocked ('\n', s);
-
- return npar;
-}
-
-
-/* Function to determine whether an object will be dynamically linked. */
-bool
-dynamically_linked_p (void)
-{
- return (ld_state.file_type == dso_file_type || ld_state.nplt > 0
- || ld_state.ngot > 0);
-}
-
-
-bool
-linked_from_dso_p (struct scninfo *scninfo, size_t symidx)
-{
- struct usedfiles *file = scninfo->fileinfo;
-
- /* If this symbol is not undefined in this file it cannot come from
- a DSO. */
- if (symidx < file->nlocalsymbols)
- return false;
-
- struct symbol *sym = file->symref[symidx];
-
- return sym->defined && sym->in_dso;
-}
-
-
-/* Initialize state object. This callback function is called after the
- parameters are parsed but before any file is searched for. */
-int
-ld_prepare_state (const char *emulation)
-{
- /* When generating DSO we normally allow undefined symbols. */
- ld_state.nodefs = true;
-
- /* To be able to detect problems we add a .comment section entry by
- default. */
- ld_state.add_ld_comment = true;
-
- /* XXX We probably should find a better place for this. The index
- of the first user-defined version is 2. */
- ld_state.nextveridx = 2;
-
- /* Pick an not too small number for the initial size of the tables. */
- ld_symbol_tab_init (&ld_state.symbol_tab, 1027);
- ld_section_tab_init (&ld_state.section_tab, 67);
- ld_version_str_tab_init (&ld_state.version_str_tab, 67);
-
- /* Initialize the section header string table. */
- ld_state.shstrtab = ebl_strtabinit (true);
- if (ld_state.shstrtab == NULL)
- error (EXIT_FAILURE, errno, gettext ("cannot create string table"));
-
- /* Initialize the callbacks. These are the defaults, the appropriate
- backend can later install its own callbacks. */
- ld_state.callbacks.lib_extensions = ld_generic_lib_extensions;
- ld_state.callbacks.file_process = ld_generic_file_process;
- ld_state.callbacks.file_close = ld_generic_file_close;
- ld_state.callbacks.generate_sections = ld_generic_generate_sections;
- ld_state.callbacks.create_sections = ld_generic_create_sections;
- ld_state.callbacks.flag_unresolved = ld_generic_flag_unresolved;
- ld_state.callbacks.open_outfile = ld_generic_open_outfile;
- ld_state.callbacks.create_outfile = ld_generic_create_outfile;
- ld_state.callbacks.relocate_section = ld_generic_relocate_section;
- ld_state.callbacks.finalize = ld_generic_finalize;
- ld_state.callbacks.special_section_number_p =
- ld_generic_special_section_number_p;
- ld_state.callbacks.section_type_p = ld_generic_section_type_p;
- ld_state.callbacks.dynamic_section_flags = ld_generic_dynamic_section_flags;
- ld_state.callbacks.initialize_plt = ld_generic_initialize_plt;
- ld_state.callbacks.initialize_pltrel = ld_generic_initialize_pltrel;
- ld_state.callbacks.initialize_got = ld_generic_initialize_got;
- ld_state.callbacks.initialize_gotplt = ld_generic_initialize_gotplt;
- ld_state.callbacks.finalize_plt = ld_generic_finalize_plt;
- ld_state.callbacks.rel_type = ld_generic_rel_type;
- ld_state.callbacks.count_relocations = ld_generic_count_relocations;
- ld_state.callbacks.create_relocations = ld_generic_create_relocations;
-
-#ifndef BASE_ELF_NAME
- /* Find the ld backend library. Use EBL to determine the name if
- the user hasn't provided one on the command line. */
- if (emulation == NULL)
- {
- emulation = ebl_backend_name (ld_state.ebl);
- assert (emulation != NULL);
- }
- size_t emulation_len = strlen (emulation);
-
- /* Construct the file name. */
- char *fname = (char *) alloca (sizeof "libld_" - 1 + emulation_len
- + sizeof ".so");
- strcpy (mempcpy (stpcpy (fname, "libld_"), emulation, emulation_len), ".so");
-
- /* Try loading. */
- void *h = dlopen (fname, RTLD_LAZY);
- if (h == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("cannot load ld backend library '%s': %s"),
- fname, dlerror ());
-
- /* Find the initializer. It must be present. */
- char *initname = (char *) alloca (emulation_len + sizeof "_ld_init");
- strcpy (mempcpy (initname, emulation, emulation_len), "_ld_init");
- int (*initfct) (struct ld_state *)
- = (int (*) (struct ld_state *)) dlsym (h, initname);
-
- if (initfct == NULL)
- error (EXIT_FAILURE, 0, gettext ("\
-cannot find init function in ld backend library '%s': %s"),
- fname, dlerror ());
-
- /* Store the handle. */
- ld_state.ldlib = h;
-
- /* Call the init function. */
- return initfct (&ld_state);
-#else
-# define INIT_FCT_NAME(base) _INIT_FCT_NAME(base)
-# define _INIT_FCT_NAME(base) base##_ld_init
- /* Declare and call the initialization function. */
- extern int INIT_FCT_NAME(BASE_ELF_NAME) (struct ld_state *);
- return INIT_FCT_NAME(BASE_ELF_NAME) (&ld_state);
-#endif
-}
-
-
-static int
-check_for_duplicate2 (struct usedfiles *newp, struct usedfiles *list)
-{
- struct usedfiles *first;
- struct usedfiles *prevp;
-
- if (list == NULL)
- return 0;
-
- prevp = list;
- list = first = list->next;
- do
- {
- /* When searching the needed list we might come across entries
- for files which are not yet opened. Stop then, there is
- nothing more to test. */
- if (likely (list->status == not_opened))
- break;
-
- if (unlikely (list->ino == newp->ino)
- && unlikely (list->dev == newp->dev))
- {
- close (newp->fd);
- newp->fd = -1;
- newp->status = closed;
- if (newp->file_type == relocatable_file_type)
- error (0, 0, gettext ("%s listed more than once as input"),
- newp->rfname);
-
- return 1;
- }
- list = list->next;
- }
- while (likely (list != first));
-
- return 0;
-}
-
-
-static int
-check_for_duplicate (struct usedfiles *newp)
-{
- struct stat st;
-
- if (unlikely (fstat (newp->fd, &st) < 0))
- {
- close (newp->fd);
- return errno;
- }
-
- newp->dev = st.st_dev;
- newp->ino = st.st_ino;
-
- return (check_for_duplicate2 (newp, ld_state.relfiles)
- || check_for_duplicate2 (newp, ld_state.dsofiles)
- || check_for_duplicate2 (newp, ld_state.needed));
-}
-
-
-/* Find a file along the path described in the state. */
-static int
-open_along_path2 (struct usedfiles *fileinfo, struct pathelement *path)
-{
- const char *fname = fileinfo->fname;
- size_t fnamelen = strlen (fname);
- int err = ENOENT;
- struct pathelement *firstp = path;
-
- if (path == NULL)
- /* Cannot find anything since we have no path. */
- return ENOENT;
-
- do
- {
- if (likely (path->exist >= 0))
- {
- /* Create the file name. */
- char *rfname = NULL;
- size_t dirlen = strlen (path->pname);
- int fd = -1;
-
- if (fileinfo->file_type == archive_file_type)
- {
- const char **exts = (ld_state.statically
- ? (const char *[2]) { ".a", NULL }
- : LIB_EXTENSION (&ld_state));
-
- /* We have to create the actual file name. We prepend "lib"
- and add one of the extensions the platform has. */
- while (*exts != NULL)
- {
- size_t extlen = strlen (*exts);
- rfname = (char *) alloca (dirlen + 5 + fnamelen + extlen);
- memcpy (mempcpy (stpcpy (mempcpy (rfname, path->pname,
- dirlen),
- "/lib"),
- fname, fnamelen),
- *exts, extlen + 1);
-
- fd = open (rfname, O_RDONLY);
- if (likely (fd != -1) || errno != ENOENT)
- {
- err = fd == -1 ? errno : 0;
- break;
- }
-
- /* Next extension. */
- ++exts;
- }
- }
- else
- {
- assert (fileinfo->file_type == dso_file_type
- || fileinfo->file_type == dso_needed_file_type);
-
- rfname = (char *) alloca (dirlen + 1 + fnamelen + 1);
- memcpy (stpcpy (mempcpy (rfname, path->pname, dirlen), "/"),
- fname, fnamelen + 1);
-
- fd = open (rfname, O_RDONLY);
- if (unlikely (fd == -1))
- err = errno;
- }
-
- if (likely (fd != -1))
- {
- /* We found the file. This also means the directory
- exists. */
- fileinfo->fd = fd;
- path->exist = 1;
-
- /* Check whether we have this file already loaded. */
- if (unlikely (check_for_duplicate (fileinfo) != 0))
- return EAGAIN;
-
- /* Make a copy of the name. */
- fileinfo->rfname = obstack_strdup (&ld_state.smem, rfname);
-
- if (unlikely (ld_state.trace_files))
- printf (fileinfo->file_type == archive_file_type
- ? gettext ("%s (for -l%s)\n")
- : gettext ("%s (for DT_NEEDED %s)\n"),
- rfname, fname);
-
- return 0;
- }
-
- /* The file does not exist. Maybe the whole directory doesn't.
- Check it unless we know it exists. */
- if (unlikely (path->exist == 0))
- {
- struct stat st;
-
- /* Keep only the directory name. Note that the path
- might be relative. This doesn't matter here. We do
- the test in any case even if there is the chance that
- somebody wants to change the programs working
- directory at some point which would make the result
- of this test void. Since changing the working
- directory is completely wrong we are not taking this
- case into account. */
- rfname[dirlen] = '\0';
- if (unlikely (stat (rfname, &st) < 0) || ! S_ISDIR (st.st_mode))
- /* The directory does not exist or the named file is no
- directory. */
- path->exist = -1;
- else
- path->exist = 1;
- }
- }
-
- /* Next path element. */
- path = path->next;
- }
- while (likely (err == ENOENT && path != firstp));
-
- return err;
-}
-
-
-static int
-open_along_path (struct usedfiles *fileinfo)
-{
- const char *fname = fileinfo->fname;
- int err = ENOENT;
-
- if (fileinfo->file_type == relocatable_file_type)
- {
- /* Only libraries are searched along the path. */
- fileinfo->fd = open (fname, O_RDONLY);
-
- if (likely (fileinfo->fd != -1))
- {
- /* We found the file. */
- if (unlikely (ld_state.trace_files))
- print_file_name (stdout, fileinfo, 1, 1);
-
- return check_for_duplicate (fileinfo);
- }
-
- /* If the name is an absolute path we are done. */
- err = errno;
- }
- else
- {
- /* If the user specified two parts to the LD_LIBRARY_PATH variable
- try the first part now. */
- err = open_along_path2 (fileinfo, ld_state.ld_library_path1);
-
- /* Try the user-specified path next. */
- if (err == ENOENT)
- err = open_along_path2 (fileinfo,
- fileinfo->file_type == archive_file_type
- ? ld_state.paths : ld_state.rpath_link);
-
- /* Then the second part of the LD_LIBRARY_PATH value. */
- if (unlikely (err == ENOENT))
- {
- err = open_along_path2 (fileinfo, ld_state.ld_library_path2);
-
- /* In case we look for a DSO handle now the RUNPATH. */
- if (err == ENOENT)
- {
- if (fileinfo->file_type == dso_file_type)
- err = open_along_path2 (fileinfo, ld_state.runpath_link);
-
- /* Finally the path from the default linker script. */
- if (err == ENOENT)
- err = open_along_path2 (fileinfo, ld_state.default_paths);
- }
- }
- }
-
- if (unlikely (err != 0)
- && (err != EAGAIN || fileinfo->file_type == relocatable_file_type))
- error (0, err, gettext ("cannot open %s"), fileinfo->fname);
-
- return err;
-}
-
-
-static int
-matching_group_comdat_scn (const XElf_Sym *sym, size_t shndx,
- struct usedfiles *fileinfo, struct symbol *oldp)
-{
- if ((shndx >= SHN_LORESERVE && shndx <= SHN_HIRESERVE)
- || (oldp->scndx >= SHN_LORESERVE && oldp->scndx <= SHN_HIRESERVE))
- /* Cannot be a group COMDAT section. */
- return 0;
-
- size_t newgrpid = fileinfo->scninfo[shndx].grpid;
- size_t oldgrpid = oldp->file->scninfo[oldp->scndx].grpid;
- if (newgrpid == 0 || oldgrpid == 0)
- return 0;
-
- assert (SCNINFO_SHDR (fileinfo->scninfo[newgrpid].shdr).sh_type
- == SHT_GROUP);
- assert (SCNINFO_SHDR (oldp->file->scninfo[oldgrpid].shdr).sh_type
- == SHT_GROUP);
-
- if (! fileinfo->scninfo[newgrpid].comdat_group
- || ! oldp->file->scninfo[oldgrpid].comdat_group)
- return 0;
-
- if (strcmp (fileinfo->scninfo[newgrpid].symbols->name,
- oldp->file->scninfo[oldgrpid].symbols->name) != 0)
- return 0;
-
- /* This is a matching, duplicate COMDAT group section. Ignore it. */
- return 1;
-}
-
-
-static void
-check_type_and_size (const XElf_Sym *sym, struct usedfiles *fileinfo,
- struct symbol *oldp)
-{
- /* We check the type and size of the symbols. In both cases the
- information can be missing (size is zero, type is STT_NOTYPE) in
- which case we issue no warnings. Otherwise everything must
- match. If the type does not match there is no point in checking
- the size. */
-
- if (XELF_ST_TYPE (sym->st_info) != STT_NOTYPE && oldp->type != STT_NOTYPE
- && unlikely (oldp->type != XELF_ST_TYPE (sym->st_info)))
- {
- char buf1[64];
- char buf2[64];
-
- error (0, 0, gettext ("\
-Warning: type of `%s' changed from %s in %s to %s in %s"),
- oldp->name,
- ebl_symbol_type_name (ld_state.ebl, oldp->type,
- buf1, sizeof (buf1)),
- oldp->file->rfname,
- ebl_symbol_type_name (ld_state.ebl, XELF_ST_TYPE (sym->st_info),
- buf2, sizeof (buf2)),
- fileinfo->rfname);
- }
- else if (XELF_ST_TYPE (sym->st_info) == STT_OBJECT
- && oldp->size != 0
- && unlikely (oldp->size != sym->st_size))
- error (0, 0, gettext ("\
-Warning: size of `%s' changed from %" PRIu64 " in %s to %" PRIu64 " in %s"),
- oldp->name, (uint64_t) oldp->size, oldp->file->rfname,
- (uint64_t) sym->st_size, fileinfo->rfname);
-}
-
-
-static int
-check_definition (const XElf_Sym *sym, size_t shndx, size_t symidx,
- struct usedfiles *fileinfo, struct symbol *oldp)
-{
- int result = 0;
- bool old_in_dso = FILEINFO_EHDR (oldp->file->ehdr).e_type == ET_DYN;
- bool new_in_dso = FILEINFO_EHDR (fileinfo->ehdr).e_type == ET_DYN;
- bool use_new_def = false;
-
- if (shndx != SHN_UNDEF
- && (! oldp->defined
- || (shndx != SHN_COMMON && oldp->common && ! new_in_dso)
- || (old_in_dso && ! new_in_dso)))
- {
- /* We found a definition for a previously undefined symbol or a
- real definition for a previous common-only definition or a
- redefinition of a symbol definition in an object file
- previously defined in a DSO. First perform some tests which
- will show whether the common is really matching the
- definition. */
- check_type_and_size (sym, fileinfo, oldp);
-
- /* We leave the next element intact to not interrupt the list
- with the unresolved symbols. Whoever walks the list will
- have to check the `defined' flag. But we remember that this
- list element is not unresolved anymore. */
- if (! oldp->defined)
- {
- /* Remove from the list. */
- --ld_state.nunresolved;
- if (! oldp->weak)
- --ld_state.nunresolved_nonweak;
- CDBL_LIST_DEL (ld_state.unresolved, oldp);
- }
- else if (oldp->common)
- /* Remove from the list. */
- CDBL_LIST_DEL (ld_state.common_syms, oldp);
-
- /* Use the values of the definition from now on. */
- use_new_def = true;
- }
- else if (shndx != SHN_UNDEF
- && oldp->defined
- && matching_group_comdat_scn (sym, shndx, fileinfo, oldp))
- /* The duplicate symbol is in a group COMDAT section with the same
- signature as the one containing the original definition.
- Just ignore the second definition. */
- /* nothing */;
- else if (shndx != SHN_UNDEF
- && unlikely (! oldp->common)
- && oldp->defined
- && shndx != SHN_COMMON
- /* Multiple definitions are no fatal errors if the -z muldefs flag
- is used. We don't warn about the multiple definition unless we
- are told to be verbose. */
- && (!ld_state.muldefs || verbose)
- && ! old_in_dso && fileinfo->file_type == relocatable_file_type)
- {
- /* We have a double definition. This is a problem. */
- char buf[64];
- XElf_Sym_vardef (oldsym);
- struct usedfiles *oldfile;
- const char *scnname;
- Elf32_Word xndx;
- size_t shnum;
-
- if (elf_getshnum (fileinfo->elf, &shnum) < 0)
- error (EXIT_FAILURE, 0,
- gettext ("cannot determine number of sections: %s"),
- elf_errmsg (-1));
-
- /* XXX Use only ebl_section_name. */
- if (shndx < SHN_LORESERVE || (shndx > SHN_HIRESERVE && shndx < shnum))
- scnname = elf_strptr (fileinfo->elf,
- fileinfo->shstrndx,
- SCNINFO_SHDR (fileinfo->scninfo[shndx].shdr).sh_name);
- else
- // XXX extended section
- scnname = ebl_section_name (ld_state.ebl, shndx, 0, buf, sizeof (buf),
- NULL, shnum);
-
- /* XXX Print source file and line number. */
- print_file_name (stderr, fileinfo, 1, 0);
- fprintf (stderr,
- gettext ("(%s+%#" PRIx64 "): multiple definition of %s `%s'\n"),
- scnname,
- (uint64_t) sym->st_value,
- ebl_symbol_type_name (ld_state.ebl, XELF_ST_TYPE (sym->st_info),
- buf, sizeof (buf)),
- oldp->name);
-
- oldfile = oldp->file;
- xelf_getsymshndx (oldfile->symtabdata, oldfile->xndxdata, oldp->symidx,
- oldsym, xndx);
- assert (oldsym != NULL);
-
- /* XXX Use only ebl_section_name. */
- if (oldp->scndx < SHN_LORESERVE || oldp->scndx > SHN_HIRESERVE)
- scnname = elf_strptr (oldfile->elf,
- oldfile->shstrndx,
- SCNINFO_SHDR (oldfile->scninfo[shndx].shdr).sh_name);
- else
- scnname = ebl_section_name (ld_state.ebl, oldp->scndx, oldp->scndx,
- buf, sizeof (buf), NULL, shnum);
-
- /* XXX Print source file and line number. */
- print_file_name (stderr, oldfile, 1, 0);
- fprintf (stderr, gettext ("(%s+%#" PRIx64 "): first defined here\n"),
- scnname, (uint64_t) oldsym->st_value);
-
- if (likely (!ld_state.muldefs))
- result = 1;
- }
- else if (old_in_dso && fileinfo->file_type == relocatable_file_type
- && shndx != SHN_UNDEF)
- /* We use the definition from a normal relocatable file over the
- definition in a DSO. This is what the dynamic linker would
- do, too. */
- use_new_def = true;
- else if (old_in_dso && !new_in_dso && oldp->defined && !oldp->on_dsolist)
- {
- CDBL_LIST_ADD_REAR (ld_state.from_dso, oldp);
- ++ld_state.nfrom_dso;
-
- /* If the object is a function we allocate a PLT entry,
- otherwise only a GOT entry. */
- if (oldp->type == STT_FUNC)
- ++ld_state.nplt;
- else
- ++ld_state.ngot;
-
- oldp->on_dsolist = 1;
- }
- else if (oldp->common && shndx == SHN_COMMON)
- {
- /* The symbol size is the largest of all common definitions. */
- oldp->size = MAX (oldp->size, sym->st_size);
- /* Similarly for the alignment. */
- oldp->merge.value = MAX (oldp->merge.value, sym->st_value);
- }
-
- if (unlikely (use_new_def))
- {
- /* Adjust the symbol record appropriately and remove
- the symbol from the list of symbols which are taken from DSOs. */
- if (old_in_dso && fileinfo->file_type == relocatable_file_type)
- {
- CDBL_LIST_DEL (ld_state.from_dso, oldp);
- --ld_state.nfrom_dso;
-
- if (likely (oldp->type == STT_FUNC))
- --ld_state.nplt;
- else
- --ld_state.ngot;
-
- oldp->on_dsolist = 0;
- }
-
- /* Use the values of the definition from now on. */
- oldp->size = sym->st_size;
- oldp->type = XELF_ST_TYPE (sym->st_info);
- oldp->symidx = symidx;
- oldp->scndx = shndx;
- //oldp->symscndx = THESYMSCNDX must be passed;
- oldp->file = fileinfo;
- oldp->defined = 1;
- oldp->in_dso = new_in_dso;
- oldp->common = shndx == SHN_COMMON;
- if (likely (fileinfo->file_type == relocatable_file_type))
- {
- /* If the definition comes from a DSO we pertain the weak flag
- and it's indicating whether the reference is weak or not. */
- oldp->weak = XELF_ST_BIND (sym->st_info) == STB_WEAK;
-
- // XXX Really exclude SHN_ABS?
- if (shndx != SHN_COMMON && shndx != SHN_ABS)
- {
- struct scninfo *ignore;
- mark_section_used (&fileinfo->scninfo[shndx], shndx, &ignore);
- }
- }
-
- /* Add to the list of symbols used from DSOs if necessary. */
- if (new_in_dso && !old_in_dso)
- {
- CDBL_LIST_ADD_REAR (ld_state.from_dso, oldp);
- ++ld_state.nfrom_dso;
-
- /* If the object is a function we allocate a PLT entry,
- otherwise only a GOT entry. */
- if (oldp->type == STT_FUNC)
- ++ld_state.nplt;
- else
- ++ld_state.ngot;
-
- oldp->on_dsolist = 1;
- }
- else if (shndx == SHN_COMMON)
- {
- /* Store the alignment. */
- oldp->merge.value = sym->st_value;
-
- CDBL_LIST_ADD_REAR (ld_state.common_syms, oldp);
- }
- }
-
- return result;
-}
-
-
-static struct scninfo *
-find_section_group (struct usedfiles *fileinfo, Elf32_Word shndx,
- Elf_Data **datap)
-{
- struct scninfo *runp;
-
- for (runp = fileinfo->groups; runp != NULL; runp = runp->next)
- if (!runp->used)
- {
- Elf32_Word *grpref;
- size_t cnt;
- Elf_Data *data;
-
- data = elf_getdata (runp->scn, NULL);
- if (data == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("%s: cannot get section group data: %s"),
- fileinfo->fname, elf_errmsg (-1));
-
- /* There cannot be another data block. */
- assert (elf_getdata (runp->scn, data) == NULL);
-
- grpref = (Elf32_Word *) data->d_buf;
- cnt = data->d_size / sizeof (Elf32_Word);
- /* Note that we stop after looking at index 1 since index 0
- contains the flags for the section group. */
- while (cnt > 1)
- if (grpref[--cnt] == shndx)
- {
- *datap = data;
- return runp;
- }
- }
-
- /* If we come here no section group contained the given section
- despite the SHF_GROUP flag. This is an error in the input
- file. */
- error (EXIT_FAILURE, 0, gettext ("\
-%s: section '%s' with group flag set does not belong to any group"),
- fileinfo->fname,
- elf_strptr (fileinfo->elf, fileinfo->shstrndx,
- SCNINFO_SHDR (fileinfo->scninfo[shndx].shdr).sh_name));
- return NULL;
-}
-
-
-/* Mark all sections which belong to the same group as section SHNDX
- as used. */
-static void
-mark_section_group (struct usedfiles *fileinfo, Elf32_Word shndx,
- struct scninfo **grpscnp)
-{
- /* First locate the section group. There can be several (many) of
- them. */
- size_t cnt;
- Elf32_Word *grpref;
- Elf_Data *data;
- struct scninfo *grpscn = find_section_group (fileinfo, shndx, &data);
- *grpscnp = grpscn;
-
- /* Mark all the sections as used.
-
- XXX Two possible problems here:
-
- - the gABI says "The section must be referenced by a section of type
- SHT_GROUP". I hope everybody reads this as "exactly one section".
-
- - section groups are also useful to mark the debugging section which
- belongs to a text section. Unconditionally adding debugging sections
- is therefore probably not what is wanted if stripping is required. */
-
- /* Mark the section group as handled. */
- grpscn->used = true;
-
- grpref = (Elf32_Word *) data->d_buf;
- cnt = data->d_size / sizeof (Elf32_Word);
- while (cnt > 1)
- {
- Elf32_Word idx = grpref[--cnt];
- XElf_Shdr *shdr = &SCNINFO_SHDR (fileinfo->scninfo[idx].shdr);
-
- if (fileinfo->scninfo[idx].grpid != grpscn->grpid)
- error (EXIT_FAILURE, 0, gettext ("\
-%s: section [%2d] '%s' is not in the correct section group"),
- fileinfo->fname, (int) idx,
- elf_strptr (fileinfo->elf, fileinfo->shstrndx, shdr->sh_name));
-
- if (ld_state.strip == strip_none
- /* If we are stripping, remove debug sections. */
- || (!ebl_debugscn_p (ld_state.ebl,
- elf_strptr (fileinfo->elf, fileinfo->shstrndx,
- shdr->sh_name))
- /* And the relocation sections for the debug sections. */
- && ((shdr->sh_type != SHT_RELA && shdr->sh_type != SHT_REL)
- || !ebl_debugscn_p (ld_state.ebl,
- elf_strptr (fileinfo->elf,
- fileinfo->shstrndx,
- SCNINFO_SHDR (fileinfo->scninfo[shdr->sh_info].shdr).sh_name)))))
- {
- struct scninfo *ignore;
-
- mark_section_used (&fileinfo->scninfo[idx], idx, &ignore);
- }
- }
-}
-
-
-static void
-mark_section_used (struct scninfo *scninfo, Elf32_Word shndx,
- struct scninfo **grpscnp)
-{
- if (likely (scninfo->used))
- /* Nothing to be done. */
- return;
-
- /* We need this section. */
- scninfo->used = true;
-
- /* Make sure the section header has been read from the file. */
- XElf_Shdr *shdr = &SCNINFO_SHDR (scninfo->shdr);
-#if NATIVE_ELF
- if (unlikely (scninfo->shdr == NULL))
-#else
- if (unlikely (scninfo->shdr.sh_type == SHT_NULL))
-#endif
- {
-#if NATIVE_ELF != 0
- shdr = xelf_getshdr (scninfo->scn, scninfo->shdr);
-#else
- xelf_getshdr_copy (scninfo->scn, shdr, scninfo->shdr);
-#endif
- if (unlikely (shdr == NULL))
- /* Something is very wrong. The calling code will notice it
- soon and print a message. */
- return;
- }
-
- /* Handle section linked by 'sh_link'. */
- if (unlikely (shdr->sh_link != 0))
- {
- struct scninfo *ignore;
- mark_section_used (&scninfo->fileinfo->scninfo[shdr->sh_link],
- shdr->sh_link, &ignore);
- }
-
- /* Handle section linked by 'sh_info'. */
- if (unlikely (shdr->sh_info != 0) && (shdr->sh_flags & SHF_INFO_LINK))
- {
- struct scninfo *ignore;
- mark_section_used (&scninfo->fileinfo->scninfo[shdr->sh_info],
- shdr->sh_info, &ignore);
- }
-
- if (unlikely (shdr->sh_flags & SHF_GROUP) && ld_state.gc_sections)
- /* Find the section group which contains this section. */
- mark_section_group (scninfo->fileinfo, shndx, grpscnp);
-}
-
-
-/* We collect all sections in a hashing table. All sections with the
- same name are collected in a list. Note that we do not determine
- which sections are finally collected in the same output section
- here. This would be terribly inefficient. It will be done later. */
-static void
-add_section (struct usedfiles *fileinfo, struct scninfo *scninfo)
-{
- struct scnhead *queued;
- struct scnhead search;
- unsigned long int hval;
- XElf_Shdr *shdr = &SCNINFO_SHDR (scninfo->shdr);
- struct scninfo *grpscn = NULL;
- Elf_Data *grpscndata = NULL;
-
- /* See whether we can determine right away whether we need this
- section in the output.
-
- XXX I assume here that --gc-sections only affects extraction
- from an archive. If it also affects objects files given on
- the command line then somebody must explain to me how the
- dependency analysis should work. Should the entry point be
- the root? What if it is a numeric value? */
- if (!scninfo->used
- && (ld_state.strip == strip_none
- || (shdr->sh_flags & SHF_ALLOC) != 0
- || shdr->sh_type == SHT_NOTE
- || (shdr->sh_type == SHT_PROGBITS
- && strcmp (elf_strptr (fileinfo->elf,
- fileinfo->shstrndx,
- shdr->sh_name), ".comment") == 0))
- && (fileinfo->status != in_archive || !ld_state.gc_sections))
- /* Mark as used and handle reference recursively if necessary. */
- mark_section_used (scninfo, elf_ndxscn (scninfo->scn), &grpscn);
-
- if ((shdr->sh_flags & SHF_GROUP) && grpscn == NULL)
- /* Determine the symbol which name constitutes the signature
- for the section group. */
- grpscn = find_section_group (fileinfo, elf_ndxscn (scninfo->scn),
- &grpscndata);
- assert (grpscn == NULL || grpscn->symbols->name != NULL);
-
- /* Determine the section name. */
- search.name = elf_strptr (fileinfo->elf, fileinfo->shstrndx, shdr->sh_name);
- search.type = shdr->sh_type;
- search.flags = shdr->sh_flags;
- search.entsize = shdr->sh_entsize;
- search.grp_signature = grpscn != NULL ? grpscn->symbols->name : NULL;
- search.kind = scn_normal;
- hval = elf_hash (search.name);
-
- /* Find already queued sections. */
- queued = ld_section_tab_find (&ld_state.section_tab, hval, &search);
- if (queued != NULL)
- {
- bool is_comdat = false;
-
- /* If this section is part of a COMDAT section group we simply
- ignore it since we already have a copy. */
- if (unlikely (shdr->sh_flags & SHF_GROUP))
- {
- /* Get the data of the section group section. */
- if (grpscndata == NULL)
- {
- grpscndata = elf_getdata (grpscn->scn, NULL);
- assert (grpscndata != NULL);
- }
-
- /* XXX Possibly unaligned memory access. */
- if ((((Elf32_Word *) grpscndata->d_buf)[0] & GRP_COMDAT) != 0)
- {
- /* We have to compare the group signatures. There might
- be sections with the same name but belonging to
- groups with different signatures. This means we have
- to compare the new group signature with all those
- already collected. There might also be some
- non-group sections in the mix. */
- struct scninfo *runp = queued->last;
- do
- {
- if (SCNINFO_SHDR (runp->shdr).sh_flags & SHF_GROUP)
- {
- struct scninfo *grpscn2
- = find_section_group (runp->fileinfo,
- elf_ndxscn (runp->scn),
- &grpscndata);
-
- if (strcmp (grpscn->symbols->name,
- grpscn2->symbols->name) == 0)
- {
- scninfo->unused_comdat = is_comdat = true;
- break;
- }
- }
-
- runp = runp->next;
- }
- while (runp != queued->last);
- }
- }
-
- if (!is_comdat)
- {
- /* No COMDAT section, we use the data. */
- scninfo->next = queued->last->next;
- queued->last = queued->last->next = scninfo;
-
- queued->flags = ebl_sh_flags_combine (ld_state.ebl, queued->flags,
- shdr->sh_flags);
- queued->align = MAX (queued->align, shdr->sh_addralign);
- }
- }
- else
- {
- /* We do not use obstacks here since the memory might be
- deallocated. */
- queued = (struct scnhead *) xcalloc (sizeof (struct scnhead), 1);
- queued->kind = scn_normal;
- queued->name = search.name;
- queued->type = shdr->sh_type;
- queued->flags = shdr->sh_flags;
- queued->align = shdr->sh_addralign;
- queued->entsize = shdr->sh_entsize;
- queued->grp_signature = grpscn != NULL ? grpscn->symbols->name : NULL;
- queued->segment_nr = ~0;
- queued->last = scninfo->next = scninfo;
-
- /* Check whether we need a TLS segment. */
- ld_state.need_tls |= (shdr->sh_flags & SHF_TLS) != 0;
-
- /* Add to the hash table and possibly overwrite existing value. */
- ld_section_tab_insert (&ld_state.section_tab, hval, queued);
- }
-}
-
-
-static int
-add_relocatable_file (struct usedfiles *fileinfo, GElf_Word secttype)
-{
- size_t scncnt;
- size_t cnt;
- Elf_Data *symtabdata = NULL;
- Elf_Data *xndxdata = NULL;
- Elf_Data *versymdata = NULL;
- Elf_Data *verdefdata = NULL;
- Elf_Data *verneeddata = NULL;
- size_t symstridx = 0;
- size_t nsymbols = 0;
- size_t nlocalsymbols = 0;
- bool has_merge_sections = false;
- bool has_tls_symbols = false;
- /* Unless we have different information we assume the code needs
- an executable stack. */
- enum execstack execstack = execstack_true;
-
- /* Prerequisites. */
- assert (fileinfo->elf != NULL);
-
- /* Allocate memory for the sections. */
- if (unlikely (elf_getshnum (fileinfo->elf, &scncnt) < 0))
- error (EXIT_FAILURE, 0,
- gettext ("cannot determine number of sections: %s"),
- elf_errmsg (-1));
-
- fileinfo->scninfo = (struct scninfo *)
- obstack_calloc (&ld_state.smem, scncnt * sizeof (struct scninfo));
-
- /* Read all the section headers and find the symbol table. Note
- that we don't skip the section with index zero. Even though the
- section itself is always empty the section header contains
- informaton for the case when the section index for the section
- header string table is too large to fit in the ELF header. */
- for (cnt = 0; cnt < scncnt; ++cnt)
- {
- /* Store the handle for the section. */
- fileinfo->scninfo[cnt].scn = elf_getscn (fileinfo->elf, cnt);
-
- /* Get the ELF section header and data. */
- XElf_Shdr *shdr;
-#if NATIVE_ELF != 0
- if (fileinfo->scninfo[cnt].shdr == NULL)
-#else
- if (fileinfo->scninfo[cnt].shdr.sh_type == SHT_NULL)
-#endif
- {
-#if NATIVE_ELF != 0
- shdr = xelf_getshdr (fileinfo->scninfo[cnt].scn,
- fileinfo->scninfo[cnt].shdr);
-#else
- xelf_getshdr_copy (fileinfo->scninfo[cnt].scn, shdr,
- fileinfo->scninfo[cnt].shdr);
-#endif
- if (shdr == NULL)
- {
- /* This should never happen. */
- fprintf (stderr, gettext ("%s: invalid ELF file (%s:%d)\n"),
- fileinfo->rfname, __FILE__, __LINE__);
- return 1;
- }
- }
- else
- shdr = &SCNINFO_SHDR (fileinfo->scninfo[cnt].shdr);
-
- Elf_Data *data = elf_getdata (fileinfo->scninfo[cnt].scn, NULL);
-
- /* Check whether this section is marked as merge-able. */
- has_merge_sections |= (shdr->sh_flags & SHF_MERGE) != 0;
- has_tls_symbols |= (shdr->sh_flags & SHF_TLS) != 0;
-
- /* Get the ELF section header and data. */
- /* Make the file structure available. */
- fileinfo->scninfo[cnt].fileinfo = fileinfo;
-
- if (unlikely (shdr->sh_type == SHT_SYMTAB)
- || unlikely (shdr->sh_type == SHT_DYNSYM))
- {
- if (shdr->sh_type == SHT_SYMTAB)
- {
- assert (fileinfo->symtabdata == NULL);
- fileinfo->symtabdata = data;
- fileinfo->nsymtab = shdr->sh_size / shdr->sh_entsize;
- fileinfo->nlocalsymbols = shdr->sh_info;
- fileinfo->symstridx = shdr->sh_link;
- }
- else
- {
- assert (fileinfo->dynsymtabdata == NULL);
- fileinfo->dynsymtabdata = data;
- fileinfo->ndynsymtab = shdr->sh_size / shdr->sh_entsize;
- fileinfo->dynsymstridx = shdr->sh_link;
- }
-
- /* If we are looking for the normal symbol table we just
- found it. */
- if (secttype == shdr->sh_type)
- {
- assert (symtabdata == NULL);
- symtabdata = data;
- symstridx = shdr->sh_link;
- nsymbols = shdr->sh_size / shdr->sh_entsize;
- nlocalsymbols = shdr->sh_info;
- }
- }
- else if (unlikely (shdr->sh_type == SHT_SYMTAB_SHNDX))
- {
- assert (xndxdata == NULL);
- fileinfo->xndxdata = xndxdata = data;
- }
- else if (unlikely (shdr->sh_type == SHT_GNU_versym))
- {
- assert (versymdata == 0);
- fileinfo->versymdata = versymdata = data;
- }
- else if (unlikely (shdr->sh_type == SHT_GNU_verdef))
- {
- size_t nversions;
-
- assert (verdefdata == 0);
- fileinfo->verdefdata = verdefdata = data;
-
- /* Allocate the arrays flagging the use of the version and
- to track of allocated names. */
- fileinfo->nverdef = nversions = shdr->sh_info;
- /* We have NVERSIONS + 1 because the indeces used to access the
- sectino start with one; zero represents local binding. */
- fileinfo->verdefused = (XElf_Versym *)
- obstack_calloc (&ld_state.smem,
- sizeof (XElf_Versym) * (nversions + 1));
- fileinfo->verdefent = (struct Ebl_Strent **)
- obstack_alloc (&ld_state.smem,
- sizeof (struct Ebl_Strent *) * (nversions + 1));
- }
- else if (unlikely (shdr->sh_type == SHT_GNU_verneed))
- {
- assert (verneeddata == 0);
- fileinfo->verneeddata = verneeddata = data;
- }
- else if (unlikely (shdr->sh_type == SHT_DYNAMIC))
- {
- assert (fileinfo->dynscn == NULL);
- fileinfo->dynscn = fileinfo->scninfo[cnt].scn;
- }
- else if (unlikely (shdr->sh_type == SHT_GROUP))
- {
- Elf_Scn *symscn;
- XElf_Shdr_vardef (symshdr);
- Elf_Data *symdata;
-
- if (FILEINFO_EHDR (fileinfo->ehdr).e_type != ET_REL)
- error (EXIT_FAILURE, 0, gettext ("\
-%s: only files of type ET_REL might contain section groups"),
- fileinfo->fname);
-
- fileinfo->scninfo[cnt].next = fileinfo->groups;
- fileinfo->scninfo[cnt].grpid = cnt;
- fileinfo->groups = &fileinfo->scninfo[cnt];
-
- /* Determine the signature. We create a symbol record for
- it. Only the name element is important. */
- fileinfo->scninfo[cnt].symbols = (struct symbol *)
- obstack_calloc (&ld_state.smem, sizeof (struct symbol));
-
- symscn = elf_getscn (fileinfo->elf, shdr->sh_link);
- xelf_getshdr (symscn, symshdr);
- symdata = elf_getdata (symscn, NULL);
-
- if (symshdr != NULL)
- {
- XElf_Sym_vardef (sym);
-
- /* We don't need the section index and therefore we don't
- have to use 'xelf_getsymshndx'. */
- xelf_getsym (symdata, shdr->sh_info, sym);
- if (sym != NULL)
- {
- struct symbol *symbol = fileinfo->scninfo[cnt].symbols;
-
-#ifndef NO_HACKS
- if (XELF_ST_TYPE (sym->st_info) == STT_SECTION)
- {
- XElf_Shdr_vardef (buggyshdr);
- xelf_getshdr (elf_getscn (fileinfo->elf, sym->st_shndx),
- buggyshdr);
-
- symbol->name = elf_strptr (fileinfo->elf,
- FILEINFO_EHDR (fileinfo->ehdr).e_shstrndx,
- buggyshdr->sh_name);
- symbol->symidx = -1;
- }
- else
-#endif
- {
- symbol->name = elf_strptr (fileinfo->elf,
- symshdr->sh_link,
- sym->st_name);
- symbol->symidx = shdr->sh_info;
- }
- symbol->file = fileinfo;
- }
- }
- if (fileinfo->scninfo[cnt].symbols->name == NULL)
- error (EXIT_FAILURE, 0, gettext ("\
-%s: cannot determine signature of section group [%2zd] '%s': %s"),
- fileinfo->fname,
- elf_ndxscn (fileinfo->scninfo[cnt].scn),
- elf_strptr (fileinfo->elf, fileinfo->shstrndx,
- shdr->sh_name),
- elf_errmsg (-1));
-
-
- /* For all the sections which are part of this group, add
- the reference. */
- if (data == NULL)
- error (EXIT_FAILURE, 0, gettext ("\
-%s: cannot get content of section group [%2zd] '%s': %s'"),
- fileinfo->fname, elf_ndxscn (fileinfo->scninfo[cnt].scn),
- elf_strptr (fileinfo->elf, fileinfo->shstrndx,
- shdr->sh_name),
- elf_errmsg (-1));
-
- Elf32_Word *grpdata = (Elf32_Word *) data->d_buf;
- if (grpdata[0] & GRP_COMDAT)
- fileinfo->scninfo[cnt].comdat_group = true;
- for (size_t inner = 1; inner < data->d_size / sizeof (Elf32_Word);
- ++inner)
- {
- if (grpdata[inner] >= scncnt)
- error (EXIT_FAILURE, 0, gettext ("\
-%s: group member %zu of section group [%2zd] '%s' has too high index: %" PRIu32),
- fileinfo->fname,
- inner, elf_ndxscn (fileinfo->scninfo[cnt].scn),
- elf_strptr (fileinfo->elf, fileinfo->shstrndx,
- shdr->sh_name),
- grpdata[inner]);
-
- fileinfo->scninfo[grpdata[inner]].grpid = cnt;
- }
-
- /* The 'used' flag is used to indicate when the information
- in the section group is used to mark all other sections
- as used. So it must not be true yet. */
- assert (fileinfo->scninfo[cnt].used == false);
- }
- else if (! SECTION_TYPE_P (&ld_state, shdr->sh_type)
- && unlikely ((shdr->sh_flags & SHF_OS_NONCONFORMING) != 0))
- /* According to the gABI it is a fatal error if the file contains
- a section with unknown type and the SHF_OS_NONCONFORMING flag
- set. */
- error (EXIT_FAILURE, 0,
- gettext ("%s: section '%s' has unknown type: %d"),
- fileinfo->fname,
- elf_strptr (fileinfo->elf, fileinfo->shstrndx,
- shdr->sh_name),
- (int) shdr->sh_type);
- /* We don't have to add a few section types here. These will be
- generated from scratch for the new output file. We also
- don't add the sections of DSOs here since these sections are
- not used in the resulting object file. */
- else if (likely (fileinfo->file_type == relocatable_file_type)
- && likely (cnt > 0)
- && likely (shdr->sh_type == SHT_PROGBITS
- || shdr->sh_type == SHT_RELA
- || shdr->sh_type == SHT_REL
- || shdr->sh_type == SHT_NOTE
- || shdr->sh_type == SHT_NOBITS
- || shdr->sh_type == SHT_INIT_ARRAY
- || shdr->sh_type == SHT_FINI_ARRAY
- || shdr->sh_type == SHT_PREINIT_ARRAY))
- {
- /* Check whether the section needs to be executable. */
- if (shdr->sh_type == SHT_PROGBITS
- && (shdr->sh_flags & SHF_EXECINSTR) == 0
- && strcmp (elf_strptr (fileinfo->elf, fileinfo->shstrndx,
- shdr->sh_name),
- ".note.GNU-stack") == 0)
- execstack = execstack_false;
-
- add_section (fileinfo, &fileinfo->scninfo[cnt]);
- }
- }
-
- /* Now we know more about the requirements for an executable stack
- of the result. */
- if (fileinfo->file_type == relocatable_file_type
- && execstack == execstack_true
- && ld_state.execstack != execstack_false_force)
- ld_state.execstack = execstack_true;
-
- /* Handle the symbols. Record defined and undefined symbols in the
- hash table. In theory there can be a file without any symbol
- table. */
- if (likely (symtabdata != NULL))
- {
- /* In case this file contains merge-able sections we have to
- locate the symbols which are in these sections. */
- fileinfo->has_merge_sections = has_merge_sections;
- if (likely (has_merge_sections || has_tls_symbols))
- {
- fileinfo->symref = (struct symbol **)
- obstack_calloc (&ld_state.smem,
- nsymbols * sizeof (struct symbol *));
-
- /* Only handle the local symbols here. */
- for (cnt = 0; cnt < nlocalsymbols; ++cnt)
- {
- Elf32_Word shndx;
- XElf_Sym_vardef (sym);
-
- xelf_getsymshndx (symtabdata, xndxdata, cnt, sym, shndx);
- if (sym == NULL)
- {
- /* This should never happen. */
- fprintf (stderr, gettext ("%s: invalid ELF file (%s:%d)\n"),
- fileinfo->rfname, __FILE__, __LINE__);
- return 1;
- }
-
- if (likely (shndx != SHN_XINDEX))
- shndx = sym->st_shndx;
- else if (unlikely (shndx == 0))
- {
- fprintf (stderr, gettext ("%s: invalid ELF file (%s:%d)\n"),
- fileinfo->rfname, __FILE__, __LINE__);
- return 1;
- }
-
- if (XELF_ST_TYPE (sym->st_info) != STT_SECTION
- && (shndx < SHN_LORESERVE || shndx > SHN_HIRESERVE)
- && ((SCNINFO_SHDR (fileinfo->scninfo[shndx].shdr).sh_flags
- & SHF_MERGE)
- || XELF_ST_TYPE (sym->st_info) == STT_TLS))
- {
- /* Create a symbol record for this symbol and add it
- to the list for this section. */
- struct symbol *newp;
-
- newp = (struct symbol *)
- obstack_calloc (&ld_state.smem, sizeof (struct symbol));
-
- newp->symidx = cnt;
- newp->scndx = shndx;
- newp->file = fileinfo;
- newp->defined = 1;
- fileinfo->symref[cnt] = newp;
-
- if (fileinfo->scninfo[shndx].symbols == NULL)
- fileinfo->scninfo[shndx].symbols = newp->next_in_scn
- = newp;
- else
- {
- newp->next_in_scn
- = fileinfo->scninfo[shndx].symbols->next_in_scn;
- fileinfo->scninfo[shndx].symbols
- = fileinfo->scninfo[shndx].symbols->next_in_scn = newp;
- }
- }
- }
- }
- else
- /* Create array with pointers to the symbol definitions. Note
- that we only allocate memory for the non-local symbols
- since we have no merge-able sections. But we store the
- pointer as if it was for the whole symbol table. This
- saves some memory. */
- fileinfo->symref = (struct symbol **)
- obstack_calloc (&ld_state.smem, ((nsymbols - nlocalsymbols)
- * sizeof (struct symbol *)))
- - nlocalsymbols;
-
- /* Don't handle local symbols here. It's either not necessary
- at all or has already happened. */
- for (cnt = nlocalsymbols; cnt < nsymbols; ++cnt)
- {
- XElf_Sym_vardef (sym);
- Elf32_Word shndx;
- xelf_getsymshndx (symtabdata, xndxdata, cnt, sym, shndx);
-
- if (sym == NULL)
- {
- /* This should never happen. */
- fprintf (stderr, gettext ("%s: invalid ELF file (%s:%d)\n"),
- fileinfo->rfname, __FILE__, __LINE__);
- return 1;
- }
-
- if (likely (shndx != SHN_XINDEX))
- shndx = sym->st_shndx;
- else if (unlikely (shndx == 0))
- {
- fprintf (stderr, gettext ("%s: invalid ELF file (%s:%d)\n"),
- fileinfo->rfname, __FILE__, __LINE__);
- return 1;
- }
-
- /* We ignore ABS symbols from DSOs. */
- // XXX Is this correct?
- if (unlikely (shndx == SHN_ABS) && secttype == SHT_DYNSYM)
- continue;
-
- if ((shndx < SHN_LORESERVE || shndx > SHN_HIRESERVE)
- && fileinfo->scninfo[shndx].unused_comdat)
- /* The symbol is not used. */
- continue;
-
- /* If the DSO uses symbol versions determine whether this is
- the default version. Otherwise we'll ignore the symbol. */
- if (versymdata != NULL)
- {
- XElf_Versym versym;
-
- if (xelf_getversym_copy (versymdata, cnt, versym) == NULL)
- /* XXX Should we handle faulty input files more graceful? */
- assert (! "xelf_getversym failed");
-
- if ((versym & 0x8000) != 0)
- /* Ignore the symbol, it's not the default version. */
- continue;
- }
-
- /* See whether we know anything about this symbol. */
- struct symbol search;
- search.name = elf_strptr (fileinfo->elf, symstridx, sym->st_name);
- unsigned long int hval = elf_hash (search.name);
-
- /* We ignore the symbols the linker generates. This are
- _GLOBAL_OFFSET_TABLE_, _DYNAMIC. */
- // XXX This loop is hot and the following tests hardly ever match.
- // XXX Maybe move the tests somewhere they are executed less often.
- if (((unlikely (hval == 165832675ul)
- && strcmp (search.name, "_DYNAMIC") == 0)
- || (unlikely (hval == 102264335ul)
- && strcmp (search.name, "_GLOBAL_OFFSET_TABLE_") == 0))
- && sym->st_shndx != SHN_UNDEF
- /* If somebody defines such a variable in a relocatable we
- don't ignore it. Let the user get what s/he deserves. */
- && fileinfo->file_type != relocatable_file_type)
- continue;
-
- struct symbol *oldp = ld_symbol_tab_find (&ld_state.symbol_tab,
- hval, &search);
- struct symbol *newp;
- if (likely (oldp == NULL))
- {
- /* No symbol of this name known. Add it. */
- newp = (struct symbol *) obstack_alloc (&ld_state.smem,
- sizeof (*newp));
- newp->name = search.name;
- newp->size = sym->st_size;
- newp->type = XELF_ST_TYPE (sym->st_info);
- newp->symidx = cnt;
- newp->outsymidx = 0;
- newp->outdynsymidx = 0;
- newp->scndx = shndx;
- newp->file = fileinfo;
- newp->defined = newp->scndx != SHN_UNDEF;
- newp->common = newp->scndx == SHN_COMMON;
- newp->weak = XELF_ST_BIND (sym->st_info) == STB_WEAK;
- newp->added = 0;
- newp->merged = 0;
- newp->local = 0;
- newp->hidden = 0;
- newp->need_copy = 0;
- newp->on_dsolist = 0;
- newp->in_dso = secttype == SHT_DYNSYM;
- newp->next_in_scn = NULL;
-#ifndef NDEBUG
- newp->next = NULL;
- newp->previous = NULL;
-#endif
-
- if (newp->scndx == SHN_UNDEF)
- {
- CDBL_LIST_ADD_REAR (ld_state.unresolved, newp);
- ++ld_state.nunresolved;
- if (! newp->weak)
- ++ld_state.nunresolved_nonweak;
- }
- else if (newp->scndx == SHN_COMMON)
- {
- /* Store the alignment requirement. */
- newp->merge.value = sym->st_value;
-
- CDBL_LIST_ADD_REAR (ld_state.common_syms, newp);
- }
-
- /* Insert the new symbol. */
- if (unlikely (ld_symbol_tab_insert (&ld_state.symbol_tab,
- hval, newp) != 0))
- /* This cannot happen. */
- abort ();
-
- fileinfo->symref[cnt] = newp;
-
- /* We have a few special symbols to recognize. The symbols
- _init and _fini are the initialization and finalization
- functions respectively. They have to be made known in
- the dynamic section and therefore we have to find out
- now whether these functions exist or not. */
- if (hval == 6685956 && strcmp (newp->name, "_init") == 0)
- ld_state.init_symbol = newp;
- else if (hval == 6672457 && strcmp (newp->name, "_fini") == 0)
- ld_state.fini_symbol = newp;
- }
- else if (unlikely (check_definition (sym, shndx, cnt, fileinfo, oldp)
- != 0))
- /* A fatal error (multiple definition of a symbol)
- occurred, no need to continue. */
- return 1;
- else
- /* Use the previously allocated symbol record. It has
- been updated in check_definition(), if necessary. */
- newp = fileinfo->symref[cnt] = oldp;
-
- /* Mark the section the symbol we need comes from as used. */
- if (shndx != SHN_UNDEF
- && (shndx < SHN_LORESERVE || shndx > SHN_HIRESERVE))
- {
- struct scninfo *ignore;
-
-#ifndef NDEBUG
- size_t shnum;
- assert (elf_getshnum (fileinfo->elf, &shnum) == 0);
- assert (shndx < shnum);
-#endif
-
- /* Mark section (and all dependencies) as used. */
- mark_section_used (&fileinfo->scninfo[shndx], shndx, &ignore);
-
- /* Check whether the section is merge-able. In this case we
- have to record the symbol. */
- if (SCNINFO_SHDR (fileinfo->scninfo[shndx].shdr).sh_flags
- & SHF_MERGE)
- {
- if (fileinfo->scninfo[shndx].symbols == NULL)
- fileinfo->scninfo[shndx].symbols = newp->next_in_scn
- = newp;
- else
- {
- newp->next_in_scn
- = fileinfo->scninfo[shndx].symbols->next_in_scn;
- fileinfo->scninfo[shndx].symbols
- = fileinfo->scninfo[shndx].symbols->next_in_scn = newp;
- }
- }
- }
- }
-
- /* This file is used. */
- if (likely (fileinfo->file_type == relocatable_file_type))
- {
- if (unlikely (ld_state.relfiles == NULL))
- ld_state.relfiles = fileinfo->next = fileinfo;
- else
- {
- fileinfo->next = ld_state.relfiles->next;
- ld_state.relfiles = ld_state.relfiles->next = fileinfo;
- }
-
- /* Update some summary information in the state structure. */
- ld_state.nsymtab += fileinfo->nsymtab;
- ld_state.nlocalsymbols += fileinfo->nlocalsymbols;
- }
- else if (likely (fileinfo->file_type == dso_file_type))
- {
- CSNGL_LIST_ADD_REAR (ld_state.dsofiles, fileinfo);
- ++ld_state.ndsofiles;
-
- if (fileinfo->lazyload)
- /* We have to create another dynamic section entry for the
- DT_POSFLAG_1 entry.
-
- XXX Once more functionality than the lazyloading flag
- are suppported the test must be extended. */
- ++ld_state.ndsofiles;
- }
- }
-
- return 0;
-}
-
-
-int
-ld_handle_filename_list (struct filename_list *fnames)
-{
- struct filename_list *runp;
- int res = 0;
-
- for (runp = fnames; runp != NULL; runp = runp->next)
- {
- struct usedfiles *curp;
-
- /* Create a record for the new file. */
- curp = runp->real = ld_new_inputfile (runp->name, relocatable_file_type);
-
- /* Set flags for group handling. */
- curp->group_start = runp->group_start;
- curp->group_end = runp->group_end;
-
- /* Set as-needed flag from the file, not the command line. */
- curp->as_needed = runp->as_needed;
-
- /* Read the file and everything else which comes up, including
- handling groups. */
- do
- res |= FILE_PROCESS (-1, curp, &ld_state, &curp);
- while (curp != NULL);
- }
-
- /* Free the list. */
- while (fnames != NULL)
- {
- runp = fnames;
- fnames = fnames->next;
- free (runp);
- }
-
- return res;
-}
-
-
-/* Handle opening of the given file with ELF descriptor. */
-static int
-open_elf (struct usedfiles *fileinfo, Elf *elf)
-{
- int res = 0;
-
- if (elf == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("cannot get descriptor for ELF file (%s:%d): %s\n"),
- __FILE__, __LINE__, elf_errmsg (-1));
-
- if (unlikely (elf_kind (elf) == ELF_K_NONE))
- {
- struct filename_list *fnames;
-
- /* We don't have to look at this file again. */
- fileinfo->status = closed;
-
- /* Let's see whether this is a linker script. */
- if (fileinfo->fd != -1)
- /* Create a stream from the file handle we know. */
- ldin = fdopen (fileinfo->fd, "r");
- else
- {
- /* Get the memory for the archive member. */
- char *content;
- size_t contentsize;
-
- /* Get the content of the file. */
- content = elf_rawfile (elf, &contentsize);
- if (content == NULL)
- {
- fprintf (stderr, gettext ("%s: invalid ELF file (%s:%d)\n"),
- fileinfo->rfname, __FILE__, __LINE__);
- return 1;
- }
-
- /* The content of the file is available in memory. Read the
- memory region as a stream. */
- ldin = fmemopen (content, contentsize, "r");
- }
-
- /* No need for locking. */
- __fsetlocking (ldin, FSETLOCKING_BYCALLER);
-
- if (ldin == NULL)
- error (EXIT_FAILURE, errno, gettext ("cannot open '%s'"),
- fileinfo->rfname);
-
- /* Parse the file. If it is a linker script no problems will be
- reported. */
- ld_state.srcfiles = NULL;
- ldlineno = 1;
- ld_scan_version_script = 0;
- ldin_fname = fileinfo->rfname;
- res = ldparse ();
-
- fclose (ldin);
- if (fileinfo->fd != -1 && !fileinfo->fd_passed)
- {
- /* We won't need the file descriptor again. */
- close (fileinfo->fd);
- fileinfo->fd = -1;
- }
-
- elf_end (elf);
-
- if (unlikely (res != 0))
- /* Something went wrong during parsing. */
- return 1;
-
- /* This is no ELF file. */
- fileinfo->elf = NULL;
-
- /* Now we have to handle eventual INPUT and GROUP statements in
- the script. Read the files mentioned. */
- fnames = ld_state.srcfiles;
- if (fnames != NULL)
- {
- struct filename_list *oldp;
-
- /* Convert the list into a normal single-linked list. */
- oldp = fnames;
- fnames = fnames->next;
- oldp->next = NULL;
-
- /* Remove the list from the state structure. */
- ld_state.srcfiles = NULL;
-
- if (unlikely (ld_handle_filename_list (fnames) != 0))
- return 1;
- }
-
- return 0;
- }
-
- /* Store the file info. */
- fileinfo->elf = elf;
-
- /* The file is ready for action. */
- fileinfo->status = opened;
-
- return 0;
-}
-
-
-static int
-add_whole_archive (struct usedfiles *fileinfo)
-{
- Elf *arelf;
- Elf_Cmd cmd = ELF_C_READ_MMAP_PRIVATE;
- int res = 0;
-
- while ((arelf = elf_begin (fileinfo->fd, cmd, fileinfo->elf)) != NULL)
- {
- Elf_Arhdr *arhdr = elf_getarhdr (arelf);
- struct usedfiles *newp;
-
- if (arhdr == NULL)
- abort ();
-
- /* Just to be sure; since these are no files in the archive
- these names should never be returned. */
- assert (strcmp (arhdr->ar_name, "/") != 0);
- assert (strcmp (arhdr->ar_name, "//") != 0);
-
- newp = ld_new_inputfile (arhdr->ar_name, relocatable_file_type);
- newp->archive_file = fileinfo;
-
- if (unlikely (ld_state.trace_files))
- print_file_name (stdout, newp, 1, 1);
-
- /* This shows that this file is contained in an archive. */
- newp->fd = -1;
- /* Store the ELF descriptor. */
- newp->elf = arelf;
- /* Show that we are open for business. */
- newp->status = opened;
-
- /* Proces the file, add all the symbols etc. */
- res = file_process2 (newp);
- if (unlikely (res != 0))
- break;
-
- /* Advance to the next archive element. */
- cmd = elf_next (arelf);
- }
-
- return res;
-}
-
-
-static int
-extract_from_archive (struct usedfiles *fileinfo)
-{
- static int archive_seq;
- int res = 0;
-
- if (fileinfo->archive_seq == 0)
- /* This is an archive we are not using completely. Give it a
- unique number. */
- fileinfo->archive_seq = ++archive_seq;
-
- /* If there are no unresolved symbols don't do anything. */
- assert (ld_state.extract_rule == defaultextract
- || ld_state.extract_rule == weakextract);
- if ((likely (ld_state.extract_rule == defaultextract)
- ? ld_state.nunresolved_nonweak : ld_state.nunresolved) == 0)
- return 0;
-
- Elf_Arsym *syms;
- size_t nsyms;
-
- /* Get all the symbols. */
- syms = elf_getarsym (fileinfo->elf, &nsyms);
- if (syms == NULL)
- {
- cannot_read_archive:
- error (0, 0, gettext ("cannot read archive `%s': %s"),
- fileinfo->rfname, elf_errmsg (-1));
-
- /* We cannot use this archive anymore. */
- fileinfo->status = closed;
-
- return 1;
- }
-
- /* Now add all the symbols to the hash table. Note that there
- can potentially be duplicate definitions. We'll always use
- the first definition. */
- // XXX Is this a compatible behavior?
- bool any_used;
- do
- {
- any_used = false;
-
- size_t cnt;
- for (cnt = 0; cnt < nsyms; ++cnt)
- {
- struct symbol search = { .name = syms[cnt].as_name };
- struct symbol *sym = ld_symbol_tab_find (&ld_state.symbol_tab,
- syms[cnt].as_hash, &search);
- if (sym != NULL && ! sym->defined)
- {
- /* The symbol is referenced and not defined. */
- Elf *arelf;
- Elf_Arhdr *arhdr;
- struct usedfiles *newp;
-
- /* Find the archive member for this symbol. */
- if (unlikely (elf_rand (fileinfo->elf, syms[cnt].as_off)
- != syms[cnt].as_off))
- goto cannot_read_archive;
-
- /* Note: no test of a failing 'elf_begin' call. That's fine
- since 'elf'getarhdr' will report the problem. */
- arelf = elf_begin (fileinfo->fd, ELF_C_READ_MMAP_PRIVATE,
- fileinfo->elf);
- arhdr = elf_getarhdr (arelf);
- if (arhdr == NULL)
- goto cannot_read_archive;
-
- /* We have all the information and an ELF handle for the
- archive member. Create the normal data structure for
- a file now. */
- newp = ld_new_inputfile (obstack_strdup (&ld_state.smem,
- arhdr->ar_name),
- relocatable_file_type);
- newp->archive_file = fileinfo;
-
- if (unlikely (ld_state.trace_files))
- print_file_name (stdout, newp, 1, 1);
-
- /* This shows that this file is contained in an archive. */
- newp->fd = -1;
- /* Store the ELF descriptor. */
- newp->elf = arelf;
- /* Show that we are open for business. */
- newp->status = in_archive;
-
- /* Now read the file and add all the symbols. */
- res = file_process2 (newp);
- if (unlikely (res != 0))
- return res;
-
- any_used = true;
- }
- }
-
- if (any_used)
- {
- /* This is an archive therefore it must have a number. */
- assert (fileinfo->archive_seq != 0);
- ld_state.last_archive_used = fileinfo->archive_seq;
- }
- }
- while (any_used);
-
- return res;
-}
-
-
-static int
-file_process2 (struct usedfiles *fileinfo)
-{
- int res;
-
- if (likely (elf_kind (fileinfo->elf) == ELF_K_ELF))
- {
- /* The first time we get here we read the ELF header. */
-#if NATIVE_ELF != 0
- if (likely (fileinfo->ehdr == NULL))
-#else
- if (likely (FILEINFO_EHDR (fileinfo->ehdr).e_type == ET_NONE))
-#endif
- {
- XElf_Ehdr *ehdr;
-#if NATIVE_ELF != 0
- ehdr = xelf_getehdr (fileinfo->elf, fileinfo->ehdr);
-#else
- xelf_getehdr_copy (fileinfo->elf, ehdr, fileinfo->ehdr);
-#endif
- if (ehdr == NULL)
- {
- fprintf (stderr, gettext ("%s: invalid ELF file (%s:%d)\n"),
- fileinfo->rfname, __FILE__, __LINE__);
- fileinfo->status = closed;
- return 1;
- }
-
- if (FILEINFO_EHDR (fileinfo->ehdr).e_type != ET_REL
- && unlikely (FILEINFO_EHDR (fileinfo->ehdr).e_type != ET_DYN))
- /* XXX Add ebl* function to query types which are allowed
- to link in. */
- {
- char buf[64];
-
- print_file_name (stderr, fileinfo, 1, 0);
- fprintf (stderr,
- gettext ("file of type %s cannot be linked in\n"),
- ebl_object_type_name (ld_state.ebl,
- FILEINFO_EHDR (fileinfo->ehdr).e_type,
- buf, sizeof (buf)));
- fileinfo->status = closed;
- return 1;
- }
-
- /* Make sure the file type matches the backend. */
- if (FILEINFO_EHDR (fileinfo->ehdr).e_machine
- != ebl_get_elfmachine (ld_state.ebl))
- {
- fprintf (stderr, gettext ("\
-%s: input file incompatible with ELF machine type %s\n"),
- fileinfo->rfname,
- ebl_backend_name (ld_state.ebl));
- fileinfo->status = closed;
- return 1;
- }
-
- /* Determine the section header string table section index. */
- if (unlikely (elf_getshstrndx (fileinfo->elf, &fileinfo->shstrndx)
- < 0))
- {
- fprintf (stderr, gettext ("\
-%s: cannot get section header string table index: %s\n"),
- fileinfo->rfname, elf_errmsg (-1));
- fileinfo->status = closed;
- return 1;
- }
- }
-
- /* Now handle the different types of files. */
- if (FILEINFO_EHDR (fileinfo->ehdr).e_type == ET_REL)
- {
- /* Add all the symbol. Relocatable files have symbol
- tables. */
- res = add_relocatable_file (fileinfo, SHT_SYMTAB);
- }
- else
- {
- bool has_l_name = fileinfo->file_type == archive_file_type;
-
- assert (FILEINFO_EHDR (fileinfo->ehdr).e_type == ET_DYN);
-
- /* If the file is a DT_NEEDED dependency then the type is
- already correctly specified. */
- if (fileinfo->file_type != dso_needed_file_type)
- fileinfo->file_type = dso_file_type;
-
- /* We cannot use DSOs when generating relocatable objects. */
- if (ld_state.file_type == relocatable_file_type)
- {
- error (0, 0, gettext ("\
-cannot use DSO '%s' when generating relocatable object file"),
- fileinfo->fname);
- return 1;
- }
-
- /* Add all the symbols. For DSOs we are looking at the
- dynamic symbol table. */
- res = add_relocatable_file (fileinfo, SHT_DYNSYM);
-
- /* We always have to have a dynamic section. */
- assert (fileinfo->dynscn != NULL);
-
- /* We have to remember the dependencies for this object. It
- is necessary to look them up. */
- XElf_Shdr_vardef (dynshdr);
- xelf_getshdr (fileinfo->dynscn, dynshdr);
-
- Elf_Data *dyndata = elf_getdata (fileinfo->dynscn, NULL);
- /* XXX Should we flag the failure to get the dynamic section? */
- if (dynshdr != NULL)
- {
- int cnt = dynshdr->sh_size / dynshdr->sh_entsize;
- XElf_Dyn_vardef (dyn);
-
- while (--cnt >= 0)
- {
- xelf_getdyn (dyndata, cnt, dyn);
- if (dyn != NULL)
- {
- if(dyn->d_tag == DT_NEEDED)
- {
- struct usedfiles *newp;
-
- newp = ld_new_inputfile (elf_strptr (fileinfo->elf,
- dynshdr->sh_link,
- dyn->d_un.d_val),
- dso_needed_file_type);
-
- /* Enqueue the newly found dependencies. */
- // XXX Check that there not already a file with the
- // same name.
- CSNGL_LIST_ADD_REAR (ld_state.needed, newp);
- }
- else if (dyn->d_tag == DT_SONAME)
- {
- /* We use the DT_SONAME (this is what's there
- for). */
- fileinfo->soname = elf_strptr (fileinfo->elf,
- dynshdr->sh_link,
- dyn->d_un.d_val);
- has_l_name = false;
- }
- }
- }
- }
-
- /* Construct the file name if the DSO has no SONAME and the
- file name comes from a -lXX parameter on the comment
- line. */
- if (unlikely (has_l_name))
- {
- /* The FNAME is the parameter the user specified on the
- command line. We prepend "lib" and append ".so". */
- size_t len = strlen (fileinfo->fname) + 7;
- char *newp;
-
- newp = (char *) obstack_alloc (&ld_state.smem, len);
- strcpy (stpcpy (stpcpy (newp, "lib"), fileinfo->fname), ".so");
-
- fileinfo->soname = newp;
- }
- }
- }
- else if (likely (elf_kind (fileinfo->elf) == ELF_K_AR))
- {
- if (unlikely (ld_state.extract_rule == allextract))
- /* Which this option enabled we have to add all the object
- files in the archive. */
- res = add_whole_archive (fileinfo);
- else if (ld_state.file_type == relocatable_file_type)
- {
- /* When generating a relocatable object we don't find files
- in archives. */
- if (verbose)
- error (0, 0, gettext ("input file '%s' ignored"), fileinfo->fname);
-
- res = 0;
- }
- else
- {
- if (ld_state.group_start_requested
- && ld_state.group_start_archive == NULL)
- ld_state.group_start_archive = fileinfo;
-
- if (ld_state.archives == NULL)
- ld_state.archives = fileinfo;
-
- if (ld_state.tailarchives != NULL)
- ld_state.tailarchives->next = fileinfo;
- ld_state.tailarchives = fileinfo;
-
- /* Extract only the members from the archive which are
- currently referenced by unresolved symbols. */
- res = extract_from_archive (fileinfo);
- }
- }
- else
- /* This should never happen, we know about no other types. */
- abort ();
-
- return res;
-}
-
-
-/* Process a given file. The first parameter is a file descriptor for
- the file which can be -1 to indicate the file has not yet been
- found. The second parameter describes the file to be opened, the
- last one is the state of the linker which among other information
- contain the paths we look at. */
-static int
-ld_generic_file_process (int fd, struct usedfiles *fileinfo,
- struct ld_state *statep, struct usedfiles **nextp)
-{
- int res = 0;
-
- /* By default we go to the next file in the list. */
- *nextp = fileinfo->next;
-
- /* Set the flag to signal we are looking for a group start. */
- if (unlikely (fileinfo->group_start))
- {
- ld_state.group_start_requested = true;
- fileinfo->group_start = false;
- }
-
- /* If the file isn't open yet, open it now. */
- if (likely (fileinfo->status == not_opened))
- {
- bool fd_passed = true;
-
- if (likely (fd == -1))
- {
- /* Find the file ourselves. */
- int err = open_along_path (fileinfo);
- if (unlikely (err != 0))
- /* We allow libraries and DSOs to be named more than once.
- Don't report an error to the caller. */
- return err == EAGAIN ? 0 : err;
-
- fd_passed = false;
- }
- else
- fileinfo->fd = fd;
-
- /* Remember where we got the descriptor from. */
- fileinfo->fd_passed = fd_passed;
-
- /* We found the file. Now test whether it is a file type we can
- handle.
-
- XXX Do we need to have the ability to start from a given
- position in the search path again to look for another file if
- the one found has not the right type? */
- res = open_elf (fileinfo, elf_begin (fileinfo->fd,
- is_dso_p (fileinfo->fd)
- ? ELF_C_READ_MMAP
- : ELF_C_READ_MMAP_PRIVATE, NULL));
- if (unlikely (res != 0))
- return res;
- }
-
- /* Now that we have opened the file start processing it. */
- if (likely (fileinfo->status != closed))
- res = file_process2 (fileinfo);
-
- /* Determine which file to look at next. */
- if (unlikely (fileinfo->group_backref != NULL))
- {
- /* We only go back if an archive other than the one we would go
- back to has been used in the last round. */
- if (ld_state.last_archive_used > fileinfo->group_backref->archive_seq)
- {
- *nextp = fileinfo->group_backref;
- ld_state.last_archive_used = 0;
- }
- else
- {
- /* If we come here this means that the archives we read so
- far are not needed anymore. We can free some of the data
- now. */
- struct usedfiles *runp = ld_state.archives;
-
- do
- {
- /* We don't need the ELF descriptor anymore. Unless there
- are no files from the archive used this will not free
- the whole file but only some data structures. */
- elf_end (runp->elf);
- runp->elf = NULL;
-
- runp = runp->next;
- }
- while (runp != fileinfo->next);
-
- /* Do not do this again. */
- ld_state.archives = NULL;
-
- /* Do not move on to the next archive. */
- *nextp = fileinfo->next = NULL;
- }
- }
- else if (unlikely (fileinfo->group_end))
- {
- /* This is the end of a group. We possibly have to go back.
- Determine which file we would go back to and see whether it
- makes sense. If there has not been an archive we don't have
- to do anything. */
- if (ld_state.group_start_requested)
- {
- if (ld_state.group_start_archive != ld_state.tailarchives)
- /* The loop includes more than one archive, add the pointer. */
- {
- *nextp = ld_state.tailarchives->group_backref =
- ld_state.group_start_archive;
- ld_state.last_archive_used = 0;
- }
- else
- /* We might still have to go back to the beginning of the
- group if since the last archive other files have been
- added. But we go back exactly once. */
- if (ld_state.tailarchives != fileinfo)
- {
- *nextp = ld_state.group_start_archive;
- ld_state.last_archive_used = 0;
- }
- }
-
- /* Clear the flags. */
- ld_state.group_start_requested = false;
- ld_state.group_start_archive = NULL;
- fileinfo->group_end = false;
- }
-
- return res;
-}
-
-
-/* Library names passed to the linker as -lXX represent files named
- libXX.YY. The YY part can have different forms, depending on the
- platform. The generic set is .so and .a (in this order). */
-static const char **
-ld_generic_lib_extensions (struct ld_state *statep __attribute__ ((__unused__)))
-{
- static const char *exts[] =
- {
- ".so", ".a", NULL
- };
-
- return exts;
-}
-
-
-/* Flag unresolved symbols. */
-static int
-ld_generic_flag_unresolved (struct ld_state *statep)
-{
- int retval = 0;
-
- if (ld_state.nunresolved_nonweak > 0)
- {
- /* Go through the list and determine the unresolved symbols. */
- struct symbol *first;
- struct symbol *s;
-
- s = first = ld_state.unresolved->next;
- do
- {
- if (! s->defined && ! s->weak)
- {
- /* Two special symbol we recognize: the symbol for the
- GOT and the dynamic section. */
- if (strcmp (s->name, "_GLOBAL_OFFSET_TABLE_") == 0
- || strcmp (s->name, "_DYNAMIC") == 0)
- {
- /* We will have to fill in more information later. */
- ld_state.need_got = true;
-
- /* Remember that we found it. */
- if (s->name[1] == 'G')
- ld_state.got_symbol = s;
- else
- ld_state.dyn_symbol = s;
- }
- else if (ld_state.file_type != dso_file_type || !ld_state.nodefs)
- {
- /* XXX The error message should get better. It should use
- the debugging information if present to tell where in the
- sources the undefined reference is. */
- error (0, 0, gettext ("undefined symbol `%s' in %s"),
- s->name, s->file->fname);
-
- retval = 1;
- }
- }
-
- /* We cannot decide here what to do with undefined
- references which will come from DSO since we do not know
- what kind of symbol we expect. Only when looking at the
- relocations we can see whether we need a PLT entry or
- only a GOT entry. */
-
- s = s->next;
- }
- while (s != first);
- }
-
- return retval;
-}
-
-
-/* Close the given file. */
-static int
-ld_generic_file_close (struct usedfiles *fileinfo, struct ld_state *statep)
-{
- /* Close the ELF descriptor. */
- elf_end (fileinfo->elf);
-
- /* If we have opened the file descriptor close it. But we might
- have done this already in which case FD is -1. */
- if (!fileinfo->fd_passed && fileinfo->fd != -1)
- close (fileinfo->fd);
-
- /* We allocated the resolved file name. */
- if (fileinfo->fname != fileinfo->rfname)
- free ((char *) fileinfo->rfname);
-
- return 0;
-}
-
-
-static void
-new_generated_scn (enum scn_kind kind, const char *name, int type, int flags,
- int entsize, int align)
-{
- struct scnhead *newp;
-
- newp = (struct scnhead *) obstack_calloc (&ld_state.smem,
- sizeof (struct scnhead));
- newp->kind = kind;
- newp->name = name;
- newp->nameent = ebl_strtabadd (ld_state.shstrtab, name, 0);
- newp->type = type;
- newp->flags = flags;
- newp->entsize = entsize;
- newp->align = align;
- newp->grp_signature = NULL;
- newp->used = true;
-
- /* All is well. Create now the data for the section and insert it
- into the section table. */
- ld_section_tab_insert (&ld_state.section_tab, elf_hash (name), newp);
-}
-
-
-/* Create the sections which are generated by the linker and are not
- present in the input file. */
-static void
-ld_generic_generate_sections (struct ld_state *statep)
-{
- /* The relocation section type. */
- int rel_type = REL_TYPE (&ld_state) == DT_REL ? SHT_REL : SHT_RELA;
-
- /* When requested, every output file will have a build ID section. */
- if (statep->build_id != NULL)
- new_generated_scn (scn_dot_note_gnu_build_id, ".note.gnu.build-id",
- SHT_NOTE, SHF_ALLOC, 0, 4);
-
- /* When building dynamically linked object we have to include a
- section containing a string describing the interpreter. This
- should be at the very beginning of the file together with the
- other information the ELF loader (kernel or wherever) has to look
- at. We put it as the first section in the file.
-
- We also have to create the dynamic segment which is a special
- section the dynamic linker locates through an entry in the
- program header. */
- if (dynamically_linked_p ())
- {
- /* Use any versioning (defined or required)? */
- bool use_versioning = false;
- /* Use version requirements? */
- bool need_version = false;
-
- /* First the .interp section. */
- if (ld_state.interp != NULL || ld_state.file_type != dso_file_type)
- new_generated_scn (scn_dot_interp, ".interp", SHT_PROGBITS, SHF_ALLOC,
- 0, 1);
-
- /* Now the .dynamic section. */
- new_generated_scn (scn_dot_dynamic, ".dynamic", SHT_DYNAMIC,
- DYNAMIC_SECTION_FLAGS (&ld_state),
- xelf_fsize (ld_state.outelf, ELF_T_DYN, 1),
- xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1));
-
- /* We will need in any case the dynamic symbol table (even in
- the unlikely case that no symbol is exported or referenced
- from a DSO). */
- ld_state.need_dynsym = true;
- new_generated_scn (scn_dot_dynsym, ".dynsym", SHT_DYNSYM, SHF_ALLOC,
- xelf_fsize (ld_state.outelf, ELF_T_SYM, 1),
- xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1));
- /* It comes with a string table. */
- new_generated_scn (scn_dot_dynstr, ".dynstr", SHT_STRTAB, SHF_ALLOC,
- 0, 1);
- /* And a hashing table. */
- // XXX For Linux/Alpha we need other sizes unless they change...
- if (GENERATE_SYSV_HASH)
- new_generated_scn (scn_dot_hash, ".hash", SHT_HASH, SHF_ALLOC,
- sizeof (Elf32_Word), sizeof (Elf32_Word));
- if (GENERATE_GNU_HASH)
- new_generated_scn (scn_dot_gnu_hash, ".gnu.hash", SHT_GNU_HASH,
- SHF_ALLOC, sizeof (Elf32_Word),
- sizeof (Elf32_Word));
-
- /* Create the section associated with the PLT if necessary. */
- if (ld_state.nplt > 0)
- {
- /* Create the .plt section. */
- /* XXX We might need a function which returns the section flags. */
- new_generated_scn (scn_dot_plt, ".plt", SHT_PROGBITS,
- SHF_ALLOC | SHF_EXECINSTR,
- /* XXX Is the size correct? */
- xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1),
- xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1));
-
- /* Create the relocation section for the .plt. This is always
- separate even if the other relocation sections are combined. */
- new_generated_scn (scn_dot_pltrel, ".rel.plt", rel_type, SHF_ALLOC,
- rel_type == SHT_REL
- ? xelf_fsize (ld_state.outelf, ELF_T_REL, 1)
- : xelf_fsize (ld_state.outelf, ELF_T_RELA, 1),
- xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1));
-
- /* XXX We might need a function which returns the section flags. */
- new_generated_scn (scn_dot_gotplt, ".got.plt", SHT_PROGBITS,
- SHF_ALLOC | SHF_WRITE,
- xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1),
- xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1));
-
- /* Mark all used DSOs as used. Determine whether any referenced
- object uses symbol versioning. */
- if (ld_state.from_dso != NULL)
- {
- struct symbol *srunp = ld_state.from_dso;
-
- do
- {
- srunp->file->used = true;
-
- if (srunp->file->verdefdata != NULL)
- {
- XElf_Versym versym;
-
- /* The input DSO uses versioning. */
- use_versioning = true;
- /* We reference versions. */
- need_version = true;
-
- if (xelf_getversym_copy (srunp->file->versymdata,
- srunp->symidx, versym) == NULL)
- assert (! "xelf_getversym failed");
-
- /* We cannot link explicitly with an older
- version of a symbol. */
- assert ((versym & 0x8000) == 0);
- /* We cannot reference local (index 0) or plain
- global (index 1) versions. */
- assert (versym > 1);
-
- /* Check whether we have already seen the
- version and if not add it to the referenced
- versions in the output file. */
- if (! srunp->file->verdefused[versym])
- {
- srunp->file->verdefused[versym] = 1;
-
- if (++srunp->file->nverdefused == 1)
- /* Count the file if it is using versioning. */
- ++ld_state.nverdeffile;
- ++ld_state.nverdefused;
- }
- }
- }
- while ((srunp = srunp->next) != ld_state.from_dso);
- }
-
- /* Create the sections used to record version dependencies. */
- if (need_version)
- new_generated_scn (scn_dot_version_r, ".gnu.version_r",
- SHT_GNU_verneed, SHF_ALLOC, 0,
- xelf_fsize (ld_state.outelf, ELF_T_WORD, 1));
- }
-
- /* Now count the used DSOs since this is what the user
- wants. */
- int ndt_needed = 0;
- if (ld_state.ndsofiles > 0)
- {
- struct usedfiles *frunp = ld_state.dsofiles;
-
- do
- if (! frunp->as_needed || frunp->used)
- {
- ++ndt_needed;
- if (frunp->lazyload)
- /* We have to create another dynamic section
- entry for the DT_POSFLAG_1 entry.
-
- XXX Once more functionality than the lazyloading
- flag are suppported the test must be
- extended. */
- ++ndt_needed;
- }
- while ((frunp = frunp->next) != ld_state.dsofiles);
- }
-
- if (use_versioning)
- new_generated_scn (scn_dot_version, ".gnu.version", SHT_GNU_versym,
- SHF_ALLOC,
- xelf_fsize (ld_state.outelf, ELF_T_HALF, 1),
- xelf_fsize (ld_state.outelf, ELF_T_HALF, 1));
-
- /* We need some entries all the time. */
- ld_state.ndynamic = (7 + (ld_state.runpath != NULL
- || ld_state.rpath != NULL)
- + ndt_needed
- + (ld_state.init_symbol != NULL ? 1 : 0)
- + (ld_state.fini_symbol != NULL ? 1 : 0)
- + (use_versioning ? 1 : 0)
- + (need_version ? 2 : 0)
- + (ld_state.nplt > 0 ? 4 : 0)
- + (ld_state.relsize_total > 0 ? 3 : 0));
- }
-
- /* When creating a relocatable file or when we are not stripping the
- output file we create a symbol table. */
- ld_state.need_symtab = (ld_state.file_type == relocatable_file_type
- || ld_state.strip == strip_none);
-
- /* Add the .got section if needed. */
- if (ld_state.need_got)
- /* XXX We might need a function which returns the section flags. */
- new_generated_scn (scn_dot_got, ".got", SHT_PROGBITS,
- SHF_ALLOC | SHF_WRITE,
- xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1),
- xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1));
-
- /* Add the .rel.dyn section. */
- if (ld_state.relsize_total > 0)
- new_generated_scn (scn_dot_dynrel, ".rel.dyn", rel_type, SHF_ALLOC,
- rel_type == SHT_REL
- ? xelf_fsize (ld_state.outelf, ELF_T_REL, 1)
- : xelf_fsize (ld_state.outelf, ELF_T_RELA, 1),
- xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1));
-}
-
-
-/* Callback function registered with on_exit to make sure the temporary
- files gets removed if something goes wrong. */
-static void
-remove_tempfile (int status, void *arg)
-{
- if (status != 0 && ld_state.tempfname != NULL)
- unlink (ld_state.tempfname);
-}
-
-
-/* Create the output file. The file name is given or "a.out". We
- create as much of the ELF structure as possible. */
-static int
-ld_generic_open_outfile (struct ld_state *statep, int machine, int klass,
- int data)
-{
- /* We do not create the new file right away with the final name.
- This would destroy an existing file with this name before a
- replacement is finalized. We create instead a temporary file in
- the same directory. */
- if (ld_state.outfname == NULL)
- ld_state.outfname = "a.out";
-
- size_t outfname_len = strlen (ld_state.outfname);
- char *tempfname = (char *) obstack_alloc (&ld_state.smem,
- outfname_len + sizeof (".XXXXXX"));
- ld_state.tempfname = tempfname;
-
- int fd;
- int try = 0;
- while (1)
- {
- strcpy (mempcpy (tempfname, ld_state.outfname, outfname_len), ".XXXXXX");
-
- /* The use of mktemp() here is fine. We do not want to use
- mkstemp() since then the umask isn't used. And the output
- file will have these permissions anyhow. Any intruder could
- change the file later if it would be possible now. */
- if (mktemp (tempfname) != NULL
- && (fd = open (tempfname, O_RDWR | O_EXCL | O_CREAT | O_NOFOLLOW,
- ld_state.file_type == relocatable_file_type
- ? DEFFILEMODE : ACCESSPERMS)) != -1)
- break;
-
- /* Failed this round. We keep trying a number of times. */
- if (++try >= 10)
- error (EXIT_FAILURE, errno, gettext ("cannot create output file"));
- }
- ld_state.outfd = fd;
-
- /* Make sure we remove the temporary file in case something goes
- wrong. */
- on_exit (remove_tempfile, NULL);
-
- /* Create the ELF file data for the output file. */
- Elf *elf = ld_state.outelf = elf_begin (fd,
- conserve_memory
- ? ELF_C_WRITE : ELF_C_WRITE_MMAP,
- NULL);
- if (elf == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("cannot create ELF descriptor for output file: %s"),
- elf_errmsg (-1));
-
- /* Create the basic data structures. */
- if (! xelf_newehdr (elf, klass))
- /* Couldn't create the ELF header. Very bad. */
- error (EXIT_FAILURE, 0,
- gettext ("could not create ELF header for output file: %s"),
- elf_errmsg (-1));
-
- /* And get the current header so that we can modify it. */
- XElf_Ehdr_vardef (ehdr);
- xelf_getehdr (elf, ehdr);
- assert (ehdr != NULL);
-
- /* Set the machine type. */
- ehdr->e_machine = machine;
-
- /* Modify it according to the info we have here and now. */
- if (ld_state.file_type == executable_file_type)
- ehdr->e_type = ET_EXEC;
- else if (ld_state.file_type == dso_file_type)
- ehdr->e_type = ET_DYN;
- else
- {
- assert (ld_state.file_type == relocatable_file_type);
- ehdr->e_type = ET_REL;
- }
-
- /* Set the ELF version. */
- ehdr->e_version = EV_CURRENT;
-
- /* Set the endianness. */
- ehdr->e_ident[EI_DATA] = data;
-
- /* Write the ELF header information back. */
- (void) xelf_update_ehdr (elf, ehdr);
-
- return 0;
-}
-
-
-/* We compute the offsets of the various copied objects and the total
- size of the memory needed. */
-// XXX The method used here is simple: go from front to back and pack
-// the objects in this order. A more space efficient way would
-// actually trying to pack the objects as dense as possible. But this
-// is more expensive.
-static void
-compute_copy_reloc_offset (XElf_Shdr *shdr)
-{
- struct symbol *runp = ld_state.from_dso;
- assert (runp != NULL);
-
- XElf_Off maxalign = 1;
- XElf_Off offset = 0;
-
- do
- if (runp->need_copy)
- {
- /* Determine alignment for the symbol. */
- // XXX The question is how? The symbol record itself does not
- // have the information. So we have to be conservative and
- // assume the alignment of the section the symbol is in.
-
- // XXX We can be more precise. Use the offset from the beginning
- // of the section and determine the largest power of two with
- // module zero.
- XElf_Off symalign = MAX (SCNINFO_SHDR (runp->file->scninfo[runp->scndx].shdr).sh_addralign, 1);
- /* Keep track of the maximum alignment requirement. */
- maxalign = MAX (maxalign, symalign);
-
- /* Align current position. */
- offset = (offset + symalign - 1) & ~(symalign - 1);
-
- runp->merge.value = offset;
-
- offset += runp->size;
- }
- while ((runp = runp->next) != ld_state.from_dso);
-
- shdr->sh_type = SHT_NOBITS;
- shdr->sh_size = offset;
- shdr->sh_addralign = maxalign;
-}
-
-
-static void
-compute_common_symbol_offset (XElf_Shdr *shdr)
-{
- struct symbol *runp = ld_state.common_syms;
- assert (runp != NULL);
-
- XElf_Off maxalign = 1;
- XElf_Off offset = 0;
-
- do
- {
- /* Determine alignment for the symbol. */
- XElf_Off symalign = runp->merge.value;
-
- /* Keep track of the maximum alignment requirement. */
- maxalign = MAX (maxalign, symalign);
-
- /* Align current position. */
- offset = (offset + symalign - 1) & ~(symalign - 1);
-
- runp->merge.value = offset;
-
- offset += runp->size;
- }
- while ((runp = runp->next) != ld_state.common_syms);
-
- shdr->sh_type = SHT_NOBITS;
- shdr->sh_size = offset;
- shdr->sh_addralign = maxalign;
-}
-
-
-static void
-sort_sections_generic (void)
-{
- /* XXX TBI */
- abort ();
-}
-
-
-static int
-match_section (const char *osectname, struct filemask_section_name *sectmask,
- struct scnhead **scnhead, bool new_section, size_t segment_nr)
-{
- struct scninfo *prevp;
- struct scninfo *runp;
- struct scninfo *notused;
-
- if (fnmatch (sectmask->section_name->name, (*scnhead)->name, 0) != 0)
- /* The section name does not match. */
- return new_section;
-
- /* If this is a section generated by the linker it doesn't contain
- the regular information (i.e., input section data etc) and must
- be handle special. */
- if ((*scnhead)->kind != scn_normal)
- {
- (*scnhead)->name = osectname;
- (*scnhead)->segment_nr = segment_nr;
-
- /* We have to count note section since they get their own
- program header entry. */
- if ((*scnhead)->type == SHT_NOTE)
- ++ld_state.nnotesections;
-
- ld_state.allsections[ld_state.nallsections++] = (*scnhead);
- return true;
- }
-
- /* Now we have to match the file names of the input files. Some of
- the sections here might not match. */
- runp = (*scnhead)->last->next;
- prevp = (*scnhead)->last;
- notused = NULL;
-
- do
- {
- /* Base of the file name the section comes from. */
- const char *brfname = basename (runp->fileinfo->rfname);
-
- /* If the section isn't used, the name doesn't match the positive
- inclusion list, or the name does match the negative inclusion
- list, ignore the section. */
- if (!runp->used
- || (sectmask->filemask != NULL
- && fnmatch (sectmask->filemask, brfname, 0) != 0)
- || (sectmask->excludemask != NULL
- && fnmatch (sectmask->excludemask, brfname, 0) == 0))
- {
- /* This file does not match the file name masks. */
- if (notused == NULL)
- notused = runp;
-
- prevp = runp;
- runp = runp->next;
- if (runp == notused)
- runp = NULL;
- }
- /* The section fulfills all requirements, add it to the output
- file with the correct section name etc. */
- else
- {
- struct scninfo *found = runp;
-
- /* Remove this input section data buffer from the list. */
- if (prevp != runp)
- runp = prevp->next = runp->next;
- else
- {
- free (*scnhead);
- *scnhead = NULL;
- runp = NULL;
- }
-
- /* Create a new section for the output file if the 'new_section'
- flag says so. Otherwise append the buffer to the last
- section which we created in one of the last calls. */
- if (new_section)
- {
- struct scnhead *newp;
-
- newp = (struct scnhead *) obstack_calloc (&ld_state.smem,
- sizeof (*newp));
- newp->kind = scn_normal;
- newp->name = osectname;
- newp->type = SCNINFO_SHDR (found->shdr).sh_type;
- /* Executable or DSO do not have section groups. Drop that
- information. */
- newp->flags = SCNINFO_SHDR (found->shdr).sh_flags & ~SHF_GROUP;
- newp->segment_nr = segment_nr;
- newp->last = found->next = found;
- newp->used = true;
- newp->relsize = found->relsize;
- newp->entsize = SCNINFO_SHDR (found->shdr).sh_entsize;
-
- /* We have to count note section since they get their own
- program header entry. */
- if (newp->type == SHT_NOTE)
- ++ld_state.nnotesections;
-
- ld_state.allsections[ld_state.nallsections++] = newp;
- new_section = false;
- }
- else
- {
- struct scnhead *queued;
-
- queued = ld_state.allsections[ld_state.nallsections - 1];
-
- found->next = queued->last->next;
- queued->last = queued->last->next = found;
-
- /* If the linker script forces us to add incompatible
- sections together do so. But reflect this in the
- type and flags of the resulting file. */
- if (queued->type != SCNINFO_SHDR (found->shdr).sh_type)
- /* XXX Any better choice? */
- queued->type = SHT_PROGBITS;
- if (queued->flags != SCNINFO_SHDR (found->shdr).sh_flags)
- /* Executable or DSO do not have section groups. Drop that
- information. */
- queued->flags = ebl_sh_flags_combine (ld_state.ebl,
- queued->flags,
- SCNINFO_SHDR (found->shdr).sh_flags
- & ~SHF_GROUP);
-
- /* Accumulate the relocation section size. */
- queued->relsize += found->relsize;
- }
- }
- }
- while (runp != NULL);
-
- return new_section;
-}
-
-
-static void
-sort_sections_lscript (void)
-{
- struct scnhead *temp[ld_state.nallsections];
-
- /* Make a copy of the section head pointer array. */
- memcpy (temp, ld_state.allsections,
- ld_state.nallsections * sizeof (temp[0]));
- size_t nallsections = ld_state.nallsections;
-
- /* Convert the output segment list in a single-linked list. */
- struct output_segment *segment = ld_state.output_segments->next;
- ld_state.output_segments->next = NULL;
- ld_state.output_segments = segment;
-
- /* Put the sections in the correct order in the array in the state
- structure. This might involve merging of sections and also
- renaming the containing section in the output file. */
- ld_state.nallsections = 0;
- size_t segment_nr;
- size_t last_writable = ~0ul;
- for (segment_nr = 0; segment != NULL; segment = segment->next, ++segment_nr)
- {
- struct output_rule *orule;
-
- for (orule = segment->output_rules; orule != NULL; orule = orule->next)
- if (orule->tag == output_section)
- {
- struct input_rule *irule;
- bool new_section = true;
-
- for (irule = orule->val.section.input; irule != NULL;
- irule = irule->next)
- if (irule->tag == input_section)
- {
- size_t cnt;
-
- for (cnt = 0; cnt < nallsections; ++cnt)
- if (temp[cnt] != NULL)
- new_section =
- match_section (orule->val.section.name,
- irule->val.section, &temp[cnt],
- new_section, segment_nr);
- }
- }
-
- if ((segment->mode & PF_W) != 0)
- last_writable = ld_state.nallsections - 1;
- }
-
- /* In case we have to create copy relocations or we have common
- symbols, find the last writable segment and add one more data
- block. It will be a NOBITS block and take up no disk space.
- This is why it is important to get the last block. */
- if (ld_state.ncopy > 0 || ld_state.common_syms != NULL)
- {
- if (last_writable == ~0ul)
- error (EXIT_FAILURE, 0, "no writable segment");
-
- if (ld_state.allsections[last_writable]->type != SHT_NOBITS)
- {
- /* Make room in the ALLSECTIONS array for a new section.
- There is guaranteed room in the array. We add the new
- entry after the last writable section. */
- ++last_writable;
- memmove (&ld_state.allsections[last_writable + 1],
- &ld_state.allsections[last_writable],
- (ld_state.nallsections - last_writable)
- * sizeof (ld_state.allsections[0]));
-
- ld_state.allsections[last_writable] = (struct scnhead *)
- obstack_calloc (&ld_state.smem, sizeof (struct scnhead));
-
- /* Name for the new section. */
- ld_state.allsections[last_writable]->name = ".bss";
- /* Type: NOBITS. */
- ld_state.allsections[last_writable]->type = SHT_NOBITS;
- /* Same segment as the last writable section. */
- ld_state.allsections[last_writable]->segment_nr
- = ld_state.allsections[last_writable - 1]->segment_nr;
- }
- }
-
- /* Create common symbol data block. */
- if (ld_state.ncopy > 0)
- {
-#if NATIVE_ELF
- struct scninfo *si = (struct scninfo *)
- obstack_calloc (&ld_state.smem, sizeof (*si) + sizeof (XElf_Shdr));
- si->shdr = (XElf_Shdr *) (si + 1);
-#else
- struct scninfo *si = (struct scninfo *) obstack_calloc (&ld_state.smem,
- sizeof (*si));
-#endif
-
- /* Get the information regarding the symbols with copy relocations. */
- compute_copy_reloc_offset (&SCNINFO_SHDR (si->shdr));
-
- /* This section is needed. */
- si->used = true;
- /* Remember for later the section data structure. */
- ld_state.copy_section = si;
-
- if (likely (ld_state.allsections[last_writable]->last != NULL))
- {
- si->next = ld_state.allsections[last_writable]->last->next;
- ld_state.allsections[last_writable]->last->next = si;
- ld_state.allsections[last_writable]->last = si;
- }
- else
- ld_state.allsections[last_writable]->last = si->next = si;
- }
-
- /* Create common symbol data block. */
- if (ld_state.common_syms != NULL)
- {
-#if NATIVE_ELF
- struct scninfo *si = (struct scninfo *)
- obstack_calloc (&ld_state.smem, sizeof (*si) + sizeof (XElf_Shdr));
- si->shdr = (XElf_Shdr *) (si + 1);
-#else
- struct scninfo *si = (struct scninfo *) obstack_calloc (&ld_state.smem,
- sizeof (*si));
-#endif
-
- /* Get the information regarding the symbols with copy relocations. */
- compute_common_symbol_offset (&SCNINFO_SHDR (si->shdr));
-
- /* This section is needed. */
- si->used = true;
- /* Remember for later the section data structure. */
- ld_state.common_section = si;
-
- if (likely (ld_state.allsections[last_writable]->last != NULL))
- {
- si->next = ld_state.allsections[last_writable]->last->next;
- ld_state.allsections[last_writable]->last->next = si;
- ld_state.allsections[last_writable]->last = si;
- }
- else
- ld_state.allsections[last_writable]->last = si->next = si;
- }
-}
-
-
-/* Create the output sections now. This requires knowledge about all
- the sections we will need. It may be necessary to sort sections in
- the order they are supposed to appear in the executable. The
- sorting use many different kinds of information to optimize the
- resulting binary. Important is to respect segment boundaries and
- the needed alignment. The mode of the segments will be determined
- afterwards automatically by the output routines.
-
- The generic sorting routines work in one of two possible ways:
-
- - if a linker script specifies the sections to be used in the
- output and assigns them to a segment this information is used;
-
- - otherwise the linker will order the sections based on permissions
- and some special knowledge about section names.*/
-static void
-ld_generic_create_sections (struct ld_state *statep)
-{
- struct scngroup *groups;
- size_t cnt;
-
- /* For relocatable object we don't have to bother sorting the
- sections and we do want to preserve the relocation sections as
- they appear in the input files. */
- if (ld_state.file_type != relocatable_file_type)
- {
- /* Collect all the relocation sections. They are handled
- separately. */
- struct scninfo *list = NULL;
- for (cnt = 0; cnt < ld_state.nallsections; ++cnt)
- if ((ld_state.allsections[cnt]->type == SHT_REL
- || ld_state.allsections[cnt]->type == SHT_RELA)
- /* The generated relocation sections are not of any
- interest here. */
- && ld_state.allsections[cnt]->last != NULL)
- {
- if (list == NULL)
- list = ld_state.allsections[cnt]->last;
- else
- {
- /* Merge the sections list. */
- struct scninfo *first = list->next;
- list->next = ld_state.allsections[cnt]->last->next;
- ld_state.allsections[cnt]->last->next = first;
- list = ld_state.allsections[cnt]->last;
- }
-
- /* Remove the entry from the section list. */
- ld_state.allsections[cnt] = NULL;
- }
- ld_state.rellist = list;
-
- if (ld_state.output_segments == NULL)
- /* Sort using builtin rules. */
- sort_sections_generic ();
- else
- sort_sections_lscript ();
- }
-
- /* Now iterate over the input sections and create the sections in the
- order they are required in the output file. */
- for (cnt = 0; cnt < ld_state.nallsections; ++cnt)
- {
- struct scnhead *head = ld_state.allsections[cnt];
- Elf_Scn *scn;
- XElf_Shdr_vardef (shdr);
-
- /* Don't handle unused sections. */
- if (!head->used)
- continue;
-
- /* We first have to create the section group if necessary.
- Section group sections must come (in section index order)
- before any of the section contained. This all is necessary
- only for relocatable object as other object types are not
- allowed to contain section groups. */
- if (ld_state.file_type == relocatable_file_type
- && unlikely (head->flags & SHF_GROUP))
- {
- /* There is at least one section which is contained in a
- section group in the input file. This means we must
- create a section group here as well. The only problem is
- that not all input files have to have to same kind of
- partitioning of the sections. I.e., sections A and B in
- one input file and sections B and C in another input file
- can be in one group. That will result in a group
- containing the sections A, B, and C in the output
- file. */
- struct scninfo *runp;
- Elf32_Word here_groupidx = 0;
- struct scngroup *here_group;
- struct member *newp;
-
- /* First check whether any section is already in a group.
- In this case we have to add this output section, too. */
- runp = head->last;
- do
- {
- assert (runp->grpid != 0);
-
- here_groupidx = runp->fileinfo->scninfo[runp->grpid].outscnndx;
- if (here_groupidx != 0)
- break;
- }
- while ((runp = runp->next) != head->last);
-
- if (here_groupidx == 0)
- {
- /* We need a new section group section. */
- scn = elf_newscn (ld_state.outelf);
- xelf_getshdr (scn, shdr);
- if (shdr == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("cannot create section for output file: %s"),
- elf_errmsg (-1));
-
- here_group = (struct scngroup *) xmalloc (sizeof (*here_group));
- here_group->outscnidx = here_groupidx = elf_ndxscn (scn);
- here_group->nscns = 0;
- here_group->member = NULL;
- here_group->next = ld_state.groups;
- /* Pick a name for the section. To keep it meaningful
- we use a name used in the input files. If the
- section group in the output file should contain
- section which were in section groups of different
- names in the input files this is the users
- problem. */
- here_group->nameent
- = ebl_strtabadd (ld_state.shstrtab,
- elf_strptr (runp->fileinfo->elf,
- runp->fileinfo->shstrndx,
- SCNINFO_SHDR (runp->shdr).sh_name),
- 0);
- /* Signature symbol. */
- here_group->symbol
- = runp->fileinfo->scninfo[runp->grpid].symbols;
-
- ld_state.groups = here_group;
- }
- else
- {
- /* Search for the group with this index. */
- here_group = ld_state.groups;
- while (here_group->outscnidx != here_groupidx)
- here_group = here_group->next;
- }
-
- /* Add the new output section. */
- newp = (struct member *) alloca (sizeof (*newp));
- newp->scn = head;
-#ifndef NDT_NEEDED
- newp->next = NULL;
-#endif
- CSNGL_LIST_ADD_REAR (here_group->member, newp);
- ++here_group->nscns;
-
- /* Store the section group index in all input files. */
- runp = head->last;
- do
- {
- assert (runp->grpid != 0);
-
- if (runp->fileinfo->scninfo[runp->grpid].outscnndx == 0)
- runp->fileinfo->scninfo[runp->grpid].outscnndx = here_groupidx;
- else
- assert (runp->fileinfo->scninfo[runp->grpid].outscnndx
- == here_groupidx);
- }
- while ((runp = runp->next) != head->last);
- }
-
- /* We'll use this section so get it's name in the section header
- string table. */
- if (head->kind == scn_normal)
- head->nameent = ebl_strtabadd (ld_state.shstrtab, head->name, 0);
-
- /* Create a new section in the output file and add all data
- from all the sections we read. */
- scn = elf_newscn (ld_state.outelf);
- head->scnidx = elf_ndxscn (scn);
- xelf_getshdr (scn, shdr);
- if (shdr == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("cannot create section for output file: %s"),
- elf_errmsg (-1));
-
- assert (head->type != SHT_NULL);
- assert (head->type != SHT_SYMTAB);
- assert (head->type != SHT_DYNSYM || head->kind != scn_normal);
- assert (head->type != SHT_STRTAB || head->kind != scn_normal);
- assert (head->type != SHT_GROUP);
- shdr->sh_type = head->type;
- shdr->sh_flags = head->flags;
- shdr->sh_addralign = head->align;
- shdr->sh_entsize = head->entsize;
- assert (shdr->sh_entsize != 0 || (shdr->sh_flags & SHF_MERGE) == 0);
- (void) xelf_update_shdr (scn, shdr);
-
- /* We have to know the section index of the dynamic symbol table
- right away. */
- if (head->kind == scn_dot_dynsym)
- ld_state.dynsymscnidx = elf_ndxscn (scn);
- }
-
- /* Actually create the section group sections. */
- groups = ld_state.groups;
- while (groups != NULL)
- {
- Elf_Scn *scn;
- Elf_Data *data;
- Elf32_Word *grpdata;
- struct member *runp;
-
- scn = elf_getscn (ld_state.outelf, groups->outscnidx);
- assert (scn != NULL);
-
- data = elf_newdata (scn);
- if (data == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("cannot create section for output file: %s"),
- elf_errmsg (-1));
-
- data->d_size = (groups->nscns + 1) * sizeof (Elf32_Word);
- data->d_buf = grpdata = (Elf32_Word *) xmalloc (data->d_size);
- data->d_type = ELF_T_WORD;
- data->d_version = EV_CURRENT;
- data->d_off = 0;
- /* XXX What better to use? */
- data->d_align = sizeof (Elf32_Word);
-
- /* The first word in the section is the flag word. */
- /* XXX Set COMDATA flag is necessary. */
- grpdata[0] = 0;
-
- runp = groups->member->next;
- cnt = 1;
- do
- /* Fill in the index of the section. */
- grpdata[cnt++] = runp->scn->scnidx;
- while ((runp = runp->next) != groups->member->next);
-
- groups = groups->next;
- }
-}
-
-
-static bool
-reduce_symbol_p (XElf_Sym *sym, struct Ebl_Strent *strent)
-{
- const char *str;
- const char *version;
- struct id_list search;
- struct id_list *verp;
- bool result = ld_state.default_bind_local;
-
- if (XELF_ST_BIND (sym->st_info) == STB_LOCAL || sym->st_shndx == SHN_UNDEF)
- /* We don't have to do anything to local symbols here. */
- /* XXX Any section value in [SHN_LORESERVER,SHN_XINDEX) need
- special treatment? */
- return false;
-
- /* XXX Handle other symbol bindings. */
- assert (XELF_ST_BIND (sym->st_info) == STB_GLOBAL
- || XELF_ST_BIND (sym->st_info) == STB_WEAK);
-
- str = ebl_string (strent);
- version = strchr (str, VER_CHR);
- if (version != NULL)
- {
- search.id = strndupa (str, version - str);
- if (*++version == VER_CHR)
- /* Skip the second '@' signaling a default definition. */
- ++version;
- }
- else
- {
- search.id = str;
- version = "";
- }
-
- verp = ld_version_str_tab_find (&ld_state.version_str_tab,
- elf_hash (search.id), &search);
- while (verp != NULL)
- {
- /* We have this symbol in the version hash table. Now match the
- version name. */
- if (strcmp (verp->u.s.versionname, version) == 0)
- /* Match! */
- return verp->u.s.local;
-
- verp = verp->next;
- }
-
- /* XXX Add test for wildcard version symbols. */
-
- return result;
-}
-
-
-static XElf_Addr
-eval_expression (struct expression *expr, XElf_Addr addr)
-{
- XElf_Addr val = ~((XElf_Addr) 0);
-
- switch (expr->tag)
- {
- case exp_num:
- val = expr->val.num;
- break;
-
- case exp_sizeof_headers:
- {
- /* The 'elf_update' call determine the offset of the first
- section. The the size of the header. */
- XElf_Shdr_vardef (shdr);
-
- xelf_getshdr (elf_getscn (ld_state.outelf, 1), shdr);
- assert (shdr != NULL);
-
- val = shdr->sh_offset;
- }
- break;
-
- case exp_pagesize:
- val = ld_state.pagesize;
- break;
-
- case exp_id:
- /* We are here computing only address expressions. It seems not
- to be necessary to handle any variable but ".". Let's avoid
- the complication. If it turns up to be needed we can add
- it. */
- if (strcmp (expr->val.str, ".") != 0)
- error (EXIT_FAILURE, 0, gettext ("\
-address computation expression contains variable '%s'"),
- expr->val.str);
-
- val = addr;
- break;
-
- case exp_mult:
- val = (eval_expression (expr->val.binary.left, addr)
- * eval_expression (expr->val.binary.right, addr));
- break;
-
- case exp_div:
- val = (eval_expression (expr->val.binary.left, addr)
- / eval_expression (expr->val.binary.right, addr));
- break;
-
- case exp_mod:
- val = (eval_expression (expr->val.binary.left, addr)
- % eval_expression (expr->val.binary.right, addr));
- break;
-
- case exp_plus:
- val = (eval_expression (expr->val.binary.left, addr)
- + eval_expression (expr->val.binary.right, addr));
- break;
-
- case exp_minus:
- val = (eval_expression (expr->val.binary.left, addr)
- - eval_expression (expr->val.binary.right, addr));
- break;
-
- case exp_and:
- val = (eval_expression (expr->val.binary.left, addr)
- & eval_expression (expr->val.binary.right, addr));
- break;
-
- case exp_or:
- val = (eval_expression (expr->val.binary.left, addr)
- | eval_expression (expr->val.binary.right, addr));
- break;
-
- case exp_align:
- val = eval_expression (expr->val.child, addr);
- if ((val & (val - 1)) != 0)
- error (EXIT_FAILURE, 0, gettext ("argument '%" PRIuMAX "' of ALIGN in address computation expression is no power of two"),
- (uintmax_t) val);
- val = (addr + val - 1) & ~(val - 1);
- break;
- }
-
- return val;
-}
-
-
-/* Find a good as possible size for the hash table so that all the
- non-zero entries in HASHCODES don't collide too much and the table
- isn't too large. There is no exact formular for this so we use a
- heuristic. Depending on the optimization level the search is
- longer or shorter. */
-static size_t
-optimal_bucket_size (Elf32_Word *hashcodes, size_t maxcnt, int optlevel)
-{
- size_t minsize;
- size_t maxsize;
- size_t bestsize;
- uint64_t bestcost;
- size_t size;
- uint32_t *counts;
- uint32_t *lengths;
-
- if (maxcnt == 0)
- return 0;
-
- /* When we are not optimizing we run only very few tests. */
- if (optlevel <= 0)
- {
- minsize = maxcnt;
- maxsize = maxcnt + 10000 / maxcnt;
- }
- else
- {
- /* Does not make much sense to start with a smaller table than
- one which has at least four collisions. */
- minsize = MAX (1, maxcnt / 4);
- /* We look for a best fit in the range of up to eigth times the
- number of elements. */
- maxsize = 2 * maxcnt + (6 * MIN (optlevel, 100) * maxcnt) / 100;
- }
- bestsize = maxcnt;
- bestcost = UINT_MAX;
-
- /* Array for counting the collisions and chain lengths. */
- counts = (uint32_t *) xmalloc ((maxcnt + 1 + maxsize) * sizeof (uint32_t));
- lengths = &counts[maxcnt + 1];
-
- for (size = minsize; size <= maxsize; ++size)
- {
- size_t inner;
- uint64_t cost;
- uint32_t maxlength;
- uint64_t success;
- uint32_t acc;
- double factor;
-
- memset (lengths, '\0', size * sizeof (uint32_t));
- memset (counts, '\0', (maxcnt + 1) * sizeof (uint32_t));
-
- /* Determine how often each hash bucket is used. */
- assert (hashcodes[0] == 0);
- for (inner = 1; inner < maxcnt; ++inner)
- ++lengths[hashcodes[inner] % size];
-
- /* Determine the lengths. */
- maxlength = 0;
- for (inner = 0; inner < size; ++inner)
- {
- ++counts[lengths[inner]];
-
- if (lengths[inner] > maxlength)
- maxlength = lengths[inner];
- }
-
- /* Determine successful lookup length. */
- acc = 0;
- success = 0;
- for (inner = 0; inner <= maxlength; ++inner)
- {
- acc += inner;
- success += counts[inner] * acc;
- }
-
- /* We can compute two factors now: the average length of a
- positive search and the average length of a negative search.
- We count the number of comparisons which have to look at the
- names themselves. Recognizing that the chain ended is not
- accounted for since it's almost for free.
-
- Which lookup is more important depends on the kind of DSO.
- If it is a system DSO like libc it is expected that most
- lookups succeed. Otherwise most lookups fail. */
- if (ld_state.is_system_library)
- factor = (1.0 * (double) success / (double) maxcnt
- + 0.3 * (double) maxcnt / (double) size);
- else
- factor = (0.3 * (double) success / (double) maxcnt
- + 1.0 * (double) maxcnt / (double) size);
-
- /* Combine the lookup cost factor. The 1/16th addend adds
- penalties for too large table sizes. */
- cost = (2 + maxcnt + size) * (factor + 1.0 / 16.0);
-
-#if 0
- printf ("maxcnt = %d, size = %d, cost = %Ld, success = %g, fail = %g, factor = %g\n",
- maxcnt, size, cost, (double) success / (double) maxcnt, (double) maxcnt / (double) size, factor);
-#endif
-
- /* Compare with current best results. */
- if (cost < bestcost)
- {
- bestcost = cost;
- bestsize = size;
- }
- }
-
- free (counts);
-
- return bestsize;
-}
-
-
-static void
-optimal_gnu_hash_size (Elf32_Word *hashcodes, size_t maxcnt, int optlevel,
- size_t *bitmask_nwords, size_t *shift, size_t *nbuckets)
-{
- // XXX Implement something real
- *bitmask_nwords = 256;
- *shift = 6;
- *nbuckets = 3 * maxcnt / 2;
-}
-
-
-static XElf_Addr
-find_entry_point (void)
-{
- XElf_Addr result;
-
- if (ld_state.entry != NULL)
- {
- struct symbol search = { .name = ld_state.entry };
- struct symbol *syment;
-
- syment = ld_symbol_tab_find (&ld_state.symbol_tab,
- elf_hash (ld_state.entry), &search);
- if (syment != NULL && syment->defined)
- {
- /* We found the symbol. */
- Elf_Data *data = elf_getdata (elf_getscn (ld_state.outelf,
- ld_state.symscnidx), NULL);
-
- XElf_Sym_vardef (sym);
-
- sym = NULL;
- if (data != NULL)
- xelf_getsym (data, ld_state.dblindirect[syment->outsymidx], sym);
-
- if (sym == NULL && ld_state.need_dynsym && syment->outdynsymidx != 0)
- {
- /* Use the dynamic symbol table if available. */
- data = elf_getdata (elf_getscn (ld_state.outelf,
- ld_state.dynsymscnidx), NULL);
-
- sym = NULL;
- if (data != NULL)
- xelf_getsym (data, syment->outdynsymidx, sym);
- }
-
- if (sym != NULL)
- return sym->st_value;
-
- /* XXX What to do if the output has no non-dynamic symbol
- table and the dynamic symbol table does not contain the
- symbol? */
- assert (ld_state.need_symtab);
- assert (ld_state.symscnidx != 0);
- }
- }
-
- /* We couldn't find the symbol or none was given. Use the first
- address of the ".text" section then. */
-
-
- result = 0;
-
- /* In DSOs this is no fatal error. They usually have no entry
- points. In this case we set the entry point to zero, which makes
- sure it will always fail. */
- if (ld_state.file_type == executable_file_type)
- {
- if (ld_state.entry != NULL)
- error (0, 0, gettext ("\
-cannot find entry symbol '%s': defaulting to %#0*" PRIx64),
- ld_state.entry,
- xelf_getclass (ld_state.outelf) == ELFCLASS32 ? 10 : 18,
- (uint64_t) result);
- else
- error (0, 0, gettext ("\
-no entry symbol specified: defaulting to %#0*" PRIx64),
- xelf_getclass (ld_state.outelf) == ELFCLASS32 ? 10 : 18,
- (uint64_t) result);
- }
-
- return result;
-}
-
-
-static void
-fillin_special_symbol (struct symbol *symst, size_t scnidx, size_t nsym,
- Elf_Data *symdata, struct Ebl_Strtab *strtab)
-{
- assert (ld_state.file_type != relocatable_file_type);
-
- XElf_Sym_vardef (sym);
- xelf_getsym_ptr (symdata, nsym, sym);
-
- /* The name offset will be filled in later. */
- sym->st_name = 0;
- /* Traditionally: globally visible. */
- sym->st_info = XELF_ST_INFO (symst->local ? STB_LOCAL : STB_GLOBAL,
- symst->type);
- sym->st_other = symst->hidden ? STV_HIDDEN : STV_DEFAULT;
- /* Reference to the GOT or dynamic section. Since the GOT and
- dynamic section are only created for executables and DSOs it
- cannot be that the section index is too large. */
- assert (scnidx != 0);
- assert (scnidx < SHN_LORESERVE || scnidx == SHN_ABS);
- sym->st_shndx = scnidx;
- /* We want the beginning of the section. */
- sym->st_value = 0;
- // XXX What size?
- sym->st_size = 0;
-
- /* Determine the size of the section. */
- if (scnidx != SHN_ABS)
- {
- Elf_Data *data = elf_getdata (elf_getscn (ld_state.outelf, scnidx),
- NULL);
- assert (data != NULL);
- sym->st_size = data->d_size;
- /* Make sure there is no second data block. */
- assert (elf_getdata (elf_getscn (ld_state.outelf, scnidx), data)
- == NULL);
- }
-
- /* Insert symbol into the symbol table. Note that we do not have to
- use xelf_update_symshdx. */
- (void) xelf_update_sym (symdata, nsym, sym);
-
- /* Cross-references. */
- ndxtosym[nsym] = symst;
- symst->outsymidx = nsym;
-
- /* Add the name to the string table. */
- symstrent[nsym] = ebl_strtabadd (strtab, symst->name, 0);
-}
-
-
-static void
-new_dynamic_entry (Elf_Data *data, int idx, XElf_Sxword tag, XElf_Addr val)
-{
- XElf_Dyn_vardef (dyn);
- xelf_getdyn_ptr (data, idx, dyn);
- dyn->d_tag = tag;
- dyn->d_un.d_ptr = val;
- (void) xelf_update_dyn (data, idx, dyn);
-}
-
-
-static void
-allocate_version_names (struct usedfiles *runp, struct Ebl_Strtab *dynstrtab)
-{
- /* If this DSO has no versions skip it. */
- if (runp->status != opened || runp->verdefdata == NULL)
- return;
-
- /* Add the object name. */
- int offset = 0;
- while (1)
- {
- XElf_Verdef_vardef (def);
- XElf_Verdaux_vardef (aux);
-
- /* Get data at the next offset. */
- xelf_getverdef (runp->verdefdata, offset, def);
- assert (def != NULL);
- xelf_getverdaux (runp->verdefdata, offset + def->vd_aux, aux);
- assert (aux != NULL);
-
- assert (def->vd_ndx <= runp->nverdef);
- if (def->vd_ndx == 1 || runp->verdefused[def->vd_ndx] != 0)
- {
- runp->verdefent[def->vd_ndx]
- = ebl_strtabadd (dynstrtab, elf_strptr (runp->elf,
- runp->dynsymstridx,
- aux->vda_name), 0);
-
- if (def->vd_ndx > 1)
- runp->verdefused[def->vd_ndx] = ld_state.nextveridx++;
- }
-
- if (def->vd_next == 0)
- /* That were all versions. */
- break;
-
- offset += def->vd_next;
- }
-}
-
-
-static XElf_Off
-create_verneed_data (XElf_Off offset, Elf_Data *verneeddata,
- struct usedfiles *runp, int *ntotal)
-{
- size_t verneed_size = xelf_fsize (ld_state.outelf, ELF_T_VNEED, 1);
- size_t vernaux_size = xelf_fsize (ld_state.outelf, ELF_T_VNAUX, 1);
- int need_offset;
- bool filled = false;
- GElf_Verneed verneed;
- GElf_Vernaux vernaux;
- int ndef = 0;
- size_t cnt;
-
- /* If this DSO has no versions skip it. */
- if (runp->nverdefused == 0)
- return offset;
-
- /* We fill in the Verneed record last. Remember the offset. */
- need_offset = offset;
- offset += verneed_size;
-
- for (cnt = 2; cnt <= runp->nverdef; ++cnt)
- if (runp->verdefused[cnt] != 0)
- {
- assert (runp->verdefent[cnt] != NULL);
-
- if (filled)
- {
- vernaux.vna_next = vernaux_size;
- (void) gelf_update_vernaux (verneeddata, offset, &vernaux);
- offset += vernaux_size;
- }
-
- vernaux.vna_hash = elf_hash (ebl_string (runp->verdefent[cnt]));
- vernaux.vna_flags = 0;
- vernaux.vna_other = runp->verdefused[cnt];
- vernaux.vna_name = ebl_strtaboffset (runp->verdefent[cnt]);
- filled = true;
- ++ndef;
- }
-
- assert (filled);
- vernaux.vna_next = 0;
- (void) gelf_update_vernaux (verneeddata, offset, &vernaux);
- offset += vernaux_size;
-
- verneed.vn_version = VER_NEED_CURRENT;
- verneed.vn_cnt = ndef;
- verneed.vn_file = ebl_strtaboffset (runp->verdefent[1]);
- /* The first auxiliary entry is always found directly
- after the verneed entry. */
- verneed.vn_aux = verneed_size;
- verneed.vn_next = --*ntotal > 0 ? offset - need_offset : 0;
- (void) gelf_update_verneed (verneeddata, need_offset, &verneed);
-
- return offset;
-}
-
-
-/* Callback for qsort to sort dynamic string table. */
-static Elf32_Word *global_hashcodes;
-static size_t global_nbuckets;
-static int
-sortfct_hashval (const void *p1, const void *p2)
-{
- size_t idx1 = *(size_t *) p1;
- size_t idx2 = *(size_t *) p2;
-
- int def1 = ndxtosym[idx1]->defined && !ndxtosym[idx1]->in_dso;
- int def2 = ndxtosym[idx2]->defined && !ndxtosym[idx2]->in_dso;
-
- if (! def1 && def2)
- return -1;
- if (def1 && !def2)
- return 1;
- if (! def1)
- return 0;
-
- Elf32_Word hval1 = (global_hashcodes[ndxtosym[idx1]->outdynsymidx]
- % global_nbuckets);
- Elf32_Word hval2 = (global_hashcodes[ndxtosym[idx2]->outdynsymidx]
- % global_nbuckets);
-
- if (hval1 < hval2)
- return -1;
- if (hval1 > hval2)
- return 1;
- return 0;
-}
-
-
-/* Sort the dynamic symbol table. The GNU hash table lookup assumes
- that all symbols with the same hash value module the bucket table
- size follow one another. This avoids the extra hash chain table.
- There is no need (and no way) to perform this operation if we do
- not use the new hash table format. */
-static void
-create_gnu_hash (size_t nsym_local, size_t nsym, size_t nsym_dyn,
- Elf32_Word *gnuhashcodes)
-{
- size_t gnu_bitmask_nwords = 0;
- size_t gnu_shift = 0;
- size_t gnu_nbuckets = 0;
- Elf32_Word *gnu_bitmask = NULL;
- Elf32_Word *gnu_buckets = NULL;
- Elf32_Word *gnu_chain = NULL;
- XElf_Shdr_vardef (shdr);
-
- /* Determine the "optimal" bucket size. */
- optimal_gnu_hash_size (gnuhashcodes, nsym_dyn, ld_state.optlevel,
- &gnu_bitmask_nwords, &gnu_shift, &gnu_nbuckets);
-
- /* Create the .gnu.hash section data structures. */
- Elf_Scn *hashscn = elf_getscn (ld_state.outelf, ld_state.gnuhashscnidx);
- xelf_getshdr (hashscn, shdr);
- Elf_Data *hashdata = elf_newdata (hashscn);
- if (shdr == NULL || hashdata == NULL)
- error (EXIT_FAILURE, 0, gettext ("\
-cannot create GNU hash table section for output file: %s"),
- elf_errmsg (-1));
-
- shdr->sh_link = ld_state.dynsymscnidx;
- (void) xelf_update_shdr (hashscn, shdr);
-
- hashdata->d_size = (xelf_fsize (ld_state.outelf, ELF_T_ADDR,
- gnu_bitmask_nwords)
- + (4 + gnu_nbuckets + nsym_dyn) * sizeof (Elf32_Word));
- hashdata->d_buf = xcalloc (1, hashdata->d_size);
- hashdata->d_align = sizeof (Elf32_Word);
- hashdata->d_type = ELF_T_WORD;
- hashdata->d_off = 0;
-
- ((Elf32_Word *) hashdata->d_buf)[0] = gnu_nbuckets;
- ((Elf32_Word *) hashdata->d_buf)[2] = gnu_bitmask_nwords;
- ((Elf32_Word *) hashdata->d_buf)[3] = gnu_shift;
- gnu_bitmask = &((Elf32_Word *) hashdata->d_buf)[4];
- gnu_buckets = &gnu_bitmask[xelf_fsize (ld_state.outelf, ELF_T_ADDR,
- gnu_bitmask_nwords)
- / sizeof (*gnu_buckets)];
- gnu_chain = &gnu_buckets[gnu_nbuckets];
-#ifndef NDEBUG
- void *endp = &gnu_chain[nsym_dyn];
-#endif
- assert (endp == (void *) ((char *) hashdata->d_buf + hashdata->d_size));
-
-
- size_t *remap = xmalloc (nsym_dyn * sizeof (size_t));
-#ifndef NDEBUG
- size_t nsym_dyn_cnt = 1;
-#endif
- for (size_t cnt = nsym_local; cnt < nsym; ++cnt)
- if (symstrent[cnt] != NULL)
- {
- assert (ndxtosym[cnt]->outdynsymidx > 0);
- assert (ndxtosym[cnt]->outdynsymidx < nsym_dyn);
- remap[ndxtosym[cnt]->outdynsymidx] = cnt;
-#ifndef NDEBUG
- ++nsym_dyn_cnt;
-#endif
- }
- assert (nsym_dyn_cnt == nsym_dyn);
-
- // XXX Until we can rely on qsort_r use global variables.
- global_hashcodes = gnuhashcodes;
- global_nbuckets = gnu_nbuckets;
- qsort (remap + 1, nsym_dyn - 1, sizeof (size_t), sortfct_hashval);
-
- bool bm32 = (xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1)
- == sizeof (Elf32_Word));
-
- size_t first_defined = 0;
- Elf64_Word bitmask_idxbits = gnu_bitmask_nwords - 1;
- Elf32_Word last_bucket = 0;
- for (size_t cnt = 1; cnt < nsym_dyn; ++cnt)
- {
- if (first_defined == 0)
- {
- if (! ndxtosym[remap[cnt]]->defined
- || ndxtosym[remap[cnt]]->in_dso)
- goto next;
-
- ((Elf32_Word *) hashdata->d_buf)[1] = first_defined = cnt;
- }
-
- Elf32_Word hval = gnuhashcodes[ndxtosym[remap[cnt]]->outdynsymidx];
-
- if (bm32)
- {
- Elf32_Word *bsw = &gnu_bitmask[(hval / 32) & bitmask_idxbits];
- assert ((void *) gnu_bitmask <= (void *) bsw);
- assert ((void *) bsw < (void *) gnu_buckets);
- *bsw |= 1 << (hval & 31);
- *bsw |= 1 << ((hval >> gnu_shift) & 31);
- }
- else
- {
- Elf64_Word *bsw = &((Elf64_Word *) gnu_bitmask)[(hval / 64)
- & bitmask_idxbits];
- assert ((void *) gnu_bitmask <= (void *) bsw);
- assert ((void *) bsw < (void *) gnu_buckets);
- *bsw |= 1 << (hval & 63);
- *bsw |= 1 << ((hval >> gnu_shift) & 63);
- }
-
- size_t this_bucket = hval % gnu_nbuckets;
- if (cnt == first_defined || this_bucket != last_bucket)
- {
- if (cnt != first_defined)
- {
- /* Terminate the previous chain. */
- assert ((void *) &gnu_chain[cnt - first_defined - 1] < endp);
- gnu_chain[cnt - first_defined - 1] |= 1;
- }
-
- assert (this_bucket < gnu_nbuckets);
- gnu_buckets[this_bucket] = cnt;
- last_bucket = this_bucket;
- }
-
- assert (cnt >= first_defined);
- assert (cnt - first_defined < nsym_dyn);
- gnu_chain[cnt - first_defined] = hval & ~1u;
-
- next:
- ndxtosym[remap[cnt]]->outdynsymidx = cnt;
- }
-
- /* Terminate the last chain. */
- if (first_defined != 0)
- {
- assert (nsym_dyn > first_defined);
- assert (nsym_dyn - first_defined - 1 < nsym_dyn);
- gnu_chain[nsym_dyn - first_defined - 1] |= 1;
-
- hashdata->d_size -= first_defined * sizeof (Elf32_Word);
- }
- else
- /* We do not need any hash table. */
- // XXX
- do { } while (0);
-
- free (remap);
-}
-
-
-/* Create the SysV-style hash table. */
-static void
-create_hash (size_t nsym_local, size_t nsym, size_t nsym_dyn,
- Elf32_Word *hashcodes)
-{
- size_t nbucket = 0;
- Elf32_Word *bucket = NULL;
- Elf32_Word *chain = NULL;
- XElf_Shdr_vardef (shdr);
-
- /* Determine the "optimal" bucket size. If we also generate the
- new-style hash function there is no need to waste effort and
- space on the old one which should not be used. Make it as small
- as possible. */
- if (GENERATE_GNU_HASH)
- nbucket = 1;
- else
- nbucket = optimal_bucket_size (hashcodes, nsym_dyn, ld_state.optlevel);
- /* Create the .hash section data structures. */
- Elf_Scn *hashscn = elf_getscn (ld_state.outelf, ld_state.hashscnidx);
- xelf_getshdr (hashscn, shdr);
- Elf_Data *hashdata = elf_newdata (hashscn);
- if (shdr == NULL || hashdata == NULL)
- error (EXIT_FAILURE, 0, gettext ("\
-cannot create hash table section for output file: %s"),
- elf_errmsg (-1));
-
- shdr->sh_link = ld_state.dynsymscnidx;
- (void) xelf_update_shdr (hashscn, shdr);
-
- hashdata->d_size = (2 + nsym_dyn + nbucket) * sizeof (Elf32_Word);
- hashdata->d_buf = xcalloc (1, hashdata->d_size);
- hashdata->d_align = sizeof (Elf32_Word);
- hashdata->d_type = ELF_T_WORD;
- hashdata->d_off = 0;
-
- ((Elf32_Word *) hashdata->d_buf)[0] = nbucket;
- ((Elf32_Word *) hashdata->d_buf)[1] = nsym_dyn;
- bucket = &((Elf32_Word *) hashdata->d_buf)[2];
- chain = &((Elf32_Word *) hashdata->d_buf)[2 + nbucket];
-
- for (size_t cnt = nsym_local; cnt < nsym; ++cnt)
- if (symstrent[cnt] != NULL)
- {
- size_t dynidx = ndxtosym[cnt]->outdynsymidx;
- size_t hashidx = hashcodes[dynidx] % nbucket;
- if (bucket[hashidx] == 0)
- bucket[hashidx] = dynidx;
- else
- {
- hashidx = bucket[hashidx];
- while (chain[hashidx] != 0)
- hashidx = chain[hashidx];
-
- chain[hashidx] = dynidx;
- }
- }
-}
-
-
-static void
-create_build_id_section (Elf_Scn *scn)
-{
- /* We know how large the section will be so we can create it now. */
- Elf_Data *d = elf_newdata (scn);
- if (d == NULL)
- error (EXIT_FAILURE, 0, gettext ("cannot create build ID section: %s"),
- elf_errmsg (-1));
-
- d->d_type = ELF_T_BYTE;
- d->d_version = EV_CURRENT;
-
- /* The note section header. */
- assert (sizeof (Elf32_Nhdr) == sizeof (Elf64_Nhdr));
- d->d_size = sizeof (GElf_Nhdr);
- /* The string is four bytes long. */
- d->d_size += sizeof (ELF_NOTE_GNU);
- assert (d->d_size % 4 == 0);
-
- if (strcmp (ld_state.build_id, "md5") == 0
- || strcmp (ld_state.build_id, "uuid") == 0)
- d->d_size += 16;
- else if (strcmp (ld_state.build_id, "sha1") == 0)
- d->d_size += 20;
- else
- {
- assert (ld_state.build_id[0] == '0' && ld_state.build_id[1] == 'x');
- /* Use an upper limit of the possible number of bytes generated
- from the string. */
- d->d_size += strlen (ld_state.build_id) / 2;
- }
-
- d->d_buf = xcalloc (d->d_size, 1);
- d->d_off = 0;
- d->d_align = 0;
-}
-
-
-static void
-compute_hash_sum (void (*hashfct) (const void *, size_t, void *), void *ctx)
-{
- /* The call cannot fail. */
- size_t shstrndx;
- (void) elf_getshstrndx (ld_state.outelf, &shstrndx);
-
- const char *ident = elf_getident (ld_state.outelf, NULL);
- bool same_byte_order = ((ident[EI_DATA] == ELFDATA2LSB
- && __BYTE_ORDER == __LITTLE_ENDIAN)
- || (ident[EI_DATA] == ELFDATA2MSB
- && __BYTE_ORDER == __BIG_ENDIAN));
-
- /* Iterate over all sections to find those which are not strippable. */
- Elf_Scn *scn = NULL;
- while ((scn = elf_nextscn (ld_state.outelf, scn)) != NULL)
- {
- /* Get the section header. */
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
- assert (shdr != NULL);
-
- if (SECTION_STRIP_P (shdr, elf_strptr (ld_state.outelf, shstrndx,
- shdr->sh_name), true))
- /* The section can be stripped. Don't use it. */
- continue;
-
- /* Do not look at NOBITS sections. */
- if (shdr->sh_type == SHT_NOBITS)
- continue;
-
- /* Iterate through the list of data blocks. */
- Elf_Data *data = NULL;
- while ((data = INTUSE(elf_getdata) (scn, data)) != NULL)
- /* If the file byte order is the same as the host byte order
- process the buffer directly. If the data is just a stream
- of bytes which the library will not convert we can use it
- as well. */
- if (likely (same_byte_order) || data->d_type == ELF_T_BYTE)
- hashfct (data->d_buf, data->d_size, ctx);
- else
- {
- /* Convert the data to file byte order. */
- if (gelf_xlatetof (ld_state.outelf, data, data, ident[EI_DATA])
- == NULL)
- error (EXIT_FAILURE, 0, gettext ("\
-cannot convert section data to file format: %s"),
- elf_errmsg (-1));
-
- hashfct (data->d_buf, data->d_size, ctx);
-
- /* And convert it back. */
- if (gelf_xlatetom (ld_state.outelf, data, data, ident[EI_DATA])
- == NULL)
- error (EXIT_FAILURE, 0, gettext ("\
-cannot convert section data to memory format: %s"),
- elf_errmsg (-1));
- }
- }
-}
-
-
-/* Iterate over the sections */
-static void
-compute_build_id (void)
-{
- Elf_Data *d = elf_getdata (elf_getscn (ld_state.outelf,
- ld_state.buildidscnidx), NULL);
- assert (d != NULL);
-
- GElf_Nhdr *hdr = d->d_buf;
- hdr->n_namesz = sizeof (ELF_NOTE_GNU);
- hdr->n_type = NT_GNU_BUILD_ID;
- char *dp = mempcpy (hdr + 1, ELF_NOTE_GNU, sizeof (ELF_NOTE_GNU));
-
- if (strcmp (ld_state.build_id, "sha1") == 0)
- {
- /* Compute the SHA1 sum of various parts of the generated file.
- We compute the hash sum over the external representation. */
- struct sha1_ctx ctx;
- sha1_init_ctx (&ctx);
-
- /* Compute the hash sum by running over all sections. */
- compute_hash_sum ((void (*) (const void *, size_t, void *)) sha1_process_bytes,
- &ctx);
-
- /* We are done computing the checksum. */
- (void) sha1_finish_ctx (&ctx, dp);
-
- hdr->n_descsz = SHA1_DIGEST_SIZE;
- }
- else if (strcmp (ld_state.build_id, "md5") == 0)
- {
- /* Compute the MD5 sum of various parts of the generated file.
- We compute the hash sum over the external representation. */
- struct md5_ctx ctx;
- md5_init_ctx (&ctx);
-
- /* Compute the hash sum by running over all sections. */
- compute_hash_sum ((void (*) (const void *, size_t, void *)) md5_process_bytes,
- &ctx);
-
- /* We are done computing the checksum. */
- (void) md5_finish_ctx (&ctx, dp);
-
- hdr->n_descsz = MD5_DIGEST_SIZE;
- }
- else if (strcmp (ld_state.build_id, "uuid") == 0)
- {
- int fd = open ("/dev/urandom", O_RDONLY);
- if (fd == -1)
- error (EXIT_FAILURE, errno, gettext ("cannot open '%s'"),
- "/dev/urandom");
-
- if (TEMP_FAILURE_RETRY (read (fd, dp, 16)) != 16)
- error (EXIT_FAILURE, 0, gettext ("cannot read enough data for UUID"));
-
- close (fd);
-
- hdr->n_descsz = 16;
- }
- else
- {
- const char *cp = ld_state.build_id + 2;
-
- /* The form of the string has been verified before so here we can
- simplify the scanning. */
- do
- {
- if (isxdigit (cp[0]))
- {
- char ch1 = tolower (cp[0]);
- char ch2 = tolower (cp[1]);
-
- *dp++ = (((isdigit (ch1) ? ch1 - '0' : ch1 - 'a' + 10) << 4)
- | (isdigit (ch2) ? ch2 - '0' : ch2 - 'a' + 10));
- }
- else
- ++cp;
- }
- while (*cp != '\0');
- }
-}
-
-
-/* Create the output file.
-
- For relocatable files what basically has to happen is that all
- sections from all input files are written into the output file.
- Sections with the same name are combined (offsets adjusted
- accordingly). The symbol tables are combined in one single table.
- When stripping certain symbol table entries are omitted.
-
- For executables (shared or not) we have to create the program header,
- additional sections like the .interp, eventually (in addition) create
- a dynamic symbol table and a dynamic section. Also the relocations
- have to be processed differently. */
-static int
-ld_generic_create_outfile (struct ld_state *statep)
-{
- struct scnlist
- {
- size_t scnidx;
- struct scninfo *scninfo;
- struct scnlist *next;
- };
- struct scnlist *rellist = NULL;
- size_t cnt;
- Elf_Scn *symscn = NULL;
- Elf_Scn *xndxscn = NULL;
- Elf_Scn *strscn = NULL;
- struct Ebl_Strtab *strtab = NULL;
- struct Ebl_Strtab *dynstrtab = NULL;
- XElf_Shdr_vardef (shdr);
- Elf_Data *data;
- Elf_Data *symdata = NULL;
- Elf_Data *xndxdata = NULL;
- struct usedfiles *file;
- size_t nsym;
- size_t nsym_local;
- size_t nsym_allocated;
- size_t nsym_dyn = 0;
- Elf32_Word *dblindirect = NULL;
-#ifndef NDEBUG
- bool need_xndx;
-#endif
- Elf_Scn *shstrtab_scn;
- size_t shstrtab_ndx;
- XElf_Ehdr_vardef (ehdr);
- struct Ebl_Strent *symtab_ent = NULL;
- struct Ebl_Strent *xndx_ent = NULL;
- struct Ebl_Strent *strtab_ent = NULL;
- struct Ebl_Strent *shstrtab_ent;
- struct scngroup *groups;
- Elf_Scn *dynsymscn = NULL;
- Elf_Data *dynsymdata = NULL;
- Elf_Data *dynstrdata = NULL;
- Elf32_Word *hashcodes = NULL;
- Elf32_Word *gnuhashcodes = NULL;
- size_t nsym_dyn_allocated = 0;
- Elf_Scn *versymscn = NULL;
- Elf_Data *versymdata = NULL;
-
- if (ld_state.need_symtab)
- {
- /* First create the symbol table. We need the symbol section itself
- and the string table for it. */
- symscn = elf_newscn (ld_state.outelf);
- ld_state.symscnidx = elf_ndxscn (symscn);
- symdata = elf_newdata (symscn);
- if (symdata == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("cannot create symbol table for output file: %s"),
- elf_errmsg (-1));
-
- symdata->d_type = ELF_T_SYM;
- /* This is an estimated size, but it will definitely cap the real value.
- We might have to adjust the number later. */
- nsym_allocated = (1 + ld_state.nsymtab + ld_state.nplt + ld_state.ngot
- + ld_state.nusedsections + ld_state.nlscript_syms);
- symdata->d_size = xelf_fsize (ld_state.outelf, ELF_T_SYM,
- nsym_allocated);
-
- /* Optionally the extended section table. */
- /* XXX Is SHN_LORESERVE correct? Do we need some other sections? */
- if (unlikely (ld_state.nusedsections >= SHN_LORESERVE))
- {
- xndxscn = elf_newscn (ld_state.outelf);
- ld_state.xndxscnidx = elf_ndxscn (xndxscn);
-
- xndxdata = elf_newdata (xndxscn);
- if (xndxdata == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("cannot create symbol table for output file: %s"),
- elf_errmsg (-1));
-
- /* The following relies on the fact that Elf32_Word and Elf64_Word
- have the same size. */
- xndxdata->d_type = ELF_T_WORD;
- /* This is an estimated size, but it will definitely cap the
- real value. we might have to adjust the number later. */
- xndxdata->d_size = xelf_fsize (ld_state.outelf, ELF_T_WORD,
- nsym_allocated);
- /* The first entry is left empty, clear it here and now. */
- xndxdata->d_buf = memset (xmalloc (xndxdata->d_size), '\0',
- xelf_fsize (ld_state.outelf, ELF_T_WORD,
- 1));
- xndxdata->d_off = 0;
- /* XXX Should use an ebl function. */
- xndxdata->d_align = sizeof (Elf32_Word);
- }
- }
- else
- {
- assert (ld_state.need_dynsym);
-
- /* First create the symbol table. We need the symbol section itself
- and the string table for it. */
- symscn = elf_getscn (ld_state.outelf, ld_state.dynsymscnidx);
- symdata = elf_newdata (symscn);
- if (symdata == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("cannot create symbol table for output file: %s"),
- elf_errmsg (-1));
-
- symdata->d_version = EV_CURRENT;
- symdata->d_type = ELF_T_SYM;
- /* This is an estimated size, but it will definitely cap the real value.
- We might have to adjust the number later. */
- nsym_allocated = (1 + ld_state.nsymtab + ld_state.nplt + ld_state.ngot
- - ld_state.nlocalsymbols + ld_state.nlscript_syms);
- symdata->d_size = xelf_fsize (ld_state.outelf, ELF_T_SYM,
- nsym_allocated);
- }
-
- /* The first entry is left empty, clear it here and now. */
- symdata->d_buf = memset (xmalloc (symdata->d_size), '\0',
- xelf_fsize (ld_state.outelf, ELF_T_SYM, 1));
- symdata->d_off = 0;
- /* XXX This is ugly but how else can it be done. */
- symdata->d_align = xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1);
-
- /* Allocate another array to keep track of the handles for the symbol
- names. */
- symstrent = (struct Ebl_Strent **) xcalloc (nsym_allocated,
- sizeof (struct Ebl_Strent *));
-
- /* By starting at 1 we effectively add a null entry. */
- nsym = 1;
-
- /* Iteration over all sections. */
- for (cnt = 0; cnt < ld_state.nallsections; ++cnt)
- {
- struct scnhead *head = ld_state.allsections[cnt];
- Elf_Scn *scn;
- struct scninfo *runp;
- XElf_Off offset;
- Elf32_Word xndx;
-
- /* Don't handle unused sections at all. */
- if (!head->used)
- continue;
-
- /* Get the section handle. */
- scn = elf_getscn (ld_state.outelf, head->scnidx);
-
- if (unlikely (head->kind == scn_dot_interp))
- {
- Elf_Data *outdata = elf_newdata (scn);
- if (outdata == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("cannot create section for output file: %s"),
- elf_errmsg (-1));
-
- /* This is the string we'll put in the section. */
- const char *interp = ld_state.interp ?: "/lib/ld.so.1";
-
- /* Create the section data. */
- outdata->d_buf = (void *) interp;
- outdata->d_size = strlen (interp) + 1;
- outdata->d_type = ELF_T_BYTE;
- outdata->d_off = 0;
- outdata->d_align = 1;
- outdata->d_version = EV_CURRENT;
-
- /* Remember the index of this section. */
- ld_state.interpscnidx = head->scnidx;
-
- continue;
- }
-
- if (unlikely (head->kind == scn_dot_got))
- {
- /* Remember the index of this section. */
- ld_state.gotscnidx = elf_ndxscn (scn);
-
- /* Give the backend the change to initialize the section. */
- INITIALIZE_GOT (&ld_state, scn);
-
- continue;
- }
-
- if (unlikely (head->kind == scn_dot_gotplt))
- {
- /* Remember the index of this section. */
- ld_state.gotpltscnidx = elf_ndxscn (scn);
-
- /* Give the backend the change to initialize the section. */
- INITIALIZE_GOTPLT (&ld_state, scn);
-
- continue;
- }
-
- if (unlikely (head->kind == scn_dot_dynrel))
- {
- Elf_Data *outdata;
-
- outdata = elf_newdata (scn);
- if (outdata == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("cannot create section for output file: %s"),
- elf_errmsg (-1));
-
- outdata->d_size = ld_state.relsize_total;
- outdata->d_buf = xmalloc (outdata->d_size);
- outdata->d_type = (REL_TYPE (&ld_state) == DT_REL
- ? ELF_T_REL : ELF_T_RELA);
- outdata->d_off = 0;
- outdata->d_align = xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1);
-
- /* Remember the index of this section. */
- ld_state.reldynscnidx = elf_ndxscn (scn);
-
- continue;
- }
-
- if (unlikely (head->kind == scn_dot_dynamic))
- {
- /* Only create the data for now. */
- Elf_Data *outdata;
-
- /* Account for a few more entries we have to add. */
- if (ld_state.dt_flags != 0)
- ++ld_state.ndynamic;
- if (ld_state.dt_flags_1 != 0)
- ++ld_state.ndynamic;
- if (ld_state.dt_feature_1 != 0)
- ++ld_state.ndynamic;
-
- outdata = elf_newdata (scn);
- if (outdata == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("cannot create section for output file: %s"),
- elf_errmsg (-1));
-
- /* Create the section data. */
- outdata->d_size = xelf_fsize (ld_state.outelf, ELF_T_DYN,
- ld_state.ndynamic);
- outdata->d_buf = xcalloc (1, outdata->d_size);
- outdata->d_type = ELF_T_DYN;
- outdata->d_off = 0;
- outdata->d_align = xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1);
-
- /* Remember the index of this section. */
- ld_state.dynamicscnidx = elf_ndxscn (scn);
-
- continue;
- }
-
- if (unlikely (head->kind == scn_dot_dynsym))
- {
- /* We already know the section index. */
- assert (ld_state.dynsymscnidx == elf_ndxscn (scn));
-
- continue;
- }
-
- if (unlikely (head->kind == scn_dot_dynstr))
- {
- /* Remember the index of this section. */
- ld_state.dynstrscnidx = elf_ndxscn (scn);
-
- /* Create the string table. */
- dynstrtab = ebl_strtabinit (true);
-
- /* XXX TBI
- We have to add all the strings which are needed in the
- dynamic section here. This means DT_FILTER,
- DT_AUXILIARY, ... entries. */
- if (ld_state.ndsofiles > 0)
- {
- struct usedfiles *frunp = ld_state.dsofiles;
-
- do
- if (! frunp->as_needed || frunp->used)
- frunp->sonameent = ebl_strtabadd (dynstrtab, frunp->soname,
- 0);
- while ((frunp = frunp->next) != ld_state.dsofiles);
- }
-
-
- /* Add the runtime path information. The strings are stored
- in the .dynstr section. If both rpath and runpath are defined
- the runpath information is used. */
- if (ld_state.runpath != NULL || ld_state.rpath != NULL)
- {
- struct pathelement *startp;
- struct pathelement *prunp;
- int tag;
- size_t len;
- char *str;
- char *cp;
-
- if (ld_state.runpath != NULL)
- {
- startp = ld_state.runpath;
- tag = DT_RUNPATH;
- }
- else
- {
- startp = ld_state.rpath;
- tag = DT_RPATH;
- }
-
- /* Determine how long the string will be. */
- for (len = 0, prunp = startp; prunp != NULL; prunp = prunp->next)
- len += strlen (prunp->pname) + 1;
-
- cp = str = (char *) obstack_alloc (&ld_state.smem, len);
- /* Copy the string. */
- for (prunp = startp; prunp != NULL; prunp = prunp->next)
- {
- cp = stpcpy (cp, prunp->pname);
- *cp++ = ':';
- }
- /* Remove the last colon. */
- cp[-1] = '\0';
-
- /* Remember the values until we can generate the dynamic
- section. */
- ld_state.rxxpath_strent = ebl_strtabadd (dynstrtab, str, len);
- ld_state.rxxpath_tag = tag;
- }
-
- continue;
- }
-
- if (unlikely (head->kind == scn_dot_hash))
- {
- /* Remember the index of this section. */
- ld_state.hashscnidx = elf_ndxscn (scn);
-
- continue;
- }
-
- if (unlikely (head->kind == scn_dot_gnu_hash))
- {
- /* Remember the index of this section. */
- ld_state.gnuhashscnidx = elf_ndxscn (scn);
-
- continue;
- }
-
- if (unlikely (head->kind == scn_dot_plt))
- {
- /* Remember the index of this section. */
- ld_state.pltscnidx = elf_ndxscn (scn);
-
- /* Give the backend the change to initialize the section. */
- INITIALIZE_PLT (&ld_state, scn);
-
- continue;
- }
-
- if (unlikely (head->kind == scn_dot_pltrel))
- {
- /* Remember the index of this section. */
- ld_state.pltrelscnidx = elf_ndxscn (scn);
-
- /* Give the backend the change to initialize the section. */
- INITIALIZE_PLTREL (&ld_state, scn);
-
- continue;
- }
-
- if (unlikely (head->kind == scn_dot_version))
- {
- /* Remember the index of this section. */
- ld_state.versymscnidx = elf_ndxscn (scn);
-
- continue;
- }
-
- if (unlikely (head->kind == scn_dot_version_r))
- {
- /* Remember the index of this section. */
- ld_state.verneedscnidx = elf_ndxscn (scn);
-
- continue;
- }
-
- if (unlikely (head->kind == scn_dot_note_gnu_build_id))
- {
- /* Remember the index of this section. */
- ld_state.buildidscnidx = elf_ndxscn (scn);
-
- create_build_id_section (scn);
-
- continue;
- }
-
- /* If we come here we must be handling a normal section. */
- assert (head->kind == scn_normal);
-
- /* Create an STT_SECTION entry in the symbol table. But not for
- the symbolic symbol table. */
- if (ld_state.need_symtab)
- {
- /* XXX Can we be cleverer and do this only if needed? */
- XElf_Sym_vardef (sym);
-
- /* Optimization ahead: in the native linker we get a pointer
- to the final location so that the following code writes
- directly in the correct place. Otherwise we write into
- the local variable first. */
- xelf_getsym_ptr (symdata, nsym, sym);
-
- /* Usual section symbol: local, no specific information,
- except the section index. The offset here is zero, the
- start address will later be added. */
- sym->st_name = 0;
- sym->st_info = XELF_ST_INFO (STB_LOCAL, STT_SECTION);
- sym->st_other = 0;
- sym->st_value = 0;
- sym->st_size = 0;
- /* In relocatable files the section index can be too big for
- the ElfXX_Sym struct. we have to deal with the extended
- symbol table. */
- if (likely (head->scnidx < SHN_LORESERVE))
- {
- sym->st_shndx = head->scnidx;
- xndx = 0;
- }
- else
- {
- sym->st_shndx = SHN_XINDEX;
- xndx = head->scnidx;
- }
- /* Commit the change. See the optimization above, this does
- not change the symbol table entry. But the extended
- section index table entry is always written, if there is
- such a table. */
- assert (nsym < nsym_allocated);
- xelf_update_symshndx (symdata, xndxdata, nsym, sym, xndx, 0);
-
- /* Remember the symbol's index in the symbol table. */
- head->scnsymidx = nsym++;
- }
-
- if (head->type == SHT_REL || head->type == SHT_RELA)
- {
- /* Remember that we have to fill in the symbol table section
- index. */
- if (ld_state.file_type == relocatable_file_type)
- {
- struct scnlist *newp;
-
- newp = (struct scnlist *) alloca (sizeof (*newp));
- newp->scnidx = head->scnidx;
- newp->scninfo = head->last->next;
-#ifndef NDEBUG
- newp->next = NULL;
-#endif
- SNGL_LIST_PUSH (rellist, newp);
- }
- else
- {
- /* When we create an executable or a DSO we don't simply
- copy the existing relocations. Instead many will be
- resolved, others will be converted. Create a data buffer
- large enough to contain the contents which we will fill
- in later. */
- int type = head->type == SHT_REL ? ELF_T_REL : ELF_T_RELA;
-
- data = elf_newdata (scn);
- if (data == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("cannot create section for output file: %s"),
- elf_errmsg (-1));
-
- data->d_size = xelf_fsize (ld_state.outelf, type, head->relsize);
- data->d_buf = xcalloc (data->d_size, 1);
- data->d_type = type;
- data->d_align = xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1);
- data->d_off = 0;
-
- continue;
- }
- }
-
- /* Recognize string and merge flag and handle them. */
- if (head->flags & SHF_MERGE)
- {
- /* We merge the contents of the sections. For this we do
- not look at the contents of section directly. Instead we
- look at the symbols of the section. */
- Elf_Data *outdata;
-
- /* Concatenate the lists of symbols for all sections.
-
- XXX In case any input section has no symbols associated
- (this happens for debug sections) we cannot use this
- method. Implement parsing the other debug sections and
- find the string pointers. For now we don't merge. */
- runp = head->last->next;
- if (runp->symbols == NULL)
- {
- head->flags &= ~SHF_MERGE;
- goto no_merge;
- }
- head->symbols = runp->symbols;
-
- while ((runp = runp->next) != head->last->next)
- {
- if (runp->symbols == NULL)
- {
- head->flags &= ~SHF_MERGE;
- head->symbols = NULL;
- goto no_merge;
- }
-
- struct symbol *oldhead = head->symbols->next_in_scn;
-
- head->symbols->next_in_scn = runp->symbols->next_in_scn;
- runp->symbols->next_in_scn = oldhead;
- head->symbols = runp->symbols;
- }
-
- /* Create the output section. */
- outdata = elf_newdata (scn);
- if (outdata == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("cannot create section for output file: %s"),
- elf_errmsg (-1));
-
- /* We use different merging algorithms for performance
- reasons. We can easily handle single-byte and
- wchar_t-wide character strings. All other cases (which
- really should happen in real life) are handled by the
- generic code. */
- if (SCNINFO_SHDR (head->last->shdr).sh_entsize == 1
- && (head->flags & SHF_STRINGS))
- {
- /* Simple, single-byte string matching. */
- struct Ebl_Strtab *mergestrtab;
- struct symbol *symrunp;
- Elf_Data *locsymdata = NULL;
- Elf_Data *locdata = NULL;
-
- mergestrtab = ebl_strtabinit (false);
-
- symrunp = head->symbols->next_in_scn;
- file = NULL;
- do
- {
- /* Accelarate the loop. We cache the file
- information since it might very well be the case
- that the previous entry was from the same
- file. */
- if (symrunp->file != file)
- {
- /* Remember the file. */
- file = symrunp->file;
- /* Symbol table data from that file. */
- locsymdata = file->symtabdata;
- /* String section data. */
- locdata = elf_rawdata (file->scninfo[symrunp->scndx].scn,
- NULL);
- assert (locdata != NULL);
- /* While we are at it, remember the output
- section. If we don't access the string data
- section the section won't be in the output
- file. So it is sufficient to do the work
- here. */
- file->scninfo[symrunp->scndx].outscnndx = head->scnidx;
- }
-
- /* Get the symbol information. This provides us the
- offset into the string data section. */
- XElf_Sym_vardef (sym);
- xelf_getsym (locsymdata, symrunp->symidx, sym);
- assert (sym != NULL);
-
- /* Get the data from the file. Note that we access
- the raw section data; no endian-ness issues with
- single-byte strings. */
- symrunp->merge.handle
- = ebl_strtabadd (mergestrtab,
- (char *) locdata->d_buf + sym->st_value,
- 0);
- }
- while ((symrunp = symrunp->next_in_scn)
- != head->symbols->next_in_scn);
-
- /* All strings have been added. Create the final table. */
- ebl_strtabfinalize (mergestrtab, outdata);
-
- /* Compute the final offsets in the section. */
- symrunp = runp->symbols;
- do
- {
- symrunp->merge.value
- = ebl_strtaboffset (symrunp->merge.handle);
- symrunp->merged = 1;
- }
- while ((symrunp = symrunp->next_in_scn) != runp->symbols);
-
- /* We don't need the string table anymore. */
- ebl_strtabfree (mergestrtab);
- }
- else if (likely (SCNINFO_SHDR (head->last->shdr).sh_entsize
- == sizeof (wchar_t))
- && likely (head->flags & SHF_STRINGS))
- {
- /* Simple, wchar_t string merging. */
- struct Ebl_WStrtab *mergestrtab;
- struct symbol *symrunp;
- Elf_Data *locsymdata = NULL;
- Elf_Data *locdata = NULL;
-
- mergestrtab = ebl_wstrtabinit (false);
-
- symrunp = runp->symbols;
- file = NULL;
- do
- {
- /* Accelarate the loop. We cache the file
- information since it might very well be the case
- that the previous entry was from the same
- file. */
- if (symrunp->file != file)
- {
- /* Remember the file. */
- file = symrunp->file;
- /* Symbol table data from that file. */
- locsymdata = file->symtabdata;
- /* String section data. */
- locdata = elf_rawdata (file->scninfo[symrunp->scndx].scn,
- NULL);
- assert (locdata != NULL);
-
- /* While we are at it, remember the output
- section. If we don't access the string data
- section the section won't be in the output
- file. So it is sufficient to do the work
- here. */
- file->scninfo[symrunp->scndx].outscnndx = head->scnidx;
- }
-
- /* Get the symbol information. This provides us the
- offset into the string data section. */
- XElf_Sym_vardef (sym);
- xelf_getsym (locsymdata, symrunp->symidx, sym);
- assert (sym != NULL);
-
- /* Get the data from the file. Using the raw
- section data here is possible since we don't
- interpret the string themselves except for
- looking for the wide NUL character. The NUL
- character has fortunately the same representation
- regardless of the byte order. */
- symrunp->merge.handle
- = ebl_wstrtabadd (mergestrtab,
- (wchar_t *) ((char *) locdata->d_buf
- + sym->st_value), 0);
- }
- while ((symrunp = symrunp->next_in_scn) != runp->symbols);
-
- /* All strings have been added. Create the final table. */
- ebl_wstrtabfinalize (mergestrtab, outdata);
-
- /* Compute the final offsets in the section. */
- symrunp = runp->symbols;
- do
- {
- symrunp->merge.value
- = ebl_wstrtaboffset (symrunp->merge.handle);
- symrunp->merged = 1;
- }
- while ((symrunp = symrunp->next_in_scn) != runp->symbols);
-
- /* We don't need the string table anymore. */
- ebl_wstrtabfree (mergestrtab);
- }
- else
- {
- /* Non-standard merging. */
- struct Ebl_GStrtab *mergestrtab;
- struct symbol *symrunp;
- Elf_Data *locsymdata = NULL;
- Elf_Data *locdata = NULL;
- /* If this is no string section the length of each "string"
- is always one. */
- unsigned int len = (head->flags & SHF_STRINGS) ? 0 : 1;
-
- /* This is the generic string table functionality. Much
- slower than the specialized code. */
- mergestrtab
- = ebl_gstrtabinit (SCNINFO_SHDR (head->last->shdr).sh_entsize,
- false);
-
- symrunp = runp->symbols;
- file = NULL;
- do
- {
- /* Accelarate the loop. We cache the file
- information since it might very well be the case
- that the previous entry was from the same
- file. */
- if (symrunp->file != file)
- {
- /* Remember the file. */
- file = symrunp->file;
- /* Symbol table data from that file. */
- locsymdata = file->symtabdata;
- /* String section data. */
- locdata = elf_rawdata (file->scninfo[symrunp->scndx].scn,
- NULL);
- assert (locdata != NULL);
-
- /* While we are at it, remember the output
- section. If we don't access the string data
- section the section won't be in the output
- file. So it is sufficient to do the work
- here. */
- file->scninfo[symrunp->scndx].outscnndx = head->scnidx;
- }
-
- /* Get the symbol information. This provides us the
- offset into the string data section. */
- XElf_Sym_vardef (sym);
- xelf_getsym (locsymdata, symrunp->symidx, sym);
- assert (sym != NULL);
-
- /* Get the data from the file. Using the raw
- section data here is possible since we don't
- interpret the string themselves except for
- looking for the wide NUL character. The NUL
- character has fortunately the same representation
- regardless of the byte order. */
- symrunp->merge.handle
- = ebl_gstrtabadd (mergestrtab,
- (char *) locdata->d_buf + sym->st_value,
- len);
- }
- while ((symrunp = symrunp->next_in_scn) != runp->symbols);
-
- /* Create the final table. */
- ebl_gstrtabfinalize (mergestrtab, outdata);
-
- /* Compute the final offsets in the section. */
- symrunp = runp->symbols;
- do
- {
- symrunp->merge.value
- = ebl_gstrtaboffset (symrunp->merge.handle);
- symrunp->merged = 1;
- }
- while ((symrunp = symrunp->next_in_scn) != runp->symbols);
-
- /* We don't need the string table anymore. */
- ebl_gstrtabfree (mergestrtab);
- }
- }
- else
- {
- no_merge:
- assert (head->scnidx == elf_ndxscn (scn));
-
- /* It is important to start with the first list entry (and
- not just any one) to add the sections in the correct
- order. */
- runp = head->last->next;
- offset = 0;
- do
- {
- Elf_Data *outdata = elf_newdata (scn);
- if (outdata == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("cannot create section for output file: %s"),
- elf_errmsg (-1));
-
- /* Exceptional case: if we synthesize a data block SCN
- is NULL and the sectio header info must be for a
- SHT_NOBITS block and the size and alignment are
- filled in. */
- if (likely (runp->scn != NULL))
- {
- data = elf_getdata (runp->scn, NULL);
- assert (data != NULL);
-
- /* We reuse the data buffer in the input file. */
- *outdata = *data;
-
- /* Given that we read the input file from disk we know there
- cannot be another data part. */
- assert (elf_getdata (runp->scn, data) == NULL);
- }
- else
- {
- /* Must be a NOBITS section. */
- assert (SCNINFO_SHDR (runp->shdr).sh_type == SHT_NOBITS);
-
- outdata->d_buf = NULL; /* Not needed. */
- outdata->d_type = ELF_T_BYTE;
- outdata->d_version = EV_CURRENT;
- outdata->d_size = SCNINFO_SHDR (runp->shdr).sh_size;
- outdata->d_align = SCNINFO_SHDR (runp->shdr).sh_addralign;
- }
-
- XElf_Off align = MAX (1, outdata->d_align);
- assert (powerof2 (align));
- offset = ((offset + align - 1) & ~(align - 1));
-
- runp->offset = offset;
- runp->outscnndx = head->scnidx;
- runp->allsectionsidx = cnt;
-
- outdata->d_off = offset;
-
- offset += outdata->d_size;
- }
- while ((runp = runp->next) != head->last->next);
-
- /* If necessary add the additional line to the .comment section. */
- if (ld_state.add_ld_comment
- && head->flags == 0
- && head->type == SHT_PROGBITS
- && strcmp (head->name, ".comment") == 0
- && head->entsize == 0)
- {
- Elf_Data *outdata = elf_newdata (scn);
-
- if (outdata == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("cannot create section for output file: %s"),
- elf_errmsg (-1));
-
- outdata->d_buf = (void *) "\0ld (" PACKAGE_NAME ") " PACKAGE_VERSION;
- outdata->d_size = strlen ((char *) outdata->d_buf + 1) + 2;
- outdata->d_off = offset;
- outdata->d_type = ELF_T_BYTE;
- outdata->d_align = 1;
- }
- /* XXX We should create a .comment section if none exists.
- This requires that we early on detect that no such
- section exists. This should probably be implemented
- together with some merging of the section contents.
- Currently identical entries are not merged. */
- }
- }
-
- /* The table we collect the strings in. */
- strtab = ebl_strtabinit (true);
- if (strtab == NULL)
- error (EXIT_FAILURE, errno, gettext ("cannot create string table"));
-
-
-#ifndef NDEBUG
- /* Keep track of the use of the XINDEX. */
- need_xndx = false;
-#endif
-
- /* We we generate a normal symbol table for an executable and the
- --export-dynamic option is not given, we need an extra table
- which keeps track of the symbol entry belonging to the symbol
- table entry. Note that EXPORT_ALL_DYNAMIC is always set if we
- generate a DSO so we do not have to test this separately. */
- ndxtosym = (struct symbol **) xcalloc (nsym_allocated,
- sizeof (struct symbol));
-
- /* Create the special symbol for the GOT section. */
- if (ld_state.got_symbol != NULL)
- {
- assert (nsym < nsym_allocated);
- // XXX Fix so that it works even if no PLT is needed.
- fillin_special_symbol (ld_state.got_symbol, ld_state.gotpltscnidx,
- nsym++, symdata, strtab);
- }
-
- /* Similarly for the dynamic section symbol. */
- if (ld_state.dyn_symbol != NULL)
- {
- assert (nsym < nsym_allocated);
- fillin_special_symbol (ld_state.dyn_symbol, ld_state.dynamicscnidx,
- nsym++, symdata, strtab);
- }
-
- /* Create symbol table entries for the symbols defined in the linker
- script. */
- if (ld_state.lscript_syms != NULL)
- {
- struct symbol *rsym = ld_state.lscript_syms;
- do
- {
- assert (nsym < nsym_allocated);
- fillin_special_symbol (rsym, SHN_ABS, nsym++, symdata, strtab);
- }
- while ((rsym = rsym->next) != NULL);
- }
-
- /* Iterate over all input files to collect the symbols. */
- file = ld_state.relfiles->next;
- symdata = elf_getdata (elf_getscn (ld_state.outelf, ld_state.symscnidx),
- NULL);
-
- do
- {
- size_t maxcnt;
- Elf_Data *insymdata;
- Elf_Data *inxndxdata;
-
- /* There must be no dynamic symbol table when creating
- relocatable files. */
- assert (ld_state.file_type != relocatable_file_type
- || file->dynsymtabdata == NULL);
-
- insymdata = file->symtabdata;
- assert (insymdata != NULL);
- inxndxdata = file->xndxdata;
-
- maxcnt = file->nsymtab;
-
- file->symindirect = (Elf32_Word *) xcalloc (maxcnt, sizeof (Elf32_Word));
-
- /* The dynamic symbol table does not contain local symbols. So
- we skip those entries. */
- for (cnt = ld_state.need_symtab ? 1 : file->nlocalsymbols; cnt < maxcnt;
- ++cnt)
- {
- XElf_Sym_vardef (sym);
- Elf32_Word xndx;
- struct symbol *defp = NULL;
-
- xelf_getsymshndx (insymdata, inxndxdata, cnt, sym, xndx);
- assert (sym != NULL);
-
- if (unlikely (XELF_ST_TYPE (sym->st_info) == STT_SECTION))
- {
- /* Section symbols should always be local but who knows... */
- if (ld_state.need_symtab)
- {
- /* Determine the real section index in the source file.
- Use the XINDEX section content if necessary. We don't
- add this information to the dynamic symbol table. */
- if (sym->st_shndx != SHN_XINDEX)
- xndx = sym->st_shndx;
-
- assert (file->scninfo[xndx].allsectionsidx
- < ld_state.nallsections);
- file->symindirect[cnt] = ld_state.allsections[file->scninfo[xndx].allsectionsidx]->scnsymidx;
- /* Note that the resulting index can be zero here. There is
- no guarantee that the output file will contain all the
- sections the input file did. */
- }
- continue;
- }
-
- if ((ld_state.strip >= strip_all || !ld_state.need_symtab)
- /* XXX Do we need these entries? */
- && XELF_ST_TYPE (sym->st_info) == STT_FILE)
- continue;
-
-#if NATIVE_ELF != 0
- /* Copy old data. We create a temporary copy because the
- symbol might still be discarded. */
- XElf_Sym sym_mem;
- sym_mem = *sym;
- sym = &sym_mem;
-#endif
-
- if (sym->st_shndx != SHN_UNDEF
- && (sym->st_shndx < SHN_LORESERVE
- || sym->st_shndx == SHN_XINDEX))
- {
- /* If we are creating an executable with no normal
- symbol table and we do not export all symbols and
- this symbol is not defined in a DSO as well, ignore
- it. */
- if (!ld_state.export_all_dynamic && !ld_state.need_symtab)
- {
- assert (cnt >= file->nlocalsymbols);
- defp = file->symref[cnt];
- assert (defp != NULL);
-
- if (!defp->in_dso)
- /* Ignore it. */
- continue;
- }
-
- /* Determine the real section index in the source file. Use
- the XINDEX section content if necessary. */
- if (sym->st_shndx != SHN_XINDEX)
- xndx = sym->st_shndx;
-
- sym->st_value += file->scninfo[xndx].offset;
-
- assert (file->scninfo[xndx].outscnndx < SHN_LORESERVE
- || file->scninfo[xndx].outscnndx > SHN_HIRESERVE);
- if (unlikely (file->scninfo[xndx].outscnndx > SHN_LORESERVE))
- {
- /* It is not possible to have an extended section index
- table for the dynamic symbol table. */
- if (!ld_state.need_symtab)
- error (EXIT_FAILURE, 0, gettext ("\
-section index too large in dynamic symbol table"));
-
- assert (xndxdata != NULL);
- sym->st_shndx = SHN_XINDEX;
- xndx = file->scninfo[xndx].outscnndx;
-#ifndef NDEBUG
- need_xndx = true;
-#endif
- }
- else
- {
- sym->st_shndx = file->scninfo[xndx].outscnndx;
- xndx = 0;
- }
- }
- else if (sym->st_shndx == SHN_COMMON || sym->st_shndx == SHN_UNDEF)
- {
- /* Check whether we have a (real) definition for this
- symbol. If this is the case we skip this symbol
- table entry. */
- assert (cnt >= file->nlocalsymbols);
- defp = file->symref[cnt];
- assert (defp != NULL);
-
- assert (sym->st_shndx != SHN_COMMON || defp->defined);
-
- if ((sym->st_shndx == SHN_COMMON && !defp->common)
- || (sym->st_shndx == SHN_UNDEF && defp->defined)
- || defp->added)
- /* Ignore this symbol table entry, there is a
- "better" one or we already added it. */
- continue;
-
- /* Remember that we already added this symbol. */
- defp->added = 1;
-
- /* Adjust the section number for common symbols. */
- if (sym->st_shndx == SHN_COMMON)
- {
- sym->st_value = (ld_state.common_section->offset
- + file->symref[cnt]->merge.value);
- assert (ld_state.common_section->outscnndx < SHN_LORESERVE);
- sym->st_shndx = ld_state.common_section->outscnndx;
- xndx = 0;
- }
- }
- else if (unlikely (sym->st_shndx != SHN_ABS))
- {
- if (SPECIAL_SECTION_NUMBER_P (&ld_state, sym->st_shndx))
- /* XXX Add code to handle machine specific special
- sections. */
- abort ();
- }
-
- /* Add the symbol name to the string table. If the user
- chooses the highest level of stripping avoid adding names
- for local symbols in the string table. */
- if (sym->st_name != 0
- && (ld_state.strip < strip_everything
- || XELF_ST_BIND (sym->st_info) != STB_LOCAL))
- symstrent[nsym] = ebl_strtabadd (strtab,
- elf_strptr (file->elf,
- file->symstridx,
- sym->st_name), 0);
-
- /* Once we know the name this field will get the correct
- offset. For now set it to zero which means no name
- associated. */
- GElf_Word st_name = sym->st_name;
- sym->st_name = 0;
-
- /* If we had to merge sections we have a completely new
- offset for the symbol. */
- if (file->has_merge_sections && file->symref[cnt] != NULL
- && file->symref[cnt]->merged)
- sym->st_value = file->symref[cnt]->merge.value;
-
- /* Create the record in the output sections. */
- assert (nsym < nsym_allocated);
- xelf_update_symshndx (symdata, xndxdata, nsym, sym, xndx, 1);
-
- /* Add the reference to the symbol record in case we need it.
- Find the symbol if this has not happened yet. We do
- not need the information for local symbols. */
- if (defp == NULL && cnt >= file->nlocalsymbols)
- {
- defp = file->symref[cnt];
-
- if (defp == NULL)
- {
- /* This is a symbol in a discarded COMDAT section.
- Find the definition we actually use. */
- // XXX The question is: do we have to do this here
- // XXX or can we do it earlier when we discard the
- // XXX section.
- struct symbol search;
- search.name = elf_strptr (file->elf, file->symstridx,
- st_name);
- struct symbol *realp
- = ld_symbol_tab_find (&ld_state.symbol_tab,
- elf_hash (search.name), &search);
- if (realp == NULL)
- // XXX What to do here?
- error (EXIT_FAILURE, 0,
- "couldn't find symbol from COMDAT section");
-
- file->symref[cnt] = realp;
-
- continue;
- }
- }
-
- /* Store the reference to the symbol record. The sorting
- code will have to keep this array in the correct order, too. */
- ndxtosym[nsym] = defp;
-
- /* One more entry finished. */
- if (cnt >= file->nlocalsymbols)
- {
- assert (file->symref[cnt]->outsymidx == 0);
- file->symref[cnt]->outsymidx = nsym;
- }
- file->symindirect[cnt] = nsym++;
- }
- }
- while ((file = file->next) != ld_state.relfiles->next);
- /* Make sure we didn't create the extended section index table for
- nothing. */
- assert (xndxdata == NULL || need_xndx);
-
- /* Create the version related sections. */
- if (ld_state.verneedscnidx != 0)
- {
- /* We know the number of input files and total number of
- referenced versions. This allows us to allocate the memory
- and then we iterate over the DSOs to get the version
- information. */
- struct usedfiles *runp;
-
- runp = ld_state.dsofiles->next;
- do
- allocate_version_names (runp, dynstrtab);
- while ((runp = runp->next) != ld_state.dsofiles->next);
-
- if (ld_state.needed != NULL)
- {
- runp = ld_state.needed->next;
- do
- allocate_version_names (runp, dynstrtab);
- while ((runp = runp->next) != ld_state.needed->next);
- }
- }
-
- /* At this point we should hide symbols and so on. */
- if (ld_state.default_bind_local || ld_state.version_str_tab.filled > 0)
- /* XXX Add one more test when handling of wildcard symbol names
- is supported. */
- {
- /* Check all non-local symbols whether they are on the export list. */
- bool any_reduced = false;
-
- for (cnt = 1; cnt < nsym; ++cnt)
- {
- XElf_Sym_vardef (sym);
-
- /* Note that we don't have to use 'xelf_getsymshndx' since we
- only need the binding and the symbol name. */
- xelf_getsym (symdata, cnt, sym);
- assert (sym != NULL);
-
- if (reduce_symbol_p (sym, symstrent[cnt]))
- {
- // XXX Check whether this is correct...
- assert (ndxtosym[cnt]->outdynsymidx != 0);
- ndxtosym[cnt]->outdynsymidx = 0;
-
- sym->st_info = XELF_ST_INFO (STB_LOCAL,
- XELF_ST_TYPE (sym->st_info));
- (void) xelf_update_sym (symdata, cnt, sym);
-
- /* Show that we don't need this string anymore. */
- if (ld_state.strip == strip_everything)
- {
- symstrent[cnt] = NULL;
- any_reduced = true;
- }
- }
- }
-
- if (unlikely (any_reduced))
- {
- /* Since we will not write names of local symbols in the
- output file and we have reduced the binding of some
- symbols the string table previously constructed contains
- too many string. Correct it. */
- struct Ebl_Strtab *newp = ebl_strtabinit (true);
-
- for (cnt = 1; cnt < nsym; ++cnt)
- if (symstrent[cnt] != NULL)
- symstrent[cnt] = ebl_strtabadd (newp,
- ebl_string (symstrent[cnt]), 0);
-
- ebl_strtabfree (strtab);
- strtab = newp;
- }
- }
-
- /* Add the references to DSOs. We can add these entries this late
- (after sorting out versioning) because references to DSOs are not
- effected. */
- if (ld_state.from_dso != NULL)
- {
- struct symbol *runp;
- size_t plt_base = nsym + ld_state.nfrom_dso - ld_state.nplt;
- size_t plt_idx = 0;
- size_t obj_idx = 0;
-
- assert (ld_state.nfrom_dso >= ld_state.nplt);
- runp = ld_state.from_dso;
- do
- {
- // XXX What about functions which are only referenced via
- // pointers and not PLT entries? Can we distinguish such uses?
- size_t idx;
- if (runp->type == STT_FUNC)
- {
- /* Store the PLT entry number. */
- runp->merge.value = plt_idx + 1;
- idx = plt_base + plt_idx++;
- }
- else
- idx = nsym + obj_idx++;
-
- XElf_Sym_vardef (sym);
- xelf_getsym_ptr (symdata, idx, sym);
-
- sym->st_value = 0;
- sym->st_size = runp->size;
- sym->st_info = XELF_ST_INFO (runp->weak ? STB_WEAK : STB_GLOBAL,
- runp->type);
- sym->st_other = STV_DEFAULT;
- sym->st_shndx = SHN_UNDEF;
-
- /* Create the record in the output sections. */
- xelf_update_symshndx (symdata, xndxdata, idx, sym, 0, 0);
-
- const char *name = runp->name;
- size_t namelen = 0;
-
- if (runp->file->verdefdata != NULL)
- {
- // XXX Is it useful to add the versym value to struct symbol?
- XElf_Versym versym;
-
- (void) xelf_getversym_copy (runp->file->versymdata, runp->symidx,
- versym);
-
- /* One can only link with the default version. */
- assert ((versym & 0x8000) == 0);
-
- const char *versname
- = ebl_string (runp->file->verdefent[versym]);
-
- size_t versname_len = strlen (versname) + 1;
- namelen = strlen (name) + versname_len + 2;
- char *newp = (char *) obstack_alloc (&ld_state.smem, namelen);
- memcpy (stpcpy (stpcpy (newp, name), "@@"),
- versname, versname_len);
- name = newp;
- }
-
- symstrent[idx] = ebl_strtabadd (strtab, name, namelen);
-
- /* Record the initial index in the symbol table. */
- runp->outsymidx = idx;
-
- /* Remember the symbol record this ELF symbol came from. */
- ndxtosym[idx] = runp;
- }
- while ((runp = runp->next) != ld_state.from_dso);
-
- assert (nsym + obj_idx == plt_base);
- assert (plt_idx == ld_state.nplt);
- nsym = plt_base + plt_idx;
- }
-
- /* Now we know how many symbols will be in the output file. Adjust
- the count in the section data. */
- symdata->d_size = xelf_fsize (ld_state.outelf, ELF_T_SYM, nsym);
- if (unlikely (xndxdata != NULL))
- xndxdata->d_size = xelf_fsize (ld_state.outelf, ELF_T_WORD, nsym);
-
- /* Create the symbol string table section. */
- strscn = elf_newscn (ld_state.outelf);
- ld_state.strscnidx = elf_ndxscn (strscn);
- data = elf_newdata (strscn);
- xelf_getshdr (strscn, shdr);
- if (data == NULL || shdr == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("cannot create section for output file: %s"),
- elf_errmsg (-1));
-
- /* Create a compact string table, allocate the memory for it, and
- fill in the section data information. */
- ebl_strtabfinalize (strtab, data);
-
- shdr->sh_type = SHT_STRTAB;
- assert (shdr->sh_entsize == 0);
-
- if (unlikely (xelf_update_shdr (strscn, shdr) == 0))
- error (EXIT_FAILURE, 0,
- gettext ("cannot create section for output file: %s"),
- elf_errmsg (-1));
-
- /* Fill in the offsets of the symbol names. */
- for (cnt = 1; cnt < nsym; ++cnt)
- if (symstrent[cnt] != NULL)
- {
- XElf_Sym_vardef (sym);
-
- /* Note that we don't have to use 'xelf_getsymshndx' since we don't
- modify the section index. */
- xelf_getsym (symdata, cnt, sym);
- /* This better worked, we did it before. */
- assert (sym != NULL);
- sym->st_name = ebl_strtaboffset (symstrent[cnt]);
- (void) xelf_update_sym (symdata, cnt, sym);
- }
-
- /* Since we are going to reorder the symbol table but still have to
- be able to find the new position based on the old one (since the
- latter is stored in 'symindirect' information of the input file
- data structure) we have to create yet another indirection
- table. */
- ld_state.dblindirect = dblindirect
- = (Elf32_Word *) xmalloc (nsym * sizeof (Elf32_Word));
-
- /* Sort the symbol table so that the local symbols come first. */
- /* XXX We don't use stable sorting here. It seems not necessary and
- would be more expensive. If it turns out to be necessary this can
- be fixed easily. */
- nsym_local = 1;
- cnt = nsym - 1;
- while (nsym_local < cnt)
- {
- XElf_Sym_vardef (locsym);
- Elf32_Word locxndx;
- XElf_Sym_vardef (globsym);
- Elf32_Word globxndx;
-
- do
- {
- xelf_getsymshndx (symdata, xndxdata, nsym_local, locsym, locxndx);
- /* This better works. */
- assert (locsym != NULL);
-
- if (XELF_ST_BIND (locsym->st_info) != STB_LOCAL
- && (ld_state.need_symtab || ld_state.export_all_dynamic))
- {
- do
- {
- xelf_getsymshndx (symdata, xndxdata, cnt, globsym, globxndx);
- /* This better works. */
- assert (globsym != NULL);
-
- if (unlikely (XELF_ST_BIND (globsym->st_info) == STB_LOCAL))
- {
- /* We swap the two entries. */
-#if NATIVE_ELF != 0
- /* Since we directly modify the data in the ELF
- data structure we have to make a copy of one
- of the entries. */
- XElf_Sym locsym_copy = *locsym;
- locsym = &locsym_copy;
-#endif
- xelf_update_symshndx (symdata, xndxdata, nsym_local,
- globsym, globxndx, 1);
- xelf_update_symshndx (symdata, xndxdata, cnt,
- locsym, locxndx, 1);
-
- /* Also swap the cross references. */
- dblindirect[nsym_local] = cnt;
- dblindirect[cnt] = nsym_local;
-
- /* And the entries for the symbol names. */
- struct Ebl_Strent *strtmp = symstrent[nsym_local];
- symstrent[nsym_local] = symstrent[cnt];
- symstrent[cnt] = strtmp;
-
- /* And the mapping from symbol table entry to
- struct symbol record. */
- struct symbol *symtmp = ndxtosym[nsym_local];
- ndxtosym[nsym_local] = ndxtosym[cnt];
- ndxtosym[cnt] = symtmp;
-
- /* Go to the next entry. */
- ++nsym_local;
- --cnt;
-
- break;
- }
-
- dblindirect[cnt] = cnt;
- }
- while (nsym_local < --cnt);
-
- break;
- }
-
- dblindirect[nsym_local] = nsym_local;
- }
- while (++nsym_local < cnt);
- }
-
- /* The symbol 'nsym_local' is currently pointing to might be local,
- too. Check and increment the variable if this is the case. */
- if (likely (nsym_local < nsym))
- {
- XElf_Sym_vardef (locsym);
-
- /* This entry isn't moved. */
- dblindirect[nsym_local] = nsym_local;
-
- /* Note that it is OK to not use 'xelf_getsymshndx' here. */
- xelf_getsym (symdata, nsym_local, locsym);
- /* This better works. */
- assert (locsym != NULL);
-
- if (XELF_ST_BIND (locsym->st_info) == STB_LOCAL)
- ++nsym_local;
- }
-
-
- /* We need the versym array right away to keep track of the version
- symbols. */
- if (ld_state.versymscnidx != 0)
- {
- /* We allocate more memory than we need since the array is morroring
- the dynamic symbol table and not the normal symbol table. I.e.,
- no local symbols are present. */
- versymscn = elf_getscn (ld_state.outelf, ld_state.versymscnidx);
- versymdata = elf_newdata (versymscn);
- if (versymdata == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("cannot create versioning section: %s"),
- elf_errmsg (-1));
-
- versymdata->d_size = xelf_fsize (ld_state.outelf, ELF_T_HALF,
- nsym - nsym_local + 1);
- versymdata->d_buf = xcalloc (1, versymdata->d_size);
- versymdata->d_align = xelf_fsize (ld_state.outelf, ELF_T_HALF, 1);
- versymdata->d_off = 0;
- versymdata->d_type = ELF_T_HALF;
- }
-
-
- /* If we have to construct the dynamic symbol table we must not include
- the local symbols. If the normal symbol has to be emitted as well
- we haven't done anything else yet and we can construct it from
- scratch now. */
- if (unlikely (!ld_state.need_symtab))
- {
- /* Note that the following code works even if there is no entry
- to remove since the zeroth entry is always local. */
- size_t reduce = xelf_fsize (ld_state.outelf, ELF_T_SYM, nsym_local - 1);
-
- XElf_Sym_vardef (nullsym);
- xelf_getsym_ptr (symdata, nsym_local - 1, nullsym);
-
- /* Note that we don't have to use 'xelf_update_symshndx' since
- this is the dynamic symbol table we write. */
- (void) xelf_update_sym (symdata, nsym_local - 1,
- memset (nullsym, '\0', sizeof (*nullsym)));
-
- /* Update the buffer pointer and size in the output data. */
- symdata->d_buf = (char *) symdata->d_buf + reduce;
- symdata->d_size -= reduce;
-
- /* Add the version symbol information. */
- if (versymdata != NULL)
- {
- nsym_dyn = 1;
- for (cnt = nsym_local; cnt < nsym; ++cnt, ++nsym_dyn)
- {
- struct symbol *symp = ndxtosym[cnt];
-
- if (symp->file->versymdata != NULL)
- {
- GElf_Versym versym;
-
- gelf_getversym (symp->file->versymdata, symp->symidx,
- &versym);
-
- (void) gelf_update_versym (versymdata, symp->outdynsymidx,
- &symp->file->verdefused[versym]);
- }
- }
- }
-
- /* Since we only created the dynamic symbol table the number of
- dynamic symbols is the total number of symbols. */
- nsym_dyn = nsym - nsym_local + 1;
-
- /* XXX TBI. Create whatever data structure is missing. */
- abort ();
- }
- else if (ld_state.need_dynsym)
- {
- /* Create the dynamic symbol table section data along with the
- string table. We look at all non-local symbols we found for
- the normal symbol table and add those. */
- dynsymscn = elf_getscn (ld_state.outelf, ld_state.dynsymscnidx);
- dynsymdata = elf_newdata (dynsymscn);
-
- dynstrdata = elf_newdata (elf_getscn (ld_state.outelf,
- ld_state.dynstrscnidx));
- if (dynsymdata == NULL || dynstrdata == NULL)
- error (EXIT_FAILURE, 0, gettext ("\
-cannot create dynamic symbol table for output file: %s"),
- elf_errmsg (-1));
-
- nsym_dyn_allocated = nsym - nsym_local + 1;
- dynsymdata->d_size = xelf_fsize (ld_state.outelf, ELF_T_SYM,
- nsym_dyn_allocated);
- dynsymdata->d_buf = memset (xmalloc (dynsymdata->d_size), '\0',
- xelf_fsize (ld_state.outelf, ELF_T_SYM, 1));
- dynsymdata->d_type = ELF_T_SYM;
- dynsymdata->d_off = 0;
- dynsymdata->d_align = xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1);
-
- /* We need one more array which contains the hash codes of the
- symbol names. */
- hashcodes = (Elf32_Word *) xcalloc (__builtin_popcount ((int) ld_state.hash_style)
- * nsym_dyn_allocated,
- sizeof (Elf32_Word));
- gnuhashcodes = hashcodes;
- if (GENERATE_SYSV_HASH)
- gnuhashcodes += nsym_dyn_allocated;
-
- /* We have and empty entry at the beginning. */
- nsym_dyn = 1;
-
- /* Populate the table. */
- for (cnt = nsym_local; cnt < nsym; ++cnt)
- {
- XElf_Sym_vardef (sym);
-
- xelf_getsym (symdata, cnt, sym);
- assert (sym != NULL);
-
- if (sym->st_shndx == SHN_XINDEX)
- error (EXIT_FAILURE, 0, gettext ("\
-section index too large in dynamic symbol table"));
-
- /* We do not add the symbol to the dynamic symbol table if
-
- - the symbol is for a file
- - it is not externally visible (internal, hidden)
- - if export_all_dynamic is not set and is only defined in
- the executable (i.e., it is defined, but not (also) in
- in DSO)
-
- Set symstrent[cnt] to NULL in case an entry is ignored. */
- if (XELF_ST_TYPE (sym->st_info) == STT_FILE
- || XELF_ST_VISIBILITY (sym->st_other) == STV_INTERNAL
- || XELF_ST_VISIBILITY (sym->st_other) == STV_HIDDEN
- || (!ld_state.export_all_dynamic
- && !ndxtosym[cnt]->in_dso && ndxtosym[cnt]->defined))
- {
- symstrent[cnt] = NULL;
- continue;
- }
-
- /* Store the index of the symbol in the dynamic symbol
- table. This is a preliminary value in case we use the
- GNU-style hash table. */
- ndxtosym[cnt]->outdynsymidx = nsym_dyn;
-
- /* Create a new string table entry. */
- const char *str = ndxtosym[cnt]->name;
- symstrent[cnt] = ebl_strtabadd (dynstrtab, str, 0);
- if (GENERATE_SYSV_HASH)
- hashcodes[nsym_dyn] = elf_hash (str);
- if (GENERATE_GNU_HASH)
- gnuhashcodes[nsym_dyn] = elf_gnu_hash (str);
- ++nsym_dyn;
- }
-
- if (ld_state.file_type != relocatable_file_type)
- {
- /* Finalize the dynamic string table. */
- ebl_strtabfinalize (dynstrtab, dynstrdata);
-
- assert (ld_state.hashscnidx != 0 || ld_state.gnuhashscnidx != 0);
-
- /* Create the GNU-style hash table. */
- if (GENERATE_GNU_HASH)
- create_gnu_hash (nsym_local, nsym, nsym_dyn, gnuhashcodes);
-
- /* Create the SysV-style hash table. This has to happen
- after the GNU-style table is created since
- CREATE-GNU-HASH might reorder the dynamic symbol table. */
- if (GENERATE_SYSV_HASH)
- create_hash (nsym_local, nsym, nsym_dyn, hashcodes);
- }
-
- /* Add the version information. */
- if (versymdata != NULL)
- for (cnt = nsym_local; cnt < nsym; ++cnt)
- if (symstrent[cnt] != NULL)
- {
- struct symbol *symp = ndxtosym[cnt];
-
- /* Synthetic symbols (i.e., those with no file attached)
- have no version information. */
- if (symp->file != NULL && symp->file->verdefdata != NULL)
- {
- GElf_Versym versym;
-
- gelf_getversym (symp->file->versymdata, symp->symidx,
- &versym);
-
- (void) gelf_update_versym (versymdata, symp->outdynsymidx,
- &symp->file->verdefused[versym]);
- }
- else
- {
- /* XXX Add support for version definitions. */
- GElf_Versym global = VER_NDX_GLOBAL;
- (void) gelf_update_versym (versymdata, nsym_dyn, &global);
- }
- }
-
- /* Update the information about the symbol section. */
- if (versymdata != NULL)
- {
- /* Correct the size now that we know how many entries the
- dynamic symbol table has. */
- versymdata->d_size = xelf_fsize (ld_state.outelf, ELF_T_HALF,
- nsym_dyn);
-
- /* Add the reference to the symbol table. */
- xelf_getshdr (versymscn, shdr);
- assert (shdr != NULL);
-
- shdr->sh_link = ld_state.dynsymscnidx;
-
- (void) xelf_update_shdr (versymscn, shdr);
- }
- }
-
- if (ld_state.file_type != relocatable_file_type)
- {
- /* Now put the names in. */
- for (cnt = nsym_local; cnt < nsym; ++cnt)
- if (symstrent[cnt] != NULL)
- {
- XElf_Sym_vardef (sym);
- size_t dynidx = ndxtosym[cnt]->outdynsymidx;
-
-#if NATIVE_ELF != 0
- XElf_Sym *osym;
- memcpy (xelf_getsym (dynsymdata, dynidx, sym),
- xelf_getsym (symdata, cnt, osym),
- sizeof (XElf_Sym));
-#else
- xelf_getsym (symdata, cnt, sym);
- assert (sym != NULL);
-#endif
-
- sym->st_name = ebl_strtaboffset (symstrent[cnt]);
-
- (void) xelf_update_sym (dynsymdata, dynidx, sym);
- }
-
- free (hashcodes);
-
- /* Create the required version section. */
- if (ld_state.verneedscnidx != 0)
- {
- Elf_Scn *verneedscn;
- Elf_Data *verneeddata;
- struct usedfiles *runp;
- size_t verneed_size = xelf_fsize (ld_state.outelf, ELF_T_VNEED, 1);
- size_t vernaux_size = xelf_fsize (ld_state.outelf, ELF_T_VNAUX, 1);
- size_t offset;
- int ntotal;
-
- verneedscn = elf_getscn (ld_state.outelf, ld_state.verneedscnidx);
- xelf_getshdr (verneedscn, shdr);
- verneeddata = elf_newdata (verneedscn);
- if (shdr == NULL || verneeddata == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("cannot create versioning data: %s"),
- elf_errmsg (-1));
-
- verneeddata->d_size = (ld_state.nverdeffile * verneed_size
- + ld_state.nverdefused * vernaux_size);
- verneeddata->d_buf = xmalloc (verneeddata->d_size);
- verneeddata->d_type = ELF_T_VNEED;
- verneeddata->d_align = xelf_fsize (ld_state.outelf, ELF_T_WORD, 1);
- verneeddata->d_off = 0;
-
- offset = 0;
- ntotal = ld_state.nverdeffile;
- runp = ld_state.dsofiles->next;
- do
- {
- offset = create_verneed_data (offset, verneeddata, runp,
- &ntotal);
- runp = runp->next;
- }
- while (ntotal > 0 && runp != ld_state.dsofiles->next);
-
- if (ntotal > 0)
- {
- runp = ld_state.needed->next;
- do
- {
- offset = create_verneed_data (offset, verneeddata, runp,
- &ntotal);
- runp = runp->next;
- }
- while (ntotal > 0 && runp != ld_state.needed->next);
- }
-
- assert (offset == verneeddata->d_size);
-
- /* Add the needed information to the section header. */
- shdr->sh_link = ld_state.dynstrscnidx;
- shdr->sh_info = ld_state.nverdeffile;
- (void) xelf_update_shdr (verneedscn, shdr);
- }
-
- /* Adjust the section size. */
- dynsymdata->d_size = xelf_fsize (ld_state.outelf, ELF_T_SYM, nsym_dyn);
- if (versymdata != NULL)
- versymdata->d_size = xelf_fsize (ld_state.outelf, ELF_T_HALF,
- nsym_dyn);
-
- /* Add the remaining information to the section header. */
- xelf_getshdr (dynsymscn, shdr);
- /* There is always exactly one local symbol. */
- shdr->sh_info = 1;
- /* Reference the string table. */
- shdr->sh_link = ld_state.dynstrscnidx;
- /* Write the updated info back. */
- (void) xelf_update_shdr (dynsymscn, shdr);
- }
-
- /* We don't need the string table anymore. */
- free (symstrent);
-
- /* Remember the total number of symbols in the dynamic symbol table. */
- ld_state.ndynsym = nsym_dyn;
-
- /* Fill in the section header information. */
- symscn = elf_getscn (ld_state.outelf, ld_state.symscnidx);
- xelf_getshdr (symscn, shdr);
- if (shdr == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("cannot create symbol table for output file: %s"),
- elf_errmsg (-1));
-
- shdr->sh_type = SHT_SYMTAB;
- shdr->sh_link = ld_state.strscnidx;
- shdr->sh_info = nsym_local;
- shdr->sh_entsize = xelf_fsize (ld_state.outelf, ELF_T_SYM, 1);
-
- (void) xelf_update_shdr (symscn, shdr);
-
-
- /* Add names for the generated sections. */
- if (ld_state.symscnidx != 0)
- symtab_ent = ebl_strtabadd (ld_state.shstrtab, ".symtab", 8);
- if (ld_state.xndxscnidx != 0)
- xndx_ent = ebl_strtabadd (ld_state.shstrtab, ".symtab_shndx", 14);
- if (ld_state.strscnidx != 0)
- strtab_ent = ebl_strtabadd (ld_state.shstrtab, ".strtab", 8);
- /* At this point we would have to test for failures in the
- allocation. But we skip this. First, the problem will be caught
- later when doing more allocations for the section header table.
- Even if this would not be the case all that would happen is that
- the section names are empty. The binary would still be usable if
- it is an executable or a DSO. Not adding the test here saves
- quite a bit of code. */
-
-
- /* Finally create the section for the section header string table. */
- shstrtab_scn = elf_newscn (ld_state.outelf);
- shstrtab_ndx = elf_ndxscn (shstrtab_scn);
- if (unlikely (shstrtab_ndx == SHN_UNDEF))
- error (EXIT_FAILURE, 0,
- gettext ("cannot create section header string section: %s"),
- elf_errmsg (-1));
-
- /* Add the name of the section to the string table. */
- shstrtab_ent = ebl_strtabadd (ld_state.shstrtab, ".shstrtab", 10);
- if (unlikely (shstrtab_ent == NULL))
- error (EXIT_FAILURE, errno,
- gettext ("cannot create section header string section"));
-
- /* Finalize the section header string table. */
- data = elf_newdata (shstrtab_scn);
- if (data == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("cannot create section header string section: %s"),
- elf_errmsg (-1));
- ebl_strtabfinalize (ld_state.shstrtab, data);
-
- /* Now we know the string offsets for all section names. */
- for (cnt = 0; cnt < ld_state.nallsections; ++cnt)
- if (ld_state.allsections[cnt]->scnidx != 0)
- {
- Elf_Scn *scn;
-
- scn = elf_getscn (ld_state.outelf, ld_state.allsections[cnt]->scnidx);
-
- xelf_getshdr (scn, shdr);
- assert (shdr != NULL);
-
- shdr->sh_name = ebl_strtaboffset (ld_state.allsections[cnt]->nameent);
-
- if (xelf_update_shdr (scn, shdr) == 0)
- assert (0);
- }
-
- /* Add the names for the generated sections to the respective
- section headers. */
- if (symtab_ent != NULL)
- {
- Elf_Scn *scn = elf_getscn (ld_state.outelf, ld_state.symscnidx);
-
- xelf_getshdr (scn, shdr);
- /* This cannot fail, we already accessed the header before. */
- assert (shdr != NULL);
-
- shdr->sh_name = ebl_strtaboffset (symtab_ent);
-
- (void) xelf_update_shdr (scn, shdr);
- }
- if (xndx_ent != NULL)
- {
- Elf_Scn *scn = elf_getscn (ld_state.outelf, ld_state.xndxscnidx);
-
- xelf_getshdr (scn, shdr);
- /* This cannot fail, we already accessed the header before. */
- assert (shdr != NULL);
-
- shdr->sh_name = ebl_strtaboffset (xndx_ent);
-
- (void) xelf_update_shdr (scn, shdr);
- }
- if (strtab_ent != NULL)
- {
- Elf_Scn *scn = elf_getscn (ld_state.outelf, ld_state.strscnidx);
-
- xelf_getshdr (scn, shdr);
- /* This cannot fail, we already accessed the header before. */
- assert (shdr != NULL);
-
- shdr->sh_name = ebl_strtaboffset (strtab_ent);
-
- (void) xelf_update_shdr (scn, shdr);
- }
-
- /* And the section header table section itself. */
- xelf_getshdr (shstrtab_scn, shdr);
- if (shdr == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("cannot create section header string section: %s"),
- elf_errmsg (-1));
-
- shdr->sh_name = ebl_strtaboffset (shstrtab_ent);
- shdr->sh_type = SHT_STRTAB;
-
- if (unlikely (xelf_update_shdr (shstrtab_scn, shdr) == 0))
- error (EXIT_FAILURE, 0,
- gettext ("cannot create section header string section: %s"),
- elf_errmsg (-1));
-
-
- /* Add the correct section header info to the section group sections. */
- groups = ld_state.groups;
- while (groups != NULL)
- {
- Elf_Scn *scn = elf_getscn (ld_state.outelf, groups->outscnidx);
- xelf_getshdr (scn, shdr);
- assert (shdr != NULL);
-
- shdr->sh_name = ebl_strtaboffset (groups->nameent);
- shdr->sh_type = SHT_GROUP;
- shdr->sh_flags = 0;
- shdr->sh_link = ld_state.symscnidx;
- shdr->sh_entsize = sizeof (Elf32_Word);
-
- /* Determine the index for the signature symbol. */
- Elf32_Word si
- = groups->symbol->file->symindirect[groups->symbol->symidx];
- if (si == 0)
- {
- assert (groups->symbol->file->symref[groups->symbol->symidx]
- != NULL);
- si = groups->symbol->file->symref[groups->symbol->symidx]->outsymidx;
- assert (si != 0);
- }
- shdr->sh_info = ld_state.dblindirect[si];
-
- (void) xelf_update_shdr (scn, shdr);
-
- struct scngroup *oldp = groups;
- groups = groups->next;
- free (oldp);
- }
-
-
- if (ld_state.file_type != relocatable_file_type)
- {
- /* Every executable needs a program header. The number of entries
- varies. One exists for each segment. Each SHT_NOTE section gets
- one, too. For dynamically linked executables we have to create
- one for the program header, the interpreter, and the dynamic
- section. First count the number of segments.
-
- XXX Determine whether the segment is non-empty. */
- size_t nphdr = 0;
-
- /* We always add a PT_GNU_stack entry. */
- ++nphdr;
-
- struct output_segment *segment = ld_state.output_segments;
- while (segment != NULL)
- {
- ++nphdr;
- segment = segment->next;
- }
-
- /* Add the number of SHT_NOTE sections. We counted them earlier. */
- nphdr += ld_state.nnotesections;
-
- /* If we create a DSO or the file is linked against DSOs we have
- at least one more entry: DYNAMIC. If an interpreter is
- specified we add PHDR and INTERP, too. */
- if (dynamically_linked_p ())
- {
- ++nphdr;
-
- if (ld_state.interp != NULL || ld_state.file_type != dso_file_type)
- nphdr += 2;
- }
-
- /* If we need a TLS segment we need an entry for that. */
- if (ld_state.need_tls)
- ++nphdr;
-
- /* Create the program header structure. */
- XElf_Phdr_vardef (phdr);
- if (xelf_newphdr (ld_state.outelf, nphdr) == 0)
- error (EXIT_FAILURE, 0, gettext ("cannot create program header: %s"),
- elf_errmsg (-1));
-
-
- /* Determine the section sizes and offsets. We have to do this
- to be able to determine the memory layout (which normally
- differs from the file layout). */
- if (elf_update (ld_state.outelf, ELF_C_NULL) == -1)
- error (EXIT_FAILURE, 0, gettext ("while determining file layout: %s"),
- elf_errmsg (-1));
-
-
- /* Now determine the memory addresses of all the sections and
- segments. */
- Elf32_Word nsec = 0;
- Elf_Scn *scn = elf_getscn (ld_state.outelf,
- ld_state.allsections[nsec]->scnidx);
- xelf_getshdr (scn, shdr);
- assert (shdr != NULL);
-
- /* The address we start with is the offset of the first (not
- zeroth) section. */
- XElf_Addr addr = shdr->sh_offset;
- XElf_Addr tls_offset = 0;
- XElf_Addr tls_start = ~((XElf_Addr) 0);
- XElf_Addr tls_end = 0;
- XElf_Off tls_filesize = 0;
- XElf_Addr tls_align = 0;
-
- /* The index of the first loadable segment. */
- nphdr = 0;
- if (dynamically_linked_p ())
- {
- ++nphdr;
- if (ld_state.interp != NULL
- || ld_state.file_type != dso_file_type)
- nphdr += 2;
- }
-
- segment = ld_state.output_segments;
- while (segment != NULL)
- {
- struct output_rule *orule;
- bool first_section = true;
- XElf_Off nobits_size = 0;
- XElf_Off memsize = 0;
-
- /* The minimum alignment is a page size. */
- segment->align = ld_state.pagesize;
-
- for (orule = segment->output_rules; orule != NULL;
- orule = orule->next)
- if (orule->tag == output_section)
- {
- /* See whether this output rule corresponds to the next
- section. Yes, this is a pointer comparison. */
- if (ld_state.allsections[nsec]->name
- != orule->val.section.name)
- /* No, ignore this output rule. */
- continue;
-
- /* We assign addresses only in segments which are actually
- loaded. */
- if (segment->mode != 0)
- {
- /* Adjust the offset of the input sections. */
- struct scninfo *isect;
- struct scninfo *first;
-
- isect = first = ld_state.allsections[nsec]->last;
- if (isect != NULL)
- do
- isect->offset += addr;
- while ((isect = isect->next) != first);
-
- /* Set the address of current section. */
- shdr->sh_addr = addr;
-
- /* Write the result back. */
- (void) xelf_update_shdr (scn, shdr);
-
- /* Remember the address. */
- ld_state.allsections[nsec]->addr = addr;
-
- /* Handle TLS sections. */
- if (unlikely (shdr->sh_flags & SHF_TLS))
- {
- if (tls_start > addr)
- {
- tls_start = addr;
- tls_offset = shdr->sh_offset;
- }
- if (tls_end < addr + shdr->sh_size)
- tls_end = addr + shdr->sh_size;
- if (shdr->sh_type != SHT_NOBITS)
- tls_filesize += shdr->sh_size;
- if (shdr->sh_addralign > tls_align)
- tls_align = shdr->sh_addralign;
- }
- }
-
- if (first_section)
- {
- /* The first segment starts at offset zero. */
- if (segment == ld_state.output_segments)
- {
- segment->offset = 0;
- segment->addr = addr - shdr->sh_offset;
- }
- else
- {
- segment->offset = shdr->sh_offset;
- segment->addr = addr;
- }
-
- /* Determine the maximum alignment requirement. */
- segment->align = MAX (segment->align, shdr->sh_addralign);
-
- first_section = false;
- }
-
- /* NOBITS TLS sections are not laid out in address space
- along with the other sections. */
- if (shdr->sh_type != SHT_NOBITS
- || (shdr->sh_flags & SHF_TLS) == 0)
- {
- memsize = (shdr->sh_offset - segment->offset
- + shdr->sh_size);
- if (nobits_size != 0 && shdr->sh_type != SHT_NOTE)
- error (EXIT_FAILURE, 0, gettext ("\
-internal error: non-nobits section follows nobits section"));
- if (shdr->sh_type == SHT_NOBITS)
- nobits_size += shdr->sh_size;
- }
-
- /* Determine the new address which is computed using
- the difference of the offsets on the sections. Note
- that this assumes that the sections following each
- other in the section header table are also
- consecutive in the file. This is true here because
- libelf constructs files this way. */
- XElf_Off oldoff = shdr->sh_offset;
-
- if (++nsec >= ld_state.nallsections)
- break;
-
- scn = elf_getscn (ld_state.outelf,
- ld_state.allsections[nsec]->scnidx);
- xelf_getshdr (scn, shdr);
- assert (shdr != NULL);
-
- /* This is the new address resulting from the offsets
- in the file. */
- assert (oldoff <= shdr->sh_offset);
- addr += shdr->sh_offset - oldoff;
- }
- else
- {
- assert (orule->tag == output_assignment);
-
- if (strcmp (orule->val.assignment->variable, ".") == 0)
- /* This is a change of the address. */
- addr = eval_expression (orule->val.assignment->expression,
- addr);
- else if (orule->val.assignment->sym != NULL)
- {
- /* This symbol is used. Update the symbol table
- entry. */
- XElf_Sym_vardef (sym);
- size_t idx;
-
- /* Note that we do not have to use
- xelf_getsymshndx since we only update the
- symbol address, not the section
- information. */
- idx = dblindirect[orule->val.assignment->sym->outsymidx];
- xelf_getsym (symdata, idx, sym);
- sym->st_value = addr;
- (void) xelf_update_sym (symdata, idx, sym);
-
- idx = orule->val.assignment->sym->outdynsymidx;
- if (idx != 0)
- {
- assert (dynsymdata != NULL);
- xelf_getsym (dynsymdata, idx, sym);
- sym->st_value = addr;
- (void) xelf_update_sym (dynsymdata, idx, sym);
- }
- }
- }
-
- /* Store the segment parameter for loadable segments. */
- if (segment->mode != 0)
- {
- xelf_getphdr_ptr (ld_state.outelf, nphdr, phdr);
-
- phdr->p_type = PT_LOAD;
- phdr->p_offset = segment->offset;
- phdr->p_vaddr = segment->addr;
- phdr->p_paddr = phdr->p_vaddr;
- phdr->p_filesz = memsize - nobits_size;
- phdr->p_memsz = memsize;
- phdr->p_flags = segment->mode;
- phdr->p_align = segment->align;
-
- (void) xelf_update_phdr (ld_state.outelf, nphdr, phdr);
- ++nphdr;
- }
-
- segment = segment->next;
- }
-
- /* Create the other program header entries. */
- xelf_getehdr (ld_state.outelf, ehdr);
- assert (ehdr != NULL);
-
- /* Add the TLS information. */
- if (ld_state.need_tls)
- {
- xelf_getphdr_ptr (ld_state.outelf, nphdr, phdr);
- phdr->p_type = PT_TLS;
- phdr->p_offset = tls_offset;
- phdr->p_vaddr = tls_start;
- phdr->p_paddr = tls_start;
- phdr->p_filesz = tls_filesize;
- phdr->p_memsz = tls_end - tls_start;
- phdr->p_flags = PF_R;
- phdr->p_align = tls_align;
- ld_state.tls_tcb = tls_end;
- ld_state.tls_start = tls_start;
-
- (void) xelf_update_phdr (ld_state.outelf, nphdr, phdr);
- ++nphdr;
- }
-
- /* Add the stack information. */
- xelf_getphdr_ptr (ld_state.outelf, nphdr, phdr);
- phdr->p_type = PT_GNU_STACK;
- phdr->p_offset = 0;
- phdr->p_vaddr = 0;
- phdr->p_paddr = 0;
- phdr->p_filesz = 0;
- phdr->p_memsz = 0;
- phdr->p_flags = (PF_R | PF_W
- | (ld_state.execstack == execstack_true ? PF_X : 0));
- phdr->p_align = xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1);
-
- (void) xelf_update_phdr (ld_state.outelf, nphdr, phdr);
- ++nphdr;
-
-
- /* Adjust the addresses in the address fields of the symbol
- records according to the load addresses of the sections. */
- if (ld_state.need_symtab)
- for (cnt = 1; cnt < nsym; ++cnt)
- {
- XElf_Sym_vardef (sym);
- Elf32_Word shndx;
-
- xelf_getsymshndx (symdata, xndxdata, cnt, sym, shndx);
- assert (sym != NULL);
-
- if (sym->st_shndx != SHN_XINDEX)
- shndx = sym->st_shndx;
-
- if ((shndx > SHN_UNDEF && shndx < SHN_LORESERVE)
- || shndx > SHN_HIRESERVE)
- {
- /* Note we subtract 1 from the section index since ALLSECTIONS
- does not store the dummy section with offset zero. */
- sym->st_value += ld_state.allsections[shndx - 1]->addr;
-
- /* We don't have to use 'xelf_update_symshndx' since the
- section number doesn't change. */
- (void) xelf_update_sym (symdata, cnt, sym);
- }
- }
-
- if (ld_state.need_dynsym)
- for (cnt = 1; cnt < nsym_dyn; ++cnt)
- {
- XElf_Sym_vardef (sym);
-
- xelf_getsym (dynsymdata, cnt, sym);
- assert (sym != NULL);
-
- if (sym->st_shndx > SHN_UNDEF && sym->st_shndx < SHN_LORESERVE)
- {
- /* Note we subtract 1 from the section index since ALLSECTIONS
- does not store the dummy section with offset zero. */
- sym->st_value += ld_state.allsections[sym->st_shndx - 1]->addr;
-
- /* We don't have to use 'xelf_update_symshndx' since the
- section number doesn't change. */
- (void) xelf_update_sym (dynsymdata, cnt, sym);
- }
- }
-
- /* Now is a good time to determine the values of all the symbols
- we encountered. */
- // XXX This loop is very inefficient. The hash tab iterator also
- // returns all symbols in DSOs.
- struct symbol *se;
- void *p = NULL;
- while ((se = ld_symbol_tab_iterate (&ld_state.symbol_tab, &p)) != NULL)
- if (! se->in_dso)
- {
- XElf_Sym_vardef (sym);
-
- addr = 0;
-
- if (se->outdynsymidx != 0)
- {
- xelf_getsym (dynsymdata, se->outdynsymidx, sym);
- assert (sym != NULL);
- addr = sym->st_value;
- }
- else if (se->outsymidx != 0)
- {
- assert (dblindirect[se->outsymidx] != 0);
- xelf_getsym (symdata, dblindirect[se->outsymidx], sym);
- assert (sym != NULL);
- addr = sym->st_value;
- }
- else
- abort ();
-
- se->merge.value = addr;
- }
-
- /* Complete the header of the .rel.dyn/.rela.dyn section. Point
- to the symbol table. The sh_info field is left zero since
- there is no specific section the contained relocations are
- for. */
- if (ld_state.reldynscnidx != 0)
- {
- assert (ld_state.dynsymscnidx != 0);
- scn = elf_getscn (ld_state.outelf, ld_state.reldynscnidx);
- xelf_getshdr (scn, shdr);
- assert (shdr != NULL);
-
- shdr->sh_link = ld_state.dynsymscnidx;
-
- (void) xelf_update_shdr (scn, shdr);
- }
-
- /* Fill in the dynamic segment/section. */
- if (dynamically_linked_p ())
- {
- Elf_Scn *outscn;
-
- int idx = 0;
- if (ld_state.interp != NULL || ld_state.file_type != dso_file_type)
- {
- assert (ld_state.interpscnidx != 0);
- xelf_getshdr (elf_getscn (ld_state.outelf,
- ld_state.interpscnidx), shdr);
- assert (shdr != NULL);
-
- xelf_getphdr_ptr (ld_state.outelf, idx, phdr);
- phdr->p_type = PT_PHDR;
- phdr->p_offset = ehdr->e_phoff;
- phdr->p_vaddr = ld_state.output_segments->addr + phdr->p_offset;
- phdr->p_paddr = phdr->p_vaddr;
- phdr->p_filesz = ehdr->e_phnum * ehdr->e_phentsize;
- phdr->p_memsz = phdr->p_filesz;
- phdr->p_flags = 0; /* No need to set PF_R or so. */
- phdr->p_align = xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1);
-
- (void) xelf_update_phdr (ld_state.outelf, idx, phdr);
- ++idx;
-
- /* The interpreter string. */
- xelf_getphdr_ptr (ld_state.outelf, idx, phdr);
- phdr->p_type = PT_INTERP;
- phdr->p_offset = shdr->sh_offset;
- phdr->p_vaddr = shdr->sh_addr;
- phdr->p_paddr = phdr->p_vaddr;
- phdr->p_filesz = shdr->sh_size;
- phdr->p_memsz = phdr->p_filesz;
- phdr->p_flags = 0; /* No need to set PF_R or so. */
- phdr->p_align = 1; /* It's a string. */
-
- (void) xelf_update_phdr (ld_state.outelf, idx, phdr);
- ++idx;
- }
-
- /* The pointer to the dynamic section. We this we need to
- get the information for the dynamic section first. */
- assert (ld_state.dynamicscnidx);
- outscn = elf_getscn (ld_state.outelf, ld_state.dynamicscnidx);
- xelf_getshdr (outscn, shdr);
- assert (shdr != NULL);
-
- xelf_getphdr_ptr (ld_state.outelf, idx, phdr);
- phdr->p_type = PT_DYNAMIC;
- phdr->p_offset = shdr->sh_offset;
- phdr->p_vaddr = shdr->sh_addr;
- phdr->p_paddr = phdr->p_vaddr;
- phdr->p_filesz = shdr->sh_size;
- phdr->p_memsz = phdr->p_filesz;
- phdr->p_flags = 0; /* No need to set PF_R or so. */
- phdr->p_align = shdr->sh_addralign;
-
- (void) xelf_update_phdr (ld_state.outelf, idx, phdr);
-
- /* Fill in the reference to the .dynstr section. */
- assert (ld_state.dynstrscnidx != 0);
- shdr->sh_link = ld_state.dynstrscnidx;
- (void) xelf_update_shdr (outscn, shdr);
-
- /* And fill the remaining entries. */
- Elf_Data *dyndata = elf_getdata (outscn, NULL);
- assert (dyndata != NULL);
-
- /* Add the DT_NEEDED entries. */
- if (ld_state.ndsofiles > 0)
- {
- struct usedfiles *runp = ld_state.dsofiles->next;
-
- do
- if (runp->used || !runp->as_needed)
- {
- /* Add the position-dependent flag if necessary. */
- if (runp->lazyload)
- new_dynamic_entry (dyndata, ld_state.ndynamic_filled++,
- DT_POSFLAG_1, DF_P1_LAZYLOAD);
-
- new_dynamic_entry (dyndata, ld_state.ndynamic_filled++,
- DT_NEEDED,
- ebl_strtaboffset (runp->sonameent));
- }
- while ((runp = runp->next) != ld_state.dsofiles->next);
- }
-
- /* We can finish the DT_RUNPATH/DT_RPATH entries now. */
- if (ld_state.rxxpath_strent != NULL)
- new_dynamic_entry (dyndata, ld_state.ndynamic_filled++,
- ld_state.rxxpath_tag,
- ebl_strtaboffset (ld_state.rxxpath_strent));
-
- /* Reference to initialization and finalization functions. */
- // XXX This code depends on symbol table being relocated.
- if (ld_state.init_symbol != NULL)
- {
- XElf_Sym_vardef (sym);
-
- if (ld_state.need_symtab)
- xelf_getsym (symdata,
- dblindirect[ld_state.init_symbol->outsymidx],
- sym);
- else
- xelf_getsym (dynsymdata, ld_state.init_symbol->outdynsymidx,
- sym);
- assert (sym != NULL);
-
- new_dynamic_entry (dyndata, ld_state.ndynamic_filled++,
- DT_INIT, sym->st_value);
- }
- if (ld_state.fini_symbol != NULL)
- {
- XElf_Sym_vardef (sym);
-
- if (ld_state.need_symtab)
- xelf_getsym (symdata,
- dblindirect[ld_state.fini_symbol->outsymidx],
- sym);
- else
- xelf_getsym (dynsymdata, ld_state.fini_symbol->outdynsymidx,
- sym);
- assert (sym != NULL);
-
- new_dynamic_entry (dyndata, ld_state.ndynamic_filled++,
- DT_FINI, sym->st_value);
- }
- // XXX Support init,fini,preinit arrays
-
- /* The hash table which comes with dynamic symbol table. */
- xelf_getshdr (elf_getscn (ld_state.outelf, ld_state.hashscnidx),
- shdr);
- assert (shdr != NULL);
- new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, DT_HASH,
- shdr->sh_addr);
-
- /* Reference to the symbol table section. */
- assert (ld_state.dynsymscnidx != 0);
- xelf_getshdr (elf_getscn (ld_state.outelf, ld_state.dynsymscnidx),
- shdr);
- assert (shdr != NULL);
- new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, DT_SYMTAB,
- shdr->sh_addr);
-
- new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, DT_SYMENT,
- xelf_fsize (ld_state.outelf, ELF_T_SYM, 1));
-
- /* And the string table which comes with it. */
- xelf_getshdr (elf_getscn (ld_state.outelf, ld_state.dynstrscnidx),
- shdr);
- assert (shdr != NULL);
- new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, DT_STRTAB,
- shdr->sh_addr);
-
- new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, DT_STRSZ,
- shdr->sh_size);
-
- /* Add the entries related to the .plt. */
- if (ld_state.nplt > 0)
- {
- // XXX Make this work if there is no PLT
- xelf_getshdr (elf_getscn (ld_state.outelf,
- ld_state.gotpltscnidx), shdr);
- assert (shdr != NULL);
- new_dynamic_entry (dyndata, ld_state.ndynamic_filled++,
- // XXX This should probably be machine
- // dependent.
- DT_PLTGOT, shdr->sh_addr);
-
- xelf_getshdr (elf_getscn (ld_state.outelf,
- ld_state.pltrelscnidx), shdr);
- assert (shdr != NULL);
- new_dynamic_entry (dyndata, ld_state.ndynamic_filled++,
- DT_PLTRELSZ, shdr->sh_size);
-
- new_dynamic_entry (dyndata, ld_state.ndynamic_filled++,
- DT_JMPREL, shdr->sh_addr);
-
- new_dynamic_entry (dyndata, ld_state.ndynamic_filled++,
- DT_PLTREL, REL_TYPE (statep));
- }
-
- if (ld_state.relsize_total > 0)
- {
- int rel = REL_TYPE (statep);
- xelf_getshdr (elf_getscn (ld_state.outelf,
- ld_state.reldynscnidx), shdr);
- assert (shdr != NULL);
- new_dynamic_entry (dyndata, ld_state.ndynamic_filled++,
- rel, shdr->sh_addr);
-
- /* Trick ahead. Use arithmetic to get the right tag.
- We check the validity of this assumption in the asserts. */
- assert (DT_RELASZ - DT_RELA == 1);
- assert (DT_RELSZ - DT_REL == 1);
- new_dynamic_entry (dyndata, ld_state.ndynamic_filled++,
- rel + 1, shdr->sh_size);
-
- /* Similar for the entry size tag. */
- assert (DT_RELAENT - DT_RELA == 2);
- assert (DT_RELENT - DT_REL == 2);
- new_dynamic_entry (dyndata, ld_state.ndynamic_filled++,
- rel + 2,
- rel == DT_REL
- ? xelf_fsize (ld_state.outelf, ELF_T_REL, 1)
- : xelf_fsize (ld_state.outelf, ELF_T_RELA,
- 1));
- }
-
- if (ld_state.verneedscnidx != 0)
- {
- xelf_getshdr (elf_getscn (ld_state.outelf,
- ld_state.verneedscnidx), shdr);
- assert (shdr != NULL);
- new_dynamic_entry (dyndata, ld_state.ndynamic_filled++,
- DT_VERNEED, shdr->sh_addr);
-
- new_dynamic_entry (dyndata, ld_state.ndynamic_filled++,
- DT_VERNEEDNUM, ld_state.nverdeffile);
- }
-
- if (ld_state.versymscnidx != 0)
- {
- xelf_getshdr (elf_getscn (ld_state.outelf,
- ld_state.versymscnidx), shdr);
- assert (shdr != NULL);
- new_dynamic_entry (dyndata, ld_state.ndynamic_filled++,
- DT_VERSYM, shdr->sh_addr);
- }
-
- /* We always create the DT_DEBUG entry. */
- new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, DT_DEBUG, 0);
- assert (ld_state.ndynamic_filled < ld_state.ndynamic);
-
- /* Add the flag words if necessary. */
- if (ld_state.dt_flags != 0)
- new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, DT_FLAGS,
- ld_state.dt_flags);
-
- /* Create entry for the DT_FLAGS_1 flag. */
- if (ld_state.dt_flags_1 != 0)
- new_dynamic_entry (dyndata, ld_state.ndynamic_filled++,
- DT_FLAGS_1, ld_state.dt_flags_1);
-
- /* Create entry for the DT_FEATURE_1 flag. */
- if (ld_state.dt_feature_1 != 0)
- new_dynamic_entry (dyndata, ld_state.ndynamic_filled++,
- DT_FEATURE_1, ld_state.dt_feature_1);
-
- assert (ld_state.ndynamic_filled <= ld_state.ndynamic);
- }
- }
-
-
- // XXX The following code isn't nice. We use two different
- // mechanisms to handle relocations, one for relocatable files, one
- // for executables and DSOs. Maybe this is the best method but also
- // maybe it can be somewhat unified.
-
- /* Now that we created the symbol table we can add the reference to
- it in the sh_link field of the section headers of the relocation
- sections. */
- while (rellist != NULL)
- {
- assert (ld_state.file_type == relocatable_file_type);
- Elf_Scn *outscn;
-
- outscn = elf_getscn (ld_state.outelf, rellist->scnidx);
- xelf_getshdr (outscn, shdr);
- /* This must not fail since we did it before. */
- assert (shdr != NULL);
-
- /* Remember the symbol table which belongs to the relocation section. */
- shdr->sh_link = ld_state.symscnidx;
-
- /* And the reference to the section which is relocated by this
- relocation section. We use the info from the first input
- section but all records should have the same information. */
- shdr->sh_info =
- rellist->scninfo->fileinfo->scninfo[SCNINFO_SHDR (rellist->scninfo->shdr).sh_info].outscnndx;
-
-
- /* Perform the actual relocations. We only have to adjust
- offsets and symbol indices. */
- RELOCATE_SECTION (statep, outscn, rellist->scninfo, dblindirect);
-
- /* Store the changes. */
- (void) xelf_update_shdr (outscn, shdr);
-
- /* Up to the next relocation section. */
- rellist = rellist->next;
- }
-
- if (ld_state.rellist != NULL)
- {
- assert (ld_state.file_type != relocatable_file_type);
- /* Create the relocations for the output file. */
- CREATE_RELOCATIONS (statep, dblindirect);
- }
-
-
- /* We need the ELF header once more. */
- xelf_getehdr (ld_state.outelf, ehdr);
- assert (ehdr != NULL);
-
- /* Set the section header string table index. */
- if (likely (shstrtab_ndx < SHN_HIRESERVE)
- && likely (shstrtab_ndx != SHN_XINDEX))
- ehdr->e_shstrndx = shstrtab_ndx;
- else
- {
- /* We have to put the section index in the sh_link field of the
- zeroth section header. */
- Elf_Scn *scn = elf_getscn (ld_state.outelf, 0);
-
- xelf_getshdr (scn, shdr);
- if (unlikely (shdr == NULL))
- error (EXIT_FAILURE, 0,
- gettext ("cannot get header of 0th section: %s"),
- elf_errmsg (-1));
-
- shdr->sh_link = shstrtab_ndx;
-
- (void) xelf_update_shdr (scn, shdr);
-
- ehdr->e_shstrndx = SHN_XINDEX;
- }
-
- if (ld_state.file_type != relocatable_file_type)
- /* DSOs and executables have to define the entry point symbol. */
- ehdr->e_entry = find_entry_point ();
-
- if (unlikely (xelf_update_ehdr (ld_state.outelf, ehdr) == 0))
- error (EXIT_FAILURE, 0,
- gettext ("cannot update ELF header: %s"),
- elf_errmsg (-1));
-
-
- /* Free the data which we don't need anymore. */
- free (ld_state.dblindirect);
-
-
- /* Finalize the .plt section and what else belongs to it. */
- FINALIZE_PLT (statep, nsym, nsym_local, ndxtosym);
-
-
- /* Finally, if we have to compute the build ID. */
- if (ld_state.build_id != NULL)
- compute_build_id ();
-
-
- /* We don't need the map from the symbol table index to the symbol
- structure anymore. */
- free (ndxtosym);
-
- return 0;
-}
-
-
-/* This is a function which must be specified in all backends. */
-static void
-ld_generic_relocate_section (struct ld_state *statep, Elf_Scn *outscn,
- struct scninfo *firstp,
- const Elf32_Word *dblindirect)
-{
- error (EXIT_FAILURE, 0, gettext ("\
-linker backend didn't specify function to relocate section"));
- /* NOTREACHED */
-}
-
-
-/* Finalize the output file. */
-static int
-ld_generic_finalize (struct ld_state *statep)
-{
- /* Write out the ELF file data. */
- if (elf_update (ld_state.outelf, ELF_C_WRITE) == -1)
- error (EXIT_FAILURE, 0, gettext ("while writing output file: %s"),
- elf_errmsg (-1));
-
- /* Free the resources. */
- if (elf_end (ld_state.outelf) != 0)
- error (EXIT_FAILURE, 0, gettext ("while finishing output file: %s"),
- elf_errmsg (-1));
-
- /* Get the file status of the temporary file. */
- struct stat temp_st;
- if (fstat (ld_state.outfd, &temp_st) != 0)
- error (EXIT_FAILURE, errno, gettext ("cannot stat output file"));
-
- /* Now it's time to rename the file. Remove an old existing file
- first. */
- if (rename (ld_state.tempfname, ld_state.outfname) != 0)
- /* Something went wrong. */
- error (EXIT_FAILURE, errno, gettext ("cannot rename output file"));
-
- /* Make sure the output file is really the one we created. */
- struct stat new_st;
- if (stat (ld_state.outfname, &new_st) != 0
- || new_st.st_ino != temp_st.st_ino
- || new_st.st_dev != temp_st.st_dev)
- {
- /* Wow, somebody overwrote the output file, probably some intruder. */
- unlink (ld_state.outfname);
- error (EXIT_FAILURE, 0, gettext ("\
-WARNING: temporary output file overwritten before linking finished"));
- }
-
- /* Close the file descriptor. */
- (void) close (ld_state.outfd);
-
- /* Signal the cleanup handler that the file is correctly created. */
- ld_state.tempfname = NULL;
-
- return 0;
-}
-
-
-static bool
-ld_generic_special_section_number_p (struct ld_state *statep, size_t number)
-{
- /* There are no special section numbers in the gABI. */
- return false;
-}
-
-
-static bool
-ld_generic_section_type_p (struct ld_state *statep, GElf_Word type)
-{
- if (type < SHT_NUM
- /* XXX Enable the following two when implemented. */
- // || type == SHT_GNU_LIBLIST
- // || type == SHT_CHECKSUM
- /* XXX Eventually include SHT_SUNW_move, SHT_SUNW_COMDAT, and
- SHT_SUNW_syminfo. */
- || (type >= SHT_GNU_verdef && type <= SHT_GNU_versym))
- return true;
-
- return false;
-}
-
-
-static XElf_Xword
-ld_generic_dynamic_section_flags (struct ld_state *statep)
-{
- /* By default the .dynamic section is writable (and is of course
- loaded). Few architecture differ from this. */
- return SHF_ALLOC | SHF_WRITE;
-}
-
-
-static void
-ld_generic_initialize_plt (struct ld_state *statep, Elf_Scn *scn)
-{
- /* This cannot be implemented generally. There should have been a
- machine dependent implementation and we should never have arrived
- here. */
- error (EXIT_FAILURE, 0, gettext ("no machine specific '%s' implementation"),
- "initialize_plt");
-}
-
-
-static void
-ld_generic_initialize_pltrel (struct ld_state *statep, Elf_Scn *scn)
-{
- /* This cannot be implemented generally. There should have been a
- machine dependent implementation and we should never have arrived
- here. */
- error (EXIT_FAILURE, 0, gettext ("no machine specific '%s' implementation"),
- "initialize_pltrel");
-}
-
-
-static void
-ld_generic_initialize_got (struct ld_state *statep, Elf_Scn *scn)
-{
- /* This cannot be implemented generally. There should have been a
- machine dependent implementation and we should never have arrived
- here. */
- error (EXIT_FAILURE, 0, gettext ("no machine specific '%s' implementation"),
- "initialize_got");
-}
-
-
-static void
-ld_generic_initialize_gotplt (struct ld_state *statep, Elf_Scn *scn)
-{
- /* This cannot be implemented generally. There should have been a
- machine dependent implementation and we should never have arrived
- here. */
- error (EXIT_FAILURE, 0, gettext ("no machine specific '%s' implementation"),
- "initialize_gotplt");
-}
-
-
-static void
-ld_generic_finalize_plt (struct ld_state *statep, size_t nsym, size_t nsym_dyn,
- struct symbol **ndxtosymp)
-{
- /* By default we assume that nothing has to be done. */
-}
-
-
-static int
-ld_generic_rel_type (struct ld_state *statep)
-{
- /* This cannot be implemented generally. There should have been a
- machine dependent implementation and we should never have arrived
- here. */
- error (EXIT_FAILURE, 0, gettext ("no machine specific '%s' implementation"),
- "rel_type");
- /* Just to keep the compiler calm. */
- return 0;
-}
-
-
-static void
-ld_generic_count_relocations (struct ld_state *statep, struct scninfo *scninfo)
-{
- /* This cannot be implemented generally. There should have been a
- machine dependent implementation and we should never have arrived
- here. */
- error (EXIT_FAILURE, 0, gettext ("no machine specific '%s' implementation"),
- "count_relocations");
-}
-
-
-static void
-ld_generic_create_relocations (struct ld_state *statep,
- const Elf32_Word *dblindirect)
-{
- /* This cannot be implemented generally. There should have been a
- machine dependent implementation and we should never have arrived
- here. */
- error (EXIT_FAILURE, 0, gettext ("no machine specific '%s' implementation"),
- "create_relocations");
-}
diff --git a/src/ldlex.c b/src/ldlex.c
deleted file mode 100644
index dbbdf07..0000000
--- a/src/ldlex.c
+++ /dev/null
@@ -1,2933 +0,0 @@
-#line 2 "ldlex.c"
-
-#line 4 "ldlex.c"
-
-#define YY_INT_ALIGNED short int
-
-/* A lexical scanner generated by flex */
-
-#define yy_create_buffer ld_create_buffer
-#define yy_delete_buffer ld_delete_buffer
-#define yy_flex_debug ld_flex_debug
-#define yy_init_buffer ld_init_buffer
-#define yy_flush_buffer ld_flush_buffer
-#define yy_load_buffer_state ld_load_buffer_state
-#define yy_switch_to_buffer ld_switch_to_buffer
-#define yyin ldin
-#define yyleng ldleng
-#define yylex ldlex
-#define yylineno ldlineno
-#define yyout ldout
-#define yyrestart ldrestart
-#define yytext ldtext
-#define yywrap ldwrap
-#define yyalloc ldalloc
-#define yyrealloc ldrealloc
-#define yyfree ldfree
-
-#define FLEX_SCANNER
-#define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 35
-#if YY_FLEX_SUBMINOR_VERSION > 0
-#define FLEX_BETA
-#endif
-
-/* First, we deal with platform-specific or compiler-specific issues. */
-
-/* begin standard C headers. */
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <stdlib.h>
-
-/* end standard C headers. */
-
-/* flex integer type definitions */
-
-#ifndef FLEXINT_H
-#define FLEXINT_H
-
-/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
-
-#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-
-/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
- * if you want the limit (max/min) macros for int types.
- */
-#ifndef __STDC_LIMIT_MACROS
-#define __STDC_LIMIT_MACROS 1
-#endif
-
-#include <inttypes.h>
-typedef int8_t flex_int8_t;
-typedef uint8_t flex_uint8_t;
-typedef int16_t flex_int16_t;
-typedef uint16_t flex_uint16_t;
-typedef int32_t flex_int32_t;
-typedef uint32_t flex_uint32_t;
-#else
-typedef signed char flex_int8_t;
-typedef short int flex_int16_t;
-typedef int flex_int32_t;
-typedef unsigned char flex_uint8_t;
-typedef unsigned short int flex_uint16_t;
-typedef unsigned int flex_uint32_t;
-#endif /* ! C99 */
-
-/* Limits of integral types. */
-#ifndef INT8_MIN
-#define INT8_MIN (-128)
-#endif
-#ifndef INT16_MIN
-#define INT16_MIN (-32767-1)
-#endif
-#ifndef INT32_MIN
-#define INT32_MIN (-2147483647-1)
-#endif
-#ifndef INT8_MAX
-#define INT8_MAX (127)
-#endif
-#ifndef INT16_MAX
-#define INT16_MAX (32767)
-#endif
-#ifndef INT32_MAX
-#define INT32_MAX (2147483647)
-#endif
-#ifndef UINT8_MAX
-#define UINT8_MAX (255U)
-#endif
-#ifndef UINT16_MAX
-#define UINT16_MAX (65535U)
-#endif
-#ifndef UINT32_MAX
-#define UINT32_MAX (4294967295U)
-#endif
-
-#endif /* ! FLEXINT_H */
-
-#ifdef __cplusplus
-
-/* The "const" storage-class-modifier is valid. */
-#define YY_USE_CONST
-
-#else /* ! __cplusplus */
-
-/* C99 requires __STDC__ to be defined as 1. */
-#if defined (__STDC__)
-
-#define YY_USE_CONST
-
-#endif /* defined (__STDC__) */
-#endif /* ! __cplusplus */
-
-#ifdef YY_USE_CONST
-#define yyconst const
-#else
-#define yyconst
-#endif
-
-/* Returned upon end-of-file. */
-#define YY_NULL 0
-
-/* Promotes a possibly negative, possibly signed char to an unsigned
- * integer for use as an array index. If the signed char is negative,
- * we want to instead treat it as an 8-bit unsigned char, hence the
- * double cast.
- */
-#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
-
-/* Enter a start condition. This macro really ought to take a parameter,
- * but we do it the disgusting crufty way forced on us by the ()-less
- * definition of BEGIN.
- */
-#define BEGIN (yy_start) = 1 + 2 *
-
-/* Translate the current start state into a value that can be later handed
- * to BEGIN to return to the state. The YYSTATE alias is for lex
- * compatibility.
- */
-#define YY_START (((yy_start) - 1) / 2)
-#define YYSTATE YY_START
-
-/* Action number for EOF rule of a given start state. */
-#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
-
-/* Special action meaning "start processing a new file". */
-#define YY_NEW_FILE ldrestart(ldin )
-
-#define YY_END_OF_BUFFER_CHAR 0
-
-/* Size of default input buffer. */
-#ifndef YY_BUF_SIZE
-#define YY_BUF_SIZE 16384
-#endif
-
-/* The state buf must be large enough to hold one state per character in the main buffer.
- */
-#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
-
-#ifndef YY_TYPEDEF_YY_BUFFER_STATE
-#define YY_TYPEDEF_YY_BUFFER_STATE
-typedef struct yy_buffer_state *YY_BUFFER_STATE;
-#endif
-
-extern int ldleng;
-
-extern FILE *ldin, *ldout;
-
-#define EOB_ACT_CONTINUE_SCAN 0
-#define EOB_ACT_END_OF_FILE 1
-#define EOB_ACT_LAST_MATCH 2
-
- /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
- * access to the local variable yy_act. Since yyless() is a macro, it would break
- * existing scanners that call yyless() from OUTSIDE ldlex.
- * One obvious solution it to make yy_act a global. I tried that, and saw
- * a 5% performance hit in a non-ldlineno scanner, because yy_act is
- * normally declared as a register variable-- so it is not worth it.
- */
- #define YY_LESS_LINENO(n) \
- do { \
- int yyl;\
- for ( yyl = n; yyl < ldleng; ++yyl )\
- if ( ldtext[yyl] == '\n' )\
- --ldlineno;\
- }while(0)
-
-/* Return all but the first "n" matched characters back to the input stream. */
-#define yyless(n) \
- do \
- { \
- /* Undo effects of setting up ldtext. */ \
- int yyless_macro_arg = (n); \
- YY_LESS_LINENO(yyless_macro_arg);\
- *yy_cp = (yy_hold_char); \
- YY_RESTORE_YY_MORE_OFFSET \
- (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
- YY_DO_BEFORE_ACTION; /* set up ldtext again */ \
- } \
- while ( 0 )
-
-#define unput(c) yyunput( c, (yytext_ptr) )
-
-#ifndef YY_TYPEDEF_YY_SIZE_T
-#define YY_TYPEDEF_YY_SIZE_T
-typedef size_t yy_size_t;
-#endif
-
-#ifndef YY_STRUCT_YY_BUFFER_STATE
-#define YY_STRUCT_YY_BUFFER_STATE
-struct yy_buffer_state
- {
- FILE *yy_input_file;
-
- char *yy_ch_buf; /* input buffer */
- char *yy_buf_pos; /* current position in input buffer */
-
- /* Size of input buffer in bytes, not including room for EOB
- * characters.
- */
- yy_size_t yy_buf_size;
-
- /* Number of characters read into yy_ch_buf, not including EOB
- * characters.
- */
- int yy_n_chars;
-
- /* Whether we "own" the buffer - i.e., we know we created it,
- * and can realloc() it to grow it, and should free() it to
- * delete it.
- */
- int yy_is_our_buffer;
-
- /* Whether this is an "interactive" input source; if so, and
- * if we're using stdio for input, then we want to use getc()
- * instead of fread(), to make sure we stop fetching input after
- * each newline.
- */
- int yy_is_interactive;
-
- /* Whether we're considered to be at the beginning of a line.
- * If so, '^' rules will be active on the next match, otherwise
- * not.
- */
- int yy_at_bol;
-
- int yy_bs_lineno; /**< The line count. */
- int yy_bs_column; /**< The column count. */
-
- /* Whether to try to fill the input buffer when we reach the
- * end of it.
- */
- int yy_fill_buffer;
-
- int yy_buffer_status;
-
-#define YY_BUFFER_NEW 0
-#define YY_BUFFER_NORMAL 1
- /* When an EOF's been seen but there's still some text to process
- * then we mark the buffer as YY_EOF_PENDING, to indicate that we
- * shouldn't try reading from the input source any more. We might
- * still have a bunch of tokens to match, though, because of
- * possible backing-up.
- *
- * When we actually see the EOF, we change the status to "new"
- * (via ldrestart()), so that the user can continue scanning by
- * just pointing ldin at a new input file.
- */
-#define YY_BUFFER_EOF_PENDING 2
-
- };
-#endif /* !YY_STRUCT_YY_BUFFER_STATE */
-
-/* Stack of input buffers. */
-static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
-static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
-static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
-
-/* We provide macros for accessing buffer states in case in the
- * future we want to put the buffer states in a more general
- * "scanner state".
- *
- * Returns the top of the stack, or NULL.
- */
-#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
- ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
- : NULL)
-
-/* Same as previous macro, but useful when we know that the buffer stack is not
- * NULL or when we need an lvalue. For internal use only.
- */
-#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
-
-/* yy_hold_char holds the character lost when ldtext is formed. */
-static char yy_hold_char;
-static int yy_n_chars; /* number of characters read into yy_ch_buf */
-int ldleng;
-
-/* Points to current character in buffer. */
-static char *yy_c_buf_p = (char *) 0;
-static int yy_init = 0; /* whether we need to initialize */
-static int yy_start = 0; /* start state number */
-
-/* Flag which is used to allow ldwrap()'s to do buffer switches
- * instead of setting up a fresh ldin. A bit of a hack ...
- */
-static int yy_did_buffer_switch_on_eof;
-
-void ldrestart (FILE *input_file );
-void ld_switch_to_buffer (YY_BUFFER_STATE new_buffer );
-YY_BUFFER_STATE ld_create_buffer (FILE *file,int size );
-void ld_delete_buffer (YY_BUFFER_STATE b );
-void ld_flush_buffer (YY_BUFFER_STATE b );
-void ldpush_buffer_state (YY_BUFFER_STATE new_buffer );
-void ldpop_buffer_state (void );
-
-static void ldensure_buffer_stack (void );
-static void ld_load_buffer_state (void );
-static void ld_init_buffer (YY_BUFFER_STATE b,FILE *file );
-
-#define YY_FLUSH_BUFFER ld_flush_buffer(YY_CURRENT_BUFFER )
-
-YY_BUFFER_STATE ld_scan_buffer (char *base,yy_size_t size );
-YY_BUFFER_STATE ld_scan_string (yyconst char *yy_str );
-YY_BUFFER_STATE ld_scan_bytes (yyconst char *bytes,int len );
-
-void *ldalloc (yy_size_t );
-void *ldrealloc (void *,yy_size_t );
-void ldfree (void * );
-
-#define yy_new_buffer ld_create_buffer
-
-#define yy_set_interactive(is_interactive) \
- { \
- if ( ! YY_CURRENT_BUFFER ){ \
- ldensure_buffer_stack (); \
- YY_CURRENT_BUFFER_LVALUE = \
- ld_create_buffer(ldin,YY_BUF_SIZE ); \
- } \
- YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
- }
-
-#define yy_set_bol(at_bol) \
- { \
- if ( ! YY_CURRENT_BUFFER ){\
- ldensure_buffer_stack (); \
- YY_CURRENT_BUFFER_LVALUE = \
- ld_create_buffer(ldin,YY_BUF_SIZE ); \
- } \
- YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
- }
-
-#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
-
-/* Begin user sect3 */
-
-#define ldwrap(n) 1
-#define YY_SKIP_YYWRAP
-
-typedef unsigned char YY_CHAR;
-
-FILE *ldin = (FILE *) 0, *ldout = (FILE *) 0;
-
-typedef int yy_state_type;
-
-extern int ldlineno;
-
-int ldlineno = 1;
-
-extern char *ldtext;
-#define yytext_ptr ldtext
-
-static yy_state_type yy_get_previous_state (void );
-static yy_state_type yy_try_NUL_trans (yy_state_type current_state );
-static int yy_get_next_buffer (void );
-static void yy_fatal_error (yyconst char msg[] );
-
-/* Done after the current pattern has been matched and before the
- * corresponding action - sets up ldtext.
- */
-#define YY_DO_BEFORE_ACTION \
- (yytext_ptr) = yy_bp; \
- ldleng = (size_t) (yy_cp - yy_bp); \
- (yy_hold_char) = *yy_cp; \
- *yy_cp = '\0'; \
- (yy_c_buf_p) = yy_cp;
-
-#define YY_NUM_RULES 50
-#define YY_END_OF_BUFFER 51
-/* This struct is not used in this scanner,
- but its presence is necessary. */
-struct yy_trans_info
- {
- flex_int32_t yy_verify;
- flex_int32_t yy_nxt;
- };
-static yyconst flex_int16_t yy_accept[219] =
- { 0,
- 0, 0, 0, 0, 51, 49, 48, 48, 41, 42,
- 32, 33, 39, 37, 44, 38, 46, 40, 45, 45,
- 34, 35, 36, 46, 46, 46, 46, 46, 46, 46,
- 46, 46, 46, 49, 49, 46, 46, 30, 43, 31,
- 49, 9, 9, 48, 46, 47, 46, 10, 45, 45,
- 45, 46, 45, 46, 46, 46, 46, 46, 46, 46,
- 46, 46, 46, 46, 46, 46, 46, 0, 29, 46,
- 46, 0, 0, 0, 0, 45, 46, 46, 46, 46,
- 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
- 46, 46, 0, 46, 46, 0, 0, 0, 0, 0,
-
- 0, 45, 46, 46, 46, 46, 46, 46, 46, 19,
- 46, 46, 46, 46, 46, 46, 27, 46, 0, 46,
- 46, 0, 0, 0, 0, 0, 0, 0, 0, 11,
- 46, 13, 46, 16, 17, 46, 46, 46, 46, 46,
- 46, 46, 46, 46, 46, 0, 0, 0, 0, 0,
- 0, 0, 0, 46, 46, 18, 46, 46, 46, 46,
- 46, 46, 46, 46, 20, 0, 2, 0, 0, 0,
- 6, 0, 0, 46, 46, 46, 46, 23, 46, 25,
- 46, 28, 15, 0, 4, 1, 0, 8, 5, 46,
- 46, 46, 22, 46, 46, 0, 0, 12, 46, 46,
-
- 46, 46, 3, 7, 46, 46, 24, 46, 46, 46,
- 46, 14, 46, 46, 21, 46, 26, 0
- } ;
-
-static yyconst flex_int32_t yy_ec[256] =
- { 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
- 2, 2, 2, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 2, 1, 1, 4, 1, 5, 6, 1, 7,
- 8, 9, 10, 11, 12, 13, 14, 15, 16, 16,
- 16, 16, 16, 16, 16, 17, 17, 18, 19, 1,
- 20, 1, 21, 1, 22, 23, 24, 25, 26, 27,
- 28, 29, 30, 13, 31, 32, 33, 34, 35, 36,
- 13, 37, 38, 39, 40, 41, 42, 43, 44, 45,
- 46, 47, 48, 1, 49, 1, 50, 51, 52, 53,
-
- 54, 55, 56, 13, 57, 13, 58, 59, 58, 60,
- 61, 13, 13, 13, 62, 13, 13, 13, 13, 63,
- 13, 13, 64, 65, 66, 47, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1
- } ;
-
-static yyconst flex_int32_t yy_meta[67] =
- { 0,
- 1, 2, 2, 1, 1, 1, 2, 2, 3, 1,
- 1, 3, 3, 1, 3, 3, 3, 2, 2, 1,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 2, 1, 2, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 2, 1, 2
- } ;
-
-static yyconst flex_int16_t yy_base[223] =
- { 0,
- 0, 217, 0, 216, 216, 2250, 65, 67, 2250, 2250,
- 2250, 2250, 0, 2250, 2250, 2250, 70, 206, 135, 62,
- 2250, 2250, 2250, 0, 186, 70, 127, 146, 179, 210,
- 259, 308, 246, 46, 0, 268, 297, 2250, 2250, 2250,
- 25, 2250, 42, 70, 0, 0, 304, 0, 48, 224,
- 337, 386, 389, 438, 441, 444, 493, 496, 545, 532,
- 554, 583, 589, 638, 634, 641, 672, 73, 2250, 691,
- 695, 38, 159, 47, 158, 69, 728, 747, 751, 780,
- 784, 813, 819, 842, 848, 871, 877, 900, 908, 929,
- 937, 958, 81, 966, 987, 52, 158, 155, 69, 154,
-
- 153, 995, 1018, 1031, 1039, 1070, 1062, 1091, 1120, 1127,
- 1131, 1160, 1171, 1193, 1204, 1164, 1226, 1233, 151, 1237,
- 1266, 142, 138, 134, 134, 132, 132, 124, 115, 1277,
- 1288, 1301, 1322, 1341, 1345, 1374, 1380, 1409, 1430, 1433,
- 1464, 1485, 1488, 1509, 1538, 114, 135, 110, 104, 81,
- 145, 77, 75, 1545, 1549, 1578, 1582, 1589, 1611, 1633,
- 1640, 1644, 1684, 1693, 2250, 68, 2250, 151, 154, 65,
- 2250, 169, 171, 1697, 1728, 1737, 1750, 1772, 1781, 1794,
- 1803, 1825, 2250, 57, 2250, 2250, 53, 2250, 2250, 1834,
- 1847, 1838, 1869, 1878, 1900, 173, 181, 1907, 1929, 1936,
-
- 1960, 1967, 2250, 2250, 1989, 1996, 2000, 2040, 2051, 2029,
- 2064, 2085, 2108, 2119, 2142, 2148, 2177, 2250, 2240, 89,
- 2243, 2246
- } ;
-
-static yyconst flex_int16_t yy_def[223] =
- { 0,
- 218, 1, 219, 219, 218, 218, 218, 218, 218, 218,
- 218, 218, 220, 218, 218, 218, 221, 222, 221, 19,
- 218, 218, 218, 220, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 218, 222, 19, 19, 218, 218, 218,
- 218, 218, 218, 218, 220, 222, 19, 222, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 218, 218, 19,
- 19, 218, 218, 218, 218, 52, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 218, 19, 19, 218, 218, 218, 218, 218,
-
- 218, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19, 218, 19,
- 19, 218, 218, 218, 218, 218, 218, 218, 218, 19,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 218, 218, 218, 218, 218,
- 218, 218, 218, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 218, 218, 218, 218, 218, 218,
- 218, 218, 218, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 218, 218, 218, 218, 218, 218, 218, 19,
- 19, 19, 19, 19, 19, 218, 218, 19, 19, 19,
-
- 19, 19, 218, 218, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 0, 218, 218,
- 218, 218
- } ;
-
-static yyconst flex_int16_t yy_nxt[2317] =
- { 0,
- 6, 7, 8, 6, 9, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 20, 21, 22, 23,
- 24, 25, 17, 17, 17, 26, 17, 27, 17, 28,
- 29, 17, 17, 17, 30, 31, 17, 32, 17, 17,
- 33, 17, 17, 17, 17, 34, 35, 6, 17, 17,
- 17, 17, 17, 17, 17, 36, 17, 17, 37, 17,
- 17, 17, 17, 38, 39, 40, 44, 44, 44, 44,
- 46, 44, 44, 46, 46, 46, 50, 50, 72, 46,
- 46, 73, 68, 46, 47, 47, 47, 68, 68, 46,
- 47, 45, 53, 69, 53, 74, 96, 97, 75, 102,
-
- 47, 102, 47, 56, 47, 99, 100, 197, 122, 93,
- 47, 196, 57, 123, 93, 93, 46, 119, 187, 53,
- 69, 184, 119, 119, 47, 126, 102, 47, 69, 173,
- 127, 172, 47, 170, 46, 46, 167, 167, 46, 46,
- 46, 47, 47, 47, 46, 46, 171, 171, 46, 49,
- 49, 50, 185, 185, 46, 186, 186, 47, 169, 47,
- 47, 47, 47, 58, 168, 51, 166, 51, 153, 47,
- 188, 188, 189, 189, 203, 203, 47, 52, 47, 59,
- 152, 46, 204, 204, 47, 151, 150, 149, 47, 47,
- 148, 147, 51, 47, 47, 47, 146, 52, 69, 46,
-
- 47, 47, 47, 47, 60, 129, 128, 125, 47, 47,
- 124, 47, 101, 98, 48, 218, 47, 54, 47, 43,
- 41, 47, 218, 55, 47, 47, 47, 218, 47, 218,
- 218, 218, 218, 218, 218, 218, 47, 218, 50, 50,
- 47, 47, 47, 47, 218, 218, 218, 218, 47, 61,
- 218, 218, 47, 218, 53, 218, 53, 218, 218, 218,
- 47, 47, 47, 218, 218, 218, 47, 47, 218, 218,
- 218, 67, 47, 47, 47, 47, 47, 218, 47, 218,
- 62, 53, 47, 47, 47, 218, 47, 218, 47, 47,
- 218, 47, 218, 218, 218, 63, 218, 218, 47, 218,
-
- 47, 47, 218, 47, 218, 218, 218, 218, 47, 218,
- 47, 47, 47, 47, 218, 218, 47, 218, 47, 47,
- 47, 47, 47, 47, 47, 47, 70, 47, 218, 47,
- 47, 218, 218, 64, 47, 218, 47, 65, 47, 47,
- 47, 218, 66, 218, 218, 218, 47, 218, 218, 218,
- 47, 47, 47, 47, 47, 218, 218, 71, 218, 47,
- 218, 47, 218, 218, 218, 47, 47, 47, 218, 47,
- 47, 218, 218, 218, 218, 218, 218, 218, 218, 47,
- 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
- 218, 218, 218, 218, 47, 218, 218, 218, 218, 47,
-
- 76, 76, 76, 47, 47, 47, 218, 76, 76, 76,
- 76, 76, 76, 218, 218, 218, 47, 218, 47, 47,
- 218, 47, 218, 218, 218, 218, 218, 218, 47, 218,
- 218, 47, 218, 218, 218, 76, 76, 76, 76, 76,
- 76, 218, 218, 47, 218, 218, 47, 218, 47, 218,
- 218, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 218, 218, 218, 218, 218, 218, 77, 47, 218,
- 47, 47, 218, 47, 47, 218, 47, 218, 218, 218,
- 47, 218, 79, 47, 218, 218, 47, 218, 218, 78,
- 218, 218, 218, 218, 218, 47, 218, 218, 47, 218,
-
- 47, 47, 218, 47, 218, 218, 47, 47, 47, 47,
- 47, 47, 47, 218, 218, 218, 80, 218, 218, 218,
- 218, 218, 218, 47, 218, 47, 47, 218, 47, 218,
- 81, 218, 218, 218, 218, 47, 218, 218, 47, 218,
- 218, 218, 218, 218, 218, 218, 47, 47, 47, 218,
- 47, 218, 218, 47, 218, 47, 218, 84, 47, 47,
- 47, 47, 47, 218, 47, 218, 218, 218, 47, 47,
- 47, 218, 218, 218, 47, 47, 218, 47, 218, 218,
- 82, 218, 218, 83, 47, 218, 47, 47, 218, 47,
- 218, 218, 85, 218, 47, 218, 47, 47, 47, 47,
-
- 218, 218, 47, 47, 47, 47, 218, 47, 218, 218,
- 86, 47, 218, 47, 218, 47, 47, 218, 218, 47,
- 218, 47, 218, 87, 218, 47, 218, 218, 218, 218,
- 218, 47, 218, 218, 218, 218, 218, 218, 218, 218,
- 47, 218, 218, 218, 218, 47, 47, 218, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 218, 88,
- 218, 218, 218, 218, 47, 89, 47, 218, 47, 218,
- 47, 47, 218, 47, 218, 218, 47, 91, 90, 218,
- 47, 218, 218, 47, 218, 218, 47, 47, 47, 218,
- 218, 47, 218, 218, 218, 47, 47, 218, 47, 218,
-
- 47, 218, 47, 47, 47, 47, 47, 47, 92, 47,
- 47, 47, 218, 218, 47, 218, 218, 218, 218, 218,
- 218, 47, 218, 47, 218, 47, 218, 47, 218, 47,
- 218, 218, 218, 47, 47, 218, 218, 47, 218, 218,
- 218, 218, 47, 47, 47, 218, 95, 218, 47, 218,
- 218, 94, 47, 47, 218, 103, 218, 47, 47, 218,
- 47, 47, 47, 47, 218, 47, 47, 47, 218, 218,
- 47, 218, 218, 218, 218, 218, 218, 47, 218, 47,
- 104, 47, 218, 47, 218, 47, 218, 105, 218, 47,
- 47, 218, 218, 47, 47, 47, 47, 218, 47, 47,
-
- 47, 218, 218, 218, 47, 218, 218, 218, 47, 47,
- 47, 106, 47, 47, 47, 218, 47, 218, 218, 218,
- 218, 218, 47, 107, 218, 218, 47, 47, 47, 47,
- 218, 218, 218, 47, 47, 47, 218, 47, 218, 218,
- 218, 47, 47, 47, 109, 47, 47, 218, 218, 47,
- 218, 47, 108, 218, 218, 47, 47, 47, 47, 218,
- 218, 47, 47, 47, 47, 218, 218, 218, 218, 218,
- 47, 218, 47, 218, 47, 47, 47, 110, 47, 218,
- 47, 47, 218, 111, 47, 47, 47, 47, 218, 218,
- 47, 47, 47, 47, 218, 218, 112, 218, 218, 47,
-
- 218, 47, 218, 47, 47, 47, 218, 47, 218, 47,
- 47, 218, 218, 47, 47, 47, 47, 113, 218, 47,
- 218, 218, 47, 47, 47, 218, 218, 218, 47, 218,
- 47, 218, 47, 47, 47, 218, 114, 218, 47, 47,
- 115, 218, 47, 47, 47, 47, 218, 218, 218, 218,
- 47, 47, 47, 47, 116, 218, 218, 47, 218, 47,
- 218, 47, 47, 218, 218, 47, 218, 47, 218, 47,
- 47, 47, 47, 47, 47, 117, 218, 218, 218, 47,
- 47, 47, 47, 218, 218, 218, 47, 218, 47, 218,
- 47, 47, 218, 218, 47, 118, 47, 218, 47, 47,
-
- 47, 47, 47, 47, 218, 218, 218, 218, 47, 47,
- 47, 47, 218, 218, 218, 47, 120, 47, 218, 47,
- 47, 218, 218, 47, 218, 47, 218, 47, 47, 47,
- 218, 218, 47, 47, 47, 218, 121, 47, 218, 218,
- 218, 218, 218, 218, 47, 47, 47, 47, 47, 47,
- 47, 130, 47, 47, 47, 47, 131, 47, 218, 218,
- 47, 47, 218, 47, 218, 218, 218, 218, 218, 47,
- 218, 47, 218, 47, 218, 47, 47, 47, 47, 218,
- 47, 47, 132, 218, 47, 47, 47, 218, 47, 218,
- 218, 218, 47, 47, 47, 218, 47, 134, 218, 218,
-
- 47, 47, 47, 218, 47, 47, 47, 47, 218, 133,
- 218, 218, 47, 218, 218, 218, 218, 218, 218, 47,
- 218, 47, 218, 47, 47, 218, 218, 47, 218, 135,
- 218, 218, 47, 47, 47, 47, 47, 218, 218, 218,
- 218, 47, 47, 47, 218, 47, 47, 47, 47, 218,
- 47, 218, 47, 47, 218, 218, 136, 47, 218, 47,
- 218, 47, 47, 47, 218, 218, 218, 218, 218, 47,
- 137, 218, 218, 47, 47, 47, 47, 47, 47, 47,
- 47, 218, 47, 218, 47, 47, 47, 47, 47, 47,
- 47, 218, 47, 47, 47, 218, 47, 138, 142, 218,
-
- 139, 47, 47, 47, 218, 218, 47, 47, 47, 47,
- 218, 218, 218, 47, 218, 218, 140, 47, 47, 47,
- 47, 47, 47, 47, 218, 47, 47, 218, 47, 141,
- 218, 218, 218, 47, 47, 47, 47, 218, 218, 218,
- 47, 47, 47, 218, 218, 218, 47, 47, 47, 47,
- 47, 47, 47, 47, 218, 47, 47, 218, 47, 218,
- 218, 47, 143, 47, 218, 47, 47, 47, 47, 47,
- 218, 218, 218, 218, 218, 47, 218, 218, 218, 47,
- 47, 47, 47, 47, 218, 218, 144, 218, 47, 218,
- 47, 47, 47, 47, 47, 47, 47, 218, 47, 47,
-
- 218, 218, 47, 47, 47, 218, 218, 47, 47, 47,
- 218, 218, 218, 154, 218, 47, 47, 47, 47, 47,
- 47, 218, 218, 47, 145, 218, 218, 218, 47, 218,
- 47, 47, 218, 47, 47, 218, 47, 47, 47, 47,
- 218, 218, 218, 47, 218, 47, 155, 218, 218, 218,
- 47, 218, 47, 218, 47, 47, 47, 47, 47, 47,
- 47, 47, 218, 47, 47, 218, 218, 218, 218, 218,
- 218, 47, 218, 47, 218, 47, 218, 47, 218, 47,
- 218, 218, 218, 47, 47, 218, 218, 47, 47, 47,
- 47, 218, 218, 218, 47, 47, 47, 218, 47, 218,
-
- 218, 218, 47, 47, 47, 218, 47, 47, 218, 156,
- 47, 218, 47, 218, 218, 218, 47, 218, 157, 218,
- 218, 218, 47, 47, 47, 47, 218, 218, 218, 218,
- 218, 47, 218, 218, 218, 218, 47, 47, 158, 47,
- 218, 47, 47, 218, 47, 47, 47, 47, 47, 47,
- 218, 47, 218, 218, 159, 218, 218, 218, 218, 218,
- 47, 160, 47, 47, 218, 47, 47, 218, 218, 218,
- 218, 47, 47, 218, 218, 47, 218, 218, 47, 47,
- 47, 218, 218, 218, 218, 218, 218, 47, 218, 218,
- 47, 218, 47, 218, 47, 47, 47, 161, 218, 47,
-
- 47, 47, 47, 47, 47, 218, 47, 218, 218, 218,
- 218, 162, 218, 218, 218, 47, 218, 47, 47, 218,
- 47, 47, 163, 47, 47, 47, 47, 47, 218, 218,
- 47, 218, 218, 218, 218, 218, 218, 218, 218, 47,
- 218, 47, 47, 218, 218, 47, 218, 47, 218, 218,
- 47, 47, 47, 47, 47, 165, 218, 218, 218, 47,
- 47, 47, 218, 47, 47, 47, 47, 164, 47, 174,
- 47, 47, 218, 218, 175, 47, 218, 47, 218, 47,
- 47, 47, 218, 218, 218, 218, 218, 47, 218, 218,
- 218, 47, 47, 47, 47, 47, 47, 47, 47, 218,
-
- 47, 218, 47, 47, 47, 47, 47, 47, 47, 218,
- 47, 47, 47, 218, 47, 218, 218, 218, 218, 47,
- 47, 47, 218, 218, 47, 47, 47, 47, 218, 218,
- 176, 47, 218, 177, 218, 47, 178, 218, 218, 47,
- 47, 47, 218, 47, 47, 218, 47, 47, 47, 47,
- 218, 47, 218, 47, 47, 47, 47, 218, 47, 47,
- 47, 218, 218, 47, 218, 47, 218, 218, 47, 218,
- 47, 218, 47, 47, 47, 47, 47, 218, 180, 218,
- 218, 179, 47, 218, 218, 218, 47, 218, 218, 218,
- 47, 218, 181, 218, 218, 47, 218, 47, 47, 47,
-
- 47, 47, 47, 218, 218, 218, 47, 47, 47, 47,
- 183, 47, 47, 47, 47, 218, 47, 182, 218, 218,
- 218, 218, 190, 47, 218, 47, 47, 47, 218, 47,
- 218, 218, 218, 218, 218, 47, 218, 218, 218, 47,
- 218, 47, 47, 47, 47, 218, 47, 218, 218, 218,
- 47, 47, 47, 47, 47, 47, 218, 218, 47, 47,
- 47, 218, 218, 192, 47, 47, 47, 47, 218, 47,
- 47, 218, 218, 218, 218, 193, 191, 218, 218, 47,
- 47, 218, 47, 218, 218, 47, 47, 47, 47, 218,
- 47, 218, 47, 218, 47, 47, 47, 47, 218, 47,
-
- 218, 218, 47, 218, 47, 194, 218, 47, 47, 47,
- 47, 47, 47, 47, 47, 218, 218, 47, 47, 47,
- 218, 218, 218, 47, 47, 218, 47, 218, 218, 47,
- 218, 195, 218, 47, 47, 47, 47, 218, 47, 47,
- 47, 47, 218, 47, 218, 47, 218, 218, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47, 198, 218,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 218,
- 47, 218, 200, 199, 218, 218, 47, 47, 218, 47,
- 47, 218, 47, 47, 47, 47, 218, 47, 218, 47,
- 218, 47, 47, 47, 47, 47, 47, 218, 218, 47,
-
- 47, 47, 218, 218, 47, 218, 218, 201, 47, 47,
- 47, 47, 218, 218, 47, 47, 47, 218, 218, 218,
- 47, 47, 47, 47, 218, 202, 47, 218, 218, 218,
- 47, 47, 47, 218, 218, 47, 218, 47, 218, 47,
- 47, 218, 47, 47, 47, 47, 218, 218, 218, 47,
- 47, 47, 47, 218, 218, 218, 218, 47, 205, 47,
- 218, 47, 47, 218, 47, 218, 47, 218, 47, 47,
- 218, 47, 206, 218, 47, 47, 47, 218, 47, 218,
- 218, 47, 47, 47, 218, 218, 47, 218, 208, 218,
- 47, 47, 47, 47, 218, 218, 207, 47, 47, 47,
-
- 218, 218, 47, 47, 47, 47, 218, 218, 218, 47,
- 47, 47, 47, 218, 47, 47, 47, 47, 218, 47,
- 209, 47, 47, 218, 47, 218, 47, 218, 210, 47,
- 47, 47, 47, 218, 218, 218, 218, 218, 47, 218,
- 218, 218, 47, 47, 47, 47, 47, 218, 218, 218,
- 213, 47, 218, 47, 47, 47, 47, 47, 47, 47,
- 218, 47, 47, 218, 211, 47, 47, 47, 218, 218,
- 47, 47, 47, 218, 218, 218, 212, 218, 47, 47,
- 47, 47, 47, 47, 218, 218, 47, 218, 218, 214,
- 218, 47, 218, 47, 47, 218, 47, 47, 218, 47,
-
- 47, 47, 47, 218, 218, 218, 47, 218, 47, 218,
- 218, 218, 218, 47, 218, 47, 218, 47, 218, 218,
- 218, 47, 47, 47, 47, 218, 47, 47, 218, 218,
- 218, 218, 218, 47, 47, 47, 218, 218, 47, 218,
- 47, 218, 47, 218, 218, 218, 215, 47, 218, 47,
- 47, 47, 218, 218, 218, 216, 47, 47, 47, 218,
- 218, 47, 47, 47, 47, 47, 218, 218, 218, 218,
- 47, 218, 47, 218, 47, 218, 47, 218, 47, 218,
- 47, 47, 218, 218, 47, 217, 218, 218, 218, 218,
- 47, 47, 47, 47, 218, 218, 218, 218, 218, 47,
-
- 218, 218, 218, 218, 47, 47, 218, 47, 218, 47,
- 47, 218, 218, 218, 218, 218, 218, 218, 218, 47,
- 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
- 218, 218, 218, 218, 47, 218, 218, 218, 218, 47,
- 42, 42, 42, 47, 218, 47, 46, 218, 46, 5,
- 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
- 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
- 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
- 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
- 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
-
- 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
- 218, 218, 218, 218, 218, 218
- } ;
-
-static yyconst flex_int16_t yy_chk[2317] =
- { 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 7, 7, 8, 8,
- 17, 44, 44, 17, 17, 17, 20, 20, 41, 17,
- 17, 41, 34, 17, 26, 26, 26, 34, 34, 17,
- 49, 220, 20, 34, 20, 43, 72, 72, 43, 76,
-
- 26, 76, 26, 26, 20, 74, 74, 187, 96, 68,
- 49, 184, 26, 96, 68, 68, 17, 93, 170, 20,
- 68, 166, 93, 93, 20, 99, 76, 26, 93, 153,
- 99, 152, 26, 150, 17, 19, 147, 147, 19, 19,
- 19, 27, 27, 27, 19, 19, 151, 151, 19, 19,
- 19, 19, 168, 168, 19, 169, 169, 27, 149, 27,
- 28, 28, 28, 27, 148, 19, 146, 19, 129, 27,
- 172, 172, 173, 173, 196, 196, 28, 19, 28, 28,
- 128, 19, 197, 197, 27, 127, 126, 125, 28, 27,
- 124, 123, 19, 29, 29, 29, 122, 19, 119, 19,
-
- 25, 25, 25, 28, 29, 101, 100, 98, 28, 29,
- 97, 29, 75, 73, 18, 5, 25, 25, 25, 4,
- 2, 29, 0, 25, 30, 30, 30, 0, 25, 0,
- 0, 0, 0, 0, 0, 0, 29, 0, 50, 50,
- 30, 29, 30, 25, 0, 0, 0, 0, 25, 30,
- 0, 0, 30, 0, 50, 0, 50, 0, 0, 0,
- 33, 33, 33, 0, 0, 0, 50, 30, 0, 0,
- 0, 33, 30, 31, 31, 31, 33, 0, 33, 0,
- 31, 50, 36, 36, 36, 0, 50, 0, 33, 31,
- 0, 31, 0, 0, 0, 31, 0, 0, 36, 0,
-
- 36, 31, 0, 33, 0, 0, 0, 0, 33, 0,
- 36, 37, 37, 37, 0, 0, 31, 0, 47, 47,
- 47, 31, 32, 32, 32, 36, 36, 37, 0, 37,
- 36, 0, 0, 32, 47, 0, 47, 32, 32, 37,
- 32, 0, 32, 0, 0, 0, 47, 0, 0, 0,
- 32, 51, 51, 51, 37, 0, 0, 37, 0, 37,
- 0, 47, 0, 0, 0, 32, 47, 51, 0, 51,
- 32, 0, 0, 0, 0, 0, 0, 0, 0, 51,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 51, 0, 0, 0, 0, 51,
-
- 52, 52, 52, 53, 53, 53, 0, 52, 52, 52,
- 52, 52, 52, 0, 0, 0, 52, 0, 52, 53,
- 0, 53, 0, 0, 0, 0, 0, 0, 52, 0,
- 0, 53, 0, 0, 0, 52, 52, 52, 52, 52,
- 52, 0, 0, 52, 0, 0, 53, 0, 52, 0,
- 0, 53, 54, 54, 54, 55, 55, 55, 56, 56,
- 56, 0, 0, 0, 0, 0, 0, 54, 54, 0,
- 54, 55, 0, 55, 56, 0, 56, 0, 0, 0,
- 54, 0, 56, 55, 0, 0, 56, 0, 0, 55,
- 0, 0, 0, 0, 0, 54, 0, 0, 55, 0,
-
- 54, 56, 0, 55, 0, 0, 56, 57, 57, 57,
- 58, 58, 58, 0, 0, 0, 57, 0, 0, 0,
- 0, 0, 0, 57, 0, 57, 58, 0, 58, 0,
- 58, 0, 0, 0, 0, 57, 0, 0, 58, 0,
- 0, 0, 0, 0, 0, 0, 60, 60, 60, 0,
- 57, 0, 0, 58, 0, 57, 0, 60, 58, 59,
- 59, 59, 60, 0, 60, 0, 0, 0, 61, 61,
- 61, 0, 0, 0, 60, 59, 0, 59, 0, 0,
- 59, 0, 0, 59, 61, 0, 61, 59, 0, 60,
- 0, 0, 61, 0, 60, 0, 61, 62, 62, 62,
-
- 0, 0, 59, 63, 63, 63, 0, 59, 0, 0,
- 62, 61, 0, 62, 0, 62, 61, 0, 0, 63,
- 0, 63, 0, 63, 0, 62, 0, 0, 0, 0,
- 0, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 62, 0, 0, 0, 0, 62, 63, 0, 65, 65,
- 65, 63, 64, 64, 64, 66, 66, 66, 0, 64,
- 0, 0, 0, 0, 65, 64, 65, 0, 64, 0,
- 64, 66, 0, 66, 0, 0, 65, 66, 65, 0,
- 64, 0, 0, 66, 0, 0, 67, 67, 67, 0,
- 0, 65, 0, 0, 0, 64, 65, 0, 66, 0,
-
- 64, 0, 67, 66, 67, 70, 70, 70, 67, 71,
- 71, 71, 0, 0, 67, 0, 0, 0, 0, 0,
- 0, 70, 0, 70, 0, 71, 0, 71, 0, 67,
- 0, 0, 0, 70, 67, 0, 0, 71, 0, 0,
- 0, 0, 77, 77, 77, 0, 71, 0, 70, 0,
- 0, 70, 71, 70, 0, 77, 0, 71, 77, 0,
- 77, 78, 78, 78, 0, 79, 79, 79, 0, 0,
- 77, 0, 0, 0, 0, 0, 0, 78, 0, 78,
- 78, 79, 0, 79, 0, 77, 0, 79, 0, 78,
- 77, 0, 0, 79, 80, 80, 80, 0, 81, 81,
-
- 81, 0, 0, 0, 78, 0, 0, 0, 79, 78,
- 80, 80, 80, 79, 81, 0, 81, 0, 0, 0,
- 0, 0, 80, 81, 0, 0, 81, 82, 82, 82,
- 0, 0, 0, 83, 83, 83, 0, 80, 0, 0,
- 0, 81, 80, 82, 83, 82, 81, 0, 0, 83,
- 0, 83, 82, 0, 0, 82, 84, 84, 84, 0,
- 0, 83, 85, 85, 85, 0, 0, 0, 0, 0,
- 82, 0, 84, 0, 84, 82, 83, 84, 85, 0,
- 85, 83, 0, 85, 84, 86, 86, 86, 0, 0,
- 85, 87, 87, 87, 0, 0, 86, 0, 0, 84,
-
- 0, 86, 0, 86, 84, 85, 0, 87, 0, 87,
- 85, 0, 0, 86, 88, 88, 88, 87, 0, 87,
- 0, 0, 89, 89, 89, 0, 0, 0, 86, 0,
- 88, 0, 88, 86, 87, 0, 88, 0, 89, 87,
- 89, 0, 88, 90, 90, 90, 0, 0, 0, 0,
- 89, 91, 91, 91, 90, 0, 0, 88, 0, 90,
- 0, 90, 88, 0, 0, 89, 0, 91, 0, 91,
- 89, 90, 92, 92, 92, 91, 0, 0, 0, 91,
- 94, 94, 94, 0, 0, 0, 90, 0, 92, 0,
- 92, 90, 0, 0, 91, 92, 94, 0, 94, 91,
-
- 92, 95, 95, 95, 0, 0, 0, 0, 94, 102,
- 102, 102, 0, 0, 0, 92, 94, 95, 0, 95,
- 92, 0, 0, 94, 0, 102, 0, 102, 94, 95,
- 0, 0, 103, 103, 103, 0, 95, 102, 0, 0,
- 0, 0, 0, 0, 95, 104, 104, 104, 103, 95,
- 103, 103, 102, 105, 105, 105, 104, 102, 0, 0,
- 103, 104, 0, 104, 0, 0, 0, 0, 0, 105,
- 0, 105, 0, 104, 0, 103, 107, 107, 107, 0,
- 103, 105, 105, 0, 106, 106, 106, 0, 104, 0,
- 0, 0, 107, 104, 107, 0, 105, 107, 0, 0,
-
- 106, 105, 106, 0, 107, 108, 108, 108, 0, 106,
- 0, 0, 106, 0, 0, 0, 0, 0, 0, 107,
- 0, 108, 0, 108, 107, 0, 0, 106, 0, 108,
- 0, 0, 106, 108, 109, 109, 109, 0, 0, 0,
- 0, 110, 110, 110, 0, 111, 111, 111, 108, 0,
- 109, 0, 109, 108, 0, 0, 109, 110, 0, 110,
- 0, 111, 109, 111, 0, 0, 0, 0, 0, 110,
- 111, 0, 0, 111, 112, 112, 112, 109, 116, 116,
- 116, 0, 109, 0, 110, 113, 113, 113, 111, 110,
- 112, 0, 112, 111, 116, 0, 116, 112, 116, 0,
-
- 113, 113, 112, 113, 0, 0, 116, 114, 114, 114,
- 0, 0, 0, 113, 0, 0, 114, 112, 115, 115,
- 115, 116, 112, 114, 0, 114, 116, 0, 113, 115,
- 0, 0, 0, 113, 115, 114, 115, 0, 0, 0,
- 117, 117, 117, 0, 0, 0, 115, 118, 118, 118,
- 114, 120, 120, 120, 0, 114, 117, 0, 117, 0,
- 0, 115, 118, 118, 0, 118, 115, 120, 117, 120,
- 0, 0, 0, 0, 0, 118, 0, 0, 0, 120,
- 121, 121, 121, 117, 0, 0, 120, 0, 117, 0,
- 118, 130, 130, 130, 120, 118, 121, 0, 121, 120,
-
- 0, 0, 131, 131, 131, 0, 0, 130, 121, 130,
- 0, 0, 0, 131, 0, 132, 132, 132, 131, 130,
- 131, 0, 0, 121, 121, 0, 0, 0, 121, 0,
- 131, 132, 0, 132, 130, 0, 133, 133, 133, 130,
- 0, 0, 0, 132, 0, 131, 133, 0, 0, 0,
- 131, 0, 133, 0, 133, 134, 134, 134, 132, 135,
- 135, 135, 0, 132, 133, 0, 0, 0, 0, 0,
- 0, 134, 0, 134, 0, 135, 0, 135, 0, 133,
- 0, 0, 0, 134, 133, 0, 0, 135, 136, 136,
- 136, 0, 0, 0, 137, 137, 137, 0, 134, 0,
-
- 0, 0, 135, 134, 136, 0, 136, 135, 0, 136,
- 137, 0, 137, 0, 0, 0, 136, 0, 137, 0,
- 0, 0, 137, 138, 138, 138, 0, 0, 0, 0,
- 0, 136, 0, 0, 0, 0, 136, 137, 138, 138,
- 0, 138, 137, 0, 139, 139, 139, 140, 140, 140,
- 0, 138, 0, 0, 139, 0, 0, 0, 0, 0,
- 139, 140, 139, 140, 0, 140, 138, 0, 0, 0,
- 0, 138, 139, 0, 0, 140, 0, 0, 141, 141,
- 141, 0, 0, 0, 0, 0, 0, 139, 0, 0,
- 140, 0, 139, 0, 141, 140, 141, 141, 0, 142,
-
- 142, 142, 143, 143, 143, 0, 141, 0, 0, 0,
- 0, 142, 0, 0, 0, 142, 0, 142, 143, 0,
- 143, 141, 143, 144, 144, 144, 141, 142, 0, 0,
- 143, 0, 0, 0, 0, 0, 0, 0, 0, 144,
- 0, 144, 142, 0, 0, 143, 0, 142, 0, 0,
- 143, 144, 145, 145, 145, 145, 0, 0, 0, 154,
- 154, 154, 0, 155, 155, 155, 144, 144, 145, 154,
- 145, 144, 0, 0, 155, 154, 0, 154, 0, 155,
- 145, 155, 0, 0, 0, 0, 0, 154, 0, 0,
- 0, 155, 156, 156, 156, 145, 157, 157, 157, 0,
-
- 145, 0, 154, 158, 158, 158, 155, 154, 156, 0,
- 156, 155, 157, 0, 157, 0, 0, 0, 0, 158,
- 156, 158, 0, 0, 157, 159, 159, 159, 0, 0,
- 157, 158, 0, 158, 0, 156, 159, 0, 0, 157,
- 156, 159, 0, 159, 157, 0, 158, 160, 160, 160,
- 0, 158, 0, 159, 161, 161, 161, 0, 162, 162,
- 162, 0, 0, 160, 0, 160, 0, 0, 159, 0,
- 161, 0, 161, 159, 162, 160, 162, 0, 161, 0,
- 0, 160, 161, 0, 0, 0, 162, 0, 0, 0,
- 160, 0, 162, 0, 0, 160, 0, 161, 163, 163,
-
- 163, 162, 161, 0, 0, 0, 162, 164, 164, 164,
- 164, 174, 174, 174, 163, 0, 163, 163, 0, 0,
- 0, 0, 174, 164, 0, 164, 163, 174, 0, 174,
- 0, 0, 0, 0, 0, 164, 0, 0, 0, 174,
- 0, 163, 175, 175, 175, 0, 163, 0, 0, 0,
- 164, 176, 176, 176, 174, 164, 0, 0, 175, 174,
- 175, 0, 0, 176, 177, 177, 177, 176, 0, 176,
- 175, 0, 0, 0, 0, 177, 175, 0, 0, 176,
- 177, 0, 177, 0, 0, 175, 178, 178, 178, 0,
- 175, 0, 177, 0, 176, 179, 179, 179, 0, 176,
-
- 0, 0, 178, 0, 178, 179, 0, 177, 180, 180,
- 180, 179, 177, 179, 178, 0, 0, 181, 181, 181,
- 0, 0, 0, 179, 180, 0, 180, 0, 0, 178,
- 0, 181, 0, 181, 178, 181, 180, 0, 179, 182,
- 182, 182, 0, 179, 0, 181, 0, 0, 190, 190,
- 190, 180, 192, 192, 192, 182, 180, 182, 190, 0,
- 181, 191, 191, 191, 190, 181, 190, 182, 192, 0,
- 192, 0, 192, 191, 0, 0, 190, 191, 0, 191,
- 192, 0, 182, 193, 193, 193, 0, 182, 0, 191,
- 0, 190, 194, 194, 194, 192, 190, 0, 0, 193,
-
- 192, 193, 0, 0, 191, 0, 0, 194, 194, 191,
- 194, 193, 0, 0, 195, 195, 195, 0, 0, 0,
- 194, 198, 198, 198, 0, 195, 193, 0, 0, 0,
- 195, 193, 195, 0, 0, 194, 0, 198, 0, 198,
- 194, 0, 195, 199, 199, 199, 0, 0, 0, 198,
- 200, 200, 200, 0, 0, 0, 0, 195, 199, 199,
- 0, 199, 195, 0, 198, 0, 200, 0, 200, 198,
- 0, 199, 200, 0, 201, 201, 201, 0, 200, 0,
- 0, 202, 202, 202, 0, 0, 199, 0, 202, 0,
- 201, 199, 201, 200, 0, 0, 201, 202, 200, 202,
-
- 0, 0, 201, 205, 205, 205, 0, 0, 0, 202,
- 206, 206, 206, 0, 207, 207, 207, 201, 0, 205,
- 205, 205, 201, 0, 202, 0, 206, 0, 206, 202,
- 207, 205, 207, 0, 0, 0, 0, 0, 206, 0,
- 0, 0, 207, 210, 210, 210, 205, 0, 0, 0,
- 210, 205, 0, 206, 208, 208, 208, 207, 206, 210,
- 0, 210, 207, 0, 208, 209, 209, 209, 0, 0,
- 208, 210, 208, 0, 0, 0, 209, 0, 211, 211,
- 211, 209, 208, 209, 0, 0, 210, 0, 0, 211,
- 0, 210, 0, 209, 211, 0, 211, 208, 0, 212,
-
- 212, 212, 208, 0, 0, 0, 211, 0, 209, 0,
- 0, 0, 0, 209, 0, 212, 0, 212, 0, 0,
- 0, 211, 213, 213, 213, 0, 211, 212, 0, 0,
- 0, 0, 0, 214, 214, 214, 0, 0, 213, 0,
- 213, 0, 212, 0, 0, 0, 213, 212, 0, 214,
- 213, 214, 0, 0, 0, 214, 215, 215, 215, 0,
- 0, 214, 216, 216, 216, 213, 0, 0, 0, 0,
- 213, 0, 215, 0, 215, 0, 214, 0, 216, 0,
- 216, 214, 0, 0, 215, 216, 0, 0, 0, 0,
- 216, 217, 217, 217, 0, 0, 0, 0, 0, 215,
-
- 0, 0, 0, 0, 215, 216, 0, 217, 0, 217,
- 216, 0, 0, 0, 0, 0, 0, 0, 0, 217,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 217, 0, 0, 0, 0, 217,
- 219, 219, 219, 221, 0, 221, 222, 0, 222, 218,
- 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
- 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
- 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
- 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
- 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
-
- 218, 218, 218, 218, 218, 218, 218, 218, 218, 218,
- 218, 218, 218, 218, 218, 218
- } ;
-
-/* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[51] =
- { 0,
-1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, };
-
-static yy_state_type yy_last_accepting_state;
-static char *yy_last_accepting_cpos;
-
-extern int ld_flex_debug;
-int ld_flex_debug = 0;
-
-/* The intent behind this definition is that it'll catch
- * any uses of REJECT which flex missed.
- */
-#define REJECT reject_used_but_not_detected
-#define yymore() yymore_used_but_not_detected
-#define YY_MORE_ADJ 0
-#define YY_RESTORE_YY_MORE_OFFSET
-char *ldtext;
-#line 1 "ldlex.l"
-#line 2 "ldlex.l"
-/* Copyright (C) 2001, 2002, 2003, 2004, 2005, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <ctype.h>
-#include <elf.h>
-#include <error.h>
-#include <inttypes.h>
-#include <libintl.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <system.h>
-#include <ld.h>
-#include "ldscript.h"
-
-/* We sure use no threads to read the stream, so use the _unlocked
- variants of the functions. */
-#undef getc
-#define getc(s) getc_unlocked (s)
-#undef ferror
-#define ferror(s) ferror_unlocked (s)
-#undef fread
-#define fread(b, m, n, s) fread_unlocked (b, m, n, s)
-#undef fwrite
-#define fwrite(b, m, n, s) fwrite_unlocked (b, m, n, s)
-
-/* ECHO must be redefined since the default implementation ignores
- the return value of fwrite_unlocked. */
-#define ECHO do { size_t n__ __attribute__ ((unused)) \
- = fwrite (ldtext, ldleng, 1, ldout); } while (0)
-
-/* Defined in ld.c. */
-extern int ld_scan_version_script;
-
-#define MAX_PREPDEPTH 20
-static enum prepstate
-{
- prep_normal,
- skip_if,
- skip_to_endif
-} prepstate[MAX_PREPDEPTH];
-static int prepdepth;
-
-static void eat_comment (void);
-static void eat_to_eol (bool empty);
-static int attrib_convert (int c);
-static void push_state (enum prepstate);
-static int pop_state (void);
-static int handle_ifdef (void);
-static void invalid_char (int ch);
-
-#line 1157 "ldlex.c"
-
-#define INITIAL 0
-#define IGNORE 1
-
-#ifndef YY_NO_UNISTD_H
-/* Special case for "unistd.h", since it is non-ANSI. We include it way
- * down here because we want the user's section 1 to have been scanned first.
- * The user has a chance to override it with an option.
- */
-#include <unistd.h>
-#endif
-
-#ifndef YY_EXTRA_TYPE
-#define YY_EXTRA_TYPE void *
-#endif
-
-static int yy_init_globals (void );
-
-/* Accessor methods to globals.
- These are made visible to non-reentrant scanners for convenience. */
-
-int ldlex_destroy (void );
-
-int ldget_debug (void );
-
-void ldset_debug (int debug_flag );
-
-YY_EXTRA_TYPE ldget_extra (void );
-
-void ldset_extra (YY_EXTRA_TYPE user_defined );
-
-FILE *ldget_in (void );
-
-void ldset_in (FILE * in_str );
-
-FILE *ldget_out (void );
-
-void ldset_out (FILE * out_str );
-
-int ldget_leng (void );
-
-char *ldget_text (void );
-
-int ldget_lineno (void );
-
-void ldset_lineno (int line_number );
-
-/* Macros after this point can all be overridden by user definitions in
- * section 1.
- */
-
-#ifndef YY_SKIP_YYWRAP
-#ifdef __cplusplus
-extern "C" int ldwrap (void );
-#else
-extern int ldwrap (void );
-#endif
-#endif
-
- static void yyunput (int c,char *buf_ptr );
-
-#ifndef yytext_ptr
-static void yy_flex_strncpy (char *,yyconst char *,int );
-#endif
-
-#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * );
-#endif
-
-#ifndef YY_NO_INPUT
-
-#ifdef __cplusplus
-static int yyinput (void );
-#else
-static int input (void );
-#endif
-
-#endif
-
-/* Amount of stuff to slurp up with each read. */
-#ifndef YY_READ_BUF_SIZE
-#define YY_READ_BUF_SIZE 8192
-#endif
-
-/* Copy whatever the last rule matched to the standard output. */
-#ifndef ECHO
-/* This used to be an fputs(), but since the string might contain NUL's,
- * we now use fwrite().
- */
-#define ECHO fwrite( ldtext, ldleng, 1, ldout )
-#endif
-
-/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
- * is returned in "result".
- */
-#ifndef YY_INPUT
-#define YY_INPUT(buf,result,max_size) \
- if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
- { \
- int c = '*'; \
- unsigned n; \
- for ( n = 0; n < max_size && \
- (c = getc( ldin )) != EOF && c != '\n'; ++n ) \
- buf[n] = (char) c; \
- if ( c == '\n' ) \
- buf[n++] = (char) c; \
- if ( c == EOF && ferror( ldin ) ) \
- YY_FATAL_ERROR( "input in flex scanner failed" ); \
- result = n; \
- } \
- else \
- { \
- errno=0; \
- while ( (result = fread(buf, 1, max_size, ldin))==0 && ferror(ldin)) \
- { \
- if( errno != EINTR) \
- { \
- YY_FATAL_ERROR( "input in flex scanner failed" ); \
- break; \
- } \
- errno=0; \
- clearerr(ldin); \
- } \
- }\
-\
-
-#endif
-
-/* No semi-colon after return; correct usage is to write "yyterminate();" -
- * we don't want an extra ';' after the "return" because that will cause
- * some compilers to complain about unreachable statements.
- */
-#ifndef yyterminate
-#define yyterminate() return YY_NULL
-#endif
-
-/* Number of entries by which start-condition stack grows. */
-#ifndef YY_START_STACK_INCR
-#define YY_START_STACK_INCR 25
-#endif
-
-/* Report a fatal error. */
-#ifndef YY_FATAL_ERROR
-#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
-#endif
-
-/* end tables serialization structures and prototypes */
-
-/* Default declaration of generated scanner - a define so the user can
- * easily add parameters.
- */
-#ifndef YY_DECL
-#define YY_DECL_IS_OURS 1
-
-extern int ldlex (void);
-
-#define YY_DECL int ldlex (void)
-#endif /* !YY_DECL */
-
-/* Code executed at the beginning of each rule, after ldtext and ldleng
- * have been set up.
- */
-#ifndef YY_USER_ACTION
-#define YY_USER_ACTION
-#endif
-
-/* Code executed at the end of each rule. */
-#ifndef YY_BREAK
-#define YY_BREAK break;
-#endif
-
-#define YY_RULE_SETUP \
- if ( ldleng > 0 ) \
- YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \
- (ldtext[ldleng - 1] == '\n'); \
- YY_USER_ACTION
-
-/** The main scanner function which does all the work.
- */
-YY_DECL
-{
- register yy_state_type yy_current_state;
- register char *yy_cp, *yy_bp;
- register int yy_act;
-
-#line 96 "ldlex.l"
-
- if (unlikely (ld_scan_version_script))
- {
- ld_scan_version_script = -1;
- return kVERSION_SCRIPT;
- }
-
-#line 1351 "ldlex.c"
-
- if ( !(yy_init) )
- {
- (yy_init) = 1;
-
-#ifdef YY_USER_INIT
- YY_USER_INIT;
-#endif
-
- if ( ! (yy_start) )
- (yy_start) = 1; /* first start state */
-
- if ( ! ldin )
- ldin = stdin;
-
- if ( ! ldout )
- ldout = stdout;
-
- if ( ! YY_CURRENT_BUFFER ) {
- ldensure_buffer_stack ();
- YY_CURRENT_BUFFER_LVALUE =
- ld_create_buffer(ldin,YY_BUF_SIZE );
- }
-
- ld_load_buffer_state( );
- }
-
- while ( 1 ) /* loops until end-of-file is reached */
- {
- yy_cp = (yy_c_buf_p);
-
- /* Support of ldtext. */
- *yy_cp = (yy_hold_char);
-
- /* yy_bp points to the position in yy_ch_buf of the start of
- * the current run.
- */
- yy_bp = yy_cp;
-
- yy_current_state = (yy_start);
- yy_current_state += YY_AT_BOL();
-yy_match:
- do
- {
- register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
- if ( yy_accept[yy_current_state] )
- {
- (yy_last_accepting_state) = yy_current_state;
- (yy_last_accepting_cpos) = yy_cp;
- }
- while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
- {
- yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 219 )
- yy_c = yy_meta[(unsigned int) yy_c];
- }
- yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
- ++yy_cp;
- }
- while ( yy_current_state != 218 );
- yy_cp = (yy_last_accepting_cpos);
- yy_current_state = (yy_last_accepting_state);
-
-yy_find_action:
- yy_act = yy_accept[yy_current_state];
-
- YY_DO_BEFORE_ACTION;
-
- if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
- {
- int yyl;
- for ( yyl = 0; yyl < ldleng; ++yyl )
- if ( ldtext[yyl] == '\n' )
-
- ldlineno++;
-;
- }
-
-do_action: /* This label is used only to access EOF actions. */
-
- switch ( yy_act )
- { /* beginning of action switch */
- case 0: /* must back up */
- /* undo the effects of YY_DO_BEFORE_ACTION */
- *yy_cp = (yy_hold_char);
- yy_cp = (yy_last_accepting_cpos);
- yy_current_state = (yy_last_accepting_state);
- goto yy_find_action;
-
-case 1:
-/* rule 1 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up ldtext */
-(yy_c_buf_p) = yy_cp = yy_bp + 6;
-YY_DO_BEFORE_ACTION; /* set up ldtext again */
-YY_RULE_SETUP
-#line 103 "ldlex.l"
-{ BEGIN (handle_ifdef ()); }
- YY_BREAK
-case 2:
-/* rule 2 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up ldtext */
-(yy_c_buf_p) = yy_cp = yy_bp + 5;
-YY_DO_BEFORE_ACTION; /* set up ldtext again */
-YY_RULE_SETUP
-#line 104 "ldlex.l"
-{ eat_to_eol (true);
- push_state (skip_to_endif);
- BEGIN (IGNORE); }
- YY_BREAK
-case 3:
-/* rule 3 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up ldtext */
-(yy_c_buf_p) = yy_cp = yy_bp + 8;
-YY_DO_BEFORE_ACTION; /* set up ldtext again */
-YY_RULE_SETUP
-#line 107 "ldlex.l"
-{ eat_to_eol (false);
- push_state (skip_to_endif);
- BEGIN (IGNORE); }
- YY_BREAK
-case 4:
-/* rule 4 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up ldtext */
-(yy_c_buf_p) = yy_cp = yy_bp + 6;
-YY_DO_BEFORE_ACTION; /* set up ldtext again */
-YY_RULE_SETUP
-#line 110 "ldlex.l"
-{ eat_to_eol (true) ; }
- YY_BREAK
-case 5:
-/* rule 5 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up ldtext */
-(yy_c_buf_p) = yy_cp = yy_bp + 6;
-YY_DO_BEFORE_ACTION; /* set up ldtext again */
-YY_RULE_SETUP
-#line 112 "ldlex.l"
-{ eat_to_eol (false);
- push_state (skip_to_endif); }
- YY_BREAK
-case 6:
-/* rule 6 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up ldtext */
-(yy_c_buf_p) = yy_cp = yy_bp + 5;
-YY_DO_BEFORE_ACTION; /* set up ldtext again */
-YY_RULE_SETUP
-#line 114 "ldlex.l"
-{ eat_to_eol (true);
- assert (prepdepth > 0);
- if (prepstate[prepdepth - 1] == skip_if)
- {
- /* Back to normal processing. */
- assert (prepdepth == 1);
- BEGIN (pop_state ());
- }
- }
- YY_BREAK
-case 7:
-/* rule 7 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up ldtext */
-(yy_c_buf_p) = yy_cp = yy_bp + 8;
-YY_DO_BEFORE_ACTION; /* set up ldtext again */
-YY_RULE_SETUP
-#line 123 "ldlex.l"
-{ assert (prepdepth > 0);
- if (prepstate[prepdepth - 1] == skip_if)
- {
- /* Maybe this symbol is defined. */
- pop_state ();
- BEGIN (handle_ifdef ());
- }
- }
- YY_BREAK
-case 8:
-/* rule 8 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up ldtext */
-(yy_c_buf_p) = yy_cp = yy_bp + 6;
-YY_DO_BEFORE_ACTION; /* set up ldtext again */
-YY_RULE_SETUP
-#line 131 "ldlex.l"
-{ eat_to_eol (true);
- BEGIN (pop_state ()); }
- YY_BREAK
-case 9:
-/* rule 9 can match eol */
-YY_RULE_SETUP
-#line 133 "ldlex.l"
-{ /* nothing */ }
- YY_BREAK
-case 10:
-YY_RULE_SETUP
-#line 136 "ldlex.l"
-{ eat_comment (); }
- YY_BREAK
-case 11:
-YY_RULE_SETUP
-#line 138 "ldlex.l"
-{ return kALIGN; }
- YY_BREAK
-case 12:
-YY_RULE_SETUP
-#line 139 "ldlex.l"
-{ return kAS_NEEDED; }
- YY_BREAK
-case 13:
-YY_RULE_SETUP
-#line 140 "ldlex.l"
-{ return kENTRY; }
- YY_BREAK
-case 14:
-YY_RULE_SETUP
-#line 141 "ldlex.l"
-{ return kEXCLUDE_FILE; }
- YY_BREAK
-case 15:
-YY_RULE_SETUP
-#line 142 "ldlex.l"
-{ return kGLOBAL; }
- YY_BREAK
-case 16:
-YY_RULE_SETUP
-#line 143 "ldlex.l"
-{ return kGROUP; }
- YY_BREAK
-case 17:
-YY_RULE_SETUP
-#line 144 "ldlex.l"
-{ return kINPUT; }
- YY_BREAK
-case 18:
-YY_RULE_SETUP
-#line 145 "ldlex.l"
-{ return kINTERP; }
- YY_BREAK
-case 19:
-YY_RULE_SETUP
-#line 146 "ldlex.l"
-{ return kKEEP; }
- YY_BREAK
-case 20:
-YY_RULE_SETUP
-#line 147 "ldlex.l"
-{ return kLOCAL; }
- YY_BREAK
-case 21:
-YY_RULE_SETUP
-#line 148 "ldlex.l"
-{ return kOUTPUT_FORMAT; }
- YY_BREAK
-case 22:
-YY_RULE_SETUP
-#line 149 "ldlex.l"
-{ return kPAGESIZE; }
- YY_BREAK
-case 23:
-YY_RULE_SETUP
-#line 150 "ldlex.l"
-{ return kPROVIDE; }
- YY_BREAK
-case 24:
-YY_RULE_SETUP
-#line 151 "ldlex.l"
-{ return kSEARCH_DIR; }
- YY_BREAK
-case 25:
-YY_RULE_SETUP
-#line 152 "ldlex.l"
-{ return kSEGMENT; }
- YY_BREAK
-case 26:
-YY_RULE_SETUP
-#line 153 "ldlex.l"
-{ return kSIZEOF_HEADERS; }
- YY_BREAK
-case 27:
-YY_RULE_SETUP
-#line 154 "ldlex.l"
-{ return kSORT; }
- YY_BREAK
-case 28:
-YY_RULE_SETUP
-#line 155 "ldlex.l"
-{ return kVERSION; }
- YY_BREAK
-case 29:
-YY_RULE_SETUP
-#line 157 "ldlex.l"
-{ int cnt = 1 ;
- ldlval.num = 0;
- while (cnt < ldleng - 1)
- ldlval.num |= attrib_convert (ldtext[cnt++]);
- return kMODE; }
- YY_BREAK
-case 30:
-YY_RULE_SETUP
-#line 163 "ldlex.l"
-{ return '{'; }
- YY_BREAK
-case 31:
-YY_RULE_SETUP
-#line 164 "ldlex.l"
-{ return '}'; }
- YY_BREAK
-case 32:
-YY_RULE_SETUP
-#line 165 "ldlex.l"
-{ return '('; }
- YY_BREAK
-case 33:
-YY_RULE_SETUP
-#line 166 "ldlex.l"
-{ return ')'; }
- YY_BREAK
-case 34:
-YY_RULE_SETUP
-#line 167 "ldlex.l"
-{ return ':'; }
- YY_BREAK
-case 35:
-YY_RULE_SETUP
-#line 168 "ldlex.l"
-{ return ';'; }
- YY_BREAK
-case 36:
-YY_RULE_SETUP
-#line 169 "ldlex.l"
-{ return '='; }
- YY_BREAK
-case 37:
-YY_RULE_SETUP
-#line 170 "ldlex.l"
-{ ldlval.op = exp_plus; return kADD_OP; }
- YY_BREAK
-case 38:
-YY_RULE_SETUP
-#line 171 "ldlex.l"
-{ ldlval.op = exp_minus; return kADD_OP; }
- YY_BREAK
-case 39:
-YY_RULE_SETUP
-#line 172 "ldlex.l"
-{ return '*'; }
- YY_BREAK
-case 40:
-YY_RULE_SETUP
-#line 173 "ldlex.l"
-{ ldlval.op = exp_div; return kMUL_OP; }
- YY_BREAK
-case 41:
-YY_RULE_SETUP
-#line 174 "ldlex.l"
-{ ldlval.op = exp_mod; return kMUL_OP; }
- YY_BREAK
-case 42:
-YY_RULE_SETUP
-#line 175 "ldlex.l"
-{ return '&'; }
- YY_BREAK
-case 43:
-YY_RULE_SETUP
-#line 176 "ldlex.l"
-{ return '|'; }
- YY_BREAK
-case 44:
-YY_RULE_SETUP
-#line 178 "ldlex.l"
-{ return ','; }
- YY_BREAK
-case 45:
-YY_RULE_SETUP
-#line 180 "ldlex.l"
-{ char *endp;
- ldlval.num = strtoumax (ldtext, &endp, 0);
- if (*endp != '\0')
- {
- if (tolower (*endp) == 'k')
- ldlval.num *= 1024;
- else
- {
- assert (tolower (*endp) == 'm');
- ldlval.num *= 1024 * 1024;
- }
- }
- return kNUM; }
- YY_BREAK
-case 46:
-YY_RULE_SETUP
-#line 194 "ldlex.l"
-{ ldlval.str = obstack_strndup (&ld_state.smem,
- ldtext, ldleng);
- return kID; }
- YY_BREAK
-case 47:
-YY_RULE_SETUP
-#line 198 "ldlex.l"
-{ ldlval.str = obstack_strndup (&ld_state.smem,
- ldtext, ldleng);
- return kFILENAME; }
- YY_BREAK
-case 48:
-/* rule 48 can match eol */
-YY_RULE_SETUP
-#line 202 "ldlex.l"
-{ /* IGNORE */ }
- YY_BREAK
-case 49:
-YY_RULE_SETUP
-#line 204 "ldlex.l"
-{ invalid_char (*ldtext); }
- YY_BREAK
-case 50:
-YY_RULE_SETUP
-#line 206 "ldlex.l"
-ECHO;
- YY_BREAK
-#line 1766 "ldlex.c"
-case YY_STATE_EOF(INITIAL):
-case YY_STATE_EOF(IGNORE):
- yyterminate();
-
- case YY_END_OF_BUFFER:
- {
- /* Amount of text matched not including the EOB char. */
- int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
-
- /* Undo the effects of YY_DO_BEFORE_ACTION. */
- *yy_cp = (yy_hold_char);
- YY_RESTORE_YY_MORE_OFFSET
-
- if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
- {
- /* We're scanning a new file or input source. It's
- * possible that this happened because the user
- * just pointed ldin at a new source and called
- * ldlex(). If so, then we have to assure
- * consistency between YY_CURRENT_BUFFER and our
- * globals. Here is the right place to do so, because
- * this is the first action (other than possibly a
- * back-up) that will match for the new input source.
- */
- (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
- YY_CURRENT_BUFFER_LVALUE->yy_input_file = ldin;
- YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
- }
-
- /* Note that here we test for yy_c_buf_p "<=" to the position
- * of the first EOB in the buffer, since yy_c_buf_p will
- * already have been incremented past the NUL character
- * (since all states make transitions on EOB to the
- * end-of-buffer state). Contrast this with the test
- * in input().
- */
- if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
- { /* This was really a NUL. */
- yy_state_type yy_next_state;
-
- (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
-
- yy_current_state = yy_get_previous_state( );
-
- /* Okay, we're now positioned to make the NUL
- * transition. We couldn't have
- * yy_get_previous_state() go ahead and do it
- * for us because it doesn't know how to deal
- * with the possibility of jamming (and we don't
- * want to build jamming into it because then it
- * will run more slowly).
- */
-
- yy_next_state = yy_try_NUL_trans( yy_current_state );
-
- yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-
- if ( yy_next_state )
- {
- /* Consume the NUL. */
- yy_cp = ++(yy_c_buf_p);
- yy_current_state = yy_next_state;
- goto yy_match;
- }
-
- else
- {
- yy_cp = (yy_last_accepting_cpos);
- yy_current_state = (yy_last_accepting_state);
- goto yy_find_action;
- }
- }
-
- else switch ( yy_get_next_buffer( ) )
- {
- case EOB_ACT_END_OF_FILE:
- {
- (yy_did_buffer_switch_on_eof) = 0;
-
- if ( ldwrap( ) )
- {
- /* Note: because we've taken care in
- * yy_get_next_buffer() to have set up
- * ldtext, we can now set up
- * yy_c_buf_p so that if some total
- * hoser (like flex itself) wants to
- * call the scanner after we return the
- * YY_NULL, it'll still work - another
- * YY_NULL will get returned.
- */
- (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
-
- yy_act = YY_STATE_EOF(YY_START);
- goto do_action;
- }
-
- else
- {
- if ( ! (yy_did_buffer_switch_on_eof) )
- YY_NEW_FILE;
- }
- break;
- }
-
- case EOB_ACT_CONTINUE_SCAN:
- (yy_c_buf_p) =
- (yytext_ptr) + yy_amount_of_matched_text;
-
- yy_current_state = yy_get_previous_state( );
-
- yy_cp = (yy_c_buf_p);
- yy_bp = (yytext_ptr) + YY_MORE_ADJ;
- goto yy_match;
-
- case EOB_ACT_LAST_MATCH:
- (yy_c_buf_p) =
- &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
-
- yy_current_state = yy_get_previous_state( );
-
- yy_cp = (yy_c_buf_p);
- yy_bp = (yytext_ptr) + YY_MORE_ADJ;
- goto yy_find_action;
- }
- break;
- }
-
- default:
- YY_FATAL_ERROR(
- "fatal flex scanner internal error--no action found" );
- } /* end of action switch */
- } /* end of scanning one token */
-} /* end of ldlex */
-
-/* yy_get_next_buffer - try to read in a new buffer
- *
- * Returns a code representing an action:
- * EOB_ACT_LAST_MATCH -
- * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
- * EOB_ACT_END_OF_FILE - end of file
- */
-static int yy_get_next_buffer (void)
-{
- register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
- register char *source = (yytext_ptr);
- register int number_to_move, i;
- int ret_val;
-
- if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
- YY_FATAL_ERROR(
- "fatal flex scanner internal error--end of buffer missed" );
-
- if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
- { /* Don't try to fill the buffer, so this is an EOF. */
- if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
- {
- /* We matched a single character, the EOB, so
- * treat this as a final EOF.
- */
- return EOB_ACT_END_OF_FILE;
- }
-
- else
- {
- /* We matched some text prior to the EOB, first
- * process it.
- */
- return EOB_ACT_LAST_MATCH;
- }
- }
-
- /* Try to read more data. */
-
- /* First move last chars to start of buffer. */
- number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
-
- for ( i = 0; i < number_to_move; ++i )
- *(dest++) = *(source++);
-
- if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
- /* don't do the read, it's not guaranteed to return an EOF,
- * just force an EOF
- */
- YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
-
- else
- {
- int num_to_read =
- YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
-
- while ( num_to_read <= 0 )
- { /* Not enough room in the buffer - grow it. */
-
- /* just a shorter name for the current buffer */
- YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
-
- int yy_c_buf_p_offset =
- (int) ((yy_c_buf_p) - b->yy_ch_buf);
-
- if ( b->yy_is_our_buffer )
- {
- int new_size = b->yy_buf_size * 2;
-
- if ( new_size <= 0 )
- b->yy_buf_size += b->yy_buf_size / 8;
- else
- b->yy_buf_size *= 2;
-
- b->yy_ch_buf = (char *)
- /* Include room in for 2 EOB chars. */
- ldrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 );
- }
- else
- /* Can't grow it, we don't own it. */
- b->yy_ch_buf = 0;
-
- if ( ! b->yy_ch_buf )
- YY_FATAL_ERROR(
- "fatal error - scanner input buffer overflow" );
-
- (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
-
- num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
- number_to_move - 1;
-
- }
-
- if ( num_to_read > YY_READ_BUF_SIZE )
- num_to_read = YY_READ_BUF_SIZE;
-
- /* Read in more data. */
- YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
- (yy_n_chars), (size_t) num_to_read );
-
- YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
- }
-
- if ( (yy_n_chars) == 0 )
- {
- if ( number_to_move == YY_MORE_ADJ )
- {
- ret_val = EOB_ACT_END_OF_FILE;
- ldrestart(ldin );
- }
-
- else
- {
- ret_val = EOB_ACT_LAST_MATCH;
- YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
- YY_BUFFER_EOF_PENDING;
- }
- }
-
- else
- ret_val = EOB_ACT_CONTINUE_SCAN;
-
- if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
- /* Extend the array by 50%, plus the number we really need. */
- yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
- YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) ldrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size );
- if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
- YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
- }
-
- (yy_n_chars) += number_to_move;
- YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
- YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
-
- (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
-
- return ret_val;
-}
-
-/* yy_get_previous_state - get the state just before the EOB char was reached */
-
- static yy_state_type yy_get_previous_state (void)
-{
- register yy_state_type yy_current_state;
- register char *yy_cp;
-
- yy_current_state = (yy_start);
- yy_current_state += YY_AT_BOL();
-
- for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
- {
- register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
- if ( yy_accept[yy_current_state] )
- {
- (yy_last_accepting_state) = yy_current_state;
- (yy_last_accepting_cpos) = yy_cp;
- }
- while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
- {
- yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 219 )
- yy_c = yy_meta[(unsigned int) yy_c];
- }
- yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
- }
-
- return yy_current_state;
-}
-
-/* yy_try_NUL_trans - try to make a transition on the NUL character
- *
- * synopsis
- * next_state = yy_try_NUL_trans( current_state );
- */
- static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
-{
- register int yy_is_jam;
- register char *yy_cp = (yy_c_buf_p);
-
- register YY_CHAR yy_c = 1;
- if ( yy_accept[yy_current_state] )
- {
- (yy_last_accepting_state) = yy_current_state;
- (yy_last_accepting_cpos) = yy_cp;
- }
- while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
- {
- yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 219 )
- yy_c = yy_meta[(unsigned int) yy_c];
- }
- yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
- yy_is_jam = (yy_current_state == 218);
-
- return yy_is_jam ? 0 : yy_current_state;
-}
-
- static void yyunput (int c, register char * yy_bp )
-{
- register char *yy_cp;
-
- yy_cp = (yy_c_buf_p);
-
- /* undo effects of setting up ldtext */
- *yy_cp = (yy_hold_char);
-
- if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
- { /* need to shift things up to make room */
- /* +2 for EOB chars. */
- register int number_to_move = (yy_n_chars) + 2;
- register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
- YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
- register char *source =
- &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
-
- while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
- *--dest = *--source;
-
- yy_cp += (int) (dest - source);
- yy_bp += (int) (dest - source);
- YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
- (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
-
- if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
- YY_FATAL_ERROR( "flex scanner push-back overflow" );
- }
-
- *--yy_cp = (char) c;
-
- if ( c == '\n' ){
- --ldlineno;
- }
-
- (yytext_ptr) = yy_bp;
- (yy_hold_char) = *yy_cp;
- (yy_c_buf_p) = yy_cp;
-}
-
-#ifndef YY_NO_INPUT
-#ifdef __cplusplus
- static int yyinput (void)
-#else
- static int input (void)
-#endif
-
-{
- int c;
-
- *(yy_c_buf_p) = (yy_hold_char);
-
- if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
- {
- /* yy_c_buf_p now points to the character we want to return.
- * If this occurs *before* the EOB characters, then it's a
- * valid NUL; if not, then we've hit the end of the buffer.
- */
- if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
- /* This was really a NUL. */
- *(yy_c_buf_p) = '\0';
-
- else
- { /* need more input */
- int offset = (yy_c_buf_p) - (yytext_ptr);
- ++(yy_c_buf_p);
-
- switch ( yy_get_next_buffer( ) )
- {
- case EOB_ACT_LAST_MATCH:
- /* This happens because yy_g_n_b()
- * sees that we've accumulated a
- * token and flags that we need to
- * try matching the token before
- * proceeding. But for input(),
- * there's no matching to consider.
- * So convert the EOB_ACT_LAST_MATCH
- * to EOB_ACT_END_OF_FILE.
- */
-
- /* Reset buffer status. */
- ldrestart(ldin );
-
- /*FALLTHROUGH*/
-
- case EOB_ACT_END_OF_FILE:
- {
- if ( ldwrap( ) )
- return EOF;
-
- if ( ! (yy_did_buffer_switch_on_eof) )
- YY_NEW_FILE;
-#ifdef __cplusplus
- return yyinput();
-#else
- return input();
-#endif
- }
-
- case EOB_ACT_CONTINUE_SCAN:
- (yy_c_buf_p) = (yytext_ptr) + offset;
- break;
- }
- }
- }
-
- c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */
- *(yy_c_buf_p) = '\0'; /* preserve ldtext */
- (yy_hold_char) = *++(yy_c_buf_p);
-
- YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');
- if ( YY_CURRENT_BUFFER_LVALUE->yy_at_bol )
-
- ldlineno++;
-;
-
- return c;
-}
-#endif /* ifndef YY_NO_INPUT */
-
-/** Immediately switch to a different input stream.
- * @param input_file A readable stream.
- *
- * @note This function does not reset the start condition to @c INITIAL .
- */
- void ldrestart (FILE * input_file )
-{
-
- if ( ! YY_CURRENT_BUFFER ){
- ldensure_buffer_stack ();
- YY_CURRENT_BUFFER_LVALUE =
- ld_create_buffer(ldin,YY_BUF_SIZE );
- }
-
- ld_init_buffer(YY_CURRENT_BUFFER,input_file );
- ld_load_buffer_state( );
-}
-
-/** Switch to a different input buffer.
- * @param new_buffer The new input buffer.
- *
- */
- void ld_switch_to_buffer (YY_BUFFER_STATE new_buffer )
-{
-
- /* TODO. We should be able to replace this entire function body
- * with
- * ldpop_buffer_state();
- * ldpush_buffer_state(new_buffer);
- */
- ldensure_buffer_stack ();
- if ( YY_CURRENT_BUFFER == new_buffer )
- return;
-
- if ( YY_CURRENT_BUFFER )
- {
- /* Flush out information for old buffer. */
- *(yy_c_buf_p) = (yy_hold_char);
- YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
- YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
- }
-
- YY_CURRENT_BUFFER_LVALUE = new_buffer;
- ld_load_buffer_state( );
-
- /* We don't actually know whether we did this switch during
- * EOF (ldwrap()) processing, but the only time this flag
- * is looked at is after ldwrap() is called, so it's safe
- * to go ahead and always set it.
- */
- (yy_did_buffer_switch_on_eof) = 1;
-}
-
-static void ld_load_buffer_state (void)
-{
- (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
- (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
- ldin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
- (yy_hold_char) = *(yy_c_buf_p);
-}
-
-/** Allocate and initialize an input buffer state.
- * @param file A readable stream.
- * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
- *
- * @return the allocated buffer state.
- */
- YY_BUFFER_STATE ld_create_buffer (FILE * file, int size )
-{
- YY_BUFFER_STATE b;
-
- b = (YY_BUFFER_STATE) ldalloc(sizeof( struct yy_buffer_state ) );
- if ( ! b )
- YY_FATAL_ERROR( "out of dynamic memory in ld_create_buffer()" );
-
- b->yy_buf_size = size;
-
- /* yy_ch_buf has to be 2 characters longer than the size given because
- * we need to put in 2 end-of-buffer characters.
- */
- b->yy_ch_buf = (char *) ldalloc(b->yy_buf_size + 2 );
- if ( ! b->yy_ch_buf )
- YY_FATAL_ERROR( "out of dynamic memory in ld_create_buffer()" );
-
- b->yy_is_our_buffer = 1;
-
- ld_init_buffer(b,file );
-
- return b;
-}
-
-/** Destroy the buffer.
- * @param b a buffer created with ld_create_buffer()
- *
- */
- void ld_delete_buffer (YY_BUFFER_STATE b )
-{
-
- if ( ! b )
- return;
-
- if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
- YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
-
- if ( b->yy_is_our_buffer )
- ldfree((void *) b->yy_ch_buf );
-
- ldfree((void *) b );
-}
-
-/* Initializes or reinitializes a buffer.
- * This function is sometimes called more than once on the same buffer,
- * such as during a ldrestart() or at EOF.
- */
- static void ld_init_buffer (YY_BUFFER_STATE b, FILE * file )
-
-{
- int oerrno = errno;
-
- ld_flush_buffer(b );
-
- b->yy_input_file = file;
- b->yy_fill_buffer = 1;
-
- /* If b is the current buffer, then ld_init_buffer was _probably_
- * called from ldrestart() or through yy_get_next_buffer.
- * In that case, we don't want to reset the lineno or column.
- */
- if (b != YY_CURRENT_BUFFER){
- b->yy_bs_lineno = 1;
- b->yy_bs_column = 0;
- }
-
- b->yy_is_interactive = 0;
-
- errno = oerrno;
-}
-
-/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
- * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
- *
- */
- void ld_flush_buffer (YY_BUFFER_STATE b )
-{
- if ( ! b )
- return;
-
- b->yy_n_chars = 0;
-
- /* We always need two end-of-buffer characters. The first causes
- * a transition to the end-of-buffer state. The second causes
- * a jam in that state.
- */
- b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
- b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
-
- b->yy_buf_pos = &b->yy_ch_buf[0];
-
- b->yy_at_bol = 1;
- b->yy_buffer_status = YY_BUFFER_NEW;
-
- if ( b == YY_CURRENT_BUFFER )
- ld_load_buffer_state( );
-}
-
-/** Pushes the new state onto the stack. The new state becomes
- * the current state. This function will allocate the stack
- * if necessary.
- * @param new_buffer The new state.
- *
- */
-void ldpush_buffer_state (YY_BUFFER_STATE new_buffer )
-{
- if (new_buffer == NULL)
- return;
-
- ldensure_buffer_stack();
-
- /* This block is copied from ld_switch_to_buffer. */
- if ( YY_CURRENT_BUFFER )
- {
- /* Flush out information for old buffer. */
- *(yy_c_buf_p) = (yy_hold_char);
- YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
- YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
- }
-
- /* Only push if top exists. Otherwise, replace top. */
- if (YY_CURRENT_BUFFER)
- (yy_buffer_stack_top)++;
- YY_CURRENT_BUFFER_LVALUE = new_buffer;
-
- /* copied from ld_switch_to_buffer. */
- ld_load_buffer_state( );
- (yy_did_buffer_switch_on_eof) = 1;
-}
-
-/** Removes and deletes the top of the stack, if present.
- * The next element becomes the new top.
- *
- */
-void ldpop_buffer_state (void)
-{
- if (!YY_CURRENT_BUFFER)
- return;
-
- ld_delete_buffer(YY_CURRENT_BUFFER );
- YY_CURRENT_BUFFER_LVALUE = NULL;
- if ((yy_buffer_stack_top) > 0)
- --(yy_buffer_stack_top);
-
- if (YY_CURRENT_BUFFER) {
- ld_load_buffer_state( );
- (yy_did_buffer_switch_on_eof) = 1;
- }
-}
-
-/* Allocates the stack if it does not exist.
- * Guarantees space for at least one push.
- */
-static void ldensure_buffer_stack (void)
-{
- int num_to_alloc;
-
- if (!(yy_buffer_stack)) {
-
- /* First allocation is just for 2 elements, since we don't know if this
- * scanner will even need a stack. We use 2 instead of 1 to avoid an
- * immediate realloc on the next call.
- */
- num_to_alloc = 1;
- (yy_buffer_stack) = (struct yy_buffer_state**)ldalloc
- (num_to_alloc * sizeof(struct yy_buffer_state*)
- );
- if ( ! (yy_buffer_stack) )
- YY_FATAL_ERROR( "out of dynamic memory in ldensure_buffer_stack()" );
-
- memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
-
- (yy_buffer_stack_max) = num_to_alloc;
- (yy_buffer_stack_top) = 0;
- return;
- }
-
- if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
-
- /* Increase the buffer to prepare for a possible push. */
- int grow_size = 8 /* arbitrary grow size */;
-
- num_to_alloc = (yy_buffer_stack_max) + grow_size;
- (yy_buffer_stack) = (struct yy_buffer_state**)ldrealloc
- ((yy_buffer_stack),
- num_to_alloc * sizeof(struct yy_buffer_state*)
- );
- if ( ! (yy_buffer_stack) )
- YY_FATAL_ERROR( "out of dynamic memory in ldensure_buffer_stack()" );
-
- /* zero only the new slots.*/
- memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
- (yy_buffer_stack_max) = num_to_alloc;
- }
-}
-
-/** Setup the input buffer state to scan directly from a user-specified character buffer.
- * @param base the character buffer
- * @param size the size in bytes of the character buffer
- *
- * @return the newly allocated buffer state object.
- */
-YY_BUFFER_STATE ld_scan_buffer (char * base, yy_size_t size )
-{
- YY_BUFFER_STATE b;
-
- if ( size < 2 ||
- base[size-2] != YY_END_OF_BUFFER_CHAR ||
- base[size-1] != YY_END_OF_BUFFER_CHAR )
- /* They forgot to leave room for the EOB's. */
- return 0;
-
- b = (YY_BUFFER_STATE) ldalloc(sizeof( struct yy_buffer_state ) );
- if ( ! b )
- YY_FATAL_ERROR( "out of dynamic memory in ld_scan_buffer()" );
-
- b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
- b->yy_buf_pos = b->yy_ch_buf = base;
- b->yy_is_our_buffer = 0;
- b->yy_input_file = 0;
- b->yy_n_chars = b->yy_buf_size;
- b->yy_is_interactive = 0;
- b->yy_at_bol = 1;
- b->yy_fill_buffer = 0;
- b->yy_buffer_status = YY_BUFFER_NEW;
-
- ld_switch_to_buffer(b );
-
- return b;
-}
-
-/** Setup the input buffer state to scan a string. The next call to ldlex() will
- * scan from a @e copy of @a str.
- * @param yystr a NUL-terminated string to scan
- *
- * @return the newly allocated buffer state object.
- * @note If you want to scan bytes that may contain NUL values, then use
- * ld_scan_bytes() instead.
- */
-YY_BUFFER_STATE ld_scan_string (yyconst char * yystr )
-{
-
- return ld_scan_bytes(yystr,strlen(yystr) );
-}
-
-/** Setup the input buffer state to scan the given bytes. The next call to ldlex() will
- * scan from a @e copy of @a bytes.
- * @param bytes the byte buffer to scan
- * @param len the number of bytes in the buffer pointed to by @a bytes.
- *
- * @return the newly allocated buffer state object.
- */
-YY_BUFFER_STATE ld_scan_bytes (yyconst char * yybytes, int _yybytes_len )
-{
- YY_BUFFER_STATE b;
- char *buf;
- yy_size_t n;
- int i;
-
- /* Get memory for full buffer, including space for trailing EOB's. */
- n = _yybytes_len + 2;
- buf = (char *) ldalloc(n );
- if ( ! buf )
- YY_FATAL_ERROR( "out of dynamic memory in ld_scan_bytes()" );
-
- for ( i = 0; i < _yybytes_len; ++i )
- buf[i] = yybytes[i];
-
- buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
-
- b = ld_scan_buffer(buf,n );
- if ( ! b )
- YY_FATAL_ERROR( "bad buffer in ld_scan_bytes()" );
-
- /* It's okay to grow etc. this buffer, and we should throw it
- * away when we're done.
- */
- b->yy_is_our_buffer = 1;
-
- return b;
-}
-
-#ifndef YY_EXIT_FAILURE
-#define YY_EXIT_FAILURE 2
-#endif
-
-static void yy_fatal_error (yyconst char* msg )
-{
- (void) fprintf( stderr, "%s\n", msg );
- exit( YY_EXIT_FAILURE );
-}
-
-/* Redefine yyless() so it works in section 3 code. */
-
-#undef yyless
-#define yyless(n) \
- do \
- { \
- /* Undo effects of setting up ldtext. */ \
- int yyless_macro_arg = (n); \
- YY_LESS_LINENO(yyless_macro_arg);\
- ldtext[ldleng] = (yy_hold_char); \
- (yy_c_buf_p) = ldtext + yyless_macro_arg; \
- (yy_hold_char) = *(yy_c_buf_p); \
- *(yy_c_buf_p) = '\0'; \
- ldleng = yyless_macro_arg; \
- } \
- while ( 0 )
-
-/* Accessor methods (get/set functions) to struct members. */
-
-/** Get the current line number.
- *
- */
-int ldget_lineno (void)
-{
-
- return ldlineno;
-}
-
-/** Get the input stream.
- *
- */
-FILE *ldget_in (void)
-{
- return ldin;
-}
-
-/** Get the output stream.
- *
- */
-FILE *ldget_out (void)
-{
- return ldout;
-}
-
-/** Get the length of the current token.
- *
- */
-int ldget_leng (void)
-{
- return ldleng;
-}
-
-/** Get the current token.
- *
- */
-
-char *ldget_text (void)
-{
- return ldtext;
-}
-
-/** Set the current line number.
- * @param line_number
- *
- */
-void ldset_lineno (int line_number )
-{
-
- ldlineno = line_number;
-}
-
-/** Set the input stream. This does not discard the current
- * input buffer.
- * @param in_str A readable stream.
- *
- * @see ld_switch_to_buffer
- */
-void ldset_in (FILE * in_str )
-{
- ldin = in_str ;
-}
-
-void ldset_out (FILE * out_str )
-{
- ldout = out_str ;
-}
-
-int ldget_debug (void)
-{
- return ld_flex_debug;
-}
-
-void ldset_debug (int bdebug )
-{
- ld_flex_debug = bdebug ;
-}
-
-static int yy_init_globals (void)
-{
- /* Initialization is the same as for the non-reentrant scanner.
- * This function is called from ldlex_destroy(), so don't allocate here.
- */
-
- /* We do not touch ldlineno unless the option is enabled. */
- ldlineno = 1;
-
- (yy_buffer_stack) = 0;
- (yy_buffer_stack_top) = 0;
- (yy_buffer_stack_max) = 0;
- (yy_c_buf_p) = (char *) 0;
- (yy_init) = 0;
- (yy_start) = 0;
-
-/* Defined in main.c */
-#ifdef YY_STDINIT
- ldin = stdin;
- ldout = stdout;
-#else
- ldin = (FILE *) 0;
- ldout = (FILE *) 0;
-#endif
-
- /* For future reference: Set errno on error, since we are called by
- * ldlex_init()
- */
- return 0;
-}
-
-/* ldlex_destroy is for both reentrant and non-reentrant scanners. */
-int ldlex_destroy (void)
-{
-
- /* Pop the buffer stack, destroying each element. */
- while(YY_CURRENT_BUFFER){
- ld_delete_buffer(YY_CURRENT_BUFFER );
- YY_CURRENT_BUFFER_LVALUE = NULL;
- ldpop_buffer_state();
- }
-
- /* Destroy the stack itself. */
- ldfree((yy_buffer_stack) );
- (yy_buffer_stack) = NULL;
-
- /* Reset the globals. This is important in a non-reentrant scanner so the next time
- * ldlex() is called, initialization will occur. */
- yy_init_globals( );
-
- return 0;
-}
-
-/*
- * Internal utility routines.
- */
-
-#ifndef yytext_ptr
-static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
-{
- register int i;
- for ( i = 0; i < n; ++i )
- s1[i] = s2[i];
-}
-#endif
-
-#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * s )
-{
- register int n;
- for ( n = 0; s[n]; ++n )
- ;
-
- return n;
-}
-#endif
-
-void *ldalloc (yy_size_t size )
-{
- return (void *) malloc( size );
-}
-
-void *ldrealloc (void * ptr, yy_size_t size )
-{
- /* The cast to (char *) in the following accommodates both
- * implementations that use char* generic pointers, and those
- * that use void* generic pointers. It works with the latter
- * because both ANSI C and C++ allow castless assignment from
- * any pointer type to void*, and deal with argument conversions
- * as though doing an assignment.
- */
- return (void *) realloc( (char *) ptr, size );
-}
-
-void ldfree (void * ptr )
-{
- free( (char *) ptr ); /* see ldrealloc() for (char *) cast */
-}
-
-#define YYTABLES_NAME "yytables"
-
-#line 206 "ldlex.l"
-
-
-
-static void
-eat_comment (void)
-{
- while (1)
- {
- int c = input ();
-
- while (c != '*' && c != EOF)
- c = input ();
-
- if (c == '*')
- {
- c = input ();
- while (c == '*')
- c = input ();
- if (c == '/')
- break;
- }
-
- if (c == EOF)
- {
- /* XXX Use the setjmp buffer and signal EOF in comment */
- error (0, 0, gettext ("EOF in comment"));
- break;
- }
- }
-}
-
-
-static void
-eat_to_eol (bool empty)
-{
- bool warned = false;
-
- while (1)
- {
- int c = input ();
-
- if (c == EOF)
- break;
- if (c == '\n')
- {
- ++ldlineno;
- break;
- }
-
- if (empty && ! isspace (c) && ! warned)
- {
- error (0, 0, gettext ("%d: garbage at end of line"), ldlineno);
- warned = true;
- }
- }
-}
-
-
-static int
-attrib_convert (int c)
-{
- if (c == 'X')
- return PF_X;
- if (c == 'W')
- return PF_W;
- assert (c == 'R');
- return PF_R;
-}
-
-
-static void
-push_state (enum prepstate state)
-{
- if (prepdepth >= MAX_PREPDEPTH)
- error (EXIT_FAILURE, 0, gettext ("%d: conditionals nested too deep"),
- ldlineno);
-
- prepstate[prepdepth++] = state;
-}
-
-
-static int
-pop_state (void)
-{
- if (prepdepth == 0)
- error (0, 0, gettext ("%d: unexpected #endif"), ldlineno);
- else
- --prepdepth;
-
- return prepdepth == 0 ? INITIAL : IGNORE;
-}
-
-
-static int
-handle_ifdef (void)
-{
- char idbuf[50];
- char *id = idbuf;
- size_t idlen = 0;
- size_t idmax = sizeof (idbuf);
- bool ignore_ws = true;
- bool defined = false;
- int result;
-
- while (1)
- {
- int c = input ();
-
- if (isspace (c) && ignore_ws)
- continue;
-
- if (c != '_' && (c < 'a' || c > 'z') && (c < 'A' || c > 'Z')
- && (idlen == 0 || c < '0' || c > '9'))
- {
- unput (c);
- break;
- }
-
- if (idlen == idmax)
- {
- char *newp = (char *) alloca (idmax *= 2);
- id = memcpy (newp, id, idlen);
- }
-
- id[idlen++] = c;
- ignore_ws = false;
- }
-
- /* XXX Compare in a better way. */
- if (idlen == 6 && strncmp (id, "SHARED", 6) == 0)
- defined = ld_state.file_type == dso_file_type;
-
- if (defined)
- result = INITIAL;
- else
- {
- push_state (skip_if);
- result = IGNORE;
- }
-
- return result;
-}
-
-
-static void
-invalid_char (int ch)
-{
- error (0, 0, (isascii (ch)
- ? gettext ("invalid character '%c' at line %d; ignored")
- : gettext ("invalid character '\\%o' at line %d; ignored")),
- ch, ldlineno);
-}
-
-
-// Local Variables:
-// mode: C
-// End:
-
diff --git a/src/ldlex.l b/src/ldlex.l
deleted file mode 100644
index eb15c7b..0000000
--- a/src/ldlex.l
+++ /dev/null
@@ -1,361 +0,0 @@
-%{
-/* Copyright (C) 2001, 2002, 2003, 2004, 2005, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <ctype.h>
-#include <elf.h>
-#include <error.h>
-#include <inttypes.h>
-#include <libintl.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <system.h>
-#include <ld.h>
-#include "ldscript.h"
-
-/* We sure use no threads to read the stream, so use the _unlocked
- variants of the functions. */
-#undef getc
-#define getc(s) getc_unlocked (s)
-#undef ferror
-#define ferror(s) ferror_unlocked (s)
-#undef fread
-#define fread(b, m, n, s) fread_unlocked (b, m, n, s)
-#undef fwrite
-#define fwrite(b, m, n, s) fwrite_unlocked (b, m, n, s)
-
-/* ECHO must be redefined since the default implementation ignores
- the return value of fwrite_unlocked. */
-#define ECHO do { size_t n__ __attribute__ ((unused)) \
- = fwrite (yytext, yyleng, 1, yyout); } while (0)
-
-/* Defined in ld.c. */
-extern int ld_scan_version_script;
-
-#define MAX_PREPDEPTH 20
-static enum prepstate
-{
- prep_normal,
- skip_if,
- skip_to_endif
-} prepstate[MAX_PREPDEPTH];
-static int prepdepth;
-
-static void eat_comment (void);
-static void eat_to_eol (bool empty);
-static int attrib_convert (int c);
-static void push_state (enum prepstate);
-static int pop_state (void);
-static int handle_ifdef (void);
-static void invalid_char (int ch);
-%}
-
-ID [a-zA-Z0-9_.*?][a-zA-Z0-9_.*?-]*
-FILENAMECHAR1 [a-zA-Z0-9_/.\\~]
-FILENAMECHAR [^][{}[:space:]():;]+
-HEX 0[xX][0-9a-fA-F]+[kKmM]?
-OCT 0[0-7]*[kKmM]?
-DEC [0-9]+[kKmM]?
-WHITE [[:space:]]+
-
-%option yylineno
-%option never-interactive
-%option noyywrap
-
-%x IGNORE
-
-%%
- if (unlikely (ld_scan_version_script))
- {
- ld_scan_version_script = -1;
- return kVERSION_SCRIPT;
- }
-
-^"#"ifdef/[[:space:]] { BEGIN (handle_ifdef ()); }
-^"#"else/[[:space:]\n] { eat_to_eol (true);
- push_state (skip_to_endif);
- BEGIN (IGNORE); }
-^"#"elifdef/[[:space:]] { eat_to_eol (false);
- push_state (skip_to_endif);
- BEGIN (IGNORE); }
-^"#"endif/[[:space:]\n] { eat_to_eol (true) ; }
-
-<IGNORE>^"#"ifdef/[[:space:]\n] { eat_to_eol (false);
- push_state (skip_to_endif); }
-<IGNORE>^"#"else/[[:space:]\n] { eat_to_eol (true);
- assert (prepdepth > 0);
- if (prepstate[prepdepth - 1] == skip_if)
- {
- /* Back to normal processing. */
- assert (prepdepth == 1);
- BEGIN (pop_state ());
- }
- }
-<IGNORE>^"#"elifdef/[[:space:]] { assert (prepdepth > 0);
- if (prepstate[prepdepth - 1] == skip_if)
- {
- /* Maybe this symbol is defined. */
- pop_state ();
- BEGIN (handle_ifdef ());
- }
- }
-<IGNORE>^"#"endif/[[:space:]\n] { eat_to_eol (true);
- BEGIN (pop_state ()); }
-<IGNORE>.|\n { /* nothing */ }
-
-
-"/*" { eat_comment (); }
-
-ALIGN { return kALIGN; }
-AS_NEEDED { return kAS_NEEDED; }
-ENTRY { return kENTRY; }
-EXCLUDE_FILE { return kEXCLUDE_FILE; }
-"global:" { return kGLOBAL; }
-GROUP { return kGROUP; }
-INPUT { return kINPUT; }
-INTERP { return kINTERP; }
-KEEP { return kKEEP; }
-"local:" { return kLOCAL; }
-OUTPUT_FORMAT { return kOUTPUT_FORMAT; }
-PAGESIZE { return kPAGESIZE; }
-PROVIDE { return kPROVIDE; }
-SEARCH_DIR { return kSEARCH_DIR; }
-SEGMENT { return kSEGMENT; }
-SIZEOF_HEADERS { return kSIZEOF_HEADERS; }
-SORT { return kSORT; }
-VERSION { return kVERSION; }
-
-"["([RWX]){0,3}"]" { int cnt = 1 ;
- ldlval.num = 0;
- while (cnt < yyleng - 1)
- ldlval.num |= attrib_convert (yytext[cnt++]);
- return kMODE; }
-
-"{" { return '{'; }
-"}" { return '}'; }
-"(" { return '('; }
-")" { return ')'; }
-":" { return ':'; }
-";" { return ';'; }
-"=" { return '='; }
-"+" { ldlval.op = exp_plus; return kADD_OP; }
-"-" { ldlval.op = exp_minus; return kADD_OP; }
-"*" { return '*'; }
-"/" { ldlval.op = exp_div; return kMUL_OP; }
-"%" { ldlval.op = exp_mod; return kMUL_OP; }
-"&" { return '&'; }
-"|" { return '|'; }
-
-"," { return ','; }
-
-{HEX}|{OCT}|{DEC} { char *endp;
- ldlval.num = strtoumax (yytext, &endp, 0);
- if (*endp != '\0')
- {
- if (tolower (*endp) == 'k')
- ldlval.num *= 1024;
- else
- {
- assert (tolower (*endp) == 'm');
- ldlval.num *= 1024 * 1024;
- }
- }
- return kNUM; }
-
-{ID} { ldlval.str = obstack_strndup (&ld_state.smem,
- yytext, yyleng);
- return kID; }
-
-{FILENAMECHAR1}{FILENAMECHAR} { ldlval.str = obstack_strndup (&ld_state.smem,
- yytext, yyleng);
- return kFILENAME; }
-
-{WHITE} { /* IGNORE */ }
-
-. { invalid_char (*yytext); }
-
-%%
-
-static void
-eat_comment (void)
-{
- while (1)
- {
- int c = input ();
-
- while (c != '*' && c != EOF)
- c = input ();
-
- if (c == '*')
- {
- c = input ();
- while (c == '*')
- c = input ();
- if (c == '/')
- break;
- }
-
- if (c == EOF)
- {
- /* XXX Use the setjmp buffer and signal EOF in comment */
- error (0, 0, gettext ("EOF in comment"));
- break;
- }
- }
-}
-
-
-static void
-eat_to_eol (bool empty)
-{
- bool warned = false;
-
- while (1)
- {
- int c = input ();
-
- if (c == EOF)
- break;
- if (c == '\n')
- {
- ++yylineno;
- break;
- }
-
- if (empty && ! isspace (c) && ! warned)
- {
- error (0, 0, gettext ("%d: garbage at end of line"), yylineno);
- warned = true;
- }
- }
-}
-
-
-static int
-attrib_convert (int c)
-{
- if (c == 'X')
- return PF_X;
- if (c == 'W')
- return PF_W;
- assert (c == 'R');
- return PF_R;
-}
-
-
-static void
-push_state (enum prepstate state)
-{
- if (prepdepth >= MAX_PREPDEPTH)
- error (EXIT_FAILURE, 0, gettext ("%d: conditionals nested too deep"),
- yylineno);
-
- prepstate[prepdepth++] = state;
-}
-
-
-static int
-pop_state (void)
-{
- if (prepdepth == 0)
- error (0, 0, gettext ("%d: unexpected #endif"), yylineno);
- else
- --prepdepth;
-
- return prepdepth == 0 ? INITIAL : IGNORE;
-}
-
-
-static int
-handle_ifdef (void)
-{
- char idbuf[50];
- char *id = idbuf;
- size_t idlen = 0;
- size_t idmax = sizeof (idbuf);
- bool ignore_ws = true;
- bool defined = false;
- int result;
-
- while (1)
- {
- int c = input ();
-
- if (isspace (c) && ignore_ws)
- continue;
-
- if (c != '_' && (c < 'a' || c > 'z') && (c < 'A' || c > 'Z')
- && (idlen == 0 || c < '0' || c > '9'))
- {
- unput (c);
- break;
- }
-
- if (idlen == idmax)
- {
- char *newp = (char *) alloca (idmax *= 2);
- id = memcpy (newp, id, idlen);
- }
-
- id[idlen++] = c;
- ignore_ws = false;
- }
-
- /* XXX Compare in a better way. */
- if (idlen == 6 && strncmp (id, "SHARED", 6) == 0)
- defined = ld_state.file_type == dso_file_type;
-
- if (defined)
- result = INITIAL;
- else
- {
- push_state (skip_if);
- result = IGNORE;
- }
-
- return result;
-}
-
-
-static void
-invalid_char (int ch)
-{
- error (0, 0, (isascii (ch)
- ? gettext ("invalid character '%c' at line %d; ignored")
- : gettext ("invalid character '\\%o' at line %d; ignored")),
- ch, yylineno);
-}
-
-
-// Local Variables:
-// mode: C
-// End:
diff --git a/src/ldscript.c b/src/ldscript.c
deleted file mode 100644
index da72f29..0000000
--- a/src/ldscript.c
+++ /dev/null
@@ -1,2610 +0,0 @@
-/* A Bison parser, made by GNU Bison 2.3. */
-
-/* Skeleton implementation for Bison's Yacc-like parsers in C
-
- Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
- Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program 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 General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
-/* As a special exception, you may create a larger work that contains
- part or all of the Bison parser skeleton and distribute that work
- under terms of your choice, so long as that work isn't itself a
- parser generator using the skeleton or a modified version thereof
- as a parser skeleton. Alternatively, if you modify or redistribute
- the parser skeleton itself, you may (at your option) remove this
- special exception, which will cause the skeleton and the resulting
- Bison output files to be licensed under the GNU General Public
- License without this special exception.
-
- This special exception was added by the Free Software Foundation in
- version 2.2 of Bison. */
-
-/* C LALR(1) parser skeleton written by Richard Stallman, by
- simplifying the original so-called "semantic" parser. */
-
-/* All symbols defined below should begin with yy or YY, to avoid
- infringing on user name space. This should be done even for local
- variables, as they might otherwise be expanded by user macros.
- There are some unavoidable exceptions within include files to
- define necessary library symbols; they are noted "INFRINGES ON
- USER NAME SPACE" below. */
-
-/* Identify Bison output. */
-#define YYBISON 1
-
-/* Bison version. */
-#define YYBISON_VERSION "2.3"
-
-/* Skeleton name. */
-#define YYSKELETON_NAME "yacc.c"
-
-/* Pure parsers. */
-#define YYPURE 0
-
-/* Using locations. */
-#define YYLSP_NEEDED 0
-
-/* Substitute the variable and function names. */
-#define yyparse ldparse
-#define yylex ldlex
-#define yyerror lderror
-#define yylval ldlval
-#define yychar ldchar
-#define yydebug lddebug
-#define yynerrs ldnerrs
-
-
-/* Tokens. */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
- /* Put the tokens into the symbol table, so that GDB and other debuggers
- know about them. */
- enum yytokentype {
- kADD_OP = 258,
- kALIGN = 259,
- kAS_NEEDED = 260,
- kENTRY = 261,
- kEXCLUDE_FILE = 262,
- kFILENAME = 263,
- kGLOBAL = 264,
- kGROUP = 265,
- kID = 266,
- kINPUT = 267,
- kINTERP = 268,
- kKEEP = 269,
- kLOCAL = 270,
- kMODE = 271,
- kMUL_OP = 272,
- kNUM = 273,
- kOUTPUT_FORMAT = 274,
- kPAGESIZE = 275,
- kPROVIDE = 276,
- kSEARCH_DIR = 277,
- kSEGMENT = 278,
- kSIZEOF_HEADERS = 279,
- kSORT = 280,
- kVERSION = 281,
- kVERSION_SCRIPT = 282,
- ADD_OP = 283,
- MUL_OP = 284
- };
-#endif
-/* Tokens. */
-#define kADD_OP 258
-#define kALIGN 259
-#define kAS_NEEDED 260
-#define kENTRY 261
-#define kEXCLUDE_FILE 262
-#define kFILENAME 263
-#define kGLOBAL 264
-#define kGROUP 265
-#define kID 266
-#define kINPUT 267
-#define kINTERP 268
-#define kKEEP 269
-#define kLOCAL 270
-#define kMODE 271
-#define kMUL_OP 272
-#define kNUM 273
-#define kOUTPUT_FORMAT 274
-#define kPAGESIZE 275
-#define kPROVIDE 276
-#define kSEARCH_DIR 277
-#define kSEGMENT 278
-#define kSIZEOF_HEADERS 279
-#define kSORT 280
-#define kVERSION 281
-#define kVERSION_SCRIPT 282
-#define ADD_OP 283
-#define MUL_OP 284
-
-
-
-
-/* Copy the first part of user declarations. */
-#line 1 "ldscript.y"
-
-/* Parser for linker scripts.
- Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <error.h>
-#include <libintl.h>
-#include <stdbool.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <system.h>
-#include <ld.h>
-
-/* The error handler. */
-static void yyerror (const char *s);
-
-/* Some helper functions we need to construct the data structures
- describing information from the file. */
-static struct expression *new_expr (int tag);
-static struct input_section_name *new_input_section_name (const char *name,
- bool sort_flag);
-static struct input_rule *new_input_rule (int tag);
-static struct output_rule *new_output_rule (int tag);
-static struct assignment *new_assignment (const char *variable,
- struct expression *expression,
- bool provide_flag);
-static void new_segment (int mode, struct output_rule *output_rule);
-static struct filename_list *new_filename_listelem (const char *string);
-static void add_inputfiles (struct filename_list *fnames);
-static struct id_list *new_id_listelem (const char *str);
- static struct filename_list *mark_as_needed (struct filename_list *listp);
-static struct version *new_version (struct id_list *local,
- struct id_list *global);
-static struct version *merge_versions (struct version *one,
- struct version *two);
-static void add_versions (struct version *versions);
-
-extern int yylex (void);
-
-
-/* Enabling traces. */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-
-/* Enabling verbose error messages. */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 0
-#endif
-
-/* Enabling the token table. */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE 0
-#endif
-
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
-#line 71 "ldscript.y"
-{
- uintmax_t num;
- enum expression_tag op;
- char *str;
- struct expression *expr;
- struct input_section_name *sectionname;
- struct filemask_section_name *filemask_section_name;
- struct input_rule *input_rule;
- struct output_rule *output_rule;
- struct assignment *assignment;
- struct filename_list *filename_list;
- struct version *version;
- struct id_list *id_list;
-}
-/* Line 187 of yacc.c. */
-#line 247 "ldscript.c"
- YYSTYPE;
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
-# define YYSTYPE_IS_TRIVIAL 1
-#endif
-
-
-
-/* Copy the second part of user declarations. */
-
-
-/* Line 216 of yacc.c. */
-#line 260 "ldscript.c"
-
-#ifdef short
-# undef short
-#endif
-
-#ifdef YYTYPE_UINT8
-typedef YYTYPE_UINT8 yytype_uint8;
-#else
-typedef unsigned char yytype_uint8;
-#endif
-
-#ifdef YYTYPE_INT8
-typedef YYTYPE_INT8 yytype_int8;
-#elif (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-typedef signed char yytype_int8;
-#else
-typedef short int yytype_int8;
-#endif
-
-#ifdef YYTYPE_UINT16
-typedef YYTYPE_UINT16 yytype_uint16;
-#else
-typedef unsigned short int yytype_uint16;
-#endif
-
-#ifdef YYTYPE_INT16
-typedef YYTYPE_INT16 yytype_int16;
-#else
-typedef short int yytype_int16;
-#endif
-
-#ifndef YYSIZE_T
-# ifdef __SIZE_TYPE__
-# define YYSIZE_T __SIZE_TYPE__
-# elif defined size_t
-# define YYSIZE_T size_t
-# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
-# define YYSIZE_T size_t
-# else
-# define YYSIZE_T unsigned int
-# endif
-#endif
-
-#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
-
-#ifndef YY_
-# if YYENABLE_NLS
-# if ENABLE_NLS
-# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
-# define YY_(msgid) dgettext ("bison-runtime", msgid)
-# endif
-# endif
-# ifndef YY_
-# define YY_(msgid) msgid
-# endif
-#endif
-
-/* Suppress unused-variable warnings by "using" E. */
-#if ! defined lint || defined __GNUC__
-# define YYUSE(e) ((void) (e))
-#else
-# define YYUSE(e) /* empty */
-#endif
-
-/* Identity function, used to suppress warnings about constant conditions. */
-#ifndef lint
-# define YYID(n) (n)
-#else
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static int
-YYID (int i)
-#else
-static int
-YYID (i)
- int i;
-#endif
-{
- return i;
-}
-#endif
-
-#if ! defined yyoverflow || YYERROR_VERBOSE
-
-/* The parser invokes alloca or malloc; define the necessary symbols. */
-
-# ifdef YYSTACK_USE_ALLOCA
-# if YYSTACK_USE_ALLOCA
-# ifdef __GNUC__
-# define YYSTACK_ALLOC __builtin_alloca
-# elif defined __BUILTIN_VA_ARG_INCR
-# include <alloca.h> /* INFRINGES ON USER NAME SPACE */
-# elif defined _AIX
-# define YYSTACK_ALLOC __alloca
-# elif defined _MSC_VER
-# include <malloc.h> /* INFRINGES ON USER NAME SPACE */
-# define alloca _alloca
-# else
-# define YYSTACK_ALLOC alloca
-# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-# ifndef _STDLIB_H
-# define _STDLIB_H 1
-# endif
-# endif
-# endif
-# endif
-# endif
-
-# ifdef YYSTACK_ALLOC
- /* Pacify GCC's `empty if-body' warning. */
-# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
-# ifndef YYSTACK_ALLOC_MAXIMUM
- /* The OS might guarantee only one guard page at the bottom of the stack,
- and a page size can be as small as 4096 bytes. So we cannot safely
- invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
- to allow for a few compiler-allocated temporary stack slots. */
-# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
-# endif
-# else
-# define YYSTACK_ALLOC YYMALLOC
-# define YYSTACK_FREE YYFREE
-# ifndef YYSTACK_ALLOC_MAXIMUM
-# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
-# endif
-# if (defined __cplusplus && ! defined _STDLIB_H \
- && ! ((defined YYMALLOC || defined malloc) \
- && (defined YYFREE || defined free)))
-# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-# ifndef _STDLIB_H
-# define _STDLIB_H 1
-# endif
-# endif
-# ifndef YYMALLOC
-# define YYMALLOC malloc
-# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
-# endif
-# endif
-# ifndef YYFREE
-# define YYFREE free
-# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-void free (void *); /* INFRINGES ON USER NAME SPACE */
-# endif
-# endif
-# endif
-#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
-
-
-#if (! defined yyoverflow \
- && (! defined __cplusplus \
- || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
-
-/* A type that is properly aligned for any stack member. */
-union yyalloc
-{
- yytype_int16 yyss;
- YYSTYPE yyvs;
- };
-
-/* The size of the maximum gap between one aligned stack and the next. */
-# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
-
-/* The size of an array large to enough to hold all stacks, each with
- N elements. */
-# define YYSTACK_BYTES(N) \
- ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
- + YYSTACK_GAP_MAXIMUM)
-
-/* Copy COUNT objects from FROM to TO. The source and destination do
- not overlap. */
-# ifndef YYCOPY
-# if defined __GNUC__ && 1 < __GNUC__
-# define YYCOPY(To, From, Count) \
- __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
-# else
-# define YYCOPY(To, From, Count) \
- do \
- { \
- YYSIZE_T yyi; \
- for (yyi = 0; yyi < (Count); yyi++) \
- (To)[yyi] = (From)[yyi]; \
- } \
- while (YYID (0))
-# endif
-# endif
-
-/* Relocate STACK from its old location to the new one. The
- local variables YYSIZE and YYSTACKSIZE give the old and new number of
- elements in the stack, and YYPTR gives the new location of the
- stack. Advance YYPTR to a properly aligned location for the next
- stack. */
-# define YYSTACK_RELOCATE(Stack) \
- do \
- { \
- YYSIZE_T yynewbytes; \
- YYCOPY (&yyptr->Stack, Stack, yysize); \
- Stack = &yyptr->Stack; \
- yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
- yyptr += yynewbytes / sizeof (*yyptr); \
- } \
- while (YYID (0))
-
-#endif
-
-/* YYFINAL -- State number of the termination state. */
-#define YYFINAL 32
-/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 226
-
-/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 40
-/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 23
-/* YYNRULES -- Number of rules. */
-#define YYNRULES 66
-/* YYNRULES -- Number of states. */
-#define YYNSTATES 159
-
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
-#define YYUNDEFTOK 2
-#define YYMAXUTOK 284
-
-#define YYTRANSLATE(YYX) \
- ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
-
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
-static const yytype_uint8 yytranslate[] =
-{
- 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 29, 2,
- 33, 34, 31, 2, 39, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 35,
- 2, 38, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 36, 28, 37, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
- 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
- 25, 26, 27, 30, 32
-};
-
-#if YYDEBUG
-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
- YYRHS. */
-static const yytype_uint8 yyprhs[] =
-{
- 0, 0, 3, 5, 8, 11, 13, 19, 25, 31,
- 37, 43, 49, 54, 59, 64, 69, 74, 77, 79,
- 82, 87, 90, 94, 101, 104, 106, 108, 113, 116,
- 122, 124, 129, 134, 135, 140, 144, 148, 152, 156,
- 160, 164, 166, 168, 170, 172, 176, 178, 180, 181,
- 186, 191, 193, 196, 198, 203, 209, 216, 219, 221,
- 224, 227, 231, 234, 236, 238, 240
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
-static const yytype_int8 yyrhs[] =
-{
- 41, 0, -1, 42, -1, 27, 56, -1, 42, 43,
- -1, 43, -1, 6, 33, 11, 34, 35, -1, 22,
- 33, 61, 34, 35, -1, 20, 33, 18, 34, 35,
- -1, 13, 33, 61, 34, 35, -1, 23, 16, 36,
- 44, 37, -1, 23, 1, 36, 44, 37, -1, 10,
- 33, 53, 34, -1, 12, 33, 53, 34, -1, 5,
- 33, 53, 34, -1, 26, 36, 56, 37, -1, 19,
- 33, 61, 34, -1, 44, 45, -1, 45, -1, 46,
- 35, -1, 11, 36, 47, 37, -1, 11, 35, -1,
- 11, 38, 52, -1, 21, 33, 11, 38, 52, 34,
- -1, 47, 48, -1, 48, -1, 49, -1, 14, 33,
- 49, 34, -1, 46, 35, -1, 62, 33, 51, 50,
- 34, -1, 11, -1, 25, 33, 11, 34, -1, 7,
- 33, 61, 34, -1, -1, 4, 33, 52, 34, -1,
- 33, 52, 34, -1, 52, 31, 52, -1, 52, 17,
- 52, -1, 52, 3, 52, -1, 52, 29, 52, -1,
- 52, 28, 52, -1, 18, -1, 11, -1, 24, -1,
- 20, -1, 53, 54, 55, -1, 55, -1, 39, -1,
- -1, 10, 33, 53, 34, -1, 5, 33, 53, 34,
- -1, 61, -1, 56, 57, -1, 57, -1, 36, 58,
- 37, 35, -1, 61, 36, 58, 37, 35, -1, 61,
- 36, 58, 37, 61, 35, -1, 58, 59, -1, 59,
- -1, 9, 60, -1, 15, 60, -1, 60, 62, 35,
- -1, 62, 35, -1, 8, -1, 11, -1, 61, -1,
- 31, -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
-static const yytype_uint16 yyrline[] =
-{
- 0, 143, 143, 144, 148, 149, 152, 157, 161, 166,
- 172, 176, 182, 193, 195, 197, 199, 203, 208, 212,
- 217, 229, 253, 255, 259, 264, 268, 273, 280, 287,
- 298, 300, 304, 307, 310, 315, 317, 323, 329, 335,
- 341, 347, 352, 357, 359, 363, 368, 372, 373, 376,
- 387, 389, 394, 399, 403, 409, 415, 424, 426, 430,
- 432, 437, 443, 447, 449, 453, 455
-};
-#endif
-
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
-/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
- First, the terminals, then, starting at YYNTOKENS, nonterminals. */
-static const char *const yytname[] =
-{
- "$end", "error", "$undefined", "kADD_OP", "kALIGN", "kAS_NEEDED",
- "kENTRY", "kEXCLUDE_FILE", "kFILENAME", "kGLOBAL", "kGROUP", "kID",
- "kINPUT", "kINTERP", "kKEEP", "kLOCAL", "kMODE", "kMUL_OP", "kNUM",
- "kOUTPUT_FORMAT", "kPAGESIZE", "kPROVIDE", "kSEARCH_DIR", "kSEGMENT",
- "kSIZEOF_HEADERS", "kSORT", "kVERSION", "kVERSION_SCRIPT", "'|'", "'&'",
- "ADD_OP", "'*'", "MUL_OP", "'('", "')'", "';'", "'{'", "'}'", "'='",
- "','", "$accept", "script_or_version", "file", "content",
- "outputsections", "outputsection", "assignment", "inputsections",
- "inputsection", "sectionname", "sort_opt_name", "exclude_opt", "expr",
- "filename_id_list", "comma_opt", "filename_id_listelem", "versionlist",
- "version", "version_stmt_list", "version_stmt", "filename_id_star_list",
- "filename_id", "filename_id_star", 0
-};
-#endif
-
-# ifdef YYPRINT
-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
- token YYLEX-NUM. */
-static const yytype_uint16 yytoknum[] =
-{
- 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
- 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
- 275, 276, 277, 278, 279, 280, 281, 282, 124, 38,
- 283, 42, 284, 40, 41, 59, 123, 125, 61, 44
-};
-# endif
-
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
-static const yytype_uint8 yyr1[] =
-{
- 0, 40, 41, 41, 42, 42, 43, 43, 43, 43,
- 43, 43, 43, 43, 43, 43, 43, 44, 44, 45,
- 45, 45, 46, 46, 47, 47, 48, 48, 48, 49,
- 50, 50, 51, 51, 52, 52, 52, 52, 52, 52,
- 52, 52, 52, 52, 52, 53, 53, 54, 54, 55,
- 55, 55, 56, 56, 57, 57, 57, 58, 58, 59,
- 59, 60, 60, 61, 61, 62, 62
-};
-
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
-static const yytype_uint8 yyr2[] =
-{
- 0, 2, 1, 2, 2, 1, 5, 5, 5, 5,
- 5, 5, 4, 4, 4, 4, 4, 2, 1, 2,
- 4, 2, 3, 6, 2, 1, 1, 4, 2, 5,
- 1, 4, 4, 0, 4, 3, 3, 3, 3, 3,
- 3, 1, 1, 1, 1, 3, 1, 1, 0, 4,
- 4, 1, 2, 1, 4, 5, 6, 2, 1, 2,
- 2, 3, 2, 1, 1, 1, 1
-};
-
-/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
- STATE-NUM when YYTABLE doesn't specify something else to do. Zero
- means the default is an error. */
-static const yytype_uint8 yydefact[] =
-{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 2, 5, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 63, 64, 0, 3,
- 53, 0, 1, 4, 0, 0, 48, 46, 51, 0,
- 48, 48, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 58, 52, 0, 0, 0, 14, 47, 0,
- 0, 12, 13, 0, 16, 0, 0, 0, 0, 0,
- 18, 0, 0, 15, 66, 59, 65, 0, 60, 0,
- 57, 0, 48, 48, 45, 6, 9, 8, 7, 21,
- 0, 0, 0, 11, 17, 19, 10, 0, 62, 54,
- 0, 50, 49, 64, 0, 0, 0, 25, 26, 0,
- 0, 42, 41, 44, 43, 0, 22, 0, 61, 55,
- 0, 0, 28, 20, 24, 33, 0, 0, 0, 0,
- 0, 0, 0, 0, 56, 0, 0, 0, 0, 35,
- 38, 37, 40, 39, 36, 0, 27, 0, 30, 0,
- 0, 34, 23, 0, 0, 29, 32, 0, 31
-};
-
-/* YYDEFGOTO[NTERM-NUM]. */
-static const yytype_int16 yydefgoto[] =
-{
- -1, 12, 13, 14, 69, 70, 71, 106, 107, 108,
- 150, 137, 116, 36, 59, 37, 29, 30, 51, 52,
- 75, 76, 109
-};
-
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
- STATE-NUM. */
-#define YYPACT_NINF -86
-static const yytype_int16 yypact[] =
-{
- 111, -18, -14, 23, 45, 70, 75, 85, 92, 97,
- 91, 19, 128, 134, -86, 162, 96, 162, 162, 5,
- 5, 123, 5, 93, 99, 19, -86, -86, 117, 19,
- -86, 115, -86, -86, 125, 144, 71, -86, -86, 145,
- 116, 135, 147, 148, 149, 150, 101, 101, 14, 83,
- 83, 55, -86, -86, 117, 162, 162, -86, -86, 162,
- 133, -86, -86, 143, -86, 151, 152, 107, 155, 63,
- -86, 154, 74, -86, -86, 83, -86, 156, 83, 157,
- -86, 56, 137, 141, -86, -86, -86, -86, -86, -86,
- 88, 48, 174, -86, -86, -86, -86, 158, -86, -86,
- 69, -86, -86, 159, 161, 160, 12, -86, -86, 163,
- 165, -86, -86, -86, -86, 48, 59, 164, -86, -86,
- 166, 83, -86, -86, -86, 183, 48, 0, 48, 48,
- 48, 48, 48, 48, -86, 169, 167, 90, 7, -86,
- 59, 59, 44, 66, 103, 29, -86, 5, -86, 171,
- 172, -86, -86, 173, 188, -86, -86, 175, -86
-};
-
-/* YYPGOTO[NTERM-NUM]. */
-static const yytype_int16 yypgoto[] =
-{
- -86, -86, -86, 192, 168, 80, -85, -86, 102, 89,
- -86, -86, 33, -16, -86, 153, 186, 38, 170, -39,
- 176, -11, 4
-};
-
-/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
- positive, shift that token. If negative, reduce the rule which
- number is the opposite. If zero, do what YYDEFACT says.
- If YYTABLE_NINF, syntax error. */
-#define YYTABLE_NINF -1
-static const yytype_uint8 yytable[] =
-{
- 31, 40, 41, 128, 38, 105, 38, 38, 42, 43,
- 128, 45, 80, 26, 31, 15, 27, 129, 31, 16,
- 26, 105, 26, 103, 129, 27, 104, 26, 130, 131,
- 27, 132, 128, 68, 139, 130, 131, 31, 132, 82,
- 83, 151, 80, 74, 38, 38, 129, 128, 38, 123,
- 28, 73, 110, 77, 77, 28, 17, 130, 131, 111,
- 132, 129, 128, 152, 49, 49, 112, 53, 113, 128,
- 50, 50, 114, 131, 67, 132, 129, 26, 18, 97,
- 27, 115, 97, 129, 68, 67, 53, 130, 131, 120,
- 132, 26, 79, 100, 27, 68, 26, 132, 23, 103,
- 93, 148, 104, 19, 119, 57, 128, 39, 20, 68,
- 58, 96, 67, 24, 74, 149, 1, 2, 21, 74,
- 129, 3, 68, 4, 5, 22, 49, 25, 32, 46,
- 6, 7, 50, 8, 9, 47, 153, 10, 11, 1,
- 2, 44, 89, 90, 3, 91, 4, 5, 127, 94,
- 61, 54, 94, 6, 7, 58, 8, 9, 55, 138,
- 10, 140, 141, 142, 143, 144, 145, 34, 85, 62,
- 26, 101, 35, 27, 58, 102, 58, 56, 86, 60,
- 58, 63, 64, 65, 66, 117, 87, 88, 92, 95,
- 136, 98, 99, 118, 121, 122, 125, 91, 126, 157,
- 147, 134, 133, 146, 154, 33, 155, 156, 124, 158,
- 135, 48, 84, 0, 0, 72, 0, 0, 0, 0,
- 0, 0, 0, 0, 81, 0, 78
-};
-
-static const yytype_int16 yycheck[] =
-{
- 11, 17, 18, 3, 15, 90, 17, 18, 19, 20,
- 3, 22, 51, 8, 25, 33, 11, 17, 29, 33,
- 8, 106, 8, 11, 17, 11, 14, 8, 28, 29,
- 11, 31, 3, 21, 34, 28, 29, 48, 31, 55,
- 56, 34, 81, 31, 55, 56, 17, 3, 59, 37,
- 36, 37, 4, 49, 50, 36, 33, 28, 29, 11,
- 31, 17, 3, 34, 9, 9, 18, 29, 20, 3,
- 15, 15, 24, 29, 11, 31, 17, 8, 33, 75,
- 11, 33, 78, 17, 21, 11, 48, 28, 29, 100,
- 31, 8, 37, 37, 11, 21, 8, 31, 1, 11,
- 37, 11, 14, 33, 35, 34, 3, 11, 33, 21,
- 39, 37, 11, 16, 31, 25, 5, 6, 33, 31,
- 17, 10, 21, 12, 13, 33, 9, 36, 0, 36,
- 19, 20, 15, 22, 23, 36, 147, 26, 27, 5,
- 6, 18, 35, 36, 10, 38, 12, 13, 115, 69,
- 34, 36, 72, 19, 20, 39, 22, 23, 33, 126,
- 26, 128, 129, 130, 131, 132, 133, 5, 35, 34,
- 8, 34, 10, 11, 39, 34, 39, 33, 35, 34,
- 39, 34, 34, 34, 34, 11, 35, 35, 33, 35,
- 7, 35, 35, 35, 33, 35, 33, 38, 33, 11,
- 33, 35, 38, 34, 33, 13, 34, 34, 106, 34,
- 121, 25, 59, -1, -1, 47, -1, -1, -1, -1,
- -1, -1, -1, -1, 54, -1, 50
-};
-
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
- symbol of state STATE-NUM. */
-static const yytype_uint8 yystos[] =
-{
- 0, 5, 6, 10, 12, 13, 19, 20, 22, 23,
- 26, 27, 41, 42, 43, 33, 33, 33, 33, 33,
- 33, 33, 33, 1, 16, 36, 8, 11, 36, 56,
- 57, 61, 0, 43, 5, 10, 53, 55, 61, 11,
- 53, 53, 61, 61, 18, 61, 36, 36, 56, 9,
- 15, 58, 59, 57, 36, 33, 33, 34, 39, 54,
- 34, 34, 34, 34, 34, 34, 34, 11, 21, 44,
- 45, 46, 44, 37, 31, 60, 61, 62, 60, 37,
- 59, 58, 53, 53, 55, 35, 35, 35, 35, 35,
- 36, 38, 33, 37, 45, 35, 37, 62, 35, 35,
- 37, 34, 34, 11, 14, 46, 47, 48, 49, 62,
- 4, 11, 18, 20, 24, 33, 52, 11, 35, 35,
- 61, 33, 35, 37, 48, 33, 33, 52, 3, 17,
- 28, 29, 31, 38, 35, 49, 7, 51, 52, 34,
- 52, 52, 52, 52, 52, 52, 34, 33, 11, 25,
- 50, 34, 34, 61, 33, 34, 34, 11, 34
-};
-
-#define yyerrok (yyerrstatus = 0)
-#define yyclearin (yychar = YYEMPTY)
-#define YYEMPTY (-2)
-#define YYEOF 0
-
-#define YYACCEPT goto yyacceptlab
-#define YYABORT goto yyabortlab
-#define YYERROR goto yyerrorlab
-
-
-/* Like YYERROR except do call yyerror. This remains here temporarily
- to ease the transition to the new meaning of YYERROR, for GCC.
- Once GCC version 2 has supplanted version 1, this can go. */
-
-#define YYFAIL goto yyerrlab
-
-#define YYRECOVERING() (!!yyerrstatus)
-
-#define YYBACKUP(Token, Value) \
-do \
- if (yychar == YYEMPTY && yylen == 1) \
- { \
- yychar = (Token); \
- yylval = (Value); \
- yytoken = YYTRANSLATE (yychar); \
- YYPOPSTACK (1); \
- goto yybackup; \
- } \
- else \
- { \
- yyerror (YY_("syntax error: cannot back up")); \
- YYERROR; \
- } \
-while (YYID (0))
-
-
-#define YYTERROR 1
-#define YYERRCODE 256
-
-
-/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
- If N is 0, then set CURRENT to the empty location which ends
- the previous symbol: RHS[0] (always defined). */
-
-#define YYRHSLOC(Rhs, K) ((Rhs)[K])
-#ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N) \
- do \
- if (YYID (N)) \
- { \
- (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
- (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
- (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
- (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
- } \
- else \
- { \
- (Current).first_line = (Current).last_line = \
- YYRHSLOC (Rhs, 0).last_line; \
- (Current).first_column = (Current).last_column = \
- YYRHSLOC (Rhs, 0).last_column; \
- } \
- while (YYID (0))
-#endif
-
-
-/* YY_LOCATION_PRINT -- Print the location on the stream.
- This macro was not mandated originally: define only if we know
- we won't break user code: when these are the locations we know. */
-
-#ifndef YY_LOCATION_PRINT
-# if YYLTYPE_IS_TRIVIAL
-# define YY_LOCATION_PRINT(File, Loc) \
- fprintf (File, "%d.%d-%d.%d", \
- (Loc).first_line, (Loc).first_column, \
- (Loc).last_line, (Loc).last_column)
-# else
-# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-# endif
-#endif
-
-
-/* YYLEX -- calling `yylex' with the right arguments. */
-
-#ifdef YYLEX_PARAM
-# define YYLEX yylex (YYLEX_PARAM)
-#else
-# define YYLEX yylex ()
-#endif
-
-/* Enable debugging if requested. */
-#if YYDEBUG
-
-# ifndef YYFPRINTF
-# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
-# define YYFPRINTF fprintf
-# endif
-
-# define YYDPRINTF(Args) \
-do { \
- if (yydebug) \
- YYFPRINTF Args; \
-} while (YYID (0))
-
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
-do { \
- if (yydebug) \
- { \
- YYFPRINTF (stderr, "%s ", Title); \
- yy_symbol_print (stderr, \
- Type, Value); \
- YYFPRINTF (stderr, "\n"); \
- } \
-} while (YYID (0))
-
-
-/*--------------------------------.
-| Print this symbol on YYOUTPUT. |
-`--------------------------------*/
-
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static void
-yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-#else
-static void
-yy_symbol_value_print (yyoutput, yytype, yyvaluep)
- FILE *yyoutput;
- int yytype;
- YYSTYPE const * const yyvaluep;
-#endif
-{
- if (!yyvaluep)
- return;
-# ifdef YYPRINT
- if (yytype < YYNTOKENS)
- YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# else
- YYUSE (yyoutput);
-# endif
- switch (yytype)
- {
- default:
- break;
- }
-}
-
-
-/*--------------------------------.
-| Print this symbol on YYOUTPUT. |
-`--------------------------------*/
-
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static void
-yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-#else
-static void
-yy_symbol_print (yyoutput, yytype, yyvaluep)
- FILE *yyoutput;
- int yytype;
- YYSTYPE const * const yyvaluep;
-#endif
-{
- if (yytype < YYNTOKENS)
- YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
- else
- YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
-
- yy_symbol_value_print (yyoutput, yytype, yyvaluep);
- YYFPRINTF (yyoutput, ")");
-}
-
-/*------------------------------------------------------------------.
-| yy_stack_print -- Print the state stack from its BOTTOM up to its |
-| TOP (included). |
-`------------------------------------------------------------------*/
-
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static void
-yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
-#else
-static void
-yy_stack_print (bottom, top)
- yytype_int16 *bottom;
- yytype_int16 *top;
-#endif
-{
- YYFPRINTF (stderr, "Stack now");
- for (; bottom <= top; ++bottom)
- YYFPRINTF (stderr, " %d", *bottom);
- YYFPRINTF (stderr, "\n");
-}
-
-# define YY_STACK_PRINT(Bottom, Top) \
-do { \
- if (yydebug) \
- yy_stack_print ((Bottom), (Top)); \
-} while (YYID (0))
-
-
-/*------------------------------------------------.
-| Report that the YYRULE is going to be reduced. |
-`------------------------------------------------*/
-
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static void
-yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
-#else
-static void
-yy_reduce_print (yyvsp, yyrule)
- YYSTYPE *yyvsp;
- int yyrule;
-#endif
-{
- int yynrhs = yyr2[yyrule];
- int yyi;
- unsigned long int yylno = yyrline[yyrule];
- YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
- yyrule - 1, yylno);
- /* The symbols being reduced. */
- for (yyi = 0; yyi < yynrhs; yyi++)
- {
- fprintf (stderr, " $%d = ", yyi + 1);
- yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
- &(yyvsp[(yyi + 1) - (yynrhs)])
- );
- fprintf (stderr, "\n");
- }
-}
-
-# define YY_REDUCE_PRINT(Rule) \
-do { \
- if (yydebug) \
- yy_reduce_print (yyvsp, Rule); \
-} while (YYID (0))
-
-/* Nonzero means print parse trace. It is left uninitialized so that
- multiple parsers can coexist. */
-int yydebug;
-#else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
-# define YY_STACK_PRINT(Bottom, Top)
-# define YY_REDUCE_PRINT(Rule)
-#endif /* !YYDEBUG */
-
-
-/* YYINITDEPTH -- initial size of the parser's stacks. */
-#ifndef YYINITDEPTH
-# define YYINITDEPTH 200
-#endif
-
-/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
- if the built-in stack extension method is used).
-
- Do not make this value too large; the results are undefined if
- YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
- evaluated with infinite-precision integer arithmetic. */
-
-#ifndef YYMAXDEPTH
-# define YYMAXDEPTH 10000
-#endif
-
-
-
-#if YYERROR_VERBOSE
-
-# ifndef yystrlen
-# if defined __GLIBC__ && defined _STRING_H
-# define yystrlen strlen
-# else
-/* Return the length of YYSTR. */
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static YYSIZE_T
-yystrlen (const char *yystr)
-#else
-static YYSIZE_T
-yystrlen (yystr)
- const char *yystr;
-#endif
-{
- YYSIZE_T yylen;
- for (yylen = 0; yystr[yylen]; yylen++)
- continue;
- return yylen;
-}
-# endif
-# endif
-
-# ifndef yystpcpy
-# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
-# define yystpcpy stpcpy
-# else
-/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
- YYDEST. */
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static char *
-yystpcpy (char *yydest, const char *yysrc)
-#else
-static char *
-yystpcpy (yydest, yysrc)
- char *yydest;
- const char *yysrc;
-#endif
-{
- char *yyd = yydest;
- const char *yys = yysrc;
-
- while ((*yyd++ = *yys++) != '\0')
- continue;
-
- return yyd - 1;
-}
-# endif
-# endif
-
-# ifndef yytnamerr
-/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
- quotes and backslashes, so that it's suitable for yyerror. The
- heuristic is that double-quoting is unnecessary unless the string
- contains an apostrophe, a comma, or backslash (other than
- backslash-backslash). YYSTR is taken from yytname. If YYRES is
- null, do not copy; instead, return the length of what the result
- would have been. */
-static YYSIZE_T
-yytnamerr (char *yyres, const char *yystr)
-{
- if (*yystr == '"')
- {
- YYSIZE_T yyn = 0;
- char const *yyp = yystr;
-
- for (;;)
- switch (*++yyp)
- {
- case '\'':
- case ',':
- goto do_not_strip_quotes;
-
- case '\\':
- if (*++yyp != '\\')
- goto do_not_strip_quotes;
- /* Fall through. */
- default:
- if (yyres)
- yyres[yyn] = *yyp;
- yyn++;
- break;
-
- case '"':
- if (yyres)
- yyres[yyn] = '\0';
- return yyn;
- }
- do_not_strip_quotes: ;
- }
-
- if (! yyres)
- return yystrlen (yystr);
-
- return yystpcpy (yyres, yystr) - yyres;
-}
-# endif
-
-/* Copy into YYRESULT an error message about the unexpected token
- YYCHAR while in state YYSTATE. Return the number of bytes copied,
- including the terminating null byte. If YYRESULT is null, do not
- copy anything; just return the number of bytes that would be
- copied. As a special case, return 0 if an ordinary "syntax error"
- message will do. Return YYSIZE_MAXIMUM if overflow occurs during
- size calculation. */
-static YYSIZE_T
-yysyntax_error (char *yyresult, int yystate, int yychar)
-{
- int yyn = yypact[yystate];
-
- if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
- return 0;
- else
- {
- int yytype = YYTRANSLATE (yychar);
- YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
- YYSIZE_T yysize = yysize0;
- YYSIZE_T yysize1;
- int yysize_overflow = 0;
- enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
- char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
- int yyx;
-
-# if 0
- /* This is so xgettext sees the translatable formats that are
- constructed on the fly. */
- YY_("syntax error, unexpected %s");
- YY_("syntax error, unexpected %s, expecting %s");
- YY_("syntax error, unexpected %s, expecting %s or %s");
- YY_("syntax error, unexpected %s, expecting %s or %s or %s");
- YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
-# endif
- char *yyfmt;
- char const *yyf;
- static char const yyunexpected[] = "syntax error, unexpected %s";
- static char const yyexpecting[] = ", expecting %s";
- static char const yyor[] = " or %s";
- char yyformat[sizeof yyunexpected
- + sizeof yyexpecting - 1
- + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
- * (sizeof yyor - 1))];
- char const *yyprefix = yyexpecting;
-
- /* Start YYX at -YYN if negative to avoid negative indexes in
- YYCHECK. */
- int yyxbegin = yyn < 0 ? -yyn : 0;
-
- /* Stay within bounds of both yycheck and yytname. */
- int yychecklim = YYLAST - yyn + 1;
- int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
- int yycount = 1;
-
- yyarg[0] = yytname[yytype];
- yyfmt = yystpcpy (yyformat, yyunexpected);
-
- for (yyx = yyxbegin; yyx < yyxend; ++yyx)
- if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
- {
- if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
- {
- yycount = 1;
- yysize = yysize0;
- yyformat[sizeof yyunexpected - 1] = '\0';
- break;
- }
- yyarg[yycount++] = yytname[yyx];
- yysize1 = yysize + yytnamerr (0, yytname[yyx]);
- yysize_overflow |= (yysize1 < yysize);
- yysize = yysize1;
- yyfmt = yystpcpy (yyfmt, yyprefix);
- yyprefix = yyor;
- }
-
- yyf = YY_(yyformat);
- yysize1 = yysize + yystrlen (yyf);
- yysize_overflow |= (yysize1 < yysize);
- yysize = yysize1;
-
- if (yysize_overflow)
- return YYSIZE_MAXIMUM;
-
- if (yyresult)
- {
- /* Avoid sprintf, as that infringes on the user's name space.
- Don't have undefined behavior even if the translation
- produced a string with the wrong number of "%s"s. */
- char *yyp = yyresult;
- int yyi = 0;
- while ((*yyp = *yyf) != '\0')
- {
- if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
- {
- yyp += yytnamerr (yyp, yyarg[yyi++]);
- yyf += 2;
- }
- else
- {
- yyp++;
- yyf++;
- }
- }
- }
- return yysize;
- }
-}
-#endif /* YYERROR_VERBOSE */
-
-
-/*-----------------------------------------------.
-| Release the memory associated to this symbol. |
-`-----------------------------------------------*/
-
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static void
-yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
-#else
-static void
-yydestruct (yymsg, yytype, yyvaluep)
- const char *yymsg;
- int yytype;
- YYSTYPE *yyvaluep;
-#endif
-{
- YYUSE (yyvaluep);
-
- if (!yymsg)
- yymsg = "Deleting";
- YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
-
- switch (yytype)
- {
-
- default:
- break;
- }
-}
-
-
-/* Prevent warnings from -Wmissing-prototypes. */
-
-#ifdef YYPARSE_PARAM
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void *YYPARSE_PARAM);
-#else
-int yyparse ();
-#endif
-#else /* ! YYPARSE_PARAM */
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void);
-#else
-int yyparse ();
-#endif
-#endif /* ! YYPARSE_PARAM */
-
-
-
-/* The look-ahead symbol. */
-int yychar;
-
-/* The semantic value of the look-ahead symbol. */
-YYSTYPE yylval;
-
-/* Number of syntax errors so far. */
-int yynerrs;
-
-
-
-/*----------.
-| yyparse. |
-`----------*/
-
-#ifdef YYPARSE_PARAM
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-int
-yyparse (void *YYPARSE_PARAM)
-#else
-int
-yyparse (YYPARSE_PARAM)
- void *YYPARSE_PARAM;
-#endif
-#else /* ! YYPARSE_PARAM */
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-int
-yyparse (void)
-#else
-int
-yyparse ()
-
-#endif
-#endif
-{
-
- int yystate;
- int yyn;
- int yyresult;
- /* Number of tokens to shift before error messages enabled. */
- int yyerrstatus;
- /* Look-ahead token as an internal (translated) token number. */
- int yytoken = 0;
-#if YYERROR_VERBOSE
- /* Buffer for error messages, and its allocated size. */
- char yymsgbuf[128];
- char *yymsg = yymsgbuf;
- YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
-#endif
-
- /* Three stacks and their tools:
- `yyss': related to states,
- `yyvs': related to semantic values,
- `yyls': related to locations.
-
- Refer to the stacks thru separate pointers, to allow yyoverflow
- to reallocate them elsewhere. */
-
- /* The state stack. */
- yytype_int16 yyssa[YYINITDEPTH];
- yytype_int16 *yyss = yyssa;
- yytype_int16 *yyssp;
-
- /* The semantic value stack. */
- YYSTYPE yyvsa[YYINITDEPTH];
- YYSTYPE *yyvs = yyvsa;
- YYSTYPE *yyvsp;
-
-
-
-#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
-
- YYSIZE_T yystacksize = YYINITDEPTH;
-
- /* The variables used to return semantic value and location from the
- action routines. */
- YYSTYPE yyval;
-
-
- /* The number of symbols on the RHS of the reduced rule.
- Keep to zero when no symbol should be popped. */
- int yylen = 0;
-
- YYDPRINTF ((stderr, "Starting parse\n"));
-
- yystate = 0;
- yyerrstatus = 0;
- yynerrs = 0;
- yychar = YYEMPTY; /* Cause a token to be read. */
-
- /* Initialize stack pointers.
- Waste one element of value and location stack
- so that they stay on the same level as the state stack.
- The wasted elements are never initialized. */
-
- yyssp = yyss;
- yyvsp = yyvs;
-
- goto yysetstate;
-
-/*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate. |
-`------------------------------------------------------------*/
- yynewstate:
- /* In all cases, when you get here, the value and location stacks
- have just been pushed. So pushing a state here evens the stacks. */
- yyssp++;
-
- yysetstate:
- *yyssp = yystate;
-
- if (yyss + yystacksize - 1 <= yyssp)
- {
- /* Get the current used size of the three stacks, in elements. */
- YYSIZE_T yysize = yyssp - yyss + 1;
-
-#ifdef yyoverflow
- {
- /* Give user a chance to reallocate the stack. Use copies of
- these so that the &'s don't force the real ones into
- memory. */
- YYSTYPE *yyvs1 = yyvs;
- yytype_int16 *yyss1 = yyss;
-
-
- /* Each stack pointer address is followed by the size of the
- data in use in that stack, in bytes. This used to be a
- conditional around just the two extra args, but that might
- be undefined if yyoverflow is a macro. */
- yyoverflow (YY_("memory exhausted"),
- &yyss1, yysize * sizeof (*yyssp),
- &yyvs1, yysize * sizeof (*yyvsp),
-
- &yystacksize);
-
- yyss = yyss1;
- yyvs = yyvs1;
- }
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
- goto yyexhaustedlab;
-# else
- /* Extend the stack our own way. */
- if (YYMAXDEPTH <= yystacksize)
- goto yyexhaustedlab;
- yystacksize *= 2;
- if (YYMAXDEPTH < yystacksize)
- yystacksize = YYMAXDEPTH;
-
- {
- yytype_int16 *yyss1 = yyss;
- union yyalloc *yyptr =
- (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
- if (! yyptr)
- goto yyexhaustedlab;
- YYSTACK_RELOCATE (yyss);
- YYSTACK_RELOCATE (yyvs);
-
-# undef YYSTACK_RELOCATE
- if (yyss1 != yyssa)
- YYSTACK_FREE (yyss1);
- }
-# endif
-#endif /* no yyoverflow */
-
- yyssp = yyss + yysize - 1;
- yyvsp = yyvs + yysize - 1;
-
-
- YYDPRINTF ((stderr, "Stack size increased to %lu\n",
- (unsigned long int) yystacksize));
-
- if (yyss + yystacksize - 1 <= yyssp)
- YYABORT;
- }
-
- YYDPRINTF ((stderr, "Entering state %d\n", yystate));
-
- goto yybackup;
-
-/*-----------.
-| yybackup. |
-`-----------*/
-yybackup:
-
- /* Do appropriate processing given the current state. Read a
- look-ahead token if we need one and don't already have one. */
-
- /* First try to decide what to do without reference to look-ahead token. */
- yyn = yypact[yystate];
- if (yyn == YYPACT_NINF)
- goto yydefault;
-
- /* Not known => get a look-ahead token if don't already have one. */
-
- /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
- if (yychar == YYEMPTY)
- {
- YYDPRINTF ((stderr, "Reading a token: "));
- yychar = YYLEX;
- }
-
- if (yychar <= YYEOF)
- {
- yychar = yytoken = YYEOF;
- YYDPRINTF ((stderr, "Now at end of input.\n"));
- }
- else
- {
- yytoken = YYTRANSLATE (yychar);
- YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
- }
-
- /* If the proper action on seeing token YYTOKEN is to reduce or to
- detect an error, take that action. */
- yyn += yytoken;
- if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
- goto yydefault;
- yyn = yytable[yyn];
- if (yyn <= 0)
- {
- if (yyn == 0 || yyn == YYTABLE_NINF)
- goto yyerrlab;
- yyn = -yyn;
- goto yyreduce;
- }
-
- if (yyn == YYFINAL)
- YYACCEPT;
-
- /* Count tokens shifted since error; after three, turn off error
- status. */
- if (yyerrstatus)
- yyerrstatus--;
-
- /* Shift the look-ahead token. */
- YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
-
- /* Discard the shifted token unless it is eof. */
- if (yychar != YYEOF)
- yychar = YYEMPTY;
-
- yystate = yyn;
- *++yyvsp = yylval;
-
- goto yynewstate;
-
-
-/*-----------------------------------------------------------.
-| yydefault -- do the default action for the current state. |
-`-----------------------------------------------------------*/
-yydefault:
- yyn = yydefact[yystate];
- if (yyn == 0)
- goto yyerrlab;
- goto yyreduce;
-
-
-/*-----------------------------.
-| yyreduce -- Do a reduction. |
-`-----------------------------*/
-yyreduce:
- /* yyn is the number of a rule to reduce with. */
- yylen = yyr2[yyn];
-
- /* If YYLEN is nonzero, implement the default value of the action:
- `$$ = $1'.
-
- Otherwise, the following line sets YYVAL to garbage.
- This behavior is undocumented and Bison
- users should not rely upon it. Assigning to YYVAL
- unconditionally makes the parser a bit smaller, and it avoids a
- GCC warning that YYVAL may be used uninitialized. */
- yyval = yyvsp[1-yylen];
-
-
- YY_REDUCE_PRINT (yyn);
- switch (yyn)
- {
- case 3:
-#line 145 "ldscript.y"
- { add_versions ((yyvsp[(2) - (2)].version)); }
- break;
-
- case 6:
-#line 153 "ldscript.y"
- {
- if (likely (ld_state.entry == NULL))
- ld_state.entry = (yyvsp[(3) - (5)].str);
- }
- break;
-
- case 7:
-#line 158 "ldscript.y"
- {
- ld_new_searchdir ((yyvsp[(3) - (5)].str));
- }
- break;
-
- case 8:
-#line 162 "ldscript.y"
- {
- if (likely (ld_state.pagesize == 0))
- ld_state.pagesize = (yyvsp[(3) - (5)].num);
- }
- break;
-
- case 9:
-#line 167 "ldscript.y"
- {
- if (likely (ld_state.interp == NULL)
- && ld_state.file_type != dso_file_type)
- ld_state.interp = (yyvsp[(3) - (5)].str);
- }
- break;
-
- case 10:
-#line 173 "ldscript.y"
- {
- new_segment ((yyvsp[(2) - (5)].num), (yyvsp[(4) - (5)].output_rule));
- }
- break;
-
- case 11:
-#line 177 "ldscript.y"
- {
- fputs_unlocked (gettext ("mode for segment invalid\n"),
- stderr);
- new_segment (0, (yyvsp[(4) - (5)].output_rule));
- }
- break;
-
- case 12:
-#line 183 "ldscript.y"
- {
- /* First little optimization. If there is only one
- file in the group don't do anything. */
- if ((yyvsp[(3) - (4)].filename_list) != (yyvsp[(3) - (4)].filename_list)->next)
- {
- (yyvsp[(3) - (4)].filename_list)->next->group_start = 1;
- (yyvsp[(3) - (4)].filename_list)->group_end = 1;
- }
- add_inputfiles ((yyvsp[(3) - (4)].filename_list));
- }
- break;
-
- case 13:
-#line 194 "ldscript.y"
- { add_inputfiles ((yyvsp[(3) - (4)].filename_list)); }
- break;
-
- case 14:
-#line 196 "ldscript.y"
- { add_inputfiles (mark_as_needed ((yyvsp[(3) - (4)].filename_list))); }
- break;
-
- case 15:
-#line 198 "ldscript.y"
- { add_versions ((yyvsp[(3) - (4)].version)); }
- break;
-
- case 16:
-#line 200 "ldscript.y"
- { /* XXX TODO */ }
- break;
-
- case 17:
-#line 204 "ldscript.y"
- {
- (yyvsp[(2) - (2)].output_rule)->next = (yyvsp[(1) - (2)].output_rule)->next;
- (yyval.output_rule) = (yyvsp[(1) - (2)].output_rule)->next = (yyvsp[(2) - (2)].output_rule);
- }
- break;
-
- case 18:
-#line 209 "ldscript.y"
- { (yyval.output_rule) = (yyvsp[(1) - (1)].output_rule); }
- break;
-
- case 19:
-#line 213 "ldscript.y"
- {
- (yyval.output_rule) = new_output_rule (output_assignment);
- (yyval.output_rule)->val.assignment = (yyvsp[(1) - (2)].assignment);
- }
- break;
-
- case 20:
-#line 218 "ldscript.y"
- {
- (yyval.output_rule) = new_output_rule (output_section);
- (yyval.output_rule)->val.section.name = (yyvsp[(1) - (4)].str);
- (yyval.output_rule)->val.section.input = (yyvsp[(3) - (4)].input_rule)->next;
- if (ld_state.strip == strip_debug
- && ebl_debugscn_p (ld_state.ebl, (yyvsp[(1) - (4)].str)))
- (yyval.output_rule)->val.section.ignored = true;
- else
- (yyval.output_rule)->val.section.ignored = false;
- (yyvsp[(3) - (4)].input_rule)->next = NULL;
- }
- break;
-
- case 21:
-#line 230 "ldscript.y"
- {
- /* This is a short cut for "ID { *(ID) }". */
- (yyval.output_rule) = new_output_rule (output_section);
- (yyval.output_rule)->val.section.name = (yyvsp[(1) - (2)].str);
- (yyval.output_rule)->val.section.input = new_input_rule (input_section);
- (yyval.output_rule)->val.section.input->next = NULL;
- (yyval.output_rule)->val.section.input->val.section =
- (struct filemask_section_name *)
- obstack_alloc (&ld_state.smem,
- sizeof (struct filemask_section_name));
- (yyval.output_rule)->val.section.input->val.section->filemask = NULL;
- (yyval.output_rule)->val.section.input->val.section->excludemask = NULL;
- (yyval.output_rule)->val.section.input->val.section->section_name =
- new_input_section_name ((yyvsp[(1) - (2)].str), false);
- (yyval.output_rule)->val.section.input->val.section->keep_flag = false;
- if (ld_state.strip == strip_debug
- && ebl_debugscn_p (ld_state.ebl, (yyvsp[(1) - (2)].str)))
- (yyval.output_rule)->val.section.ignored = true;
- else
- (yyval.output_rule)->val.section.ignored = false;
- }
- break;
-
- case 22:
-#line 254 "ldscript.y"
- { (yyval.assignment) = new_assignment ((yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].expr), false); }
- break;
-
- case 23:
-#line 256 "ldscript.y"
- { (yyval.assignment) = new_assignment ((yyvsp[(3) - (6)].str), (yyvsp[(5) - (6)].expr), true); }
- break;
-
- case 24:
-#line 260 "ldscript.y"
- {
- (yyvsp[(2) - (2)].input_rule)->next = (yyvsp[(1) - (2)].input_rule)->next;
- (yyval.input_rule) = (yyvsp[(1) - (2)].input_rule)->next = (yyvsp[(2) - (2)].input_rule);
- }
- break;
-
- case 25:
-#line 265 "ldscript.y"
- { (yyval.input_rule) = (yyvsp[(1) - (1)].input_rule); }
- break;
-
- case 26:
-#line 269 "ldscript.y"
- {
- (yyval.input_rule) = new_input_rule (input_section);
- (yyval.input_rule)->val.section = (yyvsp[(1) - (1)].filemask_section_name);
- }
- break;
-
- case 27:
-#line 274 "ldscript.y"
- {
- (yyvsp[(3) - (4)].filemask_section_name)->keep_flag = true;
-
- (yyval.input_rule) = new_input_rule (input_section);
- (yyval.input_rule)->val.section = (yyvsp[(3) - (4)].filemask_section_name);
- }
- break;
-
- case 28:
-#line 281 "ldscript.y"
- {
- (yyval.input_rule) = new_input_rule (input_assignment);
- (yyval.input_rule)->val.assignment = (yyvsp[(1) - (2)].assignment);
- }
- break;
-
- case 29:
-#line 288 "ldscript.y"
- {
- (yyval.filemask_section_name) = (struct filemask_section_name *)
- obstack_alloc (&ld_state.smem, sizeof (*(yyval.filemask_section_name)));
- (yyval.filemask_section_name)->filemask = (yyvsp[(1) - (5)].str);
- (yyval.filemask_section_name)->excludemask = (yyvsp[(3) - (5)].str);
- (yyval.filemask_section_name)->section_name = (yyvsp[(4) - (5)].sectionname);
- (yyval.filemask_section_name)->keep_flag = false;
- }
- break;
-
- case 30:
-#line 299 "ldscript.y"
- { (yyval.sectionname) = new_input_section_name ((yyvsp[(1) - (1)].str), false); }
- break;
-
- case 31:
-#line 301 "ldscript.y"
- { (yyval.sectionname) = new_input_section_name ((yyvsp[(3) - (4)].str), true); }
- break;
-
- case 32:
-#line 305 "ldscript.y"
- { (yyval.str) = (yyvsp[(3) - (4)].str); }
- break;
-
- case 33:
-#line 307 "ldscript.y"
- { (yyval.str) = NULL; }
- break;
-
- case 34:
-#line 311 "ldscript.y"
- {
- (yyval.expr) = new_expr (exp_align);
- (yyval.expr)->val.child = (yyvsp[(3) - (4)].expr);
- }
- break;
-
- case 35:
-#line 316 "ldscript.y"
- { (yyval.expr) = (yyvsp[(2) - (3)].expr); }
- break;
-
- case 36:
-#line 318 "ldscript.y"
- {
- (yyval.expr) = new_expr (exp_mult);
- (yyval.expr)->val.binary.left = (yyvsp[(1) - (3)].expr);
- (yyval.expr)->val.binary.right = (yyvsp[(3) - (3)].expr);
- }
- break;
-
- case 37:
-#line 324 "ldscript.y"
- {
- (yyval.expr) = new_expr ((yyvsp[(2) - (3)].op));
- (yyval.expr)->val.binary.left = (yyvsp[(1) - (3)].expr);
- (yyval.expr)->val.binary.right = (yyvsp[(3) - (3)].expr);
- }
- break;
-
- case 38:
-#line 330 "ldscript.y"
- {
- (yyval.expr) = new_expr ((yyvsp[(2) - (3)].op));
- (yyval.expr)->val.binary.left = (yyvsp[(1) - (3)].expr);
- (yyval.expr)->val.binary.right = (yyvsp[(3) - (3)].expr);
- }
- break;
-
- case 39:
-#line 336 "ldscript.y"
- {
- (yyval.expr) = new_expr (exp_and);
- (yyval.expr)->val.binary.left = (yyvsp[(1) - (3)].expr);
- (yyval.expr)->val.binary.right = (yyvsp[(3) - (3)].expr);
- }
- break;
-
- case 40:
-#line 342 "ldscript.y"
- {
- (yyval.expr) = new_expr (exp_or);
- (yyval.expr)->val.binary.left = (yyvsp[(1) - (3)].expr);
- (yyval.expr)->val.binary.right = (yyvsp[(3) - (3)].expr);
- }
- break;
-
- case 41:
-#line 348 "ldscript.y"
- {
- (yyval.expr) = new_expr (exp_num);
- (yyval.expr)->val.num = (yyvsp[(1) - (1)].num);
- }
- break;
-
- case 42:
-#line 353 "ldscript.y"
- {
- (yyval.expr) = new_expr (exp_id);
- (yyval.expr)->val.str = (yyvsp[(1) - (1)].str);
- }
- break;
-
- case 43:
-#line 358 "ldscript.y"
- { (yyval.expr) = new_expr (exp_sizeof_headers); }
- break;
-
- case 44:
-#line 360 "ldscript.y"
- { (yyval.expr) = new_expr (exp_pagesize); }
- break;
-
- case 45:
-#line 364 "ldscript.y"
- {
- (yyvsp[(3) - (3)].filename_list)->next = (yyvsp[(1) - (3)].filename_list)->next;
- (yyval.filename_list) = (yyvsp[(1) - (3)].filename_list)->next = (yyvsp[(3) - (3)].filename_list);
- }
- break;
-
- case 46:
-#line 369 "ldscript.y"
- { (yyval.filename_list) = (yyvsp[(1) - (1)].filename_list); }
- break;
-
- case 49:
-#line 377 "ldscript.y"
- {
- /* First little optimization. If there is only one
- file in the group don't do anything. */
- if ((yyvsp[(3) - (4)].filename_list) != (yyvsp[(3) - (4)].filename_list)->next)
- {
- (yyvsp[(3) - (4)].filename_list)->next->group_start = 1;
- (yyvsp[(3) - (4)].filename_list)->group_end = 1;
- }
- (yyval.filename_list) = (yyvsp[(3) - (4)].filename_list);
- }
- break;
-
- case 50:
-#line 388 "ldscript.y"
- { (yyval.filename_list) = mark_as_needed ((yyvsp[(3) - (4)].filename_list)); }
- break;
-
- case 51:
-#line 390 "ldscript.y"
- { (yyval.filename_list) = new_filename_listelem ((yyvsp[(1) - (1)].str)); }
- break;
-
- case 52:
-#line 395 "ldscript.y"
- {
- (yyvsp[(2) - (2)].version)->next = (yyvsp[(1) - (2)].version)->next;
- (yyval.version) = (yyvsp[(1) - (2)].version)->next = (yyvsp[(2) - (2)].version);
- }
- break;
-
- case 53:
-#line 400 "ldscript.y"
- { (yyval.version) = (yyvsp[(1) - (1)].version); }
- break;
-
- case 54:
-#line 404 "ldscript.y"
- {
- (yyvsp[(2) - (4)].version)->versionname = "";
- (yyvsp[(2) - (4)].version)->parentname = NULL;
- (yyval.version) = (yyvsp[(2) - (4)].version);
- }
- break;
-
- case 55:
-#line 410 "ldscript.y"
- {
- (yyvsp[(3) - (5)].version)->versionname = (yyvsp[(1) - (5)].str);
- (yyvsp[(3) - (5)].version)->parentname = NULL;
- (yyval.version) = (yyvsp[(3) - (5)].version);
- }
- break;
-
- case 56:
-#line 416 "ldscript.y"
- {
- (yyvsp[(3) - (6)].version)->versionname = (yyvsp[(1) - (6)].str);
- (yyvsp[(3) - (6)].version)->parentname = (yyvsp[(5) - (6)].str);
- (yyval.version) = (yyvsp[(3) - (6)].version);
- }
- break;
-
- case 57:
-#line 425 "ldscript.y"
- { (yyval.version) = merge_versions ((yyvsp[(1) - (2)].version), (yyvsp[(2) - (2)].version)); }
- break;
-
- case 58:
-#line 427 "ldscript.y"
- { (yyval.version) = (yyvsp[(1) - (1)].version); }
- break;
-
- case 59:
-#line 431 "ldscript.y"
- { (yyval.version) = new_version (NULL, (yyvsp[(2) - (2)].id_list)); }
- break;
-
- case 60:
-#line 433 "ldscript.y"
- { (yyval.version) = new_version ((yyvsp[(2) - (2)].id_list), NULL); }
- break;
-
- case 61:
-#line 438 "ldscript.y"
- {
- struct id_list *newp = new_id_listelem ((yyvsp[(2) - (3)].str));
- newp->next = (yyvsp[(1) - (3)].id_list)->next;
- (yyval.id_list) = (yyvsp[(1) - (3)].id_list)->next = newp;
- }
- break;
-
- case 62:
-#line 444 "ldscript.y"
- { (yyval.id_list) = new_id_listelem ((yyvsp[(1) - (2)].str)); }
- break;
-
- case 63:
-#line 448 "ldscript.y"
- { (yyval.str) = (yyvsp[(1) - (1)].str); }
- break;
-
- case 64:
-#line 450 "ldscript.y"
- { (yyval.str) = (yyvsp[(1) - (1)].str); }
- break;
-
- case 65:
-#line 454 "ldscript.y"
- { (yyval.str) = (yyvsp[(1) - (1)].str); }
- break;
-
- case 66:
-#line 456 "ldscript.y"
- { (yyval.str) = NULL; }
- break;
-
-
-/* Line 1267 of yacc.c. */
-#line 2040 "ldscript.c"
- default: break;
- }
- YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
-
- YYPOPSTACK (yylen);
- yylen = 0;
- YY_STACK_PRINT (yyss, yyssp);
-
- *++yyvsp = yyval;
-
-
- /* Now `shift' the result of the reduction. Determine what state
- that goes to, based on the state we popped back to and the rule
- number reduced by. */
-
- yyn = yyr1[yyn];
-
- yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
- if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
- yystate = yytable[yystate];
- else
- yystate = yydefgoto[yyn - YYNTOKENS];
-
- goto yynewstate;
-
-
-/*------------------------------------.
-| yyerrlab -- here on detecting error |
-`------------------------------------*/
-yyerrlab:
- /* If not already recovering from an error, report this error. */
- if (!yyerrstatus)
- {
- ++yynerrs;
-#if ! YYERROR_VERBOSE
- yyerror (YY_("syntax error"));
-#else
- {
- YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
- if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
- {
- YYSIZE_T yyalloc = 2 * yysize;
- if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
- yyalloc = YYSTACK_ALLOC_MAXIMUM;
- if (yymsg != yymsgbuf)
- YYSTACK_FREE (yymsg);
- yymsg = (char *) YYSTACK_ALLOC (yyalloc);
- if (yymsg)
- yymsg_alloc = yyalloc;
- else
- {
- yymsg = yymsgbuf;
- yymsg_alloc = sizeof yymsgbuf;
- }
- }
-
- if (0 < yysize && yysize <= yymsg_alloc)
- {
- (void) yysyntax_error (yymsg, yystate, yychar);
- yyerror (yymsg);
- }
- else
- {
- yyerror (YY_("syntax error"));
- if (yysize != 0)
- goto yyexhaustedlab;
- }
- }
-#endif
- }
-
-
-
- if (yyerrstatus == 3)
- {
- /* If just tried and failed to reuse look-ahead token after an
- error, discard it. */
-
- if (yychar <= YYEOF)
- {
- /* Return failure if at end of input. */
- if (yychar == YYEOF)
- YYABORT;
- }
- else
- {
- yydestruct ("Error: discarding",
- yytoken, &yylval);
- yychar = YYEMPTY;
- }
- }
-
- /* Else will try to reuse look-ahead token after shifting the error
- token. */
- goto yyerrlab1;
-
-
-/*---------------------------------------------------.
-| yyerrorlab -- error raised explicitly by YYERROR. |
-`---------------------------------------------------*/
-yyerrorlab:
-
- /* Pacify compilers like GCC when the user code never invokes
- YYERROR and the label yyerrorlab therefore never appears in user
- code. */
- if (/*CONSTCOND*/ 0)
- goto yyerrorlab;
-
- /* Do not reclaim the symbols of the rule which action triggered
- this YYERROR. */
- YYPOPSTACK (yylen);
- yylen = 0;
- YY_STACK_PRINT (yyss, yyssp);
- yystate = *yyssp;
- goto yyerrlab1;
-
-
-/*-------------------------------------------------------------.
-| yyerrlab1 -- common code for both syntax error and YYERROR. |
-`-------------------------------------------------------------*/
-yyerrlab1:
- yyerrstatus = 3; /* Each real token shifted decrements this. */
-
- for (;;)
- {
- yyn = yypact[yystate];
- if (yyn != YYPACT_NINF)
- {
- yyn += YYTERROR;
- if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
- {
- yyn = yytable[yyn];
- if (0 < yyn)
- break;
- }
- }
-
- /* Pop the current state because it cannot handle the error token. */
- if (yyssp == yyss)
- YYABORT;
-
-
- yydestruct ("Error: popping",
- yystos[yystate], yyvsp);
- YYPOPSTACK (1);
- yystate = *yyssp;
- YY_STACK_PRINT (yyss, yyssp);
- }
-
- if (yyn == YYFINAL)
- YYACCEPT;
-
- *++yyvsp = yylval;
-
-
- /* Shift the error token. */
- YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
-
- yystate = yyn;
- goto yynewstate;
-
-
-/*-------------------------------------.
-| yyacceptlab -- YYACCEPT comes here. |
-`-------------------------------------*/
-yyacceptlab:
- yyresult = 0;
- goto yyreturn;
-
-/*-----------------------------------.
-| yyabortlab -- YYABORT comes here. |
-`-----------------------------------*/
-yyabortlab:
- yyresult = 1;
- goto yyreturn;
-
-#ifndef yyoverflow
-/*-------------------------------------------------.
-| yyexhaustedlab -- memory exhaustion comes here. |
-`-------------------------------------------------*/
-yyexhaustedlab:
- yyerror (YY_("memory exhausted"));
- yyresult = 2;
- /* Fall through. */
-#endif
-
-yyreturn:
- if (yychar != YYEOF && yychar != YYEMPTY)
- yydestruct ("Cleanup: discarding lookahead",
- yytoken, &yylval);
- /* Do not reclaim the symbols of the rule which action triggered
- this YYABORT or YYACCEPT. */
- YYPOPSTACK (yylen);
- YY_STACK_PRINT (yyss, yyssp);
- while (yyssp != yyss)
- {
- yydestruct ("Cleanup: popping",
- yystos[*yyssp], yyvsp);
- YYPOPSTACK (1);
- }
-#ifndef yyoverflow
- if (yyss != yyssa)
- YYSTACK_FREE (yyss);
-#endif
-#if YYERROR_VERBOSE
- if (yymsg != yymsgbuf)
- YYSTACK_FREE (yymsg);
-#endif
- /* Make sure YYID is used. */
- return YYID (yyresult);
-}
-
-
-#line 459 "ldscript.y"
-
-
-static void
-yyerror (const char *s)
-{
- error (0, 0, (ld_scan_version_script
- ? gettext ("while reading version script '%s': %s at line %d")
- : gettext ("while reading linker script '%s': %s at line %d")),
- ldin_fname, gettext (s), ldlineno);
-}
-
-
-static struct expression *
-new_expr (int tag)
-{
- struct expression *newp = (struct expression *)
- obstack_alloc (&ld_state.smem, sizeof (*newp));
-
- newp->tag = tag;
- return newp;
-}
-
-
-static struct input_section_name *
-new_input_section_name (const char *name, bool sort_flag)
-{
- struct input_section_name *newp = (struct input_section_name *)
- obstack_alloc (&ld_state.smem, sizeof (*newp));
-
- newp->name = name;
- newp->sort_flag = sort_flag;
- return newp;
-}
-
-
-static struct input_rule *
-new_input_rule (int tag)
-{
- struct input_rule *newp = (struct input_rule *)
- obstack_alloc (&ld_state.smem, sizeof (*newp));
-
- newp->tag = tag;
- newp->next = newp;
- return newp;
-}
-
-
-static struct output_rule *
-new_output_rule (int tag)
-{
- struct output_rule *newp = (struct output_rule *)
- memset (obstack_alloc (&ld_state.smem, sizeof (*newp)),
- '\0', sizeof (*newp));
-
- newp->tag = tag;
- newp->next = newp;
- return newp;
-}
-
-
-static struct assignment *
-new_assignment (const char *variable, struct expression *expression,
- bool provide_flag)
-{
- struct assignment *newp = (struct assignment *)
- obstack_alloc (&ld_state.smem, sizeof (*newp));
-
- newp->variable = variable;
- newp->expression = expression;
- newp->sym = NULL;
- newp->provide_flag = provide_flag;
-
- /* Insert the symbol into a hash table. We will later have to matc*/
- return newp;
-}
-
-
-static void
-new_segment (int mode, struct output_rule *output_rule)
-{
- struct output_segment *newp;
-
- newp
- = (struct output_segment *) obstack_alloc (&ld_state.smem, sizeof (*newp));
- newp->mode = mode;
- newp->next = newp;
-
- newp->output_rules = output_rule->next;
- output_rule->next = NULL;
-
- /* Enqueue the output segment description. */
- if (ld_state.output_segments == NULL)
- ld_state.output_segments = newp;
- else
- {
- newp->next = ld_state.output_segments->next;
- ld_state.output_segments = ld_state.output_segments->next = newp;
- }
-
- /* If the output file should be stripped of all symbol set the flag
- in the structures of all output sections. */
- if (mode == 0 && ld_state.strip == strip_all)
- {
- struct output_rule *runp;
-
- for (runp = newp->output_rules; runp != NULL; runp = runp->next)
- if (runp->tag == output_section)
- runp->val.section.ignored = true;
- }
-}
-
-
-static struct filename_list *
-new_filename_listelem (const char *string)
-{
- struct filename_list *newp;
-
- /* We use calloc and not the obstack since this object can be freed soon. */
- newp = (struct filename_list *) xcalloc (1, sizeof (*newp));
- newp->name = string;
- newp->next = newp;
- return newp;
-}
-
-
-static struct filename_list *
-mark_as_needed (struct filename_list *listp)
-{
- struct filename_list *runp = listp;
- do
- {
- runp->as_needed = true;
- runp = runp->next;
- }
- while (runp != listp);
-
- return listp;
-}
-
-
-static void
-add_inputfiles (struct filename_list *fnames)
-{
- assert (fnames != NULL);
-
- if (ld_state.srcfiles == NULL)
- ld_state.srcfiles = fnames;
- else
- {
- struct filename_list *first = ld_state.srcfiles->next;
-
- ld_state.srcfiles->next = fnames->next;
- fnames->next = first;
- ld_state.srcfiles->next = fnames;
- }
-}
-
-
-static _Bool
-special_char_p (const char *str)
-{
- while (*str != '\0')
- {
- if (__builtin_expect (*str == '*', 0)
- || __builtin_expect (*str == '?', 0)
- || __builtin_expect (*str == '[', 0))
- return true;
-
- ++str;
- }
-
- return false;
-}
-
-
-static struct id_list *
-new_id_listelem (const char *str)
-{
- struct id_list *newp;
-
- newp = (struct id_list *) obstack_alloc (&ld_state.smem, sizeof (*newp));
- if (str == NULL)
- newp->u.id_type = id_all;
- else if (__builtin_expect (special_char_p (str), false))
- newp->u.id_type = id_wild;
- else
- newp->u.id_type = id_str;
- newp->id = str;
- newp->next = newp;
-
- return newp;
-}
-
-
-static struct version *
-new_version (struct id_list *local, struct id_list *global)
-{
- struct version *newp;
-
- newp = (struct version *) obstack_alloc (&ld_state.smem, sizeof (*newp));
- newp->next = newp;
- newp->local_names = local;
- newp->global_names = global;
- newp->versionname = NULL;
- newp->parentname = NULL;
-
- return newp;
-}
-
-
-static struct version *
-merge_versions (struct version *one, struct version *two)
-{
- assert (two->local_names == NULL || two->global_names == NULL);
-
- if (two->local_names != NULL)
- {
- if (one->local_names == NULL)
- one->local_names = two->local_names;
- else
- {
- two->local_names->next = one->local_names->next;
- one->local_names = one->local_names->next = two->local_names;
- }
- }
- else
- {
- if (one->global_names == NULL)
- one->global_names = two->global_names;
- else
- {
- two->global_names->next = one->global_names->next;
- one->global_names = one->global_names->next = two->global_names;
- }
- }
-
- return one;
-}
-
-
-static void
-add_id_list (const char *versionname, struct id_list *runp, _Bool local)
-{
- struct id_list *lastp = runp;
-
- if (runp == NULL)
- /* Nothing to do. */
- return;
-
- /* Convert into a simple single-linked list. */
- runp = runp->next;
- assert (runp != NULL);
- lastp->next = NULL;
-
- do
- if (runp->u.id_type == id_str)
- {
- struct id_list *curp;
- struct id_list *defp;
- unsigned long int hval = elf_hash (runp->id);
-
- curp = runp;
- runp = runp->next;
-
- defp = ld_version_str_tab_find (&ld_state.version_str_tab, hval, curp);
- if (defp != NULL)
- {
- /* There is already a version definition for this symbol. */
- while (strcmp (defp->u.s.versionname, versionname) != 0)
- {
- if (defp->next == NULL)
- {
- /* No version like this so far. */
- defp->next = curp;
- curp->u.s.local = local;
- curp->u.s.versionname = versionname;
- curp->next = NULL;
- defp = NULL;
- break;
- }
-
- defp = defp->next;
- }
-
- if (defp != NULL && defp->u.s.local != local)
- error (EXIT_FAILURE, 0, versionname[0] == '\0'
- ? gettext ("\
-symbol '%s' in declared both local and global for unnamed version")
- : gettext ("\
-symbol '%s' in declared both local and global for version '%s'"),
- runp->id, versionname);
- }
- else
- {
- /* This is the first version definition for this symbol. */
- ld_version_str_tab_insert (&ld_state.version_str_tab, hval, curp);
-
- curp->u.s.local = local;
- curp->u.s.versionname = versionname;
- curp->next = NULL;
- }
- }
- else if (runp->u.id_type == id_all)
- {
- if (local)
- {
- if (ld_state.default_bind_global)
- error (EXIT_FAILURE, 0,
- gettext ("default visibility set as local and global"));
- ld_state.default_bind_local = true;
- }
- else
- {
- if (ld_state.default_bind_local)
- error (EXIT_FAILURE, 0,
- gettext ("default visibility set as local and global"));
- ld_state.default_bind_global = true;
- }
-
- runp = runp->next;
- }
- else
- {
- assert (runp->u.id_type == id_wild);
- /* XXX TBI */
- abort ();
- }
- while (runp != NULL);
-}
-
-
-static void
-add_versions (struct version *versions)
-{
- struct version *lastp = versions;
-
- if (versions == NULL)
- return;
-
- /* Convert into a simple single-linked list. */
- versions = versions->next;
- assert (versions != NULL);
- lastp->next = NULL;
-
- do
- {
- struct version *oldp;
-
- add_id_list (versions->versionname, versions->local_names, true);
- add_id_list (versions->versionname, versions->global_names, false);
-
- oldp = versions;
- versions = versions->next;
- }
- while (versions != NULL);
-}
-
diff --git a/src/ldscript.h b/src/ldscript.h
deleted file mode 100644
index 946ef4c..0000000
--- a/src/ldscript.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/* A Bison parser, made by GNU Bison 2.3. */
-
-/* Skeleton interface for Bison's Yacc-like parsers in C
-
- Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
- Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program 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 General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
-/* As a special exception, you may create a larger work that contains
- part or all of the Bison parser skeleton and distribute that work
- under terms of your choice, so long as that work isn't itself a
- parser generator using the skeleton or a modified version thereof
- as a parser skeleton. Alternatively, if you modify or redistribute
- the parser skeleton itself, you may (at your option) remove this
- special exception, which will cause the skeleton and the resulting
- Bison output files to be licensed under the GNU General Public
- License without this special exception.
-
- This special exception was added by the Free Software Foundation in
- version 2.2 of Bison. */
-
-/* Tokens. */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
- /* Put the tokens into the symbol table, so that GDB and other debuggers
- know about them. */
- enum yytokentype {
- kADD_OP = 258,
- kALIGN = 259,
- kAS_NEEDED = 260,
- kENTRY = 261,
- kEXCLUDE_FILE = 262,
- kFILENAME = 263,
- kGLOBAL = 264,
- kGROUP = 265,
- kID = 266,
- kINPUT = 267,
- kINTERP = 268,
- kKEEP = 269,
- kLOCAL = 270,
- kMODE = 271,
- kMUL_OP = 272,
- kNUM = 273,
- kOUTPUT_FORMAT = 274,
- kPAGESIZE = 275,
- kPROVIDE = 276,
- kSEARCH_DIR = 277,
- kSEGMENT = 278,
- kSIZEOF_HEADERS = 279,
- kSORT = 280,
- kVERSION = 281,
- kVERSION_SCRIPT = 282,
- ADD_OP = 283,
- MUL_OP = 284
- };
-#endif
-/* Tokens. */
-#define kADD_OP 258
-#define kALIGN 259
-#define kAS_NEEDED 260
-#define kENTRY 261
-#define kEXCLUDE_FILE 262
-#define kFILENAME 263
-#define kGLOBAL 264
-#define kGROUP 265
-#define kID 266
-#define kINPUT 267
-#define kINTERP 268
-#define kKEEP 269
-#define kLOCAL 270
-#define kMODE 271
-#define kMUL_OP 272
-#define kNUM 273
-#define kOUTPUT_FORMAT 274
-#define kPAGESIZE 275
-#define kPROVIDE 276
-#define kSEARCH_DIR 277
-#define kSEGMENT 278
-#define kSIZEOF_HEADERS 279
-#define kSORT 280
-#define kVERSION 281
-#define kVERSION_SCRIPT 282
-#define ADD_OP 283
-#define MUL_OP 284
-
-
-
-
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
-#line 71 "ldscript.y"
-{
- uintmax_t num;
- enum expression_tag op;
- char *str;
- struct expression *expr;
- struct input_section_name *sectionname;
- struct filemask_section_name *filemask_section_name;
- struct input_rule *input_rule;
- struct output_rule *output_rule;
- struct assignment *assignment;
- struct filename_list *filename_list;
- struct version *version;
- struct id_list *id_list;
-}
-/* Line 1489 of yacc.c. */
-#line 122 "ldscript.h"
- YYSTYPE;
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
-# define YYSTYPE_IS_TRIVIAL 1
-#endif
-
-extern YYSTYPE ldlval;
-
diff --git a/src/ldscript.y b/src/ldscript.y
deleted file mode 100644
index 252f9d4..0000000
--- a/src/ldscript.y
+++ /dev/null
@@ -1,814 +0,0 @@
-%{
-/* Parser for linker scripts.
- Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <error.h>
-#include <libintl.h>
-#include <stdbool.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <system.h>
-#include <ld.h>
-
-/* The error handler. */
-static void yyerror (const char *s);
-
-/* Some helper functions we need to construct the data structures
- describing information from the file. */
-static struct expression *new_expr (int tag);
-static struct input_section_name *new_input_section_name (const char *name,
- bool sort_flag);
-static struct input_rule *new_input_rule (int tag);
-static struct output_rule *new_output_rule (int tag);
-static struct assignment *new_assignment (const char *variable,
- struct expression *expression,
- bool provide_flag);
-static void new_segment (int mode, struct output_rule *output_rule);
-static struct filename_list *new_filename_listelem (const char *string);
-static void add_inputfiles (struct filename_list *fnames);
-static struct id_list *new_id_listelem (const char *str);
- static struct filename_list *mark_as_needed (struct filename_list *listp);
-static struct version *new_version (struct id_list *local,
- struct id_list *global);
-static struct version *merge_versions (struct version *one,
- struct version *two);
-static void add_versions (struct version *versions);
-
-extern int yylex (void);
-%}
-
-%union {
- uintmax_t num;
- enum expression_tag op;
- char *str;
- struct expression *expr;
- struct input_section_name *sectionname;
- struct filemask_section_name *filemask_section_name;
- struct input_rule *input_rule;
- struct output_rule *output_rule;
- struct assignment *assignment;
- struct filename_list *filename_list;
- struct version *version;
- struct id_list *id_list;
-}
-
-%token kADD_OP
-%token kALIGN
-%token kAS_NEEDED
-%token kENTRY
-%token kEXCLUDE_FILE
-%token <str> kFILENAME
-%token kGLOBAL
-%token kGROUP
-%token <str> kID
-%token kINPUT
-%token kINTERP
-%token kKEEP
-%token kLOCAL
-%token <num> kMODE
-%token kMUL_OP
-%token <num> kNUM
-%token kOUTPUT_FORMAT
-%token kPAGESIZE
-%token kPROVIDE
-%token kSEARCH_DIR
-%token kSEGMENT
-%token kSIZEOF_HEADERS
-%token kSORT
-%token kVERSION
-%token kVERSION_SCRIPT
-
-%left '|'
-%left '&'
-%left ADD_OP
-%left MUL_OP '*'
-
-%type <op> kADD_OP
-%type <op> kMUL_OP
-%type <str> filename_id
-%type <str> filename_id_star
-%type <str> exclude_opt
-%type <expr> expr
-%type <sectionname> sort_opt_name
-%type <filemask_section_name> sectionname
-%type <input_rule> inputsection
-%type <input_rule> inputsections
-%type <output_rule> outputsection
-%type <output_rule> outputsections
-%type <assignment> assignment
-%type <filename_list> filename_id_list
-%type <filename_list> filename_id_listelem
-%type <version> versionlist
-%type <version> version
-%type <version> version_stmt_list
-%type <version> version_stmt
-%type <id_list> filename_id_star_list
-
-%expect 16
-
-%%
-
-script_or_version:
- file
- | kVERSION_SCRIPT versionlist
- { add_versions ($2); }
- ;
-
-file: file content
- | content
- ;
-
-content: kENTRY '(' kID ')' ';'
- {
- if (likely (ld_state.entry == NULL))
- ld_state.entry = $3;
- }
- | kSEARCH_DIR '(' filename_id ')' ';'
- {
- ld_new_searchdir ($3);
- }
- | kPAGESIZE '(' kNUM ')' ';'
- {
- if (likely (ld_state.pagesize == 0))
- ld_state.pagesize = $3;
- }
- | kINTERP '(' filename_id ')' ';'
- {
- if (likely (ld_state.interp == NULL)
- && ld_state.file_type != dso_file_type)
- ld_state.interp = $3;
- }
- | kSEGMENT kMODE '{' outputsections '}'
- {
- new_segment ($2, $4);
- }
- | kSEGMENT error '{' outputsections '}'
- {
- fputs_unlocked (gettext ("mode for segment invalid\n"),
- stderr);
- new_segment (0, $4);
- }
- | kGROUP '(' filename_id_list ')'
- {
- /* First little optimization. If there is only one
- file in the group don't do anything. */
- if ($3 != $3->next)
- {
- $3->next->group_start = 1;
- $3->group_end = 1;
- }
- add_inputfiles ($3);
- }
- | kINPUT '(' filename_id_list ')'
- { add_inputfiles ($3); }
- | kAS_NEEDED '(' filename_id_list ')'
- { add_inputfiles (mark_as_needed ($3)); }
- | kVERSION '{' versionlist '}'
- { add_versions ($3); }
- | kOUTPUT_FORMAT '(' filename_id ')'
- { /* XXX TODO */ }
- ;
-
-outputsections: outputsections outputsection
- {
- $2->next = $1->next;
- $$ = $1->next = $2;
- }
- | outputsection
- { $$ = $1; }
- ;
-
-outputsection: assignment ';'
- {
- $$ = new_output_rule (output_assignment);
- $$->val.assignment = $1;
- }
- | kID '{' inputsections '}'
- {
- $$ = new_output_rule (output_section);
- $$->val.section.name = $1;
- $$->val.section.input = $3->next;
- if (ld_state.strip == strip_debug
- && ebl_debugscn_p (ld_state.ebl, $1))
- $$->val.section.ignored = true;
- else
- $$->val.section.ignored = false;
- $3->next = NULL;
- }
- | kID ';'
- {
- /* This is a short cut for "ID { *(ID) }". */
- $$ = new_output_rule (output_section);
- $$->val.section.name = $1;
- $$->val.section.input = new_input_rule (input_section);
- $$->val.section.input->next = NULL;
- $$->val.section.input->val.section =
- (struct filemask_section_name *)
- obstack_alloc (&ld_state.smem,
- sizeof (struct filemask_section_name));
- $$->val.section.input->val.section->filemask = NULL;
- $$->val.section.input->val.section->excludemask = NULL;
- $$->val.section.input->val.section->section_name =
- new_input_section_name ($1, false);
- $$->val.section.input->val.section->keep_flag = false;
- if (ld_state.strip == strip_debug
- && ebl_debugscn_p (ld_state.ebl, $1))
- $$->val.section.ignored = true;
- else
- $$->val.section.ignored = false;
- }
- ;
-
-assignment: kID '=' expr
- { $$ = new_assignment ($1, $3, false); }
- | kPROVIDE '(' kID '=' expr ')'
- { $$ = new_assignment ($3, $5, true); }
- ;
-
-inputsections: inputsections inputsection
- {
- $2->next = $1->next;
- $$ = $1->next = $2;
- }
- | inputsection
- { $$ = $1; }
- ;
-
-inputsection: sectionname
- {
- $$ = new_input_rule (input_section);
- $$->val.section = $1;
- }
- | kKEEP '(' sectionname ')'
- {
- $3->keep_flag = true;
-
- $$ = new_input_rule (input_section);
- $$->val.section = $3;
- }
- | assignment ';'
- {
- $$ = new_input_rule (input_assignment);
- $$->val.assignment = $1;
- }
- ;
-
-sectionname: filename_id_star '(' exclude_opt sort_opt_name ')'
- {
- $$ = (struct filemask_section_name *)
- obstack_alloc (&ld_state.smem, sizeof (*$$));
- $$->filemask = $1;
- $$->excludemask = $3;
- $$->section_name = $4;
- $$->keep_flag = false;
- }
- ;
-
-sort_opt_name: kID
- { $$ = new_input_section_name ($1, false); }
- | kSORT '(' kID ')'
- { $$ = new_input_section_name ($3, true); }
- ;
-
-exclude_opt: kEXCLUDE_FILE '(' filename_id ')'
- { $$ = $3; }
- |
- { $$ = NULL; }
- ;
-
-expr: kALIGN '(' expr ')'
- {
- $$ = new_expr (exp_align);
- $$->val.child = $3;
- }
- | '(' expr ')'
- { $$ = $2; }
- | expr '*' expr
- {
- $$ = new_expr (exp_mult);
- $$->val.binary.left = $1;
- $$->val.binary.right = $3;
- }
- | expr kMUL_OP expr
- {
- $$ = new_expr ($2);
- $$->val.binary.left = $1;
- $$->val.binary.right = $3;
- }
- | expr kADD_OP expr
- {
- $$ = new_expr ($2);
- $$->val.binary.left = $1;
- $$->val.binary.right = $3;
- }
- | expr '&' expr
- {
- $$ = new_expr (exp_and);
- $$->val.binary.left = $1;
- $$->val.binary.right = $3;
- }
- | expr '|' expr
- {
- $$ = new_expr (exp_or);
- $$->val.binary.left = $1;
- $$->val.binary.right = $3;
- }
- | kNUM
- {
- $$ = new_expr (exp_num);
- $$->val.num = $1;
- }
- | kID
- {
- $$ = new_expr (exp_id);
- $$->val.str = $1;
- }
- | kSIZEOF_HEADERS
- { $$ = new_expr (exp_sizeof_headers); }
- | kPAGESIZE
- { $$ = new_expr (exp_pagesize); }
- ;
-
-filename_id_list: filename_id_list comma_opt filename_id_listelem
- {
- $3->next = $1->next;
- $$ = $1->next = $3;
- }
- | filename_id_listelem
- { $$ = $1; }
- ;
-
-comma_opt: ','
- |
- ;
-
-filename_id_listelem: kGROUP '(' filename_id_list ')'
- {
- /* First little optimization. If there is only one
- file in the group don't do anything. */
- if ($3 != $3->next)
- {
- $3->next->group_start = 1;
- $3->group_end = 1;
- }
- $$ = $3;
- }
- | kAS_NEEDED '(' filename_id_list ')'
- { $$ = mark_as_needed ($3); }
- | filename_id
- { $$ = new_filename_listelem ($1); }
- ;
-
-
-versionlist: versionlist version
- {
- $2->next = $1->next;
- $$ = $1->next = $2;
- }
- | version
- { $$ = $1; }
- ;
-
-version: '{' version_stmt_list '}' ';'
- {
- $2->versionname = "";
- $2->parentname = NULL;
- $$ = $2;
- }
- | filename_id '{' version_stmt_list '}' ';'
- {
- $3->versionname = $1;
- $3->parentname = NULL;
- $$ = $3;
- }
- | filename_id '{' version_stmt_list '}' filename_id ';'
- {
- $3->versionname = $1;
- $3->parentname = $5;
- $$ = $3;
- }
- ;
-
-version_stmt_list:
- version_stmt_list version_stmt
- { $$ = merge_versions ($1, $2); }
- | version_stmt
- { $$ = $1; }
- ;
-
-version_stmt: kGLOBAL filename_id_star_list
- { $$ = new_version (NULL, $2); }
- | kLOCAL filename_id_star_list
- { $$ = new_version ($2, NULL); }
- ;
-
-filename_id_star_list:
- filename_id_star_list filename_id_star ';'
- {
- struct id_list *newp = new_id_listelem ($2);
- newp->next = $1->next;
- $$ = $1->next = newp;
- }
- | filename_id_star ';'
- { $$ = new_id_listelem ($1); }
- ;
-
-filename_id: kFILENAME
- { $$ = $1; }
- | kID
- { $$ = $1; }
- ;
-
-filename_id_star: filename_id
- { $$ = $1; }
- | '*'
- { $$ = NULL; }
- ;
-
-%%
-
-static void
-yyerror (const char *s)
-{
- error (0, 0, (ld_scan_version_script
- ? gettext ("while reading version script '%s': %s at line %d")
- : gettext ("while reading linker script '%s': %s at line %d")),
- ldin_fname, gettext (s), ldlineno);
-}
-
-
-static struct expression *
-new_expr (int tag)
-{
- struct expression *newp = (struct expression *)
- obstack_alloc (&ld_state.smem, sizeof (*newp));
-
- newp->tag = tag;
- return newp;
-}
-
-
-static struct input_section_name *
-new_input_section_name (const char *name, bool sort_flag)
-{
- struct input_section_name *newp = (struct input_section_name *)
- obstack_alloc (&ld_state.smem, sizeof (*newp));
-
- newp->name = name;
- newp->sort_flag = sort_flag;
- return newp;
-}
-
-
-static struct input_rule *
-new_input_rule (int tag)
-{
- struct input_rule *newp = (struct input_rule *)
- obstack_alloc (&ld_state.smem, sizeof (*newp));
-
- newp->tag = tag;
- newp->next = newp;
- return newp;
-}
-
-
-static struct output_rule *
-new_output_rule (int tag)
-{
- struct output_rule *newp = (struct output_rule *)
- memset (obstack_alloc (&ld_state.smem, sizeof (*newp)),
- '\0', sizeof (*newp));
-
- newp->tag = tag;
- newp->next = newp;
- return newp;
-}
-
-
-static struct assignment *
-new_assignment (const char *variable, struct expression *expression,
- bool provide_flag)
-{
- struct assignment *newp = (struct assignment *)
- obstack_alloc (&ld_state.smem, sizeof (*newp));
-
- newp->variable = variable;
- newp->expression = expression;
- newp->sym = NULL;
- newp->provide_flag = provide_flag;
-
- /* Insert the symbol into a hash table. We will later have to matc*/
- return newp;
-}
-
-
-static void
-new_segment (int mode, struct output_rule *output_rule)
-{
- struct output_segment *newp;
-
- newp
- = (struct output_segment *) obstack_alloc (&ld_state.smem, sizeof (*newp));
- newp->mode = mode;
- newp->next = newp;
-
- newp->output_rules = output_rule->next;
- output_rule->next = NULL;
-
- /* Enqueue the output segment description. */
- if (ld_state.output_segments == NULL)
- ld_state.output_segments = newp;
- else
- {
- newp->next = ld_state.output_segments->next;
- ld_state.output_segments = ld_state.output_segments->next = newp;
- }
-
- /* If the output file should be stripped of all symbol set the flag
- in the structures of all output sections. */
- if (mode == 0 && ld_state.strip == strip_all)
- {
- struct output_rule *runp;
-
- for (runp = newp->output_rules; runp != NULL; runp = runp->next)
- if (runp->tag == output_section)
- runp->val.section.ignored = true;
- }
-}
-
-
-static struct filename_list *
-new_filename_listelem (const char *string)
-{
- struct filename_list *newp;
-
- /* We use calloc and not the obstack since this object can be freed soon. */
- newp = (struct filename_list *) xcalloc (1, sizeof (*newp));
- newp->name = string;
- newp->next = newp;
- return newp;
-}
-
-
-static struct filename_list *
-mark_as_needed (struct filename_list *listp)
-{
- struct filename_list *runp = listp;
- do
- {
- runp->as_needed = true;
- runp = runp->next;
- }
- while (runp != listp);
-
- return listp;
-}
-
-
-static void
-add_inputfiles (struct filename_list *fnames)
-{
- assert (fnames != NULL);
-
- if (ld_state.srcfiles == NULL)
- ld_state.srcfiles = fnames;
- else
- {
- struct filename_list *first = ld_state.srcfiles->next;
-
- ld_state.srcfiles->next = fnames->next;
- fnames->next = first;
- ld_state.srcfiles->next = fnames;
- }
-}
-
-
-static _Bool
-special_char_p (const char *str)
-{
- while (*str != '\0')
- {
- if (__builtin_expect (*str == '*', 0)
- || __builtin_expect (*str == '?', 0)
- || __builtin_expect (*str == '[', 0))
- return true;
-
- ++str;
- }
-
- return false;
-}
-
-
-static struct id_list *
-new_id_listelem (const char *str)
-{
- struct id_list *newp;
-
- newp = (struct id_list *) obstack_alloc (&ld_state.smem, sizeof (*newp));
- if (str == NULL)
- newp->u.id_type = id_all;
- else if (__builtin_expect (special_char_p (str), false))
- newp->u.id_type = id_wild;
- else
- newp->u.id_type = id_str;
- newp->id = str;
- newp->next = newp;
-
- return newp;
-}
-
-
-static struct version *
-new_version (struct id_list *local, struct id_list *global)
-{
- struct version *newp;
-
- newp = (struct version *) obstack_alloc (&ld_state.smem, sizeof (*newp));
- newp->next = newp;
- newp->local_names = local;
- newp->global_names = global;
- newp->versionname = NULL;
- newp->parentname = NULL;
-
- return newp;
-}
-
-
-static struct version *
-merge_versions (struct version *one, struct version *two)
-{
- assert (two->local_names == NULL || two->global_names == NULL);
-
- if (two->local_names != NULL)
- {
- if (one->local_names == NULL)
- one->local_names = two->local_names;
- else
- {
- two->local_names->next = one->local_names->next;
- one->local_names = one->local_names->next = two->local_names;
- }
- }
- else
- {
- if (one->global_names == NULL)
- one->global_names = two->global_names;
- else
- {
- two->global_names->next = one->global_names->next;
- one->global_names = one->global_names->next = two->global_names;
- }
- }
-
- return one;
-}
-
-
-static void
-add_id_list (const char *versionname, struct id_list *runp, _Bool local)
-{
- struct id_list *lastp = runp;
-
- if (runp == NULL)
- /* Nothing to do. */
- return;
-
- /* Convert into a simple single-linked list. */
- runp = runp->next;
- assert (runp != NULL);
- lastp->next = NULL;
-
- do
- if (runp->u.id_type == id_str)
- {
- struct id_list *curp;
- struct id_list *defp;
- unsigned long int hval = elf_hash (runp->id);
-
- curp = runp;
- runp = runp->next;
-
- defp = ld_version_str_tab_find (&ld_state.version_str_tab, hval, curp);
- if (defp != NULL)
- {
- /* There is already a version definition for this symbol. */
- while (strcmp (defp->u.s.versionname, versionname) != 0)
- {
- if (defp->next == NULL)
- {
- /* No version like this so far. */
- defp->next = curp;
- curp->u.s.local = local;
- curp->u.s.versionname = versionname;
- curp->next = NULL;
- defp = NULL;
- break;
- }
-
- defp = defp->next;
- }
-
- if (defp != NULL && defp->u.s.local != local)
- error (EXIT_FAILURE, 0, versionname[0] == '\0'
- ? gettext ("\
-symbol '%s' in declared both local and global for unnamed version")
- : gettext ("\
-symbol '%s' in declared both local and global for version '%s'"),
- runp->id, versionname);
- }
- else
- {
- /* This is the first version definition for this symbol. */
- ld_version_str_tab_insert (&ld_state.version_str_tab, hval, curp);
-
- curp->u.s.local = local;
- curp->u.s.versionname = versionname;
- curp->next = NULL;
- }
- }
- else if (runp->u.id_type == id_all)
- {
- if (local)
- {
- if (ld_state.default_bind_global)
- error (EXIT_FAILURE, 0,
- gettext ("default visibility set as local and global"));
- ld_state.default_bind_local = true;
- }
- else
- {
- if (ld_state.default_bind_local)
- error (EXIT_FAILURE, 0,
- gettext ("default visibility set as local and global"));
- ld_state.default_bind_global = true;
- }
-
- runp = runp->next;
- }
- else
- {
- assert (runp->u.id_type == id_wild);
- /* XXX TBI */
- abort ();
- }
- while (runp != NULL);
-}
-
-
-static void
-add_versions (struct version *versions)
-{
- struct version *lastp = versions;
-
- if (versions == NULL)
- return;
-
- /* Convert into a simple single-linked list. */
- versions = versions->next;
- assert (versions != NULL);
- lastp->next = NULL;
-
- do
- {
- struct version *oldp;
-
- add_id_list (versions->versionname, versions->local_names, true);
- add_id_list (versions->versionname, versions->global_names, false);
-
- oldp = versions;
- versions = versions->next;
- }
- while (versions != NULL);
-}
diff --git a/src/libld_elf_i386.map b/src/libld_elf_i386.map
deleted file mode 100644
index 703af6d..0000000
--- a/src/libld_elf_i386.map
+++ /dev/null
@@ -1,7 +0,0 @@
-ELFUTILS_1.0 {
- global:
- elf_i386_ld_init;
-
- local:
- *;
-};
diff --git a/src/make-debug-archive.in b/src/make-debug-archive.in
deleted file mode 100644
index c3fcbce..0000000
--- a/src/make-debug-archive.in
+++ /dev/null
@@ -1,132 +0,0 @@
-#!/bin/sh
-#
-# Script to make an offline archive for debugging with libdwfl-based tools.
-#
-# make-debug-archive ARCHIVE {options}
-# make-debug-archive --kernel [--force] [RELEASE]
-#
-# Valid options are those listed under 'Input selection options'
-# by running @UNSTRIP@ --help.
-#
-# The archive installed by --kernel be used automatically by -K.
-# An offline archive can be used via -e in any tool that accepts those options.
-#
-
-UNSTRIP=${UNSTRIP:-@UNSTRIP@}
-AR=${AR:-@AR@}
-SUDO=${SUDO:-/usr/bin/sudo}
-
-LS=/bin/ls
-RM=/bin/rm
-MV=/bin/mv
-MKDIR=/bin/mkdir
-XARGS=/usr/bin/xargs
-
-outdir=${TMPDIR:-/tmp}/debugar$$
-
-usage()
-{
- echo "Usage: $0 ARCHIVE {options}"
- echo " or: $0 --kernel [--sudo] [--force] [RELEASE]"
- echo
- echo "Valid options are listed under 'Input selection options'"
- echo "when running: $UNSTRIP --help"
- echo
- echo "The --kernel form updates the file used by -K if the"
- echo "kernel installation has changed, or always with --force."
- echo "With --sudo, touches the installed file via $SUDO."
-}
-
-fatal_usage()
-{
- usage >&2
- exit 2
-}
-
-script_version()
-{
- echo "`basename $0` (@PACKAGE_NAME@) @PACKAGE_VERSION@"
- echo "Copyright (C) 2007 Red Hat, Inc."
- echo "This is free software; see the source for copying conditions."
- echo "There is NO warranty; not even for MERCHANTABILITY or"
- echo "FITNESS FOR A PARTICULAR PURPOSE."
- echo "Written by Roland McGrath."
-}
-
-sudo=
-kernel=no
-force_kernel=no
-while [ $# -gt 0 ]; do
- case "x$1" in
- x--help) usage; exit 0 ;;
- x--version) script_version; exit 0 ;;
- x--kernel) kernel=yes ;;
- x--force) force_kernel=yes ;;
- x--sudo) sudo=$SUDO ;;
- *) break ;;
- esac
- shift
-done
-
-if [ $kernel = no ] && [ $force_kernel = yes -o -n "$sudo" ]; then
- usage
-fi
-
-if [ $kernel = yes ]; then
- if [ $# -eq 0 ]; then
- release=`uname -r`
- elif [ $# -eq 1 ]; then
- release=$1
- else
- fatal_usage
- fi
-
- dir=/usr/lib/debug/lib/modules/$release
- archive=$dir/debug.a
- dep=/lib/modules/$release/modules.dep
-
- if [ ! -d $dir ]; then
- echo >&2 "$0: $dir not installed"
- exit 1
- fi
-
- # Without --force, bail if the kernel installation is not newer.
- # This file is normally touched by installing new kernels or modules.
- if [ $force_kernel = no -a "$archive" -nt "$dep" ]; then
- exit 0
- fi
-
- # We have to kill the old one first, because our own -K would use it.
- [ ! -e "$archive" ] || $sudo $RM -f "$archive" || exit
-
- set "$archive" "-K$release"
-fi
-
-if [ $# -lt 2 ]; then
- fatal_usage
-fi
-
-archive="$1"
-shift
-
-case "$archive" in
-/*) ;;
-*) archive="`/bin/pwd`/$archive" ;;
-esac
-
-if [ -z "$sudo" ]; then
- new_archive="$archive.new"
-else
- new_archive="$outdir.a"
-fi
-
-$RM -f "$new_archive" || exit
-
-trap '$RM -rf "$outdir" "$new_archive"' 0 1 2 15
-
-$MKDIR "$outdir" &&
-$UNSTRIP -d "$outdir" -m -a -R "$@" &&
-(cd "$outdir" && $LS | $XARGS $AR cq "$new_archive") &&
-$sudo $MV -f "$new_archive" "$archive"
-
-exit
diff --git a/src/nm.c b/src/nm.c
deleted file mode 100644
index 9fdf0cc..0000000
--- a/src/nm.c
+++ /dev/null
@@ -1,1325 +0,0 @@
-/* Print symbol information from ELF file in human-readable form.
- Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007,2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <ar.h>
-#include <argp.h>
-#include <assert.h>
-#include <ctype.h>
-#include <dwarf.h>
-#include <errno.h>
-#include <error.h>
-#include <fcntl.h>
-#include <gelf.h>
-#include <inttypes.h>
-#include <libdw.h>
-#include <libintl.h>
-#include <locale.h>
-#include <mcheck.h>
-#include <obstack.h>
-#include <search.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdio_ext.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/param.h>
-
-#include <system.h>
-#include "../libebl/libeblP.h"
-
-
-/* Name and version of program. */
-static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
-
-/* Bug report address. */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
-
-
-/* Values for the parameters which have no short form. */
-#define OPT_DEFINED 0x100
-#define OPT_MARK_WEAK 0x101
-
-/* Definitions of arguments for argp functions. */
-static const struct argp_option options[] =
-{
- { NULL, 0, NULL, 0, N_("Output selection:"), 0 },
- { "debug-syms", 'a', NULL, 0, N_("Display debugger-only symbols"), 0 },
- { "defined-only", OPT_DEFINED, NULL, 0, N_("Display only defined symbols"),
- 0 },
- { "dynamic", 'D', NULL, 0,
- N_("Display dynamic symbols instead of normal symbols"), 0 },
- { "extern-only", 'g', NULL, 0, N_("Display only external symbols"), 0 },
- { "undefined-only", 'u', NULL, 0, N_("Display only undefined symbols"), 0 },
- { "print-armap", 's', NULL, 0,
- N_("Include index for symbols from archive members"), 0 },
-
- { NULL, 0, NULL, 0, N_("Output format:"), 0 },
- { "print-file-name", 'A', NULL, 0,
- N_("Print name of the input file before every symbol"), 0 },
- { NULL, 'o', NULL, OPTION_HIDDEN, "Same as -A", 0 },
- { "format", 'f', "FORMAT", 0,
- N_("Use the output format FORMAT. FORMAT can be `bsd', `sysv' or `posix'. The default is `sysv'"),
- 0 },
- { NULL, 'B', NULL, 0, N_("Same as --format=bsd"), 0 },
- { "portability", 'P', NULL, 0, N_("Same as --format=posix"), 0 },
- { "radix", 't', "RADIX", 0, N_("Use RADIX for printing symbol values"), 0 },
- { "mark-weak", OPT_MARK_WEAK, NULL, 0, N_("Mark weak symbols"), 0 },
- { "print-size", 'S', NULL, 0, N_("Print size of defined symbols"), 0 },
-
- { NULL, 0, NULL, 0, N_("Output options:"), 0 },
- { "numeric-sort", 'n', NULL, 0, N_("Sort symbols numerically by address"),
- 0 },
- { "no-sort", 'p', NULL, 0, N_("Do not sort the symbols"), 0 },
- { "reverse-sort", 'r', NULL, 0, N_("Reverse the sense of the sort"), 0 },
- { NULL, 0, NULL, 0, N_("Miscellaneous:"), 0 },
- { NULL, 0, NULL, 0, NULL, 0 }
-};
-
-/* Short description of program. */
-static const char doc[] = N_("List symbols from FILEs (a.out by default).");
-
-/* Strings for arguments in help texts. */
-static const char args_doc[] = N_("[FILE...]");
-
-/* Prototype for option handler. */
-static error_t parse_opt (int key, char *arg, struct argp_state *state);
-
-/* Data structure to communicate with argp functions. */
-static struct argp argp =
-{
- options, parse_opt, args_doc, doc, NULL, NULL, NULL
-};
-
-
-/* Print symbols in file named FNAME. */
-static int process_file (const char *fname, bool more_than_one);
-
-/* Handle content of archive. */
-static int handle_ar (int fd, Elf *elf, const char *prefix, const char *fname,
- const char *suffix);
-
-/* Handle ELF file. */
-static int handle_elf (Elf *elf, const char *prefix, const char *fname,
- const char *suffix);
-
-
-#define INTERNAL_ERROR(fname) \
- error (EXIT_FAILURE, 0, gettext ("%s: INTERNAL ERROR %d (%s-%s): %s"), \
- fname, __LINE__, PACKAGE_VERSION, __DATE__, elf_errmsg (-1))
-
-
-/* Internal representation of symbols. */
-typedef struct GElf_SymX
-{
- GElf_Sym sym;
- Elf32_Word xndx;
- char *where;
-} GElf_SymX;
-
-
-/* User-selectable options. */
-
-/* The selected output format. */
-static enum
-{
- format_sysv = 0,
- format_bsd,
- format_posix
-} format;
-
-/* Print defined, undefined, or both? */
-static bool hide_undefined;
-static bool hide_defined;
-
-/* Print local symbols also? */
-static bool hide_local;
-
-/* Nonzero if full filename should precede every symbol. */
-static bool print_file_name;
-
-/* If true print size of defined symbols in BSD format. */
-static bool print_size;
-
-/* If true print archive index. */
-static bool print_armap;
-
-/* If true reverse sorting. */
-static bool reverse_sort;
-
-/* Type of the section we are printing. */
-static GElf_Word symsec_type = SHT_SYMTAB;
-
-/* Sorting selection. */
-static enum
-{
- sort_name = 0,
- sort_numeric,
- sort_nosort
-} sort;
-
-/* Radix for printed numbers. */
-static enum
-{
- radix_hex = 0,
- radix_decimal,
- radix_octal
-} radix;
-
-/* If nonzero weak symbols are distinguished from global symbols by adding
- a `*' after the identifying letter for the symbol class and type. */
-static bool mark_weak;
-
-
-int
-main (int argc, char *argv[])
-{
- int remaining;
- int result = 0;
-
- /* Make memory leak detection possible. */
- mtrace ();
-
- /* We use no threads here which can interfere with handling a stream. */
- (void) __fsetlocking (stdin, FSETLOCKING_BYCALLER);
- (void) __fsetlocking (stdout, FSETLOCKING_BYCALLER);
- (void) __fsetlocking (stderr, FSETLOCKING_BYCALLER);
-
- /* Set locale. */
- (void) setlocale (LC_ALL, "");
-
- /* Make sure the message catalog can be found. */
- (void) bindtextdomain (PACKAGE_TARNAME, LOCALEDIR);
-
- /* Initialize the message catalog. */
- (void) textdomain (PACKAGE_TARNAME);
-
- /* Parse and process arguments. */
- (void) argp_parse (&argp, argc, argv, 0, &remaining, NULL);
-
- /* Tell the library which version we are expecting. */
- (void) elf_version (EV_CURRENT);
-
- if (remaining == argc)
- /* The user didn't specify a name so we use a.out. */
- result = process_file ("a.out", false);
- else
- {
- /* Process all the remaining files. */
- const bool more_than_one = remaining + 1 < argc;
-
- do
- result |= process_file (argv[remaining], more_than_one);
- while (++remaining < argc);
- }
-
- return result;
-}
-
-
-/* Print the version information. */
-static void
-print_version (FILE *stream, struct argp_state *state __attribute__ ((unused)))
-{
- fprintf (stream, "nm (%s) %s\n", PACKAGE_NAME, PACKAGE_VERSION);
- fprintf (stream, gettext ("\
-Copyright (C) %s Red Hat, Inc.\n\
-This is free software; see the source for copying conditions. There is NO\n\
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
-"), "2008");
- fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper");
-}
-
-
-/* Handle program arguments. */
-static error_t
-parse_opt (int key, char *arg,
- struct argp_state *state __attribute__ ((unused)))
-{
- switch (key)
- {
- case 'a':
- /* XXX */
- break;
-
- case 'f':
- if (strcmp (arg, "bsd") == 0)
- format = format_bsd;
- else if (strcmp (arg, "posix") == 0)
- format = format_posix;
- else
- /* Be bug compatible. The BFD implementation also defaulted to
- using the SysV format if nothing else matches. */
- format = format_sysv;
- break;
-
- case 'g':
- hide_local = true;
- break;
-
- case 'n':
- sort = sort_numeric;
- break;
-
- case 'p':
- sort = sort_nosort;
- break;
-
- case 't':
- if (strcmp (arg, "10") == 0 || strcmp (arg, "d") == 0)
- radix = radix_decimal;
- else if (strcmp (arg, "8") == 0 || strcmp (arg, "o") == 0)
- radix = radix_octal;
- else
- radix = radix_hex;
- break;
-
- case 'u':
- hide_undefined = false;
- hide_defined = true;
- break;
-
- case 'A':
- case 'o':
- print_file_name = true;
- break;
-
- case 'B':
- format = format_bsd;
- break;
-
- case 'D':
- symsec_type = SHT_DYNSYM;
- break;
-
- case 'P':
- format = format_posix;
- break;
-
- case OPT_DEFINED:
- hide_undefined = true;
- hide_defined = false;
- break;
-
- case OPT_MARK_WEAK:
- mark_weak = true;
- break;
-
- case 'S':
- print_size = true;
- break;
-
- case 's':
- print_armap = true;
- break;
-
- case 'r':
- reverse_sort = true;
- break;
-
- default:
- return ARGP_ERR_UNKNOWN;
- }
- return 0;
-}
-
-
-/* Open the file and determine the type. */
-static int
-process_file (const char *fname, bool more_than_one)
-{
- /* Open the file. */
- int fd = open (fname, O_RDONLY);
- if (fd == -1)
- {
- error (0, errno, gettext ("cannot open '%s'"), fname);
- return 1;
- }
-
- /* Now get the ELF descriptor. */
- Elf *elf = elf_begin (fd, ELF_C_READ_MMAP, NULL);
- if (elf != NULL)
- {
- if (elf_kind (elf) == ELF_K_ELF)
- {
- int result = handle_elf (elf, more_than_one ? "" : NULL,
- fname, NULL);
-
- if (elf_end (elf) != 0)
- INTERNAL_ERROR (fname);
-
- if (close (fd) != 0)
- error (EXIT_FAILURE, errno, gettext ("while closing '%s'"), fname);
-
- return result;
- }
- else if (elf_kind (elf) == ELF_K_AR)
- {
- int result = handle_ar (fd, elf, NULL, fname, NULL);
-
- if (elf_end (elf) != 0)
- INTERNAL_ERROR (fname);
-
- if (close (fd) != 0)
- error (EXIT_FAILURE, errno, gettext ("while closing '%s'"), fname);
-
- return result;
- }
-
- /* We cannot handle this type. Close the descriptor anyway. */
- if (elf_end (elf) != 0)
- INTERNAL_ERROR (fname);
- }
-
- error (0, 0, gettext ("%s: File format not recognized"), fname);
-
- return 1;
-}
-
-
-static int
-handle_ar (int fd, Elf *elf, const char *prefix, const char *fname,
- const char *suffix)
-{
- size_t fname_len = strlen (fname) + 1;
- size_t prefix_len = prefix != NULL ? strlen (prefix) : 0;
- char new_prefix[prefix_len + fname_len + 2];
- size_t suffix_len = suffix != NULL ? strlen (suffix) : 0;
- char new_suffix[suffix_len + 2];
- Elf *subelf;
- Elf_Cmd cmd = ELF_C_READ_MMAP;
- int result = 0;
-
- char *cp = new_prefix;
- if (prefix != NULL)
- cp = stpcpy (cp, prefix);
- cp = stpcpy (cp, fname);
- stpcpy (cp, "[");
-
- cp = new_suffix;
- if (suffix != NULL)
- cp = stpcpy (cp, suffix);
- stpcpy (cp, "]");
-
- /* First print the archive index if this is wanted. */
- if (print_armap)
- {
- Elf_Arsym *arsym = elf_getarsym (elf, NULL);
-
- if (arsym != NULL)
- {
- Elf_Arhdr *arhdr = NULL;
- size_t arhdr_off = 0; /* Note: 0 is no valid offset. */
-
- puts (gettext("\nArchive index:"));
-
- while (arsym->as_off != 0)
- {
- if (arhdr_off != arsym->as_off
- && (elf_rand (elf, arsym->as_off) != arsym->as_off
- || (subelf = elf_begin (fd, cmd, elf)) == NULL
- || (arhdr = elf_getarhdr (subelf)) == NULL))
- {
- error (0, 0, gettext ("invalid offset %zu for symbol %s"),
- arsym->as_off, arsym->as_name);
- continue;
- }
-
- printf (gettext ("%s in %s\n"), arsym->as_name, arhdr->ar_name);
-
- ++arsym;
- }
-
- if (elf_rand (elf, SARMAG) != SARMAG)
- {
- error (0, 0,
- gettext ("cannot reset archive offset to beginning"));
- return 1;
- }
- }
- }
-
- /* Process all the files contained in the archive. */
- while ((subelf = elf_begin (fd, cmd, elf)) != NULL)
- {
- /* The the header for this element. */
- Elf_Arhdr *arhdr = elf_getarhdr (subelf);
-
- /* Skip over the index entries. */
- if (strcmp (arhdr->ar_name, "/") != 0
- && strcmp (arhdr->ar_name, "//") != 0)
- {
- if (elf_kind (subelf) == ELF_K_ELF)
- result |= handle_elf (subelf, new_prefix, arhdr->ar_name,
- new_suffix);
- else if (elf_kind (subelf) == ELF_K_AR)
- result |= handle_ar (fd, subelf, new_prefix, arhdr->ar_name,
- new_suffix);
- else
- {
- error (0, 0, gettext ("%s%s%s: file format not recognized"),
- new_prefix, arhdr->ar_name, new_suffix);
- result = 1;
- }
- }
-
- /* Get next archive element. */
- cmd = elf_next (subelf);
- if (elf_end (subelf) != 0)
- INTERNAL_ERROR (fname);
- }
-
- return result;
-}
-
-
-/* Mapping of radix and binary class to length. */
-static const int length_map[2][3] =
-{
- [ELFCLASS32 - 1] =
- {
- [radix_hex] = 8,
- [radix_decimal] = 10,
- [radix_octal] = 11
- },
- [ELFCLASS64 - 1] =
- {
- [radix_hex] = 16,
- [radix_decimal] = 20,
- [radix_octal] = 22
- }
-};
-
-
-static int
-global_compare (const void *p1, const void *p2)
-{
- const Dwarf_Global *g1 = (const Dwarf_Global *) p1;
- const Dwarf_Global *g2 = (const Dwarf_Global *) p2;
-
- return strcmp (g1->name, g2->name);
-}
-
-
-static void *global_root;
-
-
-static int
-get_global (Dwarf *dbg __attribute__ ((unused)), Dwarf_Global *global,
- void *arg __attribute__ ((unused)))
-{
- tsearch (memcpy (xmalloc (sizeof (Dwarf_Global)), global,
- sizeof (Dwarf_Global)),
- &global_root, global_compare);
-
- return DWARF_CB_OK;
-}
-
-
-struct local_name
-{
- const char *name;
- const char *file;
- Dwarf_Word lineno;
- Dwarf_Addr lowpc;
- Dwarf_Addr highpc;
-};
-
-
-static int
-local_compare (const void *p1, const void *p2)
-{
- struct local_name *g1 = (struct local_name *) p1;
- struct local_name *g2 = (struct local_name *) p2;
- int result;
-
- result = strcmp (g1->name, g2->name);
- if (result == 0)
- {
- if (g1->lowpc <= g2->lowpc && g1->highpc >= g2->highpc)
- {
- /* g2 is contained in g1. Update the data. */
- g2->lowpc = g1->lowpc;
- g2->highpc = g1->highpc;
- result = 0;
- }
- else if (g2->lowpc <= g1->lowpc && g2->highpc >= g1->highpc)
- {
- /* g1 is contained in g2. Update the data. */
- g1->lowpc = g2->lowpc;
- g1->highpc = g2->highpc;
- result = 0;
- }
- else
- result = g1->lowpc < g2->lowpc ? -1 : 1;
- }
-
- return result;
-}
-
-
-static int
-get_var_range (Dwarf_Die *die, Dwarf_Word *lowpc, Dwarf_Word *highpc)
-{
- Dwarf_Attribute locattr_mem;
- Dwarf_Attribute *locattr = dwarf_attr (die, DW_AT_location, &locattr_mem);
- if (locattr == NULL)
- return 1;
-
- Dwarf_Op *loc;
- size_t nloc;
- if (dwarf_getlocation (locattr, &loc, &nloc) != 0)
- return 1;
-
- /* Interpret the location expressions. */
- // XXX For now just the simple one:
- if (nloc == 1 && loc[0].atom == DW_OP_addr)
- {
- *lowpc = *highpc = loc[0].number;
- return 0;
- }
-
- return 1;
-}
-
-
-
-static void *local_root;
-
-
-static void
-get_local_names (Dwarf *dbg)
-{
- Dwarf_Off offset = 0;
- Dwarf_Off old_offset;
- size_t hsize;
-
- while (dwarf_nextcu (dbg, old_offset = offset, &offset, &hsize, NULL, NULL,
- NULL) == 0)
- {
- Dwarf_Die cudie_mem;
- Dwarf_Die *cudie = dwarf_offdie (dbg, old_offset + hsize, &cudie_mem);
-
- /* If we cannot get the CU DIE there is no need to go on with
- this CU. */
- if (cudie == NULL)
- continue;
- /* This better be a CU DIE. */
- if (dwarf_tag (cudie) != DW_TAG_compile_unit)
- continue;
-
- /* Get the line information. */
- Dwarf_Files *files;
- size_t nfiles;
- if (dwarf_getsrcfiles (cudie, &files, &nfiles) != 0)
- continue;
-
- Dwarf_Die die_mem;
- Dwarf_Die *die = &die_mem;
- if (dwarf_child (cudie, die) == 0)
- /* Iterate over all immediate children of the CU DIE. */
- do
- {
- int tag = dwarf_tag (die);
- if (tag != DW_TAG_subprogram && tag != DW_TAG_variable)
- continue;
-
- /* We are interested in five attributes: name, decl_file,
- decl_line, low_pc, and high_pc. */
- Dwarf_Attribute attr_mem;
- Dwarf_Attribute *attr = dwarf_attr (die, DW_AT_name, &attr_mem);
- const char *name = dwarf_formstring (attr);
- if (name == NULL)
- continue;
-
- Dwarf_Word fileidx;
- attr = dwarf_attr (die, DW_AT_decl_file, &attr_mem);
- if (dwarf_formudata (attr, &fileidx) != 0 || fileidx >= nfiles)
- continue;
-
- Dwarf_Word lineno;
- attr = dwarf_attr (die, DW_AT_decl_line, &attr_mem);
- if (dwarf_formudata (attr, &lineno) != 0 || lineno == 0)
- continue;
-
- Dwarf_Addr lowpc;
- Dwarf_Addr highpc;
- if (tag == DW_TAG_subprogram)
- {
- if (dwarf_lowpc (die, &lowpc) != 0
- || dwarf_highpc (die, &highpc) != 0)
- continue;
- }
- else
- {
- if (get_var_range (die, &lowpc, &highpc) != 0)
- continue;
- }
-
- /* We have all the information. Create a record. */
- struct local_name *newp
- = (struct local_name *) xmalloc (sizeof (*newp));
- newp->name = name;
- newp->file = dwarf_filesrc (files, fileidx, NULL, NULL);
- newp->lineno = lineno;
- newp->lowpc = lowpc;
- newp->highpc = highpc;
-
- /* Since we cannot deallocate individual memory we do not test
- for duplicates in the tree. This should not happen anyway. */
- if (tsearch (newp, &local_root, local_compare) == NULL)
- error (EXIT_FAILURE, errno,
- gettext ("cannot create search tree"));
- }
- while (dwarf_siblingof (die, die) == 0);
- }
-}
-
-/* Do elf_strptr, but return a backup string and never NULL. */
-static const char *
-sym_name (Elf *elf, GElf_Word strndx, GElf_Word st_name, char buf[], size_t n)
-{
- const char *symstr = elf_strptr (elf, strndx, st_name);
- if (symstr == NULL)
- {
- snprintf (buf, n, "[invalid st_name %#" PRIx32 "]", st_name);
- symstr = buf;
- }
- return symstr;
-}
-
-/* Show symbols in SysV format. */
-static void
-show_symbols_sysv (Ebl *ebl, GElf_Word strndx,
- const char *prefix, const char *fname, const char *fullname,
- GElf_SymX *syms, size_t nsyms, int longest_name,
- int longest_where)
-{
- size_t shnum;
- if (elf_getshnum (ebl->elf, &shnum) < 0)
- INTERNAL_ERROR (fullname);
-
- bool scnnames_malloced = shnum * sizeof (const char *) > 128 * 1024;
- const char **scnnames;
- if (scnnames_malloced)
- scnnames = (const char **) xmalloc (sizeof (const char *) * shnum);
- else
- scnnames = (const char **) alloca (sizeof (const char *) * shnum);
- /* Get the section header string table index. */
- size_t shstrndx;
- if (elf_getshstrndx (ebl->elf, &shstrndx) < 0)
- error (EXIT_FAILURE, 0,
- gettext ("cannot get section header string table index"));
-
- /* Cache the section names. */
- Elf_Scn *scn = NULL;
- size_t cnt = 1;
- while ((scn = elf_nextscn (ebl->elf, scn)) != NULL)
- {
- GElf_Shdr shdr_mem;
-
- assert (elf_ndxscn (scn) == cnt++);
-
- char *name = elf_strptr (ebl->elf, shstrndx,
- gelf_getshdr (scn, &shdr_mem)->sh_name);
- if (unlikely (name == NULL))
- {
- name = alloca (sizeof "[invalid sh_name 0x12345678]");
- snprintf (name, sizeof name, "[invalid sh_name %#" PRIx32 "]",
- gelf_getshdr (scn, &shdr_mem)->sh_name);
- }
- scnnames[elf_ndxscn (scn)] = name;
- }
-
- int digits = length_map[gelf_getclass (ebl->elf) - 1][radix];
-
- /* We always print this prolog. */
- if (prefix == NULL || 1)
- printf (gettext ("\n\nSymbols from %s:\n\n"), fullname);
- else
- printf (gettext ("\n\nSymbols from %s[%s]:\n\n"), prefix, fname);
-
- /* The header line. */
- printf (gettext ("%*s%-*s %-*s Class Type %-*s %*s Section\n\n"),
- print_file_name ? (int) strlen (fullname) + 1: 0, "",
- longest_name, sgettext ("sysv|Name"),
- /* TRANS: the "sysv|" parts makes the string unique. */
- digits, sgettext ("sysv|Value"),
- /* TRANS: the "sysv|" parts makes the string unique. */
- digits, sgettext ("sysv|Size"),
- /* TRANS: the "sysv|" parts makes the string unique. */
- longest_where, sgettext ("sysv|Line"));
-
- /* Which format string to use (different radix for numbers). */
- const char *fmtstr;
- if (radix == radix_hex)
- fmtstr = "%-*s|%0*" PRIx64 "|%-6s|%-8s|%*" PRIx64 "|%*s|%s\n";
- else if (radix == radix_decimal)
- fmtstr = "%-*s|%*" PRId64 "|%-6s|%-8s|%*" PRId64 "|%*s|%s\n";
- else
- fmtstr = "%-*s|%0*" PRIo64 "|%-6s|%-8s|%*" PRIo64 "|%*s|%s\n";
-
- /* Iterate over all symbols. */
- for (cnt = 0; cnt < nsyms; ++cnt)
- {
- char symstrbuf[50];
- const char *symstr = sym_name (ebl->elf, strndx, syms[cnt].sym.st_name,
- symstrbuf, sizeof symstrbuf);
-
- char symbindbuf[50];
- char symtypebuf[50];
- char secnamebuf[1024];
-
- /* If we have to precede the line with the file name. */
- if (print_file_name)
- {
- fputs_unlocked (fullname, stdout);
- putchar_unlocked (':');
- }
-
- /* Print the actual string. */
- printf (fmtstr,
- longest_name, symstr,
- digits, syms[cnt].sym.st_value,
- ebl_symbol_binding_name (ebl,
- GELF_ST_BIND (syms[cnt].sym.st_info),
- symbindbuf, sizeof (symbindbuf)),
- ebl_symbol_type_name (ebl, GELF_ST_TYPE (syms[cnt].sym.st_info),
- symtypebuf, sizeof (symtypebuf)),
- digits, syms[cnt].sym.st_size, longest_where, syms[cnt].where,
- ebl_section_name (ebl, syms[cnt].sym.st_shndx, syms[cnt].xndx,
- secnamebuf, sizeof (secnamebuf), scnnames,
- shnum));
- }
-
- if (scnnames_malloced)
- free (scnnames);
-}
-
-
-static char
-class_type_char (GElf_Sym *sym)
-{
- int local_p = GELF_ST_BIND (sym->st_info) == STB_LOCAL;
-
- /* XXX Add support for architecture specific types and classes. */
- if (sym->st_shndx == SHN_ABS)
- return local_p ? 'a' : 'A';
-
- if (sym->st_shndx == SHN_UNDEF)
- /* Undefined symbols must be global. */
- return 'U';
-
- char result = "NDTSFB "[GELF_ST_TYPE (sym->st_info)];
-
- return local_p ? tolower (result) : result;
-}
-
-
-static void
-show_symbols_bsd (Elf *elf, GElf_Word strndx,
- const char *prefix, const char *fname, const char *fullname,
- GElf_SymX *syms, size_t nsyms)
-{
- int digits = length_map[gelf_getclass (elf) - 1][radix];
-
- if (prefix != NULL && ! print_file_name)
- printf ("\n%s:\n", fname);
-
- static const char *const fmtstrs[] =
- {
- [radix_hex] = "%0*" PRIx64 " %c%s %s\n",
- [radix_decimal] = "%*" PRId64 " %c%s %s\n",
- [radix_octal] = "%0*" PRIo64 " %c%s %s\n"
- };
- static const char *const sfmtstrs[] =
- {
- [radix_hex] = "%2$0*1$" PRIx64 " %7$0*6$" PRIx64 " %3$c%4$s %5$s\n",
- [radix_decimal] = "%2$*1$" PRId64 " %7$*6$" PRId64 " %3$c%4$s %5$s\n",
- [radix_octal] = "%2$0*1$" PRIo64 " %7$0*6$" PRIo64 " %3$c%4$s %5$s\n"
- };
-
- /* Iterate over all symbols. */
- for (size_t cnt = 0; cnt < nsyms; ++cnt)
- {
- char symstrbuf[50];
- const char *symstr = sym_name (elf, strndx, syms[cnt].sym.st_name,
- symstrbuf, sizeof symstrbuf);
-
- /* Printing entries with a zero-length name makes the output
- not very well parseable. Since these entries don't carry
- much information we leave them out. */
- if (symstr[0] == '\0')
- continue;
-
- /* If we have to precede the line with the file name. */
- if (print_file_name)
- {
- fputs_unlocked (fullname, stdout);
- putchar_unlocked (':');
- }
-
- if (syms[cnt].sym.st_shndx == SHN_UNDEF)
- printf ("%*s U%s %s\n",
- digits, "",
- mark_weak
- ? (GELF_ST_BIND (syms[cnt].sym.st_info) == STB_WEAK
- ? "*" : " ")
- : "",
- symstr);
- else
- printf (print_size ? sfmtstrs[radix] : fmtstrs[radix],
- digits, syms[cnt].sym.st_value,
- class_type_char (&syms[cnt].sym),
- mark_weak
- ? (GELF_ST_BIND (syms[cnt].sym.st_info) == STB_WEAK
- ? "*" : " ")
- : "",
- symstr,
- digits, (uint64_t) syms[cnt].sym.st_size);
- }
-}
-
-
-static void
-show_symbols_posix (Elf *elf, GElf_Word strndx, const char *prefix,
- const char *fullname, GElf_SymX *syms, size_t nsyms)
-{
- if (prefix != NULL && ! print_file_name)
- printf ("%s:\n", fullname);
-
- const char *fmtstr;
- if (radix == radix_hex)
- fmtstr = "%s %c%s %0*" PRIx64 " %0*" PRIx64 "\n";
- else if (radix == radix_decimal)
- fmtstr = "%s %c%s %*" PRId64 " %*" PRId64 "\n";
- else
- fmtstr = "%s %c%s %0*" PRIo64 " %0*" PRIo64 "\n";
-
- int digits = length_map[gelf_getclass (elf) - 1][radix];
-
- /* Iterate over all symbols. */
- for (size_t cnt = 0; cnt < nsyms; ++cnt)
- {
- char symstrbuf[50];
- const char *symstr = sym_name (elf, strndx, syms[cnt].sym.st_name,
- symstrbuf, sizeof symstrbuf);
-
- /* Printing entries with a zero-length name makes the output
- not very well parseable. Since these entries don't carry
- much information we leave them out. */
- if (symstr[0] == '\0')
- continue;
-
- /* If we have to precede the line with the file name. */
- if (print_file_name)
- {
- fputs_unlocked (fullname, stdout);
- putchar_unlocked (':');
- putchar_unlocked (' ');
- }
-
- printf (fmtstr,
- symstr,
- class_type_char (&syms[cnt].sym),
- mark_weak
- ? (GELF_ST_BIND (syms[cnt].sym.st_info) == STB_WEAK ? "*" : " ")
- : "",
- digits, syms[cnt].sym.st_value,
- digits, syms[cnt].sym.st_size);
- }
-}
-
-
-/* Maximum size of memory we allocate on the stack. */
-#define MAX_STACK_ALLOC 65536
-
-static int
-sort_by_address (const void *p1, const void *p2)
-{
- GElf_SymX *s1 = (GElf_SymX *) p1;
- GElf_SymX *s2 = (GElf_SymX *) p2;
-
- int result = (s1->sym.st_value < s2->sym.st_value
- ? -1 : (s1->sym.st_value == s2->sym.st_value ? 0 : 1));
-
- return reverse_sort ? -result : result;
-}
-
-static Elf_Data *sort_by_name_strtab;
-
-static int
-sort_by_name (const void *p1, const void *p2)
-{
- GElf_SymX *s1 = (GElf_SymX *) p1;
- GElf_SymX *s2 = (GElf_SymX *) p2;
-
- const char *n1 = sort_by_name_strtab->d_buf + s1->sym.st_name;
- const char *n2 = sort_by_name_strtab->d_buf + s2->sym.st_name;
-
- int result = strcmp (n1, n2);
-
- return reverse_sort ? -result : result;
-}
-
-static void
-show_symbols (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, Elf_Scn *xndxscn,
- GElf_Shdr *shdr, const char *prefix, const char *fname,
- const char *fullname)
-{
- /* Get the section header string table index. */
- size_t shstrndx;
- if (elf_getshstrndx (ebl->elf, &shstrndx) < 0)
- error (EXIT_FAILURE, 0,
- gettext ("cannot get section header string table index"));
-
- /* The section is that large. */
- size_t size = shdr->sh_size;
- /* One entry is this large. */
- size_t entsize = shdr->sh_entsize;
-
- /* Consistency checks. */
- if (entsize != gelf_fsize (ebl->elf, ELF_T_SYM, 1, ehdr->e_version))
- error (0, 0,
- gettext ("%s: entry size in section `%s' is not what we expect"),
- fullname, elf_strptr (ebl->elf, shstrndx, shdr->sh_name));
- else if (size % entsize != 0)
- error (0, 0,
- gettext ("%s: size of section `%s' is not multiple of entry size"),
- fullname, elf_strptr (ebl->elf, shstrndx, shdr->sh_name));
-
- /* Compute number of entries. Handle buggy entsize values. */
- size_t nentries = size / (entsize ?: 1);
-
-
-#define obstack_chunk_alloc xmalloc
-#define obstack_chunk_free free
- struct obstack whereob;
- obstack_init (&whereob);
-
- /* Get a DWARF debugging descriptor. It's no problem if this isn't
- possible. We just won't print any line number information. */
- Dwarf *dbg = NULL;
- if (format == format_sysv)
- {
- dbg = dwarf_begin_elf (ebl->elf, DWARF_C_READ, NULL);
- if (dbg != NULL)
- {
- (void) dwarf_getpubnames (dbg, get_global, NULL, 0);
-
- get_local_names (dbg);
- }
- }
-
- /* Allocate the memory.
-
- XXX We can use a dirty trick here. Since GElf_Sym == Elf64_Sym we
- can use the data memory instead of copying again if what we read
- is a 64 bit file. */
- GElf_SymX *sym_mem;
- if (nentries * sizeof (GElf_SymX) < MAX_STACK_ALLOC)
- sym_mem = (GElf_SymX *) alloca (nentries * sizeof (GElf_SymX));
- else
- sym_mem = (GElf_SymX *) xmalloc (nentries * sizeof (GElf_SymX));
-
- /* Get the data of the section. */
- Elf_Data *data = elf_getdata (scn, NULL);
- Elf_Data *xndxdata = elf_getdata (xndxscn, NULL);
- if (data == NULL || (xndxscn != NULL && xndxdata == NULL))
- INTERNAL_ERROR (fullname);
-
- /* Iterate over all symbols. */
- int longest_name = 4;
- int longest_where = 4;
- size_t nentries_used = 0;
- for (size_t cnt = 0; cnt < nentries; ++cnt)
- {
- GElf_Sym *sym = gelf_getsymshndx (data, xndxdata, cnt,
- &sym_mem[nentries_used].sym,
- &sym_mem[nentries_used].xndx);
- if (sym == NULL)
- INTERNAL_ERROR (fullname);
-
- /* Filter out administrative symbols without a name and those
- deselected by ther user with command line options. */
- if ((hide_undefined && sym->st_shndx == SHN_UNDEF)
- || (hide_defined && sym->st_shndx != SHN_UNDEF)
- || (hide_local && GELF_ST_BIND (sym->st_info) == STB_LOCAL))
- continue;
-
- sym_mem[nentries_used].where = "";
- if (format == format_sysv)
- {
- const char *symstr = elf_strptr (ebl->elf, shdr->sh_link,
- sym->st_name);
- if (symstr == NULL)
- continue;
-
- longest_name = MAX ((size_t) longest_name, strlen (symstr));
-
- if (sym->st_shndx != SHN_UNDEF
- && GELF_ST_BIND (sym->st_info) != STB_LOCAL
- && global_root != NULL)
- {
- Dwarf_Global fake = { .name = symstr };
- Dwarf_Global **found = tfind (&fake, &global_root,
- global_compare);
- if (found != NULL)
- {
- Dwarf_Die die_mem;
- Dwarf_Die *die = dwarf_offdie (dbg, (*found)->die_offset,
- &die_mem);
-
- Dwarf_Die cudie_mem;
- Dwarf_Die *cudie = NULL;
-
- Dwarf_Addr lowpc;
- Dwarf_Addr highpc;
- if (die != NULL
- && dwarf_lowpc (die, &lowpc) == 0
- && lowpc <= sym->st_value
- && dwarf_highpc (die, &highpc) == 0
- && highpc > sym->st_value)
- cudie = dwarf_offdie (dbg, (*found)->cu_offset,
- &cudie_mem);
- if (cudie != NULL)
- {
- Dwarf_Line *line = dwarf_getsrc_die (cudie,
- sym->st_value);
- if (line != NULL)
- {
- /* We found the line. */
- int lineno;
- (void) dwarf_lineno (line, &lineno);
- int n;
- n = obstack_printf (&whereob, "%s:%d%c",
- basename (dwarf_linesrc (line,
- NULL,
- NULL)),
- lineno, '\0');
- sym_mem[nentries_used].where
- = obstack_finish (&whereob);
-
- /* The return value of obstack_print included the
- NUL byte, so subtract one. */
- if (--n > (int) longest_where)
- longest_where = (size_t) n;
- }
- }
- }
- }
-
- /* Try to find the symol among the local symbols. */
- if (sym_mem[nentries_used].where[0] == '\0')
- {
- struct local_name fake =
- {
- .name = symstr,
- .lowpc = sym->st_value,
- .highpc = sym->st_value,
- };
- struct local_name **found = tfind (&fake, &local_root,
- local_compare);
- if (found != NULL)
- {
- /* We found the line. */
- int n = obstack_printf (&whereob, "%s:%" PRIu64 "%c",
- basename ((*found)->file),
- (*found)->lineno,
- '\0');
- sym_mem[nentries_used].where = obstack_finish (&whereob);
-
- /* The return value of obstack_print included the
- NUL byte, so subtract one. */
- if (--n > (int) longest_where)
- longest_where = (size_t) n;
- }
- }
- }
-
- /* We use this entry. */
- ++nentries_used;
- }
- /* Now we know the exact number. */
- nentries = nentries_used;
-
- /* Sort the entries according to the users wishes. */
- if (sort == sort_name)
- {
- sort_by_name_strtab = elf_getdata (elf_getscn (ebl->elf, shdr->sh_link),
- NULL);
- qsort (sym_mem, nentries, sizeof (GElf_SymX), sort_by_name);
- }
- else if (sort == sort_numeric)
- qsort (sym_mem, nentries, sizeof (GElf_SymX), sort_by_address);
-
- /* Finally print according to the users selection. */
- switch (format)
- {
- case format_sysv:
- show_symbols_sysv (ebl, shdr->sh_link, prefix, fname,
- fullname, sym_mem, nentries, longest_name,
- longest_where);
- break;
-
- case format_bsd:
- show_symbols_bsd (ebl->elf, shdr->sh_link, prefix, fname, fullname,
- sym_mem, nentries);
- break;
-
- case format_posix:
- default:
- assert (format == format_posix);
- show_symbols_posix (ebl->elf, shdr->sh_link, prefix, fullname, sym_mem,
- nentries);
- break;
- }
-
- /* Free all memory. */
- if (nentries * sizeof (GElf_Sym) >= MAX_STACK_ALLOC)
- free (sym_mem);
-
- obstack_free (&whereob, NULL);
-
- if (dbg != NULL)
- {
- tdestroy (global_root, free);
- global_root = NULL;
-
- tdestroy (local_root, free);
- local_root = NULL;
-
- (void) dwarf_end (dbg);
- }
-}
-
-
-static int
-handle_elf (Elf *elf, const char *prefix, const char *fname,
- const char *suffix)
-{
- size_t prefix_len = prefix == NULL ? 0 : strlen (prefix);
- size_t suffix_len = suffix == NULL ? 0 : strlen (suffix);
- size_t fname_len = strlen (fname) + 1;
- char fullname[prefix_len + 1 + fname_len + suffix_len];
- char *cp = fullname;
- Elf_Scn *scn = NULL;
- int any = 0;
- int result = 0;
- GElf_Ehdr ehdr_mem;
- GElf_Ehdr *ehdr;
- Ebl *ebl;
-
- /* Get the backend for this object file type. */
- ebl = ebl_openbackend (elf);
-
- /* We need the ELF header in a few places. */
- ehdr = gelf_getehdr (elf, &ehdr_mem);
- if (ehdr == NULL)
- INTERNAL_ERROR (fullname);
-
- /* If we are asked to print the dynamic symbol table and this is
- executable or dynamic executable, fail. */
- if (symsec_type == SHT_DYNSYM
- && ehdr->e_type != ET_EXEC && ehdr->e_type != ET_DYN)
- {
- /* XXX Add machine specific object file types. */
- error (0, 0, gettext ("%s%s%s%s: Invalid operation"),
- prefix ?: "", prefix ? "(" : "", fname, prefix ? ")" : "");
- result = 1;
- goto out;
- }
-
- /* Create the full name of the file. */
- if (prefix != NULL)
- cp = mempcpy (cp, prefix, prefix_len);
- cp = mempcpy (cp, fname, fname_len);
- if (suffix != NULL)
- memcpy (cp - 1, suffix, suffix_len + 1);
-
- /* Find the symbol table.
-
- XXX Can there be more than one? Do we print all? Currently we do. */
- while ((scn = elf_nextscn (elf, scn)) != NULL)
- {
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
-
- if (shdr == NULL)
- INTERNAL_ERROR (fullname);
-
- if (shdr->sh_type == symsec_type)
- {
- Elf_Scn *xndxscn = NULL;
-
- /* We have a symbol table. First make sure we remember this. */
- any = 1;
-
- /* Look for an extended section index table for this section. */
- if (symsec_type == SHT_SYMTAB)
- {
- size_t scnndx = elf_ndxscn (scn);
-
- while ((xndxscn = elf_nextscn (elf, xndxscn)) != NULL)
- {
- GElf_Shdr xndxshdr_mem;
- GElf_Shdr *xndxshdr = gelf_getshdr (xndxscn, &xndxshdr_mem);
-
- if (xndxshdr == NULL)
- INTERNAL_ERROR (fullname);
-
- if (xndxshdr->sh_type == SHT_SYMTAB_SHNDX
- && xndxshdr->sh_link == scnndx)
- break;
- }
- }
-
- show_symbols (ebl, ehdr, scn, xndxscn, shdr, prefix, fname,
- fullname);
- }
- }
-
- if (! any)
- {
- error (0, 0, gettext ("%s%s%s: no symbols"),
- prefix ?: "", prefix ? ":" : "", fname);
- result = 1;
- }
-
- out:
- /* Close the ELF backend library descriptor. */
- ebl_closebackend (ebl);
-
- return result;
-}
-
-
-#include "debugpred.h"
diff --git a/src/none_ld.c b/src/none_ld.c
deleted file mode 100644
index fb0f0fb..0000000
--- a/src/none_ld.c
+++ /dev/null
@@ -1 +0,0 @@
-/* Nothing here. This is just a testimony of automake inflexibility. */
diff --git a/src/objdump.c b/src/objdump.c
deleted file mode 100644
index 91fa875..0000000
--- a/src/objdump.c
+++ /dev/null
@@ -1,815 +0,0 @@
-/* Print information from ELF file in human-readable form.
- Copyright (C) 2005, 2006, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <argp.h>
-#include <error.h>
-#include <fcntl.h>
-#include <inttypes.h>
-#include <libintl.h>
-#include <locale.h>
-#include <mcheck.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdio_ext.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/param.h>
-
-#include <system.h>
-#include "../libebl/libeblP.h"
-
-
-/* Name and version of program. */
-static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
-
-/* Bug report address. */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
-
-
-/* Definitions of arguments for argp functions. */
-static const struct argp_option options[] =
-{
- { NULL, 0, NULL, 0, N_("Mode selection:"), 0 },
- { "reloc", 'r', NULL, 0, N_("Display relocation information."), 0 },
- { "full-contents", 's', NULL, 0,
- N_("Display the full contents of all sections requested"), 0 },
- { "disassemble", 'd', NULL, 0,
- N_("Display assembler code of executable sections"), 0 },
-
- { NULL, 0, NULL, 0, N_("Output option selection:"), 0 },
- { "section", 'j', "NAME", 0,
- N_("Only display information for section NAME."), 0 },
-
- { NULL, 0, NULL, 0, NULL, 0 }
-};
-
-/* Short description of program. */
-static const char doc[] = N_("\
-Show information from FILEs (a.out by default).");
-
-/* Strings for arguments in help texts. */
-static const char args_doc[] = N_("[FILE...]");
-
-/* Prototype for option handler. */
-static error_t parse_opt (int key, char *arg, struct argp_state *state);
-
-/* Data structure to communicate with argp functions. */
-static struct argp argp =
-{
- options, parse_opt, args_doc, doc, NULL, NULL, NULL
-};
-
-
-/* Print symbols in file named FNAME. */
-static int process_file (const char *fname, bool more_than_one);
-
-/* Handle content of archive. */
-static int handle_ar (int fd, Elf *elf, const char *prefix, const char *fname,
- const char *suffix);
-
-/* Handle ELF file. */
-static int handle_elf (Elf *elf, const char *prefix, const char *fname,
- const char *suffix);
-
-
-#define INTERNAL_ERROR(fname) \
- error (EXIT_FAILURE, 0, gettext ("%s: INTERNAL ERROR %d (%s-%s): %s"), \
- fname, __LINE__, PACKAGE_VERSION, __DATE__, elf_errmsg (-1))
-
-
-/* List of sections which should be used. */
-static struct section_list
-{
- bool is_name;
- union
- {
- const char *name;
- uint32_t scnndx;
- };
- struct section_list *next;
-} *section_list;
-
-
-/* If true print archive index. */
-static bool print_relocs;
-
-/* If true print full contents of requested sections. */
-static bool print_full_content;
-
-/* If true print disassembled output.. */
-static bool print_disasm;
-
-int
-main (int argc, char *argv[])
-{
- /* Make memory leak detection possible. */
- mtrace ();
-
- /* We use no threads here which can interfere with handling a stream. */
- (void) __fsetlocking (stdin, FSETLOCKING_BYCALLER);
- (void) __fsetlocking (stdout, FSETLOCKING_BYCALLER);
- (void) __fsetlocking (stderr, FSETLOCKING_BYCALLER);
-
- /* Set locale. */
- (void) setlocale (LC_ALL, "");
-
- /* Make sure the message catalog can be found. */
- (void) bindtextdomain (PACKAGE_TARNAME, LOCALEDIR);
-
- /* Initialize the message catalog. */
- (void) textdomain (PACKAGE_TARNAME);
-
- /* Parse and process arguments. */
- int remaining;
- (void) argp_parse (&argp, argc, argv, 0, &remaining, NULL);
-
- /* Tell the library which version we are expecting. */
- (void) elf_version (EV_CURRENT);
-
- int result = 0;
- if (remaining == argc)
- /* The user didn't specify a name so we use a.out. */
- result = process_file ("a.out", false);
- else
- {
- /* Process all the remaining files. */
- const bool more_than_one = remaining + 1 < argc;
-
- do
- result |= process_file (argv[remaining], more_than_one);
- while (++remaining < argc);
- }
-
- return result;
-}
-
-
-/* Print the version information. */
-static void
-print_version (FILE *stream, struct argp_state *state __attribute__ ((unused)))
-{
- fprintf (stream, "objdump (%s) %s\n", PACKAGE_NAME, PACKAGE_VERSION);
- fprintf (stream, gettext ("\
-Copyright (C) %s Red Hat, Inc.\n\
-This is free software; see the source for copying conditions. There is NO\n\
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
-"), "2008");
- fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper");
-}
-
-
-/* Handle program arguments. */
-static error_t
-parse_opt (int key, char *arg,
- struct argp_state *state __attribute__ ((unused)))
-{
- /* True if any of the control options is set. */
- static bool any_control_option;
-
- switch (key)
- {
- case 'j':
- {
- struct section_list *newp = xmalloc (sizeof (*newp));
- char *endp;
- newp->scnndx = strtoul (arg, &endp, 0);
- if (*endp == 0)
- newp->is_name = false;
- else
- {
- newp->name = arg;
- newp->is_name = true;
- }
- newp->next = section_list;
- section_list = newp;
- }
- any_control_option = true;
- break;
-
- case 'd':
- print_disasm = true;
- any_control_option = true;
- break;
-
- case 'r':
- print_relocs = true;
- any_control_option = true;
- break;
-
- case 's':
- print_full_content = true;
- any_control_option = true;
- break;
-
- case ARGP_KEY_FINI:
- if (! any_control_option)
- {
- fputs (gettext ("No operation specified.\n"), stderr);
- argp_help (&argp, stderr, ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR,
- program_invocation_short_name);
- exit (1);
- }
-
- default:
- return ARGP_ERR_UNKNOWN;
- }
- return 0;
-}
-
-
-/* Open the file and determine the type. */
-static int
-process_file (const char *fname, bool more_than_one)
-{
- /* Open the file. */
- int fd = open (fname, O_RDONLY);
- if (fd == -1)
- {
- error (0, errno, gettext ("cannot open %s"), fname);
- return 1;
- }
-
- /* Now get the ELF descriptor. */
- Elf *elf = elf_begin (fd, ELF_C_READ_MMAP, NULL);
- if (elf != NULL)
- {
- if (elf_kind (elf) == ELF_K_ELF)
- {
- int result = handle_elf (elf, more_than_one ? "" : NULL,
- fname, NULL);
-
- if (elf_end (elf) != 0)
- INTERNAL_ERROR (fname);
-
- if (close (fd) != 0)
- error (EXIT_FAILURE, errno, gettext ("while close `%s'"), fname);
-
- return result;
- }
- else if (elf_kind (elf) == ELF_K_AR)
- {
- int result = handle_ar (fd, elf, NULL, fname, NULL);
-
- if (elf_end (elf) != 0)
- INTERNAL_ERROR (fname);
-
- if (close (fd) != 0)
- error (EXIT_FAILURE, errno, gettext ("while close `%s'"), fname);
-
- return result;
- }
-
- /* We cannot handle this type. Close the descriptor anyway. */
- if (elf_end (elf) != 0)
- INTERNAL_ERROR (fname);
- }
-
- error (0, 0, gettext ("%s: File format not recognized"), fname);
-
- return 1;
-}
-
-
-static int
-handle_ar (int fd, Elf *elf, const char *prefix, const char *fname,
- const char *suffix)
-{
- size_t fname_len = strlen (fname) + 1;
- size_t prefix_len = prefix != NULL ? strlen (prefix) : 0;
- char new_prefix[prefix_len + fname_len + 2];
- size_t suffix_len = suffix != NULL ? strlen (suffix) : 0;
- char new_suffix[suffix_len + 2];
- Elf *subelf;
- Elf_Cmd cmd = ELF_C_READ_MMAP;
- int result = 0;
-
- char *cp = new_prefix;
- if (prefix != NULL)
- cp = stpcpy (cp, prefix);
- cp = stpcpy (cp, fname);
- stpcpy (cp, "[");
-
- cp = new_suffix;
- if (suffix != NULL)
- cp = stpcpy (cp, suffix);
- stpcpy (cp, "]");
-
- /* Process all the files contained in the archive. */
- while ((subelf = elf_begin (fd, cmd, elf)) != NULL)
- {
- /* The the header for this element. */
- Elf_Arhdr *arhdr = elf_getarhdr (subelf);
-
- /* Skip over the index entries. */
- if (strcmp (arhdr->ar_name, "/") != 0
- && strcmp (arhdr->ar_name, "//") != 0)
- {
- if (elf_kind (subelf) == ELF_K_ELF)
- result |= handle_elf (subelf, new_prefix, arhdr->ar_name,
- new_suffix);
- else if (elf_kind (subelf) == ELF_K_AR)
- result |= handle_ar (fd, subelf, new_prefix, arhdr->ar_name,
- new_suffix);
- else
- {
- error (0, 0, gettext ("%s%s%s: file format not recognized"),
- new_prefix, arhdr->ar_name, new_suffix);
- result = 1;
- }
- }
-
- /* Get next archive element. */
- cmd = elf_next (subelf);
- if (elf_end (subelf) != 0)
- INTERNAL_ERROR (fname);
- }
-
- return result;
-}
-
-
-static void
-show_relocs_rel (Ebl *ebl, GElf_Shdr *shdr, Elf_Data *data,
- Elf_Data *symdata, Elf_Data *xndxdata, size_t symstrndx,
- size_t shstrndx)
-{
- int elfclass = gelf_getclass (ebl->elf);
- int nentries = shdr->sh_size / shdr->sh_entsize;
-
- for (int cnt = 0; cnt < nentries; ++cnt)
- {
- GElf_Rel relmem;
- GElf_Rel *rel;
-
- rel = gelf_getrel (data, cnt, &relmem);
- if (rel != NULL)
- {
- char buf[128];
- GElf_Sym symmem;
- GElf_Sym *sym;
- Elf32_Word xndx;
-
- sym = gelf_getsymshndx (symdata, xndxdata, GELF_R_SYM (rel->r_info),
- &symmem, &xndx);
- if (sym == NULL)
- printf ("%0*" PRIx64 " %-20s <%s %ld>\n",
- elfclass == ELFCLASS32 ? 8 : 16, rel->r_offset,
- ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info))
- ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info),
- buf, sizeof (buf))
- : gettext ("<INVALID RELOC>"),
- gettext ("INVALID SYMBOL"),
- (long int) GELF_R_SYM (rel->r_info));
- else if (GELF_ST_TYPE (sym->st_info) != STT_SECTION)
- printf ("%0*" PRIx64 " %-20s %s\n",
- elfclass == ELFCLASS32 ? 8 : 16, rel->r_offset,
- ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info))
- ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info),
- buf, sizeof (buf))
- : gettext ("<INVALID RELOC>"),
- elf_strptr (ebl->elf, symstrndx, sym->st_name));
- else
- {
- GElf_Shdr destshdr_mem;
- GElf_Shdr *destshdr;
- destshdr = gelf_getshdr (elf_getscn (ebl->elf,
- sym->st_shndx == SHN_XINDEX
- ? xndx : sym->st_shndx),
- &destshdr_mem);
-
- if (shdr == NULL)
- printf ("%0*" PRIx64 " %-20s <%s %ld>\n",
- elfclass == ELFCLASS32 ? 8 : 16, rel->r_offset,
- ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info))
- ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info),
- buf, sizeof (buf))
- : gettext ("<INVALID RELOC>"),
- gettext ("INVALID SECTION"),
- (long int) (sym->st_shndx == SHN_XINDEX
- ? xndx : sym->st_shndx));
- else
- printf ("%0*" PRIx64 " %-20s %s\n",
- elfclass == ELFCLASS32 ? 8 : 16, rel->r_offset,
- ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info))
- ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info),
- buf, sizeof (buf))
- : gettext ("<INVALID RELOC>"),
- elf_strptr (ebl->elf, shstrndx, destshdr->sh_name));
- }
- }
- }
-}
-
-
-static void
-show_relocs_rela (Ebl *ebl, GElf_Shdr *shdr, Elf_Data *data,
- Elf_Data *symdata, Elf_Data *xndxdata, size_t symstrndx,
- size_t shstrndx)
-{
- int elfclass = gelf_getclass (ebl->elf);
- int nentries = shdr->sh_size / shdr->sh_entsize;
-
- for (int cnt = 0; cnt < nentries; ++cnt)
- {
- GElf_Rela relmem;
- GElf_Rela *rel;
-
- rel = gelf_getrela (data, cnt, &relmem);
- if (rel != NULL)
- {
- char buf[128];
- GElf_Sym symmem;
- GElf_Sym *sym;
- Elf32_Word xndx;
-
- sym = gelf_getsymshndx (symdata, xndxdata, GELF_R_SYM (rel->r_info),
- &symmem, &xndx);
- if (sym == NULL)
- printf ("%0*" PRIx64 " %-20s <%s %ld>",
- elfclass == ELFCLASS32 ? 8 : 16, rel->r_offset,
- ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info))
- ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info),
- buf, sizeof (buf))
- : gettext ("<INVALID RELOC>"),
- gettext ("INVALID SYMBOL"),
- (long int) GELF_R_SYM (rel->r_info));
- else if (GELF_ST_TYPE (sym->st_info) != STT_SECTION)
- printf ("%0*" PRIx64 " %-20s %s",
- elfclass == ELFCLASS32 ? 8 : 16, rel->r_offset,
- ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info))
- ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info),
- buf, sizeof (buf))
- : gettext ("<INVALID RELOC>"),
- elf_strptr (ebl->elf, symstrndx, sym->st_name));
- else
- {
- GElf_Shdr destshdr_mem;
- GElf_Shdr *destshdr;
- destshdr = gelf_getshdr (elf_getscn (ebl->elf,
- sym->st_shndx == SHN_XINDEX
- ? xndx : sym->st_shndx),
- &destshdr_mem);
-
- if (shdr == NULL)
- printf ("%0*" PRIx64 " %-20s <%s %ld>",
- elfclass == ELFCLASS32 ? 8 : 16, rel->r_offset,
- ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info))
- ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info),
- buf, sizeof (buf))
- : gettext ("<INVALID RELOC>"),
- gettext ("INVALID SECTION"),
- (long int) (sym->st_shndx == SHN_XINDEX
- ? xndx : sym->st_shndx));
- else
- printf ("%0*" PRIx64 " %-20s %s",
- elfclass == ELFCLASS32 ? 8 : 16, rel->r_offset,
- ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info))
- ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info),
- buf, sizeof (buf))
- : gettext ("<INVALID RELOC>"),
- elf_strptr (ebl->elf, shstrndx, destshdr->sh_name));
- }
-
- if (rel->r_addend != 0)
- printf ("+%#" PRIx64, rel->r_addend);
- putchar ('\n');
- }
- }
-}
-
-
-static bool
-section_match (Elf *elf, uint32_t scnndx, GElf_Shdr *shdr, size_t shstrndx)
-{
- if (section_list == NULL)
- return true;
-
- struct section_list *runp = section_list;
-
- do
- {
- if (runp->is_name)
- {
- if (strcmp (runp->name,
- elf_strptr (elf, shstrndx, shdr->sh_name)) == 0)
- return true;
- }
- else
- {
- if (runp->scnndx == scnndx)
- return true;
- }
-
- runp = runp->next;
- }
- while (runp != NULL);
-
- return false;
-}
-
-
-static int
-show_relocs (Ebl *ebl, const char *fname, uint32_t shstrndx)
-{
- int elfclass = gelf_getclass (ebl->elf);
-
- Elf_Scn *scn = NULL;
- while ((scn = elf_nextscn (ebl->elf, scn)) != NULL)
- {
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
-
- if (shdr == NULL)
- INTERNAL_ERROR (fname);
-
- if (shdr->sh_type == SHT_REL || shdr->sh_type == SHT_RELA)
- {
- if (! section_match (ebl->elf, elf_ndxscn (scn), shdr, shstrndx))
- continue;
-
- GElf_Shdr destshdr_mem;
- GElf_Shdr *destshdr = gelf_getshdr (elf_getscn (ebl->elf,
- shdr->sh_info),
- &destshdr_mem);
-
- printf (gettext ("RELOCATION RECORDS FOR [%s]:\n"
- "%-*s TYPE VALUE\n"),
- elf_strptr (ebl->elf, shstrndx, destshdr->sh_name),
- elfclass == ELFCLASS32 ? 8 : 16, gettext ("OFFSET"));
-
- /* Get the data of the section. */
- Elf_Data *data = elf_getdata (scn, NULL);
- if (data == NULL)
- continue;
-
- /* Get the symbol table information. */
- Elf_Scn *symscn = elf_getscn (ebl->elf, shdr->sh_link);
- GElf_Shdr symshdr_mem;
- GElf_Shdr *symshdr = gelf_getshdr (symscn, &symshdr_mem);
- Elf_Data *symdata = elf_getdata (symscn, NULL);
-
- /* Search for the optional extended section index table. */
- Elf_Data *xndxdata = NULL;
- Elf_Scn *xndxscn = NULL;
- while ((xndxscn = elf_nextscn (ebl->elf, xndxscn)) != NULL)
- {
- GElf_Shdr xndxshdr_mem;
- GElf_Shdr *xndxshdr;
-
- xndxshdr = gelf_getshdr (xndxscn, &xndxshdr_mem);
- if (xndxshdr != NULL && xndxshdr->sh_type == SHT_SYMTAB_SHNDX
- && xndxshdr->sh_link == elf_ndxscn (symscn))
- {
- /* Found it. */
- xndxdata = elf_getdata (xndxscn, NULL);
- break;
- }
- }
-
- if (shdr->sh_type == SHT_REL)
- show_relocs_rel (ebl, shdr, data, symdata, xndxdata,
- symshdr->sh_link, shstrndx);
- else
- show_relocs_rela (ebl, shdr, data, symdata, xndxdata,
- symshdr->sh_link, shstrndx);
- }
- }
-
- fputs_unlocked ("\n\n", stdout);
-
- return 0;
-}
-
-
-static int
-show_full_content (Ebl *ebl, const char *fname, uint32_t shstrndx)
-{
- Elf_Scn *scn = NULL;
- while ((scn = elf_nextscn (ebl->elf, scn)) != NULL)
- {
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
-
- if (shdr == NULL)
- INTERNAL_ERROR (fname);
-
- if (shdr->sh_type == SHT_PROGBITS && shdr->sh_size > 0)
- {
- if (! section_match (ebl->elf, elf_ndxscn (scn), shdr, shstrndx))
- continue;
-
- printf (gettext ("Contents of section %s:\n"),
- elf_strptr (ebl->elf, shstrndx, shdr->sh_name));
-
- /* Get the data of the section. */
- Elf_Data *data = elf_getdata (scn, NULL);
- if (data == NULL)
- continue;
-
- unsigned char *cp = data->d_buf;
- size_t cnt;
- for (cnt = 0; cnt + 16 < data->d_size; cp += 16, cnt += 16)
- {
- printf (" %04zx ", cnt);
-
- for (size_t inner = 0; inner < 16; inner += 4)
- printf ("%02hhx%02hhx%02hhx%02hhx ",
- cp[inner], cp[inner + 1], cp[inner + 2],
- cp[inner + 3]);
- fputc_unlocked (' ', stdout);
-
- for (size_t inner = 0; inner < 16; ++inner)
- fputc_unlocked (isascii (cp[inner]) && isprint (cp[inner])
- ? cp[inner] : '.', stdout);
- fputc_unlocked ('\n', stdout);
- }
-
- printf (" %04zx ", cnt);
-
- size_t remaining = data->d_size - cnt;
- size_t inner;
- for (inner = 0; inner + 4 <= remaining; inner += 4)
- printf ("%02hhx%02hhx%02hhx%02hhx ",
- cp[inner], cp[inner + 1], cp[inner + 2], cp[inner + 3]);
-
- for (; inner < remaining; ++inner)
- printf ("%02hhx", cp[inner]);
-
- for (inner = 2 * (16 - inner) + (16 - inner + 3) / 4 + 1; inner > 0;
- --inner)
- fputc_unlocked (' ', stdout);
-
- for (inner = 0; inner < remaining; ++inner)
- fputc_unlocked (isascii (cp[inner]) && isprint (cp[inner])
- ? cp[inner] : '.', stdout);
- fputc_unlocked ('\n', stdout);
-
- fputc_unlocked ('\n', stdout);
- }
- }
-
- return 0;
-}
-
-
-struct disasm_info
-{
- GElf_Addr addr;
- const uint8_t *cur;
- const uint8_t *last_end;
-};
-
-
-// XXX This is not the preferred output for all architectures. Needs
-// XXX customization, too.
-static int
-disasm_output (char *buf, size_t buflen, void *arg)
-{
- struct disasm_info *info = (struct disasm_info *) arg;
-
- printf ("%8" PRIx64 ": ", (uint64_t) info->addr);
- size_t cnt;
- for (cnt = 0; cnt < (size_t) MIN (info->cur - info->last_end, 8); ++cnt)
- printf (" %02" PRIx8, info->last_end[cnt]);
- printf ("%*s %.*s\n",
- (int) (8 - cnt) * 3 + 1, "", (int) buflen, buf);
-
- info->addr += cnt;
-
- /* We limit the number of bytes printed before the mnemonic to 8.
- Print the rest on a separate, following line. */
- if (info->cur - info->last_end > 8)
- {
- printf ("%8" PRIx64 ": ", (uint64_t) info->addr);
- for (; cnt < (size_t) (info->cur - info->last_end); ++cnt)
- printf (" %02" PRIx8, info->last_end[cnt]);
- putchar_unlocked ('\n');
- info->addr += info->cur - info->last_end - 8;
- }
-
- info->last_end = info->cur;
-
- return 0;
-}
-
-
-static int
-show_disasm (Ebl *ebl, const char *fname, uint32_t shstrndx)
-{
- DisasmCtx_t *ctx = disasm_begin (ebl, ebl->elf, NULL /* XXX TODO */);
- if (ctx == NULL)
- error (EXIT_FAILURE, 0, gettext ("cannot disassemble"));
-
- Elf_Scn *scn = NULL;
- while ((scn = elf_nextscn (ebl->elf, scn)) != NULL)
- {
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
-
- if (shdr == NULL)
- INTERNAL_ERROR (fname);
-
- if (shdr->sh_type == SHT_PROGBITS && shdr->sh_size > 0
- && (shdr->sh_flags & SHF_EXECINSTR) != 0)
- {
- if (! section_match (ebl->elf, elf_ndxscn (scn), shdr, shstrndx))
- continue;
-
- Elf_Data *data = elf_getdata (scn, NULL);
- if (data == NULL)
- continue;
-
- printf ("Disassembly of section %s:\n\n",
- elf_strptr (ebl->elf, shstrndx, shdr->sh_name));
-
- struct disasm_info info;
- info.addr = shdr->sh_addr;
- info.last_end = info.cur = data->d_buf;
-
- disasm_cb (ctx, &info.cur, info.cur + data->d_size, info.addr,
- "%7m %.1o,%.2o,%.3o%34a %l", disasm_output, &info,
- NULL /* XXX */);
- }
- }
-
- (void) disasm_end (ctx);
-
- return 0;
-}
-
-
-static int
-handle_elf (Elf *elf, const char *prefix, const char *fname,
- const char *suffix)
-{
-
- /* Get the backend for this object file type. */
- Ebl *ebl = ebl_openbackend (elf);
-
- printf ("%s: elf%d-%s\n\n",
- fname, gelf_getclass (elf) == ELFCLASS32 ? 32 : 64,
- ebl_backend_name (ebl));
-
- /* Create the full name of the file. */
- size_t prefix_len = prefix == NULL ? 0 : strlen (prefix);
- size_t suffix_len = suffix == NULL ? 0 : strlen (suffix);
- size_t fname_len = strlen (fname) + 1;
- char fullname[prefix_len + 1 + fname_len + suffix_len];
- char *cp = fullname;
- if (prefix != NULL)
- cp = mempcpy (cp, prefix, prefix_len);
- cp = mempcpy (cp, fname, fname_len);
- if (suffix != NULL)
- memcpy (cp - 1, suffix, suffix_len + 1);
-
- /* Get the section header string table index. */
- size_t shstrndx;
- if (elf_getshstrndx (ebl->elf, &shstrndx) < 0)
- error (EXIT_FAILURE, 0,
- gettext ("cannot get section header string table index"));
-
- int result = 0;
- if (print_disasm)
- result = show_disasm (ebl, fullname, shstrndx);
- if (print_relocs && !print_disasm)
- result = show_relocs (ebl, fullname, shstrndx);
- if (print_full_content)
- result = show_full_content (ebl, fullname, shstrndx);
-
- /* Close the ELF backend library descriptor. */
- ebl_closebackend (ebl);
-
- return result;
-}
-
-
-#include "debugpred.h"
diff --git a/src/ranlib.c b/src/ranlib.c
deleted file mode 100644
index a915e55..0000000
--- a/src/ranlib.c
+++ /dev/null
@@ -1,309 +0,0 @@
-/* Generate an index to speed access to archives.
- Copyright (C) 2005, 2006, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <ar.h>
-#include <argp.h>
-#include <assert.h>
-#include <errno.h>
-#include <error.h>
-#include <fcntl.h>
-#include <gelf.h>
-#include <libintl.h>
-#include <locale.h>
-#include <mcheck.h>
-#include <obstack.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <stdio_ext.h>
-#include <unistd.h>
-#include <sys/mman.h>
-#include <sys/param.h>
-#include <sys/stat.h>
-
-#include <system.h>
-
-#include "arlib.h"
-
-
-/* Prototypes for local functions. */
-static int handle_file (const char *fname);
-
-
-/* Name and version of program. */
-static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
-
-/* Bug report address. */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
-
-
-/* Definitions of arguments for argp functions. */
-static const struct argp_option options[] =
-{
- { NULL, 0, NULL, 0, NULL, 0 }
-};
-
-/* Short description of program. */
-static const char doc[] = N_("Generate an index to speed access to archives.");
-
-/* Strings for arguments in help texts. */
-static const char args_doc[] = N_("ARCHIVE");
-
-/* Data structure to communicate with argp functions. */
-static const struct argp argp =
-{
- options, NULL, args_doc, doc, NULL, NULL, NULL
-};
-
-
-int
-main (int argc, char *argv[])
-{
- /* Make memory leak detection possible. */
- mtrace ();
-
- /* We use no threads here which can interfere with handling a stream. */
- (void) __fsetlocking (stdin, FSETLOCKING_BYCALLER);
- (void) __fsetlocking (stdout, FSETLOCKING_BYCALLER);
- (void) __fsetlocking (stderr, FSETLOCKING_BYCALLER);
-
- /* Set locale. */
- (void) setlocale (LC_ALL, "");
-
- /* Make sure the message catalog can be found. */
- (void) bindtextdomain (PACKAGE_TARNAME, LOCALEDIR);
-
- /* Initialize the message catalog. */
- (void) textdomain (PACKAGE_TARNAME);
-
- /* Parse and process arguments. */
- int remaining;
- (void) argp_parse (&argp, argc, argv, ARGP_IN_ORDER, &remaining, NULL);
-
- /* Tell the library which version we are expecting. */
- (void) elf_version (EV_CURRENT);
-
- /* There must at least be one more parameter specifying the archive. */
- if (remaining == argc)
- {
- error (0, 0, gettext ("Archive name required"));
- argp_help (&argp, stderr, ARGP_HELP_SEE, "ranlib");
- exit (EXIT_FAILURE);
- }
-
- /* We accept the names of multiple archives. */
- int status = 0;
- do
- status |= handle_file (argv[remaining]);
- while (++remaining < argc);
-
- return status;
-}
-
-
-/* Print the version information. */
-static void
-print_version (FILE *stream, struct argp_state *state __attribute__ ((unused)))
-{
- fprintf (stream, "ranlib (%s) %s\n", PACKAGE_NAME, PACKAGE_VERSION);
- fprintf (stream, gettext ("\
-Copyright (C) %s Red Hat, Inc.\n\
-This is free software; see the source for copying conditions. There is NO\n\
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
-"), "2008");
- fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper");
-}
-
-
-static int
-copy_content (Elf *elf, int newfd, off_t off, size_t n)
-{
- size_t len;
- char *rawfile = elf_rawfile (elf, &len);
-
- assert (off + n <= len);
-
- /* Tell the kernel we will read all the pages sequentially. */
- size_t ps = sysconf (_SC_PAGESIZE);
- if (n > 2 * ps)
- posix_madvise (rawfile + (off & ~(ps - 1)), n, POSIX_MADV_SEQUENTIAL);
-
- return write_retry (newfd, rawfile + off, n) != (ssize_t) n;
-}
-
-
-/* Handle a file given on the command line. */
-static int
-handle_file (const char *fname)
-{
- int fd = open (fname, O_RDONLY);
- if (fd == -1)
- {
- error (0, errno, gettext ("cannot open '%s'"), fname);
- return 1;
- }
-
- struct stat st;
- if (fstat (fd, &st) != 0)
- {
- error (0, errno, gettext ("cannot stat '%s'"), fname);
- close (fd);
- return 1;
- }
-
- /* First we walk through the file, looking for all ELF files to
- collect symbols from. */
- Elf *arelf = elf_begin (fd, ELF_C_READ_MMAP, NULL);
- if (arelf == NULL)
- {
- error (0, 0, gettext ("cannot create ELF descriptor for '%s': %s"),
- fname, elf_errmsg (-1));
- close (fd);
- return 1;
- }
-
- if (elf_kind (arelf) != ELF_K_AR)
- {
- error (0, 0, gettext ("'%s' is no archive"), fname);
- elf_end (arelf);
- close (fd);
- return 1;
- }
-
- arlib_init ();
-
- /* Iterate over the content of the archive. */
- off_t index_off = -1;
- size_t index_size = 0;
- off_t cur_off = SARMAG;
- Elf *elf;
- Elf_Cmd cmd = ELF_C_READ_MMAP;
- while ((elf = elf_begin (fd, cmd, arelf)) != NULL)
- {
- Elf_Arhdr *arhdr = elf_getarhdr (elf);
- assert (arhdr != NULL);
-
- /* If this is the index, remember the location. */
- if (strcmp (arhdr->ar_name, "/") == 0)
- {
- index_off = elf_getaroff (elf);
- index_size = arhdr->ar_size;
- }
- else
- {
- arlib_add_symbols (elf, fname, arhdr->ar_name, cur_off);
- cur_off += (((arhdr->ar_size + 1) & ~((off_t) 1))
- + sizeof (struct ar_hdr));
- }
-
- /* Get next archive element. */
- cmd = elf_next (elf);
- if (elf_end (elf) != 0)
- error (0, 0, gettext ("error while freeing sub-ELF descriptor: %s"),
- elf_errmsg (-1));
- }
-
- arlib_finalize ();
-
- /* If the file contains no symbols we need not do anything. */
- int status = 0;
- if (symtab.symsnamelen != 0
- /* We have to rewrite the file also if it initially had an index
- but now does not need one anymore. */
- || (symtab.symsnamelen == 0 && index_size != 0))
- {
- /* Create a new, temporary file in the same directory as the
- original file. */
- char tmpfname[strlen (fname) + 7];
- strcpy (stpcpy (tmpfname, fname), "XXXXXX");
- int newfd = mkstemp (tmpfname);
- if (unlikely (newfd == -1))
- {
- nonew:
- error (0, errno, gettext ("cannot create new file"));
- status = 1;
- }
- else
- {
- /* Create the header. */
- if (unlikely (write_retry (newfd, ARMAG, SARMAG) != SARMAG))
- {
- // XXX Use /prof/self/fd/%d ???
- nonew_unlink:
- unlink (tmpfname);
- if (newfd != -1)
- close (newfd);
- goto nonew;
- }
-
- /* Create the new file. There are three parts as far we are
- concerned: 1. original context before the index, 2. the
- new index, 3. everything after the new index. */
- off_t rest_off;
- if (index_off != -1)
- rest_off = (index_off + sizeof (struct ar_hdr)
- + ((index_size + 1) & ~1ul));
- else
- rest_off = SARMAG;
-
- if ((symtab.symsnamelen != 0
- && ((write_retry (newfd, symtab.symsoff,
- symtab.symsofflen)
- != (ssize_t) symtab.symsofflen)
- || (write_retry (newfd, symtab.symsname,
- symtab.symsnamelen)
- != (ssize_t) symtab.symsnamelen)))
- /* Even if the original file had content before the
- symbol table, we write it in the correct order. */
- || (index_off > SARMAG
- && copy_content (arelf, newfd, SARMAG, index_off - SARMAG))
- || copy_content (arelf, newfd, rest_off, st.st_size - rest_off)
- /* Set the mode of the new file to the same values the
- original file has. */
- || fchmod (newfd, st.st_mode & ALLPERMS) != 0
- /* Never complain about fchown failing. */
- || (({asm ("" :: "r" (fchown (newfd, st.st_uid, st.st_gid))); }),
- close (newfd) != 0)
- || (newfd = -1, rename (tmpfname, fname) != 0))
- goto nonew_unlink;
- }
- }
-
- elf_end (arelf);
-
- arlib_fini ();
-
- close (fd);
-
- return status;
-}
-
-
-#include "debugpred.h"
diff --git a/src/readelf.c b/src/readelf.c
deleted file mode 100644
index 2797a84..0000000
--- a/src/readelf.c
+++ /dev/null
@@ -1,6445 +0,0 @@
-/* Print information from ELF file in human-readable form.
- Copyright (C) 1999,2000,2001,2002,2003,2004,2005,2006,2007,2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1999.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <argp.h>
-#include <assert.h>
-#include <ctype.h>
-#include <dwarf.h>
-#include <errno.h>
-#include <error.h>
-#include <fcntl.h>
-#include <gelf.h>
-#include <inttypes.h>
-#include <langinfo.h>
-#include <libdw.h>
-#include <libdwfl.h>
-#include <libintl.h>
-#include <locale.h>
-#include <stdarg.h>
-#include <stdbool.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <unistd.h>
-#include <sys/param.h>
-
-#include <system.h>
-#include "../libelf/libelfP.h"
-#include "../libelf/common.h"
-#include "../libebl/libeblP.h"
-#include "../libdw/libdwP.h"
-#include "../libdwfl/libdwflP.h"
-#include "../libdw/memory-access.h"
-
-
-/* Name and version of program. */
-static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
-
-/* Bug report address. */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
-
-/* Definitions of arguments for argp functions. */
-static const struct argp_option options[] =
-{
- { NULL, 0, NULL, 0, N_("Output selection:"), 0 },
- { "all", 'a', NULL, 0, N_("Equivalent to: -h -l"), 0 },
- { "dynamic", 'd', NULL, 0, N_("Display the dynamic segment"), 0 },
- { "file-header", 'h', NULL, 0, N_("Display the ELF file header"), 0 },
- { "histogram", 'I', NULL, 0,
- N_("Display histogram of bucket list lengths"), 0 },
- { "program-headers", 'l', NULL, 0, N_("Display the program headers"), 0 },
- { "segments", 'l', NULL, OPTION_ALIAS | OPTION_HIDDEN, NULL, 0 },
- { "relocs", 'r', NULL, 0, N_("Display relocations"), 0 },
- { "section-headers", 'S', NULL, 0, N_("Display the sections' header"), 0 },
- { "sections", 'S', NULL, OPTION_ALIAS | OPTION_HIDDEN, NULL, 0 },
- { "symbols", 's', NULL, 0, N_("Display the symbol table"), 0 },
- { "version-info", 'V', NULL, 0, N_("Display versioning information"), 0 },
- { "debug-dump", 'w', "SECTION", OPTION_ARG_OPTIONAL,
- N_("Display DWARF section content. SECTION can be one of abbrev, "
- "aranges, frame, info, loc, line, ranges, pubnames, str, or macinfo."),
- 0 },
- { "notes", 'n', NULL, 0, N_("Display the core notes"), 0 },
- { "arch-specific", 'A', NULL, 0,
- N_("Display architecture specific information (if any)"), 0 },
- { "hex-dump", 'x', "SECTION", 0,
- N_("Dump the uninterpreted contents of SECTION, by number or name"), 0 },
- { "strings", 'p', "SECTION", OPTION_ARG_OPTIONAL,
- N_("Print string contents of sections"), 0 },
- { "string-dump", 'p', NULL, OPTION_ALIAS | OPTION_HIDDEN, NULL, 0 },
- { "archive-index", 'c', NULL, 0,
- N_("Display the symbol index of an archive"), 0 },
-
- { NULL, 0, NULL, 0, N_("Output control:"), 0 },
-
- { NULL, 0, NULL, 0, NULL, 0 }
-};
-
-/* Short description of program. */
-static const char doc[] = N_("\
-Print information from ELF file in human-readable form.");
-
-/* Strings for arguments in help texts. */
-static const char args_doc[] = N_("FILE...");
-
-/* Prototype for option handler. */
-static error_t parse_opt (int key, char *arg, struct argp_state *state);
-
-/* Data structure to communicate with argp functions. */
-static struct argp argp =
-{
- options, parse_opt, args_doc, doc, NULL, NULL, NULL
-};
-
-
-/* Flags set by the option controlling the output. */
-
-/* True if dynamic segment should be printed. */
-static bool print_dynamic_table;
-
-/* True if the file header should be printed. */
-static bool print_file_header;
-
-/* True if the program headers should be printed. */
-static bool print_program_header;
-
-/* True if relocations should be printed. */
-static bool print_relocations;
-
-/* True if the section headers should be printed. */
-static bool print_section_header;
-
-/* True if the symbol table should be printed. */
-static bool print_symbol_table;
-
-/* True if the version information should be printed. */
-static bool print_version_info;
-
-/* True if section groups should be printed. */
-static bool print_section_groups;
-
-/* True if bucket list length histogram should be printed. */
-static bool print_histogram;
-
-/* True if the architecture specific data should be printed. */
-static bool print_arch;
-
-/* True if note section content should be printed. */
-static bool print_notes;
-
-/* True if SHF_STRINGS section content should be printed. */
-static bool print_string_sections;
-
-/* True if archive index should be printed. */
-static bool print_archive_index;
-
-/* True if any of the control options except print_archive_index is set. */
-static bool any_control_option;
-
-/* Select printing of debugging sections. */
-static enum section_e
-{
- section_abbrev = 1, /* .debug_abbrev */
- section_aranges = 2, /* .debug_aranges */
- section_frame = 4, /* .debug_frame or .eh_frame */
- section_info = 8, /* .debug_info */
- section_line = 16, /* .debug_line */
- section_loc = 32, /* .debug_loc */
- section_pubnames = 64,/* .debug_pubnames */
- section_str = 128, /* .debug_str */
- section_macinfo = 256,/* .debug_macinfo */
- section_ranges = 512, /* .debug_ranges */
- section_all = (section_abbrev | section_aranges | section_frame
- | section_info | section_line | section_loc
- | section_pubnames | section_str | section_macinfo
- | section_ranges)
-} print_debug_sections;
-
-/* Select hex dumping of sections. */
-static struct section_argument *dump_data_sections;
-static struct section_argument **dump_data_sections_tail = &dump_data_sections;
-
-/* Select string dumping of sections. */
-static struct section_argument *string_sections;
-static struct section_argument **string_sections_tail = &string_sections;
-
-struct section_argument
-{
- struct section_argument *next;
- const char *arg;
-};
-
-/* Number of sections in the file. */
-static size_t shnum;
-
-
-/* Declarations of local functions. */
-static void process_file (int fd, const char *fname, bool only_one);
-static void process_elf_file (Dwfl_Module *dwflmod, int fd);
-static void print_ehdr (Ebl *ebl, GElf_Ehdr *ehdr);
-static void print_shdr (Ebl *ebl, GElf_Ehdr *ehdr);
-static void print_phdr (Ebl *ebl, GElf_Ehdr *ehdr);
-static void print_scngrp (Ebl *ebl);
-static void print_dynamic (Ebl *ebl, GElf_Ehdr *ehdr);
-static void print_relocs (Ebl *ebl);
-static void handle_relocs_rel (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr);
-static void handle_relocs_rela (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr);
-static void print_symtab (Ebl *ebl, int type);
-static void handle_symtab (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr);
-static void print_verinfo (Ebl *ebl);
-static void handle_verneed (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr);
-static void handle_verdef (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr);
-static void handle_versym (Ebl *ebl, Elf_Scn *scn,
- GElf_Shdr *shdr);
-static void print_debug (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr);
-static void handle_hash (Ebl *ebl);
-static void handle_notes (Ebl *ebl, GElf_Ehdr *ehdr);
-static void print_liblist (Ebl *ebl);
-static void print_attributes (Ebl *ebl, const GElf_Ehdr *ehdr);
-static void dump_data (Ebl *ebl);
-static void dump_strings (Ebl *ebl);
-static void print_strings (Ebl *ebl);
-static void dump_archive_index (Elf *, const char *);
-
-
-int
-main (int argc, char *argv[])
-{
- /* Set locale. */
- setlocale (LC_ALL, "");
-
- /* Initialize the message catalog. */
- textdomain (PACKAGE_TARNAME);
-
- /* Parse and process arguments. */
- int remaining;
- argp_parse (&argp, argc, argv, 0, &remaining, NULL);
-
- /* Before we start tell the ELF library which version we are using. */
- elf_version (EV_CURRENT);
-
- /* Now process all the files given at the command line. */
- bool only_one = remaining + 1 == argc;
- do
- {
- /* Open the file. */
- int fd = open (argv[remaining], O_RDONLY);
- if (fd == -1)
- {
- error (0, errno, gettext ("cannot open input file"));
- continue;
- }
-
- process_file (fd, argv[remaining], only_one);
-
- close (fd);
- }
- while (++remaining < argc);
-
- return error_message_count != 0;
-}
-
-
-/* Handle program arguments. */
-static error_t
-parse_opt (int key, char *arg,
- struct argp_state *state __attribute__ ((unused)))
-{
- switch (key)
- {
- case 'a':
- print_file_header = true;
- print_program_header = true;
- print_relocations = true;
- print_section_header = true;
- print_symbol_table = true;
- print_version_info = true;
- print_dynamic_table = true;
- print_section_groups = true;
- print_histogram = true;
- print_arch = true;
- print_notes = true;
- any_control_option = true;
- break;
- case 'A':
- print_arch = true;
- any_control_option = true;
- break;
- case 'd':
- print_dynamic_table = true;
- any_control_option = true;
- break;
- case 'g':
- print_section_groups = true;
- any_control_option = true;
- break;
- case 'h':
- print_file_header = true;
- any_control_option = true;
- break;
- case 'I':
- print_histogram = true;
- any_control_option = true;
- break;
- case 'l':
- print_program_header = true;
- any_control_option = true;
- break;
- case 'n':
- print_notes = true;
- any_control_option = true;
- break;
- case 'r':
- print_relocations = true;
- any_control_option = true;
- break;
- case 'S':
- print_section_header = true;
- any_control_option = true;
- break;
- case 's':
- print_symbol_table = true;
- any_control_option = true;
- break;
- case 'V':
- print_version_info = true;
- any_control_option = true;
- break;
- case 'c':
- print_archive_index = true;
- break;
- case 'w':
- if (arg == NULL)
- print_debug_sections = section_all;
- else if (strcmp (arg, "abbrev") == 0)
- print_debug_sections |= section_abbrev;
- else if (strcmp (arg, "aranges") == 0)
- print_debug_sections |= section_aranges;
- else if (strcmp (arg, "ranges") == 0)
- print_debug_sections |= section_ranges;
- else if (strcmp (arg, "frame") == 0)
- print_debug_sections |= section_frame;
- else if (strcmp (arg, "info") == 0)
- print_debug_sections |= section_info;
- else if (strcmp (arg, "loc") == 0)
- print_debug_sections |= section_loc;
- else if (strcmp (arg, "line") == 0)
- print_debug_sections |= section_line;
- else if (strcmp (arg, "pubnames") == 0)
- print_debug_sections |= section_pubnames;
- else if (strcmp (arg, "str") == 0)
- print_debug_sections |= section_str;
- else if (strcmp (arg, "macinfo") == 0)
- print_debug_sections |= section_macinfo;
- else
- {
- fprintf (stderr, gettext ("Unknown DWARF debug section `%s'.\n"),
- arg);
- argp_help (&argp, stderr, ARGP_HELP_SEE,
- program_invocation_short_name);
- exit (1);
- }
- any_control_option = true;
- break;
- case 'p':
- any_control_option = true;
- if (arg == NULL)
- {
- print_string_sections = true;
- break;
- }
- /* Fall through. */
- case 'x':
- {
- struct section_argument *a = xmalloc (sizeof *a);
- a->arg = arg;
- a->next = NULL;
- struct section_argument ***tailp
- = key == 'x' ? &dump_data_sections_tail : &string_sections_tail;
- **tailp = a;
- *tailp = &a->next;
- }
- any_control_option = true;
- break;
- case ARGP_KEY_NO_ARGS:
- fputs (gettext ("Missing file name.\n"), stderr);
- goto do_argp_help;
- case ARGP_KEY_FINI:
- if (! any_control_option && ! print_archive_index)
- {
- fputs (gettext ("No operation specified.\n"), stderr);
- do_argp_help:
- argp_help (&argp, stderr, ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR,
- program_invocation_short_name);
- exit (1);
- }
- break;
- default:
- return ARGP_ERR_UNKNOWN;
- }
- return 0;
-}
-
-
-/* Print the version information. */
-static void
-print_version (FILE *stream, struct argp_state *state __attribute__ ((unused)))
-{
- fprintf (stream, "readelf (%s) %s\n", PACKAGE_NAME, PACKAGE_VERSION);
- fprintf (stream, gettext ("\
-Copyright (C) %s Red Hat, Inc.\n\
-This is free software; see the source for copying conditions. There is NO\n\
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
-"), "2008");
- fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper");
-}
-
-
-/* Check if the file is an archive, and if so dump its index. */
-static void
-check_archive_index (int fd, const char *fname, bool only_one)
-{
- /* Create an `Elf' descriptor. */
- Elf *elf = elf_begin (fd, ELF_C_READ_MMAP, NULL);
- if (elf == NULL)
- error (0, 0, gettext ("cannot generate Elf descriptor: %s"),
- elf_errmsg (-1));
- else
- {
- if (elf_kind (elf) == ELF_K_AR)
- {
- if (!only_one)
- printf ("\n%s:\n\n", fname);
- dump_archive_index (elf, fname);
- }
- else
- error (0, 0,
- gettext ("'%s' is not an archive, cannot print archive index"),
- fname);
-
- /* Now we can close the descriptor. */
- if (elf_end (elf) != 0)
- error (0, 0, gettext ("error while closing Elf descriptor: %s"),
- elf_errmsg (-1));
- }
-}
-
-/* Trivial callback used for checking if we opened an archive. */
-static int
-count_dwflmod (Dwfl_Module *dwflmod __attribute__ ((unused)),
- void **userdata __attribute__ ((unused)),
- const char *name __attribute__ ((unused)),
- Dwarf_Addr base __attribute__ ((unused)),
- void *arg)
-{
- if (*(bool *) arg)
- return DWARF_CB_ABORT;
- *(bool *) arg = true;
- return DWARF_CB_OK;
-}
-
-struct process_dwflmod_args
-{
- int fd;
- bool only_one;
-};
-
-static int
-process_dwflmod (Dwfl_Module *dwflmod,
- void **userdata __attribute__ ((unused)),
- const char *name __attribute__ ((unused)),
- Dwarf_Addr base __attribute__ ((unused)),
- void *arg)
-{
- const struct process_dwflmod_args *a = arg;
-
- /* Print the file name. */
- if (!a->only_one)
- {
- const char *fname;
- dwfl_module_info (dwflmod, NULL, NULL, NULL, NULL, NULL, &fname, NULL);
-
- printf ("\n%s:\n\n", fname);
- }
-
- process_elf_file (dwflmod, a->fd);
-
- return DWARF_CB_OK;
-}
-
-/* Stub libdwfl callback, only the ELF handle already open is ever used. */
-static int
-find_no_debuginfo (Dwfl_Module *mod __attribute__ ((unused)),
- void **userdata __attribute__ ((unused)),
- const char *modname __attribute__ ((unused)),
- Dwarf_Addr base __attribute__ ((unused)),
- const char *file_name __attribute__ ((unused)),
- const char *debuglink_file __attribute__ ((unused)),
- GElf_Word debuglink_crc __attribute__ ((unused)),
- char **debuginfo_file_name __attribute__ ((unused)))
-{
- return -1;
-}
-
-/* Process one input file. */
-static void
-process_file (int fd, const char *fname, bool only_one)
-{
- if (print_archive_index)
- check_archive_index (fd, fname, only_one);
-
- if (!any_control_option)
- return;
-
- /* Duplicate an fd for dwfl_report_offline to swallow. */
- int dwfl_fd = dup (fd);
- if (unlikely (dwfl_fd < 0))
- error (EXIT_FAILURE, errno, "dup");
-
- /* Use libdwfl in a trivial way to open the libdw handle for us.
- This takes care of applying relocations to DWARF data in ET_REL files. */
- static const Dwfl_Callbacks callbacks =
- {
- .section_address = dwfl_offline_section_address,
- .find_debuginfo = find_no_debuginfo
- };
- Dwfl *dwfl = dwfl_begin (&callbacks);
- if (likely (dwfl != NULL))
- /* Let 0 be the logical address of the file (or first in archive). */
- dwfl->offline_next_address = 0;
- if (dwfl_report_offline (dwfl, fname, fname, dwfl_fd) == NULL)
- {
- struct stat64 st;
- if (fstat64 (fd, &st) != 0)
- error (0, errno, gettext ("cannot stat input file"));
- else if (unlikely (st.st_size == 0))
- error (0, 0, gettext ("input file is empty"));
- else
- error (0, 0, gettext ("failed reading '%s': %s"),
- fname, dwfl_errmsg (-1));
- }
- else
- {
- dwfl_report_end (dwfl, NULL, NULL);
-
- if (only_one)
- {
- /* Clear ONLY_ONE if we have multiple modules, from an archive. */
- bool seen = false;
- only_one = dwfl_getmodules (dwfl, &count_dwflmod, &seen, 0) == 0;
- }
-
- /* Process the one or more modules gleaned from this file. */
- struct process_dwflmod_args a = { .fd = fd, .only_one = only_one };
- dwfl_getmodules (dwfl, &process_dwflmod, &a, 0);
- }
- dwfl_end (dwfl);
-}
-
-
-/* Process one ELF file. */
-static void
-process_elf_file (Dwfl_Module *dwflmod, int fd)
-{
- GElf_Addr dwflbias;
- Elf *elf = dwfl_module_getelf (dwflmod, &dwflbias);
-
- GElf_Ehdr ehdr_mem;
- GElf_Ehdr *ehdr = gelf_getehdr (elf, &ehdr_mem);
-
- if (ehdr == NULL)
- {
- elf_error:
- error (0, 0, gettext ("cannot read ELF header: %s"), elf_errmsg (-1));
- return;
- }
-
- Ebl *ebl = ebl_openbackend (elf);
- if (unlikely (ebl == NULL))
- {
- ebl_error:
- error (0, errno, gettext ("cannot create EBL handle"));
- return;
- }
-
- /* Determine the number of sections. */
- if (unlikely (elf_getshnum (ebl->elf, &shnum) < 0))
- error (EXIT_FAILURE, 0,
- gettext ("cannot determine number of sections: %s"),
- elf_errmsg (-1));
-
- /* For an ET_REL file, libdwfl has adjusted the in-core shdrs
- and may have applied relocation to some sections.
- So we need to get a fresh Elf handle on the file to display those. */
- bool print_unrelocated = (print_section_header
- || print_relocations
- || dump_data_sections != NULL
- || print_notes);
-
- Elf *pure_elf = NULL;
- Ebl *pure_ebl = ebl;
- if (ehdr->e_type == ET_REL && print_unrelocated)
- {
- /* Read the file afresh. */
- off64_t aroff = elf_getaroff (elf);
- pure_elf = elf_begin (fd, ELF_C_READ_MMAP, NULL);
- if (aroff > 0)
- {
- /* Archive member. */
- (void) elf_rand (pure_elf, aroff);
- Elf *armem = elf_begin (-1, ELF_C_READ_MMAP, pure_elf);
- elf_end (pure_elf);
- pure_elf = armem;
- }
- if (pure_elf == NULL)
- goto elf_error;
- pure_ebl = ebl_openbackend (pure_elf);
- if (pure_ebl == NULL)
- goto ebl_error;
- }
-
- if (print_file_header)
- print_ehdr (ebl, ehdr);
- if (print_section_header)
- print_shdr (pure_ebl, ehdr);
- if (print_program_header)
- print_phdr (ebl, ehdr);
- if (print_section_groups)
- print_scngrp (ebl);
- if (print_dynamic_table)
- print_dynamic (ebl, ehdr);
- if (print_relocations)
- print_relocs (pure_ebl);
- if (print_histogram)
- handle_hash (ebl);
- if (print_symbol_table)
- print_symtab (ebl, SHT_DYNSYM);
- if (print_version_info)
- print_verinfo (ebl);
- if (print_symbol_table)
- print_symtab (ebl, SHT_SYMTAB);
- if (print_arch)
- print_liblist (ebl);
- if (print_arch)
- print_attributes (ebl, ehdr);
- if (dump_data_sections != NULL)
- dump_data (pure_ebl);
- if (string_sections != NULL)
- dump_strings (ebl);
- if (print_debug_sections != 0)
- print_debug (dwflmod, ebl, ehdr);
- if (print_notes)
- handle_notes (pure_ebl, ehdr);
- if (print_string_sections)
- print_strings (ebl);
-
- ebl_closebackend (ebl);
-
- if (pure_ebl != ebl)
- {
- ebl_closebackend (pure_ebl);
- elf_end (pure_elf);
- }
-}
-
-
-/* Print file type. */
-static void
-print_file_type (unsigned short int e_type)
-{
- if (likely (e_type <= ET_CORE))
- {
- static const char *const knowntypes[] =
- {
- N_("NONE (None)"),
- N_("REL (Relocatable file)"),
- N_("EXEC (Executable file)"),
- N_("DYN (Shared object file)"),
- N_("CORE (Core file)")
- };
- puts (gettext (knowntypes[e_type]));
- }
- else if (e_type >= ET_LOOS && e_type <= ET_HIOS)
- printf (gettext ("OS Specific: (%x)\n"), e_type);
- else if (e_type >= ET_LOPROC /* && e_type <= ET_HIPROC always true */)
- printf (gettext ("Processor Specific: (%x)\n"), e_type);
- else
- puts ("???");
-}
-
-
-/* Print ELF header. */
-static void
-print_ehdr (Ebl *ebl, GElf_Ehdr *ehdr)
-{
- fputs_unlocked (gettext ("ELF Header:\n Magic: "), stdout);
- for (size_t cnt = 0; cnt < EI_NIDENT; ++cnt)
- printf (" %02hhx", ehdr->e_ident[cnt]);
-
- printf (gettext ("\n Class: %s\n"),
- ehdr->e_ident[EI_CLASS] == ELFCLASS32 ? "ELF32"
- : ehdr->e_ident[EI_CLASS] == ELFCLASS64 ? "ELF64"
- : "\?\?\?");
-
- printf (gettext (" Data: %s\n"),
- ehdr->e_ident[EI_DATA] == ELFDATA2LSB
- ? "2's complement, little endian"
- : ehdr->e_ident[EI_DATA] == ELFDATA2MSB
- ? "2's complement, big endian" : "\?\?\?");
-
- printf (gettext (" Ident Version: %hhd %s\n"),
- ehdr->e_ident[EI_VERSION],
- ehdr->e_ident[EI_VERSION] == EV_CURRENT ? gettext ("(current)")
- : "(\?\?\?)");
-
- char buf[512];
- printf (gettext (" OS/ABI: %s\n"),
- ebl_osabi_name (ebl, ehdr->e_ident[EI_OSABI], buf, sizeof (buf)));
-
- printf (gettext (" ABI Version: %hhd\n"),
- ehdr->e_ident[EI_ABIVERSION]);
-
- fputs_unlocked (gettext (" Type: "), stdout);
- print_file_type (ehdr->e_type);
-
- printf (gettext (" Machine: %s\n"), ebl->name);
-
- printf (gettext (" Version: %d %s\n"),
- ehdr->e_version,
- ehdr->e_version == EV_CURRENT ? gettext ("(current)") : "(\?\?\?)");
-
- printf (gettext (" Entry point address: %#" PRIx64 "\n"),
- ehdr->e_entry);
-
- printf (gettext (" Start of program headers: %" PRId64 " %s\n"),
- ehdr->e_phoff, gettext ("(bytes into file)"));
-
- printf (gettext (" Start of section headers: %" PRId64 " %s\n"),
- ehdr->e_shoff, gettext ("(bytes into file)"));
-
- printf (gettext (" Flags: %s\n"),
- ebl_machine_flag_name (ebl, ehdr->e_flags, buf, sizeof (buf)));
-
- printf (gettext (" Size of this header: %" PRId16 " %s\n"),
- ehdr->e_ehsize, gettext ("(bytes)"));
-
- printf (gettext (" Size of program header entries: %" PRId16 " %s\n"),
- ehdr->e_phentsize, gettext ("(bytes)"));
-
- printf (gettext (" Number of program headers entries: %" PRId16 "\n"),
- ehdr->e_phnum);
-
- printf (gettext (" Size of section header entries: %" PRId16 " %s\n"),
- ehdr->e_shentsize, gettext ("(bytes)"));
-
- printf (gettext (" Number of section headers entries: %" PRId16),
- ehdr->e_shnum);
- if (ehdr->e_shnum == 0)
- {
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (elf_getscn (ebl->elf, 0), &shdr_mem);
- if (shdr != NULL)
- printf (gettext (" (%" PRIu32 " in [0].sh_size)"),
- (uint32_t) shdr->sh_size);
- else
- fputs_unlocked (gettext (" ([0] not available)"), stdout);
- }
- fputc_unlocked ('\n', stdout);
-
- if (unlikely (ehdr->e_shstrndx == SHN_XINDEX))
- {
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (elf_getscn (ebl->elf, 0), &shdr_mem);
- if (shdr != NULL)
- /* We managed to get the zeroth section. */
- snprintf (buf, sizeof (buf), gettext (" (%" PRIu32 " in [0].sh_link)"),
- (uint32_t) shdr->sh_link);
- else
- {
- strncpy (buf, gettext (" ([0] not available)"), sizeof (buf));
- buf[sizeof (buf) - 1] = '\0';
- }
-
- printf (gettext (" Section header string table index: XINDEX%s\n\n"),
- buf);
- }
- else
- printf (gettext (" Section header string table index: %" PRId16 "\n\n"),
- ehdr->e_shstrndx);
-}
-
-
-static const char *
-get_visibility_type (int value)
-{
- switch (value)
- {
- case STV_DEFAULT:
- return "DEFAULT";
- case STV_INTERNAL:
- return "INTERNAL";
- case STV_HIDDEN:
- return "HIDDEN";
- case STV_PROTECTED:
- return "PROTECTED";
- default:
- return "???";
- }
-}
-
-
-/* Print the section headers. */
-static void
-print_shdr (Ebl *ebl, GElf_Ehdr *ehdr)
-{
- size_t cnt;
- size_t shstrndx;
-
- if (! print_file_header)
- printf (gettext ("\
-There are %d section headers, starting at offset %#" PRIx64 ":\n\
-\n"),
- ehdr->e_shnum, ehdr->e_shoff);
-
- /* Get the section header string table index. */
- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- gettext ("cannot get section header string table index"));
-
- puts (gettext ("Section Headers:"));
-
- if (ehdr->e_ident[EI_CLASS] == ELFCLASS32)
- puts (gettext ("[Nr] Name Type Addr Off Size ES Flags Lk Inf Al"));
- else
- puts (gettext ("[Nr] Name Type Addr Off Size ES Flags Lk Inf Al"));
-
- for (cnt = 0; cnt < shnum; ++cnt)
- {
- Elf_Scn *scn = elf_getscn (ebl->elf, cnt);
-
- if (unlikely (scn == NULL))
- error (EXIT_FAILURE, 0, gettext ("cannot get section: %s"),
- elf_errmsg (-1));
-
- /* Get the section header. */
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
- if (unlikely (shdr == NULL))
- error (EXIT_FAILURE, 0, gettext ("cannot get section header: %s"),
- elf_errmsg (-1));
-
- char flagbuf[20];
- char *cp = flagbuf;
- if (shdr->sh_flags & SHF_WRITE)
- *cp++ = 'W';
- if (shdr->sh_flags & SHF_ALLOC)
- *cp++ = 'A';
- if (shdr->sh_flags & SHF_EXECINSTR)
- *cp++ = 'X';
- if (shdr->sh_flags & SHF_MERGE)
- *cp++ = 'M';
- if (shdr->sh_flags & SHF_STRINGS)
- *cp++ = 'S';
- if (shdr->sh_flags & SHF_INFO_LINK)
- *cp++ = 'I';
- if (shdr->sh_flags & SHF_LINK_ORDER)
- *cp++ = 'L';
- if (shdr->sh_flags & SHF_OS_NONCONFORMING)
- *cp++ = 'N';
- if (shdr->sh_flags & SHF_GROUP)
- *cp++ = 'G';
- if (shdr->sh_flags & SHF_TLS)
- *cp++ = 'T';
- if (shdr->sh_flags & SHF_ORDERED)
- *cp++ = 'O';
- if (shdr->sh_flags & SHF_EXCLUDE)
- *cp++ = 'E';
- *cp = '\0';
-
- char buf[128];
- printf ("[%2zu] %-20s %-12s %0*" PRIx64 " %0*" PRIx64 " %0*" PRIx64
- " %2" PRId64 " %-5s %2" PRId32 " %3" PRId32
- " %2" PRId64 "\n",
- cnt,
- elf_strptr (ebl->elf, shstrndx, shdr->sh_name)
- ?: "<corrupt>",
- ebl_section_type_name (ebl, shdr->sh_type, buf, sizeof (buf)),
- ehdr->e_ident[EI_CLASS] == ELFCLASS32 ? 8 : 16, shdr->sh_addr,
- ehdr->e_ident[EI_CLASS] == ELFCLASS32 ? 6 : 8, shdr->sh_offset,
- ehdr->e_ident[EI_CLASS] == ELFCLASS32 ? 6 : 8, shdr->sh_size,
- shdr->sh_entsize, flagbuf, shdr->sh_link, shdr->sh_info,
- shdr->sh_addralign);
- }
-
- fputc_unlocked ('\n', stdout);
-}
-
-
-/* Print the program header. */
-static void
-print_phdr (Ebl *ebl, GElf_Ehdr *ehdr)
-{
- if (ehdr->e_phnum == 0)
- /* No program header, this is OK in relocatable objects. */
- return;
-
- puts (gettext ("Program Headers:"));
- if (ehdr->e_ident[EI_CLASS] == ELFCLASS32)
- puts (gettext ("\
- Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align"));
- else
- puts (gettext ("\
- Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align"));
-
- /* Process all program headers. */
- bool has_relro = false;
- GElf_Addr relro_from = 0;
- GElf_Addr relro_to = 0;
- for (size_t cnt = 0; cnt < ehdr->e_phnum; ++cnt)
- {
- char buf[128];
- GElf_Phdr mem;
- GElf_Phdr *phdr = gelf_getphdr (ebl->elf, cnt, &mem);
-
- /* If for some reason the header cannot be returned show this. */
- if (unlikely (phdr == NULL))
- {
- puts (" ???");
- continue;
- }
-
- printf (" %-14s 0x%06" PRIx64 " 0x%0*" PRIx64 " 0x%0*" PRIx64
- " 0x%06" PRIx64 " 0x%06" PRIx64 " %c%c%c 0x%" PRIx64 "\n",
- ebl_segment_type_name (ebl, phdr->p_type, buf, sizeof (buf)),
- phdr->p_offset,
- ehdr->e_ident[EI_CLASS] == ELFCLASS32 ? 8 : 16, phdr->p_vaddr,
- ehdr->e_ident[EI_CLASS] == ELFCLASS32 ? 8 : 16, phdr->p_paddr,
- phdr->p_filesz,
- phdr->p_memsz,
- phdr->p_flags & PF_R ? 'R' : ' ',
- phdr->p_flags & PF_W ? 'W' : ' ',
- phdr->p_flags & PF_X ? 'E' : ' ',
- phdr->p_align);
-
- if (phdr->p_type == PT_INTERP)
- {
- /* We can show the user the name of the interpreter. */
- size_t maxsize;
- char *filedata = elf_rawfile (ebl->elf, &maxsize);
-
- if (filedata != NULL && phdr->p_offset < maxsize)
- printf (gettext ("\t[Requesting program interpreter: %s]\n"),
- filedata + phdr->p_offset);
- }
- else if (phdr->p_type == PT_GNU_RELRO)
- {
- has_relro = true;
- relro_from = phdr->p_vaddr;
- relro_to = relro_from + phdr->p_memsz;
- }
- }
-
- /* Get the section header string table index. */
- size_t shstrndx;
- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- gettext ("cannot get section header string table index"));
-
- puts (gettext ("\n Section to Segment mapping:\n Segment Sections..."));
-
- for (size_t cnt = 0; cnt < ehdr->e_phnum; ++cnt)
- {
- /* Print the segment number. */
- printf (" %2.2zu ", cnt);
-
- GElf_Phdr phdr_mem;
- GElf_Phdr *phdr = gelf_getphdr (ebl->elf, cnt, &phdr_mem);
- /* This must not happen. */
- if (unlikely (phdr == NULL))
- error (EXIT_FAILURE, 0, gettext ("cannot get program header: %s"),
- elf_errmsg (-1));
-
- /* Iterate over the sections. */
- bool in_relro = false;
- bool in_ro = false;
- for (size_t inner = 1; inner < shnum; ++inner)
- {
- Elf_Scn *scn = elf_getscn (ebl->elf, inner);
- /* This should not happen. */
- if (unlikely (scn == NULL))
- error (EXIT_FAILURE, 0, gettext ("cannot get section: %s"),
- elf_errmsg (-1));
-
- /* Get the section header. */
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
- if (unlikely (shdr == NULL))
- error (EXIT_FAILURE, 0,
- gettext ("cannot get section header: %s"),
- elf_errmsg (-1));
-
- if (shdr->sh_size > 0
- /* Compare allocated sections by VMA, unallocated
- sections by file offset. */
- && (shdr->sh_flags & SHF_ALLOC
- ? (shdr->sh_addr >= phdr->p_vaddr
- && (shdr->sh_addr + shdr->sh_size
- <= phdr->p_vaddr + phdr->p_memsz))
- : (shdr->sh_offset >= phdr->p_offset
- && (shdr->sh_offset + shdr->sh_size
- <= phdr->p_offset + phdr->p_filesz))))
- {
- if (has_relro && !in_relro
- && shdr->sh_addr >= relro_from
- && shdr->sh_addr + shdr->sh_size <= relro_to)
- {
- fputs_unlocked (" [RELRO:", stdout);
- in_relro = true;
- }
- else if (has_relro && in_relro && shdr->sh_addr >= relro_to)
- {
- fputs_unlocked ("]", stdout);
- in_relro = false;
- }
- else if (has_relro && in_relro
- && shdr->sh_addr + shdr->sh_size > relro_to)
- fputs_unlocked ("] <RELRO:", stdout);
- else if (phdr->p_type == PT_LOAD && (phdr->p_flags & PF_W) == 0)
- {
- if (!in_ro)
- {
- fputs_unlocked (" [RO:", stdout);
- in_ro = true;
- }
- }
- else
- {
- /* Determine the segment this section is part of. */
- size_t cnt2;
- GElf_Phdr *phdr2 = NULL;
- for (cnt2 = 0; cnt2 < ehdr->e_phnum; ++cnt2)
- {
- GElf_Phdr phdr2_mem;
- phdr2 = gelf_getphdr (ebl->elf, cnt2, &phdr2_mem);
-
- if (phdr2 != NULL && phdr2->p_type == PT_LOAD
- && shdr->sh_addr >= phdr2->p_vaddr
- && (shdr->sh_addr + shdr->sh_size
- <= phdr2->p_vaddr + phdr2->p_memsz))
- break;
- }
-
- if (cnt2 < ehdr->e_phnum)
- {
- if ((phdr2->p_flags & PF_W) == 0 && !in_ro)
- {
- fputs_unlocked (" [RO:", stdout);
- in_ro = true;
- }
- else if ((phdr2->p_flags & PF_W) != 0 && in_ro)
- {
- fputs_unlocked ("]", stdout);
- in_ro = false;
- }
- }
- }
-
- printf (" %s",
- elf_strptr (ebl->elf, shstrndx, shdr->sh_name));
-
- /* Signal that this sectin is only partially covered. */
- if (has_relro && in_relro
- && shdr->sh_addr + shdr->sh_size > relro_to)
- {
- fputs_unlocked (">", stdout);
- in_relro = false;
- }
- }
- }
- if (in_relro || in_ro)
- fputs_unlocked ("]", stdout);
-
- /* Finish the line. */
- fputc_unlocked ('\n', stdout);
- }
-}
-
-
-static void
-handle_scngrp (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
-{
- /* Get the data of the section. */
- Elf_Data *data = elf_getdata (scn, NULL);
-
- Elf_Scn *symscn = elf_getscn (ebl->elf, shdr->sh_link);
- GElf_Shdr symshdr_mem;
- GElf_Shdr *symshdr = gelf_getshdr (symscn, &symshdr_mem);
- Elf_Data *symdata = elf_getdata (symscn, NULL);
-
- if (data == NULL || data->d_size < sizeof (Elf32_Word) || symshdr == NULL
- || symdata == NULL)
- return;
-
- /* Get the section header string table index. */
- size_t shstrndx;
- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- gettext ("cannot get section header string table index"));
-
- Elf32_Word *grpref = (Elf32_Word *) data->d_buf;
-
- GElf_Sym sym_mem;
- printf ((grpref[0] & GRP_COMDAT)
- ? ngettext ("\
-\nCOMDAT section group [%2zu] '%s' with signature '%s' contains %zu entry:\n",
- "\
-\nCOMDAT section group [%2zu] '%s' with signature '%s' contains %zu entries:\n",
- data->d_size / sizeof (Elf32_Word) - 1)
- : ngettext ("\
-\nSection group [%2zu] '%s' with signature '%s' contains %zu entry:\n", "\
-\nSection group [%2zu] '%s' with signature '%s' contains %zu entries:\n",
- data->d_size / sizeof (Elf32_Word) - 1),
- elf_ndxscn (scn),
- elf_strptr (ebl->elf, shstrndx, shdr->sh_name),
- elf_strptr (ebl->elf, symshdr->sh_link,
- gelf_getsym (symdata, shdr->sh_info, &sym_mem)->st_name)
- ?: gettext ("<INVALID SYMBOL>"),
- data->d_size / sizeof (Elf32_Word) - 1);
-
- for (size_t cnt = 1; cnt < data->d_size / sizeof (Elf32_Word); ++cnt)
- {
- GElf_Shdr grpshdr_mem;
- GElf_Shdr *grpshdr = gelf_getshdr (elf_getscn (ebl->elf, grpref[cnt]),
- &grpshdr_mem);
-
- const char *str;
- printf (" [%2u] %s\n",
- grpref[cnt],
- grpshdr != NULL
- && (str = elf_strptr (ebl->elf, shstrndx, grpshdr->sh_name))
- ? str : gettext ("<INVALID SECTION>"));
- }
-}
-
-
-static void
-print_scngrp (Ebl *ebl)
-{
- /* Find all relocation sections and handle them. */
- Elf_Scn *scn = NULL;
-
- while ((scn = elf_nextscn (ebl->elf, scn)) != NULL)
- {
- /* Handle the section if it is a symbol table. */
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
-
- if (shdr != NULL && shdr->sh_type == SHT_GROUP)
- handle_scngrp (ebl, scn, shdr);
- }
-}
-
-
-static const struct flags
-{
- int mask;
- const char *str;
-} dt_flags[] =
- {
- { DF_ORIGIN, "ORIGIN" },
- { DF_SYMBOLIC, "SYMBOLIC" },
- { DF_TEXTREL, "TEXTREL" },
- { DF_BIND_NOW, "BIND_NOW" },
- { DF_STATIC_TLS, "STATIC_TLS" }
- };
-static const int ndt_flags = sizeof (dt_flags) / sizeof (dt_flags[0]);
-
-static const struct flags dt_flags_1[] =
- {
- { DF_1_NOW, "NOW" },
- { DF_1_GLOBAL, "GLOBAL" },
- { DF_1_GROUP, "GROUP" },
- { DF_1_NODELETE, "NODELETE" },
- { DF_1_LOADFLTR, "LOADFLTR" },
- { DF_1_INITFIRST, "INITFIRST" },
- { DF_1_NOOPEN, "NOOPEN" },
- { DF_1_ORIGIN, "ORIGIN" },
- { DF_1_DIRECT, "DIRECT" },
- { DF_1_TRANS, "TRANS" },
- { DF_1_INTERPOSE, "INTERPOSE" },
- { DF_1_NODEFLIB, "NODEFLIB" },
- { DF_1_NODUMP, "NODUMP" },
- { DF_1_CONFALT, "CONFALT" },
- { DF_1_ENDFILTEE, "ENDFILTEE" },
- { DF_1_DISPRELDNE, "DISPRELDNE" },
- { DF_1_DISPRELPND, "DISPRELPND" },
- };
-static const int ndt_flags_1 = sizeof (dt_flags_1) / sizeof (dt_flags_1[0]);
-
-static const struct flags dt_feature_1[] =
- {
- { DTF_1_PARINIT, "PARINIT" },
- { DTF_1_CONFEXP, "CONFEXP" }
- };
-static const int ndt_feature_1 = (sizeof (dt_feature_1)
- / sizeof (dt_feature_1[0]));
-
-static const struct flags dt_posflag_1[] =
- {
- { DF_P1_LAZYLOAD, "LAZYLOAD" },
- { DF_P1_GROUPPERM, "GROUPPERM" }
- };
-static const int ndt_posflag_1 = (sizeof (dt_posflag_1)
- / sizeof (dt_posflag_1[0]));
-
-
-static void
-print_flags (int class, GElf_Xword d_val, const struct flags *flags,
- int nflags)
-{
- bool first = true;
- int cnt;
-
- for (cnt = 0; cnt < nflags; ++cnt)
- if (d_val & flags[cnt].mask)
- {
- if (!first)
- putchar_unlocked (' ');
- fputs_unlocked (flags[cnt].str, stdout);
- d_val &= ~flags[cnt].mask;
- first = false;
- }
-
- if (d_val != 0)
- {
- if (!first)
- putchar_unlocked (' ');
- printf ("%#0*" PRIx64, class == ELFCLASS32 ? 10 : 18, d_val);
- }
-
- putchar_unlocked ('\n');
-}
-
-
-static void
-print_dt_flags (int class, GElf_Xword d_val)
-{
- print_flags (class, d_val, dt_flags, ndt_flags);
-}
-
-
-static void
-print_dt_flags_1 (int class, GElf_Xword d_val)
-{
- print_flags (class, d_val, dt_flags_1, ndt_flags_1);
-}
-
-
-static void
-print_dt_feature_1 (int class, GElf_Xword d_val)
-{
- print_flags (class, d_val, dt_feature_1, ndt_feature_1);
-}
-
-
-static void
-print_dt_posflag_1 (int class, GElf_Xword d_val)
-{
- print_flags (class, d_val, dt_posflag_1, ndt_posflag_1);
-}
-
-
-static void
-handle_dynamic (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
-{
- int class = gelf_getclass (ebl->elf);
- GElf_Shdr glink;
- Elf_Data *data;
- size_t cnt;
- size_t shstrndx;
-
- /* Get the data of the section. */
- data = elf_getdata (scn, NULL);
- if (data == NULL)
- return;
-
- /* Get the section header string table index. */
- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- gettext ("cannot get section header string table index"));
-
- printf (ngettext ("\
-\nDynamic segment contains %lu entry:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n",
- "\
-\nDynamic segment contains %lu entries:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n",
- shdr->sh_size / shdr->sh_entsize),
- (unsigned long int) (shdr->sh_size / shdr->sh_entsize),
- class == ELFCLASS32 ? 10 : 18, shdr->sh_addr,
- shdr->sh_offset,
- (int) shdr->sh_link,
- elf_strptr (ebl->elf, shstrndx,
- gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link),
- &glink)->sh_name));
- fputs_unlocked (gettext (" Type Value\n"), stdout);
-
- for (cnt = 0; cnt < shdr->sh_size / shdr->sh_entsize; ++cnt)
- {
- GElf_Dyn dynmem;
- GElf_Dyn *dyn = gelf_getdyn (data, cnt, &dynmem);
- if (dyn == NULL)
- break;
-
- char buf[64];
- printf (" %-17s ",
- ebl_dynamic_tag_name (ebl, dyn->d_tag, buf, sizeof (buf)));
-
- switch (dyn->d_tag)
- {
- case DT_NULL:
- case DT_DEBUG:
- case DT_BIND_NOW:
- case DT_TEXTREL:
- /* No further output. */
- fputc_unlocked ('\n', stdout);
- break;
-
- case DT_NEEDED:
- printf (gettext ("Shared library: [%s]\n"),
- elf_strptr (ebl->elf, shdr->sh_link, dyn->d_un.d_val));
- break;
-
- case DT_SONAME:
- printf (gettext ("Library soname: [%s]\n"),
- elf_strptr (ebl->elf, shdr->sh_link, dyn->d_un.d_val));
- break;
-
- case DT_RPATH:
- printf (gettext ("Library rpath: [%s]\n"),
- elf_strptr (ebl->elf, shdr->sh_link, dyn->d_un.d_val));
- break;
-
- case DT_RUNPATH:
- printf (gettext ("Library runpath: [%s]\n"),
- elf_strptr (ebl->elf, shdr->sh_link, dyn->d_un.d_val));
- break;
-
- case DT_PLTRELSZ:
- case DT_RELASZ:
- case DT_STRSZ:
- case DT_RELSZ:
- case DT_RELAENT:
- case DT_SYMENT:
- case DT_RELENT:
- case DT_PLTPADSZ:
- case DT_MOVEENT:
- case DT_MOVESZ:
- case DT_INIT_ARRAYSZ:
- case DT_FINI_ARRAYSZ:
- case DT_SYMINSZ:
- case DT_SYMINENT:
- case DT_GNU_CONFLICTSZ:
- case DT_GNU_LIBLISTSZ:
- printf (gettext ("%" PRId64 " (bytes)\n"), dyn->d_un.d_val);
- break;
-
- case DT_VERDEFNUM:
- case DT_VERNEEDNUM:
- case DT_RELACOUNT:
- case DT_RELCOUNT:
- printf ("%" PRId64 "\n", dyn->d_un.d_val);
- break;
-
- case DT_PLTREL:
- puts (ebl_dynamic_tag_name (ebl, dyn->d_un.d_val, NULL, 0));
- break;
-
- case DT_FLAGS:
- print_dt_flags (class, dyn->d_un.d_val);
- break;
-
- case DT_FLAGS_1:
- print_dt_flags_1 (class, dyn->d_un.d_val);
- break;
-
- case DT_FEATURE_1:
- print_dt_feature_1 (class, dyn->d_un.d_val);
- break;
-
- case DT_POSFLAG_1:
- print_dt_posflag_1 (class, dyn->d_un.d_val);
- break;
-
- default:
- printf ("%#0*" PRIx64 "\n",
- class == ELFCLASS32 ? 10 : 18, dyn->d_un.d_val);
- break;
- }
- }
-}
-
-
-/* Print the dynamic segment. */
-static void
-print_dynamic (Ebl *ebl, GElf_Ehdr *ehdr)
-{
- for (int i = 0; i < ehdr->e_phnum; ++i)
- {
- GElf_Phdr phdr_mem;
- GElf_Phdr *phdr = gelf_getphdr (ebl->elf, i, &phdr_mem);
-
- if (phdr != NULL && phdr->p_type == PT_DYNAMIC)
- {
- Elf_Scn *scn = gelf_offscn (ebl->elf, phdr->p_offset);
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
- if (shdr != NULL && shdr->sh_type == SHT_DYNAMIC)
- handle_dynamic (ebl, scn, shdr);
- break;
- }
- }
-}
-
-
-/* Print relocations. */
-static void
-print_relocs (Ebl *ebl)
-{
- /* Find all relocation sections and handle them. */
- Elf_Scn *scn = NULL;
-
- while ((scn = elf_nextscn (ebl->elf, scn)) != NULL)
- {
- /* Handle the section if it is a symbol table. */
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
-
- if (likely (shdr != NULL))
- {
- if (shdr->sh_type == SHT_REL)
- handle_relocs_rel (ebl, scn, shdr);
- else if (shdr->sh_type == SHT_RELA)
- handle_relocs_rela (ebl, scn, shdr);
- }
- }
-}
-
-
-/* Handle a relocation section. */
-static void
-handle_relocs_rel (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
-{
- int class = gelf_getclass (ebl->elf);
- int nentries = shdr->sh_size / shdr->sh_entsize;
-
- /* Get the data of the section. */
- Elf_Data *data = elf_getdata (scn, NULL);
- if (data == NULL)
- return;
-
- /* Get the symbol table information. */
- Elf_Scn *symscn = elf_getscn (ebl->elf, shdr->sh_link);
- GElf_Shdr symshdr_mem;
- GElf_Shdr *symshdr = gelf_getshdr (symscn, &symshdr_mem);
- Elf_Data *symdata = elf_getdata (symscn, NULL);
-
- /* Get the section header of the section the relocations are for. */
- GElf_Shdr destshdr_mem;
- GElf_Shdr *destshdr = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_info),
- &destshdr_mem);
-
- if (unlikely (symshdr == NULL || symdata == NULL || destshdr == NULL))
- {
- printf (gettext ("\nInvalid symbol table at offset %#0" PRIx64 "\n"),
- shdr->sh_offset);
- return;
- }
-
- /* Search for the optional extended section index table. */
- Elf_Data *xndxdata = NULL;
- int xndxscnidx = elf_scnshndx (scn);
- if (unlikely (xndxscnidx > 0))
- xndxdata = elf_getdata (elf_getscn (ebl->elf, xndxscnidx), NULL);
-
- /* Get the section header string table index. */
- size_t shstrndx;
- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- gettext ("cannot get section header string table index"));
-
- if (shdr->sh_info != 0)
- printf (ngettext ("\
-\nRelocation section [%2u] '%s' for section [%2u] '%s' at offset %#0" PRIx64 " contains %d entry:\n",
- "\
-\nRelocation section [%2u] '%s' for section [%2u] '%s' at offset %#0" PRIx64 " contains %d entries:\n",
- nentries),
- (unsigned int) elf_ndxscn (scn),
- elf_strptr (ebl->elf, shstrndx, shdr->sh_name),
- (unsigned int) shdr->sh_info,
- elf_strptr (ebl->elf, shstrndx, destshdr->sh_name),
- shdr->sh_offset,
- nentries);
- else
- /* The .rel.dyn section does not refer to a specific section but
- instead of section index zero. Do not try to print a section
- name. */
- printf (ngettext ("\
-\nRelocation section [%2u] '%s' at offset %#0" PRIx64 " contains %d entry:\n",
- "\
-\nRelocation section [%2u] '%s' at offset %#0" PRIx64 " contains %d entries:\n",
- nentries),
- (unsigned int) elf_ndxscn (scn),
- elf_strptr (ebl->elf, shstrndx, shdr->sh_name),
- shdr->sh_offset,
- nentries);
- fputs_unlocked (class == ELFCLASS32
- ? gettext ("\
- Offset Type Value Name\n")
- : gettext ("\
- Offset Type Value Name\n"),
- stdout);
-
- for (int cnt = 0; cnt < nentries; ++cnt)
- {
- GElf_Rel relmem;
- GElf_Rel *rel = gelf_getrel (data, cnt, &relmem);
- if (likely (rel != NULL))
- {
- char buf[128];
- GElf_Sym symmem;
- Elf32_Word xndx;
- GElf_Sym *sym = gelf_getsymshndx (symdata, xndxdata,
- GELF_R_SYM (rel->r_info),
- &symmem, &xndx);
- if (unlikely (sym == NULL))
- printf (" %#0*" PRIx64 " %-20s <%s %ld>\n",
- class == ELFCLASS32 ? 10 : 18, rel->r_offset,
- ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info))
- /* Avoid the leading R_ which isn't carrying any
- information. */
- ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info),
- buf, sizeof (buf)) + 2
- : gettext ("<INVALID RELOC>"),
- gettext ("INVALID SYMBOL"),
- (long int) GELF_R_SYM (rel->r_info));
- else if (GELF_ST_TYPE (sym->st_info) != STT_SECTION)
- printf (" %#0*" PRIx64 " %-20s %#0*" PRIx64 " %s\n",
- class == ELFCLASS32 ? 10 : 18, rel->r_offset,
- likely (ebl_reloc_type_check (ebl,
- GELF_R_TYPE (rel->r_info)))
- /* Avoid the leading R_ which isn't carrying any
- information. */
- ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info),
- buf, sizeof (buf)) + 2
- : gettext ("<INVALID RELOC>"),
- class == ELFCLASS32 ? 10 : 18, sym->st_value,
- elf_strptr (ebl->elf, symshdr->sh_link, sym->st_name));
- else
- {
- destshdr = gelf_getshdr (elf_getscn (ebl->elf,
- sym->st_shndx == SHN_XINDEX
- ? xndx : sym->st_shndx),
- &destshdr_mem);
-
- if (unlikely (destshdr == NULL))
- printf (" %#0*" PRIx64 " %-20s <%s %ld>\n",
- class == ELFCLASS32 ? 10 : 18, rel->r_offset,
- ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info))
- /* Avoid the leading R_ which isn't carrying any
- information. */
- ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info),
- buf, sizeof (buf)) + 2
- : gettext ("<INVALID RELOC>"),
- gettext ("INVALID SECTION"),
- (long int) (sym->st_shndx == SHN_XINDEX
- ? xndx : sym->st_shndx));
- else
- printf (" %#0*" PRIx64 " %-20s %#0*" PRIx64 " %s\n",
- class == ELFCLASS32 ? 10 : 18, rel->r_offset,
- ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info))
- /* Avoid the leading R_ which isn't carrying any
- information. */
- ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info),
- buf, sizeof (buf)) + 2
- : gettext ("<INVALID RELOC>"),
- class == ELFCLASS32 ? 10 : 18, sym->st_value,
- elf_strptr (ebl->elf, shstrndx, destshdr->sh_name));
- }
- }
- }
-}
-
-
-/* Handle a relocation section. */
-static void
-handle_relocs_rela (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
-{
- int class = gelf_getclass (ebl->elf);
- int nentries = shdr->sh_size / shdr->sh_entsize;
-
- /* Get the data of the section. */
- Elf_Data *data = elf_getdata (scn, NULL);
- if (data == NULL)
- return;
-
- /* Get the symbol table information. */
- Elf_Scn *symscn = elf_getscn (ebl->elf, shdr->sh_link);
- GElf_Shdr symshdr_mem;
- GElf_Shdr *symshdr = gelf_getshdr (symscn, &symshdr_mem);
- Elf_Data *symdata = elf_getdata (symscn, NULL);
-
- /* Get the section header of the section the relocations are for. */
- GElf_Shdr destshdr_mem;
- GElf_Shdr *destshdr = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_info),
- &destshdr_mem);
-
- if (unlikely (symshdr == NULL || symdata == NULL || destshdr == NULL))
- {
- printf (gettext ("\nInvalid symbol table at offset %#0" PRIx64 "\n"),
- shdr->sh_offset);
- return;
- }
-
- /* Search for the optional extended section index table. */
- Elf_Data *xndxdata = NULL;
- int xndxscnidx = elf_scnshndx (scn);
- if (unlikely (xndxscnidx > 0))
- xndxdata = elf_getdata (elf_getscn (ebl->elf, xndxscnidx), NULL);
-
- /* Get the section header string table index. */
- size_t shstrndx;
- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- gettext ("cannot get section header string table index"));
-
- printf (ngettext ("\
-\nRelocation section [%2zu] '%s' for section [%2u] '%s' at offset %#0" PRIx64 " contains %d entry:\n",
- "\
-\nRelocation section [%2zu] '%s' for section [%2u] '%s' at offset %#0" PRIx64 " contains %d entries:\n",
- nentries),
- elf_ndxscn (scn),
- elf_strptr (ebl->elf, shstrndx, shdr->sh_name),
- (unsigned int) shdr->sh_info,
- elf_strptr (ebl->elf, shstrndx, destshdr->sh_name),
- shdr->sh_offset,
- nentries);
- fputs_unlocked (class == ELFCLASS32
- ? gettext ("\
- Offset Type Value Addend Name\n")
- : gettext ("\
- Offset Type Value Addend Name\n"),
- stdout);
-
- for (int cnt = 0; cnt < nentries; ++cnt)
- {
- GElf_Rela relmem;
- GElf_Rela *rel = gelf_getrela (data, cnt, &relmem);
- if (likely (rel != NULL))
- {
- char buf[64];
- GElf_Sym symmem;
- Elf32_Word xndx;
- GElf_Sym *sym = gelf_getsymshndx (symdata, xndxdata,
- GELF_R_SYM (rel->r_info),
- &symmem, &xndx);
-
- if (unlikely (sym == NULL))
- printf (" %#0*" PRIx64 " %-15s <%s %ld>\n",
- class == ELFCLASS32 ? 10 : 18, rel->r_offset,
- ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info))
- /* Avoid the leading R_ which isn't carrying any
- information. */
- ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info),
- buf, sizeof (buf)) + 2
- : gettext ("<INVALID RELOC>"),
- gettext ("INVALID SYMBOL"),
- (long int) GELF_R_SYM (rel->r_info));
- else if (GELF_ST_TYPE (sym->st_info) != STT_SECTION)
- printf ("\
- %#0*" PRIx64 " %-15s %#0*" PRIx64 " %+6" PRId64 " %s\n",
- class == ELFCLASS32 ? 10 : 18, rel->r_offset,
- likely (ebl_reloc_type_check (ebl,
- GELF_R_TYPE (rel->r_info)))
- /* Avoid the leading R_ which isn't carrying any
- information. */
- ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info),
- buf, sizeof (buf)) + 2
- : gettext ("<INVALID RELOC>"),
- class == ELFCLASS32 ? 10 : 18, sym->st_value,
- rel->r_addend,
- elf_strptr (ebl->elf, symshdr->sh_link, sym->st_name));
- else
- {
- destshdr = gelf_getshdr (elf_getscn (ebl->elf,
- sym->st_shndx == SHN_XINDEX
- ? xndx : sym->st_shndx),
- &destshdr_mem);
-
- if (unlikely (shdr == NULL))
- printf (" %#0*" PRIx64 " %-15s <%s %ld>\n",
- class == ELFCLASS32 ? 10 : 18, rel->r_offset,
- ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info))
- /* Avoid the leading R_ which isn't carrying any
- information. */
- ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info),
- buf, sizeof (buf)) + 2
- : gettext ("<INVALID RELOC>"),
- gettext ("INVALID SECTION"),
- (long int) (sym->st_shndx == SHN_XINDEX
- ? xndx : sym->st_shndx));
- else
- printf ("\
- %#0*" PRIx64 " %-15s %#0*" PRIx64 " %+6" PRId64 " %s\n",
- class == ELFCLASS32 ? 10 : 18, rel->r_offset,
- ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info))
- /* Avoid the leading R_ which isn't carrying any
- information. */
- ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info),
- buf, sizeof (buf)) + 2
- : gettext ("<INVALID RELOC>"),
- class == ELFCLASS32 ? 10 : 18, sym->st_value,
- rel->r_addend,
- elf_strptr (ebl->elf, shstrndx, destshdr->sh_name));
- }
- }
- }
-}
-
-
-/* Print the program header. */
-static void
-print_symtab (Ebl *ebl, int type)
-{
- /* Find the symbol table(s). For this we have to search through the
- section table. */
- Elf_Scn *scn = NULL;
-
- while ((scn = elf_nextscn (ebl->elf, scn)) != NULL)
- {
- /* Handle the section if it is a symbol table. */
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
-
- if (shdr != NULL && shdr->sh_type == (GElf_Word) type)
- handle_symtab (ebl, scn, shdr);
- }
-}
-
-
-static void
-handle_symtab (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
-{
- Elf_Data *versym_data = NULL;
- Elf_Data *verneed_data = NULL;
- Elf_Data *verdef_data = NULL;
- Elf_Data *xndx_data = NULL;
- int class = gelf_getclass (ebl->elf);
- Elf32_Word verneed_stridx = 0;
- Elf32_Word verdef_stridx = 0;
-
- /* Get the data of the section. */
- Elf_Data *data = elf_getdata (scn, NULL);
- if (data == NULL)
- return;
-
- /* Find out whether we have other sections we might need. */
- Elf_Scn *runscn = NULL;
- while ((runscn = elf_nextscn (ebl->elf, runscn)) != NULL)
- {
- GElf_Shdr runshdr_mem;
- GElf_Shdr *runshdr = gelf_getshdr (runscn, &runshdr_mem);
-
- if (likely (runshdr != NULL))
- {
- if (runshdr->sh_type == SHT_GNU_versym
- && runshdr->sh_link == elf_ndxscn (scn))
- /* Bingo, found the version information. Now get the data. */
- versym_data = elf_getdata (runscn, NULL);
- else if (runshdr->sh_type == SHT_GNU_verneed)
- {
- /* This is the information about the needed versions. */
- verneed_data = elf_getdata (runscn, NULL);
- verneed_stridx = runshdr->sh_link;
- }
- else if (runshdr->sh_type == SHT_GNU_verdef)
- {
- /* This is the information about the defined versions. */
- verdef_data = elf_getdata (runscn, NULL);
- verdef_stridx = runshdr->sh_link;
- }
- else if (runshdr->sh_type == SHT_SYMTAB_SHNDX
- && runshdr->sh_link == elf_ndxscn (scn))
- /* Extended section index. */
- xndx_data = elf_getdata (runscn, NULL);
- }
- }
-
- /* Get the section header string table index. */
- size_t shstrndx;
- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- gettext ("cannot get section header string table index"));
-
- /* Now we can compute the number of entries in the section. */
- unsigned int nsyms = data->d_size / (class == ELFCLASS32
- ? sizeof (Elf32_Sym)
- : sizeof (Elf64_Sym));
-
- printf (ngettext ("\nSymbol table [%2u] '%s' contains %u entry:\n",
- "\nSymbol table [%2u] '%s' contains %u entries:\n",
- nsyms),
- (unsigned int) elf_ndxscn (scn),
- elf_strptr (ebl->elf, shstrndx, shdr->sh_name), nsyms);
- GElf_Shdr glink;
- printf (ngettext (" %lu local symbol String table: [%2u] '%s'\n",
- " %lu local symbols String table: [%2u] '%s'\n",
- shdr->sh_info),
- (unsigned long int) shdr->sh_info,
- (unsigned int) shdr->sh_link,
- elf_strptr (ebl->elf, shstrndx,
- gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link),
- &glink)->sh_name));
-
- fputs_unlocked (class == ELFCLASS32
- ? gettext ("\
- Num: Value Size Type Bind Vis Ndx Name\n")
- : gettext ("\
- Num: Value Size Type Bind Vis Ndx Name\n"),
- stdout);
-
- for (unsigned int cnt = 0; cnt < nsyms; ++cnt)
- {
- char typebuf[64];
- char bindbuf[64];
- char scnbuf[64];
- Elf32_Word xndx;
- GElf_Sym sym_mem;
- GElf_Sym *sym = gelf_getsymshndx (data, xndx_data, cnt, &sym_mem, &xndx);
-
- if (unlikely (sym == NULL))
- continue;
-
- /* Determine the real section index. */
- if (likely (sym->st_shndx != SHN_XINDEX))
- xndx = sym->st_shndx;
-
- printf (gettext ("\
-%5u: %0*" PRIx64 " %6" PRId64 " %-7s %-6s %-9s %6s %s"),
- cnt,
- class == ELFCLASS32 ? 8 : 16,
- sym->st_value,
- sym->st_size,
- ebl_symbol_type_name (ebl, GELF_ST_TYPE (sym->st_info),
- typebuf, sizeof (typebuf)),
- ebl_symbol_binding_name (ebl, GELF_ST_BIND (sym->st_info),
- bindbuf, sizeof (bindbuf)),
- get_visibility_type (GELF_ST_VISIBILITY (sym->st_other)),
- ebl_section_name (ebl, sym->st_shndx, xndx, scnbuf,
- sizeof (scnbuf), NULL, shnum),
- elf_strptr (ebl->elf, shdr->sh_link, sym->st_name));
-
- if (versym_data != NULL)
- {
- /* Get the version information. */
- GElf_Versym versym_mem;
- GElf_Versym *versym = gelf_getversym (versym_data, cnt, &versym_mem);
-
- if (versym != NULL && ((*versym & 0x8000) != 0 || *versym > 1))
- {
- bool is_nobits = false;
- bool check_def = xndx != SHN_UNDEF;
-
- if (xndx < SHN_LORESERVE || sym->st_shndx == SHN_XINDEX)
- {
- GElf_Shdr symshdr_mem;
- GElf_Shdr *symshdr =
- gelf_getshdr (elf_getscn (ebl->elf, xndx), &symshdr_mem);
-
- is_nobits = (symshdr != NULL
- && symshdr->sh_type == SHT_NOBITS);
- }
-
- if (is_nobits || ! check_def)
- {
- /* We must test both. */
- GElf_Vernaux vernaux_mem;
- GElf_Vernaux *vernaux = NULL;
- size_t vn_offset = 0;
-
- GElf_Verneed verneed_mem;
- GElf_Verneed *verneed = gelf_getverneed (verneed_data, 0,
- &verneed_mem);
- while (verneed != NULL)
- {
- size_t vna_offset = vn_offset;
-
- vernaux = gelf_getvernaux (verneed_data,
- vna_offset += verneed->vn_aux,
- &vernaux_mem);
- while (vernaux != NULL
- && vernaux->vna_other != *versym
- && vernaux->vna_next != 0)
- {
- /* Update the offset. */
- vna_offset += vernaux->vna_next;
-
- vernaux = (vernaux->vna_next == 0
- ? NULL
- : gelf_getvernaux (verneed_data,
- vna_offset,
- &vernaux_mem));
- }
-
- /* Check whether we found the version. */
- if (vernaux != NULL && vernaux->vna_other == *versym)
- /* Found it. */
- break;
-
- vn_offset += verneed->vn_next;
- verneed = (verneed->vn_next == 0
- ? NULL
- : gelf_getverneed (verneed_data, vn_offset,
- &verneed_mem));
- }
-
- if (vernaux != NULL && vernaux->vna_other == *versym)
- {
- printf ("@%s (%u)",
- elf_strptr (ebl->elf, verneed_stridx,
- vernaux->vna_name),
- (unsigned int) vernaux->vna_other);
- check_def = 0;
- }
- else if (unlikely (! is_nobits))
- error (0, 0, gettext ("bad dynamic symbol"));
- else
- check_def = 1;
- }
-
- if (check_def && *versym != 0x8001)
- {
- /* We must test both. */
- size_t vd_offset = 0;
-
- GElf_Verdef verdef_mem;
- GElf_Verdef *verdef = gelf_getverdef (verdef_data, 0,
- &verdef_mem);
- while (verdef != NULL)
- {
- if (verdef->vd_ndx == (*versym & 0x7fff))
- /* Found the definition. */
- break;
-
- vd_offset += verdef->vd_next;
- verdef = (verdef->vd_next == 0
- ? NULL
- : gelf_getverdef (verdef_data, vd_offset,
- &verdef_mem));
- }
-
- if (verdef != NULL)
- {
- GElf_Verdaux verdaux_mem;
- GElf_Verdaux *verdaux
- = gelf_getverdaux (verdef_data,
- vd_offset + verdef->vd_aux,
- &verdaux_mem);
-
- if (verdaux != NULL)
- printf ((*versym & 0x8000) ? "@%s" : "@@%s",
- elf_strptr (ebl->elf, verdef_stridx,
- verdaux->vda_name));
- }
- }
- }
- }
-
- putchar_unlocked ('\n');
- }
-}
-
-
-/* Print version information. */
-static void
-print_verinfo (Ebl *ebl)
-{
- /* Find the version information sections. For this we have to
- search through the section table. */
- Elf_Scn *scn = NULL;
-
- while ((scn = elf_nextscn (ebl->elf, scn)) != NULL)
- {
- /* Handle the section if it is part of the versioning handling. */
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
-
- if (likely (shdr != NULL))
- {
- if (shdr->sh_type == SHT_GNU_verneed)
- handle_verneed (ebl, scn, shdr);
- else if (shdr->sh_type == SHT_GNU_verdef)
- handle_verdef (ebl, scn, shdr);
- else if (shdr->sh_type == SHT_GNU_versym)
- handle_versym (ebl, scn, shdr);
- }
- }
-}
-
-
-static const char *
-get_ver_flags (unsigned int flags)
-{
- static char buf[32];
- char *endp;
-
- if (flags == 0)
- return gettext ("none");
-
- if (flags & VER_FLG_BASE)
- endp = stpcpy (buf, "BASE ");
- else
- endp = buf;
-
- if (flags & VER_FLG_WEAK)
- {
- if (endp != buf)
- endp = stpcpy (endp, "| ");
-
- endp = stpcpy (endp, "WEAK ");
- }
-
- if (unlikely (flags & ~(VER_FLG_BASE | VER_FLG_WEAK)))
- {
- strncpy (endp, gettext ("| <unknown>"), buf + sizeof (buf) - endp);
- buf[sizeof (buf) - 1] = '\0';
- }
-
- return buf;
-}
-
-
-static void
-handle_verneed (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
-{
- int class = gelf_getclass (ebl->elf);
-
- /* Get the data of the section. */
- Elf_Data *data = elf_getdata (scn, NULL);
- if (data == NULL)
- return;
-
- /* Get the section header string table index. */
- size_t shstrndx;
- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- gettext ("cannot get section header string table index"));
-
- GElf_Shdr glink;
- printf (ngettext ("\
-\nVersion needs section [%2u] '%s' contains %d entry:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n",
- "\
-\nVersion needs section [%2u] '%s' contains %d entries:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n",
- shdr->sh_info),
- (unsigned int) elf_ndxscn (scn),
- elf_strptr (ebl->elf, shstrndx, shdr->sh_name), shdr->sh_info,
- class == ELFCLASS32 ? 10 : 18, shdr->sh_addr,
- shdr->sh_offset,
- (unsigned int) shdr->sh_link,
- elf_strptr (ebl->elf, shstrndx,
- gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link),
- &glink)->sh_name));
-
- unsigned int offset = 0;
- for (int cnt = shdr->sh_info; --cnt >= 0; )
- {
- /* Get the data at the next offset. */
- GElf_Verneed needmem;
- GElf_Verneed *need = gelf_getverneed (data, offset, &needmem);
- if (unlikely (need == NULL))
- break;
-
- printf (gettext (" %#06x: Version: %hu File: %s Cnt: %hu\n"),
- offset, (unsigned short int) need->vn_version,
- elf_strptr (ebl->elf, shdr->sh_link, need->vn_file),
- (unsigned short int) need->vn_cnt);
-
- unsigned int auxoffset = offset + need->vn_aux;
- for (int cnt2 = need->vn_cnt; --cnt2 >= 0; )
- {
- GElf_Vernaux auxmem;
- GElf_Vernaux *aux = gelf_getvernaux (data, auxoffset, &auxmem);
- if (unlikely (aux == NULL))
- break;
-
- printf (gettext (" %#06x: Name: %s Flags: %s Version: %hu\n"),
- auxoffset,
- elf_strptr (ebl->elf, shdr->sh_link, aux->vna_name),
- get_ver_flags (aux->vna_flags),
- (unsigned short int) aux->vna_other);
-
- auxoffset += aux->vna_next;
- }
-
- /* Find the next offset. */
- offset += need->vn_next;
- }
-}
-
-
-static void
-handle_verdef (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
-{
- /* Get the data of the section. */
- Elf_Data *data = elf_getdata (scn, NULL);
- if (data == NULL)
- return;
-
- /* Get the section header string table index. */
- size_t shstrndx;
- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- gettext ("cannot get section header string table index"));
-
- int class = gelf_getclass (ebl->elf);
- GElf_Shdr glink;
- printf (ngettext ("\
-\nVersion definition section [%2u] '%s' contains %d entry:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n",
- "\
-\nVersion definition section [%2u] '%s' contains %d entries:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n",
- shdr->sh_info),
- (unsigned int) elf_ndxscn (scn),
- elf_strptr (ebl->elf, shstrndx, shdr->sh_name),
- shdr->sh_info,
- class == ELFCLASS32 ? 10 : 18, shdr->sh_addr,
- shdr->sh_offset,
- (unsigned int) shdr->sh_link,
- elf_strptr (ebl->elf, shstrndx,
- gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link),
- &glink)->sh_name));
-
- unsigned int offset = 0;
- for (int cnt = shdr->sh_info; --cnt >= 0; )
- {
- /* Get the data at the next offset. */
- GElf_Verdef defmem;
- GElf_Verdef *def = gelf_getverdef (data, offset, &defmem);
- if (unlikely (def == NULL))
- break;
-
- unsigned int auxoffset = offset + def->vd_aux;
- GElf_Verdaux auxmem;
- GElf_Verdaux *aux = gelf_getverdaux (data, auxoffset, &auxmem);
- if (unlikely (aux == NULL))
- break;
-
- printf (gettext ("\
- %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n"),
- offset, def->vd_version,
- get_ver_flags (def->vd_flags),
- def->vd_ndx,
- def->vd_cnt,
- elf_strptr (ebl->elf, shdr->sh_link, aux->vda_name));
-
- auxoffset += aux->vda_next;
- for (int cnt2 = 1; cnt2 < def->vd_cnt; ++cnt2)
- {
- aux = gelf_getverdaux (data, auxoffset, &auxmem);
- if (unlikely (aux == NULL))
- break;
-
- printf (gettext (" %#06x: Parent %d: %s\n"),
- auxoffset, cnt2,
- elf_strptr (ebl->elf, shdr->sh_link, aux->vda_name));
-
- auxoffset += aux->vda_next;
- }
-
- /* Find the next offset. */
- offset += def->vd_next;
- }
-}
-
-
-static void
-handle_versym (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
-{
- int class = gelf_getclass (ebl->elf);
- const char **vername;
- const char **filename;
-
- /* Get the data of the section. */
- Elf_Data *data = elf_getdata (scn, NULL);
- if (data == NULL)
- return;
-
- /* Get the section header string table index. */
- size_t shstrndx;
- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- gettext ("cannot get section header string table index"));
-
- /* We have to find the version definition section and extract the
- version names. */
- Elf_Scn *defscn = NULL;
- Elf_Scn *needscn = NULL;
-
- Elf_Scn *verscn = NULL;
- while ((verscn = elf_nextscn (ebl->elf, verscn)) != NULL)
- {
- GElf_Shdr vershdr_mem;
- GElf_Shdr *vershdr = gelf_getshdr (verscn, &vershdr_mem);
-
- if (likely (vershdr != NULL))
- {
- if (vershdr->sh_type == SHT_GNU_verdef)
- defscn = verscn;
- else if (vershdr->sh_type == SHT_GNU_verneed)
- needscn = verscn;
- }
- }
-
- size_t nvername;
- if (defscn != NULL || needscn != NULL)
- {
- /* We have a version information (better should have). Now get
- the version names. First find the maximum version number. */
- nvername = 0;
- if (defscn != NULL)
- {
- /* Run through the version definitions and find the highest
- index. */
- unsigned int offset = 0;
- Elf_Data *defdata;
- GElf_Shdr defshdrmem;
- GElf_Shdr *defshdr;
-
- defdata = elf_getdata (defscn, NULL);
- if (unlikely (defdata == NULL))
- return;
-
- defshdr = gelf_getshdr (defscn, &defshdrmem);
- if (unlikely (defshdr == NULL))
- return;
-
- for (unsigned int cnt = 0; cnt < defshdr->sh_info; ++cnt)
- {
- GElf_Verdef defmem;
- GElf_Verdef *def;
-
- /* Get the data at the next offset. */
- def = gelf_getverdef (defdata, offset, &defmem);
- if (unlikely (def == NULL))
- break;
-
- nvername = MAX (nvername, (size_t) (def->vd_ndx & 0x7fff));
-
- offset += def->vd_next;
- }
- }
- if (needscn != NULL)
- {
- unsigned int offset = 0;
- Elf_Data *needdata;
- GElf_Shdr needshdrmem;
- GElf_Shdr *needshdr;
-
- needdata = elf_getdata (needscn, NULL);
- if (unlikely (needdata == NULL))
- return;
-
- needshdr = gelf_getshdr (needscn, &needshdrmem);
- if (unlikely (needshdr == NULL))
- return;
-
- for (unsigned int cnt = 0; cnt < needshdr->sh_info; ++cnt)
- {
- GElf_Verneed needmem;
- GElf_Verneed *need;
- unsigned int auxoffset;
- int cnt2;
-
- /* Get the data at the next offset. */
- need = gelf_getverneed (needdata, offset, &needmem);
- if (unlikely (need == NULL))
- break;
-
- /* Run through the auxiliary entries. */
- auxoffset = offset + need->vn_aux;
- for (cnt2 = need->vn_cnt; --cnt2 >= 0; )
- {
- GElf_Vernaux auxmem;
- GElf_Vernaux *aux;
-
- aux = gelf_getvernaux (needdata, auxoffset, &auxmem);
- if (unlikely (aux == NULL))
- break;
-
- nvername = MAX (nvername,
- (size_t) (aux->vna_other & 0x7fff));
-
- auxoffset += aux->vna_next;
- }
-
- offset += need->vn_next;
- }
- }
-
- /* This is the number of versions we know about. */
- ++nvername;
-
- /* Allocate the array. */
- vername = (const char **) alloca (nvername * sizeof (const char *));
- filename = (const char **) alloca (nvername * sizeof (const char *));
-
- /* Run through the data structures again and collect the strings. */
- if (defscn != NULL)
- {
- /* Run through the version definitions and find the highest
- index. */
- unsigned int offset = 0;
- Elf_Data *defdata;
- GElf_Shdr defshdrmem;
- GElf_Shdr *defshdr;
-
- defdata = elf_getdata (defscn, NULL);
- if (unlikely (defdata == NULL))
- return;
-
- defshdr = gelf_getshdr (defscn, &defshdrmem);
- if (unlikely (defshdr == NULL))
- return;
-
- for (unsigned int cnt = 0; cnt < defshdr->sh_info; ++cnt)
- {
-
- /* Get the data at the next offset. */
- GElf_Verdef defmem;
- GElf_Verdef *def = gelf_getverdef (defdata, offset, &defmem);
- GElf_Verdaux auxmem;
- GElf_Verdaux *aux = gelf_getverdaux (defdata,
- offset + def->vd_aux,
- &auxmem);
- if (unlikely (def == NULL || aux == NULL))
- break;
-
- vername[def->vd_ndx & 0x7fff]
- = elf_strptr (ebl->elf, defshdr->sh_link, aux->vda_name);
- filename[def->vd_ndx & 0x7fff] = NULL;
-
- offset += def->vd_next;
- }
- }
- if (needscn != NULL)
- {
- unsigned int offset = 0;
-
- Elf_Data *needdata = elf_getdata (needscn, NULL);
- GElf_Shdr needshdrmem;
- GElf_Shdr *needshdr = gelf_getshdr (needscn, &needshdrmem);
- if (unlikely (needdata == NULL || needshdr == NULL))
- return;
-
- for (unsigned int cnt = 0; cnt < needshdr->sh_info; ++cnt)
- {
- /* Get the data at the next offset. */
- GElf_Verneed needmem;
- GElf_Verneed *need = gelf_getverneed (needdata, offset,
- &needmem);
- if (unlikely (need == NULL))
- break;
-
- /* Run through the auxiliary entries. */
- unsigned int auxoffset = offset + need->vn_aux;
- for (int cnt2 = need->vn_cnt; --cnt2 >= 0; )
- {
- GElf_Vernaux auxmem;
- GElf_Vernaux *aux = gelf_getvernaux (needdata, auxoffset,
- &auxmem);
- if (unlikely (aux == NULL))
- break;
-
- vername[aux->vna_other & 0x7fff]
- = elf_strptr (ebl->elf, needshdr->sh_link, aux->vna_name);
- filename[aux->vna_other & 0x7fff]
- = elf_strptr (ebl->elf, needshdr->sh_link, need->vn_file);
-
- auxoffset += aux->vna_next;
- }
-
- offset += need->vn_next;
- }
- }
- }
- else
- {
- vername = NULL;
- nvername = 1;
- filename = NULL;
- }
-
- /* Print the header. */
- GElf_Shdr glink;
- printf (ngettext ("\
-\nVersion symbols section [%2u] '%s' contains %d entry:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'",
- "\
-\nVersion symbols section [%2u] '%s' contains %d entries:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'",
- shdr->sh_size / shdr->sh_entsize),
- (unsigned int) elf_ndxscn (scn),
- elf_strptr (ebl->elf, shstrndx, shdr->sh_name),
- (int) (shdr->sh_size / shdr->sh_entsize),
- class == ELFCLASS32 ? 10 : 18, shdr->sh_addr,
- shdr->sh_offset,
- (unsigned int) shdr->sh_link,
- elf_strptr (ebl->elf, shstrndx,
- gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link),
- &glink)->sh_name));
-
- /* Now we can finally look at the actual contents of this section. */
- for (unsigned int cnt = 0; cnt < shdr->sh_size / shdr->sh_entsize; ++cnt)
- {
- if (cnt % 2 == 0)
- printf ("\n %4d:", cnt);
-
- GElf_Versym symmem;
- GElf_Versym *sym = gelf_getversym (data, cnt, &symmem);
- if (sym == NULL)
- break;
-
- switch (*sym)
- {
- ssize_t n;
- case 0:
- fputs_unlocked (gettext (" 0 *local* "),
- stdout);
- break;
-
- case 1:
- fputs_unlocked (gettext (" 1 *global* "),
- stdout);
- break;
-
- default:
- n = printf ("%4d%c%s",
- *sym & 0x7fff, *sym & 0x8000 ? 'h' : ' ',
- (unsigned int) (*sym & 0x7fff) < nvername
- ? vername[*sym & 0x7fff] : "???");
- if ((unsigned int) (*sym & 0x7fff) < nvername
- && filename[*sym & 0x7fff] != NULL)
- n += printf ("(%s)", filename[*sym & 0x7fff]);
- printf ("%*s", MAX (0, 33 - (int) n), " ");
- break;
- }
- }
- putchar_unlocked ('\n');
-}
-
-
-static void
-print_hash_info (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr, size_t shstrndx,
- uint_fast32_t maxlength, Elf32_Word nbucket,
- uint_fast32_t nsyms, uint32_t *lengths, const char *extrastr)
-{
- uint32_t *counts = (uint32_t *) xcalloc (maxlength + 1, sizeof (uint32_t));
-
- for (Elf32_Word cnt = 0; cnt < nbucket; ++cnt)
- ++counts[lengths[cnt]];
-
- GElf_Shdr glink;
- printf (ngettext ("\
-\nHistogram for bucket list length in section [%2u] '%s' (total of %d bucket):\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n",
- "\
-\nHistogram for bucket list length in section [%2u] '%s' (total of %d buckets):\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n",
- nbucket),
- (unsigned int) elf_ndxscn (scn),
- elf_strptr (ebl->elf, shstrndx, shdr->sh_name),
- (int) nbucket,
- gelf_getclass (ebl->elf) == ELFCLASS32 ? 10 : 18,
- shdr->sh_addr,
- shdr->sh_offset,
- (unsigned int) shdr->sh_link,
- elf_strptr (ebl->elf, shstrndx,
- gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link),
- &glink)->sh_name));
-
- if (extrastr != NULL)
- fputs (extrastr, stdout);
-
- if (likely (nbucket > 0))
- {
- uint64_t success = 0;
-
- fputs_unlocked (gettext ("\
- Length Number % of total Coverage\n"), stdout);
- printf (gettext (" 0 %6" PRIu32 " %5.1f%%\n"),
- counts[0], (counts[0] * 100.0) / nbucket);
-
- uint64_t nzero_counts = 0;
- for (Elf32_Word cnt = 1; cnt <= maxlength; ++cnt)
- {
- nzero_counts += counts[cnt] * cnt;
- printf (gettext ("\
-%7d %6" PRIu32 " %5.1f%% %5.1f%%\n"),
- (int) cnt, counts[cnt], (counts[cnt] * 100.0) / nbucket,
- (nzero_counts * 100.0) / nsyms);
- }
-
- Elf32_Word acc = 0;
- for (Elf32_Word cnt = 1; cnt <= maxlength; ++cnt)
- {
- acc += cnt;
- success += counts[cnt] * acc;
- }
-
- printf (gettext ("\
- Average number of tests: successful lookup: %f\n\
- unsuccessful lookup: %f\n"),
- (double) success / (double) nzero_counts,
- (double) nzero_counts / (double) nbucket);
- }
-
- free (counts);
-}
-
-
-/* This function handles the traditional System V-style hash table format. */
-static void
-handle_sysv_hash (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr, size_t shstrndx)
-{
- Elf_Data *data = elf_getdata (scn, NULL);
- if (unlikely (data == NULL))
- {
- error (0, 0, gettext ("cannot get data for section %d: %s"),
- (int) elf_ndxscn (scn), elf_errmsg (-1));
- return;
- }
-
- Elf32_Word nbucket = ((Elf32_Word *) data->d_buf)[0];
- Elf32_Word nchain = ((Elf32_Word *) data->d_buf)[1];
- Elf32_Word *bucket = &((Elf32_Word *) data->d_buf)[2];
- Elf32_Word *chain = &((Elf32_Word *) data->d_buf)[2 + nbucket];
-
- uint32_t *lengths = (uint32_t *) xcalloc (nbucket, sizeof (uint32_t));
-
- uint_fast32_t maxlength = 0;
- uint_fast32_t nsyms = 0;
- for (Elf32_Word cnt = 0; cnt < nbucket; ++cnt)
- {
- Elf32_Word inner = bucket[cnt];
- while (inner > 0 && inner < nchain)
- {
- ++nsyms;
- if (maxlength < ++lengths[cnt])
- ++maxlength;
-
- inner = chain[inner];
- }
- }
-
- print_hash_info (ebl, scn, shdr, shstrndx, maxlength, nbucket, nsyms,
- lengths, NULL);
-
- free (lengths);
-}
-
-
-/* This function handles the incorrect, System V-style hash table
- format some 64-bit architectures use. */
-static void
-handle_sysv_hash64 (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr, size_t shstrndx)
-{
- Elf_Data *data = elf_getdata (scn, NULL);
- if (unlikely (data == NULL))
- {
- error (0, 0, gettext ("cannot get data for section %d: %s"),
- (int) elf_ndxscn (scn), elf_errmsg (-1));
- return;
- }
-
- Elf64_Xword nbucket = ((Elf64_Xword *) data->d_buf)[0];
- Elf64_Xword nchain = ((Elf64_Xword *) data->d_buf)[1];
- Elf64_Xword *bucket = &((Elf64_Xword *) data->d_buf)[2];
- Elf64_Xword *chain = &((Elf64_Xword *) data->d_buf)[2 + nbucket];
-
- uint32_t *lengths = (uint32_t *) xcalloc (nbucket, sizeof (uint32_t));
-
- uint_fast32_t maxlength = 0;
- uint_fast32_t nsyms = 0;
- for (Elf64_Xword cnt = 0; cnt < nbucket; ++cnt)
- {
- Elf64_Xword inner = bucket[cnt];
- while (inner > 0 && inner < nchain)
- {
- ++nsyms;
- if (maxlength < ++lengths[cnt])
- ++maxlength;
-
- inner = chain[inner];
- }
- }
-
- print_hash_info (ebl, scn, shdr, shstrndx, maxlength, nbucket, nsyms,
- lengths, NULL);
-
- free (lengths);
-}
-
-
-/* This function handles the GNU-style hash table format. */
-static void
-handle_gnu_hash (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr, size_t shstrndx)
-{
- Elf_Data *data = elf_getdata (scn, NULL);
- if (unlikely (data == NULL))
- {
- error (0, 0, gettext ("cannot get data for section %d: %s"),
- (int) elf_ndxscn (scn), elf_errmsg (-1));
- return;
- }
-
- Elf32_Word nbucket = ((Elf32_Word *) data->d_buf)[0];
- Elf32_Word symbias = ((Elf32_Word *) data->d_buf)[1];
-
- /* Next comes the size of the bitmap. It's measured in words for
- the architecture. It's 32 bits for 32 bit archs, and 64 bits for
- 64 bit archs. */
- Elf32_Word bitmask_words = ((Elf32_Word *) data->d_buf)[2];
- if (gelf_getclass (ebl->elf) == ELFCLASS64)
- bitmask_words *= 2;
-
- Elf32_Word shift = ((Elf32_Word *) data->d_buf)[3];
-
- uint32_t *lengths = (uint32_t *) xcalloc (nbucket, sizeof (uint32_t));
-
- Elf32_Word *bitmask = &((Elf32_Word *) data->d_buf)[4];
- Elf32_Word *bucket = &((Elf32_Word *) data->d_buf)[4 + bitmask_words];
- Elf32_Word *chain = &((Elf32_Word *) data->d_buf)[4 + bitmask_words
- + nbucket];
-
- /* Compute distribution of chain lengths. */
- uint_fast32_t maxlength = 0;
- uint_fast32_t nsyms = 0;
- for (Elf32_Word cnt = 0; cnt < nbucket; ++cnt)
- if (bucket[cnt] != 0)
- {
- Elf32_Word inner = bucket[cnt] - symbias;
- do
- {
- ++nsyms;
- if (maxlength < ++lengths[cnt])
- ++maxlength;
- }
- while ((chain[inner++] & 1) == 0);
- }
-
- /* Count bits in bitmask. */
- uint_fast32_t nbits = 0;
- for (Elf32_Word cnt = 0; cnt < bitmask_words; ++cnt)
- {
- uint_fast32_t word = bitmask[cnt];
-
- word = (word & 0x55555555) + ((word >> 1) & 0x55555555);
- word = (word & 0x33333333) + ((word >> 2) & 0x33333333);
- word = (word & 0x0f0f0f0f) + ((word >> 4) & 0x0f0f0f0f);
- word = (word & 0x00ff00ff) + ((word >> 8) & 0x00ff00ff);
- nbits += (word & 0x0000ffff) + ((word >> 16) & 0x0000ffff);
- }
-
- char *str;
- if (unlikely (asprintf (&str, gettext ("\
- Symbol Bias: %u\n\
- Bitmask Size: %zu bytes %" PRIuFAST32 "%% bits set 2nd hash shift: %u\n"),
- (unsigned int) symbias,
- bitmask_words * sizeof (Elf32_Word),
- ((nbits * 100 + 50)
- / (uint_fast32_t) (bitmask_words
- * sizeof (Elf32_Word) * 8)),
- (unsigned int) shift) == -1))
- error (EXIT_FAILURE, 0, gettext ("memory exhausted"));
-
- print_hash_info (ebl, scn, shdr, shstrndx, maxlength, nbucket, nsyms,
- lengths, str);
-
- free (str);
- free (lengths);
-}
-
-
-/* Find the symbol table(s). For this we have to search through the
- section table. */
-static void
-handle_hash (Ebl *ebl)
-{
- /* Get the section header string table index. */
- size_t shstrndx;
- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- gettext ("cannot get section header string table index"));
-
- Elf_Scn *scn = NULL;
- while ((scn = elf_nextscn (ebl->elf, scn)) != NULL)
- {
- /* Handle the section if it is a symbol table. */
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
-
- if (likely (shdr != NULL))
- {
- if (shdr->sh_type == SHT_HASH)
- {
- if (ebl_sysvhash_entrysize (ebl) == sizeof (Elf64_Xword))
- handle_sysv_hash64 (ebl, scn, shdr, shstrndx);
- else
- handle_sysv_hash (ebl, scn, shdr, shstrndx);
- }
- else if (shdr->sh_type == SHT_GNU_HASH)
- handle_gnu_hash (ebl, scn, shdr, shstrndx);
- }
- }
-}
-
-
-static void
-print_liblist (Ebl *ebl)
-{
- /* Find the library list sections. For this we have to search
- through the section table. */
- Elf_Scn *scn = NULL;
-
- /* Get the section header string table index. */
- size_t shstrndx;
- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- gettext ("cannot get section header string table index"));
-
- while ((scn = elf_nextscn (ebl->elf, scn)) != NULL)
- {
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
-
- if (shdr != NULL && shdr->sh_type == SHT_GNU_LIBLIST)
- {
- int nentries = shdr->sh_size / shdr->sh_entsize;
- printf (ngettext ("\
-\nLibrary list section [%2zu] '%s' at offset %#0" PRIx64 " contains %d entry:\n",
- "\
-\nLibrary list section [%2zu] '%s' at offset %#0" PRIx64 " contains %d entries:\n",
- nentries),
- elf_ndxscn (scn),
- elf_strptr (ebl->elf, shstrndx, shdr->sh_name),
- shdr->sh_offset,
- nentries);
-
- Elf_Data *data = elf_getdata (scn, NULL);
- if (data == NULL)
- return;
-
- puts (gettext ("\
- Library Time Stamp Checksum Version Flags"));
-
- for (int cnt = 0; cnt < nentries; ++cnt)
- {
- GElf_Lib lib_mem;
- GElf_Lib *lib = gelf_getlib (data, cnt, &lib_mem);
- if (unlikely (lib == NULL))
- continue;
-
- time_t t = (time_t) lib->l_time_stamp;
- struct tm *tm = gmtime (&t);
- if (unlikely (tm == NULL))
- continue;
-
- printf (" [%2d] %-29s %04u-%02u-%02uT%02u:%02u:%02u %08x %-7u %u\n",
- cnt, elf_strptr (ebl->elf, shdr->sh_link, lib->l_name),
- tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
- tm->tm_hour, tm->tm_min, tm->tm_sec,
- (unsigned int) lib->l_checksum,
- (unsigned int) lib->l_version,
- (unsigned int) lib->l_flags);
- }
- }
- }
-}
-
-static void
-print_attributes (Ebl *ebl, const GElf_Ehdr *ehdr)
-{
- /* Find the object attributes sections. For this we have to search
- through the section table. */
- Elf_Scn *scn = NULL;
-
- /* Get the section header string table index. */
- size_t shstrndx;
- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- gettext ("cannot get section header string table index"));
-
- while ((scn = elf_nextscn (ebl->elf, scn)) != NULL)
- {
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
-
- if (shdr == NULL || shdr->sh_type != SHT_GNU_ATTRIBUTES)
- continue;
-
- printf (gettext ("\
-\nObject attributes section [%2zu] '%s' of %" PRIu64
- " bytes at offset %#0" PRIx64 ":\n"),
- elf_ndxscn (scn),
- elf_strptr (ebl->elf, shstrndx, shdr->sh_name),
- shdr->sh_size, shdr->sh_offset);
-
- Elf_Data *data = elf_rawdata (scn, NULL);
- if (data == NULL)
- return;
-
- const unsigned char *p = data->d_buf;
-
- if (unlikely (*p++ != 'A'))
- return;
-
- fputs_unlocked (gettext (" Owner Size\n"), stdout);
-
- inline size_t left (void)
- {
- return (const unsigned char *) data->d_buf + data->d_size - p;
- }
-
- while (left () >= 4)
- {
- uint32_t len;
- memcpy (&len, p, sizeof len);
-
- if (MY_ELFDATA != ehdr->e_ident[EI_DATA])
- CONVERT (len);
-
- if (unlikely (len > left ()))
- break;
-
- const unsigned char *name = p + sizeof len;
- p += len;
-
- unsigned const char *q = memchr (name, '\0', len);
- if (unlikely (q == NULL))
- continue;
- ++q;
-
- printf (gettext (" %-13s %4" PRIu32 "\n"), name, len);
-
- if (q - name == sizeof "gnu"
- && !memcmp (name, "gnu", sizeof "gnu"))
- while (q < p)
- {
- const unsigned char *const sub = q;
-
- unsigned int subsection_tag;
- get_uleb128 (subsection_tag, q);
- if (unlikely (q >= p))
- break;
-
- uint32_t subsection_len;
- if (unlikely (p - sub < (ptrdiff_t) sizeof subsection_len))
- break;
-
- memcpy (&subsection_len, q, sizeof subsection_len);
-
- if (MY_ELFDATA != ehdr->e_ident[EI_DATA])
- CONVERT (subsection_len);
-
- if (unlikely (p - sub < (ptrdiff_t) subsection_len))
- break;
-
- const unsigned char *r = q + sizeof subsection_len;
- q = sub + subsection_len;
-
- switch (subsection_tag)
- {
- default:
- printf (gettext (" %-4u %12" PRIu32 "\n"),
- subsection_tag, subsection_len);
- break;
-
- case 1: /* Tag_File */
- printf (gettext (" File: %11" PRIu32 "\n"),
- subsection_len);
-
- while (r < q)
- {
- unsigned int tag;
- get_uleb128 (tag, r);
- if (unlikely (r >= q))
- break;
-
- uint64_t value = 0;
- const char *string = NULL;
- if (tag == 32 || (tag & 1) == 0)
- {
- get_uleb128 (value, r);
- if (r > q)
- break;
- }
- if (tag == 32 || (tag & 1) != 0)
- {
- r = memchr (r, '\0', q - r);
- if (r == NULL)
- break;
- ++r;
- }
-
- const char *tag_name = NULL;
- const char *value_name = NULL;
- ebl_check_object_attribute (ebl, (const char *) name,
- tag, value,
- &tag_name, &value_name);
-
- if (tag_name != NULL)
- {
- if (tag == 32)
- printf (gettext (" %s: %" PRId64 ", %s\n"),
- tag_name, value, string);
- else if (string == NULL && value_name == NULL)
- printf (gettext (" %s: %" PRId64 "\n"),
- tag_name, value);
- else
- printf (gettext (" %s: %s\n"),
- tag_name, string ?: value_name);
- }
- else
- {
- assert (tag != 32);
- if (string == NULL)
- printf (gettext (" %u: %" PRId64 "\n"),
- tag, value);
- else
- printf (gettext (" %u: %s\n"),
- tag, string);
- }
- }
- }
- }
- }
- }
-}
-
-
-static char *
-format_dwarf_addr (Dwfl_Module *dwflmod,
- int address_size, Dwarf_Addr address)
-{
- /* See if there is a name we can give for this address. */
- GElf_Sym sym;
- const char *name = dwfl_module_addrsym (dwflmod, address, &sym, NULL);
- if (name != NULL)
- sym.st_value = address - sym.st_value;
-
- /* Relativize the address. */
- int n = dwfl_module_relocations (dwflmod);
- int i = n < 1 ? -1 : dwfl_module_relocate_address (dwflmod, &address);
-
- /* In an ET_REL file there is a section name to refer to. */
- const char *scn = (i < 0 ? NULL
- : dwfl_module_relocation_info (dwflmod, i, NULL));
-
- char *result;
- if ((name != NULL
- ? (sym.st_value != 0
- ? (scn != NULL
- ? (address_size == 0
- ? asprintf (&result,
- gettext ("%s+%#" PRIx64 " <%s+%#" PRIx64 ">"),
- scn, address, name, sym.st_value)
- : asprintf (&result,
- gettext ("%s+%#0*" PRIx64 " <%s+%#" PRIx64 ">"),
- scn, 2 + address_size * 2, address,
- name, sym.st_value))
- : (address_size == 0
- ? asprintf (&result,
- gettext ("%#" PRIx64 " <%s+%#" PRIx64 ">"),
- address, name, sym.st_value)
- : asprintf (&result,
- gettext ("%#0*" PRIx64 " <%s+%#" PRIx64 ">"),
- 2 + address_size * 2, address,
- name, sym.st_value)))
- : (scn != NULL
- ? (address_size == 0
- ? asprintf (&result,
- gettext ("%s+%#" PRIx64 " <%s>"),
- scn, address, name)
- : asprintf (&result,
- gettext ("%s+%#0*" PRIx64 " <%s>"),
- scn, 2 + address_size * 2, address, name))
- : (address_size == 0
- ? asprintf (&result,
- gettext ("%#" PRIx64 " <%s>"),
- address, name)
- : asprintf (&result,
- gettext ("%#0*" PRIx64 " <%s>"),
- 2 + address_size * 2, address, name))))
- : (scn != NULL
- ? (address_size == 0
- ? asprintf (&result,
- gettext ("%s+%#" PRIx64),
- scn, address)
- : asprintf (&result,
- gettext ("%s+%#0*" PRIx64),
- scn, 2 + address_size * 2, address))
- : (address_size == 0
- ? asprintf (&result,
- "%#" PRIx64,
- address)
- : asprintf (&result,
- "%#0*" PRIx64,
- 2 + address_size * 2, address)))) < 0)
- error (EXIT_FAILURE, 0, _("memory exhausted"));
-
- return result;
-}
-
-static const char *
-dwarf_tag_string (unsigned int tag)
-{
- static const char *const known_tags[] =
- {
- [DW_TAG_array_type] = "array_type",
- [DW_TAG_class_type] = "class_type",
- [DW_TAG_entry_point] = "entry_point",
- [DW_TAG_enumeration_type] = "enumeration_type",
- [DW_TAG_formal_parameter] = "formal_parameter",
- [DW_TAG_imported_declaration] = "imported_declaration",
- [DW_TAG_label] = "label",
- [DW_TAG_lexical_block] = "lexical_block",
- [DW_TAG_member] = "member",
- [DW_TAG_pointer_type] = "pointer_type",
- [DW_TAG_reference_type] = "reference_type",
- [DW_TAG_compile_unit] = "compile_unit",
- [DW_TAG_string_type] = "string_type",
- [DW_TAG_structure_type] = "structure_type",
- [DW_TAG_subroutine_type] = "subroutine_type",
- [DW_TAG_typedef] = "typedef",
- [DW_TAG_union_type] = "union_type",
- [DW_TAG_unspecified_parameters] = "unspecified_parameters",
- [DW_TAG_variant] = "variant",
- [DW_TAG_common_block] = "common_block",
- [DW_TAG_common_inclusion] = "common_inclusion",
- [DW_TAG_inheritance] = "inheritance",
- [DW_TAG_inlined_subroutine] = "inlined_subroutine",
- [DW_TAG_module] = "module",
- [DW_TAG_ptr_to_member_type] = "ptr_to_member_type",
- [DW_TAG_set_type] = "set_type",
- [DW_TAG_subrange_type] = "subrange_type",
- [DW_TAG_with_stmt] = "with_stmt",
- [DW_TAG_access_declaration] = "access_declaration",
- [DW_TAG_base_type] = "base_type",
- [DW_TAG_catch_block] = "catch_block",
- [DW_TAG_const_type] = "const_type",
- [DW_TAG_constant] = "constant",
- [DW_TAG_enumerator] = "enumerator",
- [DW_TAG_file_type] = "file_type",
- [DW_TAG_friend] = "friend",
- [DW_TAG_namelist] = "namelist",
- [DW_TAG_namelist_item] = "namelist_item",
- [DW_TAG_packed_type] = "packed_type",
- [DW_TAG_subprogram] = "subprogram",
- [DW_TAG_template_type_parameter] = "template_type_parameter",
- [DW_TAG_template_value_parameter] = "template_value_parameter",
- [DW_TAG_thrown_type] = "thrown_type",
- [DW_TAG_try_block] = "try_block",
- [DW_TAG_variant_part] = "variant_part",
- [DW_TAG_variable] = "variable",
- [DW_TAG_volatile_type] = "volatile_type",
- [DW_TAG_dwarf_procedure] = "dwarf_procedure",
- [DW_TAG_restrict_type] = "restrict_type",
- [DW_TAG_interface_type] = "interface_type",
- [DW_TAG_namespace] = "namespace",
- [DW_TAG_imported_module] = "imported_module",
- [DW_TAG_unspecified_type] = "unspecified_type",
- [DW_TAG_partial_unit] = "partial_unit",
- [DW_TAG_imported_unit] = "imported_unit",
- [DW_TAG_mutable_type] = "mutable_type",
- [DW_TAG_condition] = "condition",
- [DW_TAG_shared_type] = "shared_type",
- };
- const unsigned int nknown_tags = (sizeof (known_tags)
- / sizeof (known_tags[0]));
- static char buf[40];
- const char *result = NULL;
-
- if (likely (tag < nknown_tags))
- result = known_tags[tag];
-
- if (unlikely (result == NULL))
- /* There are a few known extensions. */
- switch (tag)
- {
- case DW_TAG_MIPS_loop:
- result = "MIPS_loop";
- break;
-
- case DW_TAG_format_label:
- result = "format_label";
- break;
-
- case DW_TAG_function_template:
- result = "function_template";
- break;
-
- case DW_TAG_class_template:
- result = "class_template";
- break;
-
- default:
- if (tag < DW_TAG_lo_user)
- snprintf (buf, sizeof buf, gettext ("unknown tag %hx"), tag);
- else
- snprintf (buf, sizeof buf, gettext ("unknown user tag %hx"), tag);
- result = buf;
- break;
- }
-
- return result;
-}
-
-
-static const char *
-dwarf_attr_string (unsigned int attrnum)
-{
- static const char *const known_attrs[] =
- {
- [DW_AT_sibling] = "sibling",
- [DW_AT_location] = "location",
- [DW_AT_name] = "name",
- [DW_AT_ordering] = "ordering",
- [DW_AT_subscr_data] = "subscr_data",
- [DW_AT_byte_size] = "byte_size",
- [DW_AT_bit_offset] = "bit_offset",
- [DW_AT_bit_size] = "bit_size",
- [DW_AT_element_list] = "element_list",
- [DW_AT_stmt_list] = "stmt_list",
- [DW_AT_low_pc] = "low_pc",
- [DW_AT_high_pc] = "high_pc",
- [DW_AT_language] = "language",
- [DW_AT_member] = "member",
- [DW_AT_discr] = "discr",
- [DW_AT_discr_value] = "discr_value",
- [DW_AT_visibility] = "visibility",
- [DW_AT_import] = "import",
- [DW_AT_string_length] = "string_length",
- [DW_AT_common_reference] = "common_reference",
- [DW_AT_comp_dir] = "comp_dir",
- [DW_AT_const_value] = "const_value",
- [DW_AT_containing_type] = "containing_type",
- [DW_AT_default_value] = "default_value",
- [DW_AT_inline] = "inline",
- [DW_AT_is_optional] = "is_optional",
- [DW_AT_lower_bound] = "lower_bound",
- [DW_AT_producer] = "producer",
- [DW_AT_prototyped] = "prototyped",
- [DW_AT_return_addr] = "return_addr",
- [DW_AT_start_scope] = "start_scope",
- [DW_AT_bit_stride] = "bit_stride",
- [DW_AT_upper_bound] = "upper_bound",
- [DW_AT_abstract_origin] = "abstract_origin",
- [DW_AT_accessibility] = "accessibility",
- [DW_AT_address_class] = "address_class",
- [DW_AT_artificial] = "artificial",
- [DW_AT_base_types] = "base_types",
- [DW_AT_calling_convention] = "calling_convention",
- [DW_AT_count] = "count",
- [DW_AT_data_member_location] = "data_member_location",
- [DW_AT_decl_column] = "decl_column",
- [DW_AT_decl_file] = "decl_file",
- [DW_AT_decl_line] = "decl_line",
- [DW_AT_declaration] = "declaration",
- [DW_AT_discr_list] = "discr_list",
- [DW_AT_encoding] = "encoding",
- [DW_AT_external] = "external",
- [DW_AT_frame_base] = "frame_base",
- [DW_AT_friend] = "friend",
- [DW_AT_identifier_case] = "identifier_case",
- [DW_AT_macro_info] = "macro_info",
- [DW_AT_namelist_item] = "namelist_item",
- [DW_AT_priority] = "priority",
- [DW_AT_segment] = "segment",
- [DW_AT_specification] = "specification",
- [DW_AT_static_link] = "static_link",
- [DW_AT_type] = "type",
- [DW_AT_use_location] = "use_location",
- [DW_AT_variable_parameter] = "variable_parameter",
- [DW_AT_virtuality] = "virtuality",
- [DW_AT_vtable_elem_location] = "vtable_elem_location",
- [DW_AT_allocated] = "allocated",
- [DW_AT_associated] = "associated",
- [DW_AT_data_location] = "data_location",
- [DW_AT_byte_stride] = "byte_stride",
- [DW_AT_entry_pc] = "entry_pc",
- [DW_AT_use_UTF8] = "use_UTF8",
- [DW_AT_extension] = "extension",
- [DW_AT_ranges] = "ranges",
- [DW_AT_trampoline] = "trampoline",
- [DW_AT_call_column] = "call_column",
- [DW_AT_call_file] = "call_file",
- [DW_AT_call_line] = "call_line",
- [DW_AT_description] = "description",
- [DW_AT_binary_scale] = "binary_scale",
- [DW_AT_decimal_scale] = "decimal_scale",
- [DW_AT_small] = "small",
- [DW_AT_decimal_sign] = "decimal_sign",
- [DW_AT_digit_count] = "digit_count",
- [DW_AT_picture_string] = "picture_string",
- [DW_AT_mutable] = "mutable",
- [DW_AT_threads_scaled] = "threads_scaled",
- [DW_AT_explicit] = "explicit",
- [DW_AT_object_pointer] = "object_pointer",
- [DW_AT_endianity] = "endianity",
- [DW_AT_elemental] = "elemental",
- [DW_AT_pure] = "pure",
- [DW_AT_recursive] = "recursive",
- };
- const unsigned int nknown_attrs = (sizeof (known_attrs)
- / sizeof (known_attrs[0]));
- static char buf[40];
- const char *result = NULL;
-
- if (likely (attrnum < nknown_attrs))
- result = known_attrs[attrnum];
-
- if (unlikely (result == NULL))
- /* There are a few known extensions. */
- switch (attrnum)
- {
- case DW_AT_MIPS_fde:
- result = "MIPS_fde";
- break;
-
- case DW_AT_MIPS_loop_begin:
- result = "MIPS_loop_begin";
- break;
-
- case DW_AT_MIPS_tail_loop_begin:
- result = "MIPS_tail_loop_begin";
- break;
-
- case DW_AT_MIPS_epilog_begin:
- result = "MIPS_epilog_begin";
- break;
-
- case DW_AT_MIPS_loop_unroll_factor:
- result = "MIPS_loop_unroll_factor";
- break;
-
- case DW_AT_MIPS_software_pipeline_depth:
- result = "MIPS_software_pipeline_depth";
- break;
-
- case DW_AT_MIPS_linkage_name:
- result = "MIPS_linkage_name";
- break;
-
- case DW_AT_MIPS_stride:
- result = "MIPS_stride";
- break;
-
- case DW_AT_MIPS_abstract_name:
- result = "MIPS_abstract_name";
- break;
-
- case DW_AT_MIPS_clone_origin:
- result = "MIPS_clone_origin";
- break;
-
- case DW_AT_MIPS_has_inlines:
- result = "MIPS_has_inlines";
- break;
-
- case DW_AT_MIPS_stride_byte:
- result = "MIPS_stride_byte";
- break;
-
- case DW_AT_MIPS_stride_elem:
- result = "MIPS_stride_elem";
- break;
-
- case DW_AT_MIPS_ptr_dopetype:
- result = "MIPS_ptr_dopetype";
- break;
-
- case DW_AT_MIPS_allocatable_dopetype:
- result = "MIPS_allocatable_dopetype";
- break;
-
- case DW_AT_MIPS_assumed_shape_dopetype:
- result = "MIPS_assumed_shape_dopetype";
- break;
-
- case DW_AT_MIPS_assumed_size:
- result = "MIPS_assumed_size";
- break;
-
- case DW_AT_sf_names:
- result = "sf_names";
- break;
-
- case DW_AT_src_info:
- result = "src_info";
- break;
-
- case DW_AT_mac_info:
- result = "mac_info";
- break;
-
- case DW_AT_src_coords:
- result = "src_coords";
- break;
-
- case DW_AT_body_begin:
- result = "body_begin";
- break;
-
- case DW_AT_body_end:
- result = "body_end";
- break;
-
- default:
- if (attrnum < DW_AT_lo_user)
- snprintf (buf, sizeof buf, gettext ("unknown attribute %hx"),
- attrnum);
- else
- snprintf (buf, sizeof buf, gettext ("unknown user attribute %hx"),
- attrnum);
- result = buf;
- break;
- }
-
- return result;
-}
-
-
-static const char *
-dwarf_form_string (unsigned int form)
-{
- static const char *const known_forms[] =
- {
- [DW_FORM_addr] = "addr",
- [DW_FORM_block2] = "block2",
- [DW_FORM_block4] = "block4",
- [DW_FORM_data2] = "data2",
- [DW_FORM_data4] = "data4",
- [DW_FORM_data8] = "data8",
- [DW_FORM_string] = "string",
- [DW_FORM_block] = "block",
- [DW_FORM_block1] = "block1",
- [DW_FORM_data1] = "data1",
- [DW_FORM_flag] = "flag",
- [DW_FORM_sdata] = "sdata",
- [DW_FORM_strp] = "strp",
- [DW_FORM_udata] = "udata",
- [DW_FORM_ref_addr] = "ref_addr",
- [DW_FORM_ref1] = "ref1",
- [DW_FORM_ref2] = "ref2",
- [DW_FORM_ref4] = "ref4",
- [DW_FORM_ref8] = "ref8",
- [DW_FORM_ref_udata] = "ref_udata",
- [DW_FORM_indirect] = "indirect"
- };
- const unsigned int nknown_forms = (sizeof (known_forms)
- / sizeof (known_forms[0]));
- static char buf[40];
- const char *result = NULL;
-
- if (likely (form < nknown_forms))
- result = known_forms[form];
-
- if (unlikely (result == NULL))
- snprintf (buf, sizeof buf, gettext ("unknown form %" PRIx64),
- (uint64_t) form);
-
- return result;
-}
-
-
-static const char *
-dwarf_lang_string (unsigned int lang)
-{
- static const char *const known[] =
- {
- [DW_LANG_C89] = "ISO C89",
- [DW_LANG_C] = "C",
- [DW_LANG_Ada83] = "Ada83",
- [DW_LANG_C_plus_plus] = "C++",
- [DW_LANG_Cobol74] = "Cobol74",
- [DW_LANG_Cobol85] = "Cobol85",
- [DW_LANG_Fortran77] = "Fortran77",
- [DW_LANG_Fortran90] = "Fortran90",
- [DW_LANG_Pascal83] = "Pascal83",
- [DW_LANG_Modula2] = "Modula2",
- [DW_LANG_Java] = "Java",
- [DW_LANG_C99] = "ISO C99",
- [DW_LANG_Ada95] = "Ada95",
- [DW_LANG_Fortran95] = "Fortran95",
- [DW_LANG_PL1] = "PL1",
- [DW_LANG_Objc] = "Objective C",
- [DW_LANG_ObjC_plus_plus] = "Objective C++",
- [DW_LANG_UPC] = "UPC",
- [DW_LANG_D] = "D",
- };
-
- if (likely (lang < sizeof (known) / sizeof (known[0])))
- return known[lang];
- else if (lang == DW_LANG_Mips_Assembler)
- /* This language tag is used for assembler in general. */
- return "Assembler";
-
- if (lang >= DW_LANG_lo_user && lang <= DW_LANG_hi_user)
- {
- static char buf[30];
- snprintf (buf, sizeof (buf), "lo_user+%u", lang - DW_LANG_lo_user);
- return buf;
- }
-
- return "???";
-}
-
-
-static const char *
-dwarf_inline_string (unsigned int code)
-{
- static const char *const known[] =
- {
- [DW_INL_not_inlined] = "not_inlined",
- [DW_INL_inlined] = "inlined",
- [DW_INL_declared_not_inlined] = "declared_not_inlined",
- [DW_INL_declared_inlined] = "declared_inlined"
- };
-
- if (likely (code < sizeof (known) / sizeof (known[0])))
- return known[code];
-
- return "???";
-}
-
-
-static const char *
-dwarf_encoding_string (unsigned int code)
-{
- static const char *const known[] =
- {
- [DW_ATE_void] = "void",
- [DW_ATE_address] = "address",
- [DW_ATE_boolean] = "boolean",
- [DW_ATE_complex_float] = "complex_float",
- [DW_ATE_float] = "float",
- [DW_ATE_signed] = "signed",
- [DW_ATE_signed_char] = "signed_char",
- [DW_ATE_unsigned] = "unsigned",
- [DW_ATE_unsigned_char] = "unsigned_char",
- [DW_ATE_imaginary_float] = "imaginary_float",
- [DW_ATE_packed_decimal] = "packed_decimal",
- [DW_ATE_numeric_string] = "numeric_string",
- [DW_ATE_edited] = "edited",
- [DW_ATE_signed_fixed] = "signed_fixed",
- [DW_ATE_unsigned_fixed] = "unsigned_fixed",
- [DW_ATE_decimal_float] = "decimal_float",
- };
-
- if (likely (code < sizeof (known) / sizeof (known[0])))
- return known[code];
-
- if (code >= DW_ATE_lo_user && code <= DW_ATE_hi_user)
- {
- static char buf[30];
- snprintf (buf, sizeof (buf), "lo_user+%u", code - DW_ATE_lo_user);
- return buf;
- }
-
- return "???";
-}
-
-
-static const char *
-dwarf_access_string (unsigned int code)
-{
- static const char *const known[] =
- {
- [DW_ACCESS_public] = "public",
- [DW_ACCESS_protected] = "protected",
- [DW_ACCESS_private] = "private"
- };
-
- if (likely (code < sizeof (known) / sizeof (known[0])))
- return known[code];
-
- return "???";
-}
-
-
-static const char *
-dwarf_visibility_string (unsigned int code)
-{
- static const char *const known[] =
- {
- [DW_VIS_local] = "local",
- [DW_VIS_exported] = "exported",
- [DW_VIS_qualified] = "qualified"
- };
-
- if (likely (code < sizeof (known) / sizeof (known[0])))
- return known[code];
-
- return "???";
-}
-
-
-static const char *
-dwarf_virtuality_string (unsigned int code)
-{
- static const char *const known[] =
- {
- [DW_VIRTUALITY_none] = "none",
- [DW_VIRTUALITY_virtual] = "virtual",
- [DW_VIRTUALITY_pure_virtual] = "pure_virtual"
- };
-
- if (likely (code < sizeof (known) / sizeof (known[0])))
- return known[code];
-
- return "???";
-}
-
-
-static const char *
-dwarf_identifier_case_string (unsigned int code)
-{
- static const char *const known[] =
- {
- [DW_ID_case_sensitive] = "sensitive",
- [DW_ID_up_case] = "up_case",
- [DW_ID_down_case] = "down_case",
- [DW_ID_case_insensitive] = "insensitive"
- };
-
- if (likely (code < sizeof (known) / sizeof (known[0])))
- return known[code];
-
- return "???";
-}
-
-
-static const char *
-dwarf_calling_convention_string (unsigned int code)
-{
- static const char *const known[] =
- {
- [DW_CC_normal] = "normal",
- [DW_CC_program] = "program",
- [DW_CC_nocall] = "nocall",
- };
-
- if (likely (code < sizeof (known) / sizeof (known[0])))
- return known[code];
-
- if (code >= DW_CC_lo_user && code <= DW_CC_hi_user)
- {
- static char buf[30];
- snprintf (buf, sizeof (buf), "lo_user+%u", code - DW_CC_lo_user);
- return buf;
- }
-
- return "???";
-}
-
-
-static const char *
-dwarf_ordering_string (unsigned int code)
-{
- static const char *const known[] =
- {
- [DW_ORD_row_major] = "row_major",
- [DW_ORD_col_major] = "col_major"
- };
-
- if (likely (code < sizeof (known) / sizeof (known[0])))
- return known[code];
-
- return "???";
-}
-
-
-static const char *
-dwarf_discr_list_string (unsigned int code)
-{
- static const char *const known[] =
- {
- [DW_DSC_label] = "label",
- [DW_DSC_range] = "range"
- };
-
- if (likely (code < sizeof (known) / sizeof (known[0])))
- return known[code];
-
- return "???";
-}
-
-
-static void
-print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest,
- unsigned int addrsize, Dwarf_Word len, const unsigned char *data)
-{
- static const char *const known[] =
- {
- [DW_OP_addr] = "addr",
- [DW_OP_deref] = "deref",
- [DW_OP_const1u] = "const1u",
- [DW_OP_const1s] = "const1s",
- [DW_OP_const2u] = "const2u",
- [DW_OP_const2s] = "const2s",
- [DW_OP_const4u] = "const4u",
- [DW_OP_const4s] = "const4s",
- [DW_OP_const8u] = "const8u",
- [DW_OP_const8s] = "const8s",
- [DW_OP_constu] = "constu",
- [DW_OP_consts] = "consts",
- [DW_OP_dup] = "dup",
- [DW_OP_drop] = "drop",
- [DW_OP_over] = "over",
- [DW_OP_pick] = "pick",
- [DW_OP_swap] = "swap",
- [DW_OP_rot] = "rot",
- [DW_OP_xderef] = "xderef",
- [DW_OP_abs] = "abs",
- [DW_OP_and] = "and",
- [DW_OP_div] = "div",
- [DW_OP_minus] = "minus",
- [DW_OP_mod] = "mod",
- [DW_OP_mul] = "mul",
- [DW_OP_neg] = "neg",
- [DW_OP_not] = "not",
- [DW_OP_or] = "or",
- [DW_OP_plus] = "plus",
- [DW_OP_plus_uconst] = "plus_uconst",
- [DW_OP_shl] = "shl",
- [DW_OP_shr] = "shr",
- [DW_OP_shra] = "shra",
- [DW_OP_xor] = "xor",
- [DW_OP_bra] = "bra",
- [DW_OP_eq] = "eq",
- [DW_OP_ge] = "ge",
- [DW_OP_gt] = "gt",
- [DW_OP_le] = "le",
- [DW_OP_lt] = "lt",
- [DW_OP_ne] = "ne",
- [DW_OP_skip] = "skip",
- [DW_OP_lit0] = "lit0",
- [DW_OP_lit1] = "lit1",
- [DW_OP_lit2] = "lit2",
- [DW_OP_lit3] = "lit3",
- [DW_OP_lit4] = "lit4",
- [DW_OP_lit5] = "lit5",
- [DW_OP_lit6] = "lit6",
- [DW_OP_lit7] = "lit7",
- [DW_OP_lit8] = "lit8",
- [DW_OP_lit9] = "lit9",
- [DW_OP_lit10] = "lit10",
- [DW_OP_lit11] = "lit11",
- [DW_OP_lit12] = "lit12",
- [DW_OP_lit13] = "lit13",
- [DW_OP_lit14] = "lit14",
- [DW_OP_lit15] = "lit15",
- [DW_OP_lit16] = "lit16",
- [DW_OP_lit17] = "lit17",
- [DW_OP_lit18] = "lit18",
- [DW_OP_lit19] = "lit19",
- [DW_OP_lit20] = "lit20",
- [DW_OP_lit21] = "lit21",
- [DW_OP_lit22] = "lit22",
- [DW_OP_lit23] = "lit23",
- [DW_OP_lit24] = "lit24",
- [DW_OP_lit25] = "lit25",
- [DW_OP_lit26] = "lit26",
- [DW_OP_lit27] = "lit27",
- [DW_OP_lit28] = "lit28",
- [DW_OP_lit29] = "lit29",
- [DW_OP_lit30] = "lit30",
- [DW_OP_lit31] = "lit31",
- [DW_OP_reg0] = "reg0",
- [DW_OP_reg1] = "reg1",
- [DW_OP_reg2] = "reg2",
- [DW_OP_reg3] = "reg3",
- [DW_OP_reg4] = "reg4",
- [DW_OP_reg5] = "reg5",
- [DW_OP_reg6] = "reg6",
- [DW_OP_reg7] = "reg7",
- [DW_OP_reg8] = "reg8",
- [DW_OP_reg9] = "reg9",
- [DW_OP_reg10] = "reg10",
- [DW_OP_reg11] = "reg11",
- [DW_OP_reg12] = "reg12",
- [DW_OP_reg13] = "reg13",
- [DW_OP_reg14] = "reg14",
- [DW_OP_reg15] = "reg15",
- [DW_OP_reg16] = "reg16",
- [DW_OP_reg17] = "reg17",
- [DW_OP_reg18] = "reg18",
- [DW_OP_reg19] = "reg19",
- [DW_OP_reg20] = "reg20",
- [DW_OP_reg21] = "reg21",
- [DW_OP_reg22] = "reg22",
- [DW_OP_reg23] = "reg23",
- [DW_OP_reg24] = "reg24",
- [DW_OP_reg25] = "reg25",
- [DW_OP_reg26] = "reg26",
- [DW_OP_reg27] = "reg27",
- [DW_OP_reg28] = "reg28",
- [DW_OP_reg29] = "reg29",
- [DW_OP_reg30] = "reg30",
- [DW_OP_reg31] = "reg31",
- [DW_OP_breg0] = "breg0",
- [DW_OP_breg1] = "breg1",
- [DW_OP_breg2] = "breg2",
- [DW_OP_breg3] = "breg3",
- [DW_OP_breg4] = "breg4",
- [DW_OP_breg5] = "breg5",
- [DW_OP_breg6] = "breg6",
- [DW_OP_breg7] = "breg7",
- [DW_OP_breg8] = "breg8",
- [DW_OP_breg9] = "breg9",
- [DW_OP_breg10] = "breg10",
- [DW_OP_breg11] = "breg11",
- [DW_OP_breg12] = "breg12",
- [DW_OP_breg13] = "breg13",
- [DW_OP_breg14] = "breg14",
- [DW_OP_breg15] = "breg15",
- [DW_OP_breg16] = "breg16",
- [DW_OP_breg17] = "breg17",
- [DW_OP_breg18] = "breg18",
- [DW_OP_breg19] = "breg19",
- [DW_OP_breg20] = "breg20",
- [DW_OP_breg21] = "breg21",
- [DW_OP_breg22] = "breg22",
- [DW_OP_breg23] = "breg23",
- [DW_OP_breg24] = "breg24",
- [DW_OP_breg25] = "breg25",
- [DW_OP_breg26] = "breg26",
- [DW_OP_breg27] = "breg27",
- [DW_OP_breg28] = "breg28",
- [DW_OP_breg29] = "breg29",
- [DW_OP_breg30] = "breg30",
- [DW_OP_breg31] = "breg31",
- [DW_OP_regx] = "regx",
- [DW_OP_fbreg] = "fbreg",
- [DW_OP_bregx] = "bregx",
- [DW_OP_piece] = "piece",
- [DW_OP_deref_size] = "deref_size",
- [DW_OP_xderef_size] = "xderef_size",
- [DW_OP_nop] = "nop",
- [DW_OP_push_object_address] = "push_object_address",
- [DW_OP_call2] = "call2",
- [DW_OP_call4] = "call4",
- [DW_OP_call_ref] = "call_ref",
- [DW_OP_form_tls_address] = "form_tls_address",
- [DW_OP_call_frame_cfa] = "call_frame_cfa",
- [DW_OP_bit_piece] = "bit_piece",
- };
-
- Dwarf_Word offset = 0;
- while (len-- > 0)
- {
- uint_fast8_t op = *data++;
-
- switch (op)
- {
- case DW_OP_call_ref:
- case DW_OP_addr:;
- /* Address operand. */
- Dwarf_Word addr;
- if (addrsize == 4)
- addr = read_4ubyte_unaligned (dbg, data);
- else
- {
- assert (addrsize == 8);
- addr = read_8ubyte_unaligned (dbg, data);
- }
- data += addrsize;
- len -= addrsize;
-
- if (op == DW_OP_addr)
- {
- char *a = format_dwarf_addr (dwflmod, 0, addr);
- printf ("%*s[%4" PRIuMAX "] %s %s\n",
- indent, "", (uintmax_t) offset,
- known[op] ?: "???", a);
- free (a);
- }
- else
- printf ("%*s[%4" PRIuMAX "] %s %#" PRIxMAX "\n",
- indent, "", (uintmax_t) offset,
- known[op] ?: "???", (uintmax_t) addr);
- offset += 1 + addrsize;
- break;
-
- case DW_OP_deref_size:
- case DW_OP_xderef_size:
- case DW_OP_pick:
- case DW_OP_const1u:
- printf ("%*s[%4" PRIuMAX "] %s %" PRIu8 "\n",
- indent, "", (uintmax_t) offset,
- known[op] ?: "???", *((uint8_t *) data));
- ++data;
- --len;
- offset += 2;
- break;
-
- case DW_OP_const2u:
- printf ("%*s[%4" PRIuMAX "] %s %" PRIu16 "\n",
- indent, "", (uintmax_t) offset,
- known[op] ?: "???", read_2ubyte_unaligned (dbg, data));
- len -= 2;
- data += 2;
- offset += 3;
- break;
-
- case DW_OP_const4u:
- printf ("%*s[%4" PRIuMAX "] %s %" PRIu32 "\n",
- indent, "", (uintmax_t) offset,
- known[op] ?: "???", read_4ubyte_unaligned (dbg, data));
- len -= 4;
- data += 4;
- offset += 5;
- break;
-
- case DW_OP_const8u:
- printf ("%*s[%4" PRIuMAX "] %s %" PRIu64 "\n",
- indent, "", (uintmax_t) offset,
- known[op] ?: "???", read_8ubyte_unaligned (dbg, data));
- len -= 8;
- data += 8;
- offset += 9;
- break;
-
- case DW_OP_const1s:
- printf ("%*s[%4" PRIuMAX "] %s %" PRId8 "\n",
- indent, "", (uintmax_t) offset,
- known[op] ?: "???", *((int8_t *) data));
- ++data;
- --len;
- offset += 2;
- break;
-
- case DW_OP_const2s:
- printf ("%*s[%4" PRIuMAX "] %s %" PRId16 "\n",
- indent, "", (uintmax_t) offset,
- known[op] ?: "???", read_2sbyte_unaligned (dbg, data));
- len -= 2;
- data += 2;
- offset += 3;
- break;
-
- case DW_OP_const4s:
- printf ("%*s[%4" PRIuMAX "] %s %" PRId32 "\n",
- indent, "", (uintmax_t) offset,
- known[op] ?: "???", read_4sbyte_unaligned (dbg, data));
- len -= 4;
- data += 4;
- offset += 5;
- break;
-
- case DW_OP_const8s:
- printf ("%*s[%4" PRIuMAX "] %s %" PRId64 "\n",
- indent, "", (uintmax_t) offset,
- known[op] ?: "???", read_8sbyte_unaligned (dbg, data));
- len -= 8;
- data += 8;
- offset += 9;
- break;
-
- case DW_OP_piece:
- case DW_OP_regx:
- case DW_OP_plus_uconst:
- case DW_OP_constu:;
- const unsigned char *start = data;
- unsigned int uleb;
- get_uleb128 (uleb, data);
- printf ("%*s[%4" PRIuMAX "] %s %u\n",
- indent, "", (uintmax_t) offset,
- known[op] ?: "???", uleb);
- len -= data - start;
- offset += 1 + (data - start);
- break;
-
- case DW_OP_bit_piece:
- start = data;
- unsigned int uleb2;
- get_uleb128 (uleb, data);
- get_uleb128 (uleb2, data);
- printf ("%*s[%4" PRIuMAX "] %s %u, %u\n",
- indent, "", (uintmax_t) offset,
- known[op] ?: "???", uleb, uleb2);
- len -= data - start;
- offset += 1 + (data - start);
- break;
-
- case DW_OP_fbreg:
- case DW_OP_breg0 ... DW_OP_breg31:
- case DW_OP_consts:
- start = data;
- unsigned int sleb;
- get_sleb128 (sleb, data);
- printf ("%*s[%4" PRIuMAX "] %s %d\n",
- indent, "", (uintmax_t) offset,
- known[op] ?: "???", sleb);
- len -= data - start;
- offset += 1 + (data - start);
- break;
-
- case DW_OP_bregx:
- start = data;
- get_uleb128 (uleb, data);
- get_sleb128 (sleb, data);
- printf ("%*s[%4" PRIuMAX "] %s %u %d\n",
- indent, "", (uintmax_t) offset,
- known[op] ?: "???", uleb, sleb);
- len -= data - start;
- offset += 1 + (data - start);
- break;
-
- case DW_OP_call2:
- case DW_OP_call4:
- case DW_OP_skip:
- case DW_OP_bra:
- printf ("%*s[%4" PRIuMAX "] %s %" PRIuMAX "\n",
- indent, "", (uintmax_t) offset,
- known[op] ?: "???",
- (uintmax_t) (offset + read_2sbyte_unaligned (dbg, data)));
- len -= 2;
- data += 2;
- offset += 3;
- break;
-
- default:
- /* No Operand. */
- if (op < sizeof known / sizeof known[0] && known[op] != NULL)
- printf ("%*s[%4" PRIuMAX "] %s\n",
- indent, "", (uintmax_t) offset, known[op]);
- else
- printf ("%*s[%4" PRIuMAX "] %#x\n",
- indent, "", (uintmax_t) offset, op);
- ++offset;
- break;
- }
-
- indent = indentrest;
- }
-}
-
-
-static void
-print_debug_abbrev_section (Dwfl_Module *dwflmod __attribute__ ((unused)),
- Ebl *ebl __attribute__ ((unused)),
- GElf_Ehdr *ehdr __attribute__ ((unused)),
- Elf_Scn *scn __attribute__ ((unused)),
- GElf_Shdr *shdr, Dwarf *dbg)
-{
- printf (gettext ("\nDWARF section '%s' at offset %#" PRIx64 ":\n"
- " [ Code]\n"),
- ".debug_abbrev", (uint64_t) shdr->sh_offset);
-
- Dwarf_Off offset = 0;
- while (offset < shdr->sh_size)
- {
- printf (gettext ("\nAbbreviation section at offset %" PRIu64 ":\n"),
- offset);
-
- while (1)
- {
- size_t length;
- Dwarf_Abbrev abbrev;
-
- int res = dwarf_offabbrev (dbg, offset, &length, &abbrev);
- if (res != 0)
- {
- if (unlikely (res < 0))
- {
- printf (gettext ("\
- *** error while reading abbreviation: %s\n"),
- dwarf_errmsg (-1));
- return;
- }
-
- /* This is the NUL byte at the end of the section. */
- ++offset;
- break;
- }
-
- /* We know these calls can never fail. */
- unsigned int code = dwarf_getabbrevcode (&abbrev);
- unsigned int tag = dwarf_getabbrevtag (&abbrev);
- int has_children = dwarf_abbrevhaschildren (&abbrev);
-
- printf (gettext (" [%5u] offset: %" PRId64
- ", children: %s, tag: %s\n"),
- code, (int64_t) offset,
- has_children ? gettext ("yes") : gettext ("no"),
- dwarf_tag_string (tag));
-
- size_t cnt = 0;
- unsigned int name;
- unsigned int form;
- Dwarf_Off enoffset;
- while (dwarf_getabbrevattr (&abbrev, cnt,
- &name, &form, &enoffset) == 0)
- {
- printf (" attr: %s, form: %s, offset: %#" PRIx64 "\n",
- dwarf_attr_string (name), dwarf_form_string (form),
- (uint64_t) enoffset);
-
- ++cnt;
- }
-
- offset += length;
- }
- }
-}
-
-
-/* Print content of DWARF .debug_aranges section. We fortunately do
- not have to know a bit about the structure of the section, libdwarf
- takes care of it. */
-static void
-print_debug_aranges_section (Dwfl_Module *dwflmod __attribute__ ((unused)),
- Ebl *ebl __attribute__ ((unused)),
- GElf_Ehdr *ehdr __attribute__ ((unused)),
- Elf_Scn *scn __attribute__ ((unused)),
- GElf_Shdr *shdr, Dwarf *dbg)
-{
- Dwarf_Aranges *aranges;
- size_t cnt;
- if (unlikely (dwarf_getaranges (dbg, &aranges, &cnt) != 0))
- {
- error (0, 0, gettext ("cannot get .debug_aranges content: %s"),
- dwarf_errmsg (-1));
- return;
- }
-
- printf (ngettext ("\
-\nDWARF section '%s' at offset %#" PRIx64 " contains %zu entry:\n",
- "\
-\nDWARF section '%s' at offset %#" PRIx64 " contains %zu entries:\n",
- cnt),
- ".debug_aranges", (uint64_t) shdr->sh_offset, cnt);
-
- /* Compute floor(log16(cnt)). */
- size_t tmp = cnt;
- int digits = 1;
- while (tmp >= 16)
- {
- ++digits;
- tmp >>= 4;
- }
-
- for (size_t n = 0; n < cnt; ++n)
- {
- Dwarf_Arange *runp = dwarf_onearange (aranges, n);
- if (unlikely (runp == NULL))
- {
- printf ("cannot get arange %zu: %s\n", n, dwarf_errmsg (-1));
- return;
- }
-
- Dwarf_Addr start;
- Dwarf_Word length;
- Dwarf_Off offset;
-
- if (unlikely (dwarf_getarangeinfo (runp, &start, &length, &offset) != 0))
- printf (gettext (" [%*zu] ???\n"), digits, n);
- else
- printf (gettext (" [%*zu] start: %0#*" PRIx64
- ", length: %5" PRIu64 ", CU DIE offset: %6"
- PRId64 "\n"),
- digits, n, ehdr->e_ident[EI_CLASS] == ELFCLASS32 ? 10 : 18,
- (uint64_t) start, (uint64_t) length, (int64_t) offset);
- }
-}
-
-/* Print content of DWARF .debug_ranges section. */
-static void
-print_debug_ranges_section (Dwfl_Module *dwflmod,
- Ebl *ebl __attribute__ ((unused)),
- GElf_Ehdr *ehdr, Elf_Scn *scn, GElf_Shdr *shdr,
- Dwarf *dbg)
-{
- Elf_Data *data = elf_rawdata (scn, NULL);
-
- if (unlikely (data == NULL))
- {
- error (0, 0, gettext ("cannot get .debug_ranges content: %s"),
- elf_errmsg (-1));
- return;
- }
-
- printf (gettext ("\
-\nDWARF section '%s' at offset %#" PRIx64 ":\n"),
- ".debug_ranges", (uint64_t) shdr->sh_offset);
-
- size_t address_size = ehdr->e_ident[EI_CLASS] == ELFCLASS32 ? 4 : 8;
-
- bool first = true;
- unsigned char *readp = data->d_buf;
- while (readp < (unsigned char *) data->d_buf + data->d_size)
- {
- ptrdiff_t offset = readp - (unsigned char *) data->d_buf;
-
- if (unlikely (data->d_size - offset < address_size * 2))
- {
- printf (gettext (" [%6tx] <INVALID DATA>\n"), offset);
- break;
- }
-
- Dwarf_Addr begin;
- Dwarf_Addr end;
- if (address_size == 8)
- {
- begin = read_8ubyte_unaligned_inc (dbg, readp);
- end = read_8ubyte_unaligned_inc (dbg, readp);
- }
- else
- {
- begin = read_4ubyte_unaligned_inc (dbg, readp);
- end = read_4ubyte_unaligned_inc (dbg, readp);
- if (begin == (Dwarf_Addr) (uint32_t) -1)
- begin = (Dwarf_Addr) -1l;
- }
-
- if (begin == (Dwarf_Addr) -1l) /* Base address entry. */
- {
- char *b = format_dwarf_addr (dwflmod, address_size, end);
- printf (gettext (" [%6tx] base address %s\n"), offset, b);
- free (b);
- }
- else if (begin == 0 && end == 0) /* End of list entry. */
- first = true;
- else
- {
- char *b = format_dwarf_addr (dwflmod, address_size, begin);
- char *e = format_dwarf_addr (dwflmod, address_size, end);
- /* We have an address range entry. */
- if (first) /* First address range entry in a list. */
- printf (gettext (" [%6tx] %s..%s\n"), offset, b, e);
- else
- printf (gettext (" %s..%s\n"), b, e);
- free (b);
- free (e);
-
- first = false;
- }
- }
-}
-
-
-static void
-print_debug_frame_section (Dwfl_Module *dwflmod __attribute__ ((unused)),
- Ebl *ebl __attribute__ ((unused)),
- GElf_Ehdr *ehdr __attribute__ ((unused)),
- Elf_Scn *scn __attribute__ ((unused)),
- GElf_Shdr *shdr __attribute__ ((unused)),
- Dwarf *dbg __attribute__ ((unused)))
-{
-}
-
-
-struct attrcb_args
-{
- Dwfl_Module *dwflmod;
- Dwarf *dbg;
- int level;
- unsigned int addrsize;
- Dwarf_Off cu_offset;
-};
-
-
-static int
-attr_callback (Dwarf_Attribute *attrp, void *arg)
-{
- struct attrcb_args *cbargs = (struct attrcb_args *) arg;
- const int level = cbargs->level;
-
- unsigned int attr = dwarf_whatattr (attrp);
- if (unlikely (attr == 0))
- {
- error (0, 0, gettext ("cannot get attribute code: %s"),
- dwarf_errmsg (-1));
- return DWARF_CB_ABORT;
- }
-
- unsigned int form = dwarf_whatform (attrp);
- if (unlikely (form == 0))
- {
- error (0, 0, gettext ("cannot get attribute form: %s"),
- dwarf_errmsg (-1));
- return DWARF_CB_ABORT;
- }
-
- switch (form)
- {
- case DW_FORM_addr:
- {
- Dwarf_Addr addr;
- if (unlikely (dwarf_formaddr (attrp, &addr) != 0))
- {
- attrval_out:
- error (0, 0, gettext ("cannot get attribute value: %s"),
- dwarf_errmsg (-1));
- return DWARF_CB_ABORT;
- }
- char *a = format_dwarf_addr (cbargs->dwflmod, cbargs->addrsize, addr);
- printf (" %*s%-20s %s\n",
- (int) (level * 2), "", dwarf_attr_string (attr), a);
- free (a);
- }
- break;
-
- case DW_FORM_indirect:
- case DW_FORM_strp:
- case DW_FORM_string:;
- const char *str = dwarf_formstring (attrp);
- if (unlikely (str == NULL))
- goto attrval_out;
- printf (" %*s%-20s \"%s\"\n",
- (int) (level * 2), "", dwarf_attr_string (attr), str);
- break;
-
- case DW_FORM_ref_addr:
- case DW_FORM_ref_udata:
- case DW_FORM_ref8:
- case DW_FORM_ref4:
- case DW_FORM_ref2:
- case DW_FORM_ref1:;
- Dwarf_Die ref;
- if (unlikely (dwarf_formref_die (attrp, &ref) == NULL))
- goto attrval_out;
-
- printf (" %*s%-20s [%6" PRIxMAX "]\n",
- (int) (level * 2), "", dwarf_attr_string (attr),
- (uintmax_t) dwarf_dieoffset (&ref));
- break;
-
- case DW_FORM_udata:
- case DW_FORM_sdata:
- case DW_FORM_data8:
- case DW_FORM_data4:
- case DW_FORM_data2:
- case DW_FORM_data1:;
- Dwarf_Word num;
- if (unlikely (dwarf_formudata (attrp, &num) != 0))
- goto attrval_out;
-
- const char *valuestr = NULL;
- switch (attr)
- {
- case DW_AT_location:
- case DW_AT_data_location:
- case DW_AT_data_member_location:
- case DW_AT_vtable_elem_location:
- case DW_AT_string_length:
- case DW_AT_use_location:
- case DW_AT_frame_base:
- case DW_AT_return_addr:
- case DW_AT_static_link:
- printf (" %*s%-20s location list [%6" PRIxMAX "]\n",
- (int) (level * 2), "", dwarf_attr_string (attr),
- (uintmax_t) num);
- return DWARF_CB_OK;
-
- case DW_AT_ranges:
- printf (" %*s%-20s range list [%6" PRIxMAX "]\n",
- (int) (level * 2), "", dwarf_attr_string (attr),
- (uintmax_t) num);
- return DWARF_CB_OK;
-
- case DW_AT_language:
- valuestr = dwarf_lang_string (num);
- break;
- case DW_AT_encoding:
- valuestr = dwarf_encoding_string (num);
- break;
- case DW_AT_accessibility:
- valuestr = dwarf_access_string (num);
- break;
- case DW_AT_visibility:
- valuestr = dwarf_visibility_string (num);
- break;
- case DW_AT_virtuality:
- valuestr = dwarf_virtuality_string (num);
- break;
- case DW_AT_identifier_case:
- valuestr = dwarf_identifier_case_string (num);
- break;
- case DW_AT_calling_convention:
- valuestr = dwarf_calling_convention_string (num);
- break;
- case DW_AT_inline:
- valuestr = dwarf_inline_string (num);
- break;
- case DW_AT_ordering:
- valuestr = dwarf_ordering_string (num);
- break;
- case DW_AT_discr_list:
- valuestr = dwarf_discr_list_string (num);
- break;
- default:
- /* Nothing. */
- break;
- }
-
- if (valuestr == NULL)
- printf (" %*s%-20s %" PRIuMAX "\n",
- (int) (level * 2), "", dwarf_attr_string (attr),
- (uintmax_t) num);
- else
- printf (" %*s%-20s %s (%" PRIuMAX ")\n",
- (int) (level * 2), "", dwarf_attr_string (attr),
- valuestr, (uintmax_t) num);
- break;
-
- case DW_FORM_flag:;
- bool flag;
- if (unlikely (dwarf_formflag (attrp, &flag) != 0))
- goto attrval_out;
-
- printf (" %*s%-20s %s\n",
- (int) (level * 2), "", dwarf_attr_string (attr),
- nl_langinfo (flag ? YESSTR : NOSTR));
- break;
-
- case DW_FORM_block4:
- case DW_FORM_block2:
- case DW_FORM_block1:
- case DW_FORM_block:;
- Dwarf_Block block;
- if (unlikely (dwarf_formblock (attrp, &block) != 0))
- goto attrval_out;
-
- printf (" %*s%-20s %" PRIxMAX " byte block\n",
- (int) (level * 2), "", dwarf_attr_string (attr),
- (uintmax_t) block.length);
-
- switch (attr)
- {
- case DW_AT_location:
- case DW_AT_data_location:
- case DW_AT_data_member_location:
- case DW_AT_vtable_elem_location:
- case DW_AT_string_length:
- case DW_AT_use_location:
- case DW_AT_frame_base:
- case DW_AT_return_addr:
- case DW_AT_static_link:
- case DW_AT_allocated:
- case DW_AT_associated:
- case DW_AT_bit_size:
- case DW_AT_bit_offset:
- case DW_AT_bit_stride:
- case DW_AT_byte_size:
- case DW_AT_byte_stride:
- case DW_AT_count:
- case DW_AT_lower_bound:
- case DW_AT_upper_bound:
- print_ops (cbargs->dwflmod, cbargs->dbg,
- 12 + level * 2, 12 + level * 2,
- cbargs->addrsize, block.length, block.data);
- break;
- }
- break;
-
- default:
- printf (" %*s%-20s [form: %d] ???\n",
- (int) (level * 2), "", dwarf_attr_string (attr),
- (int) form);
- break;
- }
-
- return DWARF_CB_OK;
-}
-
-
-static void
-print_debug_info_section (Dwfl_Module *dwflmod,
- Ebl *ebl __attribute__ ((unused)),
- GElf_Ehdr *ehdr __attribute__ ((unused)),
- Elf_Scn *scn __attribute__ ((unused)),
- GElf_Shdr *shdr, Dwarf *dbg)
-{
- printf (gettext ("\
-\nDWARF section '%s' at offset %#" PRIx64 ":\n [Offset]\n"),
- ".debug_info", (uint64_t) shdr->sh_offset);
-
- /* If the section is empty we don't have to do anything. */
- if (shdr->sh_size == 0)
- return;
-
- int maxdies = 20;
- Dwarf_Die *dies = (Dwarf_Die *) xmalloc (maxdies * sizeof (Dwarf_Die));
-
- Dwarf_Off offset = 0;
-
- /* New compilation unit. */
- size_t cuhl;
- //Dwarf_Half version;
- Dwarf_Off abbroffset;
- uint8_t addrsize;
- uint8_t offsize;
- Dwarf_Off nextcu;
- next_cu:
- if (dwarf_nextcu (dbg, offset, &nextcu, &cuhl, &abbroffset, &addrsize,
- &offsize) != 0)
- goto do_return;
-
- printf (gettext (" Compilation unit at offset %" PRIu64 ":\n"
- " Version: %" PRIu16 ", Abbreviation section offset: %"
- PRIu64 ", Address size: %" PRIu8 ", Offset size: %" PRIu8 "\n"),
- (uint64_t) offset, /*version*/2, abbroffset, addrsize, offsize);
-
-
- struct attrcb_args args;
- args.dwflmod = dwflmod;
- args.dbg = dbg;
- args.addrsize = addrsize;
- args.cu_offset = offset;
-
- offset += cuhl;
-
- int level = 0;
-
- if (unlikely (dwarf_offdie (dbg, offset, &dies[level]) == NULL))
- {
- error (0, 0, gettext ("cannot get DIE at offset %" PRIu64
- " in section '%s': %s"),
- (uint64_t) offset, ".debug_info", dwarf_errmsg (-1));
- goto do_return;
- }
-
- do
- {
- offset = dwarf_dieoffset (&dies[level]);
- if (unlikely (offset == ~0ul))
- {
- error (0, 0, gettext ("cannot get DIE offset: %s"),
- dwarf_errmsg (-1));
- goto do_return;
- }
-
- int tag = dwarf_tag (&dies[level]);
- if (unlikely (tag == DW_TAG_invalid))
- {
- error (0, 0, gettext ("cannot get tag of DIE at offset %" PRIu64
- " in section '%s': %s"),
- (uint64_t) offset, ".debug_info", dwarf_errmsg (-1));
- goto do_return;
- }
-
- printf (" [%6" PRIx64 "] %*s%s\n",
- (uint64_t) offset, (int) (level * 2), "",
- dwarf_tag_string (tag));
-
- /* Print the attribute values. */
- args.level = level;
- (void) dwarf_getattrs (&dies[level], attr_callback, &args, 0);
-
- /* Make room for the next level's DIE. */
- if (level + 1 == maxdies)
- dies = (Dwarf_Die *) xrealloc (dies,
- (maxdies += 10)
- * sizeof (Dwarf_Die));
-
- int res = dwarf_child (&dies[level], &dies[level + 1]);
- if (res > 0)
- {
- while ((res = dwarf_siblingof (&dies[level], &dies[level])) == 1)
- if (level-- == 0)
- break;
-
- if (unlikely (res == -1))
- {
- error (0, 0, gettext ("cannot get next DIE: %s\n"),
- dwarf_errmsg (-1));
- goto do_return;
- }
- }
- else if (unlikely (res < 0))
- {
- error (0, 0, gettext ("cannot get next DIE: %s"),
- dwarf_errmsg (-1));
- goto do_return;
- }
- else
- ++level;
- }
- while (level >= 0);
-
- offset = nextcu;
- if (offset != 0)
- goto next_cu;
-
- do_return:
- free (dies);
-}
-
-
-static void
-print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl,
- GElf_Ehdr *ehdr __attribute__ ((unused)),
- Elf_Scn *scn, GElf_Shdr *shdr, Dwarf *dbg)
-{
- printf (gettext ("\
-\nDWARF section '%s' at offset %#" PRIx64 ":\n"),
- ".debug_line", (uint64_t) shdr->sh_offset);
-
- if (shdr->sh_size == 0)
- return;
-
- /* There is no functionality in libdw to read the information in the
- way it is represented here. Hardcode the decoder. */
- Elf_Data *data = elf_getdata (scn, NULL);
- if (unlikely (data == NULL || data->d_buf == NULL))
- {
- error (0, 0, gettext ("cannot get line data section data: %s"),
- elf_errmsg (-1));
- return;
- }
-
- const unsigned char *linep = (const unsigned char *) data->d_buf;
- const unsigned char *lineendp;
-
- while (linep
- < (lineendp = (const unsigned char *) data->d_buf + data->d_size))
- {
- size_t start_offset = linep - (const unsigned char *) data->d_buf;
-
- printf (gettext ("\nTable at offset %Zu:\n"), start_offset);
-
- Dwarf_Word unit_length = read_4ubyte_unaligned_inc (dbg, linep);
- unsigned int length = 4;
- if (unlikely (unit_length == 0xffffffff))
- {
- if (unlikely (linep + 8 > lineendp))
- {
- invalid_data:
- error (0, 0, gettext ("invalid data in section [%zu] '%s'"),
- elf_ndxscn (scn), ".debug_line");
- return;
- }
- unit_length = read_8ubyte_unaligned_inc (dbg, linep);
- length = 8;
- }
-
- /* Check whether we have enough room in the section. */
- if (unit_length < 2 + length + 5 * 1
- || unlikely (linep + unit_length > lineendp))
- goto invalid_data;
- lineendp = linep + unit_length;
-
- /* The next element of the header is the version identifier. */
- uint_fast16_t version = read_2ubyte_unaligned_inc (dbg, linep);
-
- /* Next comes the header length. */
- Dwarf_Word header_length;
- if (length == 4)
- header_length = read_4ubyte_unaligned_inc (dbg, linep);
- else
- header_length = read_8ubyte_unaligned_inc (dbg, linep);
- //const unsigned char *header_start = linep;
-
- /* Next the minimum instruction length. */
- uint_fast8_t minimum_instr_len = *linep++;
-
- /* Then the flag determining the default value of the is_stmt
- register. */
- uint_fast8_t default_is_stmt = *linep++;
-
- /* Now the line base. */
- int_fast8_t line_base = *((const int_fast8_t *) linep);
- ++linep;
-
- /* And the line range. */
- uint_fast8_t line_range = *linep++;
-
- /* The opcode base. */
- uint_fast8_t opcode_base = *linep++;
-
- /* Print what we got so far. */
- printf (gettext ("\n"
- " Length: %" PRIu64 "\n"
- " DWARF version: %" PRIuFAST16 "\n"
- " Prologue length: %" PRIu64 "\n"
- " Minimum instruction length: %" PRIuFAST8 "\n"
- " Initial value if '%s': %" PRIuFAST8 "\n"
- " Line base: %" PRIdFAST8 "\n"
- " Line range: %" PRIuFAST8 "\n"
- " Opcode base: %" PRIuFAST8 "\n"
- "\n"
- "Opcodes:\n"),
- (uint64_t) unit_length, version, (uint64_t) header_length,
- minimum_instr_len, "is_stmt", default_is_stmt, line_base,
- line_range, opcode_base);
-
- if (unlikely (linep + opcode_base - 1 >= lineendp))
- {
- invalid_unit:
- error (0, 0,
- gettext ("invalid data at offset %tu in section [%zu] '%s'"),
- linep - (const unsigned char *) data->d_buf,
- elf_ndxscn (scn), ".debug_line");
- linep = lineendp;
- continue;
- }
- int opcode_base_l10 = 1;
- unsigned int tmp = opcode_base;
- while (tmp > 10)
- {
- tmp /= 10;
- ++opcode_base_l10;
- }
- const uint8_t *standard_opcode_lengths = linep - 1;
- for (uint_fast8_t cnt = 1; cnt < opcode_base; ++cnt)
- printf (ngettext (" [%*" PRIuFAST8 "] %hhu argument\n",
- " [%*" PRIuFAST8 "] %hhu arguments\n",
- (int) linep[cnt - 1]),
- opcode_base_l10, cnt, linep[cnt - 1]);
- linep += opcode_base - 1;
- if (unlikely (linep >= lineendp))
- goto invalid_unit;
-
- puts (gettext ("\nDirectory table:"));
- while (*linep != 0)
- {
- unsigned char *endp = memchr (linep, '\0', lineendp - linep);
- if (unlikely (endp == NULL))
- goto invalid_unit;
-
- printf (" %s\n", (char *) linep);
-
- linep = endp + 1;
- }
- /* Skip the final NUL byte. */
- ++linep;
-
- if (unlikely (linep >= lineendp))
- goto invalid_unit;
- puts (gettext ("\nFile name table:\n"
- " Entry Dir Time Size Name"));
- for (unsigned int cnt = 1; *linep != 0; ++cnt)
- {
- /* First comes the file name. */
- char *fname = (char *) linep;
- unsigned char *endp = memchr (fname, '\0', lineendp - linep);
- if (unlikely (endp == NULL))
- goto invalid_unit;
- linep = endp + 1;
-
- /* Then the index. */
- unsigned int diridx;
- get_uleb128 (diridx, linep);
-
- /* Next comes the modification time. */
- unsigned int mtime;
- get_uleb128 (mtime, linep);
-
- /* Finally the length of the file. */
- unsigned int fsize;
- get_uleb128 (fsize, linep);
-
- printf (" %-5u %-5u %-9u %-9u %s\n",
- cnt, diridx, mtime, fsize, fname);
- }
- /* Skip the final NUL byte. */
- ++linep;
-
- puts (gettext ("\nLine number statements:"));
- Dwarf_Word address = 0;
- size_t line = 1;
- uint_fast8_t is_stmt = default_is_stmt;
-
- /* Default address value, in case we do not find the CU. */
- size_t address_size
- = elf_getident (ebl->elf, NULL)[EI_CLASS] == ELFCLASS32 ? 4 : 8;
-
- /* Determine the CU this block is for. */
- Dwarf_Off cuoffset;
- Dwarf_Off ncuoffset = 0;
- size_t hsize;
- while (dwarf_nextcu (dbg, cuoffset = ncuoffset, &ncuoffset, &hsize,
- NULL, NULL, NULL) == 0)
- {
- Dwarf_Die cudie;
- if (dwarf_offdie (dbg, cuoffset + hsize, &cudie) == NULL)
- continue;
- Dwarf_Attribute stmt_list;
- if (dwarf_attr (&cudie, DW_AT_stmt_list, &stmt_list) == NULL)
- continue;
- Dwarf_Word lineoff;
- if (dwarf_formudata (&stmt_list, &lineoff) != 0)
- continue;
- if (lineoff == start_offset)
- {
- /* Found the CU. */
- address_size = cudie.cu->address_size;
- break;
- }
- }
-
- while (linep < lineendp)
- {
- unsigned int u128;
- int s128;
-
- /* Read the opcode. */
- unsigned int opcode = *linep++;
-
- /* Is this a special opcode? */
- if (likely (opcode >= opcode_base))
- {
- /* Yes. Handling this is quite easy since the opcode value
- is computed with
-
- opcode = (desired line increment - line_base)
- + (line_range * address advance) + opcode_base
- */
- int line_increment = (line_base
- + (opcode - opcode_base) % line_range);
- unsigned int address_increment = (minimum_instr_len
- * ((opcode - opcode_base)
- / line_range));
-
- /* Perform the increments. */
- line += line_increment;
- address += address_increment;
-
- char *a = format_dwarf_addr (dwflmod, 0, address);
- printf (gettext ("\
- special opcode %u: address+%u = %s, line%+d = %zu\n"),
- opcode, address_increment, a, line_increment, line);
- free (a);
- }
- else if (opcode == 0)
- {
- /* This an extended opcode. */
- if (unlikely (linep + 2 > lineendp))
- goto invalid_unit;
-
- /* The length. */
- unsigned int len = *linep++;
-
- if (unlikely (linep + len > lineendp))
- goto invalid_unit;
-
- /* The sub-opcode. */
- opcode = *linep++;
-
- printf (gettext (" extended opcode %u: "), opcode);
-
- switch (opcode)
- {
- case DW_LNE_end_sequence:
- puts (gettext ("end of sequence"));
-
- /* Reset the registers we care about. */
- address = 0;
- line = 1;
- is_stmt = default_is_stmt;
- break;
-
- case DW_LNE_set_address:
- if (address_size == 4)
- address = read_4ubyte_unaligned_inc (dbg, linep);
- else
- address = read_8ubyte_unaligned_inc (dbg, linep);
- {
- char *a = format_dwarf_addr (dwflmod, 0, address);
- printf (gettext ("set address to %s\n"), a);
- free (a);
- }
- break;
-
- case DW_LNE_define_file:
- {
- char *fname = (char *) linep;
- unsigned char *endp = memchr (linep, '\0',
- lineendp - linep);
- if (unlikely (endp == NULL))
- goto invalid_unit;
- linep = endp + 1;
-
- unsigned int diridx;
- get_uleb128 (diridx, linep);
- Dwarf_Word mtime;
- get_uleb128 (mtime, linep);
- Dwarf_Word filelength;
- get_uleb128 (filelength, linep);
-
- printf (gettext ("\
-define new file: dir=%u, mtime=%" PRIu64 ", length=%" PRIu64 ", name=%s\n"),
- diridx, (uint64_t) mtime, (uint64_t) filelength,
- fname);
- }
- break;
-
- default:
- /* Unknown, ignore it. */
- puts (gettext ("unknown opcode"));
- linep += len - 1;
- break;
- }
- }
- else if (opcode <= DW_LNS_set_epilogue_begin)
- {
- /* This is a known standard opcode. */
- switch (opcode)
- {
- case DW_LNS_copy:
- /* Takes no argument. */
- puts (gettext (" copy"));
- break;
-
- case DW_LNS_advance_pc:
- /* Takes one uleb128 parameter which is added to the
- address. */
- get_uleb128 (u128, linep);
- address += minimum_instr_len * u128;
- {
- char *a = format_dwarf_addr (dwflmod, 0, address);
- printf (gettext ("advance address by %u to %s\n"),
- u128, a);
- free (a);
- }
- break;
-
- case DW_LNS_advance_line:
- /* Takes one sleb128 parameter which is added to the
- line. */
- get_sleb128 (s128, linep);
- line += s128;
- printf (gettext ("\
- advance line by constant %d to %" PRId64 "\n"),
- s128, (int64_t) line);
- break;
-
- case DW_LNS_set_file:
- /* Takes one uleb128 parameter which is stored in file. */
- get_uleb128 (u128, linep);
- printf (gettext (" set file to %" PRIu64 "\n"),
- (uint64_t) u128);
- break;
-
- case DW_LNS_set_column:
- /* Takes one uleb128 parameter which is stored in column. */
- if (unlikely (standard_opcode_lengths[opcode] != 1))
- goto invalid_unit;
-
- get_uleb128 (u128, linep);
- printf (gettext (" set column to %" PRIu64 "\n"),
- (uint64_t) u128);
- break;
-
- case DW_LNS_negate_stmt:
- /* Takes no argument. */
- is_stmt = 1 - is_stmt;
- printf (gettext (" set '%s' to %" PRIuFAST8 "\n"),
- "is_stmt", is_stmt);
- break;
-
- case DW_LNS_set_basic_block:
- /* Takes no argument. */
- puts (gettext (" set basic block flag"));
- break;
-
- case DW_LNS_const_add_pc:
- /* Takes no argument. */
- u128 = (minimum_instr_len
- * ((255 - opcode_base) / line_range));
- address += u128;
- {
- char *a = format_dwarf_addr (dwflmod, 0, address);
- printf (gettext ("advance address by constant %u to %s\n"),
- u128, a);
- free (a);
- }
- break;
-
- case DW_LNS_fixed_advance_pc:
- /* Takes one 16 bit parameter which is added to the
- address. */
- if (unlikely (standard_opcode_lengths[opcode] != 1))
- goto invalid_unit;
-
- u128 = read_2ubyte_unaligned_inc (dbg, linep);
- address += u128;
- {
- char *a = format_dwarf_addr (dwflmod, 0, address);
- printf (gettext ("\
-advance address by fixed value %u to %s\n"),
- u128, a);
- free (a);
- }
- break;
-
- case DW_LNS_set_prologue_end:
- /* Takes no argument. */
- puts (gettext (" set prologue end flag"));
- break;
-
- case DW_LNS_set_epilogue_begin:
- /* Takes no argument. */
- puts (gettext (" set epilogue begin flag"));
- break;
- }
- }
- else
- {
- /* This is a new opcode the generator but not we know about.
- Read the parameters associated with it but then discard
- everything. Read all the parameters for this opcode. */
- printf (ngettext (" unknown opcode with %" PRIu8 " parameter:",
- " unknown opcode with %" PRIu8 " parameters:",
- standard_opcode_lengths[opcode]),
- standard_opcode_lengths[opcode]);
- for (int n = standard_opcode_lengths[opcode]; n > 0; --n)
- {
- get_uleb128 (u128, linep);
- if (n != standard_opcode_lengths[opcode])
- putc_unlocked (',', stdout);
- printf (" %u", u128);
- }
-
- /* Next round, ignore this opcode. */
- continue;
- }
- }
- }
-
- /* There must only be one data block. */
- assert (elf_getdata (scn, data) == NULL);
-}
-
-
-static void
-print_debug_loc_section (Dwfl_Module *dwflmod,
- Ebl *ebl __attribute__ ((unused)),
- GElf_Ehdr *ehdr __attribute__ ((unused)),
- Elf_Scn *scn __attribute__ ((unused)),
- GElf_Shdr *shdr,
- Dwarf *dbg __attribute__ ((unused)))
-{
- Elf_Data *data = elf_rawdata (scn, NULL);
-
- if (unlikely (data == NULL))
- {
- error (0, 0, gettext ("cannot get .debug_loc content: %s"),
- elf_errmsg (-1));
- return;
- }
-
- printf (gettext ("\
-\nDWARF section '%s' at offset %#" PRIx64 ":\n"),
- ".debug_loc", (uint64_t) shdr->sh_offset);
-
- size_t address_size = ehdr->e_ident[EI_CLASS] == ELFCLASS32 ? 4 : 8;
-
- bool first = true;
- unsigned char *readp = data->d_buf;
- while (readp < (unsigned char *) data->d_buf + data->d_size)
- {
- ptrdiff_t offset = readp - (unsigned char *) data->d_buf;
-
- if (unlikely (data->d_size - offset < address_size * 2))
- {
- printf (gettext (" [%6tx] <INVALID DATA>\n"), offset);
- break;
- }
-
- Dwarf_Addr begin;
- Dwarf_Addr end;
- if (address_size == 8)
- {
- begin = read_8ubyte_unaligned_inc (dbg, readp);
- end = read_8ubyte_unaligned_inc (dbg, readp);
- }
- else
- {
- begin = read_4ubyte_unaligned_inc (dbg, readp);
- end = read_4ubyte_unaligned_inc (dbg, readp);
- if (begin == (Dwarf_Addr) (uint32_t) -1)
- begin = (Dwarf_Addr) -1l;
- }
-
- if (begin == (Dwarf_Addr) -1l) /* Base address entry. */
- {
- char *b = format_dwarf_addr (dwflmod, address_size, end);
- printf (gettext (" [%6tx] base address %s\n"), offset, b);
- free (b);
- }
- else if (begin == 0 && end == 0) /* End of list entry. */
- first = true;
- else
- {
- /* We have a location expression entry. */
- uint_fast16_t len = read_2ubyte_unaligned_inc (dbg, readp);
-
- char *b = format_dwarf_addr (dwflmod, address_size, begin);
- char *e = format_dwarf_addr (dwflmod, address_size, end);
-
- if (first) /* First entry in a list. */
- printf (gettext (" [%6tx] %s..%s"), offset, b, e);
- else
- printf (gettext (" %s..%s"), b, e);
-
- free (b);
- free (e);
-
- print_ops (dwflmod, dbg, 1, 18 + (address_size * 4),
- address_size, len, readp);
-
- first = false;
- readp += len;
- }
- }
-}
-
-struct mac_culist
-{
- Dwarf_Die die;
- Dwarf_Off offset;
- Dwarf_Files *files;
- struct mac_culist *next;
-};
-
-
-static int
-mac_compare (const void *p1, const void *p2)
-{
- struct mac_culist *m1 = (struct mac_culist *) p1;
- struct mac_culist *m2 = (struct mac_culist *) p2;
-
- if (m1->offset < m2->offset)
- return -1;
- if (m1->offset > m2->offset)
- return 1;
- return 0;
-}
-
-
-static void
-print_debug_macinfo_section (Dwfl_Module *dwflmod __attribute__ ((unused)),
- Ebl *ebl __attribute__ ((unused)),
- GElf_Ehdr *ehdr __attribute__ ((unused)),
- Elf_Scn *scn, GElf_Shdr *shdr, Dwarf *dbg)
-{
- printf (gettext ("\
-\nDWARF section '%s' at offset %#" PRIx64 ":\n"),
- ".debug_macinfo", (uint64_t) shdr->sh_offset);
- putc_unlocked ('\n', stdout);
-
- /* There is no function in libdw to iterate over the raw content of
- the section but it is easy enough to do. */
- Elf_Data *data = elf_getdata (scn, NULL);
- if (unlikely (data == NULL || data->d_buf == NULL))
- {
- error (0, 0, gettext ("cannot get macro information section data: %s"),
- elf_errmsg (-1));
- return;
- }
-
- /* Get the source file information for all CUs. */
- Dwarf_Off offset;
- Dwarf_Off ncu = 0;
- size_t hsize;
- struct mac_culist *culist = NULL;
- size_t nculist = 0;
- while (dwarf_nextcu (dbg, offset = ncu, &ncu, &hsize, NULL, NULL, NULL) == 0)
- {
- Dwarf_Die cudie;
- if (dwarf_offdie (dbg, offset + hsize, &cudie) == NULL)
- continue;
-
- Dwarf_Attribute attr;
- if (dwarf_attr (&cudie, DW_AT_macro_info, &attr) == NULL)
- continue;
-
- Dwarf_Word macoff;
- if (dwarf_formudata (&attr, &macoff) != 0)
- continue;
-
- struct mac_culist *newp = (struct mac_culist *) alloca (sizeof (*newp));
- newp->die = cudie;
- newp->offset = macoff;
- newp->files = NULL;
- newp->next = culist;
- culist = newp;
- ++nculist;
- }
-
- /* Convert the list into an array for easier consumption. */
- struct mac_culist *cus = (struct mac_culist *) alloca ((nculist + 1)
- * sizeof (*cus));
- /* Add sentinel. */
- cus[nculist].offset = data->d_size;
- if (nculist > 0)
- {
- for (size_t cnt = nculist - 1; culist != NULL; --cnt)
- {
- assert (cnt < nculist);
- cus[cnt] = *culist;
- culist = culist->next;
- }
-
- /* Sort the array according to the offset in the .debug_macinfo
- section. Note we keep the sentinel at the end. */
- qsort (cus, nculist, sizeof (*cus), mac_compare);
- }
-
- const unsigned char *readp = (const unsigned char *) data->d_buf;
- const unsigned char *readendp = readp + data->d_size;
- int level = 1;
-
- while (readp < readendp)
- {
- unsigned int opcode = *readp++;
- unsigned int u128;
- unsigned int u128_2;
- const unsigned char *endp;
-
- switch (opcode)
- {
- case DW_MACINFO_define:
- case DW_MACINFO_undef:
- case DW_MACINFO_vendor_ext:
- /* For the first two opcodes the parameters are
- line, string
- For the latter
- number, string.
- We can treat these cases together. */
- get_uleb128 (u128, readp);
-
- endp = memchr (readp, '\0', readendp - readp);
- if (unlikely (endp == NULL))
- {
- printf (gettext ("\
-%*s*** non-terminated string at end of section"),
- level, "");
- return;
- }
-
- if (opcode == DW_MACINFO_define)
- printf ("%*s#define %s, line %u\n",
- level, "", (char *) readp, u128);
- else if (opcode == DW_MACINFO_undef)
- printf ("%*s#undef %s, line %u\n",
- level, "", (char *) readp, u128);
- else
- printf (" #vendor-ext %s, number %u\n", (char *) readp, u128);
-
- readp = endp + 1;
- break;
-
- case DW_MACINFO_start_file:
- /* The two parameters are line and file index, in this order. */
- get_uleb128 (u128, readp);
- get_uleb128 (u128_2, readp);
-
- /* Find the CU DIE for this file. */
- size_t macoff = readp - (const unsigned char *) data->d_buf;
- const char *fname = "???";
- if (macoff >= cus[0].offset)
- {
- while (macoff >= cus[1].offset)
- ++cus;
-
- if (cus[0].files == NULL
- && dwarf_getsrcfiles (&cus[0].die, &cus[0].files, NULL) != 0)
- cus[0].files = (Dwarf_Files *) -1l;
-
- if (cus[0].files != (Dwarf_Files *) -1l)
- fname = (dwarf_filesrc (cus[0].files, u128_2, NULL, NULL)
- ?: "???");
- }
-
- printf ("%*sstart_file %u, [%u] %s\n",
- level, "", u128, u128_2, fname);
- ++level;
- break;
-
- case DW_MACINFO_end_file:
- --level;
- printf ("%*send_file\n", level, "");
- /* Nothing more to do. */
- break;
-
- default:
- // XXX gcc seems to generate files with a trailing zero.
- if (unlikely (opcode != 0 || readp != readendp))
- printf ("%*s*** invalid opcode %u\n", level, "", opcode);
- break;
- }
- }
-}
-
-
-/* Callback for printing global names. */
-static int
-print_pubnames (Dwarf *dbg __attribute__ ((unused)), Dwarf_Global *global,
- void *arg)
-{
- int *np = (int *) arg;
-
- printf (gettext (" [%5d] DIE offset: %6" PRId64
- ", CU DIE offset: %6" PRId64 ", name: %s\n"),
- (*np)++, global->die_offset, global->cu_offset, global->name);
-
- return 0;
-}
-
-
-/* Print the known exported symbols in the DWARF section '.debug_pubnames'. */
-static void
-print_debug_pubnames_section (Dwfl_Module *dwflmod __attribute__ ((unused)),
- Ebl *ebl __attribute__ ((unused)),
- GElf_Ehdr *ehdr __attribute__ ((unused)),
- Elf_Scn *scn __attribute__ ((unused)),
- GElf_Shdr *shdr, Dwarf *dbg)
-{
- printf (gettext ("\nDWARF section '%s' at offset %#" PRIx64 ":\n"),
- ".debug_pubnames", (uint64_t) shdr->sh_offset);
-
- int n = 0;
- (void) dwarf_getpubnames (dbg, print_pubnames, &n, 0);
-}
-
-/* Print the content of the DWARF string section '.debug_str'. */
-static void
-print_debug_str_section (Dwfl_Module *dwflmod __attribute__ ((unused)),
- Ebl *ebl __attribute__ ((unused)),
- GElf_Ehdr *ehdr __attribute__ ((unused)),
- Elf_Scn *scn __attribute__ ((unused)),
- GElf_Shdr *shdr, Dwarf *dbg)
-{
- /* Compute floor(log16(shdr->sh_size)). */
- GElf_Addr tmp = shdr->sh_size;
- int digits = 1;
- while (tmp >= 16)
- {
- ++digits;
- tmp >>= 4;
- }
- digits = MAX (4, digits);
-
- printf (gettext ("\nDWARF section '%s' at offset %#" PRIx64 ":\n"
- " %*s String\n"),
- ".debug_str", (uint64_t) shdr->sh_offset,
- /* TRANS: the debugstr| prefix makes the string unique. */
- digits + 2, sgettext ("debugstr|Offset"));
-
- Dwarf_Off offset = 0;
- while (offset < shdr->sh_size)
- {
- size_t len;
- const char *str = dwarf_getstring (dbg, offset, &len);
- if (unlikely (str == NULL))
- {
- printf (gettext (" *** error while reading strings: %s\n"),
- dwarf_errmsg (-1));
- break;
- }
-
- printf (" [%*" PRIx64 "] \"%s\"\n", digits, (uint64_t) offset, str);
-
- offset += len + 1;
- }
-}
-
-static void
-print_debug (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr)
-{
- /* Before we start the real work get a debug context descriptor. */
- Dwarf_Addr dwbias;
- Dwarf *dbg = dwfl_module_getdwarf (dwflmod, &dwbias);
- if (dbg == NULL)
- {
- error (0, 0, gettext ("cannot get debug context descriptor: %s"),
- dwfl_errmsg (-1));
- return;
- }
-
- /* Get the section header string table index. */
- size_t shstrndx;
- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- gettext ("cannot get section header string table index"));
-
- /* Look through all the sections for the debugging sections to print. */
- Elf_Scn *scn = NULL;
- while ((scn = elf_nextscn (ebl->elf, scn)) != NULL)
- {
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
-
- if (shdr != NULL && shdr->sh_type == SHT_PROGBITS)
- {
- static const struct
- {
- const char *name;
- enum section_e bitmask;
- void (*fp) (Dwfl_Module *, Ebl *,
- GElf_Ehdr *, Elf_Scn *, GElf_Shdr *, Dwarf *);
- } debug_sections[] =
- {
-#define NEW_SECTION(name) \
- { ".debug_" #name, section_##name, print_debug_##name##_section }
- NEW_SECTION (abbrev),
- NEW_SECTION (aranges),
- NEW_SECTION (frame),
- NEW_SECTION (info),
- NEW_SECTION (line),
- NEW_SECTION (loc),
- NEW_SECTION (pubnames),
- NEW_SECTION (str),
- NEW_SECTION (macinfo),
- NEW_SECTION (ranges),
- { ".eh_frame", section_frame, print_debug_frame_section }
- };
- const int ndebug_sections = (sizeof (debug_sections)
- / sizeof (debug_sections[0]));
- const char *name = elf_strptr (ebl->elf, shstrndx,
- shdr->sh_name);
- int n;
-
- for (n = 0; n < ndebug_sections; ++n)
- if (strcmp (name, debug_sections[n].name) == 0)
- {
- if (print_debug_sections & debug_sections[n].bitmask)
- debug_sections[n].fp (dwflmod, ebl, ehdr, scn, shdr, dbg);
- break;
- }
- }
- }
-}
-
-
-#define ITEM_INDENT 4
-#define ITEM_WRAP_COLUMN 150
-#define REGISTER_WRAP_COLUMN 75
-
-/* Print "NAME: FORMAT", wrapping when FORMAT_MAX chars of FORMAT would
- make the line exceed ITEM_WRAP_COLUMN. Unpadded numbers look better
- for the core items. But we do not want the line breaks to depend on
- the particular values. */
-static unsigned int
-__attribute__ ((format (printf, 7, 8)))
-print_core_item (unsigned int colno, char sep, unsigned int wrap,
- size_t name_width, const char *name,
- size_t format_max, const char *format, ...)
-{
- size_t len = strlen (name);
- if (name_width < len)
- name_width = len;
-
- size_t n = name_width + sizeof ": " - 1 + format_max;
-
- if (colno == 0)
- {
- printf ("%*s", ITEM_INDENT, "");
- colno = ITEM_INDENT + n;
- }
- else if (colno + 2 + n < wrap)
- {
- printf ("%c ", sep);
- colno += 2 + n;
- }
- else
- {
- printf ("\n%*s", ITEM_INDENT, "");
- colno = ITEM_INDENT + n;
- }
-
- printf ("%s: %*s", name, (int) (name_width - len), "");
-
- va_list ap;
- va_start (ap, format);
- vprintf (format, ap);
- va_end (ap);
-
- return colno;
-}
-
-static const void *
-convert (Elf *core, Elf_Type type, uint_fast16_t count,
- void *value, const void *data, size_t size)
-{
- Elf_Data valuedata =
- {
- .d_type = type,
- .d_buf = value,
- .d_size = size ?: gelf_fsize (core, type, count, EV_CURRENT),
- .d_version = EV_CURRENT,
- };
- Elf_Data indata =
- {
- .d_type = type,
- .d_buf = (void *) data,
- .d_size = valuedata.d_size,
- .d_version = EV_CURRENT,
- };
-
- Elf_Data *d = (gelf_getclass (core) == ELFCLASS32
- ? elf32_xlatetom : elf64_xlatetom)
- (&valuedata, &indata, elf_getident (core, NULL)[EI_DATA]);
- if (d == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("cannot convert core note data: %s"), elf_errmsg (-1));
-
- return data + indata.d_size;
-}
-
-typedef uint8_t GElf_Byte;
-
-static unsigned int
-handle_core_item (Elf *core, const Ebl_Core_Item *item, const void *desc,
- unsigned int colno, size_t *repeated_size)
-{
- uint_fast16_t count = item->count ?: 1;
-
-#define TYPES \
- DO_TYPE (BYTE, Byte, "0x%.2" PRIx8, "%" PRId8, 4); \
- DO_TYPE (HALF, Half, "0x%.4" PRIx16, "%" PRId16, 6); \
- DO_TYPE (WORD, Word, "0x%.8" PRIx32, "%" PRId32, 11); \
- DO_TYPE (SWORD, Sword, "%" PRId32, "%" PRId32, 11); \
- DO_TYPE (XWORD, Xword, "0x%.16" PRIx64, "%" PRId64, 20); \
- DO_TYPE (SXWORD, Sxword, "%" PRId64, "%" PRId64, 20)
-
-#define DO_TYPE(NAME, Name, hex, dec, max) GElf_##Name Name[count]
- union { TYPES; } value;
-#undef DO_TYPE
-
- void *data = &value;
- size_t size = gelf_fsize (core, item->type, count, EV_CURRENT);
- size_t convsize = size;
- if (repeated_size != NULL)
- {
- if (*repeated_size > size && (item->format == 'b' || item->format == 'B'))
- {
- data = alloca (*repeated_size);
- count *= *repeated_size / size;
- convsize = count * size;
- *repeated_size -= convsize;
- }
- else
- *repeated_size -= size;
- }
-
- desc = convert (core, item->type, count, data, desc + item->offset, convsize);
-
- Elf_Type type = item->type;
- if (type == ELF_T_ADDR)
- type = gelf_getclass (core) == ELFCLASS32 ? ELF_T_WORD : ELF_T_XWORD;
-
- switch (item->format)
- {
- case 'd':
- assert (count == 1);
- switch (type)
- {
-#define DO_TYPE(NAME, Name, hex, dec, max) \
- case ELF_T_##NAME: \
- colno = print_core_item (colno, ',', ITEM_WRAP_COLUMN, \
- 0, item->name, max, dec, value.Name[0]); \
- break
- TYPES;
-#undef DO_TYPE
- default:
- abort ();
- }
- break;
-
- case 'x':
- assert (count == 1);
- switch (type)
- {
-#define DO_TYPE(NAME, Name, hex, dec, max) \
- case ELF_T_##NAME: \
- colno = print_core_item (colno, ',', ITEM_WRAP_COLUMN, \
- 0, item->name, max, hex, value.Name[0]); \
- break
- TYPES;
-#undef DO_TYPE
- default:
- abort ();
- }
- break;
-
- case 'b':
- case 'B':
- assert (size % sizeof (unsigned int) == 0);
- unsigned int nbits = count * size * 8;
- unsigned int pop = 0;
- for (const unsigned int *i = data; (void *) i < data + count * size; ++i)
- pop += __builtin_popcount (*i);
- bool negate = pop > nbits / 2;
- const unsigned int bias = item->format == 'b';
-
- {
- char printed[(negate ? nbits - pop : pop) * 16];
- char *p = printed;
- *p = '\0';
-
- if (BYTE_ORDER != LITTLE_ENDIAN && size > sizeof (unsigned int))
- {
- assert (size == sizeof (unsigned int) * 2);
- for (unsigned int *i = data;
- (void *) i < data + count * size; i += 2)
- {
- unsigned int w = i[1];
- i[1] = i[0];
- i[0] = w;
- }
- }
-
- unsigned int lastbit = 0;
- for (const unsigned int *i = data;
- (void *) i < data + count * size; ++i)
- {
- unsigned int bit = ((void *) i - data) * 8;
- unsigned int w = negate ? ~*i : *i;
- while (w != 0)
- {
- int n = ffs (w);
- w >>= n;
- bit += n;
-
- if (lastbit + 1 != bit)
- p += sprintf (p, "-%u,%u", lastbit - bias, bit - bias);
- else if (lastbit == 0)
- p += sprintf (p, "%u", bit - bias);
-
- lastbit = bit;
- }
- }
- if (lastbit > 0 && lastbit + 1 != nbits)
- p += sprintf (p, "-%u", nbits - bias);
-
- colno = print_core_item (colno, ',', ITEM_WRAP_COLUMN, 0, item->name,
- 4 + nbits * 4,
- negate ? "~<%s>" : "<%s>", printed);
- }
- break;
-
- case 'T':
- case (char) ('T'|0x80):
- assert (count == 2);
- Dwarf_Word sec;
- Dwarf_Word usec;
- size_t maxfmt = 7;
- switch (type)
- {
-#define DO_TYPE(NAME, Name, hex, dec, max) \
- case ELF_T_##NAME: \
- sec = value.Name[0]; \
- usec = value.Name[1]; \
- maxfmt += max; \
- break
- TYPES;
-#undef DO_TYPE
- default:
- abort ();
- }
- if (unlikely (item->format == (char) ('T'|0x80)))
- {
- /* This is a hack for an ill-considered 64-bit ABI where
- tv_usec is actually a 32-bit field with 32 bits of padding
- rounding out struct timeval. We've already converted it as
- a 64-bit field. For little-endian, this just means the
- high half is the padding; it's presumably zero, but should
- be ignored anyway. For big-endian, it means the 32-bit
- field went into the high half of USEC. */
- GElf_Ehdr ehdr_mem;
- GElf_Ehdr *ehdr = gelf_getehdr (core, &ehdr_mem);
- if (likely (ehdr->e_ident[EI_DATA] == ELFDATA2MSB))
- usec >>= 32;
- else
- usec &= UINT32_MAX;
- }
- colno = print_core_item (colno, ',', ITEM_WRAP_COLUMN, 0, item->name,
- maxfmt, "%" PRIu64 ".%.6" PRIu64, sec, usec);
- break;
-
- case 'c':
- assert (count == 1);
- colno = print_core_item (colno, ',', ITEM_WRAP_COLUMN, 0, item->name,
- 1, "%c", value.Byte[0]);
- break;
-
- case 's':
- colno = print_core_item (colno, ',', ITEM_WRAP_COLUMN, 0, item->name,
- count, "%.*s", (int) count, value.Byte);
- break;
-
- default:
- error (0, 0, "XXX not handling format '%c' for %s",
- item->format, item->name);
- break;
- }
-
-#undef TYPES
-
- return colno;
-}
-
-
-/* Sort items by group, and by layout offset within each group. */
-static int
-compare_core_items (const void *a, const void *b)
-{
- const Ebl_Core_Item *const *p1 = a;
- const Ebl_Core_Item *const *p2 = b;
- const Ebl_Core_Item *item1 = *p1;
- const Ebl_Core_Item *item2 = *p2;
-
- return ((item1->group == item2->group ? 0
- : strcmp (item1->group, item2->group))
- ?: (int) item1->offset - (int) item2->offset);
-}
-
-/* Sort item groups by layout offset of the first item in the group. */
-static int
-compare_core_item_groups (const void *a, const void *b)
-{
- const Ebl_Core_Item *const *const *p1 = a;
- const Ebl_Core_Item *const *const *p2 = b;
- const Ebl_Core_Item *const *group1 = *p1;
- const Ebl_Core_Item *const *group2 = *p2;
- const Ebl_Core_Item *item1 = *group1;
- const Ebl_Core_Item *item2 = *group2;
-
- return (int) item1->offset - (int) item2->offset;
-}
-
-static unsigned int
-handle_core_items (Elf *core, const void *desc, size_t descsz,
- const Ebl_Core_Item *items, size_t nitems)
-{
- if (nitems == 0)
- return 0;
-
- /* Sort to collect the groups together. */
- const Ebl_Core_Item *sorted_items[nitems];
- for (size_t i = 0; i < nitems; ++i)
- sorted_items[i] = &items[i];
- qsort (sorted_items, nitems, sizeof sorted_items[0], &compare_core_items);
-
- /* Collect the unique groups and sort them. */
- const Ebl_Core_Item **groups[nitems];
- groups[0] = &sorted_items[0];
- size_t ngroups = 1;
- for (size_t i = 1; i < nitems; ++i)
- if (sorted_items[i]->group != sorted_items[i - 1]->group
- && strcmp (sorted_items[i]->group, sorted_items[i - 1]->group))
- groups[ngroups++] = &sorted_items[i];
- qsort (groups, ngroups, sizeof groups[0], &compare_core_item_groups);
-
- /* Write out all the groups. */
- unsigned int colno = 0;
-
- const void *last = desc;
- if (nitems == 1)
- {
- size_t size = descsz;
- colno = handle_core_item (core, sorted_items[0], desc, colno, &size);
- if (size == 0)
- return colno;
- desc += descsz - size;
- descsz = size;
- }
-
- do
- {
- for (size_t i = 0; i < ngroups; ++i)
- {
- for (const Ebl_Core_Item **item = groups[i];
- (item < &sorted_items[nitems]
- && ((*item)->group == groups[i][0]->group
- || !strcmp ((*item)->group, groups[i][0]->group)));
- ++item)
- colno = handle_core_item (core, *item, desc, colno, NULL);
-
- /* Force a line break at the end of the group. */
- colno = ITEM_WRAP_COLUMN;
- }
-
- if (descsz == 0)
- break;
-
- /* This set of items consumed a certain amount of the note's data.
- If there is more data there, we have another unit of the same size.
- Loop to print that out too. */
- const Ebl_Core_Item *item = &items[nitems - 1];
- size_t eltsz = item->offset + gelf_fsize (core, item->type,
- item->count ?: 1, EV_CURRENT);
-
- int reps = -1;
- do
- {
- ++reps;
- desc += eltsz;
- descsz -= eltsz;
- }
- while (descsz >= eltsz && !memcmp (desc, last, eltsz));
-
- if (reps == 1)
- {
- /* For just one repeat, print it unabridged twice. */
- desc -= eltsz;
- descsz += eltsz;
- }
- else if (reps > 1)
- printf (gettext ("\n%*s... <repeats %u more times> ..."),
- ITEM_INDENT, "", reps);
-
- last = desc;
- }
- while (descsz > 0);
-
- return colno;
-}
-
-static unsigned int
-handle_bit_registers (const Ebl_Register_Location *regloc, const void *desc,
- unsigned int colno)
-{
- desc += regloc->offset;
-
- abort (); /* XXX */
- return colno;
-}
-
-
-static unsigned int
-handle_core_register (Ebl *ebl, Elf *core, int maxregname,
- const Ebl_Register_Location *regloc, const void *desc,
- unsigned int colno)
-{
- if (regloc->bits % 8 != 0)
- return handle_bit_registers (regloc, desc, colno);
-
- desc += regloc->offset;
-
- for (int reg = regloc->regno; reg < regloc->regno + regloc->count; ++reg)
- {
- const char *pfx;
- const char *set;
- char name[16];
- int bits;
- int type;
- ssize_t n = ebl_register_info (ebl, reg, name, sizeof name,
- &pfx, &set, &bits, &type);
- if (n <= 0)
- error (EXIT_FAILURE, 0,
- gettext ("unable to handle register number %d"),
- regloc->regno);
-
-#define TYPES \
- BITS (8, BYTE, "%4" PRId8, "0x%.2" PRIx8, 4); \
- BITS (16, HALF, "%6" PRId16, "0x%.4" PRIx16, 6); \
- BITS (32, WORD, "%11" PRId32, " 0x%.8" PRIx32, 11); \
- BITS (64, XWORD, "%20" PRId64, " 0x%.16" PRIx64, 20)
-
-#define BITS(bits, xtype, sfmt, ufmt, max) \
- uint##bits##_t b##bits; int##bits##_t b##bits##s
- union { TYPES; uint64_t b128[2]; } value;
-#undef BITS
-
- switch (type)
- {
- case DW_ATE_unsigned:
- case DW_ATE_signed:
- case DW_ATE_address:
- switch (bits)
- {
-#define BITS(bits, xtype, sfmt, ufmt, max) \
- case bits: \
- desc = convert (core, ELF_T_##xtype, 1, &value, desc, 0); \
- if (type == DW_ATE_signed) \
- colno = print_core_item (colno, ' ', REGISTER_WRAP_COLUMN, \
- maxregname, name, \
- max, sfmt, value.b##bits##s); \
- else \
- colno = print_core_item (colno, ' ', REGISTER_WRAP_COLUMN, \
- maxregname, name, \
- max, ufmt, value.b##bits); \
- break
-
- TYPES;
-
- case 128:
- assert (type == DW_ATE_unsigned);
- desc = convert (core, ELF_T_XWORD, 2, &value, desc, 0);
- int be = elf_getident (core, NULL)[EI_DATA] == ELFDATA2MSB;
- colno = print_core_item (colno, ' ', REGISTER_WRAP_COLUMN,
- maxregname, name,
- 34, "0x%.16" PRIx64 "%.16" PRIx64,
- value.b128[!be], value.b128[be]);
- break;
-
- default:
- abort ();
-#undef BITS
- }
- break;
-
- default:
- /* Print each byte in hex, the whole thing in native byte order. */
- assert (bits % 8 == 0);
- const uint8_t *bytes = desc;
- desc += bits / 8;
- char hex[bits / 4 + 1];
- hex[bits / 4] = '\0';
- int incr = 1;
- if (elf_getident (core, NULL)[EI_DATA] == ELFDATA2LSB)
- {
- bytes += bits / 8 - 1;
- incr = -1;
- }
- size_t idx = 0;
- for (char *h = hex; bits > 0; bits -= 8, idx += incr)
- {
- *h++ = "0123456789abcdef"[bytes[idx] >> 4];
- *h++ = "0123456789abcdef"[bytes[idx] & 0xf];
- }
- colno = print_core_item (colno, ' ', REGISTER_WRAP_COLUMN,
- maxregname, name,
- 2 + sizeof hex - 1, "0x%s", hex);
- break;
- }
- desc += regloc->pad;
-
-#undef TYPES
- }
-
- return colno;
-}
-
-
-struct register_info
-{
- const Ebl_Register_Location *regloc;
- const char *set;
- char name[16];
- Dwarf_Half regno;
- uint8_t bits;
- uint8_t type;
-};
-
-static int
-register_bitpos (const struct register_info *r)
-{
- return (r->regloc->offset * 8
- + ((r->regno - r->regloc->regno)
- * (r->regloc->bits + r->regloc->pad * 8)));
-}
-
-static int
-compare_sets_by_info (const struct register_info *r1,
- const struct register_info *r2)
-{
- return ((int) r2->bits - (int) r1->bits
- ?: register_bitpos (r1) - register_bitpos (r2));
-}
-
-/* Sort registers by set, and by size and layout offset within each set. */
-static int
-compare_registers (const void *a, const void *b)
-{
- const struct register_info *r1 = a;
- const struct register_info *r2 = b;
-
- /* Unused elements sort last. */
- if (r1->regloc == NULL)
- return r2->regloc == NULL ? 0 : 1;
- if (r2->regloc == NULL)
- return -1;
-
- return ((r1->set == r2->set ? 0 : strcmp (r1->set, r2->set))
- ?: compare_sets_by_info (r1, r2));
-}
-
-/* Sort register sets by layout offset of the first register in the set. */
-static int
-compare_register_sets (const void *a, const void *b)
-{
- const struct register_info *const *p1 = a;
- const struct register_info *const *p2 = b;
- return compare_sets_by_info (*p1, *p2);
-}
-
-static unsigned int
-handle_core_registers (Ebl *ebl, Elf *core, const void *desc,
- const Ebl_Register_Location *reglocs, size_t nregloc)
-{
- if (nregloc == 0)
- return 0;
-
- ssize_t maxnreg = ebl_register_info (ebl, 0, NULL, 0, NULL, NULL, NULL, NULL);
- if (maxnreg <= 0)
- error (EXIT_FAILURE, 0,
- gettext ("cannot register info: %s"), elf_errmsg (-1));
-
- struct register_info regs[maxnreg];
- memset (regs, 0, sizeof regs);
-
- /* Sort to collect the sets together. */
- int maxreg = 0;
- for (size_t i = 0; i < nregloc; ++i)
- for (int reg = reglocs[i].regno;
- reg < reglocs[i].regno + reglocs[i].count;
- ++reg)
- {
- assert (reg < maxnreg);
- if (reg > maxreg)
- maxreg = reg;
- struct register_info *info = ®s[reg];
-
- const char *pfx;
- int bits;
- int type;
- ssize_t n = ebl_register_info (ebl, reg, info->name, sizeof info->name,
- &pfx, &info->set, &bits, &type);
- if (n <= 0)
- error (EXIT_FAILURE, 0,
- gettext ("cannot register info: %s"), elf_errmsg (-1));
-
- info->regloc = ®locs[i];
- info->regno = reg;
- info->bits = bits;
- info->type = type;
- }
- qsort (regs, maxreg + 1, sizeof regs[0], &compare_registers);
-
- /* Collect the unique sets and sort them. */
- inline bool same_set (const struct register_info *a,
- const struct register_info *b)
- {
- return (a < ®s[maxnreg] && a->regloc != NULL
- && b < ®s[maxnreg] && b->regloc != NULL
- && a->bits == b->bits
- && (a->set == b->set || !strcmp (a->set, b->set)));
- }
- struct register_info *sets[maxreg + 1];
- sets[0] = ®s[0];
- size_t nsets = 1;
- for (int i = 1; i <= maxreg; ++i)
- if (regs[i].regloc != NULL && !same_set (®s[i], ®s[i - 1]))
- sets[nsets++] = ®s[i];
- qsort (sets, nsets, sizeof sets[0], &compare_register_sets);
-
- /* Write out all the sets. */
- unsigned int colno = 0;
- for (size_t i = 0; i < nsets; ++i)
- {
- /* Find the longest name of a register in this set. */
- size_t maxname = 0;
- const struct register_info *end;
- for (end = sets[i]; same_set (sets[i], end); ++end)
- {
- size_t len = strlen (end->name);
- if (len > maxname)
- maxname = len;
- }
-
- for (const struct register_info *reg = sets[i];
- reg < end;
- reg += reg->regloc->count ?: 1)
- colno = handle_core_register (ebl, core, maxname,
- reg->regloc, desc, colno);
-
- /* Force a line break at the end of the group. */
- colno = REGISTER_WRAP_COLUMN;
- }
-
- return colno;
-}
-
-static void
-handle_auxv_note (Ebl *ebl, Elf *core, GElf_Word descsz, GElf_Off desc_pos)
-{
- Elf_Data *data = elf_getdata_rawchunk (core, desc_pos, descsz, ELF_T_AUXV);
- if (data == NULL)
- elf_error:
- error (EXIT_FAILURE, 0,
- gettext ("cannot convert core note data: %s"), elf_errmsg (-1));
-
- const size_t nauxv = descsz / gelf_fsize (core, ELF_T_AUXV, 1, EV_CURRENT);
- for (size_t i = 0; i < nauxv; ++i)
- {
- GElf_auxv_t av_mem;
- GElf_auxv_t *av = gelf_getauxv (data, i, &av_mem);
- if (av == NULL)
- goto elf_error;
-
- const char *name;
- const char *fmt;
- if (ebl_auxv_info (ebl, av->a_type, &name, &fmt) == 0)
- {
- /* Unknown type. */
- if (av->a_un.a_val == 0)
- printf (" %" PRIu64 "\n", av->a_type);
- else
- printf (" %" PRIu64 ": %#" PRIx64 "\n",
- av->a_type, av->a_un.a_val);
- }
- else
- switch (fmt[0])
- {
- case '\0': /* Normally zero. */
- if (av->a_un.a_val == 0)
- {
- printf (" %s\n", name);
- break;
- }
- /* Fall through */
- case 'x': /* hex */
- case 'p': /* address */
- case 's': /* address of string */
- printf (" %s: %#" PRIx64 "\n", name, av->a_un.a_val);
- break;
- case 'u':
- printf (" %s: %" PRIu64 "\n", name, av->a_un.a_val);
- break;
- case 'd':
- printf (" %s: %" PRId64 "\n", name, av->a_un.a_val);
- break;
-
- case 'b':
- printf (" %s: %#" PRIx64 " ", name, av->a_un.a_val);
- GElf_Xword bit = 1;
- const char *pfx = "<";
- for (const char *p = fmt + 1; *p != 0; p = strchr (p, '\0') + 1)
- {
- if (av->a_un.a_val & bit)
- {
- printf ("%s%s", pfx, p);
- pfx = " ";
- }
- bit <<= 1;
- }
- printf (">\n");
- break;
-
- default:
- abort ();
- }
- }
-}
-
-static void
-handle_core_note (Ebl *ebl, const GElf_Nhdr *nhdr, const void *desc)
-{
- GElf_Word regs_offset;
- size_t nregloc;
- const Ebl_Register_Location *reglocs;
- size_t nitems;
- const Ebl_Core_Item *items;
-
- if (! ebl_core_note (ebl, nhdr->n_type, nhdr->n_descsz,
- ®s_offset, &nregloc, ®locs, &nitems, &items))
- return;
-
- /* Pass 0 for DESCSZ when there are registers in the note,
- so that the ITEMS array does not describe the whole thing.
- For non-register notes, the actual descsz might be a multiple
- of the unit size, not just exactly the unit size. */
- unsigned int colno = handle_core_items (ebl->elf, desc,
- nregloc == 0 ? nhdr->n_descsz : 0,
- items, nitems);
- if (colno != 0)
- putchar_unlocked ('\n');
-
- colno = handle_core_registers (ebl, ebl->elf, desc + regs_offset,
- reglocs, nregloc);
- if (colno != 0)
- putchar_unlocked ('\n');
-}
-
-static void
-handle_notes_data (Ebl *ebl, const GElf_Ehdr *ehdr,
- GElf_Off start, Elf_Data *data)
-{
- fputs_unlocked (gettext (" Owner Data size Type\n"), stdout);
-
- if (data == NULL)
- goto bad_note;
-
- size_t offset = 0;
- GElf_Nhdr nhdr;
- size_t name_offset;
- size_t desc_offset;
- while (offset < data->d_size
- && (offset = gelf_getnote (data, offset,
- &nhdr, &name_offset, &desc_offset)) > 0)
- {
- const char *name = data->d_buf + name_offset;
- const char *desc = data->d_buf + desc_offset;
-
- char buf[100];
- char buf2[100];
- printf (gettext (" %-13.*s %9" PRId32 " %s\n"),
- (int) nhdr.n_namesz, name, nhdr.n_descsz,
- ehdr->e_type == ET_CORE
- ? ebl_core_note_type_name (ebl, nhdr.n_type,
- buf, sizeof (buf))
- : ebl_object_note_type_name (ebl, nhdr.n_type,
- buf2, sizeof (buf2)));
-
- /* Filter out invalid entries. */
- if (memchr (name, '\0', nhdr.n_namesz) != NULL
- /* XXX For now help broken Linux kernels. */
- || 1)
- {
- if (ehdr->e_type == ET_CORE)
- {
- if (nhdr.n_type == NT_AUXV)
- handle_auxv_note (ebl, ebl->elf, nhdr.n_descsz,
- start + desc_offset);
- else
- handle_core_note (ebl, &nhdr, desc);
- }
- else
- ebl_object_note (ebl, name, nhdr.n_type, nhdr.n_descsz, desc);
- }
- }
-
- if (offset == data->d_size)
- return;
-
- bad_note:
- error (EXIT_FAILURE, 0,
- gettext ("cannot get content of note section: %s"),
- elf_errmsg (-1));
-}
-
-static void
-handle_notes (Ebl *ebl, GElf_Ehdr *ehdr)
-{
- /* If we have section headers, just look for SHT_NOTE sections.
- In a debuginfo file, the program headers are not reliable. */
- if (shnum != 0)
- {
- /* Get the section header string table index. */
- size_t shstrndx;
- if (elf_getshstrndx (ebl->elf, &shstrndx) < 0)
- error (EXIT_FAILURE, 0,
- gettext ("cannot get section header string table index"));
-
- Elf_Scn *scn = NULL;
- while ((scn = elf_nextscn (ebl->elf, scn)) != NULL)
- {
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
-
- if (shdr == NULL || shdr->sh_type != SHT_NOTE)
- /* Not what we are looking for. */
- continue;
-
- printf (gettext ("\
-\nNote section [%2zu] '%s' of %" PRIu64 " bytes at offset %#0" PRIx64 ":\n"),
- elf_ndxscn (scn),
- elf_strptr (ebl->elf, shstrndx, shdr->sh_name),
- shdr->sh_size, shdr->sh_offset);
-
- handle_notes_data (ebl, ehdr, shdr->sh_offset,
- elf_getdata (scn, NULL));
- }
- return;
- }
-
- /* We have to look through the program header to find the note
- sections. There can be more than one. */
- for (size_t cnt = 0; cnt < ehdr->e_phnum; ++cnt)
- {
- GElf_Phdr mem;
- GElf_Phdr *phdr = gelf_getphdr (ebl->elf, cnt, &mem);
-
- if (phdr == NULL || phdr->p_type != PT_NOTE)
- /* Not what we are looking for. */
- continue;
-
- printf (gettext ("\
-\nNote segment of %" PRIu64 " bytes at offset %#0" PRIx64 ":\n"),
- phdr->p_filesz, phdr->p_offset);
-
- handle_notes_data (ebl, ehdr, phdr->p_offset,
- elf_getdata_rawchunk (ebl->elf,
- phdr->p_offset, phdr->p_filesz,
- ELF_T_NHDR));
- }
-}
-
-
-static void
-hex_dump (const uint8_t *data, size_t len)
-{
- size_t pos = 0;
- while (pos < len)
- {
- printf (" 0x%08Zx ", pos);
-
- const size_t chunk = MIN (len - pos, 16);
-
- for (size_t i = 0; i < chunk; ++i)
- if (i % 4 == 3)
- printf ("%02x ", data[pos + i]);
- else
- printf ("%02x", data[pos + i]);
-
- if (chunk < 16)
- printf ("%*s", (int) ((16 - chunk) * 2 + (16 - chunk + 3) / 4), "");
-
- for (size_t i = 0; i < chunk; ++i)
- {
- unsigned char b = data[pos + i];
- printf ("%c", isprint (b) ? b : '.');
- }
-
- putchar ('\n');
- pos += chunk;
- }
-}
-
-static void
-dump_data_section (Elf_Scn *scn, const GElf_Shdr *shdr, const char *name)
-{
- if (shdr->sh_size == 0 || shdr->sh_type == SHT_NOBITS)
- printf (gettext ("\nSection [%Zu] '%s' has no data to dump.\n"),
- elf_ndxscn (scn), name);
- else
- {
- Elf_Data *data = elf_rawdata (scn, NULL);
- if (data == NULL)
- error (0, 0, gettext ("cannot get data for section [%Zu] '%s': %s"),
- elf_ndxscn (scn), name, elf_errmsg (-1));
- else
- {
- printf (gettext ("\nHex dump of section [%Zu] '%s', %" PRIu64
- " bytes at offset %#0" PRIx64 ":\n"),
- elf_ndxscn (scn), name,
- shdr->sh_size, shdr->sh_offset);
- hex_dump (data->d_buf, data->d_size);
- }
- }
-}
-
-static void
-print_string_section (Elf_Scn *scn, const GElf_Shdr *shdr, const char *name)
-{
- if (shdr->sh_size == 0)
- printf (gettext ("\nSection [%Zu] '%s' is empty.\n"),
- elf_ndxscn (scn), name);
-
- Elf_Data *data = elf_rawdata (scn, NULL);
- if (data == NULL)
- error (0, 0, gettext ("cannot get data for section [%Zu] '%s': %s"),
- elf_ndxscn (scn), name, elf_errmsg (-1));
- else
- {
- printf (gettext ("\nString section [%Zu] '%s' contains %" PRIu64
- " bytes at offset %#0" PRIx64 ":\n"),
- elf_ndxscn (scn), name,
- shdr->sh_size, shdr->sh_offset);
-
- const char *start = data->d_buf;
- const char *const limit = start + data->d_size;
- do
- {
- const char *end = memchr (start, '\0', limit - start);
- const size_t pos = start - (const char *) data->d_buf;
- if (unlikely (end == NULL))
- {
- printf (" [%6Zx]- %.*s\n",
- pos, (int) (limit - start), start);
- break;
- }
- printf (" [%6Zx] %s\n", pos, start);
- start = end + 1;
- } while (start < limit);
- }
-}
-
-static void
-for_each_section_argument (Elf *elf, const struct section_argument *list,
- void (*dump) (Elf_Scn *scn, const GElf_Shdr *shdr,
- const char *name))
-{
- /* Get the section header string table index. */
- size_t shstrndx;
- if (elf_getshstrndx (elf, &shstrndx) < 0)
- error (EXIT_FAILURE, 0,
- gettext ("cannot get section header string table index"));
-
- for (const struct section_argument *a = list; a != NULL; a = a->next)
- {
- Elf_Scn *scn;
- GElf_Shdr shdr_mem;
- const char *name = NULL;
-
- char *endp = NULL;
- unsigned long int shndx = strtoul (a->arg, &endp, 0);
- if (endp != a->arg && *endp == '\0')
- {
- scn = elf_getscn (elf, shndx);
- if (scn == NULL)
- {
- error (0, 0, gettext ("\nsection [%lu] does not exist"), shndx);
- continue;
- }
-
- if (gelf_getshdr (scn, &shdr_mem) == NULL)
- error (EXIT_FAILURE, 0, gettext ("cannot get section header: %s"),
- elf_errmsg (-1));
- name = elf_strptr (elf, shstrndx, shdr_mem.sh_name);
- }
- else
- {
- /* Need to look up the section by name. */
- scn = NULL;
- while ((scn = elf_nextscn (elf, scn)) != NULL)
- {
- if (gelf_getshdr (scn, &shdr_mem) == NULL)
- continue;
- name = elf_strptr (elf, shstrndx, shdr_mem.sh_name);
- if (name == NULL)
- continue;
- if (!strcmp (name, a->arg))
- break;
- }
-
- if (unlikely (scn == NULL))
- {
- error (0, 0, gettext ("\nsection '%s' does not exist"), a->arg);
- continue;
- }
- }
-
- (*dump) (scn, &shdr_mem, name);
- }
-}
-
-static void
-dump_data (Ebl *ebl)
-{
- for_each_section_argument (ebl->elf, dump_data_sections, &dump_data_section);
-}
-
-static void
-dump_strings (Ebl *ebl)
-{
- for_each_section_argument (ebl->elf, string_sections, &print_string_section);
-}
-
-static void
-print_strings (Ebl *ebl)
-{
- /* Get the section header string table index. */
- size_t shstrndx;
- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- gettext ("cannot get section header string table index"));
-
- Elf_Scn *scn;
- GElf_Shdr shdr_mem;
- const char *name;
- scn = NULL;
- while ((scn = elf_nextscn (ebl->elf, scn)) != NULL)
- {
- if (gelf_getshdr (scn, &shdr_mem) == NULL)
- continue;
-
- if (shdr_mem.sh_type != SHT_PROGBITS
- || !(shdr_mem.sh_flags & SHF_STRINGS))
- continue;
-
- name = elf_strptr (ebl->elf, shstrndx, shdr_mem.sh_name);
- if (name == NULL)
- continue;
-
- print_string_section (scn, &shdr_mem, name);
- }
-}
-
-static void
-dump_archive_index (Elf *elf, const char *fname)
-{
- size_t narsym;
- const Elf_Arsym *arsym = elf_getarsym (elf, &narsym);
- if (arsym == NULL)
- {
- int result = elf_errno ();
- if (unlikely (result != ELF_E_NO_INDEX))
- error (EXIT_FAILURE, 0,
- gettext ("cannot get symbol index of archive '%s': %s"),
- fname, elf_errmsg (result));
- else
- printf (gettext ("\nArchive '%s' has no symbol index\n"), fname);
- return;
- }
-
- printf (gettext ("\nIndex of archive '%s' has %Zu entries:\n"),
- fname, narsym);
-
- size_t as_off = 0;
- for (const Elf_Arsym *s = arsym; s < &arsym[narsym - 1]; ++s)
- {
- if (s->as_off != as_off)
- {
- as_off = s->as_off;
-
- Elf *subelf;
- if (unlikely (elf_rand (elf, as_off) == 0)
- || unlikely ((subelf = elf_begin (-1, ELF_C_READ_MMAP, elf))
- == NULL))
-#if __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 7)
- while (1)
-#endif
- error (EXIT_FAILURE, 0,
- gettext ("cannot extract member at offset %Zu in '%s': %s"),
- as_off, fname, elf_errmsg (-1));
-
- const Elf_Arhdr *h = elf_getarhdr (subelf);
-
- printf (gettext ("Archive member '%s' contains:\n"), h->ar_name);
-
- elf_end (subelf);
- }
-
- printf ("\t%s\n", s->as_name);
- }
-}
-
-#include "debugpred.h"
diff --git a/src/sectionhash.c b/src/sectionhash.c
deleted file mode 100644
index 68d734e..0000000
--- a/src/sectionhash.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/* Section hash table implementation.
- Copyright (C) 2001, 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <string.h>
-
-#include <elf-knowledge.h>
-#include <ld.h>
-
-
-/* Comparison function for sections. */
-static int
-scnhead_compare (struct scnhead *one, struct scnhead *two)
-{
- int result = strcmp (one->name, two->name);
-
- if (result == 0)
- {
- result = one->type - two->type;
-
- if (result == 0)
- {
- GElf_Sxword diff = (SH_FLAGS_IMPORTANT (one->flags)
- - SH_FLAGS_IMPORTANT (two->flags));
- result = diff < 0 ? -1 : diff == 0 ? 0 : 1;
-
- if (result == 0)
- {
- result = one->entsize - two->entsize;
-
- if (result == 0)
- {
- result = (one->grp_signature == NULL
- ? (two->grp_signature == NULL ? 0 : -1)
- : (two->grp_signature == NULL
- ? 1 : strcmp (one->grp_signature,
- two->grp_signature)));
-
- if (result == 0)
- result = one->kind - two->kind;
- }
- }
- }
- }
-
- return result;
-}
-
-/* Definitions for the section hash table. */
-#define TYPE struct scnhead *
-#define NAME ld_section_tab
-#define ITERATE 1
-#define COMPARE(a, b) scnhead_compare (a, b)
-
-#include "../lib/dynamicsizehash.c"
diff --git a/src/sectionhash.h b/src/sectionhash.h
deleted file mode 100644
index ba41ee8..0000000
--- a/src/sectionhash.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Copyright (C) 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifndef SECTIONHASH_H
-#define SECTIONHASH_H 1
-
-/* Definitions for the section hash table. */
-#define TYPE struct scnhead *
-#define NAME ld_section_tab
-#define ITERATE 1
-#include <dynamicsizehash.h>
-
-#endif /* sectionhash.h */
diff --git a/src/size.c b/src/size.c
deleted file mode 100644
index d226f40..0000000
--- a/src/size.c
+++ /dev/null
@@ -1,690 +0,0 @@
-/* Print size information from ELF file.
- Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <argp.h>
-#include <error.h>
-#include <fcntl.h>
-#include <gelf.h>
-#include <inttypes.h>
-#include <libelf.h>
-#include <libintl.h>
-#include <locale.h>
-#include <mcheck.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdio_ext.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/param.h>
-
-#include <system.h>
-
-
-/* Name and version of program. */
-static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
-
-/* Bug report address. */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
-
-
-/* Values for the parameters which have no short form. */
-#define OPT_FORMAT 0x100
-#define OPT_RADIX 0x101
-
-/* Definitions of arguments for argp functions. */
-static const struct argp_option options[] =
-{
- { NULL, 0, NULL, 0, N_("Output format:"), 0 },
- { "format", OPT_FORMAT, "FORMAT", 0,
- N_("Use the output format FORMAT. FORMAT can be `bsd' or `sysv'. "
- "The default is `bsd'"), 0 },
- { NULL, 'A', NULL, 0, N_("Same as `--format=sysv'"), 0 },
- { NULL, 'B', NULL, 0, N_("Same as `--format=bsd'"), 0 },
- { "radix", OPT_RADIX, "RADIX", 0, N_("Use RADIX for printing symbol values"),
- 0},
- { NULL, 'd', NULL, 0, N_("Same as `--radix=10'"), 0 },
- { NULL, 'o', NULL, 0, N_("Same as `--radix=8'"), 0 },
- { NULL, 'x', NULL, 0, N_("Same as `--radix=16'"), 0 },
- { NULL, 'f', NULL, 0,
- N_("Similar to `--format=sysv' output but in one line"), 0 },
-
- { NULL, 0, NULL, 0, N_("Output options:"), 0 },
- { NULL, 'F', NULL, 0,
- N_("Print size and permission flags for loadable segments"), 0 },
- { "totals", 't', NULL, 0, N_("Display the total sizes (bsd only)"), 0 },
- { NULL, 0, NULL, 0, NULL, 0 }
-};
-
-/* Short description of program. */
-static const char doc[] = N_("\
-List section sizes of FILEs (a.out by default).");
-
-/* Strings for arguments in help texts. */
-static const char args_doc[] = N_("[FILE...]");
-
-/* Prototype for option handler. */
-static error_t parse_opt (int key, char *arg, struct argp_state *state);
-
-/* Data structure to communicate with argp functions. */
-static struct argp argp =
-{
- options, parse_opt, args_doc, doc, NULL, NULL, NULL
-};
-
-
-/* Print symbols in file named FNAME. */
-static int process_file (const char *fname);
-
-/* Handle content of archive. */
-static int handle_ar (int fd, Elf *elf, const char *prefix, const char *fname);
-
-/* Handle ELF file. */
-static void handle_elf (Elf *elf, const char *fullname, const char *fname);
-
-/* Show total size. */
-static void show_bsd_totals (void);
-
-#define INTERNAL_ERROR(fname) \
- error (EXIT_FAILURE, 0, gettext ("%s: INTERNAL ERROR %d (%s-%s): %s"), \
- fname, __LINE__, PACKAGE_VERSION, __DATE__, elf_errmsg (-1))
-
-
-/* User-selectable options. */
-
-/* The selected output format. */
-static enum
-{
- format_bsd = 0,
- format_sysv,
- format_sysv_one_line,
- format_segments
-} format;
-
-/* Radix for printed numbers. */
-static enum
-{
- radix_decimal = 0,
- radix_hex,
- radix_octal
-} radix;
-
-
-/* Mapping of radix and binary class to length. */
-static const int length_map[2][3] =
-{
- [ELFCLASS32 - 1] =
- {
- [radix_hex] = 8,
- [radix_decimal] = 10,
- [radix_octal] = 11
- },
- [ELFCLASS64 - 1] =
- {
- [radix_hex] = 16,
- [radix_decimal] = 20,
- [radix_octal] = 22
- }
-};
-
-/* True if total sizes should be printed. */
-static bool totals;
-/* To print the total sizes in a reasonable format remember the higest
- "class" of ELF binaries processed. */
-static int totals_class;
-
-
-int
-main (int argc, char *argv[])
-{
- int remaining;
- int result = 0;
-
- /* Make memory leak detection possible. */
- mtrace ();
-
- /* We use no threads here which can interfere with handling a stream. */
- __fsetlocking (stdin, FSETLOCKING_BYCALLER);
- __fsetlocking (stdout, FSETLOCKING_BYCALLER);
- __fsetlocking (stderr, FSETLOCKING_BYCALLER);
-
- /* Set locale. */
- setlocale (LC_ALL, "");
-
- /* Make sure the message catalog can be found. */
- bindtextdomain (PACKAGE_TARNAME, LOCALEDIR);
-
- /* Initialize the message catalog. */
- textdomain (PACKAGE_TARNAME);
-
- /* Parse and process arguments. */
- argp_parse (&argp, argc, argv, 0, &remaining, NULL);
-
-
- /* Tell the library which version we are expecting. */
- elf_version (EV_CURRENT);
-
- if (remaining == argc)
- /* The user didn't specify a name so we use a.out. */
- result = process_file ("a.out");
- else
- /* Process all the remaining files. */
- do
- result |= process_file (argv[remaining]);
- while (++remaining < argc);
-
- /* Print the total sizes but only if the output format is BSD and at
- least one file has been correctly read (i.e., we recognized the
- class). */
- if (totals && format == format_bsd && totals_class != 0)
- show_bsd_totals ();
-
- return result;
-}
-
-
-/* Print the version information. */
-static void
-print_version (FILE *stream, struct argp_state *state __attribute__ ((unused)))
-{
- fprintf (stream, "size (%s) %s\n", PACKAGE_NAME, PACKAGE_VERSION);
- fprintf (stream, gettext ("\
-Copyright (C) %s Red Hat, Inc.\n\
-This is free software; see the source for copying conditions. There is NO\n\
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
-"), "2008");
- fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper");
-}
-
-
-/* Handle program arguments. */
-static error_t
-parse_opt (int key, char *arg,
- struct argp_state *state __attribute__ ((unused)))
-{
- switch (key)
- {
- case 'd':
- radix = radix_decimal;
- break;
-
- case 'f':
- format = format_sysv_one_line;
- break;
-
- case 'o':
- radix = radix_octal;
- break;
-
- case 'x':
- radix = radix_hex;
- break;
-
- case 'A':
- format = format_sysv;
- break;
-
- case 'B':
- format = format_bsd;
- break;
-
- case 'F':
- format = format_segments;
- break;
-
- case OPT_FORMAT:
- if (strcmp (arg, "bsd") == 0 || strcmp (arg, "berkeley") == 0)
- format = format_bsd;
- else if (likely (strcmp (arg, "sysv") == 0))
- format = format_sysv;
- else
- error (EXIT_FAILURE, 0, gettext ("Invalid format: %s"), arg);
- break;
-
- case OPT_RADIX:
- if (strcmp (arg, "x") == 0 || strcmp (arg, "16") == 0)
- radix = radix_hex;
- else if (strcmp (arg, "d") == 0 || strcmp (arg, "10") == 0)
- radix = radix_decimal;
- else if (strcmp (arg, "o") == 0 || strcmp (arg, "8") == 0)
- radix = radix_octal;
- else
- error (EXIT_FAILURE, 0, gettext ("Invalid radix: %s"), arg);
- break;
-
- case 't':
- totals = true;
- break;
-
- default:
- return ARGP_ERR_UNKNOWN;
- }
- return 0;
-}
-
-
-/* Open the file and determine the type. */
-static int
-process_file (const char *fname)
-{
- int fd = open (fname, O_RDONLY);
- if (unlikely (fd == -1))
- {
- error (0, errno, gettext ("cannot open '%s'"), fname);
- return 1;
- }
-
- /* Now get the ELF descriptor. */
- Elf *elf = elf_begin (fd, ELF_C_READ_MMAP, NULL);
- if (likely (elf != NULL))
- {
- if (elf_kind (elf) == ELF_K_ELF)
- {
- handle_elf (elf, NULL, fname);
-
- if (unlikely (elf_end (elf) != 0))
- INTERNAL_ERROR (fname);
-
- if (unlikely (close (fd) != 0))
- error (EXIT_FAILURE, errno, gettext ("while closing '%s'"), fname);
-
- return 0;
- }
- else if (likely (elf_kind (elf) == ELF_K_AR))
- return handle_ar (fd, elf, NULL, fname);
-
- /* We cannot handle this type. Close the descriptor anyway. */
- if (unlikely (elf_end (elf) != 0))
- INTERNAL_ERROR (fname);
- }
-
- error (0, 0, gettext ("%s: file format not recognized"), fname);
-
- return 1;
-}
-
-
-/* Print the BSD-style header. This is done exactly once. */
-static void
-print_header (Elf *elf)
-{
- static int done;
-
- if (! done)
- {
- int ddigits = length_map[gelf_getclass (elf) - 1][radix_decimal];
- int xdigits = length_map[gelf_getclass (elf) - 1][radix_hex];
-
- printf ("%*s %*s %*s %*s %*s %s\n",
- ddigits - 2, sgettext ("bsd|text"),
- ddigits - 2, sgettext ("bsd|data"),
- ddigits - 2, sgettext ("bsd|bss"),
- ddigits - 2, sgettext ("bsd|dec"),
- xdigits - 2, sgettext ("bsd|hex"),
- sgettext ("bsd|filename"));
-
- done = 1;
- }
-}
-
-
-static int
-handle_ar (int fd, Elf *elf, const char *prefix, const char *fname)
-{
- size_t prefix_len = prefix == NULL ? 0 : strlen (prefix);
- size_t fname_len = strlen (fname) + 1;
- char new_prefix[prefix_len + 1 + fname_len];
- char *cp = new_prefix;
-
- /* Create the full name of the file. */
- if (prefix != NULL)
- {
- cp = mempcpy (cp, prefix, prefix_len);
- *cp++ = ':';
- }
- memcpy (cp, fname, fname_len);
-
- /* Process all the files contained in the archive. */
- int result = 0;
- Elf *subelf;
- Elf_Cmd cmd = ELF_C_READ_MMAP;
- while ((subelf = elf_begin (fd, cmd, elf)) != NULL)
- {
- /* The the header for this element. */
- Elf_Arhdr *arhdr = elf_getarhdr (subelf);
-
- if (elf_kind (subelf) == ELF_K_ELF)
- handle_elf (subelf, new_prefix, arhdr->ar_name);
- else if (likely (elf_kind (subelf) == ELF_K_AR))
- result |= handle_ar (fd, subelf, new_prefix, arhdr->ar_name);
- /* else signal error??? */
-
- /* Get next archive element. */
- cmd = elf_next (subelf);
- if (unlikely (elf_end (subelf) != 0))
- INTERNAL_ERROR (fname);
- }
-
- if (unlikely (elf_end (elf) != 0))
- INTERNAL_ERROR (fname);
-
- if (unlikely (close (fd) != 0))
- error (EXIT_FAILURE, errno, gettext ("while closing '%s'"), fname);
-
- return result;
-}
-
-
-/* Show sizes in SysV format. */
-static void
-show_sysv (Elf *elf, const char *prefix, const char *fname,
- const char *fullname)
-{
- int maxlen = 10;
- const int digits = length_map[gelf_getclass (elf) - 1][radix];
-
- /* Get the section header string table index. */
- size_t shstrndx;
- if (unlikely (elf_getshstrndx (elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- gettext ("cannot get section header string table index"));
-
- /* First round over the sections: determine the longest section name. */
- Elf_Scn *scn = NULL;
- while ((scn = elf_nextscn (elf, scn)) != NULL)
- {
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
-
- if (shdr == NULL)
- INTERNAL_ERROR (fullname);
-
- /* Ignore all sections which are not used at runtime. */
- if ((shdr->sh_flags & SHF_ALLOC) != 0)
- maxlen = MAX (maxlen,
- (int) strlen (elf_strptr (elf, shstrndx,
- shdr->sh_name)));
- }
-
- fputs_unlocked (fname, stdout);
- if (prefix != NULL)
- printf (gettext (" (ex %s)"), prefix);
- printf (":\n%-*s %*s %*s\n",
- maxlen, sgettext ("sysv|section"),
- digits - 2, sgettext ("sysv|size"),
- digits, sgettext ("sysv|addr"));
-
- const char *fmtstr;
- if (radix == radix_hex)
- fmtstr = "%-*s %*" PRIx64 " %*" PRIx64 "\n";
- else if (radix == radix_decimal)
- fmtstr = "%-*s %*" PRId64 " %*" PRId64 "\n";
- else
- fmtstr = "%-*s %*" PRIo64 " %*" PRIo64 "\n";
-
- /* Iterate over all sections. */
- GElf_Off total = 0;
- while ((scn = elf_nextscn (elf, scn)) != NULL)
- {
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
-
- /* Ignore all sections which are not used at runtime. */
- if ((shdr->sh_flags & SHF_ALLOC) != 0)
- {
- printf (fmtstr,
- maxlen, elf_strptr (elf, shstrndx, shdr->sh_name),
- digits - 2, shdr->sh_size,
- digits, shdr->sh_addr);
-
- total += shdr->sh_size;
- }
- }
-
- if (radix == radix_hex)
- printf ("%-*s %*" PRIx64 "\n\n\n", maxlen, sgettext ("sysv|Total"),
- digits - 2, total);
- else if (radix == radix_decimal)
- printf ("%-*s %*" PRId64 "\n\n\n", maxlen, sgettext ("sysv|Total"),
- digits - 2, total);
- else
- printf ("%-*s %*" PRIo64 "\n\n\n", maxlen, sgettext ("sysv|Total"),
- digits - 2, total);
-}
-
-
-/* Show sizes in SysV format in one line. */
-static void
-show_sysv_one_line (Elf *elf)
-{
- /* Get the section header string table index. */
- size_t shstrndx;
- if (unlikely (elf_getshstrndx (elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- gettext ("cannot get section header string table index"));
-
- const char *fmtstr;
- if (radix == radix_hex)
- fmtstr = "%" PRIx64 "(%s)";
- else if (radix == radix_decimal)
- fmtstr = "%" PRId64 "(%s)";
- else
- fmtstr = "%" PRIo64 "(%s)";
-
- /* Iterate over all sections. */
- GElf_Off total = 0;
- bool first = true;
- Elf_Scn *scn = NULL;
- while ((scn = elf_nextscn (elf, scn)) != NULL)
- {
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
-
- /* Ignore all sections which are not used at runtime. */
- if ((shdr->sh_flags & SHF_ALLOC) == 0)
- continue;
-
- if (! first)
- fputs_unlocked (" + ", stdout);
- first = false;
-
- printf (fmtstr, shdr->sh_size,
- elf_strptr (elf, shstrndx, shdr->sh_name));
-
- total += shdr->sh_size;
- }
-
- if (radix == radix_hex)
- printf (" = %#" PRIx64 "\n", total);
- else if (radix == radix_decimal)
- printf (" = %" PRId64 "\n", total);
- else
- printf (" = %" PRIo64 "\n", total);
-}
-
-
-/* Variables to add up the sizes of all files. */
-static uintmax_t total_textsize;
-static uintmax_t total_datasize;
-static uintmax_t total_bsssize;
-
-
-/* Show sizes in BSD format. */
-static void
-show_bsd (Elf *elf, const char *prefix, const char *fname,
- const char *fullname)
-{
- GElf_Off textsize = 0;
- GElf_Off datasize = 0;
- GElf_Off bsssize = 0;
- const int ddigits = length_map[gelf_getclass (elf) - 1][radix_decimal];
- const int xdigits = length_map[gelf_getclass (elf) - 1][radix_hex];
-
- /* Iterate over all sections. */
- Elf_Scn *scn = NULL;
- while ((scn = elf_nextscn (elf, scn)) != NULL)
- {
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
-
- if (shdr == NULL)
- INTERNAL_ERROR (fullname);
-
- /* Ignore all sections which are not marked as loaded. */
- if ((shdr->sh_flags & SHF_ALLOC) == 0)
- continue;
-
- if ((shdr->sh_flags & SHF_WRITE) == 0)
- textsize += shdr->sh_size;
- else if (shdr->sh_type == SHT_NOBITS)
- bsssize += shdr->sh_size;
- else
- datasize += shdr->sh_size;
- }
-
- printf ("%*" PRId64 " %*" PRId64 " %*" PRId64 " %*" PRId64 " %*"
- PRIx64 " %s",
- ddigits - 2, textsize,
- ddigits - 2, datasize,
- ddigits - 2, bsssize,
- ddigits - 2, textsize + datasize + bsssize,
- xdigits - 2, textsize + datasize + bsssize,
- fname);
- if (prefix != NULL)
- printf (gettext (" (ex %s)"), prefix);
- fputs_unlocked ("\n", stdout);
-
- total_textsize += textsize;
- total_datasize += datasize;
- total_bsssize += bsssize;
-
- totals_class = MAX (totals_class, gelf_getclass (elf));
-}
-
-
-/* Show total size. */
-static void
-show_bsd_totals (void)
-{
- int ddigits = length_map[totals_class - 1][radix_decimal];
- int xdigits = length_map[totals_class - 1][radix_hex];
-
- printf ("%*" PRIuMAX " %*" PRIuMAX " %*" PRIuMAX " %*" PRIuMAX " %*"
- PRIxMAX " %s",
- ddigits - 2, total_textsize,
- ddigits - 2, total_datasize,
- ddigits - 2, total_bsssize,
- ddigits - 2, total_textsize + total_datasize + total_bsssize,
- xdigits - 2, total_textsize + total_datasize + total_bsssize,
- gettext ("(TOTALS)\n"));
-}
-
-
-/* Show size and permission of loadable segments. */
-static void
-show_segments (Elf *elf, const char *fullname)
-{
- GElf_Ehdr ehdr_mem;
- GElf_Ehdr *ehdr = gelf_getehdr (elf, &ehdr_mem);
- if (ehdr == NULL)
- INTERNAL_ERROR (fullname);
-
- GElf_Off total = 0;
- bool first = true;
- for (size_t cnt = 0; cnt < ehdr->e_phnum; ++cnt)
- {
- GElf_Phdr phdr_mem;
- GElf_Phdr *phdr;
-
- phdr = gelf_getphdr (elf, cnt, &phdr_mem);
- if (phdr == NULL)
- INTERNAL_ERROR (fullname);
-
- if (phdr->p_type != PT_LOAD)
- /* Only load segments. */
- continue;
-
- if (! first)
- fputs_unlocked (" + ", stdout);
- first = false;
-
- printf (radix == radix_hex ? "%" PRIx64 "(%c%c%c)"
- : (radix == radix_decimal ? "%" PRId64 "(%c%c%c)"
- : "%" PRIo64 "(%c%c%c)"),
- phdr->p_memsz,
- (phdr->p_flags & PF_R) == 0 ? '-' : 'r',
- (phdr->p_flags & PF_W) == 0 ? '-' : 'w',
- (phdr->p_flags & PF_X) == 0 ? '-' : 'x');
-
- total += phdr->p_memsz;
- }
-
- if (radix == radix_hex)
- printf (" = %#" PRIx64 "\n", total);
- else if (radix == radix_decimal)
- printf (" = %" PRId64 "\n", total);
- else
- printf (" = %" PRIo64 "\n", total);
-}
-
-
-static void
-handle_elf (Elf *elf, const char *prefix, const char *fname)
-{
- size_t prefix_len = prefix == NULL ? 0 : strlen (prefix);
- size_t fname_len = strlen (fname) + 1;
- char fullname[prefix_len + 1 + fname_len];
- char *cp = fullname;
-
- /* Create the full name of the file. */
- if (prefix != NULL)
- {
- cp = mempcpy (cp, prefix, prefix_len);
- *cp++ = ':';
- }
- memcpy (cp, fname, fname_len);
-
- if (format == format_sysv)
- show_sysv (elf, prefix, fname, fullname);
- else if (format == format_sysv_one_line)
- show_sysv_one_line (elf);
- else if (format == format_segments)
- show_segments (elf, fullname);
- else
- {
- print_header (elf);
-
- show_bsd (elf, prefix, fname, fullname);
- }
-}
-
-
-#include "debugpred.h"
diff --git a/src/strings.c b/src/strings.c
deleted file mode 100644
index b210996..0000000
--- a/src/strings.c
+++ /dev/null
@@ -1,744 +0,0 @@
-/* Print the strings of printable characters in files.
- Copyright (C) 2005, 2006, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <argp.h>
-#include <assert.h>
-#include <ctype.h>
-#include <endian.h>
-#include <errno.h>
-#include <error.h>
-#include <fcntl.h>
-#include <gelf.h>
-#include <inttypes.h>
-#include <libintl.h>
-#include <locale.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdio_ext.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/mman.h>
-#include <sys/param.h>
-#include <sys/stat.h>
-
-#include <system.h>
-
-
-/* Prototypes of local functions. */
-static int read_fd (int fd, const char *fname, off64_t fdlen);
-static int read_elf (Elf *elf, int fd, const char *fname, off64_t fdlen);
-
-
-/* Name and version of program. */
-static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
-
-/* Bug report address. */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
-
-/* Definitions of arguments for argp functions. */
-static const struct argp_option options[] =
-{
- { NULL, 0, NULL, 0, N_("Output Selection:"), 0 },
- { "all", 'a', NULL, 0, N_("Scan entire file, not only loaded sections"), 0 },
- { "bytes", 'n', "MIN-LEN", 0,
- N_("Only NUL-terminated sequences of MIN-LEN characters or more are printed"), 0 },
- { "encoding", 'e', "SELECTOR", 0, N_("\
-Select character size and endianess: s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit"),
- 0},
- { "print-file-name", 'f', NULL, 0,
- N_("Print name of the file before each string."), 0 },
- { "radix", 't', "{o,d,x}", 0,
- N_("Print location of the string in base 8, 10, or 16 respectively."), 0 },
- { NULL, 'o', NULL, 0, N_("Alias for --radix=o"), 0 },
-
- { NULL, 0, NULL, 0, N_("Miscellaneous:"), 0 },
- { NULL, 0, NULL, 0, NULL, 0 }
-};
-
-/* Short description of program. */
-static const char doc[] = N_("\
-Print the strings of printable characters in files.");
-
-/* Strings for arguments in help texts. */
-static const char args_doc[] = N_("[FILE...]");
-
-/* Prototype for option handler. */
-static error_t parse_opt (int key, char *arg, struct argp_state *state);
-
-/* Data structure to communicate with argp functions. */
-static struct argp argp =
-{
- options, parse_opt, args_doc, doc, NULL, NULL, NULL
-};
-
-
-/* Global variables. */
-
-/* True if whole file and not only loaded sections are looked at. */
-static bool entire_file;
-
-/* Minimum length of any sequence reported. */
-static size_t min_len = 4;
-
-/* Number of bytes per character. */
-static size_t bytes_per_char = 1;
-
-/* Minimum length of any sequence reported in bytes. */
-static size_t min_len_bytes;
-
-/* True if multibyte characters are in big-endian order. */
-static bool big_endian;
-
-/* True unless 7-bit ASCII are expected. */
-static bool char_7bit;
-
-/* True if file names should be printed before strings. */
-static bool print_file_name;
-
-/* Location print format string. */
-static const char *locfmt;
-
-/* Page size in use. */
-static size_t ps;
-
-
-/* Mapped parts of the ELF file. */
-static unsigned char *elfmap;
-static unsigned char *elfmap_base;
-static size_t elfmap_size;
-static off64_t elfmap_off;
-
-
-int
-main (int argc, char *argv[])
-{
- /* We use no threads. */
- __fsetlocking (stdin, FSETLOCKING_BYCALLER);
- __fsetlocking (stdout, FSETLOCKING_BYCALLER);
-
- /* Set locale. */
- (void) setlocale (LC_ALL, "");
-
- /* Make sure the message catalog can be found. */
- (void) bindtextdomain (PACKAGE_TARNAME, LOCALEDIR);
-
- /* Initialize the message catalog. */
- (void) textdomain (PACKAGE_TARNAME);
-
- /* Parse and process arguments. */
- int remaining;
- (void) argp_parse (&argp, argc, argv, 0, &remaining, NULL);
-
- /* Tell the library which version we are expecting. */
- elf_version (EV_CURRENT);
-
- /* Determine the page size. We will likely need it a couple of times. */
- ps = sysconf (_SC_PAGESIZE);
-
- struct stat64 st;
- int result = 0;
- if (remaining == argc)
- /* We read from standard input. This we cannot do for a
- structured file. */
- result = read_fd (STDOUT_FILENO,
- print_file_name ? "{standard input}" : NULL,
- fstat64 (STDOUT_FILENO, &st) == 0
- ? st.st_size : INT64_C (0x7fffffffffffffff));
- else
- do
- {
- int fd = (strcmp (argv[remaining], "-") == 0
- ? STDIN_FILENO : open (argv[remaining], O_RDONLY));
- if (unlikely (fd == -1))
- {
- error (0, errno, gettext ("cannot open '%s'"), argv[remaining]);
- result = 1;
- }
- else
- {
- const char *fname = print_file_name ? argv[remaining] : NULL;
- int fstat_fail = fstat64 (fd, &st);
- off64_t fdlen = (fstat_fail
- ? INT64_C (0x7fffffffffffffff) : st.st_size);
- if (fdlen > (off64_t) min_len_bytes)
- {
- Elf *elf = NULL;
- if (entire_file
- || fstat_fail
- || !S_ISREG (st.st_mode)
- || (elf = elf_begin (fd, ELF_C_READ, NULL)) == NULL
- || elf_kind (elf) != ELF_K_ELF)
- result |= read_fd (fd, fname, fdlen);
- else
- result |= read_elf (elf, fd, fname, fdlen);
-
- /* This call will succeed even if ELF is NULL. */
- elf_end (elf);
- }
-
- if (strcmp (argv[remaining], "-") != 0)
- close (fd);
- }
-
- if (elfmap != NULL && elfmap != MAP_FAILED)
- munmap (elfmap, elfmap_size);
- elfmap = NULL;
- }
- while (++remaining < argc);
-
- return result;
-}
-
-
-/* Print the version information. */
-static void
-print_version (FILE *stream, struct argp_state *state __attribute__ ((unused)))
-{
- fprintf (stream, "strings (%s) %s\n", PACKAGE_NAME, PACKAGE_VERSION);
- fprintf (stream, gettext ("\
-Copyright (C) %s Red Hat, Inc.\n\
-This is free software; see the source for copying conditions. There is NO\n\
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
-"), "2008");
- fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper");
-}
-
-
-/* Handle program arguments. */
-static error_t
-parse_opt (int key, char *arg,
- struct argp_state *state __attribute__ ((unused)))
-{
- switch (key)
- {
- case 'a':
- entire_file = true;
- break;
-
- case 'e':
- /* We expect a string of one character. */
- switch (arg[1] != '\0' ? '\0' : arg[0])
- {
- case 's':
- case 'S':
- char_7bit = arg[0] == 's';
- bytes_per_char = 1;
- break;
-
- case 'b':
- case 'B':
- big_endian = true;
- /* FALLTHROUGH */
-
- case 'l':
- case 'L':
- bytes_per_char = isupper (arg[0]) ? 4 : 2;
- break;
-
- default:
- error (0, 0, gettext ("invalid value '%s' for %s parameter"),
- arg, "-e");
- argp_help (&argp, stderr, ARGP_HELP_SEE, "strings");
- return ARGP_ERR_UNKNOWN;
- }
- break;
-
- case 'f':
- print_file_name = true;
- break;
-
- case 'n':
- min_len = atoi (arg);
- break;
-
- case 'o':
- goto octfmt;
-
- case 't':
- switch (arg[0])
- {
- case 'd':
- locfmt = "%7" PRId64 " ";
- break;
-
- case 'o':
- octfmt:
- locfmt = "%7" PRIo64 " ";
- break;
-
- case 'x':
- locfmt = "%7" PRIx64 " ";
- break;
-
- default:
- error (0, 0, gettext ("invalid value '%s' for %s parameter"),
- arg, "-t");
- argp_help (&argp, stderr, ARGP_HELP_SEE, "strings");
- return ARGP_ERR_UNKNOWN;
- }
- break;
-
- case ARGP_KEY_FINI:
- /* Compute the length in bytes of any match. */
- if (min_len <= 0 || min_len > INT_MAX / bytes_per_char)
- error (EXIT_FAILURE, 0,
- gettext ("invalid minimum length of matched string size"));
- min_len_bytes = min_len * bytes_per_char;
- break;
-
- default:
- return ARGP_ERR_UNKNOWN;
- }
- return 0;
-}
-
-
-static void
-process_chunk_mb (const char *fname, const unsigned char *buf, off64_t to,
- size_t len, char **unprinted)
-{
- size_t curlen = *unprinted == NULL ? 0 : strlen (*unprinted);
- const unsigned char *start = buf;
- while (len >= bytes_per_char)
- {
- uint32_t ch;
-
- if (bytes_per_char == 2)
- {
- if (big_endian)
- ch = buf[0] << 8 | buf[1];
- else
- ch = buf[1] << 8 | buf[0];
- }
- else
- {
- if (big_endian)
- ch = buf[0] << 24 | buf[1] << 16 | buf[2] << 8 | buf[3];
- else
- ch = buf[3] << 24 | buf[2] << 16 | buf[1] << 8 | buf[0];
- }
-
- if (ch <= 255 && (isprint (ch) || ch == '\t'))
- {
- ++buf;
- ++curlen;
- }
- else
- {
- if (curlen >= min_len)
- {
- /* We found a match. */
- if (unlikely (fname != NULL))
- {
- fputs_unlocked (fname, stdout);
- fputs_unlocked (": ", stdout);
- }
-
- if (unlikely (locfmt != NULL))
- printf (locfmt, (int64_t) to - len - (buf - start));
-
- if (unlikely (*unprinted != NULL))
- {
- fputs_unlocked (*unprinted, stdout);
- free (*unprinted);
- *unprinted = NULL;
- }
-
- /* There is no sane way of printing the string. If we
- assume the file data is encoded in UCS-2/UTF-16 or
- UCS-4/UTF-32 respectively we could covert the string.
- But there is no such guarantee. */
- fwrite_unlocked (start, 1, buf - start, stdout);
- putc_unlocked ('\n', stdout);
- }
-
- start = ++buf;
- curlen = 0;
-
- if (len <= min_len)
- break;
- }
-
- --len;
- }
-
- if (curlen != 0)
- *unprinted = xstrndup ((const char *) start, curlen);
-}
-
-
-static void
-process_chunk (const char *fname, const unsigned char *buf, off64_t to,
- size_t len, char **unprinted)
-{
- /* We are not going to slow the check down for the 2- and 4-byte
- encodings. Handle them special. */
- if (unlikely (bytes_per_char != 1))
- {
- process_chunk_mb (fname, buf, to, len, unprinted);
- return;
- }
-
- size_t curlen = *unprinted == NULL ? 0 : strlen (*unprinted);
- const unsigned char *start = buf;
- while (len > 0)
- {
- if ((isprint (*buf) || *buf == '\t') && (! char_7bit || *buf <= 127))
- {
- ++buf;
- ++curlen;
- }
- else
- {
- if (curlen >= min_len)
- {
- /* We found a match. */
- if (likely (fname != NULL))
- {
- fputs_unlocked (fname, stdout);
- fputs_unlocked (": ", stdout);
- }
-
- if (likely (locfmt != NULL))
- printf (locfmt, (int64_t) to - len - (buf - start));
-
- if (unlikely (*unprinted != NULL))
- {
- fputs_unlocked (*unprinted, stdout);
- free (*unprinted);
- *unprinted = NULL;
- }
- fwrite_unlocked (start, 1, buf - start, stdout);
- putc_unlocked ('\n', stdout);
- }
-
- start = ++buf;
- curlen = 0;
-
- if (len <= min_len)
- break;
- }
-
- --len;
- }
-
- if (curlen != 0)
- *unprinted = xstrndup ((const char *) start, curlen);
-}
-
-
-/* Map a file in as large chunks as possible. */
-static void *
-map_file (int fd, off64_t start_off, off64_t fdlen, size_t *map_sizep)
-{
-#if _MUDFLAP
- (void) fd;
- (void) start_off;
- (void) fdlen;
- (void) map_sizep;
- return MAP_FAILED;
-#else
- /* Maximum size we mmap. We use an #ifdef to avoid overflows on
- 32-bit machines. 64-bit machines these days do not have usable
- address spaces larger than about 43 bits. Not that any file
- should be that large. */
-# if SIZE_MAX > 0xffffffff
- const size_t mmap_max = 0x4000000000lu;
-# else
- const size_t mmap_max = 0x40000000lu;
-# endif
-
- /* Try to mmap the file. */
- size_t map_size = MIN ((off64_t) mmap_max, fdlen);
- const size_t map_size_min = MAX (MAX (SIZE_MAX / 16, 2 * ps),
- roundup (2 * min_len_bytes + 1, ps));
- void *mem;
- while (1)
- {
- /* We map the memory for reading only here. Since we will
- always look at every byte of the file it makes sense to
- use MAP_POPULATE. */
- mem = mmap64 (NULL, map_size, PROT_READ, MAP_PRIVATE | MAP_POPULATE,
- fd, start_off);
- if (mem != MAP_FAILED)
- {
- /* We will go through the mapping sequentially. */
- (void) posix_madvise (mem, map_size, POSIX_MADV_SEQUENTIAL);
- break;
- }
- if (errno != EINVAL && errno != ENOMEM)
- /* This is an error other than the lack of address space. */
- break;
-
- /* Maybe the size of the mapping is too big. Try again. */
- map_size /= 2;
- if (map_size < map_size_min)
- /* That size should have fit. */
- break;
- }
-
- *map_sizep = map_size;
- return mem;
-#endif
-}
-
-
-/* Read the file without mapping. */
-static int
-read_block_no_mmap (int fd, const char *fname, off64_t from, off64_t fdlen)
-{
- char *unprinted = NULL;
-#define CHUNKSIZE 65536
- unsigned char *buf = xmalloc (CHUNKSIZE + min_len_bytes
- + bytes_per_char - 1);
- size_t ntrailer = 0;
- int result = 0;
- while (fdlen > 0)
- {
- ssize_t n = TEMP_FAILURE_RETRY (read (fd, buf + ntrailer,
- MIN (fdlen, CHUNKSIZE)));
- if (n == 0)
- {
- /* There are less than MIN_LEN+1 bytes left so there cannot be
- another match. */
- assert (unprinted == NULL || ntrailer == 0);
- break;
- }
- if (unlikely (n < 0))
- {
- /* Something went wrong. */
- result = 1;
- break;
- }
-
- /* Account for the number of bytes read in this round. */
- fdlen -= n;
-
- /* Do not use the signed N value. Note that the addition cannot
- overflow. */
- size_t nb = (size_t) n + ntrailer;
- if (nb >= min_len_bytes)
- {
- /* We only use complete charactesr. */
- nb &= ~(bytes_per_char - 1);
-
- process_chunk (fname, buf, from + nb, nb, &unprinted);
-
- /* If the last bytes of the buffer (module the character
- size) have been printed we are not copying them. */
- size_t to_keep = unprinted != NULL ? 0 : min_len_bytes;
-
- memmove (buf, buf + nb - to_keep, to_keep + nb);
- ntrailer = to_keep + nb;
- from += nb;
- }
- else
- ntrailer = nb;
- }
-
- free (buf);
-
- /* Don't print anything we collected so far. There is no
- terminating NUL byte. */
- free (unprinted);
-
- return result;
-}
-
-
-static int
-read_block (int fd, const char *fname, off64_t fdlen, off64_t from, off64_t to)
-{
- assert ((off64_t) min_len_bytes < fdlen);
-
- if (elfmap == NULL)
- {
- /* We need a completely new mapping. */
- elfmap_off = from & ~(ps - 1);
- elfmap_base = elfmap = map_file (fd, elfmap_off, fdlen, &elfmap_size);
-
- if (unlikely (elfmap == MAP_FAILED))
- /* Let the kernel know we are going to read everything in sequence. */
- (void) posix_fadvise (fd, 0, 0, POSIX_FADV_SEQUENTIAL);
- }
-
- if (unlikely (elfmap == MAP_FAILED))
- {
- /* Read from the file descriptor. For this we must position the
- read pointer. */
- // XXX Eventually add flag which avoids this if the position
- // XXX is known to match.
- if (lseek64 (fd, from, SEEK_SET) != from)
- error (EXIT_FAILURE, errno, gettext ("lseek64 failed"));
-
- return read_block_no_mmap (fd, fname, from, to - from);
- }
-
- if (to < (off64_t) elfmap_off || from > (off64_t) (elfmap_off + elfmap_size))
- {
- /* The existing mapping cannot fit at all. Map the new area.
- We always map the full range of ELFMAP_SIZE bytes even if
- this extend beyond the end of the file. The Linux kernel
- handles this OK if the access pages are not touched. */
- elfmap_off = from & ~(ps - 1);
- if (mmap64 (elfmap, elfmap_size, PROT_READ,
- MAP_PRIVATE | MAP_POPULATE | MAP_FIXED, fd, from)
- == MAP_FAILED)
- error (EXIT_FAILURE, errno, gettext ("re-mmap failed"));
- elfmap_base = elfmap;
- }
-
- char *unprinted = NULL;
-
- /* Use the existing mapping as much as possible. If necessary, map
- new pages. */
- if (from >= (off64_t) elfmap_off
- && from < (off64_t) (elfmap_off + elfmap_size))
- /* There are at least a few bytes in this mapping which we can
- use. */
- process_chunk (fname, elfmap_base + (from - elfmap_off),
- MIN (to, (off64_t) (elfmap_off + elfmap_size)),
- MIN (to, (off64_t) (elfmap_off + elfmap_size)) - from,
- &unprinted);
-
- if (to > (off64_t) (elfmap_off + elfmap_size))
- {
- unsigned char *remap_base = elfmap_base;
- size_t read_now = elfmap_size - (elfmap_base - elfmap);
-
- assert (from >= (off64_t) elfmap_off
- && from < (off64_t) (elfmap_off + elfmap_size));
- off64_t handled_to = elfmap_off + elfmap_size;
- assert (elfmap == elfmap_base
- || (elfmap_base - elfmap
- == (ptrdiff_t) ((min_len_bytes + ps - 1) & ~(ps - 1))));
- if (elfmap == elfmap_base)
- {
- size_t keep_area = (min_len_bytes + ps - 1) & ~(ps - 1);
- assert (elfmap_size >= keep_area + ps);
- /* The keep area is used for the content of the previous
- buffer we have to keep. This means copying those bytes
- and for this we have to make the data writable. */
- if (unlikely (mprotect (elfmap, keep_area, PROT_READ | PROT_WRITE)
- != 0))
- error (EXIT_FAILURE, errno, gettext ("mprotect failed"));
-
- elfmap_base = elfmap + keep_area;
- }
-
- while (1)
- {
- /* Map the rest of the file, eventually again in pieces.
- We speed things up with a nice Linux feature. Note
- that we have at least two pages mapped. */
- size_t to_keep = unprinted != NULL ? 0 : min_len_bytes;
-
- assert (read_now >= to_keep);
- memmove (elfmap_base - to_keep,
- remap_base + read_now - to_keep, to_keep);
- remap_base = elfmap_base;
-
- assert ((elfmap_size - (elfmap_base - elfmap)) % bytes_per_char
- == 0);
- read_now = MIN (to - handled_to,
- (ptrdiff_t) elfmap_size - (elfmap_base - elfmap));
-
- assert (handled_to % ps == 0);
- assert (handled_to % bytes_per_char == 0);
- if (mmap64 (remap_base, read_now, PROT_READ,
- MAP_PRIVATE | MAP_POPULATE | MAP_FIXED, fd, handled_to)
- == MAP_FAILED)
- error (EXIT_FAILURE, errno, gettext ("re=mmap failed"));
- elfmap_off = handled_to;
-
- process_chunk (fname, remap_base - to_keep,
- elfmap_off + (read_now & ~(bytes_per_char - 1)),
- to_keep + (read_now & ~(bytes_per_char - 1)),
- &unprinted);
- handled_to += read_now;
- if (handled_to >= to)
- break;
- }
- }
-
- /* Don't print anything we collected so far. There is no
- terminating NUL byte. */
- free (unprinted);
-
- return 0;
-}
-
-
-static int
-read_fd (int fd, const char *fname, off64_t fdlen)
-{
- return read_block (fd, fname, fdlen, 0, fdlen);
-}
-
-
-static int
-read_elf (Elf *elf, int fd, const char *fname, off64_t fdlen)
-{
- assert (fdlen >= 0);
-
- /* We will look at each section separately. The ELF file is not
- mmapped. The libelf implementation will load the needed parts on
- demand. Since we only interate over the section header table the
- memory consumption at this stage is kept minimal. */
- Elf_Scn *scn = elf_nextscn (elf, NULL);
- if (scn == NULL)
- return read_fd (fd, fname, fdlen);
-
- int result = 0;
- do
- {
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
-
- /* Only look in sections which are loaded at runtime and
- actually have content. */
- if (shdr != NULL && shdr->sh_type != SHT_NOBITS
- && (shdr->sh_flags & SHF_ALLOC) != 0)
- result |= read_block (fd, fname, fdlen, shdr->sh_offset,
- shdr->sh_offset + shdr->sh_size);
- }
- while ((scn = elf_nextscn (elf, scn)) != NULL);
-
- if (elfmap != NULL && elfmap != MAP_FAILED)
- munmap (elfmap, elfmap_size);
- elfmap = NULL;
-
- return result;
-}
-
-
-#include "debugpred.h"
diff --git a/src/strip.c b/src/strip.c
deleted file mode 100644
index 0f83e61..0000000
--- a/src/strip.c
+++ /dev/null
@@ -1,1820 +0,0 @@
-/* Discard section not used at runtime from object files.
- Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007,2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <argp.h>
-#include <assert.h>
-#include <byteswap.h>
-#include <endian.h>
-#include <error.h>
-#include <fcntl.h>
-#include <gelf.h>
-#include <libelf.h>
-#include <libintl.h>
-#include <locale.h>
-#include <mcheck.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdio_ext.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/param.h>
-#include <sys/time.h>
-
-#include <elf-knowledge.h>
-#include <libebl.h>
-#include <system.h>
-
-
-/* Name and version of program. */
-static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
-
-/* Bug report address. */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
-
-
-/* Values for the parameters which have no short form. */
-#define OPT_REMOVE_COMMENT 0x100
-#define OPT_PERMISSIVE 0x101
-
-
-/* Definitions of arguments for argp functions. */
-static const struct argp_option options[] =
-{
- { NULL, 0, NULL, 0, N_("Output selection:"), 0 },
- { "output", 'o', "FILE", 0, N_("Place stripped output into FILE"), 0 },
- { NULL, 'f', "FILE", 0, N_("Extract the removed sections into FILE"), 0 },
- { NULL, 'F', "FILE", 0, N_("Embed name FILE instead of -f argument"), 0 },
-
- { NULL, 0, NULL, 0, N_("Output options:"), 0 },
- { "strip-all", 's', NULL, OPTION_HIDDEN, NULL, 0 },
- { "strip-debug", 'g', NULL, 0, N_("Remove all debugging symbols"), 0 },
- { NULL, 'd', NULL, OPTION_ALIAS, NULL, 0 },
- { NULL, 'S', NULL, OPTION_ALIAS, NULL, 0 },
- { "preserve-dates", 'p', NULL, 0,
- N_("Copy modified/access timestamps to the output"), 0 },
- { "remove-comment", OPT_REMOVE_COMMENT, NULL, 0,
- N_("Remove .comment section"), 0 },
- { "remove-section", 'R', "SECTION", OPTION_HIDDEN, NULL, 0 },
- { "permissive", OPT_PERMISSIVE, NULL, 0,
- N_("Relax a few rules to handle slightly broken ELF files"), 0 },
- { NULL, 0, NULL, 0, NULL, 0 }
-};
-
-/* Short description of program. */
-static const char doc[] = N_("Discard symbols from object files.");
-
-/* Strings for arguments in help texts. */
-static const char args_doc[] = N_("[FILE...]");
-
-/* Prototype for option handler. */
-static error_t parse_opt (int key, char *arg, struct argp_state *state);
-
-/* Data structure to communicate with argp functions. */
-static struct argp argp =
-{
- options, parse_opt, args_doc, doc, NULL, NULL, NULL
-};
-
-
-/* Print symbols in file named FNAME. */
-static int process_file (const char *fname);
-
-/* Handle one ELF file. */
-static int handle_elf (int fd, Elf *elf, const char *prefix,
- const char *fname, mode_t mode, struct timeval tvp[2]);
-
-/* Handle all files contained in the archive. */
-static int handle_ar (int fd, Elf *elf, const char *prefix, const char *fname,
- struct timeval tvp[2]);
-
-#define INTERNAL_ERROR(fname) \
- error (EXIT_FAILURE, 0, gettext ("%s: INTERNAL ERROR %d (%s-%s): %s"), \
- fname, __LINE__, PACKAGE_VERSION, __DATE__, elf_errmsg (-1))
-
-
-/* Name of the output file. */
-static const char *output_fname;
-
-/* Name of the debug output file. */
-static const char *debug_fname;
-
-/* Name to pretend the debug output file has. */
-static const char *debug_fname_embed;
-
-/* If true output files shall have same date as the input file. */
-static bool preserve_dates;
-
-/* If true .comment sections will be removed. */
-static bool remove_comment;
-
-/* If true remove all debug sections. */
-static bool remove_debug;
-
-/* If true relax some ELF rules for input files. */
-static bool permissive;
-
-
-int
-main (int argc, char *argv[])
-{
- int remaining;
- int result = 0;
-
- /* Make memory leak detection possible. */
- mtrace ();
-
- /* We use no threads here which can interfere with handling a stream. */
- __fsetlocking (stdin, FSETLOCKING_BYCALLER);
- __fsetlocking (stdout, FSETLOCKING_BYCALLER);
- __fsetlocking (stderr, FSETLOCKING_BYCALLER);
-
- /* Set locale. */
- setlocale (LC_ALL, "");
-
- /* Make sure the message catalog can be found. */
- bindtextdomain (PACKAGE_TARNAME, LOCALEDIR);
-
- /* Initialize the message catalog. */
- textdomain (PACKAGE_TARNAME);
-
- /* Parse and process arguments. */
- if (argp_parse (&argp, argc, argv, 0, &remaining, NULL) != 0)
- return EXIT_FAILURE;
-
- /* Tell the library which version we are expecting. */
- elf_version (EV_CURRENT);
-
- if (remaining == argc)
- /* The user didn't specify a name so we use a.out. */
- result = process_file ("a.out");
- else
- {
- /* If we have seen the '-o' or '-f' option there must be exactly one
- input file. */
- if ((output_fname != NULL || debug_fname != NULL)
- && remaining + 1 < argc)
- error (EXIT_FAILURE, 0, gettext ("\
-Only one input file allowed together with '-o' and '-f'"));
-
- /* Process all the remaining files. */
- do
- result |= process_file (argv[remaining]);
- while (++remaining < argc);
- }
-
- return result;
-}
-
-
-/* Print the version information. */
-static void
-print_version (FILE *stream, struct argp_state *state __attribute__ ((unused)))
-{
- fprintf (stream, "strip (%s) %s\n", PACKAGE_NAME, PACKAGE_VERSION);
- fprintf (stream, gettext ("\
-Copyright (C) %s Red Hat, Inc.\n\
-This is free software; see the source for copying conditions. There is NO\n\
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
-"), "2008");
- fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper");
-}
-
-
-/* Handle program arguments. */
-static error_t
-parse_opt (int key, char *arg, struct argp_state *state)
-{
- switch (key)
- {
- case 'f':
- if (debug_fname != NULL)
- {
- error (0, 0, gettext ("-f option specified twice"));
- return EINVAL;
- }
- debug_fname = arg;
- break;
-
- case 'F':
- if (debug_fname_embed != NULL)
- {
- error (0, 0, gettext ("-F option specified twice"));
- return EINVAL;
- }
- debug_fname_embed = arg;
- break;
-
- case 'o':
- if (output_fname != NULL)
- {
- error (0, 0, gettext ("-o option specified twice"));
- return EINVAL;
- }
- output_fname = arg;
- break;
-
- case 'p':
- preserve_dates = true;
- break;
-
- case OPT_REMOVE_COMMENT:
- remove_comment = true;
- break;
-
- case 'R':
- if (!strcmp (arg, ".comment"))
- remove_comment = true;
- else
- {
- argp_error (state,
- gettext ("-R option supports only .comment section"));
- return EINVAL;
- }
- break;
-
- case 'g':
- case 'd':
- case 'S':
- remove_debug = true;
- break;
-
- case OPT_PERMISSIVE:
- permissive = true;
- break;
-
- case 's': /* Ignored for compatibility. */
- break;
-
- default:
- return ARGP_ERR_UNKNOWN;
- }
- return 0;
-}
-
-
-static int
-process_file (const char *fname)
-{
- /* If we have to preserve the modify and access timestamps get them
- now. We cannot use fstat() after opening the file since the open
- would change the access time. */
- struct stat64 pre_st;
- struct timeval tv[2];
- again:
- if (preserve_dates)
- {
- if (stat64 (fname, &pre_st) != 0)
- {
- error (0, errno, gettext ("cannot stat input file '%s'"), fname);
- return 1;
- }
-
- /* If we have to preserve the timestamp, we need it in the
- format utimes() understands. */
- TIMESPEC_TO_TIMEVAL (&tv[0], &pre_st.st_atim);
- TIMESPEC_TO_TIMEVAL (&tv[1], &pre_st.st_mtim);
- }
-
- /* Open the file. */
- int fd = open (fname, output_fname == NULL ? O_RDWR : O_RDONLY);
- if (fd == -1)
- {
- error (0, errno, gettext ("while opening '%s'"), fname);
- return 1;
- }
-
- /* We always use fstat() even if we called stat() before. This is
- done to make sure the information returned by stat() is for the
- same file. */
- struct stat64 st;
- if (fstat64 (fd, &st) != 0)
- {
- error (0, errno, gettext ("cannot stat input file '%s'"), fname);
- return 1;
- }
- /* Paranoid mode on. */
- if (preserve_dates
- && (st.st_ino != pre_st.st_ino || st.st_dev != pre_st.st_dev))
- {
- /* We detected a race. Try again. */
- close (fd);
- goto again;
- }
-
- /* Now get the ELF descriptor. */
- Elf *elf = elf_begin (fd, output_fname == NULL ? ELF_C_RDWR : ELF_C_READ,
- NULL);
- int result;
- switch (elf_kind (elf))
- {
- case ELF_K_ELF:
- result = handle_elf (fd, elf, NULL, fname, st.st_mode & ACCESSPERMS,
- preserve_dates ? tv : NULL);
- break;
-
- case ELF_K_AR:
- /* It is not possible to strip the content of an archive direct
- the output to a specific file. */
- if (unlikely (output_fname != NULL || debug_fname != NULL))
- {
- error (0, 0, gettext ("%s: cannot use -o or -f when stripping archive"),
- fname);
- result = 1;
- }
- else
- result = handle_ar (fd, elf, NULL, fname, preserve_dates ? tv : NULL);
- break;
-
- default:
- error (0, 0, gettext ("%s: File format not recognized"), fname);
- result = 1;
- break;
- }
-
- if (unlikely (elf_end (elf) != 0))
- INTERNAL_ERROR (fname);
-
- close (fd);
-
- return result;
-}
-
-
-/* Maximum size of array allocated on stack. */
-#define MAX_STACK_ALLOC (400 * 1024)
-
-static int
-handle_elf (int fd, Elf *elf, const char *prefix, const char *fname,
- mode_t mode, struct timeval tvp[2])
-{
- size_t prefix_len = prefix == NULL ? 0 : strlen (prefix);
- size_t fname_len = strlen (fname) + 1;
- char *fullname = alloca (prefix_len + 1 + fname_len);
- char *cp = fullname;
- Elf *debugelf = NULL;
- char *tmp_debug_fname = NULL;
- int result = 0;
- size_t shdridx = 0;
- size_t shstrndx;
- struct shdr_info
- {
- Elf_Scn *scn;
- GElf_Shdr shdr;
- Elf_Data *data;
- Elf_Data *debug_data;
- const char *name;
- Elf32_Word idx; /* Index in new file. */
- Elf32_Word old_sh_link; /* Original value of shdr.sh_link. */
- Elf32_Word symtab_idx;
- Elf32_Word version_idx;
- Elf32_Word group_idx;
- Elf32_Word group_cnt;
- Elf_Scn *newscn;
- struct Ebl_Strent *se;
- Elf32_Word *newsymidx;
- } *shdr_info = NULL;
- Elf_Scn *scn;
- size_t cnt;
- size_t idx;
- bool changes;
- GElf_Ehdr newehdr_mem;
- GElf_Ehdr *newehdr;
- GElf_Ehdr debugehdr_mem;
- GElf_Ehdr *debugehdr;
- struct Ebl_Strtab *shst = NULL;
- Elf_Data debuglink_crc_data;
- bool any_symtab_changes = false;
- Elf_Data *shstrtab_data = NULL;
-
- /* Create the full name of the file. */
- if (prefix != NULL)
- {
- cp = mempcpy (cp, prefix, prefix_len);
- *cp++ = ':';
- }
- memcpy (cp, fname, fname_len);
-
- /* If we are not replacing the input file open a new file here. */
- if (output_fname != NULL)
- {
- fd = open (output_fname, O_RDWR | O_CREAT, mode);
- if (unlikely (fd == -1))
- {
- error (0, errno, gettext ("cannot open '%s'"), output_fname);
- return 1;
- }
- }
-
- int debug_fd = -1;
-
- /* Get the EBL handling. The -g option is currently the only reason
- we need EBL so dont open the backend unless necessary. */
- Ebl *ebl = NULL;
- if (remove_debug)
- {
- ebl = ebl_openbackend (elf);
- if (ebl == NULL)
- {
- error (0, errno, gettext ("cannot open EBL backend"));
- result = 1;
- goto fail;
- }
- }
-
- /* Open the additional file the debug information will be stored in. */
- if (debug_fname != NULL)
- {
- /* Create a temporary file name. We do not want to overwrite
- the debug file if the file would not contain any
- information. */
- size_t debug_fname_len = strlen (debug_fname);
- tmp_debug_fname = (char *) alloca (debug_fname_len + sizeof (".XXXXXX"));
- strcpy (mempcpy (tmp_debug_fname, debug_fname, debug_fname_len),
- ".XXXXXX");
-
- debug_fd = mkstemp (tmp_debug_fname);
- if (unlikely (debug_fd == -1))
- {
- error (0, errno, gettext ("cannot open '%s'"), debug_fname);
- result = 1;
- goto fail;
- }
- }
-
- /* Get the information from the old file. */
- GElf_Ehdr ehdr_mem;
- GElf_Ehdr *ehdr = gelf_getehdr (elf, &ehdr_mem);
- if (ehdr == NULL)
- INTERNAL_ERROR (fname);
-
- /* Get the section header string table index. */
- if (unlikely (elf_getshstrndx (elf, &shstrndx) < 0))
- error (EXIT_FAILURE, 0,
- gettext ("cannot get section header string table index"));
-
- /* We now create a new ELF descriptor for the same file. We
- construct it almost exactly in the same way with some information
- dropped. */
- Elf *newelf;
- if (output_fname != NULL)
- newelf = elf_begin (fd, ELF_C_WRITE_MMAP, NULL);
- else
- newelf = elf_clone (elf, ELF_C_EMPTY);
-
- if (unlikely (gelf_newehdr (newelf, gelf_getclass (elf)) == 0)
- || (ehdr->e_type != ET_REL
- && unlikely (gelf_newphdr (newelf, ehdr->e_phnum) == 0)))
- {
- error (0, 0, gettext ("cannot create new file '%s': %s"),
- output_fname, elf_errmsg (-1));
- goto fail;
- }
-
- /* Copy over the old program header if needed. */
- if (ehdr->e_type != ET_REL)
- for (cnt = 0; cnt < ehdr->e_phnum; ++cnt)
- {
- GElf_Phdr phdr_mem;
- GElf_Phdr *phdr = gelf_getphdr (elf, cnt, &phdr_mem);
- if (phdr == NULL
- || unlikely (gelf_update_phdr (newelf, cnt, phdr) == 0))
- INTERNAL_ERROR (fname);
- }
-
- if (debug_fname != NULL)
- {
- /* Also create an ELF descriptor for the debug file */
- debugelf = elf_begin (debug_fd, ELF_C_WRITE_MMAP, NULL);
- if (unlikely (gelf_newehdr (debugelf, gelf_getclass (elf)) == 0)
- || (ehdr->e_type != ET_REL
- && unlikely (gelf_newphdr (debugelf, ehdr->e_phnum) == 0)))
- {
- error (0, 0, gettext ("cannot create new file '%s': %s"),
- debug_fname, elf_errmsg (-1));
- goto fail_close;
- }
-
- /* Copy over the old program header if needed. */
- if (ehdr->e_type != ET_REL)
- for (cnt = 0; cnt < ehdr->e_phnum; ++cnt)
- {
- GElf_Phdr phdr_mem;
- GElf_Phdr *phdr = gelf_getphdr (elf, cnt, &phdr_mem);
- if (phdr == NULL
- || unlikely (gelf_update_phdr (debugelf, cnt, phdr) == 0))
- INTERNAL_ERROR (fname);
- }
- }
-
- /* Number of sections. */
- size_t shnum;
- if (unlikely (elf_getshnum (elf, &shnum) < 0))
- {
- error (0, 0, gettext ("cannot determine number of sections: %s"),
- elf_errmsg (-1));
- goto fail_close;
- }
-
- /* Storage for section information. We leave room for two more
- entries since we unconditionally create a section header string
- table. Maybe some weird tool created an ELF file without one.
- The other one is used for the debug link section. */
- if ((shnum + 2) * sizeof (struct shdr_info) > MAX_STACK_ALLOC)
- shdr_info = (struct shdr_info *) xcalloc (shnum + 2,
- sizeof (struct shdr_info));
- else
- {
- shdr_info = (struct shdr_info *) alloca ((shnum + 2)
- * sizeof (struct shdr_info));
- memset (shdr_info, '\0', (shnum + 2) * sizeof (struct shdr_info));
- }
-
- /* Prepare section information data structure. */
- scn = NULL;
- cnt = 1;
- while ((scn = elf_nextscn (elf, scn)) != NULL)
- {
- /* This should always be true (i.e., there should not be any
- holes in the numbering). */
- assert (elf_ndxscn (scn) == cnt);
-
- shdr_info[cnt].scn = scn;
-
- /* Get the header. */
- if (gelf_getshdr (scn, &shdr_info[cnt].shdr) == NULL)
- INTERNAL_ERROR (fname);
-
- /* Get the name of the section. */
- shdr_info[cnt].name = elf_strptr (elf, shstrndx,
- shdr_info[cnt].shdr.sh_name);
- if (shdr_info[cnt].name == NULL)
- {
- error (0, 0, gettext ("illformed file '%s'"), fname);
- goto fail_close;
- }
-
- /* Mark them as present but not yet investigated. */
- shdr_info[cnt].idx = 1;
-
- /* Remember the shdr.sh_link value. */
- shdr_info[cnt].old_sh_link = shdr_info[cnt].shdr.sh_link;
-
- /* Sections in files other than relocatable object files which
- are not loaded can be freely moved by us. In relocatable
- object files everything can be moved. */
- if (ehdr->e_type == ET_REL
- || (shdr_info[cnt].shdr.sh_flags & SHF_ALLOC) == 0)
- shdr_info[cnt].shdr.sh_offset = 0;
-
- /* If this is an extended section index table store an
- appropriate reference. */
- if (unlikely (shdr_info[cnt].shdr.sh_type == SHT_SYMTAB_SHNDX))
- {
- assert (shdr_info[shdr_info[cnt].shdr.sh_link].symtab_idx == 0);
- shdr_info[shdr_info[cnt].shdr.sh_link].symtab_idx = cnt;
- }
- else if (unlikely (shdr_info[cnt].shdr.sh_type == SHT_GROUP))
- {
- /* Cross-reference the sections contained in the section
- group. */
- shdr_info[cnt].data = elf_getdata (shdr_info[cnt].scn, NULL);
- if (shdr_info[cnt].data == NULL)
- INTERNAL_ERROR (fname);
-
- /* XXX Fix for unaligned access. */
- Elf32_Word *grpref = (Elf32_Word *) shdr_info[cnt].data->d_buf;
- size_t inner;
- for (inner = 1;
- inner < shdr_info[cnt].data->d_size / sizeof (Elf32_Word);
- ++inner)
- shdr_info[grpref[inner]].group_idx = cnt;
-
- if (inner == 1 || (inner == 2 && (grpref[0] & GRP_COMDAT) == 0))
- /* If the section group contains only one element and this
- is n COMDAT section we can drop it right away. */
- shdr_info[cnt].idx = 0;
- else
- shdr_info[cnt].group_cnt = inner - 1;
- }
- else if (unlikely (shdr_info[cnt].shdr.sh_type == SHT_GNU_versym))
- {
- assert (shdr_info[shdr_info[cnt].shdr.sh_link].version_idx == 0);
- shdr_info[shdr_info[cnt].shdr.sh_link].version_idx = cnt;
- }
-
- /* If this section is part of a group make sure it is not
- discarded right away. */
- if ((shdr_info[cnt].shdr.sh_flags & SHF_GROUP) != 0)
- {
- assert (shdr_info[cnt].group_idx != 0);
-
- if (shdr_info[shdr_info[cnt].group_idx].idx == 0)
- {
- /* The section group section will be removed. */
- shdr_info[cnt].group_idx = 0;
- shdr_info[cnt].shdr.sh_flags &= ~SHF_GROUP;
- }
- }
-
- /* Increment the counter. */
- ++cnt;
- }
-
- /* Now determine which sections can go away. The general rule is that
- all sections which are not used at runtime are stripped out. But
- there are a few exceptions:
-
- - special sections named ".comment" and ".note" are kept
- - OS or architecture specific sections are kept since we might not
- know how to handle them
- - if a section is referred to from a section which is not removed
- in the sh_link or sh_info element it cannot be removed either
- */
- for (cnt = 1; cnt < shnum; ++cnt)
- /* Check whether the section can be removed. */
- if (ebl_section_strip_p (ebl, ehdr, &shdr_info[cnt].shdr,
- shdr_info[cnt].name, remove_comment,
- remove_debug))
- {
- /* For now assume this section will be removed. */
- shdr_info[cnt].idx = 0;
-
- idx = shdr_info[cnt].group_idx;
- while (idx != 0)
- {
- /* The section group data is already loaded. */
- assert (shdr_info[idx].data != NULL);
-
- /* If the references section group is a normal section
- group and has one element remaining, or if it is an
- empty COMDAT section group it is removed. */
- bool is_comdat = (((Elf32_Word *) shdr_info[idx].data->d_buf)[0]
- & GRP_COMDAT) != 0;
-
- --shdr_info[idx].group_cnt;
- if ((!is_comdat && shdr_info[idx].group_cnt == 1)
- || (is_comdat && shdr_info[idx].group_cnt == 0))
- {
- shdr_info[idx].idx = 0;
- /* Continue recursively. */
- idx = shdr_info[idx].group_idx;
- }
- else
- break;
- }
- }
-
- /* Mark the SHT_NULL section as handled. */
- shdr_info[0].idx = 2;
-
-
- /* Handle exceptions: section groups and cross-references. We might
- have to repeat this a few times since the resetting of the flag
- might propagate. */
- do
- {
- changes = false;
-
- for (cnt = 1; cnt < shnum; ++cnt)
- {
- if (shdr_info[cnt].idx == 0)
- {
- /* If a relocation section is marked as being removed make
- sure the section it is relocating is removed, too. */
- if ((shdr_info[cnt].shdr.sh_type == SHT_REL
- || shdr_info[cnt].shdr.sh_type == SHT_RELA)
- && shdr_info[shdr_info[cnt].shdr.sh_info].idx != 0)
- shdr_info[cnt].idx = 1;
- }
-
- if (shdr_info[cnt].idx == 1)
- {
- /* The content of symbol tables we don't remove must not
- reference any section which we do remove. Otherwise
- we cannot remove the section. */
- if (debug_fname != NULL
- && shdr_info[cnt].debug_data == NULL
- && (shdr_info[cnt].shdr.sh_type == SHT_DYNSYM
- || shdr_info[cnt].shdr.sh_type == SHT_SYMTAB))
- {
- /* Make sure the data is loaded. */
- if (shdr_info[cnt].data == NULL)
- {
- shdr_info[cnt].data
- = elf_getdata (shdr_info[cnt].scn, NULL);
- if (shdr_info[cnt].data == NULL)
- INTERNAL_ERROR (fname);
- }
- Elf_Data *symdata = shdr_info[cnt].data;
-
- /* If there is an extended section index table load it
- as well. */
- if (shdr_info[cnt].symtab_idx != 0
- && shdr_info[shdr_info[cnt].symtab_idx].data == NULL)
- {
- assert (shdr_info[cnt].shdr.sh_type == SHT_SYMTAB);
-
- shdr_info[shdr_info[cnt].symtab_idx].data
- = elf_getdata (shdr_info[shdr_info[cnt].symtab_idx].scn,
- NULL);
- if (shdr_info[shdr_info[cnt].symtab_idx].data == NULL)
- INTERNAL_ERROR (fname);
- }
- Elf_Data *xndxdata
- = shdr_info[shdr_info[cnt].symtab_idx].data;
-
- /* Go through all symbols and make sure the section they
- reference is not removed. */
- size_t elsize = gelf_fsize (elf, ELF_T_SYM, 1,
- ehdr->e_version);
-
- for (size_t inner = 0;
- inner < shdr_info[cnt].data->d_size / elsize;
- ++inner)
- {
- GElf_Sym sym_mem;
- Elf32_Word xndx;
- GElf_Sym *sym = gelf_getsymshndx (symdata, xndxdata,
- inner, &sym_mem,
- &xndx);
- if (sym == NULL)
- INTERNAL_ERROR (fname);
-
- size_t scnidx = sym->st_shndx;
- if (scnidx == SHN_UNDEF || scnidx >= shnum
- || (scnidx >= SHN_LORESERVE
- && scnidx <= SHN_HIRESERVE
- && scnidx != SHN_XINDEX)
- /* Don't count in the section symbols. */
- || GELF_ST_TYPE (sym->st_info) == STT_SECTION)
- /* This is no section index, leave it alone. */
- continue;
- else if (scnidx == SHN_XINDEX)
- scnidx = xndx;
-
- if (shdr_info[scnidx].idx == 0)
- /* This symbol table has a real symbol in
- a discarded section. So preserve the
- original table in the debug file. */
- shdr_info[cnt].debug_data = symdata;
- }
- }
-
- /* Cross referencing happens:
- - for the cases the ELF specification says. That are
- + SHT_DYNAMIC in sh_link to string table
- + SHT_HASH in sh_link to symbol table
- + SHT_REL and SHT_RELA in sh_link to symbol table
- + SHT_SYMTAB and SHT_DYNSYM in sh_link to string table
- + SHT_GROUP in sh_link to symbol table
- + SHT_SYMTAB_SHNDX in sh_link to symbol table
- Other (OS or architecture-specific) sections might as
- well use this field so we process it unconditionally.
- - references inside section groups
- - specially marked references in sh_info if the SHF_INFO_LINK
- flag is set
- */
-
- if (shdr_info[shdr_info[cnt].shdr.sh_link].idx == 0)
- {
- shdr_info[shdr_info[cnt].shdr.sh_link].idx = 1;
- changes |= shdr_info[cnt].shdr.sh_link < cnt;
- }
-
- /* Handle references through sh_info. */
- if (SH_INFO_LINK_P (&shdr_info[cnt].shdr)
- && shdr_info[shdr_info[cnt].shdr.sh_info].idx == 0)
- {
- shdr_info[shdr_info[cnt].shdr.sh_info].idx = 1;
- changes |= shdr_info[cnt].shdr.sh_info < cnt;
- }
-
- /* Mark the section as investigated. */
- shdr_info[cnt].idx = 2;
- }
-
- if (debug_fname != NULL
- && (shdr_info[cnt].idx == 0 || shdr_info[cnt].debug_data != NULL))
- {
- /* This section is being preserved in the debug file.
- Sections it refers to must be preserved there too.
-
- In this pass we mark sections to be preserved in both
- files by setting the .debug_data pointer to the original
- file's .data pointer. Below, we'll copy the section
- contents. */
-
- inline void check_preserved (size_t i)
- {
- if (i != 0 && shdr_info[i].idx != 0)
- {
- if (shdr_info[i].data == NULL)
- shdr_info[i].data = elf_getdata (shdr_info[i].scn, NULL);
- if (shdr_info[i].data == NULL)
- INTERNAL_ERROR (fname);
-
- shdr_info[i].debug_data = shdr_info[i].data;
- changes |= i < cnt;
- }
- }
-
- check_preserved (shdr_info[cnt].shdr.sh_link);
- if (SH_INFO_LINK_P (&shdr_info[cnt].shdr))
- check_preserved (shdr_info[cnt].shdr.sh_info);
- }
- }
- }
- while (changes);
-
- /* Copy the removed sections to the debug output file.
- The ones that are not removed in the stripped file are SHT_NOBITS. */
- if (debug_fname != NULL)
- {
- for (cnt = 1; cnt < shnum; ++cnt)
- {
- scn = elf_newscn (debugelf);
- if (scn == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("while generating output file: %s"),
- elf_errmsg (-1));
-
- bool discard_section = (shdr_info[cnt].idx > 0
- && shdr_info[cnt].debug_data == NULL
- && shdr_info[cnt].shdr.sh_type != SHT_NOTE
- && cnt != ehdr->e_shstrndx);
-
- /* Set the section header in the new file. */
- GElf_Shdr debugshdr = shdr_info[cnt].shdr;
- if (discard_section)
- debugshdr.sh_type = SHT_NOBITS;
-
- if (unlikely (gelf_update_shdr (scn, &debugshdr) == 0))
- /* There cannot be any overflows. */
- INTERNAL_ERROR (fname);
-
- /* Get the data from the old file if necessary. */
- if (shdr_info[cnt].data == NULL)
- {
- shdr_info[cnt].data = elf_getdata (shdr_info[cnt].scn, NULL);
- if (shdr_info[cnt].data == NULL)
- INTERNAL_ERROR (fname);
- }
-
- /* Set the data. This is done by copying from the old file. */
- Elf_Data *debugdata = elf_newdata (scn);
- if (debugdata == NULL)
- INTERNAL_ERROR (fname);
-
- /* Copy the structure. This data may be modified in place
- before we write out the file. */
- *debugdata = *shdr_info[cnt].data;
- if (discard_section)
- debugdata->d_buf = NULL;
- else if (shdr_info[cnt].debug_data != NULL)
- {
- /* Copy the original data before it gets modified. */
- shdr_info[cnt].debug_data = debugdata;
- debugdata->d_buf = memcpy (xmalloc (debugdata->d_size),
- debugdata->d_buf, debugdata->d_size);
- }
- }
-
- /* Finish the ELF header. Fill in the fields not handled by
- libelf from the old file. */
- debugehdr = gelf_getehdr (debugelf, &debugehdr_mem);
- if (debugehdr == NULL)
- INTERNAL_ERROR (fname);
-
- memcpy (debugehdr->e_ident, ehdr->e_ident, EI_NIDENT);
- debugehdr->e_type = ehdr->e_type;
- debugehdr->e_machine = ehdr->e_machine;
- debugehdr->e_version = ehdr->e_version;
- debugehdr->e_entry = ehdr->e_entry;
- debugehdr->e_flags = ehdr->e_flags;
- debugehdr->e_shstrndx = ehdr->e_shstrndx;
-
- if (unlikely (gelf_update_ehdr (debugelf, debugehdr) == 0))
- {
- error (0, 0, gettext ("%s: error while creating ELF header: %s"),
- debug_fname, elf_errmsg (-1));
- result = 1;
- goto fail_close;
- }
- }
-
- /* Mark the section header string table as unused, we will create
- a new one. */
- shdr_info[shstrndx].idx = 0;
-
- /* We need a string table for the section headers. */
- shst = ebl_strtabinit (true);
- if (shst == NULL)
- error (EXIT_FAILURE, errno, gettext ("while preparing output for '%s'"),
- output_fname ?: fname);
-
- /* Assign new section numbers. */
- shdr_info[0].idx = 0;
- for (cnt = idx = 1; cnt < shnum; ++cnt)
- if (shdr_info[cnt].idx > 0)
- {
- shdr_info[cnt].idx = idx++;
-
- /* Create a new section. */
- shdr_info[cnt].newscn = elf_newscn (newelf);
- if (shdr_info[cnt].newscn == NULL)
- error (EXIT_FAILURE, 0, gettext ("while generating output file: %s"),
- elf_errmsg (-1));
-
- assert (elf_ndxscn (shdr_info[cnt].newscn) == shdr_info[cnt].idx);
-
- /* Add this name to the section header string table. */
- shdr_info[cnt].se = ebl_strtabadd (shst, shdr_info[cnt].name, 0);
- }
-
- /* Test whether we are doing anything at all. */
- if (cnt == idx)
- /* Nope, all removable sections are already gone. */
- goto fail_close;
-
- /* Create the reference to the file with the debug info. */
- if (debug_fname != NULL)
- {
- /* Add the section header string table section name. */
- shdr_info[cnt].se = ebl_strtabadd (shst, ".gnu_debuglink", 15);
- shdr_info[cnt].idx = idx++;
-
- /* Create the section header. */
- shdr_info[cnt].shdr.sh_type = SHT_PROGBITS;
- shdr_info[cnt].shdr.sh_flags = 0;
- shdr_info[cnt].shdr.sh_addr = 0;
- shdr_info[cnt].shdr.sh_link = SHN_UNDEF;
- shdr_info[cnt].shdr.sh_info = SHN_UNDEF;
- shdr_info[cnt].shdr.sh_entsize = 0;
- shdr_info[cnt].shdr.sh_addralign = 4;
- /* We set the offset to zero here. Before we write the ELF file the
- field must have the correct value. This is done in the final
- loop over all section. Then we have all the information needed. */
- shdr_info[cnt].shdr.sh_offset = 0;
-
- /* Create the section. */
- shdr_info[cnt].newscn = elf_newscn (newelf);
- if (shdr_info[cnt].newscn == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("while create section header section: %s"),
- elf_errmsg (-1));
- assert (elf_ndxscn (shdr_info[cnt].newscn) == shdr_info[cnt].idx);
-
- shdr_info[cnt].data = elf_newdata (shdr_info[cnt].newscn);
- if (shdr_info[cnt].data == NULL)
- error (EXIT_FAILURE, 0, gettext ("cannot allocate section data: %s"),
- elf_errmsg (-1));
-
- char *debug_basename = basename (debug_fname_embed ?: debug_fname);
- off_t crc_offset = strlen (debug_basename) + 1;
- /* Align to 4 byte boundary */
- crc_offset = ((crc_offset - 1) & ~3) + 4;
-
- shdr_info[cnt].data->d_align = 4;
- shdr_info[cnt].shdr.sh_size = shdr_info[cnt].data->d_size
- = crc_offset + 4;
- shdr_info[cnt].data->d_buf = xcalloc (1, shdr_info[cnt].data->d_size);
-
- strcpy (shdr_info[cnt].data->d_buf, debug_basename);
-
- /* Cache this Elf_Data describing the CRC32 word in the section.
- We'll fill this in when we have written the debug file. */
- debuglink_crc_data = *shdr_info[cnt].data;
- debuglink_crc_data.d_buf = ((char *) debuglink_crc_data.d_buf
- + crc_offset);
- debuglink_crc_data.d_size = 4;
-
- /* One more section done. */
- ++cnt;
- }
-
- /* Index of the section header table in the shdr_info array. */
- shdridx = cnt;
-
- /* Add the section header string table section name. */
- shdr_info[cnt].se = ebl_strtabadd (shst, ".shstrtab", 10);
- shdr_info[cnt].idx = idx;
-
- /* Create the section header. */
- shdr_info[cnt].shdr.sh_type = SHT_STRTAB;
- shdr_info[cnt].shdr.sh_flags = 0;
- shdr_info[cnt].shdr.sh_addr = 0;
- shdr_info[cnt].shdr.sh_link = SHN_UNDEF;
- shdr_info[cnt].shdr.sh_info = SHN_UNDEF;
- shdr_info[cnt].shdr.sh_entsize = 0;
- /* We set the offset to zero here. Before we write the ELF file the
- field must have the correct value. This is done in the final
- loop over all section. Then we have all the information needed. */
- shdr_info[cnt].shdr.sh_offset = 0;
- shdr_info[cnt].shdr.sh_addralign = 1;
-
- /* Create the section. */
- shdr_info[cnt].newscn = elf_newscn (newelf);
- if (shdr_info[cnt].newscn == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("while create section header section: %s"),
- elf_errmsg (-1));
- assert (elf_ndxscn (shdr_info[cnt].newscn) == idx);
-
- /* Finalize the string table and fill in the correct indices in the
- section headers. */
- shstrtab_data = elf_newdata (shdr_info[cnt].newscn);
- if (shstrtab_data == NULL)
- error (EXIT_FAILURE, 0,
- gettext ("while create section header string table: %s"),
- elf_errmsg (-1));
- ebl_strtabfinalize (shst, shstrtab_data);
-
- /* We have to set the section size. */
- shdr_info[cnt].shdr.sh_size = shstrtab_data->d_size;
-
- /* Update the section information. */
- GElf_Off lastoffset = 0;
- for (cnt = 1; cnt <= shdridx; ++cnt)
- if (shdr_info[cnt].idx > 0)
- {
- Elf_Data *newdata;
-
- scn = elf_getscn (newelf, shdr_info[cnt].idx);
- assert (scn != NULL);
-
- /* Update the name. */
- shdr_info[cnt].shdr.sh_name = ebl_strtaboffset (shdr_info[cnt].se);
-
- /* Update the section header from the input file. Some fields
- might be section indeces which now have to be adjusted. */
- if (shdr_info[cnt].shdr.sh_link != 0)
- shdr_info[cnt].shdr.sh_link =
- shdr_info[shdr_info[cnt].shdr.sh_link].idx;
-
- if (shdr_info[cnt].shdr.sh_type == SHT_GROUP)
- {
- assert (shdr_info[cnt].data != NULL);
-
- Elf32_Word *grpref = (Elf32_Word *) shdr_info[cnt].data->d_buf;
- for (size_t inner = 0;
- inner < shdr_info[cnt].data->d_size / sizeof (Elf32_Word);
- ++inner)
- grpref[inner] = shdr_info[grpref[inner]].idx;
- }
-
- /* Handle the SHT_REL, SHT_RELA, and SHF_INFO_LINK flag. */
- if (SH_INFO_LINK_P (&shdr_info[cnt].shdr))
- shdr_info[cnt].shdr.sh_info =
- shdr_info[shdr_info[cnt].shdr.sh_info].idx;
-
- /* Get the data from the old file if necessary. We already
- created the data for the section header string table. */
- if (cnt < shnum)
- {
- if (shdr_info[cnt].data == NULL)
- {
- shdr_info[cnt].data = elf_getdata (shdr_info[cnt].scn, NULL);
- if (shdr_info[cnt].data == NULL)
- INTERNAL_ERROR (fname);
- }
-
- /* Set the data. This is done by copying from the old file. */
- newdata = elf_newdata (scn);
- if (newdata == NULL)
- INTERNAL_ERROR (fname);
-
- /* Copy the structure. */
- *newdata = *shdr_info[cnt].data;
-
- /* We know the size. */
- shdr_info[cnt].shdr.sh_size = shdr_info[cnt].data->d_size;
-
- /* We have to adjust symbol tables. The st_shndx member might
- have to be updated. */
- if (shdr_info[cnt].shdr.sh_type == SHT_DYNSYM
- || shdr_info[cnt].shdr.sh_type == SHT_SYMTAB)
- {
- Elf_Data *versiondata = NULL;
- Elf_Data *shndxdata = NULL;
-
- size_t elsize = gelf_fsize (elf, ELF_T_SYM, 1,
- ehdr->e_version);
-
- if (shdr_info[cnt].symtab_idx != 0)
- {
- assert (shdr_info[cnt].shdr.sh_type == SHT_SYMTAB_SHNDX);
- /* This section has extended section information.
- We have to modify that information, too. */
- shndxdata = elf_getdata (shdr_info[shdr_info[cnt].symtab_idx].scn,
- NULL);
-
- assert ((versiondata->d_size / sizeof (Elf32_Word))
- >= shdr_info[cnt].data->d_size / elsize);
- }
-
- if (shdr_info[cnt].version_idx != 0)
- {
- assert (shdr_info[cnt].shdr.sh_type == SHT_DYNSYM);
- /* This section has associated version
- information. We have to modify that
- information, too. */
- versiondata = elf_getdata (shdr_info[shdr_info[cnt].version_idx].scn,
- NULL);
-
- assert ((versiondata->d_size / sizeof (GElf_Versym))
- >= shdr_info[cnt].data->d_size / elsize);
- }
-
- shdr_info[cnt].newsymidx
- = (Elf32_Word *) xcalloc (shdr_info[cnt].data->d_size
- / elsize, sizeof (Elf32_Word));
-
- bool last_was_local = true;
- size_t destidx;
- size_t inner;
- for (destidx = inner = 1;
- inner < shdr_info[cnt].data->d_size / elsize;
- ++inner)
- {
- Elf32_Word sec;
- GElf_Sym sym_mem;
- Elf32_Word xshndx;
- GElf_Sym *sym = gelf_getsymshndx (shdr_info[cnt].data,
- shndxdata, inner,
- &sym_mem, &xshndx);
- if (sym == NULL)
- INTERNAL_ERROR (fname);
-
- if (sym->st_shndx == SHN_UNDEF
- || (sym->st_shndx >= shnum
- && sym->st_shndx != SHN_XINDEX))
- {
- /* This is no section index, leave it alone
- unless it is moved. */
- if (destidx != inner
- && gelf_update_symshndx (shdr_info[cnt].data,
- shndxdata,
- destidx, sym,
- xshndx) == 0)
- INTERNAL_ERROR (fname);
-
- shdr_info[cnt].newsymidx[inner] = destidx++;
-
- if (last_was_local
- && GELF_ST_BIND (sym->st_info) != STB_LOCAL)
- {
- last_was_local = false;
- shdr_info[cnt].shdr.sh_info = destidx - 1;
- }
-
- continue;
- }
-
- /* Get the full section index, if necessary from the
- XINDEX table. */
- if (sym->st_shndx != SHN_XINDEX)
- sec = shdr_info[sym->st_shndx].idx;
- else
- {
- assert (shndxdata != NULL);
-
- sec = shdr_info[xshndx].idx;
- }
-
- if (sec != 0)
- {
- GElf_Section nshndx;
- Elf32_Word nxshndx;
-
- if (sec < SHN_LORESERVE)
- {
- nshndx = sec;
- nxshndx = 0;
- }
- else
- {
- nshndx = SHN_XINDEX;
- nxshndx = sec;
- }
-
- assert (sec < SHN_LORESERVE || shndxdata != NULL);
-
- if ((inner != destidx || nshndx != sym->st_shndx
- || (shndxdata != NULL && nxshndx != xshndx))
- && (sym->st_shndx = nshndx,
- gelf_update_symshndx (shdr_info[cnt].data,
- shndxdata,
- destidx, sym,
- nxshndx) == 0))
- INTERNAL_ERROR (fname);
-
- shdr_info[cnt].newsymidx[inner] = destidx++;
-
- if (last_was_local
- && GELF_ST_BIND (sym->st_info) != STB_LOCAL)
- {
- last_was_local = false;
- shdr_info[cnt].shdr.sh_info = destidx - 1;
- }
- }
- else if (debug_fname == NULL
- || shdr_info[cnt].debug_data == NULL)
- /* This is a section symbol for a section which has
- been removed. */
- assert (GELF_ST_TYPE (sym->st_info) == STT_SECTION);
- }
-
- if (destidx != inner)
- {
- /* The size of the symbol table changed. */
- shdr_info[cnt].shdr.sh_size = newdata->d_size
- = destidx * elsize;
- any_symtab_changes = true;
- }
- else
- {
- /* The symbol table didn't really change. */
- free (shdr_info[cnt].newsymidx);
- shdr_info[cnt].newsymidx = NULL;
- }
- }
- }
-
- /* If we have to, compute the offset of the section. */
- if (shdr_info[cnt].shdr.sh_offset == 0)
- shdr_info[cnt].shdr.sh_offset
- = ((lastoffset + shdr_info[cnt].shdr.sh_addralign - 1)
- & ~((GElf_Off) (shdr_info[cnt].shdr.sh_addralign - 1)));
-
- /* Set the section header in the new file. */
- if (unlikely (gelf_update_shdr (scn, &shdr_info[cnt].shdr) == 0))
- /* There cannot be any overflows. */
- INTERNAL_ERROR (fname);
-
- /* Remember the last section written so far. */
- GElf_Off filesz = (shdr_info[cnt].shdr.sh_type != SHT_NOBITS
- ? shdr_info[cnt].shdr.sh_size : 0);
- if (lastoffset < shdr_info[cnt].shdr.sh_offset + filesz)
- lastoffset = shdr_info[cnt].shdr.sh_offset + filesz;
- }
-
- /* Adjust symbol references if symbol tables changed. */
- if (any_symtab_changes)
- /* Find all relocation sections which use this symbol table. */
- for (cnt = 1; cnt <= shdridx; ++cnt)
- {
- /* Update section headers when the data size has changed.
- We also update the SHT_NOBITS section in the debug
- file so that the section headers match in sh_size. */
- inline void update_section_size (const Elf_Data *newdata)
- {
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
- shdr->sh_size = newdata->d_size;
- (void) gelf_update_shdr (scn, shdr);
- if (debugelf != NULL)
- {
- /* libelf will use d_size to set sh_size. */
- Elf_Data *debugdata = elf_getdata (elf_getscn (debugelf,
- cnt), NULL);
- debugdata->d_size = newdata->d_size;
- }
- }
-
- if (shdr_info[cnt].idx == 0 && debug_fname == NULL)
- /* Ignore sections which are discarded. When we are saving a
- relocation section in a separate debug file, we must fix up
- the symbol table references. */
- continue;
-
- const Elf32_Word symtabidx = shdr_info[cnt].old_sh_link;
- const Elf32_Word *const newsymidx = shdr_info[symtabidx].newsymidx;
- switch (shdr_info[cnt].shdr.sh_type)
- {
- inline bool no_symtab_updates (void)
- {
- /* If the symbol table hasn't changed, do not do anything. */
- if (shdr_info[symtabidx].newsymidx == NULL)
- return true;
-
- /* If the symbol table is not discarded, but additionally
- duplicated in the separate debug file and this section
- is discarded, don't adjust anything. */
- return (shdr_info[cnt].idx == 0
- && shdr_info[symtabidx].debug_data != NULL);
- }
-
- case SHT_REL:
- case SHT_RELA:
- if (no_symtab_updates ())
- break;
-
- Elf_Data *d = elf_getdata (shdr_info[cnt].idx == 0
- ? elf_getscn (debugelf, cnt)
- : elf_getscn (newelf,
- shdr_info[cnt].idx),
- NULL);
- assert (d != NULL);
- size_t nrels = (shdr_info[cnt].shdr.sh_size
- / shdr_info[cnt].shdr.sh_entsize);
-
- if (shdr_info[cnt].shdr.sh_type == SHT_REL)
- for (size_t relidx = 0; relidx < nrels; ++relidx)
- {
- GElf_Rel rel_mem;
- if (gelf_getrel (d, relidx, &rel_mem) == NULL)
- INTERNAL_ERROR (fname);
-
- size_t symidx = GELF_R_SYM (rel_mem.r_info);
- if (newsymidx[symidx] != symidx)
- {
- rel_mem.r_info
- = GELF_R_INFO (newsymidx[symidx],
- GELF_R_TYPE (rel_mem.r_info));
-
- if (gelf_update_rel (d, relidx, &rel_mem) == 0)
- INTERNAL_ERROR (fname);
- }
- }
- else
- for (size_t relidx = 0; relidx < nrels; ++relidx)
- {
- GElf_Rela rel_mem;
- if (gelf_getrela (d, relidx, &rel_mem) == NULL)
- INTERNAL_ERROR (fname);
-
- size_t symidx = GELF_R_SYM (rel_mem.r_info);
- if (newsymidx[symidx] != symidx)
- {
- rel_mem.r_info
- = GELF_R_INFO (newsymidx[symidx],
- GELF_R_TYPE (rel_mem.r_info));
-
- if (gelf_update_rela (d, relidx, &rel_mem) == 0)
- INTERNAL_ERROR (fname);
- }
- }
- break;
-
- case SHT_HASH:
- if (no_symtab_updates ())
- break;
-
- /* We have to recompute the hash table. */
-
- assert (shdr_info[cnt].idx > 0);
-
- /* The hash section in the new file. */
- scn = elf_getscn (newelf, shdr_info[cnt].idx);
-
- /* The symbol table data. */
- Elf_Data *symd = elf_getdata (elf_getscn (newelf,
- shdr_info[symtabidx].idx),
- NULL);
- assert (symd != NULL);
-
- /* The hash table data. */
- Elf_Data *hashd = elf_getdata (scn, NULL);
- assert (hashd != NULL);
-
- if (shdr_info[cnt].shdr.sh_entsize == sizeof (Elf32_Word))
- {
- /* Sane arches first. */
- Elf32_Word *bucket = (Elf32_Word *) hashd->d_buf;
-
- size_t strshndx = shdr_info[symtabidx].old_sh_link;
- size_t elsize = gelf_fsize (elf, ELF_T_SYM, 1,
- ehdr->e_version);
-
- /* Adjust the nchain value. The symbol table size
- changed. We keep the same size for the bucket array. */
- bucket[1] = symd->d_size / elsize;
- Elf32_Word nbucket = bucket[0];
- bucket += 2;
- Elf32_Word *chain = bucket + nbucket;
-
- /* New size of the section. */
- hashd->d_size = ((2 + symd->d_size / elsize + nbucket)
- * sizeof (Elf32_Word));
- update_section_size (hashd);
-
- /* Clear the arrays. */
- memset (bucket, '\0',
- (symd->d_size / elsize + nbucket)
- * sizeof (Elf32_Word));
-
- for (size_t inner = shdr_info[symtabidx].shdr.sh_info;
- inner < symd->d_size / elsize; ++inner)
- {
- GElf_Sym sym_mem;
- GElf_Sym *sym = gelf_getsym (symd, inner, &sym_mem);
- assert (sym != NULL);
-
- const char *name = elf_strptr (elf, strshndx,
- sym->st_name);
- assert (name != NULL);
- size_t hidx = elf_hash (name) % nbucket;
-
- if (bucket[hidx] == 0)
- bucket[hidx] = inner;
- else
- {
- hidx = bucket[hidx];
-
- while (chain[hidx] != 0)
- hidx = chain[hidx];
-
- chain[hidx] = inner;
- }
- }
- }
- else
- {
- /* Alpha and S390 64-bit use 64-bit SHT_HASH entries. */
- assert (shdr_info[cnt].shdr.sh_entsize
- == sizeof (Elf64_Xword));
-
- Elf64_Xword *bucket = (Elf64_Xword *) hashd->d_buf;
-
- size_t strshndx = shdr_info[symtabidx].old_sh_link;
- size_t elsize = gelf_fsize (elf, ELF_T_SYM, 1,
- ehdr->e_version);
-
- /* Adjust the nchain value. The symbol table size
- changed. We keep the same size for the bucket array. */
- bucket[1] = symd->d_size / elsize;
- Elf64_Xword nbucket = bucket[0];
- bucket += 2;
- Elf64_Xword *chain = bucket + nbucket;
-
- /* New size of the section. */
- hashd->d_size = ((2 + symd->d_size / elsize + nbucket)
- * sizeof (Elf64_Xword));
- update_section_size (hashd);
-
- /* Clear the arrays. */
- memset (bucket, '\0',
- (symd->d_size / elsize + nbucket)
- * sizeof (Elf64_Xword));
-
- for (size_t inner = shdr_info[symtabidx].shdr.sh_info;
- inner < symd->d_size / elsize; ++inner)
- {
- GElf_Sym sym_mem;
- GElf_Sym *sym = gelf_getsym (symd, inner, &sym_mem);
- assert (sym != NULL);
-
- const char *name = elf_strptr (elf, strshndx,
- sym->st_name);
- assert (name != NULL);
- size_t hidx = elf_hash (name) % nbucket;
-
- if (bucket[hidx] == 0)
- bucket[hidx] = inner;
- else
- {
- hidx = bucket[hidx];
-
- while (chain[hidx] != 0)
- hidx = chain[hidx];
-
- chain[hidx] = inner;
- }
- }
- }
- break;
-
- case SHT_GNU_versym:
- /* If the symbol table changed we have to adjust the entries. */
- if (no_symtab_updates ())
- break;
-
- assert (shdr_info[cnt].idx > 0);
-
- /* The symbol version section in the new file. */
- scn = elf_getscn (newelf, shdr_info[cnt].idx);
-
- /* The symbol table data. */
- symd = elf_getdata (elf_getscn (newelf, shdr_info[symtabidx].idx),
- NULL);
- assert (symd != NULL);
-
- /* The version symbol data. */
- Elf_Data *verd = elf_getdata (scn, NULL);
- assert (verd != NULL);
-
- /* The symbol version array. */
- GElf_Half *verstab = (GElf_Half *) verd->d_buf;
-
- /* Walk through the list and */
- size_t elsize = gelf_fsize (elf, verd->d_type, 1,
- ehdr->e_version);
- for (size_t inner = 1; inner < verd->d_size / elsize; ++inner)
- if (newsymidx[inner] != 0)
- /* Overwriting the same array works since the
- reordering can only move entries to lower indices
- in the array. */
- verstab[newsymidx[inner]] = verstab[inner];
-
- /* New size of the section. */
- verd->d_size = gelf_fsize (newelf, verd->d_type,
- symd->d_size
- / gelf_fsize (elf, symd->d_type, 1,
- ehdr->e_version),
- ehdr->e_version);
- update_section_size (verd);
- break;
-
- case SHT_GROUP:
- if (no_symtab_updates ())
- break;
-
- /* Yes, the symbol table changed.
- Update the section header of the section group. */
- scn = elf_getscn (newelf, shdr_info[cnt].idx);
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
- assert (shdr != NULL);
-
- shdr->sh_info = newsymidx[shdr->sh_info];
-
- (void) gelf_update_shdr (scn, shdr);
- break;
- }
- }
-
- /* Now that we have done all adjustments to the data,
- we can actually write out the debug file. */
- if (debug_fname != NULL)
- {
- uint32_t debug_crc;
- Elf_Data debug_crc_data =
- {
- .d_type = ELF_T_WORD,
- .d_buf = &debug_crc,
- .d_size = sizeof (debug_crc),
- .d_version = EV_CURRENT
- };
-
- /* Finally write the file. */
- if (unlikely (elf_update (debugelf, ELF_C_WRITE) == -1))
- {
- error (0, 0, gettext ("while writing '%s': %s"),
- debug_fname, elf_errmsg (-1));
- result = 1;
- goto fail_close;
- }
-
- /* Create the real output file. First rename, then change the
- mode. */
- if (rename (tmp_debug_fname, debug_fname) != 0
- || fchmod (debug_fd, mode) != 0)
- {
- error (0, errno, gettext ("while creating '%s'"), debug_fname);
- result = 1;
- goto fail_close;
- }
-
- /* The temporary file does not exist anymore. */
- tmp_debug_fname = NULL;
-
- /* Compute the checksum which we will add to the executable. */
- if (crc32_file (debug_fd, &debug_crc) != 0)
- {
- error (0, errno,
- gettext ("while computing checksum for debug information"));
- unlink (debug_fname);
- result = 1;
- goto fail_close;
- }
-
- /* Store it in the debuglink section data. */
- if (unlikely (gelf_xlatetof (newelf, &debuglink_crc_data,
- &debug_crc_data, ehdr->e_ident[EI_DATA])
- != &debuglink_crc_data))
- INTERNAL_ERROR (fname);
- }
-
- /* Finally finish the ELF header. Fill in the fields not handled by
- libelf from the old file. */
- newehdr = gelf_getehdr (newelf, &newehdr_mem);
- if (newehdr == NULL)
- INTERNAL_ERROR (fname);
-
- memcpy (newehdr->e_ident, ehdr->e_ident, EI_NIDENT);
- newehdr->e_type = ehdr->e_type;
- newehdr->e_machine = ehdr->e_machine;
- newehdr->e_version = ehdr->e_version;
- newehdr->e_entry = ehdr->e_entry;
- newehdr->e_flags = ehdr->e_flags;
- newehdr->e_phoff = ehdr->e_phoff;
- /* We need to position the section header table. */
- const size_t offsize = gelf_fsize (elf, ELF_T_OFF, 1, EV_CURRENT);
- newehdr->e_shoff = ((shdr_info[shdridx].shdr.sh_offset
- + shdr_info[shdridx].shdr.sh_size + offsize - 1)
- & ~((GElf_Off) (offsize - 1)));
- newehdr->e_shentsize = gelf_fsize (elf, ELF_T_SHDR, 1, EV_CURRENT);
-
- /* The new section header string table index. */
- if (likely (idx < SHN_HIRESERVE) && likely (idx != SHN_XINDEX))
- newehdr->e_shstrndx = idx;
- else
- {
- /* The index does not fit in the ELF header field. */
- shdr_info[0].scn = elf_getscn (elf, 0);
-
- if (gelf_getshdr (shdr_info[0].scn, &shdr_info[0].shdr) == NULL)
- INTERNAL_ERROR (fname);
-
- shdr_info[0].shdr.sh_link = idx;
- (void) gelf_update_shdr (shdr_info[0].scn, &shdr_info[0].shdr);
-
- newehdr->e_shstrndx = SHN_XINDEX;
- }
-
- if (gelf_update_ehdr (newelf, newehdr) == 0)
- {
- error (0, 0, gettext ("%s: error while creating ELF header: %s"),
- fname, elf_errmsg (-1));
- return 1;
- }
-
- /* We have everything from the old file. */
- if (elf_cntl (elf, ELF_C_FDDONE) != 0)
- {
- error (0, 0, gettext ("%s: error while reading the file: %s"),
- fname, elf_errmsg (-1));
- return 1;
- }
-
- /* The ELF library better follows our layout when this is not a
- relocatable object file. */
- elf_flagelf (newelf, ELF_C_SET,
- (ehdr->e_type != ET_REL ? ELF_F_LAYOUT : 0)
- | (permissive ? ELF_F_PERMISSIVE : 0));
-
- /* Finally write the file. */
- if (elf_update (newelf, ELF_C_WRITE) == -1)
- {
- error (0, 0, gettext ("while writing '%s': %s"),
- fname, elf_errmsg (-1));
- result = 1;
- }
-
- fail_close:
- if (shdr_info != NULL)
- {
- /* For some sections we might have created an table to map symbol
- table indices. */
- if (any_symtab_changes)
- for (cnt = 1; cnt <= shdridx; ++cnt)
- {
- free (shdr_info[cnt].newsymidx);
- if (shdr_info[cnt].debug_data != NULL)
- free (shdr_info[cnt].debug_data->d_buf);
- }
-
- /* Free the memory. */
- if ((shnum + 2) * sizeof (struct shdr_info) > MAX_STACK_ALLOC)
- free (shdr_info);
- }
-
- /* Free other resources. */
- if (shstrtab_data != NULL)
- free (shstrtab_data->d_buf);
- if (shst != NULL)
- ebl_strtabfree (shst);
-
- /* That was it. Close the descriptors. */
- if (elf_end (newelf) != 0)
- {
- error (0, 0, gettext ("error while finishing '%s': %s"), fname,
- elf_errmsg (-1));
- result = 1;
- }
-
- if (debugelf != NULL && elf_end (debugelf) != 0)
- {
- error (0, 0, gettext ("error while finishing '%s': %s"), debug_fname,
- elf_errmsg (-1));
- result = 1;
- }
-
- fail:
- /* Close the EBL backend. */
- if (ebl != NULL)
- ebl_closebackend (ebl);
-
- /* Close debug file descriptor, if opened */
- if (debug_fd >= 0)
- {
- if (tmp_debug_fname != NULL)
- unlink (tmp_debug_fname);
- close (debug_fd);
- }
-
- /* If requested, preserve the timestamp. */
- if (tvp != NULL)
- {
- if (futimes (fd, tvp) != 0)
- {
- error (0, errno, gettext ("\
-cannot set access and modification date of '%s'"),
- output_fname ?: fname);
- result = 1;
- }
- }
-
- /* Close the file descriptor if we created a new file. */
- if (output_fname != NULL)
- close (fd);
-
- return result;
-}
-
-
-static int
-handle_ar (int fd, Elf *elf, const char *prefix, const char *fname,
- struct timeval tvp[2])
-{
- size_t prefix_len = prefix == NULL ? 0 : strlen (prefix);
- size_t fname_len = strlen (fname) + 1;
- char new_prefix[prefix_len + 1 + fname_len];
- char *cp = new_prefix;
-
- /* Create the full name of the file. */
- if (prefix != NULL)
- {
- cp = mempcpy (cp, prefix, prefix_len);
- *cp++ = ':';
- }
- memcpy (cp, fname, fname_len);
-
-
- /* Process all the files contained in the archive. */
- Elf *subelf;
- Elf_Cmd cmd = ELF_C_RDWR;
- int result = 0;
- while ((subelf = elf_begin (fd, cmd, elf)) != NULL)
- {
- /* The the header for this element. */
- Elf_Arhdr *arhdr = elf_getarhdr (subelf);
-
- if (elf_kind (subelf) == ELF_K_ELF)
- result |= handle_elf (fd, subelf, new_prefix, arhdr->ar_name, 0, NULL);
- else if (elf_kind (subelf) == ELF_K_AR)
- result |= handle_ar (fd, subelf, new_prefix, arhdr->ar_name, NULL);
-
- /* Get next archive element. */
- cmd = elf_next (subelf);
- if (unlikely (elf_end (subelf) != 0))
- INTERNAL_ERROR (fname);
- }
-
- if (tvp != NULL)
- {
- if (unlikely (futimes (fd, tvp) != 0))
- {
- error (0, errno, gettext ("\
-cannot set access and modification date of '%s'"), fname);
- result = 1;
- }
- }
-
- if (unlikely (close (fd) != 0))
- error (EXIT_FAILURE, errno, gettext ("while closing '%s'"), fname);
-
- return result;
-}
-
-
-#include "debugpred.h"
diff --git a/src/symbolhash.c b/src/symbolhash.c
deleted file mode 100644
index 670cf05..0000000
--- a/src/symbolhash.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Symbol hash table implementation.
- Copyright (C) 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <string.h>
-
-#include <ld.h>
-
-/* Definitions for the symbol hash table. */
-#define TYPE struct symbol *
-#define NAME ld_symbol_tab
-#define ITERATE 1
-#define COMPARE(a, b) strcmp ((a)->name, (b)->name)
-
-#include "../lib/dynamicsizehash.c"
diff --git a/src/symbolhash.h b/src/symbolhash.h
deleted file mode 100644
index 54b9539..0000000
--- a/src/symbolhash.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Copyright (C) 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifndef SYMBOLHASH_H
-#define SYMBOLHASH_H 1
-
-/* Definitions for the symbol hash table. */
-#define TYPE struct symbol *
-#define NAME ld_symbol_tab
-#define ITERATE 1
-#define COMPARE(a, b) strcmp ((a)->name, (b)->name)
-#include <dynamicsizehash.h>
-
-#endif /* symbolhash.h */
diff --git a/src/unaligned.h b/src/unaligned.h
deleted file mode 100644
index ad7c55a..0000000
--- a/src/unaligned.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/* Unaligned memory access functionality.
- Copyright (C) 2000, 2001, 2002, 2003, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifndef _UNALIGNED_H
-#define _UNALIGNED_H 1
-
-#include <byteswap.h>
-#include <endian.h>
-
-
-#ifndef UNALIGNED_ACCESS_CLASS
-# error "UNALIGNED_ACCESS_CLASS must be defined"
-#endif
-
-
-/* Macros to convert from the host byte order to that of the object file. */
-#if UNALIGNED_ACCESS_CLASS == BYTE_ORDER
-# define target_bswap_16(n) (n)
-# define target_bswap_32(n) (n)
-# define target_bswap_64(n) (n)
-#else
-# define target_bswap_16(n) bswap_16 (n)
-# define target_bswap_32(n) bswap_32 (n)
-# define target_bswap_64(n) bswap_64 (n)
-#endif
-
-
-union u_2ubyte_unaligned
-{
- uint16_t u;
- char c[2];
-} __attribute__((packed));
-
-union u_4ubyte_unaligned
-{
- uint32_t u;
- char c[4];
-} __attribute__((packed));
-
-union u_8ubyte_unaligned
-{
- uint64_t u;
- char c[8];
-} __attribute__((packed));
-
-
-/* Macros to store value at unaligned address. */
-#define store_2ubyte_unaligned(ptr, value) \
- (void) (((union u_2ubyte_unaligned *) (ptr))->u = target_bswap_16 (value))
-#define store_4ubyte_unaligned(ptr, value) \
- (void) (((union u_4ubyte_unaligned *) (ptr))->u = target_bswap_32 (value))
-#define store_8ubyte_unaligned(ptr, value) \
- (void) (((union u_8ubyte_unaligned *) (ptr))->u = target_bswap_64 (value))
-
-
-/* Macros to add value to unaligned address. This is a bit more
- complicated since the value must be read from memory and eventually
- converted twice. */
-#if UNALIGNED_ACCESS_CLASS == BYTE_ORDER
-# define add_2ubyte_unaligned(ptr, value) \
- (void) (((union u_2ubyte_unaligned *) (ptr))->u += value)
-# define add_4ubyte_unaligned(ptr, value) \
- (void) (((union u_4ubyte_unaligned *) (ptr))->u += value)
-# define add_8ubyte_unaligned(ptr, value) \
- (void) (((union u_8ubyte_unaligned *) (ptr))->u += value)
-#else
-# define add_2ubyte_unaligned(ptr, value) \
- do { \
- union u_2ubyte_unaligned *_ptr = (void *) (ptr); \
- uint16_t _val = bswap_16 (_ptr->u) + (value); \
- _ptr->u = bswap_16 (_val); \
- } while (0)
-# define add_4ubyte_unaligned(ptr, value) \
- do { \
- union u_4ubyte_unaligned *_ptr = (void *) (ptr); \
- uint32_t _val = bswap_32 (_ptr->u) + (value); \
- _ptr->u = bswap_32 (_val); \
- } while (0)
-# define add_8ubyte_unaligned(ptr, value) \
- do { \
- union u_8ubyte_unaligned *_ptr = (void *) (ptr); \
- uint64_t _val = bswap_64 (_ptr->u) + (value); \
- _ptr->u = bswap_64 (_val); \
- } while (0)
-#endif
-
-#endif /* unaligned.h */
diff --git a/src/unstrip.c b/src/unstrip.c
deleted file mode 100644
index 676a0c7..0000000
--- a/src/unstrip.c
+++ /dev/null
@@ -1,2317 +0,0 @@
-/* Combine stripped files with separate symbols and debug information.
- Copyright (C) 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Roland McGrath <roland@redhat.com>, 2007.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-/* TODO:
-
- * SHX_XINDEX
-
- * prelink vs .debug_* linked addresses
-
- */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <argp.h>
-#include <assert.h>
-#include <errno.h>
-#include <error.h>
-#include <fcntl.h>
-#include <fnmatch.h>
-#include <libintl.h>
-#include <locale.h>
-#include <mcheck.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdio_ext.h>
-#include <inttypes.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <gelf.h>
-#include <libebl.h>
-#include <libdwfl.h>
-#include "system.h"
-
-#ifndef _
-# define _(str) gettext (str)
-#endif
-
-/* Name and version of program. */
-static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *)
- = print_version;
-
-/* Bug report address. */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
-
-/* Definitions of arguments for argp functions. */
-static const struct argp_option options[] =
-{
- /* Group 2 will follow group 1 from dwfl_standard_argp. */
- { "match-file-names", 'f', NULL, 0,
- N_("Match MODULE against file names, not module names"), 2 },
- { "ignore-missing", 'i', NULL, 0, N_("Silently skip unfindable files"), 0 },
-
- { NULL, 0, NULL, 0, N_("Output options:"), 0 },
- { "output", 'o', "FILE", 0, N_("Place output into FILE"), 0 },
- { "output-directory", 'd', "DIRECTORY",
- 0, N_("Create multiple output files under DIRECTORY"), 0 },
- { "module-names", 'm', NULL, 0, N_("Use module rather than file names"), 0 },
- { "all", 'a', NULL, 0,
- N_("Create output for modules that have no separate debug information"),
- 0 },
- { "relocate", 'R', NULL, 0,
- N_("Apply relocations to section contents in ET_REL files"), 0 },
- { "list-only", 'n', NULL, 0,
- N_("Only list module and file names, build IDs"), 0 },
- { NULL, 0, NULL, 0, NULL, 0 }
-};
-
-struct arg_info
-{
- const char *output_file;
- const char *output_dir;
- Dwfl *dwfl;
- char **args;
- bool list;
- bool all;
- bool ignore;
- bool modnames;
- bool match_files;
- bool relocate;
-};
-
-/* Handle program arguments. */
-static error_t
-parse_opt (int key, char *arg, struct argp_state *state)
-{
- struct arg_info *info = state->input;
-
- switch (key)
- {
- case ARGP_KEY_INIT:
- state->child_inputs[0] = &info->dwfl;
- break;
-
- case 'o':
- if (info->output_file != NULL)
- {
- argp_error (state, _("-o option specified twice"));
- return EINVAL;
- }
- info->output_file = arg;
- break;
-
- case 'd':
- if (info->output_dir != NULL)
- {
- argp_error (state, _("-d option specified twice"));
- return EINVAL;
- }
- info->output_dir = arg;
- break;
-
- case 'm':
- info->modnames = true;
- break;
- case 'f':
- info->match_files = true;
- break;
- case 'a':
- info->all = true;
- break;
- case 'i':
- info->ignore = true;
- break;
- case 'n':
- info->list = true;
- break;
- case 'R':
- info->relocate = true;
- break;
-
- case ARGP_KEY_ARGS:
- case ARGP_KEY_NO_ARGS:
- /* We "consume" all the arguments here. */
- info->args = &state->argv[state->next];
-
- if (info->output_file != NULL && info->output_dir != NULL)
- {
- argp_error (state, _("only one of -o or -d allowed"));
- return EINVAL;
- }
-
- if (info->list && (info->dwfl == NULL
- || info->output_dir != NULL
- || info->output_file != NULL))
- {
- argp_error (state,
- _("-n cannot be used with explicit files or -o or -d"));
- return EINVAL;
- }
-
- if (info->output_dir != NULL)
- {
- struct stat64 st;
- error_t fail = 0;
- if (stat64 (info->output_dir, &st) < 0)
- fail = errno;
- else if (!S_ISDIR (st.st_mode))
- fail = ENOTDIR;
- if (fail)
- {
- argp_failure (state, EXIT_FAILURE, fail,
- _("output directory '%s'"), info->output_dir);
- return fail;
- }
- }
-
- if (info->dwfl == NULL)
- {
- if (state->next + 2 != state->argc)
- {
- argp_error (state, _("exactly two file arguments are required"));
- return EINVAL;
- }
-
- if (info->ignore || info->all || info->modnames || info->relocate)
- {
- argp_error (state, _("\
--m, -a, -R, and -i options not allowed with explicit files"));
- return EINVAL;
- }
-
- /* Bail out immediately to prevent dwfl_standard_argp's parser
- from defaulting to "-e a.out". */
- return ENOSYS;
- }
- else if (info->output_file == NULL && info->output_dir == NULL
- && !info->list)
- {
- argp_error (state,
- _("-o or -d is required when using implicit files"));
- return EINVAL;
- }
- break;
-
- default:
- return ARGP_ERR_UNKNOWN;
- }
- return 0;
-}
-
-/* Print the version information. */
-static void
-print_version (FILE *stream, struct argp_state *state __attribute__ ((unused)))
-{
- fprintf (stream, "unstrip (%s) %s\n", PACKAGE_NAME, PACKAGE_VERSION);
- fprintf (stream, _("\
-Copyright (C) %s Red Hat, Inc.\n\
-This is free software; see the source for copying conditions. There is NO\n\
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
-"), "2008");
- fprintf (stream, gettext ("Written by %s.\n"), "Roland McGrath");
-}
-
-#define ELF_CHECK(call, msg) \
- do \
- { \
- if (!(call)) \
- error (EXIT_FAILURE, 0, msg, elf_errmsg (-1)); \
- } while (0)
-
-/* Copy INELF to newly-created OUTELF, exit via error for any problems. */
-static void
-copy_elf (Elf *outelf, Elf *inelf)
-{
- ELF_CHECK (gelf_newehdr (outelf, gelf_getclass (inelf)),
- _("cannot create ELF header: %s"));
-
- GElf_Ehdr ehdr_mem;
- GElf_Ehdr *ehdr = gelf_getehdr (inelf, &ehdr_mem);
- ELF_CHECK (gelf_update_ehdr (outelf, ehdr),
- _("cannot copy ELF header: %s"));
-
- if (ehdr->e_phnum > 0)
- {
- ELF_CHECK (gelf_newphdr (outelf, ehdr->e_phnum),
- _("cannot create program headers: %s"));
-
- GElf_Phdr phdr_mem;
- for (uint_fast16_t i = 0; i < ehdr->e_phnum; ++i)
- ELF_CHECK (gelf_update_phdr (outelf, i,
- gelf_getphdr (inelf, i, &phdr_mem)),
- _("cannot copy program header: %s"));
- }
-
- Elf_Scn *scn = NULL;
- while ((scn = elf_nextscn (inelf, scn)) != NULL)
- {
- Elf_Scn *newscn = elf_newscn (outelf);
-
- GElf_Shdr shdr_mem;
- ELF_CHECK (gelf_update_shdr (newscn, gelf_getshdr (scn, &shdr_mem)),
- _("cannot copy section header: %s"));
-
- Elf_Data *data = elf_getdata (scn, NULL);
- ELF_CHECK (data != NULL, _("cannot get section data: %s"));
- Elf_Data *newdata = elf_newdata (newscn);
- ELF_CHECK (newdata != NULL, _("cannot copy section data: %s"));
- *newdata = *data;
- elf_flagdata (newdata, ELF_C_SET, ELF_F_DIRTY);
- }
-}
-
-/* Create directories containing PATH. */
-static void
-make_directories (const char *path)
-{
- const char *lastslash = strrchr (path, '/');
- if (lastslash == NULL)
- return;
-
- while (lastslash > path && lastslash[-1] == '/')
- --lastslash;
- if (lastslash == path)
- return;
-
- char *dir = strndupa (path, lastslash - path);
- while (mkdir (dir, 0777) < 0 && errno != EEXIST)
- if (errno == ENOENT)
- make_directories (dir);
- else
- error (EXIT_FAILURE, errno, _("cannot create directory '%s'"), dir);
-}
-
-
-/* The binutils linker leaves gratuitous section symbols in .symtab
- that strip has to remove. Older linkers likewise include a
- symbol for every section, even unallocated ones, in .dynsym.
- Because of this, the related sections can shrink in the stripped
- file from their original size. Older versions of strip do not
- adjust the sh_size field in the debuginfo file's SHT_NOBITS
- version of the section header, so it can appear larger. */
-static bool
-section_can_shrink (const GElf_Shdr *shdr)
-{
- switch (shdr->sh_type)
- {
- case SHT_SYMTAB:
- case SHT_DYNSYM:
- case SHT_HASH:
- case SHT_GNU_versym:
- return true;
- }
- return false;
-}
-
-/* See if this symbol table has a leading section symbol for every single
- section, in order. The binutils linker produces this. While we're here,
- update each section symbol's st_value. */
-static size_t
-symtab_count_leading_section_symbols (Elf *elf, Elf_Scn *scn, size_t shnum,
- Elf_Data *newsymdata)
-{
- Elf_Data *data = elf_getdata (scn, NULL);
- Elf_Data *shndxdata = NULL; /* XXX */
-
- for (size_t i = 1; i < shnum; ++i)
- {
- GElf_Sym sym_mem;
- GElf_Word shndx = SHN_UNDEF;
- GElf_Sym *sym = gelf_getsymshndx (data, shndxdata, i, &sym_mem, &shndx);
- ELF_CHECK (sym != NULL, _("cannot get symbol table entry: %s"));
-
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (elf_getscn (elf, i), &shdr_mem);
- ELF_CHECK (shdr != NULL, _("cannot get section header: %s"));
-
- if (sym->st_shndx != SHN_XINDEX)
- shndx = sym->st_shndx;
-
- if (shndx != i || GELF_ST_TYPE (sym->st_info) != STT_SECTION)
- return i;
-
- sym->st_value = shdr->sh_addr;
- if (sym->st_shndx != SHN_XINDEX)
- shndx = SHN_UNDEF;
- ELF_CHECK (gelf_update_symshndx (newsymdata, shndxdata, i, sym, shndx),
- _("cannot update symbol table: %s"));
- }
-
- return shnum;
-}
-
-/* We expanded the output section, so update its header. */
-static void
-update_sh_size (Elf_Scn *outscn, const Elf_Data *data)
-{
- GElf_Shdr shdr_mem;
- GElf_Shdr *newshdr = gelf_getshdr (outscn, &shdr_mem);
- ELF_CHECK (newshdr != NULL, _("cannot get section header: %s"));
-
- newshdr->sh_size = data->d_size;
-
- ELF_CHECK (gelf_update_shdr (outscn, newshdr),
- _("cannot update section header: %s"));
-}
-
-/* Update relocation sections using the symbol table. */
-static void
-adjust_relocs (Elf_Scn *outscn, Elf_Scn *inscn, const GElf_Shdr *shdr,
- size_t map[], const GElf_Shdr *symshdr)
-{
- Elf_Data *data = elf_getdata (outscn, NULL);
-
- inline void adjust_reloc (GElf_Xword *info)
- {
- size_t ndx = GELF_R_SYM (*info);
- if (ndx != STN_UNDEF)
- *info = GELF_R_INFO (map[ndx - 1], GELF_R_TYPE (*info));
- }
-
- switch (shdr->sh_type)
- {
- case SHT_REL:
- for (size_t i = 0; i < shdr->sh_size / shdr->sh_entsize; ++i)
- {
- GElf_Rel rel_mem;
- GElf_Rel *rel = gelf_getrel (data, i, &rel_mem);
- adjust_reloc (&rel->r_info);
- ELF_CHECK (gelf_update_rel (data, i, rel),
- _("cannot update relocation: %s"));
- }
- break;
-
- case SHT_RELA:
- for (size_t i = 0; i < shdr->sh_size / shdr->sh_entsize; ++i)
- {
- GElf_Rela rela_mem;
- GElf_Rela *rela = gelf_getrela (data, i, &rela_mem);
- adjust_reloc (&rela->r_info);
- ELF_CHECK (gelf_update_rela (data, i, rela),
- _("cannot update relocation: %s"));
- }
- break;
-
- case SHT_GROUP:
- {
- GElf_Shdr shdr_mem;
- GElf_Shdr *newshdr = gelf_getshdr (outscn, &shdr_mem);
- ELF_CHECK (newshdr != NULL, _("cannot get section header: %s"));
- if (newshdr->sh_info != STN_UNDEF)
- {
- newshdr->sh_info = map[newshdr->sh_info - 1];
- ELF_CHECK (gelf_update_shdr (outscn, newshdr),
- _("cannot update section header: %s"));
- }
- break;
- }
-
- case SHT_HASH:
- /* We must expand the table and rejigger its contents. */
- {
- const size_t nsym = symshdr->sh_size / symshdr->sh_entsize;
- const size_t onent = shdr->sh_size / shdr->sh_entsize;
- assert (data->d_size == shdr->sh_size);
-
-#define CONVERT_HASH(Hash_Word) \
- { \
- const Hash_Word *const old_hash = data->d_buf; \
- const size_t nbucket = old_hash[0]; \
- const size_t nchain = old_hash[1]; \
- const Hash_Word *const old_bucket = &old_hash[2]; \
- const Hash_Word *const old_chain = &old_bucket[nbucket]; \
- assert (onent == 2 + nbucket + nchain); \
- \
- const size_t nent = 2 + nbucket + nsym; \
- Hash_Word *const new_hash = xcalloc (nent, sizeof new_hash[0]); \
- Hash_Word *const new_bucket = &new_hash[2]; \
- Hash_Word *const new_chain = &new_bucket[nbucket]; \
- \
- new_hash[0] = nbucket; \
- new_hash[1] = nsym; \
- for (size_t i = 0; i < nbucket; ++i) \
- if (old_bucket[i] != STN_UNDEF) \
- new_bucket[i] = map[old_bucket[i] - 1]; \
- \
- for (size_t i = 1; i < nchain; ++i) \
- if (old_chain[i] != STN_UNDEF) \
- new_chain[map[i - 1]] = map[old_chain[i] - 1]; \
- \
- data->d_buf = new_hash; \
- data->d_size = nent * sizeof new_hash[0]; \
- }
-
- switch (shdr->sh_entsize)
- {
- case 4:
- CONVERT_HASH (Elf32_Word);
- break;
- case 8:
- CONVERT_HASH (Elf64_Xword);
- break;
- default:
- abort ();
- }
-
- elf_flagdata (data, ELF_C_SET, ELF_F_DIRTY);
- update_sh_size (outscn, data);
-
-#undef CONVERT_HASH
- }
- break;
-
- case SHT_GNU_versym:
- /* We must expand the table and move its elements around. */
- {
- const size_t nent = symshdr->sh_size / symshdr->sh_entsize;
- const size_t onent = shdr->sh_size / shdr->sh_entsize;
- assert (nent >= onent);
-
- /* We don't bother using gelf_update_versym because there is
- really no conversion to be done. */
- assert (sizeof (Elf32_Versym) == sizeof (GElf_Versym));
- assert (sizeof (Elf64_Versym) == sizeof (GElf_Versym));
- GElf_Versym *versym = xcalloc (nent, sizeof versym[0]);
-
- for (size_t i = 1; i < onent; ++i)
- {
- GElf_Versym *v = gelf_getversym (data, i, &versym[map[i - 1]]);
- ELF_CHECK (v != NULL, _("cannot get symbol version: %s"));
- }
-
- data->d_buf = versym;
- data->d_size = nent * shdr->sh_entsize;
- elf_flagdata (data, ELF_C_SET, ELF_F_DIRTY);
- update_sh_size (outscn, data);
- }
- break;
-
- default:
- error (EXIT_FAILURE, 0,
- _("unexpected section type in [%Zu] with sh_link to symtab"),
- elf_ndxscn (inscn));
- }
-}
-
-/* Adjust all the relocation sections in the file. */
-static void
-adjust_all_relocs (Elf *elf, Elf_Scn *symtab, const GElf_Shdr *symshdr,
- size_t map[])
-{
- size_t new_sh_link = elf_ndxscn (symtab);
- Elf_Scn *scn = NULL;
- while ((scn = elf_nextscn (elf, scn)) != NULL)
- if (scn != symtab)
- {
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
- ELF_CHECK (shdr != NULL, _("cannot get section header: %s"));
- if (shdr->sh_type != SHT_NOBITS && shdr->sh_link == new_sh_link)
- adjust_relocs (scn, scn, shdr, map, symshdr);
- }
-}
-
-/* The original file probably had section symbols for all of its
- sections, even the unallocated ones. To match it as closely as
- possible, add in section symbols for the added sections. */
-static Elf_Data *
-add_new_section_symbols (Elf_Scn *old_symscn, size_t old_shnum,
- Elf *elf, bool rel, Elf_Scn *symscn, size_t shnum)
-{
- const size_t added = shnum - old_shnum;
-
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (symscn, &shdr_mem);
- ELF_CHECK (shdr != NULL, _("cannot get section header: %s"));
-
- const size_t nsym = shdr->sh_size / shdr->sh_entsize;
- size_t symndx_map[nsym - 1];
-
- shdr->sh_info += added;
- shdr->sh_size += added * shdr->sh_entsize;
-
- ELF_CHECK (gelf_update_shdr (symscn, shdr),
- _("cannot update section header: %s"));
-
- Elf_Data *symdata = elf_getdata (symscn, NULL);
- Elf_Data *shndxdata = NULL; /* XXX */
-
- symdata->d_size = shdr->sh_size;
- symdata->d_buf = xmalloc (symdata->d_size);
-
- /* Copy the existing section symbols. */
- Elf_Data *old_symdata = elf_getdata (old_symscn, NULL);
- for (size_t i = 0; i < old_shnum; ++i)
- {
- GElf_Sym sym_mem;
- GElf_Word shndx = SHN_UNDEF;
- GElf_Sym *sym = gelf_getsymshndx (old_symdata, shndxdata,
- i, &sym_mem, &shndx);
- ELF_CHECK (gelf_update_symshndx (symdata, shndxdata, i,
- sym, shndx),
- _("cannot update symbol table: %s"));
-
- if (i > 0)
- symndx_map[i - 1] = i;
- }
-
- /* Add in the new section symbols. */
- for (size_t i = old_shnum; i < shnum; ++i)
- {
- GElf_Shdr i_shdr_mem;
- GElf_Shdr *i_shdr = gelf_getshdr (elf_getscn (elf, i), &i_shdr_mem);
- ELF_CHECK (i_shdr != NULL, _("cannot get section header: %s"));
- GElf_Sym sym =
- {
- .st_value = rel ? 0 : i_shdr->sh_addr,
- .st_info = GELF_ST_INFO (STB_LOCAL, STT_SECTION),
- .st_shndx = i < SHN_LORESERVE ? i : SHN_XINDEX
- };
- GElf_Word shndx = i < SHN_LORESERVE ? SHN_UNDEF : i;
- ELF_CHECK (gelf_update_symshndx (symdata, shndxdata, i,
- &sym, shndx),
- _("cannot update symbol table: %s"));
- }
-
- /* Now copy the rest of the existing symbols. */
- for (size_t i = old_shnum; i < nsym; ++i)
- {
- GElf_Sym sym_mem;
- GElf_Word shndx = SHN_UNDEF;
- GElf_Sym *sym = gelf_getsymshndx (old_symdata, shndxdata,
- i, &sym_mem, &shndx);
- ELF_CHECK (gelf_update_symshndx (symdata, shndxdata,
- i + added, sym, shndx),
- _("cannot update symbol table: %s"));
-
- symndx_map[i - 1] = i + added;
- }
-
- /* Adjust any relocations referring to the old symbol table. */
- adjust_all_relocs (elf, symscn, shdr, symndx_map);
-
- return symdata;
-}
-
-/* This has the side effect of updating STT_SECTION symbols' values,
- in case of prelink adjustments. */
-static Elf_Data *
-check_symtab_section_symbols (Elf *elf, bool rel, Elf_Scn *scn,
- size_t shnum, size_t shstrndx,
- Elf_Scn *oscn, size_t oshnum, size_t oshstrndx,
- size_t debuglink)
-{
- size_t n = symtab_count_leading_section_symbols (elf, oscn, oshnum,
- elf_getdata (scn, NULL));
-
- if (n == oshnum)
- return add_new_section_symbols (oscn, n, elf, rel, scn, shnum);
-
- if (n == oshstrndx || (n == debuglink && n == oshstrndx - 1))
- return add_new_section_symbols (oscn, n, elf, rel, scn, shstrndx);
-
- return NULL;
-}
-
-struct section
-{
- Elf_Scn *scn;
- const char *name;
- Elf_Scn *outscn;
- struct Ebl_Strent *strent;
- GElf_Shdr shdr;
-};
-
-static int
-compare_alloc_sections (const struct section *s1, const struct section *s2,
- bool rel)
-{
- if (!rel)
- {
- /* Sort by address. */
- if (s1->shdr.sh_addr < s2->shdr.sh_addr)
- return -1;
- if (s1->shdr.sh_addr > s2->shdr.sh_addr)
- return 1;
- }
-
- /* At the same address, preserve original section order. */
- return (ssize_t) elf_ndxscn (s1->scn) - (ssize_t) elf_ndxscn (s2->scn);
-}
-
-static int
-compare_unalloc_sections (const GElf_Shdr *shdr1, const GElf_Shdr *shdr2,
- const char *name1, const char *name2)
-{
- /* Sort by sh_flags as an arbitrary ordering. */
- if (shdr1->sh_flags < shdr2->sh_flags)
- return -1;
- if (shdr1->sh_flags > shdr2->sh_flags)
- return 1;
-
- /* Sort by name as last resort. */
- return strcmp (name1, name2);
-}
-
-static int
-compare_sections (const void *a, const void *b, bool rel)
-{
- const struct section *s1 = a;
- const struct section *s2 = b;
-
- /* Sort all non-allocated sections last. */
- if ((s1->shdr.sh_flags ^ s2->shdr.sh_flags) & SHF_ALLOC)
- return (s1->shdr.sh_flags & SHF_ALLOC) ? -1 : 1;
-
- return ((s1->shdr.sh_flags & SHF_ALLOC)
- ? compare_alloc_sections (s1, s2, rel)
- : compare_unalloc_sections (&s1->shdr, &s2->shdr,
- s1->name, s2->name));
-}
-
-static int
-compare_sections_rel (const void *a, const void *b)
-{
- return compare_sections (a, b, true);
-}
-
-int
-compare_sections_nonrel (const void *a, const void *b)
-{
- return compare_sections (a, b, false);
-}
-
-
-struct symbol
-{
- size_t *map;
-
- union
- {
- const char *name;
- struct Ebl_Strent *strent;
- };
- union
- {
- struct
- {
- GElf_Addr value;
- GElf_Xword size;
- GElf_Word shndx;
- union
- {
- struct
- {
- uint8_t info;
- uint8_t other;
- } info;
- int16_t compare;
- };
- };
-
- /* For a symbol discarded after first sort, this matches its better's
- map pointer. */
- size_t *duplicate;
- };
-};
-
-/* Collect input symbols into our internal form. */
-static void
-collect_symbols (Elf *outelf, bool rel, Elf_Scn *symscn, Elf_Scn *strscn,
- const size_t nent, const GElf_Addr bias,
- const size_t scnmap[], struct symbol *table, size_t *map,
- struct section *split_bss)
-{
- Elf_Data *symdata = elf_getdata (symscn, NULL);
- Elf_Data *strdata = elf_getdata (strscn, NULL);
- Elf_Data *shndxdata = NULL; /* XXX */
-
- for (size_t i = 1; i < nent; ++i)
- {
- GElf_Sym sym_mem;
- GElf_Word shndx = SHN_UNDEF;
- GElf_Sym *sym = gelf_getsymshndx (symdata, shndxdata, i,
- &sym_mem, &shndx);
- ELF_CHECK (sym != NULL, _("cannot get symbol table entry: %s"));
- if (sym->st_shndx != SHN_XINDEX)
- shndx = sym->st_shndx;
-
- if (sym->st_name >= strdata->d_size)
- error (EXIT_FAILURE, 0,
- _("invalid string offset in symbol [%Zu]"), i);
-
- struct symbol *s = &table[i - 1];
- s->map = &map[i - 1];
- s->name = strdata->d_buf + sym->st_name;
- s->value = sym->st_value + bias;
- s->size = sym->st_size;
- s->shndx = shndx;
- s->info.info = sym->st_info;
- s->info.other = sym->st_other;
-
- if (scnmap != NULL && shndx != SHN_UNDEF && shndx < SHN_LORESERVE)
- s->shndx = scnmap[shndx - 1];
-
- if (GELF_ST_TYPE (s->info.info) == STT_SECTION && !rel)
- {
- /* Update the value to match the output section. */
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (elf_getscn (outelf, s->shndx),
- &shdr_mem);
- ELF_CHECK (shdr != NULL, _("cannot get section header: %s"));
- s->value = shdr->sh_addr;
- }
- else if (split_bss != NULL
- && s->value < split_bss->shdr.sh_addr
- && s->value >= split_bss[-1].shdr.sh_addr
- && shndx == elf_ndxscn (split_bss->outscn))
- /* This symbol was in .bss and was split into .dynbss. */
- s->shndx = elf_ndxscn (split_bss[-1].outscn);
- }
-}
-
-
-#define CMP(value) \
- if (s1->value < s2->value) \
- return -1; \
- if (s1->value > s2->value) \
- return 1
-
-/* Compare symbols with a consistent ordering,
- but one only meaningful for equality. */
-static int
-compare_symbols (const void *a, const void *b)
-{
- const struct symbol *s1 = a;
- const struct symbol *s2 = b;
-
- CMP (value);
- CMP (size);
- CMP (shndx);
-
- return (s1->compare - s2->compare) ?: strcmp (s1->name, s2->name);
-}
-
-/* Compare symbols for output order after slots have been assigned. */
-static int
-compare_symbols_output (const void *a, const void *b)
-{
- const struct symbol *s1 = a;
- const struct symbol *s2 = b;
- int cmp;
-
- /* Sort discarded symbols last. */
- cmp = (s1->name == NULL) - (s2->name == NULL);
-
- if (cmp == 0)
- /* Local symbols must come first. */
- cmp = ((GELF_ST_BIND (s2->info.info) == STB_LOCAL)
- - (GELF_ST_BIND (s1->info.info) == STB_LOCAL));
-
- if (cmp == 0)
- /* binutils always puts section symbols first. */
- cmp = ((GELF_ST_TYPE (s2->info.info) == STT_SECTION)
- - (GELF_ST_TYPE (s1->info.info) == STT_SECTION));
-
- if (cmp == 0)
- {
- if (GELF_ST_TYPE (s1->info.info) == STT_SECTION)
- {
- /* binutils always puts section symbols in section index order. */
- CMP (shndx);
- else
- assert (s1 == s2);
- }
-
- /* Nothing really matters, so preserve the original order. */
- CMP (map);
- else
- assert (s1 == s2);
- }
-
- return cmp;
-}
-
-#undef CMP
-
-/* Return true iff the flags, size, and name match. */
-static bool
-sections_match (const struct section *sections, size_t i,
- const GElf_Shdr *shdr, const char *name)
-{
- return (sections[i].shdr.sh_flags == shdr->sh_flags
- && (sections[i].shdr.sh_size == shdr->sh_size
- || (sections[i].shdr.sh_size < shdr->sh_size
- && section_can_shrink (§ions[i].shdr)))
- && !strcmp (sections[i].name, name));
-}
-
-/* Locate a matching allocated section in SECTIONS. */
-static struct section *
-find_alloc_section (const GElf_Shdr *shdr, GElf_Addr bias, const char *name,
- struct section sections[], size_t nalloc)
-{
- const GElf_Addr addr = shdr->sh_addr + bias;
- size_t l = 0, u = nalloc;
- while (l < u)
- {
- size_t i = (l + u) / 2;
- if (addr < sections[i].shdr.sh_addr)
- u = i;
- else if (addr > sections[i].shdr.sh_addr)
- l = i + 1;
- else
- {
- /* We've found allocated sections with this address.
- Find one with matching size, flags, and name. */
- while (i > 0 && sections[i - 1].shdr.sh_addr == addr)
- --i;
- for (; i < nalloc && sections[i].shdr.sh_addr == addr;
- ++i)
- if (sections_match (sections, i, shdr, name))
- return §ions[i];
- break;
- }
- }
- return NULL;
-}
-
-static inline const char *
-get_section_name (size_t ndx, const GElf_Shdr *shdr, const Elf_Data *shstrtab)
-{
- if (shdr->sh_name >= shstrtab->d_size)
- error (EXIT_FAILURE, 0, _("cannot read section [%Zu] name: %s"),
- ndx, elf_errmsg (-1));
- return shstrtab->d_buf + shdr->sh_name;
-}
-
-/* Fix things up when prelink has moved some allocated sections around
- and the debuginfo file's section headers no longer match up.
- This fills in SECTIONS[0..NALLOC-1].outscn or exits.
- If there was a .bss section that was split into two sections
- with the new one preceding it in sh_addr, we return that pointer. */
-static struct section *
-find_alloc_sections_prelink (Elf *debug, Elf_Data *debug_shstrtab,
- Elf *main, const GElf_Ehdr *main_ehdr,
- Elf_Data *main_shstrtab, GElf_Addr bias,
- struct section *sections,
- size_t nalloc, size_t nsections)
-{
- /* Clear assignments that might have been bogus. */
- for (size_t i = 0; i < nalloc; ++i)
- sections[i].outscn = NULL;
-
- Elf_Scn *undo = NULL;
- for (size_t i = nalloc; i < nsections; ++i)
- {
- const struct section *sec = §ions[i];
- if (sec->shdr.sh_type == SHT_PROGBITS
- && !(sec->shdr.sh_flags & SHF_ALLOC)
- && !strcmp (sec->name, ".gnu.prelink_undo"))
- {
- undo = sec->scn;
- break;
- }
- }
-
- /* Find the original allocated sections before prelinking. */
- struct section *undo_sections = NULL;
- size_t undo_nalloc = 0;
- if (undo != NULL)
- {
- Elf_Data *undodata = elf_rawdata (undo, NULL);
- ELF_CHECK (undodata != NULL,
- _("cannot read '.gnu.prelink_undo' section: %s"));
-
- union
- {
- Elf32_Ehdr e32;
- Elf64_Ehdr e64;
- } ehdr;
- Elf_Data dst =
- {
- .d_buf = &ehdr,
- .d_size = sizeof ehdr,
- .d_type = ELF_T_EHDR,
- .d_version = EV_CURRENT
- };
- Elf_Data src = *undodata;
- src.d_size = gelf_fsize (main, ELF_T_EHDR, 1, EV_CURRENT);
- src.d_type = ELF_T_EHDR;
- ELF_CHECK (gelf_xlatetom (main, &dst, &src,
- main_ehdr->e_ident[EI_DATA]) != NULL,
- _("cannot read '.gnu.prelink_undo' section: %s"));
-
- uint_fast16_t phnum;
- uint_fast16_t shnum;
- if (ehdr.e32.e_ident[EI_CLASS] == ELFCLASS32)
- {
- phnum = ehdr.e32.e_phnum;
- shnum = ehdr.e32.e_shnum;
- }
- else
- {
- phnum = ehdr.e64.e_phnum;
- shnum = ehdr.e64.e_shnum;
- }
-
- size_t phsize = gelf_fsize (main, ELF_T_PHDR, phnum, EV_CURRENT);
- src.d_buf += src.d_size + phsize;
- src.d_size = gelf_fsize (main, ELF_T_SHDR, shnum - 1, EV_CURRENT);
- src.d_type = ELF_T_SHDR;
- if ((size_t) (src.d_buf - undodata->d_buf) > undodata->d_size
- || undodata->d_size - (src.d_buf - undodata->d_buf) != src.d_size)
- error (EXIT_FAILURE, 0, _("invalid contents in '%s' section"),
- ".gnu.prelink_undo");
-
- union
- {
- Elf32_Shdr s32[shnum - 1];
- Elf64_Shdr s64[shnum - 1];
- } shdr;
- dst.d_buf = &shdr;
- dst.d_size = sizeof shdr;
- ELF_CHECK (gelf_xlatetom (main, &dst, &src,
- main_ehdr->e_ident[EI_DATA]) != NULL,
- _("cannot read '.gnu.prelink_undo' section: %s"));
-
- undo_sections = xmalloc ((shnum - 1) * sizeof undo_sections[0]);
- for (size_t i = 0; i < shnum - 1; ++i)
- {
- struct section *sec = &undo_sections[undo_nalloc];
- if (ehdr.e32.e_ident[EI_CLASS] == ELFCLASS32)
- {
-#define COPY(field) sec->shdr.field = shdr.s32[i].field
- COPY (sh_name);
- COPY (sh_type);
- COPY (sh_flags);
- COPY (sh_addr);
- COPY (sh_offset);
- COPY (sh_size);
- COPY (sh_link);
- COPY (sh_info);
- COPY (sh_addralign);
- COPY (sh_entsize);
-#undef COPY
- }
- else
- sec->shdr = shdr.s64[i];
- if (sec->shdr.sh_flags & SHF_ALLOC)
- {
- sec->shdr.sh_addr += bias;
- sec->name = get_section_name (i + 1, &sec->shdr, main_shstrtab);
- sec->scn = elf_getscn (main, i + 1); /* Really just for ndx. */
- sec->outscn = NULL;
- sec->strent = NULL;
- ++undo_nalloc;
- }
- }
- qsort (undo_sections, undo_nalloc,
- sizeof undo_sections[0], compare_sections_nonrel);
- }
-
- bool fail = false;
- inline void check_match (bool match, Elf_Scn *scn, const char *name)
- {
- if (!match)
- {
- fail = true;
- error (0, 0, _("cannot find matching section for [%Zu] '%s'"),
- elf_ndxscn (scn), name);
- }
- }
-
- Elf_Scn *scn = NULL;
- while ((scn = elf_nextscn (debug, scn)) != NULL)
- {
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
- ELF_CHECK (shdr != NULL, _("cannot get section header: %s"));
-
- if (!(shdr->sh_flags & SHF_ALLOC))
- continue;
-
- const char *name = get_section_name (elf_ndxscn (scn), shdr,
- debug_shstrtab);
-
- if (undo_sections != NULL)
- {
- struct section *sec = find_alloc_section (shdr, 0, name,
- undo_sections,
- undo_nalloc);
- if (sec != NULL)
- {
- sec->outscn = scn;
- continue;
- }
- }
-
- /* If there is no prelink info, we are just here to find
- the sections to give error messages about. */
- for (size_t i = 0; shdr != NULL && i < nalloc; ++i)
- if (sections[i].outscn == scn)
- shdr = NULL;
- check_match (shdr == NULL, scn, name);
- }
-
- if (fail)
- exit (EXIT_FAILURE);
-
- /* Now we have lined up output sections for each of the original sections
- before prelinking. Translate those to the prelinked sections.
- This matches what prelink's undo_sections does. */
- struct section *split_bss = NULL;
- for (size_t i = 0; i < undo_nalloc; ++i)
- {
- const struct section *undo_sec = &undo_sections[i];
-
- const char *name = undo_sec->name;
- scn = undo_sec->scn; /* This is just for elf_ndxscn. */
-
- for (size_t j = 0; j < nalloc; ++j)
- {
- struct section *sec = §ions[j];
-#define RELA_SCALED(field) \
- (2 * sec->shdr.field == 3 * undo_sec->shdr.field)
- if (sec->outscn == NULL
- && sec->shdr.sh_name == undo_sec->shdr.sh_name
- && sec->shdr.sh_flags == undo_sec->shdr.sh_flags
- && sec->shdr.sh_addralign == undo_sec->shdr.sh_addralign
- && (((sec->shdr.sh_type == undo_sec->shdr.sh_type
- && sec->shdr.sh_entsize == undo_sec->shdr.sh_entsize
- && (sec->shdr.sh_size == undo_sec->shdr.sh_size
- || (sec->shdr.sh_size > undo_sec->shdr.sh_size
- && main_ehdr->e_type == ET_EXEC
- && !strcmp (sec->name, ".dynstr"))))
- || (sec->shdr.sh_size == undo_sec->shdr.sh_size
- && ((sec->shdr.sh_entsize == undo_sec->shdr.sh_entsize
- && undo_sec->shdr.sh_type == SHT_NOBITS)
- || undo_sec->shdr.sh_type == SHT_PROGBITS)
- && !strcmp (sec->name, ".plt")))
- || (sec->shdr.sh_type == SHT_RELA
- && undo_sec->shdr.sh_type == SHT_REL
- && RELA_SCALED (sh_entsize) && RELA_SCALED (sh_size))
- || (sec->shdr.sh_entsize == undo_sec->shdr.sh_entsize
- && (sec->shdr.sh_type == undo_sec->shdr.sh_type
- || (sec->shdr.sh_type == SHT_PROGBITS
- && undo_sec->shdr.sh_type == SHT_NOBITS))
- && sec->shdr.sh_size < undo_sec->shdr.sh_size
- && (!strcmp (sec->name, ".bss")
- || !strcmp (sec->name, ".sbss"))
- && (split_bss = sec) > sections)))
- {
- sec->outscn = undo_sec->outscn;
- undo_sec = NULL;
- break;
- }
- }
-
- check_match (undo_sec == NULL, scn, name);
- }
-
- free (undo_sections);
-
- if (fail)
- exit (EXIT_FAILURE);
-
- return split_bss;
-}
-
-/* Create new .shstrtab contents, subroutine of copy_elided_sections.
- This can't be open coded there and still use variable-length auto arrays,
- since the end of our block would free other VLAs too. */
-static Elf_Data *
-new_shstrtab (Elf *unstripped, size_t unstripped_shnum,
- Elf_Data *shstrtab, size_t unstripped_shstrndx,
- struct section *sections, size_t stripped_shnum,
- struct Ebl_Strtab *strtab)
-{
- if (strtab == NULL)
- return NULL;
-
- struct Ebl_Strent *unstripped_strent[unstripped_shnum - 1];
- memset (unstripped_strent, 0, sizeof unstripped_strent);
- for (struct section *sec = sections;
- sec < §ions[stripped_shnum - 1];
- ++sec)
- if (sec->outscn != NULL)
- {
- if (sec->strent == NULL)
- {
- sec->strent = ebl_strtabadd (strtab, sec->name, 0);
- ELF_CHECK (sec->strent != NULL,
- _("cannot add section name to string table: %s"));
- }
- unstripped_strent[elf_ndxscn (sec->outscn) - 1] = sec->strent;
- }
-
- /* Add names of sections we aren't touching. */
- for (size_t i = 0; i < unstripped_shnum - 1; ++i)
- if (unstripped_strent[i] == NULL)
- {
- Elf_Scn *scn = elf_getscn (unstripped, i + 1);
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
- const char *name = get_section_name (i + 1, shdr, shstrtab);
- unstripped_strent[i] = ebl_strtabadd (strtab, name, 0);
- ELF_CHECK (unstripped_strent[i] != NULL,
- _("cannot add section name to string table: %s"));
- }
- else
- unstripped_strent[i] = NULL;
-
- /* Now finalize the string table so we can get offsets. */
- Elf_Data *strtab_data = elf_getdata (elf_getscn (unstripped,
- unstripped_shstrndx), NULL);
- ELF_CHECK (elf_flagdata (strtab_data, ELF_C_SET, ELF_F_DIRTY),
- _("cannot update section header string table data: %s"));
- ebl_strtabfinalize (strtab, strtab_data);
-
- /* Update the sh_name fields of sections we aren't modifying later. */
- for (size_t i = 0; i < unstripped_shnum - 1; ++i)
- if (unstripped_strent[i] != NULL)
- {
- Elf_Scn *scn = elf_getscn (unstripped, i + 1);
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
- shdr->sh_name = ebl_strtaboffset (unstripped_strent[i]);
- if (i + 1 == unstripped_shstrndx)
- shdr->sh_size = strtab_data->d_size;
- ELF_CHECK (gelf_update_shdr (scn, shdr),
- _("cannot update section header: %s"));
- }
-
- return strtab_data;
-}
-
-/* Fill in any SHT_NOBITS sections in UNSTRIPPED by
- copying their contents and sh_type from STRIPPED. */
-static void
-copy_elided_sections (Elf *unstripped, Elf *stripped,
- const GElf_Ehdr *stripped_ehdr, GElf_Addr bias)
-{
- size_t unstripped_shstrndx;
- ELF_CHECK (elf_getshstrndx (unstripped, &unstripped_shstrndx) == 0,
- _("cannot get section header string table section index: %s"));
-
- size_t stripped_shstrndx;
- ELF_CHECK (elf_getshstrndx (stripped, &stripped_shstrndx) == 0,
- _("cannot get section header string table section index: %s"));
-
- size_t unstripped_shnum;
- ELF_CHECK (elf_getshnum (unstripped, &unstripped_shnum) == 0,
- _("cannot get section count: %s"));
-
- size_t stripped_shnum;
- ELF_CHECK (elf_getshnum (stripped, &stripped_shnum) == 0,
- _("cannot get section count: %s"));
-
- /* Cache the stripped file's section details. */
- struct section sections[stripped_shnum - 1];
- Elf_Scn *scn = NULL;
- while ((scn = elf_nextscn (stripped, scn)) != NULL)
- {
- size_t i = elf_ndxscn (scn) - 1;
- GElf_Shdr *shdr = gelf_getshdr (scn, §ions[i].shdr);
- ELF_CHECK (shdr != NULL, _("cannot get section header: %s"));
- sections[i].name = elf_strptr (stripped, stripped_shstrndx,
- shdr->sh_name);
- if (sections[i].name == NULL)
- error (EXIT_FAILURE, 0, _("cannot read section [%Zu] name: %s"),
- elf_ndxscn (scn), elf_errmsg (-1));
- sections[i].scn = scn;
- sections[i].outscn = NULL;
- sections[i].strent = NULL;
- }
-
- const struct section *stripped_symtab = NULL;
-
- /* Sort the sections, allocated by address and others after. */
- qsort (sections, stripped_shnum - 1, sizeof sections[0],
- stripped_ehdr->e_type == ET_REL
- ? compare_sections_rel : compare_sections_nonrel);
- size_t nalloc = stripped_shnum - 1;
- while (nalloc > 0 && !(sections[nalloc - 1].shdr.sh_flags & SHF_ALLOC))
- {
- --nalloc;
- if (sections[nalloc].shdr.sh_type == SHT_SYMTAB)
- stripped_symtab = §ions[nalloc];
- }
-
- /* Locate a matching unallocated section in SECTIONS. */
- inline struct section *find_unalloc_section (const GElf_Shdr *shdr,
- const char *name)
- {
- size_t l = nalloc, u = stripped_shnum - 1;
- while (l < u)
- {
- size_t i = (l + u) / 2;
- struct section *sec = §ions[i];
- int cmp = compare_unalloc_sections (shdr, &sec->shdr,
- name, sec->name);
- if (cmp < 0)
- u = i;
- else if (cmp > 0)
- l = i + 1;
- else
- return sec;
- }
- return NULL;
- }
-
- Elf_Data *shstrtab = elf_getdata (elf_getscn (unstripped,
- unstripped_shstrndx), NULL);
- ELF_CHECK (shstrtab != NULL,
- _("cannot read section header string table: %s"));
-
- /* Match each debuginfo section with its corresponding stripped section. */
- bool check_prelink = false;
- Elf_Scn *unstripped_symtab = NULL;
- size_t unstripped_strtab_ndx = SHN_UNDEF;
- size_t alloc_avail = 0;
- scn = NULL;
- while ((scn = elf_nextscn (unstripped, scn)) != NULL)
- {
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
- ELF_CHECK (shdr != NULL, _("cannot get section header: %s"));
-
- if (shdr->sh_type == SHT_SYMTAB)
- {
- unstripped_symtab = scn;
- unstripped_strtab_ndx = shdr->sh_link;
- continue;
- }
-
- const size_t ndx = elf_ndxscn (scn);
- if (ndx == unstripped_shstrndx)
- continue;
-
- const char *name = get_section_name (ndx, shdr, shstrtab);
-
- struct section *sec = NULL;
- if (shdr->sh_flags & SHF_ALLOC)
- {
- if (stripped_ehdr->e_type != ET_REL)
- {
- /* Look for the section that matches. */
- sec = find_alloc_section (shdr, bias, name, sections, nalloc);
- if (sec == NULL)
- {
- /* We couldn't figure it out. It may be a prelink issue. */
- check_prelink = true;
- continue;
- }
- }
- else
- {
- /* The sh_addr of allocated sections does not help us,
- but the order usually matches. */
- if (likely (sections_match (sections, alloc_avail, shdr, name)))
- sec = §ions[alloc_avail++];
- else
- for (size_t i = alloc_avail + 1; i < nalloc; ++i)
- if (sections_match (sections, i, shdr, name))
- {
- sec = §ions[i];
- break;
- }
- }
- }
- else
- {
- /* Look for the section that matches. */
- sec = find_unalloc_section (shdr, name);
- if (sec == NULL)
- {
- /* An additional unallocated section is fine if not SHT_NOBITS.
- We looked it up anyway in case it's an unallocated section
- copied in both files (e.g. SHT_NOTE), and don't keep both. */
- if (shdr->sh_type != SHT_NOBITS)
- continue;
-
- /* Somehow some old .debug files wound up with SHT_NOBITS
- .comment sections, so let those pass. */
- if (!strcmp (name, ".comment"))
- continue;
- }
- }
-
- if (sec == NULL)
- error (EXIT_FAILURE, 0,
- _("cannot find matching section for [%Zu] '%s'"),
- elf_ndxscn (scn), name);
-
- sec->outscn = scn;
- }
-
- /* If that failed due to changes made by prelink, we take another tack.
- We keep track of a .bss section that was partly split into .dynbss
- so that collect_symbols can update symbols' st_shndx fields. */
- struct section *split_bss = NULL;
- if (check_prelink)
- {
- Elf_Data *data = elf_getdata (elf_getscn (stripped, stripped_shstrndx),
- NULL);
- ELF_CHECK (data != NULL,
- _("cannot read section header string table: %s"));
- split_bss = find_alloc_sections_prelink (unstripped, shstrtab,
- stripped, stripped_ehdr,
- data, bias, sections,
- nalloc, stripped_shnum - 1);
- }
-
- /* Make sure each main file section has a place to go. */
- const struct section *stripped_dynsym = NULL;
- size_t debuglink = SHN_UNDEF;
- size_t ndx_section[stripped_shnum - 1];
- struct Ebl_Strtab *strtab = NULL;
- for (struct section *sec = sections;
- sec < §ions[stripped_shnum - 1];
- ++sec)
- {
- size_t secndx = elf_ndxscn (sec->scn);
-
- if (sec->outscn == NULL)
- {
- /* We didn't find any corresponding section for this. */
-
- if (secndx == stripped_shstrndx)
- {
- /* We only need one .shstrtab. */
- ndx_section[secndx - 1] = unstripped_shstrndx;
- continue;
- }
-
- if (unstripped_symtab != NULL && sec == stripped_symtab)
- {
- /* We don't need a second symbol table. */
- ndx_section[secndx - 1] = elf_ndxscn (unstripped_symtab);
- continue;
- }
-
- if (unstripped_symtab != NULL && stripped_symtab != NULL
- && secndx == stripped_symtab->shdr.sh_link)
- {
- /* ... nor its string table. */
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (unstripped_symtab, &shdr_mem);
- ELF_CHECK (shdr != NULL, _("cannot get section header: %s"));
- ndx_section[secndx - 1] = shdr->sh_link;
- continue;
- }
-
- if (!(sec->shdr.sh_flags & SHF_ALLOC)
- && !strcmp (sec->name, ".gnu_debuglink"))
- {
- /* This was created by stripping. We don't want it. */
- debuglink = secndx;
- ndx_section[secndx - 1] = SHN_UNDEF;
- continue;
- }
-
- sec->outscn = elf_newscn (unstripped);
- Elf_Data *newdata = elf_newdata (sec->outscn);
- ELF_CHECK (newdata != NULL && gelf_update_shdr (sec->outscn,
- &sec->shdr),
- _("cannot add new section: %s"));
-
- if (strtab == NULL)
- strtab = ebl_strtabinit (true);
- sec->strent = ebl_strtabadd (strtab, sec->name, 0);
- ELF_CHECK (sec->strent != NULL,
- _("cannot add section name to string table: %s"));
- }
-
- /* Cache the mapping of original section indices to output sections. */
- ndx_section[secndx - 1] = elf_ndxscn (sec->outscn);
- }
-
- /* We added some sections, so we need a new shstrtab. */
- Elf_Data *strtab_data = new_shstrtab (unstripped, unstripped_shnum,
- shstrtab, unstripped_shstrndx,
- sections, stripped_shnum,
- strtab);
-
- /* Get the updated section count. */
- ELF_CHECK (elf_getshnum (unstripped, &unstripped_shnum) == 0,
- _("cannot get section count: %s"));
-
- bool placed[unstripped_shnum - 1];
- memset (placed, 0, sizeof placed);
-
- /* Now update the output sections and copy in their data. */
- GElf_Off offset = 0;
- for (const struct section *sec = sections;
- sec < §ions[stripped_shnum - 1];
- ++sec)
- if (sec->outscn != NULL)
- {
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (sec->outscn, &shdr_mem);
- ELF_CHECK (shdr != NULL, _("cannot get section header: %s"));
-
- /* In an ET_REL file under --relocate, the sh_addr of SHF_ALLOC
- sections will have been set nonzero by relocation. This
- touched the shdrs of whichever file had the symtab. sh_addr
- is still zero in the corresponding shdr. The relocated
- address is what we want to use. */
- if (stripped_ehdr->e_type != ET_REL
- || !(shdr_mem.sh_flags & SHF_ALLOC)
- || shdr_mem.sh_addr == 0)
- shdr_mem.sh_addr = sec->shdr.sh_addr;
-
- shdr_mem.sh_type = sec->shdr.sh_type;
- shdr_mem.sh_size = sec->shdr.sh_size;
- shdr_mem.sh_info = sec->shdr.sh_info;
- shdr_mem.sh_link = sec->shdr.sh_link;
- if (sec->shdr.sh_link != SHN_UNDEF)
- shdr_mem.sh_link = ndx_section[sec->shdr.sh_link - 1];
- if (shdr_mem.sh_flags & SHF_INFO_LINK)
- shdr_mem.sh_info = ndx_section[sec->shdr.sh_info - 1];
-
- if (strtab != NULL)
- shdr_mem.sh_name = ebl_strtaboffset (sec->strent);
-
- Elf_Data *indata = elf_getdata (sec->scn, NULL);
- ELF_CHECK (indata != NULL, _("cannot get section data: %s"));
- Elf_Data *outdata = elf_getdata (sec->outscn, NULL);
- ELF_CHECK (outdata != NULL, _("cannot copy section data: %s"));
- *outdata = *indata;
- elf_flagdata (outdata, ELF_C_SET, ELF_F_DIRTY);
-
- /* Preserve the file layout of the allocated sections. */
- if (stripped_ehdr->e_type != ET_REL && (shdr_mem.sh_flags & SHF_ALLOC))
- {
- shdr_mem.sh_offset = sec->shdr.sh_offset;
- placed[elf_ndxscn (sec->outscn) - 1] = true;
-
- const GElf_Off end_offset = (shdr_mem.sh_offset
- + (shdr_mem.sh_type == SHT_NOBITS
- ? 0 : shdr_mem.sh_size));
- if (end_offset > offset)
- offset = end_offset;
- }
-
- ELF_CHECK (gelf_update_shdr (sec->outscn, &shdr_mem),
- _("cannot update section header: %s"));
-
- if (shdr_mem.sh_type == SHT_SYMTAB || shdr_mem.sh_type == SHT_DYNSYM)
- {
- /* We must adjust all the section indices in the symbol table. */
-
- Elf_Data *shndxdata = NULL; /* XXX */
-
- for (size_t i = 1; i < shdr_mem.sh_size / shdr_mem.sh_entsize; ++i)
- {
- GElf_Sym sym_mem;
- GElf_Word shndx = SHN_UNDEF;
- GElf_Sym *sym = gelf_getsymshndx (outdata, shndxdata,
- i, &sym_mem, &shndx);
- ELF_CHECK (sym != NULL,
- _("cannot get symbol table entry: %s"));
- if (sym->st_shndx != SHN_XINDEX)
- shndx = sym->st_shndx;
-
- if (shndx != SHN_UNDEF && shndx < SHN_LORESERVE)
- {
- if (shndx >= stripped_shnum)
- error (EXIT_FAILURE, 0,
- _("symbol [%Zu] has invalid section index"), i);
-
- shndx = ndx_section[shndx - 1];
- if (shndx < SHN_LORESERVE)
- {
- sym->st_shndx = shndx;
- shndx = SHN_UNDEF;
- }
- else
- sym->st_shndx = SHN_XINDEX;
-
- ELF_CHECK (gelf_update_symshndx (outdata, shndxdata,
- i, sym, shndx),
- _("cannot update symbol table: %s"));
- }
- }
-
- if (shdr_mem.sh_type == SHT_SYMTAB)
- stripped_symtab = sec;
- if (shdr_mem.sh_type == SHT_DYNSYM)
- stripped_dynsym = sec;
- }
- }
-
- /* We may need to update the symbol table. */
- Elf_Data *symdata = NULL;
- struct Ebl_Strtab *symstrtab = NULL;
- Elf_Data *symstrdata = NULL;
- if (unstripped_symtab != NULL && (stripped_symtab != NULL
- || check_prelink /* Section adjustments. */
- || (stripped_ehdr->e_type != ET_REL
- && bias != 0)))
- {
- /* Merge the stripped file's symbol table into the unstripped one. */
- const size_t stripped_nsym = (stripped_symtab == NULL ? 1
- : (stripped_symtab->shdr.sh_size
- / stripped_symtab->shdr.sh_entsize));
-
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (unstripped_symtab, &shdr_mem);
- ELF_CHECK (shdr != NULL, _("cannot get section header: %s"));
- const size_t unstripped_nsym = shdr->sh_size / shdr->sh_entsize;
-
- /* First collect all the symbols from both tables. */
-
- const size_t total_syms = stripped_nsym - 1 + unstripped_nsym - 1;
- struct symbol symbols[total_syms];
- size_t symndx_map[total_syms];
-
- if (stripped_symtab != NULL)
- collect_symbols (unstripped, stripped_ehdr->e_type == ET_REL,
- stripped_symtab->scn,
- elf_getscn (stripped, stripped_symtab->shdr.sh_link),
- stripped_nsym, 0, ndx_section,
- symbols, symndx_map, NULL);
-
- Elf_Scn *unstripped_strtab = elf_getscn (unstripped, shdr->sh_link);
- collect_symbols (unstripped, stripped_ehdr->e_type == ET_REL,
- unstripped_symtab, unstripped_strtab, unstripped_nsym,
- stripped_ehdr->e_type == ET_REL ? 0 : bias, NULL,
- &symbols[stripped_nsym - 1],
- &symndx_map[stripped_nsym - 1], split_bss);
-
- /* Next, sort our array of all symbols. */
- qsort (symbols, total_syms, sizeof symbols[0], compare_symbols);
-
- /* Now we can weed out the duplicates. Assign remaining symbols
- new slots, collecting a map from old indices to new. */
- size_t nsym = 0;
- for (struct symbol *s = symbols; s < &symbols[total_syms]; ++s)
- {
- /* Skip a section symbol for a removed section. */
- if (s->shndx == SHN_UNDEF
- && GELF_ST_TYPE (s->info.info) == STT_SECTION)
- {
- s->name = NULL; /* Mark as discarded. */
- *s->map = STN_UNDEF;
- s->duplicate = NULL;
- continue;
- }
-
- struct symbol *n = s;
- while (n + 1 < &symbols[total_syms] && !compare_symbols (s, n + 1))
- ++n;
-
- while (s < n)
- {
- /* This is a duplicate. Its twin will get the next slot. */
- s->name = NULL; /* Mark as discarded. */
- s->duplicate = n->map;
- ++s;
- }
-
- /* Allocate the next slot. */
- *s->map = ++nsym;
- }
-
- /* Now we sort again, to determine the order in the output. */
- qsort (symbols, total_syms, sizeof symbols[0], compare_symbols_output);
-
- if (nsym < total_syms)
- /* The discarded symbols are now at the end of the table. */
- assert (symbols[nsym].name == NULL);
-
- /* Now a final pass updates the map with the final order,
- and builds up the new string table. */
- symstrtab = ebl_strtabinit (true);
- for (size_t i = 0; i < nsym; ++i)
- {
- assert (symbols[i].name != NULL);
- assert (*symbols[i].map != 0);
- *symbols[i].map = 1 + i;
- symbols[i].strent = ebl_strtabadd (symstrtab, symbols[i].name, 0);
- }
-
- /* Scan the discarded symbols too, just to update their slots
- in SYMNDX_MAP to refer to their live duplicates. */
- for (size_t i = nsym; i < total_syms; ++i)
- {
- assert (symbols[i].name == NULL);
- if (symbols[i].duplicate == NULL)
- assert (*symbols[i].map == STN_UNDEF);
- else
- {
- assert (*symbols[i].duplicate != STN_UNDEF);
- *symbols[i].map = *symbols[i].duplicate;
- }
- }
-
- /* Now we are ready to write the new symbol table. */
- symdata = elf_getdata (unstripped_symtab, NULL);
- symstrdata = elf_getdata (unstripped_strtab, NULL);
- Elf_Data *shndxdata = NULL; /* XXX */
-
- ebl_strtabfinalize (symstrtab, symstrdata);
- elf_flagdata (symstrdata, ELF_C_SET, ELF_F_DIRTY);
-
- shdr->sh_size = symdata->d_size = (1 + nsym) * shdr->sh_entsize;
- symdata->d_buf = xmalloc (symdata->d_size);
-
- GElf_Sym sym;
- memset (&sym, 0, sizeof sym);
- ELF_CHECK (gelf_update_symshndx (symdata, shndxdata, 0, &sym, SHN_UNDEF),
- _("cannot update symbol table: %s"));
-
- shdr->sh_info = 1;
- for (size_t i = 0; i < nsym; ++i)
- {
- struct symbol *s = &symbols[i];
-
- /* Fill in the symbol details. */
- sym.st_name = ebl_strtaboffset (s->strent);
- sym.st_value = s->value; /* Already biased to output address. */
- sym.st_size = s->size;
- sym.st_shndx = s->shndx; /* Already mapped to output index. */
- sym.st_info = s->info.info;
- sym.st_other = s->info.other;
-
- /* Keep track of the number of leading local symbols. */
- if (GELF_ST_BIND (sym.st_info) == STB_LOCAL)
- {
- assert (shdr->sh_info == 1 + i);
- shdr->sh_info = 1 + i + 1;
- }
-
- ELF_CHECK (gelf_update_symshndx (symdata, shndxdata, 1 + i,
- &sym, SHN_UNDEF),
- _("cannot update symbol table: %s"));
-
- }
- elf_flagdata (symdata, ELF_C_SET, ELF_F_DIRTY);
- ELF_CHECK (gelf_update_shdr (unstripped_symtab, shdr),
- _("cannot update section header: %s"));
-
- if (stripped_symtab != NULL)
- {
- /* Adjust any relocations referring to the old symbol table. */
- const size_t old_sh_link = elf_ndxscn (stripped_symtab->scn);
- for (const struct section *sec = sections;
- sec < §ions[stripped_shnum - 1];
- ++sec)
- if (sec->outscn != NULL && sec->shdr.sh_link == old_sh_link)
- adjust_relocs (sec->outscn, sec->scn, &sec->shdr,
- symndx_map, shdr);
- }
-
- /* Also adjust references to the other old symbol table. */
- adjust_all_relocs (unstripped, unstripped_symtab, shdr,
- &symndx_map[stripped_nsym - 1]);
- }
- else if (stripped_symtab != NULL && stripped_shnum != unstripped_shnum)
- check_symtab_section_symbols (unstripped,
- stripped_ehdr->e_type == ET_REL,
- stripped_symtab->scn,
- unstripped_shnum, unstripped_shstrndx,
- stripped_symtab->outscn,
- stripped_shnum, stripped_shstrndx,
- debuglink);
-
- if (stripped_dynsym != NULL)
- (void) check_symtab_section_symbols (unstripped,
- stripped_ehdr->e_type == ET_REL,
- stripped_dynsym->outscn,
- unstripped_shnum,
- unstripped_shstrndx,
- stripped_dynsym->scn, stripped_shnum,
- stripped_shstrndx, debuglink);
-
- /* We need to preserve the layout of the stripped file so the
- phdrs will match up. This requires us to do our own layout of
- the added sections. We do manual layout even for ET_REL just
- so we can try to match what the original probably had. */
-
- elf_flagelf (unstripped, ELF_C_SET, ELF_F_LAYOUT);
-
- if (offset == 0)
- /* For ET_REL we are starting the layout from scratch. */
- offset = gelf_fsize (unstripped, ELF_T_EHDR, 1, EV_CURRENT);
-
- bool skip_reloc = false;
- do
- {
- skip_reloc = !skip_reloc;
- for (size_t i = 0; i < unstripped_shnum - 1; ++i)
- if (!placed[i])
- {
- scn = elf_getscn (unstripped, 1 + i);
-
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
- ELF_CHECK (shdr != NULL, _("cannot get section header: %s"));
-
- if (skip_reloc
- && (shdr->sh_type == SHT_REL || shdr->sh_type == SHT_RELA))
- continue;
-
- GElf_Off align = shdr->sh_addralign ?: 1;
- offset = (offset + align - 1) & -align;
- shdr->sh_offset = offset;
- if (shdr->sh_type != SHT_NOBITS)
- offset += shdr->sh_size;
-
- ELF_CHECK (gelf_update_shdr (scn, shdr),
- _("cannot update section header: %s"));
-
- if (unstripped_shstrndx == 1 + i)
- {
- /* Place the section headers immediately after
- .shstrtab, and update the ELF header. */
-
- GElf_Ehdr ehdr_mem;
- GElf_Ehdr *ehdr = gelf_getehdr (unstripped, &ehdr_mem);
- ELF_CHECK (ehdr != NULL, _("cannot get ELF header: %s"));
-
- GElf_Off sh_align = gelf_getclass (unstripped) * 4;
- offset = (offset + sh_align - 1) & -sh_align;
- ehdr->e_shnum = unstripped_shnum;
- ehdr->e_shoff = offset;
- offset += unstripped_shnum * ehdr->e_shentsize;
- ELF_CHECK (gelf_update_ehdr (unstripped, ehdr),
- _("cannot update ELF header: %s"));
- }
-
- placed[i] = true;
- }
- } while (skip_reloc);
-
- if (stripped_ehdr->e_phnum > 0)
- ELF_CHECK (gelf_newphdr (unstripped, stripped_ehdr->e_phnum),
- _("cannot create program headers: %s"));
-
- /* Copy each program header from the stripped file. */
- for (uint_fast16_t i = 0; i < stripped_ehdr->e_phnum; ++i)
- {
- GElf_Phdr phdr_mem;
- GElf_Phdr *phdr = gelf_getphdr (stripped, i, &phdr_mem);
- ELF_CHECK (phdr != NULL, _("cannot get program header: %s"));
-
- ELF_CHECK (gelf_update_phdr (unstripped, i, phdr),
- _("cannot update program header: %s"));
- }
-
- /* Finally, write out the file. */
- ELF_CHECK (elf_update (unstripped, ELF_C_WRITE) > 0,
- _("cannot write output file: %s"));
-
- if (strtab != NULL)
- {
- ebl_strtabfree (strtab);
- free (strtab_data->d_buf);
- }
-
- if (symdata != NULL)
- free (symdata->d_buf);
- if (symstrtab != NULL)
- {
- ebl_strtabfree (symstrtab);
- free (symstrdata->d_buf);
- }
-}
-
-/* Process one pair of files, already opened. */
-static void
-handle_file (const char *output_file, bool create_dirs,
- Elf *stripped, const GElf_Ehdr *stripped_ehdr,
- Elf *unstripped)
-{
- /* Determine the address bias between the debuginfo file and the main
- file, which may have been modified by prelinking. */
- GElf_Addr bias = 0;
- if (unstripped != NULL)
- for (uint_fast16_t i = 0; i < stripped_ehdr->e_phnum; ++i)
- {
- GElf_Phdr phdr_mem;
- GElf_Phdr *phdr = gelf_getphdr (stripped, i, &phdr_mem);
- ELF_CHECK (phdr != NULL, _("cannot get program header: %s"));
- if (phdr->p_type == PT_LOAD)
- {
- GElf_Phdr unstripped_phdr_mem;
- GElf_Phdr *unstripped_phdr = gelf_getphdr (unstripped, i,
- &unstripped_phdr_mem);
- ELF_CHECK (unstripped_phdr != NULL,
- _("cannot get program header: %s"));
- bias = phdr->p_vaddr - unstripped_phdr->p_vaddr;
- break;
- }
- }
-
- /* One day we could adjust all the DWARF data (like prelink itself does). */
- if (bias != 0)
- {
- if (output_file == NULL)
- error (0, 0, _("\
-DWARF data not adjusted for prelinking bias; consider prelink -u"));
- else
- error (0, 0, _("\
-DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u"),
- output_file);
- }
-
- if (output_file == NULL)
- /* Modify the unstripped file in place. */
- copy_elided_sections (unstripped, stripped, stripped_ehdr, bias);
- else
- {
- if (create_dirs)
- make_directories (output_file);
-
- /* Copy the unstripped file and then modify it. */
- int outfd = open64 (output_file, O_RDWR | O_CREAT,
- stripped_ehdr->e_type == ET_REL ? 0666 : 0777);
- if (outfd < 0)
- error (EXIT_FAILURE, errno, _("cannot open '%s'"), output_file);
- Elf *outelf = elf_begin (outfd, ELF_C_WRITE, NULL);
- ELF_CHECK (outelf != NULL, _("cannot create ELF descriptor: %s"));
-
- if (unstripped == NULL)
- {
- /* Actually, we are just copying out the main file as it is. */
- copy_elf (outelf, stripped);
- if (stripped_ehdr->e_type != ET_REL)
- elf_flagelf (outelf, ELF_C_SET, ELF_F_LAYOUT);
- ELF_CHECK (elf_update (outelf, ELF_C_WRITE) > 0,
- _("cannot write output file: %s"));
- }
- else
- {
- copy_elf (outelf, unstripped);
- copy_elided_sections (outelf, stripped, stripped_ehdr, bias);
- }
-
- elf_end (outelf);
- close (outfd);
- }
-}
-
-static int
-open_file (const char *file, bool writable)
-{
- int fd = open64 (file, writable ? O_RDWR : O_RDONLY);
- if (fd < 0)
- error (EXIT_FAILURE, errno, _("cannot open '%s'"), file);
- return fd;
-}
-
-/* Handle a pair of files we need to open by name. */
-static void
-handle_explicit_files (const char *output_file, bool create_dirs,
- const char *stripped_file, const char *unstripped_file)
-{
- int stripped_fd = open_file (stripped_file, false);
- Elf *stripped = elf_begin (stripped_fd, ELF_C_READ, NULL);
- GElf_Ehdr stripped_ehdr;
- ELF_CHECK (gelf_getehdr (stripped, &stripped_ehdr),
- _("cannot create ELF descriptor: %s"));
-
- int unstripped_fd = -1;
- Elf *unstripped = NULL;
- if (unstripped_file != NULL)
- {
- unstripped_fd = open_file (unstripped_file, output_file == NULL);
- unstripped = elf_begin (unstripped_fd,
- (output_file == NULL ? ELF_C_RDWR : ELF_C_READ),
- NULL);
- GElf_Ehdr unstripped_ehdr;
- ELF_CHECK (gelf_getehdr (unstripped, &unstripped_ehdr),
- _("cannot create ELF descriptor: %s"));
-
- if (memcmp (stripped_ehdr.e_ident, unstripped_ehdr.e_ident, EI_NIDENT)
- || stripped_ehdr.e_type != unstripped_ehdr.e_type
- || stripped_ehdr.e_machine != unstripped_ehdr.e_machine
- || stripped_ehdr.e_phnum != unstripped_ehdr.e_phnum)
- error (EXIT_FAILURE, 0, _("'%s' and '%s' do not seem to match"),
- stripped_file, unstripped_file);
- }
-
- handle_file (output_file, create_dirs, stripped, &stripped_ehdr, unstripped);
-
- elf_end (stripped);
- close (stripped_fd);
-
- elf_end (unstripped);
- close (unstripped_fd);
-}
-
-
-/* Handle a pair of files opened implicitly by libdwfl for one module. */
-static void
-handle_dwfl_module (const char *output_file, bool create_dirs,
- Dwfl_Module *mod, bool all, bool ignore, bool relocate)
-{
- GElf_Addr bias;
- Elf *stripped = dwfl_module_getelf (mod, &bias);
- if (stripped == NULL)
- {
- if (ignore)
- return;
-
- const char *file;
- const char *modname = dwfl_module_info (mod, NULL, NULL, NULL,
- NULL, NULL, &file, NULL);
- if (file == NULL)
- error (EXIT_FAILURE, 0,
- _("cannot find stripped file for module '%s': %s"),
- modname, dwfl_errmsg (-1));
- else
- error (EXIT_FAILURE, 0,
- _("cannot open stripped file '%s' for module '%s': %s"),
- modname, file, dwfl_errmsg (-1));
- }
-
- Elf *debug = dwarf_getelf (dwfl_module_getdwarf (mod, &bias));
- if (debug == NULL && !all)
- {
- if (ignore)
- return;
-
- const char *file;
- const char *modname = dwfl_module_info (mod, NULL, NULL, NULL,
- NULL, NULL, NULL, &file);
- if (file == NULL)
- error (EXIT_FAILURE, 0,
- _("cannot find debug file for module '%s': %s"),
- modname, dwfl_errmsg (-1));
- else
- error (EXIT_FAILURE, 0,
- _("cannot open debug file '%s' for module '%s': %s"),
- modname, file, dwfl_errmsg (-1));
- }
-
- if (debug == stripped)
- {
- if (all)
- debug = NULL;
- else
- {
- const char *file;
- const char *modname = dwfl_module_info (mod, NULL, NULL, NULL,
- NULL, NULL, &file, NULL);
- error (EXIT_FAILURE, 0, _("module '%s' file '%s' is not stripped"),
- modname, file);
- }
- }
-
- GElf_Ehdr stripped_ehdr;
- ELF_CHECK (gelf_getehdr (stripped, &stripped_ehdr),
- _("cannot create ELF descriptor: %s"));
-
- if (stripped_ehdr.e_type == ET_REL)
- {
- if (!relocate)
- {
- /* We can't use the Elf handles already open,
- because the DWARF sections have been relocated. */
-
- const char *stripped_file = NULL;
- const char *unstripped_file = NULL;
- (void) dwfl_module_info (mod, NULL, NULL, NULL, NULL, NULL,
- &stripped_file, &unstripped_file);
-
- handle_explicit_files (output_file, create_dirs,
- stripped_file, unstripped_file);
- return;
- }
-
- /* Relocation is what we want! This ensures that all sections that can
- get sh_addr values assigned have them, even ones not used in DWARF.
- They might still be used in the symbol table. */
- if (dwfl_module_relocations (mod) < 0)
- error (EXIT_FAILURE, 0,
- _("cannot cache section addresses for module '%s': %s"),
- dwfl_module_info (mod, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
- dwfl_errmsg (-1));
- }
-
- handle_file (output_file, create_dirs, stripped, &stripped_ehdr, debug);
-}
-
-/* Handle one module being written to the output directory. */
-static void
-handle_output_dir_module (const char *output_dir, Dwfl_Module *mod,
- bool all, bool ignore, bool modnames, bool relocate)
-{
- if (! modnames)
- {
- /* Make sure we've searched for the ELF file. */
- GElf_Addr bias;
- (void) dwfl_module_getelf (mod, &bias);
- }
-
- const char *file;
- const char *name = dwfl_module_info (mod, NULL, NULL, NULL,
- NULL, NULL, &file, NULL);
-
- if (file == NULL && ignore)
- return;
-
- char *output_file;
- if (asprintf (&output_file, "%s/%s", output_dir, modnames ? name : file) < 0)
- error (EXIT_FAILURE, 0, _("memory exhausted"));
-
- handle_dwfl_module (output_file, true, mod, all, ignore, relocate);
-}
-
-
-static void
-list_module (Dwfl_Module *mod)
-{
- /* Make sure we have searched for the files. */
- GElf_Addr bias;
- bool have_elf = dwfl_module_getelf (mod, &bias) != NULL;
- bool have_dwarf = dwfl_module_getdwarf (mod, &bias) != NULL;
-
- const char *file;
- const char *debug;
- Dwarf_Addr start;
- Dwarf_Addr end;
- const char *name = dwfl_module_info (mod, NULL, &start, &end,
- NULL, NULL, &file, &debug);
- if (file != NULL && debug != NULL && (debug == file || !strcmp (debug, file)))
- debug = ".";
-
- const unsigned char *id;
- GElf_Addr id_vaddr;
- int id_len = dwfl_module_build_id (mod, &id, &id_vaddr);
-
- printf ("%#" PRIx64 "+%#" PRIx64 " ", start, end - start);
-
- if (id_len > 0)
- {
- do
- printf ("%02" PRIx8, *id++);
- while (--id_len > 0);
- if (id_vaddr != 0)
- printf ("@%#" PRIx64, id_vaddr);
- }
- else
- putchar ('-');
-
- printf (" %s %s %s\n",
- file ?: have_elf ? "." : "-",
- debug ?: have_dwarf ? "." : "-",
- name);
-}
-
-
-struct match_module_info
-{
- char **patterns;
- Dwfl_Module *found;
- bool match_files;
-};
-
-static int
-match_module (Dwfl_Module *mod,
- void **userdata __attribute__ ((unused)),
- const char *name,
- Dwarf_Addr start __attribute__ ((unused)),
- void *arg)
-{
- struct match_module_info *info = arg;
-
- if (info->patterns[0] == NULL) /* Match all. */
- {
- match:
- info->found = mod;
- return DWARF_CB_ABORT;
- }
-
- if (info->match_files)
- {
- /* Make sure we've searched for the ELF file. */
- GElf_Addr bias;
- (void) dwfl_module_getelf (mod, &bias);
-
- const char *file;
- const char *check = dwfl_module_info (mod, NULL, NULL, NULL,
- NULL, NULL, &file, NULL);
- assert (check == name);
- if (file == NULL)
- return DWARF_CB_OK;
-
- name = file;
- }
-
- for (char **p = info->patterns; *p != NULL; ++p)
- if (fnmatch (*p, name, 0) == 0)
- goto match;
-
- return DWARF_CB_OK;
-}
-
-/* Handle files opened implicitly via libdwfl. */
-static void
-handle_implicit_modules (const struct arg_info *info)
-{
- struct match_module_info mmi = { info->args, NULL, info->match_files };
- inline ptrdiff_t next (ptrdiff_t offset)
- {
- return dwfl_getmodules (info->dwfl, &match_module, &mmi, offset);
- }
- ptrdiff_t offset = next (0);
- if (offset == 0)
- error (EXIT_FAILURE, 0, _("no matching modules found"));
-
- if (info->list)
- do
- list_module (mmi.found);
- while ((offset = next (offset)) > 0);
- else if (info->output_dir == NULL)
- {
- if (next (offset) != 0)
- error (EXIT_FAILURE, 0, _("matched more than one module"));
- handle_dwfl_module (info->output_file, false, mmi.found,
- info->all, info->ignore, info->relocate);
- }
- else
- do
- handle_output_dir_module (info->output_dir, mmi.found,
- info->all, info->ignore,
- info->modnames, info->relocate);
- while ((offset = next (offset)) > 0);
-}
-
-int
-main (int argc, char **argv)
-{
- /* Make memory leak detection possible. */
- mtrace ();
-
- /* We use no threads here which can interfere with handling a stream. */
- __fsetlocking (stdin, FSETLOCKING_BYCALLER);
- __fsetlocking (stdout, FSETLOCKING_BYCALLER);
- __fsetlocking (stderr, FSETLOCKING_BYCALLER);
-
- /* Set locale. */
- setlocale (LC_ALL, "");
-
- /* Make sure the message catalog can be found. */
- bindtextdomain (PACKAGE_TARNAME, LOCALEDIR);
-
- /* Initialize the message catalog. */
- textdomain (PACKAGE_TARNAME);
-
- /* Parse and process arguments. */
- const struct argp_child argp_children[] =
- {
- {
- .argp = dwfl_standard_argp (),
- .header = N_("Input selection options:"),
- .group = 1,
- },
- { .argp = NULL },
- };
- const struct argp argp =
- {
- .options = options,
- .parser = parse_opt,
- .children = argp_children,
- .args_doc = N_("STRIPPED-FILE DEBUG-FILE\n[MODULE...]"),
- .doc = N_("\
-Combine stripped files with separate symbols and debug information.\v\
-The first form puts the result in DEBUG-FILE if -o was not given.\n\
-\n\
-MODULE arguments give file name patterns matching modules to process.\n\
-With -f these match the file name of the main (stripped) file \
-(slashes are never special), otherwise they match the simple module names. \
-With no arguments, process all modules found.\n\
-\n\
-Multiple modules are written to files under OUTPUT-DIRECTORY, \
-creating subdirectories as needed. \
-With -m these files have simple module names, otherwise they have the \
-name of the main file complete with directory underneath OUTPUT-DIRECTORY.\n\
-\n\
-With -n no files are written, but one line to standard output for each module:\
-\n\tSTART+SIZE BUILDID FILE DEBUGFILE MODULENAME\n\
-START and SIZE are hexadecimal giving the address bounds of the module. \
-BUILDID is hexadecimal for the build ID bits, or - if no ID is known; \
-the hexadecimal may be followed by @0xADDR giving the address where the \
-ID resides if that is known. \
-FILE is the file name found for the module, or - if none was found, \
-or . if an ELF image is available but not from any named file. \
-DEBUGFILE is the separate debuginfo file name, \
-or - if no debuginfo was found, or . if FILE contains the debug information.\
-")
- };
-
- int remaining;
- struct arg_info info = { .args = NULL };
- error_t result = argp_parse (&argp, argc, argv, 0, &remaining, &info);
- if (result == ENOSYS)
- assert (info.dwfl == NULL);
- else if (result)
- return EXIT_FAILURE;
- assert (info.args != NULL);
-
- /* Tell the library which version we are expecting. */
- elf_version (EV_CURRENT);
-
- if (info.dwfl == NULL)
- {
- assert (result == ENOSYS);
-
- if (info.output_dir != NULL)
- {
- char *file;
- if (asprintf (&file, "%s/%s", info.output_dir, info.args[0]) < 0)
- error (EXIT_FAILURE, 0, _("memory exhausted"));
- handle_explicit_files (file, true, info.args[0], info.args[1]);
- free (file);
- }
- else
- handle_explicit_files (info.output_file, false,
- info.args[0], info.args[1]);
- }
- else
- {
- /* parse_opt checked this. */
- assert (info.output_file != NULL || info.output_dir != NULL || info.list);
-
- handle_implicit_modules (&info);
-
- dwfl_end (info.dwfl);
- }
-
- return 0;
-}
-
-
-#include "debugpred.h"
diff --git a/src/versionhash.c b/src/versionhash.c
deleted file mode 100644
index 6126eb9..0000000
--- a/src/versionhash.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Version symbol hash table implementation.
- Copyright (C) 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <string.h>
-
-#include <ld.h>
-
-/* Definitions for the symbol hash table. */
-#define TYPE struct id_list *
-#define NAME ld_version_str_tab
-#define COMPARE(a, b) strcmp ((a)->id, (b)->id)
-
-#include "../lib/dynamicsizehash.c"
diff --git a/src/versionhash.h b/src/versionhash.h
deleted file mode 100644
index 63ca114..0000000
--- a/src/versionhash.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Copyright (C) 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2001.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifndef VERSIONHASH_H
-#define VERSIONHASH_H 1
-
-/* Definitions for the symbol hash table. */
-#define TYPE struct id_list *
-#define NAME ld_version_str_tab
-#include <dynamicsizehash.h>
-
-#endif /* versionhash.h */
diff --git a/src/xelf.h b/src/xelf.h
deleted file mode 100644
index 21c7193..0000000
--- a/src/xelf.h
+++ /dev/null
@@ -1,399 +0,0 @@
-/* Macros to enable writing native and generic ELF access code.
- Copyright (C) 2003 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libebl.h>
-
-
-/* By default the linker is handling all architectures. But it can
- be configured to be a native-only linker. */
-#if NATIVE_ELF == 32
-/* 32-bit only. */
-# define XElf_Ehdr Elf32_Ehdr
-# define XElf_Shdr Elf32_Shdr
-# define XElf_Off Elf32_Off
-# define XElf_Addr Elf32_Addr
-# define XElf_Half Elf32_Half
-# define XElf_Word Elf32_Word
-# define XElf_Xword Elf32_Word
-# define XElf_Sxword Elf32_Sword
-# define XElf_Versym Elf32_Versym
-# define XElf_Sym Elf32_Sym
-# define XElf_Rel Elf32_Rel
-# define XElf_Rela Elf32_Rela
-
-# define XElf_Ehdr_vardef(name) Elf32_Ehdr *name
-# define xelf_getehdr(elf, name) name = elf32_getehdr (elf)
-# define xelf_getehdr_copy(elf, name, copy) \
- (copy) = *(name = elf32_getehdr (elf))
-# define xelf_newehdr(elf, klass) elf32_newehdr (elf)
-# define xelf_update_ehdr(elf, ehdr) \
- /* nothing */ ((void) (elf), (void) (ehdr), 1)
-
-# define xelf_getclass(elf) ELFCLASS32
-
-# define XElf_Phdr_vardef(name) Elf32_Phdr *name
-# define xelf_newphdr(elf, n) elf32_newphdr (elf, n)
-# define xelf_getphdr(elf, idx, name) name = elf32_getphdr (elf) + idx
-# define xelf_getphdr_ptr(elf, idx, name) name = elf32_getphdr (elf) + idx
-# define xelf_update_phdr(elf, idx, phdr) \
- /* nothing */ ((void) (elf), (void) (idx), (void) (phdr), 1)
-
-# define XElf_Shdr_vardef(name) Elf32_Shdr *name
-# define xelf_getshdr(scn, name) name = elf32_getshdr (scn)
-# define xelf_getshdr_copy(scn, name, copy) \
- (copy) = *(name = elf32_getshdr (scn))
-# define xelf_update_shdr(scn, shdr) \
- /* nothing */ ((void) (scn), (void) (shdr), 1)
-
-# define XElf_Sym_vardef(name) Elf32_Sym *name
-# define xelf_getsym(data, idx, name) \
- name = &((Elf32_Sym *) (data)->d_buf)[idx]
-# define xelf_getsym_ptr(data, idx, name) \
- name = &((Elf32_Sym *) (data)->d_buf)[idx]
-# define xelf_getsymshndx(data, ndxdata, idx, name1, name2) \
- (name1 = &((Elf32_Sym *) ((data)->d_buf))[idx]); \
- name2 = (unlikely ((ndxdata) != NULL) \
- ? ((Elf32_Word *) ((ndxdata)->d_buf))[idx] : 0)
-# define xelf_update_sym(data, idx, sym) \
- /* nothing */ ((void) (data), (void) (idx), (void) (sym), 1)
-# define xelf_update_symshndx(data, ndxdata, idx, name1, name2, datachanged) \
- if (datachanged) \
- ((Elf32_Sym *) ((data)->d_buf))[idx] = *name1; \
- if (unlikely (ndxdata != NULL)) \
- ((Elf32_Word *) ((ndxdata)->d_buf))[idx] = name2
-
-# define XElf_Versym_vardef(name) Elf32_Versym name
-# define xelf_getversym_copy(data, idx, name) \
- (name = ((Elf32_Versym *) ((data)->d_buf))[idx], &name)
-
-# define XElf_Dyn_vardef(name) Elf32_Dyn *name
-# define xelf_getdyn(data, idx, name) \
- name = &((Elf32_Dyn *) ((data)->d_buf))[idx]
-# define xelf_getdyn_ptr(data, idx, name) \
- name = &((Elf32_Dyn *) ((data)->d_buf))[idx]
-# define xelf_update_dyn(data, idx, name) \
- /* nothing */ ((void) (data), (void) (idx), (void) (name), 1)
-
-# define XElf_Rel_vardef(name) Elf32_Rel *name
-# define xelf_getrel(data, idx, name) \
- name = &((Elf32_Rel *) ((data)->d_buf))[idx]
-# define xelf_getrel_ptr(data, idx, name) \
- name = &((Elf32_Rel *) ((data)->d_buf))[idx]
-# define xelf_update_rel(data, idx, name) \
- /* nothing */ ((void) (data), (void) (idx), (void) (name), 1)
-
-# define XElf_Rela_vardef(name) Elf32_Rela *name
-# define xelf_getrela(data, idx, name) \
- name = &((Elf32_Rela *) ((data)->d_buf))[idx]
-# define xelf_getrela_ptr(data, idx, name) \
- name = &((Elf32_Rela *) ((data)->d_buf))[idx]
-# define xelf_update_rela(data, idx, name) \
- /* nothing */ ((void) (data), (void) (idx), (void) (name), 1)
-
-# define XElf_Verdef_vardef(name) Elf32_Verdef *name
-# define xelf_getverdef(data, offset, name) \
- name = ((Elf32_Verdef *) ((char *) ((data)->d_buf) + (offset)))
-
-# define XElf_Verdaux_vardef(name) Elf32_Verdaux *name
-# define xelf_getverdaux(data, offset, name) \
- name = ((Elf32_Verdaux *) ((char *) ((data)->d_buf) + (offset)))
-
-# define XELF_ST_TYPE(info) ELF32_ST_TYPE (info)
-# define XELF_ST_BIND(info) ELF32_ST_BIND (info)
-# define XELF_ST_INFO(bind, type) ELF32_ST_INFO (bind, type)
-# define XELF_ST_VISIBILITY(info) ELF32_ST_VISIBILITY (info)
-
-# define XELF_R_SYM(info) ELF32_R_SYM (info)
-# define XELF_R_TYPE(info) ELF32_R_TYPE (info)
-# define XELF_R_INFO(sym, type) ELF32_R_INFO (sym, type)
-
-# define xelf_fsize(elf, type, cnt) \
- (__builtin_constant_p (type) \
- ? ({ size_t fsize; \
- switch (type) \
- { \
- case ELF_T_BYTE: fsize = 1; break; \
- case ELF_T_ADDR: fsize = sizeof (Elf32_Addr); break; \
- case ELF_T_DYN: fsize = sizeof (Elf32_Dyn); break; \
- case ELF_T_EHDR: fsize = sizeof (Elf32_Ehdr); break; \
- case ELF_T_HALF: fsize = sizeof (Elf32_Half); break; \
- case ELF_T_OFF: fsize = sizeof (Elf32_Off); break; \
- case ELF_T_PHDR: fsize = sizeof (Elf32_Phdr); break; \
- case ELF_T_RELA: fsize = sizeof (Elf32_Rela); break; \
- case ELF_T_REL: fsize = sizeof (Elf32_Rel); break; \
- case ELF_T_SHDR: fsize = sizeof (Elf32_Shdr); break; \
- case ELF_T_SWORD: fsize = sizeof (Elf32_Sword); break; \
- case ELF_T_SYM: fsize = sizeof (Elf32_Sym); break; \
- case ELF_T_WORD: fsize = sizeof (Elf32_Word); break; \
- case ELF_T_XWORD: fsize = sizeof (Elf32_Xword); break; \
- case ELF_T_SXWORD: fsize = sizeof (Elf32_Sxword); break; \
- case ELF_T_VDEF: fsize = sizeof (Elf32_Verdef); break; \
- case ELF_T_VDAUX: fsize = sizeof (Elf32_Verdaux); break; \
- case ELF_T_VNEED: fsize = sizeof (Elf32_Verneed); break; \
- case ELF_T_VNAUX: fsize = sizeof (Elf32_Vernaux); break; \
- case ELF_T_NHDR: fsize = sizeof (Elf32_Nhdr); break; \
- case ELF_T_SYMINFO: fsize = sizeof (Elf32_Syminfo); break; \
- case ELF_T_MOVE: fsize = sizeof (Elf32_Move); break; \
- default: fsize = 0; break; \
- } \
- fsize * (cnt); }) \
- : gelf_fsize (elf, type, cnt, EV_CURRENT))
-#elif NATIVE_ELF == 64
-/* 64-bit only. */
-# define XElf_Ehdr Elf64_Ehdr
-# define XElf_Shdr Elf64_Shdr
-# define XElf_Addr Elf64_Addr
-# define XElf_Half Elf64_Half
-# define XElf_Off Elf64_Off
-# define XElf_Word Elf64_Word
-# define XElf_Xword Elf64_Xword
-# define XElf_Sxword Elf64_Sxword
-# define XElf_Versym Elf64_Versym
-# define XElf_Sym Elf64_Sym
-# define XElf_Rel Elf64_Rel
-# define XElf_Rela Elf64_Rela
-
-# define XElf_Ehdr_vardef(name) Elf64_Ehdr *name
-# define xelf_getehdr(elf, name) name = elf64_getehdr (elf)
-# define xelf_getehdr_copy(elf, name, copy) \
- (copy) = *(name = elf64_getehdr (elf))
-# define xelf_newehdr(elf, klass) elf64_newehdr (elf)
-# define xelf_update_ehdr(elf, ehdr) \
- /* nothing */ ((void) (elf), (void) (ehdr), 1)
-
-# define xelf_getclass(elf) ELFCLASS32
-
-# define XElf_Phdr_vardef(name) Elf64_Phdr *name
-# define xelf_newphdr(elf, n) elf64_newphdr (elf, n)
-# define xelf_getphdr(elf, idx, name) name = elf64_getphdr (elf) + idx
-# define xelf_getphdr_ptr(elf, idx, name) name = elf64_getphdr (elf) + idx
-# define xelf_update_phdr(elf, idx, phdr) \
- /* nothing */ ((void) (elf), (void) (idx), (void) (phdr), 1)
-
-# define XElf_Shdr_vardef(name) Elf64_Shdr *name
-# define xelf_getshdr(scn, name) name = elf64_getshdr (scn)
-# define xelf_getshdr_copy(scn, name, copy) \
- (copy) = *(name = elf64_getshdr (scn))
-# define xelf_update_shdr(scn, shdr) \
- /* nothing */ ((void) (scn), (void) (shdr), 1)
-
-# define XElf_Sym_vardef(name) Elf64_Sym *name
-# define xelf_getsym(data, idx, name) \
- name = &((Elf64_Sym *) (data)->d_buf)[idx]
-# define xelf_getsym_ptr(data, idx, name) \
- name = &((Elf64_Sym *) (data)->d_buf)[idx]
-# define xelf_getsymshndx(data, ndxdata, idx, name1, name2) \
- (name1 = &((Elf64_Sym *) ((data)->d_buf))[idx]); \
- name2 = (unlikely ((ndxdata) != NULL) \
- ? ((Elf32_Word *) ((ndxdata)->d_buf))[idx] : 0)
-# define xelf_update_sym(data, idx, sym) \
- /* nothing */ ((void) (data), (void) (idx), (void) (sym), 1)
-# define xelf_update_symshndx(data, ndxdata, idx, name1, name2, datachanged) \
- if (datachanged) \
- ((Elf64_Sym *) ((data)->d_buf))[idx] = *name1; \
- if (ndxdata != NULL) \
- (((Elf32_Word *) ((ndxdata)->d_buf))[idx] = name2)
-
-# define XElf_Versym_vardef(name) Elf64_Versym name
-# define xelf_getversym_copy(data, idx, name) \
- (name = ((Elf64_Versym *) ((data)->d_buf))[idx], (&name))
-
-# define XElf_Dyn_vardef(name) Elf64_Dyn *name
-# define xelf_getdyn(data, idx, name) \
- name = &((Elf64_Dyn *) ((data)->d_buf))[idx]
-# define xelf_getdyn_ptr(data, idx, name) \
- name = &((Elf64_Dyn *) ((data)->d_buf))[idx]
-# define xelf_update_dyn(data, idx, name) \
- /* nothing */ ((void) (data), (void) (idx), (void) (name), 1)
-
-# define XElf_Rel_vardef(name) Elf64_Rel *name
-# define xelf_getrel(data, idx, name) \
- name = &((Elf64_Rel *) ((data)->d_buf))[idx]
-# define xelf_getrel_ptr(data, idx, name) \
- name = &((Elf64_Rel *) ((data)->d_buf))[idx]
-# define xelf_update_rel(data, idx, name) \
- /* nothing */ ((void) (data), (void) (idx), (void) (name), 1)
-
-# define XElf_Rela_vardef(name) Elf64_Rela *name
-# define xelf_getrela(data, idx, name) \
- name = &((Elf64_Rela *) ((data)->d_buf))[idx]
-# define xelf_getrela_ptr(data, idx, name) \
- name = &((Elf64_Rela *) ((data)->d_buf))[idx]
-# define xelf_update_rela(data, idx, name) \
- /* nothing */ ((void) (data), (void) (idx), (void) (name), 1)
-
-# define XElf_Verdef_vardef(name) Elf64_Verdef *name
-# define xelf_getverdef(data, offset, name) \
- name = ((Elf64_Verdef *) ((char *) ((data)->d_buf) + (offset)))
-
-# define XElf_Verdaux_vardef(name) Elf64_Verdaux *name
-# define xelf_getverdaux(data, offset, name) \
- name = ((Elf64_Verdaux *) ((char *) ((data)->d_buf) + (offset)))
-
-# define XELF_ST_TYPE(info) ELF64_ST_TYPE (info)
-# define XELF_ST_BIND(info) ELF64_ST_BIND (info)
-# define XELF_ST_INFO(bind, type) ELF64_ST_INFO (bind, type)
-# define XELF_ST_VISIBILITY(info) ELF64_ST_VISIBILITY (info)
-
-# define XELF_R_SYM(info) ELF64_R_SYM (info)
-# define XELF_R_TYPE(info) ELF64_R_TYPE (info)
-# define XELF_R_INFO(sym, type) ELF64_R_INFO (sym, type)
-
-# define xelf_fsize(elf, type, cnt) \
- (__builtin_constant_p (type) \
- ? ({ size_t fsize; \
- switch (type) \
- { \
- case ELF_T_BYTE: fsize = 1; break; \
- case ELF_T_ADDR: fsize = sizeof (Elf64_Addr); break; \
- case ELF_T_DYN: fsize = sizeof (Elf64_Dyn); break; \
- case ELF_T_EHDR: fsize = sizeof (Elf64_Ehdr); break; \
- case ELF_T_HALF: fsize = sizeof (Elf64_Half); break; \
- case ELF_T_OFF: fsize = sizeof (Elf64_Off); break; \
- case ELF_T_PHDR: fsize = sizeof (Elf64_Phdr); break; \
- case ELF_T_RELA: fsize = sizeof (Elf64_Rela); break; \
- case ELF_T_REL: fsize = sizeof (Elf64_Rel); break; \
- case ELF_T_SHDR: fsize = sizeof (Elf64_Shdr); break; \
- case ELF_T_SWORD: fsize = sizeof (Elf64_Sword); break; \
- case ELF_T_SYM: fsize = sizeof (Elf64_Sym); break; \
- case ELF_T_WORD: fsize = sizeof (Elf64_Word); break; \
- case ELF_T_XWORD: fsize = sizeof (Elf64_Xword); break; \
- case ELF_T_SXWORD: fsize = sizeof (Elf64_Sxword); break; \
- case ELF_T_VDEF: fsize = sizeof (Elf64_Verdef); break; \
- case ELF_T_VDAUX: fsize = sizeof (Elf64_Verdaux); break; \
- case ELF_T_VNEED: fsize = sizeof (Elf64_Verneed); break; \
- case ELF_T_VNAUX: fsize = sizeof (Elf64_Vernaux); break; \
- case ELF_T_NHDR: fsize = sizeof (Elf64_Nhdr); break; \
- case ELF_T_SYMINFO: fsize = sizeof (Elf64_Syminfo); break; \
- case ELF_T_MOVE: fsize = sizeof (Elf64_Move); break; \
- default: fsize = 0; break; \
- } \
- fsize * (cnt); }) \
- : gelf_fsize (elf, type, cnt, EV_CURRENT))
-#else
-# include <gelf.h>
-
-/* Generic linker. */
-# define XElf_Ehdr GElf_Ehdr
-# define XElf_Shdr GElf_Shdr
-# define XElf_Addr GElf_Addr
-# define XElf_Half GElf_Half
-# define XElf_Off GElf_Off
-# define XElf_Word GElf_Word
-# define XElf_Xword GElf_Xword
-# define XElf_Sxword GElf_Sxword
-# define XElf_Versym GElf_Versym
-# define XElf_Sym GElf_Sym
-# define XElf_Rel GElf_Rel
-# define XElf_Rela GElf_Rela
-
-# define XElf_Ehdr_vardef(name) GElf_Ehdr name##_mem; GElf_Ehdr *name
-# define xelf_getehdr(elf, name) name = gelf_getehdr (elf, &name##_mem)
-# define xelf_getehdr_copy(elf, name, copy) \
- name = gelf_getehdr (elf, &(copy))
-# define xelf_newehdr(elf, klass) gelf_newehdr (elf, klass)
-# define xelf_update_ehdr(elf, ehdr) gelf_update_ehdr (elf, ehdr)
-
-# define xelf_getclass(elf) gelf_getclass (elf)
-
-# define XElf_Phdr_vardef(name) GElf_Phdr name##_mem; GElf_Phdr *name
-# define xelf_newphdr(elf, n) gelf_newphdr (elf, n)
-# define xelf_getphdr(elf, idx, name) \
- name = gelf_getphdr (elf, idx, &name##_mem)
-# define xelf_getphdr_ptr(elf, idx, name) \
- name = &name##_mem
-# define xelf_update_phdr(elf, idx, phdr) \
- gelf_update_phdr (elf, idx, phdr)
-
-# define XElf_Shdr_vardef(name) GElf_Shdr name##_mem; GElf_Shdr *name
-# define xelf_getshdr(scn, name) name = gelf_getshdr (scn, &name##_mem)
-# define xelf_getshdr_copy(scn, name, copy) \
- name = gelf_getshdr (scn, &(copy))
-# define xelf_update_shdr(scn, shdr) gelf_update_shdr (scn, shdr)
-
-# define XElf_Sym_vardef(name) GElf_Sym name##_mem; GElf_Sym *name
-# define xelf_getsym(data, idx, name) \
- name = gelf_getsym (data, idx, &name##_mem)
-# define xelf_getsym_ptr(data, idx, name) \
- name = &name##_mem
-# define xelf_getsymshndx(data, ndxdata, idx, name1, name2) \
- name1 = gelf_getsymshndx (data, ndxdata, idx, &name1##_mem, &(name2))
-# define xelf_update_sym(data, idx, sym) gelf_update_sym (data, idx, sym)
-# define xelf_update_symshndx(data, ndxdata, idx, name1, name2, datachanged) \
- gelf_update_symshndx (data, ndxdata, idx, name1, name2)
-
-# define XElf_Versym_vardef(name) GElf_Versym name
-# define xelf_getversym_copy(data, idx, name) \
- gelf_getversym (data, idx, &name)
-
-# define XElf_Dyn_vardef(name) GElf_Dyn name##_mem; GElf_Dyn *name
-# define xelf_getdyn(data, idx, name) \
- name = gelf_getdyn (data, idx, &name##_mem)
-# define xelf_getdyn_ptr(data, idx, name) \
- name = &name##_mem
-# define xelf_update_dyn(data, idx, name) \
- gelf_update_dyn (data, idx, name)
-
-# define XElf_Rel_vardef(name) GElf_Rel name##_mem; GElf_Rel *name
-# define xelf_getrel(data, idx, name) \
- name = gelf_getrel (data, idx, &name##_mem)
-# define xelf_getrel_ptr(data, idx, name) \
- name = &name##_mem
-# define xelf_update_rel(data, idx, name) \
- gelf_update_rel (data, idx, name)
-
-# define XElf_Rela_vardef(name) GElf_Rela name##_mem; GElf_Rela *name
-# define xelf_getrela(data, idx, name) \
- name = gelf_getrela (data, idx, &name##_mem)
-# define xelf_getrela_ptr(data, idx, name) \
- name = &name##_mem
-# define xelf_update_rela(data, idx, name) \
- gelf_update_rela (data, idx, name)
-
-# define XElf_Verdef_vardef(name) GElf_Verdef name##_mem; GElf_Verdef *name
-# define xelf_getverdef(data, offset, name) \
- name = gelf_getverdef (data, offset, &name##_mem)
-
-# define XElf_Verdaux_vardef(name) GElf_Verdaux name##_mem; GElf_Verdaux *name
-# define xelf_getverdaux(data, offset, name) \
- name = gelf_getverdaux (data, offset, &name##_mem)
-
-# define XELF_ST_TYPE(info) GELF_ST_TYPE (info)
-# define XELF_ST_BIND(info) GELF_ST_BIND (info)
-# define XELF_ST_INFO(bind, type) GELF_ST_INFO (bind, type)
-# define XELF_ST_VISIBILITY(info) GELF_ST_VISIBILITY (info)
-
-# define XELF_R_SYM(info) GELF_R_SYM (info)
-# define XELF_R_TYPE(info) GELF_R_TYPE (info)
-# define XELF_R_INFO(sym, type) GELF_R_INFO (sym, type)
-
-# define xelf_fsize(elf, type, cnt) \
- gelf_fsize (elf, type, cnt, EV_CURRENT)
-#endif
diff --git a/src/ylwrap b/src/ylwrap
deleted file mode 100644
index b77a9eb..0000000
--- a/src/ylwrap
+++ /dev/null
@@ -1,154 +0,0 @@
-#! /bin/sh
-# ylwrap - wrapper for lex/yacc invocations.
-# Copyright 1996, 1997, 1998, 1999, 2001 Free Software Foundation, Inc.
-# Written by Tom Tromey <tromey@cygnus.com>.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program 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 General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Usage:
-# ylwrap INPUT [OUTPUT DESIRED]... -- PROGRAM [ARGS]...
-# * INPUT is the input file
-# * OUTPUT is file PROG generates
-# * DESIRED is file we actually want
-# * PROGRAM is program to run
-# * ARGS are passed to PROG
-# Any number of OUTPUT,DESIRED pairs may be used.
-
-# The input.
-input="$1"
-shift
-case "$input" in
- [\\/]* | ?:[\\/]*)
- # Absolute path; do nothing.
- ;;
- *)
- # Relative path. Make it absolute.
- input="`pwd`/$input"
- ;;
-esac
-
-pairlist=
-while test "$#" -ne 0; do
- if test "$1" = "--"; then
- shift
- break
- fi
- pairlist="$pairlist $1"
- shift
-done
-
-# The program to run.
-prog="$1"
-shift
-# Make any relative path in $prog absolute.
-case "$prog" in
- [\\/]* | ?:[\\/]*) ;;
- *[\\/]*) prog="`pwd`/$prog" ;;
-esac
-
-# FIXME: add hostname here for parallel makes that run commands on
-# other machines. But that might take us over the 14-char limit.
-dirname=ylwrap$$
-trap "cd `pwd`; rm -rf $dirname > /dev/null 2>&1" 1 2 3 15
-mkdir $dirname || exit 1
-
-cd $dirname
-
-$prog ${1+"$@"} "$input"
-status=$?
-
-if test $status -eq 0; then
- set X $pairlist
- shift
- first=yes
- # Since DOS filename conventions don't allow two dots,
- # the DOS version of Bison writes out y_tab.c instead of y.tab.c
- # and y_tab.h instead of y.tab.h. Test to see if this is the case.
- y_tab_nodot="no"
- if test -f y_tab.c || test -f y_tab.h; then
- y_tab_nodot="yes"
- fi
-
- # The directory holding the input.
- input_dir=`echo "$input" | sed -e 's,\([\\/]\)[^\\/]*$,\1,'`
- # Quote $INPUT_DIR so we can use it in a regexp.
- # FIXME: really we should care about more than `.' and `\'.
- input_rx=`echo "$input_dir" | sed 's,\\\\,\\\\\\\\,g;s,\\.,\\\\.,g'`
-
- while test "$#" -ne 0; do
- from="$1"
- # Handle y_tab.c and y_tab.h output by DOS
- if test $y_tab_nodot = "yes"; then
- if test $from = "y.tab.c"; then
- from="y_tab.c"
- else
- if test $from = "y.tab.h"; then
- from="y_tab.h"
- fi
- fi
- fi
- if test -f "$from"; then
- # If $2 is an absolute path name, then just use that,
- # otherwise prepend `../'.
- case "$2" in
- [\\/]* | ?:[\\/]*) target="$2";;
- *) target="../$2";;
- esac
-
- # Edit out `#line' or `#' directives.
- #
- # We don't want the resulting debug information to point at
- # an absolute srcdir; it is better for it to just mention the
- # .y file with no path.
- #
- # We want to use the real output file name, not yy.lex.c for
- # instance.
- #
- # We want the include guards to be adjusted too.
- FROM=`echo "$from" | sed \
- -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
- -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`
- TARGET=`echo "$2" | sed \
- -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
- -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`
- sed "/^#/{s,$input_rx,,;s,$from,$2,;s,$FORM,$TO,;}" "$from" >"$target" ||
- status=$?
- else
- # A missing file is only an error for the first file. This
- # is a blatant hack to let us support using "yacc -d". If -d
- # is not specified, we don't want an error when the header
- # file is "missing".
- if test $first = yes; then
- status=1
- fi
- fi
- shift
- shift
- first=no
- done
-else
- status=$?
-fi
-
-# Remove the directory.
-cd ..
-rm -rf $dirname
-
-exit $status
diff --git a/tests/ChangeLog b/tests/ChangeLog
deleted file mode 100644
index 958255a..0000000
--- a/tests/ChangeLog
+++ /dev/null
@@ -1,913 +0,0 @@
-2008-12-31 Ulrich Drepper <drepper@redhat.com>
-
- * testfile44.S.bz2: Add tests for blendvpd and blendvps.
- * testfile45.S.bz2: Likewise.
- * testfile44.expect.bz2: Adjust accordingly.
- * testfile45.expect.bz2: Likewise.
-
-2008-12-30 Ulrich Drepper <drepper@redhat.com>
-
- * testfile44.S.bz2: Add tests for blendpd and blendps.
- * testfile45.S.bz2: Likewise.
- * testfile44.expect.bz2: Adjust accordingly.
- * testfile45.expect.bz2: Likewise.
-
-2008-12-19 Ulrich Drepper <drepper@redhat.com>
-
- * testfile44.S.bz2: Add tests for AMD 3DNOW.
- * testfile45.S.bz2: Likewise.
- * testfile44.expect.bz2: Adjust accordingly.
- * testfile45.expect.bz2: Likewise.
-
-2008-11-26 Roland McGrath <roland@redhat.com>
-
- * dwfl-bug-getmodules.c: New file.
- * Makefile.am (noinst_PROGRAMS): Add it.
- (dwfl_bug_getmodules_LDADD): New variable.
-
-2008-09-10 Roland McGrath <roland@redhat.com>
-
- * test-subr.sh (LC_ALL): Export it set to "C".
- * run-dwfl-addr-sect.sh: Don't do it here.
- * run-strings-test.sh: Likewise.
-
-2008-08-21 Denys Vlasenko <dvlasenk@redhat.com>
-
- * run-addrname-test.sh: Add a new case.
- * testfile49.bz2: New data file.
- * Makefile.am (EXTRA_DIST): Add it.
-
-2008-04-10 Roland McGrath <roland@redhat.com>
-
- * testfile48.bz2, testfile48.bz2.debug: New data files.
- * Makefile.am (EXTRA_DIST): Add them.
- * run-strip-test8.sh: Use them.
-
- * testfile16.bz2, testfile16.debug.bz2: Replace data files.
-
- * run-strip-test.sh: Fail if stripped output has ".debug_*" sections.
- * run-strip-test8.sh: New file.
- * testfile47.bz2: New data file.
- * Makefile.am (TESTS, EXTRA_DIST): Add them.
-
-2008-03-31 Roland McGrath <roland@redhat.com>
-
- * run-early-offscn.sh: New file.
- * early-offscn.c: New file.
- * Makefile.am (noinst_PROGRAMS, TESTS, EXTRA_DIST): Add them.
- (early_offscn_LDADD): New variable.
-
-2008-03-19 Roland McGrath <roland@redhat.com>
-
- * run-addrname-test.sh: Add a new case.
-
-2008-02-22 Roland McGrath <roland@redhat.com>
-
- * run-elflint-test.sh: Typo fix.
-
-2008-02-21 Roland McGrath <roland@redhat.com>
-
- * run-disasm-x86.sh: Use uname instead of arch, keep tools required
- for the build down to minimum.
- * run-disasm-x86-64.sh: Likewise.
-
-2008-02-20 Roland McGrath <roland@redhat.com>
-
- * testfile46.bz2: New data file.
- * Makefile.am (EXTRA_DIST): Add it.
- * run-elflint-test.sh: Test on it.
-
-2008-02-01 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: Hook up sha1-tst.c.
- * sha1-tst.c: New file.
-
-2008-01-21 Roland McGrath <roland@redhat.com>
-
- * testfile45.S.bz2: Add tests for cltq, cqto.
- * testfile45.expect.bz2: Adjust.
-
-2008-01-14 Ulrich Drepper <drepper@redhat.com>
-
- * testfile45.S.bz2: Add more tests.
- * testfile45.expect.bz2: Adjust.
-
-2008-01-11 Ulrich Drepper <drepper@redhat.com>
-
- * testfile45.expect.bz2: Adjust for adding of address for %rip based
- address mode.
-
-2008-01-10 Ulrich Drepper <drepper@redhat.com>
-
- * testfile45.S.bz2: Add more tests.
- * testfile45.expect.bz2: Adjust.
-
-2008-01-08 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am (TESTS): Add run-disasm-x86-64.sh.
- (EXTRA): Add testfile45.S.bz2, testfile45.expect.bz2,
- run-disasm-x86-64.sh.
- * run-disasm-x86-64.sh: New file.
- * testfile45.S.bz2: New file.
- * testfile45.expect.bz2: New file.
- * testfile44.S.bz2: New tests.
- * testfile44.expect.bz2: Adjust.
-
-2008-01-04 Ulrich Drepper <drepper@redhat.com>
-
- * testfile44.S.bz2: New tests.
- * testfile44.expect.bz2: Adjust.
-
-2008-01-04 Roland McGrath <roland@redhat.com>
-
- * dwfl-bug-fd-leak.c (main): Add a cast.
-
-2008-01-03 Ulrich Drepper <drepper@redhat.com>
-
- * testfile44.S.bz2: New tests.
- * testfile44.expect.bz2: Adjust.
-
-2008-01-01 Ulrich Drepper <drepper@redhat.com>
-
- * line2addr.c: Use %m modifier instead of %a to appease gcc.
-
-2008-01-01 Ulrich Drepper <drepper@redhat.com>
-
- * testfile44.S.bz2: New tests.
- * testfile44.expect.bz2: Adjust.
-
-2007-12-31 Ulrich Drepper <drepper@redhat.com>
-
- * testfile44.S.bz2: New tests.
- * testfile44.expect.bz2: Adjust.
-
-2007-12-30 Ulrich Drepper <drepper@redhat.com>
-
- * testfile44.S.bz2: New tests.
- * testfile44.expect.bz2: Adjust.
-
-2007-12-29 Ulrich Drepper <drepper@redhat.com>
-
- * testfile44.s.bz2: New tests.
- * testfile44.expect.bz2: Adjust.
-
-2007-12-28 Ulrich Drepper <drepper@redhat.com>
-
- * testfile44.S.bz2: New tests.
- * testfile44.expect.bz2: Adjust.
-
-2007-12-27 Ulrich Drepper <drepper@redhat.com>
-
- * testfile44.S.bz2: New tests.
- * testfile44.expect.bz2: Adjust.
-
-2007-12-26 Ulrich Drepper <drepper@redhat.com>
-
- * testfile44.S.bz2: New tests.
- * testfile44.expect.bz2: Adjust
-
-2007-12-21 Ulrich Drepper <drepper@redhat.com>
-
- * testfile44.S.bz2: More tests.
- * testfile44.expect.bz2: Adjust appropriately.
-
-2007-12-19 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am (TESTS): Add run-disasm.sh.
- (EXTRA_DIST): Add run-disasm.sh, testfile44.S.bz2, and
- testfile44.expect.bz2.
- * run-disasm.sh: New file.
- * testfile44.S.bz2: New file.
- * testfile44.expect.bz2: New file.
-
-2007-12-15 Roland McGrath <roland@redhat.com>
-
- * run-allregs.sh: Change expected output for powerpc spefscr.
-
-2007-10-20 Roland McGrath <roland@redhat.com>
-
- * run-dwfl-addr-sect.sh: Change expected output, no errors.
-
-2007-10-19 Roland McGrath <roland@redhat.com>
-
- * dwfl-addr-sect.c (handle_address): Return int.
- Don't exit on error, just return nonzero.
- (main): Collect results.
- * run-dwfl-addr-sect.sh: New file.
- * testfile43.bz2: New data file.
- * Makefile.am (EXTRA_DIST, TESTS): Add them.
-
-2007-10-18 Roland McGrath <roland@redhat.com>
-
- * run-allregs.sh: Update expected ppc output for vrsave/vscr.
-
-2007-10-16 Roland McGrath <roland@redhat.com>
-
- * test-subr.sh (remove_files): Don't pass -Bb to diff.
-
-2007-10-09 Roland McGrath <roland@redhat.com>
-
- * dwflmodtest.c (print_module): Don't use %p in output.
- * run-dwfl-bug-offline-rel.sh: Updated expected output.
-
-2007-10-08 Roland McGrath <roland@redhat.com>
-
- * testfile42.bz2: New data file.
- * Makefile.am (EXTRA_DIST): Add it.
- * run-elflint-test.sh: New test on that file.
-
-2007-10-04 Roland McGrath <roland@redhat.com>
-
- * run-readelf-test4.sh: New file.
- * Makefile.am (TESTS, EXTRA_DIST): Add it.
-
-2007-10-03 Roland McGrath <roland@redhat.com>
-
- * run-readelf-test3.sh: New file.
- * Makefile.am (TESTS, EXTRA_DIST): Add it.
-
-2007-10-01 Roland McGrath <roland@redhat.com>
-
- * run-readelf-test2.sh: New file.
- * Makefile.am (TESTS, EXTRA_DIST): Add it.
-
-2007-09-11 Roland McGrath <roland@redhat.com>
-
- * run-addrname-test.sh: Add a new case.
- * testfile41.bz2: New data file.
- * Makefile.am (EXTRA_DIST): Add it.
-
-2007-08-23 Roland McGrath <roland@redhat.com>
-
- * run-allregs.sh: Update expected x86-64 output for %rflags.
-
-2007-08-12 Roland McGrath <roland@redhat.com>
-
- * run-strip-test7.sh: New file.
- * testfile39.bz2: New data file.
- * testfile40.bz2: New data file.
- * testfile40.debug.bz2: New data file.
- * Makefile.am (TESTS, EXTRA_DIST): Add them.
-
-2007-08-09 Roland McGrath <roland@redhat.com>
-
- * dwfl-bug-report.c: Fix header inclusion.
-
-2007-08-08 Roland McGrath <roland@redhat.com>
-
- * run-addrname-test.sh: Add a new case using addr2line -S.
- * testfile38.bz2: New data file.
- * Makefile.am (EXTRA_DIST): Add it.
-
-2007-07-16 Roland McGrath <roland@redhat.com>
-
- * dwfl-bug-report.c: New file.
- * Makefile.am (noinst_PROGRAMS, TESTS): Add it.
- (dwfl_bug_report_LDADD): New variable.
-
-2007-06-06 Roland McGrath <roland@redhat.com>
-
- * run-unstrip-test.sh: Declare testfile.unstrip for removal.
-
-2007-06-05 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am (EXTRA_DIST): Add missing line continuation and
- testfile37.bz and testfile37.debug.bz2.
-
-2007-05-23 Roland McGrath <roland@redhat.com>
-
- * run-allregs.sh: Update expected Alpha results.
-
-2007-05-18 Roland McGrath <roland@redhat.com>
-
- * run-strip-test4.sh (stripped, debugfile): Use new reference files.
- * testfile37.bz2: New data file.
- * testfile37.debug.bz2: New data file.
- * run-unstrip-test2.sh: New file.
- * Makefile.am (TESTS, EXTRA_DIST): Add them.
-
-2007-05-10 Roland McGrath <roland@redhat.com>
-
- * run-dwfl-bug-offline-rel.sh: New file.
- * testfile36.bz2: New data file.
- * testfile36.debug.bz2: New data file.
- * Makefile.am (TESTS, EXTRA_DIST): Add them.
-
-2007-04-28 Roland McGrath <roland@redhat.com>
-
- * run-strip-test6.sh (stripped, debugfile): Use new reference files.
- * testfile35.bz2: New data file.
- * testfile35.debug.bz2: New data file.
- * run-unstrip-test.sh: New file.
- * Makefile.am (TESTS, EXTRA_DIST): Add them.
-
- * run-strip-test.sh: Do all elflint and cmp runs even when some fail.
-
-2007-04-26 Roland McGrath <roland@redhat.com>
-
- * run-elflint-self.sh: Run all tests even if one fails.
-
- * run-allregs.sh: Add expected output for alpha.
-
-2007-04-24 Roland McGrath <roland@redhat.com>
-
- * run-strip-test.sh: When we saved the debug info, test unstrip too.
-
-2007-04-22 Roland McGrath <roland@redhat.com>
-
- * run-allregs.sh: Update expected register info.
-
-2007-04-16 Roland McGrath <roland@redhat.com>
-
- * dwfl-addr-sect.c: New file.
- * Makefile.am (noinst_PROGRAMS): Add it.
- (dwfl_addr_sect_LDADD): New variable.
-
-2007-04-05 Roland McGrath <roland@redhat.com>
-
- * get-files.c: Test dwarf_getsrcdirs.
- * run-get-files.sh: Update expected output.
-
-2007-04-01 Roland McGrath <roland@redhat.com>
-
- * run-allregs.sh: Updated expected output for x86_64.
-
-2007-03-04 Roland McGrath <roland@redhat.com>
-
- * dwfl-bug-fd-leak.c: New file.
- * Makefile.am (noinst_PROGRAMS, TESTS): Add it.
- (dwfl_bug_fd_leak_LDADD): New variable.
-
- * dwflmodtest.c: Test dwfl_getmodules before and after getdwarf,
- show what files have been located.
-
-2007-02-02 Roland McGrath <roland@redhat.com>
-
- * run-addrname-test.sh: New file.
- * Makefile.am (TESTS, EXTRA_DIST): Add it.
- * testfile34.bz2: New data file.
- * Makefile.am (EXTRA_DIST): Add it.
-
-2007-01-20 Roland McGrath <roland@redhat.com>
-
- * testfile33.bz2: New data file.
- * Makefile.am (EXTRA_DIST): Add it.
- * run-elflint-test.sh: Test on it too.
-
-2007-01-18 Roland McGrath <roland@redhat.com>
-
- * Makefile.am (CFLAGS): Don't molest it.
-
-2007-01-11 Roland McGrath <roland@redhat.com>
-
- * testfile32.bz2: New data file.
- * Makefile.am (EXTRA_DIST): Add it.
- * run-elflint-test.sh: Test on it too.
-
-2007-02-04 Ulrich Drepper <drepper@redhat.com>
-
- * arls.c: New file.
- * Makefile (noinst_PROGRAMS): Add arls.
-
- * run-ranlib-test2.sh: Fix type in comment.
-
-2007-01-10 Ulrich Drepper <drepper@redhat.com>
-
- * run-elflint-self.sh (runtest): Show which file has the problem.
-
-2007-01-10 Roland McGrath <roland@redhat.com>
-
- * dwfl-bug-addr-overflow.c: New file.
- * Makefile.am (TESTS): Add it.
- (dwfl_bug_addr_overflow_LDADD): New variable.
-
-2006-12-17 Roland McGrath <roland@redhat.com>
-
- * msg_tst.c (libelf_msgs): Fix ELF_E_INVALID_PHDR msg.
-
-2006-09-05 Roland McGrath <roland@redhat.com>
-
- * run-strings-test.sh: Export LC_ALL=C for the test.
-
-2006-08-29 Roland McGrath <roland@redhat.com>
-
- * run-arextract.sh: Use testrun, tempfiles functions from test-subr.sh.
- * run-arsymtest.sh: Likewise.
-
- * run-native-test.sh (native.c compilation): Add some braces.
-
-2006-08-22 Roland McGrath <roland@redhat.com>
-
- * allregs.c (dwarf_encoding_string): New function, swiped from readelf.
- (struct reginfo): New members bits, type.
- (one_register, match_register): Update to take new args,
- record and display new info.
- (main): Display new info.
- * run-allregs.sh: Update expected results.
-
-2006-08-03 Roland McGrath <roland@redhat.com>
-
- * run-allregs.sh: Add sparc cases.
- * testfile30.bz2: New data file.
- * testfile31.bz2: New data file.
- * Makefile.am (EXTRA_DIST): Add them.
-
-2006-07-21 Roland McGrath <roland@redhat.com>
-
- * allregs.c (struct reginfo): Increase size of name.
- (one_register): Assert that it's big enough.
-
-2006-04-04 Roland McGrath <roland@redhat.com>
-
- * run-bug1-test.sh: Test a second case, to cover both byte orders.
- * testfile29.bz2: New file.
- * testfile29.rdwr.bz2: New file.
- * Makefile.am (EXTRA_DIST): Add them.
-
-2006-04-04 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: Add rules to run run-bug1-test.sh.
- * rdwrmmap.c: New file.
- * run-bug1-test.sh: New file.
- * testfile28.bz2: New file.
- * testfile28.rdwr.bz2: New file.
-
-2006-03-09 Roland McGrath <roland@redhat.com>
-
- * Makefile.am (AM_LDFLAGS): Define to pass -rpath-link.
-
-2006-03-01 Roland McGrath <roland@redhat.com>
-
- * show-die-info.c (tagnames, attrs): Update name tables for dwarf.h
- changes matching 3.0 spec.
-
-2006-01-13 Roland McGrath <roland@redhat.com>
-
- * run-native-test.sh: Do kill -9 and reap explicitly at end, since
- bash 3.1 whines when it's done in the trap 0 handler.
-
-2006-01-11 Roland McGrath <roland@redhat.com>
-
- * testfile26.bz2: New data file.
- * testfile27.bz2: New data file.
- * Makefile.am (EXTRA_DIST): Add them.
- * run-allregs.sh: Test s390 data.
-
-2005-12-14 Roland McGrath <roland@redhat.com>
-
- * run-native-test.sh: Redirect output from native test process.
-
-2005-12-13 Roland McGrath <roland@redhat.com>
-
- * allregs.c (main): Fail if we find no registers.
-
- * run-native-test.sh: New file.
- * Makefile.am (TESTS, EXTRA_DIST): Add it.
-
-2005-12-10 Ulrich Drepper <drepper@redhat.com
-
- * run-readelf-test1.sh: New file.
- * Makefile.am (TESTS): Add run-readelf-test1.sh.
- (EXTRA_DIST): Likewise.
-
-2005-12-07 Roland McGrath <roland@redhat.com>
-
- * ecp.c (main): Use elf_end to clean up.
-
-2005-11-25 Roland McGrath <roland@redhat.com>
-
- * coverage.sh: Given -v argument, print names of unused files.
-
- * addrscopes.c (main): Use dwfl_end before return.
- * allregs.c (main): Likewise.
- * find-prologues.c (main): Likewise.
- * funcretval.c (main): Likewise.
- * funcscopes.c (main): Likewise.
- * line2addr.c (main): Likewise.
-
- * run-allregs.sh: New file.
- * Makefile.am (TESTS, EXTRA_DIST): Add it.
-
- * allregs.c: Use libdwfl wrapper instead of direct libebl calls.
- * Makefile.am (allregs_LDADD): Updated.
-
- * allregs.c: New file.
- * Makefile.am (noinst_PROGRAMS): Add it.
- (allregs_LDADD): New variable.
-
-2005-11-18 Roland McGrath <roland@redhat.com>
-
- * test-subr.sh (installed_testrun): Treat /usr/lib64 like /usr/lib.
- * test-wrapper.sh: Likewise.
-
-2005-11-17 Roland McGrath <roland@redhat.com>
-
- * Makefile.am (installed_TESTS_ENVIRONMENT): Set libdir, bindir in
- environment for test-wrapper.sh.
- * test-wrapper.sh: Set LD_LIBRARY_PATH from ${libdir} if not /usr/lib.
- * test-subr.sh (installed_testrun): Likewise.
- Use explicit path in ${bindir}.
-
- * Makefile.am (installcheck-local): Fix typo in last change.
-
-2005-11-16 Roland McGrath <roland@redhat.com>
-
- * configure.ac: New file, for standalone build/dist of test suite.
- * Makefile.am [!STANDALONE] (INCLUDES): Don't define it.
- (asm_TESTS): New variable, broken out of ...
- (TESTS): ... here. Also remove msg_tst.
- [!STANDALONE] (TESTS, noinst_PROGRAMS): Add in $(asm_TESTS), msg_tst.
- (installed_TESTS_ENVIRONMENT): New variable.
- [STANDALONE] (TESTS_ENVIRONMENT): Use that.
- [!STANDALONE] (installcheck-local): Likewise.
- [STANDALONE] (libdw, libelf, libasm, libebl): Define using -lfoo.
- * addrscopes.c: Include <config.h>.
- Use ELFUTILS_HEADER macro in #include of installed elfutils/ headers.
- * allfcts.c: Likewise.
- * asm-tst1.c: Likewise.
- * asm-tst2.c: Likewise.
- * asm-tst3.c: Likewise.
- * asm-tst4.c: Likewise.
- * asm-tst5.c: Likewise.
- * asm-tst6.c: Likewise.
- * asm-tst7.c: Likewise.
- * asm-tst8.c: Likewise.
- * asm-tst9.c: Likewise.
- * dwflmodtest.c: Likewise.
- * find-prologues.c: Likewise.
- * funcscopes.c: Likewise.
- * get-aranges.c: Likewise.
- * get-files.c: Likewise.
- * get-lines.c: Likewise.
- * get-pubnames.c: Likewise.
- * line2addr.c: Likewise.
- * newscn.c: Likewise.
- * show-abbrev.c: Likewise.
- * show-die-info.c: Likewise.
- * update3.c: Likewise.
- * update4.c: Likewise.
- * funcretval.c: Likewise.
-
- * dwflmodtest.c (print_instance): Don't use INTUSE.
- (options): Don't use N_ macro.
-
-2005-11-15 Roland McGrath <roland@redhat.com>
-
- * coverage.sh: Look in backends.
- * Makefile.am (BUILD_RPATH): Search ../backends, not ../libebl.
- (TESTS_ENVIRONMENT): Likewise.
-
- * funcretval.c (handle_function): Don't take DW_AT_type of FUNCDIE,
- pass FUNCDIE direclty to dwfl_module_return_value_location.
-
- * Makefile.am (BUILD_RPATH): New variable.
- [TESTS_RPATH] (AM_LDFLAGS): Pass -rpath option using that value.
- (tests_rpath): New variable.
- (installcheck-local): Pass it to test-wrapper.sh.
- * test-wrapper.sh: In "installed" format, take yes/no value
- for elfutils_tests_rpath, which export. When running a test
- binary for installcheck, exit 77.
- * test-subr.sh (installed_testrun): When running a test binary
- for installcheck, exit 77 if $elfutils_tests_rpath = yes.
-
-2005-11-14 Roland McGrath <roland@redhat.com>
-
- * test-subr.sh: New file.
- * test-wrapper.sh: New file.
- * Makefile.am (EXTRA_DIST): Add them.
- (AM_LDFLAGS): Variable removed.
- (TESTS_ENVIRONMENT): New variable.
- (installcheck-local): New target.
- * run-addrscopes.sh: Use test-subr.sh.
- * run-allfcts.sh: Likewise.
- * run-ecp-test.sh: Likewise.
- * run-ecp-test2.sh: Likewise.
- * run-elflint-self.sh: Likewise.
- * run-elflint-test.sh: Likewise.
- * run-find-prologues.sh: Likewise.
- * run-funcscopes.sh: Likewise.
- * run-get-aranges.sh: Likewise.
- * run-get-files.sh: Likewise.
- * run-get-lines.sh: Likewise.
- * run-get-pubnames.sh: Likewise.
- * run-line2addr.sh: Likewise.
- * run-ranlib-test.sh: Likewise.
- * run-ranlib-test2.sh: Likewise.
- * run-show-abbrev.sh: Likewise.
- * run-show-ciefde.sh: Likewise.
- * run-show-die-info.sh: Likewise.
- * run-strings-test.sh: Likewise.
- * run-strip-test.sh: Likewise.
-
-2005-11-13 Roland McGrath <roland@redhat.com>
-
- * funcretval.c: New file.
- * Makefile.am (noinst_PROGRAMS): Add it.
- (funcretval_LDADD): New variable.
-
-2005-11-09 Ulrich Drepper <drepper@redhat.com>
-
- * line2addr.c (handle_module): Add missing parameter to printf.
-
-2005-10-27 Roland McGrath <roland@redhat.com>
-
- * allfcts.c (cb): Update for dwarf_func_* -> dwarf_decl_* changes.
- * funcscopes.c (handle_function): Likewise.
- * dwflmodtest.c (print_inline, print_func): Likewise.
- * find-prologues.c (handle_function): Likewise.
-
-2005-10-27 Roland McGrath <roland@redhat.com>
-
- * run-find-prologues.sh: New file.
- * Makefile.am (TESTS, EXTRA_DIST): Add it.
-
- * find-prologues.c (handle_function): Skip inlines.
-
-2005-10-25 Roland McGrath <roland@redhat.com>
-
- * find-prologues.c: New file.
- * Makefile.am (noinst_PROGRAMS): Add it.
- (find_prologues_LDADD): New variable.
-
-2005-09-02 Ulrich Drepper <drepper@redhat.com>
-
- * run-strings-test.sh: Remove strings.out in the end.
-
-2005-08-31 Ulrich Drepper <drepper@redhat.com>
-
- * run-addrscopes.sh: Use correct exit code if test cannot be performed.
- * run-allfcts.sh: Likewise.
- * run-ecp-test.sh: Likewise.
- * run-ecp-test2.sh: Likewise.
- * run-elflint-test.sh: Likewise.
- * run-funcscopes.sh: Likewise.
- * run-get-aranges.sh: Likewise.
- * run-get-files.sh: Likewise.
- * run-get-lines.sh: Likewise.
- * run-get-pubnames.sh: Likewise.
- * run-line2addr.sh: Likewise.
- * run-ranlib-test2.sh: Likewise.
- * run-show-abbrev.sh: Likewise.
- * run-show-ciefde.sh: Likewise.
- * run-show-die-info.sh: Likewise.
- * run-strings-test.sh: Likewise.
- * run-strip-test.sh: Likewise.
-
-2005-08-30 Ulrich Drepper <drepper@redhat.com>
-
- * coverage.sh: Handle case where there is no .gcno file at all.
-
-2005-08-29 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am (EXTRA_DIST): Add coverage.
- [GCOV]: Generate coverage summary after the tests ran
- * coverage.sh: New file.
-
-2005-08-28 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.an [BUILD_STATIC] (libdw): Add -ldl.
- (CLEANFILES): Add *.gcno *.gcda *.gconv.
-
-2005-08-28 Ulrich Drepper <drepper@redhat.com>
-
- * run-strings-test.sh: New file.
- * Makefile.am (TESTS, EXTRA_DIST): Add it.
-
-2005-08-27 Roland McGrath <roland@redhat.com>
-
- * addrscopes.c (handle_address): Apply bias to PC addresses.
-
- * run-funcscopes.sh: New file.
- * testfile25.bz2: New data file.
- * Makefile.am (TESTS, EXTRA_DIST): Add them.
-
-2005-08-26 Roland McGrath <roland@redhat.com>
-
- * addrscopes.c (dwarf_diename_integrate): Removed.
- (print_vars, handle_address): Use plain dwarf_diename.
-
-2005-08-25 Roland McGrath <roland@redhat.com>
-
- * funcscopes.c: New file.
- * Makefile.am (noinst_PROGRAMS): Add it.
- (funcscopes_LDADD): New variable.
-
- * run-addrscopes.sh: Add another case.
- * testfile24.bz2: New data file.
- * Makefile.am (EXTRA_DIST): Add it.
-
- * addrscopes.c (handle_address): Take new argument IGNORE_INLINES,
- pass it to dwarf_getscopes.
- (main): Pass it, true when '=' follows an address.
-
-2005-08-24 Roland McGrath <roland@redhat.com>
-
- * line2addr.c (print_address): Omit () for DSOs.
-
-2005-08-24 Ulrich Drepper <drepper@redhat.com>
-
- * run-line2addr.sh: Remove testfile23 in the end.
-
- * Makefile.am [BUILD_STATIC] (libdw): Add $(libelf) and $(libebl).
- [MUDFLAP] (AM_LDFLAGS): Define to find libebl modules.
-
-2005-08-22 Roland McGrath <roland@redhat.com>
-
- * run-line2addr.sh: Add a case.
- * testfile23.bz2: New data file.
- * Makefile.am (EXTRA_DIST): Add it.
-
-2005-08-18 Roland McGrath <roland@redhat.com>
-
- * run-addrscopes.sh: New file.
- * testfile22.bz2: New data file.
- * Makefile.am (TESTS, EXTRA_DIST): Add them.
-
- * addrscopes.c: New file.
- * Makefile.am (noinst_PROGRAMS): Add it.
- (addrscopes_LDADD): New variable.
-
-2005-08-15 Ulrich Drepper <drepper@redhat.com>
-
- * run-elflint-self.sh: Don't run test if the file doesn't exist.
-
-2005-08-15 Roland McGrath <roland@redhat.com>
-
- * dwflmodtest.c (print_instance, print_inline): New functions.
- (print_func): Call print_inline.
- (options, parse_opt): Grok -i/--inlines.
-
-2005-08-07 Roland McGrath <roland@redhat.com>
-
- * dwflmodtest.c: Print function details only if -f flag is given.
-
-2005-08-06 Ulrich Drepper <drepper@redhat.com>
-
- * run-elflint-self.sh: New file.
- * Makefile.am (TESTS): Add run-elflint-self.sh.
- (EXTRA_DIST): Likewise.
-
- * Makefile.am: Link with statis libs if BUILD_STATIC.
- (dwflmodtest_LDADD): Also link with -ldl.
-
-2005-08-02 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: Add -ldl to asm_tst[1-9]_LDASS.
- * asm-tst1.c: Adjust for new asm_begin interface. Open backend
- library first.
- * asm-tst2.c: Likewise.
- * asm-tst3.c: Likewise.
- * asm-tst4.c: Likewise.
- * asm-tst5.c: Likewise.
- * asm-tst6.c: Likewise.
- * asm-tst7.c: Likewise.
- * asm-tst8.c: Likewise.
- * asm-tst9.c: Likewise.
-
- * msg_tst.c: Add new error message.
-
-2005-07-28 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am (dwflmodtest_LDADD): Add $(libebl).
-
-2005-06-01 Roland McGrath <roland@redhat.com>
-
- * line2addr.c: Rewritten using libdwfl.
- * run-line2addr.sh: Update test for changed arguments.
- * Makefile.am (INCLUDES): Add libdwfl source directory to path.
- (libdwfl): New variable.
- (line2addr_LDADD): Use it.
-
-2005-07-28 Roland McGrath <roland@redhat.com>
-
- * dwflmodtest.c: New file, moved from ../libdwfl/ptest.c to here.
- * Makefile.am (noinst_PROGRAMS): Add dwflmodtest.
- (dwflmodtest_LDADD): New variable.
- (INCLUDES): Add -I$(top_srcdir)/libdwfl here.
-
-2005-07-21 Ulrich Drepper <drepper@redhat.com>
-
- * testfile18.bz2: New file.
- * run-elflint-test.sh: New file.
- * Makefile.am (TESTS): Add run-elflint-test.sh.
- (EXTRA_DIST): Add run-elflint-test.sh and testfile18.bz2.
-
-2005-05-24 Ulrich Drepper <drepper@redhat.com>
-
- * get-files.c (main): Use correct format specifier.
-
-2005-05-21 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: Add -Wextra to CFLAGS.
- * get-files.c: Remove warning this produced.
- * get-pubnames.c: Likewise.
- * newfile.c: Likewise.
- * newscn.c: Likewise.
- * scnnames.c: Likewise.
- * showptable.c: Likewise.
- * test-nlist.c: Likewise.
- * update1.c: Likewise.
- * update2.c: Likewise.
- * update3.c: Likewise.
- * update4.c: Likewise.
-
-2005-05-08 Ulrich Drepper <drepper@redhat.com>
-
- * run-line2addr.sh: Remove testfile14 at the end.
-
- * run-strip-test.sh: Remove debuginfo test input file as well.
-
- * Makefile.am (EXTRA_DIST): Newly added files incorrectly used
- .bz, not .bz2.
-
-2005-05-03 Roland McGrath <roland@redhat.com>
-
- * run-strip-test.sh: Use variables for test file names.
- Optionally produce separate debug file and check it.
- * run-strip-test2.sh: Use run-strip-test.sh via ., no duplication.
- * run-strip-test3.sh: Likewise.
- * run-strip-test4.sh: New file.
- * run-strip-test5.sh: New file.
- * run-strip-test6.sh: New file.
- * testfile15.bz: New file.
- * testfile15.debug.bz: New file.
- * testfile16.bz: New file.
- * testfile16.debug.bz: New file.
- * testfile17.bz: New file.
- * testfile17.debug.bz: New file.
- * Makefile.am (TESTS, EXTRA_DIST): Add them.
-
-2005-04-25 Ulrich Drepper <drepper@redhat.com>
-
- * run-line2addr.sh: Also use testfile14. Adjust for correct
- return of multiple matches.
- * testfile14.bz2: New file.
- * Makefile.am (EXTRA_DIST): Add testfile14.bz2.
-
- * show-abbrev.c (main): Adjust for dwarf_getabbrev interface change.
-
-2005-04-04 Roland McGrath <roland@redhat.com>
-
- * line2addr.c (main): Initialize LINES and NLINES before calling
- dwarf_getsrc_file, and free LINES afterwards.
-
- * allfcts.c (main): Use size_t for CUHL.
-
-2005-04-04 Ulrich Drepper <drepper@redhat.com>
-
- * line2addr.c: New file.
- * run-line2addr.sh: New file.
- * Makefile.am: Add rules to build, run, and distribute new code.
-
-2005-04-02 Ulrich Drepper <drepper@redhat.com>
-
- * allfcts.c: New file.
- * run-allfcts.sh: New file.
- * Makefile.am: Add rules to build, run, and distribute new code.
-
-2005-02-05 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am [MUDFLAP] (AM_CFLAGS): Add -fmudflap. Link all test
- programs with -lmudflap.
-
-2004-09-25 Ulrich Drepper <drepper@redhat.com>
-
- * asm-tst4.c (main): Add LD_LIBRARY_PATH to elflint invocation.
- * asm-tst5.c (main): Likewise.
- * asm-tst6.c (main): Likewise.
-
-2004-01-17 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.am: Support building with mudflap.
-
-2004-01-12 Ulrich Drepper <drepper@redhat.com>
-
- * get-aranges.c: Rewrite to use libdw.
- * Makefile.am: Reenable get-aranges test.
-
-2004-01-11 Ulrich Drepper <drepper@redhat.com>
-
- * get-lines.c: New file.
- * get-files.c: Adjust for libdw.
- * run-get-files.sh: Adjust expected result.
- * run-get-lines.sh: Likewise.
- * Makefile.am: Run get-lines test. Don't run get-aranges and
- get-ciefde test for now.
-
- * show-abbrev.c: Adjust call to dwarf_getabbrevattr after interface
- change. Print attribute offset information.
- * run-show-abbrev.sh: Adjust expected output.
-
-2004-01-09 Ulrich Drepper <drepper@redhat.com>
-
- * show-abbrev.c: Adjust call to dwarf_nextcu after interface change.
- * show-die-info.c: Likewise.
- * run-show-die-info.sh: Adjust expected output.
-
-2003-08-13 Ulrich Drepper <drepper@redhat.com>
-
- * Makefile.in: Depend on libebl.a, not libebl.so.
-
-2003-08-11 Ulrich Drepper <drepper@redhat.com>
-
- * Moved to CVS archive.
diff --git a/tests/Makefile.am b/tests/Makefile.am
deleted file mode 100644
index b533521..0000000
--- a/tests/Makefile.am
+++ /dev/null
@@ -1,244 +0,0 @@
-## Process this file with automake to create Makefile.in
-##
-## Copyright (C) 1996-2002, 2003, 2004, 2005, 2006, 2007, 2008 Red Hat, Inc.
-## This file is part of Red Hat elfutils.
-##
-## Red Hat elfutils is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by the
-## Free Software Foundation; version 2 of the License.
-##
-## Red Hat elfutils 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
-## General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License along
-## with Red Hat elfutils; if not, write to the Free Software Foundation,
-## Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-##
-## Red Hat elfutils is an included package of the Open Invention Network.
-## An included package of the Open Invention Network is a package for which
-## Open Invention Network licensees cross-license their patents. No patent
-## license is granted, either expressly or impliedly, by designation as an
-## included package. Should you wish to participate in the Open Invention
-## Network licensing program, please visit www.openinventionnetwork.com
-## <http://www.openinventionnetwork.com>.
-##
-DEFS = -DHAVE_CONFIG_H -D_GNU_SOURCE
-if MUDFLAP
-AM_CFLAGS = -Wall -Werror -Wextra -std=gnu99 -fmudflap\
- $(if $($(*F)_no_Wformat),-Wno-format,-Wformat=2)
-BUILD_RPATH = \$$ORIGIN/../backends
-else
-AM_CFLAGS = -Wall -Werror -Wextra -std=gnu99 \
- $(if $($(*F)_no_Wformat),-Wno-format,-Wformat=2)
-BUILT_RPATH = \$$ORIGIN/../libasm:\$$ORIGIN/../libdw:\$$ORIGIN/../backends:\$$ORIGIN/../libelf
-endif
-
-AM_LDFLAGS =
-
-if !STANDALONE
-INCLUDES = -I$(top_srcdir)/libasm -I$(top_srcdir)/libdw \
- -I$(top_srcdir)/libdwfl \
- -I$(top_srcdir)/libebl -I$(top_srcdir)/libelf \
- -I$(top_srcdir)/lib -I..
-AM_LDFLAGS += -Wl,-rpath-link,../libasm:../libdw:../libelf
-endif !STANDALONE
-
-if TESTS_RPATH
-AM_LDFLAGS += -Wl,-rpath,$(BUILT_RPATH)
-tests_rpath = yes
-else
-tests_rpath = no
-endif
-
-noinst_PROGRAMS = arextract arsymtest newfile saridx scnnames sectiondump \
- showptable update1 update2 update3 update4 test-nlist \
- show-die-info get-files get-lines get-pubnames \
- get-aranges allfcts line2addr addrscopes funcscopes \
- show-abbrev hash newscn ecp dwflmodtest \
- find-prologues funcretval allregs rdwrmmap \
- dwfl-bug-addr-overflow arls dwfl-bug-fd-leak \
- dwfl-addr-sect dwfl-bug-report early-offscn \
- dwfl-bug-getmodules
-# get-ciefde
-asm_TESTS = asm-tst1 asm-tst2 asm-tst3 asm-tst4 asm-tst5 \
- asm-tst6 asm-tst7 asm-tst8 asm-tst9
-
-TESTS = run-arextract.sh run-arsymtest.sh newfile test-nlist \
- update1 update2 update3 update4 \
- run-show-die-info.sh run-get-files.sh run-get-lines.sh \
- run-get-pubnames.sh run-get-aranges.sh run-allfcts.sh \
- run-show-abbrev.sh run-line2addr.sh hash \
- newscn run-strip-test.sh run-strip-test2.sh \
- run-strip-test3.sh run-strip-test4.sh run-strip-test5.sh \
- run-strip-test6.sh run-strip-test7.sh run-strip-test8.sh \
- run-unstrip-test.sh run-unstrip-test2.sh \
- run-ecp-test.sh run-ecp-test2.sh \
- run-elflint-test.sh run-elflint-self.sh run-ranlib-test.sh \
- run-ranlib-test2.sh run-ranlib-test3.sh run-ranlib-test4.sh \
- run-addrscopes.sh run-strings-test.sh run-funcscopes.sh \
- run-find-prologues.sh run-allregs.sh \
- run-readelf-test1.sh run-readelf-test2.sh run-readelf-test3.sh \
- run-readelf-test4.sh \
- run-native-test.sh run-bug1-test.sh \
- dwfl-bug-addr-overflow run-addrname-test.sh \
- dwfl-bug-fd-leak dwfl-bug-report \
- run-dwfl-bug-offline-rel.sh run-dwfl-addr-sect.sh \
- run-disasm-x86.sh run-disasm-x86-64.sh \
- run-early-offscn.sh
-# run-show-ciefde.sh
-
-if !STANDALONE
-noinst_PROGRAMS += msg_tst sha1-tst
-TESTS += msg_tst sha1-tst
-endif
-
-if HAVE_LIBASM
-noinst_PROGRAMS += $(asm_TESTS)
-TESTS += $(asm_TESTS)
-endif
-
-
-EXTRA_DIST = run-arextract.sh run-arsymtest.sh \
- run-show-die-info.sh run-get-files.sh run-get-lines.sh \
- run-get-pubnames.sh run-get-aranges.sh \
- run-show-ciefde.sh run-show-abbrev.sh run-strip-test.sh \
- run-strip-test2.sh run-ecp-test.sh run-ecp-test2.sh \
- testfile.bz2 testfile2.bz2 testfile3.bz2 testfile4.bz2 \
- testfile5.bz2 testfile6.bz2 testfile7.bz2 testfile8.bz2 \
- testfile9.bz2 testfile10.bz2 testfile11.bz2 testfile12.bz2 \
- testfile13.bz2 run-strip-test3.sh run-allfcts.sh \
- run-line2addr.sh run-elflint-test.sh testfile14.bz2 \
- run-strip-test4.sh run-strip-test5.sh run-strip-test6.sh \
- run-strip-test7.sh run-strip-test8.sh \
- run-unstrip-test.sh run-unstrip-test2.sh \
- run-elflint-self.sh run-ranlib-test.sh run-ranlib-test2.sh \
- run-ranlib-test3.sh run-ranlib-test4.sh \
- run-addrscopes.sh run-strings-test.sh run-funcscopes.sh \
- run-find-prologues.sh run-allregs.sh run-native-test.sh \
- run-addrname-test.sh run-dwfl-bug-offline-rel.sh \
- run-dwfl-addr-sect.sh run-early-offscn.sh \
- testfile15.bz2 testfile15.debug.bz2 \
- testfile16.bz2 testfile16.debug.bz2 \
- testfile17.bz2 testfile17.debug.bz2 \
- testfile18.bz2 testfile19.bz2 testfile19.index.bz2 \
- testfile20.bz2 testfile20.index.bz2 \
- testfile21.bz2 testfile21.index.bz2 \
- testfile22.bz2 testfile23.bz2 testfile24.bz2 testfile25.bz2 \
- testfile26.bz2 testfile27.bz2 \
- coverage.sh test-subr.sh test-wrapper.sh \
- run-readelf-test1.sh run-readelf-test2.sh run-readelf-test3.sh \
- run-readelf-test4.sh \
- run-bug1-test.sh testfile28.bz2 testfile28.rdwr.bz2 \
- testfile29.bz2 testfile29.rdwr.bz2 \
- testfile30.bz2 testfile31.bz2 testfile32.bz2 testfile33.bz2 \
- testfile34.bz2 testfile35.bz2 testfile35.debug.bz2 \
- testfile36.bz2 testfile36.debug.bz2 \
- testfile37.bz2 testfile37.debug.bz2 \
- testfile38.bz2 testfile39.bz2 testfile40.bz2 testfile40.debug.bz2 \
- testfile41.bz2 testfile42.bz2 testfile43.bz2 \
- testfile44.S.bz2 testfile44.expect.bz2 run-disasm-x86.sh \
- testfile45.S.bz2 testfile45.expect.bz2 run-disasm-x86-64.sh \
- testfile46.bz2 testfile47.bz2 testfile48.bz2 testfile48.debug.bz2 \
- testfile49.bz2
-
-installed_TESTS_ENVIRONMENT = libdir=$(DESTDIR)$(libdir) \
- bindir=$(DESTDIR)$(bindir) \
- $(srcdir)/test-wrapper.sh \
- installed $(tests_rpath) \
- $(program_transform_name)
-if STANDALONE
-TESTS_ENVIRONMENT = $(installed_TESTS_ENVIRONMENT)
-else !STANDALONE
-TESTS_ENVIRONMENT = $(srcdir)/test-wrapper.sh \
- ../libdw:../backends:../libelf:../libasm
-
-installcheck-local:
- $(MAKE) $(AM_MAKEFLAGS) \
- TESTS_ENVIRONMENT='$(installed_TESTS_ENVIRONMENT)' check-TESTS
-endif !STANDALONE
-
-if MUDFLAP
-static_build=yes
-libmudflap = -lmudflap
-endif
-
-if STANDALONE
-libdw = -ldw
-libelf = -lelf
-libasm = -lasm
-libebl = -lebl
-else !STANDALONE
-if BUILD_STATIC
-libdw = ../libdw/libdw.a $(libelf) $(libebl) -ldl
-libelf = ../libelf/libelf.a
-libasm = ../libasm/libasm.a
-else
-libdw = ../libdw/libdw.so
-libelf = ../libelf/libelf.so
-libasm = ../libasm/libasm.so
-endif
-libebl = ../libebl/libebl.a
-libeu = ../lib/libeu.a
-endif !STANDALONE
-
-arextract_LDADD = $(libelf) $(libmudflap)
-arsymtest_LDADD = $(libelf) $(libmudflap)
-newfile_LDADD = $(libelf) $(libmudflap)
-saridx_LDADD = $(libelf) $(libmudflap)
-scnnames_LDADD = $(libelf) $(libmudflap)
-sectiondump_LDADD = $(libelf) $(libmudflap)
-showptable_LDADD = $(libelf) $(libmudflap)
-hash_LDADD = $(libelf) $(libmudflap)
-test_nlist_LDADD = $(libelf) $(libmudflap)
-msg_tst_LDADD = $(libelf) $(libmudflap)
-newscn_LDADD = $(libelf) $(libmudflap)
-early_offscn_LDADD = $(libelf) $(libmudflap)
-ecp_LDADD = $(libelf) $(libmudflap)
-update1_LDADD = $(libelf) $(libmudflap)
-update2_LDADD = $(libelf) $(libmudflap)
-update3_LDADD = $(libebl) $(libelf) $(libmudflap)
-update4_LDADD = $(libebl) $(libelf) $(libmudflap)
-show_die_info_LDADD = $(libdw) $(libelf) $(libmudflap)
-get_pubnames_LDADD = $(libdw) $(libelf) $(libmudflap)
-show_abbrev_LDADD = $(libdw) $(libelf) $(libmudflap)
-get_lines_LDADD = $(libdw) $(libelf) $(libmudflap)
-get_files_LDADD = $(libdw) $(libelf) $(libmudflap)
-get_aranges_LDADD = $(libdw) $(libelf) $(libmudflap)
-allfcts_LDADD = $(libdw) $(libelf) $(libmudflap)
-line2addr_no_Wformat = yes
-line2addr_LDADD = $(libdw) $(libmudflap)
-addrscopes_LDADD = $(libdw) $(libmudflap)
-funcscopes_LDADD = $(libdw) $(libmudflap)
-funcretval_LDADD = $(libdw) $(libmudflap)
-allregs_LDADD = $(libdw) $(libmudflap)
-find_prologues_LDADD = $(libdw) $(libmudflap)
-#show_ciefde_LDADD = ../libdwarf/libdwarf.so $(libelf) $(libmudflap)
-asm_tst1_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl
-asm_tst2_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl
-asm_tst3_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl
-asm_tst4_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl
-asm_tst5_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl
-asm_tst6_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl
-asm_tst7_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl
-asm_tst8_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl
-asm_tst9_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl
-dwflmodtest_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl
-rdwrmmap_LDADD = $(libelf)
-dwfl_bug_addr_overflow_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl
-arls_LDADD = $(libelf) $(libmudflap)
-dwfl_bug_fd_leak_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl
-dwfl_bug_report_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl
-dwfl_bug_getmodules_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl
-dwfl_addr_sect_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl
-sha1_tst_LDADD = $(libeu) $(libmudflap)
-
-CLEANFILES = xxx *.gcno *.gcda *gconv
-
-if GCOV
-check: check-am coverage
-.PHONY: coverage
-coverage:
- -$(srcdir)/coverage.sh
-endif
diff --git a/tests/Makefile.in b/tests/Makefile.in
deleted file mode 100644
index 47a1cb9..0000000
--- a/tests/Makefile.in
+++ /dev/null
@@ -1,1077 +0,0 @@
-# Makefile.in generated by automake 1.10.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-@STANDALONE_FALSE@am__append_1 = -Wl,-rpath-link,../libasm:../libdw:../libelf
-@TESTS_RPATH_TRUE@am__append_2 = -Wl,-rpath,$(BUILT_RPATH)
-noinst_PROGRAMS = arextract$(EXEEXT) arsymtest$(EXEEXT) \
- newfile$(EXEEXT) saridx$(EXEEXT) scnnames$(EXEEXT) \
- sectiondump$(EXEEXT) showptable$(EXEEXT) update1$(EXEEXT) \
- update2$(EXEEXT) update3$(EXEEXT) update4$(EXEEXT) \
- test-nlist$(EXEEXT) show-die-info$(EXEEXT) get-files$(EXEEXT) \
- get-lines$(EXEEXT) get-pubnames$(EXEEXT) get-aranges$(EXEEXT) \
- allfcts$(EXEEXT) line2addr$(EXEEXT) addrscopes$(EXEEXT) \
- funcscopes$(EXEEXT) show-abbrev$(EXEEXT) hash$(EXEEXT) \
- newscn$(EXEEXT) ecp$(EXEEXT) dwflmodtest$(EXEEXT) \
- find-prologues$(EXEEXT) funcretval$(EXEEXT) allregs$(EXEEXT) \
- rdwrmmap$(EXEEXT) dwfl-bug-addr-overflow$(EXEEXT) \
- arls$(EXEEXT) dwfl-bug-fd-leak$(EXEEXT) \
- dwfl-addr-sect$(EXEEXT) dwfl-bug-report$(EXEEXT) \
- early-offscn$(EXEEXT) dwfl-bug-getmodules$(EXEEXT) \
- $(am__EXEEXT_1) $(am__EXEEXT_3)
-TESTS = run-arextract.sh run-arsymtest.sh newfile$(EXEEXT) \
- test-nlist$(EXEEXT) update1$(EXEEXT) update2$(EXEEXT) \
- update3$(EXEEXT) update4$(EXEEXT) run-show-die-info.sh \
- run-get-files.sh run-get-lines.sh run-get-pubnames.sh \
- run-get-aranges.sh run-allfcts.sh run-show-abbrev.sh \
- run-line2addr.sh hash$(EXEEXT) newscn$(EXEEXT) \
- run-strip-test.sh run-strip-test2.sh run-strip-test3.sh \
- run-strip-test4.sh run-strip-test5.sh run-strip-test6.sh \
- run-strip-test7.sh run-strip-test8.sh run-unstrip-test.sh \
- run-unstrip-test2.sh run-ecp-test.sh run-ecp-test2.sh \
- run-elflint-test.sh run-elflint-self.sh run-ranlib-test.sh \
- run-ranlib-test2.sh run-ranlib-test3.sh run-ranlib-test4.sh \
- run-addrscopes.sh run-strings-test.sh run-funcscopes.sh \
- run-find-prologues.sh run-allregs.sh run-readelf-test1.sh \
- run-readelf-test2.sh run-readelf-test3.sh run-readelf-test4.sh \
- run-native-test.sh run-bug1-test.sh \
- dwfl-bug-addr-overflow$(EXEEXT) run-addrname-test.sh \
- dwfl-bug-fd-leak$(EXEEXT) dwfl-bug-report$(EXEEXT) \
- run-dwfl-bug-offline-rel.sh run-dwfl-addr-sect.sh \
- run-disasm-x86.sh run-disasm-x86-64.sh run-early-offscn.sh \
- $(am__EXEEXT_1) $(am__EXEEXT_3)
-# run-show-ciefde.sh
-@STANDALONE_FALSE@am__append_3 = msg_tst sha1-tst
-@STANDALONE_FALSE@am__append_4 = msg_tst sha1-tst
-@HAVE_LIBASM_TRUE@am__append_5 = $(asm_TESTS)
-@HAVE_LIBASM_TRUE@am__append_6 = $(asm_TESTS)
-subdir = tests
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ChangeLog
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-@STANDALONE_FALSE@am__EXEEXT_1 = msg_tst$(EXEEXT) sha1-tst$(EXEEXT)
-am__EXEEXT_2 = asm-tst1$(EXEEXT) asm-tst2$(EXEEXT) asm-tst3$(EXEEXT) \
- asm-tst4$(EXEEXT) asm-tst5$(EXEEXT) asm-tst6$(EXEEXT) \
- asm-tst7$(EXEEXT) asm-tst8$(EXEEXT) asm-tst9$(EXEEXT)
-@HAVE_LIBASM_TRUE@am__EXEEXT_3 = $(am__EXEEXT_2)
-PROGRAMS = $(noinst_PROGRAMS)
-addrscopes_SOURCES = addrscopes.c
-addrscopes_OBJECTS = addrscopes.$(OBJEXT)
-@BUILD_STATIC_FALSE@@STANDALONE_FALSE@am__DEPENDENCIES_1 = \
-@BUILD_STATIC_FALSE@@STANDALONE_FALSE@ ../libelf/libelf.so
-@BUILD_STATIC_TRUE@@STANDALONE_FALSE@am__DEPENDENCIES_1 = \
-@BUILD_STATIC_TRUE@@STANDALONE_FALSE@ ../libelf/libelf.a
-@STANDALONE_FALSE@am__DEPENDENCIES_2 = ../libebl/libebl.a
-@BUILD_STATIC_FALSE@@STANDALONE_FALSE@am__DEPENDENCIES_3 = \
-@BUILD_STATIC_FALSE@@STANDALONE_FALSE@ ../libdw/libdw.so
-@BUILD_STATIC_TRUE@@STANDALONE_FALSE@am__DEPENDENCIES_3 = \
-@BUILD_STATIC_TRUE@@STANDALONE_FALSE@ ../libdw/libdw.a \
-@BUILD_STATIC_TRUE@@STANDALONE_FALSE@ $(am__DEPENDENCIES_1) \
-@BUILD_STATIC_TRUE@@STANDALONE_FALSE@ $(am__DEPENDENCIES_2)
-am__DEPENDENCIES_4 =
-addrscopes_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4)
-allfcts_SOURCES = allfcts.c
-allfcts_OBJECTS = allfcts.$(OBJEXT)
-allfcts_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_4)
-allregs_SOURCES = allregs.c
-allregs_OBJECTS = allregs.$(OBJEXT)
-allregs_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4)
-arextract_SOURCES = arextract.c
-arextract_OBJECTS = arextract.$(OBJEXT)
-arextract_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4)
-arls_SOURCES = arls.c
-arls_OBJECTS = arls.$(OBJEXT)
-arls_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4)
-arsymtest_SOURCES = arsymtest.c
-arsymtest_OBJECTS = arsymtest.$(OBJEXT)
-arsymtest_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4)
-asm_tst1_SOURCES = asm-tst1.c
-asm_tst1_OBJECTS = asm-tst1.$(OBJEXT)
-@BUILD_STATIC_FALSE@@STANDALONE_FALSE@am__DEPENDENCIES_5 = \
-@BUILD_STATIC_FALSE@@STANDALONE_FALSE@ ../libasm/libasm.so
-@BUILD_STATIC_TRUE@@STANDALONE_FALSE@am__DEPENDENCIES_5 = \
-@BUILD_STATIC_TRUE@@STANDALONE_FALSE@ ../libasm/libasm.a
-asm_tst1_DEPENDENCIES = $(am__DEPENDENCIES_5) $(am__DEPENDENCIES_2) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4)
-asm_tst2_SOURCES = asm-tst2.c
-asm_tst2_OBJECTS = asm-tst2.$(OBJEXT)
-asm_tst2_DEPENDENCIES = $(am__DEPENDENCIES_5) $(am__DEPENDENCIES_2) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4)
-asm_tst3_SOURCES = asm-tst3.c
-asm_tst3_OBJECTS = asm-tst3.$(OBJEXT)
-asm_tst3_DEPENDENCIES = $(am__DEPENDENCIES_5) $(am__DEPENDENCIES_2) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4)
-asm_tst4_SOURCES = asm-tst4.c
-asm_tst4_OBJECTS = asm-tst4.$(OBJEXT)
-asm_tst4_DEPENDENCIES = $(am__DEPENDENCIES_5) $(am__DEPENDENCIES_2) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4)
-asm_tst5_SOURCES = asm-tst5.c
-asm_tst5_OBJECTS = asm-tst5.$(OBJEXT)
-asm_tst5_DEPENDENCIES = $(am__DEPENDENCIES_5) $(am__DEPENDENCIES_2) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4)
-asm_tst6_SOURCES = asm-tst6.c
-asm_tst6_OBJECTS = asm-tst6.$(OBJEXT)
-asm_tst6_DEPENDENCIES = $(am__DEPENDENCIES_5) $(am__DEPENDENCIES_2) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4)
-asm_tst7_SOURCES = asm-tst7.c
-asm_tst7_OBJECTS = asm-tst7.$(OBJEXT)
-asm_tst7_DEPENDENCIES = $(am__DEPENDENCIES_5) $(am__DEPENDENCIES_2) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4)
-asm_tst8_SOURCES = asm-tst8.c
-asm_tst8_OBJECTS = asm-tst8.$(OBJEXT)
-asm_tst8_DEPENDENCIES = $(am__DEPENDENCIES_5) $(am__DEPENDENCIES_2) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4)
-asm_tst9_SOURCES = asm-tst9.c
-asm_tst9_OBJECTS = asm-tst9.$(OBJEXT)
-asm_tst9_DEPENDENCIES = $(am__DEPENDENCIES_5) $(am__DEPENDENCIES_2) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4)
-dwfl_addr_sect_SOURCES = dwfl-addr-sect.c
-dwfl_addr_sect_OBJECTS = dwfl-addr-sect.$(OBJEXT)
-dwfl_addr_sect_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_4)
-dwfl_bug_addr_overflow_SOURCES = dwfl-bug-addr-overflow.c
-dwfl_bug_addr_overflow_OBJECTS = dwfl-bug-addr-overflow.$(OBJEXT)
-dwfl_bug_addr_overflow_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_4)
-dwfl_bug_fd_leak_SOURCES = dwfl-bug-fd-leak.c
-dwfl_bug_fd_leak_OBJECTS = dwfl-bug-fd-leak.$(OBJEXT)
-dwfl_bug_fd_leak_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_4)
-dwfl_bug_getmodules_SOURCES = dwfl-bug-getmodules.c
-dwfl_bug_getmodules_OBJECTS = dwfl-bug-getmodules.$(OBJEXT)
-dwfl_bug_getmodules_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_4)
-dwfl_bug_report_SOURCES = dwfl-bug-report.c
-dwfl_bug_report_OBJECTS = dwfl-bug-report.$(OBJEXT)
-dwfl_bug_report_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_4)
-dwflmodtest_SOURCES = dwflmodtest.c
-dwflmodtest_OBJECTS = dwflmodtest.$(OBJEXT)
-dwflmodtest_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_2) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4)
-early_offscn_SOURCES = early-offscn.c
-early_offscn_OBJECTS = early-offscn.$(OBJEXT)
-early_offscn_DEPENDENCIES = $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_4)
-ecp_SOURCES = ecp.c
-ecp_OBJECTS = ecp.$(OBJEXT)
-ecp_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4)
-find_prologues_SOURCES = find-prologues.c
-find_prologues_OBJECTS = find-prologues.$(OBJEXT)
-find_prologues_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_4)
-funcretval_SOURCES = funcretval.c
-funcretval_OBJECTS = funcretval.$(OBJEXT)
-funcretval_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4)
-funcscopes_SOURCES = funcscopes.c
-funcscopes_OBJECTS = funcscopes.$(OBJEXT)
-funcscopes_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4)
-get_aranges_SOURCES = get-aranges.c
-get_aranges_OBJECTS = get-aranges.$(OBJEXT)
-get_aranges_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_4)
-get_files_SOURCES = get-files.c
-get_files_OBJECTS = get-files.$(OBJEXT)
-get_files_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_4)
-get_lines_SOURCES = get-lines.c
-get_lines_OBJECTS = get-lines.$(OBJEXT)
-get_lines_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_4)
-get_pubnames_SOURCES = get-pubnames.c
-get_pubnames_OBJECTS = get-pubnames.$(OBJEXT)
-get_pubnames_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4)
-hash_SOURCES = hash.c
-hash_OBJECTS = hash.$(OBJEXT)
-hash_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4)
-line2addr_SOURCES = line2addr.c
-line2addr_OBJECTS = line2addr.$(OBJEXT)
-line2addr_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4)
-msg_tst_SOURCES = msg_tst.c
-msg_tst_OBJECTS = msg_tst.$(OBJEXT)
-msg_tst_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4)
-newfile_SOURCES = newfile.c
-newfile_OBJECTS = newfile.$(OBJEXT)
-newfile_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4)
-newscn_SOURCES = newscn.c
-newscn_OBJECTS = newscn.$(OBJEXT)
-newscn_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4)
-rdwrmmap_SOURCES = rdwrmmap.c
-rdwrmmap_OBJECTS = rdwrmmap.$(OBJEXT)
-rdwrmmap_DEPENDENCIES = $(am__DEPENDENCIES_1)
-saridx_SOURCES = saridx.c
-saridx_OBJECTS = saridx.$(OBJEXT)
-saridx_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4)
-scnnames_SOURCES = scnnames.c
-scnnames_OBJECTS = scnnames.$(OBJEXT)
-scnnames_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4)
-sectiondump_SOURCES = sectiondump.c
-sectiondump_OBJECTS = sectiondump.$(OBJEXT)
-sectiondump_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4)
-sha1_tst_SOURCES = sha1-tst.c
-sha1_tst_OBJECTS = sha1-tst.$(OBJEXT)
-sha1_tst_DEPENDENCIES = $(libeu) $(am__DEPENDENCIES_4)
-show_abbrev_SOURCES = show-abbrev.c
-show_abbrev_OBJECTS = show-abbrev.$(OBJEXT)
-show_abbrev_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_4)
-show_die_info_SOURCES = show-die-info.c
-show_die_info_OBJECTS = show-die-info.$(OBJEXT)
-show_die_info_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4)
-showptable_SOURCES = showptable.c
-showptable_OBJECTS = showptable.$(OBJEXT)
-showptable_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4)
-test_nlist_SOURCES = test-nlist.c
-test_nlist_OBJECTS = test-nlist.$(OBJEXT)
-test_nlist_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4)
-update1_SOURCES = update1.c
-update1_OBJECTS = update1.$(OBJEXT)
-update1_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4)
-update2_SOURCES = update2.c
-update2_OBJECTS = update2.$(OBJEXT)
-update2_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4)
-update3_SOURCES = update3.c
-update3_OBJECTS = update3.$(OBJEXT)
-update3_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_4)
-update4_SOURCES = update4.c
-update4_OBJECTS = update4.$(OBJEXT)
-update4_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_4)
-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-SOURCES = addrscopes.c allfcts.c allregs.c arextract.c arls.c \
- arsymtest.c asm-tst1.c asm-tst2.c asm-tst3.c asm-tst4.c \
- asm-tst5.c asm-tst6.c asm-tst7.c asm-tst8.c asm-tst9.c \
- dwfl-addr-sect.c dwfl-bug-addr-overflow.c dwfl-bug-fd-leak.c \
- dwfl-bug-getmodules.c dwfl-bug-report.c dwflmodtest.c \
- early-offscn.c ecp.c find-prologues.c funcretval.c \
- funcscopes.c get-aranges.c get-files.c get-lines.c \
- get-pubnames.c hash.c line2addr.c msg_tst.c newfile.c newscn.c \
- rdwrmmap.c saridx.c scnnames.c sectiondump.c sha1-tst.c \
- show-abbrev.c show-die-info.c showptable.c test-nlist.c \
- update1.c update2.c update3.c update4.c
-DIST_SOURCES = addrscopes.c allfcts.c allregs.c arextract.c arls.c \
- arsymtest.c asm-tst1.c asm-tst2.c asm-tst3.c asm-tst4.c \
- asm-tst5.c asm-tst6.c asm-tst7.c asm-tst8.c asm-tst9.c \
- dwfl-addr-sect.c dwfl-bug-addr-overflow.c dwfl-bug-fd-leak.c \
- dwfl-bug-getmodules.c dwfl-bug-report.c dwflmodtest.c \
- early-offscn.c ecp.c find-prologues.c funcretval.c \
- funcscopes.c get-aranges.c get-files.c get-lines.c \
- get-pubnames.c hash.c line2addr.c msg_tst.c newfile.c newscn.c \
- rdwrmmap.c saridx.c scnnames.c sectiondump.c sha1-tst.c \
- show-abbrev.c show-die-info.c showptable.c test-nlist.c \
- update1.c update2.c update3.c update4.c
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEBUGPRED = @DEBUGPRED@
-DEFS = -DHAVE_CONFIG_H -D_GNU_SOURCE
-DEPDIR = @DEPDIR@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EXEEXT = @EXEEXT@
-GMSGFMT = @GMSGFMT@
-GMSGFMT_015 = @GMSGFMT_015@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LDFLAGS = @LDFLAGS@
-LEX = @LEX@
-LEXLIB = @LEXLIB@
-LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
-LIBEBL_SUBDIR = @LIBEBL_SUBDIR@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LOCALEDIR = @LOCALEDIR@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MKDIR_P = @MKDIR_P@
-MODVERSION = @MODVERSION@
-MSGFMT = @MSGFMT@
-MSGFMT_015 = @MSGFMT_015@
-MSGMERGE = @MSGMERGE@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-RANLIB = @RANLIB@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-USE_NLS = @USE_NLS@
-VERSION = @VERSION@
-XGETTEXT = @XGETTEXT@
-XGETTEXT_015 = @XGETTEXT_015@
-YACC = @YACC@
-YFLAGS = @YFLAGS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-base_cpu = @base_cpu@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-eu_version = @eu_version@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-@MUDFLAP_FALSE@AM_CFLAGS = -Wall -Werror -Wextra -std=gnu99 \
-@MUDFLAP_FALSE@ $(if $($(*F)_no_Wformat),-Wno-format,-Wformat=2)
-
-@MUDFLAP_TRUE@AM_CFLAGS = -Wall -Werror -Wextra -std=gnu99 -fmudflap\
-@MUDFLAP_TRUE@ $(if $($(*F)_no_Wformat),-Wno-format,-Wformat=2)
-
-@MUDFLAP_TRUE@BUILD_RPATH = \$$ORIGIN/../backends
-@MUDFLAP_FALSE@BUILT_RPATH = \$$ORIGIN/../libasm:\$$ORIGIN/../libdw:\$$ORIGIN/../backends:\$$ORIGIN/../libelf
-AM_LDFLAGS = $(am__append_1) $(am__append_2)
-@STANDALONE_FALSE@INCLUDES = -I$(top_srcdir)/libasm -I$(top_srcdir)/libdw \
-@STANDALONE_FALSE@ -I$(top_srcdir)/libdwfl \
-@STANDALONE_FALSE@ -I$(top_srcdir)/libebl -I$(top_srcdir)/libelf \
-@STANDALONE_FALSE@ -I$(top_srcdir)/lib -I..
-
-@TESTS_RPATH_FALSE@tests_rpath = no
-@TESTS_RPATH_TRUE@tests_rpath = yes
-# get-ciefde
-asm_TESTS = asm-tst1 asm-tst2 asm-tst3 asm-tst4 asm-tst5 \
- asm-tst6 asm-tst7 asm-tst8 asm-tst9
-
-EXTRA_DIST = run-arextract.sh run-arsymtest.sh \
- run-show-die-info.sh run-get-files.sh run-get-lines.sh \
- run-get-pubnames.sh run-get-aranges.sh \
- run-show-ciefde.sh run-show-abbrev.sh run-strip-test.sh \
- run-strip-test2.sh run-ecp-test.sh run-ecp-test2.sh \
- testfile.bz2 testfile2.bz2 testfile3.bz2 testfile4.bz2 \
- testfile5.bz2 testfile6.bz2 testfile7.bz2 testfile8.bz2 \
- testfile9.bz2 testfile10.bz2 testfile11.bz2 testfile12.bz2 \
- testfile13.bz2 run-strip-test3.sh run-allfcts.sh \
- run-line2addr.sh run-elflint-test.sh testfile14.bz2 \
- run-strip-test4.sh run-strip-test5.sh run-strip-test6.sh \
- run-strip-test7.sh run-strip-test8.sh \
- run-unstrip-test.sh run-unstrip-test2.sh \
- run-elflint-self.sh run-ranlib-test.sh run-ranlib-test2.sh \
- run-ranlib-test3.sh run-ranlib-test4.sh \
- run-addrscopes.sh run-strings-test.sh run-funcscopes.sh \
- run-find-prologues.sh run-allregs.sh run-native-test.sh \
- run-addrname-test.sh run-dwfl-bug-offline-rel.sh \
- run-dwfl-addr-sect.sh run-early-offscn.sh \
- testfile15.bz2 testfile15.debug.bz2 \
- testfile16.bz2 testfile16.debug.bz2 \
- testfile17.bz2 testfile17.debug.bz2 \
- testfile18.bz2 testfile19.bz2 testfile19.index.bz2 \
- testfile20.bz2 testfile20.index.bz2 \
- testfile21.bz2 testfile21.index.bz2 \
- testfile22.bz2 testfile23.bz2 testfile24.bz2 testfile25.bz2 \
- testfile26.bz2 testfile27.bz2 \
- coverage.sh test-subr.sh test-wrapper.sh \
- run-readelf-test1.sh run-readelf-test2.sh run-readelf-test3.sh \
- run-readelf-test4.sh \
- run-bug1-test.sh testfile28.bz2 testfile28.rdwr.bz2 \
- testfile29.bz2 testfile29.rdwr.bz2 \
- testfile30.bz2 testfile31.bz2 testfile32.bz2 testfile33.bz2 \
- testfile34.bz2 testfile35.bz2 testfile35.debug.bz2 \
- testfile36.bz2 testfile36.debug.bz2 \
- testfile37.bz2 testfile37.debug.bz2 \
- testfile38.bz2 testfile39.bz2 testfile40.bz2 testfile40.debug.bz2 \
- testfile41.bz2 testfile42.bz2 testfile43.bz2 \
- testfile44.S.bz2 testfile44.expect.bz2 run-disasm-x86.sh \
- testfile45.S.bz2 testfile45.expect.bz2 run-disasm-x86-64.sh \
- testfile46.bz2 testfile47.bz2 testfile48.bz2 testfile48.debug.bz2 \
- testfile49.bz2
-
-installed_TESTS_ENVIRONMENT = libdir=$(DESTDIR)$(libdir) \
- bindir=$(DESTDIR)$(bindir) \
- $(srcdir)/test-wrapper.sh \
- installed $(tests_rpath) \
- $(program_transform_name)
-
-@STANDALONE_FALSE@TESTS_ENVIRONMENT = $(srcdir)/test-wrapper.sh \
-@STANDALONE_FALSE@ ../libdw:../backends:../libelf:../libasm
-
-@STANDALONE_TRUE@TESTS_ENVIRONMENT = $(installed_TESTS_ENVIRONMENT)
-@MUDFLAP_TRUE@static_build = yes
-@MUDFLAP_TRUE@libmudflap = -lmudflap
-@BUILD_STATIC_FALSE@@STANDALONE_FALSE@libdw = ../libdw/libdw.so
-@BUILD_STATIC_TRUE@@STANDALONE_FALSE@libdw = ../libdw/libdw.a $(libelf) $(libebl) -ldl
-@STANDALONE_TRUE@libdw = -ldw
-@BUILD_STATIC_FALSE@@STANDALONE_FALSE@libelf = ../libelf/libelf.so
-@BUILD_STATIC_TRUE@@STANDALONE_FALSE@libelf = ../libelf/libelf.a
-@STANDALONE_TRUE@libelf = -lelf
-@BUILD_STATIC_FALSE@@STANDALONE_FALSE@libasm = ../libasm/libasm.so
-@BUILD_STATIC_TRUE@@STANDALONE_FALSE@libasm = ../libasm/libasm.a
-@STANDALONE_TRUE@libasm = -lasm
-@STANDALONE_FALSE@libebl = ../libebl/libebl.a
-@STANDALONE_TRUE@libebl = -lebl
-@STANDALONE_FALSE@libeu = ../lib/libeu.a
-arextract_LDADD = $(libelf) $(libmudflap)
-arsymtest_LDADD = $(libelf) $(libmudflap)
-newfile_LDADD = $(libelf) $(libmudflap)
-saridx_LDADD = $(libelf) $(libmudflap)
-scnnames_LDADD = $(libelf) $(libmudflap)
-sectiondump_LDADD = $(libelf) $(libmudflap)
-showptable_LDADD = $(libelf) $(libmudflap)
-hash_LDADD = $(libelf) $(libmudflap)
-test_nlist_LDADD = $(libelf) $(libmudflap)
-msg_tst_LDADD = $(libelf) $(libmudflap)
-newscn_LDADD = $(libelf) $(libmudflap)
-early_offscn_LDADD = $(libelf) $(libmudflap)
-ecp_LDADD = $(libelf) $(libmudflap)
-update1_LDADD = $(libelf) $(libmudflap)
-update2_LDADD = $(libelf) $(libmudflap)
-update3_LDADD = $(libebl) $(libelf) $(libmudflap)
-update4_LDADD = $(libebl) $(libelf) $(libmudflap)
-show_die_info_LDADD = $(libdw) $(libelf) $(libmudflap)
-get_pubnames_LDADD = $(libdw) $(libelf) $(libmudflap)
-show_abbrev_LDADD = $(libdw) $(libelf) $(libmudflap)
-get_lines_LDADD = $(libdw) $(libelf) $(libmudflap)
-get_files_LDADD = $(libdw) $(libelf) $(libmudflap)
-get_aranges_LDADD = $(libdw) $(libelf) $(libmudflap)
-allfcts_LDADD = $(libdw) $(libelf) $(libmudflap)
-line2addr_no_Wformat = yes
-line2addr_LDADD = $(libdw) $(libmudflap)
-addrscopes_LDADD = $(libdw) $(libmudflap)
-funcscopes_LDADD = $(libdw) $(libmudflap)
-funcretval_LDADD = $(libdw) $(libmudflap)
-allregs_LDADD = $(libdw) $(libmudflap)
-find_prologues_LDADD = $(libdw) $(libmudflap)
-#show_ciefde_LDADD = ../libdwarf/libdwarf.so $(libelf) $(libmudflap)
-asm_tst1_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl
-asm_tst2_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl
-asm_tst3_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl
-asm_tst4_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl
-asm_tst5_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl
-asm_tst6_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl
-asm_tst7_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl
-asm_tst8_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl
-asm_tst9_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl
-dwflmodtest_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl
-rdwrmmap_LDADD = $(libelf)
-dwfl_bug_addr_overflow_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl
-arls_LDADD = $(libelf) $(libmudflap)
-dwfl_bug_fd_leak_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl
-dwfl_bug_report_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl
-dwfl_bug_getmodules_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl
-dwfl_addr_sect_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl
-sha1_tst_LDADD = $(libeu) $(libmudflap)
-CLEANFILES = xxx *.gcno *.gcda *gconv
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
- && exit 0; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits tests/Makefile'; \
- cd $(top_srcdir) && \
- $(AUTOMAKE) --gnits tests/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-clean-noinstPROGRAMS:
- -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
-addrscopes$(EXEEXT): $(addrscopes_OBJECTS) $(addrscopes_DEPENDENCIES)
- @rm -f addrscopes$(EXEEXT)
- $(LINK) $(addrscopes_OBJECTS) $(addrscopes_LDADD) $(LIBS)
-allfcts$(EXEEXT): $(allfcts_OBJECTS) $(allfcts_DEPENDENCIES)
- @rm -f allfcts$(EXEEXT)
- $(LINK) $(allfcts_OBJECTS) $(allfcts_LDADD) $(LIBS)
-allregs$(EXEEXT): $(allregs_OBJECTS) $(allregs_DEPENDENCIES)
- @rm -f allregs$(EXEEXT)
- $(LINK) $(allregs_OBJECTS) $(allregs_LDADD) $(LIBS)
-arextract$(EXEEXT): $(arextract_OBJECTS) $(arextract_DEPENDENCIES)
- @rm -f arextract$(EXEEXT)
- $(LINK) $(arextract_OBJECTS) $(arextract_LDADD) $(LIBS)
-arls$(EXEEXT): $(arls_OBJECTS) $(arls_DEPENDENCIES)
- @rm -f arls$(EXEEXT)
- $(LINK) $(arls_OBJECTS) $(arls_LDADD) $(LIBS)
-arsymtest$(EXEEXT): $(arsymtest_OBJECTS) $(arsymtest_DEPENDENCIES)
- @rm -f arsymtest$(EXEEXT)
- $(LINK) $(arsymtest_OBJECTS) $(arsymtest_LDADD) $(LIBS)
-asm-tst1$(EXEEXT): $(asm_tst1_OBJECTS) $(asm_tst1_DEPENDENCIES)
- @rm -f asm-tst1$(EXEEXT)
- $(LINK) $(asm_tst1_OBJECTS) $(asm_tst1_LDADD) $(LIBS)
-asm-tst2$(EXEEXT): $(asm_tst2_OBJECTS) $(asm_tst2_DEPENDENCIES)
- @rm -f asm-tst2$(EXEEXT)
- $(LINK) $(asm_tst2_OBJECTS) $(asm_tst2_LDADD) $(LIBS)
-asm-tst3$(EXEEXT): $(asm_tst3_OBJECTS) $(asm_tst3_DEPENDENCIES)
- @rm -f asm-tst3$(EXEEXT)
- $(LINK) $(asm_tst3_OBJECTS) $(asm_tst3_LDADD) $(LIBS)
-asm-tst4$(EXEEXT): $(asm_tst4_OBJECTS) $(asm_tst4_DEPENDENCIES)
- @rm -f asm-tst4$(EXEEXT)
- $(LINK) $(asm_tst4_OBJECTS) $(asm_tst4_LDADD) $(LIBS)
-asm-tst5$(EXEEXT): $(asm_tst5_OBJECTS) $(asm_tst5_DEPENDENCIES)
- @rm -f asm-tst5$(EXEEXT)
- $(LINK) $(asm_tst5_OBJECTS) $(asm_tst5_LDADD) $(LIBS)
-asm-tst6$(EXEEXT): $(asm_tst6_OBJECTS) $(asm_tst6_DEPENDENCIES)
- @rm -f asm-tst6$(EXEEXT)
- $(LINK) $(asm_tst6_OBJECTS) $(asm_tst6_LDADD) $(LIBS)
-asm-tst7$(EXEEXT): $(asm_tst7_OBJECTS) $(asm_tst7_DEPENDENCIES)
- @rm -f asm-tst7$(EXEEXT)
- $(LINK) $(asm_tst7_OBJECTS) $(asm_tst7_LDADD) $(LIBS)
-asm-tst8$(EXEEXT): $(asm_tst8_OBJECTS) $(asm_tst8_DEPENDENCIES)
- @rm -f asm-tst8$(EXEEXT)
- $(LINK) $(asm_tst8_OBJECTS) $(asm_tst8_LDADD) $(LIBS)
-asm-tst9$(EXEEXT): $(asm_tst9_OBJECTS) $(asm_tst9_DEPENDENCIES)
- @rm -f asm-tst9$(EXEEXT)
- $(LINK) $(asm_tst9_OBJECTS) $(asm_tst9_LDADD) $(LIBS)
-dwfl-addr-sect$(EXEEXT): $(dwfl_addr_sect_OBJECTS) $(dwfl_addr_sect_DEPENDENCIES)
- @rm -f dwfl-addr-sect$(EXEEXT)
- $(LINK) $(dwfl_addr_sect_OBJECTS) $(dwfl_addr_sect_LDADD) $(LIBS)
-dwfl-bug-addr-overflow$(EXEEXT): $(dwfl_bug_addr_overflow_OBJECTS) $(dwfl_bug_addr_overflow_DEPENDENCIES)
- @rm -f dwfl-bug-addr-overflow$(EXEEXT)
- $(LINK) $(dwfl_bug_addr_overflow_OBJECTS) $(dwfl_bug_addr_overflow_LDADD) $(LIBS)
-dwfl-bug-fd-leak$(EXEEXT): $(dwfl_bug_fd_leak_OBJECTS) $(dwfl_bug_fd_leak_DEPENDENCIES)
- @rm -f dwfl-bug-fd-leak$(EXEEXT)
- $(LINK) $(dwfl_bug_fd_leak_OBJECTS) $(dwfl_bug_fd_leak_LDADD) $(LIBS)
-dwfl-bug-getmodules$(EXEEXT): $(dwfl_bug_getmodules_OBJECTS) $(dwfl_bug_getmodules_DEPENDENCIES)
- @rm -f dwfl-bug-getmodules$(EXEEXT)
- $(LINK) $(dwfl_bug_getmodules_OBJECTS) $(dwfl_bug_getmodules_LDADD) $(LIBS)
-dwfl-bug-report$(EXEEXT): $(dwfl_bug_report_OBJECTS) $(dwfl_bug_report_DEPENDENCIES)
- @rm -f dwfl-bug-report$(EXEEXT)
- $(LINK) $(dwfl_bug_report_OBJECTS) $(dwfl_bug_report_LDADD) $(LIBS)
-dwflmodtest$(EXEEXT): $(dwflmodtest_OBJECTS) $(dwflmodtest_DEPENDENCIES)
- @rm -f dwflmodtest$(EXEEXT)
- $(LINK) $(dwflmodtest_OBJECTS) $(dwflmodtest_LDADD) $(LIBS)
-early-offscn$(EXEEXT): $(early_offscn_OBJECTS) $(early_offscn_DEPENDENCIES)
- @rm -f early-offscn$(EXEEXT)
- $(LINK) $(early_offscn_OBJECTS) $(early_offscn_LDADD) $(LIBS)
-ecp$(EXEEXT): $(ecp_OBJECTS) $(ecp_DEPENDENCIES)
- @rm -f ecp$(EXEEXT)
- $(LINK) $(ecp_OBJECTS) $(ecp_LDADD) $(LIBS)
-find-prologues$(EXEEXT): $(find_prologues_OBJECTS) $(find_prologues_DEPENDENCIES)
- @rm -f find-prologues$(EXEEXT)
- $(LINK) $(find_prologues_OBJECTS) $(find_prologues_LDADD) $(LIBS)
-funcretval$(EXEEXT): $(funcretval_OBJECTS) $(funcretval_DEPENDENCIES)
- @rm -f funcretval$(EXEEXT)
- $(LINK) $(funcretval_OBJECTS) $(funcretval_LDADD) $(LIBS)
-funcscopes$(EXEEXT): $(funcscopes_OBJECTS) $(funcscopes_DEPENDENCIES)
- @rm -f funcscopes$(EXEEXT)
- $(LINK) $(funcscopes_OBJECTS) $(funcscopes_LDADD) $(LIBS)
-get-aranges$(EXEEXT): $(get_aranges_OBJECTS) $(get_aranges_DEPENDENCIES)
- @rm -f get-aranges$(EXEEXT)
- $(LINK) $(get_aranges_OBJECTS) $(get_aranges_LDADD) $(LIBS)
-get-files$(EXEEXT): $(get_files_OBJECTS) $(get_files_DEPENDENCIES)
- @rm -f get-files$(EXEEXT)
- $(LINK) $(get_files_OBJECTS) $(get_files_LDADD) $(LIBS)
-get-lines$(EXEEXT): $(get_lines_OBJECTS) $(get_lines_DEPENDENCIES)
- @rm -f get-lines$(EXEEXT)
- $(LINK) $(get_lines_OBJECTS) $(get_lines_LDADD) $(LIBS)
-get-pubnames$(EXEEXT): $(get_pubnames_OBJECTS) $(get_pubnames_DEPENDENCIES)
- @rm -f get-pubnames$(EXEEXT)
- $(LINK) $(get_pubnames_OBJECTS) $(get_pubnames_LDADD) $(LIBS)
-hash$(EXEEXT): $(hash_OBJECTS) $(hash_DEPENDENCIES)
- @rm -f hash$(EXEEXT)
- $(LINK) $(hash_OBJECTS) $(hash_LDADD) $(LIBS)
-line2addr$(EXEEXT): $(line2addr_OBJECTS) $(line2addr_DEPENDENCIES)
- @rm -f line2addr$(EXEEXT)
- $(LINK) $(line2addr_OBJECTS) $(line2addr_LDADD) $(LIBS)
-msg_tst$(EXEEXT): $(msg_tst_OBJECTS) $(msg_tst_DEPENDENCIES)
- @rm -f msg_tst$(EXEEXT)
- $(LINK) $(msg_tst_OBJECTS) $(msg_tst_LDADD) $(LIBS)
-newfile$(EXEEXT): $(newfile_OBJECTS) $(newfile_DEPENDENCIES)
- @rm -f newfile$(EXEEXT)
- $(LINK) $(newfile_OBJECTS) $(newfile_LDADD) $(LIBS)
-newscn$(EXEEXT): $(newscn_OBJECTS) $(newscn_DEPENDENCIES)
- @rm -f newscn$(EXEEXT)
- $(LINK) $(newscn_OBJECTS) $(newscn_LDADD) $(LIBS)
-rdwrmmap$(EXEEXT): $(rdwrmmap_OBJECTS) $(rdwrmmap_DEPENDENCIES)
- @rm -f rdwrmmap$(EXEEXT)
- $(LINK) $(rdwrmmap_OBJECTS) $(rdwrmmap_LDADD) $(LIBS)
-saridx$(EXEEXT): $(saridx_OBJECTS) $(saridx_DEPENDENCIES)
- @rm -f saridx$(EXEEXT)
- $(LINK) $(saridx_OBJECTS) $(saridx_LDADD) $(LIBS)
-scnnames$(EXEEXT): $(scnnames_OBJECTS) $(scnnames_DEPENDENCIES)
- @rm -f scnnames$(EXEEXT)
- $(LINK) $(scnnames_OBJECTS) $(scnnames_LDADD) $(LIBS)
-sectiondump$(EXEEXT): $(sectiondump_OBJECTS) $(sectiondump_DEPENDENCIES)
- @rm -f sectiondump$(EXEEXT)
- $(LINK) $(sectiondump_OBJECTS) $(sectiondump_LDADD) $(LIBS)
-sha1-tst$(EXEEXT): $(sha1_tst_OBJECTS) $(sha1_tst_DEPENDENCIES)
- @rm -f sha1-tst$(EXEEXT)
- $(LINK) $(sha1_tst_OBJECTS) $(sha1_tst_LDADD) $(LIBS)
-show-abbrev$(EXEEXT): $(show_abbrev_OBJECTS) $(show_abbrev_DEPENDENCIES)
- @rm -f show-abbrev$(EXEEXT)
- $(LINK) $(show_abbrev_OBJECTS) $(show_abbrev_LDADD) $(LIBS)
-show-die-info$(EXEEXT): $(show_die_info_OBJECTS) $(show_die_info_DEPENDENCIES)
- @rm -f show-die-info$(EXEEXT)
- $(LINK) $(show_die_info_OBJECTS) $(show_die_info_LDADD) $(LIBS)
-showptable$(EXEEXT): $(showptable_OBJECTS) $(showptable_DEPENDENCIES)
- @rm -f showptable$(EXEEXT)
- $(LINK) $(showptable_OBJECTS) $(showptable_LDADD) $(LIBS)
-test-nlist$(EXEEXT): $(test_nlist_OBJECTS) $(test_nlist_DEPENDENCIES)
- @rm -f test-nlist$(EXEEXT)
- $(LINK) $(test_nlist_OBJECTS) $(test_nlist_LDADD) $(LIBS)
-update1$(EXEEXT): $(update1_OBJECTS) $(update1_DEPENDENCIES)
- @rm -f update1$(EXEEXT)
- $(LINK) $(update1_OBJECTS) $(update1_LDADD) $(LIBS)
-update2$(EXEEXT): $(update2_OBJECTS) $(update2_DEPENDENCIES)
- @rm -f update2$(EXEEXT)
- $(LINK) $(update2_OBJECTS) $(update2_LDADD) $(LIBS)
-update3$(EXEEXT): $(update3_OBJECTS) $(update3_DEPENDENCIES)
- @rm -f update3$(EXEEXT)
- $(LINK) $(update3_OBJECTS) $(update3_LDADD) $(LIBS)
-update4$(EXEEXT): $(update4_OBJECTS) $(update4_DEPENDENCIES)
- @rm -f update4$(EXEEXT)
- $(LINK) $(update4_OBJECTS) $(update4_LDADD) $(LIBS)
-
-mostlyclean-compile:
- -rm -f *.$(OBJEXT)
-
-distclean-compile:
- -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addrscopes.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/allfcts.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/allregs.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arextract.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arls.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arsymtest.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm-tst1.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm-tst2.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm-tst3.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm-tst4.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm-tst5.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm-tst6.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm-tst7.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm-tst8.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm-tst9.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl-addr-sect.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl-bug-addr-overflow.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl-bug-fd-leak.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl-bug-getmodules.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl-bug-report.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwflmodtest.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/early-offscn.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecp.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/find-prologues.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/funcretval.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/funcscopes.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/get-aranges.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/get-files.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/get-lines.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/get-pubnames.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hash.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/line2addr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msg_tst.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/newfile.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/newscn.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rdwrmmap.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saridx.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scnnames.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sectiondump.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha1-tst.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/show-abbrev.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/show-die-info.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/showptable.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-nlist.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/update1.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/update2.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/update3.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/update4.Po@am__quote@
-
-.c.o:
-@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
-
-.c.obj:
-@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- mkid -fID $$unique
-tags: TAGS
-
-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- here=`pwd`; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$tags $$unique; \
- fi
-ctags: CTAGS
-CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- test -z "$(CTAGS_ARGS)$$tags$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$tags $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && cd $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) $$here
-
-distclean-tags:
- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-check-TESTS: $(TESTS)
- @failed=0; all=0; xfail=0; xpass=0; skip=0; ws='[ ]'; \
- srcdir=$(srcdir); export srcdir; \
- list=' $(TESTS) '; \
- if test -n "$$list"; then \
- for tst in $$list; do \
- if test -f ./$$tst; then dir=./; \
- elif test -f $$tst; then dir=; \
- else dir="$(srcdir)/"; fi; \
- if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
- all=`expr $$all + 1`; \
- case " $(XFAIL_TESTS) " in \
- *$$ws$$tst$$ws*) \
- xpass=`expr $$xpass + 1`; \
- failed=`expr $$failed + 1`; \
- echo "XPASS: $$tst"; \
- ;; \
- *) \
- echo "PASS: $$tst"; \
- ;; \
- esac; \
- elif test $$? -ne 77; then \
- all=`expr $$all + 1`; \
- case " $(XFAIL_TESTS) " in \
- *$$ws$$tst$$ws*) \
- xfail=`expr $$xfail + 1`; \
- echo "XFAIL: $$tst"; \
- ;; \
- *) \
- failed=`expr $$failed + 1`; \
- echo "FAIL: $$tst"; \
- ;; \
- esac; \
- else \
- skip=`expr $$skip + 1`; \
- echo "SKIP: $$tst"; \
- fi; \
- done; \
- if test "$$failed" -eq 0; then \
- if test "$$xfail" -eq 0; then \
- banner="All $$all tests passed"; \
- else \
- banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
- fi; \
- else \
- if test "$$xpass" -eq 0; then \
- banner="$$failed of $$all tests failed"; \
- else \
- banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
- fi; \
- fi; \
- dashes="$$banner"; \
- skipped=""; \
- if test "$$skip" -ne 0; then \
- skipped="($$skip tests were not run)"; \
- test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
- dashes="$$skipped"; \
- fi; \
- report=""; \
- if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
- report="Please report to $(PACKAGE_BUGREPORT)"; \
- test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
- dashes="$$report"; \
- fi; \
- dashes=`echo "$$dashes" | sed s/./=/g`; \
- echo "$$dashes"; \
- echo "$$banner"; \
- test -z "$$skipped" || echo "$$skipped"; \
- test -z "$$report" || echo "$$report"; \
- echo "$$dashes"; \
- test "$$failed" -eq 0; \
- else :; fi
-
-distdir: $(DISTFILES)
- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- list='$(DISTFILES)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
- fi; \
- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
- else \
- test -f $(distdir)/$$file \
- || cp -p $$d/$$file $(distdir)/$$file \
- || exit 1; \
- fi; \
- done
-check-am: all-am
- $(MAKE) $(AM_MAKEFLAGS) check-TESTS
-check: check-am
-all-am: Makefile $(PROGRAMS)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-@STANDALONE_TRUE@installcheck-local:
-clean: clean-am
-
-clean-am: clean-generic clean-noinstPROGRAMS mostlyclean-am
-
-distclean: distclean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
- distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-info: install-info-am
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-ps: install-ps-am
-
-installcheck-am: installcheck-local
-
-maintainer-clean: maintainer-clean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
- clean-generic clean-noinstPROGRAMS ctags distclean \
- distclean-compile distclean-generic distclean-tags distdir dvi \
- dvi-am html html-am info info-am install install-am \
- install-data install-data-am install-dvi install-dvi-am \
- install-exec install-exec-am install-html install-html-am \
- install-info install-info-am install-man install-pdf \
- install-pdf-am install-ps install-ps-am install-strip \
- installcheck installcheck-am installcheck-local installdirs \
- maintainer-clean maintainer-clean-generic mostlyclean \
- mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
- tags uninstall uninstall-am
-
-
-@STANDALONE_FALSE@installcheck-local:
-@STANDALONE_FALSE@ $(MAKE) $(AM_MAKEFLAGS) \
-@STANDALONE_FALSE@ TESTS_ENVIRONMENT='$(installed_TESTS_ENVIRONMENT)' check-TESTS
-
-@GCOV_TRUE@check: check-am coverage
-@GCOV_TRUE@.PHONY: coverage
-@GCOV_TRUE@coverage:
-@GCOV_TRUE@ -$(srcdir)/coverage.sh
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/tests/addrscopes.c b/tests/addrscopes.c
deleted file mode 100644
index 3394cd2..0000000
--- a/tests/addrscopes.c
+++ /dev/null
@@ -1,203 +0,0 @@
-/* Test program for dwarf_getscopes.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <config.h>
-#include <assert.h>
-#include <inttypes.h>
-#include ELFUTILS_HEADER(dwfl)
-#include <dwarf.h>
-#include <argp.h>
-#include <stdio.h>
-#include <stdio_ext.h>
-#include <locale.h>
-#include <stdlib.h>
-#include <error.h>
-#include <string.h>
-
-
-static void
-paddr (const char *prefix, Dwarf_Addr addr, Dwfl_Line *line)
-{
- const char *src;
- int lineno, linecol;
- if (line != NULL
- && (src = dwfl_lineinfo (line, &addr, &lineno, &linecol,
- NULL, NULL)) != NULL)
- {
- if (linecol != 0)
- printf ("%s%#" PRIx64 " (%s:%d:%d)",
- prefix, addr, src, lineno, linecol);
- else
- printf ("%s%#" PRIx64 " (%s:%d)",
- prefix, addr, src, lineno);
- }
- else
- printf ("%s%#" PRIx64, prefix, addr);
-}
-
-static void
-print_vars (unsigned int indent, Dwarf_Die *die)
-{
- Dwarf_Die child;
- if (dwarf_child (die, &child) == 0)
- do
- switch (dwarf_tag (&child))
- {
- case DW_TAG_variable:
- case DW_TAG_formal_parameter:
- printf ("%*s%-30s[%6" PRIx64 "]\n", indent, "",
- dwarf_diename (&child),
- (uint64_t) dwarf_dieoffset (&child));
- break;
- default:
- break;
- }
- while (dwarf_siblingof (&child, &child) == 0);
-
- Dwarf_Attribute attr_mem;
- Dwarf_Die origin;
- if (dwarf_hasattr (die, DW_AT_abstract_origin)
- && dwarf_formref_die (dwarf_attr (die, DW_AT_abstract_origin, &attr_mem),
- &origin) != NULL
- && dwarf_child (&origin, &child) == 0)
- do
- switch (dwarf_tag (&child))
- {
- case DW_TAG_variable:
- case DW_TAG_formal_parameter:
- printf ("%*s%s (abstract)\n", indent, "",
- dwarf_diename (&child));
- break;
- default:
- break;
- }
- while (dwarf_siblingof (&child, &child) == 0);
-}
-
-
-#define INDENT 4
-
-static void
-handle_address (GElf_Addr pc, Dwfl *dwfl)
-{
- Dwarf_Addr cubias;
- Dwarf_Die *cudie = dwfl_addrdie (dwfl, pc, &cubias);
- if (cudie == NULL)
- error (EXIT_FAILURE, 0, "dwfl_addrdie: %s", dwfl_errmsg (-1));
-
- Dwarf_Die *scopes;
- int n = dwarf_getscopes (cudie, pc - cubias, &scopes);
- if (n < 0)
- error (EXIT_FAILURE, 0, "dwarf_getscopes: %s", dwarf_errmsg (-1));
- else if (n == 0)
- printf ("%#" PRIx64 ": not in any scope\n", pc);
- else
- {
- printf ("%#" PRIx64 ":\n", pc);
- unsigned int indent = 0;
- while (n-- > 0)
- {
- Dwarf_Die *const die = &scopes[n];
-
- indent += INDENT;
- printf ("%*s%s (%#x)", indent, "",
- dwarf_diename (die) ?: "<unnamed>",
- dwarf_tag (die));
-
- Dwarf_Addr lowpc, highpc;
- if (dwarf_lowpc (die, &lowpc) == 0
- && dwarf_highpc (die, &highpc) == 0)
- {
- lowpc += cubias;
- highpc += cubias;
- Dwfl_Line *loline = dwfl_getsrc (dwfl, lowpc);
- Dwfl_Line *hiline = dwfl_getsrc (dwfl, highpc);
- paddr (": ", lowpc, loline);
- if (highpc != lowpc)
- paddr (" .. ", lowpc, hiline == loline ? NULL : hiline);
- }
- puts ("");
-
- print_vars (indent + INDENT, die);
- }
- }
-}
-
-int
-main (int argc, char *argv[])
-{
- int remaining;
-
- /* Set locale. */
- (void) setlocale (LC_ALL, "");
-
- Dwfl *dwfl = NULL;
- (void) argp_parse (dwfl_standard_argp (), argc, argv, 0, &remaining, &dwfl);
- assert (dwfl != NULL);
-
- int result = 0;
-
- /* Now handle the addresses. In case none are given on the command
- line, read from stdin. */
- if (remaining == argc)
- {
- /* We use no threads here which can interfere with handling a stream. */
- (void) __fsetlocking (stdin, FSETLOCKING_BYCALLER);
-
- char *buf = NULL;
- size_t len = 0;
- while (!feof_unlocked (stdin))
- {
- if (getline (&buf, &len, stdin) < 0)
- break;
-
- char *endp;
- uintmax_t addr = strtoumax (buf, &endp, 0);
- if (endp != buf)
- handle_address (addr, dwfl);
- else
- result = 1;
- }
-
- free (buf);
- }
- else
- {
- do
- {
- char *endp;
- uintmax_t addr = strtoumax (argv[remaining], &endp, 0);
- if (endp != argv[remaining])
- handle_address (addr, dwfl);
- else
- result = 1;
- }
- while (++remaining < argc);
- }
-
- dwfl_end (dwfl);
-
- return result;
-}
diff --git a/tests/allfcts.c b/tests/allfcts.c
deleted file mode 100644
index 5fed814..0000000
--- a/tests/allfcts.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/* Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <fcntl.h>
-#include ELFUTILS_HEADER(dw)
-#include <stdio.h>
-#include <unistd.h>
-
-
-static int
-cb (Dwarf_Die *func, void *arg __attribute__ ((unused)))
-{
- const char *file = dwarf_decl_file (func);
- int line = -1;
- dwarf_decl_line (func, &line);
- const char *fct = dwarf_diename (func);
-
- printf ("%s:%d:%s\n", file, line, fct);
-
- return DWARF_CB_OK;
-}
-
-
-int
-main (int argc, char *argv[])
-{
- for (int i = 1; i < argc; ++i)
- {
- int fd = open (argv[i], O_RDONLY);
-
- Dwarf *dbg = dwarf_begin (fd, DWARF_C_READ);
- if (dbg != NULL)
- {
- Dwarf_Off off = 0;
- size_t cuhl;
- Dwarf_Off noff;
-
- while (dwarf_nextcu (dbg, off, &noff, &cuhl, NULL, NULL, NULL) == 0)
- {
- Dwarf_Die die_mem;
- Dwarf_Die *die = dwarf_offdie (dbg, off + cuhl, &die_mem);
-
- (void) dwarf_getfuncs (die, cb, NULL, 0);
-
- off = noff;
- }
-
- dwarf_end (dbg);
- }
-
- close (fd);
- }
-}
diff --git a/tests/allregs.c b/tests/allregs.c
deleted file mode 100644
index f1856df..0000000
--- a/tests/allregs.c
+++ /dev/null
@@ -1,229 +0,0 @@
-/* Copyright (C) 2005, 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <error.h>
-#include <locale.h>
-#include <argp.h>
-#include <assert.h>
-#include ELFUTILS_HEADER(dwfl)
-#include <dwarf.h>
-
-
-static const char *
-dwarf_encoding_string (unsigned int code)
-{
- static const char *known[] =
- {
- [DW_ATE_void] = "void",
- [DW_ATE_address] = "address",
- [DW_ATE_boolean] = "boolean",
- [DW_ATE_complex_float] = "complex_float",
- [DW_ATE_float] = "float",
- [DW_ATE_signed] = "signed",
- [DW_ATE_signed_char] = "signed_char",
- [DW_ATE_unsigned] = "unsigned",
- [DW_ATE_unsigned_char] = "unsigned_char",
- [DW_ATE_imaginary_float] = "imaginary_float",
- [DW_ATE_packed_decimal] = "packed_decimal",
- [DW_ATE_numeric_string] = "numeric_string",
- [DW_ATE_edited] = "edited",
- [DW_ATE_signed_fixed] = "signed_fixed",
- [DW_ATE_unsigned_fixed] = "unsigned_fixed",
- [DW_ATE_decimal_float] = "decimal_float",
- };
-
- if (code < sizeof (known) / sizeof (known[0]))
- return known[code];
-
- if (code >= DW_ATE_lo_user && code <= DW_ATE_hi_user)
- {
- static char buf[30];
- snprintf (buf, sizeof (buf), "lo_user+%u", code - DW_ATE_lo_user);
- return buf;
- }
-
- return "???";
-}
-
-static int
-first_module (Dwfl_Module *mod,
- void **userdatap __attribute__ ((unused)),
- const char *name __attribute__ ((unused)),
- Dwarf_Addr low_addr __attribute__ ((unused)),
- void *arg)
-{
- Dwarf_Addr bias;
- if (dwfl_module_getelf (mod, &bias) == NULL) /* Not really a module. */
- return DWARF_CB_OK;
-
- *(Dwfl_Module **) arg = mod;
- return DWARF_CB_ABORT;
-}
-
-
-struct state
-{
- struct reginfo *info;
- int nregs;
-};
-
-struct reginfo
-{
- const char *set, *pfx;
- int regno;
- int bits;
- int type;
- char name[32];
-};
-
-static int
-compare (const void *r1, const void *r2)
-{
- const struct reginfo *a = r1, *b = r2;
- if (a->set == b->set)
- return a->regno - b->regno;
- if (a->set == NULL)
- return 1;
- if (b->set == NULL)
- return -1;
- if (!strcmp (a->set, "integer"))
- return -1;
- if (!strcmp (b->set, "integer"))
- return 1;
- return strcmp (a->set, b->set);
-}
-
-static int
-one_register (void *arg,
- int regno,
- const char *setname,
- const char *prefix,
- const char *regname,
- int bits, int type)
-{
- struct state *state = arg;
-
- if (regno >= state->nregs)
- {
- state->info = realloc (state->info, (regno + 1) * sizeof state->info[0]);
- memset (&state->info[state->nregs], 0,
- ((void *) &state->info[regno + 1]
- - (void *) &state->info[state->nregs]));
- state->nregs = regno + 1;
- }
-
- state->info[regno].regno = regno;
- state->info[regno].set = setname;
- state->info[regno].pfx = prefix;
- state->info[regno].bits = bits;
- state->info[regno].type = type;
- assert (strlen (regname) < sizeof state->info[regno].name);
- strcpy (state->info[regno].name, regname);
-
- return DWARF_CB_OK;
-}
-
-
-static int
-match_register (void *arg,
- int regno,
- const char *setname,
- const char *prefix,
- const char *regname,
- int bits, int type)
-{
- if (regno == *(int *) arg)
- printf ("%5d => %s register %s%s %s %d bits\n",
- regno, setname, prefix, regname,
- dwarf_encoding_string (type), bits);
-
- return DWARF_CB_ABORT;
-}
-
-
-int
-main (int argc, char **argv)
-{
- int remaining;
-
- /* Set locale. */
- (void) setlocale (LC_ALL, "");
-
- Dwfl *dwfl = NULL;
- (void) argp_parse (dwfl_standard_argp (), argc, argv, 0, &remaining, &dwfl);
- assert (dwfl != NULL);
-
- Dwfl_Module *mod = NULL;
- if (dwfl_getmodules (dwfl, &first_module, &mod, 0) < 0)
- error (EXIT_FAILURE, 0, "dwfl_getmodules: %s", dwfl_errmsg (-1));
-
- if (remaining == argc)
- {
- struct state state = { NULL, 0 };
- int result = dwfl_module_register_names (mod, &one_register, &state);
- if (result != 0 || state.nregs == 0)
- error (EXIT_FAILURE, 0, "dwfl_module_register_names: %s",
- result ? dwfl_errmsg (-1) : "no backend registers known");
-
- qsort (state.info, state.nregs, sizeof state.info[0], &compare);
-
- const char *set = NULL;
- for (int i = 0; i < state.nregs; ++i)
- if (state.info[i].set != NULL)
- {
- if (set != state.info[i].set)
- printf ("%s registers:\n", state.info[i].set);
- set = state.info[i].set;
-
- printf ("\t%3d: %s%s (%s), %s %d bits\n",
- state.info[i].regno,
- state.info[i].pfx ?: "", state.info[i].name,
- state.info[i].name,
- dwarf_encoding_string (state.info[i].type),
- state.info[i].bits);
- }
- }
- else
- do
- {
- const char *arg = argv[remaining++];
- int regno = atoi (arg);
- int result = dwfl_module_register_names (mod, &match_register, ®no);
- if (result != DWARF_CB_ABORT)
- error (EXIT_FAILURE, 0, "dwfl_module_register_names: %s",
- result ? dwfl_errmsg (-1) : "no backend registers known");
- }
- while (remaining < argc);
-
- dwfl_end (dwfl);
-
- return 0;
-}
diff --git a/tests/arextract.c b/tests/arextract.c
deleted file mode 100644
index 5bc4f27..0000000
--- a/tests/arextract.c
+++ /dev/null
@@ -1,167 +0,0 @@
-/* Copyright (C) 1999, 2000, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1999.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <fcntl.h>
-#include <gelf.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/param.h>
-
-
-int
-main (int argc, char *argv[])
-{
- int fd;
- Elf *elf;
- Elf *subelf;
- Elf_Cmd cmd;
- off_t offset;
- size_t todo;
-
- if (argc < 4)
- exit (1);
-
- /* Open the archive. */
- fd = open (argv[1], O_RDONLY);
- if (fd == -1)
- {
- printf ("Cannot open input file: %m");
- exit (1);
- }
-
- /* Set the ELF version. */
- elf_version (EV_CURRENT);
-
- /* Create an ELF descriptor. */
- cmd = ELF_C_READ;
- elf = elf_begin (fd, cmd, NULL);
- if (elf == NULL)
- {
- printf ("Cannot create ELF descriptor: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- /* If it is no archive punt. */
- if (elf_kind (elf) != ELF_K_AR)
- {
- printf ("`%s' is no archive\n", argv[1]);
- exit (1);
- }
-
- /* Get the elements of the archive one after the other. */
- while ((subelf = elf_begin (fd, cmd, elf)) != NULL)
- {
- /* The the header for this element. */
- Elf_Arhdr *arhdr = elf_getarhdr (subelf);
-
- if (arhdr == NULL)
- {
- printf ("cannot get arhdr: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- if (strcmp (arhdr->ar_name, argv[2]) == 0)
- {
- int outfd;
-
- /* Get the offset of the file in the archive. */
- offset = elf_getbase (subelf);
- if (offset == -1)
- {
- printf ("\
-Failed to get base address for the archive element: %s\n",
- elf_errmsg (-1));
- exit (1);
- }
-
- /* Open the output file. */
- outfd = open (argv[3], O_CREAT | O_TRUNC | O_RDWR, 0666);
- if (outfd == -1)
- {
- printf ("cannot open output file: %m");
- exit (1);
- }
-
- /* Now write out the data. */
- todo = arhdr->ar_size;
- while (todo > 0)
- {
- char buf[1024];
- ssize_t n = pread (fd, buf, MIN (sizeof buf, todo), offset);
- if (n == 0)
- break;
-
- if (write (outfd, buf, n) != n)
- {
- puts ("Writing output failed");
- exit (1);
- }
-
- offset += n;
- todo -= n;
- }
-
- /* Check whether all the date was read and written out. */
- if (todo != 0)
- {
- puts ("Reading archive member failed.");
- exit (1);
- }
-
- /* Close the descriptors. */
- if (elf_end (subelf) != 0 || elf_end (elf) != 0)
- {
- printf ("Freeing ELF descriptors failed: %s", elf_errmsg (-1));
- exit (1);
- }
-
- close (outfd);
- close (fd);
-
- /* All went well. */
- exit (0);
- }
-
- /* Get next archive element. */
- cmd = elf_next (subelf);
- if (elf_end (subelf) != 0)
- {
- printf ("error while freeing sub-ELF descriptor: %s\n",
- elf_errmsg (-1));
- exit (1);
- }
- }
-
- /* When we reach this point we haven't found the given file in the
- archive. */
- printf ("File `%s' not found in archive\n", argv[2]);
- exit (1);
-}
diff --git a/tests/arls.c b/tests/arls.c
deleted file mode 100644
index 79b867d..0000000
--- a/tests/arls.c
+++ /dev/null
@@ -1,91 +0,0 @@
-#include <ar.h>
-#include <fcntl.h>
-#include <libelf.h>
-#include <stdio.h>
-#include <unistd.h>
-
-
-static int handle (const char *fname);
-
-
-int
-main (int argc, char *argv[])
-{
- elf_version (EV_CURRENT);
-
- int result = 0;
- if (argc == 1)
- result = handle ("a.out");
- else
- for (int i = 1; i < argc; ++i)
- result |= handle (argv[1]);
-
- return result;
-}
-
-
-static int
-handle (const char *fname)
-{
- int fd = open (fname, O_RDONLY);
- if (fd == -1)
- {
- printf ("cannot open '%s': %m\n", fname);
- return 1;
- }
-
- Elf *elf = elf_begin (fd, ELF_C_READ_MMAP, NULL);
- if (elf == NULL)
- {
- printf ("cannot get ELF handling for '%s': %s\n",
- fname, elf_errmsg (-1));
- close (fd);
- return 1;
- }
-
- if (elf_kind (elf) != ELF_K_AR)
- {
- printf ("'%s' is no archive\n", fname);
- elf_end (elf);
- close (fd);
- return 1;
- }
-
- printf ("%s:\n", fname);
- Elf *subelf = NULL;
- Elf_Cmd cmd = ELF_C_READ_MMAP;
- while ((subelf = elf_begin (fd, cmd, elf)) != NULL)
- {
- Elf_Arhdr *arhdr = elf_getarhdr (subelf);
- if (arhdr == NULL)
- {
- printf ("cannot get archive header in '%s': %s\n",
- fname, elf_errmsg (-1));
- elf_end (subelf);
- elf_end (elf);
- close (fd);
- return 1;
- }
-
- off_t off = elf_getaroff (subelf);
-
- printf ("\nOffset %llu\n"
- " Name %s\n"
- " Date %ld\n"
- " UID %d\n"
- " GID %d\n"
- " Mode %o\n"
- " Size %lld\n",
- (unsigned long long int) off,
- arhdr->ar_name, (long int) arhdr->ar_date, (int) arhdr->ar_uid,
- (int) arhdr->ar_gid,
- (int) arhdr->ar_mode, (long long int) arhdr->ar_size);
-
- cmd = elf_next (subelf);
- elf_end (subelf);
- }
-
- close (fd);
-
- return 0;
-}
diff --git a/tests/arsymtest.c b/tests/arsymtest.c
deleted file mode 100644
index 86d82cf..0000000
--- a/tests/arsymtest.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/* Copyright (C) 1999, 2000, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1999.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <config.h>
-
-#include <fcntl.h>
-#include <libelf.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-
-int
-main (int argc, char *argv[])
-{
- int fd;
- FILE *fp;
- Elf *elf;
- Elf_Arsym *arsym;
- size_t narsym;
-
- if (argc < 3)
- exit (1);
-
- /* Open the archive. */
- fd = open (argv[1], O_RDONLY);
- if (fd == -1)
- {
- printf ("Cannot open input file: %m");
- exit (1);
- }
-
- /* Open the output file. */
- fp = fopen (argv[2], "w");
- if (fp == NULL)
- {
- printf ("Cannot open output file: %m");
- exit (1);
- }
-
- /* Set the ELF version. */
- elf_version (EV_CURRENT);
-
- /* Create an ELF descriptor. */
- elf = elf_begin (fd, ELF_C_READ, NULL);
- if (elf == NULL)
- {
- printf ("Cannot create ELF descriptor: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- /* If it is no archive punt. */
- if (elf_kind (elf) != ELF_K_AR)
- {
- printf ("`%s' is no archive\n", argv[1]);
- exit (1);
- }
-
- /* Now get the index of the archive. */
- arsym = elf_getarsym (elf, &narsym);
- if (arsym == NULL)
- {
- printf ("Cannot get archive index: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- /* If there is no element in the index do nothing. There always is
- an empty entry at the end which is included in the count and
- which we want to skip. */
- if (narsym-- > 1)
- while (narsym-- > 0)
- {
- Elf *subelf;
- Elf_Arhdr *arhdr;
-
- if (elf_rand (elf, arsym[narsym].as_off) != arsym[narsym].as_off)
- {
- printf ("random access for symbol `%s' fails: %s\n",
- arsym[narsym].as_name, elf_errmsg (-1));
- exit (1);
- }
-
- subelf = elf_begin (fd, ELF_C_READ, elf);
- if (subelf == NULL)
- {
- printf ("Cannot create ELF descriptor for archive member: %s\n",
- elf_errmsg (-1));
- exit (1);
- }
-
- arhdr = elf_getarhdr (subelf);
- if (arhdr == NULL)
- {
- printf ("Cannot get archive header for element `%s': %s\n",
- arsym[narsym].as_name, elf_errmsg (-1));
- exit (1);
- }
-
- /* Now print what we actually want. */
- fprintf (fp, "%s in %s\n", arsym[narsym].as_name, arhdr->ar_name);
-
- /* Free the ELF descriptor. */
- if (elf_end (subelf) != 0)
- {
- printf ("Error while freeing subELF descriptor: %s\n",
- elf_errmsg (-1));
- exit (1);
- }
- }
-
- /* Free the ELF descriptor. */
- if (elf_end (elf) != 0)
- {
- printf ("Error while freeing ELF descriptor: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- close (fd);
- fclose (fp);
-
- return 0;
-}
diff --git a/tests/asm-tst1.c b/tests/asm-tst1.c
deleted file mode 100644
index 123346a..0000000
--- a/tests/asm-tst1.c
+++ /dev/null
@@ -1,264 +0,0 @@
-/* Copyright (C) 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <fcntl.h>
-#include ELFUTILS_HEADER(asm)
-#include <libelf.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-
-
-static const char fname[] = "asm-tst1-out.o";
-
-
-static const GElf_Ehdr expected_ehdr =
- {
- .e_ident = { [EI_MAG0] = ELFMAG0,
- [EI_MAG1] = ELFMAG1,
- [EI_MAG2] = ELFMAG2,
- [EI_MAG3] = ELFMAG3,
- [EI_CLASS] = ELFCLASS32,
- [EI_DATA] = ELFDATA2LSB,
- [EI_VERSION] = EV_CURRENT },
- .e_type = ET_REL,
- .e_machine = EM_386,
- .e_version = EV_CURRENT,
- .e_shoff = 88,
- .e_ehsize = sizeof (Elf32_Ehdr),
- .e_shentsize = sizeof (Elf32_Shdr),
- .e_shnum = 4,
- .e_shstrndx = 3
- };
-
-
-static const char *scnnames[4] =
- {
- [0] = "",
- [1] = ".text",
- [2] = ".data",
- [3] = ".shstrtab"
- };
-
-
-int
-main (void)
-{
- AsmCtx_t *ctx;
- AsmScn_t *scn1;
- AsmScn_t *scn2;
- int fd;
- Elf *elf;
- GElf_Ehdr ehdr_mem;
- GElf_Ehdr *ehdr;
- int result = 0;
- size_t cnt;
-
- elf_version (EV_CURRENT);
-
- Ebl *ebl = ebl_openbackend_machine (EM_386);
- if (ebl == NULL)
- {
- puts ("cannot open backend library");
- return 1;
- }
-
- ctx = asm_begin (fname, ebl, false);
- if (ctx == NULL)
- {
- printf ("cannot create assembler context: %s\n", asm_errmsg (-1));
- return 1;
- }
-
- /* Create two sections. */
- scn1 = asm_newscn (ctx, ".text", SHT_PROGBITS, SHF_ALLOC | SHF_EXECINSTR);
- scn2 = asm_newscn (ctx, ".data", SHT_PROGBITS, SHF_ALLOC | SHF_WRITE);
- if (scn1 == NULL || scn2 == NULL)
- {
- printf ("cannot create section in output file: %s\n", asm_errmsg (-1));
- asm_abort (ctx);
- return 1;
- }
-
- /* Special alignment for the .text section. */
- if (asm_align (scn1, 32) != 0)
- {
- printf ("cannot align .text section: %s\n", asm_errmsg (-1));
- result = 1;
- }
-
- /* Create the output file. */
- if (asm_end (ctx) != 0)
- {
- printf ("cannot create output file: %s\n", asm_errmsg (-1));
- asm_abort (ctx);
- return 1;
- }
-
- /* Check the file. */
- fd = open (fname, O_RDONLY);
- if (fd == -1)
- {
- printf ("cannot open generated file: %m\n");
- result = 1;
- goto out;
- }
-
- elf = elf_begin (fd, ELF_C_READ, NULL);
- if (elf == NULL)
- {
- printf ("cannot create ELF descriptor: %s\n", elf_errmsg (-1));
- result = 1;
- goto out_close;
- }
- if (elf_kind (elf) != ELF_K_ELF)
- {
- puts ("not a valid ELF file");
- result = 1;
- goto out_close2;
- }
-
- ehdr = gelf_getehdr (elf, &ehdr_mem);
- if (ehdr == NULL)
- {
- printf ("cannot get ELF header: %s\n", elf_errmsg (-1));
- result = 1;
- goto out_close2;
- }
-
- if (memcmp (ehdr, &expected_ehdr, sizeof (GElf_Ehdr)) != 0)
- {
- puts ("ELF header does not match");
- result = 1;
- goto out_close2;
- }
-
- for (cnt = 1; cnt < 4; ++cnt)
- {
- Elf_Scn *scn;
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr;
-
- scn = elf_getscn (elf, cnt);
- if (scn == NULL)
- {
- printf ("cannot get section %Zd: %s\n", cnt, elf_errmsg (-1));
- result = 1;
- continue;
- }
-
- shdr = gelf_getshdr (scn, &shdr_mem);
- if (shdr == NULL)
- {
- printf ("cannot get section header for section %Zd: %s\n",
- cnt, elf_errmsg (-1));
- result = 1;
- continue;
- }
-
- if (strcmp (elf_strptr (elf, ehdr->e_shstrndx, shdr->sh_name),
- scnnames[cnt]) != 0)
- {
- printf ("section %Zd's name differs: %s vs %s\n", cnt,
- elf_strptr (elf, ehdr->e_shstrndx, shdr->sh_name),
- scnnames[cnt]);
- result = 1;
- }
-
- if (shdr->sh_type != (cnt == 3 ? SHT_STRTAB : SHT_PROGBITS))
- {
- printf ("section %Zd's type differs\n", cnt);
- result = 1;
- }
-
- if ((cnt == 1 && shdr->sh_flags != (SHF_ALLOC | SHF_EXECINSTR))
- || (cnt == 2 && shdr->sh_flags != (SHF_ALLOC | SHF_WRITE))
- || (cnt == 3 && shdr->sh_flags != 0))
- {
- printf ("section %Zd's flags differs\n", cnt);
- result = 1;
- }
-
- if (shdr->sh_addr != 0)
- {
- printf ("section %Zd's address differs\n", cnt);
- result = 1;
- }
-
- if (shdr->sh_offset != ((sizeof (Elf32_Ehdr) + 31) & ~31))
- {
- printf ("section %Zd's offset differs\n", cnt);
- result = 1;
- }
-
- if ((cnt != 3 && shdr->sh_size != 0)
- || (cnt == 3 && shdr->sh_size != 23))
- {
- printf ("section %Zd's size differs\n", cnt);
- result = 1;
- }
-
- if (shdr->sh_link != 0)
- {
- printf ("section %Zd's link differs\n", cnt);
- result = 1;
- }
-
- if (shdr->sh_info != 0)
- {
- printf ("section %Zd's info differs\n", cnt);
- result = 1;
- }
-
- if ((cnt == 1 && shdr->sh_addralign != 32)
- || (cnt != 1 && shdr->sh_addralign != 1))
- {
- printf ("section %Zd's addralign differs\n", cnt);
- result = 1;
- }
-
- if (shdr->sh_entsize != 0)
- {
- printf ("section %Zd's entsize differs\n", cnt);
- result = 1;
- }
- }
-
- out_close2:
- elf_end (elf);
- out_close:
- close (fd);
- out:
- /* We don't need the file anymore. */
- unlink (fname);
-
- ebl_closebackend (ebl);
-
- return result;
-}
diff --git a/tests/asm-tst2.c b/tests/asm-tst2.c
deleted file mode 100644
index 7caaf36..0000000
--- a/tests/asm-tst2.c
+++ /dev/null
@@ -1,286 +0,0 @@
-/* Copyright (C) 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <fcntl.h>
-#include ELFUTILS_HEADER(asm)
-#include <libelf.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-
-
-static const char fname[] = "asm-tst2-out.o";
-
-
-static const GElf_Ehdr expected_ehdr =
- {
- .e_ident = { [EI_MAG0] = ELFMAG0,
- [EI_MAG1] = ELFMAG1,
- [EI_MAG2] = ELFMAG2,
- [EI_MAG3] = ELFMAG3,
- [EI_CLASS] = ELFCLASS32,
- [EI_DATA] = ELFDATA2LSB,
- [EI_VERSION] = EV_CURRENT },
- .e_type = ET_REL,
- .e_machine = EM_386,
- .e_version = EV_CURRENT,
- .e_shoff = 96,
- .e_ehsize = sizeof (Elf32_Ehdr),
- .e_shentsize = sizeof (Elf32_Shdr),
- .e_shnum = 3,
- .e_shstrndx = 2
- };
-
-
-static const char *scnnames[3] =
- {
- [0] = "",
- [1] = ".data",
- [2] = ".shstrtab"
- };
-
-
-int
-main (void)
-{
- AsmCtx_t *ctx;
- AsmScn_t *scn1;
- AsmScn_t *scn2;
- int result = 0;
- int fd;
- Elf *elf;
- GElf_Ehdr ehdr_mem;
- GElf_Ehdr *ehdr;
- size_t cnt;
-
- elf_version (EV_CURRENT);
-
- Ebl *ebl = ebl_openbackend_machine (EM_386);
- if (ebl == NULL)
- {
- puts ("cannot open backend library");
- return 1;
- }
-
- ctx = asm_begin (fname, ebl, false);
- if (ctx == NULL)
- {
- printf ("cannot create assembler context: %s\n", asm_errmsg (-1));
- return 1;
- }
-
- /* Create two sections. */
- scn1 = asm_newscn (ctx, ".data", SHT_PROGBITS, SHF_ALLOC | SHF_WRITE);
- scn2 = asm_newsubscn (scn1, 1);
- if (scn1 == NULL || scn2 == NULL)
- {
- printf ("cannot create section in output file: %s\n", asm_errmsg (-1));
- asm_abort (ctx);
- return 1;
- }
-
- /* Special alignment for the .text section. */
- if (asm_align (scn1, 16) != 0)
- {
- printf ("cannot align .text section: %s\n", asm_errmsg (-1));
- result = 1;
- }
-
- /* Add a few strings. */
- if (asm_addstrz (scn1, "one", 4) != 0)
- {
- printf ("cannot insert first string: %s\n", asm_errmsg (-1));
- result = 1;
- }
- if (asm_addstrz (scn2, "three", 0) != 0)
- {
- printf ("cannot insert second string: %s\n", asm_errmsg (-1));
- result = 1;
- }
- if (asm_addstrz (scn1, "two", 4) != 0)
- {
- printf ("cannot insert third string: %s\n", asm_errmsg (-1));
- result = 1;
- }
-
- /* Create the output file. */
- if (asm_end (ctx) != 0)
- {
- printf ("cannot create output file: %s\n", asm_errmsg (-1));
- asm_abort (ctx);
- return 1;
- }
-
- /* Check the file. */
- fd = open (fname, O_RDONLY);
- if (fd == -1)
- {
- printf ("cannot open generated file: %m\n");
- result = 1;
- goto out;
- }
-
- elf = elf_begin (fd, ELF_C_READ, NULL);
- if (elf == NULL)
- {
- printf ("cannot create ELF descriptor: %s\n", elf_errmsg (-1));
- result = 1;
- goto out_close;
- }
- if (elf_kind (elf) != ELF_K_ELF)
- {
- puts ("not a valid ELF file");
- result = 1;
- goto out_close2;
- }
-
- ehdr = gelf_getehdr (elf, &ehdr_mem);
- if (ehdr == NULL)
- {
- printf ("cannot get ELF header: %s\n", elf_errmsg (-1));
- result = 1;
- goto out_close2;
- }
-
- if (memcmp (ehdr, &expected_ehdr, sizeof (GElf_Ehdr)) != 0)
- {
- puts ("ELF header does not match");
- result = 1;
- goto out_close2;
- }
-
- for (cnt = 1; cnt < 3; ++cnt)
- {
- Elf_Scn *scn;
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr;
-
- scn = elf_getscn (elf, cnt);
- if (scn == NULL)
- {
- printf ("cannot get section %Zd: %s\n", cnt, elf_errmsg (-1));
- result = 1;
- continue;
- }
-
- shdr = gelf_getshdr (scn, &shdr_mem);
- if (shdr == NULL)
- {
- printf ("cannot get section header for section %Zd: %s\n",
- cnt, elf_errmsg (-1));
- result = 1;
- continue;
- }
-
- if (strcmp (elf_strptr (elf, ehdr->e_shstrndx, shdr->sh_name),
- scnnames[cnt]) != 0)
- {
- printf ("section %Zd's name differs: %s vs %s\n", cnt,
- elf_strptr (elf, ehdr->e_shstrndx, shdr->sh_name),
- scnnames[cnt]);
- result = 1;
- }
-
- if (shdr->sh_type != (cnt == 2 ? SHT_STRTAB : SHT_PROGBITS))
- {
- printf ("section %Zd's type differs\n", cnt);
- result = 1;
- }
-
- if ((cnt == 1 && shdr->sh_flags != (SHF_ALLOC | SHF_WRITE))
- || (cnt == 2 && shdr->sh_flags != 0))
- {
- printf ("section %Zd's flags differs\n", cnt);
- result = 1;
- }
-
- if (shdr->sh_addr != 0)
- {
- printf ("section %Zd's address differs\n", cnt);
- result = 1;
- }
-
- if ((cnt == 1 && shdr->sh_offset != ((sizeof (Elf32_Ehdr) + 15) & ~15))
- || (cnt == 2
- && shdr->sh_offset != (((sizeof (Elf32_Ehdr) + 15) & ~15)
- + strlen ("one") + 1
- + strlen ("two") + 1
- + strlen ("three") + 1)))
- {
- printf ("section %Zd's offset differs\n", cnt);
- result = 1;
- }
-
- if ((cnt == 1 && shdr->sh_size != (strlen ("one") + 1
- + strlen ("two") + 1
- + strlen ("three") + 1))
- || (cnt == 2 && shdr->sh_size != 17))
- {
- printf ("section %Zd's size differs\n", cnt);
- result = 1;
- }
-
- if (shdr->sh_link != 0)
- {
- printf ("section %Zd's link differs\n", cnt);
- result = 1;
- }
-
- if (shdr->sh_info != 0)
- {
- printf ("section %Zd's info differs\n", cnt);
- result = 1;
- }
-
- if ((cnt == 1 && shdr->sh_addralign != 16)
- || (cnt != 1 && shdr->sh_addralign != 1))
- {
- printf ("section %Zd's addralign differs\n", cnt);
- result = 1;
- }
-
- if (shdr->sh_entsize != 0)
- {
- printf ("section %Zd's entsize differs\n", cnt);
- result = 1;
- }
- }
-
- out_close2:
- elf_end (elf);
- out_close:
- close (fd);
- out:
- /* We don't need the file anymore. */
- unlink (fname);
-
- ebl_closebackend (ebl);
-
- return result;
-}
diff --git a/tests/asm-tst3.c b/tests/asm-tst3.c
deleted file mode 100644
index f38feeb..0000000
--- a/tests/asm-tst3.c
+++ /dev/null
@@ -1,347 +0,0 @@
-/* Copyright (C) 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <fcntl.h>
-#include ELFUTILS_HEADER(asm)
-#include <libelf.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-
-
-static const char fname[] = "asm-tst3-out.o";
-
-
-static const char *scnnames[5] =
- {
- [0] = "",
- [1] = ".data",
- [2] = ".strtab",
- [3] = ".symtab",
- [4] = ".shstrtab"
- };
-
-
-static unsigned int scntypes[5] =
- {
- [0] = SHT_NULL,
- [1] = SHT_PROGBITS,
- [2] = SHT_STRTAB,
- [3] = SHT_SYMTAB,
- [4] = SHT_STRTAB
- };
-
-
-int
-main (void)
-{
- AsmCtx_t *ctx;
- AsmScn_t *scn1;
- AsmScn_t *scn2;
- int result = 0;
- int fd;
- Elf *elf;
- GElf_Ehdr ehdr_mem;
- GElf_Ehdr *ehdr;
- size_t cnt;
-
- elf_version (EV_CURRENT);
-
- Ebl *ebl = ebl_openbackend_machine (EM_386);
- if (ebl == NULL)
- {
- puts ("cannot open backend library");
- return 1;
- }
-
- ctx = asm_begin (fname, ebl, false);
- if (ctx == NULL)
- {
- printf ("cannot create assembler context: %s\n", asm_errmsg (-1));
- return 1;
- }
-
- /* Create two sections. */
- scn1 = asm_newscn (ctx, ".data", SHT_PROGBITS, SHF_ALLOC | SHF_WRITE);
- scn2 = asm_newsubscn (scn1, 1);
- if (scn1 == NULL || scn2 == NULL)
- {
- printf ("cannot create section in output file: %s\n", asm_errmsg (-1));
- asm_abort (ctx);
- return 1;
- }
-
- /* Special alignment for the .text section. */
- if (asm_align (scn1, 16) != 0)
- {
- printf ("cannot align .text section: %s\n", asm_errmsg (-1));
- result = 1;
- }
-
- /* Add a few strings with names. */
- if (asm_newsym (scn1, "one", 4, STT_OBJECT, STB_GLOBAL) == NULL)
- {
- printf ("cannot create first name: %s\n", asm_errmsg (-1));
- result = 1;
- }
- if (asm_addstrz (scn1, "one", 4) != 0)
- {
- printf ("cannot insert first string: %s\n", asm_errmsg (-1));
- result = 1;
- }
- if (asm_newsym (scn2, "three", 6, STT_OBJECT, STB_WEAK) == NULL)
- {
- printf ("cannot create second name: %s\n", asm_errmsg (-1));
- result = 1;
- }
- if (asm_addstrz (scn2, "three", 0) != 0)
- {
- printf ("cannot insert second string: %s\n", asm_errmsg (-1));
- result = 1;
- }
- if (asm_newsym (scn1, "two", 4, STT_OBJECT, STB_LOCAL) == NULL)
- {
- printf ("cannot create third name: %s\n", asm_errmsg (-1));
- result = 1;
- }
- if (asm_addstrz (scn1, "two", 4) != 0)
- {
- printf ("cannot insert third string: %s\n", asm_errmsg (-1));
- result = 1;
- }
-
- /* Create the output file. */
- if (asm_end (ctx) != 0)
- {
- printf ("cannot create output file: %s\n", asm_errmsg (-1));
- asm_abort (ctx);
- return 1;
- }
-
- /* Check the file. */
- fd = open (fname, O_RDONLY);
- if (fd == -1)
- {
- printf ("cannot open generated file: %m\n");
- result = 1;
- goto out;
- }
-
- elf = elf_begin (fd, ELF_C_READ, NULL);
- if (elf == NULL)
- {
- printf ("cannot create ELF descriptor: %s\n", elf_errmsg (-1));
- result = 1;
- goto out_close;
- }
- if (elf_kind (elf) != ELF_K_ELF)
- {
- puts ("not a valid ELF file");
- result = 1;
- goto out_close2;
- }
-
- ehdr = gelf_getehdr (elf, &ehdr_mem);
- if (ehdr == NULL)
- {
- printf ("cannot get ELF header: %s\n", elf_errmsg (-1));
- result = 1;
- goto out_close2;
- }
-
- for (cnt = 1; cnt < 5; ++cnt)
- {
- Elf_Scn *scn;
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr;
-
- scn = elf_getscn (elf, cnt);
- if (scn == NULL)
- {
- printf ("cannot get section %Zd: %s\n", cnt, elf_errmsg (-1));
- result = 1;
- continue;
- }
-
- shdr = gelf_getshdr (scn, &shdr_mem);
- if (shdr == NULL)
- {
- printf ("cannot get section header for section %Zd: %s\n",
- cnt, elf_errmsg (-1));
- result = 1;
- continue;
- }
-
- if (strcmp (elf_strptr (elf, ehdr->e_shstrndx, shdr->sh_name),
- scnnames[cnt]) != 0)
- {
- printf ("section %Zd's name differs: %s vs %s\n", cnt,
- elf_strptr (elf, ehdr->e_shstrndx, shdr->sh_name),
- scnnames[cnt]);
- result = 1;
- }
-
- if (shdr->sh_type != scntypes[cnt])
- {
- printf ("section %Zd's type differs\n", cnt);
- result = 1;
- }
-
- if ((cnt == 1 && shdr->sh_flags != (SHF_ALLOC | SHF_WRITE))
- || (cnt != 1 && shdr->sh_flags != 0))
- {
- printf ("section %Zd's flags differs\n", cnt);
- result = 1;
- }
-
- if (shdr->sh_addr != 0)
- {
- printf ("section %Zd's address differs\n", cnt);
- result = 1;
- }
-
- if (cnt == 3)
- {
- Elf_Data *data;
-
- if (shdr->sh_link != 2)
- {
- puts ("symbol table has incorrect link");
- result = 1;
- }
-
- data = elf_getdata (scn, NULL);
- if (data == NULL)
- {
- puts ("cannot get data of symbol table");
- result = 1;
- }
- else
- {
- size_t inner;
-
- for (inner = 1;
- inner < (shdr->sh_size
- / gelf_fsize (elf, ELF_T_SYM, 1, EV_CURRENT));
- ++inner)
- {
- GElf_Sym sym_mem;
- GElf_Sym *sym;
-
- sym = gelf_getsym (data, inner, &sym_mem);
- if (sym == NULL)
- {
- printf ("cannot get symbol %zu: %s\n",
- inner, elf_errmsg (-1));
- result = 1;
- }
- else
- {
- /* The order of the third and fourth entry depends
- on how the hash table is organized. */
- static const char *names[4] =
- {
- [0] = "",
- [1] = "two",
- [2] = "one",
- [3] = "three"
- };
- static const int info[4] =
- {
- [0] = GELF_ST_INFO (STB_LOCAL, STT_NOTYPE),
- [1] = GELF_ST_INFO (STB_LOCAL, STT_OBJECT),
- [2] = GELF_ST_INFO (STB_GLOBAL, STT_OBJECT),
- [3] = GELF_ST_INFO (STB_WEAK, STT_OBJECT)
- };
- static const unsigned value[4] =
- {
- [0] = 0,
- [1] = 4,
- [2] = 0,
- [3] = 8
- };
-
- if (strcmp (names[inner],
- elf_strptr (elf, shdr->sh_link,
- sym->st_name)) != 0)
- {
- printf ("symbol %zu has different name\n", inner);
- result = 1;
- }
-
- if (sym->st_value != value[inner])
- {
- printf ("symbol %zu has wrong value\n", inner);
- result = 1;
- }
-
- if (sym->st_other != 0)
- {
- printf ("symbol %zu has wrong other info\n", inner);
- result = 1;
- }
-
- if (sym->st_shndx != 1)
- {
- printf ("symbol %zu has wrong section reference\n",
- inner);
- result = 1;
- }
-
- if (sym->st_info != info[inner])
- {
- printf ("symbol %zu has wrong type or binding\n",
- inner);
- result = 1;
- }
-
- if ((inner != 3 && sym->st_size != 4)
- || (inner == 3 && sym->st_size != 6))
- {
- printf ("symbol %zu has wrong size\n", inner);
- result = 1;
- }
- }
- }
- }
- }
- }
-
- out_close2:
- elf_end (elf);
- out_close:
- close (fd);
- out:
- /* We don't need the file anymore. */
- unlink (fname);
-
- ebl_closebackend (ebl);
-
- return result;
-}
diff --git a/tests/asm-tst4.c b/tests/asm-tst4.c
deleted file mode 100644
index 54d054c..0000000
--- a/tests/asm-tst4.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/* Copyright (C) 2002, 2004, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <fcntl.h>
-#include ELFUTILS_HEADER(asm)
-#include <libelf.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/wait.h>
-
-
-static const char fname[] = "asm-tst4-out.o";
-
-
-int
-main (void)
-{
- AsmCtx_t *ctx;
- int result = 0;
- size_t cnt;
-
- elf_version (EV_CURRENT);
-
- Ebl *ebl = ebl_openbackend_machine (EM_386);
- if (ebl == NULL)
- {
- puts ("cannot open backend library");
- return 1;
- }
-
- ctx = asm_begin (fname, ebl, false);
- if (ctx == NULL)
- {
- printf ("cannot create assembler context: %s\n", asm_errmsg (-1));
- return 1;
- }
-
- /* Create 66000 sections. */
- for (cnt = 0; cnt < 66000; ++cnt)
- {
- char buf[20];
- AsmScn_t *scn;
-
- /* Create a unique name. */
- snprintf (buf, sizeof (buf), ".data.%Zu", cnt);
-
- /* Create the section. */
- scn = asm_newscn (ctx, buf, SHT_PROGBITS, SHF_ALLOC | SHF_WRITE);
- if (scn == NULL)
- {
- printf ("cannot create section \"%s\" in output file: %s\n",
- buf, asm_errmsg (-1));
- asm_abort (ctx);
- return 1;
- }
-
- /* Add some content. */
- if (asm_adduint32 (scn, cnt) != 0)
- {
- printf ("cannot create content of section \"%s\": %s\n",
- buf, asm_errmsg (-1));
- asm_abort (ctx);
- return 1;
- }
- }
-
- /* Create the output file. */
- if (asm_end (ctx) != 0)
- {
- printf ("cannot create output file: %s\n", asm_errmsg (-1));
- asm_abort (ctx);
- return 1;
- }
-
- if (result == 0)
- result = WEXITSTATUS (system ("\
-env LD_LIBRARY_PATH=../libelf ../src/elflint -q asm-tst4-out.o"));
-
- /* We don't need the file anymore. */
- unlink (fname);
-
- ebl_closebackend (ebl);
-
- return result;
-}
diff --git a/tests/asm-tst5.c b/tests/asm-tst5.c
deleted file mode 100644
index 2a8b3f0..0000000
--- a/tests/asm-tst5.c
+++ /dev/null
@@ -1,125 +0,0 @@
-/* Copyright (C) 2002, 2004, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <fcntl.h>
-#include ELFUTILS_HEADER(asm)
-#include <libelf.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/wait.h>
-
-#include "system.h"
-
-
-static const char fname[] = "asm-tst5-out.o";
-
-
-int
-main (void)
-{
- AsmCtx_t *ctx;
- int result = 0;
- size_t cnt;
-
- elf_version (EV_CURRENT);
-
- Ebl *ebl = ebl_openbackend_machine (EM_386);
- if (ebl == NULL)
- {
- puts ("cannot open backend library");
- return 1;
- }
-
- ctx = asm_begin (fname, ebl, false);
- if (ctx == NULL)
- {
- printf ("cannot create assembler context: %s\n", asm_errmsg (-1));
- return 1;
- }
-
- /* Create 66000 sections. */
- for (cnt = 0; cnt < 66000; ++cnt)
- {
- char buf[20];
- AsmScn_t *scn;
-
- /* Create a unique name. */
- snprintf (buf, sizeof (buf), ".data.%Zu", cnt);
-
- /* Create the section. */
- scn = asm_newscn (ctx, buf, SHT_PROGBITS, SHF_ALLOC | SHF_WRITE);
- if (scn == NULL)
- {
- printf ("cannot create section \"%s\" in output file: %s\n",
- buf, asm_errmsg (-1));
- asm_abort (ctx);
- return 1;
- }
-
- /* Add a name. */
- snprintf (buf, sizeof (buf), "%Zu", cnt);
- if (asm_newsym (scn, buf, sizeof (uint32_t), STT_OBJECT,
- STB_GLOBAL) == NULL)
- {
- printf ("cannot create symbol \"%s\": %s\n", buf, asm_errmsg (-1));
- asm_abort (ctx);
- return 1;
- }
-
- /* Add some content. */
- if (asm_adduint32 (scn, cnt) != 0)
- {
- printf ("cannot create content of section \"%s\": %s\n",
- buf, asm_errmsg (-1));
- asm_abort (ctx);
- return 1;
- }
- }
-
- /* Create the output file. */
- if (asm_end (ctx) != 0)
- {
- printf ("cannot create output file: %s\n", asm_errmsg (-1));
- asm_abort (ctx);
- return 1;
- }
-
- if (result == 0)
- result = WEXITSTATUS (system ("\
-env LD_LIBRARY_PATH=../libelf ../src/elflint -q asm-tst5-out.o"));
-
- /* We don't need the file anymore. */
- unlink (fname);
-
- ebl_closebackend (ebl);
-
- return result;
-}
diff --git a/tests/asm-tst6.c b/tests/asm-tst6.c
deleted file mode 100644
index bd6a71d..0000000
--- a/tests/asm-tst6.c
+++ /dev/null
@@ -1,159 +0,0 @@
-/* Copyright (C) 2002, 2004, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include ELFUTILS_HEADER(asm)
-#include <libelf.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/wait.h>
-
-#include <system.h>
-
-
-static const char fname[] = "asm-tst6-out.o";
-
-
-int
-main (void)
-{
- AsmCtx_t *ctx;
- int result = 0;
- size_t cnt;
-
- elf_version (EV_CURRENT);
-
- Ebl *ebl = ebl_openbackend_machine (EM_386);
- if (ebl == NULL)
- {
- puts ("cannot open backend library");
- return 1;
- }
-
- ctx = asm_begin (fname, ebl, false);
- if (ctx == NULL)
- {
- printf ("cannot create assembler context: %s\n", asm_errmsg (-1));
- return 1;
- }
-
- for (cnt = 0; cnt < 22000; ++cnt)
- {
- char buf[512];
- AsmScnGrp_t *grp;
- AsmScn_t *scn;
- AsmSym_t *sym;
-
- snprintf (buf, sizeof (buf), ".grp%Zu", cnt);
- grp = asm_newscngrp (ctx, buf, NULL, 0);
- if (grp == NULL)
- {
- printf ("cannot section group %Zu: %s\n", cnt, asm_errmsg (-1));
- asm_abort (ctx);
- return 1;
- }
-
- scn = asm_newscn_ingrp (ctx, ".data", SHT_PROGBITS,
- SHF_ALLOC | SHF_WRITE, grp);
- if (scn == NULL)
- {
- printf ("cannot data section for group %Zu: %s\n",
- cnt, asm_errmsg (-1));
- asm_abort (ctx);
- return 1;
- }
-
- /* Add a name. */
- snprintf (buf, sizeof (buf), "%Zu", cnt);
- sym = asm_newsym (scn, buf, sizeof (uint32_t), STT_OBJECT,
- STB_GLOBAL);
- if (sym == NULL)
- {
- printf ("cannot create symbol \"%s\": %s\n", buf, asm_errmsg (-1));
- asm_abort (ctx);
- return 1;
- }
-
- /* Add some content. */
- if (asm_adduint32 (scn, cnt) != 0)
- {
- printf ("cannot create content of section \"%s\": %s\n",
- buf, asm_errmsg (-1));
- asm_abort (ctx);
- return 1;
- }
-
- /* Now we have a symbol, use it as the signature. */
- if (asm_scngrp_newsignature (grp, sym) != 0)
- {
- printf ("cannot set signature for section group %Zu: %s\n",
- cnt, asm_errmsg (-1));
- asm_abort (ctx);
- return 1;
- }
-
- /* Create a phony debug info section. */
- scn = asm_newscn_ingrp (ctx, ".stab", SHT_PROGBITS, 0, grp);
- if (scn == NULL)
- {
- printf ("cannot stab section for group %Zu: %s\n",
- cnt, asm_errmsg (-1));
- asm_abort (ctx);
- return 1;
- }
-
- /* Add some content. */
- if (asm_adduint32 (scn, cnt) != 0)
- {
- printf ("cannot create content of section \"%s\": %s\n",
- buf, asm_errmsg (-1));
- asm_abort (ctx);
- return 1;
- }
- }
-
- /* Create the output file. */
- if (asm_end (ctx) != 0)
- {
- printf ("cannot create output file: %s\n", asm_errmsg (-1));
- asm_abort (ctx);
- return 1;
- }
-
- if (result == 0)
- result = WEXITSTATUS (system ("\
-env LD_LIBRARY_PATH=../libelf ../src/elflint -q asm-tst6-out.o"));
-
- /* We don't need the file anymore. */
- unlink (fname);
-
- ebl_closebackend (ebl);
-
- return result;
-}
diff --git a/tests/asm-tst7.c b/tests/asm-tst7.c
deleted file mode 100644
index 329f03b..0000000
--- a/tests/asm-tst7.c
+++ /dev/null
@@ -1,189 +0,0 @@
-/* Copyright (C) 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <fcntl.h>
-#include <inttypes.h>
-#include ELFUTILS_HEADER(asm)
-#include <libelf.h>
-#include <stdio.h>
-#include <unistd.h>
-
-
-static const char fname[] = "asm-tst7-out.o";
-
-
-int
-main (void)
-{
- int result = 0;
- size_t cnt;
- AsmCtx_t *ctx;
- Elf *elf;
- int fd;
-
- elf_version (EV_CURRENT);
-
- Ebl *ebl = ebl_openbackend_machine (EM_386);
- if (ebl == NULL)
- {
- puts ("cannot open backend library");
- return 1;
- }
-
- ctx = asm_begin (fname, ebl, false);
- if (ctx == NULL)
- {
- printf ("cannot create assembler context: %s\n", asm_errmsg (-1));
- return 1;
- }
-
- if (asm_newcomsym (ctx, "commsym", 4, 16) == NULL)
- {
- printf ("cannot create common symbol: %s\n", asm_errmsg (-1));
- asm_abort (ctx);
- return 1;
- }
-
- /* Create the output file. */
- if (asm_end (ctx) != 0)
- {
- printf ("cannot create output file: %s\n", asm_errmsg (-1));
- asm_abort (ctx);
- return 1;
- }
-
- /* Check the file. */
- fd = open (fname, O_RDONLY);
- if (fd == -1)
- {
- printf ("cannot open generated file: %m\n");
- result = 1;
- goto out;
- }
-
- elf = elf_begin (fd, ELF_C_READ, NULL);
- if (elf == NULL)
- {
- printf ("cannot create ELF descriptor: %s\n", elf_errmsg (-1));
- result = 1;
- goto out_close;
- }
- if (elf_kind (elf) != ELF_K_ELF)
- {
- puts ("not a valid ELF file");
- result = 1;
- goto out_close2;
- }
-
- for (cnt = 1; 1; ++cnt)
- {
- Elf_Scn *scn;
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr;
-
- scn = elf_getscn (elf, cnt);
- if (scn == NULL)
- {
- printf ("cannot get section %Zd: %s\n", cnt, elf_errmsg (-1));
- result = 1;
- continue;
- }
-
- shdr = gelf_getshdr (scn, &shdr_mem);
- if (shdr == NULL)
- {
- printf ("cannot get section header for section %Zd: %s\n",
- cnt, elf_errmsg (-1));
- result = 1;
- continue;
- }
- /* We are looking for the symbol table. */
- if (shdr->sh_type != SHT_SYMTAB)
- continue;
-
- for (cnt = 1; cnt< (shdr->sh_size
- / gelf_fsize (elf, ELF_T_SYM, 1, EV_CURRENT));
- ++cnt)
- {
- GElf_Sym sym_mem;
- GElf_Sym *sym;
-
- if (cnt > 1)
- {
- puts ("too many symbol");
- result = 1;
- break;
- }
-
- sym = gelf_getsym (elf_getdata (scn, NULL), cnt, &sym_mem);
- if (sym == NULL)
- {
- printf ("cannot get symbol %zu: %s\n", cnt, elf_errmsg (-1));
- result = 1;
- }
- else
- {
- if (sym->st_shndx != SHN_COMMON)
- {
- printf ("expected common symbol, got section %u\n",
- (unsigned int) sym->st_shndx);
- result = 1;
- }
-
- if (sym->st_value != 16)
- {
- printf ("requested alignment 16, is %" PRIuMAX "\n",
- (uintmax_t) sym->st_value);
- result = 1;
- }
-
- if (sym->st_size != 4)
- {
- printf ("requested size 4, is %" PRIuMAX "\n",
- (uintmax_t) sym->st_value);
- result = 1;
- }
- }
- }
-
- break;
- }
-
- out_close2:
- elf_end (elf);
- out_close:
- close (fd);
- out:
- /* We don't need the file anymore. */
- unlink (fname);
-
- ebl_closebackend (ebl);
-
- return result;
-}
diff --git a/tests/asm-tst8.c b/tests/asm-tst8.c
deleted file mode 100644
index 19c7aa9..0000000
--- a/tests/asm-tst8.c
+++ /dev/null
@@ -1,197 +0,0 @@
-/* Copyright (C) 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <fcntl.h>
-#include <inttypes.h>
-#include ELFUTILS_HEADER(asm)
-#include <libelf.h>
-#include <stdio.h>
-#include <unistd.h>
-
-
-static const char fname[] = "asm-tst8-out.o";
-
-
-int
-main (void)
-{
- int result = 0;
- size_t cnt;
- AsmCtx_t *ctx;
- Elf *elf;
- int fd;
-
- elf_version (EV_CURRENT);
-
- Ebl *ebl = ebl_openbackend_machine (EM_386);
- if (ebl == NULL)
- {
- puts ("cannot open backend library");
- return 1;
- }
-
- ctx = asm_begin (fname, ebl, false);
- if (ctx == NULL)
- {
- printf ("cannot create assembler context: %s\n", asm_errmsg (-1));
- return 1;
- }
-
- if (asm_newabssym (ctx, "tst8-out.s", 4, 0xfeedbeef, STT_FILE, STB_LOCAL)
- == NULL)
- {
- printf ("cannot create absolute symbol: %s\n", asm_errmsg (-1));
- asm_abort (ctx);
- return 1;
- }
-
- /* Create the output file. */
- if (asm_end (ctx) != 0)
- {
- printf ("cannot create output file: %s\n", asm_errmsg (-1));
- asm_abort (ctx);
- return 1;
- }
-
- /* Check the file. */
- fd = open (fname, O_RDONLY);
- if (fd == -1)
- {
- printf ("cannot open generated file: %m\n");
- result = 1;
- goto out;
- }
-
- elf = elf_begin (fd, ELF_C_READ, NULL);
- if (elf == NULL)
- {
- printf ("cannot create ELF descriptor: %s\n", elf_errmsg (-1));
- result = 1;
- goto out_close;
- }
- if (elf_kind (elf) != ELF_K_ELF)
- {
- puts ("not a valid ELF file");
- result = 1;
- goto out_close2;
- }
-
- for (cnt = 1; 1; ++cnt)
- {
- Elf_Scn *scn;
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr;
-
- scn = elf_getscn (elf, cnt);
- if (scn == NULL)
- {
- printf ("cannot get section %Zd: %s\n", cnt, elf_errmsg (-1));
- result = 1;
- continue;
- }
-
- shdr = gelf_getshdr (scn, &shdr_mem);
- if (shdr == NULL)
- {
- printf ("cannot get section header for section %Zd: %s\n",
- cnt, elf_errmsg (-1));
- result = 1;
- continue;
- }
- /* We are looking for the symbol table. */
- if (shdr->sh_type != SHT_SYMTAB)
- continue;
-
- for (cnt = 1; cnt< (shdr->sh_size
- / gelf_fsize (elf, ELF_T_SYM, 1, EV_CURRENT));
- ++cnt)
- {
- GElf_Sym sym_mem;
- GElf_Sym *sym;
-
- if (cnt > 1)
- {
- puts ("too many symbol");
- result = 1;
- break;
- }
-
- sym = gelf_getsym (elf_getdata (scn, NULL), cnt, &sym_mem);
- if (sym == NULL)
- {
- printf ("cannot get symbol %zu: %s\n", cnt, elf_errmsg (-1));
- result = 1;
- }
- else
- {
- if (sym->st_shndx != SHN_ABS)
- {
- printf ("expected common symbol, got section %u\n",
- (unsigned int) sym->st_shndx);
- result = 1;
- }
-
- if (sym->st_value != 0xfeedbeef)
- {
- printf ("requested value 0xfeedbeef, is %#" PRIxMAX "\n",
- (uintmax_t) sym->st_value);
- result = 1;
- }
-
- if (sym->st_size != 4)
- {
- printf ("requested size 4, is %" PRIuMAX "\n",
- (uintmax_t) sym->st_value);
- result = 1;
- }
-
- if (GELF_ST_TYPE (sym->st_info) != STT_FILE)
- {
- printf ("requested type FILE, is %u\n",
- (unsigned int) GELF_ST_TYPE (sym->st_info));
- result = 1;
- }
- }
- }
-
- break;
- }
-
- out_close2:
- elf_end (elf);
- out_close:
- close (fd);
- out:
- /* We don't need the file anymore. */
- unlink (fname);
-
- ebl_closebackend (ebl);
-
- return result;
-}
diff --git a/tests/asm-tst9.c b/tests/asm-tst9.c
deleted file mode 100644
index 1797e48..0000000
--- a/tests/asm-tst9.c
+++ /dev/null
@@ -1,343 +0,0 @@
-/* Copyright (C) 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <fcntl.h>
-#include <inttypes.h>
-#include ELFUTILS_HEADER(asm)
-#include <libelf.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-
-
-static const char fname[] = "asm-tst9-out.o";
-
-
-static int32_t input[] =
- {
- 0, 1, 129, 510, 2000, 33000, 0x7ffffff, 0x7fffffff
- };
-#define ninput (sizeof (input) / sizeof (input[0]))
-
-
-static const GElf_Ehdr expected_ehdr =
- {
- .e_ident = { [EI_MAG0] = ELFMAG0,
- [EI_MAG1] = ELFMAG1,
- [EI_MAG2] = ELFMAG2,
- [EI_MAG3] = ELFMAG3,
- [EI_CLASS] = ELFCLASS32,
- [EI_DATA] = ELFDATA2LSB,
- [EI_VERSION] = EV_CURRENT },
- .e_type = ET_REL,
- .e_machine = EM_386,
- .e_version = EV_CURRENT,
- .e_shoff = 180,
- .e_ehsize = sizeof (Elf32_Ehdr),
- .e_shentsize = sizeof (Elf32_Shdr),
- .e_shnum = 3,
- .e_shstrndx = 2
- };
-
-
-static const char *scnnames[3] =
- {
- [0] = "",
- [1] = ".data",
- [2] = ".shstrtab"
- };
-
-
-static const char expecteddata[] =
- {
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x7f,
- 0x81, 0x01, 0x81, 0x01, 0xff, 0xfe, 0xff, 0xff, 0x0f, 0xff, 0x7e, 0xfe,
- 0x03, 0xfe, 0x03, 0x82, 0xfc, 0xff, 0xff, 0x0f, 0x82, 0x7c, 0xd0, 0x0f,
- 0xd0, 0x0f, 0xb0, 0xf0, 0xff, 0xff, 0x0f, 0xb0, 0x70, 0xe8, 0x81, 0x02,
- 0xe8, 0x81, 0x02, 0x98, 0xfe, 0xfd, 0xff, 0x0f, 0x98, 0xfe, 0x7d, 0xff,
- 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0x3f, 0x81, 0x80, 0x80, 0xc0, 0x0f,
- 0x81, 0x80, 0x80, 0x40, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff,
- 0xff, 0x07, 0x81, 0x80, 0x80, 0x80, 0x08, 0x81, 0x80, 0x80, 0x80, 0x78
- };
-
-
-int
-main (void)
-{
- AsmCtx_t *ctx;
- AsmScn_t *scn;
- int result = 0;
- int fd;
- Elf *elf;
- GElf_Ehdr ehdr_mem;
- GElf_Ehdr *ehdr;
- size_t cnt;
-
- elf_version (EV_CURRENT);
-
- Ebl *ebl = ebl_openbackend_machine (EM_386);
- if (ebl == NULL)
- {
- puts ("cannot open backend library");
- return 1;
- }
-
- ctx = asm_begin (fname, ebl, false);
- if (ctx == NULL)
- {
- printf ("cannot create assembler context: %s\n", asm_errmsg (-1));
- return 1;
- }
-
- /* Create two sections. */
- scn = asm_newscn (ctx, ".data", SHT_PROGBITS, SHF_ALLOC | SHF_WRITE);
- if (scn == NULL)
- {
- printf ("cannot create section in output file: %s\n", asm_errmsg (-1));
- asm_abort (ctx);
- return 1;
- }
-
- /* Special alignment for the .text section. */
- if (asm_align (scn, 16) != 0)
- {
- printf ("cannot align .text section: %s\n", asm_errmsg (-1));
- result = 1;
- }
-
- /* Add a few ULEB128 and SLEB128 numbers. */
- for (cnt = 0; cnt < ninput; ++cnt)
- {
- if (asm_adduleb128 (scn, input[cnt]) != 0)
- {
- printf ("cannot insert uleb %" PRIu32 ": %s\n",
- (uint32_t) input[cnt], asm_errmsg (-1));
- result = 1;
- }
-
- if (asm_addsleb128 (scn, input[cnt]) != 0)
- {
- printf ("cannot insert sleb %" PRId32 ": %s\n",
- input[cnt], asm_errmsg (-1));
- result = 1;
- }
-
- if (asm_adduleb128 (scn, -input[cnt]) != 0)
- {
- printf ("cannot insert uleb %" PRIu32 ": %s\n",
- (uint32_t) -input[cnt], asm_errmsg (-1));
- result = 1;
- }
-
- if (asm_addsleb128 (scn, -input[cnt]) != 0)
- {
- printf ("cannot insert sleb %" PRId32 ": %s\n",
- -input[cnt], asm_errmsg (-1));
- result = 1;
- }
- }
-
- /* Create the output file. */
- if (asm_end (ctx) != 0)
- {
- printf ("cannot create output file: %s\n", asm_errmsg (-1));
- asm_abort (ctx);
- return 1;
- }
-
- /* Check the file. */
- fd = open (fname, O_RDONLY);
- if (fd == -1)
- {
- printf ("cannot open generated file: %m\n");
- result = 1;
- goto out;
- }
-
- elf = elf_begin (fd, ELF_C_READ, NULL);
- if (elf == NULL)
- {
- printf ("cannot create ELF descriptor: %s\n", elf_errmsg (-1));
- result = 1;
- goto out_close;
- }
- if (elf_kind (elf) != ELF_K_ELF)
- {
- puts ("not a valid ELF file");
- result = 1;
- goto out_close2;
- }
-
- ehdr = gelf_getehdr (elf, &ehdr_mem);
- if (ehdr == NULL)
- {
- printf ("cannot get ELF header: %s\n", elf_errmsg (-1));
- result = 1;
- goto out_close2;
- }
-
- if (memcmp (ehdr, &expected_ehdr, sizeof (GElf_Ehdr)) != 0)
- {
- puts ("ELF header does not match");
- result = 1;
- goto out_close2;
- }
-
- for (cnt = 1; cnt < 3; ++cnt)
- {
- Elf_Scn *scn;
- GElf_Shdr shdr_mem;
- GElf_Shdr *shdr;
-
- scn = elf_getscn (elf, cnt);
- if (scn == NULL)
- {
- printf ("cannot get section %Zd: %s\n", cnt, elf_errmsg (-1));
- result = 1;
- continue;
- }
-
- shdr = gelf_getshdr (scn, &shdr_mem);
- if (shdr == NULL)
- {
- printf ("cannot get section header for section %Zd: %s\n",
- cnt, elf_errmsg (-1));
- result = 1;
- continue;
- }
-
- if (strcmp (elf_strptr (elf, ehdr->e_shstrndx, shdr->sh_name),
- scnnames[cnt]) != 0)
- {
- printf ("section %Zd's name differs: %s vs %s\n", cnt,
- elf_strptr (elf, ehdr->e_shstrndx, shdr->sh_name),
- scnnames[cnt]);
- result = 1;
- }
-
- if (shdr->sh_type != (cnt == 2 ? SHT_STRTAB : SHT_PROGBITS))
- {
- printf ("section %Zd's type differs\n", cnt);
- result = 1;
- }
-
- if ((cnt == 1 && shdr->sh_flags != (SHF_ALLOC | SHF_WRITE))
- || (cnt == 2 && shdr->sh_flags != 0))
- {
- printf ("section %Zd's flags differs\n", cnt);
- result = 1;
- }
-
- if (shdr->sh_addr != 0)
- {
- printf ("section %Zd's address differs\n", cnt);
- result = 1;
- }
-
- if ((cnt == 1 && shdr->sh_offset != ((sizeof (Elf32_Ehdr) + 15) & ~15))
- || (cnt == 2
- && shdr->sh_offset != (((sizeof (Elf32_Ehdr) + 15) & ~15)
- + sizeof (expecteddata))))
- {
- printf ("section %Zd's offset differs\n", cnt);
- result = 1;
- }
-
- if ((cnt == 1 && shdr->sh_size != sizeof (expecteddata))
- || (cnt == 2 && shdr->sh_size != 17))
- {
- printf ("section %Zd's size differs\n", cnt);
- result = 1;
- }
-
- if (shdr->sh_link != 0)
- {
- printf ("section %Zd's link differs\n", cnt);
- result = 1;
- }
-
- if (shdr->sh_info != 0)
- {
- printf ("section %Zd's info differs\n", cnt);
- result = 1;
- }
-
- if ((cnt == 1 && shdr->sh_addralign != 16)
- || (cnt != 1 && shdr->sh_addralign != 1))
- {
- printf ("section %Zd's addralign differs\n", cnt);
- result = 1;
- }
-
- if (shdr->sh_entsize != 0)
- {
- printf ("section %Zd's entsize differs\n", cnt);
- result = 1;
- }
-
- if (cnt == 1)
- {
- Elf_Data *data = elf_getdata (scn, NULL);
-
- if (data == NULL)
- {
- printf ("cannot get data of section %Zd\n", cnt);
- result = 1;
- }
- else
- {
- if (data->d_size != sizeof (expecteddata))
- {
- printf ("data block size of section %Zd wrong: got %Zd, "
- "expected 96\n", cnt, data->d_size);
- result = 1;
- }
-
- if (memcmp (data->d_buf, expecteddata, sizeof (expecteddata))
- != 0)
- {
- printf ("data block content of section %Zd wrong\n", cnt);
- result = 1;
- }
- }
- }
- }
-
- out_close2:
- elf_end (elf);
- out_close:
- close (fd);
- out:
- /* We don't need the file anymore. */
- unlink (fname);
-
- ebl_closebackend (ebl);
-
- return result;
-}
diff --git a/tests/coverage.sh b/tests/coverage.sh
deleted file mode 100755
index 5cc353c..0000000
--- a/tests/coverage.sh
+++ /dev/null
@@ -1,40 +0,0 @@
-#! /bin/bash
-
-if [ "x$1" = "x-v" ]; then
- verbose=yes
-else
- verbose=no
-fi
-
-cd ..
-
-for d in lib libasm libdw libdwfl libebl libelf backends src; do
- tmp=$d-data
- cd $d
- unused=0
- unused_files=
- for f in *.gcno; do
- base="$(basename $f .gcno)"
- fc="$base.c"
- gcda="$base.gcda"
- if [ -f "$gcda" ]; then
- gcov -n -a "$fc" |
- gawk "/$d.$fc/ { getline; co=gensub(/.*:(.*)% .*/, \"\\\\1\", \"g\"); co=co+0.0; li=\$4+0; printf \"%-35s %6.2f %5d\n\", \"$d/$fc\", co, li } " >> $tmp
- else
- unused=$(($unused + 1))
- unused_files="$unused_files $fc"
- fi
- done
- if [ -f $tmp ]; then
- gawk "{ copct=\$2; co=(\$3*copct)/100; toco+=(co+0); toli += (\$3+0); } END { printf \"%-12s %6.2f%% covered unused files: %3d\n\", \"$d\", (toco*100)/toli, \"$unused\" }" $tmp
- rm -f $tmp
- else
- printf "%-12s 0.00%% covered unused files: %3d\n" "$d" $unused
- fi
- if [ $verbose = yes ]; then
- for f in $unused_files; do
- printf '%-42s%s\n' '' $f
- done
- fi
- cd ..
-done
diff --git a/tests/dwfl-addr-sect.c b/tests/dwfl-addr-sect.c
deleted file mode 100644
index 62d1154..0000000
--- a/tests/dwfl-addr-sect.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/* Test program for libdwfl ... foo
- Copyright (C) 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <config.h>
-#include <assert.h>
-#include <inttypes.h>
-#include <sys/types.h>
-#include <stdio.h>
-#include <stdio_ext.h>
-#include <stdlib.h>
-#include <string.h>
-#include <error.h>
-#include <locale.h>
-#include <argp.h>
-#include ELFUTILS_HEADER(dwfl)
-#include <dwarf.h>
-
-static int
-handle_address (Dwfl *dwfl, Dwarf_Addr address)
-{
- Dwfl_Module *mod = dwfl_addrmodule (dwfl, address);
- Dwarf_Addr adjusted = address;
- Dwarf_Addr bias;
- Elf_Scn *scn = dwfl_module_address_section (mod, &adjusted, &bias);
- if (scn == NULL)
- {
- error (0, 0, "%#" PRIx64 ": dwfl_module_address_section: %s",
- address, dwfl_errmsg (-1));
- return 1;
- }
- printf ("address %#" PRIx64 " => module \"%s\" section %zu + %#" PRIx64 "\n",
- address,
- dwfl_module_info (mod, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
- elf_ndxscn (scn), adjusted);
- return 0;
-}
-
-int
-main (int argc, char **argv)
-{
- /* We use no threads here which can interfere with handling a stream. */
- (void) __fsetlocking (stdout, FSETLOCKING_BYCALLER);
-
- /* Set locale. */
- (void) setlocale (LC_ALL, "");
-
- int remaining;
- Dwfl *dwfl = NULL;
- (void) argp_parse (dwfl_standard_argp (), argc, argv, 0, &remaining, &dwfl);
- assert (dwfl != NULL);
-
- int result = 0;
- for (; remaining < argc; ++remaining)
- {
- char *endp;
- uintmax_t addr = strtoumax (argv[remaining], &endp, 0);
- if (endp != argv[remaining])
- result |= handle_address (dwfl, addr);
- else
- result = 1;
- }
-
- dwfl_end (dwfl);
-
- return result;
-}
diff --git a/tests/dwfl-bug-addr-overflow.c b/tests/dwfl-bug-addr-overflow.c
deleted file mode 100644
index 0e875da..0000000
--- a/tests/dwfl-bug-addr-overflow.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/* Test program for libdwfl basic module tracking, relocation.
- Copyright (C) 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <config.h>
-#include <assert.h>
-#include <inttypes.h>
-#include <stdio.h>
-#include <stdio_ext.h>
-#include <error.h>
-#include <locale.h>
-#include ELFUTILS_HEADER(dwfl)
-
-
-static const Dwfl_Callbacks offline_callbacks =
- {
- .find_debuginfo = INTUSE(dwfl_standard_find_debuginfo),
- .section_address = INTUSE(dwfl_offline_section_address),
- };
-
-
-int
-main (void)
-{
- /* We use no threads here which can interfere with handling a stream. */
- (void) __fsetlocking (stdout, FSETLOCKING_BYCALLER);
-
- /* Set locale. */
- (void) setlocale (LC_ALL, "");
-
- Dwfl *dwfl = dwfl_begin (&offline_callbacks);
- assert (dwfl != NULL);
-
- Dwfl_Module *high = dwfl_report_module (dwfl, "high",
- UINT64_C (0xffffffff00010000),
- UINT64_C (0xffffffff00020000));
- assert (high);
- Dwfl_Module *low = dwfl_report_module (dwfl, "low",
- UINT64_C (0x00010000),
- UINT64_C (0x00020000));
- assert (low);
- Dwfl_Module *middle = dwfl_report_module (dwfl, "middle",
- UINT64_C (0xffff00010000),
- UINT64_C (0xffff00020000));
- assert (middle);
-
- int ret = dwfl_report_end (dwfl, NULL, NULL);
- assert (ret == 0);
-
- Dwfl_Module *mod = dwfl_addrmodule (dwfl, UINT64_C (0xffffffff00010123));
- assert (mod == high);
- mod = dwfl_addrmodule (dwfl, UINT64_C (0x00010123));
- assert (mod == low);
- mod = dwfl_addrmodule (dwfl, UINT64_C (0xffff00010123));
- assert (mod == middle);
-
- dwfl_end (dwfl);
-
- return 0;
-}
diff --git a/tests/dwfl-bug-fd-leak.c b/tests/dwfl-bug-fd-leak.c
deleted file mode 100644
index 37ff402..0000000
--- a/tests/dwfl-bug-fd-leak.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/* Test program for libdwfl file decriptors leakage.
- Copyright (C) 2007, 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <config.h>
-#include <assert.h>
-#include <inttypes.h>
-#include <stdio.h>
-#include <stdio_ext.h>
-#include <locale.h>
-#include <dirent.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <error.h>
-#include <unistd.h>
-#include <dwarf.h>
-#include <sys/resource.h>
-#include ELFUTILS_HEADER(dwfl)
-
-
-static Dwfl *
-elfutils_open (pid_t pid, Dwarf_Addr address)
-{
- static char *debuginfo_path;
- static const Dwfl_Callbacks proc_callbacks =
- {
- .find_debuginfo = dwfl_standard_find_debuginfo,
- .debuginfo_path = &debuginfo_path,
-
- .find_elf = dwfl_linux_proc_find_elf,
- };
- Dwfl *dwfl = dwfl_begin (&proc_callbacks);
- if (dwfl == NULL)
- error (2, 0, "dwfl_begin: %s", dwfl_errmsg (-1));
-
- int result = dwfl_linux_proc_report (dwfl, pid);
- if (result < 0)
- error (2, 0, "dwfl_linux_proc_report: %s", dwfl_errmsg (-1));
- else if (result > 0)
- error (2, result, "dwfl_linux_proc_report");
-
- if (dwfl_report_end (dwfl, NULL, NULL) != 0)
- error (2, 0, "dwfl_report_end: %s", dwfl_errmsg (-1));
-
- Dwarf_Addr bias;
- Dwarf *dbg = dwfl_addrdwarf (dwfl, address, &bias);
- if (dbg != NULL)
- {
- Elf *elf = dwarf_getelf (dbg);
- if (elf == NULL)
- error (2, 0, "dwarf_getelf: %s", dwarf_errmsg (-1));
- }
- else
- {
- Elf *elf = dwfl_module_getelf (dwfl_addrmodule (dwfl, address), &bias);
- if (elf == NULL)
- error (2, 0, "dwfl_module_getelf: %s", dwfl_errmsg (-1));
- }
-
- return dwfl;
-}
-
-static void
-elfutils_close (Dwfl *dwfl)
-{
- dwfl_end (dwfl);
-}
-
-int
-main (void)
-{
- /* We use no threads here which can interfere with handling a stream. */
- (void) __fsetlocking (stdout, FSETLOCKING_BYCALLER);
-
- /* Set locale. */
- (void) setlocale (LC_ALL, "");
-
- struct rlimit fd_limit = { .rlim_cur = 32, .rlim_max = 32 };
- if (setrlimit (RLIMIT_NOFILE, &fd_limit) < 0)
- error (2, errno, "setrlimit");
-
- for (int i = 0; i < 5000; ++i)
- {
- Dwfl *dwfl = elfutils_open (getpid (), (Dwarf_Addr) (uintptr_t) &main);
- elfutils_close (dwfl);
- }
-
- return 0;
-}
diff --git a/tests/dwfl-bug-getmodules.c b/tests/dwfl-bug-getmodules.c
deleted file mode 100644
index f7042c0..0000000
--- a/tests/dwfl-bug-getmodules.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/* Test program for dwfl_getmodules bug.
- Copyright (C) 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <config.h>
-#include ELFUTILS_HEADER(dwfl)
-
-#include <error.h>
-
-static const Dwfl_Callbacks callbacks =
- {
- .find_elf = dwfl_linux_proc_find_elf,
- .find_debuginfo = dwfl_standard_find_debuginfo,
- };
-
-static int
-iterate (Dwfl_Module *mod __attribute__ ((unused)),
- void **userdata __attribute__ ((unused)),
- const char *name __attribute__ ((unused)),
- Dwarf_Addr base, void *arg)
-{
- if (base != 0x2000)
- return DWARF_CB_OK;
-
- if (dwfl_addrmodule (arg, 0x2100) == NULL)
- error (1, 0, "dwfl_addrmodule: %s", dwfl_errmsg (-1));
-
- return DWARF_CB_ABORT;
-}
-
-int
-main (void)
-{
- Dwfl *dwfl = dwfl_begin (&callbacks);
-
- dwfl_report_module (dwfl, "m1", 0, 0x1000);
- dwfl_report_module (dwfl, "m2", 0x2000, 0x3000);
- dwfl_report_module (dwfl, "m3", 0x4000, 0x5000);
-
- dwfl_report_end (dwfl, NULL, NULL);
-
- ptrdiff_t offset = dwfl_getmodules (dwfl, &iterate, dwfl, 0);
- if (offset <= 0)
- error (1, 0, "dwfl_getmodules: %s", dwfl_errmsg (-1));
-
- offset = dwfl_getmodules (dwfl, &iterate, NULL, offset);
- if (offset != 0)
- error (1, 0, "dwfl_getmodules (%d): %s", (int) offset, dwfl_errmsg (-1));
-
- dwfl_end (dwfl);
-
- return 0;
-}
diff --git a/tests/dwfl-bug-report.c b/tests/dwfl-bug-report.c
deleted file mode 100644
index 459a41a..0000000
--- a/tests/dwfl-bug-report.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Test program for dwfl_report_end bug.
- Copyright (C) 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <config.h>
-#include ELFUTILS_HEADER(dwfl)
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-
-static const Dwfl_Callbacks callbacks =
- {
- .find_elf = dwfl_linux_proc_find_elf,
- .find_debuginfo = dwfl_standard_find_debuginfo,
- };
-
-int
-main (void)
-{
- Dwfl *dwfl = dwfl_begin (&callbacks);
-
- for (int i = 0; i < 5; ++i)
- {
- dwfl_report_begin (dwfl);
- dwfl_report_module (dwfl, "module1", 0, 10);
- dwfl_report_end (dwfl, NULL, NULL);
- }
-
- dwfl_end (dwfl);
-
- return 0;
-}
diff --git a/tests/dwflmodtest.c b/tests/dwflmodtest.c
deleted file mode 100644
index 94f960f..0000000
--- a/tests/dwflmodtest.c
+++ /dev/null
@@ -1,295 +0,0 @@
-/* Test program for libdwfl basic module tracking, relocation.
- Copyright (C) 2005, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <config.h>
-#include <assert.h>
-#include <inttypes.h>
-#include <sys/types.h>
-#include <stdio.h>
-#include <stdio_ext.h>
-#include <stdlib.h>
-#include <string.h>
-#include <error.h>
-#include <locale.h>
-#include <argp.h>
-#include ELFUTILS_HEADER(dwfl)
-#include <dwarf.h>
-
-static bool show_inlines;
-
-struct info
-{
- Dwarf_Die *cudie;
- Dwarf_Addr dwbias;
-};
-
-static int
-print_instance (Dwarf_Die *instance, void *arg)
-{
- const struct info *info = arg;
-
- printf (" inlined");
-
- Dwarf_Files *files;
- if (dwarf_getsrcfiles (info->cudie, &files, NULL) == 0)
- {
- Dwarf_Attribute attr_mem;
- Dwarf_Word val;
- if (dwarf_formudata (dwarf_attr (instance, DW_AT_call_file,
- &attr_mem), &val) == 0)
- {
- const char *file = dwarf_filesrc (files, val, NULL, NULL);
- int lineno = 0, colno = 0;
- if (dwarf_formudata (dwarf_attr (instance, DW_AT_call_line,
- &attr_mem), &val) == 0)
- lineno = val;
- if (dwarf_formudata (dwarf_attr (instance, DW_AT_call_column,
- &attr_mem), &val) == 0)
- colno = val;
- if (lineno == 0)
- {
- if (file != NULL)
- printf (" from %s", file);
- }
- else if (colno == 0)
- printf (" at %s:%u", file, lineno);
- else
- printf (" at %s:%u:%u", file, lineno, colno);
- }
- }
-
- Dwarf_Addr lo = -1, hi = -1, entry = -1;
- if (dwarf_lowpc (instance, &lo) == 0)
- lo += info->dwbias;
- else
- printf (" (lowpc => %s)", dwarf_errmsg (-1));
- if (dwarf_highpc (instance, &hi) == 0)
- hi += info->dwbias;
- else
- printf (" (highpc => %s)", dwarf_errmsg (-1));
-
- Dwarf_Attribute attr_mem;
- Dwarf_Attribute *attr = dwarf_attr (instance, DW_AT_entry_pc, &attr_mem);
- if (attr != NULL)
- {
- if (dwarf_formaddr (attr, &entry) == 0)
- entry += info->dwbias;
- else
- printf (" (entrypc => %s)", dwarf_errmsg (-1));
- }
-
- if (lo != (Dwarf_Addr) -1 || hi != (Dwarf_Addr) -1)
- printf (" %#" PRIx64 "..%#" PRIx64, lo, hi);
- if (entry != (Dwarf_Addr) -1)
- printf (" => %#" PRIx64 "\n", entry);
- else
- puts ("");
-
- return DWARF_CB_OK;
-}
-
-static void
-print_inline (Dwarf_Die *func, void *arg)
-{
- if (dwarf_func_inline_instances (func, &print_instance, arg) != 0)
- printf (" error finding instances: %s\n", dwarf_errmsg (-1));
-}
-
-static int
-print_func (Dwarf_Die *func, void *arg)
-{
- const struct info *info = arg;
-
- const char *file = dwarf_decl_file (func);
- int line = -1;
- dwarf_decl_line (func, &line);
- const char *fct = dwarf_diename (func);
-
- printf (" %s:%d: %s:", file, line, fct);
-
- if (dwarf_func_inline (func))
- {
- puts (" inline function");
- if (show_inlines)
- print_inline (func, arg);
- }
- else
- {
- Dwarf_Addr lo = -1, hi = -1, entry = -1;
- if (dwarf_lowpc (func, &lo) == 0)
- lo += info->dwbias;
- else
- printf (" (lowpc => %s)", dwarf_errmsg (-1));
- if (dwarf_highpc (func, &hi) == 0)
- hi += info->dwbias;
- else
- printf (" (highpc => %s)", dwarf_errmsg (-1));
- if (dwarf_entrypc (func, &entry) == 0)
- entry += info->dwbias;
- else
- printf (" (entrypc => %s)", dwarf_errmsg (-1));
-
- if (lo != (Dwarf_Addr) -1 || hi != (Dwarf_Addr) -1
- || entry != (Dwarf_Addr) -1)
- printf (" %#" PRIx64 "..%#" PRIx64 " => %#" PRIx64 "\n",
- lo, hi, entry);
- else
- puts ("");
- }
-
- return DWARF_CB_OK;
-}
-
-static int
-list_module (Dwfl_Module *mod __attribute__ ((unused)),
- void **userdata __attribute__ ((unused)),
- const char *name, Dwarf_Addr base,
- void *arg __attribute__ ((unused)))
-{
- Dwarf_Addr start;
- Dwarf_Addr end;
- const char *file;
- const char *debug;
- if (dwfl_module_info (mod, NULL, &start, &end,
- NULL, NULL, &file, &debug) != name
- || start != base)
- abort ();
- printf ("module: %30s %08" PRIx64 "..%08" PRIx64 " %s %s\n",
- name, start, end, file, debug);
- return DWARF_CB_OK;
-}
-
-static int
-print_module (Dwfl_Module *mod __attribute__ ((unused)),
- void **userdata __attribute__ ((unused)),
- const char *name, Dwarf_Addr base,
- Dwarf *dw, Dwarf_Addr bias,
- void *arg)
-{
- printf ("module: %30s %08" PRIx64 " %s %" PRIx64 " (%s)\n",
- name, base, dw == NULL ? "no" : "DWARF", bias, dwfl_errmsg (-1));
-
- if (dw != NULL && *(const bool *) arg)
- {
- Dwarf_Off off = 0;
- size_t cuhl;
- Dwarf_Off noff;
-
- while (dwarf_nextcu (dw, off, &noff, &cuhl, NULL, NULL, NULL) == 0)
- {
- Dwarf_Die die_mem;
- struct info info = { dwarf_offdie (dw, off + cuhl, &die_mem), bias };
- (void) dwarf_getfuncs (info.cudie, print_func, &info, 0);
-
- off = noff;
- }
- }
-
- return DWARF_CB_OK;
-}
-
-static bool show_functions;
-
-/* gettext helper macro. */
-#undef N_
-#define N_(Str) Str
-
-static const struct argp_option options[] =
- {
- { "functions", 'f', NULL, 0, N_("Additionally show function names"), 0 },
- { "inlines", 'i', NULL, 0, N_("Show instances of inlined functions"), 0 },
- { NULL, 0, NULL, 0, NULL, 0 }
- };
-
-static error_t
-parse_opt (int key, char *arg __attribute__ ((unused)),
- struct argp_state *state __attribute__ ((unused)))
-{
- switch (key)
- {
- case ARGP_KEY_INIT:
- state->child_inputs[0] = state->input;
- break;
-
- case 'f':
- show_functions = true;
- break;
-
- case 'i':
- show_inlines = show_functions = true;
- break;
-
- default:
- return ARGP_ERR_UNKNOWN;
- }
- return 0;
-}
-
-int
-main (int argc, char **argv)
-{
- /* We use no threads here which can interfere with handling a stream. */
- (void) __fsetlocking (stdout, FSETLOCKING_BYCALLER);
-
- /* Set locale. */
- (void) setlocale (LC_ALL, "");
-
- Dwfl *dwfl = NULL;
- const struct argp_child argp_children[] =
- {
- { .argp = dwfl_standard_argp () },
- { .argp = NULL }
- };
- const struct argp argp =
- {
- options, parse_opt, NULL, NULL, argp_children, NULL, NULL
- };
- (void) argp_parse (&argp, argc, argv, 0, NULL, &dwfl);
- assert (dwfl != NULL);
-
- ptrdiff_t p = 0;
- do
- p = dwfl_getmodules (dwfl, &list_module, NULL, p);
- while (p > 0);
- if (p < 0)
- error (2, 0, "dwfl_getmodules: %s", dwfl_errmsg (-1));
-
- do
- p = dwfl_getdwarf (dwfl, &print_module, &show_functions, p);
- while (p > 0);
- if (p < 0)
- error (2, 0, "dwfl_getdwarf: %s", dwfl_errmsg (-1));
-
- p = 0;
- do
- p = dwfl_getmodules (dwfl, &list_module, NULL, p);
- while (p > 0);
- if (p < 0)
- error (2, 0, "dwfl_getmodules: %s", dwfl_errmsg (-1));
-
- dwfl_end (dwfl);
-
- return 0;
-}
diff --git a/tests/early-offscn.c b/tests/early-offscn.c
deleted file mode 100644
index 8778d50..0000000
--- a/tests/early-offscn.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Copyright (C) 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <errno.h>
-#include <error.h>
-#include <fcntl.h>
-#include <gelf.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-int
-main (int argc, char *argv[])
-{
- if (argc < 2)
- error (1, 0, "Usage: %s FILE OFFSET", argv[0]);
-
- /* Set the ELF version. */
- elf_version (EV_CURRENT);
-
- /* Open the archive. */
- int fd = open (argv[1], O_RDONLY);
- if (fd < 0)
- error (1, errno, "cannot open '%s'", argv[1]);
-
- Elf *elf = elf_begin (fd, ELF_C_READ, NULL);
- if (elf == NULL)
- error (2, 0, "elf_begin: %s", elf_errmsg (-1));
-
- Elf_Scn *scn = gelf_offscn (elf, strtoull (argv[2], NULL, 0));
- if (scn == NULL)
- error (3, 0, "gelf_offscn: %s", elf_errmsg (-1));
-
- elf_end (elf);
- return 0;
-}
diff --git a/tests/ecp.c b/tests/ecp.c
deleted file mode 100644
index 9d0a706..0000000
--- a/tests/ecp.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/* Copyright (C) 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <errno.h>
-#include <error.h>
-#include <fcntl.h>
-#include <gelf.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-int
-main (int argc, char *argv[])
-{
- if (argc < 3)
- error (EXIT_FAILURE, 0, "usage: %s FROMNAME TONAME", argv[0]);
-
- elf_version (EV_CURRENT);
-
- int infd = open (argv[1], O_RDONLY);
- if (infd == -1)
- error (EXIT_FAILURE, errno, "cannot open input file '%s'", argv[1]);
-
- Elf *inelf = elf_begin (infd, ELF_C_READ, NULL);
- if (inelf == NULL)
- error (EXIT_FAILURE, 0, "problems opening '%s' as ELF file: %s",
- argv[1], elf_errmsg (-1));
-
- int outfd = creat (argv[2], 0666);
- if (outfd == -1)
- error (EXIT_FAILURE, errno, "cannot open output file '%s'", argv[2]);
-
- Elf *outelf = elf_begin (outfd, ELF_C_WRITE, NULL);
- if (outelf == NULL)
- error (EXIT_FAILURE, 0, "problems opening '%s' as ELF file: %s",
- argv[2], elf_errmsg (-1));
-
- gelf_newehdr (outelf, gelf_getclass (inelf));
-
- GElf_Ehdr ehdr_mem;
- GElf_Ehdr *ehdr;
- gelf_update_ehdr (outelf, (ehdr = gelf_getehdr (inelf, &ehdr_mem)));
-
- if (ehdr->e_phnum > 0)
- {
- int cnt;
-
- if (gelf_newphdr (outelf, ehdr->e_phnum) == 0)
- error (EXIT_FAILURE, 0, "cannot create program header: %s",
- elf_errmsg (-1));
-
- for (cnt = 0; cnt < ehdr->e_phnum; ++cnt)
- {
- GElf_Phdr phdr_mem;
-
- gelf_update_phdr (outelf, cnt, gelf_getphdr (inelf, cnt, &phdr_mem));
- }
- }
-
- Elf_Scn *scn = NULL;
- while ((scn = elf_nextscn (inelf, scn)) != NULL)
- {
- Elf_Scn *newscn = elf_newscn (outelf);
-
- GElf_Shdr shdr_mem;
- gelf_update_shdr (newscn, gelf_getshdr (scn, &shdr_mem));
-
- *elf_newdata (newscn) = *elf_getdata (scn, NULL);
- }
-
- elf_flagelf (outelf, ELF_C_SET, ELF_F_LAYOUT);
-
- if (elf_update (outelf, ELF_C_WRITE) == -1)
- error (EXIT_FAILURE, 0, "elf_update failed: %s", elf_errmsg (-1));
-
- elf_end (outelf);
- close (outfd);
-
- elf_end (inelf);
-
- return 0;
-}
diff --git a/tests/find-prologues.c b/tests/find-prologues.c
deleted file mode 100644
index c0e73d0..0000000
--- a/tests/find-prologues.c
+++ /dev/null
@@ -1,116 +0,0 @@
-/* Test program for dwarf_entry_breakpoints.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <config.h>
-#include <assert.h>
-#include <inttypes.h>
-#include ELFUTILS_HEADER(dwfl)
-#include <dwarf.h>
-#include <argp.h>
-#include <stdio.h>
-#include <stdio_ext.h>
-#include <locale.h>
-#include <stdlib.h>
-#include <error.h>
-#include <string.h>
-#include <fnmatch.h>
-
-
-struct args
-{
- Dwfl *dwfl;
- Dwarf_Die *cu;
- Dwarf_Addr dwbias;
- char **argv;
-};
-
-static int
-handle_function (Dwarf_Die *func, void *arg)
-{
- struct args *a = arg;
-
- const char *name = dwarf_diename (func);
- char **argv = a->argv;
- if (argv[0] != NULL)
- {
- bool match;
- do
- match = fnmatch (*argv, name, 0) == 0;
- while (!match && *++argv);
- if (!match)
- return 0;
- }
-
- if (dwarf_func_inline (func))
- return 0;
-
- Dwarf_Addr entrypc;
- if (dwarf_entrypc (func, &entrypc) != 0)
- error (EXIT_FAILURE, 0, "dwarf_entrypc: %s: %s",
- dwarf_diename (func), dwarf_errmsg (-1));
- entrypc += a->dwbias;
-
- printf ("%-16s %#.16" PRIx64, dwarf_diename (func), entrypc);
-
- Dwarf_Addr *bkpts = NULL;
- int result = dwarf_entry_breakpoints (func, &bkpts);
- if (result <= 0)
- printf ("\t%s\n", dwarf_errmsg (-1));
- else
- {
- for (int i = 0; i < result; ++i)
- printf (" %#.16" PRIx64 "%s", bkpts[i] + a->dwbias,
- i == result - 1 ? "\n" : "");
- free (bkpts);
- }
-
- return 0;
-}
-
-
-int
-main (int argc, char *argv[])
-{
- int remaining;
-
- /* Set locale. */
- (void) setlocale (LC_ALL, "");
-
- struct args a = { .dwfl = NULL, .cu = NULL };
-
- (void) argp_parse (dwfl_standard_argp (), argc, argv, 0, &remaining,
- &a.dwfl);
- assert (a.dwfl != NULL);
- a.argv = &argv[remaining];
-
- int result = 0;
-
- while ((a.cu = dwfl_nextcu (a.dwfl, a.cu, &a.dwbias)) != NULL)
- dwarf_getfuncs (a.cu, &handle_function, &a, 0);
-
- dwfl_end (a.dwfl);
-
- return result;
-}
diff --git a/tests/funcretval.c b/tests/funcretval.c
deleted file mode 100644
index 3a8750f..0000000
--- a/tests/funcretval.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/* Test program for dwfl_module_return_value_location.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <config.h>
-#include <assert.h>
-#include <inttypes.h>
-#include ELFUTILS_HEADER(dwfl)
-#include <dwarf.h>
-#include <argp.h>
-#include <stdio.h>
-#include <stdio_ext.h>
-#include <locale.h>
-#include <stdlib.h>
-#include <error.h>
-#include <string.h>
-#include <fnmatch.h>
-
-
-struct args
-{
- Dwfl *dwfl;
- Dwarf_Die *cu;
- Dwarf_Addr dwbias;
- char **argv;
-};
-
-static int
-handle_function (Dwarf_Die *funcdie, void *arg)
-{
- struct args *a = arg;
-
- const char *name = dwarf_diename (funcdie);
- char **argv = a->argv;
- if (argv[0] != NULL)
- {
- bool match;
- do
- match = fnmatch (*argv, name, 0) == 0;
- while (!match && *++argv);
- if (!match)
- return 0;
- }
-
- printf ("(%s) %s: ", dwfl_module_info (dwfl_cumodule (a->cu), NULL,
- NULL, NULL,
- NULL, NULL,
- NULL, NULL), name);
-
- const Dwarf_Op *locops;
- int nlocops = dwfl_module_return_value_location (dwfl_cumodule (a->cu),
- funcdie, &locops);
- if (nlocops < 0)
- error (EXIT_FAILURE, 0, "dwfl_module_return_value_location: %s",
- dwfl_errmsg (-1));
- else if (nlocops == 0)
- puts ("returns no value");
- else
- {
- printf ("return value location:");
- for (int i = 0; i < nlocops; ++i)
- printf (" {%#x, %#" PRIx64 "}", locops[i].atom, locops[i].number);
- puts ("");
- }
-
- return 0;
-}
-
-
-int
-main (int argc, char *argv[])
-{
- int remaining;
-
- /* Set locale. */
- (void) setlocale (LC_ALL, "");
-
- struct args a = { .dwfl = NULL, .cu = NULL };
-
- (void) argp_parse (dwfl_standard_argp (), argc, argv, 0, &remaining,
- &a.dwfl);
- assert (a.dwfl != NULL);
- a.argv = &argv[remaining];
-
- int result = 0;
-
- while ((a.cu = dwfl_nextcu (a.dwfl, a.cu, &a.dwbias)) != NULL)
- dwarf_getfuncs (a.cu, &handle_function, &a, 0);
-
- dwfl_end (a.dwfl);
-
- return result;
-}
diff --git a/tests/funcscopes.c b/tests/funcscopes.c
deleted file mode 100644
index 4b58369..0000000
--- a/tests/funcscopes.c
+++ /dev/null
@@ -1,202 +0,0 @@
-/* Test program for dwarf_getscopes.
- Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <config.h>
-#include <assert.h>
-#include <inttypes.h>
-#include ELFUTILS_HEADER(dwfl)
-#include <dwarf.h>
-#include <argp.h>
-#include <stdio.h>
-#include <stdio_ext.h>
-#include <locale.h>
-#include <stdlib.h>
-#include <error.h>
-#include <string.h>
-#include <fnmatch.h>
-
-
-static void
-paddr (const char *prefix, Dwarf_Addr addr, Dwfl_Line *line)
-{
- const char *src;
- int lineno, linecol;
- if (line != NULL
- && (src = dwfl_lineinfo (line, &addr, &lineno, &linecol,
- NULL, NULL)) != NULL)
- {
- if (linecol != 0)
- printf ("%s%#" PRIx64 " (%s:%d:%d)",
- prefix, addr, src, lineno, linecol);
- else
- printf ("%s%#" PRIx64 " (%s:%d)",
- prefix, addr, src, lineno);
- }
- else
- printf ("%s%#" PRIx64, prefix, addr);
-}
-
-
-static void
-print_vars (unsigned int indent, Dwarf_Die *die)
-{
- Dwarf_Die child;
- if (dwarf_child (die, &child) == 0)
- do
- switch (dwarf_tag (&child))
- {
- case DW_TAG_variable:
- case DW_TAG_formal_parameter:
- printf ("%*s%-30s[%6" PRIx64 "]\n", indent, "",
- dwarf_diename (&child),
- (uint64_t) dwarf_dieoffset (&child));
- break;
- default:
- break;
- }
- while (dwarf_siblingof (&child, &child) == 0);
-
- Dwarf_Attribute attr_mem;
- Dwarf_Die origin;
- if (dwarf_hasattr (die, DW_AT_abstract_origin)
- && dwarf_formref_die (dwarf_attr (die, DW_AT_abstract_origin, &attr_mem),
- &origin) != NULL
- && dwarf_child (&origin, &child) == 0)
- do
- switch (dwarf_tag (&child))
- {
- case DW_TAG_variable:
- case DW_TAG_formal_parameter:
- printf ("%*s%s (abstract)\n", indent, "",
- dwarf_diename (&child));
- break;
- default:
- break;
- }
- while (dwarf_siblingof (&child, &child) == 0);
-}
-
-
-#define INDENT 4
-
-struct args
-{
- Dwfl *dwfl;
- Dwarf_Die *cu;
- Dwarf_Addr dwbias;
- char **argv;
-};
-
-static int
-handle_function (Dwarf_Die *funcdie, void *arg)
-{
- struct args *a = arg;
-
- const char *name = dwarf_diename (funcdie);
- char **argv = a->argv;
- if (argv[0] != NULL)
- {
- bool match;
- do
- match = fnmatch (*argv, name, 0) == 0;
- while (!match && *++argv);
- if (!match)
- return 0;
- }
-
- Dwarf_Die *scopes;
- int n = dwarf_getscopes_die (funcdie, &scopes);
- if (n <= 0)
- error (EXIT_FAILURE, 0, "dwarf_getscopes_die: %s", dwarf_errmsg (-1));
- else
- {
- Dwarf_Addr start, end;
- const char *fname;
- const char *modname = dwfl_module_info (dwfl_cumodule (a->cu), NULL,
- &start, &end,
- NULL, NULL,
- &fname, NULL);
- if (modname == NULL)
- error (EXIT_FAILURE, 0, "dwfl_module_info: %s", dwarf_errmsg (-1));
- if (modname[0] == '\0')
- modname = fname;
- printf ("%s: %#" PRIx64 " .. %#" PRIx64 "\n", modname, start, end);
-
- unsigned int indent = 0;
- while (n-- > 0)
- {
- Dwarf_Die *const die = &scopes[n];
-
- indent += INDENT;
- printf ("%*s%s (%#x)", indent, "",
- dwarf_diename (die) ?: "<unnamed>",
- dwarf_tag (die));
-
- Dwarf_Addr lowpc, highpc;
- if (dwarf_lowpc (die, &lowpc) == 0
- && dwarf_highpc (die, &highpc) == 0)
- {
- lowpc += a->dwbias;
- highpc += a->dwbias;
- Dwfl_Line *loline = dwfl_getsrc (a->dwfl, lowpc);
- Dwfl_Line *hiline = dwfl_getsrc (a->dwfl, highpc);
- paddr (": ", lowpc, loline);
- if (highpc != lowpc)
- paddr (" .. ", lowpc, hiline == loline ? NULL : hiline);
- }
- puts ("");
-
- print_vars (indent + INDENT, die);
- }
- }
-
- return 0;
-}
-
-
-int
-main (int argc, char *argv[])
-{
- int remaining;
-
- /* Set locale. */
- (void) setlocale (LC_ALL, "");
-
- struct args a = { .dwfl = NULL, .cu = NULL };
-
- (void) argp_parse (dwfl_standard_argp (), argc, argv, 0, &remaining,
- &a.dwfl);
- assert (a.dwfl != NULL);
- a.argv = &argv[remaining];
-
- int result = 0;
-
- while ((a.cu = dwfl_nextcu (a.dwfl, a.cu, &a.dwbias)) != NULL)
- dwarf_getfuncs (a.cu, &handle_function, &a, 0);
-
- dwfl_end (a.dwfl);
-
- return result;
-}
diff --git a/tests/get-aranges.c b/tests/get-aranges.c
deleted file mode 100644
index c6cd511..0000000
--- a/tests/get-aranges.c
+++ /dev/null
@@ -1,150 +0,0 @@
-/* Copyright (C) 2002, 2004 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <fcntl.h>
-#include <libelf.h>
-#include ELFUTILS_HEADER(dw)
-#include <stdio.h>
-#include <unistd.h>
-
-
-static const Dwarf_Addr testaddr[] =
-{
- 0x804842b, 0x804842c, 0x804843c, 0x8048459, 0x804845a,
- 0x804845b, 0x804845c, 0x8048460, 0x8048465, 0x8048466,
- 0x8048467, 0x8048468, 0x8048470, 0x8048471, 0x8048472
-};
-#define ntestaddr (sizeof (testaddr) / sizeof (testaddr[0]))
-
-
-int
-main (int argc, char *argv[])
-{
- int result = 0;
- int cnt;
-
- for (cnt = 1; cnt < argc; ++cnt)
- {
- int fd = open (argv[cnt], O_RDONLY);
-
- Dwarf *dbg = dwarf_begin (fd, DWARF_C_READ);
- if (dbg == NULL)
- {
- printf ("%s not usable\n", argv[cnt]);
- result = 1;
- close (fd);
- continue;
- }
-
- Dwarf_Aranges *aranges;
- size_t naranges;
- if (dwarf_getaranges (dbg, &aranges, &naranges) != 0)
- printf ("%s: cannot get aranges\n", argv[cnt]);
- else
- {
- for (size_t i = 0; i < ntestaddr; ++i)
- {
- Dwarf_Arange *found;
-
- found = dwarf_getarange_addr (aranges, testaddr[i]);
- if (found != NULL)
- {
- Dwarf_Off cu_offset;
-
- if (dwarf_getarangeinfo (found, NULL, NULL, &cu_offset) != 0)
- {
- puts ("failed to get CU die offset");
- result = 1;
- }
- else
- {
- const char *cuname;
- Dwarf_Die cu_die;
-
- if (dwarf_offdie (dbg, cu_offset, &cu_die) == NULL
- || (cuname = dwarf_diename (&cu_die)) == NULL)
- {
- puts ("failed to get CU die");
- result = 1;
- }
- else
- printf ("CU name: \"%s\"\n", cuname);
- }
- }
- else
- printf ("%#llx: not in range\n",
- (unsigned long long int) testaddr[i]);
- }
-
- for (size_t i = 0; i < naranges; ++i)
- {
- Dwarf_Arange *arange = dwarf_onearange (aranges, i);
- if (arange == NULL)
- {
- printf ("cannot get arange %zu: %s\n", i, dwarf_errmsg (-1));
- break;
- }
-
- Dwarf_Addr start;
- Dwarf_Word length;
- Dwarf_Off cu_offset;
-
- if (dwarf_getarangeinfo (arange, &start, &length, &cu_offset)
- != 0)
- {
- printf ("cannot get info from aranges[%zu]\n", i);
- result = 1;
- }
- else
- {
- printf (" [%2zu] start: %#llx, length: %llu, cu: %llu\n",
- i, (unsigned long long int) start,
- (unsigned long long int) length,
- (unsigned long long int) cu_offset);
-
- const char *cuname;
- Dwarf_Die cu_die;
- if (dwarf_offdie (dbg, cu_offset, &cu_die) == NULL
- || (cuname = dwarf_diename (&cu_die)) == NULL)
- {
- puts ("failed to get CU die");
- result = 1;
- }
- else
- printf ("CU name: \"%s\"\n", cuname);
- }
- }
- }
-
- dwarf_end (dbg);
- close (fd);
- }
-
- return result;
-}
diff --git a/tests/get-files.c b/tests/get-files.c
deleted file mode 100644
index 81daea2..0000000
--- a/tests/get-files.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/* Copyright (C) 2002, 2004, 2005, 2007 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <fcntl.h>
-#include <libelf.h>
-#include ELFUTILS_HEADER(dw)
-#include <stdio.h>
-#include <unistd.h>
-
-
-int
-main (int argc, char *argv[])
-{
- int result = 0;
- int cnt;
-
- for (cnt = 1; cnt < argc; ++cnt)
- {
- int fd = open (argv[cnt], O_RDONLY);
-
- Dwarf *dbg = dwarf_begin (fd, DWARF_C_READ);
- if (dbg == NULL)
- {
- printf ("%s not usable\n", argv[cnt]);
- result = 1;
- if (fd != -1)
- close (fd);
- continue;
- }
-
- Dwarf_Off o = 0;
- Dwarf_Off ncu;
- Dwarf_Off ao;
- size_t cuhl;
- uint8_t asz;
- uint8_t osz;
- while (dwarf_nextcu (dbg, o, &ncu, &cuhl, &ao, &asz, &osz) == 0)
- {
- printf ("cuhl = %zu, o = %llu, asz = %hhu, osz = %hhu, ncu = %llu\n",
- cuhl, (unsigned long long int) ao,
- asz, osz, (unsigned long long int) ncu);
-
- Dwarf_Die die_mem;
- Dwarf_Die *die = dwarf_offdie (dbg, o + cuhl, &die_mem);
- if (die == NULL)
- {
- printf ("%s: cannot get CU die\n", argv[cnt]);
- result = 1;
- break;
- }
-
- Dwarf_Files *files;
- size_t nfiles;
- if (dwarf_getsrcfiles (die, &files, &nfiles) != 0)
- {
- printf ("%s: cannot get files\n", argv[cnt]);
- result = 1;
- break;
- }
-
- const char *const *dirs;
- size_t ndirs;
- if (dwarf_getsrcdirs (files, &dirs, &ndirs) != 0)
- {
- printf ("%s: cannot get include directories\n", argv[cnt]);
- result = 1;
- break;
- }
-
- if (dirs[0] == NULL)
- puts (" dirs[0] = (null)");
- else
- printf (" dirs[0] = \"%s\"\n", dirs[0]);
- for (size_t i = 1; i < ndirs; ++i)
- printf (" dirs[%zu] = \"%s\"\n", i, dirs[i]);
-
- for (size_t i = 0; i < nfiles; ++i)
- printf (" file[%zu] = \"%s\"\n", i,
- dwarf_filesrc (files, i, NULL, NULL));
-
- o = ncu;
- }
-
- dwarf_end (dbg);
- close (fd);
- }
-
- return result;
-}
diff --git a/tests/get-lines.c b/tests/get-lines.c
deleted file mode 100644
index 45d2c8d..0000000
--- a/tests/get-lines.c
+++ /dev/null
@@ -1,145 +0,0 @@
-/* Copyright (C) 2002, 2004 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <fcntl.h>
-#include <inttypes.h>
-#include <libelf.h>
-#include ELFUTILS_HEADER(dw)
-#include <stdio.h>
-#include <unistd.h>
-
-
-int
-main (int argc, char *argv[])
-{
- int result = 0;
- int cnt;
-
- for (cnt = 1; cnt < argc; ++cnt)
- {
- int fd = open (argv[cnt], O_RDONLY);
-
- Dwarf *dbg = dwarf_begin (fd, DWARF_C_READ);
- if (dbg == NULL)
- {
- printf ("%s not usable: %s\n", argv[cnt], dwarf_errmsg (-1));
- close (fd);
- continue;
- }
-
- Dwarf_Off cuoff = 0;
- Dwarf_Off old_cuoff = 0;
- size_t hsize;
- Dwarf_Off ao;
- uint8_t asz;
- uint8_t osz;
- while (dwarf_nextcu (dbg, cuoff, &cuoff, &hsize, &ao, &asz, &osz) == 0)
- {
- printf ("cuhl = %zu, o = %llu, asz = %hhu, osz = %hhu, ncu = %llu\n",
- hsize, (unsigned long long int) ao,
- asz, osz, (unsigned long long int) cuoff);
-
- /* Get the DIE for the CU. */
- Dwarf_Die die;
- if (dwarf_offdie (dbg, old_cuoff + hsize, &die) == NULL)
- {
- /* Something went wrong. */
- printf ("%s: cannot get CU die\n", argv[cnt]);
- result = 1;
- break;
- }
- old_cuoff = cuoff;
-
- Dwarf_Lines *lb;
- size_t nlb;
- if (dwarf_getsrclines (&die, &lb, &nlb) != 0)
- {
- printf ("%s: cannot get lines\n", argv[cnt]);
- result = 1;
- break;
- }
-
- printf (" %zu lines\n", nlb);
-
- for (size_t i = 0; i < nlb; ++i)
- {
- Dwarf_Line *l = dwarf_onesrcline (lb, i);
- if (l == NULL)
- {
- printf ("%s: cannot get individual line\n", argv[cnt]);
- result = 1;
- break;
- }
-
- Dwarf_Addr addr;
- if (dwarf_lineaddr (l, &addr) != 0)
- addr = 0;
- const char *file = dwarf_linesrc (l, NULL, NULL);
- int line;
- if (dwarf_lineno (l, &line) != 0)
- line = 0;
-
- printf ("%" PRIx64 ": %s:%d:", (uint64_t) addr,
- file ?: "???", line);
-
- int column;
- if (dwarf_linecol (l, &column) != 0)
- column = 0;
- if (column >= 0)
- printf ("%d:", column);
-
- bool is_stmt;
- if (dwarf_linebeginstatement (l, &is_stmt) != 0)
- is_stmt = false;
- bool end_sequence;
- if (dwarf_lineendsequence (l, &end_sequence) != 0)
- end_sequence = false;
- bool basic_block;
- if (dwarf_lineblock (l, &basic_block) != 0)
- basic_block = false;
- bool prologue_end;
- if (dwarf_lineprologueend (l, &prologue_end) != 0)
- prologue_end = false;
- bool epilogue_begin;
- if (dwarf_lineepiloguebegin (l, &epilogue_begin) != 0)
- epilogue_begin = false;
-
- printf (" is_stmt:%s, end_seq:%s, bb:%s, prologue:%s, epilogue:%s\n",
- is_stmt ? "yes" : "no", end_sequence ? "yes" : "no",
- basic_block ? "yes" : "no", prologue_end ? "yes" : "no",
- epilogue_begin ? "yes" : "no");
- }
- }
-
- dwarf_end (dbg);
- close (fd);
- }
-
- return result;
-}
diff --git a/tests/get-pubnames.c b/tests/get-pubnames.c
deleted file mode 100644
index f1361c6..0000000
--- a/tests/get-pubnames.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/* Copyright (C) 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <fcntl.h>
-#include <libelf.h>
-#include ELFUTILS_HEADER(dw)
-#include <stdio.h>
-#include <unistd.h>
-
-
-static int globcnt;
-
-static int
-callback (Dwarf *dbg, Dwarf_Global *gl, void *arg __attribute__ ((unused)))
-{
- int result = DWARF_CB_OK;
-
- printf (" [%2d] \"%s\", die: %llu, cu: %llu\n",
- globcnt++, gl->name, (unsigned long long int) gl->die_offset,
- (unsigned long long int) gl->cu_offset);
-
- Dwarf_Die cu_die;
- const char *cuname;
- if (dwarf_offdie (dbg, gl->cu_offset, &cu_die) == NULL
- || (cuname = dwarf_diename (&cu_die)) == NULL)
- {
- puts ("failed to get CU die");
- result = DWARF_CB_ABORT;
- }
- else
- printf ("CU name: \"%s\"\n", cuname);
-
- const char *diename;
- Dwarf_Die die;
- if (dwarf_offdie (dbg, gl->die_offset, &die) == NULL
- || (diename = dwarf_diename (&die)) == NULL)
- {
- puts ("failed to get object die");
- result = DWARF_CB_ABORT;
- }
- else
- printf ("object name: \"%s\"\n", diename);
-
- return result;
-}
-
-
-int
-main (int argc, char *argv[])
-{
- int result = 0;
- int cnt;
-
- for (cnt = 1; cnt < argc; ++cnt)
- {
- int fd = open (argv[cnt], O_RDONLY);
- Dwarf *dbg = dwarf_begin (fd, DWARF_C_READ);
- if (dbg == NULL)
- {
- printf ("%s not usable: %s\n", argv[cnt], dwarf_errmsg (-1));
- result = 1;
- close (fd);
- continue;
- }
-
- globcnt = 0;
-
- if (dwarf_getpubnames (dbg, callback, NULL, 0) != 0)
- {
- printf ("dwarf_get_pubnames didn't return zero: %s\n",
- dwarf_errmsg (-1));
- result = 1;
- }
-
- dwarf_end (dbg);
- close (fd);
- }
-
- return result;
-}
diff --git a/tests/hash.c b/tests/hash.c
deleted file mode 100644
index ab7efeb..0000000
--- a/tests/hash.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Copyright (C) 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libelf.h>
-#include <stdio.h>
-
-
-static int
-check (const char *name, unsigned long int expected)
-{
- unsigned long int actual = elf_hash (name);
-
- return actual != expected;
-}
-
-
-int
-main (void)
-{
- int status;
-
- /* Check some names. We know what the expected result is. */
- status = check ("_DYNAMIC", 165832675);
- status |= check ("_GLOBAL_OFFSET_TABLE_", 102264335);
-
- return status;
-}
diff --git a/tests/line2addr.c b/tests/line2addr.c
deleted file mode 100644
index 5630da3..0000000
--- a/tests/line2addr.c
+++ /dev/null
@@ -1,156 +0,0 @@
-/* Copyright (C) 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <inttypes.h>
-#include <assert.h>
-#include ELFUTILS_HEADER(dwfl)
-#include <argp.h>
-#include <stdio.h>
-#include <locale.h>
-#include <stdlib.h>
-#include <string.h>
-#include <error.h>
-
-
-static void
-print_address (Dwfl_Module *mod, Dwarf_Addr address)
-{
- int n = dwfl_module_relocations (mod);
- if (n < 0)
- error (0, 0, "dwfl_module_relocations: %s", dwfl_errmsg (-1));
- else if (n > 0)
- {
- int i = dwfl_module_relocate_address (mod, &address);
- if (i < 0)
- error (0, 0, "dwfl_module_relocate_address: %s", dwfl_errmsg (-1));
- else
- {
- const char *modname = dwfl_module_info (mod, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL);
- const char *secname = dwfl_module_relocation_info (mod, i, NULL);
- if (n > 1 || secname[0] != '\0')
- printf ("%s(%s)+%#" PRIx64, modname, secname, address);
- else
- printf ("%s+%#" PRIx64, modname, address);
- return;
- }
- }
-
- printf ("%#" PRIx64, address);
-}
-
-
-struct args
-{
- const char *arg;
- char *file;
- int line;
-};
-
-static int
-handle_module (Dwfl_Module *mod __attribute__ ((unused)),
- void **udata __attribute__ ((unused)),
- const char *modname, Dwarf_Addr base __attribute__ ((unused)),
- Dwarf *dbg __attribute__ ((unused)),
- Dwarf_Addr bias __attribute__ ((unused)), void *arg)
-{
- const struct args *const a = arg;
-
- Dwfl_Line **lines = NULL;
- size_t nlines = 0;
-
- if (dwfl_module_getsrc_file (mod, a->file, a->line, 0, &lines, &nlines) == 0)
- {
- for (size_t inner = 0; inner < nlines; ++inner)
- {
- Dwarf_Addr addr;
- int line = a->line, col = 0;
- const char *file = dwfl_lineinfo (lines[inner], &addr, &line, &col,
- NULL, NULL);
- if (file != NULL)
- {
- printf ("%s -> ", a->arg);
- print_address (mod, addr);
- if (modname[0] != '\0')
- printf (" (%s:", modname);
- if (strcmp (file, a->file) || line != a->line || col != 0)
- printf (" %s%s:%d", modname[0] != '\0' ? "" : "(",
- file, line);
- if (col != 0)
- printf (":%d", col);
- if (modname[0] != '\0'
- || strcmp (file, a->file) || line != a->line || col != 0)
- puts (")");
- else
- puts ("");
- }
- }
- free (lines);
- }
-
- return DWARF_CB_OK;
-}
-
-int
-main (int argc, char *argv[])
-{
- int cnt;
-
- /* Set locale. */
- (void) setlocale (LC_ALL, "");
-
- Dwfl *dwfl = NULL;
- (void) argp_parse (dwfl_standard_argp (), argc, argv, 0, &cnt, &dwfl);
- assert (dwfl != NULL);
-
- for (; cnt < argc; ++cnt)
- {
- struct args a = { .arg = argv[cnt] };
-
- switch (sscanf (a.arg, "%m[^:]:%d", &a.file, &a.line))
- {
- default:
- case 0:
- printf ("ignored %s\n", argv[cnt]);
- continue;
- case 1:
- a.line = 0;
- break;
- case 2:
- break;
- }
-
- (void) dwfl_getdwarf (dwfl, &handle_module, &a, 0);
-
- free (a.file);
- }
-
- dwfl_end (dwfl);
-
- return 0;
-}
diff --git a/tests/msg_tst.c b/tests/msg_tst.c
deleted file mode 100644
index db07853..0000000
--- a/tests/msg_tst.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/* Copyright (C) 2002, 2005, 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <config.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <libelfP.h>
-
-static struct
-{
- int id;
- const char *expected;
-} libelf_msgs[ELF_E_NUM] =
- {
- { ELF_E_NOERROR, "no error" },
- { ELF_E_UNKNOWN_ERROR, "unknown error" },
- { ELF_E_UNKNOWN_VERSION, "unknown version" },
- { ELF_E_UNKNOWN_TYPE, "unknown type" },
- { ELF_E_INVALID_HANDLE, "invalid `Elf' handle" },
- { ELF_E_SOURCE_SIZE, "invalid size of source operand" },
- { ELF_E_DEST_SIZE, "invalid size of destination operand" },
- { ELF_E_INVALID_ENCODING, "invalid encoding" },
- { ELF_E_NOMEM, "out of memory" },
- { ELF_E_INVALID_FILE, "invalid file descriptor" },
- { ELF_E_INVALID_OP, "invalid operation" },
- { ELF_E_NO_VERSION, "ELF version not set" },
- { ELF_E_INVALID_CMD, "invalid command" },
- { ELF_E_RANGE, "offset out of range" },
- { ELF_E_ARCHIVE_FMAG, "invalid fmag field in archive header" },
- { ELF_E_INVALID_ARCHIVE, "invalid archive file" },
- { ELF_E_NO_ARCHIVE, "descriptor is not for an archive" },
- { ELF_E_NO_INDEX, "no index available" },
- { ELF_E_READ_ERROR, "cannot read data from file" },
- { ELF_E_WRITE_ERROR, "cannot write data to file" },
- { ELF_E_INVALID_CLASS, "invalid binary class" },
- { ELF_E_INVALID_INDEX, "invalid section index" },
- { ELF_E_INVALID_OPERAND, "invalid operand" },
- { ELF_E_INVALID_SECTION, "invalid section" },
- { ELF_E_INVALID_COMMAND, "invalid command" },
- { ELF_E_WRONG_ORDER_EHDR, "executable header not created first" },
- { ELF_E_FD_DISABLED, "file descriptor disabled" },
- { ELF_E_FD_MISMATCH, "archive/member fildes mismatch" },
- { ELF_E_OFFSET_RANGE, "offset out of range" },
- { ELF_E_NOT_NUL_SECTION, "cannot manipulate null section" },
- { ELF_E_DATA_MISMATCH, "data/scn mismatch" },
- { ELF_E_INVALID_SECTION_HEADER, "invalid section header" },
- { ELF_E_INVALID_DATA, "invalid data" },
- { ELF_E_DATA_ENCODING, "unknown data encoding" },
- { ELF_E_SECTION_TOO_SMALL, "section `sh_size' too small for data" },
- { ELF_E_INVALID_ALIGN, "invalid section alignment" },
- { ELF_E_INVALID_SHENTSIZE, "invalid section entry size" },
- { ELF_E_UPDATE_RO, "update() for write on read-only file" },
- { ELF_E_NOFILE, "no such file" },
- { ELF_E_GROUP_NOT_REL,
- "only relocatable files can contain section groups" },
- { ELF_E_INVALID_PHDR,
- "program header only allowed in executables, shared objects, \
-and core files" },
- { ELF_E_NO_PHDR, "file has no program header" },
- { ELF_E_INVALID_OFFSET, "invalid offset" }
- };
-
-
-int
-main (void)
-{
- size_t cnt;
- int result = EXIT_SUCCESS;
-
- /* Clear the error state. */
- (void) elf_errno ();
-
- /* Check all the messages of libelf. */
- for (cnt = 1; cnt < ELF_E_NUM; ++cnt)
- {
- const char *str = elf_errmsg (libelf_msgs[cnt].id);
-
- if (strcmp (str, libelf_msgs[cnt].expected) != 0)
- {
- printf ("libelf msg %zu: expected \"%s\", got \"%s\"\n",
- cnt, libelf_msgs[cnt].expected, str);
- result = EXIT_FAILURE;
- }
- }
-
- return result;
-}
diff --git a/tests/newfile.c b/tests/newfile.c
deleted file mode 100644
index f8b132f..0000000
--- a/tests/newfile.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/* Copyright (C) 1999, 2000, 2001, 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1999.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <config.h>
-
-#include <libelf.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-static void
-print_ehdr (Elf32_Ehdr *ehdr)
-{
- int n;
-
- for (n = 0; n < EI_NIDENT; ++n)
- printf (" %02x", ehdr->e_ident[n]);
-
- printf ("\ntype = %d\nmachine = %d\nversion = %d\nentry = %d\n"
- "phoff = %d\nshoff = %d\nflags = %d\nehsize = %d\n"
- "phentsize = %d\nphnum = %d\nshentsize = %d\nshnum = %d\n"
- "shstrndx = %d\n",
- ehdr->e_type,
- ehdr->e_machine,
- ehdr->e_version,
- ehdr->e_entry,
- ehdr->e_phoff,
- ehdr->e_shoff,
- ehdr->e_flags,
- ehdr->e_ehsize,
- ehdr->e_phentsize,
- ehdr->e_phnum,
- ehdr->e_shentsize,
- ehdr->e_shnum,
- ehdr->e_shstrndx);
-}
-
-int
-main (int argc, char *argv[] __attribute__ ((unused)))
-{
- Elf *elf;
- int result = 0;
- int fd;
- char fname[] = "newfile-XXXXXX";
-
- fd = mkstemp (fname);
- if (fd == -1)
- {
- printf ("cannot create temporary file: %m\n");
- exit (1);
- }
- /* Remove the file when we exit. */
- unlink (fname);
-
- elf_version (EV_CURRENT);
- elf = elf_begin (fd, ELF_C_WRITE, NULL);
- if (elf == NULL)
- {
- printf ("elf_begin: %s\n", elf_errmsg (-1));
- result = 1;
- }
- else
- {
- if (elf32_newehdr (elf) == NULL)
- {
- printf ("elf32_newehdr: %s\n", elf_errmsg (-1));
- result = 1;
- }
- else
- {
- Elf32_Ehdr *ehdr = elf32_getehdr (elf);
-
- if (ehdr == NULL)
- {
- printf ("elf32_getehdr: %s\n", elf_errmsg (-1));
- result = 1;
- }
- else
- {
- int i;
-
- if (argc > 1)
- /* Use argc as a debugging flag. */
- print_ehdr (ehdr);
-
- /* Some tests. */
- for (i = 0; i < EI_NIDENT; ++i)
- if (ehdr->e_ident[i] != 0)
- {
- printf ("ehdr->e_ident[%d] != 0\n", i);
- result = 1;
- break;
- }
-
-#define VALUE_TEST(name, val) \
- if (ehdr->name != val) \
- { \
- printf ("ehdr->%s != %d\n", #name, val); \
- result = 1; \
- }
-#define ZERO_TEST(name) VALUE_TEST (name, 0)
- ZERO_TEST (e_type);
- ZERO_TEST (e_machine);
- ZERO_TEST (e_version);
- ZERO_TEST (e_entry);
- ZERO_TEST (e_phoff);
- ZERO_TEST (e_shoff);
- ZERO_TEST (e_flags);
- ZERO_TEST (e_ehsize);
- ZERO_TEST (e_phentsize);
- ZERO_TEST (e_phnum);
- ZERO_TEST (e_shentsize);
- ZERO_TEST (e_shnum);
- ZERO_TEST (e_shstrndx);
-
- if (elf32_newphdr (elf, 10) == NULL)
- {
- printf ("elf32_newphdr: %s\n", elf_errmsg (-1));
- result = 1;
- }
- else
- {
- if (argc > 1)
- print_ehdr (ehdr);
-
- ehdr = elf32_getehdr (elf);
- if (ehdr == NULL)
- {
- printf ("elf32_getehdr (#2): %s\n", elf_errmsg (-1));
- result = 1;
- }
- else
- {
- ZERO_TEST (e_type);
- ZERO_TEST (e_machine);
- ZERO_TEST (e_version);
- ZERO_TEST (e_entry);
- ZERO_TEST (e_phoff);
- ZERO_TEST (e_shoff);
- ZERO_TEST (e_flags);
- ZERO_TEST (e_ehsize);
- VALUE_TEST (e_phentsize, (int) sizeof (Elf32_Phdr));
- VALUE_TEST (e_phnum, 10);
- ZERO_TEST (e_shentsize);
- ZERO_TEST (e_shnum);
- ZERO_TEST (e_shstrndx);
- }
- }
- }
- }
-
- (void) elf_end (elf);
- }
-
- return result;
-}
diff --git a/tests/newscn.c b/tests/newscn.c
deleted file mode 100644
index 56eae97..0000000
--- a/tests/newscn.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/* Copyright (C) 1999, 2000, 2001, 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <fcntl.h>
-#include <libelf.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-
-int
-main (void)
-{
- Elf *elf;
- int fd;
- Elf_Scn *section;
-
- if (elf_version (EV_CURRENT) == EV_NONE)
- {
- fprintf (stderr, "library fd of date\n");
- exit (1);
- }
-
- char name[] = "test.XXXXXX";
- fd = mkstemp (name);
- if (fd < 0)
- {
- fprintf (stderr, "Failed to open fdput file: %s\n", name);
- exit (1);
- }
- unlink (name);
-
- elf = elf_begin (fd, ELF_C_WRITE, NULL);
- if (elf == NULL)
- {
- fprintf (stderr, "Failed to elf_begin fdput file: %s\n", name);
- exit (1);
- }
-
- section = elf_newscn (elf);
- section = elf_nextscn (elf, section);
- assert (section == NULL);
-
- elf_end (elf);
- close (fd);
-
- return 0;
-}
diff --git a/tests/rdwrmmap.c b/tests/rdwrmmap.c
deleted file mode 100644
index 263be0f..0000000
--- a/tests/rdwrmmap.c
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <errno.h>
-#include <error.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <libelf.h>
-
-int
-main (int argc __attribute__ ((unused)), char *argv[])
-{
- int fd = open (argv[1], O_RDWR);
- if (fd < 0)
- error (2, errno, "open: %s", argv[1]);
-
- if (elf_version (EV_CURRENT) == EV_NONE)
- error (1, 0, "libelf version mismatch");
-
- Elf *elf = elf_begin (fd, ELF_C_RDWR_MMAP, NULL);
- if (elf == NULL)
- error (1, 0, "elf_begin: %s", elf_errmsg (-1));
-
- if (elf_update (elf, ELF_C_WRITE) < 0)
- error (1, 0, "elf_update: %s", elf_errmsg (-1));
-
- elf_end (elf);
- close (fd);
-
- return 0;
-}
diff --git a/tests/run-addrname-test.sh b/tests/run-addrname-test.sh
deleted file mode 100755
index d525523..0000000
--- a/tests/run-addrname-test.sh
+++ /dev/null
@@ -1,222 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2007, 2008 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-testfiles testfile34 testfile38 testfile41 testfile49
-
-testrun_compare ../src/addr2line -f -e testfile34 \
- 0x08048074 0x08048075 0x08048076 \
- 0x08049078 0x08048080 0x08049080 <<\EOF
-foo
-??:0
-bar
-??:0
-_etext
-??:0
-data1
-??:0
-??
-??:0
-_end
-??:0
-EOF
-
-testrun_compare ../src/addr2line -S -e testfile38 0x02 0x10a 0x211 0x31a <<\EOF
-t1_global_outer+0x2
-??:0
-t2_global_symbol+0x2
-??:0
-t3_global_after_0+0x1
-??:0
-(.text)+0x31a
-??:0
-EOF
-
-testrun_compare ../src/addr2line -S -e testfile41 0x1 0x104 <<\EOF
-small_global_at_large_global+0x1
-??:0
-small_global_first_at_large_global+0x1
-??:0
-EOF
-
-testfiles testfile12 testfile14
-tempfiles testmaps
-
-cat > testmaps <<EOF
-00400000-00401000 r-xp 00000000 fd:01 4006812 `pwd`/testfile14
-00500000-00501000 rw-p 00000000 fd:01 4006812 `pwd`/testfile14
-01000000-01001000 r-xp 00000000 fd:01 1234567 `pwd`/testfile12
-01100000-01011000 rw-p 00000000 fd:01 1234567 `pwd`/testfile12
-2aaaaaaab000-2aaaaaaad000 rw-p 2aaaaaaab000 00:00 0
-2aaaaaae2000-2aaaaaae3000 rw-p 2aaaaaae2000 00:00 0
-7fff61068000-7fff6107d000 rw-p 7ffffffea000 00:00 0 [stack]
-7fff611fe000-7fff61200000 r-xp 7fff611fe000 00:00 0 [vdso]
-ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
-EOF
-
-testrun_compare ../src/addr2line -S -M testmaps 0x40047c 0x10009db <<\EOF
-caller+0x14
-/home/drepper/local/elfutils-build/20050425/v.c:11
-foo+0xb
-/home/drepper/local/elfutils-build/20030710/u.c:5
-EOF
-
-# .section .text
-# nop #0
-#sizeless_foo:
-# nop #1
-# nop #2
-#sized_bar:
-# nop #3
-# nop #4
-#sizeless_baz:
-# nop #5
-# nop #6
-# .size sized_bar, . - sized_bar
-# nop #7
-# nop #8
-#sizeless_x:
-# nop #9
-# .org 0x100
-# nop #0
-# .globl global_outer
-#global_outer:
-# nop #1
-# nop #2
-# .globl global_in_global
-#global_in_global:
-# nop #3
-# nop #4
-# .size global_in_global, . - global_in_global
-#local_in_global:
-# nop #5
-# nop #6
-# .size local_in_global, . - local_in_global
-# nop #7
-# nop #8
-#.Lsizeless1:
-# nop #9
-# nop #10
-# .size global_outer, . - global_outer
-# nop #11
-# .org 0x200
-# nop #0
-#local_outer:
-# nop #1
-# nop #2
-# .globl global_in_local
-#global_in_local:
-# nop #3
-# nop #4
-# .size global_in_local, . - global_in_local
-#local_in_local:
-# nop #5
-# nop #6
-# .size local_in_local, . - local_in_local
-# nop #7
-# nop #8
-#.Lsizeless2:
-# nop #9
-# nop #10
-# .size local_outer, . - local_outer
-# nop #11
-testrun_compare ../src/addr2line -S -e testfile49 \
- 0 1 2 3 4 5 6 7 8 9 \
- 0x100 0x101 0x102 0x103 0x104 0x105 \
- 0x106 0x107 0x108 0x109 0x10a 0x10b \
- 0x200 0x201 0x202 0x203 0x204 0x205 \
- 0x206 0x207 0x208 0x209 0x20a 0x20b <<\EOF
-(.text)+0
-??:0
-sizeless_foo
-??:0
-sizeless_foo+0x1
-??:0
-sized_bar
-??:0
-sized_bar+0x1
-??:0
-sized_bar+0x2
-??:0
-sized_bar+0x3
-??:0
-(.text)+0x7
-??:0
-(.text)+0x8
-??:0
-sizeless_x
-??:0
-sizeless_x+0xf7
-??:0
-global_outer
-??:0
-global_outer+0x1
-??:0
-global_in_global
-??:0
-global_in_global+0x1
-??:0
-global_outer+0x4
-??:0
-global_outer+0x5
-??:0
-global_outer+0x6
-??:0
-global_outer+0x7
-??:0
-global_outer+0x8
-??:0
-global_outer+0x9
-??:0
-(.text)+0x10b
-??:0
-(.text)+0x200
-??:0
-local_outer
-??:0
-local_outer+0x1
-??:0
-global_in_local
-??:0
-global_in_local+0x1
-??:0
-local_in_local
-??:0
-local_in_local+0x1
-??:0
-local_outer+0x6
-??:0
-local_outer+0x7
-??:0
-local_outer+0x8
-??:0
-local_outer+0x9
-??:0
-(.text)+0x20b
-??:0
-EOF
-
-exit 0
diff --git a/tests/run-addrscopes.sh b/tests/run-addrscopes.sh
deleted file mode 100755
index d13c55d..0000000
--- a/tests/run-addrscopes.sh
+++ /dev/null
@@ -1,51 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2005 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-testfiles testfile22
-
-testrun_compare ./addrscopes -e testfile22 0x8048353 <<\EOF
-0x8048353:
- tests/foo.c (0x11): 0x8048348 (tests/foo.c:5) .. 0x804837e (tests/foo.c:16)
- global [ be]
- function (0x2e): 0x8048348 (tests/foo.c:5) .. 0x804835b (tests/foo.c:14)
- local [ 8f]
-EOF
-
-test_cleanup
-
-testfiles testfile24
-testrun_compare ./addrscopes -e testfile24 0x804834e <<\EOF
-0x804834e:
- inline-test.c (0x11): 0x8048348 (/home/roland/build/stock-elfutils/inline-test.c:7) .. 0x8048364 (/home/roland/build/stock-elfutils/inline-test.c:16)
- add (0x1d): 0x804834e (/home/roland/build/stock-elfutils/inline-test.c:3) .. 0x8048350 (/home/roland/build/stock-elfutils/inline-test.c:9)
- y [ 9d]
- x [ a2]
- x (abstract)
- y (abstract)
-EOF
-
-exit 0
diff --git a/tests/run-allfcts.sh b/tests/run-allfcts.sh
deleted file mode 100755
index e990a63..0000000
--- a/tests/run-allfcts.sh
+++ /dev/null
@@ -1,48 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2005 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-# Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-testfiles testfile testfile2 testfile8
-
-testrun_compare ./allfcts testfile testfile2 testfile8 <<\EOF
-/home/drepper/gnu/new-bu/build/ttt/m.c:5:main
-/home/drepper/gnu/new-bu/build/ttt/b.c:4:bar
-/home/drepper/gnu/new-bu/build/ttt/f.c:3:foo
-/shoggoth/drepper/b.c:4:bar
-/shoggoth/drepper/f.c:3:foo
-/shoggoth/drepper/m.c:5:main
-/home/drepper/gnu/elfutils/build/src/../../src/strip.c:107:main
-/home/drepper/gnu/elfutils/build/src/../../src/strip.c:159:print_version
-/home/drepper/gnu/elfutils/build/src/../../src/strip.c:173:parse_opt
-/home/drepper/gnu/elfutils/build/src/../../src/strip.c:201:more_help
-/home/drepper/gnu/elfutils/build/src/../../src/strip.c:217:process_file
-/usr/include/sys/stat.h:375:stat64
-/home/drepper/gnu/elfutils/build/src/../../src/strip.c:291:crc32_file
-/home/drepper/gnu/elfutils/build/src/../../src/strip.c:313:handle_elf
-EOF
-
-exit 0
diff --git a/tests/run-allregs.sh b/tests/run-allregs.sh
deleted file mode 100755
index 7ebaa71..0000000
--- a/tests/run-allregs.sh
+++ /dev/null
@@ -1,2595 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2005, 2006, 2007 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-regs_test()
-{
- tempfiles good.regs
- cat > good.regs
- testfiles "$@"
- for f; do testrun_compare ./allregs -e $f < good.regs; done
- test_cleanup
-}
-
-regs_test testfile11 <<\EOF
-integer registers:
- 0: %eax (eax), signed 32 bits
- 1: %ecx (ecx), signed 32 bits
- 2: %edx (edx), signed 32 bits
- 3: %ebx (ebx), signed 32 bits
- 4: %esp (esp), address 32 bits
- 5: %ebp (ebp), address 32 bits
- 6: %esi (esi), signed 32 bits
- 7: %edi (edi), signed 32 bits
- 8: %eip (eip), address 32 bits
- 9: %eflags (eflags), unsigned 32 bits
- 10: %trapno (trapno), unsigned 32 bits
-FPU-control registers:
- 37: %fctrl (fctrl), unsigned 16 bits
- 38: %fstat (fstat), unsigned 16 bits
- 39: %mxcsr (mxcsr), unsigned 32 bits
-MMX registers:
- 29: %mm0 (mm0), unsigned 64 bits
- 30: %mm1 (mm1), unsigned 64 bits
- 31: %mm2 (mm2), unsigned 64 bits
- 32: %mm3 (mm3), unsigned 64 bits
- 33: %mm4 (mm4), unsigned 64 bits
- 34: %mm5 (mm5), unsigned 64 bits
- 35: %mm6 (mm6), unsigned 64 bits
- 36: %mm7 (mm7), unsigned 64 bits
-SSE registers:
- 21: %xmm0 (xmm0), unsigned 128 bits
- 22: %xmm1 (xmm1), unsigned 128 bits
- 23: %xmm2 (xmm2), unsigned 128 bits
- 24: %xmm3 (xmm3), unsigned 128 bits
- 25: %xmm4 (xmm4), unsigned 128 bits
- 26: %xmm5 (xmm5), unsigned 128 bits
- 27: %xmm6 (xmm6), unsigned 128 bits
- 28: %xmm7 (xmm7), unsigned 128 bits
-segment registers:
- 40: %es (es), unsigned 16 bits
- 41: %cs (cs), unsigned 16 bits
- 42: %ss (ss), unsigned 16 bits
- 43: %ds (ds), unsigned 16 bits
- 44: %fs (fs), unsigned 16 bits
- 45: %gs (gs), unsigned 16 bits
-x87 registers:
- 11: %st0 (st0), float 80 bits
- 12: %st1 (st1), float 80 bits
- 13: %st2 (st2), float 80 bits
- 14: %st3 (st3), float 80 bits
- 15: %st4 (st4), float 80 bits
- 16: %st5 (st5), float 80 bits
- 17: %st6 (st6), float 80 bits
- 18: %st7 (st7), float 80 bits
-EOF
-
-regs_test testfile12 <<\EOF
-integer registers:
- 0: %rax (rax), signed 64 bits
- 1: %rdx (rdx), signed 64 bits
- 2: %rcx (rcx), signed 64 bits
- 3: %rbx (rbx), signed 64 bits
- 4: %rsi (rsi), signed 64 bits
- 5: %rdi (rdi), signed 64 bits
- 6: %rbp (rbp), address 64 bits
- 7: %rsp (rsp), address 64 bits
- 8: %r8 (r8), signed 64 bits
- 9: %r9 (r9), signed 64 bits
- 10: %r10 (r10), signed 64 bits
- 11: %r11 (r11), signed 64 bits
- 12: %r12 (r12), signed 64 bits
- 13: %r13 (r13), signed 64 bits
- 14: %r14 (r14), signed 64 bits
- 15: %r15 (r15), signed 64 bits
- 16: %rip (rip), address 64 bits
- 49: %rflags (rflags), unsigned 64 bits
-MMX registers:
- 41: %mm0 (mm0), unsigned 64 bits
- 42: %mm1 (mm1), unsigned 64 bits
- 43: %mm2 (mm2), unsigned 64 bits
- 44: %mm3 (mm3), unsigned 64 bits
- 45: %mm4 (mm4), unsigned 64 bits
- 46: %mm5 (mm5), unsigned 64 bits
- 47: %mm6 (mm6), unsigned 64 bits
- 48: %mm7 (mm7), unsigned 64 bits
-SSE registers:
- 17: %xmm0 (xmm0), unsigned 128 bits
- 18: %xmm1 (xmm1), unsigned 128 bits
- 19: %xmm2 (xmm2), unsigned 128 bits
- 20: %xmm3 (xmm3), unsigned 128 bits
- 21: %xmm4 (xmm4), unsigned 128 bits
- 22: %xmm5 (xmm5), unsigned 128 bits
- 23: %xmm6 (xmm6), unsigned 128 bits
- 24: %xmm7 (xmm7), unsigned 128 bits
- 25: %xmm8 (xmm8), unsigned 128 bits
- 26: %xmm9 (xmm9), unsigned 128 bits
- 27: %xmm10 (xmm10), unsigned 128 bits
- 28: %xmm11 (xmm11), unsigned 128 bits
- 29: %xmm12 (xmm12), unsigned 128 bits
- 30: %xmm13 (xmm13), unsigned 128 bits
- 31: %xmm14 (xmm14), unsigned 128 bits
- 32: %xmm15 (xmm15), unsigned 128 bits
-control registers:
- 62: %tr (tr), unsigned 64 bits
- 63: %ldtr (ldtr), unsigned 64 bits
- 64: %mxcsr (mxcsr), unsigned 64 bits
- 65: %fcw (fcw), unsigned 16 bits
- 66: %fsw (fsw), unsigned 16 bits
-segment registers:
- 50: %es (es), unsigned 16 bits
- 51: %cs (cs), unsigned 16 bits
- 52: %ss (ss), unsigned 16 bits
- 53: %ds (ds), unsigned 16 bits
- 54: %fs (fs), unsigned 16 bits
- 55: %gs (gs), unsigned 16 bits
- 58: %fs.base (fs.base), address 64 bits
- 59: %gs.base (gs.base), address 64 bits
-x87 registers:
- 33: %st0 (st0), float 80 bits
- 34: %st1 (st1), float 80 bits
- 35: %st2 (st2), float 80 bits
- 36: %st3 (st3), float 80 bits
- 37: %st4 (st4), float 80 bits
- 38: %st5 (st5), float 80 bits
- 39: %st6 (st6), float 80 bits
- 40: %st7 (st7), float 80 bits
-EOF
-
-regs_test testfile2 <<\EOF
-integer registers:
- 0: r0 (r0), signed 32 bits
- 1: r1 (r1), signed 32 bits
- 2: r2 (r2), signed 32 bits
- 3: r3 (r3), signed 32 bits
- 4: r4 (r4), signed 32 bits
- 5: r5 (r5), signed 32 bits
- 6: r6 (r6), signed 32 bits
- 7: r7 (r7), signed 32 bits
- 8: r8 (r8), signed 32 bits
- 9: r9 (r9), signed 32 bits
- 10: r10 (r10), signed 32 bits
- 11: r11 (r11), signed 32 bits
- 12: r12 (r12), signed 32 bits
- 13: r13 (r13), signed 32 bits
- 14: r14 (r14), signed 32 bits
- 15: r15 (r15), signed 32 bits
- 16: r16 (r16), signed 32 bits
- 17: r17 (r17), signed 32 bits
- 18: r18 (r18), signed 32 bits
- 19: r19 (r19), signed 32 bits
- 20: r20 (r20), signed 32 bits
- 21: r21 (r21), signed 32 bits
- 22: r22 (r22), signed 32 bits
- 23: r23 (r23), signed 32 bits
- 24: r24 (r24), signed 32 bits
- 25: r25 (r25), signed 32 bits
- 26: r26 (r26), signed 32 bits
- 27: r27 (r27), signed 32 bits
- 28: r28 (r28), signed 32 bits
- 29: r29 (r29), signed 32 bits
- 30: r30 (r30), signed 32 bits
- 31: r31 (r31), signed 32 bits
- 64: cr (cr), unsigned 32 bits
- 66: msr (msr), unsigned 32 bits
-FPU registers:
- 32: f0 (f0), float 64 bits
- 33: f1 (f1), float 64 bits
- 34: f2 (f2), float 64 bits
- 35: f3 (f3), float 64 bits
- 36: f4 (f4), float 64 bits
- 37: f5 (f5), float 64 bits
- 38: f6 (f6), float 64 bits
- 39: f7 (f7), float 64 bits
- 40: f8 (f8), float 64 bits
- 41: f9 (f9), float 64 bits
- 42: f10 (f10), float 64 bits
- 43: f11 (f11), float 64 bits
- 44: f12 (f12), float 64 bits
- 45: f13 (f13), float 64 bits
- 46: f14 (f14), float 64 bits
- 47: f15 (f15), float 64 bits
- 48: f16 (f16), float 64 bits
- 49: f17 (f17), float 64 bits
- 50: f18 (f18), float 64 bits
- 51: f19 (f19), float 64 bits
- 52: f20 (f20), float 64 bits
- 53: f21 (f21), float 64 bits
- 54: f22 (f22), float 64 bits
- 55: f23 (f23), float 64 bits
- 56: f24 (f24), float 64 bits
- 57: f25 (f25), float 64 bits
- 58: f26 (f26), float 64 bits
- 59: f27 (f27), float 64 bits
- 60: f28 (f28), float 64 bits
- 61: f29 (f29), float 64 bits
- 62: f30 (f30), float 64 bits
- 63: f31 (f31), float 64 bits
- 65: fpscr (fpscr), unsigned 32 bits
-privileged registers:
- 70: sr0 (sr0), unsigned 32 bits
- 71: sr1 (sr1), unsigned 32 bits
- 72: sr2 (sr2), unsigned 32 bits
- 73: sr3 (sr3), unsigned 32 bits
- 74: sr4 (sr4), unsigned 32 bits
- 75: sr5 (sr5), unsigned 32 bits
- 76: sr6 (sr6), unsigned 32 bits
- 77: sr7 (sr7), unsigned 32 bits
- 78: sr8 (sr8), unsigned 32 bits
- 79: sr9 (sr9), unsigned 32 bits
- 80: sr10 (sr10), unsigned 32 bits
- 81: sr11 (sr11), unsigned 32 bits
- 82: sr12 (sr12), unsigned 32 bits
- 83: sr13 (sr13), unsigned 32 bits
- 84: sr14 (sr14), unsigned 32 bits
- 85: sr15 (sr15), unsigned 32 bits
- 100: mq (mq), unsigned 32 bits
- 101: xer (xer), unsigned 32 bits
- 102: spr2 (spr2), unsigned 32 bits
- 103: spr3 (spr3), unsigned 32 bits
- 104: spr4 (spr4), unsigned 32 bits
- 105: spr5 (spr5), unsigned 32 bits
- 106: spr6 (spr6), unsigned 32 bits
- 107: spr7 (spr7), unsigned 32 bits
- 108: lr (lr), unsigned 32 bits
- 109: ctr (ctr), unsigned 32 bits
- 110: spr10 (spr10), unsigned 32 bits
- 111: spr11 (spr11), unsigned 32 bits
- 112: spr12 (spr12), unsigned 32 bits
- 113: spr13 (spr13), unsigned 32 bits
- 114: spr14 (spr14), unsigned 32 bits
- 115: spr15 (spr15), unsigned 32 bits
- 116: spr16 (spr16), unsigned 32 bits
- 117: spr17 (spr17), unsigned 32 bits
- 118: dsisr (dsisr), unsigned 32 bits
- 119: dar (dar), unsigned 32 bits
- 120: spr20 (spr20), unsigned 32 bits
- 121: spr21 (spr21), unsigned 32 bits
- 122: dec (dec), unsigned 32 bits
- 123: spr23 (spr23), unsigned 32 bits
- 124: spr24 (spr24), unsigned 32 bits
- 125: spr25 (spr25), unsigned 32 bits
- 126: spr26 (spr26), unsigned 32 bits
- 127: spr27 (spr27), unsigned 32 bits
- 128: spr28 (spr28), unsigned 32 bits
- 129: spr29 (spr29), unsigned 32 bits
- 130: spr30 (spr30), unsigned 32 bits
- 131: spr31 (spr31), unsigned 32 bits
- 132: spr32 (spr32), unsigned 32 bits
- 133: spr33 (spr33), unsigned 32 bits
- 134: spr34 (spr34), unsigned 32 bits
- 135: spr35 (spr35), unsigned 32 bits
- 136: spr36 (spr36), unsigned 32 bits
- 137: spr37 (spr37), unsigned 32 bits
- 138: spr38 (spr38), unsigned 32 bits
- 139: spr39 (spr39), unsigned 32 bits
- 140: spr40 (spr40), unsigned 32 bits
- 141: spr41 (spr41), unsigned 32 bits
- 142: spr42 (spr42), unsigned 32 bits
- 143: spr43 (spr43), unsigned 32 bits
- 144: spr44 (spr44), unsigned 32 bits
- 145: spr45 (spr45), unsigned 32 bits
- 146: spr46 (spr46), unsigned 32 bits
- 147: spr47 (spr47), unsigned 32 bits
- 148: spr48 (spr48), unsigned 32 bits
- 149: spr49 (spr49), unsigned 32 bits
- 150: spr50 (spr50), unsigned 32 bits
- 151: spr51 (spr51), unsigned 32 bits
- 152: spr52 (spr52), unsigned 32 bits
- 153: spr53 (spr53), unsigned 32 bits
- 154: spr54 (spr54), unsigned 32 bits
- 155: spr55 (spr55), unsigned 32 bits
- 156: spr56 (spr56), unsigned 32 bits
- 157: spr57 (spr57), unsigned 32 bits
- 158: spr58 (spr58), unsigned 32 bits
- 159: spr59 (spr59), unsigned 32 bits
- 160: spr60 (spr60), unsigned 32 bits
- 161: spr61 (spr61), unsigned 32 bits
- 162: spr62 (spr62), unsigned 32 bits
- 163: spr63 (spr63), unsigned 32 bits
- 164: spr64 (spr64), unsigned 32 bits
- 165: spr65 (spr65), unsigned 32 bits
- 166: spr66 (spr66), unsigned 32 bits
- 167: spr67 (spr67), unsigned 32 bits
- 168: spr68 (spr68), unsigned 32 bits
- 169: spr69 (spr69), unsigned 32 bits
- 170: spr70 (spr70), unsigned 32 bits
- 171: spr71 (spr71), unsigned 32 bits
- 172: spr72 (spr72), unsigned 32 bits
- 173: spr73 (spr73), unsigned 32 bits
- 174: spr74 (spr74), unsigned 32 bits
- 175: spr75 (spr75), unsigned 32 bits
- 176: spr76 (spr76), unsigned 32 bits
- 177: spr77 (spr77), unsigned 32 bits
- 178: spr78 (spr78), unsigned 32 bits
- 179: spr79 (spr79), unsigned 32 bits
- 180: spr80 (spr80), unsigned 32 bits
- 181: spr81 (spr81), unsigned 32 bits
- 182: spr82 (spr82), unsigned 32 bits
- 183: spr83 (spr83), unsigned 32 bits
- 184: spr84 (spr84), unsigned 32 bits
- 185: spr85 (spr85), unsigned 32 bits
- 186: spr86 (spr86), unsigned 32 bits
- 187: spr87 (spr87), unsigned 32 bits
- 188: spr88 (spr88), unsigned 32 bits
- 189: spr89 (spr89), unsigned 32 bits
- 190: spr90 (spr90), unsigned 32 bits
- 191: spr91 (spr91), unsigned 32 bits
- 192: spr92 (spr92), unsigned 32 bits
- 193: spr93 (spr93), unsigned 32 bits
- 194: spr94 (spr94), unsigned 32 bits
- 195: spr95 (spr95), unsigned 32 bits
- 196: spr96 (spr96), unsigned 32 bits
- 197: spr97 (spr97), unsigned 32 bits
- 198: spr98 (spr98), unsigned 32 bits
- 199: spr99 (spr99), unsigned 32 bits
- 200: spr100 (spr100), unsigned 32 bits
- 201: spr101 (spr101), unsigned 32 bits
- 202: spr102 (spr102), unsigned 32 bits
- 203: spr103 (spr103), unsigned 32 bits
- 204: spr104 (spr104), unsigned 32 bits
- 205: spr105 (spr105), unsigned 32 bits
- 206: spr106 (spr106), unsigned 32 bits
- 207: spr107 (spr107), unsigned 32 bits
- 208: spr108 (spr108), unsigned 32 bits
- 209: spr109 (spr109), unsigned 32 bits
- 210: spr110 (spr110), unsigned 32 bits
- 211: spr111 (spr111), unsigned 32 bits
- 212: spr112 (spr112), unsigned 32 bits
- 213: spr113 (spr113), unsigned 32 bits
- 214: spr114 (spr114), unsigned 32 bits
- 215: spr115 (spr115), unsigned 32 bits
- 216: spr116 (spr116), unsigned 32 bits
- 217: spr117 (spr117), unsigned 32 bits
- 218: spr118 (spr118), unsigned 32 bits
- 219: spr119 (spr119), unsigned 32 bits
- 220: spr120 (spr120), unsigned 32 bits
- 221: spr121 (spr121), unsigned 32 bits
- 222: spr122 (spr122), unsigned 32 bits
- 223: spr123 (spr123), unsigned 32 bits
- 224: spr124 (spr124), unsigned 32 bits
- 225: spr125 (spr125), unsigned 32 bits
- 226: spr126 (spr126), unsigned 32 bits
- 227: spr127 (spr127), unsigned 32 bits
- 228: spr128 (spr128), unsigned 32 bits
- 229: spr129 (spr129), unsigned 32 bits
- 230: spr130 (spr130), unsigned 32 bits
- 231: spr131 (spr131), unsigned 32 bits
- 232: spr132 (spr132), unsigned 32 bits
- 233: spr133 (spr133), unsigned 32 bits
- 234: spr134 (spr134), unsigned 32 bits
- 235: spr135 (spr135), unsigned 32 bits
- 236: spr136 (spr136), unsigned 32 bits
- 237: spr137 (spr137), unsigned 32 bits
- 238: spr138 (spr138), unsigned 32 bits
- 239: spr139 (spr139), unsigned 32 bits
- 240: spr140 (spr140), unsigned 32 bits
- 241: spr141 (spr141), unsigned 32 bits
- 242: spr142 (spr142), unsigned 32 bits
- 243: spr143 (spr143), unsigned 32 bits
- 244: spr144 (spr144), unsigned 32 bits
- 245: spr145 (spr145), unsigned 32 bits
- 246: spr146 (spr146), unsigned 32 bits
- 247: spr147 (spr147), unsigned 32 bits
- 248: spr148 (spr148), unsigned 32 bits
- 249: spr149 (spr149), unsigned 32 bits
- 250: spr150 (spr150), unsigned 32 bits
- 251: spr151 (spr151), unsigned 32 bits
- 252: spr152 (spr152), unsigned 32 bits
- 253: spr153 (spr153), unsigned 32 bits
- 254: spr154 (spr154), unsigned 32 bits
- 255: spr155 (spr155), unsigned 32 bits
- 256: spr156 (spr156), unsigned 32 bits
- 257: spr157 (spr157), unsigned 32 bits
- 258: spr158 (spr158), unsigned 32 bits
- 259: spr159 (spr159), unsigned 32 bits
- 260: spr160 (spr160), unsigned 32 bits
- 261: spr161 (spr161), unsigned 32 bits
- 262: spr162 (spr162), unsigned 32 bits
- 263: spr163 (spr163), unsigned 32 bits
- 264: spr164 (spr164), unsigned 32 bits
- 265: spr165 (spr165), unsigned 32 bits
- 266: spr166 (spr166), unsigned 32 bits
- 267: spr167 (spr167), unsigned 32 bits
- 268: spr168 (spr168), unsigned 32 bits
- 269: spr169 (spr169), unsigned 32 bits
- 270: spr170 (spr170), unsigned 32 bits
- 271: spr171 (spr171), unsigned 32 bits
- 272: spr172 (spr172), unsigned 32 bits
- 273: spr173 (spr173), unsigned 32 bits
- 274: spr174 (spr174), unsigned 32 bits
- 275: spr175 (spr175), unsigned 32 bits
- 276: spr176 (spr176), unsigned 32 bits
- 277: spr177 (spr177), unsigned 32 bits
- 278: spr178 (spr178), unsigned 32 bits
- 279: spr179 (spr179), unsigned 32 bits
- 280: spr180 (spr180), unsigned 32 bits
- 281: spr181 (spr181), unsigned 32 bits
- 282: spr182 (spr182), unsigned 32 bits
- 283: spr183 (spr183), unsigned 32 bits
- 284: spr184 (spr184), unsigned 32 bits
- 285: spr185 (spr185), unsigned 32 bits
- 286: spr186 (spr186), unsigned 32 bits
- 287: spr187 (spr187), unsigned 32 bits
- 288: spr188 (spr188), unsigned 32 bits
- 289: spr189 (spr189), unsigned 32 bits
- 290: spr190 (spr190), unsigned 32 bits
- 291: spr191 (spr191), unsigned 32 bits
- 292: spr192 (spr192), unsigned 32 bits
- 293: spr193 (spr193), unsigned 32 bits
- 294: spr194 (spr194), unsigned 32 bits
- 295: spr195 (spr195), unsigned 32 bits
- 296: spr196 (spr196), unsigned 32 bits
- 297: spr197 (spr197), unsigned 32 bits
- 298: spr198 (spr198), unsigned 32 bits
- 299: spr199 (spr199), unsigned 32 bits
- 300: spr200 (spr200), unsigned 32 bits
- 301: spr201 (spr201), unsigned 32 bits
- 302: spr202 (spr202), unsigned 32 bits
- 303: spr203 (spr203), unsigned 32 bits
- 304: spr204 (spr204), unsigned 32 bits
- 305: spr205 (spr205), unsigned 32 bits
- 306: spr206 (spr206), unsigned 32 bits
- 307: spr207 (spr207), unsigned 32 bits
- 308: spr208 (spr208), unsigned 32 bits
- 309: spr209 (spr209), unsigned 32 bits
- 310: spr210 (spr210), unsigned 32 bits
- 311: spr211 (spr211), unsigned 32 bits
- 312: spr212 (spr212), unsigned 32 bits
- 313: spr213 (spr213), unsigned 32 bits
- 314: spr214 (spr214), unsigned 32 bits
- 315: spr215 (spr215), unsigned 32 bits
- 316: spr216 (spr216), unsigned 32 bits
- 317: spr217 (spr217), unsigned 32 bits
- 318: spr218 (spr218), unsigned 32 bits
- 319: spr219 (spr219), unsigned 32 bits
- 320: spr220 (spr220), unsigned 32 bits
- 321: spr221 (spr221), unsigned 32 bits
- 322: spr222 (spr222), unsigned 32 bits
- 323: spr223 (spr223), unsigned 32 bits
- 324: spr224 (spr224), unsigned 32 bits
- 325: spr225 (spr225), unsigned 32 bits
- 326: spr226 (spr226), unsigned 32 bits
- 327: spr227 (spr227), unsigned 32 bits
- 328: spr228 (spr228), unsigned 32 bits
- 329: spr229 (spr229), unsigned 32 bits
- 330: spr230 (spr230), unsigned 32 bits
- 331: spr231 (spr231), unsigned 32 bits
- 332: spr232 (spr232), unsigned 32 bits
- 333: spr233 (spr233), unsigned 32 bits
- 334: spr234 (spr234), unsigned 32 bits
- 335: spr235 (spr235), unsigned 32 bits
- 336: spr236 (spr236), unsigned 32 bits
- 337: spr237 (spr237), unsigned 32 bits
- 338: spr238 (spr238), unsigned 32 bits
- 339: spr239 (spr239), unsigned 32 bits
- 340: spr240 (spr240), unsigned 32 bits
- 341: spr241 (spr241), unsigned 32 bits
- 342: spr242 (spr242), unsigned 32 bits
- 343: spr243 (spr243), unsigned 32 bits
- 344: spr244 (spr244), unsigned 32 bits
- 345: spr245 (spr245), unsigned 32 bits
- 346: spr246 (spr246), unsigned 32 bits
- 347: spr247 (spr247), unsigned 32 bits
- 348: spr248 (spr248), unsigned 32 bits
- 349: spr249 (spr249), unsigned 32 bits
- 350: spr250 (spr250), unsigned 32 bits
- 351: spr251 (spr251), unsigned 32 bits
- 352: spr252 (spr252), unsigned 32 bits
- 353: spr253 (spr253), unsigned 32 bits
- 354: spr254 (spr254), unsigned 32 bits
- 355: spr255 (spr255), unsigned 32 bits
- 357: spr257 (spr257), unsigned 32 bits
- 358: spr258 (spr258), unsigned 32 bits
- 359: spr259 (spr259), unsigned 32 bits
- 360: spr260 (spr260), unsigned 32 bits
- 361: spr261 (spr261), unsigned 32 bits
- 362: spr262 (spr262), unsigned 32 bits
- 363: spr263 (spr263), unsigned 32 bits
- 364: spr264 (spr264), unsigned 32 bits
- 365: spr265 (spr265), unsigned 32 bits
- 366: spr266 (spr266), unsigned 32 bits
- 367: spr267 (spr267), unsigned 32 bits
- 368: spr268 (spr268), unsigned 32 bits
- 369: spr269 (spr269), unsigned 32 bits
- 370: spr270 (spr270), unsigned 32 bits
- 371: spr271 (spr271), unsigned 32 bits
- 372: spr272 (spr272), unsigned 32 bits
- 373: spr273 (spr273), unsigned 32 bits
- 374: spr274 (spr274), unsigned 32 bits
- 375: spr275 (spr275), unsigned 32 bits
- 376: spr276 (spr276), unsigned 32 bits
- 377: spr277 (spr277), unsigned 32 bits
- 378: spr278 (spr278), unsigned 32 bits
- 379: spr279 (spr279), unsigned 32 bits
- 380: spr280 (spr280), unsigned 32 bits
- 381: spr281 (spr281), unsigned 32 bits
- 382: spr282 (spr282), unsigned 32 bits
- 383: spr283 (spr283), unsigned 32 bits
- 384: spr284 (spr284), unsigned 32 bits
- 385: spr285 (spr285), unsigned 32 bits
- 386: spr286 (spr286), unsigned 32 bits
- 387: spr287 (spr287), unsigned 32 bits
- 388: spr288 (spr288), unsigned 32 bits
- 389: spr289 (spr289), unsigned 32 bits
- 390: spr290 (spr290), unsigned 32 bits
- 391: spr291 (spr291), unsigned 32 bits
- 392: spr292 (spr292), unsigned 32 bits
- 393: spr293 (spr293), unsigned 32 bits
- 394: spr294 (spr294), unsigned 32 bits
- 395: spr295 (spr295), unsigned 32 bits
- 396: spr296 (spr296), unsigned 32 bits
- 397: spr297 (spr297), unsigned 32 bits
- 398: spr298 (spr298), unsigned 32 bits
- 399: spr299 (spr299), unsigned 32 bits
- 400: spr300 (spr300), unsigned 32 bits
- 401: spr301 (spr301), unsigned 32 bits
- 402: spr302 (spr302), unsigned 32 bits
- 403: spr303 (spr303), unsigned 32 bits
- 404: spr304 (spr304), unsigned 32 bits
- 405: spr305 (spr305), unsigned 32 bits
- 406: spr306 (spr306), unsigned 32 bits
- 407: spr307 (spr307), unsigned 32 bits
- 408: spr308 (spr308), unsigned 32 bits
- 409: spr309 (spr309), unsigned 32 bits
- 410: spr310 (spr310), unsigned 32 bits
- 411: spr311 (spr311), unsigned 32 bits
- 412: spr312 (spr312), unsigned 32 bits
- 413: spr313 (spr313), unsigned 32 bits
- 414: spr314 (spr314), unsigned 32 bits
- 415: spr315 (spr315), unsigned 32 bits
- 416: spr316 (spr316), unsigned 32 bits
- 417: spr317 (spr317), unsigned 32 bits
- 418: spr318 (spr318), unsigned 32 bits
- 419: spr319 (spr319), unsigned 32 bits
- 420: spr320 (spr320), unsigned 32 bits
- 421: spr321 (spr321), unsigned 32 bits
- 422: spr322 (spr322), unsigned 32 bits
- 423: spr323 (spr323), unsigned 32 bits
- 424: spr324 (spr324), unsigned 32 bits
- 425: spr325 (spr325), unsigned 32 bits
- 426: spr326 (spr326), unsigned 32 bits
- 427: spr327 (spr327), unsigned 32 bits
- 428: spr328 (spr328), unsigned 32 bits
- 429: spr329 (spr329), unsigned 32 bits
- 430: spr330 (spr330), unsigned 32 bits
- 431: spr331 (spr331), unsigned 32 bits
- 432: spr332 (spr332), unsigned 32 bits
- 433: spr333 (spr333), unsigned 32 bits
- 434: spr334 (spr334), unsigned 32 bits
- 435: spr335 (spr335), unsigned 32 bits
- 436: spr336 (spr336), unsigned 32 bits
- 437: spr337 (spr337), unsigned 32 bits
- 438: spr338 (spr338), unsigned 32 bits
- 439: spr339 (spr339), unsigned 32 bits
- 440: spr340 (spr340), unsigned 32 bits
- 441: spr341 (spr341), unsigned 32 bits
- 442: spr342 (spr342), unsigned 32 bits
- 443: spr343 (spr343), unsigned 32 bits
- 444: spr344 (spr344), unsigned 32 bits
- 445: spr345 (spr345), unsigned 32 bits
- 446: spr346 (spr346), unsigned 32 bits
- 447: spr347 (spr347), unsigned 32 bits
- 448: spr348 (spr348), unsigned 32 bits
- 449: spr349 (spr349), unsigned 32 bits
- 450: spr350 (spr350), unsigned 32 bits
- 451: spr351 (spr351), unsigned 32 bits
- 452: spr352 (spr352), unsigned 32 bits
- 453: spr353 (spr353), unsigned 32 bits
- 454: spr354 (spr354), unsigned 32 bits
- 455: spr355 (spr355), unsigned 32 bits
- 456: spr356 (spr356), unsigned 32 bits
- 457: spr357 (spr357), unsigned 32 bits
- 458: spr358 (spr358), unsigned 32 bits
- 459: spr359 (spr359), unsigned 32 bits
- 460: spr360 (spr360), unsigned 32 bits
- 461: spr361 (spr361), unsigned 32 bits
- 462: spr362 (spr362), unsigned 32 bits
- 463: spr363 (spr363), unsigned 32 bits
- 464: spr364 (spr364), unsigned 32 bits
- 465: spr365 (spr365), unsigned 32 bits
- 466: spr366 (spr366), unsigned 32 bits
- 467: spr367 (spr367), unsigned 32 bits
- 468: spr368 (spr368), unsigned 32 bits
- 469: spr369 (spr369), unsigned 32 bits
- 470: spr370 (spr370), unsigned 32 bits
- 471: spr371 (spr371), unsigned 32 bits
- 472: spr372 (spr372), unsigned 32 bits
- 473: spr373 (spr373), unsigned 32 bits
- 474: spr374 (spr374), unsigned 32 bits
- 475: spr375 (spr375), unsigned 32 bits
- 476: spr376 (spr376), unsigned 32 bits
- 477: spr377 (spr377), unsigned 32 bits
- 478: spr378 (spr378), unsigned 32 bits
- 479: spr379 (spr379), unsigned 32 bits
- 480: spr380 (spr380), unsigned 32 bits
- 481: spr381 (spr381), unsigned 32 bits
- 482: spr382 (spr382), unsigned 32 bits
- 483: spr383 (spr383), unsigned 32 bits
- 484: spr384 (spr384), unsigned 32 bits
- 485: spr385 (spr385), unsigned 32 bits
- 486: spr386 (spr386), unsigned 32 bits
- 487: spr387 (spr387), unsigned 32 bits
- 488: spr388 (spr388), unsigned 32 bits
- 489: spr389 (spr389), unsigned 32 bits
- 490: spr390 (spr390), unsigned 32 bits
- 491: spr391 (spr391), unsigned 32 bits
- 492: spr392 (spr392), unsigned 32 bits
- 493: spr393 (spr393), unsigned 32 bits
- 494: spr394 (spr394), unsigned 32 bits
- 495: spr395 (spr395), unsigned 32 bits
- 496: spr396 (spr396), unsigned 32 bits
- 497: spr397 (spr397), unsigned 32 bits
- 498: spr398 (spr398), unsigned 32 bits
- 499: spr399 (spr399), unsigned 32 bits
- 500: spr400 (spr400), unsigned 32 bits
- 501: spr401 (spr401), unsigned 32 bits
- 502: spr402 (spr402), unsigned 32 bits
- 503: spr403 (spr403), unsigned 32 bits
- 504: spr404 (spr404), unsigned 32 bits
- 505: spr405 (spr405), unsigned 32 bits
- 506: spr406 (spr406), unsigned 32 bits
- 507: spr407 (spr407), unsigned 32 bits
- 508: spr408 (spr408), unsigned 32 bits
- 509: spr409 (spr409), unsigned 32 bits
- 510: spr410 (spr410), unsigned 32 bits
- 511: spr411 (spr411), unsigned 32 bits
- 512: spr412 (spr412), unsigned 32 bits
- 513: spr413 (spr413), unsigned 32 bits
- 514: spr414 (spr414), unsigned 32 bits
- 515: spr415 (spr415), unsigned 32 bits
- 516: spr416 (spr416), unsigned 32 bits
- 517: spr417 (spr417), unsigned 32 bits
- 518: spr418 (spr418), unsigned 32 bits
- 519: spr419 (spr419), unsigned 32 bits
- 520: spr420 (spr420), unsigned 32 bits
- 521: spr421 (spr421), unsigned 32 bits
- 522: spr422 (spr422), unsigned 32 bits
- 523: spr423 (spr423), unsigned 32 bits
- 524: spr424 (spr424), unsigned 32 bits
- 525: spr425 (spr425), unsigned 32 bits
- 526: spr426 (spr426), unsigned 32 bits
- 527: spr427 (spr427), unsigned 32 bits
- 528: spr428 (spr428), unsigned 32 bits
- 529: spr429 (spr429), unsigned 32 bits
- 530: spr430 (spr430), unsigned 32 bits
- 531: spr431 (spr431), unsigned 32 bits
- 532: spr432 (spr432), unsigned 32 bits
- 533: spr433 (spr433), unsigned 32 bits
- 534: spr434 (spr434), unsigned 32 bits
- 535: spr435 (spr435), unsigned 32 bits
- 536: spr436 (spr436), unsigned 32 bits
- 537: spr437 (spr437), unsigned 32 bits
- 538: spr438 (spr438), unsigned 32 bits
- 539: spr439 (spr439), unsigned 32 bits
- 540: spr440 (spr440), unsigned 32 bits
- 541: spr441 (spr441), unsigned 32 bits
- 542: spr442 (spr442), unsigned 32 bits
- 543: spr443 (spr443), unsigned 32 bits
- 544: spr444 (spr444), unsigned 32 bits
- 545: spr445 (spr445), unsigned 32 bits
- 546: spr446 (spr446), unsigned 32 bits
- 547: spr447 (spr447), unsigned 32 bits
- 548: spr448 (spr448), unsigned 32 bits
- 549: spr449 (spr449), unsigned 32 bits
- 550: spr450 (spr450), unsigned 32 bits
- 551: spr451 (spr451), unsigned 32 bits
- 552: spr452 (spr452), unsigned 32 bits
- 553: spr453 (spr453), unsigned 32 bits
- 554: spr454 (spr454), unsigned 32 bits
- 555: spr455 (spr455), unsigned 32 bits
- 556: spr456 (spr456), unsigned 32 bits
- 557: spr457 (spr457), unsigned 32 bits
- 558: spr458 (spr458), unsigned 32 bits
- 559: spr459 (spr459), unsigned 32 bits
- 560: spr460 (spr460), unsigned 32 bits
- 561: spr461 (spr461), unsigned 32 bits
- 562: spr462 (spr462), unsigned 32 bits
- 563: spr463 (spr463), unsigned 32 bits
- 564: spr464 (spr464), unsigned 32 bits
- 565: spr465 (spr465), unsigned 32 bits
- 566: spr466 (spr466), unsigned 32 bits
- 567: spr467 (spr467), unsigned 32 bits
- 568: spr468 (spr468), unsigned 32 bits
- 569: spr469 (spr469), unsigned 32 bits
- 570: spr470 (spr470), unsigned 32 bits
- 571: spr471 (spr471), unsigned 32 bits
- 572: spr472 (spr472), unsigned 32 bits
- 573: spr473 (spr473), unsigned 32 bits
- 574: spr474 (spr474), unsigned 32 bits
- 575: spr475 (spr475), unsigned 32 bits
- 576: spr476 (spr476), unsigned 32 bits
- 577: spr477 (spr477), unsigned 32 bits
- 578: spr478 (spr478), unsigned 32 bits
- 579: spr479 (spr479), unsigned 32 bits
- 580: spr480 (spr480), unsigned 32 bits
- 581: spr481 (spr481), unsigned 32 bits
- 582: spr482 (spr482), unsigned 32 bits
- 583: spr483 (spr483), unsigned 32 bits
- 584: spr484 (spr484), unsigned 32 bits
- 585: spr485 (spr485), unsigned 32 bits
- 586: spr486 (spr486), unsigned 32 bits
- 587: spr487 (spr487), unsigned 32 bits
- 588: spr488 (spr488), unsigned 32 bits
- 589: spr489 (spr489), unsigned 32 bits
- 590: spr490 (spr490), unsigned 32 bits
- 591: spr491 (spr491), unsigned 32 bits
- 592: spr492 (spr492), unsigned 32 bits
- 593: spr493 (spr493), unsigned 32 bits
- 594: spr494 (spr494), unsigned 32 bits
- 595: spr495 (spr495), unsigned 32 bits
- 596: spr496 (spr496), unsigned 32 bits
- 597: spr497 (spr497), unsigned 32 bits
- 598: spr498 (spr498), unsigned 32 bits
- 599: spr499 (spr499), unsigned 32 bits
- 600: spr500 (spr500), unsigned 32 bits
- 601: spr501 (spr501), unsigned 32 bits
- 602: spr502 (spr502), unsigned 32 bits
- 603: spr503 (spr503), unsigned 32 bits
- 604: spr504 (spr504), unsigned 32 bits
- 605: spr505 (spr505), unsigned 32 bits
- 606: spr506 (spr506), unsigned 32 bits
- 607: spr507 (spr507), unsigned 32 bits
- 608: spr508 (spr508), unsigned 32 bits
- 609: spr509 (spr509), unsigned 32 bits
- 610: spr510 (spr510), unsigned 32 bits
- 611: spr511 (spr511), unsigned 32 bits
- 613: spr513 (spr513), unsigned 32 bits
- 614: spr514 (spr514), unsigned 32 bits
- 615: spr515 (spr515), unsigned 32 bits
- 616: spr516 (spr516), unsigned 32 bits
- 617: spr517 (spr517), unsigned 32 bits
- 618: spr518 (spr518), unsigned 32 bits
- 619: spr519 (spr519), unsigned 32 bits
- 620: spr520 (spr520), unsigned 32 bits
- 621: spr521 (spr521), unsigned 32 bits
- 622: spr522 (spr522), unsigned 32 bits
- 623: spr523 (spr523), unsigned 32 bits
- 624: spr524 (spr524), unsigned 32 bits
- 625: spr525 (spr525), unsigned 32 bits
- 626: spr526 (spr526), unsigned 32 bits
- 627: spr527 (spr527), unsigned 32 bits
- 628: spr528 (spr528), unsigned 32 bits
- 629: spr529 (spr529), unsigned 32 bits
- 630: spr530 (spr530), unsigned 32 bits
- 631: spr531 (spr531), unsigned 32 bits
- 632: spr532 (spr532), unsigned 32 bits
- 633: spr533 (spr533), unsigned 32 bits
- 634: spr534 (spr534), unsigned 32 bits
- 635: spr535 (spr535), unsigned 32 bits
- 636: spr536 (spr536), unsigned 32 bits
- 637: spr537 (spr537), unsigned 32 bits
- 638: spr538 (spr538), unsigned 32 bits
- 639: spr539 (spr539), unsigned 32 bits
- 640: spr540 (spr540), unsigned 32 bits
- 641: spr541 (spr541), unsigned 32 bits
- 642: spr542 (spr542), unsigned 32 bits
- 643: spr543 (spr543), unsigned 32 bits
- 644: spr544 (spr544), unsigned 32 bits
- 645: spr545 (spr545), unsigned 32 bits
- 646: spr546 (spr546), unsigned 32 bits
- 647: spr547 (spr547), unsigned 32 bits
- 648: spr548 (spr548), unsigned 32 bits
- 649: spr549 (spr549), unsigned 32 bits
- 650: spr550 (spr550), unsigned 32 bits
- 651: spr551 (spr551), unsigned 32 bits
- 652: spr552 (spr552), unsigned 32 bits
- 653: spr553 (spr553), unsigned 32 bits
- 654: spr554 (spr554), unsigned 32 bits
- 655: spr555 (spr555), unsigned 32 bits
- 656: spr556 (spr556), unsigned 32 bits
- 657: spr557 (spr557), unsigned 32 bits
- 658: spr558 (spr558), unsigned 32 bits
- 659: spr559 (spr559), unsigned 32 bits
- 660: spr560 (spr560), unsigned 32 bits
- 661: spr561 (spr561), unsigned 32 bits
- 662: spr562 (spr562), unsigned 32 bits
- 663: spr563 (spr563), unsigned 32 bits
- 664: spr564 (spr564), unsigned 32 bits
- 665: spr565 (spr565), unsigned 32 bits
- 666: spr566 (spr566), unsigned 32 bits
- 667: spr567 (spr567), unsigned 32 bits
- 668: spr568 (spr568), unsigned 32 bits
- 669: spr569 (spr569), unsigned 32 bits
- 670: spr570 (spr570), unsigned 32 bits
- 671: spr571 (spr571), unsigned 32 bits
- 672: spr572 (spr572), unsigned 32 bits
- 673: spr573 (spr573), unsigned 32 bits
- 674: spr574 (spr574), unsigned 32 bits
- 675: spr575 (spr575), unsigned 32 bits
- 676: spr576 (spr576), unsigned 32 bits
- 677: spr577 (spr577), unsigned 32 bits
- 678: spr578 (spr578), unsigned 32 bits
- 679: spr579 (spr579), unsigned 32 bits
- 680: spr580 (spr580), unsigned 32 bits
- 681: spr581 (spr581), unsigned 32 bits
- 682: spr582 (spr582), unsigned 32 bits
- 683: spr583 (spr583), unsigned 32 bits
- 684: spr584 (spr584), unsigned 32 bits
- 685: spr585 (spr585), unsigned 32 bits
- 686: spr586 (spr586), unsigned 32 bits
- 687: spr587 (spr587), unsigned 32 bits
- 688: spr588 (spr588), unsigned 32 bits
- 689: spr589 (spr589), unsigned 32 bits
- 690: spr590 (spr590), unsigned 32 bits
- 691: spr591 (spr591), unsigned 32 bits
- 692: spr592 (spr592), unsigned 32 bits
- 693: spr593 (spr593), unsigned 32 bits
- 694: spr594 (spr594), unsigned 32 bits
- 695: spr595 (spr595), unsigned 32 bits
- 696: spr596 (spr596), unsigned 32 bits
- 697: spr597 (spr597), unsigned 32 bits
- 698: spr598 (spr598), unsigned 32 bits
- 699: spr599 (spr599), unsigned 32 bits
- 700: spr600 (spr600), unsigned 32 bits
- 701: spr601 (spr601), unsigned 32 bits
- 702: spr602 (spr602), unsigned 32 bits
- 703: spr603 (spr603), unsigned 32 bits
- 704: spr604 (spr604), unsigned 32 bits
- 705: spr605 (spr605), unsigned 32 bits
- 706: spr606 (spr606), unsigned 32 bits
- 707: spr607 (spr607), unsigned 32 bits
- 708: spr608 (spr608), unsigned 32 bits
- 709: spr609 (spr609), unsigned 32 bits
- 710: spr610 (spr610), unsigned 32 bits
- 711: spr611 (spr611), unsigned 32 bits
- 712: spr612 (spr612), unsigned 32 bits
- 713: spr613 (spr613), unsigned 32 bits
- 714: spr614 (spr614), unsigned 32 bits
- 715: spr615 (spr615), unsigned 32 bits
- 716: spr616 (spr616), unsigned 32 bits
- 717: spr617 (spr617), unsigned 32 bits
- 718: spr618 (spr618), unsigned 32 bits
- 719: spr619 (spr619), unsigned 32 bits
- 720: spr620 (spr620), unsigned 32 bits
- 721: spr621 (spr621), unsigned 32 bits
- 722: spr622 (spr622), unsigned 32 bits
- 723: spr623 (spr623), unsigned 32 bits
- 724: spr624 (spr624), unsigned 32 bits
- 725: spr625 (spr625), unsigned 32 bits
- 726: spr626 (spr626), unsigned 32 bits
- 727: spr627 (spr627), unsigned 32 bits
- 728: spr628 (spr628), unsigned 32 bits
- 729: spr629 (spr629), unsigned 32 bits
- 730: spr630 (spr630), unsigned 32 bits
- 731: spr631 (spr631), unsigned 32 bits
- 732: spr632 (spr632), unsigned 32 bits
- 733: spr633 (spr633), unsigned 32 bits
- 734: spr634 (spr634), unsigned 32 bits
- 735: spr635 (spr635), unsigned 32 bits
- 736: spr636 (spr636), unsigned 32 bits
- 737: spr637 (spr637), unsigned 32 bits
- 738: spr638 (spr638), unsigned 32 bits
- 739: spr639 (spr639), unsigned 32 bits
- 740: spr640 (spr640), unsigned 32 bits
- 741: spr641 (spr641), unsigned 32 bits
- 742: spr642 (spr642), unsigned 32 bits
- 743: spr643 (spr643), unsigned 32 bits
- 744: spr644 (spr644), unsigned 32 bits
- 745: spr645 (spr645), unsigned 32 bits
- 746: spr646 (spr646), unsigned 32 bits
- 747: spr647 (spr647), unsigned 32 bits
- 748: spr648 (spr648), unsigned 32 bits
- 749: spr649 (spr649), unsigned 32 bits
- 750: spr650 (spr650), unsigned 32 bits
- 751: spr651 (spr651), unsigned 32 bits
- 752: spr652 (spr652), unsigned 32 bits
- 753: spr653 (spr653), unsigned 32 bits
- 754: spr654 (spr654), unsigned 32 bits
- 755: spr655 (spr655), unsigned 32 bits
- 756: spr656 (spr656), unsigned 32 bits
- 757: spr657 (spr657), unsigned 32 bits
- 758: spr658 (spr658), unsigned 32 bits
- 759: spr659 (spr659), unsigned 32 bits
- 760: spr660 (spr660), unsigned 32 bits
- 761: spr661 (spr661), unsigned 32 bits
- 762: spr662 (spr662), unsigned 32 bits
- 763: spr663 (spr663), unsigned 32 bits
- 764: spr664 (spr664), unsigned 32 bits
- 765: spr665 (spr665), unsigned 32 bits
- 766: spr666 (spr666), unsigned 32 bits
- 767: spr667 (spr667), unsigned 32 bits
- 768: spr668 (spr668), unsigned 32 bits
- 769: spr669 (spr669), unsigned 32 bits
- 770: spr670 (spr670), unsigned 32 bits
- 771: spr671 (spr671), unsigned 32 bits
- 772: spr672 (spr672), unsigned 32 bits
- 773: spr673 (spr673), unsigned 32 bits
- 774: spr674 (spr674), unsigned 32 bits
- 775: spr675 (spr675), unsigned 32 bits
- 776: spr676 (spr676), unsigned 32 bits
- 777: spr677 (spr677), unsigned 32 bits
- 778: spr678 (spr678), unsigned 32 bits
- 779: spr679 (spr679), unsigned 32 bits
- 780: spr680 (spr680), unsigned 32 bits
- 781: spr681 (spr681), unsigned 32 bits
- 782: spr682 (spr682), unsigned 32 bits
- 783: spr683 (spr683), unsigned 32 bits
- 784: spr684 (spr684), unsigned 32 bits
- 785: spr685 (spr685), unsigned 32 bits
- 786: spr686 (spr686), unsigned 32 bits
- 787: spr687 (spr687), unsigned 32 bits
- 788: spr688 (spr688), unsigned 32 bits
- 789: spr689 (spr689), unsigned 32 bits
- 790: spr690 (spr690), unsigned 32 bits
- 791: spr691 (spr691), unsigned 32 bits
- 792: spr692 (spr692), unsigned 32 bits
- 793: spr693 (spr693), unsigned 32 bits
- 794: spr694 (spr694), unsigned 32 bits
- 795: spr695 (spr695), unsigned 32 bits
- 796: spr696 (spr696), unsigned 32 bits
- 797: spr697 (spr697), unsigned 32 bits
- 798: spr698 (spr698), unsigned 32 bits
- 799: spr699 (spr699), unsigned 32 bits
- 800: spr700 (spr700), unsigned 32 bits
- 801: spr701 (spr701), unsigned 32 bits
- 802: spr702 (spr702), unsigned 32 bits
- 803: spr703 (spr703), unsigned 32 bits
- 804: spr704 (spr704), unsigned 32 bits
- 805: spr705 (spr705), unsigned 32 bits
- 806: spr706 (spr706), unsigned 32 bits
- 807: spr707 (spr707), unsigned 32 bits
- 808: spr708 (spr708), unsigned 32 bits
- 809: spr709 (spr709), unsigned 32 bits
- 810: spr710 (spr710), unsigned 32 bits
- 811: spr711 (spr711), unsigned 32 bits
- 812: spr712 (spr712), unsigned 32 bits
- 813: spr713 (spr713), unsigned 32 bits
- 814: spr714 (spr714), unsigned 32 bits
- 815: spr715 (spr715), unsigned 32 bits
- 816: spr716 (spr716), unsigned 32 bits
- 817: spr717 (spr717), unsigned 32 bits
- 818: spr718 (spr718), unsigned 32 bits
- 819: spr719 (spr719), unsigned 32 bits
- 820: spr720 (spr720), unsigned 32 bits
- 821: spr721 (spr721), unsigned 32 bits
- 822: spr722 (spr722), unsigned 32 bits
- 823: spr723 (spr723), unsigned 32 bits
- 824: spr724 (spr724), unsigned 32 bits
- 825: spr725 (spr725), unsigned 32 bits
- 826: spr726 (spr726), unsigned 32 bits
- 827: spr727 (spr727), unsigned 32 bits
- 828: spr728 (spr728), unsigned 32 bits
- 829: spr729 (spr729), unsigned 32 bits
- 830: spr730 (spr730), unsigned 32 bits
- 831: spr731 (spr731), unsigned 32 bits
- 832: spr732 (spr732), unsigned 32 bits
- 833: spr733 (spr733), unsigned 32 bits
- 834: spr734 (spr734), unsigned 32 bits
- 835: spr735 (spr735), unsigned 32 bits
- 836: spr736 (spr736), unsigned 32 bits
- 837: spr737 (spr737), unsigned 32 bits
- 838: spr738 (spr738), unsigned 32 bits
- 839: spr739 (spr739), unsigned 32 bits
- 840: spr740 (spr740), unsigned 32 bits
- 841: spr741 (spr741), unsigned 32 bits
- 842: spr742 (spr742), unsigned 32 bits
- 843: spr743 (spr743), unsigned 32 bits
- 844: spr744 (spr744), unsigned 32 bits
- 845: spr745 (spr745), unsigned 32 bits
- 846: spr746 (spr746), unsigned 32 bits
- 847: spr747 (spr747), unsigned 32 bits
- 848: spr748 (spr748), unsigned 32 bits
- 849: spr749 (spr749), unsigned 32 bits
- 850: spr750 (spr750), unsigned 32 bits
- 851: spr751 (spr751), unsigned 32 bits
- 852: spr752 (spr752), unsigned 32 bits
- 853: spr753 (spr753), unsigned 32 bits
- 854: spr754 (spr754), unsigned 32 bits
- 855: spr755 (spr755), unsigned 32 bits
- 856: spr756 (spr756), unsigned 32 bits
- 857: spr757 (spr757), unsigned 32 bits
- 858: spr758 (spr758), unsigned 32 bits
- 859: spr759 (spr759), unsigned 32 bits
- 860: spr760 (spr760), unsigned 32 bits
- 861: spr761 (spr761), unsigned 32 bits
- 862: spr762 (spr762), unsigned 32 bits
- 863: spr763 (spr763), unsigned 32 bits
- 864: spr764 (spr764), unsigned 32 bits
- 865: spr765 (spr765), unsigned 32 bits
- 866: spr766 (spr766), unsigned 32 bits
- 867: spr767 (spr767), unsigned 32 bits
- 868: spr768 (spr768), unsigned 32 bits
- 869: spr769 (spr769), unsigned 32 bits
- 870: spr770 (spr770), unsigned 32 bits
- 871: spr771 (spr771), unsigned 32 bits
- 872: spr772 (spr772), unsigned 32 bits
- 873: spr773 (spr773), unsigned 32 bits
- 874: spr774 (spr774), unsigned 32 bits
- 875: spr775 (spr775), unsigned 32 bits
- 876: spr776 (spr776), unsigned 32 bits
- 877: spr777 (spr777), unsigned 32 bits
- 878: spr778 (spr778), unsigned 32 bits
- 879: spr779 (spr779), unsigned 32 bits
- 880: spr780 (spr780), unsigned 32 bits
- 881: spr781 (spr781), unsigned 32 bits
- 882: spr782 (spr782), unsigned 32 bits
- 883: spr783 (spr783), unsigned 32 bits
- 884: spr784 (spr784), unsigned 32 bits
- 885: spr785 (spr785), unsigned 32 bits
- 886: spr786 (spr786), unsigned 32 bits
- 887: spr787 (spr787), unsigned 32 bits
- 888: spr788 (spr788), unsigned 32 bits
- 889: spr789 (spr789), unsigned 32 bits
- 890: spr790 (spr790), unsigned 32 bits
- 891: spr791 (spr791), unsigned 32 bits
- 892: spr792 (spr792), unsigned 32 bits
- 893: spr793 (spr793), unsigned 32 bits
- 894: spr794 (spr794), unsigned 32 bits
- 895: spr795 (spr795), unsigned 32 bits
- 896: spr796 (spr796), unsigned 32 bits
- 897: spr797 (spr797), unsigned 32 bits
- 898: spr798 (spr798), unsigned 32 bits
- 899: spr799 (spr799), unsigned 32 bits
- 900: spr800 (spr800), unsigned 32 bits
- 901: spr801 (spr801), unsigned 32 bits
- 902: spr802 (spr802), unsigned 32 bits
- 903: spr803 (spr803), unsigned 32 bits
- 904: spr804 (spr804), unsigned 32 bits
- 905: spr805 (spr805), unsigned 32 bits
- 906: spr806 (spr806), unsigned 32 bits
- 907: spr807 (spr807), unsigned 32 bits
- 908: spr808 (spr808), unsigned 32 bits
- 909: spr809 (spr809), unsigned 32 bits
- 910: spr810 (spr810), unsigned 32 bits
- 911: spr811 (spr811), unsigned 32 bits
- 912: spr812 (spr812), unsigned 32 bits
- 913: spr813 (spr813), unsigned 32 bits
- 914: spr814 (spr814), unsigned 32 bits
- 915: spr815 (spr815), unsigned 32 bits
- 916: spr816 (spr816), unsigned 32 bits
- 917: spr817 (spr817), unsigned 32 bits
- 918: spr818 (spr818), unsigned 32 bits
- 919: spr819 (spr819), unsigned 32 bits
- 920: spr820 (spr820), unsigned 32 bits
- 921: spr821 (spr821), unsigned 32 bits
- 922: spr822 (spr822), unsigned 32 bits
- 923: spr823 (spr823), unsigned 32 bits
- 924: spr824 (spr824), unsigned 32 bits
- 925: spr825 (spr825), unsigned 32 bits
- 926: spr826 (spr826), unsigned 32 bits
- 927: spr827 (spr827), unsigned 32 bits
- 928: spr828 (spr828), unsigned 32 bits
- 929: spr829 (spr829), unsigned 32 bits
- 930: spr830 (spr830), unsigned 32 bits
- 931: spr831 (spr831), unsigned 32 bits
- 932: spr832 (spr832), unsigned 32 bits
- 933: spr833 (spr833), unsigned 32 bits
- 934: spr834 (spr834), unsigned 32 bits
- 935: spr835 (spr835), unsigned 32 bits
- 936: spr836 (spr836), unsigned 32 bits
- 937: spr837 (spr837), unsigned 32 bits
- 938: spr838 (spr838), unsigned 32 bits
- 939: spr839 (spr839), unsigned 32 bits
- 940: spr840 (spr840), unsigned 32 bits
- 941: spr841 (spr841), unsigned 32 bits
- 942: spr842 (spr842), unsigned 32 bits
- 943: spr843 (spr843), unsigned 32 bits
- 944: spr844 (spr844), unsigned 32 bits
- 945: spr845 (spr845), unsigned 32 bits
- 946: spr846 (spr846), unsigned 32 bits
- 947: spr847 (spr847), unsigned 32 bits
- 948: spr848 (spr848), unsigned 32 bits
- 949: spr849 (spr849), unsigned 32 bits
- 950: spr850 (spr850), unsigned 32 bits
- 951: spr851 (spr851), unsigned 32 bits
- 952: spr852 (spr852), unsigned 32 bits
- 953: spr853 (spr853), unsigned 32 bits
- 954: spr854 (spr854), unsigned 32 bits
- 955: spr855 (spr855), unsigned 32 bits
- 956: spr856 (spr856), unsigned 32 bits
- 957: spr857 (spr857), unsigned 32 bits
- 958: spr858 (spr858), unsigned 32 bits
- 959: spr859 (spr859), unsigned 32 bits
- 960: spr860 (spr860), unsigned 32 bits
- 961: spr861 (spr861), unsigned 32 bits
- 962: spr862 (spr862), unsigned 32 bits
- 963: spr863 (spr863), unsigned 32 bits
- 964: spr864 (spr864), unsigned 32 bits
- 965: spr865 (spr865), unsigned 32 bits
- 966: spr866 (spr866), unsigned 32 bits
- 967: spr867 (spr867), unsigned 32 bits
- 968: spr868 (spr868), unsigned 32 bits
- 969: spr869 (spr869), unsigned 32 bits
- 970: spr870 (spr870), unsigned 32 bits
- 971: spr871 (spr871), unsigned 32 bits
- 972: spr872 (spr872), unsigned 32 bits
- 973: spr873 (spr873), unsigned 32 bits
- 974: spr874 (spr874), unsigned 32 bits
- 975: spr875 (spr875), unsigned 32 bits
- 976: spr876 (spr876), unsigned 32 bits
- 977: spr877 (spr877), unsigned 32 bits
- 978: spr878 (spr878), unsigned 32 bits
- 979: spr879 (spr879), unsigned 32 bits
- 980: spr880 (spr880), unsigned 32 bits
- 981: spr881 (spr881), unsigned 32 bits
- 982: spr882 (spr882), unsigned 32 bits
- 983: spr883 (spr883), unsigned 32 bits
- 984: spr884 (spr884), unsigned 32 bits
- 985: spr885 (spr885), unsigned 32 bits
- 986: spr886 (spr886), unsigned 32 bits
- 987: spr887 (spr887), unsigned 32 bits
- 988: spr888 (spr888), unsigned 32 bits
- 989: spr889 (spr889), unsigned 32 bits
- 990: spr890 (spr890), unsigned 32 bits
- 991: spr891 (spr891), unsigned 32 bits
- 992: spr892 (spr892), unsigned 32 bits
- 993: spr893 (spr893), unsigned 32 bits
- 994: spr894 (spr894), unsigned 32 bits
- 995: spr895 (spr895), unsigned 32 bits
- 996: spr896 (spr896), unsigned 32 bits
- 997: spr897 (spr897), unsigned 32 bits
- 998: spr898 (spr898), unsigned 32 bits
- 999: spr899 (spr899), unsigned 32 bits
-vector registers:
- 67: vscr (vscr), unsigned 32 bits
- 356: vrsave (vrsave), unsigned 32 bits
- 612: spefscr (spefscr), unsigned 32 bits
- 1124: vr0 (vr0), unsigned 128 bits
- 1125: vr1 (vr1), unsigned 128 bits
- 1126: vr2 (vr2), unsigned 128 bits
- 1127: vr3 (vr3), unsigned 128 bits
- 1128: vr4 (vr4), unsigned 128 bits
- 1129: vr5 (vr5), unsigned 128 bits
- 1130: vr6 (vr6), unsigned 128 bits
- 1131: vr7 (vr7), unsigned 128 bits
- 1132: vr8 (vr8), unsigned 128 bits
- 1133: vr9 (vr9), unsigned 128 bits
- 1134: vr10 (vr10), unsigned 128 bits
- 1135: vr11 (vr11), unsigned 128 bits
- 1136: vr12 (vr12), unsigned 128 bits
- 1137: vr13 (vr13), unsigned 128 bits
- 1138: vr14 (vr14), unsigned 128 bits
- 1139: vr15 (vr15), unsigned 128 bits
- 1140: vr16 (vr16), unsigned 128 bits
- 1141: vr17 (vr17), unsigned 128 bits
- 1142: vr18 (vr18), unsigned 128 bits
- 1143: vr19 (vr19), unsigned 128 bits
- 1144: vr20 (vr20), unsigned 128 bits
- 1145: vr21 (vr21), unsigned 128 bits
- 1146: vr22 (vr22), unsigned 128 bits
- 1147: vr23 (vr23), unsigned 128 bits
- 1148: vr24 (vr24), unsigned 128 bits
- 1149: vr25 (vr25), unsigned 128 bits
- 1150: vr26 (vr26), unsigned 128 bits
- 1151: vr27 (vr27), unsigned 128 bits
- 1152: vr28 (vr28), unsigned 128 bits
- 1153: vr29 (vr29), unsigned 128 bits
- 1154: vr30 (vr30), unsigned 128 bits
- 1155: vr31 (vr31), unsigned 128 bits
-EOF
-
-regs_test testfile23 <<\EOF
-integer registers:
- 0: r0 (r0), signed 64 bits
- 1: r1 (r1), signed 64 bits
- 2: r2 (r2), signed 64 bits
- 3: r3 (r3), signed 64 bits
- 4: r4 (r4), signed 64 bits
- 5: r5 (r5), signed 64 bits
- 6: r6 (r6), signed 64 bits
- 7: r7 (r7), signed 64 bits
- 8: r8 (r8), signed 64 bits
- 9: r9 (r9), signed 64 bits
- 10: r10 (r10), signed 64 bits
- 11: r11 (r11), signed 64 bits
- 12: r12 (r12), signed 64 bits
- 13: r13 (r13), signed 64 bits
- 14: r14 (r14), signed 64 bits
- 15: r15 (r15), signed 64 bits
- 16: r16 (r16), signed 64 bits
- 17: r17 (r17), signed 64 bits
- 18: r18 (r18), signed 64 bits
- 19: r19 (r19), signed 64 bits
- 20: r20 (r20), signed 64 bits
- 21: r21 (r21), signed 64 bits
- 22: r22 (r22), signed 64 bits
- 23: r23 (r23), signed 64 bits
- 24: r24 (r24), signed 64 bits
- 25: r25 (r25), signed 64 bits
- 26: r26 (r26), signed 64 bits
- 27: r27 (r27), signed 64 bits
- 28: r28 (r28), signed 64 bits
- 29: r29 (r29), signed 64 bits
- 30: r30 (r30), signed 64 bits
- 31: r31 (r31), signed 64 bits
- 64: cr (cr), unsigned 64 bits
- 66: msr (msr), unsigned 64 bits
-FPU registers:
- 32: f0 (f0), float 64 bits
- 33: f1 (f1), float 64 bits
- 34: f2 (f2), float 64 bits
- 35: f3 (f3), float 64 bits
- 36: f4 (f4), float 64 bits
- 37: f5 (f5), float 64 bits
- 38: f6 (f6), float 64 bits
- 39: f7 (f7), float 64 bits
- 40: f8 (f8), float 64 bits
- 41: f9 (f9), float 64 bits
- 42: f10 (f10), float 64 bits
- 43: f11 (f11), float 64 bits
- 44: f12 (f12), float 64 bits
- 45: f13 (f13), float 64 bits
- 46: f14 (f14), float 64 bits
- 47: f15 (f15), float 64 bits
- 48: f16 (f16), float 64 bits
- 49: f17 (f17), float 64 bits
- 50: f18 (f18), float 64 bits
- 51: f19 (f19), float 64 bits
- 52: f20 (f20), float 64 bits
- 53: f21 (f21), float 64 bits
- 54: f22 (f22), float 64 bits
- 55: f23 (f23), float 64 bits
- 56: f24 (f24), float 64 bits
- 57: f25 (f25), float 64 bits
- 58: f26 (f26), float 64 bits
- 59: f27 (f27), float 64 bits
- 60: f28 (f28), float 64 bits
- 61: f29 (f29), float 64 bits
- 62: f30 (f30), float 64 bits
- 63: f31 (f31), float 64 bits
- 65: fpscr (fpscr), unsigned 64 bits
-privileged registers:
- 70: sr0 (sr0), unsigned 64 bits
- 71: sr1 (sr1), unsigned 64 bits
- 72: sr2 (sr2), unsigned 64 bits
- 73: sr3 (sr3), unsigned 64 bits
- 74: sr4 (sr4), unsigned 64 bits
- 75: sr5 (sr5), unsigned 64 bits
- 76: sr6 (sr6), unsigned 64 bits
- 77: sr7 (sr7), unsigned 64 bits
- 78: sr8 (sr8), unsigned 64 bits
- 79: sr9 (sr9), unsigned 64 bits
- 80: sr10 (sr10), unsigned 64 bits
- 81: sr11 (sr11), unsigned 64 bits
- 82: sr12 (sr12), unsigned 64 bits
- 83: sr13 (sr13), unsigned 64 bits
- 84: sr14 (sr14), unsigned 64 bits
- 85: sr15 (sr15), unsigned 64 bits
- 100: spr0 (spr0), unsigned 64 bits
- 101: xer (xer), unsigned 64 bits
- 102: spr2 (spr2), unsigned 64 bits
- 103: spr3 (spr3), unsigned 64 bits
- 104: spr4 (spr4), unsigned 64 bits
- 105: spr5 (spr5), unsigned 64 bits
- 106: spr6 (spr6), unsigned 64 bits
- 107: spr7 (spr7), unsigned 64 bits
- 108: lr (lr), unsigned 64 bits
- 109: ctr (ctr), unsigned 64 bits
- 110: spr10 (spr10), unsigned 64 bits
- 111: spr11 (spr11), unsigned 64 bits
- 112: spr12 (spr12), unsigned 64 bits
- 113: spr13 (spr13), unsigned 64 bits
- 114: spr14 (spr14), unsigned 64 bits
- 115: spr15 (spr15), unsigned 64 bits
- 116: spr16 (spr16), unsigned 64 bits
- 117: spr17 (spr17), unsigned 64 bits
- 118: dsisr (dsisr), unsigned 64 bits
- 119: dar (dar), unsigned 64 bits
- 120: spr20 (spr20), unsigned 64 bits
- 121: spr21 (spr21), unsigned 64 bits
- 122: dec (dec), unsigned 64 bits
- 123: spr23 (spr23), unsigned 64 bits
- 124: spr24 (spr24), unsigned 64 bits
- 125: spr25 (spr25), unsigned 64 bits
- 126: spr26 (spr26), unsigned 64 bits
- 127: spr27 (spr27), unsigned 64 bits
- 128: spr28 (spr28), unsigned 64 bits
- 129: spr29 (spr29), unsigned 64 bits
- 130: spr30 (spr30), unsigned 64 bits
- 131: spr31 (spr31), unsigned 64 bits
- 132: spr32 (spr32), unsigned 64 bits
- 133: spr33 (spr33), unsigned 64 bits
- 134: spr34 (spr34), unsigned 64 bits
- 135: spr35 (spr35), unsigned 64 bits
- 136: spr36 (spr36), unsigned 64 bits
- 137: spr37 (spr37), unsigned 64 bits
- 138: spr38 (spr38), unsigned 64 bits
- 139: spr39 (spr39), unsigned 64 bits
- 140: spr40 (spr40), unsigned 64 bits
- 141: spr41 (spr41), unsigned 64 bits
- 142: spr42 (spr42), unsigned 64 bits
- 143: spr43 (spr43), unsigned 64 bits
- 144: spr44 (spr44), unsigned 64 bits
- 145: spr45 (spr45), unsigned 64 bits
- 146: spr46 (spr46), unsigned 64 bits
- 147: spr47 (spr47), unsigned 64 bits
- 148: spr48 (spr48), unsigned 64 bits
- 149: spr49 (spr49), unsigned 64 bits
- 150: spr50 (spr50), unsigned 64 bits
- 151: spr51 (spr51), unsigned 64 bits
- 152: spr52 (spr52), unsigned 64 bits
- 153: spr53 (spr53), unsigned 64 bits
- 154: spr54 (spr54), unsigned 64 bits
- 155: spr55 (spr55), unsigned 64 bits
- 156: spr56 (spr56), unsigned 64 bits
- 157: spr57 (spr57), unsigned 64 bits
- 158: spr58 (spr58), unsigned 64 bits
- 159: spr59 (spr59), unsigned 64 bits
- 160: spr60 (spr60), unsigned 64 bits
- 161: spr61 (spr61), unsigned 64 bits
- 162: spr62 (spr62), unsigned 64 bits
- 163: spr63 (spr63), unsigned 64 bits
- 164: spr64 (spr64), unsigned 64 bits
- 165: spr65 (spr65), unsigned 64 bits
- 166: spr66 (spr66), unsigned 64 bits
- 167: spr67 (spr67), unsigned 64 bits
- 168: spr68 (spr68), unsigned 64 bits
- 169: spr69 (spr69), unsigned 64 bits
- 170: spr70 (spr70), unsigned 64 bits
- 171: spr71 (spr71), unsigned 64 bits
- 172: spr72 (spr72), unsigned 64 bits
- 173: spr73 (spr73), unsigned 64 bits
- 174: spr74 (spr74), unsigned 64 bits
- 175: spr75 (spr75), unsigned 64 bits
- 176: spr76 (spr76), unsigned 64 bits
- 177: spr77 (spr77), unsigned 64 bits
- 178: spr78 (spr78), unsigned 64 bits
- 179: spr79 (spr79), unsigned 64 bits
- 180: spr80 (spr80), unsigned 64 bits
- 181: spr81 (spr81), unsigned 64 bits
- 182: spr82 (spr82), unsigned 64 bits
- 183: spr83 (spr83), unsigned 64 bits
- 184: spr84 (spr84), unsigned 64 bits
- 185: spr85 (spr85), unsigned 64 bits
- 186: spr86 (spr86), unsigned 64 bits
- 187: spr87 (spr87), unsigned 64 bits
- 188: spr88 (spr88), unsigned 64 bits
- 189: spr89 (spr89), unsigned 64 bits
- 190: spr90 (spr90), unsigned 64 bits
- 191: spr91 (spr91), unsigned 64 bits
- 192: spr92 (spr92), unsigned 64 bits
- 193: spr93 (spr93), unsigned 64 bits
- 194: spr94 (spr94), unsigned 64 bits
- 195: spr95 (spr95), unsigned 64 bits
- 196: spr96 (spr96), unsigned 64 bits
- 197: spr97 (spr97), unsigned 64 bits
- 198: spr98 (spr98), unsigned 64 bits
- 199: spr99 (spr99), unsigned 64 bits
- 200: spr100 (spr100), unsigned 64 bits
- 201: spr101 (spr101), unsigned 64 bits
- 202: spr102 (spr102), unsigned 64 bits
- 203: spr103 (spr103), unsigned 64 bits
- 204: spr104 (spr104), unsigned 64 bits
- 205: spr105 (spr105), unsigned 64 bits
- 206: spr106 (spr106), unsigned 64 bits
- 207: spr107 (spr107), unsigned 64 bits
- 208: spr108 (spr108), unsigned 64 bits
- 209: spr109 (spr109), unsigned 64 bits
- 210: spr110 (spr110), unsigned 64 bits
- 211: spr111 (spr111), unsigned 64 bits
- 212: spr112 (spr112), unsigned 64 bits
- 213: spr113 (spr113), unsigned 64 bits
- 214: spr114 (spr114), unsigned 64 bits
- 215: spr115 (spr115), unsigned 64 bits
- 216: spr116 (spr116), unsigned 64 bits
- 217: spr117 (spr117), unsigned 64 bits
- 218: spr118 (spr118), unsigned 64 bits
- 219: spr119 (spr119), unsigned 64 bits
- 220: spr120 (spr120), unsigned 64 bits
- 221: spr121 (spr121), unsigned 64 bits
- 222: spr122 (spr122), unsigned 64 bits
- 223: spr123 (spr123), unsigned 64 bits
- 224: spr124 (spr124), unsigned 64 bits
- 225: spr125 (spr125), unsigned 64 bits
- 226: spr126 (spr126), unsigned 64 bits
- 227: spr127 (spr127), unsigned 64 bits
- 228: spr128 (spr128), unsigned 64 bits
- 229: spr129 (spr129), unsigned 64 bits
- 230: spr130 (spr130), unsigned 64 bits
- 231: spr131 (spr131), unsigned 64 bits
- 232: spr132 (spr132), unsigned 64 bits
- 233: spr133 (spr133), unsigned 64 bits
- 234: spr134 (spr134), unsigned 64 bits
- 235: spr135 (spr135), unsigned 64 bits
- 236: spr136 (spr136), unsigned 64 bits
- 237: spr137 (spr137), unsigned 64 bits
- 238: spr138 (spr138), unsigned 64 bits
- 239: spr139 (spr139), unsigned 64 bits
- 240: spr140 (spr140), unsigned 64 bits
- 241: spr141 (spr141), unsigned 64 bits
- 242: spr142 (spr142), unsigned 64 bits
- 243: spr143 (spr143), unsigned 64 bits
- 244: spr144 (spr144), unsigned 64 bits
- 245: spr145 (spr145), unsigned 64 bits
- 246: spr146 (spr146), unsigned 64 bits
- 247: spr147 (spr147), unsigned 64 bits
- 248: spr148 (spr148), unsigned 64 bits
- 249: spr149 (spr149), unsigned 64 bits
- 250: spr150 (spr150), unsigned 64 bits
- 251: spr151 (spr151), unsigned 64 bits
- 252: spr152 (spr152), unsigned 64 bits
- 253: spr153 (spr153), unsigned 64 bits
- 254: spr154 (spr154), unsigned 64 bits
- 255: spr155 (spr155), unsigned 64 bits
- 256: spr156 (spr156), unsigned 64 bits
- 257: spr157 (spr157), unsigned 64 bits
- 258: spr158 (spr158), unsigned 64 bits
- 259: spr159 (spr159), unsigned 64 bits
- 260: spr160 (spr160), unsigned 64 bits
- 261: spr161 (spr161), unsigned 64 bits
- 262: spr162 (spr162), unsigned 64 bits
- 263: spr163 (spr163), unsigned 64 bits
- 264: spr164 (spr164), unsigned 64 bits
- 265: spr165 (spr165), unsigned 64 bits
- 266: spr166 (spr166), unsigned 64 bits
- 267: spr167 (spr167), unsigned 64 bits
- 268: spr168 (spr168), unsigned 64 bits
- 269: spr169 (spr169), unsigned 64 bits
- 270: spr170 (spr170), unsigned 64 bits
- 271: spr171 (spr171), unsigned 64 bits
- 272: spr172 (spr172), unsigned 64 bits
- 273: spr173 (spr173), unsigned 64 bits
- 274: spr174 (spr174), unsigned 64 bits
- 275: spr175 (spr175), unsigned 64 bits
- 276: spr176 (spr176), unsigned 64 bits
- 277: spr177 (spr177), unsigned 64 bits
- 278: spr178 (spr178), unsigned 64 bits
- 279: spr179 (spr179), unsigned 64 bits
- 280: spr180 (spr180), unsigned 64 bits
- 281: spr181 (spr181), unsigned 64 bits
- 282: spr182 (spr182), unsigned 64 bits
- 283: spr183 (spr183), unsigned 64 bits
- 284: spr184 (spr184), unsigned 64 bits
- 285: spr185 (spr185), unsigned 64 bits
- 286: spr186 (spr186), unsigned 64 bits
- 287: spr187 (spr187), unsigned 64 bits
- 288: spr188 (spr188), unsigned 64 bits
- 289: spr189 (spr189), unsigned 64 bits
- 290: spr190 (spr190), unsigned 64 bits
- 291: spr191 (spr191), unsigned 64 bits
- 292: spr192 (spr192), unsigned 64 bits
- 293: spr193 (spr193), unsigned 64 bits
- 294: spr194 (spr194), unsigned 64 bits
- 295: spr195 (spr195), unsigned 64 bits
- 296: spr196 (spr196), unsigned 64 bits
- 297: spr197 (spr197), unsigned 64 bits
- 298: spr198 (spr198), unsigned 64 bits
- 299: spr199 (spr199), unsigned 64 bits
- 300: spr200 (spr200), unsigned 64 bits
- 301: spr201 (spr201), unsigned 64 bits
- 302: spr202 (spr202), unsigned 64 bits
- 303: spr203 (spr203), unsigned 64 bits
- 304: spr204 (spr204), unsigned 64 bits
- 305: spr205 (spr205), unsigned 64 bits
- 306: spr206 (spr206), unsigned 64 bits
- 307: spr207 (spr207), unsigned 64 bits
- 308: spr208 (spr208), unsigned 64 bits
- 309: spr209 (spr209), unsigned 64 bits
- 310: spr210 (spr210), unsigned 64 bits
- 311: spr211 (spr211), unsigned 64 bits
- 312: spr212 (spr212), unsigned 64 bits
- 313: spr213 (spr213), unsigned 64 bits
- 314: spr214 (spr214), unsigned 64 bits
- 315: spr215 (spr215), unsigned 64 bits
- 316: spr216 (spr216), unsigned 64 bits
- 317: spr217 (spr217), unsigned 64 bits
- 318: spr218 (spr218), unsigned 64 bits
- 319: spr219 (spr219), unsigned 64 bits
- 320: spr220 (spr220), unsigned 64 bits
- 321: spr221 (spr221), unsigned 64 bits
- 322: spr222 (spr222), unsigned 64 bits
- 323: spr223 (spr223), unsigned 64 bits
- 324: spr224 (spr224), unsigned 64 bits
- 325: spr225 (spr225), unsigned 64 bits
- 326: spr226 (spr226), unsigned 64 bits
- 327: spr227 (spr227), unsigned 64 bits
- 328: spr228 (spr228), unsigned 64 bits
- 329: spr229 (spr229), unsigned 64 bits
- 330: spr230 (spr230), unsigned 64 bits
- 331: spr231 (spr231), unsigned 64 bits
- 332: spr232 (spr232), unsigned 64 bits
- 333: spr233 (spr233), unsigned 64 bits
- 334: spr234 (spr234), unsigned 64 bits
- 335: spr235 (spr235), unsigned 64 bits
- 336: spr236 (spr236), unsigned 64 bits
- 337: spr237 (spr237), unsigned 64 bits
- 338: spr238 (spr238), unsigned 64 bits
- 339: spr239 (spr239), unsigned 64 bits
- 340: spr240 (spr240), unsigned 64 bits
- 341: spr241 (spr241), unsigned 64 bits
- 342: spr242 (spr242), unsigned 64 bits
- 343: spr243 (spr243), unsigned 64 bits
- 344: spr244 (spr244), unsigned 64 bits
- 345: spr245 (spr245), unsigned 64 bits
- 346: spr246 (spr246), unsigned 64 bits
- 347: spr247 (spr247), unsigned 64 bits
- 348: spr248 (spr248), unsigned 64 bits
- 349: spr249 (spr249), unsigned 64 bits
- 350: spr250 (spr250), unsigned 64 bits
- 351: spr251 (spr251), unsigned 64 bits
- 352: spr252 (spr252), unsigned 64 bits
- 353: spr253 (spr253), unsigned 64 bits
- 354: spr254 (spr254), unsigned 64 bits
- 355: spr255 (spr255), unsigned 64 bits
- 357: spr257 (spr257), unsigned 64 bits
- 358: spr258 (spr258), unsigned 64 bits
- 359: spr259 (spr259), unsigned 64 bits
- 360: spr260 (spr260), unsigned 64 bits
- 361: spr261 (spr261), unsigned 64 bits
- 362: spr262 (spr262), unsigned 64 bits
- 363: spr263 (spr263), unsigned 64 bits
- 364: spr264 (spr264), unsigned 64 bits
- 365: spr265 (spr265), unsigned 64 bits
- 366: spr266 (spr266), unsigned 64 bits
- 367: spr267 (spr267), unsigned 64 bits
- 368: spr268 (spr268), unsigned 64 bits
- 369: spr269 (spr269), unsigned 64 bits
- 370: spr270 (spr270), unsigned 64 bits
- 371: spr271 (spr271), unsigned 64 bits
- 372: spr272 (spr272), unsigned 64 bits
- 373: spr273 (spr273), unsigned 64 bits
- 374: spr274 (spr274), unsigned 64 bits
- 375: spr275 (spr275), unsigned 64 bits
- 376: spr276 (spr276), unsigned 64 bits
- 377: spr277 (spr277), unsigned 64 bits
- 378: spr278 (spr278), unsigned 64 bits
- 379: spr279 (spr279), unsigned 64 bits
- 380: spr280 (spr280), unsigned 64 bits
- 381: spr281 (spr281), unsigned 64 bits
- 382: spr282 (spr282), unsigned 64 bits
- 383: spr283 (spr283), unsigned 64 bits
- 384: spr284 (spr284), unsigned 64 bits
- 385: spr285 (spr285), unsigned 64 bits
- 386: spr286 (spr286), unsigned 64 bits
- 387: spr287 (spr287), unsigned 64 bits
- 388: spr288 (spr288), unsigned 64 bits
- 389: spr289 (spr289), unsigned 64 bits
- 390: spr290 (spr290), unsigned 64 bits
- 391: spr291 (spr291), unsigned 64 bits
- 392: spr292 (spr292), unsigned 64 bits
- 393: spr293 (spr293), unsigned 64 bits
- 394: spr294 (spr294), unsigned 64 bits
- 395: spr295 (spr295), unsigned 64 bits
- 396: spr296 (spr296), unsigned 64 bits
- 397: spr297 (spr297), unsigned 64 bits
- 398: spr298 (spr298), unsigned 64 bits
- 399: spr299 (spr299), unsigned 64 bits
- 400: spr300 (spr300), unsigned 64 bits
- 401: spr301 (spr301), unsigned 64 bits
- 402: spr302 (spr302), unsigned 64 bits
- 403: spr303 (spr303), unsigned 64 bits
- 404: spr304 (spr304), unsigned 64 bits
- 405: spr305 (spr305), unsigned 64 bits
- 406: spr306 (spr306), unsigned 64 bits
- 407: spr307 (spr307), unsigned 64 bits
- 408: spr308 (spr308), unsigned 64 bits
- 409: spr309 (spr309), unsigned 64 bits
- 410: spr310 (spr310), unsigned 64 bits
- 411: spr311 (spr311), unsigned 64 bits
- 412: spr312 (spr312), unsigned 64 bits
- 413: spr313 (spr313), unsigned 64 bits
- 414: spr314 (spr314), unsigned 64 bits
- 415: spr315 (spr315), unsigned 64 bits
- 416: spr316 (spr316), unsigned 64 bits
- 417: spr317 (spr317), unsigned 64 bits
- 418: spr318 (spr318), unsigned 64 bits
- 419: spr319 (spr319), unsigned 64 bits
- 420: spr320 (spr320), unsigned 64 bits
- 421: spr321 (spr321), unsigned 64 bits
- 422: spr322 (spr322), unsigned 64 bits
- 423: spr323 (spr323), unsigned 64 bits
- 424: spr324 (spr324), unsigned 64 bits
- 425: spr325 (spr325), unsigned 64 bits
- 426: spr326 (spr326), unsigned 64 bits
- 427: spr327 (spr327), unsigned 64 bits
- 428: spr328 (spr328), unsigned 64 bits
- 429: spr329 (spr329), unsigned 64 bits
- 430: spr330 (spr330), unsigned 64 bits
- 431: spr331 (spr331), unsigned 64 bits
- 432: spr332 (spr332), unsigned 64 bits
- 433: spr333 (spr333), unsigned 64 bits
- 434: spr334 (spr334), unsigned 64 bits
- 435: spr335 (spr335), unsigned 64 bits
- 436: spr336 (spr336), unsigned 64 bits
- 437: spr337 (spr337), unsigned 64 bits
- 438: spr338 (spr338), unsigned 64 bits
- 439: spr339 (spr339), unsigned 64 bits
- 440: spr340 (spr340), unsigned 64 bits
- 441: spr341 (spr341), unsigned 64 bits
- 442: spr342 (spr342), unsigned 64 bits
- 443: spr343 (spr343), unsigned 64 bits
- 444: spr344 (spr344), unsigned 64 bits
- 445: spr345 (spr345), unsigned 64 bits
- 446: spr346 (spr346), unsigned 64 bits
- 447: spr347 (spr347), unsigned 64 bits
- 448: spr348 (spr348), unsigned 64 bits
- 449: spr349 (spr349), unsigned 64 bits
- 450: spr350 (spr350), unsigned 64 bits
- 451: spr351 (spr351), unsigned 64 bits
- 452: spr352 (spr352), unsigned 64 bits
- 453: spr353 (spr353), unsigned 64 bits
- 454: spr354 (spr354), unsigned 64 bits
- 455: spr355 (spr355), unsigned 64 bits
- 456: spr356 (spr356), unsigned 64 bits
- 457: spr357 (spr357), unsigned 64 bits
- 458: spr358 (spr358), unsigned 64 bits
- 459: spr359 (spr359), unsigned 64 bits
- 460: spr360 (spr360), unsigned 64 bits
- 461: spr361 (spr361), unsigned 64 bits
- 462: spr362 (spr362), unsigned 64 bits
- 463: spr363 (spr363), unsigned 64 bits
- 464: spr364 (spr364), unsigned 64 bits
- 465: spr365 (spr365), unsigned 64 bits
- 466: spr366 (spr366), unsigned 64 bits
- 467: spr367 (spr367), unsigned 64 bits
- 468: spr368 (spr368), unsigned 64 bits
- 469: spr369 (spr369), unsigned 64 bits
- 470: spr370 (spr370), unsigned 64 bits
- 471: spr371 (spr371), unsigned 64 bits
- 472: spr372 (spr372), unsigned 64 bits
- 473: spr373 (spr373), unsigned 64 bits
- 474: spr374 (spr374), unsigned 64 bits
- 475: spr375 (spr375), unsigned 64 bits
- 476: spr376 (spr376), unsigned 64 bits
- 477: spr377 (spr377), unsigned 64 bits
- 478: spr378 (spr378), unsigned 64 bits
- 479: spr379 (spr379), unsigned 64 bits
- 480: spr380 (spr380), unsigned 64 bits
- 481: spr381 (spr381), unsigned 64 bits
- 482: spr382 (spr382), unsigned 64 bits
- 483: spr383 (spr383), unsigned 64 bits
- 484: spr384 (spr384), unsigned 64 bits
- 485: spr385 (spr385), unsigned 64 bits
- 486: spr386 (spr386), unsigned 64 bits
- 487: spr387 (spr387), unsigned 64 bits
- 488: spr388 (spr388), unsigned 64 bits
- 489: spr389 (spr389), unsigned 64 bits
- 490: spr390 (spr390), unsigned 64 bits
- 491: spr391 (spr391), unsigned 64 bits
- 492: spr392 (spr392), unsigned 64 bits
- 493: spr393 (spr393), unsigned 64 bits
- 494: spr394 (spr394), unsigned 64 bits
- 495: spr395 (spr395), unsigned 64 bits
- 496: spr396 (spr396), unsigned 64 bits
- 497: spr397 (spr397), unsigned 64 bits
- 498: spr398 (spr398), unsigned 64 bits
- 499: spr399 (spr399), unsigned 64 bits
- 500: spr400 (spr400), unsigned 64 bits
- 501: spr401 (spr401), unsigned 64 bits
- 502: spr402 (spr402), unsigned 64 bits
- 503: spr403 (spr403), unsigned 64 bits
- 504: spr404 (spr404), unsigned 64 bits
- 505: spr405 (spr405), unsigned 64 bits
- 506: spr406 (spr406), unsigned 64 bits
- 507: spr407 (spr407), unsigned 64 bits
- 508: spr408 (spr408), unsigned 64 bits
- 509: spr409 (spr409), unsigned 64 bits
- 510: spr410 (spr410), unsigned 64 bits
- 511: spr411 (spr411), unsigned 64 bits
- 512: spr412 (spr412), unsigned 64 bits
- 513: spr413 (spr413), unsigned 64 bits
- 514: spr414 (spr414), unsigned 64 bits
- 515: spr415 (spr415), unsigned 64 bits
- 516: spr416 (spr416), unsigned 64 bits
- 517: spr417 (spr417), unsigned 64 bits
- 518: spr418 (spr418), unsigned 64 bits
- 519: spr419 (spr419), unsigned 64 bits
- 520: spr420 (spr420), unsigned 64 bits
- 521: spr421 (spr421), unsigned 64 bits
- 522: spr422 (spr422), unsigned 64 bits
- 523: spr423 (spr423), unsigned 64 bits
- 524: spr424 (spr424), unsigned 64 bits
- 525: spr425 (spr425), unsigned 64 bits
- 526: spr426 (spr426), unsigned 64 bits
- 527: spr427 (spr427), unsigned 64 bits
- 528: spr428 (spr428), unsigned 64 bits
- 529: spr429 (spr429), unsigned 64 bits
- 530: spr430 (spr430), unsigned 64 bits
- 531: spr431 (spr431), unsigned 64 bits
- 532: spr432 (spr432), unsigned 64 bits
- 533: spr433 (spr433), unsigned 64 bits
- 534: spr434 (spr434), unsigned 64 bits
- 535: spr435 (spr435), unsigned 64 bits
- 536: spr436 (spr436), unsigned 64 bits
- 537: spr437 (spr437), unsigned 64 bits
- 538: spr438 (spr438), unsigned 64 bits
- 539: spr439 (spr439), unsigned 64 bits
- 540: spr440 (spr440), unsigned 64 bits
- 541: spr441 (spr441), unsigned 64 bits
- 542: spr442 (spr442), unsigned 64 bits
- 543: spr443 (spr443), unsigned 64 bits
- 544: spr444 (spr444), unsigned 64 bits
- 545: spr445 (spr445), unsigned 64 bits
- 546: spr446 (spr446), unsigned 64 bits
- 547: spr447 (spr447), unsigned 64 bits
- 548: spr448 (spr448), unsigned 64 bits
- 549: spr449 (spr449), unsigned 64 bits
- 550: spr450 (spr450), unsigned 64 bits
- 551: spr451 (spr451), unsigned 64 bits
- 552: spr452 (spr452), unsigned 64 bits
- 553: spr453 (spr453), unsigned 64 bits
- 554: spr454 (spr454), unsigned 64 bits
- 555: spr455 (spr455), unsigned 64 bits
- 556: spr456 (spr456), unsigned 64 bits
- 557: spr457 (spr457), unsigned 64 bits
- 558: spr458 (spr458), unsigned 64 bits
- 559: spr459 (spr459), unsigned 64 bits
- 560: spr460 (spr460), unsigned 64 bits
- 561: spr461 (spr461), unsigned 64 bits
- 562: spr462 (spr462), unsigned 64 bits
- 563: spr463 (spr463), unsigned 64 bits
- 564: spr464 (spr464), unsigned 64 bits
- 565: spr465 (spr465), unsigned 64 bits
- 566: spr466 (spr466), unsigned 64 bits
- 567: spr467 (spr467), unsigned 64 bits
- 568: spr468 (spr468), unsigned 64 bits
- 569: spr469 (spr469), unsigned 64 bits
- 570: spr470 (spr470), unsigned 64 bits
- 571: spr471 (spr471), unsigned 64 bits
- 572: spr472 (spr472), unsigned 64 bits
- 573: spr473 (spr473), unsigned 64 bits
- 574: spr474 (spr474), unsigned 64 bits
- 575: spr475 (spr475), unsigned 64 bits
- 576: spr476 (spr476), unsigned 64 bits
- 577: spr477 (spr477), unsigned 64 bits
- 578: spr478 (spr478), unsigned 64 bits
- 579: spr479 (spr479), unsigned 64 bits
- 580: spr480 (spr480), unsigned 64 bits
- 581: spr481 (spr481), unsigned 64 bits
- 582: spr482 (spr482), unsigned 64 bits
- 583: spr483 (spr483), unsigned 64 bits
- 584: spr484 (spr484), unsigned 64 bits
- 585: spr485 (spr485), unsigned 64 bits
- 586: spr486 (spr486), unsigned 64 bits
- 587: spr487 (spr487), unsigned 64 bits
- 588: spr488 (spr488), unsigned 64 bits
- 589: spr489 (spr489), unsigned 64 bits
- 590: spr490 (spr490), unsigned 64 bits
- 591: spr491 (spr491), unsigned 64 bits
- 592: spr492 (spr492), unsigned 64 bits
- 593: spr493 (spr493), unsigned 64 bits
- 594: spr494 (spr494), unsigned 64 bits
- 595: spr495 (spr495), unsigned 64 bits
- 596: spr496 (spr496), unsigned 64 bits
- 597: spr497 (spr497), unsigned 64 bits
- 598: spr498 (spr498), unsigned 64 bits
- 599: spr499 (spr499), unsigned 64 bits
- 600: spr500 (spr500), unsigned 64 bits
- 601: spr501 (spr501), unsigned 64 bits
- 602: spr502 (spr502), unsigned 64 bits
- 603: spr503 (spr503), unsigned 64 bits
- 604: spr504 (spr504), unsigned 64 bits
- 605: spr505 (spr505), unsigned 64 bits
- 606: spr506 (spr506), unsigned 64 bits
- 607: spr507 (spr507), unsigned 64 bits
- 608: spr508 (spr508), unsigned 64 bits
- 609: spr509 (spr509), unsigned 64 bits
- 610: spr510 (spr510), unsigned 64 bits
- 611: spr511 (spr511), unsigned 64 bits
- 613: spr513 (spr513), unsigned 64 bits
- 614: spr514 (spr514), unsigned 64 bits
- 615: spr515 (spr515), unsigned 64 bits
- 616: spr516 (spr516), unsigned 64 bits
- 617: spr517 (spr517), unsigned 64 bits
- 618: spr518 (spr518), unsigned 64 bits
- 619: spr519 (spr519), unsigned 64 bits
- 620: spr520 (spr520), unsigned 64 bits
- 621: spr521 (spr521), unsigned 64 bits
- 622: spr522 (spr522), unsigned 64 bits
- 623: spr523 (spr523), unsigned 64 bits
- 624: spr524 (spr524), unsigned 64 bits
- 625: spr525 (spr525), unsigned 64 bits
- 626: spr526 (spr526), unsigned 64 bits
- 627: spr527 (spr527), unsigned 64 bits
- 628: spr528 (spr528), unsigned 64 bits
- 629: spr529 (spr529), unsigned 64 bits
- 630: spr530 (spr530), unsigned 64 bits
- 631: spr531 (spr531), unsigned 64 bits
- 632: spr532 (spr532), unsigned 64 bits
- 633: spr533 (spr533), unsigned 64 bits
- 634: spr534 (spr534), unsigned 64 bits
- 635: spr535 (spr535), unsigned 64 bits
- 636: spr536 (spr536), unsigned 64 bits
- 637: spr537 (spr537), unsigned 64 bits
- 638: spr538 (spr538), unsigned 64 bits
- 639: spr539 (spr539), unsigned 64 bits
- 640: spr540 (spr540), unsigned 64 bits
- 641: spr541 (spr541), unsigned 64 bits
- 642: spr542 (spr542), unsigned 64 bits
- 643: spr543 (spr543), unsigned 64 bits
- 644: spr544 (spr544), unsigned 64 bits
- 645: spr545 (spr545), unsigned 64 bits
- 646: spr546 (spr546), unsigned 64 bits
- 647: spr547 (spr547), unsigned 64 bits
- 648: spr548 (spr548), unsigned 64 bits
- 649: spr549 (spr549), unsigned 64 bits
- 650: spr550 (spr550), unsigned 64 bits
- 651: spr551 (spr551), unsigned 64 bits
- 652: spr552 (spr552), unsigned 64 bits
- 653: spr553 (spr553), unsigned 64 bits
- 654: spr554 (spr554), unsigned 64 bits
- 655: spr555 (spr555), unsigned 64 bits
- 656: spr556 (spr556), unsigned 64 bits
- 657: spr557 (spr557), unsigned 64 bits
- 658: spr558 (spr558), unsigned 64 bits
- 659: spr559 (spr559), unsigned 64 bits
- 660: spr560 (spr560), unsigned 64 bits
- 661: spr561 (spr561), unsigned 64 bits
- 662: spr562 (spr562), unsigned 64 bits
- 663: spr563 (spr563), unsigned 64 bits
- 664: spr564 (spr564), unsigned 64 bits
- 665: spr565 (spr565), unsigned 64 bits
- 666: spr566 (spr566), unsigned 64 bits
- 667: spr567 (spr567), unsigned 64 bits
- 668: spr568 (spr568), unsigned 64 bits
- 669: spr569 (spr569), unsigned 64 bits
- 670: spr570 (spr570), unsigned 64 bits
- 671: spr571 (spr571), unsigned 64 bits
- 672: spr572 (spr572), unsigned 64 bits
- 673: spr573 (spr573), unsigned 64 bits
- 674: spr574 (spr574), unsigned 64 bits
- 675: spr575 (spr575), unsigned 64 bits
- 676: spr576 (spr576), unsigned 64 bits
- 677: spr577 (spr577), unsigned 64 bits
- 678: spr578 (spr578), unsigned 64 bits
- 679: spr579 (spr579), unsigned 64 bits
- 680: spr580 (spr580), unsigned 64 bits
- 681: spr581 (spr581), unsigned 64 bits
- 682: spr582 (spr582), unsigned 64 bits
- 683: spr583 (spr583), unsigned 64 bits
- 684: spr584 (spr584), unsigned 64 bits
- 685: spr585 (spr585), unsigned 64 bits
- 686: spr586 (spr586), unsigned 64 bits
- 687: spr587 (spr587), unsigned 64 bits
- 688: spr588 (spr588), unsigned 64 bits
- 689: spr589 (spr589), unsigned 64 bits
- 690: spr590 (spr590), unsigned 64 bits
- 691: spr591 (spr591), unsigned 64 bits
- 692: spr592 (spr592), unsigned 64 bits
- 693: spr593 (spr593), unsigned 64 bits
- 694: spr594 (spr594), unsigned 64 bits
- 695: spr595 (spr595), unsigned 64 bits
- 696: spr596 (spr596), unsigned 64 bits
- 697: spr597 (spr597), unsigned 64 bits
- 698: spr598 (spr598), unsigned 64 bits
- 699: spr599 (spr599), unsigned 64 bits
- 700: spr600 (spr600), unsigned 64 bits
- 701: spr601 (spr601), unsigned 64 bits
- 702: spr602 (spr602), unsigned 64 bits
- 703: spr603 (spr603), unsigned 64 bits
- 704: spr604 (spr604), unsigned 64 bits
- 705: spr605 (spr605), unsigned 64 bits
- 706: spr606 (spr606), unsigned 64 bits
- 707: spr607 (spr607), unsigned 64 bits
- 708: spr608 (spr608), unsigned 64 bits
- 709: spr609 (spr609), unsigned 64 bits
- 710: spr610 (spr610), unsigned 64 bits
- 711: spr611 (spr611), unsigned 64 bits
- 712: spr612 (spr612), unsigned 64 bits
- 713: spr613 (spr613), unsigned 64 bits
- 714: spr614 (spr614), unsigned 64 bits
- 715: spr615 (spr615), unsigned 64 bits
- 716: spr616 (spr616), unsigned 64 bits
- 717: spr617 (spr617), unsigned 64 bits
- 718: spr618 (spr618), unsigned 64 bits
- 719: spr619 (spr619), unsigned 64 bits
- 720: spr620 (spr620), unsigned 64 bits
- 721: spr621 (spr621), unsigned 64 bits
- 722: spr622 (spr622), unsigned 64 bits
- 723: spr623 (spr623), unsigned 64 bits
- 724: spr624 (spr624), unsigned 64 bits
- 725: spr625 (spr625), unsigned 64 bits
- 726: spr626 (spr626), unsigned 64 bits
- 727: spr627 (spr627), unsigned 64 bits
- 728: spr628 (spr628), unsigned 64 bits
- 729: spr629 (spr629), unsigned 64 bits
- 730: spr630 (spr630), unsigned 64 bits
- 731: spr631 (spr631), unsigned 64 bits
- 732: spr632 (spr632), unsigned 64 bits
- 733: spr633 (spr633), unsigned 64 bits
- 734: spr634 (spr634), unsigned 64 bits
- 735: spr635 (spr635), unsigned 64 bits
- 736: spr636 (spr636), unsigned 64 bits
- 737: spr637 (spr637), unsigned 64 bits
- 738: spr638 (spr638), unsigned 64 bits
- 739: spr639 (spr639), unsigned 64 bits
- 740: spr640 (spr640), unsigned 64 bits
- 741: spr641 (spr641), unsigned 64 bits
- 742: spr642 (spr642), unsigned 64 bits
- 743: spr643 (spr643), unsigned 64 bits
- 744: spr644 (spr644), unsigned 64 bits
- 745: spr645 (spr645), unsigned 64 bits
- 746: spr646 (spr646), unsigned 64 bits
- 747: spr647 (spr647), unsigned 64 bits
- 748: spr648 (spr648), unsigned 64 bits
- 749: spr649 (spr649), unsigned 64 bits
- 750: spr650 (spr650), unsigned 64 bits
- 751: spr651 (spr651), unsigned 64 bits
- 752: spr652 (spr652), unsigned 64 bits
- 753: spr653 (spr653), unsigned 64 bits
- 754: spr654 (spr654), unsigned 64 bits
- 755: spr655 (spr655), unsigned 64 bits
- 756: spr656 (spr656), unsigned 64 bits
- 757: spr657 (spr657), unsigned 64 bits
- 758: spr658 (spr658), unsigned 64 bits
- 759: spr659 (spr659), unsigned 64 bits
- 760: spr660 (spr660), unsigned 64 bits
- 761: spr661 (spr661), unsigned 64 bits
- 762: spr662 (spr662), unsigned 64 bits
- 763: spr663 (spr663), unsigned 64 bits
- 764: spr664 (spr664), unsigned 64 bits
- 765: spr665 (spr665), unsigned 64 bits
- 766: spr666 (spr666), unsigned 64 bits
- 767: spr667 (spr667), unsigned 64 bits
- 768: spr668 (spr668), unsigned 64 bits
- 769: spr669 (spr669), unsigned 64 bits
- 770: spr670 (spr670), unsigned 64 bits
- 771: spr671 (spr671), unsigned 64 bits
- 772: spr672 (spr672), unsigned 64 bits
- 773: spr673 (spr673), unsigned 64 bits
- 774: spr674 (spr674), unsigned 64 bits
- 775: spr675 (spr675), unsigned 64 bits
- 776: spr676 (spr676), unsigned 64 bits
- 777: spr677 (spr677), unsigned 64 bits
- 778: spr678 (spr678), unsigned 64 bits
- 779: spr679 (spr679), unsigned 64 bits
- 780: spr680 (spr680), unsigned 64 bits
- 781: spr681 (spr681), unsigned 64 bits
- 782: spr682 (spr682), unsigned 64 bits
- 783: spr683 (spr683), unsigned 64 bits
- 784: spr684 (spr684), unsigned 64 bits
- 785: spr685 (spr685), unsigned 64 bits
- 786: spr686 (spr686), unsigned 64 bits
- 787: spr687 (spr687), unsigned 64 bits
- 788: spr688 (spr688), unsigned 64 bits
- 789: spr689 (spr689), unsigned 64 bits
- 790: spr690 (spr690), unsigned 64 bits
- 791: spr691 (spr691), unsigned 64 bits
- 792: spr692 (spr692), unsigned 64 bits
- 793: spr693 (spr693), unsigned 64 bits
- 794: spr694 (spr694), unsigned 64 bits
- 795: spr695 (spr695), unsigned 64 bits
- 796: spr696 (spr696), unsigned 64 bits
- 797: spr697 (spr697), unsigned 64 bits
- 798: spr698 (spr698), unsigned 64 bits
- 799: spr699 (spr699), unsigned 64 bits
- 800: spr700 (spr700), unsigned 64 bits
- 801: spr701 (spr701), unsigned 64 bits
- 802: spr702 (spr702), unsigned 64 bits
- 803: spr703 (spr703), unsigned 64 bits
- 804: spr704 (spr704), unsigned 64 bits
- 805: spr705 (spr705), unsigned 64 bits
- 806: spr706 (spr706), unsigned 64 bits
- 807: spr707 (spr707), unsigned 64 bits
- 808: spr708 (spr708), unsigned 64 bits
- 809: spr709 (spr709), unsigned 64 bits
- 810: spr710 (spr710), unsigned 64 bits
- 811: spr711 (spr711), unsigned 64 bits
- 812: spr712 (spr712), unsigned 64 bits
- 813: spr713 (spr713), unsigned 64 bits
- 814: spr714 (spr714), unsigned 64 bits
- 815: spr715 (spr715), unsigned 64 bits
- 816: spr716 (spr716), unsigned 64 bits
- 817: spr717 (spr717), unsigned 64 bits
- 818: spr718 (spr718), unsigned 64 bits
- 819: spr719 (spr719), unsigned 64 bits
- 820: spr720 (spr720), unsigned 64 bits
- 821: spr721 (spr721), unsigned 64 bits
- 822: spr722 (spr722), unsigned 64 bits
- 823: spr723 (spr723), unsigned 64 bits
- 824: spr724 (spr724), unsigned 64 bits
- 825: spr725 (spr725), unsigned 64 bits
- 826: spr726 (spr726), unsigned 64 bits
- 827: spr727 (spr727), unsigned 64 bits
- 828: spr728 (spr728), unsigned 64 bits
- 829: spr729 (spr729), unsigned 64 bits
- 830: spr730 (spr730), unsigned 64 bits
- 831: spr731 (spr731), unsigned 64 bits
- 832: spr732 (spr732), unsigned 64 bits
- 833: spr733 (spr733), unsigned 64 bits
- 834: spr734 (spr734), unsigned 64 bits
- 835: spr735 (spr735), unsigned 64 bits
- 836: spr736 (spr736), unsigned 64 bits
- 837: spr737 (spr737), unsigned 64 bits
- 838: spr738 (spr738), unsigned 64 bits
- 839: spr739 (spr739), unsigned 64 bits
- 840: spr740 (spr740), unsigned 64 bits
- 841: spr741 (spr741), unsigned 64 bits
- 842: spr742 (spr742), unsigned 64 bits
- 843: spr743 (spr743), unsigned 64 bits
- 844: spr744 (spr744), unsigned 64 bits
- 845: spr745 (spr745), unsigned 64 bits
- 846: spr746 (spr746), unsigned 64 bits
- 847: spr747 (spr747), unsigned 64 bits
- 848: spr748 (spr748), unsigned 64 bits
- 849: spr749 (spr749), unsigned 64 bits
- 850: spr750 (spr750), unsigned 64 bits
- 851: spr751 (spr751), unsigned 64 bits
- 852: spr752 (spr752), unsigned 64 bits
- 853: spr753 (spr753), unsigned 64 bits
- 854: spr754 (spr754), unsigned 64 bits
- 855: spr755 (spr755), unsigned 64 bits
- 856: spr756 (spr756), unsigned 64 bits
- 857: spr757 (spr757), unsigned 64 bits
- 858: spr758 (spr758), unsigned 64 bits
- 859: spr759 (spr759), unsigned 64 bits
- 860: spr760 (spr760), unsigned 64 bits
- 861: spr761 (spr761), unsigned 64 bits
- 862: spr762 (spr762), unsigned 64 bits
- 863: spr763 (spr763), unsigned 64 bits
- 864: spr764 (spr764), unsigned 64 bits
- 865: spr765 (spr765), unsigned 64 bits
- 866: spr766 (spr766), unsigned 64 bits
- 867: spr767 (spr767), unsigned 64 bits
- 868: spr768 (spr768), unsigned 64 bits
- 869: spr769 (spr769), unsigned 64 bits
- 870: spr770 (spr770), unsigned 64 bits
- 871: spr771 (spr771), unsigned 64 bits
- 872: spr772 (spr772), unsigned 64 bits
- 873: spr773 (spr773), unsigned 64 bits
- 874: spr774 (spr774), unsigned 64 bits
- 875: spr775 (spr775), unsigned 64 bits
- 876: spr776 (spr776), unsigned 64 bits
- 877: spr777 (spr777), unsigned 64 bits
- 878: spr778 (spr778), unsigned 64 bits
- 879: spr779 (spr779), unsigned 64 bits
- 880: spr780 (spr780), unsigned 64 bits
- 881: spr781 (spr781), unsigned 64 bits
- 882: spr782 (spr782), unsigned 64 bits
- 883: spr783 (spr783), unsigned 64 bits
- 884: spr784 (spr784), unsigned 64 bits
- 885: spr785 (spr785), unsigned 64 bits
- 886: spr786 (spr786), unsigned 64 bits
- 887: spr787 (spr787), unsigned 64 bits
- 888: spr788 (spr788), unsigned 64 bits
- 889: spr789 (spr789), unsigned 64 bits
- 890: spr790 (spr790), unsigned 64 bits
- 891: spr791 (spr791), unsigned 64 bits
- 892: spr792 (spr792), unsigned 64 bits
- 893: spr793 (spr793), unsigned 64 bits
- 894: spr794 (spr794), unsigned 64 bits
- 895: spr795 (spr795), unsigned 64 bits
- 896: spr796 (spr796), unsigned 64 bits
- 897: spr797 (spr797), unsigned 64 bits
- 898: spr798 (spr798), unsigned 64 bits
- 899: spr799 (spr799), unsigned 64 bits
- 900: spr800 (spr800), unsigned 64 bits
- 901: spr801 (spr801), unsigned 64 bits
- 902: spr802 (spr802), unsigned 64 bits
- 903: spr803 (spr803), unsigned 64 bits
- 904: spr804 (spr804), unsigned 64 bits
- 905: spr805 (spr805), unsigned 64 bits
- 906: spr806 (spr806), unsigned 64 bits
- 907: spr807 (spr807), unsigned 64 bits
- 908: spr808 (spr808), unsigned 64 bits
- 909: spr809 (spr809), unsigned 64 bits
- 910: spr810 (spr810), unsigned 64 bits
- 911: spr811 (spr811), unsigned 64 bits
- 912: spr812 (spr812), unsigned 64 bits
- 913: spr813 (spr813), unsigned 64 bits
- 914: spr814 (spr814), unsigned 64 bits
- 915: spr815 (spr815), unsigned 64 bits
- 916: spr816 (spr816), unsigned 64 bits
- 917: spr817 (spr817), unsigned 64 bits
- 918: spr818 (spr818), unsigned 64 bits
- 919: spr819 (spr819), unsigned 64 bits
- 920: spr820 (spr820), unsigned 64 bits
- 921: spr821 (spr821), unsigned 64 bits
- 922: spr822 (spr822), unsigned 64 bits
- 923: spr823 (spr823), unsigned 64 bits
- 924: spr824 (spr824), unsigned 64 bits
- 925: spr825 (spr825), unsigned 64 bits
- 926: spr826 (spr826), unsigned 64 bits
- 927: spr827 (spr827), unsigned 64 bits
- 928: spr828 (spr828), unsigned 64 bits
- 929: spr829 (spr829), unsigned 64 bits
- 930: spr830 (spr830), unsigned 64 bits
- 931: spr831 (spr831), unsigned 64 bits
- 932: spr832 (spr832), unsigned 64 bits
- 933: spr833 (spr833), unsigned 64 bits
- 934: spr834 (spr834), unsigned 64 bits
- 935: spr835 (spr835), unsigned 64 bits
- 936: spr836 (spr836), unsigned 64 bits
- 937: spr837 (spr837), unsigned 64 bits
- 938: spr838 (spr838), unsigned 64 bits
- 939: spr839 (spr839), unsigned 64 bits
- 940: spr840 (spr840), unsigned 64 bits
- 941: spr841 (spr841), unsigned 64 bits
- 942: spr842 (spr842), unsigned 64 bits
- 943: spr843 (spr843), unsigned 64 bits
- 944: spr844 (spr844), unsigned 64 bits
- 945: spr845 (spr845), unsigned 64 bits
- 946: spr846 (spr846), unsigned 64 bits
- 947: spr847 (spr847), unsigned 64 bits
- 948: spr848 (spr848), unsigned 64 bits
- 949: spr849 (spr849), unsigned 64 bits
- 950: spr850 (spr850), unsigned 64 bits
- 951: spr851 (spr851), unsigned 64 bits
- 952: spr852 (spr852), unsigned 64 bits
- 953: spr853 (spr853), unsigned 64 bits
- 954: spr854 (spr854), unsigned 64 bits
- 955: spr855 (spr855), unsigned 64 bits
- 956: spr856 (spr856), unsigned 64 bits
- 957: spr857 (spr857), unsigned 64 bits
- 958: spr858 (spr858), unsigned 64 bits
- 959: spr859 (spr859), unsigned 64 bits
- 960: spr860 (spr860), unsigned 64 bits
- 961: spr861 (spr861), unsigned 64 bits
- 962: spr862 (spr862), unsigned 64 bits
- 963: spr863 (spr863), unsigned 64 bits
- 964: spr864 (spr864), unsigned 64 bits
- 965: spr865 (spr865), unsigned 64 bits
- 966: spr866 (spr866), unsigned 64 bits
- 967: spr867 (spr867), unsigned 64 bits
- 968: spr868 (spr868), unsigned 64 bits
- 969: spr869 (spr869), unsigned 64 bits
- 970: spr870 (spr870), unsigned 64 bits
- 971: spr871 (spr871), unsigned 64 bits
- 972: spr872 (spr872), unsigned 64 bits
- 973: spr873 (spr873), unsigned 64 bits
- 974: spr874 (spr874), unsigned 64 bits
- 975: spr875 (spr875), unsigned 64 bits
- 976: spr876 (spr876), unsigned 64 bits
- 977: spr877 (spr877), unsigned 64 bits
- 978: spr878 (spr878), unsigned 64 bits
- 979: spr879 (spr879), unsigned 64 bits
- 980: spr880 (spr880), unsigned 64 bits
- 981: spr881 (spr881), unsigned 64 bits
- 982: spr882 (spr882), unsigned 64 bits
- 983: spr883 (spr883), unsigned 64 bits
- 984: spr884 (spr884), unsigned 64 bits
- 985: spr885 (spr885), unsigned 64 bits
- 986: spr886 (spr886), unsigned 64 bits
- 987: spr887 (spr887), unsigned 64 bits
- 988: spr888 (spr888), unsigned 64 bits
- 989: spr889 (spr889), unsigned 64 bits
- 990: spr890 (spr890), unsigned 64 bits
- 991: spr891 (spr891), unsigned 64 bits
- 992: spr892 (spr892), unsigned 64 bits
- 993: spr893 (spr893), unsigned 64 bits
- 994: spr894 (spr894), unsigned 64 bits
- 995: spr895 (spr895), unsigned 64 bits
- 996: spr896 (spr896), unsigned 64 bits
- 997: spr897 (spr897), unsigned 64 bits
- 998: spr898 (spr898), unsigned 64 bits
- 999: spr899 (spr899), unsigned 64 bits
-vector registers:
- 67: vscr (vscr), unsigned 32 bits
- 356: vrsave (vrsave), unsigned 32 bits
- 612: spefscr (spefscr), unsigned 32 bits
- 1124: vr0 (vr0), unsigned 128 bits
- 1125: vr1 (vr1), unsigned 128 bits
- 1126: vr2 (vr2), unsigned 128 bits
- 1127: vr3 (vr3), unsigned 128 bits
- 1128: vr4 (vr4), unsigned 128 bits
- 1129: vr5 (vr5), unsigned 128 bits
- 1130: vr6 (vr6), unsigned 128 bits
- 1131: vr7 (vr7), unsigned 128 bits
- 1132: vr8 (vr8), unsigned 128 bits
- 1133: vr9 (vr9), unsigned 128 bits
- 1134: vr10 (vr10), unsigned 128 bits
- 1135: vr11 (vr11), unsigned 128 bits
- 1136: vr12 (vr12), unsigned 128 bits
- 1137: vr13 (vr13), unsigned 128 bits
- 1138: vr14 (vr14), unsigned 128 bits
- 1139: vr15 (vr15), unsigned 128 bits
- 1140: vr16 (vr16), unsigned 128 bits
- 1141: vr17 (vr17), unsigned 128 bits
- 1142: vr18 (vr18), unsigned 128 bits
- 1143: vr19 (vr19), unsigned 128 bits
- 1144: vr20 (vr20), unsigned 128 bits
- 1145: vr21 (vr21), unsigned 128 bits
- 1146: vr22 (vr22), unsigned 128 bits
- 1147: vr23 (vr23), unsigned 128 bits
- 1148: vr24 (vr24), unsigned 128 bits
- 1149: vr25 (vr25), unsigned 128 bits
- 1150: vr26 (vr26), unsigned 128 bits
- 1151: vr27 (vr27), unsigned 128 bits
- 1152: vr28 (vr28), unsigned 128 bits
- 1153: vr29 (vr29), unsigned 128 bits
- 1154: vr30 (vr30), unsigned 128 bits
- 1155: vr31 (vr31), unsigned 128 bits
-EOF
-
-regs_test testfile26 <<\EOF
-integer registers:
- 0: %r0 (r0), signed 32 bits
- 1: %r1 (r1), signed 32 bits
- 2: %r2 (r2), signed 32 bits
- 3: %r3 (r3), signed 32 bits
- 4: %r4 (r4), signed 32 bits
- 5: %r5 (r5), signed 32 bits
- 6: %r6 (r6), signed 32 bits
- 7: %r7 (r7), signed 32 bits
- 8: %r8 (r8), signed 32 bits
- 9: %r9 (r9), signed 32 bits
- 10: %r10 (r10), signed 32 bits
- 11: %r11 (r11), signed 32 bits
- 12: %r12 (r12), signed 32 bits
- 13: %r13 (r13), signed 32 bits
- 14: %r14 (r14), signed 32 bits
- 15: %r15 (r15), signed 32 bits
-FPU registers:
- 16: %f0 (f0), float 64 bits
- 17: %f2 (f2), float 64 bits
- 18: %f4 (f4), float 64 bits
- 19: %f6 (f6), float 64 bits
- 20: %f1 (f1), float 64 bits
- 21: %f3 (f3), float 64 bits
- 22: %f5 (f5), float 64 bits
- 23: %f7 (f7), float 64 bits
- 24: %f8 (f8), float 64 bits
- 25: %f10 (f10), float 64 bits
- 26: %f12 (f12), float 64 bits
- 27: %f14 (f14), float 64 bits
- 28: %f9 (f9), float 64 bits
- 29: %f11 (f11), float 64 bits
- 30: %f13 (f13), float 64 bits
- 31: %f15 (f15), float 64 bits
-access registers:
- 48: %a0 (a0), unsigned 32 bits
- 49: %a1 (a1), unsigned 32 bits
- 50: %a2 (a2), unsigned 32 bits
- 51: %a3 (a3), unsigned 32 bits
- 52: %a4 (a4), unsigned 32 bits
- 53: %a5 (a5), unsigned 32 bits
- 54: %a6 (a6), unsigned 32 bits
- 55: %a7 (a7), unsigned 32 bits
- 56: %a8 (a8), unsigned 32 bits
- 57: %a9 (a9), unsigned 32 bits
- 58: %a10 (a10), unsigned 32 bits
- 59: %a11 (a11), unsigned 32 bits
- 60: %a12 (a12), unsigned 32 bits
- 61: %a13 (a13), unsigned 32 bits
- 62: %a14 (a14), unsigned 32 bits
- 63: %a15 (a15), unsigned 32 bits
-control registers:
- 32: %c0 (c0), unsigned 32 bits
- 33: %c1 (c1), unsigned 32 bits
- 34: %c2 (c2), unsigned 32 bits
- 35: %c3 (c3), unsigned 32 bits
- 36: %c4 (c4), unsigned 32 bits
- 37: %c5 (c5), unsigned 32 bits
- 38: %c6 (c6), unsigned 32 bits
- 39: %c7 (c7), unsigned 32 bits
- 40: %c8 (c8), unsigned 32 bits
- 41: %c9 (c9), unsigned 32 bits
- 42: %c10 (c10), unsigned 32 bits
- 43: %c11 (c11), unsigned 32 bits
- 44: %c12 (c12), unsigned 32 bits
- 45: %c13 (c13), unsigned 32 bits
- 46: %c14 (c14), unsigned 32 bits
- 47: %c15 (c15), unsigned 32 bits
- 64: %pswm (pswm), unsigned 32 bits
- 65: %pswa (pswa), address 32 bits
-EOF
-
-regs_test testfile27 <<\EOF
-integer registers:
- 0: %r0 (r0), signed 64 bits
- 1: %r1 (r1), signed 64 bits
- 2: %r2 (r2), signed 64 bits
- 3: %r3 (r3), signed 64 bits
- 4: %r4 (r4), signed 64 bits
- 5: %r5 (r5), signed 64 bits
- 6: %r6 (r6), signed 64 bits
- 7: %r7 (r7), signed 64 bits
- 8: %r8 (r8), signed 64 bits
- 9: %r9 (r9), signed 64 bits
- 10: %r10 (r10), signed 64 bits
- 11: %r11 (r11), signed 64 bits
- 12: %r12 (r12), signed 64 bits
- 13: %r13 (r13), signed 64 bits
- 14: %r14 (r14), signed 64 bits
- 15: %r15 (r15), signed 64 bits
-FPU registers:
- 16: %f0 (f0), float 64 bits
- 17: %f2 (f2), float 64 bits
- 18: %f4 (f4), float 64 bits
- 19: %f6 (f6), float 64 bits
- 20: %f1 (f1), float 64 bits
- 21: %f3 (f3), float 64 bits
- 22: %f5 (f5), float 64 bits
- 23: %f7 (f7), float 64 bits
- 24: %f8 (f8), float 64 bits
- 25: %f10 (f10), float 64 bits
- 26: %f12 (f12), float 64 bits
- 27: %f14 (f14), float 64 bits
- 28: %f9 (f9), float 64 bits
- 29: %f11 (f11), float 64 bits
- 30: %f13 (f13), float 64 bits
- 31: %f15 (f15), float 64 bits
-access registers:
- 48: %a0 (a0), unsigned 32 bits
- 49: %a1 (a1), unsigned 32 bits
- 50: %a2 (a2), unsigned 32 bits
- 51: %a3 (a3), unsigned 32 bits
- 52: %a4 (a4), unsigned 32 bits
- 53: %a5 (a5), unsigned 32 bits
- 54: %a6 (a6), unsigned 32 bits
- 55: %a7 (a7), unsigned 32 bits
- 56: %a8 (a8), unsigned 32 bits
- 57: %a9 (a9), unsigned 32 bits
- 58: %a10 (a10), unsigned 32 bits
- 59: %a11 (a11), unsigned 32 bits
- 60: %a12 (a12), unsigned 32 bits
- 61: %a13 (a13), unsigned 32 bits
- 62: %a14 (a14), unsigned 32 bits
- 63: %a15 (a15), unsigned 32 bits
-control registers:
- 32: %c0 (c0), unsigned 64 bits
- 33: %c1 (c1), unsigned 64 bits
- 34: %c2 (c2), unsigned 64 bits
- 35: %c3 (c3), unsigned 64 bits
- 36: %c4 (c4), unsigned 64 bits
- 37: %c5 (c5), unsigned 64 bits
- 38: %c6 (c6), unsigned 64 bits
- 39: %c7 (c7), unsigned 64 bits
- 40: %c8 (c8), unsigned 64 bits
- 41: %c9 (c9), unsigned 64 bits
- 42: %c10 (c10), unsigned 64 bits
- 43: %c11 (c11), unsigned 64 bits
- 44: %c12 (c12), unsigned 64 bits
- 45: %c13 (c13), unsigned 64 bits
- 46: %c14 (c14), unsigned 64 bits
- 47: %c15 (c15), unsigned 64 bits
- 64: %pswm (pswm), unsigned 64 bits
- 65: %pswa (pswa), address 64 bits
-EOF
-
-regs_test testfile30 <<\EOF
-integer registers:
- 0: %g0 (g0), signed 32 bits
- 1: %g1 (g1), signed 32 bits
- 2: %g2 (g2), signed 32 bits
- 3: %g3 (g3), signed 32 bits
- 4: %g4 (g4), signed 32 bits
- 5: %g5 (g5), signed 32 bits
- 6: %g6 (g6), signed 32 bits
- 7: %g7 (g7), signed 32 bits
- 8: %o0 (o0), signed 32 bits
- 9: %o1 (o1), signed 32 bits
- 10: %o2 (o2), signed 32 bits
- 11: %o3 (o3), signed 32 bits
- 12: %o4 (o4), signed 32 bits
- 13: %o5 (o5), signed 32 bits
- 14: %o6 (o6), address 32 bits
- 15: %o7 (o7), signed 32 bits
- 16: %l0 (l0), signed 32 bits
- 17: %l1 (l1), signed 32 bits
- 18: %l2 (l2), signed 32 bits
- 19: %l3 (l3), signed 32 bits
- 20: %l4 (l4), signed 32 bits
- 21: %l5 (l5), signed 32 bits
- 22: %l6 (l6), signed 32 bits
- 23: %l7 (l7), signed 32 bits
- 24: %i0 (i0), signed 32 bits
- 25: %i1 (i1), signed 32 bits
- 26: %i2 (i2), signed 32 bits
- 27: %i3 (i3), signed 32 bits
- 28: %i4 (i4), signed 32 bits
- 29: %i5 (i5), signed 32 bits
- 30: %i6 (i6), address 32 bits
- 31: %i7 (i7), signed 32 bits
-FPU registers:
- 32: %f0 (f0), float 32 bits
- 33: %f1 (f1), float 32 bits
- 34: %f2 (f2), float 32 bits
- 35: %f3 (f3), float 32 bits
- 36: %f4 (f4), float 32 bits
- 37: %f5 (f5), float 32 bits
- 38: %f6 (f6), float 32 bits
- 39: %f7 (f7), float 32 bits
- 40: %f8 (f8), float 32 bits
- 41: %f9 (f9), float 32 bits
- 42: %f10 (f10), float 32 bits
- 43: %f11 (f11), float 32 bits
- 44: %f12 (f12), float 32 bits
- 45: %f13 (f13), float 32 bits
- 46: %f14 (f14), float 32 bits
- 47: %f15 (f15), float 32 bits
- 48: %f16 (f16), float 32 bits
- 49: %f17 (f17), float 32 bits
- 50: %f18 (f18), float 32 bits
- 51: %f19 (f19), float 32 bits
- 52: %f20 (f20), float 32 bits
- 53: %f21 (f21), float 32 bits
- 54: %f22 (f22), float 32 bits
- 55: %f23 (f23), float 32 bits
- 56: %f24 (f24), float 32 bits
- 57: %f25 (f25), float 32 bits
- 58: %f26 (f26), float 32 bits
- 59: %f27 (f27), float 32 bits
- 60: %f28 (f28), float 32 bits
- 61: %f29 (f29), float 32 bits
- 62: %f30 (f30), float 32 bits
- 63: %f31 (f31), float 32 bits
-control registers:
- 64: %y (y), unsigned 32 bits
- 65: %psr (psr), unsigned 32 bits
- 66: %wim (wim), unsigned 32 bits
- 67: %tbr (tbr), unsigned 32 bits
- 68: %pc (pc), address 32 bits
- 69: %npc (npc), address 32 bits
- 70: %fsr (fsr), unsigned 32 bits
- 71: %csr (csr), unsigned 32 bits
-EOF
-
-regs_test testfile31 <<\EOF
-integer registers:
- 0: %g0 (g0), signed 64 bits
- 1: %g1 (g1), signed 64 bits
- 2: %g2 (g2), signed 64 bits
- 3: %g3 (g3), signed 64 bits
- 4: %g4 (g4), signed 64 bits
- 5: %g5 (g5), signed 64 bits
- 6: %g6 (g6), signed 64 bits
- 7: %g7 (g7), signed 64 bits
- 8: %o0 (o0), signed 64 bits
- 9: %o1 (o1), signed 64 bits
- 10: %o2 (o2), signed 64 bits
- 11: %o3 (o3), signed 64 bits
- 12: %o4 (o4), signed 64 bits
- 13: %o5 (o5), signed 64 bits
- 14: %o6 (o6), address 64 bits
- 15: %o7 (o7), signed 64 bits
- 16: %l0 (l0), signed 64 bits
- 17: %l1 (l1), signed 64 bits
- 18: %l2 (l2), signed 64 bits
- 19: %l3 (l3), signed 64 bits
- 20: %l4 (l4), signed 64 bits
- 21: %l5 (l5), signed 64 bits
- 22: %l6 (l6), signed 64 bits
- 23: %l7 (l7), signed 64 bits
- 24: %i0 (i0), signed 64 bits
- 25: %i1 (i1), signed 64 bits
- 26: %i2 (i2), signed 64 bits
- 27: %i3 (i3), signed 64 bits
- 28: %i4 (i4), signed 64 bits
- 29: %i5 (i5), signed 64 bits
- 30: %i6 (i6), address 64 bits
- 31: %i7 (i7), signed 64 bits
-FPU registers:
- 32: %f0 (f0), float 32 bits
- 33: %f1 (f1), float 32 bits
- 34: %f2 (f2), float 32 bits
- 35: %f3 (f3), float 32 bits
- 36: %f4 (f4), float 32 bits
- 37: %f5 (f5), float 32 bits
- 38: %f6 (f6), float 32 bits
- 39: %f7 (f7), float 32 bits
- 40: %f8 (f8), float 32 bits
- 41: %f9 (f9), float 32 bits
- 42: %f10 (f10), float 32 bits
- 43: %f11 (f11), float 32 bits
- 44: %f12 (f12), float 32 bits
- 45: %f13 (f13), float 32 bits
- 46: %f14 (f14), float 32 bits
- 47: %f15 (f15), float 32 bits
- 48: %f16 (f16), float 32 bits
- 49: %f17 (f17), float 32 bits
- 50: %f18 (f18), float 32 bits
- 51: %f19 (f19), float 32 bits
- 52: %f20 (f20), float 32 bits
- 53: %f21 (f21), float 32 bits
- 54: %f22 (f22), float 32 bits
- 55: %f23 (f23), float 32 bits
- 56: %f24 (f24), float 32 bits
- 57: %f25 (f25), float 32 bits
- 58: %f26 (f26), float 32 bits
- 59: %f27 (f27), float 32 bits
- 60: %f28 (f28), float 32 bits
- 61: %f29 (f29), float 32 bits
- 62: %f30 (f30), float 32 bits
- 63: %f31 (f31), float 32 bits
- 64: %f32 (f32), float 64 bits
- 65: %f34 (f34), float 64 bits
- 66: %f36 (f36), float 64 bits
- 67: %f38 (f38), float 64 bits
- 68: %f40 (f40), float 64 bits
- 69: %f42 (f42), float 64 bits
- 70: %f44 (f44), float 64 bits
- 71: %f46 (f46), float 64 bits
- 72: %f48 (f48), float 64 bits
- 73: %f50 (f50), float 64 bits
- 74: %f52 (f52), float 64 bits
- 75: %f54 (f54), float 64 bits
- 76: %f56 (f56), float 64 bits
- 77: %f58 (f58), float 64 bits
- 78: %f60 (f60), float 64 bits
- 79: %f62 (f62), float 64 bits
-control registers:
- 80: %pc (pc), address 64 bits
- 81: %npc (npc), address 64 bits
- 82: %state (state), unsigned 64 bits
- 83: %fsr (fsr), unsigned 64 bits
- 84: %fprs (fprs), unsigned 64 bits
- 85: %y (y), unsigned 64 bits
-EOF
-
-regs_test testfile10 <<\EOF
-integer registers:
- 0: $v0 (v0), signed 64 bits
- 1: $t0 (t0), signed 64 bits
- 2: $t1 (t1), signed 64 bits
- 3: $t2 (t2), signed 64 bits
- 4: $t3 (t3), signed 64 bits
- 5: $t4 (t4), signed 64 bits
- 6: $t5 (t5), signed 64 bits
- 7: $t6 (t6), signed 64 bits
- 8: $t7 (t7), signed 64 bits
- 9: $s0 (s0), signed 64 bits
- 10: $s1 (s1), signed 64 bits
- 11: $s2 (s2), signed 64 bits
- 12: $s3 (s3), signed 64 bits
- 13: $s4 (s4), signed 64 bits
- 14: $s5 (s5), signed 64 bits
- 15: $s6 (s6), signed 64 bits
- 16: $a0 (a0), signed 64 bits
- 17: $a1 (a1), signed 64 bits
- 18: $a2 (a2), signed 64 bits
- 19: $a3 (a3), signed 64 bits
- 20: $a4 (a4), signed 64 bits
- 21: $a5 (a5), signed 64 bits
- 22: $t8 (t8), signed 64 bits
- 23: $t9 (t9), signed 64 bits
- 24: $t10 (t10), signed 64 bits
- 25: $t11 (t11), signed 64 bits
- 26: $ra (ra), address 64 bits
- 27: $t12 (t12), signed 64 bits
- 28: $at (at), signed 64 bits
- 29: $gp (gp), address 64 bits
- 30: $sp (sp), address 64 bits
- 31: $zero (zero), signed 64 bits
- 64: $pc (pc), address 64 bits
- 66: $unique (unique), address 64 bits
-FPU registers:
- 32: $f0 (f0), float 64 bits
- 33: $f1 (f1), float 64 bits
- 34: $f2 (f2), float 64 bits
- 35: $f3 (f3), float 64 bits
- 36: $f4 (f4), float 64 bits
- 37: $f5 (f5), float 64 bits
- 38: $f6 (f6), float 64 bits
- 39: $f7 (f7), float 64 bits
- 40: $f8 (f8), float 64 bits
- 41: $f9 (f9), float 64 bits
- 42: $f10 (f10), float 64 bits
- 43: $f11 (f11), float 64 bits
- 44: $f12 (f12), float 64 bits
- 45: $f13 (f13), float 64 bits
- 46: $f14 (f14), float 64 bits
- 47: $f15 (f15), float 64 bits
- 48: $f16 (f16), float 64 bits
- 49: $f17 (f17), float 64 bits
- 50: $f18 (f18), float 64 bits
- 51: $f19 (f19), float 64 bits
- 52: $f20 (f20), float 64 bits
- 53: $f21 (f21), float 64 bits
- 54: $f22 (f22), float 64 bits
- 55: $f23 (f23), float 64 bits
- 56: $f24 (f24), float 64 bits
- 57: $f25 (f25), float 64 bits
- 58: $f26 (f26), float 64 bits
- 59: $f27 (f27), float 64 bits
- 60: $f28 (f28), float 64 bits
- 61: $f29 (f29), float 64 bits
- 62: $f30 (f30), float 64 bits
- 63: $fpcr (fpcr), unsigned 64 bits
-EOF
-
-exit 0
diff --git a/tests/run-arextract.sh b/tests/run-arextract.sh
deleted file mode 100644
index 29119a1..0000000
--- a/tests/run-arextract.sh
+++ /dev/null
@@ -1,48 +0,0 @@
-#! /bin/sh
-# Copyright (C) 1999, 2000, 2002, 2005, 2006 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-# Written by Ulrich Drepper <drepper@redhat.com>, 1999.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-tempfiles arextract.test
-
-archive=../libelf/libelf.a
-if test -f $archive; then
- # The file is really available (i.e., no shared-only built).
- echo -n "Extracting symbols... $ac_c"
-
- # The files we are looking at.
- for f in ../libelf/*.o; do
- testrun ./arextract $archive `basename $f` arextract.test || exit 1
- cmp $f arextract.test || {
- echo "Extraction of $1 failed"
- exit 1
- }
- done
-
- echo "done"
-fi
-
-exit 0
diff --git a/tests/run-arsymtest.sh b/tests/run-arsymtest.sh
deleted file mode 100644
index d47df7a..0000000
--- a/tests/run-arsymtest.sh
+++ /dev/null
@@ -1,55 +0,0 @@
-#! /bin/sh
-# Copyright (C) 1999, 2000, 2002, 2006 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-# Written by Ulrich Drepper <drepper@redhat.com>, 1999.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-lib=../libelf/libelf.a
-okfile=arsymtest.ok
-tmpfile=arsymtest.tmp
-testfile=arsymtest.test
-
-tempfiles $okfile $tmpfile $testfile
-
-result=77
-if test -f $lib; then
- # Generate list using `nm' we check against.
- nm -s $lib |
- sed -e '1,/^Arch/d' -e '/^$/,$d' |
- sort > $okfile
-
- # Now run our program using libelf.
- testrun ./arsymtest $lib $tmpfile || exit 1
- sort $tmpfile > $testfile
-
- # Compare the outputs.
- if cmp $okfile $testfile; then
- result=0
- else
- result=1
- fi
-fi
-
-exit $result
diff --git a/tests/run-bug1-test.sh b/tests/run-bug1-test.sh
deleted file mode 100755
index 7367a4e..0000000
--- a/tests/run-bug1-test.sh
+++ /dev/null
@@ -1,42 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2006 Red Hat, Inc.
-# Written by Ulrich Drepper <drepper@redhat.com>, 2006.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-testfiles testfile28 testfile28.rdwr
-
-testrun ./rdwrmmap testfile28
-
-cmp testfile28 testfile28.rdwr
-
-test_cleanup
-
-testfiles testfile29 testfile29.rdwr
-
-testrun ./rdwrmmap testfile29
-
-cmp testfile29 testfile29.rdwr
-
-exit 0
diff --git a/tests/run-disasm-x86-64.sh b/tests/run-disasm-x86-64.sh
deleted file mode 100755
index 01803c0..0000000
--- a/tests/run-disasm-x86-64.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2007, 2008 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-# Run x86-64 test.
-case "`uname -m`" in
- x86_64)
- tempfiles testfile45.o
- testfiles testfile45.S testfile45.expect
- gcc -m64 -c -o testfile45.o testfile45.S
- testrun_compare ../src/objdump -d testfile45.o < testfile45.expect
- ;;
-esac
diff --git a/tests/run-disasm-x86.sh b/tests/run-disasm-x86.sh
deleted file mode 100755
index efd734c..0000000
--- a/tests/run-disasm-x86.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2007, 2008 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-# Run x86 test.
-case "`uname -m`" in
- x86_64 | i?86 )
- tempfiles testfile44.o
- testfiles testfile44.S testfile44.expect
- gcc -m32 -c -o testfile44.o testfile44.S
- testrun_compare ../src/objdump -d testfile44.o < testfile44.expect
- ;;
-esac
diff --git a/tests/run-dwfl-addr-sect.sh b/tests/run-dwfl-addr-sect.sh
deleted file mode 100755
index 98666f3..0000000
--- a/tests/run-dwfl-addr-sect.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2007, 2008 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-testfiles testfile43
-
-testrun_compare ./dwfl-addr-sect -e testfile43 0x64 0x8 0x98 <<\EOF
-address 0x64 => module "" section 4 + 0
-address 0x8 => module "" section 1 + 0x8
-address 0x98 => module "" section 7 + 0
-EOF
-
-exit 0
diff --git a/tests/run-dwfl-bug-offline-rel.sh b/tests/run-dwfl-bug-offline-rel.sh
deleted file mode 100755
index d1f6149..0000000
--- a/tests/run-dwfl-bug-offline-rel.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2007 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-testfiles testfile36 testfile36.debug
-
-testrun_compare ./dwflmodtest -e testfile36 <<\EOF
-module: 00000000..00002308 testfile36 (null)
-module: 00000000 DWARF 0 (no error)
-module: 00000000..00002308 testfile36 testfile36.debug
-EOF
-
-exit 0
diff --git a/tests/run-early-offscn.sh b/tests/run-early-offscn.sh
deleted file mode 100755
index 70be219..0000000
--- a/tests/run-early-offscn.sh
+++ /dev/null
@@ -1,32 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2008 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-testfiles testfile
-
-testrun ./early-offscn testfile 0x500
-
-exit 0
diff --git a/tests/run-ecp-test.sh b/tests/run-ecp-test.sh
deleted file mode 100644
index 941f3e9..0000000
--- a/tests/run-ecp-test.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2002, 2005 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-# Written by Jakub Jelinek <jakub@redhat.com>, 2002.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-testfiles testfile10
-tempfiles testfile10.tmp
-
-testrun ./ecp testfile10 testfile10.tmp
-
-cmp testfile10 testfile10.tmp
-
-exit 0
diff --git a/tests/run-ecp-test2.sh b/tests/run-ecp-test2.sh
deleted file mode 100644
index 4231708..0000000
--- a/tests/run-ecp-test2.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2002, 2005 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-# Written by Jakub Jelinek <jakub@redhat.com>, 2002.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-testfiles testfile2
-tempfiles testfile2.tmp
-
-testrun ./ecp testfile2 testfile2.tmp
-
-exit 0
diff --git a/tests/run-elflint-self.sh b/tests/run-elflint-self.sh
deleted file mode 100755
index 7da0886..0000000
--- a/tests/run-elflint-self.sh
+++ /dev/null
@@ -1,62 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2005, 2007 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-# Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-status=0
-runtest() {
-# Uncomment for debuging
-# echo $1
- if [ -f $1 ]; then
- testrun ../src/elflint --quiet --gnu-ld $1 ||
- { echo "*** failure in $1"; status=1; }
- fi
-}
-
-runtest ../src/addr2line
-runtest ../src/elfcmp
-runtest ../src/elflint
-runtest ../src/findtextrel
-runtest ../src/ld
-runtest ../src/nm
-runtest ../src/objdump
-runtest ../src/readelf
-runtest ../src/size
-runtest ../src/strip
-runtest ../libelf/libelf.so
-runtest ../libdw/libdw.so
-runtest ../libasm/libasm.so
-runtest ../libebl/libebl_alpha.so
-runtest ../libebl/libebl_arm.so
-runtest ../libebl/libebl_i386.so
-runtest ../libebl/libebl_ia64.so
-runtest ../libebl/libebl_ppc.so
-runtest ../libebl/libebl_ppc64.so
-runtest ../libebl/libebl_sh.so
-runtest ../libebl/libebl_sparc.so
-runtest ../libebl/libebl_x86_64.so
-
-exit $status
diff --git a/tests/run-elflint-test.sh b/tests/run-elflint-test.sh
deleted file mode 100755
index e0e1c54..0000000
--- a/tests/run-elflint-test.sh
+++ /dev/null
@@ -1,47 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2005, 2007, 2008 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-# Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-testfiles testfile18
-
-testrun_compare ../src/elflint --gnu-ld testfile18 <<\EOF
-section [ 8] '.rela.dyn': relocation 1: copy relocation against symbol of type FUNC
-EOF
-
-testfiles testfile32
-testrun ../src/elflint -q testfile32
-
-testfiles testfile33
-testrun ../src/elflint -q testfile33
-
-testfiles testfile42
-testrun ../src/elflint -q --gnu-ld testfile42
-
-testfiles testfile46
-testrun ../src/elflint -q testfile46
-
-exit 0
diff --git a/tests/run-find-prologues.sh b/tests/run-find-prologues.sh
deleted file mode 100755
index eddc9ee..0000000
--- a/tests/run-find-prologues.sh
+++ /dev/null
@@ -1,93 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2005 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-testfiles testfile testfile11 testfile22 testfile24 \
- testfile25 testfile3 testfile4 testfile5 testfile6
-
-testrun_compare ./find-prologues -e testfile <<\EOF
-main 0x000000000804842c 0x0000000008048432
-bar 0x000000000804845c 0x000000000804845f
-foo 0x0000000008048468 0x000000000804846b
-EOF
-
-testrun_compare ./find-prologues -e testfile11 <<\EOF
-main 0x00000000080489b8 0x00000000080489cd
-gnu_obj_2 0x0000000008048c9e 0x0000000008048ca4
-gnu_obj_3 0x0000000008048cd8 0x0000000008048cde
-gnu_obj_2 0x0000000008048cf4 0x0000000008048cfa
-~invalid_argument 0x0000000008048d2e 0x0000000008048d34
-gnu_obj_1 0x0000000008048d62 0x0000000008048d65
-gnu_obj_1 0x0000000008048d8a 0x0000000008048d8d
-~invalid_argument 0x0000000008048db2 0x0000000008048db8
-EOF
-
-testrun_compare ./find-prologues -e testfile22 <<\EOF
-function 0x0000000008048348 0x000000000804834e
-main 0x000000000804835b 0x0000000008048377
-EOF
-
-testrun_compare ./find-prologues -e testfile24 <<\EOF
-incr 0x0000000008048348 0x000000000804834e
-main 0x0000000008048354 0x0000000008048360
-EOF
-
-testrun_compare ./find-prologues -e testfile25 <<\EOF
-incr 0x0000000008048348 0x000000000804834c
-EOF
-
-testrun_compare ./find-prologues -e testfile3 <<\EOF
-main 0x000000000804842c 0x0000000008048433
-bar 0x0000000008048458 0x000000000804845b
-foo 0x0000000008048464 0x0000000008048467
-EOF
-
-testrun_compare ./find-prologues -e testfile4 <<\EOF
-get 0x00000000080493fc 0x0000000008049402
-main 0x0000000008049498 0x000000000804949e
-a 0x000000000804d85c 0x000000000804d85c
-__tfPCc 0x000000000804d86c 0x000000000804d872
-__tfCc 0x000000000804d8a4 0x000000000804d8a4
-EOF
-
-testrun_compare ./find-prologues -e testfile5 <<\EOF
-bar 0x000000000804842c 0x000000000804842f
-foo 0x0000000008048438 0x000000000804843b
-main 0x0000000008048444 0x000000000804844a
-EOF
-
-testrun_compare ./find-prologues -e testfile6 <<\EOF
-main 0x00000000080489b8 0x00000000080489cd
-gnu_obj_2 0x0000000008048c9e 0x0000000008048ca4
-gnu_obj_3 0x0000000008048cd8 0x0000000008048cde
-gnu_obj_2 0x0000000008048cf4 0x0000000008048cfa
-~invalid_argument 0x0000000008048d2e 0x0000000008048d34
-gnu_obj_1 0x0000000008048d62 0x0000000008048d65
-gnu_obj_1 0x0000000008048d8a 0x0000000008048d8d
-~invalid_argument 0x0000000008048db2 0x0000000008048db8
-EOF
-
-exit 0
diff --git a/tests/run-funcscopes.sh b/tests/run-funcscopes.sh
deleted file mode 100755
index 52e50f4..0000000
--- a/tests/run-funcscopes.sh
+++ /dev/null
@@ -1,37 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2005 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-testfiles testfile25
-
-testrun_compare ./funcscopes -e testfile25 incr <<\EOF
-testfile25: 0x8048000 .. 0x8049528
- inline-test.c (0x11): 0x8048348 (/home/roland/build/stock-elfutils/inline-test.c:7) .. 0x804834f (/home/roland/build/stock-elfutils/inline-test.c:9)
- incr (0x2e): 0x8048348 (/home/roland/build/stock-elfutils/inline-test.c:7) .. 0x804834f (/home/roland/build/stock-elfutils/inline-test.c:9)
- x [ 66]
-EOF
-
-exit 0
diff --git a/tests/run-get-aranges.sh b/tests/run-get-aranges.sh
deleted file mode 100644
index f78a4a1..0000000
--- a/tests/run-get-aranges.sh
+++ /dev/null
@@ -1,76 +0,0 @@
-#! /bin/sh
-# Copyright (C) 1999, 2000, 2002, 2005 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-# Written by Ulrich Drepper <drepper@redhat.com>, 1999.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-testfiles testfile testfile2
-
-testrun_compare ./get-aranges testfile testfile2 <<\EOF
-0x804842b: not in range
-CU name: "m.c"
-CU name: "m.c"
-CU name: "m.c"
-0x804845a: not in range
-0x804845b: not in range
-CU name: "b.c"
-CU name: "b.c"
-CU name: "b.c"
-0x8048466: not in range
-0x8048467: not in range
-CU name: "f.c"
-CU name: "f.c"
-CU name: "f.c"
-0x8048472: not in range
- [ 0] start: 0x804842c, length: 46, cu: 11
-CU name: "m.c"
- [ 1] start: 0x804845c, length: 10, cu: 202
-CU name: "b.c"
- [ 2] start: 0x8048468, length: 10, cu: 5628
-CU name: "f.c"
-0x804842b: not in range
-0x804842c: not in range
-0x804843c: not in range
-0x8048459: not in range
-0x804845a: not in range
-0x804845b: not in range
-0x804845c: not in range
-0x8048460: not in range
-0x8048465: not in range
-0x8048466: not in range
-0x8048467: not in range
-0x8048468: not in range
-0x8048470: not in range
-0x8048471: not in range
-0x8048472: not in range
- [ 0] start: 0x10000470, length: 32, cu: 11
-CU name: "b.c"
- [ 1] start: 0x10000490, length: 32, cu: 2429
-CU name: "f.c"
- [ 2] start: 0x100004b0, length: 100, cu: 2532
-CU name: "m.c"
-EOF
-
-exit 0
diff --git a/tests/run-get-files.sh b/tests/run-get-files.sh
deleted file mode 100644
index 7d51f5f..0000000
--- a/tests/run-get-files.sh
+++ /dev/null
@@ -1,75 +0,0 @@
-#! /bin/sh
-# Copyright (C) 1999, 2000, 2002, 2004, 2005, 2007 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-# Written by Ulrich Drepper <drepper@redhat.com>, 1999.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-testfiles testfile testfile2
-
-testrun_compare ./get-files testfile testfile2 <<\EOF
-cuhl = 11, o = 0, asz = 4, osz = 4, ncu = 191
- dirs[0] = "/home/drepper/gnu/new-bu/build/ttt"
- file[0] = "???"
- file[1] = "/home/drepper/gnu/new-bu/build/ttt/m.c"
-cuhl = 11, o = 114, asz = 4, osz = 4, ncu = 5617
- dirs[0] = "/home/drepper/gnu/new-bu/build/ttt"
- file[0] = "???"
- file[1] = "/home/drepper/gnu/new-bu/build/ttt/b.c"
- file[2] = "/usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h"
- file[3] = "/usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h"
- file[4] = "/usr/include/bits/types.h"
- file[5] = "/usr/include/bits/sched.h"
- file[6] = "/usr/include/bits/pthreadtypes.h"
- file[7] = "/usr/include/stdio.h"
- file[8] = "/usr/include/libio.h"
- file[9] = "/usr/include/wchar.h"
- file[10] = "/usr/include/_G_config.h"
- file[11] = "/usr/include/gconv.h"
-cuhl = 11, o = 412, asz = 4, osz = 4, ncu = 5752
- dirs[0] = "/home/drepper/gnu/new-bu/build/ttt"
- file[0] = "???"
- file[1] = "/home/drepper/gnu/new-bu/build/ttt/f.c"
-cuhl = 11, o = 0, asz = 4, osz = 4, ncu = 2418
- dirs[0] = "/shoggoth/drepper"
- file[0] = "???"
- file[1] = "/shoggoth/drepper/b.c"
- file[2] = "/home/geoffk/objs/laurel-000912-branch/lib/gcc-lib/powerpc-unknown-linux-gnu/2.96-laurel-000912/include/stddef.h"
- file[3] = "/home/geoffk/objs/laurel-000912-branch/lib/gcc-lib/powerpc-unknown-linux-gnu/2.96-laurel-000912/include/stdarg.h"
- file[4] = "/shoggoth/drepper/<built-in>"
- file[5] = "/usr/include/bits/types.h"
- file[6] = "/usr/include/stdio.h"
- file[7] = "/usr/include/libio.h"
- file[8] = "/usr/include/_G_config.h"
-cuhl = 11, o = 213, asz = 4, osz = 4, ncu = 2521
- dirs[0] = "/shoggoth/drepper"
- file[0] = "???"
- file[1] = "/shoggoth/drepper/f.c"
-cuhl = 11, o = 267, asz = 4, osz = 4, ncu = 2680
- dirs[0] = "/shoggoth/drepper"
- file[0] = "???"
- file[1] = "/shoggoth/drepper/m.c"
-EOF
-
-exit 0
diff --git a/tests/run-get-lines.sh b/tests/run-get-lines.sh
deleted file mode 100644
index fb675dc..0000000
--- a/tests/run-get-lines.sh
+++ /dev/null
@@ -1,72 +0,0 @@
-#! /bin/sh
-# Copyright (C) 1999, 2000, 2002, 2004, 2005 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-# Written by Ulrich Drepper <drepper@redhat.com>, 1999.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-testfiles testfile testfile2
-
-testrun_compare ./get-lines testfile testfile2 <<\EOF
-cuhl = 11, o = 0, asz = 4, osz = 4, ncu = 191
- 5 lines
-804842c: /home/drepper/gnu/new-bu/build/ttt/m.c:5:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
-8048432: /home/drepper/gnu/new-bu/build/ttt/m.c:6:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
-804844d: /home/drepper/gnu/new-bu/build/ttt/m.c:7:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
-8048458: /home/drepper/gnu/new-bu/build/ttt/m.c:8:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
-804845a: /home/drepper/gnu/new-bu/build/ttt/m.c:8:0: is_stmt:yes, end_seq:yes, bb:no, prologue:no, epilogue:no
-cuhl = 11, o = 114, asz = 4, osz = 4, ncu = 5617
- 4 lines
-804845c: /home/drepper/gnu/new-bu/build/ttt/b.c:4:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
-804845f: /home/drepper/gnu/new-bu/build/ttt/b.c:5:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
-8048464: /home/drepper/gnu/new-bu/build/ttt/b.c:6:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
-8048466: /home/drepper/gnu/new-bu/build/ttt/b.c:6:0: is_stmt:yes, end_seq:yes, bb:no, prologue:no, epilogue:no
-cuhl = 11, o = 412, asz = 4, osz = 4, ncu = 5752
- 4 lines
-8048468: /home/drepper/gnu/new-bu/build/ttt/f.c:3:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
-804846b: /home/drepper/gnu/new-bu/build/ttt/f.c:4:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
-8048470: /home/drepper/gnu/new-bu/build/ttt/f.c:5:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
-8048472: /home/drepper/gnu/new-bu/build/ttt/f.c:5:0: is_stmt:yes, end_seq:yes, bb:no, prologue:no, epilogue:no
-cuhl = 11, o = 0, asz = 4, osz = 4, ncu = 2418
- 4 lines
-10000470: /shoggoth/drepper/b.c:4:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
-1000047c: /shoggoth/drepper/b.c:5:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
-10000480: /shoggoth/drepper/b.c:6:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
-10000490: /shoggoth/drepper/b.c:6:0: is_stmt:yes, end_seq:yes, bb:no, prologue:no, epilogue:no
-cuhl = 11, o = 213, asz = 4, osz = 4, ncu = 2521
- 4 lines
-10000490: /shoggoth/drepper/f.c:3:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
-1000049c: /shoggoth/drepper/f.c:4:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
-100004a0: /shoggoth/drepper/f.c:5:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
-100004b0: /shoggoth/drepper/f.c:5:0: is_stmt:yes, end_seq:yes, bb:no, prologue:no, epilogue:no
-cuhl = 11, o = 267, asz = 4, osz = 4, ncu = 2680
- 5 lines
-100004b0: /shoggoth/drepper/m.c:5:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
-100004cc: /shoggoth/drepper/m.c:6:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
-100004e8: /shoggoth/drepper/m.c:7:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
-100004f4: /shoggoth/drepper/m.c:8:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no
-10000514: /shoggoth/drepper/m.c:8:0: is_stmt:yes, end_seq:yes, bb:no, prologue:no, epilogue:no
-EOF
-
-exit 0
diff --git a/tests/run-get-pubnames.sh b/tests/run-get-pubnames.sh
deleted file mode 100644
index 131baf0..0000000
--- a/tests/run-get-pubnames.sh
+++ /dev/null
@@ -1,58 +0,0 @@
-#! /bin/sh
-# Copyright (C) 1999, 2000, 2002, 2003, 2005 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-# Written by Ulrich Drepper <drepper@redhat.com>, 1999.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-testfiles testfile testfile2
-
-testrun_compare ./get-pubnames testfile testfile2 <<\EOF
- [ 0] "main", die: 104, cu: 11
-CU name: "m.c"
-object name: "main"
- [ 1] "a", die: 174, cu: 11
-CU name: "m.c"
-object name: "a"
- [ 2] "bar", die: 295, cu: 202
-CU name: "b.c"
-object name: "bar"
- [ 3] "foo", die: 5721, cu: 5628
-CU name: "f.c"
-object name: "foo"
- [ 0] "bar", die: 72, cu: 11
-CU name: "b.c"
-object name: "bar"
- [ 1] "foo", die: 2490, cu: 2429
-CU name: "f.c"
-object name: "foo"
- [ 2] "main", die: 2593, cu: 2532
-CU name: "m.c"
-object name: "main"
- [ 3] "a", die: 2663, cu: 2532
-CU name: "m.c"
-object name: "a"
-EOF
-
-exit 0
diff --git a/tests/run-line2addr.sh b/tests/run-line2addr.sh
deleted file mode 100755
index 3fb6f47..0000000
--- a/tests/run-line2addr.sh
+++ /dev/null
@@ -1,57 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2005 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-# Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-testfiles testfile testfile2 testfile8 testfile14 testfile23
-
-testrun_compare ./line2addr -e testfile f.c:4 testfile f.c:8 <<\EOF
-f.c:4 -> 0x804846b (/home/drepper/gnu/new-bu/build/ttt/f.c:4)
-EOF
-
-testrun_compare ./line2addr -e testfile2 m.c:6 b.c:1 <<\EOF
-m.c:6 -> 0x100004cc (/shoggoth/drepper/m.c:6)
-b.c:1 -> 0x10000470 (/shoggoth/drepper/b.c:4)
-EOF
-
-testrun_compare ./line2addr -e testfile8 strip.c:953 strip.c:365 <<\EOF
-strip.c:953 -> (.text)+0x169f (/home/drepper/gnu/elfutils/build/src/../../src/strip.c:953)
-strip.c:953 -> (.text)+0x16aa (/home/drepper/gnu/elfutils/build/src/../../src/strip.c:953)
-strip.c:365 -> (.text)+0x278b (/home/drepper/gnu/elfutils/build/src/../../src/strip.c:365)
-strip.c:365 -> (.text)+0x2797 (/home/drepper/gnu/elfutils/build/src/../../src/strip.c:365)
-EOF
-
-testrun_compare ./line2addr -e testfile14 v.c:6 <<\EOF
-v.c:6 -> 0x400468 (/home/drepper/local/elfutils-build/20050425/v.c:6)
-v.c:6 -> 0x400487 (/home/drepper/local/elfutils-build/20050425/v.c:6)
-EOF
-
-testrun_compare ./line2addr -e testfile23 foo.c:2 foo.c:6 <<\EOF
-foo.c:2 -> (.init.text)+0xc (/home/roland/stock-elfutils-build/foo.c:2)
-foo.c:6 -> (.text)+0xc (/home/roland/stock-elfutils-build/foo.c:6)
-EOF
-
-exit 0
diff --git a/tests/run-native-test.sh b/tests/run-native-test.sh
deleted file mode 100755
index 99926b0..0000000
--- a/tests/run-native-test.sh
+++ /dev/null
@@ -1,89 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2005, 2006 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-
-. $srcdir/test-subr.sh
-
-# This tests all the miscellaneous components of backend support
-# against whatever this build is running on. A platform will fail
-# this test if it is missing parts of the backend implementation.
-#
-# As new backend code is added to satisfy the test, be sure to update
-# the fixed test cases (run-allregs.sh et al) to test that backend
-# in all builds.
-
-tempfiles native.c native
-echo 'main () { while (1) pause (); }' > native.c
-
-native=0
-kill_native()
-{
- test $native -eq 0 || {
- kill -9 $native 2> /dev/null || :
- wait $native 2> /dev/null || :
- }
- native=0
-}
-
-native_cleanup()
-{
- kill_native
- test_cleanup
-}
-
-trap native_cleanup 0 1 2 15
-
-for cc in "$HOSTCC" "$HOST_CC" cc gcc "$CC"; do
- test "x$cc" != x || continue
- $cc -o native -g native.c > /dev/null 2>&1 &&
- # Some shell versions don't do this right without the braces.
- { ./native > /dev/null 2>&1 & native=$! ; } &&
- sleep 1 && kill -0 $native 2> /dev/null &&
- break ||
- native=0
-done
-
-native_test()
-{
- # Try the build against itself, i.e. $config_host.
- testrun "$@" -e $1 > /dev/null
-
- # Try the build against a presumed native process, running this sh.
- # For tests requiring debug information, this may not test anything.
- testrun "$@" -p $$ > /dev/null
-
- # Try the build against the trivial native program we just built with -g.
- test $native -eq 0 || testrun "$@" -p $native > /dev/null
-}
-
-native_test ./allregs
-native_test ./funcretval
-
-# We do this explicitly rather than letting the trap 0 cover it,
-# because as of version 3.1 bash prints the "Killed" report for
-# $native when we do the kill inside the exit handler.
-native_cleanup
-
-exit 0
diff --git a/tests/run-ranlib-test.sh b/tests/run-ranlib-test.sh
deleted file mode 100755
index 01c0d0b..0000000
--- a/tests/run-ranlib-test.sh
+++ /dev/null
@@ -1,46 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2005 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-# Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-tempfiles ranlib-test.a ranlib-test.a-copy
-
-cat > ranlib-test.a <<"EOF"
-!<arch>
-foo/ 1124128960 500 500 100664 4 `
-foo
-bar/ 1124128965 500 500 100664 4 `
-bar
-EOF
-
-cp ranlib-test.a ranlib-test.a-copy
-
-testrun ../src/ranlib ranlib-test.a
-
-# The ranlib call should not have changed anything.
-cmp ranlib-test.a ranlib-test.a-copy
-
-exit 0
diff --git a/tests/run-ranlib-test2.sh b/tests/run-ranlib-test2.sh
deleted file mode 100755
index 8704037..0000000
--- a/tests/run-ranlib-test2.sh
+++ /dev/null
@@ -1,45 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2005 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-# Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-original=${original:-testfile19}
-indexed=${indexed:-testfile19.index}
-
-testfiles $original $indexed
-
-testrun ../src/ranlib $original
-
-if test -z "$noindex"; then
- # The date in the index is different. The reference file has it blanked
- # out, we do the same here.
- echo " " |
- dd of=$original seek=24 bs=1 count=12 conv=notrunc 2>/dev/null
-fi
-
-cmp $original $indexed
-
-exit 0
diff --git a/tests/run-ranlib-test3.sh b/tests/run-ranlib-test3.sh
deleted file mode 100755
index 7be6ddd..0000000
--- a/tests/run-ranlib-test3.sh
+++ /dev/null
@@ -1,30 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2005 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-# Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-
-original=testfile20
-indexed=testfile20.index
-. $srcdir/run-ranlib-test2.sh
diff --git a/tests/run-ranlib-test4.sh b/tests/run-ranlib-test4.sh
deleted file mode 100755
index eeeb56f..0000000
--- a/tests/run-ranlib-test4.sh
+++ /dev/null
@@ -1,31 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2005 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-# Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-
-original=testfile21
-indexed=testfile21.index
-noindex=1
-. $srcdir/run-ranlib-test2.sh
diff --git a/tests/run-readelf-test1.sh b/tests/run-readelf-test1.sh
deleted file mode 100755
index aaa03ed..0000000
--- a/tests/run-readelf-test1.sh
+++ /dev/null
@@ -1,53 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2005 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-# Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-original=${original:-testfile11}
-stripped=${stripped:-testfile7}
-debugout=${debugfile:+-f testfile.debug.temp -F $debugfile}
-
-testfiles testfile3
-
-tempfiles testfile.temp
-
-testrun ../src/readelf -r testfile3 > testfile.temp
-
-diff -u - testfile.temp <<EOF
-
-Relocation section [ 8] '.rel.got' for section [19] '.got' at offset 0x294 contains 1 entry:
- Offset Type Value Name
- 0x08049544 386_GLOB_DAT 0000000000 __gmon_start__
-
-Relocation section [ 9] '.rel.plt' for section [11] '.plt' at offset 0x29c contains 4 entries:
- Offset Type Value Name
- 0x08049534 386_JMP_SLOT 0x080482e4 __register_frame_info
- 0x08049538 386_JMP_SLOT 0x080482f4 __deregister_frame_info
- 0x0804953c 386_JMP_SLOT 0x08048304 __libc_start_main
- 0x08049540 386_JMP_SLOT 0x08048314 __cxa_finalize
-EOF
-
-exit 0
diff --git a/tests/run-readelf-test2.sh b/tests/run-readelf-test2.sh
deleted file mode 100755
index 4edaea6..0000000
--- a/tests/run-readelf-test2.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2007 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-testfiles testfile28
-
-testrun_compare ../src/readelf -x .strtab testfile28 <<\EOF
-
-Hex dump of section [6] '.strtab', 1 bytes at offset 0x290:
- 0x00000000 00 .
-EOF
-
-exit 0
diff --git a/tests/run-readelf-test3.sh b/tests/run-readelf-test3.sh
deleted file mode 100755
index 71dd8ae..0000000
--- a/tests/run-readelf-test3.sh
+++ /dev/null
@@ -1,39 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2007 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-testfiles testfile40.debug
-
-testrun_compare ../src/readelf -n testfile40.debug <<\EOF
-
-Note section [ 6] '.note' of 60 bytes at offset 0x120:
- Owner Data size Type
- GNU 20 GNU_BUILD_ID
- Build ID: 34072edcd87ef6728f4b4a7956167b2fcfc3f1d3
- Linux 4 <unknown>: 0
-EOF
-
-exit 0
diff --git a/tests/run-readelf-test4.sh b/tests/run-readelf-test4.sh
deleted file mode 100755
index 85e76ed..0000000
--- a/tests/run-readelf-test4.sh
+++ /dev/null
@@ -1,41 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2007 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-testfiles testfile19.index
-
-testrun_compare ../src/readelf -c testfile19.index <<\EOF
-
-Index of archive 'testfile19.index' has 4 entries:
-Archive member 'u1.o' contains:
- a
-Archive member 'u2.o' contains:
- aa
-Archive member 'u3.o' contains:
- a
-EOF
-
-exit 0
diff --git a/tests/run-show-abbrev.sh b/tests/run-show-abbrev.sh
deleted file mode 100644
index a148dff..0000000
--- a/tests/run-show-abbrev.sh
+++ /dev/null
@@ -1,360 +0,0 @@
-#! /bin/sh
-# Copyright (C) 1999, 2000, 2002, 2003, 2004, 2005 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-# Written by Ulrich Drepper <drepper@redhat.com>, 1999.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-testfiles testfile testfile2
-
-testrun_compare ./show-abbrev testfile testfile2 <<\EOF
-abbrev[0]: code = 1, tag = 17, children = 1
-abbrev[0]: attr[0]: code = 16, form = 6, offset = 0
-abbrev[0]: attr[1]: code = 18, form = 1, offset = 2
-abbrev[0]: attr[2]: code = 17, form = 1, offset = 4
-abbrev[0]: attr[3]: code = 3, form = 8, offset = 6
-abbrev[0]: attr[4]: code = 27, form = 8, offset = 8
-abbrev[0]: attr[5]: code = 37, form = 8, offset = 10
-abbrev[0]: attr[6]: code = 19, form = 11, offset = 12
-abbrev[19]: code = 2, tag = 46, children = 1
-abbrev[19]: attr[0]: code = 1, form = 19, offset = 19
-abbrev[19]: attr[1]: code = 63, form = 12, offset = 21
-abbrev[19]: attr[2]: code = 3, form = 8, offset = 23
-abbrev[19]: attr[3]: code = 58, form = 11, offset = 25
-abbrev[19]: attr[4]: code = 59, form = 11, offset = 27
-abbrev[19]: attr[5]: code = 39, form = 12, offset = 29
-abbrev[19]: attr[6]: code = 73, form = 19, offset = 31
-abbrev[19]: attr[7]: code = 17, form = 1, offset = 33
-abbrev[19]: attr[8]: code = 18, form = 1, offset = 35
-abbrev[19]: attr[9]: code = 64, form = 10, offset = 37
-abbrev[44]: code = 3, tag = 46, children = 1
-abbrev[44]: attr[0]: code = 1, form = 19, offset = 44
-abbrev[44]: attr[1]: code = 63, form = 12, offset = 46
-abbrev[44]: attr[2]: code = 3, form = 8, offset = 48
-abbrev[44]: attr[3]: code = 58, form = 11, offset = 50
-abbrev[44]: attr[4]: code = 59, form = 11, offset = 52
-abbrev[44]: attr[5]: code = 73, form = 19, offset = 54
-abbrev[44]: attr[6]: code = 60, form = 12, offset = 56
-abbrev[63]: code = 4, tag = 24, children = 0
-abbrev[68]: code = 5, tag = 46, children = 1
-abbrev[68]: attr[0]: code = 63, form = 12, offset = 68
-abbrev[68]: attr[1]: code = 3, form = 8, offset = 70
-abbrev[68]: attr[2]: code = 58, form = 11, offset = 72
-abbrev[68]: attr[3]: code = 59, form = 11, offset = 74
-abbrev[68]: attr[4]: code = 73, form = 19, offset = 76
-abbrev[68]: attr[5]: code = 60, form = 12, offset = 78
-abbrev[85]: code = 6, tag = 36, children = 0
-abbrev[85]: attr[0]: code = 3, form = 8, offset = 85
-abbrev[85]: attr[1]: code = 11, form = 11, offset = 87
-abbrev[85]: attr[2]: code = 62, form = 11, offset = 89
-abbrev[96]: code = 7, tag = 52, children = 0
-abbrev[96]: attr[0]: code = 3, form = 8, offset = 96
-abbrev[96]: attr[1]: code = 58, form = 11, offset = 98
-abbrev[96]: attr[2]: code = 59, form = 11, offset = 100
-abbrev[96]: attr[3]: code = 73, form = 19, offset = 102
-abbrev[96]: attr[4]: code = 63, form = 12, offset = 104
-abbrev[96]: attr[5]: code = 2, form = 10, offset = 106
-abbrev[0]: code = 1, tag = 17, children = 1
-abbrev[0]: attr[0]: code = 16, form = 6, offset = 114
-abbrev[0]: attr[1]: code = 18, form = 1, offset = 116
-abbrev[0]: attr[2]: code = 17, form = 1, offset = 118
-abbrev[0]: attr[3]: code = 3, form = 8, offset = 120
-abbrev[0]: attr[4]: code = 27, form = 8, offset = 122
-abbrev[0]: attr[5]: code = 37, form = 8, offset = 124
-abbrev[0]: attr[6]: code = 19, form = 11, offset = 126
-abbrev[19]: code = 2, tag = 46, children = 0
-abbrev[19]: attr[0]: code = 63, form = 12, offset = 133
-abbrev[19]: attr[1]: code = 3, form = 8, offset = 135
-abbrev[19]: attr[2]: code = 58, form = 11, offset = 137
-abbrev[19]: attr[3]: code = 59, form = 11, offset = 139
-abbrev[19]: attr[4]: code = 39, form = 12, offset = 141
-abbrev[19]: attr[5]: code = 73, form = 19, offset = 143
-abbrev[19]: attr[6]: code = 17, form = 1, offset = 145
-abbrev[19]: attr[7]: code = 18, form = 1, offset = 147
-abbrev[19]: attr[8]: code = 64, form = 10, offset = 149
-abbrev[42]: code = 3, tag = 36, children = 0
-abbrev[42]: attr[0]: code = 3, form = 8, offset = 156
-abbrev[42]: attr[1]: code = 11, form = 11, offset = 158
-abbrev[42]: attr[2]: code = 62, form = 11, offset = 160
-abbrev[53]: code = 4, tag = 22, children = 0
-abbrev[53]: attr[0]: code = 3, form = 8, offset = 167
-abbrev[53]: attr[1]: code = 58, form = 11, offset = 169
-abbrev[53]: attr[2]: code = 59, form = 11, offset = 171
-abbrev[53]: attr[3]: code = 73, form = 19, offset = 173
-abbrev[66]: code = 5, tag = 15, children = 0
-abbrev[66]: attr[0]: code = 11, form = 11, offset = 180
-abbrev[73]: code = 6, tag = 15, children = 0
-abbrev[73]: attr[0]: code = 11, form = 11, offset = 187
-abbrev[73]: attr[1]: code = 73, form = 19, offset = 189
-abbrev[82]: code = 7, tag = 19, children = 1
-abbrev[82]: attr[0]: code = 1, form = 19, offset = 196
-abbrev[82]: attr[1]: code = 11, form = 11, offset = 198
-abbrev[82]: attr[2]: code = 58, form = 11, offset = 200
-abbrev[82]: attr[3]: code = 59, form = 11, offset = 202
-abbrev[95]: code = 8, tag = 13, children = 0
-abbrev[95]: attr[0]: code = 3, form = 8, offset = 209
-abbrev[95]: attr[1]: code = 58, form = 11, offset = 211
-abbrev[95]: attr[2]: code = 59, form = 11, offset = 213
-abbrev[95]: attr[3]: code = 73, form = 19, offset = 215
-abbrev[95]: attr[4]: code = 56, form = 10, offset = 217
-abbrev[110]: code = 9, tag = 1, children = 1
-abbrev[110]: attr[0]: code = 1, form = 19, offset = 224
-abbrev[110]: attr[1]: code = 73, form = 19, offset = 226
-abbrev[119]: code = 10, tag = 33, children = 0
-abbrev[119]: attr[0]: code = 73, form = 19, offset = 233
-abbrev[119]: attr[1]: code = 47, form = 11, offset = 235
-abbrev[128]: code = 11, tag = 19, children = 1
-abbrev[128]: attr[0]: code = 1, form = 19, offset = 242
-abbrev[128]: attr[1]: code = 3, form = 8, offset = 244
-abbrev[128]: attr[2]: code = 11, form = 11, offset = 246
-abbrev[128]: attr[3]: code = 58, form = 11, offset = 248
-abbrev[128]: attr[4]: code = 59, form = 11, offset = 250
-abbrev[143]: code = 12, tag = 19, children = 0
-abbrev[143]: attr[0]: code = 3, form = 8, offset = 257
-abbrev[143]: attr[1]: code = 60, form = 12, offset = 259
-abbrev[152]: code = 13, tag = 13, children = 0
-abbrev[152]: attr[0]: code = 3, form = 8, offset = 266
-abbrev[152]: attr[1]: code = 58, form = 11, offset = 268
-abbrev[152]: attr[2]: code = 59, form = 5, offset = 270
-abbrev[152]: attr[3]: code = 73, form = 19, offset = 272
-abbrev[152]: attr[4]: code = 56, form = 10, offset = 274
-abbrev[167]: code = 14, tag = 22, children = 0
-abbrev[167]: attr[0]: code = 3, form = 8, offset = 281
-abbrev[167]: attr[1]: code = 58, form = 11, offset = 283
-abbrev[167]: attr[2]: code = 59, form = 5, offset = 285
-abbrev[167]: attr[3]: code = 73, form = 19, offset = 287
-abbrev[180]: code = 15, tag = 23, children = 1
-abbrev[180]: attr[0]: code = 1, form = 19, offset = 294
-abbrev[180]: attr[1]: code = 11, form = 11, offset = 296
-abbrev[180]: attr[2]: code = 58, form = 11, offset = 298
-abbrev[180]: attr[3]: code = 59, form = 11, offset = 300
-abbrev[193]: code = 16, tag = 13, children = 0
-abbrev[193]: attr[0]: code = 3, form = 8, offset = 307
-abbrev[193]: attr[1]: code = 58, form = 11, offset = 309
-abbrev[193]: attr[2]: code = 59, form = 11, offset = 311
-abbrev[193]: attr[3]: code = 73, form = 19, offset = 313
-abbrev[206]: code = 17, tag = 4, children = 1
-abbrev[206]: attr[0]: code = 1, form = 19, offset = 320
-abbrev[206]: attr[1]: code = 11, form = 11, offset = 322
-abbrev[206]: attr[2]: code = 58, form = 11, offset = 324
-abbrev[206]: attr[3]: code = 59, form = 11, offset = 326
-abbrev[219]: code = 18, tag = 40, children = 0
-abbrev[219]: attr[0]: code = 3, form = 8, offset = 333
-abbrev[219]: attr[1]: code = 28, form = 11, offset = 335
-abbrev[228]: code = 19, tag = 38, children = 0
-abbrev[228]: attr[0]: code = 73, form = 19, offset = 342
-abbrev[235]: code = 20, tag = 21, children = 1
-abbrev[235]: attr[0]: code = 1, form = 19, offset = 349
-abbrev[235]: attr[1]: code = 39, form = 12, offset = 351
-abbrev[235]: attr[2]: code = 73, form = 19, offset = 353
-abbrev[246]: code = 21, tag = 5, children = 0
-abbrev[246]: attr[0]: code = 73, form = 19, offset = 360
-abbrev[253]: code = 22, tag = 21, children = 1
-abbrev[253]: attr[0]: code = 1, form = 19, offset = 367
-abbrev[253]: attr[1]: code = 39, form = 12, offset = 369
-abbrev[262]: code = 23, tag = 33, children = 0
-abbrev[262]: attr[0]: code = 73, form = 19, offset = 376
-abbrev[262]: attr[1]: code = 47, form = 6, offset = 378
-abbrev[271]: code = 24, tag = 22, children = 0
-abbrev[271]: attr[0]: code = 3, form = 8, offset = 385
-abbrev[271]: attr[1]: code = 58, form = 11, offset = 387
-abbrev[271]: attr[2]: code = 59, form = 11, offset = 389
-abbrev[282]: code = 25, tag = 4, children = 1
-abbrev[282]: attr[0]: code = 1, form = 19, offset = 396
-abbrev[282]: attr[1]: code = 3, form = 8, offset = 398
-abbrev[282]: attr[2]: code = 11, form = 11, offset = 400
-abbrev[282]: attr[3]: code = 58, form = 11, offset = 402
-abbrev[282]: attr[4]: code = 59, form = 11, offset = 404
-abbrev[0]: code = 1, tag = 17, children = 1
-abbrev[0]: attr[0]: code = 16, form = 6, offset = 412
-abbrev[0]: attr[1]: code = 18, form = 1, offset = 414
-abbrev[0]: attr[2]: code = 17, form = 1, offset = 416
-abbrev[0]: attr[3]: code = 3, form = 8, offset = 418
-abbrev[0]: attr[4]: code = 27, form = 8, offset = 420
-abbrev[0]: attr[5]: code = 37, form = 8, offset = 422
-abbrev[0]: attr[6]: code = 19, form = 11, offset = 424
-abbrev[19]: code = 2, tag = 46, children = 0
-abbrev[19]: attr[0]: code = 63, form = 12, offset = 431
-abbrev[19]: attr[1]: code = 3, form = 8, offset = 433
-abbrev[19]: attr[2]: code = 58, form = 11, offset = 435
-abbrev[19]: attr[3]: code = 59, form = 11, offset = 437
-abbrev[19]: attr[4]: code = 39, form = 12, offset = 439
-abbrev[19]: attr[5]: code = 73, form = 19, offset = 441
-abbrev[19]: attr[6]: code = 17, form = 1, offset = 443
-abbrev[19]: attr[7]: code = 18, form = 1, offset = 445
-abbrev[19]: attr[8]: code = 64, form = 10, offset = 447
-abbrev[42]: code = 3, tag = 36, children = 0
-abbrev[42]: attr[0]: code = 3, form = 8, offset = 454
-abbrev[42]: attr[1]: code = 11, form = 11, offset = 456
-abbrev[42]: attr[2]: code = 62, form = 11, offset = 458
-abbrev[0]: code = 1, tag = 17, children = 1
-abbrev[0]: attr[0]: code = 16, form = 6, offset = 0
-abbrev[0]: attr[1]: code = 18, form = 1, offset = 2
-abbrev[0]: attr[2]: code = 17, form = 1, offset = 4
-abbrev[0]: attr[3]: code = 3, form = 8, offset = 6
-abbrev[0]: attr[4]: code = 27, form = 8, offset = 8
-abbrev[0]: attr[5]: code = 37, form = 8, offset = 10
-abbrev[0]: attr[6]: code = 19, form = 11, offset = 12
-abbrev[19]: code = 2, tag = 46, children = 0
-abbrev[19]: attr[0]: code = 63, form = 12, offset = 19
-abbrev[19]: attr[1]: code = 3, form = 8, offset = 21
-abbrev[19]: attr[2]: code = 58, form = 11, offset = 23
-abbrev[19]: attr[3]: code = 59, form = 11, offset = 25
-abbrev[19]: attr[4]: code = 39, form = 12, offset = 27
-abbrev[19]: attr[5]: code = 73, form = 19, offset = 29
-abbrev[19]: attr[6]: code = 17, form = 1, offset = 31
-abbrev[19]: attr[7]: code = 18, form = 1, offset = 33
-abbrev[19]: attr[8]: code = 64, form = 10, offset = 35
-abbrev[42]: code = 3, tag = 36, children = 0
-abbrev[42]: attr[0]: code = 3, form = 8, offset = 42
-abbrev[42]: attr[1]: code = 11, form = 11, offset = 44
-abbrev[42]: attr[2]: code = 62, form = 11, offset = 46
-abbrev[53]: code = 4, tag = 22, children = 0
-abbrev[53]: attr[0]: code = 3, form = 8, offset = 53
-abbrev[53]: attr[1]: code = 58, form = 11, offset = 55
-abbrev[53]: attr[2]: code = 59, form = 11, offset = 57
-abbrev[53]: attr[3]: code = 73, form = 19, offset = 59
-abbrev[66]: code = 5, tag = 1, children = 1
-abbrev[66]: attr[0]: code = 1, form = 19, offset = 66
-abbrev[66]: attr[1]: code = 3, form = 8, offset = 68
-abbrev[66]: attr[2]: code = 73, form = 19, offset = 70
-abbrev[77]: code = 6, tag = 33, children = 0
-abbrev[77]: attr[0]: code = 73, form = 19, offset = 77
-abbrev[77]: attr[1]: code = 47, form = 11, offset = 79
-abbrev[86]: code = 7, tag = 19, children = 1
-abbrev[86]: attr[0]: code = 1, form = 19, offset = 86
-abbrev[86]: attr[1]: code = 3, form = 8, offset = 88
-abbrev[86]: attr[2]: code = 11, form = 11, offset = 90
-abbrev[86]: attr[3]: code = 58, form = 11, offset = 92
-abbrev[86]: attr[4]: code = 59, form = 11, offset = 94
-abbrev[101]: code = 8, tag = 13, children = 0
-abbrev[101]: attr[0]: code = 3, form = 8, offset = 101
-abbrev[101]: attr[1]: code = 58, form = 11, offset = 103
-abbrev[101]: attr[2]: code = 59, form = 11, offset = 105
-abbrev[101]: attr[3]: code = 73, form = 19, offset = 107
-abbrev[101]: attr[4]: code = 56, form = 10, offset = 109
-abbrev[116]: code = 9, tag = 15, children = 0
-abbrev[116]: attr[0]: code = 11, form = 11, offset = 116
-abbrev[123]: code = 10, tag = 15, children = 0
-abbrev[123]: attr[0]: code = 11, form = 11, offset = 123
-abbrev[123]: attr[1]: code = 73, form = 19, offset = 125
-abbrev[132]: code = 11, tag = 19, children = 1
-abbrev[132]: attr[0]: code = 1, form = 19, offset = 132
-abbrev[132]: attr[1]: code = 11, form = 11, offset = 134
-abbrev[132]: attr[2]: code = 58, form = 11, offset = 136
-abbrev[132]: attr[3]: code = 59, form = 11, offset = 138
-abbrev[145]: code = 12, tag = 1, children = 1
-abbrev[145]: attr[0]: code = 1, form = 19, offset = 145
-abbrev[145]: attr[1]: code = 73, form = 19, offset = 147
-abbrev[154]: code = 13, tag = 22, children = 0
-abbrev[154]: attr[0]: code = 3, form = 8, offset = 154
-abbrev[154]: attr[1]: code = 58, form = 11, offset = 156
-abbrev[154]: attr[2]: code = 59, form = 5, offset = 158
-abbrev[154]: attr[3]: code = 73, form = 19, offset = 160
-abbrev[167]: code = 14, tag = 19, children = 0
-abbrev[167]: attr[0]: code = 3, form = 8, offset = 167
-abbrev[167]: attr[1]: code = 60, form = 12, offset = 169
-abbrev[176]: code = 15, tag = 22, children = 0
-abbrev[176]: attr[0]: code = 3, form = 8, offset = 176
-abbrev[176]: attr[1]: code = 58, form = 11, offset = 178
-abbrev[176]: attr[2]: code = 59, form = 11, offset = 180
-abbrev[187]: code = 16, tag = 21, children = 1
-abbrev[187]: attr[0]: code = 1, form = 19, offset = 187
-abbrev[187]: attr[1]: code = 39, form = 12, offset = 189
-abbrev[187]: attr[2]: code = 73, form = 19, offset = 191
-abbrev[198]: code = 17, tag = 5, children = 0
-abbrev[198]: attr[0]: code = 73, form = 19, offset = 198
-abbrev[205]: code = 18, tag = 38, children = 0
-abbrev[205]: attr[0]: code = 73, form = 19, offset = 205
-abbrev[0]: code = 1, tag = 17, children = 1
-abbrev[0]: attr[0]: code = 16, form = 6, offset = 213
-abbrev[0]: attr[1]: code = 18, form = 1, offset = 215
-abbrev[0]: attr[2]: code = 17, form = 1, offset = 217
-abbrev[0]: attr[3]: code = 3, form = 8, offset = 219
-abbrev[0]: attr[4]: code = 27, form = 8, offset = 221
-abbrev[0]: attr[5]: code = 37, form = 8, offset = 223
-abbrev[0]: attr[6]: code = 19, form = 11, offset = 225
-abbrev[19]: code = 2, tag = 46, children = 0
-abbrev[19]: attr[0]: code = 63, form = 12, offset = 232
-abbrev[19]: attr[1]: code = 3, form = 8, offset = 234
-abbrev[19]: attr[2]: code = 58, form = 11, offset = 236
-abbrev[19]: attr[3]: code = 59, form = 11, offset = 238
-abbrev[19]: attr[4]: code = 39, form = 12, offset = 240
-abbrev[19]: attr[5]: code = 73, form = 19, offset = 242
-abbrev[19]: attr[6]: code = 17, form = 1, offset = 244
-abbrev[19]: attr[7]: code = 18, form = 1, offset = 246
-abbrev[19]: attr[8]: code = 64, form = 10, offset = 248
-abbrev[42]: code = 3, tag = 36, children = 0
-abbrev[42]: attr[0]: code = 3, form = 8, offset = 255
-abbrev[42]: attr[1]: code = 11, form = 11, offset = 257
-abbrev[42]: attr[2]: code = 62, form = 11, offset = 259
-abbrev[0]: code = 1, tag = 17, children = 1
-abbrev[0]: attr[0]: code = 16, form = 6, offset = 267
-abbrev[0]: attr[1]: code = 18, form = 1, offset = 269
-abbrev[0]: attr[2]: code = 17, form = 1, offset = 271
-abbrev[0]: attr[3]: code = 3, form = 8, offset = 273
-abbrev[0]: attr[4]: code = 27, form = 8, offset = 275
-abbrev[0]: attr[5]: code = 37, form = 8, offset = 277
-abbrev[0]: attr[6]: code = 19, form = 11, offset = 279
-abbrev[19]: code = 2, tag = 46, children = 1
-abbrev[19]: attr[0]: code = 1, form = 19, offset = 286
-abbrev[19]: attr[1]: code = 63, form = 12, offset = 288
-abbrev[19]: attr[2]: code = 3, form = 8, offset = 290
-abbrev[19]: attr[3]: code = 58, form = 11, offset = 292
-abbrev[19]: attr[4]: code = 59, form = 11, offset = 294
-abbrev[19]: attr[5]: code = 39, form = 12, offset = 296
-abbrev[19]: attr[6]: code = 73, form = 19, offset = 298
-abbrev[19]: attr[7]: code = 17, form = 1, offset = 300
-abbrev[19]: attr[8]: code = 18, form = 1, offset = 302
-abbrev[19]: attr[9]: code = 64, form = 10, offset = 304
-abbrev[44]: code = 3, tag = 46, children = 1
-abbrev[44]: attr[0]: code = 1, form = 19, offset = 311
-abbrev[44]: attr[1]: code = 63, form = 12, offset = 313
-abbrev[44]: attr[2]: code = 3, form = 8, offset = 315
-abbrev[44]: attr[3]: code = 58, form = 11, offset = 317
-abbrev[44]: attr[4]: code = 59, form = 11, offset = 319
-abbrev[44]: attr[5]: code = 73, form = 19, offset = 321
-abbrev[44]: attr[6]: code = 60, form = 12, offset = 323
-abbrev[63]: code = 4, tag = 24, children = 0
-abbrev[68]: code = 5, tag = 46, children = 1
-abbrev[68]: attr[0]: code = 63, form = 12, offset = 335
-abbrev[68]: attr[1]: code = 3, form = 8, offset = 337
-abbrev[68]: attr[2]: code = 58, form = 11, offset = 339
-abbrev[68]: attr[3]: code = 59, form = 11, offset = 341
-abbrev[68]: attr[4]: code = 73, form = 19, offset = 343
-abbrev[68]: attr[5]: code = 60, form = 12, offset = 345
-abbrev[85]: code = 6, tag = 36, children = 0
-abbrev[85]: attr[0]: code = 3, form = 8, offset = 352
-abbrev[85]: attr[1]: code = 11, form = 11, offset = 354
-abbrev[85]: attr[2]: code = 62, form = 11, offset = 356
-abbrev[96]: code = 7, tag = 52, children = 0
-abbrev[96]: attr[0]: code = 3, form = 8, offset = 363
-abbrev[96]: attr[1]: code = 58, form = 11, offset = 365
-abbrev[96]: attr[2]: code = 59, form = 11, offset = 367
-abbrev[96]: attr[3]: code = 73, form = 19, offset = 369
-abbrev[96]: attr[4]: code = 63, form = 12, offset = 371
-abbrev[96]: attr[5]: code = 2, form = 10, offset = 373
-EOF
-
-exit 0
diff --git a/tests/run-show-ciefde.sh b/tests/run-show-ciefde.sh
deleted file mode 100644
index 37505c0..0000000
--- a/tests/run-show-ciefde.sh
+++ /dev/null
@@ -1,324 +0,0 @@
-#! /bin/sh
-# Copyright (C) 1999, 2000, 2002, 2005 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-# Written by Ulrich Drepper <drepper@redhat.com>, 1999.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-testfiles testfile3 testfile4
-
-testrun_compare ./show-ciefde testfile3 testfile4 <<\EOF
-testfile3 has 1 CIEs and 1 FDEs
-CIE[0]: bytes_in_cie = 16, version = 1, augmenter = ""
-CIE[0]: code_alignment_factor = 1
-CIE[0]: data_alignment_factor = fffffffffffffffc
-CIE[0]: return_address_register = 8
-CIE[0]: bytes = 0c 04 04 88 01 00 00
-FDE[0]: low_pc = 0x804842c, length = 41
-FDE[0]: bytes = 18 00 00 00 18 00 00 00 2c 84 04 08 29 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 00
-FDE[0]: cie_offset = 0, cie_index = 0, fde_offset = 24
-FDE[0]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 00
-no FDE at 8048400
-FDE[@804842c]: cie_offset = 0, cie_index = 0, fde_offset = 24
-FDE[@8048454]: cie_offset = 0, cie_index = 0, fde_offset = 24
-no FDE at 8048455
-no FDE at 80493fc
-testfile4 has 5 CIEs and 61 FDEs
-CIE[0]: bytes_in_cie = 20, version = 1, augmenter = "eh"
-CIE[0]: code_alignment_factor = 1
-CIE[0]: data_alignment_factor = fffffffffffffffc
-CIE[0]: return_address_register = 8
-CIE[0]: bytes = 0c 04 04 88 01
-CIE[1]: bytes_in_cie = 16, version = 1, augmenter = ""
-CIE[1]: code_alignment_factor = 1
-CIE[1]: data_alignment_factor = fffffffffffffffc
-CIE[1]: return_address_register = 8
-CIE[1]: bytes = 0c 04 04 88 01 00 00
-CIE[2]: bytes_in_cie = 16, version = 1, augmenter = ""
-CIE[2]: code_alignment_factor = 1
-CIE[2]: data_alignment_factor = fffffffffffffffc
-CIE[2]: return_address_register = 8
-CIE[2]: bytes = 0c 04 04 88 01 00 00
-CIE[3]: bytes_in_cie = 20, version = 1, augmenter = "eh"
-CIE[3]: code_alignment_factor = 1
-CIE[3]: data_alignment_factor = fffffffffffffffc
-CIE[3]: return_address_register = 8
-CIE[3]: bytes = 0c 04 04 88 01
-CIE[4]: bytes_in_cie = 16, version = 1, augmenter = ""
-CIE[4]: code_alignment_factor = 1
-CIE[4]: data_alignment_factor = fffffffffffffffc
-CIE[4]: return_address_register = 8
-CIE[4]: bytes = 0c 04 04 88 01 00 00
-FDE[0]: low_pc = 0x80493fc, length = 154
-FDE[0]: bytes = 2c 00 00 00 1c 00 00 00 fc 93 04 08 9a 00 00 00 41 0e 08 85 02 42 0d 05 53 2e 08 50 2e 10 48 2e 00 58 2e 10 62 2e 00 63 2e 10 45 2e 00 00 00 00
-FDE[0]: cie_offset = 0, cie_index = 0, fde_offset = 28
-FDE[0]: instructions = 41 0e 08 85 02 42 0d 05 53 2e 08 50 2e 10 48 2e 00 58 2e 10 62 2e 00 63 2e 10 45 2e 00 00 00 00
-FDE[1]: low_pc = 0x8049498, length = 49
-FDE[1]: bytes = 18 00 00 00 4c 00 00 00 98 94 04 08 31 00 00 00 41 0e 08 85 02 42 0d 05 4c 2e 10 00
-FDE[1]: cie_offset = 0, cie_index = 0, fde_offset = 76
-FDE[1]: instructions = 41 0e 08 85 02 42 0d 05 4c 2e 10 00
-FDE[2]: low_pc = 0x80494d4, length = 23
-FDE[2]: bytes = 18 00 00 00 18 00 00 00 d4 94 04 08 17 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 00
-FDE[2]: cie_offset = 100, cie_index = 1, fde_offset = 24
-FDE[2]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 00
-FDE[3]: low_pc = 0x80494f0, length = 26
-FDE[3]: bytes = 18 00 00 00 34 00 00 00 f0 94 04 08 1a 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 00
-FDE[3]: cie_offset = 100, cie_index = 1, fde_offset = 52
-FDE[3]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 00
-FDE[4]: low_pc = 0x8049560, length = 85
-FDE[4]: bytes = 24 00 00 00 50 00 00 00 60 95 04 08 55 00 00 00 41 0e 08 85 02 42 0d 05 41 86 03 41 83 04 53 2e 10 4e 2e 00 55 2e 10 00
-FDE[4]: cie_offset = 100, cie_index = 1, fde_offset = 80
-FDE[4]: instructions = 41 0e 08 85 02 42 0d 05 41 86 03 41 83 04 53 2e 10 4e 2e 00 55 2e 10 00
-FDE[5]: low_pc = 0x80495c0, length = 66
-FDE[5]: bytes = 20 00 00 00 78 00 00 00 c0 95 04 08 42 00 00 00 41 0e 08 85 02 42 0d 05 41 86 03 41 83 04 5e 2e 10 00 00 00
-FDE[5]: cie_offset = 100, cie_index = 1, fde_offset = 120
-FDE[5]: instructions = 41 0e 08 85 02 42 0d 05 41 86 03 41 83 04 5e 2e 10 00 00 00
-FDE[6]: low_pc = 0x8049610, length = 28
-FDE[6]: bytes = 18 00 00 00 9c 00 00 00 10 96 04 08 1c 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 00
-FDE[6]: cie_offset = 100, cie_index = 1, fde_offset = 156
-FDE[6]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 00
-FDE[7]: low_pc = 0x8049630, length = 31
-FDE[7]: bytes = 18 00 00 00 b8 00 00 00 30 96 04 08 1f 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 00
-FDE[7]: cie_offset = 100, cie_index = 1, fde_offset = 184
-FDE[7]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 00
-FDE[8]: low_pc = 0x80496e0, length = 71
-FDE[8]: bytes = 1c 00 00 00 d4 00 00 00 e0 96 04 08 47 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 5c 2e 10 00 00
-FDE[8]: cie_offset = 100, cie_index = 1, fde_offset = 212
-FDE[8]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 5c 2e 10 00 00
-FDE[9]: low_pc = 0x8049730, length = 165
-FDE[9]: bytes = 20 00 00 00 f4 00 00 00 30 97 04 08 a5 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 69 2e 10 02 66 2e 00 00 00
-FDE[9]: cie_offset = 100, cie_index = 1, fde_offset = 244
-FDE[9]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 69 2e 10 02 66 2e 00 00 00
-FDE[10]: low_pc = 0x80497e0, length = 89
-FDE[10]: bytes = 1c 00 00 00 18 01 00 00 e0 97 04 08 59 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 74 2e 10 00 00
-FDE[10]: cie_offset = 100, cie_index = 1, fde_offset = 280
-FDE[10]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 74 2e 10 00 00
-FDE[11]: low_pc = 0x8049840, length = 89
-FDE[11]: bytes = 28 00 00 00 38 01 00 00 40 98 04 08 59 00 00 00 41 0e 08 85 02 42 0d 05 41 86 03 41 83 04 55 2e 10 4e 2e 00 52 2e 10 4c 2e 00 00 00
-FDE[11]: cie_offset = 100, cie_index = 1, fde_offset = 312
-FDE[11]: instructions = 41 0e 08 85 02 42 0d 05 41 86 03 41 83 04 55 2e 10 4e 2e 00 52 2e 10 4c 2e 00 00 00
-FDE[12]: low_pc = 0x80498a0, length = 176
-FDE[12]: bytes = 24 00 00 00 64 01 00 00 a0 98 04 08 b0 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 5e 2e 10 4c 2e 00 00
-FDE[12]: cie_offset = 100, cie_index = 1, fde_offset = 356
-FDE[12]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 5e 2e 10 4c 2e 00 00
-FDE[13]: low_pc = 0x8049950, length = 116
-FDE[13]: bytes = 24 00 00 00 8c 01 00 00 50 99 04 08 74 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 02 5e 2e 10 00 00 00
-FDE[13]: cie_offset = 100, cie_index = 1, fde_offset = 396
-FDE[13]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 02 5e 2e 10 00 00 00
-FDE[14]: low_pc = 0x80499d0, length = 31
-FDE[14]: bytes = 18 00 00 00 b4 01 00 00 d0 99 04 08 1f 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 00
-FDE[14]: cie_offset = 100, cie_index = 1, fde_offset = 436
-FDE[14]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 00
-FDE[15]: low_pc = 0x80499f0, length = 313
-FDE[15]: bytes = 24 00 00 00 d0 01 00 00 f0 99 04 08 39 01 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 02 d8 2e 10 62 2e 00
-FDE[15]: cie_offset = 100, cie_index = 1, fde_offset = 464
-FDE[15]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 02 d8 2e 10 62 2e 00
-FDE[16]: low_pc = 0x8049b30, length = 262
-FDE[16]: bytes = 24 00 00 00 f8 01 00 00 30 9b 04 08 06 01 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 02 c8 2e 10 62 2e 00
-FDE[16]: cie_offset = 100, cie_index = 1, fde_offset = 504
-FDE[16]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 02 c8 2e 10 62 2e 00
-FDE[17]: low_pc = 0x8049c40, length = 95
-FDE[17]: bytes = 1c 00 00 00 20 02 00 00 40 9c 04 08 5f 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 6e 2e 10 00 00
-FDE[17]: cie_offset = 100, cie_index = 1, fde_offset = 544
-FDE[17]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 6e 2e 10 00 00
-FDE[18]: low_pc = 0x8049d60, length = 230
-FDE[18]: bytes = 20 00 00 00 40 02 00 00 60 9d 04 08 e6 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 02 9a 2e 10 00 00
-FDE[18]: cie_offset = 100, cie_index = 1, fde_offset = 576
-FDE[18]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 02 9a 2e 10 00 00
-FDE[19]: low_pc = 0x8049e50, length = 85
-FDE[19]: bytes = 18 00 00 00 64 02 00 00 50 9e 04 08 55 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 00
-FDE[19]: cie_offset = 100, cie_index = 1, fde_offset = 612
-FDE[19]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 00
-FDE[20]: low_pc = 0x8049eb0, length = 144
-FDE[20]: bytes = 20 00 00 00 80 02 00 00 b0 9e 04 08 90 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 5b 2e 10
-FDE[20]: cie_offset = 100, cie_index = 1, fde_offset = 640
-FDE[20]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 5b 2e 10
-FDE[21]: low_pc = 0x8049f40, length = 115
-FDE[21]: bytes = 20 00 00 00 a4 02 00 00 40 9f 04 08 73 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 59 2e 10
-FDE[21]: cie_offset = 100, cie_index = 1, fde_offset = 676
-FDE[21]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 59 2e 10
-FDE[22]: low_pc = 0x8049fd0, length = 948
-FDE[22]: bytes = 30 00 00 00 c8 02 00 00 d0 9f 04 08 b4 03 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 02 f7 2e 20 02 64 2e 10 03 15 01 2e 00 02 9f 2e 10 00 00
-FDE[22]: cie_offset = 100, cie_index = 1, fde_offset = 712
-FDE[22]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 02 f7 2e 20 02 64 2e 10 03 15 01 2e 00 02 9f 2e 10 00 00
-FDE[23]: low_pc = 0x804a390, length = 201
-FDE[23]: bytes = 28 00 00 00 fc 02 00 00 90 a3 04 08 c9 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 02 58 2e 10 52 2e 00 75 2e 10 00
-FDE[23]: cie_offset = 100, cie_index = 1, fde_offset = 764
-FDE[23]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 02 58 2e 10 52 2e 00 75 2e 10 00
-FDE[24]: low_pc = 0x804a460, length = 206
-FDE[24]: bytes = 28 00 00 00 28 03 00 00 60 a4 04 08 ce 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 02 64 2e 10 52 2e 00 6e 2e 10 00
-FDE[24]: cie_offset = 100, cie_index = 1, fde_offset = 808
-FDE[24]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 02 64 2e 10 52 2e 00 6e 2e 10 00
-FDE[25]: low_pc = 0x804b970, length = 1274
-FDE[25]: bytes = 44 00 00 00 18 00 00 00 70 b9 04 08 fa 04 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 66 2e 10 7b 2e 20 03 7f 01 2e 10 53 2e 08 4c 2e 10 79 2e 20 02 54 2e 10 7e 2e 20 03 6c 01 2e 10 02 45 2e 20 00 00 00
-FDE[25]: cie_offset = 948, cie_index = 2, fde_offset = 24
-FDE[25]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 66 2e 10 7b 2e 20 03 7f 01 2e 10 53 2e 08 4c 2e 10 79 2e 20 02 54 2e 10 7e 2e 20 03 6c 01 2e 10 02 45 2e 20 00 00 00
-FDE[26]: low_pc = 0x804be70, length = 60
-FDE[26]: bytes = 1c 00 00 00 60 00 00 00 70 be 04 08 3c 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 5e 2e 10 00 00
-FDE[26]: cie_offset = 948, cie_index = 2, fde_offset = 96
-FDE[26]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 5e 2e 10 00 00
-FDE[27]: low_pc = 0x804c090, length = 85
-FDE[27]: bytes = 24 00 00 00 80 00 00 00 90 c0 04 08 55 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 66 2e 04 4d 2e 0c 4c 2e 04 46 2e 20 00
-FDE[27]: cie_offset = 948, cie_index = 2, fde_offset = 128
-FDE[27]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 66 2e 04 4d 2e 0c 4c 2e 04 46 2e 20 00
-FDE[28]: low_pc = 0x804c0f0, length = 75
-FDE[28]: bytes = 2c 00 00 00 a8 00 00 00 f0 c0 04 08 4b 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 5b 2e 04 4a 2e 0c 4d 2e 04 46 2e 20 00 00 00
-FDE[28]: cie_offset = 948, cie_index = 2, fde_offset = 168
-FDE[28]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 5b 2e 04 4a 2e 0c 4d 2e 04 46 2e 20 00 00 00
-FDE[29]: low_pc = 0x804d8e0, length = 71
-FDE[29]: bytes = 20 00 00 00 d8 00 00 00 e0 d8 04 08 47 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 60 2e 10
-FDE[29]: cie_offset = 948, cie_index = 2, fde_offset = 216
-FDE[29]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 60 2e 10
-FDE[30]: low_pc = 0x804d980, length = 71
-FDE[30]: bytes = 20 00 00 00 fc 00 00 00 80 d9 04 08 47 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 60 2e 10
-FDE[30]: cie_offset = 948, cie_index = 2, fde_offset = 252
-FDE[30]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 60 2e 10
-FDE[31]: low_pc = 0x804da20, length = 71
-FDE[31]: bytes = 20 00 00 00 20 01 00 00 20 da 04 08 47 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 60 2e 10
-FDE[31]: cie_offset = 948, cie_index = 2, fde_offset = 288
-FDE[31]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 60 2e 10
-FDE[32]: low_pc = 0x804dac0, length = 71
-FDE[32]: bytes = 20 00 00 00 44 01 00 00 c0 da 04 08 47 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 60 2e 10
-FDE[32]: cie_offset = 948, cie_index = 2, fde_offset = 324
-FDE[32]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 60 2e 10
-FDE[33]: low_pc = 0x804db60, length = 71
-FDE[33]: bytes = 20 00 00 00 68 01 00 00 60 db 04 08 47 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 60 2e 10
-FDE[33]: cie_offset = 948, cie_index = 2, fde_offset = 360
-FDE[33]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 60 2e 10
-FDE[34]: low_pc = 0x804dc00, length = 71
-FDE[34]: bytes = 20 00 00 00 8c 01 00 00 00 dc 04 08 47 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 60 2e 10
-FDE[34]: cie_offset = 948, cie_index = 2, fde_offset = 396
-FDE[34]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 60 2e 10
-FDE[35]: low_pc = 0x804dca0, length = 71
-FDE[35]: bytes = 20 00 00 00 b0 01 00 00 a0 dc 04 08 47 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 60 2e 10
-FDE[35]: cie_offset = 948, cie_index = 2, fde_offset = 432
-FDE[35]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 60 2e 10
-FDE[36]: low_pc = 0x804c5b4, length = 26
-FDE[36]: bytes = 18 00 00 00 1c 00 00 00 b4 c5 04 08 1a 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 00
-FDE[36]: cie_offset = 1412, cie_index = 3, fde_offset = 28
-FDE[36]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 00
-FDE[37]: low_pc = 0x804c5d0, length = 23
-FDE[37]: bytes = 18 00 00 00 38 00 00 00 d0 c5 04 08 17 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 00
-FDE[37]: cie_offset = 1412, cie_index = 3, fde_offset = 56
-FDE[37]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 00
-FDE[38]: low_pc = 0x804c640, length = 24
-FDE[38]: bytes = 18 00 00 00 54 00 00 00 40 c6 04 08 18 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 00
-FDE[38]: cie_offset = 1412, cie_index = 3, fde_offset = 84
-FDE[38]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 00
-FDE[39]: low_pc = 0x804c660, length = 32
-FDE[39]: bytes = 18 00 00 00 70 00 00 00 60 c6 04 08 20 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 00
-FDE[39]: cie_offset = 1412, cie_index = 3, fde_offset = 112
-FDE[39]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 00
-FDE[40]: low_pc = 0x804c680, length = 29
-FDE[40]: bytes = 18 00 00 00 8c 00 00 00 80 c6 04 08 1d 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 00
-FDE[40]: cie_offset = 1412, cie_index = 3, fde_offset = 140
-FDE[40]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 00
-FDE[41]: low_pc = 0x804c6a0, length = 36
-FDE[41]: bytes = 18 00 00 00 a8 00 00 00 a0 c6 04 08 24 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 00
-FDE[41]: cie_offset = 1412, cie_index = 3, fde_offset = 168
-FDE[41]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 00
-FDE[42]: low_pc = 0x804c6d0, length = 98
-FDE[42]: bytes = 24 00 00 00 c4 00 00 00 d0 c6 04 08 62 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 02 43 2e 10 00 00 00
-FDE[42]: cie_offset = 1412, cie_index = 3, fde_offset = 196
-FDE[42]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 02 43 2e 10 00 00 00
-FDE[43]: low_pc = 0x804c740, length = 107
-FDE[43]: bytes = 24 00 00 00 ec 00 00 00 40 c7 04 08 6b 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 53 2e 10 7b 2e 00 00
-FDE[43]: cie_offset = 1412, cie_index = 3, fde_offset = 236
-FDE[43]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 53 2e 10 7b 2e 00 00
-FDE[44]: low_pc = 0x804c7b0, length = 256
-FDE[44]: bytes = 24 00 00 00 14 01 00 00 b0 c7 04 08 00 01 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 02 bf 2e 10 00 00 00
-FDE[44]: cie_offset = 1412, cie_index = 3, fde_offset = 276
-FDE[44]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 02 bf 2e 10 00 00 00
-FDE[45]: low_pc = 0x804c8b0, length = 78
-FDE[45]: bytes = 1c 00 00 00 3c 01 00 00 b0 c8 04 08 4e 00 00 00 41 0e 08 85 02 42 0d 05 41 86 03 41 83 04 00 00
-FDE[45]: cie_offset = 1412, cie_index = 3, fde_offset = 316
-FDE[45]: instructions = 41 0e 08 85 02 42 0d 05 41 86 03 41 83 04 00 00
-FDE[46]: low_pc = 0x804c900, length = 480
-FDE[46]: bytes = 40 00 00 00 5c 01 00 00 00 c9 04 08 e0 01 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 7d 2e 10 4c 2e 00 02 48 2e 10 02 54 2e 00 78 2e 10 4c 2e 00 02 44 2e 10 79 2e 08 49 2e 10 48 2e 00 00 00
-FDE[46]: cie_offset = 1412, cie_index = 3, fde_offset = 348
-FDE[46]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 7d 2e 10 4c 2e 00 02 48 2e 10 02 54 2e 00 78 2e 10 4c 2e 00 02 44 2e 10 79 2e 08 49 2e 10 48 2e 00 00 00
-FDE[47]: low_pc = 0x804cae0, length = 37
-FDE[47]: bytes = 1c 00 00 00 a0 01 00 00 e0 ca 04 08 25 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 52 2e 10 00 00
-FDE[47]: cie_offset = 1412, cie_index = 3, fde_offset = 416
-FDE[47]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 52 2e 10 00 00
-FDE[48]: low_pc = 0x804cb10, length = 128
-FDE[48]: bytes = 2c 00 00 00 c0 01 00 00 10 cb 04 08 80 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 62 2e 10 56 2e 08 49 2e 10 48 2e 00 6c 2e 10
-FDE[48]: cie_offset = 1412, cie_index = 3, fde_offset = 448
-FDE[48]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 62 2e 10 56 2e 08 49 2e 10 48 2e 00 6c 2e 10
-FDE[49]: low_pc = 0x804cb90, length = 128
-FDE[49]: bytes = 2c 00 00 00 f0 01 00 00 90 cb 04 08 80 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 62 2e 10 56 2e 08 49 2e 10 48 2e 00 6c 2e 10
-FDE[49]: cie_offset = 1412, cie_index = 3, fde_offset = 496
-FDE[49]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 62 2e 10 56 2e 08 49 2e 10 48 2e 00 6c 2e 10
-FDE[50]: low_pc = 0x804cc10, length = 45
-FDE[50]: bytes = 18 00 00 00 20 02 00 00 10 cc 04 08 2d 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 00
-FDE[50]: cie_offset = 1412, cie_index = 3, fde_offset = 544
-FDE[50]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 00
-FDE[51]: low_pc = 0x804cc40, length = 43
-FDE[51]: bytes = 18 00 00 00 3c 02 00 00 40 cc 04 08 2b 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 00
-FDE[51]: cie_offset = 1412, cie_index = 3, fde_offset = 572
-FDE[51]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 00
-FDE[52]: low_pc = 0x804cde0, length = 89
-FDE[52]: bytes = 20 00 00 00 18 00 00 00 e0 cd 04 08 59 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 6d 2e 20 00 00 00
-FDE[52]: cie_offset = 2008, cie_index = 4, fde_offset = 24
-FDE[52]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 6d 2e 20 00 00 00
-FDE[53]: low_pc = 0x804ce40, length = 217
-FDE[53]: bytes = 20 00 00 00 3c 00 00 00 40 ce 04 08 d9 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 02 40 2e 20 00 00
-FDE[53]: cie_offset = 2008, cie_index = 4, fde_offset = 60
-FDE[53]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 02 40 2e 20 00 00
-FDE[54]: low_pc = 0x804d010, length = 117
-FDE[54]: bytes = 24 00 00 00 60 00 00 00 10 d0 04 08 75 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 5c 2e 10 02 48 2e 20
-FDE[54]: cie_offset = 2008, cie_index = 4, fde_offset = 96
-FDE[54]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 5c 2e 10 02 48 2e 20
-FDE[55]: low_pc = 0x804d090, length = 190
-FDE[55]: bytes = 24 00 00 00 88 00 00 00 90 d0 04 08 be 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 64 2e 10 02 89 2e 20
-FDE[55]: cie_offset = 2008, cie_index = 4, fde_offset = 136
-FDE[55]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 64 2e 10 02 89 2e 20
-FDE[56]: low_pc = 0x804d150, length = 101
-FDE[56]: bytes = 24 00 00 00 b0 00 00 00 50 d1 04 08 65 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 61 2e 10 73 2e 20 00
-FDE[56]: cie_offset = 2008, cie_index = 4, fde_offset = 176
-FDE[56]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 61 2e 10 73 2e 20 00
-FDE[57]: low_pc = 0x804d1c0, length = 480
-FDE[57]: bytes = 28 00 00 00 d8 00 00 00 c0 d1 04 08 e0 01 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 56 2e 10 02 f5 2e 20 02 91 2e 10
-FDE[57]: cie_offset = 2008, cie_index = 4, fde_offset = 216
-FDE[57]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 56 2e 10 02 f5 2e 20 02 91 2e 10
-FDE[58]: low_pc = 0x804d3a0, length = 897
-FDE[58]: bytes = 28 00 00 00 04 01 00 00 a0 d3 04 08 81 03 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 61 2e 10 03 61 01 2e 20 00 00 00
-FDE[58]: cie_offset = 2008, cie_index = 4, fde_offset = 260
-FDE[58]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 61 2e 10 03 61 01 2e 20 00 00 00
-FDE[59]: low_pc = 0x804d730, length = 238
-FDE[59]: bytes = 24 00 00 00 30 01 00 00 30 d7 04 08 ee 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 61 2e 10 02 8f 2e 20
-FDE[59]: cie_offset = 2008, cie_index = 4, fde_offset = 304
-FDE[59]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 61 2e 10 02 8f 2e 20
-FDE[60]: low_pc = 0x804e220, length = 73
-FDE[60]: bytes = 20 00 00 00 58 01 00 00 20 e2 04 08 49 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 44 86 04 74 2e 20 00 00 00
-FDE[60]: cie_offset = 2008, cie_index = 4, fde_offset = 344
-FDE[60]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 44 86 04 74 2e 20 00 00 00
-no FDE at 8048400
-no FDE at 804842c
-no FDE at 8048454
-no FDE at 8048455
-FDE[@80493fc]: cie_offset = 0, cie_index = 0, fde_offset = 28
-EOF
-
-exit 0
diff --git a/tests/run-show-die-info.sh b/tests/run-show-die-info.sh
deleted file mode 100644
index 47b5151..0000000
--- a/tests/run-show-die-info.sh
+++ /dev/null
@@ -1,993 +0,0 @@
-#! /bin/sh
-# Copyright (C) 1999, 2000, 2002, 2003, 2004, 2005 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-# Written by Ulrich Drepper <drepper@redhat.com>, 1999.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-testfiles testfile5 testfile2
-
-testrun_compare ./show-die-info testfile5 testfile2 <<\EOF
-file: testfile5
-New CU: off = 0, hsize = 11, ab = 0, as = 4, os = 4
- DW_TAG_compile_unit
- Name : b.c
- Offset : 11
- CU offset : 11
- Attrs : name stmt_list low_pc high_pc language comp_dir producer
- low PC : 0x804842c
- high PC : 0x8048436
- language : 1
- directory : /home/drepper/gnu/new-bu/build/ttt
- producer : GNU C 2.96 20000731 (Red Hat Linux 7.0)
- DW_TAG_subprogram
- Name : bar
- Offset : 104
- CU offset : 104
- Attrs : name low_pc high_pc prototyped decl_file decl_line external frame_base type
- low PC : 0x804842c
- high PC : 0x8048436
- DW_TAG_base_type
- Name : int
- Offset : 127
- CU offset : 127
- Attrs : name byte_size encoding
- byte size : 4
-New CU: off = 135, hsize = 11, ab = 54, as = 4, os = 4
- DW_TAG_compile_unit
- Name : f.c
- Offset : 146
- CU offset : 11
- Attrs : name stmt_list low_pc high_pc language comp_dir producer
- low PC : 0x8048438
- high PC : 0x8048442
- language : 1
- directory : /home/drepper/gnu/new-bu/build/ttt
- producer : GNU C 2.96 20000731 (Red Hat Linux 7.0)
- DW_TAG_subprogram
- Name : foo
- Offset : 239
- CU offset : 104
- Attrs : name low_pc high_pc prototyped decl_file decl_line external frame_base type
- low PC : 0x8048438
- high PC : 0x8048442
- DW_TAG_base_type
- Name : int
- Offset : 262
- CU offset : 127
- Attrs : name byte_size encoding
- byte size : 4
-New CU: off = 270, hsize = 11, ab = 108, as = 4, os = 4
- DW_TAG_compile_unit
- Name : m.c
- Offset : 281
- CU offset : 11
- Attrs : name stmt_list low_pc high_pc language comp_dir producer
- low PC : 0x8048444
- high PC : 0x8048472
- language : 1
- directory : /home/drepper/gnu/new-bu/build/ttt
- producer : GNU C 2.96 20000731 (Red Hat Linux 7.0)
- DW_TAG_subprogram
- Name : main
- Offset : 374
- CU offset : 104
- Attrs : sibling name low_pc high_pc prototyped decl_file decl_line external frame_base type
- low PC : 0x8048444
- high PC : 0x8048472
- DW_TAG_subprogram
- Name : bar
- Offset : 402
- CU offset : 132
- Attrs : sibling name decl_file decl_line declaration external type
- DW_TAG_unspecified_parameters
- Name : * NO NAME *
- Offset : 419
- CU offset : 149
- Attrs :
- DW_TAG_subprogram
- Name : foo
- Offset : 421
- CU offset : 151
- Attrs : name decl_file decl_line declaration external type
- DW_TAG_unspecified_parameters
- Name : * NO NAME *
- Offset : 434
- CU offset : 164
- Attrs :
- DW_TAG_base_type
- Name : int
- Offset : 437
- CU offset : 167
- Attrs : name byte_size encoding
- byte size : 4
- DW_TAG_variable
- Name : a
- Offset : 444
- CU offset : 174
- Attrs : location name decl_file decl_line external type
-file: testfile2
-New CU: off = 0, hsize = 11, ab = 0, as = 4, os = 4
- DW_TAG_compile_unit
- Name : b.c
- Offset : 11
- CU offset : 11
- Attrs : name stmt_list low_pc high_pc language comp_dir producer
- low PC : 0x10000470
- high PC : 0x10000490
- language : 1
- directory : /shoggoth/drepper
- producer : GNU C 2.96-laurel-000912
- DW_TAG_subprogram
- Name : bar
- Offset : 72
- CU offset : 72
- Attrs : name low_pc high_pc prototyped decl_file decl_line external frame_base type
- low PC : 0x10000470
- high PC : 0x10000490
- DW_TAG_base_type
- Name : int
- Offset : 95
- CU offset : 95
- Attrs : name byte_size encoding
- byte size : 4
- DW_TAG_typedef
- Name : size_t
- Offset : 102
- CU offset : 102
- Attrs : name decl_file decl_line type
- DW_TAG_base_type
- Name : unsigned int
- Offset : 116
- CU offset : 116
- Attrs : name byte_size encoding
- byte size : 4
- DW_TAG_typedef
- Name : __gnuc_va_list
- Offset : 132
- CU offset : 132
- Attrs : name decl_file decl_line type
- DW_TAG_array_type
- Name : __builtin_va_list
- Offset : 154
- CU offset : 154
- Attrs : sibling name type
- DW_TAG_subrange_type
- Name : * NO NAME *
- Offset : 181
- CU offset : 181
- Attrs : upper_bound type
- DW_TAG_base_type
- Name : unsigned int
- Offset : 188
- CU offset : 188
- Attrs : name byte_size encoding
- byte size : 4
- DW_TAG_structure_type
- Name : __va_list_tag
- Offset : 204
- CU offset : 204
- Attrs : sibling name byte_size decl_file decl_line
- byte size : 12
- DW_TAG_member
- Name : gpr
- Offset : 226
- CU offset : 226
- Attrs : name data_member_location decl_file decl_line type
- DW_TAG_member
- Name : fpr
- Offset : 240
- CU offset : 240
- Attrs : name data_member_location decl_file decl_line type
- DW_TAG_member
- Name : overflow_arg_area
- Offset : 254
- CU offset : 254
- Attrs : name data_member_location decl_file decl_line type
- DW_TAG_member
- Name : reg_save_area
- Offset : 282
- CU offset : 282
- Attrs : name data_member_location decl_file decl_line type
- DW_TAG_base_type
- Name : unsigned char
- Offset : 307
- CU offset : 307
- Attrs : name byte_size encoding
- byte size : 1
- DW_TAG_pointer_type
- Name : * NO NAME *
- Offset : 324
- CU offset : 324
- Attrs : byte_size
- byte size : 4
- DW_TAG_typedef
- Name : __u_char
- Offset : 326
- CU offset : 326
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __u_short
- Offset : 342
- CU offset : 342
- Attrs : name decl_file decl_line type
- DW_TAG_base_type
- Name : short unsigned int
- Offset : 359
- CU offset : 359
- Attrs : name byte_size encoding
- byte size : 2
- DW_TAG_typedef
- Name : __u_int
- Offset : 381
- CU offset : 381
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __u_long
- Offset : 396
- CU offset : 396
- Attrs : name decl_file decl_line type
- DW_TAG_base_type
- Name : long unsigned int
- Offset : 412
- CU offset : 412
- Attrs : name byte_size encoding
- byte size : 4
- DW_TAG_typedef
- Name : __u_quad_t
- Offset : 433
- CU offset : 433
- Attrs : name decl_file decl_line type
- DW_TAG_base_type
- Name : long long unsigned int
- Offset : 451
- CU offset : 451
- Attrs : name byte_size encoding
- byte size : 8
- DW_TAG_typedef
- Name : __quad_t
- Offset : 477
- CU offset : 477
- Attrs : name decl_file decl_line type
- DW_TAG_base_type
- Name : long long int
- Offset : 493
- CU offset : 493
- Attrs : name byte_size encoding
- byte size : 8
- DW_TAG_typedef
- Name : __int8_t
- Offset : 510
- CU offset : 510
- Attrs : name decl_file decl_line type
- DW_TAG_base_type
- Name : signed char
- Offset : 526
- CU offset : 526
- Attrs : name byte_size encoding
- byte size : 1
- DW_TAG_typedef
- Name : __uint8_t
- Offset : 541
- CU offset : 541
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __int16_t
- Offset : 558
- CU offset : 558
- Attrs : name decl_file decl_line type
- DW_TAG_base_type
- Name : short int
- Offset : 575
- CU offset : 575
- Attrs : name byte_size encoding
- byte size : 2
- DW_TAG_typedef
- Name : __uint16_t
- Offset : 588
- CU offset : 588
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __int32_t
- Offset : 606
- CU offset : 606
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __uint32_t
- Offset : 623
- CU offset : 623
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __int64_t
- Offset : 641
- CU offset : 641
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __uint64_t
- Offset : 658
- CU offset : 658
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __qaddr_t
- Offset : 676
- CU offset : 676
- Attrs : name decl_file decl_line type
- DW_TAG_pointer_type
- Name : * NO NAME *
- Offset : 693
- CU offset : 693
- Attrs : byte_size type
- byte size : 4
- DW_TAG_typedef
- Name : __dev_t
- Offset : 699
- CU offset : 699
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __uid_t
- Offset : 714
- CU offset : 714
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __gid_t
- Offset : 729
- CU offset : 729
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __ino_t
- Offset : 744
- CU offset : 744
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __mode_t
- Offset : 759
- CU offset : 759
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __nlink_t
- Offset : 775
- CU offset : 775
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __off_t
- Offset : 792
- CU offset : 792
- Attrs : name decl_file decl_line type
- DW_TAG_base_type
- Name : long int
- Offset : 807
- CU offset : 807
- Attrs : name byte_size encoding
- byte size : 4
- DW_TAG_typedef
- Name : __loff_t
- Offset : 819
- CU offset : 819
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __pid_t
- Offset : 835
- CU offset : 835
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __ssize_t
- Offset : 850
- CU offset : 850
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __rlim_t
- Offset : 867
- CU offset : 867
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __rlim64_t
- Offset : 883
- CU offset : 883
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __id_t
- Offset : 901
- CU offset : 901
- Attrs : name decl_file decl_line type
- DW_TAG_structure_type
- Name : * NO NAME *
- Offset : 915
- CU offset : 915
- Attrs : sibling byte_size decl_file decl_line
- byte size : 8
- DW_TAG_member
- Name : __val
- Offset : 923
- CU offset : 923
- Attrs : name data_member_location decl_file decl_line type
- DW_TAG_array_type
- Name : * NO NAME *
- Offset : 940
- CU offset : 940
- Attrs : sibling type
- DW_TAG_subrange_type
- Name : * NO NAME *
- Offset : 949
- CU offset : 949
- Attrs : upper_bound type
- DW_TAG_typedef
- Name : __fsid_t
- Offset : 956
- CU offset : 956
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __daddr_t
- Offset : 972
- CU offset : 972
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __caddr_t
- Offset : 989
- CU offset : 989
- Attrs : name decl_file decl_line type
- DW_TAG_pointer_type
- Name : * NO NAME *
- Offset : 1006
- CU offset : 1006
- Attrs : byte_size type
- byte size : 4
- DW_TAG_base_type
- Name : char
- Offset : 1012
- CU offset : 1012
- Attrs : name byte_size encoding
- byte size : 1
- DW_TAG_typedef
- Name : __time_t
- Offset : 1020
- CU offset : 1020
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __swblk_t
- Offset : 1036
- CU offset : 1036
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __clock_t
- Offset : 1053
- CU offset : 1053
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __fd_mask
- Offset : 1070
- CU offset : 1070
- Attrs : name decl_file decl_line type
- DW_TAG_structure_type
- Name : * NO NAME *
- Offset : 1087
- CU offset : 1087
- Attrs : sibling byte_size decl_file decl_line
- byte size : 128
- DW_TAG_member
- Name : __fds_bits
- Offset : 1095
- CU offset : 1095
- Attrs : name data_member_location decl_file decl_line type
- DW_TAG_array_type
- Name : * NO NAME *
- Offset : 1117
- CU offset : 1117
- Attrs : sibling type
- DW_TAG_subrange_type
- Name : * NO NAME *
- Offset : 1126
- CU offset : 1126
- Attrs : upper_bound type
- DW_TAG_typedef
- Name : __fd_set
- Offset : 1133
- CU offset : 1133
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __key_t
- Offset : 1149
- CU offset : 1149
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __ipc_pid_t
- Offset : 1164
- CU offset : 1164
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __blkcnt_t
- Offset : 1183
- CU offset : 1183
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __blkcnt64_t
- Offset : 1201
- CU offset : 1201
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __fsblkcnt_t
- Offset : 1221
- CU offset : 1221
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __fsblkcnt64_t
- Offset : 1241
- CU offset : 1241
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __fsfilcnt_t
- Offset : 1263
- CU offset : 1263
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __fsfilcnt64_t
- Offset : 1283
- CU offset : 1283
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __ino64_t
- Offset : 1305
- CU offset : 1305
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __off64_t
- Offset : 1322
- CU offset : 1322
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __t_scalar_t
- Offset : 1339
- CU offset : 1339
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __t_uscalar_t
- Offset : 1359
- CU offset : 1359
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : __intptr_t
- Offset : 1380
- CU offset : 1380
- Attrs : name decl_file decl_line type
- DW_TAG_structure_type
- Name : _IO_FILE
- Offset : 1398
- CU offset : 1398
- Attrs : sibling name byte_size decl_file decl_line
- byte size : 152
- DW_TAG_member
- Name : _flags
- Offset : 1415
- CU offset : 1415
- Attrs : name data_member_location decl_file decl_line type
- DW_TAG_member
- Name : _IO_read_ptr
- Offset : 1432
- CU offset : 1432
- Attrs : name data_member_location decl_file decl_line type
- DW_TAG_member
- Name : _IO_read_end
- Offset : 1455
- CU offset : 1455
- Attrs : name data_member_location decl_file decl_line type
- DW_TAG_member
- Name : _IO_read_base
- Offset : 1478
- CU offset : 1478
- Attrs : name data_member_location decl_file decl_line type
- DW_TAG_member
- Name : _IO_write_base
- Offset : 1502
- CU offset : 1502
- Attrs : name data_member_location decl_file decl_line type
- DW_TAG_member
- Name : _IO_write_ptr
- Offset : 1527
- CU offset : 1527
- Attrs : name data_member_location decl_file decl_line type
- DW_TAG_member
- Name : _IO_write_end
- Offset : 1551
- CU offset : 1551
- Attrs : name data_member_location decl_file decl_line type
- DW_TAG_member
- Name : _IO_buf_base
- Offset : 1575
- CU offset : 1575
- Attrs : name data_member_location decl_file decl_line type
- DW_TAG_member
- Name : _IO_buf_end
- Offset : 1598
- CU offset : 1598
- Attrs : name data_member_location decl_file decl_line type
- DW_TAG_member
- Name : _IO_save_base
- Offset : 1620
- CU offset : 1620
- Attrs : name data_member_location decl_file decl_line type
- DW_TAG_member
- Name : _IO_backup_base
- Offset : 1644
- CU offset : 1644
- Attrs : name data_member_location decl_file decl_line type
- DW_TAG_member
- Name : _IO_save_end
- Offset : 1670
- CU offset : 1670
- Attrs : name data_member_location decl_file decl_line type
- DW_TAG_member
- Name : _markers
- Offset : 1693
- CU offset : 1693
- Attrs : name data_member_location decl_file decl_line type
- DW_TAG_member
- Name : _chain
- Offset : 1712
- CU offset : 1712
- Attrs : name data_member_location decl_file decl_line type
- DW_TAG_member
- Name : _fileno
- Offset : 1729
- CU offset : 1729
- Attrs : name data_member_location decl_file decl_line type
- DW_TAG_member
- Name : _blksize
- Offset : 1747
- CU offset : 1747
- Attrs : name data_member_location decl_file decl_line type
- DW_TAG_member
- Name : _old_offset
- Offset : 1766
- CU offset : 1766
- Attrs : name data_member_location decl_file decl_line type
- DW_TAG_member
- Name : _cur_column
- Offset : 1788
- CU offset : 1788
- Attrs : name data_member_location decl_file decl_line type
- DW_TAG_member
- Name : _vtable_offset
- Offset : 1810
- CU offset : 1810
- Attrs : name data_member_location decl_file decl_line type
- DW_TAG_member
- Name : _shortbuf
- Offset : 1835
- CU offset : 1835
- Attrs : name data_member_location decl_file decl_line type
- DW_TAG_member
- Name : _lock
- Offset : 1855
- CU offset : 1855
- Attrs : name data_member_location decl_file decl_line type
- DW_TAG_member
- Name : _offset
- Offset : 1871
- CU offset : 1871
- Attrs : name data_member_location decl_file decl_line type
- DW_TAG_member
- Name : _unused2
- Offset : 1889
- CU offset : 1889
- Attrs : name data_member_location decl_file decl_line type
- DW_TAG_structure_type
- Name : _IO_marker
- Offset : 1909
- CU offset : 1909
- Attrs : sibling name byte_size decl_file decl_line
- byte size : 12
- DW_TAG_member
- Name : _next
- Offset : 1928
- CU offset : 1928
- Attrs : name data_member_location decl_file decl_line type
- DW_TAG_member
- Name : _sbuf
- Offset : 1944
- CU offset : 1944
- Attrs : name data_member_location decl_file decl_line type
- DW_TAG_member
- Name : _pos
- Offset : 1960
- CU offset : 1960
- Attrs : name data_member_location decl_file decl_line type
- DW_TAG_pointer_type
- Name : * NO NAME *
- Offset : 1976
- CU offset : 1976
- Attrs : byte_size type
- byte size : 4
- DW_TAG_pointer_type
- Name : * NO NAME *
- Offset : 1982
- CU offset : 1982
- Attrs : byte_size type
- byte size : 4
- DW_TAG_array_type
- Name : * NO NAME *
- Offset : 1988
- CU offset : 1988
- Attrs : sibling type
- DW_TAG_subrange_type
- Name : * NO NAME *
- Offset : 1997
- CU offset : 1997
- Attrs : upper_bound type
- DW_TAG_pointer_type
- Name : * NO NAME *
- Offset : 2004
- CU offset : 2004
- Attrs : byte_size
- byte size : 4
- DW_TAG_array_type
- Name : * NO NAME *
- Offset : 2006
- CU offset : 2006
- Attrs : sibling type
- DW_TAG_subrange_type
- Name : * NO NAME *
- Offset : 2015
- CU offset : 2015
- Attrs : upper_bound type
- DW_TAG_typedef
- Name : FILE
- Offset : 2022
- CU offset : 2022
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : wchar_t
- Offset : 2034
- CU offset : 2034
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : wint_t
- Offset : 2050
- CU offset : 2050
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : _G_int16_t
- Offset : 2065
- CU offset : 2065
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : _G_int32_t
- Offset : 2083
- CU offset : 2083
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : _G_uint16_t
- Offset : 2101
- CU offset : 2101
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : _G_uint32_t
- Offset : 2120
- CU offset : 2120
- Attrs : name decl_file decl_line type
- DW_TAG_structure_type
- Name : _IO_jump_t
- Offset : 2139
- CU offset : 2139
- Attrs : name declaration
- DW_TAG_typedef
- Name : _IO_lock_t
- Offset : 2152
- CU offset : 2152
- Attrs : name decl_file decl_line
- DW_TAG_typedef
- Name : _IO_FILE
- Offset : 2166
- CU offset : 2166
- Attrs : name decl_file decl_line type
- DW_TAG_structure_type
- Name : _IO_FILE_plus
- Offset : 2182
- CU offset : 2182
- Attrs : name declaration
- DW_TAG_typedef
- Name : __io_read_fn
- Offset : 2198
- CU offset : 2198
- Attrs : name decl_file decl_line type
- DW_TAG_subroutine_type
- Name : * NO NAME *
- Offset : 2219
- CU offset : 2219
- Attrs : sibling prototyped type
- DW_TAG_formal_parameter
- Name : * NO NAME *
- Offset : 2229
- CU offset : 2229
- Attrs : type
- DW_TAG_formal_parameter
- Name : * NO NAME *
- Offset : 2234
- CU offset : 2234
- Attrs : type
- DW_TAG_formal_parameter
- Name : * NO NAME *
- Offset : 2239
- CU offset : 2239
- Attrs : type
- DW_TAG_typedef
- Name : __io_write_fn
- Offset : 2245
- CU offset : 2245
- Attrs : name decl_file decl_line type
- DW_TAG_subroutine_type
- Name : * NO NAME *
- Offset : 2267
- CU offset : 2267
- Attrs : sibling prototyped type
- DW_TAG_formal_parameter
- Name : * NO NAME *
- Offset : 2277
- CU offset : 2277
- Attrs : type
- DW_TAG_formal_parameter
- Name : * NO NAME *
- Offset : 2282
- CU offset : 2282
- Attrs : type
- DW_TAG_formal_parameter
- Name : * NO NAME *
- Offset : 2287
- CU offset : 2287
- Attrs : type
- DW_TAG_pointer_type
- Name : * NO NAME *
- Offset : 2293
- CU offset : 2293
- Attrs : byte_size type
- byte size : 4
- DW_TAG_const_type
- Name : * NO NAME *
- Offset : 2299
- CU offset : 2299
- Attrs : type
- DW_TAG_typedef
- Name : __io_seek_fn
- Offset : 2304
- CU offset : 2304
- Attrs : name decl_file decl_line type
- DW_TAG_subroutine_type
- Name : * NO NAME *
- Offset : 2325
- CU offset : 2325
- Attrs : sibling prototyped type
- DW_TAG_formal_parameter
- Name : * NO NAME *
- Offset : 2335
- CU offset : 2335
- Attrs : type
- DW_TAG_formal_parameter
- Name : * NO NAME *
- Offset : 2340
- CU offset : 2340
- Attrs : type
- DW_TAG_formal_parameter
- Name : * NO NAME *
- Offset : 2345
- CU offset : 2345
- Attrs : type
- DW_TAG_typedef
- Name : __io_close_fn
- Offset : 2351
- CU offset : 2351
- Attrs : name decl_file decl_line type
- DW_TAG_subroutine_type
- Name : * NO NAME *
- Offset : 2373
- CU offset : 2373
- Attrs : sibling prototyped type
- DW_TAG_formal_parameter
- Name : * NO NAME *
- Offset : 2383
- CU offset : 2383
- Attrs : type
- DW_TAG_typedef
- Name : fpos_t
- Offset : 2389
- CU offset : 2389
- Attrs : name decl_file decl_line type
- DW_TAG_typedef
- Name : off_t
- Offset : 2403
- CU offset : 2403
- Attrs : name decl_file decl_line type
-New CU: off = 2418, hsize = 11, ab = 213, as = 4, os = 4
- DW_TAG_compile_unit
- Name : f.c
- Offset : 2429
- CU offset : 11
- Attrs : name stmt_list low_pc high_pc language comp_dir producer
- low PC : 0x10000490
- high PC : 0x100004b0
- language : 1
- directory : /shoggoth/drepper
- producer : GNU C 2.96-laurel-000912
- DW_TAG_subprogram
- Name : foo
- Offset : 2490
- CU offset : 72
- Attrs : name low_pc high_pc prototyped decl_file decl_line external frame_base type
- low PC : 0x10000490
- high PC : 0x100004b0
- DW_TAG_base_type
- Name : int
- Offset : 2513
- CU offset : 95
- Attrs : name byte_size encoding
- byte size : 4
-New CU: off = 2521, hsize = 11, ab = 267, as = 4, os = 4
- DW_TAG_compile_unit
- Name : m.c
- Offset : 2532
- CU offset : 11
- Attrs : name stmt_list low_pc high_pc language comp_dir producer
- low PC : 0x100004b0
- high PC : 0x10000514
- language : 1
- directory : /shoggoth/drepper
- producer : GNU C 2.96-laurel-000912
- DW_TAG_subprogram
- Name : main
- Offset : 2593
- CU offset : 72
- Attrs : sibling name low_pc high_pc prototyped decl_file decl_line external frame_base type
- low PC : 0x100004b0
- high PC : 0x10000514
- DW_TAG_subprogram
- Name : bar
- Offset : 2621
- CU offset : 100
- Attrs : sibling name decl_file decl_line declaration external type
- DW_TAG_unspecified_parameters
- Name : * NO NAME *
- Offset : 2638
- CU offset : 117
- Attrs :
- DW_TAG_subprogram
- Name : foo
- Offset : 2640
- CU offset : 119
- Attrs : name decl_file decl_line declaration external type
- DW_TAG_unspecified_parameters
- Name : * NO NAME *
- Offset : 2653
- CU offset : 132
- Attrs :
- DW_TAG_base_type
- Name : int
- Offset : 2656
- CU offset : 135
- Attrs : name byte_size encoding
- byte size : 4
- DW_TAG_variable
- Name : a
- Offset : 2663
- CU offset : 142
- Attrs : location name decl_file decl_line external type
-EOF
-
-exit 0
diff --git a/tests/run-strings-test.sh b/tests/run-strings-test.sh
deleted file mode 100755
index a5dac63..0000000
--- a/tests/run-strings-test.sh
+++ /dev/null
@@ -1,478 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2005, 2006, 2008 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-# Written by Ulrich Drepper <drepper@redhat.com>, 2005.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-files="testfile `seq 2 9 | while read n; do echo testfile$n; done`"
-testfiles $files
-
-testrun_compare ../src/strings -tx -f $files <<\EOF
-testfile: f4 /lib/ld-linux.so.2
-testfile: 1c9 __gmon_start__
-testfile: 1d8 libc.so.6
-testfile: 1e2 __cxa_finalize
-testfile: 1f1 __deregister_frame_info
-testfile: 209 _IO_stdin_used
-testfile: 218 __libc_start_main
-testfile: 22a __register_frame_info
-testfile: 240 GLIBC_2.1.3
-testfile: 24c GLIBC_2.0
-testfile: 338 PTRh
-testfile: 345 QVh,
-testfile2: 114 /lib/ld.so.1
-testfile2: 1f1 __gmon_start__
-testfile2: 200 __deregister_frame_info
-testfile2: 218 __register_frame_info
-testfile2: 22e libc.so.6
-testfile2: 238 __cxa_finalize
-testfile2: 247 _IO_stdin_used
-testfile2: 256 __libc_start_main
-testfile2: 268 GLIBC_2.1.3
-testfile2: 274 GLIBC_2.0
-testfile2: 488 }a[xN
-testfile2: 4a8 }a[xN
-testfile2: 50c }a[xN
-testfile2: 540 }?Kx
-testfile3: f4 /lib/ld-linux.so.2
-testfile3: 1c9 __gmon_start__
-testfile3: 1d8 libc.so.6
-testfile3: 1e2 __cxa_finalize
-testfile3: 1f1 __deregister_frame_info
-testfile3: 209 _IO_stdin_used
-testfile3: 218 __libc_start_main
-testfile3: 22a __register_frame_info
-testfile3: 240 GLIBC_2.1.3
-testfile3: 24c GLIBC_2.0
-testfile3: 338 PTRh
-testfile3: 345 QVh,
-testfile4: f4 /lib/ld-linux.so.2
-testfile4: 8e1 __gmon_start__
-testfile4: 8f0 __terminate_func
-testfile4: 901 stderr
-testfile4: 908 __tf9type_info
-testfile4: 917 __tf16__user_type_info
-testfile4: 92e __tf19__pointer_type_info
-testfile4: 948 __tf16__attr_type_info
-testfile4: 95f __tf16__func_type_info
-testfile4: 976 __vt_9type_info
-testfile4: 986 __vt_19__pointer_type_info
-testfile4: 9a1 __vt_16__attr_type_info
-testfile4: 9b9 __vt_16__func_type_info
-testfile4: 9d1 __vt_16__ptmf_type_info
-testfile4: 9e9 __vt_16__ptmd_type_info
-testfile4: a01 __vt_17__array_type_info
-testfile4: a1a __tiv
-testfile4: a20 __vt_19__builtin_type_info
-testfile4: a3b __tix
-testfile4: a41 __til
-testfile4: a47 __tii
-testfile4: a4d __tis
-testfile4: a53 __tib
-testfile4: a59 __tic
-testfile4: a5f __tiw
-testfile4: a65 __tir
-testfile4: a6b __tid
-testfile4: a71 __tif
-testfile4: a77 __tiUi
-testfile4: a7e __tiUl
-testfile4: a85 __tiUx
-testfile4: a8c __tiUs
-testfile4: a93 __tiUc
-testfile4: a9a __tiSc
-testfile4: aa1 __ti19__pointer_type_info
-testfile4: abb __ti9type_info
-testfile4: aca __ti16__attr_type_info
-testfile4: ae1 __ti19__builtin_type_info
-testfile4: afb __ti16__func_type_info
-testfile4: b12 __ti16__ptmf_type_info
-testfile4: b29 __ti16__ptmd_type_info
-testfile4: b40 __ti17__array_type_info
-testfile4: b58 __cplus_type_matcher
-testfile4: b6d __vt_13bad_exception
-testfile4: b82 __vt_9exception
-testfile4: b92 _._13bad_exception
-testfile4: ba5 __vt_8bad_cast
-testfile4: bb4 _._8bad_cast
-testfile4: bc1 __vt_10bad_typeid
-testfile4: bd3 _._10bad_typeid
-testfile4: be3 __ti9exception
-testfile4: bf2 __ti13bad_exception
-testfile4: c06 __vt_16__user_type_info
-testfile4: c1e __vt_17__class_type_info
-testfile4: c37 __vt_14__si_type_info
-testfile4: c4d __ti8bad_cast
-testfile4: c5b __ti10bad_typeid
-testfile4: c6c __ti16__user_type_info
-testfile4: c83 __ti14__si_type_info
-testfile4: c98 __ti17__class_type_info
-testfile4: cb0 libc.so.6
-testfile4: cba __register_frame
-testfile4: ccb pthread_create
-testfile4: cda pthread_getspecific
-testfile4: cee pthread_key_delete
-testfile4: d01 __cxa_finalize
-testfile4: d10 malloc
-testfile4: d17 __frame_state_for
-testfile4: d29 abort
-testfile4: d2f __register_frame_table
-testfile4: d46 fprintf
-testfile4: d4e pthread_once
-testfile4: d5b __deregister_frame_info
-testfile4: d73 pthread_key_create
-testfile4: d86 memset
-testfile4: d8d strcmp
-testfile4: d94 pthread_mutex_unlock
-testfile4: da9 __deregister_frame
-testfile4: dbc pthread_mutex_lock
-testfile4: dcf _IO_stdin_used
-testfile4: dde __libc_start_main
-testfile4: df0 strlen
-testfile4: df7 __register_frame_info_table
-testfile4: e13 __register_frame_info
-testfile4: e29 pthread_setspecific
-testfile4: e3d free
-testfile4: e42 GLIBC_2.1.3
-testfile4: e4e GLIBC_2.0
-testfile4: 1308 PTRh<
-testfile4: 194b [^_]
-testfile4: 19bf [^_]
-testfile4: 1dd9 wT9L>
-testfile4: 1f3b [^_]
-testfile4: 1fae [^_]
-testfile4: 21c1 BZQRP
-testfile4: 237f [^_]
-testfile4: 2431 JWRV
-testfile4: 2454 [^_]
-testfile4: 2506 JWRV
-testfile4: 2529 [^_]
-testfile4: 2b6c [^_]
-testfile4: 2b9d ZYPV
-testfile4: 2c28 [^_]
-testfile4: 2c4d ZYPV
-testfile4: 2ce2 [^_]
-testfile4: 2dfb X^_]
-testfile4: 2fc8 [^_]
-testfile4: 307d tq;F
-testfile4: 315a [^_]
-testfile4: 31a5 :zt 1
-testfile4: 3238 [^_]
-testfile4: 32f8 AXY_VR
-testfile4: 334a [^_]
-testfile4: 37ab [^_]
-testfile4: 38b8 sU;E
-testfile4: 38f2 QRPV
-testfile4: 3926 [^_]
-testfile4: 3bfe QRWP
-testfile4: 3e65 [^_]
-testfile4: 4136 [^_]
-testfile4: 472d [^_]
-testfile4: 47a5 0[^_]
-testfile4: 48ab [^_]
-testfile4: 4ab1 _ZPV
-testfile4: 4b53 _ZPV
-testfile4: 4bd3 _ZPV
-testfile4: 4e05 PQWj
-testfile4: 4f75 [^_]
-testfile4: 4f9b u$;E u
-testfile4: 4feb [^_]
-testfile4: 5080 [^_]
-testfile4: 50a8 }$9u
-testfile4: 5149 [^_]
-testfile4: 51b0 [^_]
-testfile4: 539b [^_]
-testfile4: 53b5 E 9E
-testfile4: 540d x!)E
-testfile4: 5598 U$ B
-testfile4: 571c [^_]
-testfile4: 5819 [^_]
-testfile4: 5922 [^_]
-testfile4: 59c2 [^_]
-testfile4: 5a62 [^_]
-testfile4: 5b02 [^_]
-testfile4: 5ba2 [^_]
-testfile4: 5c42 [^_]
-testfile4: 5ce2 [^_]
-testfile4: 6112 [^_]
-testfile4: 62bb [^_]
-testfile4: 639b [^_]
-testfile4: 6436 [^_]
-testfile4: 6468 val is zero
-testfile4: 6480 Internal Compiler Bug: No runtime type matcher.
-testfile4: 64dc 19__pointer_type_info
-testfile4: 64f2 16__attr_type_info
-testfile4: 6505 19__builtin_type_info
-testfile4: 651b 16__func_type_info
-testfile4: 652e 16__ptmf_type_info
-testfile4: 6541 16__ptmd_type_info
-testfile4: 6554 17__array_type_info
-testfile4: 6568 9exception
-testfile4: 6573 13bad_exception
-testfile4: 6583 9type_info
-testfile4: 658e 8bad_cast
-testfile4: 6598 10bad_typeid
-testfile4: 65a5 16__user_type_info
-testfile4: 65b8 14__si_type_info
-testfile4: 65c9 17__class_type_info
-testfile4: 6fc1 H. $
-testfile5: f4 /lib/ld-linux.so.2
-testfile5: 1c9 __gmon_start__
-testfile5: 1d8 libc.so.6
-testfile5: 1e2 __cxa_finalize
-testfile5: 1f1 __deregister_frame_info
-testfile5: 209 _IO_stdin_used
-testfile5: 218 __libc_start_main
-testfile5: 22a __register_frame_info
-testfile5: 240 GLIBC_2.1.3
-testfile5: 24c GLIBC_2.0
-testfile5: 338 PTRh
-testfile5: 345 QVhD
-testfile6: 114 /lib/ld-linux.so.2
-testfile6: 3d9 libstdc++.so.5
-testfile6: 3e8 _ZTVSt16invalid_argument
-testfile6: 401 _ZNSaIcEC1Ev
-testfile6: 40e _ZTSSt16invalid_argument
-testfile6: 427 _ZTVN10__cxxabiv120__si_class_type_infoE
-testfile6: 450 _ZNSsD1Ev
-testfile6: 45a _ZdlPv
-testfile6: 461 __cxa_end_catch
-testfile6: 471 __gxx_personality_v0
-testfile6: 486 _ZTISt9exception
-testfile6: 497 _ZNSaIcED1Ev
-testfile6: 4a4 _ZTISt11logic_error
-testfile6: 4b8 _ZNSt16invalid_argumentD1Ev
-testfile6: 4d4 _ZTVN10__cxxabiv117__class_type_infoE
-testfile6: 4fa __cxa_throw
-testfile6: 506 _ZNSt16invalid_argumentC1ERKSs
-testfile6: 525 _ZNSsC1EPKcRKSaIcE
-testfile6: 538 _ZNSt11logic_errorD2Ev
-testfile6: 54f _ZTVN10__cxxabiv121__vmi_class_type_infoE
-testfile6: 579 _ZNSt16invalid_argumentD0Ev
-testfile6: 595 __cxa_begin_catch
-testfile6: 5a7 __cxa_allocate_exception
-testfile6: 5c0 _ZNKSt11logic_error4whatEv
-testfile6: 5db _Jv_RegisterClasses
-testfile6: 5ef _ZTISt16invalid_argument
-testfile6: 608 __gmon_start__
-testfile6: 617 libm.so.6
-testfile6: 621 _IO_stdin_used
-testfile6: 630 libgcc_s.so.1
-testfile6: 63e _Unwind_Resume
-testfile6: 64d libc.so.6
-testfile6: 657 __libc_start_main
-testfile6: 669 GCC_3.0
-testfile6: 671 GLIBC_2.0
-testfile6: 67b GLIBCPP_3.2
-testfile6: 687 CXXABI_1.2
-testfile6: 908 PTRh
-testfile6: e48 gdb.1
-testfile6: ec8 N10__gnu_test9gnu_obj_1E
-testfile6: ee1 N10__gnu_test9gnu_obj_2IiEE
-testfile6: efd N10__gnu_test9gnu_obj_2IlEE
-testfile6: f19 St16invalid_argument
-testfile7: 114 /lib/ld-linux.so.2
-testfile7: 3d9 libstdc++.so.5
-testfile7: 3e8 _ZTVSt16invalid_argument
-testfile7: 401 _ZNSaIcEC1Ev
-testfile7: 40e _ZTSSt16invalid_argument
-testfile7: 427 _ZTVN10__cxxabiv120__si_class_type_infoE
-testfile7: 450 _ZNSsD1Ev
-testfile7: 45a _ZdlPv
-testfile7: 461 __cxa_end_catch
-testfile7: 471 __gxx_personality_v0
-testfile7: 486 _ZTISt9exception
-testfile7: 497 _ZNSaIcED1Ev
-testfile7: 4a4 _ZTISt11logic_error
-testfile7: 4b8 _ZNSt16invalid_argumentD1Ev
-testfile7: 4d4 _ZTVN10__cxxabiv117__class_type_infoE
-testfile7: 4fa __cxa_throw
-testfile7: 506 _ZNSt16invalid_argumentC1ERKSs
-testfile7: 525 _ZNSsC1EPKcRKSaIcE
-testfile7: 538 _ZNSt11logic_errorD2Ev
-testfile7: 54f _ZTVN10__cxxabiv121__vmi_class_type_infoE
-testfile7: 579 _ZNSt16invalid_argumentD0Ev
-testfile7: 595 __cxa_begin_catch
-testfile7: 5a7 __cxa_allocate_exception
-testfile7: 5c0 _ZNKSt11logic_error4whatEv
-testfile7: 5db _Jv_RegisterClasses
-testfile7: 5ef _ZTISt16invalid_argument
-testfile7: 608 __gmon_start__
-testfile7: 617 libm.so.6
-testfile7: 621 _IO_stdin_used
-testfile7: 630 libgcc_s.so.1
-testfile7: 63e _Unwind_Resume
-testfile7: 64d libc.so.6
-testfile7: 657 __libc_start_main
-testfile7: 669 GCC_3.0
-testfile7: 671 GLIBC_2.0
-testfile7: 67b GLIBCPP_3.2
-testfile7: 687 CXXABI_1.2
-testfile7: 908 PTRh
-testfile7: e48 gdb.1
-testfile7: ec8 N10__gnu_test9gnu_obj_1E
-testfile7: ee1 N10__gnu_test9gnu_obj_2IiEE
-testfile7: efd N10__gnu_test9gnu_obj_2IlEE
-testfile7: f19 St16invalid_argument
-testfile8: 79 XZh;
-testfile8: 87 YXh<
-testfile8: 14f SQh[
-testfile8: 259 t5Wj
-testfile8: 502 WRVQ
-testfile8: 1fe7 ZYPj
-testfile8: 2115 u'Pj
-testfile8: 7bba FILE
-testfile8: 7bbf preserve-dates
-testfile8: 7bce remove-comment
-testfile8: 7bdd Remove .comment section
-testfile8: 7bf6 ${prefix}/share
-testfile8: 7c06 elfutils
-testfile8: 7c0f a.out
-testfile8: 7c15 0.58
-testfile8: 7c1a strip (Red Hat %s) %s
-testfile8: 7c31 2002
-testfile8: 7c36 Ulrich Drepper
-testfile8: 7c45 Written by %s.
-testfile8: 7c55 cannot stat input file "%s"
-testfile8: 7c71 %s: INTERNAL ERROR: %s
-testfile8: 7c88 while opening "%s"
-testfile8: 7c9b handle_elf
-testfile8: 7ca6 ../../src/strip.c
-testfile8: 7cb8 shdr_info[cnt].group_idx != 0
-testfile8: 7cd6 illformed file `%s'
-testfile8: 7cea elf_ndxscn (scn) == cnt
-testfile8: 7d02 .shstrtab
-testfile8: 7d0c while writing `%s': %s
-testfile8: 7d23 ((sym->st_info) & 0xf) == 3
-testfile8: 7d3f shndxdata != ((void *)0)
-testfile8: 7d58 scn != ((void *)0)
-testfile8: 7d6b .gnu_debuglink
-testfile8: 7d7a .comment
-testfile8: 7d83 cannot open `%s'
-testfile8: 7da0 Place stripped output into FILE
-testfile8: 7dc0 Extract the removed sections into FILE
-testfile8: 7e00 Copy modified/access timestamps to the output
-testfile8: 7e40 Only one input file allowed together with '-o' and '-f'
-testfile8: 7e80 Copyright (C) %s Red Hat, Inc.
-testfile8: 7e9f This is free software; see the source for copying conditions. There is NO
-testfile8: 7eea warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-testfile8: 7f40 Report bugs to <drepper@redhat.com>.
-testfile8: 7f80 %s: File format not recognized
-testfile8: 7fa0 cannot set access and modification date of "%s"
-testfile8: 7fe0 cannot create new file `%s': %s
-testfile8: 8000 error while finishing `%s': %s
-testfile8: 8020 shdr_info[shdr_info[cnt].shdr.sh_link].version_idx == 0
-testfile8: 8060 shdr_info[shdr_info[cnt].shdr.sh_link].symtab_idx == 0
-testfile8: 80a0 %s: error while creating ELF header: %s
-testfile8: 80e0 %s: error while reading the file: %s
-testfile8: 8120 sec < 0xff00 || shndxdata != ((void *)0)
-testfile8: 8160 (versiondata->d_size / sizeof (GElf_Versym)) >= shdr_info[cnt].data->d_size / elsize
-testfile8: 81c0 shdr_info[cnt].shdr.sh_type == 11
-testfile8: 8200 (versiondata->d_size / sizeof (Elf32_Word)) >= shdr_info[cnt].data->d_size / elsize
-testfile8: 8260 shdr_info[cnt].shdr.sh_type == 18
-testfile8: 82a0 shdr_info[cnt].data != ((void *)0)
-testfile8: 82e0 elf_ndxscn (shdr_info[cnt].newscn) == idx
-testfile8: 8320 while create section header section: %s
-testfile8: 8360 cannot allocate section data: %s
-testfile8: 83a0 elf_ndxscn (shdr_info[cnt].newscn) == shdr_info[cnt].idx
-testfile8: 83e0 while generating output file: %s
-testfile8: 8420 while preparing output for `%s'
-testfile8: 8440 shdr_info[cnt].shdr.sh_type == 2
-testfile8: 8480 shdr_info[idx].data != ((void *)0)
-testfile8: 84c0 cannot determine number of sections: %s
-testfile8: 8500 cannot get section header string table index
-testfile8: 85c0 Discard symbols from object files.
-testfile8: 85e3 [FILE...]
-testfile9: 79 XZh;
-testfile9: 87 YXh<
-testfile9: 14f SQh[
-testfile9: 259 t5Wj
-testfile9: 502 WRVQ
-testfile9: 1fe7 ZYPj
-testfile9: 2115 u'Pj
-testfile9: 3414 FILE
-testfile9: 3419 preserve-dates
-testfile9: 3428 remove-comment
-testfile9: 3437 Remove .comment section
-testfile9: 3450 ${prefix}/share
-testfile9: 3460 elfutils
-testfile9: 3469 a.out
-testfile9: 346f 0.58
-testfile9: 3474 strip (Red Hat %s) %s
-testfile9: 348b 2002
-testfile9: 3490 Ulrich Drepper
-testfile9: 349f Written by %s.
-testfile9: 34af cannot stat input file "%s"
-testfile9: 34cb %s: INTERNAL ERROR: %s
-testfile9: 34e2 while opening "%s"
-testfile9: 34f5 handle_elf
-testfile9: 3500 ../../src/strip.c
-testfile9: 3512 shdr_info[cnt].group_idx != 0
-testfile9: 3530 illformed file `%s'
-testfile9: 3544 elf_ndxscn (scn) == cnt
-testfile9: 355c .shstrtab
-testfile9: 3566 while writing `%s': %s
-testfile9: 357d ((sym->st_info) & 0xf) == 3
-testfile9: 3599 shndxdata != ((void *)0)
-testfile9: 35b2 scn != ((void *)0)
-testfile9: 35c5 .gnu_debuglink
-testfile9: 35d4 .comment
-testfile9: 35dd cannot open `%s'
-testfile9: 3600 Place stripped output into FILE
-testfile9: 3620 Extract the removed sections into FILE
-testfile9: 3660 Copy modified/access timestamps to the output
-testfile9: 36a0 Only one input file allowed together with '-o' and '-f'
-testfile9: 36e0 Copyright (C) %s Red Hat, Inc.
-testfile9: 36ff This is free software; see the source for copying conditions. There is NO
-testfile9: 374a warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-testfile9: 37a0 Report bugs to <drepper@redhat.com>.
-testfile9: 37e0 %s: File format not recognized
-testfile9: 3800 cannot set access and modification date of "%s"
-testfile9: 3840 cannot create new file `%s': %s
-testfile9: 3860 error while finishing `%s': %s
-testfile9: 3880 shdr_info[shdr_info[cnt].shdr.sh_link].version_idx == 0
-testfile9: 38c0 shdr_info[shdr_info[cnt].shdr.sh_link].symtab_idx == 0
-testfile9: 3900 %s: error while creating ELF header: %s
-testfile9: 3940 %s: error while reading the file: %s
-testfile9: 3980 sec < 0xff00 || shndxdata != ((void *)0)
-testfile9: 39c0 (versiondata->d_size / sizeof (GElf_Versym)) >= shdr_info[cnt].data->d_size / elsize
-testfile9: 3a20 shdr_info[cnt].shdr.sh_type == 11
-testfile9: 3a60 (versiondata->d_size / sizeof (Elf32_Word)) >= shdr_info[cnt].data->d_size / elsize
-testfile9: 3ac0 shdr_info[cnt].shdr.sh_type == 18
-testfile9: 3b00 shdr_info[cnt].data != ((void *)0)
-testfile9: 3b40 elf_ndxscn (shdr_info[cnt].newscn) == idx
-testfile9: 3b80 while create section header section: %s
-testfile9: 3bc0 cannot allocate section data: %s
-testfile9: 3c00 elf_ndxscn (shdr_info[cnt].newscn) == shdr_info[cnt].idx
-testfile9: 3c40 while generating output file: %s
-testfile9: 3c80 while preparing output for `%s'
-testfile9: 3ca0 shdr_info[cnt].shdr.sh_type == 2
-testfile9: 3ce0 shdr_info[idx].data != ((void *)0)
-testfile9: 3d20 cannot determine number of sections: %s
-testfile9: 3d60 cannot get section header string table index
-testfile9: 3e20 Discard symbols from object files.
-testfile9: 3e43 [FILE...]
-EOF
-
-exit 0
diff --git a/tests/run-strip-test.sh b/tests/run-strip-test.sh
deleted file mode 100644
index e056f89..0000000
--- a/tests/run-strip-test.sh
+++ /dev/null
@@ -1,64 +0,0 @@
-#! /bin/sh
-# Copyright (C) 1999, 2000, 2002, 2003, 2005, 2007, 2008 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-# Written by Ulrich Drepper <drepper@redhat.com>, 1999.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-original=${original:-testfile11}
-stripped=${stripped:-testfile7}
-debugout=${debugfile:+-f testfile.debug.temp -F $debugfile}
-
-testfiles $original
-test x$stripped = xtestfile.temp || testfiles $stripped $debugfile
-
-tempfiles testfile.temp testfile.debug.temp testfile.unstrip
-
-testrun ../src/strip -o testfile.temp $debugout $original
-
-status=0
-
-cmp $stripped testfile.temp || status=$?
-
-# Check elflint and the expected result.
-testrun ../src/elflint -q testfile.temp || status=$?
-
-test -z "$debugfile" || {
-cmp $debugfile testfile.debug.temp || status=$?
-
-# Check elflint and the expected result.
-testrun ../src/elflint -q -d testfile.debug.temp || status=$?
-
-# Now test unstrip recombining those files.
-testrun ../src/unstrip -o testfile.unstrip testfile.temp testfile.debug.temp
-
-# Check that it came back whole.
-testrun ../src/elfcmp --hash-inexact $original testfile.unstrip
-}
-
-tempfiles testfile.sections
-testrun ../src/readelf -S testfile.temp > testfile.sections || status=$?
-fgrep ' .debug_' testfile.sections && status=1
-
-exit $status
diff --git a/tests/run-strip-test2.sh b/tests/run-strip-test2.sh
deleted file mode 100644
index a5858d2..0000000
--- a/tests/run-strip-test2.sh
+++ /dev/null
@@ -1,30 +0,0 @@
-#! /bin/sh
-# Copyright (C) 1999, 2000, 2002, 2005 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-# Written by Ulrich Drepper <drepper@redhat.com>, 1999.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-
-original=testfile8
-stripped=testfile9
-. $srcdir/run-strip-test.sh
diff --git a/tests/run-strip-test3.sh b/tests/run-strip-test3.sh
deleted file mode 100644
index 3d52f6e..0000000
--- a/tests/run-strip-test3.sh
+++ /dev/null
@@ -1,30 +0,0 @@
-#! /bin/sh
-# Copyright (C) 1999, 2000, 2002, 2003, 2005 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-# Written by Ulrich Drepper <drepper@redhat.com>, 1999.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-
-original=testfile12
-stripped=testfile13
-. $srcdir/run-strip-test.sh
diff --git a/tests/run-strip-test4.sh b/tests/run-strip-test4.sh
deleted file mode 100755
index 64924a9..0000000
--- a/tests/run-strip-test4.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-original=testfile11
-stripped=testfile37
-debugfile=testfile37.debug
-
-. $srcdir/run-strip-test.sh
diff --git a/tests/run-strip-test5.sh b/tests/run-strip-test5.sh
deleted file mode 100755
index 9fa9ebe..0000000
--- a/tests/run-strip-test5.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-original=testfile8
-stripped=testfile16
-debugfile=testfile16.debug
-
-. $srcdir/run-strip-test.sh
diff --git a/tests/run-strip-test6.sh b/tests/run-strip-test6.sh
deleted file mode 100755
index c59bf5e..0000000
--- a/tests/run-strip-test6.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-original=testfile12
-stripped=testfile35
-debugfile=testfile35.debug
-
-. $srcdir/run-strip-test.sh
diff --git a/tests/run-strip-test7.sh b/tests/run-strip-test7.sh
deleted file mode 100755
index c65cd05..0000000
--- a/tests/run-strip-test7.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-original=testfile39
-stripped=testfile40
-debugfile=testfile40.debug
-
-. $srcdir/run-strip-test.sh
diff --git a/tests/run-strip-test8.sh b/tests/run-strip-test8.sh
deleted file mode 100755
index fb9fa08..0000000
--- a/tests/run-strip-test8.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-original=testfile47
-stripped=testfile48
-debugfile=testfile48.debug
-
-. $srcdir/run-strip-test.sh
diff --git a/tests/run-unstrip-test.sh b/tests/run-unstrip-test.sh
deleted file mode 100755
index 8f0fc69..0000000
--- a/tests/run-unstrip-test.sh
+++ /dev/null
@@ -1,42 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2007 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-. $srcdir/test-subr.sh
-
-original=${original:-testfile12}
-stripped=${stripped:-testfile17}
-debugfile=${debugfile:-${stripped}.debug}
-
-testfiles $original $stripped $debugfile
-tempfiles testfile.unstrip
-
-# These are old reference output from run-test-strip6.sh, when
-# strip left the .debug file with unchanged sh_size in
-# stripped sections that shrank in the stripped file. strip
-# no longer does that, but unstrip must still handle it.
-
-testrun ../src/unstrip -o testfile.unstrip $stripped $debugfile
-
-testrun ../src/elfcmp --hash-inexact $original testfile.unstrip
diff --git a/tests/run-unstrip-test2.sh b/tests/run-unstrip-test2.sh
deleted file mode 100755
index 44074c1..0000000
--- a/tests/run-unstrip-test2.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-original=testfile11
-stripped=testfile15
-debugfile=testfile15.debug
-
-. $srcdir/run-unstrip-test.sh
diff --git a/tests/saridx.c b/tests/saridx.c
deleted file mode 100644
index d95777f..0000000
--- a/tests/saridx.c
+++ /dev/null
@@ -1,265 +0,0 @@
-/* Copyright (C) 1998, 1999, 2000, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <config.h>
-
-#include <error.h>
-#include <fcntl.h>
-#include <gelf.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <unistd.h>
-
-
-static const char *machines[] =
-{
-#define MACHINE(name) [name] = #name
- MACHINE (EM_NONE),
- MACHINE (EM_M32),
- MACHINE (EM_SPARC),
- MACHINE (EM_386),
- MACHINE (EM_68K),
- MACHINE (EM_88K),
- MACHINE (EM_860),
- MACHINE (EM_MIPS),
- MACHINE (EM_MIPS_RS3_LE),
- MACHINE (EM_PARISC),
- MACHINE (EM_VPP500),
- MACHINE (EM_SPARC32PLUS),
- MACHINE (EM_960),
- MACHINE (EM_PPC),
- MACHINE (EM_PPC64),
- MACHINE (EM_V800),
- MACHINE (EM_FR20),
- MACHINE (EM_RH32),
- MACHINE (EM_RCE),
- MACHINE (EM_ARM),
- MACHINE (EM_FAKE_ALPHA),
- MACHINE (EM_SH),
- MACHINE (EM_SPARCV9),
- MACHINE (EM_TRICORE),
- MACHINE (EM_ARC),
- MACHINE (EM_H8_300),
- MACHINE (EM_H8_300H),
- MACHINE (EM_H8S),
- MACHINE (EM_H8_500),
- MACHINE (EM_IA_64),
- MACHINE (EM_MIPS_X),
- MACHINE (EM_COLDFIRE),
- MACHINE (EM_68HC12),
- MACHINE (EM_MMA),
- MACHINE (EM_PCP),
- MACHINE (EM_NCPU),
- MACHINE (EM_NDR1),
- MACHINE (EM_STARCORE),
- MACHINE (EM_ME16),
- MACHINE (EM_ST100),
- MACHINE (EM_TINYJ),
- MACHINE (EM_FX66),
- MACHINE (EM_ST9PLUS),
- MACHINE (EM_ST7),
- MACHINE (EM_68HC16),
- MACHINE (EM_68HC11),
- MACHINE (EM_68HC08),
- MACHINE (EM_68HC05),
- MACHINE (EM_SVX),
- MACHINE (EM_ST19),
- MACHINE (EM_VAX)
-};
-
-
-int
-main (int argc, char *argv[])
-{
- int fd;
- Elf *elf;
- Elf_Cmd cmd;
- size_t n;
- int arg = 1;
- int verbose = 0;
-
- /* Recognize optional verbosity flag. */
- if (arg < argc && strcmp (argv[arg], "-v") == 0)
- {
- verbose = 1;
- ++arg;
- }
-
- /* Any more arguments available. */
- if (arg >= argc)
- error (EXIT_FAILURE, 0, "No input file given");
-
- /* Open the input file. */
- fd = open (argv[arg], O_RDONLY);
- if (fd == -1)
- {
- perror ("cannot open input file");
- exit (1);
- }
-
- /* Set the ELF version we are using here. */
- if (elf_version (EV_CURRENT) == EV_NONE)
- {
- puts ("ELF library too old");
- exit (1);
- }
-
- /* Start reading the file. */
- cmd = ELF_C_READ;
- elf = elf_begin (fd, cmd, NULL);
- if (elf == NULL)
- {
- printf ("elf_begin: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- /* If it is no archive punt. */
- if (elf_kind (elf) != ELF_K_AR)
- {
- printf ("%s is not an archive\n", argv[1]);
- exit (1);
- }
-
- if (verbose)
- {
- /* The verbose variant. We print a lot of information. */
- Elf *subelf;
- char buf[100];
- time_t t;
-
- /* Get the elements of the archive one after the other. */
- while ((subelf = elf_begin (fd, cmd, elf)) != NULL)
- {
- /* The the header for this element. */
- Elf_Arhdr *arhdr = elf_getarhdr (subelf);
-
- if (arhdr == NULL)
- {
- printf ("cannot get arhdr: %s\n", elf_errmsg (-1));
- break;
- }
-
- switch (elf_kind (subelf))
- {
- case ELF_K_ELF:
- fputs ("ELF file:\n", stdout);
- break;
-
- case ELF_K_AR:
- fputs ("archive:\n", stdout);
- break;
-
- default:
- fputs ("unknown file:\n", stdout);
- break;
- }
-
- /* Print general information. */
- t = arhdr->ar_date;
- strftime (buf, sizeof buf, "%Y-%m-%dT%H:%M:%S%z", gmtime (&t));
- printf (" name : \"%s\"\n"
- " time : %s\n"
- " uid : %ld\n"
- " gid : %ld\n"
- " mode : %o\n"
- " size : %ld\n"
- " rawname : \"%s\"\n",
- arhdr->ar_name,
- buf,
- (long int) arhdr->ar_uid,
- (long int) arhdr->ar_gid,
- arhdr->ar_mode,
- (long int) arhdr->ar_size,
- arhdr->ar_rawname);
-
- /* For ELF files we can provide some more information. */
- if (elf_kind (subelf) == ELF_K_ELF)
- {
- GElf_Ehdr ehdr;
-
- /* Get the ELF header. */
- if (gelf_getehdr (subelf, &ehdr) == NULL)
- printf (" *** cannot get ELF header: %s\n", elf_errmsg (-1));
- else
- {
- printf (" binary class : %s\n",
- ehdr.e_ident[EI_CLASS] == ELFCLASS32
- ? "ELFCLASS32" : "ELFCLASS64");
- printf (" data encoding: %s\n",
- ehdr.e_ident[EI_DATA] == ELFDATA2LSB
- ? "ELFDATA2LSB" : "ELFDATA2MSB");
- printf (" binary type : %s\n",
- ehdr.e_type == ET_REL
- ? "relocatable"
- : (ehdr.e_type == ET_EXEC
- ? "executable"
- : (ehdr.e_type == ET_DYN
- ? "dynamic"
- : "core file")));
- printf (" machine : %s\n",
- (ehdr.e_machine >= (sizeof (machines)
- / sizeof (machines[0]))
- || machines[ehdr.e_machine] == NULL)
- ? "???"
- : machines[ehdr.e_machine]);
- }
- }
-
- /* Get next archive element. */
- cmd = elf_next (subelf);
- if (elf_end (subelf) != 0)
- printf ("error while freeing sub-ELF descriptor: %s\n",
- elf_errmsg (-1));
- }
- }
- else
- {
- /* The simple version. Only print a bit of information. */
- Elf_Arsym *arsym = elf_getarsym (elf, &n);
-
- if (n == 0)
- printf ("no symbol table in archive: %s\n", elf_errmsg (-1));
- else
- {
- --n;
-
- while (n-- > 0)
- printf ("name = \"%s\", offset = %ld, hash = %lx\n",
- arsym[n].as_name, (long int) arsym[n].as_off,
- arsym[n].as_hash);
- }
- }
-
- /* Free the ELF handle. */
- if (elf_end (elf) != 0)
- printf ("error while freeing ELF descriptor: %s\n", elf_errmsg (-1));
-
- /* Close the underlying file. */
- close (fd);
-
- return 0;
-}
diff --git a/tests/scnnames.c b/tests/scnnames.c
deleted file mode 100644
index 4ced85c..0000000
--- a/tests/scnnames.c
+++ /dev/null
@@ -1,99 +0,0 @@
-/* Copyright (C) 1998, 1999, 2000, 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <config.h>
-
-#include <errno.h>
-#include <fcntl.h>
-#include <gelf.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-int
-main (int argc, char *argv[])
-{
- Elf *elf;
- int fd;
- GElf_Ehdr ehdr;
- size_t strndx;
- Elf_Scn *scn;
-
- if (argc < 2)
- {
- puts ("missing parameter");
- exit (1);
- }
-
- fd = open (argv[1], O_RDONLY);
- if (fd == -1)
- {
- printf ("cannot open \"%s\": %s\n", argv[1], strerror (errno));
- exit (1);
- }
-
- elf_version (EV_CURRENT);
-
- elf = elf_begin (fd, ELF_C_READ, NULL);
- if (elf == NULL)
- {
- printf ("cannot open ELF file: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- if (elf_kind (elf) != ELF_K_ELF)
- {
- printf ("\"%s\" is not an ELF file\n", argv[1]);
- exit (1);
- }
-
- if (gelf_getehdr (elf, &ehdr) == NULL)
- {
- printf ("cannot get the ELF header: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- strndx = ehdr.e_shstrndx;
-
- scn = NULL;
- while ((scn = elf_nextscn (elf, scn)) != NULL)
- {
- char *name = NULL;
- GElf_Shdr shdr;
-
- if (gelf_getshdr (scn, &shdr) != NULL)
- name = elf_strptr (elf, strndx, (size_t) shdr.sh_name);
-
- printf ("section: `%s'\n", name);
- }
-
- if (elf_end (elf) != 0)
- {
- printf ("error while freeing ELF descriptor: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- return 0;
-}
diff --git a/tests/sectiondump.c b/tests/sectiondump.c
deleted file mode 100644
index 3fdde54..0000000
--- a/tests/sectiondump.c
+++ /dev/null
@@ -1,190 +0,0 @@
-/* Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <config.h>
-
-#include <errno.h>
-#include <error.h>
-#include <fcntl.h>
-#include <gelf.h>
-#include <inttypes.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-
-/* Prototypes for local functions. */
-static int handle_section (Elf *elf, Elf_Scn *scn);
-static void print_bytes (Elf_Data *data);
-static void print_symtab (Elf *elf, Elf_Data *data);
-
-
-int
-main (int argc, char *argv[])
-{
- Elf *elf;
- int fd;
- int cnt;
-
- if (argc <= 1)
- exit (1);
-
- /* Open the test file. This is given as the first parameter to the
- program. */
- fd = open (argv[1], O_RDONLY);
- if (fd == -1)
- error (EXIT_FAILURE, errno, "cannot open input file `%s'", argv[1]);
-
- /* Set the library versio we expect. */
- elf_version (EV_CURRENT);
-
- /* Create the ELF descriptor. */
- elf = elf_begin (fd, ELF_C_READ, NULL);
- if (elf == NULL)
- error (EXIT_FAILURE, 0, "cannot create ELF descriptor: %s",
- elf_errmsg (0));
-
- /* Now proces all the sections mentioned in the rest of the command line. */
- for (cnt = 2; cnt < argc; ++cnt)
- if (handle_section (elf, elf_getscn (elf, atoi (argv[cnt]))) != 0)
- /* When we encounter an error stop immediately. */
- error (EXIT_FAILURE, 0, "while processing section %d: %s", cnt,
- elf_errmsg (0));
-
- /* Close the descriptor. */
- if (elf_end (elf) != 0)
- error (EXIT_FAILURE, 0, "failure while closing ELF descriptor: %s",
- elf_errmsg (0));
-
- return 0;
-}
-
-
-static int
-handle_section (Elf *elf, Elf_Scn *scn)
-{
- GElf_Ehdr *ehdr;
- GElf_Ehdr ehdr_mem;
- GElf_Shdr *shdr;
- GElf_Shdr shdr_mem;
- Elf_Data *data;
-
- /* First get the ELF and section header. */
- ehdr = gelf_getehdr (elf, &ehdr_mem);
- shdr = gelf_getshdr (scn, &shdr_mem);
- if (ehdr == NULL || shdr == NULL)
- return 1;
-
- /* Print the information from the ELF section header. */
- printf ("name = %s\n"
- "type = %" PRId32 "\n"
- "flags = %" PRIx64 "\n"
- "addr = %" PRIx64 "\n"
- "offset = %" PRIx64 "\n"
- "size = %" PRId64 "\n"
- "link = %" PRId32 "\n"
- "info = %" PRIx32 "\n"
- "addralign = %" PRIx64 "\n"
- "entsize = %" PRId64 "\n",
- elf_strptr (elf, ehdr->e_shstrndx, shdr->sh_name),
- shdr->sh_type,
- shdr->sh_flags,
- shdr->sh_addr,
- shdr->sh_offset,
- shdr->sh_size,
- shdr->sh_link,
- shdr->sh_info,
- shdr->sh_addralign,
- shdr->sh_entsize);
-
- /* Get the section data now. */
- data = elf_getdata (scn, NULL);
- if (data == NULL)
- return 1;
-
- /* Now proces the different section types accordingly. */
- switch (shdr->sh_type)
- {
- case SHT_SYMTAB:
- print_symtab (elf, data);
- break;
-
- case SHT_PROGBITS:
- default:
- print_bytes (data);
- break;
- }
-
- /* Separate form the next section. */
- puts ("");
-
- /* All done correctly. */
- return 0;
-}
-
-
-static void
-print_bytes (Elf_Data *data)
-{
- size_t size = data->d_size;
- off_t offset = data->d_off;
- unsigned char *buf = (unsigned char *) data->d_buf;
- size_t cnt;
-
- for (cnt = 0; cnt < size; cnt += 16)
- {
- size_t inner;
-
- printf ("%*Zx: ", sizeof (size_t) == 4 ? 8 : 16, (size_t) offset + cnt);
-
- for (inner = 0; inner < 16 && cnt + inner < size; ++inner)
- printf (" %02hhx", buf[cnt + inner]);
-
- puts ("");
- }
-}
-
-
-static void
-print_symtab (Elf *elf, Elf_Data *data)
-{
- int class = gelf_getclass (elf);
- size_t nsym = data->d_size / (class == ELFCLASS32
- ? sizeof (Elf32_Sym) : sizeof (Elf64_Sym));
- size_t cnt;
-
- for (cnt = 0; cnt < nsym; ++cnt)
- {
- GElf_Sym sym_mem;
- GElf_Sym *sym = gelf_getsym (data, cnt, &sym_mem);
-
- printf ("%5Zu: %*" PRIx64 " %6" PRIx64 " %4d\n",
- cnt,
- class == ELFCLASS32 ? 8 : 16,
- sym->st_value,
- sym->st_size,
- GELF_ST_TYPE (sym->st_info));
- }
-}
diff --git a/tests/sha1-tst.c b/tests/sha1-tst.c
deleted file mode 100644
index 9ff8141..0000000
--- a/tests/sha1-tst.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/* Copyright (C) 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2008.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <stdio.h>
-#include <string.h>
-
-#include <sha1.h>
-
-
-int
-main (void)
-{
- char buf[1000];
- int result = 0;
-
- struct sha1_ctx ctx;
- sha1_init_ctx (&ctx);
- sha1_process_bytes ("abc", 3, &ctx);
- sha1_finish_ctx (&ctx, buf);
- static const char expected1[SHA1_DIGEST_SIZE] =
- "\xa9\x99\x3e\x36\x47\x06\x81\x6a\xba\x3e"
- "\x25\x71\x78\x50\xc2\x6c\x9c\xd0\xd8\x9d";
- if (memcmp (buf, expected1, SHA1_DIGEST_SIZE) != 0)
- {
- puts ("test 1 failed");
- result = 1;
- }
-
- sha1_init_ctx (&ctx);
- sha1_process_bytes ("\
-abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 56, &ctx);
- sha1_finish_ctx (&ctx, buf);
- static const char expected2[SHA1_DIGEST_SIZE] =
- "\x84\x98\x3e\x44\x1c\x3b\xd2\x6e\xba\xae"
- "\x4a\xa1\xf9\x51\x29\xe5\xe5\x46\x70\xf1";
- if (memcmp (buf, expected2, SHA1_DIGEST_SIZE) != 0)
- {
- puts ("test 2 failed");
- result = 1;
- }
-
- sha1_init_ctx (&ctx);
- memset (buf, 'a', sizeof (buf));
- for (int i = 0; i < 1000; ++i)
- sha1_process_bytes (buf, sizeof (buf), &ctx);
- sha1_finish_ctx (&ctx, buf);
- static const char expected3[SHA1_DIGEST_SIZE] =
- "\x34\xaa\x97\x3c\xd4\xc4\xda\xa4\xf6\x1e"
- "\xeb\x2b\xdb\xad\x27\x31\x65\x34\x01\x6f";
- if (memcmp (buf, expected3, SHA1_DIGEST_SIZE) != 0)
- {
- puts ("test 3 failed");
- result = 1;
- }
-
- return result;
-}
diff --git a/tests/show-abbrev.c b/tests/show-abbrev.c
deleted file mode 100644
index 75fddf5..0000000
--- a/tests/show-abbrev.c
+++ /dev/null
@@ -1,139 +0,0 @@
-/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <config.h>
-
-#include <fcntl.h>
-#include <inttypes.h>
-#include ELFUTILS_HEADER(dw)
-#include <stdio.h>
-#include <unistd.h>
-
-
-int
-main (int argc, char *argv[])
-{
- int cnt;
-
- for (cnt = 1; cnt < argc; ++cnt)
- {
- int fd = open (argv[cnt], O_RDONLY);
- Dwarf *dbg = dwarf_begin (fd, DWARF_C_READ);
- if (dbg == NULL)
- {
- printf ("%s not usable: %s\n", argv[cnt], dwarf_errmsg (-1));
- close (fd);
- continue;
- }
-
- Dwarf_Off cuoff = 0;
- Dwarf_Off old_cuoff = 0;
- size_t hsize;
- while (dwarf_nextcu (dbg, cuoff, &cuoff, &hsize, NULL, NULL, NULL) == 0)
- {
- /* Get the DIE for the CU. */
- Dwarf_Die die;
- if (dwarf_offdie (dbg, old_cuoff + hsize, &die) == NULL)
- /* Something went wrong. */
- break;
-
- Dwarf_Off offset = 0;
-
- while (1)
- {
- size_t length;
- Dwarf_Abbrev *abbrev = dwarf_getabbrev (&die, offset, &length);
- if (abbrev == NULL || abbrev == DWARF_END_ABBREV)
- /* End of the list. */
- break;
-
- unsigned tag = dwarf_getabbrevtag (abbrev);
- if (tag == 0)
- {
- printf ("dwarf_getabbrevtag at offset %llu returned error: %s\n",
- (unsigned long long int) offset,
- dwarf_errmsg (-1));
- break;
- }
-
- unsigned code = dwarf_getabbrevcode (abbrev);
- if (code == 0)
- {
- printf ("dwarf_getabbrevcode at offset %llu returned error: %s\n",
- (unsigned long long int) offset,
- dwarf_errmsg (-1));
- break;
- }
-
- int children = dwarf_abbrevhaschildren (abbrev);
- if (children < 0)
- {
- printf ("dwarf_abbrevhaschildren at offset %llu returned error: %s\n",
- (unsigned long long int) offset,
- dwarf_errmsg (-1));
- break;
- }
-
- printf ("abbrev[%llu]: code = %u, tag = %u, children = %d\n",
- (unsigned long long int) offset, code, tag, children);
-
- size_t attrcnt;
- if (dwarf_getattrcnt (abbrev, &attrcnt) != 0)
- {
- printf ("dwarf_getattrcnt at offset %llu returned error: %s\n",
- (unsigned long long int) offset,
- dwarf_errmsg (-1));
- break;
- }
-
- unsigned int attr_num;
- unsigned int attr_form;
- Dwarf_Off aboffset;
- size_t j;
- for (j = 0; j < attrcnt; ++j)
- if (dwarf_getabbrevattr (abbrev, j, &attr_num, &attr_form,
- &aboffset))
- printf ("dwarf_getabbrevattr for abbrev[%llu] and index %zu failed\n",
- (unsigned long long int) offset, j);
- else
- printf ("abbrev[%llu]: attr[%zu]: code = %u, form = %u, offset = %" PRIu64 "\n",
- (unsigned long long int) offset, j, attr_num,
- attr_form, (uint64_t) aboffset);
-
- offset += length;
- }
-
- old_cuoff = cuoff;
- }
-
- if (dwarf_end (dbg) != 0)
- printf ("dwarf_end failed for %s: %s\n", argv[cnt],
- dwarf_errmsg (-1));
-
- close (fd);
- }
-
- return 0;
-}
diff --git a/tests/show-die-info.c b/tests/show-die-info.c
deleted file mode 100644
index 19015ca..0000000
--- a/tests/show-die-info.c
+++ /dev/null
@@ -1,525 +0,0 @@
-/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2006 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <config.h>
-
-#include <dwarf.h>
-#include <inttypes.h>
-#include <libelf.h>
-#include ELFUTILS_HEADER(dw)
-#include <fcntl.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-
-
-static const char *tagnames[] =
-{
- [DW_TAG_array_type] = "DW_TAG_array_type",
- [DW_TAG_class_type] = "DW_TAG_class_type",
- [DW_TAG_entry_point] = "DW_TAG_entry_point",
- [DW_TAG_enumeration_type] = "DW_TAG_enumeration_type",
- [DW_TAG_formal_parameter] = "DW_TAG_formal_parameter",
- [DW_TAG_imported_declaration] = "DW_TAG_imported_declaration",
- [DW_TAG_label] = "DW_TAG_label",
- [DW_TAG_lexical_block] = "DW_TAG_lexical_block",
- [DW_TAG_member] = "DW_TAG_member",
- [DW_TAG_pointer_type] = "DW_TAG_pointer_type",
- [DW_TAG_reference_type] = "DW_TAG_reference_type",
- [DW_TAG_compile_unit] = "DW_TAG_compile_unit",
- [DW_TAG_string_type] = "DW_TAG_string_type",
- [DW_TAG_structure_type] = "DW_TAG_structure_type",
- [DW_TAG_subroutine_type] = "DW_TAG_subroutine_type",
- [DW_TAG_typedef] = "DW_TAG_typedef",
- [DW_TAG_union_type] = "DW_TAG_union_type",
- [DW_TAG_unspecified_parameters] = "DW_TAG_unspecified_parameters",
- [DW_TAG_variant] = "DW_TAG_variant",
- [DW_TAG_common_block] = "DW_TAG_common_block",
- [DW_TAG_common_inclusion] = "DW_TAG_common_inclusion",
- [DW_TAG_inheritance] = "DW_TAG_inheritance",
- [DW_TAG_inlined_subroutine] = "DW_TAG_inlined_subroutine",
- [DW_TAG_module] = "DW_TAG_module",
- [DW_TAG_ptr_to_member_type] = "DW_TAG_ptr_to_member_type",
- [DW_TAG_set_type] = "DW_TAG_set_type",
- [DW_TAG_subrange_type] = "DW_TAG_subrange_type",
- [DW_TAG_with_stmt] = "DW_TAG_with_stmt",
- [DW_TAG_access_declaration] = "DW_TAG_access_declaration",
- [DW_TAG_base_type] = "DW_TAG_base_type",
- [DW_TAG_catch_block] = "DW_TAG_catch_block",
- [DW_TAG_const_type] = "DW_TAG_const_type",
- [DW_TAG_constant] = "DW_TAG_constant",
- [DW_TAG_enumerator] = "DW_TAG_enumerator",
- [DW_TAG_file_type] = "DW_TAG_file_type",
- [DW_TAG_friend] = "DW_TAG_friend",
- [DW_TAG_namelist] = "DW_TAG_namelist",
- [DW_TAG_namelist_item] = "DW_TAG_namelist_item",
- [DW_TAG_packed_type] = "DW_TAG_packed_type",
- [DW_TAG_subprogram] = "DW_TAG_subprogram",
- [DW_TAG_template_type_parameter] = "DW_TAG_template_type_parameter",
- [DW_TAG_template_value_parameter] = "DW_TAG_template_value_parameter",
- [DW_TAG_thrown_type] = "DW_TAG_thrown_type",
- [DW_TAG_try_block] = "DW_TAG_try_block",
- [DW_TAG_variant_part] = "DW_TAG_variant_part",
- [DW_TAG_variable] = "DW_TAG_variable",
- [DW_TAG_volatile_type] = "DW_TAG_volatile_type",
- [DW_TAG_dwarf_procedure] = "DW_TAG_dwarf_procedure",
- [DW_TAG_restrict_type] = "DW_TAG_restrict_type",
- [DW_TAG_interface_type] = "DW_TAG_interface_type",
- [DW_TAG_namespace] = "DW_TAG_namespace",
- [DW_TAG_imported_module] = "DW_TAG_imported_module",
- [DW_TAG_unspecified_type] = "DW_TAG_unspecified_type",
- [DW_TAG_partial_unit] = "DW_TAG_partial_unit",
- [DW_TAG_imported_unit] = "DW_TAG_imported_unit",
- [DW_TAG_mutable_type] = "DW_TAG_mutable_type",
- [DW_TAG_condition] = "DW_TAG_condition",
- [DW_TAG_shared_type] = "DW_TAG_shared_type",
-};
-#define ntagnames (sizeof (tagnames) / sizeof (tagnames[0]))
-
-
-const struct
-{
- int code;
- const char *name;
-} attrs[] =
-{
- { DW_AT_sibling, "sibling" },
- { DW_AT_location, "location" },
- { DW_AT_name, "name" },
- { DW_AT_ordering, "ordering" },
- { DW_AT_subscr_data, "subscr_data" },
- { DW_AT_byte_size, "byte_size" },
- { DW_AT_bit_offset, "bit_offset" },
- { DW_AT_bit_size, "bit_size" },
- { DW_AT_element_list, "element_list" },
- { DW_AT_stmt_list, "stmt_list" },
- { DW_AT_low_pc, "low_pc" },
- { DW_AT_high_pc, "high_pc" },
- { DW_AT_language, "language" },
- { DW_AT_member, "member" },
- { DW_AT_discr, "discr" },
- { DW_AT_discr_value, "discr_value" },
- { DW_AT_visibility, "visibility" },
- { DW_AT_import, "import" },
- { DW_AT_string_length, "string_length" },
- { DW_AT_common_reference, "common_reference" },
- { DW_AT_comp_dir, "comp_dir" },
- { DW_AT_const_value, "const_value" },
- { DW_AT_containing_type, "containing_type" },
- { DW_AT_default_value, "default_value" },
- { DW_AT_inline, "inline" },
- { DW_AT_is_optional, "is_optional" },
- { DW_AT_lower_bound, "lower_bound" },
- { DW_AT_producer, "producer" },
- { DW_AT_prototyped, "prototyped" },
- { DW_AT_return_addr, "return_addr" },
- { DW_AT_start_scope, "start_scope" },
- { DW_AT_bit_stride, "bit_stride" },
- { DW_AT_upper_bound, "upper_bound" },
- { DW_AT_abstract_origin, "abstract_origin" },
- { DW_AT_accessibility, "accessibility" },
- { DW_AT_address_class, "address_class" },
- { DW_AT_artificial, "artificial" },
- { DW_AT_base_types, "base_types" },
- { DW_AT_calling_convention, "calling_convention" },
- { DW_AT_count, "count" },
- { DW_AT_data_member_location, "data_member_location" },
- { DW_AT_decl_column, "decl_column" },
- { DW_AT_decl_file, "decl_file" },
- { DW_AT_decl_line, "decl_line" },
- { DW_AT_declaration, "declaration" },
- { DW_AT_discr_list, "discr_list" },
- { DW_AT_encoding, "encoding" },
- { DW_AT_external, "external" },
- { DW_AT_frame_base, "frame_base" },
- { DW_AT_friend, "friend" },
- { DW_AT_identifier_case, "identifier_case" },
- { DW_AT_macro_info, "macro_info" },
- { DW_AT_namelist_item, "namelist_item" },
- { DW_AT_priority, "priority" },
- { DW_AT_segment, "segment" },
- { DW_AT_specification, "specification" },
- { DW_AT_static_link, "static_link" },
- { DW_AT_type, "type" },
- { DW_AT_use_location, "use_location" },
- { DW_AT_variable_parameter, "variable_parameter" },
- { DW_AT_virtuality, "virtuality" },
- { DW_AT_vtable_elem_location, "vtable_elem_location" },
- { DW_AT_allocated, "allocated" },
- { DW_AT_associated, "associated" },
- { DW_AT_data_location, "data_location" },
- { DW_AT_byte_stride, "byte_stride" },
- { DW_AT_entry_pc, "entry_pc" },
- { DW_AT_use_UTF8, "use_UTF8" },
- { DW_AT_extension, "extension" },
- { DW_AT_ranges, "ranges" },
- { DW_AT_trampoline, "trampoline" },
- { DW_AT_call_column, "call_column" },
- { DW_AT_call_file, "call_file" },
- { DW_AT_call_line, "call_line" },
- { DW_AT_description, "description" },
- { DW_AT_binary_scale, "binary_scale" },
- { DW_AT_decimal_scale, "decimal_scale" },
- { DW_AT_small, "small" },
- { DW_AT_decimal_sign, "decimal_sign" },
- { DW_AT_digit_count, "digit_count" },
- { DW_AT_picture_string, "picture_string" },
- { DW_AT_mutable, "mutable" },
- { DW_AT_threads_scaled, "threads_scaled" },
- { DW_AT_explicit, "explicit" },
- { DW_AT_object_pointer, "object_pointer" },
- { DW_AT_endianity, "endianity" },
- { DW_AT_elemental, "elemental" },
- { DW_AT_pure, "pure" },
- { DW_AT_recursive, "recursive" },
- { DW_AT_MIPS_fde, "MIPS_fde" },
- { DW_AT_MIPS_loop_begin, "MIPS_loop_begin" },
- { DW_AT_MIPS_tail_loop_begin, "MIPS_tail_loop_begin" },
- { DW_AT_MIPS_epilog_begin, "MIPS_epilog_begin" },
- { DW_AT_MIPS_loop_unroll_factor, "MIPS_loop_unroll_factor" },
- { DW_AT_MIPS_software_pipeline_depth, "MIPS_software_pipeline_depth" },
- { DW_AT_MIPS_linkage_name, "MIPS_linkage_name" },
- { DW_AT_MIPS_stride, "MIPS_stride" },
- { DW_AT_MIPS_abstract_name, "MIPS_abstract_name" },
- { DW_AT_MIPS_clone_origin, "MIPS_clone_origin" },
- { DW_AT_MIPS_has_inlines, "MIPS_has_inlines" },
- { DW_AT_MIPS_stride_byte, "MIPS_stride_byte" },
- { DW_AT_MIPS_stride_elem, "MIPS_stride_elem" },
- { DW_AT_MIPS_ptr_dopetype, "MIPS_ptr_dopetype" },
- { DW_AT_MIPS_allocatable_dopetype, "MIPS_allocatable_dopetype" },
- { DW_AT_MIPS_assumed_shape_dopetype, "MIPS_assumed_shape_dopetype" },
- { DW_AT_MIPS_assumed_size, "MIPS_assumed_size" },
- { DW_AT_sf_names, "sf_names" },
- { DW_AT_src_info, "src_info" },
- { DW_AT_mac_info, "mac_info" },
- { DW_AT_src_coords, "src_coords" },
- { DW_AT_body_begin, "body_begin" },
- { DW_AT_body_end, "body_end" },
-};
-#define nattrs (sizeof (attrs) / sizeof (attrs[0]))
-
-
-void
-handle (Dwarf *dbg, Dwarf_Die *die, int n)
-{
- Dwarf_Die child;
- unsigned int tag;
- const char *str;
- char buf[30];
- const char *name;
- Dwarf_Off off;
- Dwarf_Off cuoff;
- size_t cnt;
- Dwarf_Addr addr;
- int i;
-
- tag = dwarf_tag (die);
- if (tag != DW_TAG_invalid)
- {
- if (tag < ntagnames)
- str = tagnames[tag];
- else
- {
- snprintf (buf, sizeof buf, "%#x", tag);
- str = buf;
- }
- }
- else
- str = "* NO TAG *";
-
- name = dwarf_diename (die);
- if (name == 0)
- name = "* NO NAME *";
-
- off = dwarf_dieoffset (die);
- cuoff = dwarf_cuoffset (die);
-
- printf ("%*s%s\n", n * 5, "", str);
- printf ("%*s Name : %s\n", n * 5, "", name);
- printf ("%*s Offset : %lld\n", n * 5, "", (long long int) off);
- printf ("%*s CU offset : %lld\n", n * 5, "", (long long int) cuoff);
-
- printf ("%*s Attrs :", n * 5, "");
- for (cnt = 0; cnt < nattrs; ++cnt)
- if (dwarf_hasattr (die, attrs[cnt].code))
- printf (" %s", attrs[cnt].name);
- puts ("");
-
- if (dwarf_hasattr (die, DW_AT_low_pc) && dwarf_lowpc (die, &addr) == 0)
- {
- Dwarf_Attribute attr;
- Dwarf_Addr addr2;
- printf ("%*s low PC : %#llx\n",
- n * 5, "", (unsigned long long int) addr);
-
- if (dwarf_attr (die, DW_AT_low_pc, &attr) == NULL
- || dwarf_formaddr (&attr, &addr2) != 0
- || addr != addr2)
- puts ("************* DW_AT_low_pc verify failed ************");
- else if (! dwarf_hasform (&attr, DW_FORM_addr))
- puts ("************* DW_AT_low_pc form failed ************");
- else if (dwarf_whatform (&attr) != DW_FORM_addr)
- puts ("************* DW_AT_low_pc form (2) failed ************");
- else if (dwarf_whatattr (&attr) != DW_AT_low_pc)
- puts ("************* DW_AT_low_pc attr failed ************");
- }
- if (dwarf_hasattr (die, DW_AT_high_pc) && dwarf_highpc (die, &addr) == 0)
- {
- Dwarf_Attribute attr;
- Dwarf_Addr addr2;
- printf ("%*s high PC : %#llx\n",
- n * 5, "", (unsigned long long int) addr);
- if (dwarf_attr (die, DW_AT_high_pc, &attr) == NULL
- || dwarf_formaddr (&attr, &addr2) != 0
- || addr != addr2)
- puts ("************* DW_AT_high_pc verify failed ************");
- else if (! dwarf_hasform (&attr, DW_FORM_addr))
- puts ("************* DW_AT_high_pc form failed ************");
- else if (dwarf_whatform (&attr) != DW_FORM_addr)
- puts ("************* DW_AT_high_pc form (2) failed ************");
- else if (dwarf_whatattr (&attr) != DW_AT_high_pc)
- puts ("************* DW_AT_high_pc attr failed ************");
- }
-
- if (dwarf_hasattr (die, DW_AT_byte_size) && (i = dwarf_bytesize (die)) != -1)
- {
- Dwarf_Attribute attr;
- Dwarf_Word u2;
- unsigned int u;
- printf ("%*s byte size : %d\n", n * 5, "", i);
- if (dwarf_attr (die, DW_AT_byte_size, &attr) == NULL
- || dwarf_formudata (&attr, &u2) != 0
- || i != (int) u2)
- puts ("************* DW_AT_byte_size verify failed ************");
- else if (! dwarf_hasform (&attr, DW_FORM_data1)
- && ! dwarf_hasform (&attr, DW_FORM_data2)
- && ! dwarf_hasform (&attr, DW_FORM_data4)
- && ! dwarf_hasform (&attr, DW_FORM_data8)
- && ! dwarf_hasform (&attr, DW_FORM_sdata)
- && ! dwarf_hasform (&attr, DW_FORM_udata))
- puts ("************* DW_AT_byte_size form failed ************");
- else if ((u = dwarf_whatform (&attr)) == 0
- || (u != DW_FORM_data1
- && u != DW_FORM_data2
- && u != DW_FORM_data4
- && u != DW_FORM_data8
- && u != DW_FORM_sdata
- && u != DW_FORM_udata))
- puts ("************* DW_AT_byte_size form (2) failed ************");
- else if (dwarf_whatattr (&attr) != DW_AT_byte_size)
- puts ("************* DW_AT_byte_size attr failed ************");
- }
- if (dwarf_hasattr (die, DW_AT_bit_size) && (i = dwarf_bitsize (die)) != -1)
- {
- Dwarf_Attribute attr;
- Dwarf_Word u2;
- unsigned int u;
- printf ("%*s bit size : %d\n", n * 5, "", i);
- if (dwarf_attr (die, DW_AT_bit_size, &attr) == NULL
- || dwarf_formudata (&attr, &u2) != 0
- || i != (int) u2)
- puts ("************* DW_AT_bit_size test failed ************");
- else if (! dwarf_hasform (&attr, DW_FORM_data1)
- && ! dwarf_hasform (&attr, DW_FORM_data2)
- && ! dwarf_hasform (&attr, DW_FORM_data4)
- && ! dwarf_hasform (&attr, DW_FORM_data8)
- && ! dwarf_hasform (&attr, DW_FORM_sdata)
- && ! dwarf_hasform (&attr, DW_FORM_udata))
- puts ("************* DW_AT_bit_size form failed ************");
- else if ((u = dwarf_whatform (&attr)) == 0
- || (u != DW_FORM_data1
- && u != DW_FORM_data2
- && u != DW_FORM_data4
- && u != DW_FORM_data8
- && u != DW_FORM_sdata
- && u != DW_FORM_udata))
- puts ("************* DW_AT_bit_size form (2) failed ************");
- else if (dwarf_whatattr (&attr) != DW_AT_bit_size)
- puts ("************* DW_AT_bit_size attr failed ************");
- }
- if (dwarf_hasattr (die, DW_AT_bit_offset)
- && (i = dwarf_bitoffset (die)) != -1)
- {
- Dwarf_Attribute attr;
- Dwarf_Word u2;
- unsigned int u;
- printf ("%*s bit offset: %d\n", n * 5, "", i);
- if (dwarf_attr (die, DW_AT_bit_offset, &attr) == NULL
- || dwarf_formudata (&attr, &u2) != 0
- || i != (int) u2)
- puts ("************* DW_AT_bit_offset test failed ************");
- else if (! dwarf_hasform (&attr, DW_FORM_data1)
- && ! dwarf_hasform (&attr, DW_FORM_data2)
- && ! dwarf_hasform (&attr, DW_FORM_data4)
- && ! dwarf_hasform (&attr, DW_FORM_data8)
- && ! dwarf_hasform (&attr, DW_FORM_sdata)
- && ! dwarf_hasform (&attr, DW_FORM_udata))
- puts ("************* DW_AT_bit_offset form failed ************");
- else if ((u = dwarf_whatform (&attr)) == 0
- || (u != DW_FORM_data1
- && u != DW_FORM_data2
- && u != DW_FORM_data4
- && u != DW_FORM_data8
- && u != DW_FORM_sdata
- && u != DW_FORM_udata))
- puts ("************* DW_AT_bit_offset form (2) failed ************");
- else if (dwarf_whatattr (&attr) != DW_AT_bit_offset)
- puts ("************* DW_AT_bit_offset attr failed ************");
- }
-
- if (dwarf_hasattr (die, DW_AT_language) && (i = dwarf_srclang (die)) != -1)
- {
- Dwarf_Attribute attr;
- Dwarf_Word u2;
- unsigned int u;
- printf ("%*s language : %d\n", n * 5, "", i);
- if (dwarf_attr (die, DW_AT_language, &attr) == NULL
- || dwarf_formudata (&attr, &u2) != 0
- || i != (int) u2)
- puts ("************* DW_AT_language test failed ************");
- else if (! dwarf_hasform (&attr, DW_FORM_data1)
- && ! dwarf_hasform (&attr, DW_FORM_data2)
- && ! dwarf_hasform (&attr, DW_FORM_data4)
- && ! dwarf_hasform (&attr, DW_FORM_data8)
- && ! dwarf_hasform (&attr, DW_FORM_sdata)
- && ! dwarf_hasform (&attr, DW_FORM_udata))
- puts ("************* DW_AT_language form failed ************");
- else if ((u = dwarf_whatform (&attr)) == 0
- || (u != DW_FORM_data1
- && u != DW_FORM_data2
- && u != DW_FORM_data4
- && u != DW_FORM_data8
- && u != DW_FORM_sdata
- && u != DW_FORM_udata))
- puts ("************* DW_AT_language form (2) failed ************");
- else if (dwarf_whatattr (&attr) != DW_AT_language)
- puts ("************* DW_AT_language attr failed ************");
- }
-
- if (dwarf_hasattr (die, DW_AT_ordering)
- && (i = dwarf_arrayorder (die)) != -1)
- {
- Dwarf_Attribute attr;
- Dwarf_Word u2;
- unsigned int u;
- printf ("%*s ordering : %d\n", n * 5, "", i);
- if (dwarf_attr (die, DW_AT_ordering, &attr) == NULL
- || dwarf_formudata (&attr, &u2) != 0
- || i != (int) u2)
- puts ("************* DW_AT_ordering test failed ************");
- else if (! dwarf_hasform (&attr, DW_FORM_data1)
- && ! dwarf_hasform (&attr, DW_FORM_data2)
- && ! dwarf_hasform (&attr, DW_FORM_data4)
- && ! dwarf_hasform (&attr, DW_FORM_data8)
- && ! dwarf_hasform (&attr, DW_FORM_sdata)
- && ! dwarf_hasform (&attr, DW_FORM_udata))
- puts ("************* DW_AT_ordering failed ************");
- else if ((u = dwarf_whatform (&attr)) == 0
- || (u != DW_FORM_data1
- && u != DW_FORM_data2
- && u != DW_FORM_data4
- && u != DW_FORM_data8
- && u != DW_FORM_sdata
- && u != DW_FORM_udata))
- puts ("************* DW_AT_ordering form (2) failed ************");
- else if (dwarf_whatattr (&attr) != DW_AT_ordering)
- puts ("************* DW_AT_ordering attr failed ************");
- }
-
- if (dwarf_hasattr (die, DW_AT_comp_dir))
- {
- Dwarf_Attribute attr;
- if (dwarf_attr (die, DW_AT_comp_dir, &attr) == NULL
- || (name = dwarf_formstring (&attr)) == NULL)
- puts ("************* DW_AT_comp_dir attr failed ************");
- else
- printf ("%*s directory : %s\n", n * 5, "", name);
- }
-
- if (dwarf_hasattr (die, DW_AT_producer))
- {
- Dwarf_Attribute attr;
- if (dwarf_attr (die, DW_AT_producer, &attr) == NULL
- || (name = dwarf_formstring (&attr)) == NULL)
- puts ("************* DW_AT_comp_dir attr failed ************");
- else
- printf ("%*s producer : %s\n", n * 5, "", name);
- }
-
- if (dwarf_haschildren (die) != 0 && dwarf_child (die, &child) == 0)
- handle (dbg, &child, n + 1);
- if (dwarf_siblingof (die, die) == 0)
- handle (dbg, die, n);
-}
-
-
-int
-main (int argc, char *argv[])
-{
- int cnt;
-
- for (cnt = 1; cnt < argc; ++cnt)
- {
- int fd = open (argv[cnt], O_RDONLY);
- Dwarf *dbg;
-
- printf ("file: %s\n", basename (argv[cnt]));
-
- dbg = dwarf_begin (fd, DWARF_C_READ);
- if (dbg == NULL)
- {
- printf ("%s not usable\n", argv[cnt]);
- close (fd);
- continue;
- }
-
- Dwarf_Off off = 0;
- Dwarf_Off old_off = 0;
- size_t hsize;
- Dwarf_Off abbrev;
- uint8_t addresssize;
- uint8_t offsetsize;
- while (dwarf_nextcu (dbg, off, &off, &hsize, &abbrev, &addresssize,
- &offsetsize) == 0)
- {
- printf ("New CU: off = %llu, hsize = %zu, ab = %llu, as = %" PRIu8
- ", os = %" PRIu8 "\n",
- (unsigned long long int) old_off, hsize,
- (unsigned long long int) abbrev, addresssize,
- offsetsize);
-
- Dwarf_Die die;
- if (dwarf_offdie (dbg, old_off + hsize, &die) != NULL)
- handle (dbg, &die, 1);
-
- old_off = off;
- }
-
- dwarf_end (dbg);
- close (fd);
- }
-
- return 0;
-}
diff --git a/tests/showptable.c b/tests/showptable.c
deleted file mode 100644
index bae17f3..0000000
--- a/tests/showptable.c
+++ /dev/null
@@ -1,147 +0,0 @@
-/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 1998.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <config.h>
-
-#include <errno.h>
-#include <fcntl.h>
-#include <gelf.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-int
-main (int argc, char *argv[])
-{
- Elf *elf;
- int fd;
- GElf_Ehdr ehdr;
- int cnt;
-
- if (argc < 2)
- {
- puts ("missing parameter");
- exit (1);
- }
-
- fd = open (argv[1], O_RDONLY);
- if (fd == -1)
- {
- printf ("cannot open \"%s\": %s\n", argv[1], strerror (errno));
- exit (1);
- }
-
- elf_version (EV_CURRENT);
-
- elf = elf_begin (fd, ELF_C_READ, NULL);
- if (elf == NULL)
- {
- printf ("cannot open ELF file: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- if (elf_kind (elf) != ELF_K_ELF)
- {
- printf ("\"%s\" is not an ELF file\n", argv[1]);
- exit (1);
- }
-
- if (gelf_getehdr (elf, &ehdr) == NULL)
- {
- printf ("cannot get the ELF header: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- printf ("idx type %*s %*s %*s %*s %*s align flags\n",
- gelf_getclass (elf) == ELFCLASS32 ? 9 : 17, "offset",
- gelf_getclass (elf) == ELFCLASS32 ? 10 : 18, "vaddr",
- gelf_getclass (elf) == ELFCLASS32 ? 10 : 18, "paddr",
- gelf_getclass (elf) == ELFCLASS32 ? 9 : 12, "filesz",
- gelf_getclass (elf) == ELFCLASS32 ? 9 : 12, "memsz");
-
- for (cnt = 0; cnt < ehdr.e_phnum; ++cnt)
- {
- static const char *typenames[] =
- {
- [PT_NULL] = "NULL",
- [PT_LOAD] = "LOAD",
- [PT_DYNAMIC] = "DYNAMIC",
- [PT_INTERP] = "INTERP",
- [PT_NOTE] = "NOTE",
- [PT_SHLIB] = "SHLIB",
- [PT_PHDR] = "PHDR"
- };
- GElf_Phdr mem;
- GElf_Phdr *phdr = gelf_getphdr (elf, cnt, &mem);
- char buf[19];
- const char *p_type = typenames[phdr->p_type];
-
- /* If we don't know the name of the type we use the number value. */
- if (phdr->p_type >= PT_NUM)
- {
- snprintf (buf, sizeof (buf), "%x", phdr->p_type);
- p_type = buf;
- }
-
- printf ("%3d %-7s %#0*llx %#0*llx %#0*llx %#0*llx %#0*llx %#6llx ",
- cnt, p_type,
- gelf_getclass (elf) == ELFCLASS32 ? 9 : 17,
- (unsigned long long int) phdr->p_offset,
- gelf_getclass (elf) == ELFCLASS32 ? 10 : 18,
- (unsigned long long int) phdr->p_vaddr,
- gelf_getclass (elf) == ELFCLASS32 ? 10 : 18,
- (unsigned long long int) phdr->p_paddr,
- gelf_getclass (elf) == ELFCLASS32 ? 9 : 12,
- (unsigned long long int) phdr->p_filesz,
- gelf_getclass (elf) == ELFCLASS32 ? 9 : 12,
- (unsigned long long int) phdr->p_memsz,
- (unsigned long long int) phdr->p_align);
-
- putc_unlocked ((phdr->p_flags & PF_X) ? 'X' : ' ', stdout);
- putc_unlocked ((phdr->p_flags & PF_W) ? 'W' : ' ', stdout);
- putc_unlocked ((phdr->p_flags & PF_R) ? 'R' : ' ', stdout);
-
- putc_unlocked ('\n', stdout);
-
- if (phdr->p_type == PT_INTERP)
- {
- /* We can show the user the name of the interpreter. */
- size_t maxsize;
- char *filedata = elf_rawfile (elf, &maxsize);
-
- if (filedata != NULL && phdr->p_offset < maxsize)
- printf ("\t[Requesting program interpreter: %s]\n",
- filedata + phdr->p_offset);
- }
- }
-
- if (elf_end (elf) != 0)
- {
- printf ("error while freeing ELF descriptor: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- return 0;
-}
diff --git a/tests/test-nlist.c b/tests/test-nlist.c
deleted file mode 100644
index f73955f..0000000
--- a/tests/test-nlist.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/* Copyright (C) 2000, 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#include <nlist.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-
-int var = 1;
-
-int bss;
-
-
-int
-foo (int a)
-{
- return a;
-}
-
-int
-main (int argc, char *argv[] __attribute__ ((unused)))
-{
- struct nlist nl[6] =
- {
- [0] = { .n_name = "var" },
- [1] = { .n_name = "bss" },
- [2] = { .n_name = "main" },
- [3] = { .n_name = "foo" },
- [4] = { .n_name = "not-there" },
- [5] = { .n_name = NULL },
- };
- int cnt;
- int result = 0;
-
- if (nlist (".libs/test-nlist", nl) != 0
- && nlist ("./test-nlist", nl) != 0)
- {
- puts ("nlist failed");
- exit (1);
- }
-
- for (cnt = 0; nl[cnt].n_name != NULL; ++cnt)
- {
- if (argc > 1)
- /* For debugging. */
- printf ("nl[%d].n_name = \"%s\"\n"
- "nl[%d].n_value = %ld\n"
- "nl[%d].n_scnum = %d\n"
- "nl[%d].n_type = %u\n"
- "nl[%d].n_sclass = %d\n"
- "nl[%d].n_numaux = %d\n\n",
- cnt, nl[cnt].n_name,
- cnt, nl[cnt].n_value,
- cnt, nl[cnt].n_scnum,
- cnt, nl[cnt].n_type,
- cnt, nl[cnt].n_sclass,
- cnt, nl[cnt].n_numaux);
-
- if ((cnt != 4 && nl[cnt].n_value == 0 && nl[cnt].n_scnum == 0
- && nl[cnt].n_type == 0 && nl[cnt].n_sclass == 0
- && nl[cnt].n_numaux == 0)
- || (cnt == 4 && (nl[cnt].n_value != 0 || nl[cnt].n_scnum != 0
- || nl[cnt].n_type != 0 || nl[cnt].n_sclass != 0
- || nl[cnt].n_numaux != 0)))
- result = 1;
- }
-
- return foo (result);
-}
diff --git a/tests/test-subr.sh b/tests/test-subr.sh
deleted file mode 100644
index cb34b93..0000000
--- a/tests/test-subr.sh
+++ /dev/null
@@ -1,112 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2005, 2007, 2008 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-
-# This file is sourced by ". $srcdir/test-subr.sh" at the start of
-# each test script. It defines some functions they use and sets up
-# canonical sh state for test runs.
-
-set -e
-
-#LC_ALL=C
-#export LC_ALL
-
-remove_files=
-trap 'rm -f $remove_files' 0
-
-tempfiles()
-{
- remove_files="$remove_files $*"
-}
-
-testfiles()
-{
- for file; do
- bunzip2 -c $srcdir/${file}.bz2 > ${file} 2>/dev/null || exit 77
- remove_files="$remove_files $file"
- done
-}
-
-testrun_out()
-{
- outfile="$1"
- shift
- remove_files="$remove_files $outfile"
- testrun "$@" > $outfile 2>&1 || :
-}
-
-testrun_compare()
-{
- outfile="${1##*/}.out"
- testrun_out $outfile "$@"
- diff -u $outfile -
- # diff's exit status will kill the script.
-}
-
-test_cleanup()
-{
- rm -f $remove_files
- remove_files=
-}
-
-# See test-wrapper.sh, which sets the environment for this.
-testrun()
-{
- ${elfutils_testrun}_testrun "$@"
-}
-
-built_testrun()
-{
- LD_LIBRARY_PATH="${built_library_path}${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH"\
- "$@"
-}
-
-installed_testrun()
-{
- program="$1"
- shift
- case "$program" in
- ./*)
- if [ "x$elfutils_tests_rpath" != xno ]; then
- echo >&2 installcheck not possible with --enable-tests-rpath
- exit 77
- fi
- ;;
- ../*)
- program=${bindir}/`program_transform ${program##*/}`
- ;;
- esac
- if [ "${libdir}" != /usr/lib ] && [ "${libdir}" != /usr/lib64 ]; then
- LD_LIBRARY_PATH="${libdir}${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH" \
- $program ${1+"$@"}
- else
- $program ${1+"$@"}
- fi
-}
-
-program_transform()
-{
- echo "$*" | sed "${program_transform_name}"
-}
diff --git a/tests/test-wrapper.sh b/tests/test-wrapper.sh
deleted file mode 100755
index 3477e38..0000000
--- a/tests/test-wrapper.sh
+++ /dev/null
@@ -1,68 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2005 Red Hat, Inc.
-# This file is part of Red Hat elfutils.
-#
-# Red Hat elfutils is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# Red Hat elfutils 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Red Hat elfutils; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-#
-# Red Hat elfutils is an included package of the Open Invention Network.
-# An included package of the Open Invention Network is a package for which
-# Open Invention Network licensees cross-license their patents. No patent
-# license is granted, either expressly or impliedly, by designation as an
-# included package. Should you wish to participate in the Open Invention
-# Network licensing program, please visit www.openinventionnetwork.com
-# <http://www.openinventionnetwork.com>.
-
-
-# We don't compile in an rpath because we want "make installcheck" to
-# use the installed libraries. So for local test runs we need to point
-# the library path at this build.
-
-# This wrapper script is called by the makefile, in one of two ways:
-# $(srcdir)/test-wrapper.sh ../libelf:... run-test.sh ...
-# or:
-# $(srcdir)/test-wrapper.sh installed s,^,eu-, run-test.sh ...
-
-if [ "$1" = installed ]; then
- shift
- elfutils_tests_rpath=$1
- shift
- program_transform_name="$1"
- shift
- elfutils_testrun=installed
-else
- built_library_path="$1"
- shift
- elfutils_testrun=built
-fi
-
-case "$1" in
-*.sh)
- export built_library_path program_transform_name elfutils_testrun
- export elfutils_tests_rpath
- ;;
-*)
- if [ $elfutils_testrun = built ]; then
- LD_LIBRARY_PATH="$built_library_path${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH"
- export LD_LIBRARY_PATH
- elif [ $elfutils_tests_rpath = yes ]; then
- echo >&2 installcheck not possible with --enable-tests-rpath
- exit 77
- elif [ "x$libdir" != x/usr/lib ] && [ "x$libdir" != x/usr/lib64 ]; then
- LD_LIBRARY_PATH="$libdir${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH"
- export LD_LIBRARY_PATH
- fi
- ;;
-esac
-
-exec "$@"
diff --git a/tests/testfile.bz2 b/tests/testfile.bz2
deleted file mode 100644
index bde9b12..0000000
--- a/tests/testfile.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile10.bz2 b/tests/testfile10.bz2
deleted file mode 100644
index e9dd504..0000000
--- a/tests/testfile10.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile11.bz2 b/tests/testfile11.bz2
deleted file mode 100644
index d094b84..0000000
--- a/tests/testfile11.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile12.bz2 b/tests/testfile12.bz2
deleted file mode 100644
index 8bb5ad3..0000000
--- a/tests/testfile12.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile13.bz2 b/tests/testfile13.bz2
deleted file mode 100644
index 3b0bcb9..0000000
--- a/tests/testfile13.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile14.bz2 b/tests/testfile14.bz2
deleted file mode 100644
index ac7c69e..0000000
--- a/tests/testfile14.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile15.bz2 b/tests/testfile15.bz2
deleted file mode 100644
index e75f457..0000000
--- a/tests/testfile15.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile15.debug.bz2 b/tests/testfile15.debug.bz2
deleted file mode 100644
index 5c86900..0000000
--- a/tests/testfile15.debug.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile16.bz2 b/tests/testfile16.bz2
deleted file mode 100644
index 4d7160c..0000000
--- a/tests/testfile16.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile16.debug.bz2 b/tests/testfile16.debug.bz2
deleted file mode 100644
index f02a972..0000000
--- a/tests/testfile16.debug.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile17.bz2 b/tests/testfile17.bz2
deleted file mode 100644
index 5a12320..0000000
--- a/tests/testfile17.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile17.debug.bz2 b/tests/testfile17.debug.bz2
deleted file mode 100644
index 86a76ab..0000000
--- a/tests/testfile17.debug.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile18.bz2 b/tests/testfile18.bz2
deleted file mode 100644
index 8b5326c..0000000
--- a/tests/testfile18.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile19.bz2 b/tests/testfile19.bz2
deleted file mode 100644
index f3e6512..0000000
--- a/tests/testfile19.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile19.index.bz2 b/tests/testfile19.index.bz2
deleted file mode 100644
index c0a0a7a..0000000
--- a/tests/testfile19.index.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile2.bz2 b/tests/testfile2.bz2
deleted file mode 100644
index 0771311..0000000
--- a/tests/testfile2.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile20.bz2 b/tests/testfile20.bz2
deleted file mode 100644
index a379f6b..0000000
--- a/tests/testfile20.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile20.index.bz2 b/tests/testfile20.index.bz2
deleted file mode 100644
index 08dedaf..0000000
--- a/tests/testfile20.index.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile21.bz2 b/tests/testfile21.bz2
deleted file mode 100644
index bab7e6d..0000000
--- a/tests/testfile21.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile21.index.bz2 b/tests/testfile21.index.bz2
deleted file mode 100644
index 5192219..0000000
--- a/tests/testfile21.index.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile22.bz2 b/tests/testfile22.bz2
deleted file mode 100644
index 8c26270..0000000
--- a/tests/testfile22.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile23.bz2 b/tests/testfile23.bz2
deleted file mode 100644
index cf0ce55..0000000
--- a/tests/testfile23.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile24.bz2 b/tests/testfile24.bz2
deleted file mode 100644
index 2320acb..0000000
--- a/tests/testfile24.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile25.bz2 b/tests/testfile25.bz2
deleted file mode 100644
index 51e0421..0000000
--- a/tests/testfile25.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile26.bz2 b/tests/testfile26.bz2
deleted file mode 100644
index 1f86285..0000000
--- a/tests/testfile26.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile27.bz2 b/tests/testfile27.bz2
deleted file mode 100644
index 9d06cd9..0000000
--- a/tests/testfile27.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile28.bz2 b/tests/testfile28.bz2
deleted file mode 100644
index ca0dff3..0000000
--- a/tests/testfile28.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile28.rdwr.bz2 b/tests/testfile28.rdwr.bz2
deleted file mode 100644
index 4c65848..0000000
--- a/tests/testfile28.rdwr.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile29.bz2 b/tests/testfile29.bz2
deleted file mode 100644
index b46451b..0000000
--- a/tests/testfile29.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile29.rdwr.bz2 b/tests/testfile29.rdwr.bz2
deleted file mode 100644
index 42eadc7..0000000
--- a/tests/testfile29.rdwr.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile3.bz2 b/tests/testfile3.bz2
deleted file mode 100644
index 30a456c..0000000
--- a/tests/testfile3.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile30.bz2 b/tests/testfile30.bz2
deleted file mode 100644
index 9ee93c0..0000000
--- a/tests/testfile30.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile31.bz2 b/tests/testfile31.bz2
deleted file mode 100644
index 73451d2..0000000
--- a/tests/testfile31.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile32.bz2 b/tests/testfile32.bz2
deleted file mode 100644
index 7e3c73e..0000000
--- a/tests/testfile32.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile33.bz2 b/tests/testfile33.bz2
deleted file mode 100644
index f3dbc73..0000000
--- a/tests/testfile33.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile34.bz2 b/tests/testfile34.bz2
deleted file mode 100644
index a417fcb..0000000
--- a/tests/testfile34.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile35.bz2 b/tests/testfile35.bz2
deleted file mode 100644
index b591301..0000000
--- a/tests/testfile35.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile35.debug.bz2 b/tests/testfile35.debug.bz2
deleted file mode 100644
index f191862..0000000
--- a/tests/testfile35.debug.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile36.bz2 b/tests/testfile36.bz2
deleted file mode 100644
index e912a19..0000000
--- a/tests/testfile36.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile36.debug.bz2 b/tests/testfile36.debug.bz2
deleted file mode 100644
index 76aca42..0000000
--- a/tests/testfile36.debug.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile37.bz2 b/tests/testfile37.bz2
deleted file mode 100644
index 254ce32..0000000
--- a/tests/testfile37.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile37.debug.bz2 b/tests/testfile37.debug.bz2
deleted file mode 100644
index 74e46a8..0000000
--- a/tests/testfile37.debug.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile38.bz2 b/tests/testfile38.bz2
deleted file mode 100644
index 42adb77..0000000
--- a/tests/testfile38.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile39.bz2 b/tests/testfile39.bz2
deleted file mode 100644
index 42d0fbc..0000000
--- a/tests/testfile39.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile4.bz2 b/tests/testfile4.bz2
deleted file mode 100644
index 25b25df..0000000
--- a/tests/testfile4.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile40.bz2 b/tests/testfile40.bz2
deleted file mode 100644
index ad41985..0000000
--- a/tests/testfile40.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile40.debug.bz2 b/tests/testfile40.debug.bz2
deleted file mode 100644
index 2eec4d7..0000000
--- a/tests/testfile40.debug.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile41.bz2 b/tests/testfile41.bz2
deleted file mode 100644
index f9bf5a4..0000000
--- a/tests/testfile41.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile42.bz2 b/tests/testfile42.bz2
deleted file mode 100644
index 2530aba..0000000
--- a/tests/testfile42.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile43.bz2 b/tests/testfile43.bz2
deleted file mode 100644
index c99db24..0000000
--- a/tests/testfile43.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile44.S.bz2 b/tests/testfile44.S.bz2
deleted file mode 100644
index fb401e5..0000000
--- a/tests/testfile44.S.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile44.expect.bz2 b/tests/testfile44.expect.bz2
deleted file mode 100644
index 9e50462..0000000
--- a/tests/testfile44.expect.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile45.S.bz2 b/tests/testfile45.S.bz2
deleted file mode 100644
index 58bb16b..0000000
--- a/tests/testfile45.S.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile45.expect.bz2 b/tests/testfile45.expect.bz2
deleted file mode 100644
index 2cf60b7..0000000
--- a/tests/testfile45.expect.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile46.bz2 b/tests/testfile46.bz2
deleted file mode 100644
index db83b27..0000000
--- a/tests/testfile46.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile47.bz2 b/tests/testfile47.bz2
deleted file mode 100644
index 334bd6c..0000000
--- a/tests/testfile47.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile48.bz2 b/tests/testfile48.bz2
deleted file mode 100644
index da0d9da..0000000
--- a/tests/testfile48.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile48.debug.bz2 b/tests/testfile48.debug.bz2
deleted file mode 100644
index 7b84c4c..0000000
--- a/tests/testfile48.debug.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile49.bz2 b/tests/testfile49.bz2
deleted file mode 100644
index 8741a6b..0000000
--- a/tests/testfile49.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile5.bz2 b/tests/testfile5.bz2
deleted file mode 100644
index 247313e..0000000
--- a/tests/testfile5.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile6.bz2 b/tests/testfile6.bz2
deleted file mode 100644
index fd376b2..0000000
--- a/tests/testfile6.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile7.bz2 b/tests/testfile7.bz2
deleted file mode 100644
index 73452bb..0000000
--- a/tests/testfile7.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile8.bz2 b/tests/testfile8.bz2
deleted file mode 100644
index 1ff4994..0000000
--- a/tests/testfile8.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/testfile9.bz2 b/tests/testfile9.bz2
deleted file mode 100644
index 40454bc..0000000
--- a/tests/testfile9.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/update1.c b/tests/update1.c
deleted file mode 100644
index 6c038c9..0000000
--- a/tests/update1.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/* Test program for elf_update function.
- Copyright (C) 2000, 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <errno.h>
-#include <fcntl.h>
-#include <libelf.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-
-int
-main (int argc, char *argv[] __attribute__ ((unused)))
-{
- const char *fname = "xxx";
- int fd;
- Elf *elf;
- Elf32_Ehdr *ehdr;
- int i;
-
- fd = open (fname, O_RDWR | O_CREAT | O_TRUNC, 0666);
- if (fd == -1)
- {
- printf ("cannot open `%s': %s\n", fname, strerror (errno));
- exit (1);
- }
-
- elf_version (EV_CURRENT);
-
- elf = elf_begin (fd, ELF_C_WRITE, NULL);
- if (elf == NULL)
- {
- printf ("cannot create ELF descriptor: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- /* Create an ELF header. */
- ehdr = elf32_newehdr (elf);
- if (ehdr == NULL)
- {
- printf ("cannot create ELF header: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- /* Print the ELF header values. */
- if (argc > 1)
- {
- for (i = 0; i < EI_NIDENT; ++i)
- printf (" %02x", ehdr->e_ident[i]);
- printf ("\
-\ntype = %hu\nmachine = %hu\nversion = %u\nentry = %u\nphoff = %u\n"
- "shoff = %u\nflags = %u\nehsize = %hu\nphentsize = %hu\n"
- "phnum = %hu\nshentsize = %hu\nshnum = %hu\nshstrndx = %hu\n",
- ehdr->e_type, ehdr->e_machine, ehdr->e_version, ehdr->e_entry,
- ehdr->e_phoff, ehdr->e_shoff, ehdr->e_flags, ehdr->e_ehsize,
- ehdr->e_phentsize, ehdr->e_phnum, ehdr->e_shentsize,
- ehdr->e_shnum, ehdr->e_shstrndx);
- }
-
- ehdr->e_ident[0] = 42;
- ehdr->e_ident[4] = 1;
- ehdr->e_ident[5] = 1;
- ehdr->e_ident[6] = 2;
- ehdr->e_ident[9] = 2;
- ehdr->e_version = 1;
- ehdr->e_ehsize = 1;
-
- /* Write out the file. */
- if (elf_update (elf, ELF_C_WRITE) < 0)
- {
- printf ("failure in elf_update: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- /* Create an ELF header. */
- ehdr = elf32_newehdr (elf);
- if (ehdr == NULL)
- {
- printf ("cannot create ELF header: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- /* Print the ELF header values. */
- if (argc > 1)
- {
- for (i = 0; i < EI_NIDENT; ++i)
- printf (" %02x", ehdr->e_ident[i]);
- printf ("\
-\ntype = %hu\nmachine = %hu\nversion = %u\nentry = %u\nphoff = %u\n"
- "shoff = %u\nflags = %u\nehsize = %hu\nphentsize = %hu\n"
- "phnum = %hu\nshentsize = %hu\nshnum = %hu\nshstrndx = %hu\n",
- ehdr->e_type, ehdr->e_machine, ehdr->e_version, ehdr->e_entry,
- ehdr->e_phoff, ehdr->e_shoff, ehdr->e_flags, ehdr->e_ehsize,
- ehdr->e_phentsize, ehdr->e_phnum, ehdr->e_shentsize,
- ehdr->e_shnum, ehdr->e_shstrndx);
- }
-
- if (elf_end (elf) != 0)
- {
- printf ("failure in elf_end: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- return 0;
-}
diff --git a/tests/update2.c b/tests/update2.c
deleted file mode 100644
index 330e731..0000000
--- a/tests/update2.c
+++ /dev/null
@@ -1,155 +0,0 @@
-/* Test program for elf_update function.
- Copyright (C) 2000, 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <errno.h>
-#include <fcntl.h>
-#include <libelf.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-
-int
-main (int argc, char *argv[] __attribute__ ((unused)))
-{
- const char *fname = "xxx";
- int fd;
- Elf *elf;
- Elf32_Ehdr *ehdr;
- Elf32_Phdr *phdr;
- int i;
-
- fd = open (fname, O_RDWR | O_CREAT | O_TRUNC, 0666);
- if (fd == -1)
- {
- printf ("cannot open `%s': %s\n", fname, strerror (errno));
- exit (1);
- }
-
- elf_version (EV_CURRENT);
-
- elf = elf_begin (fd, ELF_C_WRITE, NULL);
- if (elf == NULL)
- {
- printf ("cannot create ELF descriptor: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- /* Create an ELF header. */
- ehdr = elf32_newehdr (elf);
- if (ehdr == NULL)
- {
- printf ("cannot create ELF header: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- /* Print the ELF header values. */
- if (argc > 1)
- {
- for (i = 0; i < EI_NIDENT; ++i)
- printf (" %02x", ehdr->e_ident[i]);
- printf ("\
-\ntype = %hu\nmachine = %hu\nversion = %u\nentry = %u\nphoff = %u\n"
- "shoff = %u\nflags = %u\nehsize = %hu\nphentsize = %hu\n"
- "phnum = %hu\nshentsize = %hu\nshnum = %hu\nshstrndx = %hu\n",
- ehdr->e_type, ehdr->e_machine, ehdr->e_version, ehdr->e_entry,
- ehdr->e_phoff, ehdr->e_shoff, ehdr->e_flags, ehdr->e_ehsize,
- ehdr->e_phentsize, ehdr->e_phnum, ehdr->e_shentsize,
- ehdr->e_shnum, ehdr->e_shstrndx);
- }
-
- ehdr->e_ident[0] = 42;
- ehdr->e_ident[4] = 1;
- ehdr->e_ident[5] = 1;
- ehdr->e_ident[6] = 2;
- ehdr->e_type = ET_EXEC;
- ehdr->e_version = 1;
- ehdr->e_ehsize = 1;
- elf_flagehdr (elf, ELF_C_SET, ELF_F_DIRTY);
-
- /* Create the program header. */
- phdr = elf32_newphdr (elf, 1);
- if (phdr == NULL)
- {
- printf ("cannot create program header: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- phdr[0].p_type = PT_PHDR;
- elf_flagphdr (elf, ELF_C_SET, ELF_F_DIRTY);
-
- /* Let the library compute the internal structure information. */
- if (elf_update (elf, ELF_C_NULL) < 0)
- {
- printf ("failure in elf_update(NULL): %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- ehdr = elf32_getehdr (elf);
-
- phdr[0].p_offset = ehdr->e_phoff;
- phdr[0].p_offset = ehdr->e_phoff;
- phdr[0].p_vaddr = ehdr->e_phoff;
- phdr[0].p_paddr = ehdr->e_phoff;
- phdr[0].p_flags = PF_R | PF_X;
- phdr[0].p_filesz = ehdr->e_phnum * elf32_fsize (ELF_T_PHDR, 1, EV_CURRENT);
- phdr[0].p_memsz = ehdr->e_phnum * elf32_fsize (ELF_T_PHDR, 1, EV_CURRENT);
- phdr[0].p_align = sizeof (Elf32_Word);
-
- /* Write out the file. */
- if (elf_update (elf, ELF_C_WRITE) < 0)
- {
- printf ("failure in elf_update(WRITE): %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- /* Print the ELF header values. */
- if (argc > 1)
- {
- for (i = 0; i < EI_NIDENT; ++i)
- printf (" %02x", ehdr->e_ident[i]);
- printf ("\
-\ntype = %hu\nmachine = %hu\nversion = %u\nentry = %u\nphoff = %u\n"
- "shoff = %u\nflags = %u\nehsize = %hu\nphentsize = %hu\n"
- "phnum = %hu\nshentsize = %hu\nshnum = %hu\nshstrndx = %hu\n",
- ehdr->e_type, ehdr->e_machine, ehdr->e_version, ehdr->e_entry,
- ehdr->e_phoff, ehdr->e_shoff, ehdr->e_flags, ehdr->e_ehsize,
- ehdr->e_phentsize, ehdr->e_phnum, ehdr->e_shentsize,
- ehdr->e_shnum, ehdr->e_shstrndx);
- }
-
- if (elf_end (elf) != 0)
- {
- printf ("failure in elf_end: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- return 0;
-}
diff --git a/tests/update3.c b/tests/update3.c
deleted file mode 100644
index 756d015..0000000
--- a/tests/update3.c
+++ /dev/null
@@ -1,210 +0,0 @@
-/* Test program for elf_update function.
- Copyright (C) 2000, 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <errno.h>
-#include <fcntl.h>
-#include <libelf.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include ELFUTILS_HEADER(ebl)
-
-
-int
-main (int argc, char *argv[] __attribute__ ((unused)))
-{
- const char *fname = "xxx";
- int fd;
- Elf *elf;
- Elf32_Ehdr *ehdr;
- Elf32_Phdr *phdr;
- Elf_Scn *scn;
- Elf32_Shdr *shdr;
- Elf_Data *data;
- struct Ebl_Strtab *shst;
- struct Ebl_Strent *shstrtabse;
- int i;
-
- fd = open (fname, O_RDWR | O_CREAT | O_TRUNC, 0666);
- if (fd == -1)
- {
- printf ("cannot open `%s': %s\n", fname, strerror (errno));
- exit (1);
- }
-
- elf_version (EV_CURRENT);
-
- elf_fill (0x42);
-
- elf = elf_begin (fd, ELF_C_WRITE, NULL);
- if (elf == NULL)
- {
- printf ("cannot create ELF descriptor: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- /* Create an ELF header. */
- ehdr = elf32_newehdr (elf);
- if (ehdr == NULL)
- {
- printf ("cannot create ELF header: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- /* Print the ELF header values. */
- if (argc > 1)
- {
- for (i = 0; i < EI_NIDENT; ++i)
- printf (" %02x", ehdr->e_ident[i]);
- printf ("\
-\ntype = %hu\nmachine = %hu\nversion = %u\nentry = %u\nphoff = %u\n"
- "shoff = %u\nflags = %u\nehsize = %hu\nphentsize = %hu\n"
- "phnum = %hu\nshentsize = %hu\nshnum = %hu\nshstrndx = %hu\n",
- ehdr->e_type, ehdr->e_machine, ehdr->e_version, ehdr->e_entry,
- ehdr->e_phoff, ehdr->e_shoff, ehdr->e_flags, ehdr->e_ehsize,
- ehdr->e_phentsize, ehdr->e_phnum, ehdr->e_shentsize,
- ehdr->e_shnum, ehdr->e_shstrndx);
- }
-
- ehdr->e_ident[0] = 42;
- ehdr->e_ident[4] = 1;
- ehdr->e_ident[5] = 1;
- ehdr->e_ident[6] = 2;
- ehdr->e_type = ET_EXEC;
- ehdr->e_version = 1;
- ehdr->e_ehsize = 1;
- elf_flagehdr (elf, ELF_C_SET, ELF_F_DIRTY);
-
- /* Create the program header. */
- phdr = elf32_newphdr (elf, 1);
- if (phdr == NULL)
- {
- printf ("cannot create program header: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- phdr[0].p_type = PT_PHDR;
- elf_flagphdr (elf, ELF_C_SET, ELF_F_DIRTY);
-
- shst = ebl_strtabinit (true);
-
- scn = elf_newscn (elf);
- if (scn == NULL)
- {
- printf ("cannot create SHSTRTAB section: %s\n", elf_errmsg (-1));
- exit (1);
- }
- shdr = elf32_getshdr (scn);
- if (shdr == NULL)
- {
- printf ("cannot get header for SHSTRTAB section: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- shstrtabse = ebl_strtabadd (shst, ".shstrtab", 0);
-
- shdr->sh_type = SHT_STRTAB;
- shdr->sh_flags = 0;
- shdr->sh_addr = 0;
- shdr->sh_link = SHN_UNDEF;
- shdr->sh_info = SHN_UNDEF;
- shdr->sh_addralign = 1;
- shdr->sh_entsize = 0;
-
- /* We have to store the section index in the ELF header. */
- ehdr->e_shstrndx = elf_ndxscn (scn);
-
- data = elf_newdata (scn);
- if (data == NULL)
- {
- printf ("cannot create data SHSTRTAB section: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- /* No more sections, finalize the section header string table. */
- ebl_strtabfinalize (shst, data);
-
- shdr->sh_name = ebl_strtaboffset (shstrtabse);
-
- /* Let the library compute the internal structure information. */
- if (elf_update (elf, ELF_C_NULL) < 0)
- {
- printf ("failure in elf_update(NULL): %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- ehdr = elf32_getehdr (elf);
-
- phdr[0].p_offset = ehdr->e_phoff;
- phdr[0].p_offset = ehdr->e_phoff;
- phdr[0].p_vaddr = ehdr->e_phoff;
- phdr[0].p_paddr = ehdr->e_phoff;
- phdr[0].p_flags = PF_R | PF_X;
- phdr[0].p_filesz = ehdr->e_phnum * elf32_fsize (ELF_T_PHDR, 1, EV_CURRENT);
- phdr[0].p_memsz = ehdr->e_phnum * elf32_fsize (ELF_T_PHDR, 1, EV_CURRENT);
- phdr[0].p_align = sizeof (Elf32_Word);
-
- /* Write out the file. */
- if (elf_update (elf, ELF_C_WRITE) < 0)
- {
- printf ("failure in elf_update(WRITE): %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- /* We don't need the string table anymore. */
- ebl_strtabfree (shst);
-
- /* And the data allocated in the .shstrtab section. */
- free (data->d_buf);
-
- /* Print the ELF header values. */
- if (argc > 1)
- {
- for (i = 0; i < EI_NIDENT; ++i)
- printf (" %02x", ehdr->e_ident[i]);
- printf ("\
-\ntype = %hu\nmachine = %hu\nversion = %u\nentry = %u\nphoff = %u\n"
- "shoff = %u\nflags = %u\nehsize = %hu\nphentsize = %hu\n"
- "phnum = %hu\nshentsize = %hu\nshnum = %hu\nshstrndx = %hu\n",
- ehdr->e_type, ehdr->e_machine, ehdr->e_version, ehdr->e_entry,
- ehdr->e_phoff, ehdr->e_shoff, ehdr->e_flags, ehdr->e_ehsize,
- ehdr->e_phentsize, ehdr->e_phnum, ehdr->e_shentsize,
- ehdr->e_shnum, ehdr->e_shstrndx);
- }
-
- if (elf_end (elf) != 0)
- {
- printf ("failure in elf_end: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- return 0;
-}
diff --git a/tests/update4.c b/tests/update4.c
deleted file mode 100644
index e426378..0000000
--- a/tests/update4.c
+++ /dev/null
@@ -1,365 +0,0 @@
-/* Test program for elf_update function.
- Copyright (C) 2000, 2001, 2002, 2005 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <errno.h>
-#include <fcntl.h>
-#include <libelf.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include ELFUTILS_HEADER(ebl)
-
-
-int
-main (int argc, char *argv[] __attribute__ ((unused)))
-{
- const char fname[] = "xxx";
- int fd;
- Elf *elf;
- Elf32_Ehdr *ehdr;
- Elf32_Phdr *phdr;
- Elf_Scn *scn;
- Elf32_Shdr *shdr;
- Elf_Data *data;
- struct Ebl_Strtab *shst;
- struct Ebl_Strent *firstse;
- struct Ebl_Strent *secondse;
- struct Ebl_Strent *thirdse;
- struct Ebl_Strent *fourthse;
- struct Ebl_Strent *shstrtabse;
- int i;
-
- fd = open (fname, O_RDWR | O_CREAT | O_TRUNC, 0666);
- if (fd == -1)
- {
- printf ("cannot open `%s': %s\n", fname, strerror (errno));
- exit (1);
- }
-
- elf_version (EV_CURRENT);
-
- elf_fill (0x42);
-
- elf = elf_begin (fd, ELF_C_WRITE, NULL);
- if (elf == NULL)
- {
- printf ("cannot create ELF descriptor: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- /* Create an ELF header. */
- ehdr = elf32_newehdr (elf);
- if (ehdr == NULL)
- {
- printf ("cannot create ELF header: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- /* Print the ELF header values. */
- if (argc > 1)
- {
- for (i = 0; i < EI_NIDENT; ++i)
- printf (" %02x", ehdr->e_ident[i]);
- printf ("\
-\ntype = %hu\nmachine = %hu\nversion = %u\nentry = %u\nphoff = %u\n"
- "shoff = %u\nflags = %u\nehsize = %hu\nphentsize = %hu\n"
- "phnum = %hu\nshentsize = %hu\nshnum = %hu\nshstrndx = %hu\n",
- ehdr->e_type, ehdr->e_machine, ehdr->e_version, ehdr->e_entry,
- ehdr->e_phoff, ehdr->e_shoff, ehdr->e_flags, ehdr->e_ehsize,
- ehdr->e_phentsize, ehdr->e_phnum, ehdr->e_shentsize,
- ehdr->e_shnum, ehdr->e_shstrndx);
- }
-
- ehdr->e_ident[0] = 42;
- ehdr->e_ident[4] = 1;
- ehdr->e_ident[5] = 1;
- ehdr->e_ident[6] = 2;
- ehdr->e_type = ET_EXEC;
- ehdr->e_version = 1;
- ehdr->e_ehsize = 1;
- elf_flagehdr (elf, ELF_C_SET, ELF_F_DIRTY);
-
- /* Create the program header. */
- phdr = elf32_newphdr (elf, 1);
- if (phdr == NULL)
- {
- printf ("cannot create program header: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- phdr[0].p_type = PT_PHDR;
- elf_flagphdr (elf, ELF_C_SET, ELF_F_DIRTY);
-
- shst = ebl_strtabinit (true);
-
- scn = elf_newscn (elf);
- if (scn == NULL)
- {
- printf ("cannot create first section: %s\n", elf_errmsg (-1));
- exit (1);
- }
- shdr = elf32_getshdr (scn);
- if (shdr == NULL)
- {
- printf ("cannot get header for first section: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- firstse = ebl_strtabadd (shst, ".first", 0);
-
- shdr->sh_type = SHT_PROGBITS;
- shdr->sh_flags = SHF_ALLOC | SHF_EXECINSTR;
- shdr->sh_addr = 0;
- shdr->sh_link = 0;
- shdr->sh_info = 0;
- shdr->sh_entsize = 1;
-
- data = elf_newdata (scn);
- if (data == NULL)
- {
- printf ("cannot create data first section: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- data->d_buf = "hello";
- data->d_type = ELF_T_BYTE;
- data->d_version = EV_CURRENT;
- data->d_size = 5;
- data->d_align = 16;
-
-
- scn = elf_newscn (elf);
- if (scn == NULL)
- {
- printf ("cannot create second section: %s\n", elf_errmsg (-1));
- exit (1);
- }
- shdr = elf32_getshdr (scn);
- if (shdr == NULL)
- {
- printf ("cannot get header for second section: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- secondse = ebl_strtabadd (shst, ".second", 0);
-
- shdr->sh_type = SHT_PROGBITS;
- shdr->sh_flags = SHF_ALLOC | SHF_WRITE;
- shdr->sh_addr = 0;
- shdr->sh_link = 0;
- shdr->sh_info = 0;
- shdr->sh_entsize = 1;
-
- data = elf_newdata (scn);
- if (data == NULL)
- {
- printf ("cannot create data second section: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- data->d_buf = "world";
- data->d_type = ELF_T_BYTE;
- data->d_version = EV_CURRENT;
- data->d_size = 5;
- data->d_align = 16;
-
-
- scn = elf_newscn (elf);
- if (scn == NULL)
- {
- printf ("cannot create third section: %s\n", elf_errmsg (-1));
- exit (1);
- }
- shdr = elf32_getshdr (scn);
- if (shdr == NULL)
- {
- printf ("cannot get header for third section: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- thirdse = ebl_strtabadd (shst, ".third", 0);
-
- shdr->sh_type = SHT_PROGBITS;
- shdr->sh_flags = SHF_ALLOC | SHF_EXECINSTR;
- shdr->sh_addr = 0;
- shdr->sh_link = 0;
- shdr->sh_info = 0;
- shdr->sh_entsize = 1;
-
- data = elf_newdata (scn);
- if (data == NULL)
- {
- printf ("cannot create data third section: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- data->d_buf = "!!!!!";
- data->d_type = ELF_T_BYTE;
- data->d_version = EV_CURRENT;
- data->d_size = 5;
- data->d_align = 16;
-
-
- scn = elf_newscn (elf);
- if (scn == NULL)
- {
- printf ("cannot create fourth section: %s\n", elf_errmsg (-1));
- exit (1);
- }
- shdr = elf32_getshdr (scn);
- if (shdr == NULL)
- {
- printf ("cannot get header for fourth section: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- fourthse = ebl_strtabadd (shst, ".fourth", 0);
-
- shdr->sh_type = SHT_NOBITS;
- shdr->sh_flags = SHF_ALLOC | SHF_EXECINSTR;
- shdr->sh_addr = 0;
- shdr->sh_link = 0;
- shdr->sh_info = 0;
- shdr->sh_entsize = 1;
- shdr->sh_size = 100;
-
- data = elf_newdata (scn);
- if (data == NULL)
- {
- printf ("cannot create data fourth section: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- data->d_buf = NULL;
- data->d_type = ELF_T_BYTE;
- data->d_version = EV_CURRENT;
- data->d_size = 100;
- data->d_align = 16;
-
-
- scn = elf_newscn (elf);
- if (scn == NULL)
- {
- printf ("cannot create SHSTRTAB section: %s\n", elf_errmsg (-1));
- exit (1);
- }
- shdr = elf32_getshdr (scn);
- if (shdr == NULL)
- {
- printf ("cannot get header for SHSTRTAB section: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- shstrtabse = ebl_strtabadd (shst, ".shstrtab", 0);
-
- shdr->sh_type = SHT_STRTAB;
- shdr->sh_flags = 0;
- shdr->sh_addr = 0;
- shdr->sh_link = SHN_UNDEF;
- shdr->sh_info = SHN_UNDEF;
- shdr->sh_entsize = 1;
-
- /* We have to store the section index in the ELF header. */
- ehdr->e_shstrndx = elf_ndxscn (scn);
-
- data = elf_newdata (scn);
- if (data == NULL)
- {
- printf ("cannot create data SHSTRTAB section: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- /* No more sections, finalize the section header string table. */
- ebl_strtabfinalize (shst, data);
-
- elf32_getshdr (elf_getscn (elf, 1))->sh_name = ebl_strtaboffset (firstse);
- elf32_getshdr (elf_getscn (elf, 2))->sh_name = ebl_strtaboffset (secondse);
- elf32_getshdr (elf_getscn (elf, 3))->sh_name = ebl_strtaboffset (thirdse);
- elf32_getshdr (elf_getscn (elf, 4))->sh_name = ebl_strtaboffset (fourthse);
- shdr->sh_name = ebl_strtaboffset (shstrtabse);
-
- /* Let the library compute the internal structure information. */
- if (elf_update (elf, ELF_C_NULL) < 0)
- {
- printf ("failure in elf_update(NULL): %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- ehdr = elf32_getehdr (elf);
-
- phdr[0].p_offset = ehdr->e_phoff;
- phdr[0].p_offset = ehdr->e_phoff;
- phdr[0].p_vaddr = ehdr->e_phoff;
- phdr[0].p_paddr = ehdr->e_phoff;
- phdr[0].p_flags = PF_R | PF_X;
- phdr[0].p_filesz = ehdr->e_phnum * elf32_fsize (ELF_T_PHDR, 1, EV_CURRENT);
- phdr[0].p_memsz = ehdr->e_phnum * elf32_fsize (ELF_T_PHDR, 1, EV_CURRENT);
- phdr[0].p_align = sizeof (Elf32_Word);
-
- /* Write out the file. */
- if (elf_update (elf, ELF_C_WRITE) < 0)
- {
- printf ("failure in elf_update(WRITE): %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- /* We don't need the string table anymore. */
- ebl_strtabfree (shst);
-
- /* And the data allocated in the .shstrtab section. */
- free (data->d_buf);
-
- /* Print the ELF header values. */
- if (argc > 1)
- {
- for (i = 0; i < EI_NIDENT; ++i)
- printf (" %02x", ehdr->e_ident[i]);
- printf ("\
-\ntype = %hu\nmachine = %hu\nversion = %u\nentry = %u\nphoff = %u\n"
- "shoff = %u\nflags = %u\nehsize = %hu\nphentsize = %hu\n"
- "phnum = %hu\nshentsize = %hu\nshnum = %hu\nshstrndx = %hu\n",
- ehdr->e_type, ehdr->e_machine, ehdr->e_version, ehdr->e_entry,
- ehdr->e_phoff, ehdr->e_shoff, ehdr->e_flags, ehdr->e_ehsize,
- ehdr->e_phentsize, ehdr->e_phnum, ehdr->e_shentsize,
- ehdr->e_shnum, ehdr->e_shstrndx);
- }
-
- if (elf_end (elf) != 0)
- {
- printf ("failure in elf_end: %s\n", elf_errmsg (-1));
- exit (1);
- }
-
- unlink (fname);
-
- return 0;
-}
diff --git a/version.h b/version.h
deleted file mode 100644
index d166419..0000000
--- a/version.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Version information about elfutils development libraries.
- Copyright (C) 2008 Red Hat, Inc.
- This file is part of Red Hat elfutils.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the
- additional right to link the code of Red Hat elfutils with code licensed
- under any Open Source Initiative certified open source license
- (http://www.opensource.org/licenses/index.php) which requires the
- distribution of source code with any binary distribution and to
- distribute linked combinations of the two. Non-GPL Code permitted under
- this exception must only link to the code of Red Hat elfutils through
- those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files
- of Non-GPL Code may instantiate templates or use macros or inline
- functions from the Approved Interfaces without causing the resulting
- work to be covered by the GNU General Public License. Only Red Hat,
- Inc. may make changes or additions to the list of Approved Interfaces.
- Red Hat's grant of this exception is conditioned upon your not adding
- any new exceptions. If you wish to add a new Approved Interface or
- exception, please contact Red Hat. You must obey the GNU General Public
- License in all respects for all of the Red Hat elfutils code and other
- code used in conjunction with Red Hat elfutils except the Non-GPL Code
- covered by this exception. If you modify this file, you may extend this
- exception to your version of the file, but you are not obligated to do
- so. If you do not wish to provide this exception without modification,
- you must delete this exception statement from your version and license
- this file solely under the GPL without exception.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifndef _ELFUTILS_VERSION_H
-#define _ELFUTILS_VERSION_H 1
-
-#define _ELFUTILS_VERSION 138
-
-#define _ELFUTILS_PREREQ(major, minor) \
- (_ELFUTILS_VERSION >= ((major) * 1000 + (minor)))
-
-#endif /* elfutils/version.h */